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
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
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)
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')
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) , )
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)
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)
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")