コード例 #1
0
def make_plot(in_files, f1, f2, f3, f4, f5, f6):
    x_axis = partmc.log_grid(min=1e-10,max=1e-4,n_bin=100)
    y_axis = partmc.linear_grid(min=0,max=1.,n_bin=50)
    x_centers = x_axis.centers()
    y_centers = y_axis.centers()
    counter = 0
    hist_array_num = np.zeros([len(x_centers),len(y_centers),config.i_loop_max])
    hist_average_num = np.zeros([len(x_centers), len(y_centers)])
    hist_std_num = np.zeros([len(x_centers), len(y_centers)])
    hist_std_norm_num = np.zeros([len(x_centers), len(y_centers)])

    hist_array_mass = np.zeros([len(x_centers),len(y_centers),config.i_loop_max])
    hist_average_num = np.zeros([len(x_centers), len(y_centers)])
    hist_std_num = np.zeros([len(x_centers), len(y_centers)])
    hist_std_norm_num = np.zeros([len(x_centers), len(y_centers)])
    for file in in_files:
        ncf = scipy.io.netcdf.netcdf_file(config.netcdf_dir+'/'+file, 'r')
        particles = partmc.aero_particle_array_t(ncf)
        ncf.close()

        bc = particles.masses(include = ["BC"])
        dry_mass = particles.masses(exclude = ["H2O"])
        bc_frac = bc / dry_mass

        dry_diameters = particles.dry_diameters()
        hist2d = partmc.histogram_2d(dry_diameters, bc_frac, x_axis, y_axis, weights = 1 / particles.comp_vols)
        hist_array_num[:,:,counter] = hist2d
        hist2d = partmc.histogram_2d(dry_diameters, bc_frac, x_axis, y_axis, weights = particles.masses(include=["BC"])  / particles.comp_vols)
        hist_array_mass[:,:,counter] = hist2d

        counter = counter+1

    hist_average_num = np.average(hist_array_num, axis = 2)
    hist_std_num = np.std(hist_array_num, axis = 2)
    hist_std_norm_num = hist_std_num / hist_average_num
    hist_std_norm_num = np.ma.masked_invalid(hist_std_norm_num)

    hist_average_mass = np.average(hist_array_mass, axis = 2)
    hist_std_mass = np.std(hist_array_mass, axis = 2)
    hist_std_norm_mass = hist_std_mass / hist_average_mass
    hist_std_norm_mass = np.ma.masked_invalid(hist_std_norm_mass)

    np.savetxt(f1, x_axis.edges())
    np.savetxt(f2, y_axis.edges())
    np.savetxt(f3, hist_average_num)
    np.savetxt(f4, hist_std_norm_num)
    np.savetxt(f5, hist_average_mass)
    np.savetxt(f6, hist_std_norm_mass)
コード例 #2
0
def process_data(in_filename_list, out_filename):
    total_value = None
    for in_filename in in_filename_list:
        ncf = scipy.io.netcdf.netcdf_file(in_filename, 'r')
        particles = partmc.aero_particle_array_t(ncf)
        env_state = partmc.env_state_t(ncf)
        ncf.close()

        dry_diameters = particles.dry_diameters() * 1e6 # m to um
        scrit = (particles.critical_rel_humids(env_state) - 1) * 100 # in %

        value = partmc.histogram_2d(dry_diameters, scrit, x_axis, y_axis,
                                    weights = 1 / particles.comp_vols,
                                    only_positive=False)
        # do not account for y_axis in % as it is a log-scale
        value /= 1e6 # m^{-3} to cm^{-3}

        if total_value is None:
            total_value = value
        else:
            total_value += value
    total_value /= len(in_filename_list)
    np.savetxt(out_filename, total_value)
    mask = np.ma.make_mask(total_value <= 0.0)
    masked_total_value = np.ma.array(total_value, mask=mask)
    return(masked_total_value.min(), masked_total_value.max())
コード例 #3
0
def process_data(in_filename_list, out_filename):
    total_value = None
    for in_filename in in_filename_list:
        ncf = scipy.io.netcdf.netcdf_file(in_filename, 'r')
        particles = partmc.aero_particle_array_t(ncf)
        env_state = partmc.env_state_t(ncf)
        ncf.close()

        dry_diameters = particles.dry_diameters() * 1e6  # m to um
        comp_frac = particles.masses(include = ["BC"]) \
                    / particles.masses(exclude = ["H2O"]) * 100 # in %

        # hack to avoid landing just around the integer boundaries
        comp_frac *= (1.0 + 1e-12)

        value = partmc.histogram_2d(dry_diameters,
                                    comp_frac,
                                    x_axis,
                                    y_axis,
                                    weights=1 / particles.comp_vols,
                                    only_positive=False)
        value *= 100  # account for y_axis scaling in %
        value /= 1e6  # m^{-3} to cm^{-3}

        if total_value is None:
            total_value = value
        else:
            total_value += value
    total_value /= len(in_filename_list)
    np.savetxt(out_filename, total_value)
    mask = np.ma.make_mask(total_value <= 0.0)
    masked_total_value = np.ma.array(total_value, mask=mask)
    return (masked_total_value.min(), masked_total_value.max())
コード例 #4
0
ファイル: fig_2d_age.py プロジェクト: zzheng93/partmc
def make_plot(in_filename,out_filename,time,title):
    ncf = scipy.io.netcdf.netcdf_file(in_filename, 'r')
    particles = partmc.aero_particle_array_t(ncf)
    ncf.close()

    age = abs(particles.least_create_times / 3600. - time)
    dry_diameters = particles.dry_diameters()

    x_axis = partmc.log_grid(min=1e-8,max=1e-6,n_bin=70)
    y_axis = partmc.linear_grid(min=0, max = 48, n_bin=49)

    hist2d = partmc.histogram_2d(dry_diameters, age, x_axis, y_axis, weights = 1/particles.comp_vols)

    plt.clf()
    plt.pcolor(x_axis.edges(), y_axis.edges(), hist2d.transpose(),norm = matplotlib.colors.LogNorm(), linewidths = 0.1)
    a = plt.gca()
    a.set_xscale("log")
    a.set_yscale("linear")
    plt.axis([x_axis.min, x_axis.max, y_axis.min, y_axis.max])
    plt.xlabel("dry diameter (m)")
    plt.ylabel("age (h)")
    cbar = plt.colorbar()
    cbar.set_label("number density (m^{-3})")
    plt.title(title)
    fig = plt.gcf()
    fig.savefig(out_filename)
コード例 #5
0
def make_plot(in_filename,out_filename,title):
    ncf = scipy.io.netcdf.netcdf_file(in_filename, 'r')
    particles = partmc.aero_particle_array_t(ncf)
    ncf.close()

    oin = particles.masses(include = ["BC"])
    dry_mass = particles.masses(exclude = ["H2O"])
    oin_frac = oin / dry_mass

    dry_diameters = particles.dry_diameters()

    print oin.max()

    x_axis = partmc.log_grid(min=1e-8,max=1e-4,n_bin=100)
    y_axis = partmc.log_grid(min=1e-19,max=6e-15,n_bin=30)

    hist2d = partmc.histogram_2d(dry_diameters, oin, x_axis, y_axis, weights = 1/particles.comp_vols)
    plt.clf()
    plt.pcolor(x_axis.edges(), y_axis.edges(), hist2d.transpose(),norm = matplotlib.colors.LogNorm(), linewidths = 0.1)
    a = plt.gca()
    a.set_xscale("log")
    a.set_yscale("log")
    plt.axis([1e-8, 1e-4, 1e-19, 6e-15])
    plt.xlabel("dry diameter (m)")
    plt.ylabel("BC mass")
    plt.grid(True)
