def writeVecStartStopToPDBFile(self, mainNegCentroid=[], outputPDBname='Dshift-vectors.pdb', weightedVectors=[]): # write located density shift vector start and stop # xyz positions to a pdb file so that they can then be # visualised in pymol (or otherwise). 'densMapObj' is # taken from readAtomMap.py (self.densmap). from classHolder import singlePDB from PDBFileManipulation import writePDBline vecStart = self.densMapObj.abc2xyz( asymIndices=mainNegCentroid[:3], fracInput=True) # append vector positions to a pdb file if it exists lineCount = 0 if os.path.isfile(outputPDBname): try: with open(outputPDBname) as f: i = -1 for i, l in enumerate(f): pass lineCount = i + 1 except IOError: pass vectorPDBfile = open(outputPDBname, 'a') atmIDparts = self.atmId.split('-') vecPosAsAtom = singlePDB( atomnum=lineCount, residuenum=atmIDparts[1], atomtype=atmIDparts[3], basetype='V0', chaintype=atmIDparts[0], X_coord=vecStart[0], Y_coord=vecStart[1], Z_coord=vecStart[2]) pdbLine = writePDBline(vecPosAsAtom, 1) vectorPDBfile.write(pdbLine + '\n') for i, vec in enumerate(weightedVectors): vecEnd = self.densMapObj.abc2xyz( asymIndices=np.array(mainNegCentroid[:3]) + vec, fracInput=True) vecPosAsAtom = singlePDB( atomnum=lineCount + i + 1, residuenum=atmIDparts[1], atomtype=atmIDparts[3], basetype='V' + str(i+1), chaintype=atmIDparts[0], X_coord=vecEnd[0], Y_coord=vecEnd[1], Z_coord=vecEnd[2]) pdbLine = writePDBline(vecPosAsAtom, 1) vectorPDBfile.write(pdbLine + '\n') vectorPDBfile.close()
def PDBtoList(pdbfilename,PDBarray): # this function inputs a pdb file name and returns an list of pdb objects, # organised following the StructurePDB class pdbin = open(str(pdbfilename), "r") lines = pdbin.readlines() print 'Reading PDB file and converting to list of objects' for line in lines: if ('ATOM' in str(line[0:6])) or ('HETATM' in str(line[0:6])): y = singlePDB(StructurePDB) y.atomnum = int(line[6:11].strip()) y.atomtype = str(line[12:16].strip()) y.basetype = str(line[17:20].strip()) y.chaintype = str(line[21]) y.residuenum = int(line[22:26].strip()) y.X_coord = float(line[30:38].strip()) y.Y_coord = float(line[38:46].strip()) y.Z_coord = float(line[46:54].strip()) y.Occupancy = str(line[54:60].strip()) y.Bfactor = float(line[60:66].strip()) y.atomID = str(line[76:78].strip()) y.atomOrHetatm = str(line[0:6].strip()) PDBarray.append(y) else: pass pdbin.close() return PDBarray
def writeVecStartStopToPDBFile( self, mainNegCentroid=[], outputPDBname="Dshift-vectors.pdb", densMapObj=[], weightedVectors=[] ): # write located density shift vector start and stop xyz positions # to a pdb file so that they can then be visualised in pymol (or otherwise). # 'densMapObj' is taken from readAtomMap.py (self.densmap). from classHolder import singlePDB from PDBFileManipulation import writePDBline vecStart = densMapObj.abc2xyz(asymIndices=mainNegCentroid[:3], fracInput=True) # append vector positions to a pdb file if it exists lineCount = 0 if os.path.isfile(outputPDBname): try: with open(outputPDBname) as f: i = -1 for i, l in enumerate(f): pass lineCount = i + 1 except IOError: pass vectorPDBfile = open(outputPDBname, "a") atmIDparts = self.atmId.split("-") vecPosAsAtom = singlePDB( atomnum=lineCount, residuenum=atmIDparts[1], atomtype=atmIDparts[3], basetype="V0", chaintype=atmIDparts[0], X_coord=vecStart[0], Y_coord=vecStart[1], Z_coord=vecStart[2], ) pdbLine = writePDBline(vecPosAsAtom, 1) vectorPDBfile.write(pdbLine + "\n") for i, vec in enumerate(weightedVectors): vecEnd = densMapObj.abc2xyz(asymIndices=np.array(mainNegCentroid[:3]) + vec, fracInput=True) # NOTE THAT PYMOL ARROWS SHOULD BE OF THE FORM BELOW # print 'cgo_arrow [{}],[{}],hlength=0.25,radius=0.05,hradius=0.075'. # format(','.join([str(round(v,2)) for v in vecStart]),','.join([str(round(v,2)) for v in vecEnd])) vecPosAsAtom = singlePDB( atomnum=lineCount + i + 1, residuenum=atmIDparts[1], atomtype=atmIDparts[3], basetype="V" + str(i + 1), chaintype=atmIDparts[0], X_coord=vecEnd[0], Y_coord=vecEnd[1], Z_coord=vecEnd[2], ) pdbLine = writePDBline(vecPosAsAtom, 1) vectorPDBfile.write(pdbLine + "\n") vectorPDBfile.close()