Source code for quscope.quantum_ctem.materials

"""
Material Definitions for Quantum CTEM Simulation.

This module provides material-specific parameters and structure builders
for quantum CTEM simulations. Currently supports:
- MoS₂ (Molybdenum disulfide) - 2D transition metal dichalcogenide
- Graphene - 2D carbon allotrope

Usage:
    from quscope.quantum_ctem.materials import get_material, MoS2, Graphene

    # Get material by name
    material = get_material("mos2")
    atoms = material.build_structure(nx=3, ny=2)
    potential = material.get_projected_potential(atoms, grid_size=256)

    # Or use directly
    graphene = Graphene()
    atoms = graphene.build_supercell(nx=5, ny=5)
"""

from .base import Material, MaterialParameters, AtomicScatteringParams
from .mos2 import MoS2
from .graphene import Graphene

# Material registry
_MATERIAL_REGISTRY = {
    "mos2": MoS2,
    "MoS2": MoS2,
    "molybdenum_disulfide": MoS2,
    "graphene": Graphene,
    "Graphene": Graphene,
    "carbon": Graphene,
}


[docs] def get_material(name: str, **kwargs) -> Material: """ Factory function to get a material instance. Args: name: Material name (e.g., "mos2", "graphene") **kwargs: Material-specific parameters Returns: Configured Material instance Examples: >>> material = get_material("mos2") >>> material = get_material("graphene", edge_type="zigzag") """ name_lower = name.lower().replace("-", "_").replace(" ", "_") if name_lower not in _MATERIAL_REGISTRY: available = ", ".join(set(k.lower() for k in _MATERIAL_REGISTRY.keys())) raise ValueError( f"Unknown material: {name}. Available: {available}" ) material_class = _MATERIAL_REGISTRY[name_lower] return material_class(**kwargs)
[docs] def list_materials() -> dict: """List all available materials with descriptions.""" return { "mos2": "Molybdenum disulfide (MoS₂) - 2D TMD semiconductor", "graphene": "Graphene - 2D carbon with honeycomb lattice", }
__all__ = [ "Material", "MaterialParameters", "AtomicScatteringParams", "MoS2", "Graphene", "get_material", "list_materials", ]