Protein MD
Protein MD accepts selectable small-molecule, protein, and water force fields. Results expose
binder RMSD, MM/GBSA scores, mean-structure UUIDs, and medoid frame indices per trajectory. Use
get_mean_structure, download_mean_structure, or download_medoid_structure to retrieve
representative structures.
For protein structures containing non-polymer ligands, pass their SMILES through
small_molecules and select the residues to analyze through rowan.Binder.
Protein MD workflow - molecular dynamics simulations for proteins.
ProteinMDTrajectory
dataclass
ProteinMDTrajectory(
uuid: str,
sasa: list[float | None],
polar_sasa: list[float | None],
isotropic_radius_of_gyration: list[float],
cluster_centroid_indices: list[int],
cluster_indices_by_frame: list[int],
binder_rmsd: list[float] = list(),
mmgbsa_scores: list[float | None] = list(),
mean_structure_uuid: str | None = None,
median_structure_frame_index: int | None = None,
)
Results from a single protein-MD trajectory replicate.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
uuid
|
str
|
UUID of the trajectory calculation. |
required |
sasa
|
list[float | None]
|
Solvent-accessible surface area per analyzed frame (populated when analysis_interval_ps is set). |
required |
polar_sasa
|
list[float | None]
|
Polar solvent-accessible surface area per analyzed frame (populated when analysis_interval_ps is set). |
required |
isotropic_radius_of_gyration
|
list[float]
|
Radius of gyration per analyzed frame. |
required |
cluster_centroid_indices
|
list[int]
|
Frame indices of the cluster centroids (populated when clustering is set). |
required |
cluster_indices_by_frame
|
list[int]
|
Cluster assignment for each frame (populated when clustering is set). |
required |
binder_rmsd
|
list[float]
|
Per-frame binder RMSD, when the binder has one component. |
list()
|
mmgbsa_scores
|
list[float | None]
|
Per-frame MM/GBSA score for the complete binder. |
list()
|
mean_structure_uuid
|
str | None
|
UUID of the coordinate-averaged structure. |
None
|
median_structure_frame_index
|
int | None
|
Frame index of the medoid structure. |
None
|
ProteinMDResult
dataclass
ProteinMDResult(
workflow_data: dict[str, Any],
workflow_type: str,
workflow_uuid: str,
complete: bool = True,
)
Bases: _MolecularDynamicsResult
Result from a Protein Molecular Dynamics (MD) workflow.
trajectories
property
Per-replicate trajectory results (SASA, radius of gyration, cluster assignments).
submit_protein_md_workflow
submit_protein_md_workflow(
protein: Protein | ProteinUUID,
num_trajectories: int = 4,
small_molecule_ff: Literal[
"off_sage_2_0_0",
"off_sage_2_2_1",
"off_sage_2_3_0",
"mango_1_0_0",
] = "off_sage_2_3_0",
protein_ff: ProteinForceField
| str = ProteinForceField.FF14SB,
water_ff: WaterForceField | str = WaterForceField.TIP3P,
equilibration_time_ns: float = 0.5,
simulation_time_ns: float = 10,
temperature: float = 300,
pressure_atm: float = 1.0,
langevin_timescale_ps: float = 1.0,
timestep_fs: float = 4,
hydrogen_mass: float = 3,
constrain_hydrogens: bool = True,
nonbonded_cutoff: float = 8.0,
ionic_strength_M: float = 0.0,
water_buffer: float = 8.0,
save_solvent: bool = False,
num_solvent_to_save: int | None = None,
small_molecules: dict[str | int, str | None] | None = None,
binder: Binder | None = None,
protein_restraint_cutoff: float | None = None,
protein_restraint_constant: float = 100,
analysis_interval_ps: float | None = None,
clustering: KMeansClusteringSettings
| GreedyClusteringSettings
| None = None,
validate_forcefield: bool = True,
name: str = "Protein MD Workflow",
folder_uuid: str | None = None,
folder: Folder | None = None,
max_credits: int | None = None,
webhook_url: str | None = None,
is_draft: bool = False,
) -> Workflow
Submits a Protein Molecular Dynamics (MD) workflow to the API.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
protein
|
Protein | ProteinUUID
|
holo protein on which MD will be run. Can be input as a UUID or a Protein object. |
required |
num_trajectories
|
int
|
Number of trajectories to run. |
4
|
small_molecule_ff
|
Literal['off_sage_2_0_0', 'off_sage_2_2_1', 'off_sage_2_3_0', 'mango_1_0_0']
|
Force field for small molecules. |
'off_sage_2_3_0'
|
protein_ff
|
ProteinForceField | str
|
Force field for proteins. |
FF14SB
|
water_ff
|
WaterForceField | str
|
Force field for water. |
TIP3P
|
equilibration_time_ns
|
float
|
how long to equilibrate trajectories for, in ns |
0.5
|
simulation_time_ns
|
float
|
how long to run trajectories for, in ns |
10
|
temperature
|
float
|
temperature, in K |
300
|
pressure_atm
|
float
|
pressure, in atm |
1.0
|
langevin_timescale_ps
|
float
|
timescale for the Langevin integrator, in ps^-1 |
1.0
|
timestep_fs
|
float
|
timestep, in femtoseconds |
4
|
hydrogen_mass
|
float
|
hydrogen mass, in atomic mass units |
3
|
constrain_hydrogens
|
bool
|
whether or not to use SHAKE to freeze bonds to hydrogen |
True
|
nonbonded_cutoff
|
float
|
nonbonded cutoff for particle-mesh Ewald, in A |
8.0
|
ionic_strength_M
|
float
|
ionic strength of the solution, in M (molar) |
0.0
|
water_buffer
|
float
|
amount of water to add around the protein, in A |
8.0
|
save_solvent
|
bool
|
whether solvent should be saved |
False
|
num_solvent_to_save
|
int | None
|
keep this many solvent molecules nearest the binder, or all if None; only meaningful when save_solvent is True and a binder is present |
None
|
small_molecules
|
dict[str | int, str | None] | None
|
SMILES by protein residue name or index for small molecules that require separate parameterization. A None value uses an existing residue template. |
None
|
binder
|
Binder | None
|
optional binder specification (protein chains and/or small molecules). When set, per-frame MM/GBSA scores are computed against the whole binder. Per-frame binder RMSD is populated only when the binder is a single component (one small molecule → heavy-atom RMSD; one binder chain → backbone N/CA/C/O RMSD); it is empty for multi-molecule, multi-chain, or combined chain+molecule binders. |
None
|
protein_restraint_cutoff
|
float | None
|
cutoff distance from the binder past which Cα atoms are harmonically restrained, in Å; None disables restraints |
None
|
protein_restraint_constant
|
float
|
force constant for Cα backbone restraints, in kcal/mol/Ų |
100
|
analysis_interval_ps
|
float | None
|
Interval at which to compute per-frame SASA and polar SASA, in ps. None disables those analyses. |
None
|
clustering
|
KMeansClusteringSettings | GreedyClusteringSettings | None
|
How to cluster trajectory frames. None disables clustering; pass a KMeansClusteringSettings (num_clusters) or GreedyClusteringSettings (cutoff_angstrom). |
None
|
validate_forcefield
|
bool
|
if True (default), validate the protein forcefield compatibility before submitting. Raises an error early if the protein cannot be parameterized or has clashing residues. Binder small molecules are skipped, whether given by residue name or by index, since they are parameterized from their SMILES rather than the protein forcefield; cofactors, metals, and glycans outside the binder are still validated. |
True
|
name
|
str
|
Name of the workflow. |
'Protein MD Workflow'
|
folder_uuid
|
str | None
|
UUID of the folder to place the workflow in. |
None
|
folder
|
Folder | None
|
Folder object to store the workflow in. |
None
|
max_credits
|
int | None
|
Maximum number of credits to use for the workflow. |
None
|
webhook_url
|
str | None
|
URL that Rowan will POST to when the workflow completes. |
None
|
is_draft
|
bool
|
If True, submit the workflow as a draft without starting execution. |
False
|
Returns:
| Type | Description |
|---|---|
Workflow
|
Workflow object representing the submitted workflow. |
Raises:
| Type | Description |
|---|---|
requests.HTTPError
|
if the request to the API fails. |