You are reading the documentation for version 3.1 of ProMod3. You may also want to read the documentation for: 3.0 1.3 2.0 2.1

Model Checking

This chapter describes additional functionality to check models. Some of this functionality is used within the modelling pipeline.

Detecting Ring Punches


Get rings for a protein structure. A ring is only added if all ring-atoms exist or if it is a proline and three of the atoms exist (center and radii are estimated then).

Parameters:ent (EntityHandle or EntityView) – Structure for which to detect rings.
Returns:list of rings to perform ring checks. Each ring is a named tuple with: center (Vec3), plane (Plane), radius (float), residue (ResidueHandle).
promod3.modelling.GetRingPunches(rings, ent)

Get list of residues with rings that are punched by the given structure.


list of residues (ResidueHandle) which have a punched ring.

promod3.modelling.HasRingPunches(rings, ent)

Check if any ring is punched by the given structure. This check is faster than using GetRingPunches().


True, iff any ring is punched

Return type:


promod3.modelling.FilterCandidates(candidates, model, gap, orig_indices=[])

Remove loop candidates if they cause ring punches.

  • candidates (LoopCandidates) – Loop candidates meant to fill gap within model. Offending candidates are removed from this list.
  • model (EntityHandle) – Model for which loop is to be filled.
  • gap (StructuralGap.) – Gap for which loop is to be filled.
  • orig_indices (list) – Mapping to old indexing of candidates. If given, it must have as many elements as candidates.
promod3.modelling.FilterCandidatesWithSC(candidates, model, gap, orig_indices=[])

Remove loop candidates if they (with sidechain) cause ring punches. See FilterCandidates().

Model Checking With MolProbity

promod3.modelling.RunMolProbity(target_pdb, molprobity_bin=None)

Run MolProbity from Phenix on a given PDB file.

MolProbity score computation: (formula from molprobity source code)

clashscore = result["Clashscore"]
rota_out = result["Rotamer outliers"]
rama_iffy = 100. - result["Ramachandran favored"]
mpscore = (( 0.426 * math.log(1 + clashscore) ) +
         ( 0.33 * math.log(1 + max(0, rota_out - 1)) ) +
         ( 0.25 * math.log(1 + max(0, rama_iffy - 2)) )) + 0.5
  • target_pdb (str) – Path to PDB file on which to do analysis.
  • molprobity_bin (str) – Path to phenix.molprobity executable. If None, it searches for it in the PATH or (if set) in the env. variable MOLPROBITY_EXECUTABLE. The function was tested with Phenix 1.9-1692 and with MolProbity 4.2 which also includes it.

Dictionary with scores produced by MolProbity. Entries:

  • “Ramachandran outliers” (percentage [0,100] as float)
  • “Ramachandran favored” (percentage [0,100] as float)
  • “Rotamer outliers” (percentage [0,100] as float)
  • “C-beta deviations” (int)
  • “Clashscore” (float)
  • “MolProbity score” (float)
  • “RMS(bonds)” (float)
  • “RMS(angles)” (float)

Return type:



FileNotFound if the “phenix.molprobity” executable is not found.

promod3.modelling.RunMolProbityEntity(ost_ent, molprobity_bin=None)

Run molprobity from phenix on given OST entity.

See RunMolProbity() for details.

Parameters:ost_ent (Entity) – OST entity on which to do analysis.

Print MolProbity score and its components to LogInfo.

Parameters:scores (dict) – MolProbity scores as generated by RunMolProbity().



Enter search terms or a module, class or function name.

Previous topic

Modelling Pipeline

Next topic

Handling Gaps

You are here