示例#1
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)
示例#2
0
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)
示例#3
0
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)
    env_state = partmc.env_state_t(ncf)
    ncf.close()

    age = abs(particles.least_create_times / 3600. - time)
    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=140)
    y_axis = partmc.log_grid(min=1e-3,max=1e2,n_bin=100)

    vals2d = partmc.multival_2d(dry_diameters, s_crit, age, x_axis, y_axis)

    plt.clf()
    plt.pcolor(x_axis.edges(), y_axis.edges(), vals2d.transpose(), 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("S_crit (%)")
    cbar = plt.colorbar()
    cbar.set_label("age (h)")
    plt.title(title)
    fig = plt.gcf()
    fig.savefig(out_filename)
示例#4
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
    # hack to avoid landing just around the integer boundaries
    comp_frac *= (1.0 + 1e-12)
    h2o = particles.masses(include=["H2O"])

    x_axis = partmc.log_grid(min=diameter_axis_min,
                             max=diameter_axis_max,
                             n_bin=num_diameter_bins * 2)
    y_axis = partmc.linear_grid(min=bc_axis_min,
                                max=bc_axis_max,
                                n_bin=num_bc_bins * 2)

    value = partmc.multival_2d(diameters, comp_frac, h2o, x_axis, y_axis)
    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)
示例#5
0
def make_plot(in_dir, in_files, title, out_filename, error):
    x_axis = partmc.log_grid(min=1e-8, max=1e-5, n_bin=3)
    x_centers = x_axis.centers()
    counter = 0
    hist_array = np.zeros([len(x_centers), config.i_loop_max])
    error = np.zeros([3])
    for file in in_files:
        ncf = scipy.io.netcdf.netcdf_file(in_dir + file, 'r')
        particles = partmc.aero_particle_array_t(ncf)
        ncf.close()

        dry_diameters = particles.dry_diameters()
        hist = partmc.histogram_1d(dry_diameters,
                                   x_axis,
                                   weights=1 / particles.comp_vols)
        hist_array[:, counter] = hist
        counter = counter + 1
    plt.clf()
    for i_loop in range(0, config.i_loop_max):
        plt.loglog(x_axis.centers(), hist_array[:, i_loop], 'k')
        plt.errorbar(x_axis.centers(), np.average(hist_array, axis=1),
                     np.std(hist_array, axis=1))
        avg = np.average(hist_array, axis=1)
        std = np.std(hist_array, axis=1)
        error = std / avg
        print 'avg and std ', avg, std, error
    plt.axis([1e-8, 1e-5, 1e4, 1e11])
    plt.xlabel("dry diameter (m)")
    plt.ylabel("number density (m^{-3})")
    plt.title(title)
    fig = plt.gcf()
    fig.savefig(out_filename)
示例#6
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()

    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)
示例#7
0
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)
示例#8
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)
    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
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()
示例#10
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]

    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)
示例#11
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)
示例#12
0
def make_plot(in_dir, in_filename1, in_filename2, in_filename3, out_filename,
              title, ccn_cn_i, ccn_cn_j):
    print in_filename1, in_filename2, in_filename3
    ncf = scipy.io.netcdf.netcdf_file(in_dir + in_filename1, 'r')
    particles1 = partmc.aero_particle_array_t(ncf)
    ncf.close()
    ncf = scipy.io.netcdf.netcdf_file(in_dir + in_filename2, 'r')
    particles2 = partmc.aero_particle_array_t(ncf)
    ncf.close()
    ncf = scipy.io.netcdf.netcdf_file(in_dir + in_filename3, 'r')
    particles3 = partmc.aero_particle_array_t(ncf)
    ncf.close()

    x_axis = partmc.log_grid(min=1e-10, max=1e-4, n_bin=30)
    x_centers = x_axis.centers()

    wet_diameters1 = particles1.diameters()
    wet_diameters2 = particles2.diameters()
    wet_diameters3 = particles3.diameters()

    hist1 = partmc.histogram_1d(wet_diameters1,
                                x_axis,
                                weights=1 / particles1.comp_vols)
    hist2 = partmc.histogram_1d(wet_diameters2,
                                x_axis,
                                weights=1 / particles2.comp_vols)
    hist3 = partmc.histogram_1d(wet_diameters3,
                                x_axis,
                                weights=1 / particles3.comp_vols)

    is_activated = (wet_diameters3 > 2e-6)
    sum_tot = sum(1 / particles3.comp_vols) * 1e-6
    num_act = sum(1 / particles3.comp_vols[is_activated]) * 1e-6
    print title, num_act, sum_tot, num_act / sum_tot * 100

    ccn_cn_ratio[ccn_cn_i, ccn_cn_j] = num_act / sum_tot

    plt.clf()
    plt.semilogx(x_axis.centers(), hist1, label='0 min')
    plt.semilogx(x_axis.centers(), hist2, label='2 mins')
    plt.semilogx(x_axis.centers(), hist3, label='10 mins')
    plt.legend(loc='upper left')
    plt.xlabel("wet diameter (m)")
    plt.ylabel("number density (m^{-3})")
    plt.title(title)
    fig = plt.gcf()
    fig.savefig(out_filename)
