schrodinger.application.transforms.scorers.fep module

FEP+ scorer for AL-Pareto active learning.

class schrodinger.application.transforms.scorers.fep.FEPScoreProperties

Bases: StrEnum

Properties produced by FEPScorer.

PRED_DG = 'r_alpareto_fep_pred_dg'
PRED_DG_UNCERTAINTY = 'r_alpareto_fep_pred_dg_uncertainty'
PRED_LE = 'r_alpareto_fep_pred_le'
PRED_LLE = 'r_alpareto_fep_pred_lle'
PRED_AEI = 'r_alpareto_fep_pred_aei'
class schrodinger.application.transforms.scorers.fep.FEPMapConfig(*, core_smarts: str | None = None, topology: Optional[Literal['star', 'normal']] = None, receptor_hotatoms_asl: str | None = None, ligand_hotatoms_rule_complex: str | None = None, ligand_hotatoms_rule_solvent: str | None = None, disable_supernodes: bool | None = None, generate_neutral_intermediates: bool | None = None)

Bases: BaseModel

FEP map generation settings.

All fields default to None, meaning the FEP transform default is used.

core_smarts: str | None
topology: Optional[Literal['star', 'normal']]
receptor_hotatoms_asl: str | None
ligand_hotatoms_rule_complex: str | None
ligand_hotatoms_rule_solvent: str | None
disable_supernodes: bool | None
generate_neutral_intermediates: bool | None
model_config: ClassVar[ConfigDict] = {'frozen': True}

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

class schrodinger.application.transforms.scorers.fep.FEPProtocolConfig(*, forcefield: Literal['OPLS4', 'OPLS5'] = 'OPLS4', simulation_time: int = 5000, equilibration_time: int = 20, opls_dir: Optional[Path] = None, restraints_file: Optional[Path] = None, ensemble: Optional[Literal['muVT', 'NPT', 'NVT', 'NVE', 'NPgT']] = None, water_model: Optional[Literal['SPC', 'SPCE', 'TIP3P', 'TIP3P_CHARMM', 'TIP4P', 'TIP4PEW', 'TIP4P2005', 'TIP5P', 'TIP4PD']] = None, salt_concentration: Optional[float] = None, membrane_relaxation: bool | None = None, torsion_scaling: bool | None = None, num_windows: Optional[int] = None, num_core_hopping_windows: Optional[int] = None, num_charged_windows: Optional[int] = None)

Bases: BaseModel

FEP simulation protocol settings.

All optional fields default to None, meaning the FEP transform default is used.

forcefield: Literal['OPLS4', 'OPLS5']
simulation_time: int
equilibration_time: int
opls_dir: Optional[Path]
restraints_file: Optional[Path]
ensemble: Optional[Literal['muVT', 'NPT', 'NVT', 'NVE', 'NPgT']]
water_model: Optional[Literal['SPC', 'SPCE', 'TIP3P', 'TIP3P_CHARMM', 'TIP4P', 'TIP4PEW', 'TIP4P2005', 'TIP5P', 'TIP4PD']]
salt_concentration: Optional[float]
membrane_relaxation: bool | None
torsion_scaling: bool | None
num_windows: Optional[int]
num_core_hopping_windows: Optional[int]
num_charged_windows: Optional[int]
model_config: ClassVar[ConfigDict] = {'frozen': True}

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

class schrodinger.application.transforms.scorers.fep.FEPOutputInclusionConfig(*, fmpdb: bool = True)

Bases: BaseModel

Controls what additional information is included in FEP output.

fmpdb: bool
model_config: ClassVar[ConfigDict] = {'frozen': True}

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

class schrodinger.application.transforms.scorers.fep.FEPScorerConfig(*, receptor_file: Path, reference_ligands_file: Path, map_settings: FEPMapConfig = FEPMapConfig(core_smarts=None, topology=None, receptor_hotatoms_asl=None, ligand_hotatoms_rule_complex=None, ligand_hotatoms_rule_solvent=None, disable_supernodes=None, generate_neutral_intermediates=None), execution: WebServicesConfig, protocol: FEPProtocolConfig = FEPProtocolConfig(forcefield='OPLS4', simulation_time=5000, equilibration_time=20, opls_dir=None, restraints_file=None, ensemble=None, water_model=None, salt_concentration=None, membrane_relaxation=None, torsion_scaling=None, num_windows=None, num_core_hopping_windows=None, num_charged_windows=None), inclusion: FEPOutputInclusionConfig = FEPOutputInclusionConfig(fmpdb=True), batch_size: int = 100, mock: bool = False)

Bases: BaseModel

Configuration for FEPScorer.

Parameters:
  • receptor_file – Path to receptor/environment structures (.maegz).

  • reference_ligands_file – Path to reference ligands (.maegz).

  • map_settings – FEP map generation settings.

  • execution – Web services execution settings.

  • protocol – FEP simulation protocol settings.

  • inclusion – FEP output inclusion settings.

  • batch_size – Number of structures per FEP batch.

  • mock – Use mock FEP (random dG values) for testing.

receptor_file: Path
reference_ligands_file: Path
map_settings: FEPMapConfig
execution: WebServicesConfig
protocol: FEPProtocolConfig
inclusion: FEPOutputInclusionConfig
batch_size: int
mock: bool
model_config: ClassVar[ConfigDict] = {'frozen': True}

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

class schrodinger.application.transforms.scorers.fep.FEPScorer(**kwargs)

Bases: AsyncScorer

Score structures using FEP+ via web services.

SCORER_ID: str = 'fep'
SCORER_PROPERTIES

alias of FEPScoreProperties

config_class

alias of FEPScorerConfig

__init__(**kwargs)

Initialize the transform with configuration.

All keyword arguments are passed to the config_class constructor to create a validated configuration instance stored as self.config.

Parameters:

kwargs – Configuration parameters for the config_class

Raises:
  • AttributeError – If config_class is not defined on the subclass

  • ValidationError – If the configuration parameters are invalid