#    plt.clim(1e6, 1e12)
    cbar = plt.colorbar()
    cbar.set_label(r"number density ($\rm m^{-3}$)")
    plt.title(title)
    fig = plt.gcf()
    fig.savefig(out_filename)
コード例 #6
0
ファイル: fig_2d_scrit.py プロジェクト: zzheng93/partmc
def make_plot(in_filename,out_filename,title):
    print in_filename
    ncf = scipy.io.netcdf.netcdf_file(in_filename, 'r')
    particles = partmc.aero_particle_array_t(ncf)
    env_state = partmc.env_state_t(ncf)
    ncf.close()

    dry_diameters = particles.dry_diameters()
    s_crit = (particles.critical_rel_humids(env_state) - 1)*100
    x_axis = partmc.log_grid(min=1e-8,max=1e-6,n_bin=70)
    y_axis = partmc.log_grid(min=1e-3,max=1e2,n_bin=50)

    hist2d = partmc.histogram_2d(dry_diameters, s_crit, x_axis, y_axis, weights = 1/particles.comp_vols)
    plt.clf()
    plt.pcolor(x_axis.edges(), y_axis.edges(), hist2d.transpose(),norm = matplotlib.colors.LogNorm(), linewidths = 0.1)
    a = plt.gca()
    a.set_xscale("log")
    a.set_yscale("log")
    plt.axis([x_axis.min, x_axis.max, y_axis.min, y_axis.max])
    plt.xlabel("dry diameter (m)")
    plt.ylabel("critical supersaturation (%)")
    cbar = plt.colorbar()
    cbar.set_label("number density (m^{-3})")
    plt.title(title)
    fig = plt.gcf()
    fig.savefig(out_filename)
コード例 #7
0
ファイル: fig_2d_bc.py プロジェクト: zzheng93/partmc
def make_plot(in_filename,out_filename,title):
    ncf = scipy.io.netcdf.netcdf_file(in_filename, 'r')
    particles = partmc.aero_particle_array_t(ncf)
    ncf.close()

    bc = particles.masses(include = ["BC"])
    dry_mass = particles.masses(exclude = ["H2O"])
    bc_frac = bc / dry_mass

    dry_diameters = particles.dry_diameters()

    x_axis = partmc.log_grid(min=1e-8,max=1e-6,n_bin=70)
    y_axis = partmc.linear_grid(min=0,max=0.8,n_bin=40)

    hist2d = partmc.histogram_2d(dry_diameters, bc_frac, x_axis, y_axis, weights = 1/particles.comp_vols)
    plt.clf()
    plt.pcolor(x_axis.edges(), y_axis.edges(), hist2d.transpose(),norm = matplotlib.colors.LogNorm(), linewidths = 0.1)
    a = plt.gca()
    a.set_xscale("log")
    a.set_yscale("linear")
    plt.axis([x_axis.min, x_axis.max, y_axis.min, y_axis.max])
    plt.xlabel("dry diameter (m)")
    plt.ylabel("BC mass fraction")
    cbar = plt.colorbar()
    cbar.set_label("number density (m^{-3})")
    plt.title(title)
    fig = plt.gcf()
    fig.savefig(out_filename)
コード例 #8
0
ファイル: plot_2d_bc_frac.py プロジェクト: zzheng93/partmc
def make_plot(dir_name, in_filename, out_filename):
    ncf = scipy.io.netcdf.netcdf_file(dir_name + in_filename, 'r')
    particles = partmc.aero_particle_array_t(ncf)
    ncf.close()

    bc = particles.masses(include=["BC"])
    dry_mass = particles.masses(exclude=["H2O"])
    bc_frac = bc / dry_mass

    dry_diameters = particles.dry_diameters() * 1e6

    x_axis = partmc.log_grid(min=1e-3, max=1e1, n_bin=100)
    y_axis = partmc.linear_grid(min=0, max=0.8, n_bin=40)

    hist2d = partmc.histogram_2d(dry_diameters,
                                 bc_frac,
                                 x_axis,
                                 y_axis,
                                 weights=1 / particles.comp_vols)

    hist2d = hist2d * 1e-6
    print hist2d[36, :]
    (figure, axes_array,
     cbar_axes_array) = mpl_helper.make_fig_array(1,
                                                  1,
                                                  figure_width=5,
                                                  top_margin=0.5,
                                                  bottom_margin=0.45,
                                                  left_margin=0.65,
                                                  right_margin=1,
                                                  vert_sep=0.3,
                                                  horiz_sep=0.3,
                                                  colorbar="shared",
                                                  colorbar_location="right")

    axes = axes_array[0][0]
    cbar_axes = cbar_axes_array[0]
    p = axes.pcolor(x_axis.edges(),
                    y_axis.edges(),
                    hist2d.transpose(),
                    norm=matplotlib.colors.LogNorm(vmin=1e3, vmax=1e5),
                    linewidths=0.1)
    axes.set_xscale("log")
    axes.set_yscale("linear")
    axes.set_ylabel(r"BC mass fraction $w_{\rm BC}$")
    axes.set_xlabel(r"dry diameter $D$/ $\rm \mu m$")
    axes.set_ylim(0, 0.8)
    axes.set_xlim(5e-3, 1e0)
    axes.grid(True)
    cbar = figure.colorbar(p,
                           cax=cbar_axes,
                           format=matplotlib.ticker.LogFormatterMathtext(),
                           orientation='vertical')
    cbar_axes.xaxis.set_label_position('top')
    cbar.set_label(r"number conc. $n(D,w_{\rm BC})$ / $\rm cm^{-3}$")

    mpl_helper.remove_fig_array_axes(axes_array)
    figure.savefig(out_filename)
コード例 #9
0
ファイル: fig_2d_so4.py プロジェクト: zzheng93/partmc
def make_plot(in_filename, out_filename, title):
    ncf = scipy.io.netcdf.netcdf_file(in_filename, 'r')
    particles = partmc.aero_particle_array_t(ncf)
    ncf.close()

    so4 = particles.masses(
        include=["SO4"]) / particles.aero_data.molec_weights[0]
    nh4 = particles.masses(
        include=["NH4"]) / particles.aero_data.molec_weights[3]
    no3 = particles.masses(
        include=["NO3"]) / particles.aero_data.molec_weights[1]

    dry_mass = particles.masses(exclude=["H2O"])
    so4_frac = so4 / dry_mass
    ion_ratio = (2 * so4 + no3) / nh4

    is_neutral = (ion_ratio < 2)
    print 'neutral ', sum(is_neutral), ion_ratio[is_neutral]

    dry_diameters = particles.dry_diameters()

    x_axis = partmc.log_grid(min=1e-8, max=1e-6, n_bin=70)
    y_axis = partmc.linear_grid(min=0, max=1.0, n_bin=50)

    hist2d = partmc.histogram_2d(dry_diameters,
                                 so4_frac,
                                 x_axis,
                                 y_axis,
                                 weights=1 / particles.comp_vols)

    plt.clf()
    plt.semilogx(dry_diameters, ion_ratio, 'rx')
    fig = plt.gcf()
    fig.savefig('figs/t.pdf')

    plt.clf()
    plt.pcolor(x_axis.edges(),
               y_axis.edges(),
               hist2d.transpose(),
               norm=matplotlib.colors.LogNorm(),
               linewidths=0.1)
    a = plt.gca()
    a.set_xscale("log")
    a.set_yscale("linear")
    plt.axis([x_axis.min, x_axis.max, y_axis.min, y_axis.max])
    plt.xlabel("dry diameter (m)")
    plt.ylabel("SO4 mass fraction")
    cbar = plt.colorbar()
    cbar.set_label("number density (m^{-3})")
    plt.title(title)
    fig = plt.gcf()
    fig.savefig(out_filename)