示例#13
0
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

    so4 = particles.masses(include = ["SO4"])
    inorg = particles.masses(include = ["SO4", "NO3", "NH4"])
    inorg_frac = inorg / dry_mass 

    kappas = particles.kappas()
 
    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)

    vals = partmc.multival_2d(dry_diameters, bc_frac, kappas, x_axis, y_axis, rand_arrange=False)

    vals_pos = np.ma.masked_less_equal(vals, 0)
    vals_zero = np.ma.masked_not_equal(vals, 0)
    
    plt.clf()
    if vals_zero.count() > 0:
       plt.pcolor(x_axis.edges(), y_axis.edges(), vals_zero.transpose(), cmap=matplotlib.cm.gray, linewidths = 0.1)
    
    if vals_pos.count() > 0:
       plt.pcolor(x_axis.edges(), y_axis.edges(), vals_pos.transpose(), linewidths = 0.1)

    title = partmc.time_of_day_string(env_state)
    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 (\mu m)")
    plt.ylabel("BC dry mass fraction")
    cbar = plt.colorbar()
    plt.clim(0, 0.6)
    cbar.set_label("kappa")
    plt.title(title)
    fig = plt.gcf()
    fig.savefig(out_filename)
示例#14
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

    x_axis = partmc.log_grid(min=diameter_axis_min,
                             max=diameter_axis_max,
                             n_bin=num_diameter_bins)

    value = partmc.histogram_1d(diameters,
                                x_axis,
                                weights=1 / particles.comp_vols)
    value /= 1e6

    return (value, x_axis.centers())
