Step 3a

In pDynamo the construction of an atomic model from a PDB file requires a library containing definitions of components, links and variants. These are defined as follows:


The PDB keeps a dictionary of all chemical entities that appear as residues in structures in the data base. The dictionary is called the PDB Chemical Component Dictionary and may be downloaded from the PDB website (see the Dictionaries and File Formats and PDB Ligand Dictionary submenus of the website). Each entry in the dictionary defines a component and includes lists of the component's atoms and covalent bonds. All PDB components have names consisting of three alphanumeric characters.


These are not defined in the PDB standard but are used by pDynamo to modify the composition of two components when there is a covalent bond between them. A common protein link is one that specifies a disulfide bridge between two cysteine residues.


Variants, like links, are pDynamo constructs but they modify the composition of a single component only. Common protein variants include those which change the default protonation state of a residue.

The standard pDynamo distribution comes with a limited set of PDB components, links and variants which will be insufficient for users that employ PDB files extensively. In such cases it will be necessary to augment the library using functions that are provided in the module PDBComponentLibrary.

A reasonable strategy for doing this is as follows:

    • Choose a directory in which to create the modified component library. It is preferable to select a directory that is not in the pDynamo distribution so that reinstallation of the program will not cause the additions to be lost.
    • A truncated version of the PDB component dictionary, in mmCIF format, is included in the pDynamo distribution which is sufficient for this tutorial. However, in the general case, it will be necessary to download the dictionary from the PDB website.
    • Look at the file that contains the component dictionary to see if the desired components are present and, if so, whether they are in the correct form for the study at hand. In the PKA case, the components ATP, MG and TPO were missing and these all occur in the dictionary. ATP and TPO are in their neutral forms with their phosphate groups fully protonated, whereas MG is a dication.
    • Write a program to create and/or update the modified library. One suitable for PKA is:
# . Make the default library.
library = MakeDefaultPDBComponentLibrary ( fullLibrary = True, libraryPaths = [ "../data/pdbData" ] )

# . Add a default variant to ATP.
atp = library.GetComponent ( "ATP" )
atp.variants = [ "Fully_Deprotonated" ]

# . Create the ATP variant.
atpVariant = PDBComponentVariant ( componentLabel = "ATP", label = "Fully_Deprotonated", atomsToDelete = [ "HOG2", "HOG3", "HOB2", "HOA2" ], formalCharges = { "O2G" : -1, "O3G" : -1, "O2B" : -1, "O2A" : -1 } )

# . Get Mg.
mg = library.GetComponent ( "MG" )

# . Create the TPO residue (THR with a side chain PO3).
tpo = library.GetComponent ( "TPO" )
tpo.leftAtom         = "N"
tpo.leftLink         = "Peptide"
tpo.leftTermination  = "NTerminal"
tpo.isInChain        = True
tpo.isHeteroatom     = True
tpo.rightAtom        = "C"
tpo.rightLink        = "Peptide"
tpo.rightTermination = "CTerminal"
tpo.variants         = [ "Fully_Deprotonated" ]

# . Create the TPO variant.
tpoVariant = PDBComponentVariant ( componentLabel = "TPO", label = "Fully_Deprotonated", atomsToDelete = [ "HOP2", "HOP3" ], formalCharges = { "O2P" : -1, "O3P" : -1 } )

# . Save all the items.
library.AddItems ( ( atp, mg, tpo, atpVariant, tpoVariant ) ) 
        • The default version of the library that comes with the pDynamo distribution is created with the function MakeDefaultPDBComponentLibrary. The function can take several keyword arguments. cifPath indicates the path of the file containing the component dictionary. If it is absent, as here, the file included in the distribution is used. libraryPaths give the paths that that the library will use to put the items that it contains. In this case there is only a single path so that all items will be placed there. Finally, there is the argument, fullLibrary, which, if given as True, writes all the components in the dictionary to the library and not just those from the default distribution. Note that this statement can be skipped if a modified library already exists.
        • The next group of statements defines the ATP component and its variants. First the ATP component is extracted from the library and then it is assigned a variant with the name Fully_Deprotonated. This variant will automatically be used when the component is employed unless it is explicitly overridden in the model file. The subsequent statement generates the variant by instantiating the PDBComponentVariant class. The arguments to the constructor define the component to which the variant is to be applied (component), the name of the variant (label), the names of the atoms to delete in the target component (atomsToDelete) and a dictionary permitting the formal charges for atoms that remain to be changed (formalCharges). In this case, the four hydrogens bound to the phosphate oxygens are removed and the oxygens to which they were bound each acquire a negative charge. Of course, when an atom is removed any bonds it may have are also deleted. Although not needed here, there are other arguments to the constructor which allow atoms and bonds to be added, bonds to be deleted and bond orders to be changed.
        • The third group of statements extracts the MG component from the library. No modifications are needed in this case as it is defined to be in its most common dication state in the library.
        • The following statements create the TPO component. The syntax is similar to that used for ATP except that additional variables need to be set because TPO is a modified amino acid that, by default, will occur in peptide chains. These variables define the details of its left, N-terminal and right, C-terminal terminations and the type of its polymer links.
        • The program terminates by inserting the necessary components and variants into the library using the library's method AddItems.

It is quite common that a component is desired that is not in the PDB chemical component dictionary, in which case a component must be constructed from scratch. The easiest way to do this is to create a system with the desired composition and then convert it to a component, with the desired name, using the class method FromSystem of the PDBComponent class. Systems with sufficient information are most conveniently generated from MOL files or SMILES strings. Examples are:

# . Construct a component from a MOL file.
system    = MOLFile_ToSystem ( "water.mol" )
component = PDBComponent.FromSystem ( system, label = "WAT" )

# . Construct a component from a SMILES.
system    = SMILES_ToSystem ( "O" )
component = PDBComponent.FromSystem ( system, label = "WAT" ) 

As a final point, it is advisable to gather together, or at least conserve, all scripts that modify the component library. This means that the "local" version of the library can be regenerated in case of problems or when employing future versions of pDynamo that may not be compatible in some way with earlier ones.