diff --git a/modules/mol/alg/pymod/ligand_scoring_base.py b/modules/mol/alg/pymod/ligand_scoring_base.py index 86a379fac5e2b59645c4a422743fb4f50b58f0bc..44ad4d18e14c9445f7a28e6614f03abe49426d33 100644 --- a/modules/mol/alg/pymod/ligand_scoring_base.py +++ b/modules/mol/alg/pymod/ligand_scoring_base.py @@ -66,7 +66,7 @@ class LigandScorer: A common use case is to derive a one-to-one mapping between ligands in the model and the target for which :class:`LigandScorer` provides an - automated assignment procedure. + automated :attr:`assignment` procedure. By default, only exact matches between target and model ligands are considered. This is a problem when the target only contains a subset of the expected atoms (for instance if atoms are missing in an @@ -86,7 +86,7 @@ class LigandScorer: :class:`LigandScorer` generally assumes that the :attr:`~ost.mol.ResidueHandle.is_ligand` property is properly set on all - the ligand atoms, and only ligand atoms. This is typically the case for + the ligand residues, and only ligand atoms. This is typically the case for entities loaded from mmCIF (tested with mmCIF files from the PDB and SWISS-MODEL). Legacy PDB files must contain `HET` headers (which is usually the case for files downloaded from the PDB but not elsewhere). diff --git a/modules/mol/alg/pymod/ligand_scoring_lddtpli.py b/modules/mol/alg/pymod/ligand_scoring_lddtpli.py index be245c63f22353b344b1345210b8cb44c8d4a08d..2e32431ccad1562c1c5323952625fcf02c8196a7 100644 --- a/modules/mol/alg/pymod/ligand_scoring_lddtpli.py +++ b/modules/mol/alg/pymod/ligand_scoring_lddtpli.py @@ -26,20 +26,16 @@ class LDDTPLIScorer(ligand_scoring_base.LigandScorer): and an lDDT-PLI score is computed. The best possible lDDT-PLI score is returned. - By default, classic lDDT is computed. That means, contacts within - *lddt_pli_radius* are identified in the target and checked if they're - conserved in the model. Added contacts are not penalized. That means if - the ligand is nicely placed in the correct pocket, but that pocket now - suddenly interacts with MORE residues in the model, you still get a high - score. You can penalize for these added contacts with the - *add_mdl_contacts* flag. This additionally considers contacts within - *lddt_pli_radius* in the model but only if the involved atoms can - be mapped to the target. This is a requirement to 1) extract the respective - reference distance from the target 2) avoid usage of contacts for which - we have no experimental evidence. One special case are - contacts from chains that are NOT mapped to the target binding site. It is - very well possible that we have experimental evidence for this chain though - its just too far away from the target binding site. + The lDDT-PLI score is a variant of lDDT with a custom inclusion radius + (`lddt_pli_radius`), no stereochemistry checks, and which penalizes + contacts added in the model within `lddt_pli_radius` by default + (can be changed with the `add_mdl_contacts` flag) but only if the involved + atoms can be mapped to the target. This is a requirement to + 1) extract the respective reference distance from the target + 2) avoid usage of contacts for which we have no experimental evidence. + One special case are contacts from chains that are not mapped to the target + binding site. It is very well possible that we have experimental evidence + for this chain though its just too far away from the target binding site. We therefore try to map these contacts to the chain in the target with equivalent sequence that is closest to the target binding site. If the respective atoms can be mapped there, the contact is considered not @@ -47,7 +43,7 @@ class LDDTPLIScorer(ligand_scoring_base.LigandScorer): Populates :attr:`LigandScorer.aux_data` with following :class:`dict` keys: - * lddt_pli: The score + * lddt_pli: The LDDT-PLI score * lddt_pli_n_contacts: Number of contacts considered in lDDT computation * target_ligand: The actual target ligand for which the score was computed * model_ligand: The actual model ligand for which the score was computed diff --git a/modules/mol/alg/pymod/ligand_scoring_scrmsd.py b/modules/mol/alg/pymod/ligand_scoring_scrmsd.py index 345057a7e9b91b514dac4a5627781730d214cc4c..15ef917b48eb4bbcd4c0d97fcf3900ceb8c88d40 100644 --- a/modules/mol/alg/pymod/ligand_scoring_scrmsd.py +++ b/modules/mol/alg/pymod/ligand_scoring_scrmsd.py @@ -15,7 +15,7 @@ class SCRMSDScorer(ligand_scoring_base.LigandScorer): The returned RMSD is based on a binding site superposition. The binding site of the target structure is defined as all residues with at - least one atom within *bs_radius* around the target ligand. + least one atom within `bs_radius` around the target ligand. It only contains protein and nucleic acid residues from chains that pass the criteria for the :class:`chain mapping <ost.mol.alg.chain_mapping>`. This means ignoring @@ -24,10 +24,10 @@ class SCRMSDScorer(ligand_scoring_base.LigandScorer): The respective model binding site for superposition is identified by naively enumerating all possible mappings of model chains onto their chemically equivalent target counterparts from the target binding site. - The *binding_sites_topn* with respect to lDDT score are evaluated and + The `binding_sites_topn` with respect to lDDT score are evaluated and an RMSD is computed. You can either try to map ALL model chains onto the target binding site by - enabling *full_bs_search* or restrict the model chains for a specific + enabling `full_bs_search` or restrict the model chains for a specific target/model ligand pair to the chains with at least one atom within *model_bs_radius* around the model ligand. The latter can be significantly faster in case of large complexes. @@ -38,14 +38,15 @@ class SCRMSDScorer(ligand_scoring_base.LigandScorer): Populates :attr:`LigandScorer.aux_data` with following :class:`dict` keys: * rmsd: The BiSyRMSD score - * lddt_lp: lDDT of the binding pocket used for superposition + * lddt_lp: lDDT of the binding pocket used for superposition (lDDT-LP) * bs_ref_res: :class:`list` of binding site residues in target * bs_ref_res_mapped: :class:`list` of target binding site residues that are mapped to model * bs_mdl_res_mapped: :class:`list` of same length with respective model residues - * bb_rmsd: Backbone RMSD (CA, C3' for nucleotides) for mapped residues - given transform + * bb_rmsd: Backbone RMSD (CA, C3' for nucleotides; full backbone for + binding sites with fewer than 3 residues) for mapped binding site + residues after superposition * target_ligand: The actual target ligand for which the score was computed * model_ligand: The actual model ligand for which the score was computed * chain_mapping: :class:`dict` with a chain mapping of chains involved in