コード例 #10
0
def make_plot(dir_name,in_filename,out_filename):
    ncf = scipy.io.netcdf.netcdf_file(dir_name+in_filename, 'r')
    
    particles = partmc.aero_particle_array_t(ncf)
    env_state = partmc.env_state_t(ncf)
    ncf.close()

    dry_diameters = particles.dry_diameters() * 1e6

    s_crit = (particles.critical_rel_humids(env_state) - 1)*100
    
    x_axis = partmc.log_grid(min=1e-3,max=1e1,n_bin=100)
    y_axis = partmc.log_grid(min=1e-3,max=1e2,n_bin=50)

    hist2d = partmc.histogram_2d(dry_diameters, s_crit, x_axis, y_axis, weights = particles.num_concs)

    hist2d = hist2d * 1e-6

    (figure, axes_array, cbar_axes_array) = mpl_helper.make_fig_array(1,1, figure_width=5,
									  top_margin=0.5, bottom_margin=0.45,
									  left_margin=0.65, right_margin=1,
									  vert_sep=0.3, horiz_sep=0.3,
									  colorbar="shared", colorbar_location="right")

    axes = axes_array[0][0]
    cbar_axes = cbar_axes_array[0]
    p = axes.pcolor(x_axis.edges(), y_axis.edges(), hist2d.transpose(), 
		    norm = matplotlib.colors.LogNorm(vmin=1e3, vmax=1e5), linewidths = 0.1)
    axes.set_xscale("log")
    axes.set_yscale("log")
    axes.set_ylabel(r"crit. supersat. $S_{\rm c}$")
    axes.set_xlabel(r"dry diameter $D$/ $\rm \mu m$")
    axes.set_ylim(1e-3,10)
    axes.set_xlim(5e-3, 1e0)
    axes.grid(True)
    cbar = figure.colorbar(p, cax=cbar_axes, format=matplotlib.ticker.LogFormatterMathtext(),
			   orientation='vertical')
    cbar_axes.xaxis.set_label_position('top')
    cbar.set_label(r"number conc. $n(D,S_{\rm c})$ / $\rm cm^{-3}$")
    
    mpl_helper.remove_fig_array_axes(axes_array)
    figure.savefig(out_filename)
    plt.close()
コード例 #11
0
def get_plot_data_bc(filename, value_min=None, value_max=None):
    ncf = scipy.io.netcdf.netcdf_file(filename, 'r')
    particles = partmc.aero_particle_array_t(ncf)
    env_state = partmc.env_state_t(ncf)
    ncf.close()

    diameters = particles.dry_diameters() * 1e6
    comp_frac = particles.masses(include = ["BC"]) \
                / particles.masses(exclude = ["H2O"]) * 100

    x_axis = partmc.log_grid(min=diameter_axis_min,
                             max=diameter_axis_max,
                             n_bin=num_diameter_bins)
    y_axis = partmc.linear_grid(min=bc_axis_min,
                                max=bc_axis_max,
                                n_bin=num_bc_bins)
    # hack to avoid landing just around the integer boundaries
    comp_frac *= (1.0 + 1e-12)

    value = partmc.histogram_2d(diameters,
                                comp_frac,
                                x_axis,
                                y_axis,
                                weights=1 / particles.comp_vols)
    value *= 100
    value /= 1e6
    if value_max == None:
        value_max = value.max()
    if value_min == None:
        maxed_value = np.where(value > 0.0, value, value_max)
        value_min = maxed_value.min()
    #if value_max > 0.0:
    #    value = (log(value) - log(value_min)) \
    #            / (log(value_max) - log(value_min))
    #value = value.clip(0.0, 1.0)

    return (value, x_axis.edges(), y_axis.edges(), env_state, value_min,
            value_max)
コード例 #12
0
        time_for_aging[i_counter] = -1
    i_counter = i_counter + 1

emit_morning = ((emit_time < 6.) & (bc_frac_emit > 0))
emit_afternoon = (((emit_time > 11.) & (emit_time < 12.)) & (bc_frac_emit > 0))
emit_night = ((emit_time > 12) & (bc_frac_emit > 0))

bc_containing = (bc_frac_emit > 0)

# 2D Histogram plot
x_axis = partmc.log_grid(min=1e-3, max=1e1, n_bin=70)
y_axis = partmc.linear_grid(min=0, max=48, n_bin=48)

hist2d = partmc.histogram_2d(emit_diam[bc_containing],
                             time_for_aging[bc_containing],
                             x_axis,
                             y_axis,
                             weights=1 / emit_comp_vols[bc_containing])

hist2d_morning = partmc.histogram_2d(emit_diam[emit_morning],
                                     time_for_aging[emit_morning],
                                     x_axis,
                                     y_axis,
                                     weights=1 / emit_comp_vols[emit_morning])

hist2d_afternoon = partmc.histogram_2d(emit_diam[emit_afternoon],
                                       time_for_aging[emit_afternoon],
                                       x_axis,
                                       y_axis,
                                       weights=1 /
                                       emit_comp_vols[emit_afternoon])
