schrodinger.application.transforms.macromodel module

MacroModel conformational search and minimization transforms.

This module provides Apache Beam transforms for running MacroModel conformational searches and energy minimizations on molecular structures.

class schrodinger.application.transforms.macromodel.MacroModelConfig(*, force_field: Literal['oplsaa2005', 'OPLS3e', 'OPLS4'] = 'oplsaa2005', minimizer: Literal['prcg', 'tncg', 'sd', 'lbfgs'] = 'prcg', max_minimization_steps: int = 50000, convergence_threshold: float = 0.05, use_solvation: bool = False, search_method: Optional[Literal['mcmm', 'lmod', 'llmd', 'spmc', 'cgen', 'mcmmlmod', 'mcmmllmd']] = None, steps: int = 1000, energy_window: float = 50.0, max_conformers: int = 0, random_seed: int = 0, crms_distance: float = 0.25, torsion_sampling: Literal['restricted', 'intermediate', 'enhanced', 'extended'] = 'intermediate')

Bases: BaseModel

Configuration for MacroModel transforms.

When search_method is set, runs a conformational search. When search_method is None, runs energy minimization only.

Parameters:
  • force_field – Force field for energy evaluation.

  • minimizer – Minimization algorithm.

  • max_minimization_steps – Maximum minimization iterations.

  • convergence_threshold – Gradient convergence threshold.

  • use_solvation – Enable GB/SA water solvation model.

  • search_method – Conformational search method (None = minimize only).

  • steps – Number of search steps.

  • energy_window – Energy window for conformer acceptance (kJ/mol).

  • max_conformers – Maximum conformers to keep (0 = no limit).

  • random_seed – Random seed (0 = random).

  • crms_distance – Max atom distance for duplicate detection (Angstroms).

  • torsion_sampling – Torsional sampling mode for conformational searches.

force_field: Literal['oplsaa2005', 'OPLS3e', 'OPLS4']
minimizer: Literal['prcg', 'tncg', 'sd', 'lbfgs']
max_minimization_steps: int
convergence_threshold: float
use_solvation: bool
search_method: Optional[Literal['mcmm', 'lmod', 'llmd', 'spmc', 'cgen', 'mcmmlmod', 'mcmmllmd']]
steps: int
energy_window: float
max_conformers: int
random_seed: int
crms_distance: float
torsion_sampling: Literal['restricted', 'intermediate', 'enhanced', 'extended']
model_config: ClassVar[ConfigDict] = {'frozen': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class schrodinger.application.transforms.macromodel.MacroModelResult(*, source_id: ~schrodinger.seam.io.sourceid.SourceID, input_structure: ~schrodinger.structure._structure.Structure, success: bool, output_structures: list[schrodinger.structure._structure.Structure] = <factory>, error_message: str | None = None)

Bases: BaseModel

Result of running MacroModel on a single structure.

For conformational searches, output_structures contains the conformers found. For minimization, it contains the single minimized structure (with energy stored as a structure property).

Parameters:
  • source_id – Source ID for tracking the input structure.

  • input_structure – The original input structure.

  • success – Whether the calculation succeeded.

  • output_structures – Output structures from the calculation.

  • error_message – Error message if the calculation failed.

source_id: SourceID
input_structure: Structure
success: bool
output_structures: list[Structure]
error_message: str | None
model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'frozen': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class schrodinger.application.transforms.macromodel.RunMacroModel(**kwargs)

Bases: PTransformWithConfig

Run MacroModel on each input structure and return results.

Structures are batched and processed together in a single bmin invocation for efficiency. Returns a MacroModelResult for every input, regardless of success or failure. For conformational searches, results contain multiple conformers. For minimization, results contain a single minimized structure.

Example usage:

>>> from schrodinger import adapter
>>> st = adapter.smiles_to_3d_structure('CCCCCC')
>>> with beam.Pipeline() as p:
...     results = (p
...         | beam.Create([st])
...         | RunMacroModel(search_method='mcmm', steps=500)
...         | beam.Map(lambda r: len(r.output_structures)))

See MacroModelConfig for all available options.

config_class

alias of MacroModelConfig

class schrodinger.application.transforms.macromodel.MacroModelConformerSearch(**kwargs)

Bases: PTransformWithConfig

Run a MacroModel conformational search and yield conformer structures.

Input structures must have 3D coordinates. Use LigPrep to generate 3D coordinates from SMILES or 2D structures.

This is a convenience wrapper around RunMacroModel that filters to successful results and yields each conformer as a separate structure.

Example usage:

>>> from schrodinger import adapter
>>> from schrodinger.application.transforms.chemio import WriteStructures
>>> st = adapter.smiles_to_3d_structure('CCCCCC')
>>> with beam.Pipeline() as p:
...     _ = (p
...         | beam.Create([st])
...         | MacroModelConformerSearch(search_method='mcmm', steps=500)
...         | WriteStructures('conformers.maegz'))

See MacroModelConfig for all available options.

config_class

alias of MacroModelConfig

class schrodinger.application.transforms.macromodel.MacroModelMinimize(**kwargs)

Bases: PTransformWithConfig

Run MacroModel minimization and yield minimized structures.

Input structures must have 3D coordinates. Use LigPrep to generate 3D coordinates from SMILES or 2D structures.

This is a convenience wrapper around RunMacroModel that filters to successful results and yields the minimized structure. Energy is stored as a structure property (r_mmod_Potential_Energy-*).

Example usage:

>>> from schrodinger import adapter
>>> from schrodinger.application.transforms.chemio import WriteStructures
>>> st = adapter.smiles_to_3d_structure('CCCCCC')
>>> with beam.Pipeline() as p:
...     _ = (p
...         | beam.Create([st])
...         | MacroModelMinimize(force_field='oplsaa2005')
...         | WriteStructures('minimized.maegz'))

See MacroModelConfig for all available options.

config_class

alias of MacroModelConfig

class schrodinger.application.transforms.macromodel.MultiPhaseConformerSearch(**kwargs)

Bases: PTransformWithConfig

Run conformer search in gas and water phases and merge results.

Example usage:

>>> from schrodinger import adapter
>>> st = adapter.smiles_to_3d_structure('CCCCCC')
>>> with beam.Pipeline() as p:
...     conformers = (p
...         | beam.Create([st])
...         | MultiPhaseConformerSearch(
...             search_method='lmod',
...             max_conformers=12))

See MacroModelConfig for available options.

config_class

alias of MacroModelConfig