def _createTopology(self): """Build the topology of the system """ top = Topology() positions = [] velocities = [] boxVectors = [] for x, y, z in self._conn.execute('SELECT x, y, z FROM global_cell'): boxVectors.append(mm.Vec3(x, y, z)) unitCellDimensions = [boxVectors[0][0], boxVectors[1][1], boxVectors[2][2]] top.setUnitCellDimensions(unitCellDimensions*angstrom) atoms = {} lastChain = None lastResId = None c = top.addChain() q = """SELECT id, name, anum, resname, resid, chain, x, y, z, vx, vy, vz FROM particle ORDER BY id""" for (atomId, atomName, atomNumber, resName, resId, chain, x, y, z, vx, vy, vz) in self._conn.execute(q): newChain = False if chain != lastChain: lastChain = chain c = top.addChain() newChain = True if resId != lastResId or newChain: lastResId = resId if resName in PDBFile._residueNameReplacements: resName = PDBFile._residueNameReplacements[resName] r = top.addResidue(resName, c) if resName in PDBFile._atomNameReplacements: atomReplacements = PDBFile._atomNameReplacements[resName] else: atomReplacements = {} if atomNumber == 0 and atomName.startswith('Vrt'): elem = None else: elem = Element.getByAtomicNumber(atomNumber) if atomName in atomReplacements: atomName = atomReplacements[atomName] atoms[atomId] = top.addAtom(atomName, elem, r) positions.append(mm.Vec3(x, y, z)) velocities.append(mm.Vec3(vx, vy, vz)) for p0, p1 in self._conn.execute('SELECT p0, p1 FROM bond'): top.addBond(atoms[p0], atoms[p1]) positions = positions*angstrom velocities = velocities*angstrom/femtosecond return top, positions, velocities
def _createTopology(self): """Build the topology of the system """ top = Topology() positions = [] velocities = [] boxVectors = [] for x, y, z in self._conn.execute('SELECT x, y, z FROM global_cell'): boxVectors.append(mm.Vec3(x, y, z)) unitCellDimensions = [boxVectors[0][0], boxVectors[1][1], boxVectors[2][2]] top.setUnitCellDimensions(unitCellDimensions*angstrom) atoms = {} lastChain = None lastResId = None c = top.addChain() q = """SELECT id, name, anum, resname, resid, chain, x, y, z, vx, vy, vz FROM particle ORDER BY id""" for (atomId, atomName, atomNumber, resName, resId, chain, x, y, z, vx, vy, vz) in self._conn.execute(q): newChain = False if chain != lastChain: lastChain = chain c = top.addChain() newChain = True if resId != lastResId or newChain: lastResId = resId if resName in PDBFile._residueNameReplacements: resName = PDBFile._residueNameReplacements[resName] r = top.addResidue(resName, c) if resName in PDBFile._atomNameReplacements: atomReplacements = PDBFile._atomNameReplacements[resName] else: atomReplacements = {} if atomNumber == 0 and atomName.startswith('Vrt'): elem = None else: elem = Element.getByAtomicNumber(atomNumber) if atomName in atomReplacements: atomName = atomReplacements[atomName] atoms[atomId] = top.addAtom(atomName, elem, r) positions.append(mm.Vec3(x, y, z)) velocities.append(mm.Vec3(vx, vy, vz)) for p0, p1 in self._conn.execute('SELECT p0, p1 FROM bond'): top.addBond(atoms[p0], atoms[p1]) positions = positions*angstrom velocities = velocities*angstrom/femtosecond return top, positions, velocities
def _createTopology(self): '''Build the topology of the system ''' top = Topology() positions = [] boxVectors = [] for x, y, z in self._conn.execute('SELECT x, y, z FROM global_cell'): boxVectors.append(mm.Vec3(x, y, z)*angstrom) unitCellDimensions = [boxVectors[0][0], boxVectors[1][1], boxVectors[2][2]] top.setUnitCellDimensions(unitCellDimensions) atoms = {} lastChain = None lastResId = None c = top.addChain() q = '''SELECT id, name, anum, resname, resid, chain, x, y, z FROM particle''' for (atomId, atomName, atomNumber, resName, resId, chain, x, y, z) in self._conn.execute(q): if chain != lastChain: lastChain = chain c = top.addChain() if resId != lastResId: lastResId = resId if resName in PDBFile._residueNameReplacements: resName = PDBFile._residueNameReplacements[resName] r = top.addResidue(resName, c) if resName in PDBFile._atomNameReplacements: atomReplacements = PDBFile._atomNameReplacements[resName] else: atomReplacements = {} if atomName in atomReplacements: atomName = atomReplacements[atomName] elem = Element.getByAtomicNumber(atomNumber) atoms[atomId] = top.addAtom(atomName, elem, r) positions.append(mm.Vec3(x, y, z)*angstrom) for p0, p1 in self._conn.execute('SELECT p0, p1 FROM bond'): top.addBond(atoms[p0], atoms[p1]) return top, positions
def _createTopology(self): """Build the topology of the system """ top = Topology() positions = [] velocities = [] boxVectors = [] #assume cell dimensions are set in the first file #the other molecules inherit the same cell conn = self._conn[0] self.pbc = False if self._hasTable('global_cell', self._tables[0]): for x, y, z in conn.execute('SELECT x, y, z FROM global_cell'): boxVectors.append(mm.Vec3(x, y, z)) unitCellDimensions = [boxVectors[0][0], boxVectors[1][1], boxVectors[2][2]] top.setUnitCellDimensions(unitCellDimensions*angstrom) self.pbc = True #process each file nfiles = len(self._conn) for (fcounter, conn, tables) in zip(range(0,nfiles),self._conn,self._tables): """ resdb = {} chaindb = {} """ atoms = {} lastChain = None lastResId = None c = top.addChain() q = """SELECT id, name, anum, resname, resid, chain, x, y, z, vx, vy, vz FROM particle ORDER BY id""" for (atomId, atomName, atomNumber, resName, resId, chain, x, y, z, vx, vy, vz) in conn.execute(q): """ #more elegant way to assign atoms to residues #but it works only if atoms in residues are contiguous #due to the fact that openmm does not support non-contiguous residues resuid = "%s:%s:%s" % (resName, resId, chain) if resuid in resdb.keys(): r = resdb[resuid] c = chaindb[chain] else: if chain in chaindb.keys(): c = chaindb[chain] else: c = top.addChain() chaindb[chain] = c r = top.addResidue(resName, c) resdb[resuid] = r """ newChain = False if chain != lastChain: lastChain = chain c = top.addChain() newChain = True if resId != lastResId or newChain: lastResId = resId if resName in PDBFile._residueNameReplacements: resName = PDBFile._residueNameReplacements[resName] r = top.addResidue(resName, c) if resName in PDBFile._atomNameReplacements: atomReplacements = PDBFile._atomNameReplacements[resName] else: atomReplacements = {} if atomNumber == 0 and atomName.startswith('Vrt'): elem = None else: elem = Element.getByAtomicNumber(atomNumber) if atomName in atomReplacements: atomName = atomReplacements[atomName] atoms[atomId] = top.addAtom(atomName, elem, r) positions.append(mm.Vec3(x, y, z)) velocities.append(mm.Vec3(vx, vy, vz)) self._natoms[fcounter] = len(atoms) for p0, p1 in conn.execute('SELECT p0, p1 FROM bond'): top.addBond(atoms[p0], atoms[p1]) positions = positions*angstrom velocities = velocities*angstrom/picosecond return top, positions, velocities