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)
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())
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())
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)
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)
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)
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)
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)
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)
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()
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)
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])
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)
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)
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)
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,
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)
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 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)
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)
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
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")
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)