From 80e2a57de5693764f976e27b89a7ac496771c1dd Mon Sep 17 00:00:00 2001 From: Gabriel Studer <gabriel.studer@unibas.ch> Date: Thu, 2 Mar 2023 17:34:54 +0100 Subject: [PATCH] bugfix In principle we have three types of structures in the scorer (terrible I know). 1) the actual strucures that are only molcked 2) the structures as they are used in the chain mapper (complete backbone) 3) same as 1) but stereochecked. The alignments required at this position are of category 3 but they were 2. --- modules/mol/alg/pymod/scoring.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/modules/mol/alg/pymod/scoring.py b/modules/mol/alg/pymod/scoring.py index 78bfe9284..a6ba9174c 100644 --- a/modules/mol/alg/pymod/scoring.py +++ b/modules/mol/alg/pymod/scoring.py @@ -952,19 +952,24 @@ class Scorer: # lDDT requires a flat mapping with mdl_ch as key and trg_ch as value flat_mapping = self.mapping.GetFlatMapping(mdl_as_key=True) - lddt_alns = dict() + # make alignments accessible by mdl seq name + stereochecked_alns = dict() for aln in self.stereochecked_aln: mdl_seq = aln.GetSequence(1) - lddt_alns[mdl_seq.name] = aln + stereochecked_alns[mdl_seq.name] = aln + alns = dict() + for aln in self.aln: + mdl_seq = aln.GetSequence(1) + alns[mdl_seq.name] = aln lddt_chain_mapping = dict() for mdl_ch, trg_ch in flat_mapping.items(): - if mdl_ch in lddt_alns: + if mdl_ch in stereochecked_alns: lddt_chain_mapping[mdl_ch] = trg_ch lddt_score = self.lddt_scorer.lDDT(self.stereochecked_model, chain_mapping = lddt_chain_mapping, - residue_mapping = lddt_alns, + residue_mapping = stereochecked_alns, check_resnames=False, local_lddt_prop="lddt")[0] local_lddt = dict() @@ -990,8 +995,7 @@ class Scorer: # fetch trg residue from non-stereochecked aln trg_r = None if cname in flat_mapping: - aln = self.mapping.alns[(flat_mapping[cname], cname)] - for col in aln: + for col in alns[cname]: if col[0] != '-' and col[1] != '-': if col.GetResidue(1).number == r.number: trg_r = col.GetResidue(0) -- GitLab