コード例 #13
0
ファイル: fig_2d_scrit.py プロジェクト: zzheng93/partmc
def make_plot(dir_name, in_files, out_filename1, out_filename2):
    x_axis = partmc.log_grid(min=1e-9, max=1e-5, n_bin=70)
    y_axis = partmc.log_grid(min=1e-3, max=1e2, n_bin=50)
    x_centers = x_axis.centers()
    y_centers = y_axis.centers()
    counter = 0
    hist_array = np.zeros([len(x_centers), len(y_centers), config.i_loop_max])
    hist_average = np.zeros([len(x_centers), len(y_centers)])
    hist_std = np.zeros([len(x_centers), len(y_centers)])
    hist_std_norm = np.zeros([len(x_centers), len(y_centers)])

    for file in in_files:
        ncf = Scientific.IO.NetCDF.NetCDFFile(dir_name + file)
        particles = partmc.aero_particle_array_t(ncf)
        env_state = partmc.env_state_t(ncf)
        ncf.close()

        dry_diameters = particles.dry_diameters()
        s_crit = (particles.critical_rel_humids(env_state) - 1) * 100
        hist2d = partmc.histogram_2d(dry_diameters,
                                     s_crit,
                                     x_axis,
                                     y_axis,
                                     weights=1 / particles.comp_vols)
        hist_array[:, :, counter] = hist2d
        counter = counter + 1

    hist_average = np.average(hist_array, axis=2)
    hist_std = np.std(hist_array, axis=2)
    hist_std_norm = hist_std / hist_average
    hist_std_norm = np.ma.masked_invalid(hist_std_norm)

    print "min, max", hist_average.min(), hist_average.max()

    #    dry_diameters_line = np.array([1e-9, 1e-5])
    #    kappa_line1 = np.array([0.01, 0.01])
    #    crit_ss_line1 = (partmc.critical_rel_humids(env_state,kappa_line1, dry_diameters_line)-1)*100.
    #    kappa_line2 = np.array([0.1, 0.1])
    #    crit_ss_line2 = (partmc.critical_rel_humids(env_state,kappa_line2, dry_diameters_line)-1)*100.
    #    kappa_line3 = np.array([2,2])
    #    crit_ss_line3 = (partmc.critical_rel_humids(env_state,kappa_line3, dry_diameters_line)-1)*100.
    #    kappa_line4 = np.array([0.001,0.001])
    #    crit_ss_line4 = (partmc.critical_rel_humids(env_state,kappa_line4, dry_diameters_line)-1)*100.

    #    print 'line ', kappa_line1, dry_diameters_line, crit_ss_line1

    plt.clf()
    plt.pcolor(x_axis.edges(),
               y_axis.edges(),
               hist_average.transpose(),
               norm=matplotlib.colors.LogNorm(vmin=1e3, vmax=1e11),
               linewidths=0.1)
    #    plt.plot(dry_diameters_line, crit_ss_line1, 'k-')
    #    plt.plot(dry_diameters_line, crit_ss_line2, 'k-')
    #    plt.plot(dry_diameters_line, crit_ss_line3, 'k-')
    #    plt.plot(dry_diameters_line, crit_ss_line4, 'k-')
    a = plt.gca()
    a.set_xscale("log")
    a.set_yscale("log")
    plt.grid()
    plt.axis([5e-9, 5e-6, y_axis.min, y_axis.max])
    plt.xlabel("dry diameter (m)")
    plt.ylabel("S_crit in %")
    cbar = plt.colorbar()
    cbar.set_label("number density (m^{-3})")
    fig = plt.gcf()
    fig.savefig(out_filename1)

    plt.clf()
    plt.pcolor(x_axis.edges(),
               y_axis.edges(),
               hist_std_norm.transpose(),
               norm=matplotlib.colors.LogNorm(vmin=1e-2, vmax=10),
               linewidths=0.1)
    a = plt.gca()
    a.set_xscale("log")
    a.set_yscale("log")
    plt.grid()
    plt.axis([5e-9, 5e-6, y_axis.min, y_axis.max])
    plt.xlabel("dry diameter (m)")
    plt.ylabel("S_crit in %")
    cbar = plt.colorbar()
    cbar.set_label("CV")
    fig = plt.gcf()
    fig.savefig(out_filename2)
コード例 #14
0
ファイル: fig_2d_bc_mov.py プロジェクト: zzheng93/partmc
def make_plot(in_filename, out_filename):
    ncf = scipy.io.netcdf.netcdf_file(in_filename, 'r')
    particles = partmc.aero_particle_array_t(ncf)
    env_state = partmc.env_state_t(ncf)
    ncf.close()

    bc = particles.masses(include=["BC"])
    dry_mass = particles.masses(exclude=["H2O"])
    bc_frac = bc / dry_mass

    wet_diameters = particles.diameters()
    dry_diameters = particles.dry_diameters() * 1e6

    x_axis = partmc.log_grid(min=1e-2, max=1e0, n_bin=90)
    y_axis = partmc.linear_grid(min=0, max=0.8, n_bin=40)

    (figure, axes, cbar_axes) = config_matplotlib.make_fig(colorbar=True,
                                                           right_margin=1,
                                                           top_margin=0.3)

    axes.grid(True)
    axes.grid(True, which='minor')
    axes.minorticks_on()
    axes.set_xscale('log')

    axes.set_xbound(x_axis.min, x_axis.max)
    axes.set_ybound(y_axis.min, y_axis.max)

    xaxis = axes.get_xaxis()
    yaxis = axes.get_yaxis()
    xaxis.labelpad = 8
    yaxis.labelpad = 8
    #xaxis.set_major_formatter(matplotlib.ticker.LogFormatter())
    #yaxis.set_major_locator(matplotlib.ticker.MaxNLocator(5))
    #yaxis.set_minor_locator(matplotlib.ticker.MaxNLocator(8))

    axes.set_xlabel(r"dry diameter $D\ (\rm\mu m)$")
    axes.set_ylabel(r"BC dry mass frac. $w_{{\rm BC},{\rm dry}}$")

    hist2d = partmc.histogram_2d(dry_diameters,
                                 bc_frac,
                                 x_axis,
                                 y_axis,
                                 weights=1 / particles.comp_vols)
    #    plt.clf()

    axes.set_xbound(x_axis.min, x_axis.max)
    axes.set_ybound(y_axis.min, y_axis.max)

    p = axes.pcolor(x_axis.edges(),
                    y_axis.edges(),
                    hist2d.transpose(),
                    norm=matplotlib.colors.LogNorm(vmin=1e8, vmax=1e11),
                    linewidths=0.1)
    title = partmc.time_of_day_string(env_state)
    axes.set_xbound(x_axis.min, x_axis.max)
    axes.set_ybound(y_axis.min, y_axis.max)
    axes.set_title(title)
    figure.colorbar(p,
                    cax=cbar_axes,
                    format=matplotlib.ticker.LogFormatterMathtext())
    cbar_axes.set_ylabel(r"number conc. $(\rm m^{-3})$")
    #cbar_axes.set_ylim([1e8, 1e11])
    #plt.title(title)
    axes.set_xbound(x_axis.min, x_axis.max)
    axes.set_ybound(y_axis.min, y_axis.max)
    fig = plt.gcf()
    fig.savefig(out_filename)
