Compute E-Sol and return the annotated input structure.
Failed calculations are silently filtered out.
Example usage::
>>> from schrodinger import adapter
>>> st = adapter.smiles_to_3d_structure('CC(=O)O')
>>> with beam.Pipeline() as p:
... structures = (p
... | beam.Create([st])
... | AnnotateEsol())
See EsolConfig for available configuration options.
Input: Structure
Output: Structure
Literal'jaguar''jaguar', 'mlff'str'B3LYP'str'LACVP*'str'M06-2X'str'LACVP**'Literal'lmod''mcmm', 'lmod', 'llmd', 'spmc', 'cgen', 'mcmmlmod', 'mcmmllmd'float21.0int12int-5int5str'Organic_MPNICE_TB'boolFalseCalculate energies for structures using Jaguar. The energy is stored
as a property on each structure, which can be obtained using the ExtractJaguarEnergy transform
This is a backward-compatible wrapper around RunJaguar that a Structure. Raises FaultySystemFailure on failure. For resilient failure handling, use RunJaguar directly.
Example usage::
>>> with beam.Pipeline() as p:
... structures = p | beam.Create([water_structure])
... structures = structures | CalculateJaguarEnergy(optimize=False)
... energies = structures | ExtractJaguarEnergy
... energies | beam.Map(lambda x: print(f"Energy: {x} Hartrees"))
Input: Structure
Output: Structure
str'B3LYP'str'6-31G**'boolFalseGenerate conformers using the fast3d engine and yield conformer structures.
This is a convenience wrapper around RunFast3D that filters to
successful results and yields each conformer as a separate structure.
Example usage::
>>> from schrodinger import adapter
>>> from schrodinger.structure import count_structures
>>> from schrodinger.seam.io import chemio
>>> st = adapter.smiles_to_3d_structure('CCOc1ccccc1')
>>> phenyl_carbons = adapter.evaluate_smarts(st, 'c1ccccc1')[0]
>>> with beam.Pipeline() as p:
... _ = (
... p
... | beam.Create([st])
... | FastConfGen(max_conformers=10,
... frozen_atoms=phenyl_carbons,
... minimize=True)
... | chemio.WriteStructuresToFile('conformers.maegz')
... )
>>> assert count_structures('conformers.maegz') == 3
See Fast3DConfig for all available options.
Input: Structure
Output: Structure
int1000str | list[int] | NoneNoneLiteral'basic''basic', 'default'boolFalseLiteral10, 1, 2Literal'OPLS_2005''OPLS_2005', 'S-OPLS', 'SPFF'boolFalseboolFalseCreate RDKit Mol objects from a list of SMILES strings.
This is a source transform that creates molecules from SMILES.
Example usage in YAML::
pipeline:
- type: CreateMolsFromSmiles
config:
elements:
- "c1ccccc1"
- "CCO"
Output: Mol
Iterable[str]Create Structure objects from a list of SMILES strings.
This is a source transform that creates structures from SMILES.
Example usage in YAML::
pipeline:
- type: CreateStructuresFromSmiles
config:
elements:
- "c1ccccc1"
- "CCO"
Output: Structure
Iterable[str]Enumerate protonation states and annotate with derived pKa properties.
Example usage::
>>> from schrodinger import adapter
>>> st = adapter.to_structure('CC(=O)O')
>>> st.title = "acetic_acid"
>>> with beam.Pipeline() as p:
... structures = (p
... | beam.Create([st])
... | EpikXWithProps(ph=7.0)
... | beam.Map(lambda st: st.property.get('r_epik_Most_acidic_pKa'))
... | beam.LogElements())
See EpikXConfig for available configuration options.
Input: Structure
Output: Structure
str | NoneNonefloat7.4float2.0float | NoneNoneint16int8int200int500int-2int2float14.0float0.0boolFalseboolFalseboolFalseboolFalseboolFalseboolFalseboolFalseboolFalseboolTrueboolFalseboolFalsestr | NoneNoneboolFalsestr | NoneNoneboolFalseExtract a field from Row objects, yielding the field value.
This is useful when a transform expects a specific type (like Structure) but the pipeline uses Row objects. Extract the field before the transform, then optionally wrap it back in a Row after.
Example usage in YAML::
pipeline:
- type: ReadFromPDB
config:
pdb_codes:
- "1A2B"
- type: StructureToRow
- type: ExtractFieldFromRow
config:
field_name: "structure"
This would transform Row(structure=Structure(...), other=value) into
just the Structure object.
strA PTransform that filters molecules based on LigFilter criteria.
This is the YAML-facing transform that returns a plain PCollection of structures that passed the filter. For access to dropped records, use RunLigFilter directly.
Example usage with standard args::
>>> from schrodinger import adapter
>>> st1 = adapter.to_structure('c1ccccc1')
>>> st1.title = "benzene_fail"
>>> st2 = adapter.to_structure('CCO')
>>> st2.title = "ethanol_pass"
>>> with beam.Pipeline() as p:
... filtered_structures = (p
... | beam.Create([st1, st2])
... | FilterLigands(criteria=['Num_heavy_atoms==3'])
... | beam.Map(lambda st: st.title)
... | beam.LogElements())
ethanol_pass
Example usage with legacy arg string::
>>> from schrodinger import adapter
>>> st1 = adapter.to_structure('c1ccccc1')
>>> st1.title = "benzene_pass"
>>> st2 = adapter.to_structure('CCO')
>>> st2.title = "ethanol_fail"
>>> with beam.Pipeline() as p:
... filtered_structures = (p
... | beam.Create([st1, st2])
... | FilterLigands(legacy_arg_string='-e Num_heavy_atoms>3')
... | beam.Map(lambda st: st.title)
... | beam.LogElements())
Filtering criteria:
Num_heavy_atoms>3
benzene_pass
Input: Structure | Mol
Output: Structure
boolFalseboolFalselist[Criterion][]boolFalsestr | NoneNoneA PTransform that prepares ligands using LigPrep.
Returns an OutcomePCollections with: - main: PCollection[Structure] of prepared structures (with DerivedSourceIDs) - dropped: PCollection[DroppedRecord] of structures that produced no output
Example usage with explicit fields::
>>> from rdkit import Chem
>>> benzene = Chem.MolFromSmiles('c1ccccc1')
>>> with beam.Pipeline() as p:
... ligprepped_benzene = (p
... | beam.Create([benzene])
... | PrepareLigands(max_stereo=32)
... | beam.Map(adapter.to_smiles)
... | beam.LogElements())
c1ccccc1
Example usage with legacy arg string::
>>> from rdkit import Chem
>>> benzene = Chem.MolFromSmiles('c1ccccc1')
>>> with beam.Pipeline() as p:
... ligprepped_benzene = (p
... | beam.Create([benzene])
... | PrepareLigands(legacy_arg_string='-s 32')
... | beam.Map(adapter.to_smiles)
... | beam.LogElements())
c1ccccc1
Input: Structure | Mol
Output: Structure
boolFalseboolFalseboolFalseint | NoneNonefloat | NoneNonefloat | NoneNoneboolFalseint8int32boolFalseboolFalseLiteral1414, 16boolFalsestr''Annotated[Path, PathType(path_type='file')] | NoneNoneAnnotated[Path, PathType(path_type='file')] | NoneNonestr | NoneNoneRun 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.
Input: Structure
Output: Structure
Literal'oplsaa2005''oplsaa2005', 'OPLS3e', 'OPLS4'Literal'prcg''prcg', 'tncg', 'sd', 'lbfgs'int50000float0.05boolFalseLiteral | NoneNone'mcmm', 'lmod', 'llmd', 'spmc', 'cgen', 'mcmmlmod', 'mcmmllmd'int1000float50.0int0int0float0.25Literal'intermediate''restricted', 'intermediate', 'enhanced', 'extended'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.
Input: Structure
Output: Structure
Literal'oplsaa2005''oplsaa2005', 'OPLS3e', 'OPLS4'Literal'prcg''prcg', 'tncg', 'sd', 'lbfgs'int50000float0.05boolFalseLiteral | NoneNone'mcmm', 'lmod', 'llmd', 'spmc', 'cgen', 'mcmmlmod', 'mcmmllmd'int1000float50.0int0int0float0.25Literal'intermediate''restricted', 'intermediate', 'enhanced', 'extended'Group structures by their root SourceID (corporate compound ID).
See also application.transforms.sourceid for related transforms
that key/group by tagged ancestor SourceIDs.
Input: Structure
Output: tuple[Any, Iterable[Structure]]
AnyNoneSelect the best N structures per group by a structure property.
Example YAML usage::
- type: Models.GroupByCorpID
- type: Models.TakeBestOfGroup
config:
property: "r_i_docking_score"
n: 3
criteria: min
- type: Models.Ungroup
See TakeBestOfGroupConfig for all available configuration
options.
Input: tuple[Any, Iterable[Structure]]
Output: tuple[Any, Iterable[Structure]]
strint1SelectionCriteria'min''min', 'max'boolTrueFlatten grouped collections back into individual elements.
AnyNoneConvert RDKit Mol objects to SMILES strings.
Example usage in YAML::
pipeline:
- type: CreateMolsFromSmiles
config:
elements:
- "c1ccccc1"
- type: MolToSmiles
Input: Mol
Output: str
AnyNoneConvert RDKit Mol objects to Schrodinger Structure objects.
Example usage in YAML::
pipeline:
- type: CreateMolsFromSmiles
config:
elements:
- "c1ccccc1"
- type: MolToStructure
Input: Mol
Output: Structure
AnyNoneRun 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.
Input: Structure
Output: Structure
Literal'oplsaa2005''oplsaa2005', 'OPLS3e', 'OPLS4'Literal'prcg''prcg', 'tncg', 'sd', 'lbfgs'int50000float0.05boolFalseLiteral | NoneNone'mcmm', 'lmod', 'llmd', 'spmc', 'cgen', 'mcmmlmod', 'mcmmllmd'int1000float50.0int0int0float0.25Literal'intermediate''restricted', 'intermediate', 'enhanced', 'extended'Return the best neutral tautomer with state penalty annotated.
Raises RuntimeError if EpikX fails for any input structure.
Example usage::
>>> from schrodinger import adapter
>>> st = adapter.to_structure('CC(=O)O')
>>> with beam.Pipeline() as p:
... structures = (p
... | beam.Create([st])
... | Neutralize())
See EpikXConfig for available configuration options.
Input: Structure
Output: Structure
str | NoneNonefloat7.4float2.0float | NoneNoneint16int8int200int500int-2int2float14.0float0.0boolFalseboolFalseboolFalseboolFalseboolFalseboolFalseboolFalseboolFalseboolTrueboolFalseboolFalsestr | NoneNoneboolFalsestr | NoneNoneboolFalsePretty-print Beam Rows as JSON strings.
The expand configuration option controls the formatting:
expand is True, the JSON output is printed with indentation
across multiple lines.expand is False (default), the JSON output is compact and
printed on a single line.Example usage in YAML::
pipeline:
- type: ReadFileToStructures
config:
input_file: "ligands.maegz"
- type: StructureToRow
- type: PrettyPrint
config:
expand: true
boolFalseEnumerate protonation states and return output structures.
Example usage::
>>> from schrodinger import adapter
>>> st1 = adapter.to_structure('CC(=O)O')
>>> st1.title = "acetic_acid"
>>> with beam.Pipeline() as p:
... structures = (p
... | beam.Create([st1])
... | ProtonateLigands(ph=7.0)
... | beam.Map(lambda st: st.title)
... | beam.LogElements())
See EpikXConfig for available configuration options.
Input: Structure
Output: Structure
str | NoneNonefloat7.4float2.0float | NoneNoneint16int8int200int500int-2int2float14.0float0.0boolFalseboolFalseboolFalseboolFalseboolFalseboolFalseboolFalseboolFalseboolTrueboolFalseboolFalsestr | NoneNoneboolFalsestr | NoneNoneboolFalseA PTransform that computes QikProp ADME properties on structures.
Returns an OutcomePCollections with:
Example usage::
>>> with beam.Pipeline() as p:
... result = (p
... | beam.Create([st])
... | ComputeQikPropProperties(fast=True))
... structures_with_props = result.main
See QikPropConfig for all available configuration options.
Input: Structure
Output: Structure
boolFalseboolTrueboolFalseAnnotated[float, Gt(gt=0)] | NoneNoneboolFalseboolFalsestr | NoneNoneCompute RDKit molecular properties on structures.
Lightweight, fast, in-process property calculation. Properties are
written as structure-level properties with r_qkp_, i_qkp_, or
b_qkp_ prefixes.
Example usage in YAML::
pipeline:
type: chain
transforms:
- type: CreateStructuresFromSmiles
config:
elements:
- "c1ccccc1"
- type: QuickProperties
config:
properties:
- MW
- AlogP
- HBD
- type: WriteStructures
config:
output_file: "output.maegz"
Input: Structure
Output: Structure
list[str] | NoneNoneRead Structure objects from a file.
This is a source transform that reads structures from a file.
Example usage in YAML::
pipeline:
- type: ReadFileToStructures
config:
input_file: "ligands.maegz"
Output: Structure
strRead RDKit Mol objects from a SMILES file.
This is a source transform that reads molecules from a file containing newline-separated SMILES strings.
Example usage in YAML::
pipeline:
- type: ReadMolsFromFile
config:
input_file: "ligands.smi"
Output: Mol
strboolFalseRun EpikX on input structures.
Example usage::
>>> from schrodinger import adapter
>>> st1 = adapter.to_structure('CC(=O)O')
>>> st1.title = "acetic_acid"
>>> with beam.Pipeline() as p:
... results = (p
... | beam.Create([st1])
... | RunEpikX(ph=7.0)
... | beam.Map(lambda r: (r.source_id, r.success, len(r.output_structures)))
... | beam.LogElements())
See EpikXConfig for available configuration options.
Input: Structure
Output: EpikXResult
str | NoneNonefloat7.4float2.0float | NoneNoneint16int8int200int500int-2int2float14.0float0.0boolFalseboolFalseboolFalseboolFalseboolFalseboolFalseboolFalseboolFalseboolTrueboolFalseboolFalsestr | NoneNoneboolFalsestr | NoneNoneboolFalseConvert SMILES strings to RDKit Mol objects.
Example usage in YAML::
pipeline:
- type: CreateStructuresFromSmiles
config:
elements:
- "c1ccccc1"
- type: SmilesToMol
Input: str
Output: Mol
AnyNoneConvert SMILES strings to Schrodinger Structure objects.
Example usage in YAML::
pipeline:
- type: Create
config:
elements:
- "c1ccccc1"
- type: SmilesToStructure
Input: str
Output: Structure
AnyNoneExtract structure properties and built-in attributes into Beam Rows.
Properties can be specified as plain strings (for valid Python identifiers) or as single-key dicts to alias non-identifier property names
Example usage in YAML::
pipeline:
- type: ReadFileToStructures
config:
input_file: "docked.maegz"
- type: StructurePropertiesToRow
config:
properties:
- "title"
- "r_i_GlideScore"
- rotor_count: "i_qp_#rotor"
- qp_ip_ev: "r_qp_IP(eV)"
Input: Structure
list[str | dict[str, str]]{output_name: property_key} dict for aliasing
properties whose keys are not valid Python identifiers.boolFalseDEFAULT_STRUCTURE_NAME field of the output Row.boolTrueConvert Schrodinger Structure objects to RDKit Mol objects.
Example usage in YAML::
pipeline:
- type: ReadFileToStructures
config:
input_file: "ligands.maegz"
- type: StructureToMol
Input: Structure
Output: Mol
AnyNoneConvert Structure objects to Beam Rows.
This transform wraps each Structure in a Row with a 'structure' field, enabling use of Row-based transforms like MapToFields.
Example usage in YAML::
pipeline:
- type: CreateStructuresFromSmiles
config:
elements:
- "c1ccccc1"
- type: LigFilter
config:
criteria: ["Num_heavy_atoms > 3"]
- type: StructureToRow
- type: MapToFields
config:
fields:
title:
callable: "lambda row: row.structure.title"
Input: Structure
AnyNoneConvert Schrodinger Structure objects to SMILES strings.
Example usage in YAML::
pipeline:
- type: ReadFileToStructures
config:
input_file: "ligands.maegz"
- type: StructureToSmiles
Input: Structure
Output: str
AnyNoneWrap values in a Row with a specified field name.
This is useful when a transform returns bare values (like Structure) but the pipeline expects Row objects. Wrap the values in a Row so subsequent transforms can access them via the field name.
Example usage in YAML::
pipeline:
- type: CreateMolsFromSmiles
config:
elements:
- "c1ccccc1"
- type: WrapInRow
config:
field_name: "mol"
This would transform a bare Mol into Row(mol=Mol(...)).
strWrite RDKit Mol objects to a SMILES file.
This is a sink transform that writes molecules to a file as newline-separated SMILES strings. It passes through the input molecules unchanged for chaining.
Example usage in YAML::
pipeline:
- type: CreateMolsFromSmiles
config:
elements:
- "c1ccccc1"
- type: WriteMolsToSmilesFile
config:
output_file: "output.smi"
Input: Mol
Output: Mol
strWrite Structure objects to a file.
This is a sink transform that writes structures to a file. It passes through the input structures unchanged for chaining.
Example usage in YAML::
pipeline:
- type: ReadFileToStructures
config:
input_file: "ligands.maegz"
- type: LigFilter
config:
criteria: ["Num_heavy_atoms > 5"]
- type: WriteStructures
config:
output_file: "filtered.maegz"
Input: Structure
Output: Structure
strDock structures with Glide and yield the resulting poses.
This is a convenience wrapper that runs docking and yields only the successfully docked poses. Failed inputs are silently dropped.
Example usage::
>>> from schrodinger.application.transforms import glide
>>> with beam.Pipeline() as p:
... poses = (p
... | chemio.ReadStructuresFromFile('ligands.maegz')
... | glide.Dock(grid_file='receptor.zip', precision='SP')
... | chemio.WriteStructuresToFile('poses.maegz'))
See GlideDockingConfig for all available configuration options.
Input: Structure
Output: Structure
PathAnnotated[Path, PathType(path_type='file')] | NoneNoneLiteral | NoneNone'SP', 'HTVS', 'XP'int1Annotated[Path, PathType(path_type='file')] | NoneNoneLiteral'core''core', 'shape', 'both'boolFalseboolFalseAnnotated[Path, PathType(path_type='dir')] | NoneNoneboolFalsedict[str, Any] | NoneNoneExtract a Structure-valued field from a Row.
Input: Row
Output: Structure
str'structure'Convert Structures to Rows for an LD-model row sink.
Input: Structure
Output: Row
list[str | dict[str, str]] | NoneNone{output_name: property_key}
dict to alias properties with non-identifier keys.boolFalseRead molecules from the ChEMBL database.
This is a source transform that fetches molecules from the ChEMBL API
and yields Structure objects with the ChEMBL ID stored as property
s_seam_chembl_id.
Example usage in YAML::
pipeline:
- type: ReadFromChembl
config:
sample_size: 100
Output: Structure
int | NoneNoneRead structures from the PDB (Protein Data Bank) by PDB codes.
This is a source transform that downloads PDB files and yields
Structure objects with the PDB code stored as property
s_seam_pdb_code.
Example usage in YAML::
pipeline:
- type: ReadFromPDB
config:
pdb_codes:
- "1A2B"
- "3C4D"
preserve_caps: false
Output: Structure
list[str]boolFalseA transform object used to modify one or more PCollections.
Subclasses must define an expand() method that will be used when the transform is applied to some arguments. Typical usage pattern will be:
input | CustomTransform(...)
The expand() method of the CustomTransform object passed in will be called with input as an argument.
AnyNoneA transform object used to modify one or more PCollections.
Subclasses must define an expand() method that will be used when the transform is applied to some arguments. Typical usage pattern will be:
input | CustomTransform(...)
The expand() method of the CustomTransform object passed in will be called with input as an argument.
AnyNone