Example #1
0
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)
Example #2
0
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)
Example #3
0
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()
Example #4
0
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()
Example #5
0
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()
PlotSet = namedtuple('PlotSet', ['dirname_path', 'label', 'color'])

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)