def recOverlapWaters(self): # pose, cutoff = CLASH, #ignore_types = ['HD', 'H', 'W'] ): """ INPUT : pdb lig (multi)model and pdb target model OUTPUT: cleaned pdb lig model """ #print "WARNING! missing interactions! Line B1" overlapping = [] atom_pool = [] cutoff = self.clash**2 #cutoff += 0.5 #cutoff = 0 #for a in self.pose['vdw_contacts']: # PDBQT, no-HD # XXX TODO BUG Line B1 for aset in self.pose[ 'water_bridge_contacts']: # PDBQT, no-HD # XXX TODO BUG Line B1 for a in aset: if not hf.getAtype(a) in self.ignore_types: atom_pool.append(a) if self.debug: fp = open('DEBUG_rec_overlap.pdb', 'w') fp.write("REMARK WATERS REMOVED BY RECEPTOR CLASHES") for w in self.pose['water_bridge']: try: # try/except is faster for a in atom_pool: #if hf.dist(w, a, sq=False) < self.clash: if hf.dist(w, a, sq=False) < cutoff: overlapping.append(w) self.pose['text'].remove(w) #print "\n\n\n #### REMOVED", w if self.debug: fp.write(w + "\n") fp.write(a + "\n") raise self.qs except: pass if self.debug: fp.close() print "Processed: %d | Rec-overlap %d" % (len( self.pose['water_bridge']), len(overlapping)) for w in overlapping: idx = self.pose['water_bridge'].index(w) del self.pose['water_bridge_contacts'][idx] self.pose['water_bridge'].remove(w) self.pose['water_over_rec'] = overlapping
def recOverlapWaters(self): # pose, cutoff = CLASH, #ignore_types = ['HD', 'H', 'W'] ): """ INPUT : pdb lig (multi)model and pdb target model OUTPUT: cleaned pdb lig model """ #print "WARNING! missing interactions! Line B1" overlapping = [] atom_pool = [] cutoff = self.clash**2 #cutoff += 0.5 #cutoff = 0 #for a in self.pose['vdw_contacts']: # PDBQT, no-HD # XXX TODO BUG Line B1 for aset in self.pose['water_bridge_contacts']: # PDBQT, no-HD # XXX TODO BUG Line B1 for a in aset: if not hf.getAtype(a) in self.ignore_types: atom_pool.append(a) if self.debug: fp = open('DEBUG_rec_overlap.pdb','w') fp.write("REMARK WATERS REMOVED BY RECEPTOR CLASHES") for w in self.pose['water_bridge']: try: # try/except is faster for a in atom_pool: #if hf.dist(w, a, sq=False) < self.clash: if hf.dist(w, a, sq=False) < cutoff: overlapping.append(w) self.pose['text'].remove(w) #print "\n\n\n #### REMOVED", w if self.debug: fp.write(w+"\n") fp.write(a+"\n") raise self.qs except: pass if self.debug: fp.close() print "Processed: %d | Rec-overlap %d" % (len(self.pose['water_bridge']), len(overlapping) ) for w in overlapping: idx = self.pose['water_bridge'].index(w) del self.pose['water_bridge_contacts'][idx] self.pose['water_bridge'].remove(w) self.pose['water_over_rec'] = overlapping