class Snap_Shot(object): """ Class defining a snap shot of the trajectory instance variables: Time_step, Mol_List, Box_Dim, Rg_Dist, E2E_Dist, RDF_Dist """ def __init__(self, Time_Step, Mol_List, Box_Dim, Atom_List, N): self.Time_Step = Time_Step self.Mol_List = Mol_List self.Box_Dim = Box_Dim self.num_Mols = len(Mol_List) self.Atom_List = Atom_List self.DistanceMatrix = DistanceMatrix() self.DistanceMatrix.setPeriodicBound(Box_Dim) self.numCarbon = 5680. boxx, boxy, boxz = Box_Dim return def showDistanceDistribution(self): self.DistanceMatrix.showDistanceDistribution() def pairCorrelation_Hist(self, numbins=200): # print "Calculating Snapshot Distance Matrix" for Mol in self.Mol_List: self.DistanceMatrix.addPoint(Mol.COM()) # print "Finished placing atoms...Calculating Distance Distribution" self.DistanceMatrix.calculateDistanceDistribution() # print "returning pyplot" n, bins = self.DistanceMatrix.pyplotDistanceDistribution(numbins = 200) print "n is: " print n print bins return n, bins def Compute_COM(self): """ Compute the centers of mass of all the polymer chains """ for Mol in self.Mol_List: Mass_Weighted_Sum = np.zeros(3,dtype=float) for Atom in Mol.Atom_List: Atom.unwrapped_position = Atom.position + np.multiply(self.Box_Dim, Atom.image_flags) Mass_Weighted_Sum += Polymer.Mass[Atom.Type]*Atom.unwrapped_position Mol.COM = Mass_Weighted_Sum/Mol.MW return def Compute_Tangent_Correlation(self): TangentCorrelation = [] for Mol in self.Mol_List: MolTangentCorrelation = [] RelevantAtoms = [Atom for Atom in Mol.Atom_List.tolist() if ((Atom.Mass > 2.) and (Atom.Mass < 196))] # print "mass of second atom is: " + str(Mol.Atom_List[1].Mass) initialvector = RelevantAtoms[1].position-RelevantAtoms[0].position initialvector /= np.linalg.norm(initialvector) lastpos = RelevantAtoms[0].position for Atom in RelevantAtoms[1:]: # print "adding new pos: " + str(Atom.position) newpos = Atom.position newvector = newpos-lastpos newvector /= np.linalg.norm(newvector) # print "tangent correlation is: " + str(self.Tangent_Correlation(latestpos[0],latestpos[1],newpos)) MolTangentCorrelation.append(np.dot(initialvector,newvector)) lastpos =newpos # print "Mol Tangent Correlation: " + str(np.asarray(MolTangentCorrelation)) + " with mass" TangentCorrelation.append(np.asarray(MolTangentCorrelation)) TangentCorrelation = np.asarray(TangentCorrelation) # print "TangentCorrelation is: " + str(TangentCorrelation) TangentCorrelation = np.mean(TangentCorrelation, axis = 0) # print "TangentCorrelation is: " + str(TangentCorrelation) return TangentCorrelation def carbonDensity_Hist(self, numbins = 200): Z_pos = [] Z_max = [] theta = [] N = 0 for Mol in self.Mol_List: mol_z = [] for Atom in Mol.Atom_List: if Atom.Mass == 12.011: # print "found Carbon" N += 1 Z_pos.append(Atom.position[2]) mol_z.append(Atom.position[2]) try: Z_max.append(np.asarray(mol_z).max()) except: continue # Z_max_av = np.asarray(Z_max).mean() # Z_max_std = np.asarray(Z_max).std() n, bins = np.histogram(Z_pos, bins= numbins, range=(0.07,0.3)) return n/self.numCarbon, bins*100-7.6 # return Zn, Zbins, Z_max_av, Z_max_std def get_net_dipole(self, molclass, molName): # partial_charges = OPLS.get_partial_charges(molclass, molName) partial_charges = [(0,.32), (0,-.64)] print partial_charges net_dipole = np.zeros(3) # print pc # splicing out gold surface for mol in self.Mol_List: for atom in mol.Atom_List: if atom.Element == "Au": continue else: partial_charge = partial_charges[atom.Type-1][1] # print atom.position # print partial_charge dipole_moment = partial_charge*atom.position # print dipole_moment net_dipole = net_dipole+dipole_moment mol.dipoleMoment = mol.dipoleMoment+dipole_moment print "Net dipole is: ..." + str(net_dipole) # return net_dipole # for mol in self.Mol_List[:-1]: # if (np.dot(mol.dipoleMoment,net_dipole)/(np.linalg.norm(mol.dipoleMoment)*np.linalg.norm(net_dipole)) < -.9): # print "alert!" # print mol.dipoleMoment # for atom in mol.Atom_List: # print atom.Element, str(atom.position) # # print net_dipole # break plt.hist([np.dot(mol.dipoleMoment,net_dipole)/(np.linalg.norm(mol.dipoleMoment)*np.linalg.norm(net_dipole)) for mol in self.Mol_List[:-1]], bins=100) print os.getcwd() plt.savefig(molclass+"_"+molName+"_dipoleDistribution.png") print "saved!" plt.clf() return net_dipole