コード例 #15
0
def make_plot(hour, f1, f2, f3, f4):
    x_axis = partmc.log_grid(
        min=1e-9, max=1e-5,
        n_bin=80)  # n_bin changed to 80. was 70 for the submitted paper
    y_axis = partmc.linear_grid(min=0, max=1., n_bin=50)
    x_centers = x_axis.centers()
    y_centers = y_axis.centers()

    hist_array_num = np.zeros([
        len(x_centers),
        len(y_centers), config.i_weighting_schemes, config.i_loop_max
    ])
    hist_array_mass = np.zeros([
        len(x_centers),
        len(y_centers), config.i_weighting_schemes, config.i_loop_max
    ])
    hist_array_pnum = np.zeros([
        len(x_centers),
        len(y_centers), config.i_weighting_schemes, config.i_loop_max
    ])

    hist_average_num = np.zeros(
        [len(x_centers),
         len(y_centers), config.i_weighting_schemes])
    hist_average_mass = np.zeros(
        [len(x_centers),
         len(y_centers), config.i_weighting_schemes])
    hist_average_pnum = np.zeros(
        [len(x_centers),
         len(y_centers), config.i_weighting_schemes])

    hist_var_num = np.zeros(
        [len(x_centers),
         len(y_centers), config.i_weighting_schemes])
    hist_var_mass = np.zeros(
        [len(x_centers),
         len(y_centers), config.i_weighting_schemes])

    weighting_factor_num = np.zeros(
        [len(x_centers),
         len(y_centers), config.i_weighting_schemes])
    weighting_factor_mass = np.zeros(
        [len(x_centers),
         len(y_centers), config.i_weighting_schemes])

    for (counter_weighting, counter) in enumerate([
            "1K_wei+1", "1K_flat", "1K_wei-1", "1K_wei-2", "1K_wei-3",
            "1K_wei-4"
    ]):
        print "I'm doing ", counter
        files = []
        for i_loop in range(0, config.i_loop_max):
            filename_in = config.netcdf_dir + "/urban_plume_wc_%s_0%03d_000000%02d.nc" % (
                counter, i_loop + 1, hour)
            files.append(filename_in)

        for (counter_i_loop, file) in enumerate(files):
            print "file ", file
            ncf = scipy.io.netcdf.netcdf_file(file, 'r')
            particles = partmc.aero_particle_array_t(ncf)
            env_state = partmc.env_state_t(ncf)
            ncf.close()

            dry_diameters = particles.dry_diameters()
            bc = particles.masses(include=["BC"])
            dry_mass = particles.masses(exclude=["H2O"])
            bc_frac = bc / dry_mass

            hist2d = partmc.histogram_2d(dry_diameters,
                                         bc_frac,
                                         x_axis,
                                         y_axis,
                                         weights=1 / particles.comp_vols)
            hist_array_num[:, :, counter_weighting, counter_i_loop] = hist2d
            hist2d = partmc.histogram_2d(
                dry_diameters,
                bc_frac,
                x_axis,
                y_axis,
                weights=particles.masses(include=["BC"]) / particles.comp_vols)
            hist_array_mass[:, :, counter_weighting, counter_i_loop] = hist2d
            hist2d = partmc.histogram_2d(dry_diameters, bc_frac, x_axis,
                                         y_axis)
            hist_array_pnum[:, :, counter_weighting, counter_i_loop] = hist2d

    hist_array_num = np.ma.masked_less_equal(hist_array_num, 0)
    hist_array_mass = np.ma.masked_less_equal(hist_array_mass, 0)
    hist_array_pnum = np.ma.masked_less_equal(hist_array_pnum, 0)

    hist_average_num = np.average(hist_array_num, axis=3)
    hist_average_mass = np.average(hist_array_mass, axis=3)
    hist_average_pnum = np.average(hist_array_pnum, axis=3)

    hist_var_num = np.var(hist_array_num, axis=3)
    hist_var_mass = np.var(hist_array_mass, axis=3)

    print "Calculated average and variance", counter

    #    weighting_factor_num = 1 / (hist_var_num / hist_average_pnum)
    #    weighting_factor_mass = 1 / (hist_var_mass / hist_average_pnum)
    #    new way of calculating weighting_factor after Matt discovered error, 6/25/2011
    #    weighting_factor_num = 1 / hist_var_num
    #    weighting_factor_mass = 1 / hist_var_mass
    # TEST: weighting directly proportional to N_p
    weighting_factor_num = hist_average_pnum
    weighting_factor_mass = hist_average_pnum

    weighting_factor_num_sum = np.sum(weighting_factor_num, axis=2)
    weighting_factor_mass_sum = np.sum(weighting_factor_mass, axis=2)

    hist_composite_num = np.zeros([len(x_centers), len(y_centers)])
    hist_composite_mass = np.zeros([len(x_centers), len(y_centers)])

    for i in range(0, config.i_weighting_schemes):
        increment = weighting_factor_num[:, :,
                                         i] / weighting_factor_num_sum * hist_average_num[:, :,
                                                                                          i]
        #        increment = increment.filled(0)
        hist_composite_num += increment
    print "hist_composite_num ", hist_composite_num
    hist_composite_num = np.nan_to_num(hist_composite_num)

    for i in range(0, config.i_weighting_schemes):
        increment = weighting_factor_mass[:, :,
                                          i] / weighting_factor_mass_sum * hist_average_mass[:, :,
                                                                                             i]
        #        increment = increment.filled(0)
        hist_composite_mass += increment
    hist_composite_mass = np.nan_to_num(hist_composite_mass)

    np.savetxt(f1, x_axis.edges())
    np.savetxt(f2, y_axis.edges())
    np.savetxt(f3, hist_composite_num)
    np.savetxt(f4, hist_composite_mass)
コード例 #16
0
		time_for_aging[i_counter] = (particle_set[id].aging_time - particle_set[id].emit_time) / 3600.	
	else:
		time_for_aging[i_counter] = -1
	i_counter = i_counter + 1

emit_morning = ((emit_time < 6.) & (bc_frac_emit > 0))
emit_afternoon = (((emit_time > 6.) & (emit_time < 12.)) & (bc_frac_emit > 0))
emit_night = ((emit_time > 12) & (bc_frac_emit > 0 ))

bc_containing = (bc_frac_emit > 0)

# 2D Histogram plot
x_axis = partmc.log_grid(min=1e-3,max=1e1,n_bin=70)
y_axis = partmc.linear_grid(min=0,max=1,n_bin=50)

hist2d = partmc.histogram_2d(emit_diam[bc_containing], aging_solute_fraction[bc_containing], 
			     x_axis, y_axis, weights = 1 / emit_comp_vols[bc_containing])

hist2d_morning = partmc.histogram_2d(emit_diam[emit_morning], aging_solute_fraction[emit_morning], 
			     x_axis, y_axis, weights = 1 / emit_comp_vols[emit_morning])

hist2d_afternoon = partmc.histogram_2d(emit_diam[emit_afternoon], aging_solute_fraction[emit_afternoon], 
			     x_axis, y_axis, weights = 1 / emit_comp_vols[emit_afternoon])

hist2d = hist2d * 1e-6
hist2d_morning = hist2d_morning * 1e-6
hist2d_afternoon = hist2d_afternoon * 1e-6

