示例#1
0
    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
示例#2
0
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)