示例#15
0
def make_plot(in_files, f1, f2, f3, f4, f5):
    x_axis = partmc.log_grid(min=1e-10, max=1e-4, n_bin=100)
    x_centers = x_axis.centers()
    counter = 0
    hist_array_num = np.zeros([len(x_centers), config.i_loop_max])
    hist_array_mass = np.zeros([len(x_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)
        ncf.close()

        dry_diameters = particles.dry_diameters()
        hist = partmc.histogram_1d(dry_diameters,
                                   x_axis,
                                   weights=1 / particles.comp_vols)
        hist_array_num[:, counter] = hist
        hist = partmc.histogram_1d(dry_diameters,
                                   x_axis,
                                   weights=particles.masses(exclude=["H2O"]) /
                                   particles.comp_vols)
        hist_array_mass[:, counter] = hist

        counter = counter + 1

    hist_array_gav_num = np.exp(np.average(np.log(hist_array_num), axis=1))
    hist_array_gstd_num = np.exp(np.std(np.log(hist_array_num), axis=1))
    e_bar_top_num = hist_array_gav_num * hist_array_gstd_num
    e_bar_bottom_num = hist_array_gav_num / hist_array_gstd_num
    e_bars_num = np.vstack((hist_array_gav_num - e_bar_bottom_num,
                            e_bar_top_num - hist_array_gav_num))

    hist_array_gav_mass = np.exp(np.average(np.log(hist_array_mass), axis=1))
    hist_array_gstd_mass = np.exp(np.std(np.log(hist_array_mass), axis=1))
    e_bar_top_mass = hist_array_gav_mass * hist_array_gstd_mass
    e_bar_bottom_mass = hist_array_gav_mass / hist_array_gstd_mass
    e_bars_mass = np.vstack((hist_array_gav_mass - e_bar_bottom_mass,
                             e_bar_top_mass - hist_array_gav_mass))

    np.savetxt(f1, x_axis.centers())
    np.savetxt(f2, hist_array_gav_num)
    np.savetxt(f3, e_bars_num)
    np.savetxt(f4, hist_array_gav_mass)
    np.savetxt(f5, e_bars_mass)
示例#16
0
def make_plot(in_dir, in_filename1, in_filename2, in_filename3, out_filename):
    print in_filename1, in_filename2, in_filename3
    ncf = scipy.io.netcdf.netcdf_file(in_dir + in_filename1, 'r')
    particles1 = partmc.aero_particle_array_t(ncf)
    ncf.close()
    ncf = scipy.io.netcdf.netcdf_file(in_dir + in_filename2, 'r')
    particles2 = partmc.aero_particle_array_t(ncf)
    ncf.close()
    ncf = scipy.io.netcdf.netcdf_file(in_dir + in_filename3, 'r')
    particles3 = partmc.aero_particle_array_t(ncf)
    ncf.close()

    x_axis = partmc.log_grid(min=1e-10, max=1e-4, n_bin=50)
    x_centers = x_axis.centers()

    dry_diameters1 = particles1.dry_diameters()
    dry_diameters2 = particles2.dry_diameters()
    dry_diameters3 = particles3.dry_diameters()

    hist1 = partmc.histogram_1d(dry_diameters1,
                                x_axis,
                                weights=particles1.masses(exclude=["H2O"]) /
                                particles1.comp_vols)
    hist2 = partmc.histogram_1d(dry_diameters2,
                                x_axis,
                                weights=particles2.masses(exclude=["H2O"]) /
                                particles2.comp_vols)
    hist3 = partmc.histogram_1d(dry_diameters3,
                                x_axis,
                                weights=particles3.masses(exclude=["H2O"]) /
                                particles3.comp_vols)

    plt.clf()
    plt.loglog(x_axis.centers(), hist1, label='initial')
    plt.loglog(x_axis.centers(), hist2, label='6 hours')
    plt.loglog(x_axis.centers(), hist3, label='12 hours')
    plt.legend(loc='center right')
    plt.axis([5e-9, 1e-4, 1e-14, 1e-7])
    plt.grid(True)
    plt.xlabel("dry diameter (m)")
    plt.ylabel(r"mass concentration ($\rm kg \, m^{-3}$)")
    fig = plt.gcf()
    fig.savefig(out_filename)
示例#17
0
def make_plot(in_dir, in_files, title, out_filename):
    x_axis = partmc.log_grid(min=1e-10,max=1e-4,n_bin=100)
    x_centers = x_axis.centers()
    counter = 0
    hist_array = np.zeros([len(x_centers),config.i_loop_max])
    for file in in_files:
        ncf = scipy.io.netcdf.netcdf_file(in_dir+file, 'r')
        particles = partmc.aero_particle_array_t(ncf)
        ncf.close() 

        dry_diameters = particles.dry_diameters()
        hist = partmc.histogram_1d(dry_diameters, x_axis, weights = 1 / particles.comp_vols)
        hist_array[:,counter] = hist
        counter = counter+1
#    hist_array_av = np.average(hist_array,axis = 1)
#    hist_array_std = np.std(hist_array, axis = 1)
#    hist_array_std_clipped = np.minimum(hist_array_std, hist_array_av - 1)
#    e_bars = np.vstack((hist_array_std_clipped, hist_array_std))

    hist_array_gav = np.exp(np.average(np.log(hist_array),axis = 1))
    hist_array_gstd = np.exp(np.std(np.log(hist_array), axis = 1))
    e_bar_top = hist_array_gav * hist_array_gstd 
    e_bar_bottom = hist_array_gav / hist_array_gstd
    e_bars = np.vstack((hist_array_gav - e_bar_bottom, e_bar_top - hist_array_gav))


    plt.clf()
#    for i_loop in range(0,config.i_loop_max):
#        plt.loglog(x_axis.centers(), hist_array[:,i_loop], 'k')
    a = plt.gca() # gets the axis
    a.set_xscale("log") # x axis log
    a.set_yscale("log") # y axis log
    plt.errorbar(x_axis.centers(), hist_array_gav, e_bars)
    plt.axis([5e-9, 5e-6, 1e4, 1e11])
    plt.xlabel("dry diameter (m)")
    plt.ylabel("number density (m^{-3})")
#    plt.title(title)
    plt.grid(True)
    fig = plt.gcf()
    fig.savefig(out_filename)
示例#18
0
def make_plot(in_dir, in_filename, out_filename, out_data_name):
    print in_filename
    ncf = scipy.io.netcdf.netcdf_file(in_dir+in_filename, 'r')
    particles = partmc.aero_particle_array_t(ncf)
    ncf.close()

    x_axis = partmc.log_grid(min=1e-9,max=1e-5,n_bin=100)
    x_centers = x_axis.centers() 

    diameters = particles.diameters()

    pure_bc = ((particles.masses(include = ["BC"]) > 0) & (particles.masses(include = ["SO4"]) == 0))
    pure_so4 =  ((particles.masses(include = ["SO4"]) > 0) & (particles.masses(include = ["BC"]) == 0))
    with_bc = (particles.masses(include = ["BC"]) > 0)
    with_so4 = (particles.masses(include = ["SO4"]) > 0)
    mixed_bc_so4 = ((particles.masses(include = ["SO4"]) > 0) &  (particles.masses(include = ["BC"]) > 0))

    hist = partmc.histogram_1d(diameters, x_axis, weights = 1 / particles.comp_vols) / 1e6
    hist_bc = partmc.histogram_1d(diameters[pure_bc], x_axis, weights = 1 / particles.comp_vols[pure_bc]) /1e6
    hist_so4 = partmc.histogram_1d(diameters[pure_so4], x_axis, weights = 1 / particles.comp_vols[pure_so4]) /1e6
    hist_mixed = partmc.histogram_1d(diameters[mixed_bc_so4], x_axis, weights = 1 / particles.comp_vols[mixed_bc_so4]) / 1e6

    plt.clf()
    plt.loglog(x_centers*1e6, hist,  'r-', label = 'total')
    plt.loglog(x_centers*1e6, hist_bc,  'k-', label = 'pure bc')
    plt.loglog(x_centers*1e6, hist_so4,  'b-', label = 'pure so4')
    plt.loglog(x_centers*1e6, hist_mixed,  'g-', label = 'mixed so4 and bc')
    plt.axis([1e-3, 2e-0, 1e-1, 1e4])
    plt.xlabel("dry diameter / micrometer")
    plt.ylabel("number density / cm^{-3}")
    plt.legend(loc = "upper left")
    plt.grid(True)
    fig = plt.gcf()
    fig.savefig(out_filename)
    np.savetxt("diameter_values.txt", x_centers*1e6)
    np.savetxt(out_data_name+"_total_acc_bc1.txt", hist)
    np.savetxt(out_data_name+"_bc_acc_bc1.txt", hist_bc)
    np.savetxt(out_data_name+"_so4_acc_bc1.txt", hist_so4)
    np.savetxt(out_data_name+"_mixed_acc_bc1.txt", hist_mixed)
示例#19
0
def make_plot(in_dir, in_filename, out_filename):
    print in_filename
    ncf = scipy.io.netcdf.netcdf_file(in_dir + in_filename, 'r')
    particles = partmc.aero_particle_array_t(ncf)
    ncf.close()

    x_axis = partmc.log_grid(min=1e-10, max=1e-4, n_bin=100)
    x_centers = x_axis.centers()

    dry_diameters = particles.dry_diameters()

    hist = partmc.histogram_1d(dry_diameters,
                               x_axis,
                               weights=1 / particles.comp_vols)

    plt.clf()
    plt.loglog(x_axis.centers(), hist)
    plt.axis([1e-10, 1e-4, 1e7, 1e15])
    plt.xlabel("dry diameter (m)")
    plt.ylabel("number density (m^{-3})")
    fig = plt.gcf()
    fig.savefig(out_filename)
示例#20
0
def get_plot_data(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
    # hack to avoid landing just around the integer boundaries
    comp_frac *= (1.0 + 1e-12)
    h2o = particles.masses(include=["H2O"]) * 1e18  # kg to fg

    x_axis = partmc.log_grid(min=diameter_axis_min,
                             max=diameter_axis_max,
                             n_bin=num_diameter_bins * 2)
    y_axis = partmc.linear_grid(min=bc_axis_min,
                                max=bc_axis_max,
                                n_bin=num_bc_bins * 2)

    value = partmc.multival_2d(diameters, comp_frac, h2o, x_axis, y_axis)

    return (value, x_axis.edges(), y_axis.edges(), env_state)
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)
示例#22
0
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)
示例#23
0
    if particle_set[id].aging_time != -1:
        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 > 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],
