コード例 #1
0
ファイル: WaterProcessing.py プロジェクト: damjanmk/Raccoon2
    def weakWaterCleanup(self): #
        #pose, cutoff_weak = -0.35, cutoff_strong=-0.5, interact_dist=3.5 ):
        """ clean-up extra_weak waters (increment ['water_rec_over_penalty'], if necessary"""
        org_waters = len(self.pose['water_bridge'])
        #ignore_types = ['HD']

        lone_water = []
        interact_dist = self.interact_dist**2
        hb_types = ['OA', 'NA', 'SA', 'N', 'O', 'OA', 'NA', 'SA']
        hb_types += hf.METALS 
        for idx in range(len(self.pose['water_bridge'])):
            water = self.pose['water_bridge'][idx]
            score = self.pose['water_bridge_scores'][idx]
            # analyze only waters that are not ranked strong
            if score >= self.cutoff_strong: 
                atom_pool = [ a for a in self.pose['water_bridge_contacts'][idx] if hf.getAtype(a) in hb_types] 
                if self.debug:
                    hf.writeList('ATOM_POOL_%d_HB_%d.pdb' % (idx, sess), atom_pool, addNewLine=True)
                lone_water.append(water)
                try:
                    for a in atom_pool:
                        if (dist(water, a, sq=0)<= interact_dist):
                            #print "FOUND MATE",
                            #print dist(water, a, sq=True)
                            #print a.strip()
                            #print "------------------"
                            raise self.qs
                    #print "NO MATE FOR THIS", score
                    #print water.strip()
                except:
                    lone_water.remove(water)
                            
        for w in lone_water:
            idx = self.pose['water_bridge'].index(w)
            del self.pose['water_bridge'][idx]
            del self.pose['water_bridge_contacts'][idx]
        
            # EXPERIMENTAL
            #w_score = self.pose['water_bridge_scores'][idx]
            #if w_score > 
            # XXX THIS shouldn't happen:
            # a weakly bound water could be hanging in the bulk, but it should be accounted for
            # ...? 
            # how to describe the bulk solvent?
            # combine desolv map + discrete waters?
            # 

            self.pose['water_over_rec_penalty'].append( -self.pose['water_bridge_scores'].pop(idx) )
            # update PDBQT text
            #print pose['water_over_rec_penalty'] # XXX
            text_idx = self.pose['text'].index(w)
            del self.pose['text'][text_idx]


        if self.debug:
            print "LONE WATERS # REMOVED: ", (org_waters- len(self.pose['water_bridge']) )
コード例 #2
0
    def weakWaterCleanup(self): #
        #pose, cutoff_weak = -0.35, cutoff_strong=-0.5, interact_dist=3.5 ):
        """ clean-up extra_weak waters (increment ['water_rec_over_penalty'], if necessary"""
        org_waters = len(self.pose['water_bridge'])
        #ignore_types = ['HD']

        lone_water = []
        interact_dist = self.interact_dist**2
        hb_types = ['OA', 'NA', 'SA', 'N', 'O', 'OA', 'NA', 'SA']
        hb_types += hf.METALS 
        for idx in range(len(self.pose['water_bridge'])):
            water = self.pose['water_bridge'][idx]
            score = self.pose['water_bridge_scores'][idx]
            # analyze only waters that are not ranked strong
            if score >= self.cutoff_strong: 
                atom_pool = [ a for a in self.pose['water_bridge_contacts'][idx] if hf.getAtype(a) in hb_types] 
                if self.debug:
                    hf.writeList('ATOM_POOL_%d_HB_%d.pdb' % (idx, sess), atom_pool, addNewLine=True)
                lone_water.append(water)
                try:
                    for a in atom_pool:
                        if (dist(water, a, sq=0)<= interact_dist):
                            #print "FOUND MATE",
                            #print dist(water, a, sq=True)
                            #print a.strip()
                            #print "------------------"
                            raise self.qs
                    #print "NO MATE FOR THIS", score
                    #print water.strip()
                except:
                    lone_water.remove(water)
                            
        for w in lone_water:
            idx = self.pose['water_bridge'].index(w)
            del self.pose['water_bridge'][idx]
            del self.pose['water_bridge_contacts'][idx]
        
            # EXPERIMENTAL
            #w_score = self.pose['water_bridge_scores'][idx]
            #if w_score > 
            # XXX THIS shouldn't happen:
            # a weakly bound water could be hanging in the bulk, but it should be accounted for
            # ...? 
            # how to describe the bulk solvent?
            # combine desolv map + discrete waters?
            # 

            self.pose['water_over_rec_penalty'].append( -self.pose['water_bridge_scores'].pop(idx) )
            # update PDBQT text
            #print pose['water_over_rec_penalty'] # XXX
            text_idx = self.pose['text'].index(w)
            del self.pose['text'][text_idx]


        if self.debug:
            print "LONE WATERS # REMOVED: ", (org_waters- len(self.pose['water_bridge']) )