Skip to content

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.

trajectory_uuids property

trajectory_uuids: list[str]

UUIDs of all trajectory calculations.

trajectories property

trajectories: list[ProteinMDTrajectory]

Per-replicate trajectory results (SASA, radius of gyration, cluster assignments).

bonds property

bonds: list[tuple[int, int]]

Bond connectivity as pairs of atom indices.

messages property

messages: list[Message]

Any messages or warnings from the workflow.

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.