Skip to content

Advanced Classes

Exploring Beyond the Structure Class

This section provides a glimpse into some advanced classes and functionalities. Please note that Simmate is still in its early development stages, and there are many more features available through the PyMatGen and MatMiner packages, which were installed alongside Simmate.


If you're attempting to follow a paper and analyze a structure, chances are there's a class/function already created for that analysis! Make sure to explore the full guides or simply post a question and we'll direct you to the right path.

Example 1: Creating Structures

Currently, Simmate's toolkit is most effective for structure creation. This includes generating structures from random symmetry, prototype structures, and more. All we need to do is provide these "creator" classes with a composition object:

from simmate.toolkit import Composition
from simmate.toolkit.creators import RandomSymStructure

composition = Composition("Ca2N")
creator = RandomSymStructure(composition)

structure1 = creator.create_structure(spacegroup=166)
structure2 = creator.create_structure(spacegroup=225)

Example 2: Fingerprint Analysis

Matminer is especially useful for analyzing a structure's features and creating machine-learning inputs. A common analysis provides the structure's fingerprint, which aids in characterizing bonding in the crystal. The most basic fingerprint is the radial distribution function (rdf) -- it displays the distance between all atoms. We can take any structure object and feed it to a matminer Featurizer object:

from matminer.featurizers.structure.rdf import RadialDistributionFunction

rdf_analyzer = RadialDistributionFunction(bin_size=0.1)

rdf1 = rdf_analyzer.featurize(structure1)
rdf2 = rdf_analyzer.featurize(structure2)

We can also plot an RDF using python. Since Matminer doesn't currently offer a convenient way to plot this (with Simmate, there would be a show_plot() method), we can use this opportunity to learn how to plot things ourselves:

import matplotlib.pyplot as plt

# The x-axis ranges from 0.1 to 20 in steps of 0.1 (in Angstroms).
# Matminer doesn't provide a list of these values but
# we can generate it using this line.
rdf_x = [n/10 + 0.1 for n in range(0, 200)]

# Create a simple line plot with lists of (x,y) values
plt.plot(rdf_x, rdf1)

# Display the plot without any additional formatting or labels.

Example 3: Matching Structures

Pymatgen is currently the most extensive package and offers the most toolkit-like features. For instance, it's common to compare two structures to determine if they are symmetrically equivalent (within a given tolerance). You provide it with two structures, and it will return True or False based on whether they match:

from pymatgen.analysis.structure_matcher import StructureMatcher

matcher = StructureMatcher()

# Now let's compare our two random structures!
# This should return False. You can verify this in your Spyder variable explorer.
is_matching =, structure2)