Simulation
Manages a single simulation directory and its analyses.
Provides interfaces for saving/loading per-simulation metadata, managing analysis results, and executing registered analyses.
Attributes
attributeMETADATA_FILENAME= 'metadata.json'attributeANALYSIS_DIR= '.analysis'attributepathPath= Path(path).resolve()Simulation directory path (absolute)
attributestructure_file= self.path / Path(structure_file)attribute_trajectory_file= trajectory_fileattribute_completed_file= Path(completed_file)attribute_build_input= build_inputattribute_registryAnalysisRegistry | None= NoneAnalysisRegistry instance (lazy-loaded)
attributetrajectory_filePathGet trajectory file path, validating it exists.
attributestatusstrDetermine simulation status based on output files.
Status hierarchy (checked in order):
- "completed": completed_file exists (default: prod.gro)
- "production": trajectory_file exists (default: prod.xtc)
- "equilibrated": min.gro, nvt.gro, npt.gro all exist
- "build": system.pdb + valid BuildInput YAML exist
attributeuniversemda.UniverseMDAnalysis Universe for this simulation.
Requires trajectory file to exist.
attributebuild_inputBuildInputBuildInput instance loaded from YAML
attributemetadatadict[str, Any]Get metadata dict from BuildInput.
attributeanalysis_dirPathPath to .analysis directory.
attributeartifact_dirPathPath to .analysis/artifacts directory.
attributeregistryAnalysisRegistryLazy-load and return AnalysisRegistry instance.
Creates .analysis directory if needed.
Functions
func__init__(self, path, build_input=None, structure_file='system.pdb', trajectory_file='prod.xtc', completed_file='prod.gro') → NoneInitialize Simulation instance.
paramselfparampathPath | strSimulation directory path
parambuild_inputBuildInput | None= NoneOptional BuildInput (if None, will be loaded from YAML)
paramstructure_filePath | str= 'system.pdb'Structure filename (default: system.pdb)
paramtrajectory_filePath | str | None= 'prod.xtc'Trajectory filename (default: prod.xtc). Set to None for simulations without trajectory (e.g., build-only).
paramcompleted_filePath | str= 'prod.gro'File that indicates simulation completion (default: prod.gro). Used by the status property to determine if simulation is completed.
Returns
Nonefuncsave_metadata(self) → NoneSave per-simulation metadata.json.
Generates metadata from BuildInput and writes to disk.
paramselfReturns
Nonefuncload_metadata(self) → dict[str, Any]Load per-simulation metadata.json from disk.
paramselfReturns
dictMetadata dict
funcsave_analysis(self, name, df, **metadata_extras) → NoneSave analysis results to parquet and update registry.
Atomically updates both file and registry. If registry update fails, the parquet file is removed to maintain consistency.
paramselfparamnamestrAnalysis name (without .parquet extension)
paramdfpd.DataFrameDataFrame to save
parammetadata_extras= {}Returns
Nonefuncload_analysis(self, name) → pd.DataFrameLoad analysis results from parquet.
paramselfparamnamestrAnalysis name
Returns
pandas.DataFrameDataFrame with analysis results
funclist_analyses(self) → list[str]List available analyses from registry.
paramselfReturns
listSorted list of analysis names (empty if registry doesn't exist yet)
funclist_artifacts(self) → list[str]List available artifacts from registry.
paramselfReturns
listSorted list of artifact names (empty if registry doesn't exist yet)
funcrun_analysis(self, name, **kwargs) → pd.DataFrameRun analysis for this simulation using registered analysis function.
Executes the analysis function from ANALYSIS_REGISTRY, saves the result, and returns the DataFrame.
paramselfparamnamestrAnalysis name (must be registered for simulation type)
paramkwargs= {}Returns
pandas.DataFrameDataFrame with analysis results
funcsave_artifact(self, name, files, **metadata_extras) → list[Path]Save artifact files and update registry.
paramselfparamnamestrArtifact name
paramfilesPath | list[Path]File path or list of file paths to move
parammetadata_extras= {}Returns
listPaths to artifact files under .analysis
funcload_artifact(self, name) → list[Path]Load artifact file paths from registry.
paramselfparamnamestrArtifact name
Returns
listPaths to artifact files
funcrun_artifact(self, name, **kwargs) → list[Path]Run artifact producer for this simulation and save artifacts.
paramselfparamnamestrArtifact name registered for the simulation type
paramkwargs= {}Returns
listPaths to saved artifacts
funcremove_artifact(self, name) → NoneRemove artifact files and registry entry.
paramselfparamnamestrArtifact name to remove
Returns
Nonefunccheck_integrity(self) → dict[str, Any]Check integrity of simulation directory.
Verifies that required files exist and registry is consistent.
paramselfReturns
dictDict with:
- valid: bool - True if no issues found
- missing_metadata: bool - Per-simulation metadata.json missing
- missing_build_input: bool - BuildInput YAML missing
- registry_issues: dict - Issues from AnalysisRegistry.check_integrity()
funcdiscover_build_input(sim_dir) → BuildInputLoad BuildInput from YAML file in simulation directory.
Reuses logic from discover_simulations() - looks for *.yaml files and validates them as BuildInput.
paramsim_dirPathSimulation directory path
Returns
BuildInputBuildInput instance
funcremove_analysis(self, name) → NoneRemove analysis results and registry entry.
paramselfparamnamestrAnalysis name to remove
Returns
Nonefuncremove_all_analyses(self) → NoneRemove all analysis results and clear registry.
paramselfReturns
Nonefuncremove_all_artifacts(self) → NoneRemove all artifact files and clear registry.
paramselfReturns
None