def findIn(self, structure): example = Structure(self.pdbid) # TODO : implement model stuff :( model = structure[0] modelFeature = Model(0) example.add(modelFeature) for chain in model: if chain.chainID == self.chain or self.chain == " ": #print("[%s]" % chain.chainID) chainFeature = Chain(chain.chainID, chainType="Protein") # XXX obviously better to access by index... for residue in chain: if self.residueStart <= int(residue.number) <= self.residueEnd: # XXX better to use copy()? residueFeature = Residue(residue.number, residue.resname) for atom in residue: residueFeature.add(copy(atom)) chainFeature.add(residueFeature) modelFeature.add(chainFeature) else: continue # now add the ligand (as of this moment, a water molecule) XXX ugh! waterChain = Chain("Water", "Water") waterResidue = Residue(self.ligand_num, "HOH") #print("getting", self.ligand_num) waterchains = structure.chainsOfType("Water") #print("chains", waterchains) existingWater = waterchains[0].getResidueNumber(self.ligand_num) waterResidue.add(copy(existingWater.getAtom("O"))) waterChain.add(waterResidue) modelFeature.add(waterChain) return example
class StructureBuilder: def __init__(self): self.reset() def reset(self): self.structure = None self.model = None self.chain = None self.residue = None self.modelID = None self.chainID = None self.chainType = None self.segID = None self.residueID = None self.resname = None def getStructure(self): structure = self.structure self.reset() return structure def initStructure(self, structureID): self.structure = Structure(structureID) self.initModel() def initModel(self): if self.modelID is None: self.modelID = 0 else: self.modelID += 1 self.model = Model(self.modelID) self.structure.add(self.model) self.chainID = None self.chainType = None def initChain(self, chainID, chainType): self.chainID = chainID self.chainType = chainType self.chain = Chain(chainID, chainType) self.model.add(self.chain) def registerLine(self, residueID, resname, resseq, icode, segID, chainID, chainType): if self.chainID != chainID or chainType != self.chainType: self.initChain(chainID, chainType) self.initResidue(residueID, resname, resseq, icode) elif self.residueID != residueID or self.resname != resname: self.initResidue(residueID, resname, resseq, icode) if self.segID != segID: self.segID = segID def initResidue(self, residueID, resname, resnum, icode): self.residueID = residueID self.resname = resname self.residue = Residue(residueID, resname, self.segID) self.chain.add(self.residue) def initAtom(self, name, coord, b_factor, occupancy, altloc): atom = Atom(name, coord, b_factor, occupancy, altloc) self.residue.add(atom)