Пример #1
0
 def _setupChain(self, circular, properties, conf):
     self.atoms = []
     self.bonds = []
     for g in self.groups:
         self.atoms.extend(g.atoms)
         self.bonds.extend(g.bonds)
     for i in range(len(self.groups)-1):
         link1 = self.groups[i].chain_links[1]
         link2 = self.groups[i+1].chain_links[0]
         self.bonds.append(Bonds.Bond((link1, link2)))
     if circular:
         link1 = self.groups[-1].chain_links[1]
         link2 = self.groups[0].chain_links[0]
         self.bonds.append(Bonds.Bond((link1, link2)))
     self.bonds = Bonds.BondList(self.bonds)
     self.parent = None
     self.type = None
     self.configurations = {}
     try:
         self.name = properties['name']
         del properties['name']
     except KeyError:
         self.name = ''
     if conf:
         conf.applyTo(self)
     try:
         self.translateTo(properties['position'])
         del properties['position']
     except KeyError:
         pass
     self.addProperties(properties)
Пример #2
0
 def replaceResidue(self, r_old, r_new):
     for a in r_old.atoms:
         self.atoms.remove(a)
     obsolete_bonds = []
     for b in self.bonds:
         if b.a1 in r_old.atoms or b.a2 in r_old.atoms:
             obsolete_bonds.append(b)
     for b in obsolete_bonds:
         self.bonds.remove(b)
     n = self.groups.index(r_old)
     if n > 0:
         for b in self.bonds.bondsOf(r_old.peptide.N):
             self.bonds.remove(b)
     if n < len(self.groups)-1:
         for b in self.bonds.bondsOf(r_old.peptide.C):
             self.bonds.remove(b)
     PeptideChain.replaceResidue(self.part_of, r_old, r_new)
     self.groups[n] = r_new
     self.atoms.extend(r_new.atoms)
     self.bonds.extend(r_new.bonds)
     if n > 0:
         self.bonds.append(Bonds.Bond((self.groups[n-1].peptide.C,
                                       self.groups[n].peptide.N)))
     if n < len(self.groups)-1:
         self.bonds.append(Bonds.Bond((self.groups[n].peptide.C,
                                       self.groups[n+1].peptide.N)))
Пример #3
0
 def replaceResidue(self, r_old, r_new):
     """
     :param r_old: the residue to be replaced (must be part of the chain)
     :type r_old: Residue
     :param r_new: the residue that replaces r_old
     :type r_new: Residue
     """
     n = self.groups.index(r_old)
     for a in r_old.atoms:
         self.atoms.remove(a)
     obsolete_bonds = []
     for b in self.bonds:
         if b.a1 in r_old.atoms or b.a2 in r_old.atoms:
             obsolete_bonds.append(b)
     for b in obsolete_bonds:
         self.bonds.remove(b)
     r_old.parent = None
     self.atoms.extend(r_new.atoms)
     self.bonds.extend(r_new.bonds)
     r_new.sequence_number = n + 1
     if r_old.name.startswith(r_old.symbol):
         r_new.name = r_new.symbol + r_old.name[len(r_old.symbol):]
     else:
         r_new.name = r_new.symbol + ` n + 1 `
     r_new.parent = self
     self.groups[n] = r_new
     if n > 0:
         peptide_old = self.bonds.bondsOf(r_old.peptide.N)
         if peptide_old:
             self.bonds.remove(peptide_old[0])
         if not (self.groups[n - 1].isCTerminus()
                 or self.groups[n].isNTerminus()):
             # ConnectedChain objects can have N/C-terminal
             # residues inside the (virtual) chain, so the
             # test is necessary.
             self.bonds.append(
                 Bonds.Bond((self.groups[n - 1].peptide.C,
                             self.groups[n].peptide.N)))
     if n < len(self.groups) - 1:
         peptide_old = self.bonds.bondsOf(r_old.peptide.C)
         if peptide_old:
             self.bonds.remove(peptide_old[0])
         if not (self.groups[n].isCTerminus()
                 or self.groups[n + 1].isNTerminus()):
             self.bonds.append(
                 Bonds.Bond((self.groups[n].peptide.C,
                             self.groups[n + 1].peptide.N)))
     if isinstance(self.parent, ChemicalObjects.Complex):
         self.parent.recreateAtomList()
     universe = self.universe()
     if universe is not None:
         universe._changed(True)