(figure, axes_array, cbar_axes_array) = mpl_helper.make_fig_array(1,1, figure_width=5,
								  top_margin=1, bottom_margin=0.45,
								  left_margin=1.07, right_margin=0.65,
								  vert_sep=0.3, horiz_sep=0.3,
コード例 #17
0
def make_plot(dir_name, hour, out_filename1):
    x_axis = partmc.log_grid(min=1e-9, max=1e-5, n_bin=70)
    y_axis = partmc.log_grid(min=1e-3, max=1e2, n_bin=50)
    x_centers = x_axis.centers()
    y_centers = y_axis.centers()

    hist_array = np.zeros([
        len(x_centers),
        len(y_centers), config.i_weighting_schemes, config.i_loop_max
    ])
    hist_average = np.zeros(
        [len(x_centers),
         len(y_centers), config.i_weighting_schemes])
    hist_var = np.zeros(
        [len(x_centers),
         len(y_centers), config.i_weighting_schemes])
    weighting_factor = np.zeros(
        [len(x_centers),
         len(y_centers), config.i_weighting_schemes])

    for (counter_weighting, counter) in enumerate([
            "10K_wei+1", "10K_flat", "10K_wei-1", "10K_wei-2", "10K_wei-3",
            "10K_wei-4"
    ]):
        print "I'm doing ", counter
        files = []
        for i_loop in range(0, config.i_loop_max):
            filename_in = "urban_plume_wc_%s_0%03d_000000%02d.nc" % (
                counter, i_loop + 1, hour)
            files.append(filename_in)

        for (counter_i_loop, file) in enumerate(files):
            print "file ", file
            ncf = Scientific.IO.NetCDF.NetCDFFile(dir_name + file)
            particles = partmc.aero_particle_array_t(ncf)
            env_state = partmc.env_state_t(ncf)
            ncf.close()

            dry_diameters = particles.dry_diameters()
            s_crit = (particles.critical_rel_humids(env_state) - 1) * 100
            hist2d = partmc.histogram_2d(dry_diameters,
                                         s_crit,
                                         x_axis,
                                         y_axis,
                                         weights=1 / particles.comp_vols)
            hist_array[:, :, counter_weighting, counter_i_loop] = hist2d

    hist_array = np.ma.masked_less_equal(hist_array, 0)
    hist_average = np.average(hist_array, axis=3)
    hist_var = np.var(hist_array, axis=3)
    print "Calculated average and variance", counter

    weighting_factor = 1 / hist_var
    weighting_factor_sum = np.sum(weighting_factor, axis=2)

    hist_composite = np.zeros([len(x_centers), len(y_centers)])
    for i in range(0, config.i_weighting_schemes):
        increment = weighting_factor[:, :,
                                     i] / weighting_factor_sum * hist_average[:, :,
                                                                              i]
        increment = increment.filled(0)
        hist_composite += increment
    hist_composite = np.ma.masked_less_equal(hist_composite, 0)

    plt.clf()
    plt.pcolor(x_axis.edges(),
               y_axis.edges(),
               hist_composite.transpose(),
               norm=matplotlib.colors.LogNorm(),
               linewidths=0.1)
    a = plt.gca()
    a.set_xscale("log")
    a.set_yscale("log")
    plt.grid()
    plt.axis([x_axis.min, x_axis.max, y_axis.min, y_axis.max])
    plt.xlabel("dry diameter (m)")
    plt.ylabel("S_crit in %")
    cbar = plt.colorbar()
    cbar.set_label("number density (m^{-3})")
    fig = plt.gcf()
    fig.savefig(out_filename1)
コード例 #18
0
def make_plot(in_filename,out_filename,title):
    ncf = scipy.io.netcdf.netcdf_file(in_filename, 'r')
    particles = partmc.aero_particle_array_t(ncf)
    ncf.close()

    so4 = particles.masses(include = ["SO4"])/particles.aero_data.molec_weights[0]
    nh4 =  particles.masses(include = ["NH4"])/particles.aero_data.molec_weights[3]
    no3 =  particles.masses(include = ["NO3"])/particles.aero_data.molec_weights[1]
    bc =  particles.masses(include = ["BC"])/particles.aero_data.molec_weights[18]
    oc =  particles.masses(include = ["OC"])/particles.aero_data.molec_weights[17]

    print 'min nh4 ', min(particles.masses(include = ["NH4"])), max(nh4), min(no3), max(no3)

    ion_ratio = (2*so4 + no3) / nh4

    is_neutral = (ion_ratio < 2)
    dry_diameters = particles.dry_diameters()

    x_axis = partmc.log_grid(min=1e-8,max=1e-6,n_bin=70)
    y_axis = partmc.linear_grid(min=0,max=30.0,n_bin=100)
    x_centers = x_axis.centers()

    bin_so4 = partmc.histogram_1d(dry_diameters, x_axis, weights = so4)
    bin_nh4 = partmc.histogram_1d(dry_diameters, x_axis, weights = nh4)
    bin_no3 = partmc.histogram_1d(dry_diameters, x_axis, weights = no3)
    
    print 'bin_so4 ', bin_so4[40]
    print 'bin_nh4 ', bin_nh4[40]
    print 'bin_no3 ', bin_no3[40]

    bin_ratio = (2*bin_so4 + bin_no3)/ bin_nh4
    np.isnan(bin_ratio) # checks which elements in c are NaN (produces array with True and False)
    bin_ratio[np.isnan(bin_ratio)] = 0 # replaces NaN with 0. useful for plotting
    print 'bin_ratio ', bin_ratio[40]

    diameter_bins = x_axis.find(dry_diameters)
    print 'diameter_bins ', diameter_bins
    is_40 = (diameter_bins == 40)
#    for i in range(len(dry_diameters)):
#        if diameter_bins[i] == 40:
#            print 'particle info', so4[i], nh4[i], no3[i], ion_ratio[i]
    so4_40 = so4[is_40]
    nh4_40 = nh4[is_40]
    no3_40 = no3[is_40]
    bc_40 = bc[is_40]
    oc_40 = oc[is_40]

    ion_ratio_40 = ion_ratio[is_40]
#    data = [(so4_40[i],nh4_40[i], no3_40[i], ion_ratio_40[i]) for i in range(len(so4_40)
    data = zip(so4_40, nh4_40, no3_40, bc_40, oc_40, ion_ratio_40)
    data.sort(key = lambda x: x[5])
    for (so,nh,no,bc,oc,ir) in data:
        print so,nh,no,bc,oc,ir

    print 'sums ', sum(so4[is_40]), sum(nh4[is_40]), sum(no3[is_40]), (2*sum(so4[is_40])+ sum(no3[is_40])) / sum(nh4[is_40])
    print 'sums/number ',  sum(so4[is_40])/len(so4_40), sum(nh4[is_40])/len(nh4_40), sum(no3[is_40])/len(no3_40)
    
    
    hist2d = partmc.histogram_2d(dry_diameters, ion_ratio, x_axis, y_axis, weights = 1/particles.comp_vols)

    plt.clf()
    plt.pcolor(x_axis.edges(), y_axis.edges(), hist2d.transpose(),norm = matplotlib.colors.LogNorm(), linewidths = 0.1)
    a = plt.gca()
    plt.semilogx(x_centers, bin_ratio, 'w-', linewidth = 3)
    plt.semilogx(x_centers, bin_ratio, 'k-', linewidth = 1)
    a.set_xscale("log")
    a.set_yscale("linear")
    plt.axis([x_axis.min, x_axis.max, y_axis.min, y_axis.max])
    plt.xlabel("dry diameter (m)")
    plt.ylabel("ion ratio")
    cbar = plt.colorbar()
    cbar.set_label("number density (m^{-3})")
    plt.title(title)
    fig = plt.gcf()
    fig.savefig(out_filename)
コード例 #19
0
def make_plot(dir_name, in_files, out_filename1, out_filename2):
    x_axis = partmc.log_grid(min=1e-9, max=1e-5, n_bin=70)
    y_axis = partmc.log_grid(min=1e-3, max=1e2, n_bin=50)
    x_centers = x_axis.centers()
    y_centers = y_axis.centers()
    counter = 0
    hist_array = np.zeros([len(x_centers), len(y_centers), config.i_loop_max])
    hist_average = np.zeros([len(x_centers), len(y_centers)])
    hist_std = np.zeros([len(x_centers), len(y_centers)])
    hist_std_norm = np.zeros([len(x_centers), len(y_centers)])

    for file in in_files:
        ncf = Scientific.IO.NetCDF.NetCDFFile(dir_name + file)
        particles = partmc.aero_particle_array_t(ncf)
        env_state = partmc.env_state_t(ncf)
        ncf.close()

        dry_diameters = particles.dry_diameters()
        s_crit = (particles.critical_rel_humids(env_state) - 1) * 100
        hist2d = partmc.histogram_2d(dry_diameters,
                                     s_crit,
                                     x_axis,
                                     y_axis,
                                     weights=particles.masses(include=["BC"]) /
                                     particles.comp_vols)
        hist_array[:, :, counter] = hist2d
        counter = counter + 1

    hist_average = np.average(hist_array, axis=2)
    hist_std = np.std(hist_array, axis=2)
    hist_std_norm = hist_std / hist_average
    hist_std_norm = np.ma.masked_invalid(hist_std_norm)

    print 'hist_array ', hist2d.shape, hist_array[35, :, 0]
    print 'hist_std ', hist_average[35, :], hist_std[35, :], hist_std_norm[
        35, :]

    plt.clf()
    plt.pcolor(x_axis.edges(),
               y_axis.edges(),
               hist_average.transpose(),
               norm=matplotlib.colors.LogNorm(vmin=1e-11, vmax=1e-7),
               linewidths=0.1)
    a = plt.gca()
    a.set_xscale("log")
    a.set_yscale("log")
    plt.grid()
    plt.axis([5e-9, 5e-6, y_axis.min, y_axis.max])
    plt.xlabel("dry diameter (m)")
    plt.ylabel("S_crit in %")
    cbar = plt.colorbar()
    cbar.set_label("mass density (kg m^{-3})")
    fig = plt.gcf()
    fig.savefig(out_filename1)

    plt.clf()
    plt.pcolor(x_axis.edges(),
               y_axis.edges(),
               hist_std_norm.transpose(),
               norm=matplotlib.colors.LogNorm(vmin=1e-2, vmax=10),
               linewidths=0.1)
    a = plt.gca()
    a.set_xscale("log")
    a.set_yscale("log")
    plt.grid()
    plt.axis([5e-9, 5e-6, y_axis.min, y_axis.max])
    plt.xlabel("dry diameter (m)")
    plt.ylabel("S_crit in %")
    cbar = plt.colorbar()
    cbar.set_label("std/avg")
    fig = plt.gcf()
    fig.savefig(out_filename2)
コード例 #20
0
def make_plot(dir_name, in_files, out_filename1, out_filename2):
    x_axis = partmc.log_grid(min=1e-9, max=1e-5, n_bin=70)
    y_axis = partmc.linear_grid(min=0, max=1., n_bin=50)
    x_centers = x_axis.centers()
    y_centers = y_axis.centers()
    counter = 0
    hist_array = np.zeros([len(x_centers), len(y_centers), config.i_loop_max])
    hist_average = np.zeros([len(x_centers), len(y_centers)])
    hist_std = np.zeros([len(x_centers), len(y_centers)])
    hist_std_norm = np.zeros([len(x_centers), len(y_centers)])

    for file in in_files:
        ncf = scipy.io.netcdf.netcdf_file(dir_name + file, 'r')
        particles = partmc.aero_particle_array_t(ncf)
        ncf.close()

        bc = particles.masses(include=["BC"])
        dry_mass = particles.masses(exclude=["H2O"])
        bc_frac = bc / dry_mass

        dry_diameters = particles.dry_diameters()

        hist2d = partmc.histogram_2d(dry_diameters,
                                     bc_frac,
                                     x_axis,
                                     y_axis,
                                     weights=1 / particles.comp_vols)
        hist_array[:, :, counter] = hist2d
        counter = counter + 1

    hist_average = np.average(hist_array, axis=2)
    hist_std = np.std(hist_array, axis=2)
    hist_std_norm = hist_std / hist_average
    hist_std_norm = np.ma.masked_invalid(hist_std_norm)

    print 'hist_std ', hist_average[35, :], hist_std[35, :], hist_std_norm[
        35, :]

    plt.clf()
    plt.pcolor(x_axis.edges(),
               y_axis.edges(),
               hist_average.transpose(),
               norm=matplotlib.colors.LogNorm(),
               linewidths=0.1)
    a = plt.gca()
    a.set_xscale("log")
    a.set_yscale("linear")
    plt.axis([5e-9, 5e-6, 0, 0.8])
    plt.xlabel("dry diameter (m)")
    plt.ylabel("BC mass fraction")
    plt.grid(True)
    plt.clim(1e8, 5e11)
    cbar = plt.colorbar()
    cbar.set_label("number density (m^{-3})")
    fig = plt.gcf()
    fig.savefig(out_filename1)

    plt.clf()
    plt.pcolor(x_axis.edges(),
               y_axis.edges(),
               hist_std_norm.transpose(),
               norm=matplotlib.colors.LogNorm(vmin=1e-1, vmax=10),
               linewidths=0.1)
    a = plt.gca()
    a.set_xscale("log")
    a.set_yscale("linear")
    plt.axis([5e-9, 5e-6, 0, 0.8])
    plt.xlabel("dry diameter (m)")
    plt.ylabel("BC mass fraction")
    plt.grid(True)
    cbar = plt.colorbar()
    cbar.set_label("CV")
    fig = plt.gcf()
    fig.savefig(out_filename2)
コード例 #21
0
def grid_box_histogram(time):

    # filename prefix
    dir = config.data_dir
    prefix = config.file_prefix
    filename =  '%s_%08i.nc' %(prefix,time)

    # make grids
    diam_axis = partmc.log_grid(min=1e-9,max=1e-6,n_bin=60)
    bc_axis = partmc.linear_grid(min=0,max=1.,n_bin=50)

    # load the file
    ncf = scipy.io.netcdf.netcdf_file(config.data_dir+'/'+filename, 'r')
    particles = partmc.aero_particle_array_t(ncf)
    ncf.close()

    # compute the values
    bc = particles.masses(include = ["BC"])
    dry_mass = particles.masses(exclude = ["H2O"])
    bc_frac = bc / dry_mass
    dry_diameters = particles.dry_diameters()

    # 2D histogram
    hist_2d_bc = partmc.histogram_2d(dry_diameters, bc_frac, diam_axis, bc_axis,
         weights = 1 / particles.comp_vols)
    # convert
    hist_2d_bc /= 1e6

    # create the figure
    width_in = 4.0 
    (figure, axes, cbar_axes) = mpl_helper.make_fig(figure_width=width_in,
        colorbar=True,left_margin=.7,right_margin=1.1, top_margin=0.3,
        bottom_margin=.65, colorbar_height_fraction=0.8)

    # Data min and max
    # we want this to be fixed for all time
    data_min = 10**2 #min(data_mins)
    data_max = 10**6 #max(data_maxes)

    norm = matplotlib.colors.LogNorm(vmin=data_min, vmax=data_max)
    p = axes.pcolormesh(diam_axis.edges()/1e-6, bc_axis.edges()*100, 
        hist_2d_bc.transpose(),norm = norm, linewidths = 0.1, edgecolors='None')

    # make the plot pretty
    axes.set_xscale('log')
    axes.set_yscale('linear')
    xlabel = r'diameter $(\mu \rm m)$'
    ylabel = r'BC mass fraction'
    axes.set_xlabel(xlabel)
    axes.set_ylabel(ylabel)
    axes.set_xlim(.005,1)
    axes.set_ylim(0,80)
    axes.set_yticks([0,20,40,60,80])
    axes.grid(True)

    # colorbar
    cbar = figure.colorbar(p, cax=cbar_axes,
                format=matplotlib.ticker.LogFormatterMathtext(),
                orientation='vertical')
    kwargs = {}
    kwargs["format"] = matplotlib.ticker.LogFormatterMathtext()
    cmappable = matplotlib.cm.ScalarMappable(norm=norm)
    cmappable.set_array(numpy.array([hist_2d_bc.min(), hist_2d_bc.max()]))
    cbar_label = r"num. conc. $(\rm cm^{-3})$"
    cbar.set_label(cbar_label)
    cbar.solids.set_edgecolor("face")

    # Save figure and print name
    fig_name = '%s/bc_plot_%08i.pdf' % \
         (config.fig_dir, time)
    figure.savefig(fig_name)

    # print name in case we need it
    print fig_name

    return
コード例 #22
0
axes.set_xscale("log")
axes.set_yscale("linear")
axes.set_ylim(0, 48)
axes.set_ylabel(r"per-particle aging time / h")
axes.set_xlabel(r"dry diameter at emission $D_{\rm dry}$ / $\rm \mu m$")
axes.grid(True)

mpl_helper.remove_fig_array_axes(axes_array)
figure.savefig("aging_kappa_wc_01_1.pdf")


# 2D Histogram plot
x_axis = partmc.log_grid(min=1e-3,max=1e1,n_bin=70)
y_axis = partmc.linear_grid(min=0,max=48,n_bin=48)

hist2d = partmc.histogram_2d(emit_diam[emit_morning], time_for_aging[emit_morning], x_axis, y_axis, weights = 1 / emit_comp_vols[emit_morning])

hist2d = hist2d * 1e-6
print hist2d[36,:]
(figure, axes_array, cbar_axes_array) = mpl_helper.make_fig_array(1,1, figure_width=5,
								  top_margin=1, bottom_margin=0.45,
								  left_margin=1.07, right_margin=0.65,
								  vert_sep=0.3, horiz_sep=0.3,
								  colorbar="shared", colorbar_location="top")

axes = axes_array[0][0]
cbar_axes = cbar_axes_array[0]
p = axes.pcolor(x_axis.edges(), y_axis.edges(), hist2d.transpose(), 
		norm = matplotlib.colors.LogNorm(vmin=1e2, vmax=1e4), linewidths = 0.1)
axes.set_xscale("log")
axes.set_yscale("linear")
コード例 #23
0
def make_plot(in_files, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10):
    x_axis = partmc.log_grid(min=1e-9, max=1e-5, n_bin=70)
    y_axis = partmc.log_grid(min=1e-3, max=1e2, n_bin=50)
    x_centers = x_axis.centers()
    y_centers = y_axis.centers()
    counter = 0
    hist_array_num = np.zeros(
        [len(x_centers), len(y_centers), config.i_loop_max])
    hist_average_num = np.zeros([len(x_centers), len(y_centers)])
    hist_std_num = np.zeros([len(x_centers), len(y_centers)])
    hist_std_norm_num = np.zeros([len(x_centers), len(y_centers)])

    hist_array_mass = np.zeros(
        [len(x_centers), len(y_centers), config.i_loop_max])
    hist_average_mass = np.zeros([len(x_centers), len(y_centers)])
    hist_std_mass = np.zeros([len(x_centers), len(y_centers)])
    hist_std_norm_mass = np.zeros([len(x_centers), len(y_centers)])

    hist_array_kappas = np.zeros(
        [len(x_centers), len(y_centers), config.i_loop_max])

    for file in in_files:
        ncf = scipy.io.netcdf.netcdf_file(config.netcdf_dir + '/' + file, 'r')
        particles = partmc.aero_particle_array_t(ncf)
        env_state = partmc.env_state_t(ncf)
        ncf.close()

        dry_diameters = particles.dry_diameters()
        kappas = particles.kappas()
        print 'kappa max and min', kappas.max(), kappas.min()

        kappa_const = np.ones([len(x_axis.edges())])
        kappa_const1 = 1 * kappa_const
        kappa_const2 = 0 * kappa_const
        print "kappa_const ", kappa_const1, len(kappa_const1), len(
            particles.dry_diameters())
        crit_rhs1 = (partmc.critical_rel_humids(env_state, kappa_const1,
                                                x_axis.edges()) - 1) * 100
        crit_rhs2 = (partmc.critical_rel_humids(env_state, kappa_const2,
                                                x_axis.edges()) - 1) * 100
        print "crit_rhs ", crit_rhs1, crit_rhs2

        s_crit = (particles.critical_rel_humids(env_state) - 1) * 100
        dry_mass = particles.masses(exclude=["H2O"])

        dry_diameters = particles.dry_diameters()
        hist2d = partmc.histogram_2d(dry_diameters,
                                     s_crit,
                                     x_axis,
                                     y_axis,
                                     weights=1 / particles.comp_vols)
        hist_array_num[:, :, counter] = hist2d
        hist2d = partmc.histogram_2d(dry_diameters,
                                     s_crit,
                                     x_axis,
                                     y_axis,
                                     weights=particles.masses(include=["BC"]) /
                                     particles.comp_vols)
        hist_array_mass[:, :, counter] = hist2d
        hist2d = partmc.histogram_2d(dry_diameters,
                                     kappas,
                                     x_axis,
                                     y_axis,
                                     weights=1 / particles.comp_vols)
        hist_array_kappas[:, :, counter] = hist2d
        counter = counter + 1

    hist_average_num = np.average(hist_array_num, axis=2)
    hist_std_num = np.std(hist_array_num, axis=2)
    hist_std_norm_num = hist_std_num / hist_average_num
    hist_std_norm_num = np.ma.masked_invalid(hist_std_norm_num)

    hist_average_mass = np.average(hist_array_mass, axis=2)
    hist_std_mass = np.std(hist_array_mass, axis=2)
    hist_std_norm_mass = hist_std_mass / hist_average_mass
    hist_std_norm_mass = np.ma.masked_invalid(hist_std_norm_mass)

    hist_average_kappas = np.average(hist_array_kappas, axis=2)
    hist_std_kappas = np.std(hist_array_kappas, axis=2)
    hist_std_norm_kappas = hist_std_kappas / hist_average_kappas
    hist_std_norm_kappas = np.ma.masked_invalid(hist_std_norm_kappas)

    np.savetxt(f1, x_axis.edges())
    np.savetxt(f2, y_axis.edges())
    np.savetxt(f3, hist_average_num)
    np.savetxt(f4, hist_std_norm_num)
    np.savetxt(f5, hist_average_mass)
    np.savetxt(f6, hist_std_norm_mass)
    np.savetxt(f7, hist_average_kappas)
    np.savetxt(f8, hist_std_norm_kappas)
    np.savetxt(f9, crit_rhs1)
    np.savetxt(f10, crit_rhs2)