def __init__(self, p_range, r_front_range, r_back_range, fig_fourier, ax_fourier): self.p_range = p_range self.r_front_range = r_front_range self.r_back_range = r_back_range self.fig_fourier = fig_fourier self.ax_fourier = ax_fourier self.p_index = 0 self.r_front_index = 0 self.r_back_index = 0 self.si = ShelfInterface(db_path) key = [self.r_front_index, self.r_back_index] self.q = self.si.get(key) q0 = self.q[self.p_index][:, 0] self.plot_fourier(q0)
class ParameterSlider: def __init__(self, p_range, r_front_range, r_back_range, fig_fourier, ax_fourier): self.p_range = p_range self.r_front_range = r_front_range self.r_back_range = r_back_range self.fig_fourier = fig_fourier self.ax_fourier = ax_fourier self.p_index = 0 self.r_front_index = 0 self.r_back_index = 0 self.si = ShelfInterface(db_path) key = [self.r_front_index, self.r_back_index] self.q = self.si.get(key) q0 = self.q[self.p_index][:, 0] self.plot_fourier(q0) def update_values(self): self.p = self.p_range[self.p_index] self.r_front = r_front_range[self.r_front_index] self.r_back = r_back_range[self.r_back_index] self.params = calc_params(p, r_front, r_back) #self.qdot = np.array([flow(_, 0, params) for _ in self.q[self.p_index]]) def plot_fourier(self, q0): T1 = 7000 T2 = 9000 q0 = q0[T1:T2] f = c / L * np.fft.rfftfreq(len(q0), d=1 / fs) Q0 = np.fft.rfft(q0 - np.mean(q0)) self.ax_fourier[0].cla() self.ax_fourier[0].plot(f, abs(Q0), color='darkorange') self.ax_fourier[0].set_xlim(0, max(f)) self.ax_fourier[0].set_ylim(0, 0.002) self.ax_fourier[0].set_xlabel('Frequency (Hz)') self.ax_fourier[0].set_ylabel('Abs(Fourier(u_0(t))', rotation=0, labelpad=40) self.fig_fourier.canvas.draw() def plot_phase_diagram(self, q0, q0dot): plt.plot(q0) def on_pressure_slide(self, p_index): self.p_index = int(p_index) self.update_values() pressure_slider.valtext.set_text(str(rho * c**2 * self.p) + "(pa)") q0 = c * self.q[self.p_index][:, 0] self.plot_fourier(q0) def on_r_front_slide(self, r_front_index): self.r_front_index = int(r_front_index) key = [self.r_front_index, self.r_back_index] self.q = self.si.get(key) self.update_values() r_front_slider.valtext.set_text(str(1000 * self.r_front) + "(mm)") q0 = c * self.q[self.p_index][:, 0] self.plot_fourier(q0) def on_r_back_slide(self, r_back_index): self.r_back_index = int(r_back_index) key = [self.r_front_index, self.r_back_index] self.q = self.si.get(key) self.update_values() r_back_slider.valtext.set_text(str(1000 * self.r_back) + "(mm)") q0 = c * self.q[self.p_index][:, 0] self.plot_fourier(q0)
from shelf_interface import ShelfInterface INTERFACE = ShelfInterface() INTERFACE.run()
return q def grouper(n, iterable, fillvalue=None): "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx" args = [iter(iterable)] * n return izip_longest(fillvalue=fillvalue, *args) def find_r_indices(r_front_range, r_back_range, n_cores): r= [(r_front,r_back) for r_front in r_front_range for r_back in r_back_range] r_indices = [[i,j] for i in range(len(r_front_range)) for j in range(len(r_back_range))] r_indices = list(grouper(n_cores, r_indices)) r_indices[-1] = [i for i in r_indices[-1] if i is not None] return r_indices si = ShelfInterface(db_path) si.insert('params', params) si.insert('p_range', p_range) si.insert('r_front_range', r_front_range) si.insert('r_back_range', r_front_range) n_cores = 4 #r_indices = find_r_indices(r_front_range, r_back_range, n_cores) try: for idx in r_indices: q = Parallel(n_jobs=n_cores)(delayed(vary_pressure) (p_range, r_front_range[i[0]], r_back_range[i[1]]) for i in idx) map(si.insert, idx, q) finally: np.save('idx', idx) si.close()
class ParameterSlider: def __init__(self, p_range, r_front_range, r_back_range, fig_fourier, ax_fourier): self.p_range = p_range self.r_front_range = r_front_range self.r_back_range = r_back_range self.fig_fourier = fig_fourier self.ax_fourier = ax_fourier self.p_index = 0 self.r_front_index = 0 self.r_back_index = 0 self.si = ShelfInterface(db_path) key = [self.r_front_index, self.r_back_index] self.q = self.si.get(key) q0 = self.q[self.p_index][:, 0] self.plot_fourier(q0) def update_values(self): self.p = self.p_range[self.p_index] self.r_front = r_front_range[self.r_front_index] self.r_back = r_back_range[self.r_back_index] self.params = calc_params(p, r_front, r_back) #self.qdot = np.array([flow(_, 0, params) for _ in self.q[self.p_index]]) def plot_fourier(self, q0): T1 = 7000 T2 = 9000 q0 = q0[T1:T2] f = c / L * np.fft.rfftfreq( len(q0), d=1/fs ) Q0 = np.fft.rfft( q0 - np.mean(q0) ) self.ax_fourier[0].cla() self.ax_fourier[0].plot(f, abs(Q0), color='darkorange') self.ax_fourier[0].set_xlim(0, max(f)) self.ax_fourier[0].set_ylim(0, 0.002) self.ax_fourier[0].set_xlabel('Frequency (Hz)') self.ax_fourier[0].set_ylabel('Abs(Fourier(u_0(t))', rotation=0, labelpad=40) self.fig_fourier.canvas.draw() def plot_phase_diagram(self, q0, q0dot): plt.plot(q0) def on_pressure_slide(self, p_index): self.p_index = int(p_index) self.update_values() pressure_slider.valtext.set_text(str(rho*c**2*self.p)+"(pa)") q0 = c * self.q[self.p_index][:, 0] self.plot_fourier(q0) def on_r_front_slide(self, r_front_index): self.r_front_index = int(r_front_index) key = [self.r_front_index, self.r_back_index] self.q = self.si.get(key) self.update_values() r_front_slider.valtext.set_text(str(1000*self.r_front) + "(mm)") q0 = c * self.q[self.p_index][:, 0] self.plot_fourier(q0) def on_r_back_slide(self, r_back_index): self.r_back_index = int(r_back_index) key = [self.r_front_index, self.r_back_index] self.q = self.si.get(key) self.update_values() r_back_slider.valtext.set_text(str(1000*self.r_back) + "(mm)") q0 = c * self.q[self.p_index][:, 0] self.plot_fourier(q0)