def test_sensitivity(): from lstchain.mc.sensitivity import find_best_cuts_sensitivity, sensitivity produce_fake_dl2_proton_file(dl2_file) nfiles_gammas = 1 nfiles_protons = 1 eb = 10 # Number of energy bins gb = 11 # Number of gammaness bins tb = 10 # Number of theta2 bins obstime = 50 * 3600 * u.s noff = 2 E, best_sens, result, units, gcut, tcut = find_best_cuts_sensitivity(dl1_file, dl1_file, dl2_file, fake_dl2_proton_file, 1, 1, eb, gb, tb, noff, obstime) E, best_sens, result, units, dl2 = sensitivity(dl1_file, dl1_file, dl2_file, fake_dl2_proton_file, 1, 1, eb, gcut, tcut * (u.deg ** 2), noff, obstime)
def main(): ntelescopes_gamma = 4 ntelescopes_protons = 4 n_bins_energy = 20 # Number of energy bins n_bins_gammaness = 11 # Number of gammaness bins n_bins_theta2 = 10 # Number of theta2 bins obstime = 50 * 3600 * u.s noff = 5 energy, best_sens, result, units, gcut, tcut = find_best_cuts_sensitivity( args.dl1file_gammas, args.dl1file_protons, args.dl2_file_g_cuts, args.dl2_file_p_cuts, ntelescopes_gamma, ntelescopes_protons, n_bins_energy, n_bins_gammaness, n_bins_theta2, noff, obstime) # For testing using fixed cuts # gcut = np.ones(eb) * 0.8 # tcut = np.ones(eb) * 0.01 energy, best_sens, result, units, dl2 = sensitivity( args.dl1file_gammas, args.dl1file_protons, args.dl2_file_g_sens, args.dl2_file_p_sens, 1, 1, 20, gcut, tcut * (u.deg**2), noff, obstime) dl2.to_hdf('test_sens.h5', key='data') result.to_hdf('test_sens.h5', key='results') tab = Table.from_pandas(result) for i, key in enumerate(tab.columns.keys()): tab[key].unit = units[i] if key == 'sensitivity': continue tab[key].format = '8f' egeom = np.sqrt(energy[1:] * energy[:-1]) plt.plot(egeom[:-1], tab['hadron_rate'], label='Hadron rate', marker='o') plt.plot(egeom[:-1], tab['gamma_rate'], label='Gamma rate', marker='o') plt.legend() plt.xscale('log') plt.xlabel('Energy (GeV)') plt.ylabel('events / min') plt.show() gammas_mc = dl2[dl2.mc_type == 0] protons_mc = dl2[dl2.mc_type == 101] sns.distplot(gammas_mc.gammaness, label='gammas') sns.distplot(protons_mc.gammaness, label='protons') plt.legend() plt.tight_layout() plt.show() sns.distplot(gammas_mc.mc_energy, label='gammas') sns.distplot(protons_mc.mc_energy, label='protons') plt.legend() plt.tight_layout() plt.show() sns.distplot(gammas_mc.reco_energy.apply(np.log10), label='gammas') sns.distplot(protons_mc.reco_energy.apply(np.log10), label='protons') plt.legend() plt.tight_layout() plt.show() ctaplot.plot_theta2(gammas_mc.reco_alt, gammas_mc.reco_az, gammas_mc.mc_alt, gammas_mc.mc_az, range=(0, 1), bins=100) plt.show() plt.figure(figsize=(12, 8)) ctaplot.plot_angular_res_per_energy( gammas_mc.reco_alt, gammas_mc.reco_az, gammas_mc.mc_alt, gammas_mc.mc_az, 10**(gammas_mc.reco_energy - 3), ) ctaplot.plot_angular_res_cta_requirements('north', color='black') plt.legend() plt.tight_layout() plt.show() plt.figure(figsize=(12, 8)) ctaplot.plot_energy_resolution(gammas_mc.mc_energy, gammas_mc.reco_energy) ctaplot.plot_energy_resolution_cta_requirements('north', color='black') plt.legend() plt.tight_layout() plt.show() ctaplot.plot_energy_resolution(gammas_mc.mc_energy, gammas_mc.reco_energy) ctaplot.plot_energy_bias(10**(gammas_mc.mc_energy - 3), 10**(gammas_mc.reco_energy - 3)) plt.show() gamma_ps_simu_info = read_simu_info_merged_hdf5(args.dl1file_gammas) emin = gamma_ps_simu_info.energy_range_min.value emax = gamma_ps_simu_info.energy_range_max.value total_number_of_events = gamma_ps_simu_info.num_showers * gamma_ps_simu_info.shower_reuse spectral_index = gamma_ps_simu_info.spectral_index area = (gamma_ps_simu_info.max_scatter_range.value - gamma_ps_simu_info.min_scatter_range.value)**2 * np.pi ctaplot.plot_effective_area_per_energy_power_law( emin, emax, total_number_of_events, spectral_index, 10**(gammas_mc.reco_energy - 3)[gammas_mc.tel_id == 1], area, label='selected gammas', linestyle='--') ctaplot.plot_effective_area_cta_requirements('north', color='black') plt.legend() plt.tight_layout() plt.show()
def main(): ntelescopes_gamma = 4 ntelescopes_protons = 1 n_bins_energy = 20 # Number of energy bins n_bins_gammaness = 10 # Number of gammaness bins n_bins_theta2 = 10 # Number of theta2 bins obstime = 50 * 3600 * u.s noff = 5 # Finds the best cuts for the computation of the sensitivity '''energy, best_sens, result, units, gcut, tcut = find_best_cuts_sensitivity(args.dl1file_gammas, args.dl1file_protons, args.dl2_file_g_sens, args.dl2_file_p_sens, ntelescopes_gamma, ntelescopes_protons, n_bins_energy, n_bins_gammaness, n_bins_theta2, noff, obstime) ''' #For testing using fixed cuts gcut = np.ones(n_bins_energy) * 0.8 tcut = np.ones(n_bins_energy) * 0.01 print("\nApplying optimal gammaness cuts:", gcut) print("Applying optimal theta2 cuts: {} \n".format(tcut)) # Computes the sensitivity energy, best_sens, result, units, dl2 = sensitivity( args.dl1file_gammas, args.dl1file_protons, args.dl2_file_g_cuts, args.dl2_file_p_cuts, 1, 1, n_bins_energy, gcut, tcut * (u.deg**2), noff, obstime) egeom = np.sqrt(energy[1:] * energy[:-1]) dFdE, par = crab_hegra(egeom) sensitivity_flux = best_sens / 100 * (dFdE * egeom * egeom).to( u.erg / (u.cm**2 * u.s)) # Saves the results dl2.to_hdf('test_sens.h5', key='data') result.to_hdf('test_sens.h5', key='results') tab = Table.from_pandas(result) for i, key in enumerate(tab.columns.keys()): tab[key].unit = units[i] if key == 'sensitivity': continue tab[key].format = '8f' # Plots plt.figure(figsize=(12, 8)) plt.plot(egeom[:-1], tab['hadron_rate'], label='Hadron rate', marker='o') plt.plot(egeom[:-1], tab['gamma_rate'], label='Gamma rate', marker='o') plt.legend() plt.xscale('log') plt.xlabel('Energy (TeV)') plt.ylabel('events / min') plt.show() plt.savefig("rates.png") plt.figure(figsize=(12, 8)) gammas_mc = dl2[dl2.mc_type == 0] protons_mc = dl2[dl2.mc_type == 101] sns.distplot(gammas_mc.gammaness, label='gammas') sns.distplot(protons_mc.gammaness, label='protons') plt.legend() plt.tight_layout() plt.show() plt.savefig("distplot_gammaness.png") plt.figure(figsize=(12, 8)) sns.distplot(gammas_mc.mc_energy, label='gammas') sns.distplot(protons_mc.mc_energy, label='protons') plt.legend() plt.tight_layout() plt.show() plt.savefig("distplot_mc_energy.png") plt.figure(figsize=(12, 8)) sns.distplot(gammas_mc.reco_energy.apply(np.log10), label='gammas') sns.distplot(protons_mc.reco_energy.apply(np.log10), label='protons') plt.legend() plt.tight_layout() plt.show() plt.savefig("distplot_energy_apply.png") plt.figure(figsize=(12, 8)) ctaplot.plot_theta2(gammas_mc.reco_alt, gammas_mc.reco_az, gammas_mc.mc_alt, gammas_mc.mc_az, range=(0, 1), bins=100) plt.show() plt.savefig("theta2.png") plt.figure(figsize=(12, 8)) ctaplot.plot_angular_resolution_per_energy(gammas_mc.reco_alt, gammas_mc.reco_az, gammas_mc.mc_alt, gammas_mc.mc_az, gammas_mc.reco_energy) ctaplot.plot_angular_resolution_cta_requirement('north', color='black') plt.legend() plt.tight_layout() plt.show() plt.savefig("angular_resolution.png") plt.figure(figsize=(12, 8)) ctaplot.plot_energy_resolution(gammas_mc.mc_energy, gammas_mc.reco_energy) ctaplot.plot_energy_resolution_cta_requirement('north', color='black') plt.legend() plt.tight_layout() plt.show() plt.savefig("effective_area.png") plt.figure(figsize=(12, 8)) ctaplot.plot_energy_bias(gammas_mc.mc_energy, gammas_mc.reco_energy) plt.show() plt.savefig("energy_bias.png") plt.figure(figsize=(12, 8)) gamma_ps_simu_info = read_simu_info_merged_hdf5(args.dl1file_gammas) emin = gamma_ps_simu_info.energy_range_min.value emax = gamma_ps_simu_info.energy_range_max.value total_number_of_events = gamma_ps_simu_info.num_showers * gamma_ps_simu_info.shower_reuse spectral_index = gamma_ps_simu_info.spectral_index area = (gamma_ps_simu_info.max_scatter_range.value - gamma_ps_simu_info.min_scatter_range.value)**2 * np.pi ctaplot.plot_effective_area_per_energy_power_law( emin, emax, total_number_of_events, spectral_index, gammas_mc.reco_energy[gammas_mc.tel_id == 1], area, label='selected gammas', linestyle='--') ctaplot.plot_effective_area_cta_requirement('north', color='black') plt.ylim([2 * 10**3, 10**6]) plt.legend() plt.tight_layout() plt.show() plt.savefig("effective_area.png") plt.figure(figsize=(12, 8)) plt.plot(energy[0:len(sensitivity_flux)], sensitivity_flux, '-', color='red', markersize=0, label='LST mono') plt.xscale('log') plt.yscale('log') plt.ylabel('$\mathsf{E^2 F \; [erg \, cm^{-2} s^{-1}]}$', fontsize=16) plt.xlabel('E [TeV]') plt.xlim([10**-2, 100]) plt.ylim([10**-14, 10**-9]) plt.tight_layout() plt.savefig('sensitivity.png') plt.figure(figsize=(12, 8)) ctaplot.plot_energy_resolution(gammas_mc.mc_energy, gammas_mc.reco_energy, percentile=68.27, confidence_level=0.95, bias_correction=False) ctaplot.plot_energy_resolution_cta_requirement('north', color='black') plt.xscale('log') plt.ylabel('\u0394 E/E 68\%') plt.xlabel('E [TeV]') plt.xlim([10**-2, 100]) plt.ylim([0.08, 0.48]) plt.tight_layout() plt.savefig('energy_resolution.png', dpi=100)