def __init__(self, PERMISSIVE=1, get_header=0, LayoutDatabase=False): self._PERMISSIVE = PERMISSIVE #If LayoutDatabase, I'll load the classes about database. Otherwise, I'll not load them. self._pdbFileLayout = PDBFileLayout() self._dicResidue = {} self._dicSeqRes = {} #self._structure_builder=StructureBuilder() self._structure_builder = FcfrpStructureBuilder()
class FcfrpPDBParser(): def __init__(self, PERMISSIVE=1, get_header=0, LayoutDatabase=False): self._PERMISSIVE = PERMISSIVE #If LayoutDatabase, I'll load the classes about database. Otherwise, I'll not load them. self._pdbFileLayout = PDBFileLayout() self._dicResidue = {} self._dicSeqRes = {} #self._structure_builder=StructureBuilder() self._structure_builder = FcfrpStructureBuilder() def _loadAtomsfromFile(self, id, dicAtom): i_a = 0 #atom index #Create reference variables reference_chain = None reference_residue = None reference_resName = None reference_model = None inserted_model0 = False while i_a < dicAtom.__len__(): resname = dicAtom[i_a].getResName() resseq = dicAtom[i_a].getResSeq() icode = dicAtom[i_a].getIcode() residueId = ("", resseq, icode) #Model if reference_model != dicAtom[i_a].getModel() or dicAtom[i_a].getModel() == None: if dicAtom[i_a].getModel() == None: #Cristalografy reference_model = 0 if inserted_model0 == False: self._structure_builder.init_model(reference_model) inserted_model0 = True else: reference_model = dicAtom[i_a].getModel() self._structure_builder.init_model(reference_model) reference_chain = None reference_residue = None reference_resName = None #Segid self._structure_builder.init_seg("") #Chain and Residue if reference_chain != dicAtom[i_a].getChainId(): reference_chain = dicAtom[i_a].getChainId() self._structure_builder.init_chain(reference_chain) #Because changed chain, it's necessary start a new residue in structure reference_residue = residueId reference_resName = resname self._structure_builder.init_residue(resname, "", resseq, icode) elif reference_resName != resname or reference_residue != residueId: reference_resName = resname reference_residue = residueId self._structure_builder.init_residue(resname, "", resseq, icode) #Atom self._structure_builder.init_atom(dicAtom[i_a].get_id(), dicAtom[i_a].get_coord(), dicAtom[i_a].get_bfactor(), dicAtom[i_a].get_occupancy() , dicAtom[i_a].get_altloc(), dicAtom[i_a].get_fullname(), dicAtom[i_a].get_serial_number()) i_a = i_a + 1 def _loadSeqResfromFile(self, id): self._structure_builder.init_SeqRes(id) self._structure_builder.structure.add_SeqRes(self._pdbFileLayout.getSeqRes(), self._pdbFileLayout.getRes()) def _loadSSBondsfromfile(self,id): self._structure_builder.init_SSBonds(id) self._structure_builder.structure.add_SSBonds(self._pdbFileLayout.getSSBonds()) def _loadErrorsfromFile(self, id, structure, pathfileName, chainId ): self._structure_builder.init_ErrorStructure(id) errors, vs = hasErrorFileStructure(structure,pathfileName , chainId) if len(errors) > 0: standard = FcfrpStandardizationPDBErrorDetails() self._pdbFileLayout.setStructureErrors(errors, vs, standard) self._structure_builder.structure.add_StructureErrors(self._pdbFileLayout.getStructureErrors()) def loadStructureFromFile(self, id, pathfileName, chainId=None): dir, fileName = os.path.split(pathfileName) filePDB = FcfrpFile(dir, fileName) #Define Model value currentModel = None #Start the Structure self._structure_builder.init_structure(id) #Here the PDB file will read and separate in dictionaries. for line in filePDB.readLines(): record = line.split() if record[0] == "SEQRES": if self.checkChain(record[2], chainId) == True: self._pdbFileLayout.setRes(record) self._pdbFileLayout.setSeqRes(record) elif record[0] == "SSBOND": if self.checkChain(line[15:16], chainId) == True: self._pdbFileLayout.setSSBonds(line) elif record[0] == "MODEL": #The MODEL line is MODEL 1 # So, when split command is used, the result'll be ['MODEL', '1'] #Therefore, the currentModel represents the Model. If there isn't model, its value'll be always zero. currentModel = int(record[1]) elif record[0] == "ATOM": if self.checkChain(line[21:22], chainId) == True: self._pdbFileLayout.setAtom(currentModel,line) #Here the dictionaries have been created by for command above, they will be used in specific methods. These methods # represent each PDB file section. self._loadSeqResfromFile(id) self._loadSSBondsfromfile(id) self._loadAtomsfromFile(id, self._pdbFileLayout.getAtoms()) structure = self._structure_builder.get_structure() self._loadErrorsfromFile(id, structure, pathfileName, chainId) #print "Comentado checagem de erro qdo arquvivo PDB" return structure def checkChain(self, chainIdFile, chainIdSelected): cont = False if chainIdSelected == None: cont = True elif chainIdFile == chainIdSelected: cont = True else: cont = False return cont