Skip to content

Pose Analysis MD

Pose-analysis MD workflow - molecular dynamics simulations for ligand-protein complexes.

TrajectoryResult dataclass

TrajectoryResult(
    uuid: str,
    ligand_rmsd: list[float],
    contacts: list[BindingPoseContact],
    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],
)

Results from a single MD trajectory replicate.

Parameters:

Name Type Description Default
uuid str

UUID of the trajectory calculation.

required
ligand_rmsd list[float]

Ligand RMSD values over time (Angstrom).

required
contacts list[BindingPoseContact]

Ligand-protein contacts with occupancy over the trajectory.

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

PoseAnalysisMDResult dataclass

PoseAnalysisMDResult(
    workflow_data: dict[str, Any],
    workflow_type: str,
    workflow_uuid: str,
    complete: bool = True,
)

Bases: WorkflowResult

Result from a Pose-Analysis Molecular Dynamics (MD) workflow.

trajectories property

trajectories: list[TrajectoryResult]

Results from each trajectory replicate.

Each trajectory contains RMSD values, contact analysis, and cluster assignments.

hydration_sites property

hydration_sites: list[HydrationSite]

Hydration sites identified across all trajectories.

average_rmsds property

average_rmsds: list[float | None]

Average ligand RMSD per trajectory (Angstrom).

minimized_protein_uuid property

minimized_protein_uuid: str | None

UUID of the energy-minimized protein structure.

messages property

messages: list[Message]

Any messages or warnings from the workflow.

get_minimized_protein

get_minimized_protein() -> Protein | None

Fetch the energy-minimized protein structure.

.. note:: Makes one API call on first access. Results are cached. Call clear_cache() to refresh.

Returns:

Type Description
Protein | None

Protein object or None if not available.

get_atom_distances

get_atom_distances(
    atom_pairs: list[tuple[int, int]], replicate: int = 0
) -> list[list[float]]

Fetch interatomic distances over the trajectory for specified atom pairs.

Atom indices can be found in the contacts field of each trajectory, which provides ligand_atom_index and protein_atom_index for each contact.

Parameters:

Name Type Description Default
atom_pairs list[tuple[int, int]]

List of (atom_i, atom_j) index pairs (0-indexed).

required
replicate int

Trajectory replicate index (default 0).

0

Returns:

Type Description
list[list[float]]

List of distance arrays, one per pair, over all frames (Angstrom).

Raises:

Type Description
HTTPError

If the API request fails.

download_trajectories

download_trajectories(
    replicates: list[int],
    name: str | None = None,
    path: Path | str | None = None,
) -> Path

Download DCD trajectory files for specified replicates.

Parameters:

Name Type Description Default
replicates list[int]

List of replicate indices to download.

required
name str | None

Custom name for the tar.gz file (without extension).

None
path Path | str | None

Directory to save the file to. Defaults to current directory.

None

Returns:

Type Description
Path

Path to the downloaded tar.gz file.

Raises:

Type Description
HTTPError

If the API request fails.

submit_pose_analysis_md_workflow

submit_pose_analysis_md_workflow(
    protein: Protein | ProteinUUID,
    initial_smiles: str,
    num_trajectories: int = 4,
    equilibration_time_ns: float = 1,
    simulation_time_ns: float = 10,
    temperature: float = 300,
    pressure_atm: float = 1.0,
    langevin_timescale_ps: float = 1.0,
    timestep_fs: float = 2,
    constrain_hydrogens: bool = True,
    nonbonded_cutoff: float = 8.0,
    ionic_strength_M: float = 0.0,
    water_buffer: float = 10.0,
    ligand_residue_name: str = "LIG",
    protein_restraint_cutoff: float | None = 7.0,
    protein_restraint_constant: float = 100,
    save_solvent: bool = False,
    num_solvent_to_save: int | None = None,
    analysis_interval_ps: float | None = None,
    clustering: KMeansClusteringSettings
    | GreedyClusteringSettings
    | None = None,
    validate_forcefield: bool = True,
    name: str = "Pose-Analysis 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 Pose-Analysis 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
initial_smiles str

SMILES for the ligand.

required
num_trajectories int

Number of trajectories to run.

4
equilibration_time_ns float

Equilibration time per trajectory, in ns.

1
simulation_time_ns float

Simulation time per trajectory, 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.0
timestep_fs float

Timestep, in femtoseconds.

2
ligand_residue_name str

Name of the residue corresponding to the ligand.

'LIG'
constrain_hydrogens bool

Whether to use SHAKE to freeze bonds to hydrogen.

True
nonbonded_cutoff float

Nonbonded cutoff for particle-mesh Ewald, in Å.

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 Å.

10.0
protein_restraint_cutoff float | None

Cutoff past which alpha-carbons will be constrained, in Å, measured from the ligand. None applies no restraints.

7.0
protein_restraint_constant float

Force constant for backbone restraints, in kcal/mol/Ų.

100
save_solvent bool

Whether to save solvent molecules.

False
num_solvent_to_save int | None

Number of solvent molecules to save (the N nearest the ligand each frame). None saves all solvent when save_solvent is True.

None
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.

True
name str

Name of the workflow.

'Pose-Analysis 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.