示例#1
0
 def func (self):
     self.bestbuild()
     npdb=NumPdb( "bestrotamers.pdb" )
     
     a=True
     z=2
     #while a==True:
     clashes,a=find_all_clashes(npdb)
     gtree=get_tree(npdb['xyz'])
     print clashes
     for i in clashes:
         localresi=[]
         #hole CA atom vom ersten clashpartner 
         r=npdb.sele(resno=i[0],atomname='CA')
         p=npdb.get('xyz',sele=r)
         #indices im 6 A umkreis um den clash
         l=gtree.query_ball_point(p,6)
         print l[0]
         #aus den indices eine liste mit residuname und nummer machen
         for x in l[0]:
             a=npdb.get('resname')[x]
             b=npdb.get('resno')[x]
             c=npdb.get('chain')[x]
             localresi.append([b,a,c])
         localresi=sorted(localresi)
         localresi=list(localresi for localresi,_ in itertools.groupby(localresi))
         #print localresi
         for index,i in enumerate (localresi):
             if i[1] not in ('ALA','GLY'):
                 rotadir="%s_%s_%i" % (i[2],i[1],i[0])
                 ccsortpath=os.path.join(self.result_direc,rotadir)
                 ccsort="%s/%s" % (ccsortpath,'ccsort.cpv')
                 print ccsortpath
                 
         break
示例#2
0
 def _get_ca (self,pdb_file,chain, residue):
     npdb=NumPdb( pdb_file )
     sele1={"resno": self.residue, "chain": self.chain}
     resname1=npdb.get('resname', **sele1)[0]
     sele={"resno": residue, "chain": chain, "resname": resname1 ,"atomname":'CA'}
     cacoord=npdb.get('xyz',**sele)
     return cacoord
示例#3
0
    def make_dry_pdb(self):
        envelope = self.msms0.envelope_msms.get_vert(filt=False)
        envelope = [(x['x'], x['y'], x['z']) for x in envelope]
        envelope_tree = scipy.spatial.KDTree(envelope)
        npdb_non = NumPdb(self.no_water_file, features=self.npdb_features)
        non_tree = scipy.spatial.KDTree(npdb_non['xyz'])

        pr2 = self.probe_radius * 2
        pr3 = self.probe_radius * 3
        wet_pdb = [(self.dowser.dowser_file, self.dowser_dry_pdb),
                   (self.processed_pdb, self.original_dry_pdb)]
        for pdb_file, out_file in wet_pdb:
            npdb = NumPdb(pdb_file, features=self.npdb_features)
            sele_het = npdb.sele(record="HETATM")
            sele_not_wat = npdb.sele(resname="HOH", invert=True)
            hetero_tree = get_tree(
                npdb.get('xyz', sele=(sele_het & sele_not_wat)))
            sele = npdb.sele()
            i = 0
            for numa in npdb.iter_resno(incomplete=True):
                flag = True
                if numa[0]['resname'] == 'HOH':
                    # assume the first water atom is the oxygen
                    dist_env = envelope_tree.query(numa['xyz'][0])[0]
                    dist_het = hetero_tree.query(numa['xyz'][0])[0]
                    dist_non = non_tree.query(numa['xyz'][0])[0]
                    # TODO het cutoff only for dowser_file
                    if dist_env < pr2 or dist_het < 3.9 or dist_non > pr3:
                        flag = False
                for a in numa._atoms:
                    sele[i] = flag
                    i += 1
            npdb.copy(sele=sele).write2(out_file)
