def process_irrad_calibration(folder, path_to, calibration_image_size_px, calibration_image_size_um, camera_px_length, window, deg, repetitions, mode, factor, meas_pow_bfp, start_notch, end_notch, start_power, end_power, start_spr, lower_londa, upper_londa, exp_time_fast, w0): # plot limits y_min_spec_cal = 8000 y_max_spec_cal = 238000 NP = folder.split('Spectrum_')[-1] save_folder = os.path.join(path_to, NP) common_path = os.path.join(path_to, 'common_plots') if not os.path.exists(save_folder): os.makedirs(save_folder) list_of_files = os.listdir(folder) wavelength_filename = [ f for f in list_of_files if re.search('wavelength', f) ] list_of_files.sort() list_of_files = [f for f in list_of_files if not os.path.isdir(folder + f)] list_of_files = [f for f in list_of_files if ((not os.path.isdir(folder+f)) \ and (re.search('_i\d\d\d\d_j\d\d\d\d.txt',f)))] L = len(list_of_files) data_spectrum = [] name_spectrum = [] specs = [] print(L, 'calibration spectra were acquired.') for k in range(L): name = os.path.join(folder, list_of_files[k]) data_spectrum = np.loadtxt(name) name_spectrum.append(list_of_files[k]) specs.append(data_spectrum) wavelength_filepath = os.path.join(folder, wavelength_filename[0]) londa = np.loadtxt(wavelength_filepath) start_notch = closer(londa, start_notch) end_notch = closer(londa, end_notch) start_power = closer(londa, start_power) end_power = closer(londa, end_power) lower_londa_index = closer(londa, lower_londa) upper_londa_index = closer(londa, upper_londa) # ALLOCATING line_spec_raw = np.zeros((calibration_image_size_px, camera_px_length)) line_spec_smooth = np.zeros((calibration_image_size_px, camera_px_length)) line_spec = np.zeros((calibration_image_size_px, camera_px_length)) for i in range(calibration_image_size_px): line_spec_raw[i, :] = np.array(specs[i]) del specs ######################## SMOOTH ############################ ######################## SMOOTH ############################ ######################## SMOOTH ############################ # SPLIT SIGNALS INTO STOKES AND ANTI-STOKES, longer range for smoothing line_stokes_raw = line_spec_raw[:, end_notch:] londa_stokes = londa[end_notch:] line_antistokes_raw = line_spec_raw[:, :start_notch] londa_antistokes = londa[:start_notch] # SMOOTHING print('Smoothing signals...') aux_line_stokes_smooth = sig.savgol_filter(line_stokes_raw, window, deg, axis=1, mode=mode) aux_line_antistokes_smooth = sig.savgol_filter(line_antistokes_raw, window, deg, axis=1, mode=mode) for i in range(repetitions - 1): aux_line_stokes_smooth = sig.savgol_filter(aux_line_stokes_smooth, window, deg, axis=1, mode=mode) aux_line_antistokes_smooth = sig.savgol_filter( aux_line_antistokes_smooth, window, deg, axis=1, mode=mode) # Merge line_stokes_smooth = aux_line_stokes_smooth line_antistokes_smooth = aux_line_antistokes_smooth line_spec_smooth[:, end_notch:] = line_stokes_smooth line_spec_smooth[:, :start_notch] = line_antistokes_smooth print('Saving single plots of the calibration spectra as measured...') for i in range(calibration_image_size_px): plt.figure() pixel_name = 'i%02d_j00' % (i) plt.plot(londa, line_spec_raw[i, :], color='C0', linestyle='-', label='As measured') plt.plot(londa_stokes, line_stokes_smooth[i, :], color='k', linestyle='-', label='Smoothed') plt.plot(londa_antistokes, line_antistokes_smooth[i, :], color='k', linestyle='-') plt.legend() ax = plt.gca() ax.set_xlabel(r'Wavelength (nm)') ax.set_ylabel('Intensity (a.u.)') ax.axvline(londa[lower_londa_index], ymin=0, ymax=1, color='k', linestyle='--') ax.axvline(londa[upper_londa_index], ymin=0, ymax=1, color='k', linestyle='--') ax.axvline(londa[start_notch], ymin=0, ymax=1, color='k', linestyle='--') ax.axvline(londa[end_notch], ymin=0, ymax=1, color='k', linestyle='--') ax.axvline(londa[start_power], ymin=0, ymax=1, color='k', linestyle='--') ax.axvline(londa[end_power], ymin=0, ymax=1, color='k', linestyle='--') aux_folder = manage_save_directory(save_folder, 'calibration_spectra_as_measured') figure_name = os.path.join( aux_folder, 'calibration_spec_%s_%s.png' % (pixel_name, NP)) ax.set_ylim([y_min_spec_cal, y_max_spec_cal]) plt.savefig(figure_name) plt.close() ######################## KILL NOTCH RANGE ############################ ######################## KILL NOTCH RANGE ############################ ######################## KILL NOTCH RANGE ############################ line_spec_smooth[:, start_notch:end_notch] = np.nan ######################## FIND BKG AND MAX ############################ ######################## FIND BKG AND MAX ############################ ######################## FIND BKG AND MAX ############################ # LOOK FOR MAX AND MIN IN STOKES RANGE line_stokes_smooth = line_spec_smooth[:, start_power:end_power] aux_sum = np.sum(line_stokes_smooth, axis=1) print('Finding max and bkg (min) spectra of the calibration...') imin = np.argmin(aux_sum) bkg_smooth = line_spec_smooth[imin, :] bkg_raw = line_spec_raw[imin, :] noise_rms = np.sqrt(np.nansum(bkg_raw**2) / len(bkg_raw)) imax = np.argmax(aux_sum) max_smooth = line_spec_smooth[imax, :] max_raw = line_spec_raw[imax, :] signal_rms = np.sqrt(np.nansum(max_smooth**2) / len(max_smooth)) signal_to_background_ratio = (signal_rms / noise_rms)**2 print('Signal RMS (max) to bkg RMS (min) ratio:', signal_to_background_ratio) # BACKGROUND SPECTRUM plt.figure() plt.plot(londa, bkg_raw) plt.plot(londa, bkg_smooth, '-k') ax = plt.gca() ax.set_xlabel(r'Wavelength (nm)') ax.set_ylabel('Intensity (a.u.)') ax.set_ylim([y_min_spec_cal, y_max_spec_cal]) ax.axvline(londa[start_notch], ymin=0, ymax=1, color='k', linestyle='--') ax.axvline(londa[end_notch], ymin=0, ymax=1, color='k', linestyle='--') ax.axvline(londa[start_power], ymin=0, ymax=1, color='k', linestyle='--') ax.axvline(londa[end_power], ymin=0, ymax=1, color='k', linestyle='--') figure_name = os.path.join(save_folder, 'calibration_bkg_%s.png' % NP) plt.savefig(figure_name) aux_folder = manage_save_directory(common_path, 'calibration/bkg') figure_name = os.path.join(aux_folder, 'calibration_bkg_%s.png' % NP) plt.savefig(figure_name) plt.close() # MAX SPECTRUM plt.figure() plt.plot(londa, (max_raw - y_min_spec_cal) / 10000, label='Raw') plt.plot(londa, (max_smooth - y_min_spec_cal) / 10000, '-k', label='Smooth') ax = plt.gca() ax.legend(loc='upper left', prop={'size': 13}) ax.set_xlabel(r'Wavelength (nm)', fontsize=20) ax.set_ylabel('Photoluminescence (a.u.)', fontsize=20) ax.tick_params(axis='both', which='major', labelsize=18) # ax.set_ylim([y_min_spec_cal, y_max_spec_cal]) ax.set_ylim([0, (y_max_spec_cal - y_min_spec_cal) / 10000]) ax.text(582, 16, 'G', fontsize=16) # ax.axvline(londa[start_notch], ymin = 0, ymax = 1, color='k', linestyle='--') # ax.axvline(londa[end_notch], ymin = 0, ymax = 1, color='k', linestyle='--') # ax.axvline(londa[start_power], ymin = 0, ymax = 1, color='k', linestyle='--') # ax.axvline(londa[end_power], ymin = 0, ymax = 1, color='k', linestyle='--') figure_name = os.path.join(save_folder, 'calibration_max_%s.png' % NP) plt.savefig(figure_name) aux_folder = manage_save_directory(common_path, 'calibration/max') figure_name = os.path.join(aux_folder, 'calibration_max_%s.png' % NP) plt.savefig(figure_name, dpi=300, bbox_plot='tight') figure_name = os.path.join(aux_folder, 'calibration_max_%s.pdf' % NP) plt.savefig(figure_name, dpi=300, bbox_plot='tight', format='pdf') plt.close() # BACKGROUND SUBSTRACTION line_spec = line_spec_smooth - bkg_smooth ######################## DETERMINE COUNTS PER IRRADIANCE ############################ ######################## DETERMINE COUNTS PER IRRADIANCE ############################ ######################## DETERMINE COUNTS PER IRRADIANCE ############################ print('Calculating counts per unit of time...') aux_sum_stokes_smooth_corrected = np.sum(line_spec[:, start_power:end_power], axis=1) integrated_cts = np.max(aux_sum_stokes_smooth_corrected) integrated_cts_per_sec = integrated_cts / exp_time_fast print('Stokes-integrated signal (bkg corrected): %.0f +/- %.0f cts/s' % (integrated_cts_per_sec, np.sqrt(integrated_cts_per_sec))) meas_pow_sample = factor * meas_pow_bfp err_meas_pow_sample = instrumental_err * meas_pow_sample irrad_calc = 2 * meas_pow_sample / (np.pi * w0**2) err_irrad_calc = np.sqrt((2 / (np.pi * w0**2) * err_meas_pow_sample)**2 + (4 * meas_pow_sample * err_w0 / (np.pi * w0**3))**2) print('Irradiance max (calc): %.2f +/- %.2f mW/um2\n' % (irrad_calc, err_irrad_calc)) #################### SAVE DATA ############################ #################### SAVE DATA ############################ #################### SAVE DATA ############################ print('Saving calibration data...') aux_folder = manage_save_directory(save_folder, 'calibration') to_save = [integrated_cts_per_sec, irrad_calc, err_irrad_calc] path_to_save = os.path.join(aux_folder, 'integrated_counts_%s.dat' % NP) np.savetxt(path_to_save, to_save, fmt='%.6e') aux_folder = manage_save_directory(save_folder, 'calibration') to_save = bkg_smooth path_to_save = os.path.join(aux_folder, 'calibration_bkg_%s.dat' % NP) np.savetxt(path_to_save, to_save, fmt='%.6e') aux_folder = manage_save_directory(save_folder, 'calibration') to_save = max_smooth path_to_save = os.path.join(aux_folder, 'calibration_max_%s.dat' % NP) np.savetxt(path_to_save, to_save, fmt='%.6e') return
def gather_data(path_from, R2th, totalbins, monitor): #################### SLOPE STATISTICS ############################ #################### SLOPE STATISTICS ############################ #################### SLOPE STATISTICS ############################ list_of_folders = os.listdir(path_from) list_of_folders = [ f for f in list_of_folders if os.path.isdir(os.path.join(path_from, f)) ] list_of_folders = [f for f in list_of_folders if re.search('NP', f)] list_of_folders.sort() L = len(list_of_folders) list_of_mean_beta = np.zeros((L)) list_of_mean_beta_err = np.zeros((L)) list_of_std_beta = np.zeros((L)) list_of_data_points = np.zeros((L)) list_of_mean_Tzero = np.zeros((L)) list_of_mean_Tzero_err = np.zeros((L)) list_of_std_Tzero = np.zeros((L)) list_of_londa_max = np.zeros((L)) list_of_width_pl = np.zeros((L)) list_of_r_sq_spr = np.zeros((L)) list_of_col = np.zeros((L)) list_of_nps = np.zeros((L)) list_of_avg_monitor = np.zeros((L)) list_of_std_monitor = np.zeros((L)) list_of_beta_good_array = [] list_of_beta_good_dict = {} list_of_beta_good_err_dict = {} list_of_Tzero_good_array = [] list_of_Tzero_good_dict = {} list_of_Tzero_good_err_dict = {} for i in range(L): NP = list_of_folders[i] list_of_col[i] = int(NP.split('_')[1]) list_of_nps[i] = int(NP.split('_')[3]) ############################################ import beta beta_folder = os.path.join(path_from, NP, 'matrix', 'beta_matrix') filename = 'beta_R2th_%s_%s.dat' % (str(R2th), NP) beta_filepath = os.path.join(beta_folder, filename) data = np.loadtxt(beta_filepath, skiprows=1) list_of_mean_beta[i] = data[0] list_of_mean_beta_err[i] = data[1] list_of_std_beta[i] = data[2] list_of_data_points[i] = data[3] list_of_mean_Tzero[i] = data[4] list_of_mean_Tzero_err[i] = data[5] list_of_std_Tzero[i] = data[6] ######################################## prepare for hist of all beta_matrix_good filename = 'beta_good_array_%s.dat' % (NP) beta_good_array_filepath = os.path.join(beta_folder, filename) data = np.loadtxt(beta_good_array_filepath) list_of_beta_good_array.append(data) key = 'col_%02d_np_%02d' % (list_of_col[i], list_of_nps[i]) list_of_beta_good_dict[key] = data filename = 'beta_good_err_array_%s.dat' % (NP) beta_good_err_array_filepath = os.path.join(beta_folder, filename) data = np.loadtxt(beta_good_err_array_filepath) key = 'col_%02d_np_%02d' % (list_of_col[i], list_of_nps[i]) list_of_beta_good_err_dict[key] = data ############################################ import beta Tzero_folder = os.path.join(path_from, NP, 'matrix', 'Tzero_matrix') ######################################## prepare for hist of all Tzero_matrix_good filename = 'Tzero_good_array_%s.dat' % (NP) Tzero_good_array_filepath = os.path.join(Tzero_folder, filename) data = np.loadtxt(Tzero_good_array_filepath) list_of_Tzero_good_array.append(data) key = 'col_%02d_np_%02d' % (list_of_col[i], list_of_nps[i]) list_of_Tzero_good_dict[key] = data filename = 'Tzero_good_err_array_%s.dat' % (NP) Tzero_good_err_array_filepath = os.path.join(Tzero_folder, filename) data = np.loadtxt(Tzero_good_err_array_filepath) key = 'col_%02d_np_%02d' % (list_of_col[i], list_of_nps[i]) list_of_Tzero_good_err_dict[key] = data ############################################ import spr data spr_folder = os.path.join(path_from, NP, 'spr') filename = 'spr_fitted_parameters_%s.dat' % NP spr_filepath = os.path.join(spr_folder, filename) data = np.loadtxt(spr_filepath) list_of_londa_max[i] = data[0] list_of_width_pl[i] = data[1] list_of_r_sq_spr[i] = data[2] ############################################ import power monitor data if monitor: monitor_folder = os.path.join(path_from, NP, 'power_monitor') filename = 'power_monitor_%s.dat' % NP monitor_filepath = os.path.join(monitor_folder, filename) data = np.loadtxt(monitor_filepath) list_of_avg_monitor[i] = data[0] list_of_std_monitor[i] = data[1] ########## PLOT ########## PLOT ########## PLOT plt.figure() nbins = 20 range_tuple = [20, 120] # print(list_of_beta_good_array) plt.hist(list_of_beta_good_array, bins=nbins, range=range_tuple, rwidth = 1, \ align='mid', alpha = 1, edgecolor='k', normed = False, histtype = 'barstacked', stacked=True) plt.legend(loc=1, handlelength=0) ax = plt.gca() # ax.axvline(mu_slope, ymin = 0, ymax = 1, color='k', linestyle='--', linewidth=2) # ax.fill_between([borders_slope[0], borders_slope[1]], [0,0], [100,100], facecolor='k', alpha=0.25) ax.get_yaxis().set_ticks([]) ax.set_ylim([0, 200]) ax.set_xlim(range_tuple) ax.set_xlabel(u'Photothermal coefficient (K µm$^{2}$/mW)') ax.set_ylabel('Entries') aux_folder = manage_save_directory(path_from, 'stats') figure_name = os.path.join(aux_folder,'hist_of_all_betas_R2th_%s_%s_bines.png' % \ (str(R2th), str(totalbins))) plt.savefig(figure_name) plt.close() plt.figure() nbins = 20 range_tuple = [250, 350] # print(list_of_beta_good_array) plt.hist(list_of_Tzero_good_array, bins=nbins, range=range_tuple, rwidth = 1, \ align='mid', alpha = 1, edgecolor='k', normed = False, histtype = 'barstacked', stacked=True) plt.legend(loc=1, handlelength=0) ax = plt.gca() # ax.axvline(mu_slope, ymin = 0, ymax = 1, color='k', linestyle='--', linewidth=2) # ax.fill_between([borders_slope[0], borders_slope[1]], [0,0], [100,100], facecolor='k', alpha=0.25) ax.get_yaxis().set_ticks([]) ax.set_ylim([0, 200]) ax.set_xlim(range_tuple) ax.set_xlabel(u'T$_{0}$ (K)') ax.set_ylabel('Entries') aux_folder = manage_save_directory(path_from, 'stats') figure_name = os.path.join(aux_folder,'hist_of_all_Tzero_R2th_%s_%s_bines.png' % \ (str(R2th), str(totalbins))) plt.savefig(figure_name) plt.close() #################### SAVE DATA ############################ #################### SAVE DATA ############################ #################### SAVE DATA ############################ aux_folder = manage_save_directory(path_from, 'stats') to_save = np.array([ list_of_mean_beta, list_of_mean_beta_err, list_of_std_beta, list_of_data_points, list_of_mean_Tzero, list_of_mean_Tzero_err, list_of_std_Tzero, list_of_londa_max, list_of_width_pl, list_of_r_sq_spr, list_of_avg_monitor, list_of_std_monitor, list_of_col, list_of_nps ]).T header_text = 'BETA_mW_um2_K ERR_BETA_mW_um2_K STD_BETA_mW_um2_K DATA_POINTS TZERO_K ERR_TZERO_K STD_TZERO_K LAMBDA_MAX_nm WIDTH_nm SPR_R_SQ MONITOR_AVG MONITOR_STD COL NP' path_to_save = os.path.join(aux_folder, 'all_NP_data.dat') np.savetxt(path_to_save, to_save, fmt='%.3e', header=header_text, comments='') path_to_save = os.path.join(aux_folder, 'all_beta_good_data.pkl') f = open(path_to_save, 'wb+') pickle.dump(list_of_beta_good_dict, f) f.close() path_to_save = os.path.join(aux_folder, 'all_beta_good_err_data.pkl') f = open(path_to_save, 'wb+') pickle.dump(list_of_beta_good_err_dict, f) f.close() path_to_save = os.path.join(aux_folder, 'all_Tzero_good_data.pkl') f = open(path_to_save, 'wb+') pickle.dump(list_of_Tzero_good_dict, f) f.close() path_to_save = os.path.join(aux_folder, 'all_Tzero_good_err_data.pkl') f = open(path_to_save, 'wb+') pickle.dump(list_of_Tzero_good_err_dict, f) f.close() return
def calculate_quotient(folder, path_to, totalbins, lower_londa, upper_londa, Tzero_guess, beta_guess, last_bin_is_bkg_flag, find_beta, find_Tzero): thermometry_using_scattering = True NP = folder.split('Spectrum_')[-1] common_path = os.path.join(path_to,'common_plots') save_folder = os.path.join(path_to, NP) bin_folder = os.path.join(save_folder, 'pl_in_bins') londa_file = os.path.join(bin_folder,'londa_%s.dat' % NP) londa = np.loadtxt(londa_file) lower_londa_index = closer(londa, lower_londa) upper_londa_index = closer(londa, upper_londa) energy = lambda_to_energy(londa) a = lower_londa_index b = upper_londa_index dof = b - a + 1 - 1 # número de datos (ver ajuste con energía) MENOS los parámetros del ajuste frozen_distro = scipy.stats.chi2(dof) bin_specs_file = os.path.join(bin_folder,'all_bins_%s.dat' % NP) bin_specs = np.loadtxt(bin_specs_file) bin_specs = bin_specs.T corrected_mean_irrad_file = os.path.join(bin_folder,'bin_irradiance_%s.dat' % NP) irrad = np.loadtxt(corrected_mean_irrad_file) Irrad_array = irrad[:,0] err_Irrad_array = irrad[:,1] bin_distro_file = os.path.join(bin_folder,'bin_distro_%s.dat' % NP) bin_data = np.loadtxt(bin_distro_file) hist_bin = bin_data[:,2] R2_matrix = np.zeros([totalbins, totalbins]) chi_squared_matrix = np.zeros([totalbins, totalbins]) p_value_matrix = np.zeros([totalbins, totalbins]) beta_matrix = np.zeros([totalbins, totalbins]) err_beta_matrix = np.zeros([totalbins, totalbins]) Tzero_matrix = np.zeros([totalbins, totalbins]) err_Tzero_matrix = np.zeros([totalbins, totalbins]) T_matrix = np.zeros([totalbins, totalbins]) err_T_matrix = np.zeros([totalbins, totalbins]) if last_bin_is_bkg_flag: print('Last bin is considered a bkg correction, quotients calculated from bin 1.') list_of_bins = list(range(1, totalbins)) else: print('Last bin is NOT a bkg correction, quotients calculated from bin 0.') list_of_bins = list(range(0, totalbins)) xdata_energy = energy[a:b] xdata_londa = londa[a:b] len_data = len(xdata_energy) print('Allocating, calculating and plotting quotients') # allocate arrays for experimental data bin_A_array = np.zeros((totalbins, totalbins)) err_bin_A_array = np.zeros((totalbins, totalbins)) ydata_all = np.zeros((totalbins, totalbins, len_data)) for ref in list_of_bins: if hist_bin[ref] == 0: print('\nBin %d is empty.' % ref) print('Skipping bin as reference.') continue # define reference irradiance Irrad_ref = Irrad_array[ref] err_Irrad_ref = err_Irrad_array[ref] # define quotients of irradiance for i in list_of_bins: A = Irrad_array[i]/Irrad_ref bin_A_array[i, ref] = A err_bin_A_array[i, ref] = np.sqrt( (err_Irrad_array[i]/Irrad_ref)**2 + \ (err_Irrad_ref*Irrad_array[i]/(Irrad_ref**2))**2) # load experimental data quotient_exp = bin_specs[i][a:b]/bin_specs[ref][a:b] ydata_all[i,ref,:] = quotient_exp if thermometry_using_scattering: print('\n Warning: Finding beta (also) using scattering spectrum!') # load scattering spectrum filepath_scattering_80 = '/home/mariano/datos_mariano/posdoc/experimentos_PL_arg/20190717_espectros_scattering_PL/grilla3_AuNPs_80SS/figures/averaged_scattering_spectra_80nm_glass_water.dat' data = np.loadtxt(filepath_scattering_80) londa_sca = data[:,0] spec_sca = data[:,1] energy_sca = lambda_to_energy(londa_sca) # Interpolate # note that inversion of arrays is needed to interpolate correctly new_sca_spectrum = np.interp(xdata_energy, energy_sca[::-1], spec_sca[::-1]) # CHECK plt.figure() plt.plot(energy_sca, spec_sca,'C0-') plt.plot(xdata_energy, new_sca_spectrum,'k-', linewidth=4, alpha=0.4) ax = plt.gca() ax.set_xlabel('Energy (eV)', fontsize=20) ax.set_ylabel('Normalized scattering (a.u.)', fontsize=20) ax.set_xlim([1.71, 2.59]) ax.set_ylim([0, 1.025]) plt.tick_params(axis='both', which='major', labelsize=18) aux_folder = manage_save_directory(common_path,'antistokes_sca_and_pl') figure_name = os.path.join(aux_folder,'sca_interpolation_%s.png' % (NP)) plt.savefig(figure_name, dpi = 300) figure_name = os.path.join(aux_folder,'sca_interpolation_%s.pdf' % (NP)) plt.savefig(figure_name, dpi = 300, format='pdf') plt.close() x_long = np.arange(2.37, 2.47, 0.01) rango = list(range(0, totalbins + 1)) norm = plt.Normalize() colormap = plt.cm.plasma(norm(rango)) temp_array_with_sca = np.zeros((totalbins)) temp_array_with_sca[0] = Tzero_guess err_temp_array_with_sca = np.zeros((totalbins)) err_temp_array_with_sca[0] = 1 plt.figure() # plt.plot(xdata_energy, log_bose(xdata_energy, 1, 300),'r-') # plt.plot(xdata_energy, new_sca_spectrum,'.-') for i in list_of_bins: if hist_bin[i] == 0: print('\nBin %d is empty.' % i) print('Skipping bin.') continue # find temp or beta cte = 1 y = cte*bin_specs[i][a:b]/new_sca_spectrum log_y = np.log10(y) init_params = [1, Tzero_guess] best_as, err = fit_log_bose(init_params, xdata_energy, log_y) temp_array_with_sca[i] = best_as[1] err_temp_array_with_sca[i] = np.sqrt(err[1,1]) fitted_log_y = 10**(log_bose(x_long, best_as[0], best_as[1]))/1000 plt.plot(x_long, fitted_log_y, 'k--') color_iter = colormap[i] plt.plot(xdata_energy, 10**(log_y)/1000, '-', linewidth = 2.0, color = color_iter, label='%d, T=%.0f K' % (i, best_as[1])) plt.grid(True) plt.legend(loc='upper right', prop={'size':12}) ax = plt.gca() # ax.set_xlim([energy[b],energy[a]]) # ax.set_xlim([0.99*energy[b],1.01*energy[a]]) ax.set_xlim(2.37, 2.445) # ax.axvline(energy[a], ymin=0, ymax=1, linestyle='--', color='k') # ax.axvline(energy[b], ymin=0, ymax=1, linestyle='--', color='k') ax.set_ylim([0.1, 20]) ax.set_xlabel('Energy (eV)', fontsize=20) ax.set_ylabel('AS/scattering (a.u.)', fontsize=20) plt.tick_params(axis='both', which='major', labelsize=18) aux_folder = manage_save_directory(common_path,'antistokes_sca_and_pl') figure_name = os.path.join(aux_folder,'pl_and_sca_comparison_%s.png' % (NP)) plt.savefig(figure_name, dpi = 300) figure_name = os.path.join(aux_folder,'pl_and_sca_comparison_%s.pdf' % (NP)) plt.savefig(figure_name, dpi = 300, format='pdf') plt.close() # plot temp vs irrad plt.figure() plt.errorbar(Irrad_array, temp_array_with_sca, xerr = err_Irrad_array, yerr = err_temp_array_with_sca, fmt = 'o', color = 'C0', ms = 7, mfc = 'C0', ecolor = 'C0', lw = 1, capsize = 2.5, barsabove = False) plt.grid(True) plt.legend(loc='upper right', prop={'size':12}) ax = plt.gca() ax.set_xlim([-0.05, 1.75]) ax.set_ylim([285, 1125]) ax.set_xlabel(u'Irradiance (mW/µm$^{2}$)', fontsize=20) ax.set_ylabel('Temperature (K)', fontsize=20) plt.tick_params(axis='both', which='major', labelsize=18) aux_folder = manage_save_directory(common_path,'antistokes_sca_and_pl') figure_name = os.path.join(aux_folder,'temp_vs_irrad_%s.png' % (NP)) plt.savefig(figure_name, dpi = 300) figure_name = os.path.join(aux_folder,'temp_vs_irrad_%s.pdf' % (NP)) plt.savefig(figure_name, dpi = 300, format='pdf') plt.close() ##################### ANTI-STOKES vs LAMBDA ###################### ##################### ANTI-STOKES vs LAMBDA ###################### ##################### ANTI-STOKES vs LAMBDA ###################### for ref in list_of_bins: plt.figure() for i in list_of_bins: plt.plot(xdata_londa, ydata_all[i,ref,:], '-', label='Bin %d/%d - A %.2f' % (i, ref, bin_A_array[i, ref])) plt.grid(True) plt.legend(loc='best') ax = plt.gca() ax.set_xlabel(r'Wavelength (nm)') ax.set_ylabel('$Q^{AS}$') ax.set_xlim([0.99*londa[a],1.01*londa[b]]) ax.axvline(londa[a], ymin=0, ymax=1, linestyle='--', color='k') ax.axvline(londa[b], ymin=0, ymax=1, linestyle='--', color='k') aux_folder = manage_save_directory(save_folder,'antistokes_quotient') figure_name = os.path.join(aux_folder,'quotient_vs_lambda_ref_%02d_%s.png' % (ref, NP)) plt.savefig(figure_name) plt.close() ##################### ANTI-STOKES FIT ###################### ##################### ANTI-STOKES FIT ###################### ##################### ANTI-STOKES FIT ###################### x = energy[a:b] x_long = np.arange(2.37, 2.47, 0.01) rango = list(range(0, totalbins + 1)) norm = plt.Normalize() colormap = plt.cm.plasma(norm(rango)) for ref in list_of_bins: print('\nFitting quotient Q using bin %d as reference...' % ref) plt.figure() list_of_bins_to_fit = list(range(ref + 1 + skip_neighbours, totalbins)) for i in list_of_bins_to_fit: # m = ref Irrad_n = Irrad_array[i] Irrad_m = Irrad_array[ref] err_Irrad_n = err_Irrad_array[i] err_Irrad_m = err_Irrad_array[ref] y = ydata_all[i, ref, :] if find_beta and not find_Tzero: print('\nTzero is known. Finding beta...') Tzero = Tzero_guess init_params = beta_guess # initial guess for beta # Get the fitting parameters for the best quotient of photoluminiscence emission best_as, err = fit_quotient_for_beta(init_params, x, Tzero, Irrad_n, Irrad_m, y) # retrieve best fitted parameters beta = best_as[0] Tref = temp_with_slope(Tzero, beta, Irrad_m) Tbin = temp_with_slope(Tzero, beta, Irrad_n) # calculate the errors and goodes of the fit err_beta = np.sqrt(err[0,0]) err_Tzero = 0.5 err_Tref = np.sqrt(err_Tzero**2 + (Irrad_m*err_beta)**2 + (err_Irrad_m*beta)**2) err_Tbin = np.sqrt(err_Tzero**2 + (Irrad_n*err_beta)**2 + (err_Irrad_n*beta)**2) yfit = quotient_with_slope(x, Tzero, beta, Irrad_n, Irrad_m) r2_coef_pearson = calc_r2(y, yfit) chi_squared_pearson = calc_chi_squared(y, yfit) # Plotting yfit_to_plot = quotient_with_slope(x_long, Tzero, beta, Irrad_n, Irrad_m) plt.plot(x_long, yfit_to_plot, '--k', alpha = 0.8) color_iter = colormap[i] plt.plot(x, y, '-', linewidth = 2.0, color = color_iter, label='$Q_{%d/%d}$' % (i, ref)) # label='$Q^{AS}_{%d/%d}$' % (i, ref)) # label='Group %d/%d' % (i, ref)) # label='Bin %d/%d - A %.2f' % (i, ref, A)) # Asign matrix elements beta_matrix[ref,i] = beta err_beta_matrix[ref,i] = err_beta Tzero_matrix[ref,i] = Tzero err_Tzero_matrix[ref,i] = err_Tzero T_matrix[ref,i] = Tref T_matrix[i,ref] = Tbin err_T_matrix[ref,i] = err_Tref err_T_matrix[i,ref] = err_Tbin R2_matrix[ref,i] = r2_coef_pearson R2_matrix[i,ref] = r2_coef_pearson chi_squared_matrix[ref,i] = chi_squared_pearson chi_squared_matrix[i,ref] = chi_squared_pearson p_value_matrix[ref,i] = 1 - frozen_distro.cdf(chi_squared_pearson) p_value_matrix[i,ref] = 1 - frozen_distro.cdf(chi_squared_pearson) print('---------- Bin', i, \ '\nR-sq: %.3f' % r2_coef_pearson, \ '\nTzero: %.1f' % Tzero, 'err Tzero: %.1f' % err_Tzero, \ '\nbeta: %.1f' % beta, 'error beta: %.2f' % err_beta, \ '\nT_ref: %.1f' % Tref, 'error T_ref: %.1f' % err_Tref, \ '\nT_bin: %.1f' % Tbin, 'error T_bin: %.1f' % err_Tbin) elif not find_beta and find_Tzero: print('\nBeta is known. Finding Tzero...') beta = beta_guess init_params = Tzero_guess # initial guess for Tzero # Get the fitting parameters for the best quotient of photoluminiscence emission best_as, err = fit_quotient_for_Tzero(init_params, x, beta, Irrad_n, Irrad_m, y) # retrieve best fitted parameters Tzero = best_as[0] Tref = temp_with_slope(Tzero, beta, Irrad_m) Tbin = temp_with_slope(Tzero, beta, Irrad_n) # calculate the errors and goodes of the fit err_beta = 0.05 err_Tzero = np.sqrt(err[0,0]) err_Tref = np.sqrt(err_Tzero**2 + (Irrad_m*err_beta)**2 + (err_Irrad_m*beta)**2) err_Tbin = np.sqrt(err_Tzero**2 + (Irrad_n*err_beta)**2 + (err_Irrad_n*beta)**2) yfit = quotient_with_slope(x, Tzero, beta, Irrad_n, Irrad_m) r2_coef_pearson = calc_r2(y, yfit) chi_squared_pearson = calc_chi_squared(y, yfit) # Plotting yfit_to_plot = quotient_with_slope(x_long, Tzero, beta, Irrad_n, Irrad_m) plt.plot(x_long, yfit_to_plot, '--k', alpha = 0.8) color_iter = colormap[i] plt.plot(x, y, '-', linewidth = 2.0, color = color_iter, label='$Q_{%d/%d}$' % (i, ref)) # label='$Q^{AS}_{%d/%d}$' % (i, ref)) # label='Group %d/%d' % (i, ref)) # label='Bin %d/%d - A %.2f' % (i, ref, A)) # Asign matrix elements beta_matrix[ref,i] = beta err_beta_matrix[ref,i] = err_beta Tzero_matrix[ref,i] = Tzero err_Tzero_matrix[ref,i] = err_Tzero T_matrix[ref,i] = Tref T_matrix[i,ref] = Tbin err_T_matrix[ref,i] = err_Tref err_T_matrix[i,ref] = err_Tbin R2_matrix[ref,i] = r2_coef_pearson R2_matrix[i,ref] = r2_coef_pearson chi_squared_matrix[ref,i] = chi_squared_pearson chi_squared_matrix[i,ref] = chi_squared_pearson p_value_matrix[ref,i] = 1 - frozen_distro.cdf(chi_squared_pearson) p_value_matrix[i,ref] = 1 - frozen_distro.cdf(chi_squared_pearson) print('---------- Bin', i, \ '\nR-sq: %.3f' % r2_coef_pearson, \ '\nTzero: %.1f' % Tzero, 'err Tzero: %.1f' % err_Tzero, \ '\nbeta: %.1f' % beta, 'error beta: %.2f' % err_beta, \ '\nT_ref: %.1f' % Tref, 'error T_ref: %.1f' % err_Tref, \ '\nT_bin: %.1f' % Tbin, 'error T_bin: %.1f' % err_Tbin) else: raise ValueError('Values of find_beta and find_Tzero must be complementary.') plt.grid(True) plt.legend(loc='upper left', prop={'size':12}) ax = plt.gca() ax.set_xlim([energy[b],energy[a]]) # ax.set_xlim([0.99*energy[b],1.01*energy[a]]) ax.set_xlim(2.37, 2.445) # ax.axvline(energy[a], ymin=0, ymax=1, linestyle='--', color='k') # ax.axvline(energy[b], ymin=0, ymax=1, linestyle='--', color='k') ax.set_ylim([1, 24]) ax.set_xlabel('Energy (eV)', fontsize=20) ax.set_ylabel('$Q^{AS}$', fontsize=20) plt.tick_params(axis='both', which='major', labelsize=18) aux_folder = manage_save_directory(save_folder,'antistokes_quotient') figure_name = os.path.join(aux_folder,'quotient_vs_energy_ref_%02d_%s.png' % (ref, NP)) plt.savefig(figure_name, dpi = 300) figure_name = os.path.join(aux_folder,'quotient_vs_energy_ref_%02d_%s.pdf' % (ref, NP)) plt.savefig(figure_name, dpi = 300, format='pdf') plt.close() ########################### PLOT Temp, R2, p-value matrix ########################### PLOT Temp, R2, p-value matrix plt.figure() plt.imshow(beta_matrix, interpolation='none', cmap='plasma') ax = plt.gca() for i in range(totalbins): for j in range(totalbins): ax.text(j, i, '%.0f' % beta_matrix[i, j], ha="center", va="center", color=[0,0,0]) ax.set_xticks(range(totalbins)) ax.set_yticks(range(totalbins)) ax.get_xaxis().set_visible(False) ax.get_yaxis().set_visible(False) cbar = plt.colorbar() cbar.ax.set_title(u'Temp. (K)', fontsize=13) figure_name = os.path.join(folder,'beta_matrix_%s.png' % NP) plt.savefig(figure_name) aux_folder = manage_save_directory(common_path,'beta_matrix') figure_name = os.path.join(aux_folder,'beta_matrix_%s.png' % NP) plt.savefig(figure_name) plt.close() plt.figure() plt.imshow(Tzero_matrix, interpolation='none', cmap='plasma') ax = plt.gca() for i in range(totalbins): for j in range(totalbins): ax.text(j, i, '%.0f' % Tzero_matrix[i, j], ha="center", va="center", color=[0,0,0]) ax.set_xticks(range(totalbins)) ax.set_yticks(range(totalbins)) ax.get_xaxis().set_visible(False) ax.get_yaxis().set_visible(False) cbar = plt.colorbar() cbar.ax.set_title(u'T$_{0}$ (K)', fontsize=13) figure_name = os.path.join(folder,'Tzero_matrix_%s.png' % NP) plt.savefig(figure_name) aux_folder = manage_save_directory(common_path,'Tzero_matrix') figure_name = os.path.join(aux_folder,'Tzero_matrix_%s.png' % NP) plt.savefig(figure_name) plt.close() plt.figure() plt.imshow(T_matrix, interpolation='none', cmap='plasma') ax = plt.gca() for i in range(totalbins): for j in range(totalbins): ax.text(j, i, '%.0f' % T_matrix[i, j], ha="center", va="center", color=[0,0,0]) ax.set_xticks(range(totalbins)) ax.set_yticks(range(totalbins)) ax.get_xaxis().set_visible(False) ax.get_yaxis().set_visible(False) cbar = plt.colorbar() cbar.ax.set_title(u'Temp. (K)', fontsize=13) figure_name = os.path.join(folder,'temp_matrix_%s.png' % NP) plt.savefig(figure_name) aux_folder = manage_save_directory(common_path,'temp_matrix') figure_name = os.path.join(aux_folder,'temp_matrix_%s.png' % NP) plt.savefig(figure_name) plt.close() plt.figure() plt.imshow(R2_matrix, interpolation='none', cmap='viridis') ax = plt.gca() for i in range(totalbins): for j in range(totalbins): ax.text(j, i, '%.2f' % R2_matrix[i, j], ha="center", va="center", color=[0,0,0]) ax.set_xticks(range(totalbins)) ax.set_yticks(range(totalbins)) ax.get_xaxis().set_visible(False) ax.get_yaxis().set_visible(False) figure_name = os.path.join(folder,'R2_matrix_%s.png' % NP) plt.savefig(figure_name) aux_folder = manage_save_directory(common_path,'R2_matrix') figure_name = os.path.join(aux_folder,'R2_matrix_%s.png' % NP) plt.savefig(figure_name) plt.close() plt.figure() plt.imshow(p_value_matrix, interpolation='none', cmap='viridis') ax = plt.gca() for i in range(totalbins): for j in range(totalbins): ax.text(j, i, '%.2f' % p_value_matrix[i, j], ha="center", va="center", color=[0,0,0]) ax.set_xticks(range(totalbins)) ax.set_yticks(range(totalbins)) ax.get_xaxis().set_visible(False) ax.get_yaxis().set_visible(False) figure_name = os.path.join(folder,'p_value_matrix_%s.png' % NP) plt.savefig(figure_name) aux_folder = manage_save_directory(common_path,'p_value_matrix') figure_name = os.path.join(aux_folder,'p_value_matrix_%s.png' % NP) plt.savefig(figure_name) plt.close() #################### SAVE DATA ############################ #################### SAVE DATA ############################ #################### SAVE DATA ############################ # Writing/creating files aux_folder = manage_save_directory(save_folder,'matrix') beta_matrix_file = os.path.join(aux_folder,'beta_matrix_%s.dat' % NP) err_beta_matrix_file = os.path.join(aux_folder,'err_beta_matrix_%s.dat' % NP) np.savetxt(beta_matrix_file, beta_matrix, delimiter=',', fmt='%.3e') np.savetxt(err_beta_matrix_file, err_beta_matrix, delimiter=',', fmt='%.3e') Tzero_matrix_file = os.path.join(aux_folder,'Tzero_matrix_%s.dat' % NP) err_Tzero_matrix_file = os.path.join(aux_folder,'err_Tzero_matrix_%s.dat' % NP) np.savetxt(Tzero_matrix_file, Tzero_matrix, delimiter=',', fmt='%.3e') np.savetxt(err_Tzero_matrix_file, err_Tzero_matrix, delimiter=',', fmt='%.3e') T_matrix_file = os.path.join(aux_folder,'Temp_matrix_%s.dat' % NP) err_T_matrix_file = os.path.join(aux_folder,'err_T_matrix_%s.dat' % NP) np.savetxt(T_matrix_file, T_matrix, delimiter=',', fmt='%.3e') np.savetxt(err_T_matrix_file, err_T_matrix, delimiter=',', fmt='%.3e') R2_matrix_file = os.path.join(aux_folder,'R2_matrix_%s.dat' % NP) np.savetxt(R2_matrix_file, R2_matrix, delimiter=',', fmt='%.3e') p_value_matrix_file = os.path.join(aux_folder,'p_value_matrix_%s.dat' % NP) np.savetxt(p_value_matrix_file, p_value_matrix, delimiter=',', fmt='%.3e') irradiance_file = os.path.join(aux_folder,'irradiance_matrix_%s.dat' % NP) np.savetxt(irradiance_file, Irrad_array, fmt='%.3e') return
def statistics(path_from, R2th, totalbins, radius, sigma_abs, find_beta, find_Tzero): stats_file = os.path.join(path_from, 'stats', 'all_NP_data.dat') data = np.loadtxt(stats_file, skiprows=1) list_of_mean_beta = data[:, 0] list_of_mean_beta_err = data[:, 1] list_of_std_beta = data[:, 2] list_of_data_points = data[:, 3] list_of_mean_Tzero = data[:, 4] list_of_mean_Tzero_err = data[:, 5] list_of_std_Tzero = data[:, 6] list_of_londa_max = data[:, 7] list_of_width_pl = data[:, 8] list_of_r_sq_spr = data[:, 9] list_of_avg_monitor = data[:, 10] list_of_std_monitor = data[:, 11] list_of_col = data[:, 12] list_of_nps = data[:, 13] index_non_zero = list_of_mean_beta != 0 list_of_mean_beta = list_of_mean_beta[index_non_zero] list_of_mean_beta_err = list_of_mean_beta_err[index_non_zero] list_of_std_beta = list_of_std_beta[index_non_zero] list_of_data_points = list_of_data_points[index_non_zero] list_of_mean_Tzero = list_of_mean_Tzero[index_non_zero] list_of_mean_Tzero_err = list_of_mean_Tzero_err[index_non_zero] list_of_std_Tzero = list_of_std_Tzero[index_non_zero] list_of_londa_max = list_of_londa_max[index_non_zero] list_of_width_pl = list_of_width_pl[index_non_zero] list_of_r_sq_spr = list_of_r_sq_spr[index_non_zero] list_of_avg_monitor = list_of_avg_monitor[index_non_zero] list_of_std_monitor = list_of_std_monitor[index_non_zero] list_of_col = list_of_col[index_non_zero] list_of_nps = list_of_nps[index_non_zero] ########################################################################## ########################################################################## ########################################################################## ######################################## slope with errors vs NP plt.figure() plt.errorbar(list_of_nps, list_of_mean_beta, yerr=list_of_mean_beta_err, \ elinewidth=1, fmt='s', alpha=0.5, label='All beta NPs') plt.legend() ax = plt.gca() ax.set_ylim([0, 100]) ax.set_xlabel(r'Index') ax.set_ylabel(r'Photothermal coefficient (K µm$^{2}$/mW)') aux_folder = manage_save_directory(path_from, 'stats') figure_name = 'beta_vs_index_R2th_%s_%s_bines.png' % \ (str(R2th), str(totalbins)) figure_name = os.path.join(aux_folder, figure_name) plt.savefig(figure_name) plt.close() ######################################## slope vs NP plt.figure() plt.plot(list_of_col, list_of_mean_beta, 's', color='C1', label='All beta NPs') plt.legend() ax = plt.gca() ax.set_ylim([0, 100]) ax.set_xlabel(r'NP') ax.set_ylabel(r'Photothermal coefficient (K µm$^{2}$/mW)') aux_folder = manage_save_directory(path_from, 'stats') figure_name = 'beta_vs_NP_R2th_%s_%s_bines.png' % \ (str(R2th), str(totalbins)) figure_name = os.path.join(aux_folder, figure_name) plt.savefig(figure_name) plt.close() ######################################## hist BETA ######################################## hist BETA ######################################## hist BETA unique_NPs = np.unique(list_of_col) number_of_NPs = len(unique_NPs) range_tuple = [15, 95] nbins = 16 if find_beta and not find_Tzero: ####################################### hist BETA per NP #### ALL NPs IN ONE PLOT (histogram of its repetition) if number_of_NPs != 1: fig, axs = plt.subplots(number_of_NPs, 1, gridspec_kw={ 'wspace': 0, 'hspace': 0 }) for i in range(number_of_NPs): num_NP = int(unique_NPs[i]) grep_NPs = np.where(list_of_col == num_NP)[0] grep_betas_NPs = list_of_mean_beta[grep_NPs] beta_mean_per_NP = np.nanmean(grep_betas_NPs) betas_std_per_NP = np.nanstd(grep_betas_NPs, ddof=1) borders = [ beta_mean_per_NP + betas_std_per_NP, beta_mean_per_NP - betas_std_per_NP ] ax = axs[i] out_hist = ax.hist(grep_betas_NPs, bins=nbins, range=range_tuple, rwidth = 1, \ align='mid', alpha = 1, color = 'C0', edgecolor='k', normed = False, zorder=2, \ label='NP %d' % i) ax.axvline(beta_mean_per_NP, ymin=0, ymax=1, color='C3', linestyle='--', linewidth=2, zorder=3) ax.fill_between([borders[0], borders[1]], [0, 0], [1, 1], facecolor='k', alpha=0.25, zorder=1) ax.set_xlim([41, 89]) plt.legend() ax = plt.gca() ax.set_ylim([0, 10]) ax.set_ylabel('Entries') ax.set_xlabel(u'Photothermal coefficient (K µm$^{2}$/mW)') aux_folder = manage_save_directory(path_from, 'stats') figure_name = '0_beta_mean_hist_per_NP_R2th_%s_%s_bines.png' % \ (str(R2th), str(totalbins)) figure_name = os.path.join(aux_folder, figure_name) plt.savefig(figure_name, dpi=300, bbox_layout='tight') plt.close() ####################################### hist BETA MEAN per SIZE #### ALL NPs IN ONE PLOT (histogram of its repetition) if number_of_NPs != 1: fig, axs = plt.subplots(number_of_NPs, 1, gridspec_kw={ 'wspace': 0, 'hspace': 0 }) for i in range(number_of_NPs): num_NP = int(unique_NPs[i]) grep_NPs = np.where(list_of_col == num_NP)[0] grep_betas_NPs = list_of_mean_beta[grep_NPs] beta_mean_per_NP = np.nanmean(grep_betas_NPs) betas_std_per_NP = np.nanstd(grep_betas_NPs, ddof=1) borders = [ beta_mean_per_NP + betas_std_per_NP, beta_mean_per_NP - betas_std_per_NP ] ax = axs[i] out_hist = ax.hist(grep_betas_NPs, bins=nbins, range=range_tuple, rwidth = 1, \ align='mid', alpha = 1, color = 'C0', edgecolor='k', normed = False, zorder=2, \ label='NP %d' % i) ax.axvline(beta_mean_per_NP, ymin=0, ymax=1, color='C3', linestyle='--', linewidth=2, zorder=3) ax.fill_between([borders[0], borders[1]], [0, 0], [1, 1], facecolor='k', alpha=0.25, zorder=1) ax.set_xlim([41, 89]) plt.legend() ax = plt.gca() ax.set_ylim([0, 10]) ax.set_ylabel('Entries') ax.set_xlabel(u'Photothermal coefficient (K µm$^{2}$/mW)') aux_folder = manage_save_directory(path_from, 'stats') figure_name = '0_beta_mean_hist_per_NP_R2th_%s_%s_bines.png' % \ (str(R2th), str(totalbins)) figure_name = os.path.join(aux_folder, figure_name) plt.savefig(figure_name, dpi=300, bbox_layout='tight') plt.close() ####################################### hist BETA per NP #### one NP per plot (histogram of its repetition) print( '\n-------- Stats using matrix betas of multiple scans of one NP (to find distributions parameters) --------' ) dict_file = os.path.join(path_from, 'stats', 'all_beta_good_data.pkl') with open(dict_file, 'rb') as f: list_of_beta_good_dict = pickle.load(f) dict_file = os.path.join(path_from, 'stats', 'all_beta_good_err_data.pkl') with open(dict_file, 'rb') as f: list_of_beta_good_err_dict = pickle.load(f) for i in range(number_of_NPs): list_of_beta_good_per_NP = np.array([]) list_of_beta_good_err_per_NP = np.array([]) num_NP = int(unique_NPs[i]) for key in list_of_beta_good_dict.keys(): col = int(key.split('_')[1]) # NP = int(key.split('_')[3]) if num_NP == col: # print(num_NP, col, NP) list_of_beta_good_per_NP = np.append( list_of_beta_good_dict[key], list_of_beta_good_per_NP) list_of_beta_good_err_per_NP = np.append( list_of_beta_good_err_dict[key], list_of_beta_good_err_per_NP) # print(list_of_beta_good_per_NP) # stats data_points = len(list_of_beta_good_per_NP) beta_mean_per_NP = np.nanmean(list_of_beta_good_per_NP) betas_std_per_NP = np.nanstd(list_of_beta_good_per_NP, ddof=1) # beta_mean_err_per_NP = np.sqrt(np.nansum(list_of_beta_good_err_per_NP**2))/data_points beta_mean_err_per_NP = betas_std_per_NP / np.sqrt(data_points) borders = [ beta_mean_per_NP - betas_std_per_NP, beta_mean_per_NP + betas_std_per_NP ] print('\nNP %02d' % num_NP) print( 'Data points (all betas of same NP scanned multiple times): %d' % data_points) print('Mean beta: %.3f' % beta_mean_per_NP, 'Std dev beta: %.3f' % betas_std_per_NP) print('Error in mean beta (same sigma for all): %.3f' % beta_mean_err_per_NP) plt.figure() ax = plt.gca() out_hist = plt.hist(list_of_beta_good_per_NP, bins=nbins, range=range_tuple, rwidth = 1, \ align='mid', alpha = 1, color = 'C0', edgecolor='k', normed = False, zorder=2, \ label='NP %d' % i) ax.axvline(beta_mean_per_NP, ymin=0, ymax=1, color='C3', linestyle='--', linewidth=2, zorder=3) ax.fill_between([borders[0], borders[1]], [0, 0], [100, 100], facecolor='k', alpha=0.25, zorder=1) plt.legend() ax.set_ylim([0, 1.1 * np.max(out_hist[0])]) ax.set_xlim([25, 105]) ax.set_ylabel('Entries') ax.set_xlabel(r'$\beta$ (K µm$^{2}$/mW)') aux_folder = manage_save_directory(path_from, 'stats') figure_name = '0_beta_hist_NP_%02d_R2th_%s_%s_bines.png' % \ (num_NP, str(R2th), str(totalbins)) figure_name = os.path.join(aux_folder, figure_name) plt.savefig(figure_name, dpi=300, bbox_layout='tight') plt.close() print( '\n-------- Stats using mean betas for one NP (repetition, to find beta for each NP) --------' ) # range_tuple = [15,85] # nbins = 15 list_of_beta_bb = [] list_of_beta_barra_std = [] list_of_beta_bb_err = [] for i in range(number_of_NPs): num_NP = int(unique_NPs[i]) # keep NP data (usually is all daata from one Col) grep_NPs = np.where(list_of_col == num_NP)[0] grep_betas_NPs = list_of_mean_beta[grep_NPs] grep_betas_err_NPs = list_of_mean_beta_err[grep_NPs] # stats data_points = len(grep_betas_NPs) beta_barra_mean_per_NP = np.nanmean(grep_betas_NPs) beta_barra_std_per_NP = np.nanstd(grep_betas_NPs, ddof=1) beta_barra_mean_err_per_NP = np.sqrt( np.nansum(grep_betas_err_NPs**2)) / data_points borders = [ beta_barra_mean_per_NP - beta_barra_std_per_NP, beta_barra_mean_per_NP + beta_barra_std_per_NP ] print('\nNP %02d' % num_NP) print('Data points (number of scans): %d' % data_points) print('Mean beta barra (beta bb): %.3f' % beta_barra_mean_per_NP, 'Std dev beta barra: %.3f' % beta_barra_std_per_NP) print('Error in mean beta barra (same sigma): %.3f' % beta_barra_mean_err_per_NP) list_of_beta_bb.append(beta_barra_mean_per_NP) list_of_beta_barra_std.append(beta_barra_std_per_NP) list_of_beta_bb_err.append(beta_barra_mean_err_per_NP) plt.figure() ax = plt.gca() out_hist = plt.hist(grep_betas_NPs, bins=nbins, range=range_tuple, rwidth = 1, \ align='mid', alpha = 1, color = 'C0', edgecolor='k', normed = False, zorder=2, \ label='NP %d' % i) ax.axvline(beta_barra_mean_per_NP, ymin=0, ymax=1, color='C3', linestyle='--', linewidth=2, zorder=3) ax.fill_between([borders[0], borders[1]], [0, 0], [100, 100], facecolor='k', alpha=0.25, zorder=1) plt.legend() ax.set_ylim([0, 1.1 * np.max(out_hist[0])]) ax.set_xlim([39, 91]) ax.set_ylabel('Entries') ax.set_xlabel(r'$\bar{\beta}$ (K µm$^{2}$/mW)') aux_folder = manage_save_directory(path_from, 'stats') figure_name = '0_beta_mean_hist_NP_%02d_R2th_%s_%s_bines.png' % \ (num_NP, str(R2th), str(totalbins)) figure_name = os.path.join(aux_folder, figure_name) plt.savefig(figure_name, dpi=300, bbox_layout='tight') plt.close() # # FOR INSET ## range_tuple = [15,85] ## nbins = 15 # for i in range(number_of_NPs): # num_NP = int(unique_NPs[i]) # grep_NPs = np.where(list_of_col == num_NP)[0] # grep_betas_NPs = list_of_mean_beta[grep_NPs] # beta_mean_per_NP = np.nanmean(grep_betas_NPs) # betas_std_per_NP = np.nanstd(grep_betas_NPs, ddof = 1) # borders = [beta_mean_per_NP - betas_std_per_NP, beta_mean_per_NP + betas_std_per_NP] # plt.figure() # ax = plt.gca() # out_hist = plt.hist(grep_betas_NPs, bins=nbins, range=range_tuple, rwidth = 1, \ # align='mid', alpha = 1, color = 'C0', edgecolor='k', normed = False, zorder=2, \ # label='NP %d' % i) # ax.axvline(beta_mean_per_NP, ymin = 0, ymax = 1, color='C3', linestyle='--', linewidth=2, zorder=3) # ax.fill_between([borders[0], borders[1]], [0,0], [100,100], facecolor='k', alpha=0.25, zorder=1) # plt.legend() # ax.set_ylim([0, 1.1*np.max(out_hist[0])]) # ax.set_xlim([49, 81]) # ax.tick_params(axis='both', which='major', labelsize=25) # ax.set_ylabel('Entries', fontsize=24) # ax.set_xlabel(r'$\bar{beta}$ (K µm$^{2}$/mW)', fontsize=24) # aux_folder = manage_save_directory(path_from,'stats') # fig_name = '0_beta_mean_hist_NP_%02d_R2th_%s_%s_bines_%s_Tzero_PAPER_INSET' % \ # (num_NP, str(R2th), str(totalbins), str(Tzero)) # figurefull_name = '%s.png' % fig_name # figure_name = os.path.join(aux_folder, figurefull_name) # plt.savefig(figure_name, dpi = 300, bbox_layout = 'tight') # figurefull_name = '%s.pdf' % fig_name # figure_name = os.path.join(aux_folder, figurefull_name) # plt.savefig(figure_name, dpi = 300, bbox_layout = 'tight', format = 'pdf') # plt.close() ######################################## slope vs max lambda plt.figure() plt.plot(list_of_londa_max, list_of_mean_beta, 'o', alpha=0.5, label='All beta NPs') plt.legend() ax = plt.gca() ax.set_ylim([0, 100]) ax.set_xlim([530, 600]) ax.set_xlabel(r'Max PL wavelength (nm)') ax.set_ylabel(r'Photothermal coefficient (K µm$^{2}$/mW)') aux_folder = manage_save_directory(path_from, 'stats') figure_name = 'beta_vs_lambda_R2th_%s_%s_bines.png' % \ (str(R2th), str(totalbins)) figure_name = os.path.join(aux_folder, figure_name) plt.savefig(figure_name) plt.close() ######################################## power monitor vs slope, fake correlation plt.figure() plt.errorbar(list_of_avg_monitor, list_of_mean_beta, xerr = list_of_std_monitor, \ yerr = list_of_mean_beta_err, elinewidth=1, fmt='o', alpha=0.5, label='All NPs') plt.legend() ax = plt.gca() ax.set_ylim([0, 110]) ax.set_ylabel(r'Photothermal coefficient (K µm$^{2}$/mW)') ax.set_xlabel(r'Power monitor (a.u.)') aux_folder = manage_save_directory(path_from, 'stats') figure_name = os.path.join(aux_folder,'power_monitor_vs_slope_R2th_%s_%s_bines.png' % \ (str(R2th), str(totalbins))) plt.savefig(figure_name) plt.close() print( '\n-------- Stats using ALL beta barra bracket (one per NP, to find beta for a given system NP+medium) --------' ) number_of_beta_bb = len(list_of_beta_bb) print('Number of NPs measured: %d' % number_of_beta_bb) mu_beta_bb = np.mean(list_of_beta_bb) std_beta_bb = np.std(list_of_beta_bb, ddof=1) print('\nMean beta bb: %.3f' % mu_beta_bb, 'Std dev beta bb: %.3f' % std_beta_bb) # err_mu_beta_bb = np.sqrt(np.sum(beta_barra_mean_err_per_NP**2))/number_of_beta_bb # err_mu_beta_bb = np.sqrt(number_of_beta_bb) # beta_barra_std_per_NP # print('Error in mean beta bb: %.3f' % err_mu_slope) k_eff = sigma_abs / (4 * np.pi * radius * mu_beta_bb) print('\nEffective thermal conductivity: %.3f' % k_eff, 'W/Km') ######################################################################################################################## ######################################################################################################################## ######################################################################################################################## ######################################################################################################################## elif not find_beta and find_Tzero: ######################################## Tzero with errors vs NP plt.figure() plt.errorbar(list_of_nps, list_of_mean_beta, yerr=list_of_mean_beta_err, \ elinewidth=1, fmt='s', alpha=0.5, label='All Tzero NPs') plt.legend() ax = plt.gca() ax.set_ylim([0, 100]) ax.set_xlabel(r'Index') ax.set_ylabel(r'T$_{0}$ (K)') aux_folder = manage_save_directory(path_from, 'stats') figure_name = 'Tzero_vs_index_R2th_%s_%s_bines.png' % \ (str(R2th), str(totalbins)) figure_name = os.path.join(aux_folder, figure_name) plt.savefig(figure_name) plt.close() ######################################## Tzero vs NP plt.figure() plt.plot(list_of_col, list_of_mean_Tzero, 's', color='C1', label='All Tzero NPs') plt.legend() ax = plt.gca() ax.set_ylim([0, 100]) ax.set_xlabel(r'NP') ax.set_ylabel(r'T$_{0}$ (K)') aux_folder = manage_save_directory(path_from, 'stats') figure_name = 'Tzero_vs_NP_R2th_%s_%s_bines.png' % \ (str(R2th), str(totalbins)) figure_name = os.path.join(aux_folder, figure_name) plt.savefig(figure_name) plt.close() ######################################## hist Tzero per NP #### ALL NPs IN ONE (histogram of its repetition) unique_NPs = np.unique(list_of_col) number_of_NPs = len(unique_NPs) range_tuple = [280, 380] nbins = 16 if number_of_NPs != 1: fig, axs = plt.subplots(number_of_NPs, 1, gridspec_kw={ 'wspace': 0, 'hspace': 0 }) for i in range(number_of_NPs): num_NP = int(unique_NPs[i]) grep_NPs = np.where(list_of_col == num_NP)[0] grep_Tzero_NPs = list_of_mean_Tzero[grep_NPs] Tzero_mean_per_NP = np.mean(grep_Tzero_NPs) Tzero_std_per_NP = np.std(grep_Tzero_NPs, ddof=1) borders = [ Tzero_mean_per_NP + Tzero_std_per_NP, Tzero_mean_per_NP - Tzero_std_per_NP ] ax = axs[i] out_hist = ax.hist(grep_Tzero_NPs, bins=nbins, range=range_tuple, rwidth = 1, \ align='mid', alpha = 1, color = 'C0', edgecolor='k', normed = False, zorder=2, \ label='NP %d' % i) ax.axvline(Tzero_mean_per_NP, ymin=0, ymax=1, color='C3', linestyle='--', linewidth=2, zorder=3) ax.fill_between([borders[0], borders[1]], [0, 0], [1, 1], facecolor='k', alpha=0.25, zorder=1) ax.set_xlim([280, 380]) plt.legend() ax = plt.gca() ax.set_ylim([0, 1.1 * np.max(out_hist[0])]) ax.set_ylabel('Entries') ax.set_xlabel(u'T$_{0}$ (K)') aux_folder = manage_save_directory(path_from, 'stats') figure_name = 'Tzero_hist_per_NP_R2th_%s_%s_bines.png' % \ (str(R2th), str(totalbins)) figure_name = os.path.join(aux_folder, figure_name) plt.savefig(figure_name, dpi=300, bbox_layout='tight') plt.close() ####################################### hist BETA per NP #### one NP per plot (histogram of its repetition) print( '\n-------- Stats using matrix Tzero (not mean) for one NP --------' ) dict_file = os.path.join(path_from, 'stats', 'all_Tzero_good_data.pkl') with open(dict_file, 'rb') as f: list_of_Tzero_good_dict = pickle.load(f) dict_file = os.path.join(path_from, 'stats', 'all_Tzero_good_err_data.pkl') with open(dict_file, 'rb') as f: list_of_Tzero_good_err_dict = pickle.load(f) for i in range(number_of_NPs): list_of_Tzero_good_per_NP = np.array([]) list_of_Tzero_good_err_per_NP = np.array([]) num_NP = int(unique_NPs[i]) for key in list_of_Tzero_good_dict.keys(): col = int(key.split('_')[1]) # NP = int(key.split('_')[3]) if num_NP == col: # print(num_NP, col, NP) list_of_Tzero_good_per_NP = np.append( list_of_Tzero_good_dict[key], list_of_Tzero_good_per_NP) list_of_Tzero_good_err_per_NP = np.append( list_of_Tzero_good_err_dict[key], list_of_Tzero_good_err_per_NP) # print(list_of_Tzero_good_per_NP) # stats data_points = len(list_of_Tzero_good_per_NP) Tzero_mean_per_NP = np.mean(list_of_Tzero_good_per_NP) Tzero_std_per_NP = np.std(list_of_Tzero_good_per_NP, ddof=1) # Tzero_mean_err_per_NP = np.sqrt(np.sum(list_of_Tzero_good_err_per_NP**2))/data_points Tzero_mean_err_per_NP = Tzero_std_per_NP / np.sqrt(data_points) borders = [ Tzero_mean_per_NP - Tzero_std_per_NP, Tzero_mean_per_NP + Tzero_std_per_NP ] print('\nNP %02d' % num_NP) print('Data points: %d' % data_points) print('Mean Tzero: %.3f' % Tzero_mean_per_NP, 'Std dev Tzero: %.3f' % Tzero_std_per_NP) print('Error in mean Tzero (same sigma for all): %.3f' % Tzero_mean_err_per_NP) plt.figure() ax = plt.gca() out_hist = plt.hist(list_of_Tzero_good_per_NP, bins=nbins, range=range_tuple, rwidth = 1, \ align='mid', alpha = 1, color = 'C0', edgecolor='k', normed = False, zorder=2, \ label='NP %d' % i) ax.axvline(Tzero_mean_per_NP, ymin=0, ymax=1, color='C3', linestyle='--', linewidth=2, zorder=3) ax.fill_between([borders[0], borders[1]], [0, 0], [100, 100], facecolor='k', alpha=0.25, zorder=1) plt.legend() ax.set_ylim([0, 1.1 * np.max(out_hist[0])]) ax.set_xlim([280, 380]) ax.set_ylabel('Entries') ax.set_xlabel(u'T$_{0}$ (K)') aux_folder = manage_save_directory(path_from, 'stats') figure_name = 'Tzero_hist_NP_%02d_R2th_%s_%s_bines.png' % \ (num_NP, str(R2th), str(totalbins)) figure_name = os.path.join(aux_folder, figure_name) plt.savefig(figure_name, dpi=300, bbox_layout='tight') plt.close() print('\n-------- Stats using mean Tzero for one NP --------') # range_tuple = [15,85] # nbins = 15 list_of_Tzero_bb = [] list_of_Tzero_barra_std = [] list_of_Tzero_bb_err = [] for i in range(number_of_NPs): num_NP = int(unique_NPs[i]) # keep NP data (usually is all daata from one Col) grep_NPs = np.where(list_of_col == num_NP)[0] grep_Tzero_NPs = list_of_mean_Tzero[grep_NPs] grep_Tzero_err_NPs = list_of_mean_Tzero_err[grep_NPs] # stats data_points = len(grep_Tzero_NPs) Tzero_barra_mean_per_NP = np.mean(grep_Tzero_NPs) Tzero_barra_std_per_NP = np.std(grep_Tzero_NPs, ddof=1) Tzero_barra_mean_err_per_NP = np.sqrt(np.sum(grep_Tzero_err_NPs** 2)) / data_points borders = [ Tzero_barra_mean_per_NP - Tzero_barra_std_per_NP, Tzero_barra_mean_per_NP + Tzero_barra_std_per_NP ] print('\nNP %02d' % num_NP) print('Data points: %d' % data_points) print( 'Mean Tzero barra (Tzero bb): %.3f' % Tzero_barra_mean_per_NP, 'Std dev Tzero barra: %.3f' % Tzero_barra_std_per_NP) print('Error in mean Tzero barra (not same sigma): %.3f' % Tzero_barra_mean_err_per_NP) list_of_Tzero_bb.append(Tzero_barra_mean_per_NP) list_of_Tzero_barra_std.append(Tzero_barra_std_per_NP) list_of_Tzero_bb_err.append(Tzero_barra_mean_err_per_NP) plt.figure() ax = plt.gca() out_hist = plt.hist(grep_Tzero_NPs, bins=nbins, range=range_tuple, rwidth = 1, \ align='mid', alpha = 1, color = 'C0', edgecolor='k', normed = False, zorder=2, \ label='NP %d' % i) ax.axvline(Tzero_barra_mean_per_NP, ymin=0, ymax=1, color='C3', linestyle='--', linewidth=2, zorder=3) ax.fill_between([borders[0], borders[1]], [0, 0], [100, 100], facecolor='k', alpha=0.25, zorder=1) plt.legend() ax.set_ylim([0, 1.1 * np.max(out_hist[0])]) ax.set_xlim([280, 380]) ax.set_ylabel('Entries') ax.set_xlabel(u'T$_{0}$ (K)') aux_folder = manage_save_directory(path_from, 'stats') figure_name = 'Tzero_mean_hist_NP_%02d_R2th_%s_%s_bines.png' % \ (num_NP, str(R2th), str(totalbins)) figure_name = os.path.join(aux_folder, figure_name) plt.savefig(figure_name, dpi=300, bbox_layout='tight') plt.close() ######################################## Tzero vs max lambda plt.figure() plt.plot(list_of_londa_max, list_of_mean_Tzero, 'o', alpha=0.5, label='All Tzero NPs') plt.legend() ax = plt.gca() ax.set_ylim([250, 400]) ax.set_xlim([530, 600]) ax.set_xlabel(r'Max PL wavelength (nm)') ax.set_ylabel(r'T$_{0}$ (K)') aux_folder = manage_save_directory(path_from, 'stats') figure_name = 'Tzero_vs_lambda_R2th_%s_%s_bines.png' % \ (str(R2th), str(totalbins)) figure_name = os.path.join(aux_folder, figure_name) plt.savefig(figure_name) plt.close() ######################################## power monitor vs Tzero, fake correlation plt.figure() plt.errorbar(list_of_avg_monitor, list_of_mean_Tzero, xerr = list_of_std_monitor, \ yerr = list_of_mean_Tzero_err, elinewidth=1, fmt='o', alpha=0.5, label='All NPs') plt.legend() ax = plt.gca() ax.set_ylim([0, 110]) ax.set_ylabel(r'T$_{0}$ (K)') ax.set_xlabel(r'Power monitor (a.u.)') aux_folder = manage_save_directory(path_from, 'stats') figure_name = os.path.join(aux_folder,'power_monitor_vs_Tzero_R2th_%s_%s_bines.png' % \ (str(R2th), str(totalbins))) plt.savefig(figure_name) plt.close() print( '\n-------- Stats using ALL Tzero barra bracket (one per NP, to find Tzero for a given system NP+medium) --------' ) number_of_Tzero_bb = len(list_of_Tzero_bb) print('Number of NPs measured: %d' % number_of_Tzero_bb) mu_Tzero_bb = np.mean(list_of_Tzero_bb) std_Tzero_bb = np.std(list_of_Tzero_bb, ddof=1) print('\nMean Tzero bb: %.3f' % mu_Tzero_bb, 'Std dev Tzero bb: %.3f' % std_Tzero_bb) # err_mu_beta_bb = np.sqrt(np.sum(beta_barra_mean_err_per_NP**2))/number_of_beta_bb # err_mu_beta_bb = np.sqrt(number_of_beta_bb) # beta_barra_std_per_NP # print('Error in mean beta bb: %.3f' % err_mu_slope) ######################################################################################################################## ######################################################################################################################## ######################################################################################################################## ######################################################################################################################## ######################################## lambda max vs NP plt.figure() plt.plot(list_of_nps, list_of_londa_max, 'o') plt.legend() ax = plt.gca() ax.set_ylim([530, 600]) ax.set_xlabel(r'Index') ax.set_ylabel(r'Max PL wavelength (nm)') ax.axvline(9.5, ymin=0, ymax=1, color='k', alpha=0.5, linestyle='--') ax.axvline(19.5, ymin=0, ymax=1, color='k', alpha=0.5, linestyle='--') ax.axvline(29.5, ymin=0, ymax=1, color='k', alpha=0.5, linestyle='--') ax.axvline(39.5, ymin=0, ymax=1, color='k', alpha=0.5, linestyle='--') ax.axvline(49.5, ymin=0, ymax=1, color='k', alpha=0.5, linestyle='--') ax.axvline(59.5, ymin=0, ymax=1, color='k', alpha=0.5, linestyle='--') ax.axvline(69.5, ymin=0, ymax=1, color='k', alpha=0.5, linestyle='--') ax.axvline(79.5, ymin=0, ymax=1, color='k', alpha=0.5, linestyle='--') ax.axvline(89.5, ymin=0, ymax=1, color='k', alpha=0.5, linestyle='--') aux_folder = manage_save_directory(path_from, 'stats') figure_name = os.path.join(aux_folder,'max_lambda_vs_index_R2th_%s_%s_bines.png' % \ (str(R2th), str(totalbins))) plt.savefig(figure_name) plt.close() ######################################## power monitor vs NP plt.figure() plt.errorbar(list_of_nps, list_of_avg_monitor, yerr = list_of_std_monitor, \ elinewidth=1, fmt='o', alpha=0.5, label='All NPs') plt.legend() ax = plt.gca() ax.set_ylim([0.1, 0.2]) ax.set_xlabel(r'Index') ax.set_ylabel(r'Power monitor (a.u.)') ax.axvline(9.5, ymin=0, ymax=1, color='k', alpha=0.5, linestyle='--') ax.axvline(19.5, ymin=0, ymax=1, color='k', alpha=0.5, linestyle='--') ax.axvline(29.5, ymin=0, ymax=1, color='k', alpha=0.5, linestyle='--') ax.axvline(39.5, ymin=0, ymax=1, color='k', alpha=0.5, linestyle='--') ax.axvline(49.5, ymin=0, ymax=1, color='k', alpha=0.5, linestyle='--') ax.axvline(59.5, ymin=0, ymax=1, color='k', alpha=0.5, linestyle='--') ax.axvline(69.5, ymin=0, ymax=1, color='k', alpha=0.5, linestyle='--') ax.axvline(79.5, ymin=0, ymax=1, color='k', alpha=0.5, linestyle='--') ax.axvline(89.5, ymin=0, ymax=1, color='k', alpha=0.5, linestyle='--') aux_folder = manage_save_directory(path_from, 'stats') figure_name = os.path.join(aux_folder,'power_monitor_vs_index_R2th_%s_%s_bines.png' % \ (str(R2th), str(totalbins))) plt.savefig(figure_name) plt.close() ######################################## ######################################## ######################################## return