ProtoCaller

About

ProtoCaller is a Python library which enables controlled automation of relative protein-ligand binding free energy calculations in GROMACS. ProtoCaller uses a variety of tools to automate the free energy calculation process, such as: Biopython, BioSimSpace, CHARMM-GUI, (optionally) Modeller, Open Babel, ParmEd, PDB2PQR, pdbfixer, RDKit.

ProtoCaller can be run on both Linux and macOS. Installation is easy and performed through Conda. Please check the other sections for further information.

Installation

This package is distributed via Conda. To install it, run the following command:

conda install -c conda-forge -c omnia -c michellab -c essexlab protocaller

The development version can be installed with this command (use with caution):

conda install -c conda-forge -c omnia -c michellab -c essexlab/label/dev protocaller

The newest version (1.2.0) is highly recommended due to recent database overhauls in the Protein Data Bank.

Getting Started

System preparation constitutes the larger part of ProtoCaller. Central to system preparation is the Ensemble class, which is partitioned into a Protein and a PerturbationList. A PerturbationList consists of multiple Perturbation s and each Perturbation contains two Ligand s. Each Protein and Ligand depends on the force field Params. Finally, a Protein also contains a PDB object, which is divided into Chain s. Chain s are split into Residue s and Residue s into Atom s, containing all the important information from a PDB file. Sometimes a PDB also contains one or more MissingResidue s and/or MissingAtoms. The whole dependency tree can be visualised here:

digraph A {
    Ens [label = "Ensemble", href = "https://protocaller.readthedocs.io/en/latest/ProtoCaller.Ensemble.html#ProtoCaller.Ensemble.Ensemble"];
    Lig [label = "Ligand", href = "https://protocaller.readthedocs.io/en/latest/ProtoCaller.Ensemble.Ligand.html#ProtoCaller.Ensemble.Ligand.Ligand"]
    PertList [label = "PerturbationList", href = "https://protocaller.readthedocs.io/en/latest/ProtoCaller.Ensemble.PerturbationList.html#ProtoCaller.Ensemble.PerturbationList.PerturbationList"]
    Pert [label = "Perturbation", href = "https://protocaller.readthedocs.io/en/latest/ProtoCaller.Ensemble.Perturbation.html#ProtoCaller.Ensemble.Perturbation.Perturbation"]
    Par [label = "Params", href = "https://protocaller.readthedocs.io/en/latest/ProtoCaller.Parametrise.html#ProtoCaller.Parametrise.Params"]
    Pro [label = "Protein", href = "https://protocaller.readthedocs.io/en/latest/ProtoCaller.Ensemble.Protein.html#ProtoCaller.Ensemble.Protein.Protein"]
    PDB [label = "PDB", href = "https://protocaller.readthedocs.io/en/latest/ProtoCaller.IO.PDB.html#ProtoCaller.IO.PDB.PDB"]
    Chain [label = "Chain", href = "https://protocaller.readthedocs.io/en/latest/ProtoCaller.IO.PDB.Chain.html#ProtoCaller.IO.PDB.Chain.Chain"]
    Residue [label = "Residue", href = "https://protocaller.readthedocs.io/en/latest/ProtoCaller.IO.PDB.Residue.html#ProtoCaller.IO.PDB.Residue.Residue"]
    Atom [label = "Atom", href = "https://protocaller.readthedocs.io/en/latest/ProtoCaller.IO.PDB.Atom.html#ProtoCaller.IO.PDB.Atom.Atom"]
    MisRes [label = "MissingResidue", href = "https://protocaller.readthedocs.io/en/latest/ProtoCaller.IO.PDB.Missing.html#ProtoCaller.IO.PDB.Missing.MissingResidue"]
    MisAtom [label = "MissingAtoms", href = "https://protocaller.readthedocs.io/en/latest/ProtoCaller.IO.PDB.Missing.html#ProtoCaller.IO.PDB.Missing.MissingAtoms"]

    Ens -> PertList;
    Ens -> Pro;
    PertList -> Pert;
    Pert -> Lig;
    Pert -> Lig;
    Pro -> Par;
    Pro -> PDB;
    Lig -> Par;
    PDB -> Chain;
    PDB -> MisRes;
    PDB -> MisAtom;
    Chain -> Residue;
    Residue -> Atom;
}

Afterwards, it is possible to run the generated files through some simple wrappers. Simulations in GROMACS are done through the RunGMX class, which consists of several Protocol s which describe the different stages of the free energy simulation, e.g. minimisation, equilibration and production.

digraph B {
    rankdir = "LR";

    RunGMX [label = "RunGMX", href = "https://protocaller.readthedocs.io/en/latest/ProtoCaller.Simulation.html#ProtoCaller.Simulation.RunGMX"]
    Protocol [label = "Protocol", href = "https://protocaller.readthedocs.io/en/latest/ProtoCaller.Protocol.html#ProtoCaller.Protocol.Protocol"]

    RunGMX -> Protocol
}

For more information you can look at the full docstring documentation. There are also a few examples which you can run to see how ProtoCaller works.