示例#24
0
import numpy as np
import matplotlib
matplotlib.use("PDF")
import matplotlib.pyplot as plt
sys.path.append("../../tool")
import partmc

netcdf_dir = "../../scenarios/4_nucleate/out_wei-0_lowbg2/"
netcdf_pattern = "nucleate_wc_0001_(.*).nc"

time_filename_list = partmc.get_time_filename_list(netcdf_dir, netcdf_pattern)

size_dist_array = np.zeros([len(time_filename_list), 100])
times = np.zeros([len(time_filename_list)])
i_counter = 0
diam_axis = partmc.log_grid(min=1e-4, max=1e0, n_bin=100)
diam_axis_edges = diam_axis.edges()

for [time, filename, key] in time_filename_list:
    print time, filename, key
    ncf = scipy.io.netcdf.netcdf_file(filename, 'r')
    particles = partmc.aero_particle_array_t(ncf)
    ncf.close()

    dry_diameters = particles.dry_diameters() * 1e6  # in micrometers
    hist = partmc.histogram_1d(dry_diameters,
                               diam_axis,
                               weights=1 / particles.comp_vols)
    size_dist_array[i_counter, :] = hist / 1e6  # in cm^{-3}
    times[i_counter] = time
    i_counter += 1
示例#25
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=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)
示例#26
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)
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
示例#28
0
import numpy as np
import matplotlib
matplotlib.use("PDF")
import matplotlib.pyplot as plt
sys.path.append("../../tool")
import partmc

