def get_res_key_and_atom(self, atom_info) : resd = mdb_utils.get_resd(self.pdb_code,atom_info) MDBRes = mdb_utils.MDBResidue(**resd) reskey = MDBRes.get_residue_key() # since this is an atom there should be an alternat included if it exists # thus there is no reason to check for alternates like we do with residues. # if this assertion fails...happy hunting for why assert reskey in self.residues.keys() return reskey, atom_info.name
def run_ramalyze(self) : from mmtbx.validation import ramalyze ramalyze_result = ramalyze.ramalyze(self.hierarchy) for result in ramalyze_result.results : resd = mdb_utils.get_resd(self.pdb_code,result) MDBRes = mdb_utils.MDBResidue(**resd) reskey = MDBRes.get_residue_key() if reskey not in self.residues.keys(): # alternates likely exist reskeys = self.get_alternate_keys(resd) for k in reskeys : self.residues[k].add_ramalyze_result(result) else : # No alternates self.residues[reskey].add_ramalyze_result(result)
def run_omegalyze(self) : from mmtbx.validation import omegalyze omegalyze_result = omegalyze.omegalyze( pdb_hierarchy = self.hierarchy, nontrans_only = False, out = sys.stdout, quiet = False) for result in omegalyze_result.results : resd = mdb_utils.get_resd(self.pdb_code,result) MDBRes = mdb_utils.MDBResidue(**resd) reskey = MDBRes.get_residue_key() if reskey not in self.residues.keys(): # alternates likely exist reskeys = self.get_alternate_keys(resd) for k in reskeys : self.residues[k].add_omegalyze_result(result) else : # No alternates self.residues[reskey].add_omegalyze_result(result)
def run_cablam(self) : from mmtbx.validation import cablam cablam_result = cablam.cablamalyze( pdb_hierarchy = self.hierarchy, outliers_only = False, out = sys.stdout, quiet = False) t = True for result in cablam_result.results : resd = mdb_utils.get_resd(self.pdb_code,result) MDBRes = mdb_utils.MDBResidue(**resd) reskey = MDBRes.get_residue_key() if not result.prevres : continue if reskey in self.residues.keys() : self.residues[reskey].add_cablam_result(result) elif MDBRes.altloc != '' : # alts exist in reskey but the actual residue has no alt #assert MDBRes.altloc != '','"%s"' % MDBRes.altloc newkey = MDBRes.get_residue_key(no_alt=True) if newkey not in self.residues.keys() : print >> sys.stderr, 'WARNING : trouble finding %s' % reskey else : #print ' ' + newkey,newkey in self.residues.keys() cal = result.altloc result.altloc = ' ' self.residues[newkey].add_cablam_result(result,cablam_altloc=cal) else : # Side chain has alternates but bb does not. for l in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' : newkey = MDBRes.get_residue_key(assign_alt=l) if newkey in self.residues.keys() : result.altloc = l self.residues[newkey].add_cablam_result(result) newkey = MDBRes.get_residue_key(assign_alt=l.lower()) if newkey in self.residues.keys() : result.altloc = l.lower() result.altloc = self.residues[newkey].add_cablam_result(result)
def run_clashscore_validation(self) : from val_clashscore import CLASHSCOREvalidation try : vc = CLASHSCOREvalidation(self.pdb_file,self.detail,self.mdb_document, self.pdb_code,self.do_flips) except : pass else : self.mdb_document = vc.mdb_document if self.detail == 'residue' : for clash in vc.result.results : clashatoms = [] for i,atom in enumerate(clash.atoms_info) : resd = mdb_utils.get_resd(self.pdb_code,atom) MDBRes = mdb_utils.MDBResidue(**resd) reskey = MDBRes.get_residue_key() # When dealing with alts in only a portion of the residue, reskey # (as just defined) will not be found in self.residues.keys(). # The reason is that initiate_residues takes a residue with n alts # and splits into n separate residues. e.g. if a residue has alt # A and B in one residue atom for just sidchain atoms, there will # exist two residues, A and B, both having the atoms that don't have # alts and each having their respective alt atoms. When this is the # case we remedy by putting the clash in both A and B. This is what # the folllowing code is doing. if reskey not in self.residues.keys(): reskeys = self.get_alternate_keys(resd) reskey = [k for k in reskeys] clashatoms.append({'targ_reskey':reskey, 'targname':atom.name, 'overlap':clash.overlap}) assert len(clashatoms) == 2 # targ and src can be confusing here. The following puts targ reskey # targname in the coresponding src residue. Take the following clash : # A 72 ARG HG2 A 72 ARG O :-1.038 # clashatoms[0] = {'targname': ' HG2', 'targ_reskey': '1ubqA72ARG'} # clashatoms[1] = {'targname': ' O ', 'targ_reskey': '1ubqA72ARG'} # we then put the src name in next : clashatoms[0]['srcname'] = clashatoms[1]['targname'] clashatoms[1]['srcname'] = clashatoms[0]['targname'] # next we add clashatoms[1] to the residue object corresponding to # clashatoms[0] and vise versa. if type(clashatoms[0]['targ_reskey']) == list : for tk in clashatoms[0]['targ_reskey'] : if type(clashatoms[1]['targ_reskey']) == list : for sk in clashatoms[1]['targ_reskey'] : newdict = {'targ_reskey':sk, 'targname':clashatoms[1]['targname'], 'overlap':clashatoms[1]['overlap']} self.residues[tk].add_clash(newdict) else : self.residues[tk].add_clash(clashatoms[1]) else: self.residues[clashatoms[0]['targ_reskey']].add_clash(clashatoms[1]) if type(clashatoms[1]['targ_reskey']) == list : for tk in clashatoms[1]['targ_reskey'] : if type(clashatoms[0]['targ_reskey']) == list : for sk in clashatoms[0]['targ_reskey'] : newdict = {'targ_reskey':sk, 'targname':clashatoms[0]['targname'], 'overlap':clashatoms[0]['overlap']} self.residues[tk].add_clash(newdict) else : self.residues[tk].add_clash(clashatoms[0]) else: self.residues[clashatoms[1]['targ_reskey']].add_clash(clashatoms[0])