def t_measures(dirname, time_func, measure_func): """Calculate a measure over time for a single output directory, and its uncertainty. Parameters ---------- dirname: str Path to a model output directory. time_func: function Function which takes a :class:`Model` instance as a single argument, and returns its time. measure_func: function Function which takes a :class:`Model` instance as a single argument, and returns the measure of interest, and its uncertainty. Returns ------- ts: np.ndarray Times. measures: np.ndarray Measures. measure_errs: np.ndarray Measure uncertainties. """ ts, measures, measure_errs = [], [], [] for fname in get_filenames(dirname): m = filename_to_model(fname) ts.append(time_func(m)) meas, meas_err = measure_func(m) measures.append(meas) measure_errs.append(meas_err) return np.array(ts), np.array(measures), np.array(measure_errs)
def get_average_measure(dirname, measure_func, t_steady=None): """ Calculate a measure of a model in an output directory, averaged over all times when the model is at steady-state. Parameters ---------- dirname: str Output directory measure_func: function Function which takes a :class:`Model` instance as a single argument, and returns the measure of interest, and its uncertainty. t_steady: None or float Time to consider the model to be at steady-state. `None` means just consider the latest time. Returns ------- measure: numpy.ndarray Measure. measure_errs: numpy.ndarray Measure uncertainty. If no averaging is done, this is taken from the measure_func. Otherwise, the standard error over all samples is used. """ if t_steady is None: meas, meas_err = measure_func(get_recent_model(dirname)) return meas, meas_err else: ms = [filename_to_model(fname) for fname in get_filenames(dirname)] ms_steady = [m for m in ms if m.t > t_steady] meas_list = [measure_func(m) for m in ms_steady] meases, meas_errs = zip(*meas_list) return np.mean(meases), sem(meases)
def update(val): fname_i = int(round(val)) if 0 <= fname_i < len(fnames): m = output_utils.filename_to_model(fnames[fname_i]) ds, xbs = utils.get_linear_density(m, dx) for rect, d in zip(plot_d, ds): rect.set_height(d) c_field = m.ships.c_field.c plot_c.set_offsets(np.array([c_field.mesh.cellCenters[0, :], c_field.value]).T) fig.canvas.draw_idle()
def update(val): fname_i = int(round(val)) if 0 <= fname_i < len(fnames): m = output_utils.filename_to_model(fnames[fname_i]) plot_p.set_offsets(np.array([m.ships.agents.positions.r_w[:, 0], np.zeros([m.ships.agents.n])]).T) ds = m.ships.agents.positions.get_density_field(dx) for rect, d in zip(plot_d, ds): rect.set_height(d) ax_d.set_ylim(0.0, 1.05 * ds.max()) fig.canvas.draw_idle()
def update(val): fname_i = int(round(val)) if 0 <= fname_i < len(fnames): m = output_utils.filename_to_model(fnames[fname_i]) if has_c_field: plot_c.update(m.ships.c_field.c) plot_p.set_offsets(m.ships.agents.positions.r_w) plot_p.set_UVC(m.ships.agents.directions.u[:, 0], m.ships.agents.directions.u[:, 1]) t_time.set_text('Time: {:g}'.format(m.ships.time.t)) fig.canvas.draw_idle()
def plot_2d(dirname): fig = plt.figure() ax_vis = fig.add_subplot(111) fnames = output_utils.get_filenames(dirname) m_0 = output_utils.filename_to_model(fnames[0]) L = m_0.ships.agents.positions.L ax_vis.set_xlim(-L[0] / 2.0, L[0] / 2.0) ax_vis.set_ylim(-L[1] / 2.0, L[1] / 2.0) ax_vis.set_aspect('equal') plt.subplots_adjust(left=0.25, bottom=0.25) has_c_field = isinstance(m_0.ships.c_field, ahoy.fields.FoodField) if has_c_field: plot_c = VarPlot(m_0.ships.c_field.c, cmap=reds_cmap, axes=ax_vis) plot_p = ax_vis.quiver(m_0.ships.agents.positions.r_w[:, 0], m_0.ships.agents.positions.r_w[:, 1], m_0.ships.agents.directions.u[:, 0], m_0.ships.agents.directions.u[:, 1]) ax_slide = plt.axes([0.25, 0.1, 0.65, 0.03]) t_slider = Slider(ax_slide, 'Time', 0, len(fnames), valinit=0) t_time = fig.text(0.1, 0.5, '') def update(val): fname_i = int(round(val)) if 0 <= fname_i < len(fnames): m = output_utils.filename_to_model(fnames[fname_i]) if has_c_field: plot_c.update(m.ships.c_field.c) plot_p.set_offsets(m.ships.agents.positions.r_w) plot_p.set_UVC(m.ships.agents.directions.u[:, 0], m.ships.agents.directions.u[:, 1]) t_time.set_text('Time: {:g}'.format(m.ships.time.t)) fig.canvas.draw_idle() t_slider.on_changed(update) plt.show()
def plot_1d(dirname): fig = plt.figure() ax_vis = fig.add_subplot(211) ax_d = fig.add_subplot(212) fnames = output_utils.get_filenames(dirname) m_0 = output_utils.filename_to_model(fnames[0]) L = m_0.ships.agents.positions.L ax_vis.set_xlim(-L[0] / 2.0, L[0] / 2.0) ax_d.set_xlim(-L[0] / 2.0, L[0] / 2.0) dx = L / 100.0 plt.subplots_adjust(left=0.25, bottom=0.25) plot_p = ax_vis.scatter(m_0.ships.agents.positions.r_w[:, 0], np.zeros([m_0.ships.agents.n])) d = m_0.ships.agents.positions.get_density_field(dx) x = np.linspace(-L[0] / 2.0, L[0] / 2.0, d.shape[0]) plot_d = ax_d.bar(x, d, width=x[1] - x[0]) ax_slide = plt.axes([0.25, 0.1, 0.65, 0.03]) t_slider = Slider(ax_slide, 'Index', 0, len(fnames), valinit=0) def update(val): fname_i = int(round(val)) if 0 <= fname_i < len(fnames): m = output_utils.filename_to_model(fnames[fname_i]) plot_p.set_offsets(np.array([m.ships.agents.positions.r_w[:, 0], np.zeros([m.ships.agents.n])]).T) ds = m.ships.agents.positions.get_density_field(dx) for rect, d in zip(plot_d, ds): rect.set_height(d) ax_d.set_ylim(0.0, 1.05 * ds.max()) fig.canvas.draw_idle() t_slider.on_changed(update) plt.show()
def plot_linear_density(dirname): fig = plt.figure() ax_d = fig.add_subplot(211) ax_c = fig.add_subplot(212) fnames = output_utils.get_filenames(dirname) m_0 = output_utils.filename_to_model(fnames[0]) L = m_0.ships.agents.positions.L dx = L[0] / 100.0 plt.subplots_adjust(left=0.25, bottom=0.25) ds, xbs = utils.get_linear_density(m_0, dx) plot_d = ax_d.bar(xbs[:-1], ds, width=xbs[1] - xbs[0]) c_field = m_0.ships.c_field.c plot_c = ax_c.scatter(c_field.mesh.cellCenters[0, :], c_field.value) ax_slide = plt.axes([0.25, 0.1, 0.65, 0.03]) t_slider = Slider(ax_slide, 'Index', 0, len(fnames), valinit=0) ax_d.set_xlim(-L[0] / 2.0, L[0] / 2.0) ax_c.set_xlim(-L[0] / 2.0, L[0] / 2.0) ax_c.set_ylim(0.0, m_0.ships.c_field.c_0) def update(val): fname_i = int(round(val)) if 0 <= fname_i < len(fnames): m = output_utils.filename_to_model(fnames[fname_i]) ds, xbs = utils.get_linear_density(m, dx) for rect, d in zip(plot_d, ds): rect.set_height(d) c_field = m.ships.c_field.c plot_c.set_offsets(np.array([c_field.mesh.cellCenters[0, :], c_field.value]).T) fig.canvas.draw_idle() t_slider.on_changed(update) plt.show()
cs = iter(ejm_rcparams.set2) plot_sets = [ PlotSet('/Volumes/Backup/bannock_data/Model1D_dim=1,seed=1,dt=0.1,L=2.5e+03,dx=40,c_D=1e+03,c_sink=0.01,c_source=1,v_0=20,p_0=1,origin_flag=0,rho_0=0.5,chi=all,onesided_flag=1,vicsek_R=0/Model1D_dim=1,seed=1,dt=0.1,L=2.5e+03,dx=40,c_D=1e+03,c_sink=0.01,c_source=1,v_0=20,p_0=1,origin_flag=0,rho_0=0.5,chi=0,onesided_flag=1,vicsek_R=0', r'$\chi = 0$', next(cs)), PlotSet('/Volumes/Backup/bannock_data/Model1D_dim=1,seed=1,dt=0.1,L=2.5e+03,dx=40,c_D=1e+03,c_sink=0.01,c_source=1,v_0=20,p_0=1,origin_flag=0,rho_0=0.5,chi=all,onesided_flag=1,vicsek_R=0/Model1D_dim=1,seed=1,dt=0.1,L=2.5e+03,dx=40,c_D=1e+03,c_sink=0.01,c_source=1,v_0=20,p_0=1,origin_flag=0,rho_0=0.5,chi=6,onesided_flag=1,vicsek_R=0', r'$\chi = 6$', next(cs)), ] t_steady = 20000.0 bins = 400 for plot_set in plot_sets: fnames = output_utils.get_filenames(plot_set.dirname_path) ms = [output_utils.filename_to_model(fname) for fname in fnames] ms_steady = [m for m in ms if m.t > t_steady] m_0 = ms_steady[-1] rhos = [get_rho(m, bins) for m in ms_steady] rho = np.mean(rhos, axis=0) rho_err = sem(rhos, axis=0) rho_red = cutils.get_reduced_rho(m_0.rho_0, rho) rho_red_err = cutils.get_reduced_rho(m_0.rho_0, rho_err) x = np.linspace(-m_0.L / 2.0, m_0.L / 2.0, rho.shape[0]) D_rho = cutils.get_D_rho(m_0.v_0, m_0.p_0, m_0.dim) x_red = cutils.get_reduced_length(m_0.c_sink, D_rho, x) ax.errorbar(x_red, rho_red, rho_red_err, label=plot_set.label,