netcdf_dir = "../../scenarios/4_nucleate/out/"

netcdf_pattern = "urban_plume_wc_0001_(.*).nc"
time_filename_list = partmc.get_time_filename_list(netcdf_dir, netcdf_pattern)

dist_array = np.zeros([len(time_filename_list), 100])
times = np.zeros([len(time_filename_list)])
i_counter = 0
diam_axis = partmc.log_grid(min=1e-10, max=1e-6, n_bin=100)
diam_axis_edges = diam_axis.edges()

for [time, filename, key] in time_filename_list:
    print time, filename, key
    ncf = scipy.io.netcdf.netcdf_file(filename, 'r')
    particles = partmc.aero_particle_array_t(ncf)
    ncf.close()

    dry_diameters = particles.dry_diameters()
    hist = partmc.histogram_1d(dry_diameters,
                               diam_axis,
                               weights=particles.masses(include=["SO4"]) /
                               particles.comp_vols)
    dist_array[i_counter, :] = hist
    times[i_counter] = time
示例#29
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)
示例#30
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)
示例#31
0
# Licensed under the GNU General Public License version 2 or (at your
# option) any later version. See the file COPYING for details.

import os, sys, math
import numpy as np
import scipy.io
sys.path.append("../../tool")
import partmc
import config
import config_filelist

data_base_dir = "data"
data_type = "diam_num"

