def parser(self): s = System() s.pbc = v2lattice(self.a, self.b, self.c) for i in self.coords: # n is used to distinguish the type of data file n = 0 for j in i: # ignore the comments if "#" in j: break n += 1 atom = Atom() atom.an = int(i[0]) if n == 7: # n = 7 is full type atom.name = self.atomtypes[int(i[2]) - 1] atom.x[0] = float(i[4]) atom.x[1] = float(i[5]) atom.x[2] = float(i[6]) s.atoms.append(atom) elif n == 6 or n == 9: # n = 5 is a charge type, n = 8 is a charge type generated # by restart2data atom.name = self.atomtypes[int(i[1]) - 1] atom.x[0] = float(i[3]) atom.x[1] = float(i[4]) atom.x[2] = float(i[5]) s.atoms.append(atom) return s
def parser(self): s = System() s.pbc = v2lattice(self.a, self.b, self.c) for i in self.coords: # n is used to distinguish the type of data file n = 0 for j in i: # ignore the comments if "#" in j: break n += 1 atom = Atom() atom.an = int(i[0]) if n == 7: # n = 7 is full type atom.name = self.atomtypes[int(i[2]) - 1] atom.x[0] = float(i[4]) atom.x[1] = float(i[5]) atom.x[2] = float(i[6]) s.atoms.append(atom) elif n == 5 or n == 8: # n = 5 is a charge type, n = 8 is a charge type generated # by restart2data atom.name = self.atomtypes[int(i[1]) - 1] atom.x[0] = float(i[3]) atom.x[1] = float(i[4]) atom.x[2] = float(i[5]) s.atoms.append(atom) return s
def __lineToAtom(self, line): """put each coordinate line into atom class""" ai = Atom() tokens = line.strip().split() ai.number = int(tokens[0]) ai.name = tokens[1] ai.an = tokens[2] ai.type1 = tokens[3] ai.type2 = tokens[4] ai.charge = float(tokens[5]) ai.x[0] = float(tokens[6]) ai.x[1] = float(tokens[7]) ai.x[2] = float(tokens[8]) ai.resn = int(tokens[9]) ai.resname = tokens[10] ai.cg = int(tokens[11]) return ai
def parser(self): s = System() s.pbc = v2lattice(self.a, self.b, self.c) s.atomtypes = self.atomtypes s.n_atoms = self.n_atoms s.n_bonds = self.n_bonds s.n_angles = self.n_angles s.n_dihedrals = self.n_dihedrals s.n_impropers = self.n_impropers s.n_atomtypes = self.n_atomtypes s.n_bondtypes = self.n_bondtypes s.n_angletypes = self.n_angletypes s.n_dihedraltypes = self.n_dihedraltypes s.n_impropertypes = self.n_impropertypes s.bonds = self.bonds s.angles = self.angles s.dihedrals = self.dihedrals s.ffparams = self.ffparams for i in self.coords: # n is used to distinguish the type of data file n = 0 for j in i: # ignore the comments if "#" in j: break n += 1 atom = Atom() atom.an = int(i[0]) if n == 7: # n = 7 is full type atom.resn = int(i[1]) atom.name = self.elements[int(i[2]) - 1] atom.element = self.elements[int(i[2]) - 1] atom.type2 = int(i[2]) atom.charge = float(i[3]) atom.x[0] = float(i[4]) atom.x[1] = float(i[5]) atom.x[2] = float(i[6]) s.atoms.append(atom) return s
def parser(self,): """ parse dump file into System """ s = System() s.name = self.name # transform a, b, c to [xx, xy, yz] # [yx, yy, yz] and [zx, zy, zz] # caution! A hard coded code for specified dump file a = [] # some dump file only have xl and xh. Normalize to three terms if len(self.a) == 2: self.a.append(0.0) if len(self.b) == 2: self.b.append(0.0) if len(self.c) == 2: self.c.append(0.0) #a.append(float(self.a[1]) - float(self.a[0])) #@ref: http://lammps.sandia.gov/doc/Section_howto.html#howto_12 xlo = float(self.a[0]) - min(0.0, float(self.a[2]), float(self.b[2]),\ float(self.a[2]) + float(self.c[2])) xhi = float(self.a[1]) - max(0.0, float(self.a[2]), float(self.b[2]),\ float(self.a[2]) + float(self.c[2])) a.append(xhi - xlo) a.append(0.0) a.append(0.0) #print a b = [] b.append(float(self.a[2])) ylo = float(self.b[0]) - min(0.0, float(self.c[2])) yhi = float(self.b[1]) - max(0.0, float(self.c[2])) b.append(yhi - ylo) b.append(0.0) #print b c = [] c.append(float(self.b[2])) c.append(float(self.c[2])) c.append(float(self.c[1]) - float(self.c[0])) s.pbc = v2lattice(a, b, c) #print c # begin to parse atoms flag = 0 if os.path.exists("inp"): flag = 1 n2a = self.parseInp() counter = 0 for i in self.coords: atom = Atom() if flag: atom.name = n2a[int(i[1])] else: atom.name = i[1] """ atom.x[0] = float(i[3]) atom.x[1] = float(i[4]) atom.x[2] = float(i[5]) """ atom.an = counter + 1 atom.x[0] = float(i[2]) atom.x[1] = float(i[3]) atom.x[2] = float(i[4]) s.atoms.append(atom) counter += 1 return s
def parser(self, ): """ parse dump file into System """ s = System() s.name = self.name # transform a, b, c to [xx, xy, yz] # [yx, yy, yz] and [zx, zy, zz] # caution! A hard coded code for specified dump file a = [] # some dump file only have xl and xh. Normalize to three terms if len(self.a) == 2: self.a.append(0.0) if len(self.b) == 2: self.b.append(0.0) if len(self.c) == 2: self.c.append(0.0) #a.append(float(self.a[1]) - float(self.a[0])) #@ref: http://lammps.sandia.gov/doc/Section_howto.html#howto_12 xlo = float(self.a[0]) - min(0.0, float(self.a[2]), float(self.b[2]),\ float(self.a[2]) + float(self.c[2])) xhi = float(self.a[1]) - max(0.0, float(self.a[2]), float(self.b[2]),\ float(self.a[2]) + float(self.c[2])) a.append(xhi - xlo) a.append(0.0) a.append(0.0) #print a b = [] b.append(float(self.a[2])) ylo = float(self.b[0]) - min(0.0, float(self.c[2])) yhi = float(self.b[1]) - max(0.0, float(self.c[2])) b.append(yhi - ylo) b.append(0.0) #print b c = [] c.append(float(self.b[2])) c.append(float(self.c[2])) c.append(float(self.c[1]) - float(self.c[0])) s.pbc = v2lattice(a, b, c) #print c # begin to parse atoms flag = 0 if os.path.exists("inp"): flag = 1 n2a = self.parseInp() counter = 0 for i in self.coords: atom = Atom() if flag: atom.name = n2a[int(i[1])] else: atom.name = i[1] """ atom.x[0] = float(i[3]) atom.x[1] = float(i[4]) atom.x[2] = float(i[5]) """ atom.an = counter + 1 atom.x[0] = float(i[2]) atom.x[1] = float(i[3]) atom.x[2] = float(i[4]) s.atoms.append(atom) counter += 1 return s