def LinearLeastSquaresFit(xdata,ydata): """ Special case of polynomialLeastSquaresFit, which returns the R^2 value intercept,slope,R_squared = LinearLeastSquaresFit(xdata,ydata) """ xdata=Numeric.array(xdata) ydata=Numeric.array(ydata) # form that LeastSquaresFit wants the data in data=map(lambda x,y:(x,y),xdata,ydata) # I am not sure if the particular guess for parameters will result in a error in some cases lsq=polynomialLeastSquaresFit(parameters=(0,0), data=data) intercept=lsq[0][0] slope=lsq[0][1] avg_y=mean(ydata) predicted_data = intercept + slope*xdata numerator=Numeric.sum((predicted_data-ydata)**2) denominator=Numeric.sum((ydata-avg_y)**2) R_squared = 1 - numerator/denominator return intercept,slope, R_squared
np = universe.numberOfPoints() P = np/natoms #if (rotskipval < 100.0): # rotskipratio=1.0 #else: # rotskipratio=100.0/rotskipval # Print averages of the quantu energy estimator print "Number of Atoms:", natoms print "Number of Beads:", P print "Number of Steps:", npoints #data = trajectory.temperature #print "Temperature:", mean(data), "+/-", standardDeviation(data)/sqrt(npoints), " kj/mol" data = trajectory.quantum_energy_primitive print "Primitive estimator:", mean(data/Units.k_B), "+/-", standardDeviation(data/Units.k_B)/sqrt(npoints), " K" data2 = trajectory.potential_energy pot_eng = mean(data2/Units.k_B) pot_eng_error = standardDeviation(data2/Units.k_B)/sqrt(npoints) print "Potential estimator:", pot_eng, "+/-", pot_eng_error, " K" print "Kinetic estimator:", mean(data-data2)/Units.k_B #data = trajectory.kinetic_energy #print "Kinetic estimator:", mean(data/Units.k_B), "+/-", standardDeviation(data/Units.k_B)/sqrt(npoints), " K" #data = trajectory.spring_energy #print "Spring estimator:", mean(data/Units.k_B), "+/-", standardDeviation(data/Units.k_B)/sqrt(npoints), " K" #data = trajectory.quantum_energy_virial #print "Virial estimator:", mean(data), "+/-", standardDeviation(data)/sqrt(npoints), " kj/mol" #data = trajectory.quantum_energy_centroid_virial
return FFTSeries[:len(series)]/(len(series)-N.arange(len(series))) from MMTK.Random import gaussian from Scientific.Statistics import mean from Scientific.IO.ArrayIO import readArray from Gnuplot import plot from RandomArray import random dt = 1. t = dt*N.arange(500) if 0: data = N.sin(t) + N.cos(3.*t) + 0.1*(random(len(t))-0.5) data = data + 0.1j*(random(len(t))-0.5) if 0: data = [0.] for i in range(500+len(t)-1): data.append(mean(data[-500:]) + gaussian(0., 0.1)) data = N.exp(1j*N.array(data[500:])) if 0: #data = readArray('~/scientific/Test/data') string = open('/users1/hinsen/scientific/Test/data').read()[4:] data = N.array(eval(string)) data = data[:,0] model = AutoRegressiveModel(20, data, dt) print model.coeff print model.poles() c = model.correlation(200) cref = InterpolatingFunction((t,), AutoCorrelationFunction(data))[:200] m = model.memoryFunction(200) s = model.spectrum(N.arange(0., 5., 0.01)) #plot(c.real, cref.real); plot(c.imag, cref.imag)
linalg.norm(r[2][(P - 1) / 2 - p] - r[1][(P - 1) / 2 - p])) bond_up[1][p] = dot( (r[2][(P - 1) / 2 + p] - r[0][(P - 1) / 2 + p]), (r[2][(P - 1) / 2 + p] - r[1][(P - 1) / 2 + p])) / ( linalg.norm(r[2][(P - 1) / 2 + p] - r[0][(P - 1) / 2 + p]) * linalg.norm(r[2][(P - 1) / 2 + p] - r[1][(P - 1) / 2 + p])) #[2] corresponds to correlating OH1-OH2 distance: Anti-Symmetric Stretch bond_down[2][p] = ( linalg.norm(r[2][(P - 1) / 2 - p] - r[0][(P - 1) / 2 - p]) - linalg.norm(r[2][(P - 1) / 2 - p] - r[1][(P - 1) / 2 - p])) / 2.0 bond_up[2][p] = ( linalg.norm(r[2][(P - 1) / 2 + p] - r[0][(P - 1) / 2 + p]) - linalg.norm(r[2][(P - 1) / 2 + p] - r[1][(P - 1) / 2 + p])) / 2.0 mean0 += mean(bond_down[0]) + mean(bond_up[0]) mean1 += mean(bond_down[1]) + mean(bond_up[1]) mean2 += mean(bond_down[2]) + mean(bond_up[2]) mean0 /= 2.0 * trajlength mean1 /= 2.0 * trajlength mean2 /= 2.0 * trajlength for i in range(trajlength): universe.setFromTrajectory(Trajectory(universe, traj), i) r[0] = asarray(universe.atomList()[0].beadPositions()) #Hydrogen 1 r[1] = asarray(universe.atomList()[1].beadPositions()) #Hydrogen 2 r[2] = asarray(universe.atomList()[2].beadPositions()) #Oxygen
traj = argv[1] trajectory = Trajectory(None, traj) npoints = len(trajectory) universe = trajectory.universe natoms = universe.numberOfAtoms() time=trajectory.time np = universe.numberOfPoints() P = np/natoms # Print averages of the quantu energy estimator print "Number of Atoms:", natoms print "Number of Beads:", P print "Number of Steps:", npoints Temp = trajectory.temperature Eprim = trajectory.quantum_energy_primitive Ecenv = trajectory.quantum_energy_centroid_virial Epot = trajectory.potential_energy Erot = trajectory.quantum_energy_rotation print "Temperature:", mean(Temp), "+/-", standardDeviation(Temp)/sqrt(npoints), " K" print "Primitive estimator:", mean(Eprim/Units.k_B), "+/-", standardDeviation(Eprim/Units.k_B)/sqrt(npoints), " K" print "Centroid Virial estimator:", mean(Ecenv/Units.k_B), "+/-", standardDeviation(Ecenv/Units.k_B)/sqrt(npoints), " K" print "Potential estimator:", mean(Epot/Units.k_B), "+/-", standardDeviation(Epot/Units.k_B)/sqrt(npoints), " K" print "Kinetic estimator:",mean(Eprim-Epot)/Units.k_B, "+/-", standardDeviation(Eprim/Units.k_B)/sqrt(npoints)-standardDeviation(Epot/Units.k_B)/sqrt(npoints), " K" print "Rotational Energy estimator:", mean(Erot/Units.k_B), "+/-", standardDeviation(Erot/Units.k_B)/sqrt(npoints), " K" print "Total Energy:", mean(Eprim+Erot)/Units.k_B, "+/-", sqrt((standardDeviation(Eprim)/Units.k_B/sqrt(npoints))**2+(standardDeviation(Erot)/Units.k_B/sqrt(npoints))**2), " K" trajectory.close()
np = universe.numberOfPoints() P = np / natoms #if (rotskipval < 100.0): # rotskipratio=1.0 #else: # rotskipratio=100.0/rotskipval # Print averages of the quantu energy estimator print "Number of Atoms:", natoms print "Number of Beads:", P print "Number of Steps:", npoints #data = trajectory.temperature #print "Temperature:", mean(data), "+/-", standardDeviation(data)/sqrt(npoints), " kj/mol" data = trajectory.quantum_energy_primitive print "Primitive estimator:", mean(data / Units.k_B), "+/-", standardDeviation( data / Units.k_B) / sqrt(npoints), " K" data2 = trajectory.potential_energy print "Potential estimator:", mean(data2 / Units.k_B), "+/-", standardDeviation( data2 / Units.k_B) / sqrt(npoints), " K" print "Kinetic estimator:", mean(data - data2) / Units.k_B #data = trajectory.kinetic_energy #print "Kinetic estimator:", mean(data/Units.k_B), "+/-", standardDeviation(data/Units.k_B)/sqrt(npoints), " K" #data = trajectory.spring_energy #print "Spring estimator:", mean(data/Units.k_B), "+/-", standardDeviation(data/Units.k_B)/sqrt(npoints), " K" #data = trajectory.quantum_energy_virial #print "Virial estimator:", mean(data), "+/-", standardDeviation(data)/sqrt(npoints), " kj/mol" #data = trajectory.quantum_energy_centroid_virial #print "Centroid virial estimator:", mean(data), "+/-", standardDeviation(data)/sqrt(npoints), " kj/mol"
Eprim = trajectory.quantum_energy_primitive Ecenv = trajectory.quantum_energy_centroid_virial Epot = trajectory.potential_energy Erot = trajectory.quantum_energy_rotation #print "Temperature:", mean(Temp), "+/-", standardDeviation(Temp)/sqrt(npoints), " K" #print "Primitive estimator:", mean(Eprim/Units.k_B), "+/-", standardDeviation(Eprim/Units.k_B)/sqrt(npoints), " K" #print "Centroid Virial estimator:", mean(Ecenv/Units.k_B), "+/-", standardDeviation(Ecenv/Units.k_B)/sqrt(npoints), " K" #print "Potential estimator:", mean(Eprim)/Units.k_B, "+/-", standardDeviation(Eprim)/Units.k_B, " K" ##print "Potential estimator:", mean(Epot/Units.k_B), "+/-", standardDeviation(Epot/Units.k_B)/sqrt(npoints), " K" #print "Kinetic estimator:",mean(Ecenv)/Units.k_B, "+/-", standardDeviation(Ecenv)/Units.k_B, " K" ##print "Kinetic estimator:",mean(Eprim-Epot)/Units.k_B, "+/-", standardDeviation(Eprim/Units.k_B)/sqrt(npoints)-standardDeviation(Epot/Units.k_B)/sqrt(npoints), " K" #print "Rotational Energy estimator:", mean(Erot)/Units.k_B, "+/-", standardDeviation(Erot)/Units.k_B, " K" # #print "Total Energy:", mean(Eprim)/Units.k_B+mean(Erot)/Units.k_B, "+/-", sqrt((standardDeviation(Eprim)/Units.k_B)**2+(standardDeviation(Erot)/Units.k_B)**2), " K" print "Potential estimator:", mean(Eprim), "+/-", standardDeviation( Eprim), " kj/mol" #print "Potential estimator:", mean(Epot/Units.k_B), "+/-", standardDeviation(Epot/Units.k_B)/sqrt(npoints), " K" print "Kinetic estimator:", mean(Ecenv), "+/-", standardDeviation( Ecenv), " kj/mol" #print "Kinetic estimator:",mean(Eprim-Epot)/Units.k_B, "+/-", standardDeviation(Eprim/Units.k_B)/sqrt(npoints)-standardDeviation(Epot/Units.k_B)/sqrt(npoints), " K" print "Rotational Energy estimator:", mean(Erot), "+/-", standardDeviation( Erot), " kj/mol" print "Total Energy:", mean(Eprim) + mean(Erot), "+/-", sqrt( (standardDeviation(Eprim))**2 + (standardDeviation(Erot))**2), " kj/mol" trajectory.close()
def __init__(self, master, mode_projector, indices): from Scientific.Statistics import mean, standardDeviation title = "Normal mode projections (Temperature: %5.1f K)" \ % mode_projector.temperature PlotWindow.__init__(self, master, title) self.mode_projector = mode_projector plot_range = 0. for i in indices: series = mode_projector[i][:, 1] average = mean(series) deviation = standardDeviation(series) lower = Numeric.minimum.reduce(series) lower = min(lower, average-deviation) upper = Numeric.maximum.reduce(series) upper = max(upper, average+deviation) lower, upper = plotRange(lower, upper) plot_range = max(plot_range, upper-lower) nmodes = mode_projector.numberOfModes() for i in range(len(indices)): if indices[i] < 0: indices[i] = nmodes+indices[i] next_indices = [] step = indices[1] - indices[0] i = indices[-1] while len(next_indices) < 4: i = i + step if i >= nmodes: break next_indices.append(i) previous_indices = [] i = indices[0] while len(previous_indices) < 4: i = i - step if i < 6: break previous_indices.insert(0, i) if next_indices or previous_indices: frame = Frame(self) frame.pack(side=BOTTOM, fill=X, expand=YES) if previous_indices: Button(frame, text="Previous", command=lambda s=self, pi=previous_indices: s.modeProjection(pi)).pack(side=LEFT) if next_indices: Button(frame, text="Next", command=lambda s=self, ni=next_indices: s.modeProjection(ni)).pack(side=RIGHT) for i in range(len(indices)): number = indices[i] data = mode_projector[number] fluctuation = self.mode_projector.amplitude(number) average = mean(data[:, 1]) deviation = standardDeviation(data[:, 1]) box = Frame(self, border=2, relief=SUNKEN) box.pack(side=TOP, fill=BOTH, expand=YES) frame = Frame(box, background='grey') frame.pack(side=TOP, fill=X, expand=NO) Label(frame, text="Mode %d" % number, background='grey').pack(side=LEFT) Button(frame, text="Animation", background='grey', command=lambda s=self, n=number: s.animateMode(n, 1.)).pack(side=RIGHT) Button(frame, text="View", background='grey', command=lambda s=self, n=number: s.viewMode(n)).pack(side=RIGHT) minv = Numeric.minimum.reduce(data[:,1]) maxv = Numeric.maximum.reduce(data[:,1]) minv, maxv = plotRange(minv, maxv) middle = 0.5*(maxv+minv) if maxv-minv < plot_range: minv = middle-0.5*plot_range maxv = middle+0.5*plot_range plot_objects = [PolyLine([(data[1, 0], average-fluctuation), (data[1, 0], average+fluctuation)], color='blue', width=3), PolyLine([(data[-1, 0], average-deviation), (data[-1, 0], average+deviation)], color='green', width=3)] plot_objects.insert(0, PolyLine(data, color = 'red')) plot = PlotCanvas(box, 400, 100, zoom=1, select=self.master._selectRange) plot.pack(side=LEFT, fill=BOTH, expand=YES) plot.draw(PlotGraphics(plot_objects), 'automatic', (minv, maxv)) plot.bind('<Double-Button-1>', lambda event, d=data: externalPlot(d)) self.registerPlot(plot) self.setSelection(plot)
def __init__(self, master, mode_projector, indices): from Scientific.Statistics import mean, standardDeviation title = "Normal mode projections (Temperature: %5.1f K)" \ % mode_projector.temperature PlotWindow.__init__(self, master, title) self.mode_projector = mode_projector plot_range = 0. for i in indices: series = mode_projector[i][:, 1] average = mean(series) deviation = standardDeviation(series) lower = Numeric.minimum.reduce(series) lower = min(lower, average - deviation) upper = Numeric.maximum.reduce(series) upper = max(upper, average + deviation) lower, upper = plotRange(lower, upper) plot_range = max(plot_range, upper - lower) nmodes = mode_projector.numberOfModes() for i in range(len(indices)): if indices[i] < 0: indices[i] = nmodes + indices[i] next_indices = [] step = indices[1] - indices[0] i = indices[-1] while len(next_indices) < 4: i = i + step if i >= nmodes: break next_indices.append(i) previous_indices = [] i = indices[0] while len(previous_indices) < 4: i = i - step if i < 6: break previous_indices.insert(0, i) if next_indices or previous_indices: frame = Frame(self) frame.pack(side=BOTTOM, fill=X, expand=YES) if previous_indices: Button(frame, text="Previous", command=lambda s=self, pi=previous_indices: s. modeProjection(pi)).pack(side=LEFT) if next_indices: Button(frame, text="Next", command=lambda s=self, ni=next_indices: s. modeProjection(ni)).pack(side=RIGHT) for i in range(len(indices)): number = indices[i] data = mode_projector[number] fluctuation = self.mode_projector.amplitude(number) average = mean(data[:, 1]) deviation = standardDeviation(data[:, 1]) box = Frame(self, border=2, relief=SUNKEN) box.pack(side=TOP, fill=BOTH, expand=YES) frame = Frame(box, background='grey') frame.pack(side=TOP, fill=X, expand=NO) Label(frame, text="Mode %d" % number, background='grey').pack(side=LEFT) Button(frame, text="Animation", background='grey', command=lambda s=self, n=number: s.animateMode(n, 1.)).pack( side=RIGHT) Button(frame, text="View", background='grey', command=lambda s=self, n=number: s.viewMode(n)).pack( side=RIGHT) minv = Numeric.minimum.reduce(data[:, 1]) maxv = Numeric.maximum.reduce(data[:, 1]) minv, maxv = plotRange(minv, maxv) middle = 0.5 * (maxv + minv) if maxv - minv < plot_range: minv = middle - 0.5 * plot_range maxv = middle + 0.5 * plot_range plot_objects = [ PolyLine([(data[1, 0], average - fluctuation), (data[1, 0], average + fluctuation)], color='blue', width=3), PolyLine([(data[-1, 0], average - deviation), (data[-1, 0], average + deviation)], color='green', width=3) ] plot_objects.insert(0, PolyLine(data, color='red')) plot = PlotCanvas(box, 400, 100, zoom=1, select=self.master._selectRange) plot.pack(side=LEFT, fill=BOTH, expand=YES) plot.draw(PlotGraphics(plot_objects), 'automatic', (minv, maxv)) plot.bind('<Double-Button-1>', lambda event, d=data: externalPlot(d)) self.registerPlot(plot) self.setSelection(plot)
return FFTSeries[:len(series)] / (len(series) - N.arange(len(series))) from MMTK.Random import gaussian from Scientific.Statistics import mean from Scientific.IO.ArrayIO import readArray from Gnuplot import plot from RandomArray import random dt = 1. t = dt * N.arange(500) if 1: data = N.sin(t) + N.cos(3. * t) + 0.1 * (random(len(t)) - 0.5) data = data + 0.1j * (random(len(t)) - 0.5) if 0: data = [0.] for i in range(500 + len(t) - 1): data.append(mean(data[-500:]) + gaussian(0., 0.1)) data = N.exp(1j * N.array(data[500:])) if 0: #data = readArray('~/scientific/Test/data') string = open('/users1/hinsen/scientific/Test/data').read()[4:] data = N.array(eval(string)) data = data[:, 0] model = AutoRegressiveModel(20, data, dt) print model.coeff print model.poles() c = model.correlation(200) cref = InterpolatingFunction((t, ), AutoCorrelationFunction(data))[:200] m = model.memoryFunction(200) s = model.spectrum(N.arange(0., 5., 0.01)) #plot(c.real, cref.real); plot(c.imag, cref.imag)