Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Quick Start

This guide walks you through generating crystal structures using pre-trained models.

Download Pre-trained Models

Chemeleon2 provides pre-trained checkpoints via HuggingFace Hub. Below is a list of available models:

ModelDatasetDescription
mp_20_vaeMP-20pre-trained VAE trained on MP-20 dataset
alex_mp_20_vaeAlex-MP-20pre-trained VAE trained on Alexandria MP-20 dataset
mp_20_ldm_baseMP-20pre-trained LDM on MP-20 dataset
alex_mp_20_ldm_baseAlex-MP-20pre-trained LDM on Alexandria MP-20 dataset
mp_20_ldm_rlMP-20Fine-tuned LDM with RL for DNG rewards on MP-20 dataset
alex_mp_20_ldm_rlAlex-MP-20Fine-tuned LDM with RL for DNG rewards on Alexandria MP-20 dataset

Sample Crystal Structures

Using Python API

from src.sample import sample

# Sample 1000 structures with Default model trained with alex-mp-20
gen_atoms_list = sample(
    num_samples=1000, 
    batch_size=500, 
    output_dir="outputs/alex-mp-20",
)

# Each structure is an ASE Atoms object
from ase.visualize import view

view(gen_atoms_list[0], viewer="ngl")

Using Command Line

python src/sample.py \
    --num_samples=100 \
    --vae_ckpt_path=checkpoints/v0.0.1/alex_mp_20/vae/dng_j1jgz9t0_v1.ckpt \
    --ldm_ckpt_path=checkpoints/v0.0.1/alex_mp_20/ldm/ldm_rl_dng_tuor5vgd.ckpt \
    --output_dir="outputs/alex-mp-20-cli"

Evaluate Generated Structures

Calculate metastable Structure Uniqueness and Novelty (mSUN) to assess the quality of generated structures:

from monty.serialization import loadfn
from src.utils.metrics import Metrics

# Load generated structures from previous step
gen_structures = loadfn("outputs/alex-mp-20/generated_structures.json.gz")

# Initialize metrics calculator
metrics = Metrics(
    metrics=["unique", "novel", "e_above_hull"],
    reference_dataset="mp-20",
    phase_diagram="mp-all",
    metastable_threshold=0.1,
)

# Compute metrics
results = metrics.compute(gen_structures=gen_structures)

# Calculate mSUN score (percentage that are unique, novel, AND metastable)
msun_score = (
    results["unique"] & results["novel"] & results["is_metastable"]
).mean() * 100
print(f"mSUN Score: {msun_score:.2f}%")
print(f"Uniqueness: {results['unique'].mean():.2%}")
print(f"Novelty: {results['novel'].mean():.2%}")
print(f"Metastable: {results['is_metastable'].mean():.2%}")

# Convert to DataFrame for analysis
df = metrics.to_dataframe()
df.head()

# Save results to CSV
df.to_csv("outputs/alex-mp-20/metrics_results.csv")

For detailed metrics documentation, see the Evaluation Guide.

Interactive Tutorial

For a more detailed walkthrough, see the tutorial.ipynb notebook.

Next Steps