示例#4
0
 def func (self):
     npdb=NumPdb( self.pdb_file )
     clashes,a=find_all_clashes(npdb)
     gtree=get_tree(npdb['xyz'])
     lclashes=[]
     print clashes
     resi=range(self.residue_1,self.residue_2)
     print resi
     for i in clashes:
         print i[0], i[1]
         if (i[0] or i[1]) in resi:
             lclashes.append(i)
         else:
             continue
     for x in lclashes:
         print x 
     
         as1=x[0]
         as2=x[1]
         resname100=npdb.get('resname',resno=as1)[0]
         resname101=npdb.get('resname',resno=as2)[0]
         #    #print resname100, resname101, i
         if (resname100 and resname101) not in ('ALA','GLY'):
                 chain100=npdb.get('chain',resno=as1)[0]
                 chain101=npdb.get('chain',resno=as2)[0]
                 #print resname101
                 resno1=get_rotno(resname100)
                 resno2=get_rotno(resname101)
                 if resno1 >= resno2 :
         #            #print "anzahl rota" ,resno1,resno2
                     sele={'resno':as1}
                     atom_no= npdb.index(**sele)
         #            #erster clashpartner
                     rotadir="%s_%s_%i" % (chain100,resname100,as1)
                     ccsortpath=os.path.join(self.result_direc,rotadir)
                     ccsort="%s/%s" % (ccsortpath,'ccsort.cpv')
                 else:
                     sele={'resno':as2}
                     atom_no= npdb.index(**sele)
                     rotadir="%s_%s_%i" % (chain101,resname101,as2)
                     ccsortpath=os.path.join(self.result_direc,rotadir)
                     ccsort="%s/%s" % (ccsortpath,'ccsort.cpv')
示例#5
0
 def _pre_exec( self ):
     npdb=NumPdb( self.pdb_file )
     sele={"resno": self.residue, "chain": self.chain}
     resname1=npdb.get('resname', **sele)[0]
     num_rota=get_rotno(resname1)
     coords=self._get_ca(self.pdb_file,self.chain, self.residue)
     print "huh" ,coords [0] [0]
     x_ca= coords[0] [0]
     y_ca=coords [0][1]
     z_ca=coords [0] [2]
     self._make_script_file(
     x_ca= x_ca,
     y_ca=y_ca,
     z_ca=z_ca,
     map_name=self.relpath(self.map_file, no_ext=True) ,
     pixelsize=self.pixelsize,
     resolution=self.resolution,
     pdb_file=self.relpath(self.pdb_file, no_ext=False) ,
     )
示例#6
0
 def make_final_pdb(self):
     npdb_dow = NumPdb(self.dowser_dry_pdb, features=self.npdb_features)
     npdb_org = NumPdb(self.original_dry_pdb, features=self.npdb_features)
     dow_tree = get_tree(npdb_dow.get('xyz', resname="HOH"))
     sele = npdb_org.sele()
     i = 0
     for numa in npdb_org.iter_resno(incomplete=True):
         flag = False
         if numa[0]['resname'] == 'HOH':
             dist = dow_tree.query(numa['xyz'][0])[0]
             if dist > 2.7:
                 flag = True
         for a in numa._atoms:
             sele[i] = flag
             i += 1
     coords_dow, atoms_dow = npdb_dow._select()
     coords_org, atoms_org = npdb_org._select(sele=sele)
     npdb_final = NumAtoms(np.hstack((atoms_dow, atoms_org)),
                           np.vstack((coords_dow, coords_org)))
     npdb_final.write2(self.final_pdb)
示例#7
0
    def _pre_exec( self ):
        npdb=NumPdb( self.pdb_file )
        sele={"resno": self.residue, "chain": self.chain}
        resname1=npdb.get('resname', **sele)[0]
        num_rota=get_rotno(resname1)
        coords=self._get_ca(self.pdb_file,self.chain, self.residue)
        print "huh" ,coords [0] [0]

        x_ca= coords[0] [0]
        y_ca=coords [0][1]
        z_ca=coords [0] [2]
        self._make_script_file(
            resolution=self.resolution,
            pixelsize=self.pixelsize,
            map_name=self.relpath( self.map_file, no_ext=True ),
            x_ca=x_ca ,
            y_ca=y_ca,
            z_ca=z_ca,
            cc_dir=self.relpath( self.sidechain_dir ) + os.sep,
            num_rota=num_rota,
            resname1=self.relpath (self.sidechain_dir)+ os.sep+resname1,
            residue=self.residue
            )
        MakeAllRotameres(self.pdb_file, self.chain,self.residue,zfill=2,output_dir=self.sidechain_dir)