Пример #4
0
    def __init__(self, m, ident, owner):
        from MMTK import Bonds
        self.chimeraMolecule = m
        self.needParmchk = set([])
        self.frcmod = None
        self.atomMap = owner.atomMap

        self.name = m.name
        self.parent = None
        self.type = None
        self.groups = []
        for r in m.residues:
            v = self._findStandardResidue(r)
            if v is None:
                self._makeNonStandardResidue(r)
            else:
                self._makeStandardResidue(r, *v)
        atoms = []
        bonds = []
        for g in self.groups:
            atoms.extend(g.atoms)
            bonds.extend(g.bonds)
        from chimera import Bond
        for b in m.bonds:
            if b.display == Bond.Never:
                continue
            a0, a1 = b.atoms
            if a0.residue is a1.residue:
                continue
            mb = Bonds.Bond((self.atomMap[a0], self.atomMap[a1]))
            bonds.append(mb)
        self.atoms = atoms
        self.bonds = Bonds.BondList(bonds)
        if self.needParmchk:
            self._runParmchk(ident, owner.getTempDir())
Пример #5
0
 def addGroup(self, group, bond_atom_pairs):
     for a1, a2 in bond_atom_pairs:
         o1 = a1.topLevelChemicalObject()
         o2 = a2.topLevelChemicalObject()
         if set([o1, o2]) != set([self, group]):
             raise ValueError("bond %s-%s outside object" %
                              (str(a1), str(a2)))
     self.groups.append(group)
     self.atoms = self.atoms + group.atoms
     group.parent = self
     self.clearBondAttributes()
     for a1, a2 in bond_atom_pairs:
         self.bonds.append(Bonds.Bond((a1, a2)))
     for b in group.bonds:
         self.bonds.append(b)
Пример #6
0
 def _addSSBridges(self, bonds):
     for b in bonds:
         cys1 = b[0]
         if cys1.symbol.lower() == 'cyx':
             cys_ss1 = cys1
         else:
             cys_ss1 = cys1._makeCystine()
             self.replaceResidue(cys1, cys_ss1)
         cys2 = b[1]
         if cys2.symbol.lower() == 'cyx':
             cys_ss2 = cys2
         else:
             cys_ss2 = cys2._makeCystine()
             self.replaceResidue(cys2, cys_ss2)
         self.bonds.append(Bonds.Bond((cys_ss1.sidechain.S_gamma,
                                       cys_ss2.sidechain.S_gamma)))
Пример #7
0
    def __init__(self, chain, groups, name = ''):
	self.groups = groups
	self.atoms = []
	self.bonds = []
	for g in self.groups:
	    self.atoms = self.atoms + g.atoms
	    self.bonds = self.bonds + g.bonds
        for i in range(len(self.groups)-1):
            self.bonds.append(Bonds.Bond((self.groups[i].sugar.O_3,
                                          self.groups[i+1].phosphate.P)))
	self.bonds = Bonds.BondList(self.bonds)
	self.name = name
	self.parent = chain.parent
	self.type = None
	self.configurations = {}
	self.part_of = chain
Пример #8
0
 def __init__(self, chain=None, groups=None, name = ''):
     if chain is not None:
         self.groups = groups
         self.atoms = []
         self.bonds = []
         for g in self.groups:
             self.atoms.extend(g.atoms)
             self.bonds.extend(g.bonds)
         for i in range(len(self.groups)-1):
             link1 = self.groups[i].chain_links[1]
             link2 = self.groups[i+1].chain_links[0]
             self.bonds.append(Bonds.Bond((link1, link2)))
         self.bonds = Bonds.BondList(self.bonds)
         self.name = name
         self.model = chain.model
         self.parent = chain.parent
         self.type = None
         self.configurations = {}
         self.part_of = chain
Пример #9
0
 def makeChemicalObjects(self, template, top_level):
     self.groups[template.name].locked = True
     if top_level:
         if template.attributes.has_key('sequence'):
             object = ChemicalObjects.ChainMolecule(None)
         else:
             object = ChemicalObjects.Molecule(None)
     else:
         object = ChemicalObjects.Group(None)
     object.atoms = []
     object.bonds = Bonds.BondList([])
     object.groups = []
     object.type = self.groups[template.name]
     object.parent = None
     child_objects = []
     for child in template.children:
         if isinstance(child, GroupTemplate):
             group = self.makeChemicalObjects(child, False)
             object.groups.append(group)
             object.atoms.extend(group.atoms)
             object.bonds.extend(group.bonds)
             group.parent = object
             child_objects.append(group)
         else:
             atom = ChemicalObjects.Atom(child.element)
             object.atoms.append(atom)
             atom.parent = object
             child_objects.append(atom)
     for name, index in template.names.items():
         setattr(object, name, child_objects[index])
         child_objects[index].name = name
     for name, value in template.attributes.items():
         path = name.split('.')
         setattr(self.namePath(object, path[:-1]), path[-1], value)
     for atom1, atom2 in template.bonds:
         atom1 = self.namePath(object, atom1)
         atom2 = self.namePath(object, atom2)
         object.bonds.append(Bonds.Bond((atom1, atom2)))
     for name, vector in template.positions.items():
         path = name.split('.')
         self.namePath(object, path).setPosition(vector)
     return object