x_axis = partmc.log_grid(min=config.diameter_axis_min,
                         max=config.diameter_axis_max,
                         n_bin=config.num_diameter_bins)


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

        value = partmc.histogram_1d(dry_diameters,
                                    x_axis,
示例#32
0
def make_plot(filename_in_080, filename_in_100, filename_in_130,
              filename_in_150, dir_cloud, in_file_pattern):

    ## calculate critical supersaturation for each particle
    print filename_in_100

    ncf = scipy.io.netcdf.netcdf_file(filename_in_080, 'r')
    particles = partmc.aero_particle_array_t(ncf)
    particles.sort_by_id()
    env_state_080s = partmc.env_state_t(ncf)
    ncf.close()

    ncf = scipy.io.netcdf.netcdf_file(filename_in_100, 'r')
    particles = partmc.aero_particle_array_t(ncf)
    particles.sort_by_id()
    env_state_100s = partmc.env_state_t(ncf)
    ncf.close()

    dry_diameters = particles.dry_diameters()

    ncf = scipy.io.netcdf.netcdf_file(filename_in_130, 'r')
    particles = partmc.aero_particle_array_t(ncf)
    particles.sort_by_id()
    env_state_130s = partmc.env_state_t(ncf)
    ncf.close()

    ncf = scipy.io.netcdf.netcdf_file(filename_in_150, 'r')
    particles = partmc.aero_particle_array_t(ncf)
    particles.sort_by_id()
    env_state_150s = partmc.env_state_t(ncf)
    ncf.close()

    dry_diameters = particles.dry_diameters()

    ## calculate time series for RH and maximum RH that occurs
    print dir_cloud, in_file_pattern
    env_state_history = partmc.read_history(partmc.env_state_t, dir_cloud,
                                            in_file_pattern)
    env_state_init = env_state_history[0][1]
    time = [env_state_history[i][0] for i in range(len(env_state_history))]
    rh = [
        env_state_history[i][1].relative_humidity
        for i in range(len(env_state_history))
    ]
    temp = [
        env_state_history[i][1].temperature
        for i in range(len(env_state_history))
    ]

    maximum_ss = (max(rh) - 1) * 100.
    print 'maximum ss ', maximum_ss
    rh_final = rh[-1]

    ## calculate time series for each particle
    print dir_cloud, in_file_pattern
    time_filename_list = partmc.get_time_filename_list(dir_cloud,
                                                       in_file_pattern)
    rh_c = np.zeros((len(dry_diameters), len(time_filename_list)))
    rh_c_final = np.zeros(len(dry_diameters))
    d_c = np.zeros((len(dry_diameters), len(time_filename_list)))
    d = np.zeros((len(dry_diameters), len(time_filename_list)))
    rh_eq = np.zeros((len(dry_diameters), len(time_filename_list)))

    kappas = np.zeros((len(dry_diameters), len(time_filename_list)))
    dry_diam = np.zeros((len(dry_diameters), len(time_filename_list)))
    ids = np.zeros((len(dry_diameters), len(time_filename_list)), dtype=int)
    seconds = np.zeros(len(time_filename_list))
    i_count = 0

    for [time, filename, key] in time_filename_list:
        print time, filename, key
        ncf = scipy.io.netcdf.netcdf_file(filename, 'r')
        particles = partmc.aero_particle_array_t(ncf)
        particles.sort_by_id()
        env_state = partmc.env_state_t(ncf)
        ncf.close()
        rh_c[:, i_count] = particles.critical_rel_humids(env_state)
        d_c[:, i_count] = particles.critical_diameters(env_state)
        d[:, i_count] = particles.diameters()
        rh_eq[:, i_count] = particles.equilib_rel_humids(env_state)
        kappas[:, i_count] = particles.kappas()
        dry_diam[:, i_count] = particles.dry_diameters()

        ids[:, i_count] = particles.ids
        seconds[i_count] = i_count
        i_count = i_count + 1

    d_max = d.max(axis=1)
    rh_c_final = rh_c[:, -1]
    d_final = d[:, -1]
    d_c_final = d_c[:, -1]

    ## find the particles in the four categories
    ## 1. particles that do not activate

    not_activate = np.logical_and(np.all(rh < rh_c, axis=1),
                                  np.all(d < d_c, axis=1))

    id_list_not_activate = particles.ids[not_activate]
    print "id_list_not_activate ", id_list_not_activate
    plot_id = id_list_not_activate[0]
    plot_index = partmc.find_nearest_index(particles.ids, plot_id)
    diam_not_activate = d[plot_index, :]
    rh_eq_not_activate = rh_eq[plot_index, :]
    ids_not_activate = ids[plot_index, :]
    rh_c_not_activate = rh_c[plot_index, :]
    d_c_not_activate = d_c[plot_index, :]

    dry_diam_not_activate = dry_diam[plot_index, 0]
    kappa_not_activate = kappas[plot_index, 0]
    wet_diameters_not_activate = partmc.log_grid(
        min=1.1 * dry_diam_not_activate,
        max=100 * dry_diam_not_activate,
        n_bin=100).edges()

    equilib_rhs_not_activate_grid_080 = partmc.equilib_rel_humids(
        env_state_080s, kappa_not_activate, dry_diam_not_activate,
        wet_diameters_not_activate)
    equilib_rhs_not_activate_grid_100 = partmc.equilib_rel_humids(
        env_state_100s, kappa_not_activate, dry_diam_not_activate,
        wet_diameters_not_activate)
    equilib_rhs_not_activate_grid_130 = partmc.equilib_rel_humids(
        env_state_130s, kappa_not_activate, dry_diam_not_activate,
        wet_diameters_not_activate)
    equilib_rhs_not_activate_grid_150 = partmc.equilib_rel_humids(
        env_state_150s, kappa_not_activate, dry_diam_not_activate,
        wet_diameters_not_activate)

    ## 2. evaporation type

    evaporation = np.logical_and(
        np.logical_and(np.any(rh > rh_c, axis=1), np.all(d < d_c, axis=1)),
        (rh_final < rh_c_final))

    id_list_evaporation = particles.ids[evaporation]
    print "id_list_evaporation ", id_list_evaporation

    #    plot_id = id_list_evaporation[0]
    rh_c_init = rh_c[:, 0]
    rh_c_init_evaporation = np.ma.masked_where(np.logical_not(evaporation),
                                               rh_c_init)
    plot_index = rh_c_init_evaporation.argmin()

    #    plot_index = partmc.find_nearest_index(particles.ids, plot_id)
    diam_evaporation = d[plot_index, :]
    ids_evaporation = ids[plot_index, :]
    rh_eq_evaporation = rh_eq[plot_index, :]
    rh_c_evaporation = rh_c[plot_index, :]
    d_c_evaporation = d_c[plot_index, :]

    dry_diam_evaporation = dry_diam[plot_index, 0]
    kappa_evaporation = kappas[plot_index, 0]
    wet_diameters_evaporation = partmc.log_grid(min=1.1 * dry_diam_evaporation,
                                                max=100 * dry_diam_evaporation,
                                                n_bin=100).edges()

    equilib_rhs_evaporation_grid_080 = partmc.equilib_rel_humids(
        env_state_080s, kappa_evaporation, dry_diam_evaporation,
        wet_diameters_evaporation)
    equilib_rhs_evaporation_grid_100 = partmc.equilib_rel_humids(
        env_state_100s, kappa_evaporation, dry_diam_evaporation,
        wet_diameters_evaporation)
    equilib_rhs_evaporation_grid_130 = partmc.equilib_rel_humids(
        env_state_130s, kappa_evaporation, dry_diam_evaporation,
        wet_diameters_evaporation)
    equilib_rhs_evaporation_grid_150 = partmc.equilib_rel_humids(
        env_state_150s, kappa_evaporation, dry_diam_evaporation,
        wet_diameters_evaporation)

    ## 3. deactivation type

    deactivation = np.logical_and(
        np.logical_and(np.any(rh > rh_c, axis=1), np.any(d > d_c, axis=1)),
        (d_final < d_c_final))

    id_list_deactivation = particles.ids[deactivation]
    print "id_list_deactivation ", id_list_deactivation

    #    plot_id = id_list_deactivation[0]

    rh_c_init = rh_c[:, 0]
    rh_c_init_deactivation = np.ma.masked_where(np.logical_not(deactivation),
                                                rh_c_init)
    plot_index = rh_c_init_deactivation.argmin()

    #    plot_index = partmc.find_nearest_index(particles.ids, plot_id)
    diam_deactivation = d[plot_index, :]
    ids_deactivation = ids[plot_index, :]
    rh_eq_deactivation = rh_eq[plot_index, :]
    rh_c_deactivation = rh_c[plot_index, :]
    d_c_deactivation = d_c[plot_index, :]

    dry_diam_deactivation = dry_diam[plot_index, 0]
    kappa_deactivation = kappas[plot_index, 0]
    wet_diameters_deactivation = partmc.log_grid(
        min=1.1 * dry_diam_deactivation,
        max=100 * dry_diam_deactivation,
        n_bin=100).edges()

    equilib_rhs_deactivation_grid_080 = partmc.equilib_rel_humids(
        env_state_080s, kappa_deactivation, dry_diam_deactivation,
        wet_diameters_deactivation)
    equilib_rhs_deactivation_grid_100 = partmc.equilib_rel_humids(
        env_state_100s, kappa_deactivation, dry_diam_deactivation,
        wet_diameters_deactivation)
    equilib_rhs_deactivation_grid_130 = partmc.equilib_rel_humids(
        env_state_130s, kappa_deactivation, dry_diam_deactivation,
        wet_diameters_deactivation)
    equilib_rhs_deactivation_grid_150 = partmc.equilib_rel_humids(
        env_state_150s, kappa_deactivation, dry_diam_deactivation,
        wet_diameters_deactivation)

    ## 4. inertial type

    inertial = np.logical_and(
        np.logical_and(np.any(rh > rh_c, axis=1), np.all(d < d_c, axis=1)),
        (rh_final > rh_c_final))

    id_list_inertial = particles.ids[inertial]
    print "id_list_inertial ", id_list_inertial

    plot_id = id_list_inertial[0]
    plot_index = partmc.find_nearest_index(particles.ids, plot_id)
    diam_inertial = d[plot_index, :]
    ids_inertial = ids[plot_index, :]
    rh_eq_inertial = rh_eq[plot_index, :]
    rh_c_inertial = rh_c[plot_index, :]
    d_c_inertial = d_c[plot_index, :]

    dry_diam_inertial = dry_diam[plot_index, 0]
    kappa_inertial = kappas[plot_index, 0]
    wet_diameters_inertial = partmc.log_grid(min=1.1 * dry_diam_inertial,
                                             max=100 * dry_diam_inertial,
                                             n_bin=100).edges()

    equilib_rhs_inertial_grid_080 = partmc.equilib_rel_humids(
        env_state_080s, kappa_inertial, dry_diam_inertial,
        wet_diameters_inertial)
    equilib_rhs_inertial_grid_100 = partmc.equilib_rel_humids(
        env_state_100s, kappa_inertial, dry_diam_inertial,
        wet_diameters_inertial)
    equilib_rhs_inertial_grid_130 = partmc.equilib_rel_humids(
        env_state_130s, kappa_inertial, dry_diam_inertial,
        wet_diameters_inertial)
    equilib_rhs_inertial_grid_150 = partmc.equilib_rel_humids(
        env_state_150s, kappa_inertial, dry_diam_inertial,
        wet_diameters_inertial)

    np.savetxt("seconds.txt", seconds)
    np.savetxt("rh.txt", rh)

    np.savetxt("diam_not_activate.txt", diam_not_activate)
    np.savetxt("diam_evaporation.txt", diam_evaporation)
    np.savetxt("diam_deactivation.txt", diam_deactivation)
    np.savetxt("diam_inertial.txt", diam_inertial)

    np.savetxt("rh_eq_not_activate.txt", rh_eq_not_activate)
    np.savetxt("rh_eq_evaporation.txt", rh_eq_evaporation)
    np.savetxt("rh_eq_deactivation.txt", rh_eq_deactivation)
    np.savetxt("rh_eq_inertial.txt", rh_eq_inertial)

    np.savetxt("ids_not_activate.txt", ids_not_activate)
    np.savetxt("ids_evaporation.txt", ids_evaporation)
    np.savetxt("ids_deactivation.txt", ids_deactivation)
    np.savetxt("ids_inertial.txt", ids_inertial)

    np.savetxt("rh_c_not_activate.txt", rh_c_not_activate)
    np.savetxt("rh_c_evaporation.txt", rh_c_evaporation)
    np.savetxt("rh_c_deactivation.txt", rh_c_deactivation)
    np.savetxt("rh_c_inertial.txt", rh_c_inertial)

    np.savetxt("d_c_not_activate.txt", d_c_not_activate)
    np.savetxt("d_c_evaporation.txt", d_c_evaporation)
    np.savetxt("d_c_deactivation.txt", d_c_deactivation)
    np.savetxt("d_c_inertial.txt", d_c_inertial)

    np.savetxt("wet_diameters_not_activate.txt", wet_diameters_not_activate)
    np.savetxt("wet_diameters_evaporation.txt", wet_diameters_evaporation)
    np.savetxt("wet_diameters_deactivation.txt", wet_diameters_deactivation)
    np.savetxt("wet_diameters_inertial.txt", wet_diameters_inertial)

    np.savetxt("equilib_rhs_not_activate_grid_080.txt",
               equilib_rhs_not_activate_grid_080)
    np.savetxt("equilib_rhs_evaporation_grid_080.txt",
               equilib_rhs_evaporation_grid_080)
    np.savetxt("equilib_rhs_deactivation_grid_080.txt",
               equilib_rhs_deactivation_grid_080)
    np.savetxt("equilib_rhs_inertial_grid_080.txt",
               equilib_rhs_inertial_grid_080)

    np.savetxt("equilib_rhs_not_activate_grid_100.txt",
               equilib_rhs_not_activate_grid_100)
    np.savetxt("equilib_rhs_evaporation_grid_100.txt",
               equilib_rhs_evaporation_grid_100)
    np.savetxt("equilib_rhs_deactivation_grid_100.txt",
               equilib_rhs_deactivation_grid_100)
    np.savetxt("equilib_rhs_inertial_grid_100.txt",
               equilib_rhs_inertial_grid_100)

    np.savetxt("equilib_rhs_not_activate_grid_130.txt",
               equilib_rhs_not_activate_grid_130)
    np.savetxt("equilib_rhs_evaporation_grid_130.txt",
               equilib_rhs_evaporation_grid_130)
    np.savetxt("equilib_rhs_deactivation_grid_130.txt",
               equilib_rhs_deactivation_grid_130)
    np.savetxt("equilib_rhs_inertial_grid_130.txt",
               equilib_rhs_inertial_grid_130)

    np.savetxt("equilib_rhs_not_activate_grid_150.txt",
               equilib_rhs_not_activate_grid_150)
    np.savetxt("equilib_rhs_evaporation_grid_150.txt",
               equilib_rhs_evaporation_grid_150)
    np.savetxt("equilib_rhs_deactivation_grid_150.txt",
               equilib_rhs_deactivation_grid_150)
    np.savetxt("equilib_rhs_inertial_grid_150.txt",
               equilib_rhs_inertial_grid_150)