==== lDDT ==== ------------------------------------- Where can I find the lDDT executable? ------------------------------------- The lDDT executable can be found at /bin/ ------------ Basic Usage ------------ To calculate the lDDT for one PDB file (mdl1.pdb) against the reference structure stored in ref.pdb, use the following command; the local and global lDDT scores for each model are printed to the terminal: .. code-block:: bash lddt mdl1.pdb ref.pdb Similarly it is possible to calculate the lDDT for a list of PDB files: .. code-block:: bash lddt mdl1.pdb mdl2.pdb mdl3.pdb ref.pdb Or for multiple reference structures at the same time (please find at the bottom of the page an example of usage): .. code-block:: bash lddt mdl1.pdb ref1.pdb,ref2.pdb,ref3.pdb ------------ All Options ------------ The lddt executable supports several other command line options, please find them following: .. code-block:: bash lddt [options] [mod1 [mod2]] [,ref2,ref3] -s selection performed on ref -c use Calphas only -f perform structural checks and filter input data -t fault tolerant parsing -p use specified parmeter file. Mandatory -v verbosity level (0=results only,1=problems reported, 2=full report) -b tolerance in stddevs for bonds -a tolerance in stddevs for angles -r distance inclusion radius -i sequence separation -e print version -x ignore residue name consistency checks ================= lDDT - Use cases ================= -------------------- Model Quality Checks -------------------- When the lddt executable is called with the -f option, the program performs some stereo-chemical and steric clashing checks before computing the lDDT scores. When using this option, the user must also provide a text file containing average bond lengths,angle widths and minimum clashing distances. lddt ships with a default parameter file based on Engh and Huber parameters, and on the atomic radii as defined in the Cambridge Structural Database. This file is human readable and can be modified with a text editor. The location of the file must be passed to the lddt executable using the -p parameter. For example: .. code-block:: bash lddt -f -p stereo_chemical_params.txt mdl1.pdb ref.pdb When the model quality checks are performed, the global and local lDDT scores are preceded in the output text by some information on the outcome of the tests. The number of serious stereo-chemical violations and steric-clashes in the structure is reported, along with some statistics on the global model quality. The local and global lDDT scores are also adjusted according to the outcome of the tests. When stereochemical violations or steric clashes happen in the side-chain of a residue, all distances involving atoms of that side-chain are automatically considered non-conserved. When the violations involve backbone atoms of a residue, all distances containing atoms of the residue are considered non-conserved. ----------------------- Custom Inclusion Radius ----------------------- The lDDT score evaluates distances between atoms lying closer than a predermined inclusion radius. By default the radius is set to 15 Angstroms, but the user can override this value by passing a new one to the lddt executable through the -r parameter (in Angstroms): For example: .. code-block:: bash lddt -r 10.0 mdl1.pdb ref.pdb ------------------ Consistency Checks ------------------ When comparing structures, the lddt executable does not perform any chain name checks. It only processes the first chain in each structure, irrespective of the name. It does, however, perform a check on residue names, to make sure that the structures are correctly aligned. The lddt executable will stop with an error if the names of the residues being compared do not match. If the user needs for specific reasons to override this behavior and skip the check, the lddt executable can be called using the -x option. For example: For example: .. code-block:: bash lddt -x mdl1.pdb ref.pdb ------------------------- Custom Quality Parameters ------------------------- The lddt executable uses several thresholds to determine how serious stereo- chemical violations and steric clashes are. For Bonds and Angles, the parameter file contains typical average lengths and widths, together with expected standard deviations for their measurements in protein structures. A violation is flagged as serious by lDDT when the measured value deviates from the expected one by more than a predefined number of standard deviations. By default this value is 12, but the user can override the default tolerance thresholds using the -b and -a flags, for bonds and angles respectively. For steric clashes, the lddt executable recovers atomic radii and clashing tolerance distances from the parameter file, depending on the atomic element under investigation. For example: .. code-block:: bash lddt -f -p stereo_chemical_params.txt -b 8 -a 8 mdl1.pdb ref.pdb ----------------------------- Multiple Reference Structures ----------------------------- lDDT allows the use of multiple reference structures at the same time (please see the manuscript referenced above for details). In order to use multiple references, simply add them to the first ref.pdb file, separated by a comma. For example: .. code-block:: bash lddt mdl1.pdb ref1.pdb,ref2.pdb,ref3.pdb ---------------- Output Verbosity ---------------- By default the lddt executable only outputs the values of the global and local scores. However, users can tweak the verbosity of the output using the -v parameters. The devault verbosity level is 0 (scores only). Other available levels are: 1 (print information about non conserved distances and failed quality checks, if performed) and 2 (print information on all distances and all quality checks if performed) For example: .. code-block:: bash lddt -v 1 -f -p stereo_chemical_params.txt mdl1.pdb ref.pdb WARNING: Verbosity levels 1 and 2 can generate a large amount of output text, especially with large structures and multiple models being evaluated. =============== lDDT Python API =============== One can replicate the binary using simple python script: .. code-block:: python #! /bin/env python """Run lDDT from within script.""" from ost.io import LoadPDB from ost.mol.alg import (CleanlDDTReferences, PreparelDDTGlobalRDMap, lDDTSettings, CheckStructure, LocalDistDiffTest, GetlDDTPerResidueStats, PrintlDDTPerResidueStats, ResidueNamesMatch) from ost.io import ReadStereoChemicalPropsFile model_path = "Path to your model pdb file" reference_path = "Path to your reference pdb file" structural_checks = True bond_tolerance = 12 angle_tolerance = 12 cutoffs = [0.5, 1.0, 2.0, 4.0] # # Load model and prepare its view model = LoadPDB(model_path) model_view = model.GetChainList()[0].Select("peptide=true") # # Prepare references - it should be alist of EntityView(s) references = [LoadPDB(reference_path).CreateFullView()] # # Initialize settings with default parameters and print them settings = lDDTSettings() settings.PrintParameters() # # Clean up references CleanlDDTReferences(references) # # Prepare residue map from references rdmap = PreparelDDTGlobalRDMap(references, cutoffs=cutoffs, sequence_separation=settings.sequence_separation, radius=settings.radius) # # This part is optional and it depends on our settings parameter if structural_checks: stereochemical_parameters = ReadStereoChemicalPropsFile() CheckStructure(ent=model_view, bond_table=stereochemical_parameters.bond_table, angle_table=stereochemical_parameters.angle_table, nonbonded_table=stereochemical_parameters.nonbonded_table, bond_tolerance=bond_tolerance, angle_tolerance=angle_tolerance) # # Check consistency is_cons = ResidueNamesMatch(model_view, references[0], True) print("Consistency check: ", "OK" if is_cons else "ERROR") # # Calculate lDDT LocalDistDiffTest(model_view, references, rdmap, settings) # # Get the local scores local_scores = GetlDDTPerResidueStats(model_view, rdmap, structural_checks, settings.label) # # Pring local scores PrintlDDTPerResidueStats(local_scores, structural_checks, len(cutoffs)) Similar effect could be obtained using lDDTScorer. See :class:`~ost.mol.alg.lDDTScorer` for a simple example. The Python API can be useful when we already have an models and references already read in the memory and we do not want run the binary. Please refere to specific function documentation for more details.