示例#8
0
 def func( self ):
     tmdet_xml = tmdet( self.pdb_file )
     if not tmdet_xml:
         tmdet_xml=" "
     with open( self.tmdet_file, "w" ) as fp:
         fp.write( tmdet_xml )
     with open(self.tmdet_file, 'r') as fp:
         text = fp.read()
         if text != " ":
             O = []
             N = []
             s = text
             s = s.replace("\n", " ")
             result = re.findall('<CHAIN(.*?)TYPE="alpha"', s)
             if result:
                 chain = re.findall('CHAINID="(.*?)"', result[0])
                 regiontext = re.findall('TYPE="alpha"(.*?)</CHAIN>',s)
                 regions = re.findall('<REGION (.*?)type="H"/>', regiontext[0])
                 found = []
                 for reg in regions:
                     regio = reg.split("REGION")[-1]
                     pdb_beg = re.findall('pdb_beg="(.*?)"', regio)
                     pdb_end = re.findall('pdb_end="(.*?)"', regio)
                     found.append([ int(pdb_beg[0])-1, int(pdb_end[0])+1 ])
                 for index, elem in enumerate(found):
                     N.append(elem[index%2])
                     O.append(elem[(index+1)%2])
                 npdb = NumPdb( self.pdb_file, features={
                     "phi_psi": False, "sstruc": False, "backbone_only": True
                 })
                 sele = {"chain": chain[-1]}
                 with open(self.ply_file, 'w') as fp2:
                     fp2.write(  "ply\n"+\
                                 "format ascii 1.0\n"+\
                                 "element vertex 8\n"+\
                                 "property float x\n"+\
                                 "property float y\n"+\
                                 "property float z\n"+\
                                 "property uchar red\n"+\
                                 "property uchar green\n"+\
                                 "property uchar blue\n"+\
                                 "element face 4\n"+\
                                 "property list uchar int vertex_indices\n"+\
                                 "property uchar red\n"+\
                                 "property uchar green\n"+\
                                 "property uchar blue\n"+\
                                 "end_header\n")
                     for val in [N, O]:
                         alln = []
                         if val == N:
                             sele["atomname"] = "C"
                         elif val == O:
                             sele["atomname"] = "N"
                         else:
                             print 'error'
                         for elem in val:
                             sele["resno"] = elem
                             coords = npdb.get( 'xyz', **sele )
                             if coords.size != 0:
                                 alln.append(coords[0].tolist())
                         point, normall = planeFit(np.array(alln).transpose())
                         distance = scipy.spatial.distance.cdist(alln, [point])
                         if val == N:
                             normal = normall
                             distances = distance
                         d = -point.dot(normal)
                         maxdist = max(distances)[0]+2
                         xx = np.array([point[0]+maxdist, point[0]+maxdist, point[0]-maxdist, point[0]-maxdist])
                         yy = np.array([point[1]+maxdist, point[1]-maxdist, point[1]+maxdist, point[1]-maxdist])
                         z = (-normal[0] * xx - normal[1] * yy - d) * 1. /normal[2]
                         fp2.write( str( xx[0] )+" "+str( yy[0] )+" "+str( z[0] )+" 255\t0\t0\n")
                         fp2.write( str( xx[1] )+" "+str( yy[1] )+" "+str( z[1] )+" 255\t0\t0\n")
                         fp2.write( str( xx[2] )+" "+str( yy[2] )+" "+str( z[2] )+" 255\t0\t0\n")
                         fp2.write( str( xx[3] )+" "+str( yy[3] )+" "+str( z[3] )+" 255\t0\t0\n")
                     fp2.write("3 0 1 2 255\t0\t0\n")
                     fp2.write("3 1 2 3 255\t0\t0\n")
                     fp2.write("3 4 5 6 255\t0\t0\n")
                     fp2.write("3 5 6 7 255\t0\t0\n")