diff --git a/src/km3irf/build_aeff.py b/src/km3irf/build_aeff.py new file mode 100644 index 0000000000000000000000000000000000000000..98175012f42c5f978361dacbfe4e5a767fa00961 --- /dev/null +++ b/src/km3irf/build_aeff.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +import numpy as np +import awkward as ak +import pandas as pd +import uproot as ur +from km3io import OfflineReader + +import matplotlib.pyplot as plt +from matplotlib.colors import LogNorm + +from astropy.io import fits +import astropy.units as u + +# from gammapy.irf import EnergyDispersion2D + +from scipy.stats import binned_statistic +# from scipy.ndimage import gaussian_filter1d, gaussian_filter + + + +# from collections import defaultdict + +# import sys +# sys.path.append('../') +# from python_scripts.irf_utils import aeff_2D, psf_3D +# from python_scripts.func import get_cut_mask +# from python_scripts.func import WriteAeff +# from python_scripts.func import WritePSF + +def build_aeff( + input=(file_nu, file_nubar), + no_bdt=False, + cuts=False, + power_degree=-2.5 + ): + """ + Create Aeff .fits from dist files + + input: a tuple with pathes to nu_dst file and nubar_dst file + + no_bdt: include or exclude bdt, default False + + cuts: apply cuts, default False + + power_degree: re-weight data, default value -2.5 + + """ + + #Read data files using km3io + f_nu_km3io = OfflineReader(input[0]) + f_nubar_km3io = OfflineReader(input[1]) + + #Read data files using uproot + f_nu_uproot = ur.open(input[0]) + f_nubar_uproot = ur.open(input[1]) + + +def unpack_data(no_bdt): + """ + some words + + return tuple with two pandas data frames (nu, nubar) + """ + # Access data arrays + data_km3io = dict() + + for l,f in zip(['nu', 'nubar'], [f_nu_km3io, f_nubar_km3io]): + data_km3io[l] = dict() + + data_km3io[l]['E'] = f.tracks.E[:,0] + data_km3io[l]['dir_x'] = f.tracks.dir_x[:,0] + data_km3io[l]['dir_y'] = f.tracks.dir_y[:,0] + data_km3io[l]['dir_z'] = f.tracks.dir_z[:,0] + + data_km3io[l]['energy_mc'] = f.mc_tracks.E[:,0] + data_km3io[l]['dir_x_mc'] = f.mc_tracks.dir_x[:,0] + data_km3io[l]['dir_y_mc'] = f.mc_tracks.dir_y[:,0] + data_km3io[l]['dir_z_mc'] = f.mc_tracks.dir_z[:,0] + + data_km3io[l]['weight_w2'] = f.w[:,1] + + + #extracting bdt information + if not no_bdt: + for l,f in zip(['nu', 'nubar'], [f_nu_uproot, f_nubar_uproot]): + T = f['T;1'] + bdt = T['bdt'].array() + data_km3io[l]['bdt0'] = bdt[:,0] + data_km3io[l]['bdt1'] = bdt[:,1] + + # create Data Frames + df_nu = pd.DataFrame(data_km3io['nu']) + df_nubar = pd.DataFrame(data_km3io['nubar']) + + data_tuple = (df_nu, df_nubar) + + return data_tuple \ No newline at end of file diff --git a/src/km3irf/utils.py b/src/km3irf/utils.py index 525d49319d758bedb56fea857d337a30a4d42518..7a0d6978499a087455680102ea8927de06f2f8eb 100644 --- a/src/km3irf/utils.py +++ b/src/km3irf/utils.py @@ -30,9 +30,13 @@ def merge_fits( Merge separated fits files into one, which can be used in gammapy aeff_fits: path to Aeff .fits file + psf_fits: path to PSF .fits file + edisp_fits: path to Edisp .fits file + bkg_fits: path to Background .fits file + output_file: name of the merged .fits file in data foledr of the package """ hdu_list = []