np.set_printoptions(threshold=np.nan) # print entire matrices import pandas as pd from tqdm import * # Import custom functions ------------------------------------- sys.path.append('../../scripts/') import bicorr as bicorr import bicorr_math as bicorr_math import bicorr_plot as bicorr_plot import bicorr_e as bicorr_e import bicorr_sums as bicorr_sums # Load data- experimental setup ------------------------------- det_df = bicorr.load_det_df('../../meas_info/det_df_pairs_angles.csv') chList, fcList, detList, num_dets, num_det_pairs = bicorr.build_ch_lists() dict_pair_to_index, dict_index_to_pair, dict_pair_to_angle = bicorr.build_dict_det_pair(det_df) # Load data- singles and bicorr histograms singles_hist_e_n, e_bin_edges, dict_det_to_index, dict_index_to_det = bicorr_e.load_singles_hist_both(filepath = 'datap/',plot_flag=True, save_flag=True) bhm_e, e_bin_edges, note = bicorr_e.load_bhm_e('datap') # Set up analysis parameters e_slices = list(np.arange(1,6,.5)) e_slice_width = 0.1 print(e_slices) th_bin_edges = np.arange(10.01,181,10) th_bin_centers = bicorr_math.calc_centers(th_bin_edges) print(th_bin_edges)
def build_bhm_both_sim(bicorr_path, bicorr_filenames, det_df=None, dt_bin_edges=None, dict_det_dist=None, e_bin_edges=None, checkpoint_flag=True, save_flag=True, sparse_filename='sparse_bhm', bhm_e_filename='bhm_e', disable_tqdm=False, print_flag=True, return_flag=False): """ Load bicorr_data specified by name. Built for e_bin_edges generated using default settings in bicorr.build_energy_bin_edges(). Parameters ---------- bicorr_path : str, optional Full path of bicorr file, NOT including filename bicorr_filenames : str, optional Filenames If just one, put in brackets: [filename] det_df : pandas dataFrame, optional dataFrame of detector pair indices and angles Default is to look for the file in '../meas_info/det_df_pairs_angles.csv' dt_bin_edges : ndarray, optional Edges of time bin array in ns If None, use default settings from build_dt_bin_edges() dict_det_dist : dict Dictionary of detector channel number : distance from fc Default is to look for the file in '../meas_info/detector_distances.xlsx' e_bin_edges : ndarray, optional Edges of energy bin array in MeV If None, use default settings from build_energy_bin_edges() checkpoint_flag : bool, optional Generate checkpoint plots? save_flag : bool, optional Save sparse matrix to disk? sparse_filename : str, optional Filename for sparse matrix bhm_e_filename : str, optional Filename for bhm_e array disable_tqdm : bool, optional Flag to disable tqdm progress bar print_flag : bool, optional Print status updates along the way? return_flag : bool, optional Option to return bhm_e and e_bin_edges. Otherwise, return nothing. Returns ------- bhm : ndarray Master histogram of bicorrelation histograms across all detector pairs and interaction types. Dimension 0: detector pair, use dictionary `dict_pair_to_index` where pair is (100*det1ch+det2ch) Dimension 1: interaction type, length 4. (0=nn, 1=np, 2=pn, 3=pp) Dimension 2: dt bin for detector 1 Dimension 3: dt bin for detector 2 dt_bin_edges : ndarray One-dimensional array of time bin edges bhm_e : ndarray Master histogram of bicorrelation events in energy space. Dimension 0: detector pair, use dictionary 'dict_pair_to_index', where pair is (100*det1ch+det2ch) Dimension 1: interaction type, length 1. Only storing 0=nn. Dimension 2: e bin for detector 1 Dimension 3: e bin for detector 2 e_bin_edges : ndarray One-dimensional array of energy bin edges """ # Load det_df, dict_det_dist if not provided if det_df is None: det_df = bicorr.load_det_df() if dict_det_dist is None: dict_det_dist = bicorr.build_dict_det_dist() # Handle dt_bin_edges if dt_bin_edges is None: # Use default settings dt_bin_edges, num_dt_bins = bicorr.build_dt_bin_edges(dt_min=0) else: num_dt_bins = len(dt_bin_edges) - 1 # Handle e_bin_edges if e_bin_edges is None: # Use default settings e_bin_edges, num_e_bins = bicorr_e.build_energy_bin_edges() else: num_e_bins = len(e_bin_edges) - 1 # Set up binning num_det_pairs = len(det_df) # Create bhm, empty- all event types bhm = bicorr.alloc_bhm(num_det_pairs, 4, num_dt_bins) # Create bhm_e, empty- nn only bhm_e = bicorr_e.alloc_bhm_e(num_det_pairs, 1, num_e_bins) for bicorr_filename in bicorr_filenames: # Set up bicorr file full path bicorr_path_full = os.path.join(bicorr_path, bicorr_filename) # File to process (not going through folders) if print_flag: print('Generating bicorr histograms for bicorr data in file: ', bicorr_path_full) # Load files, fill the histograms if print_flag: print('Loading data in file ', bicorr_path_full) bicorr_data = bicorr.load_bicorr(bicorr_path=bicorr_path_full) if checkpoint_flag: fig_folder = os.path.join(bicorr_path, 'fig') bicorr_plot.bicorr_checkpoint_plots(bicorr_data, fig_folder=fig_folder, show_flag=False) if print_flag: print('Building bhms in ', bicorr_path) bhm = bicorr.fill_bhm(bhm, bicorr_data, det_df, dt_bin_edges, disable_tqdm=disable_tqdm) bhm_e = bicorr_e.fill_bhm_e(bhm_e, bicorr_data, det_df, dict_det_dist, e_bin_edges, disable_tqdm=False) if save_flag: # bhm: Generate sparse matrix if print_flag: print('Generating sparse matrix') sparse_bhm = bicorr.generate_sparse_bhm(bhm, disable_tqdm=disable_tqdm) if print_flag: print('Saving sparse matrix data to .npz file') bicorr.save_sparse_bhm(sparse_bhm, dt_bin_edges, save_folder=bicorr_path) # bhm_e: store npz if print_flag: print('Saving bhm_e to .npz file') note = 'bhm_e generated for file'.format(bicorr_path) bicorr_e.save_bhm_e(bhm_e, e_bin_edges, save_folder=bicorr_path, note='Original file: ' + bicorr_filename) if print_flag: print('Bicorr hist master bhm, bhm_e build complete') if return_flag: return bhm, dt_bin_edges, bhm_e, e_bin_edges
def build_bhm_both(folder_start=1, folder_end=2, det_df=None, dt_bin_edges=None, dict_det_dist=None, e_bin_edges=None, checkpoint_flag=True, save_flag=True, sparse_filename='sparse_bhm', bhm_e_filename='bhm_e', root_path=None, disable_tqdm=False, print_flag=True, return_flag=False): """ Load bicorr_data from folder's bicorr# file and fill energy histogram. Loop through folders specified by `folder_start` and `folder_end`. Built for e_bin_edges generated using default settings in bicorr.build_energy_bin_edges(). Parameters ---------- folder_start : int, optional First folder folder_end : int, optional Last folder + 1 (for example, folder_end = 2 will end at folder 1) det_df : pandas dataFrame, optional dataFrame of detector pair indices and angles Default is to look for the file in '../meas_info/det_df_pairs_angles.csv' dt_bin_edges : ndarray, optional Edges of time bin array in ns If None, use default settings from build_dt_bin_edges() dict_det_dist : dict Dictionary of detector channel number : distance from fc Default is to look for the file in '../meas_info/detector_distances.xlsx' e_bin_edges : ndarray, optional Edges of energy bin array in MeV If None, use default settings from build_energy_bin_edges() checkpoint_flag : bool, optional Generate checkpoint plots? save_flag : bool, optional Save sparse matrix to disk? sparse_filename : str, optional Filename for sparse matrix bhm_e_filename : str, optional Filename for bhm_e array root_path : int, optional Relative path to folder where data folders exist (1, 2, 3, etc.). default = cwd disable_tqdm : bool, optional Flag to disable tqdm progress bar print_flag : bool, optional Print status updates along the way? return_flag : bool, optional Option to return bhm_e and e_bin_edges. Otherwise, return nothing. Returns ------- bhm : ndarray Master histogram of bicorrelation histograms across all detector pairs and interaction types. Dimension 0: detector pair, use dictionary `dict_pair_to_index` where pair is (100*det1ch+det2ch) Dimension 1: interaction type, length 4. (0=nn, 1=np, 2=pn, 3=pp) Dimension 2: dt bin for detector 1 Dimension 3: dt bin for detector 2 dt_bin_edges : ndarray One-dimensional array of time bin edges bhm_e : ndarray Master histogram of bicorrelation events in energy space. Dimension 0: detector pair, use dictionary 'dict_pair_to_index', where pair is (100*det1ch+det2ch) Dimension 1: interaction type, length 1. Only storing 0=nn. Dimension 2: e bin for detector 1 Dimension 3: e bin for detector 2 e_bin_edges : ndarray One-dimensional array of energy bin edges """ # Load det_df, dict_det_dist if not provided if det_df is None: det_df = bicorr.load_det_df() if dict_det_dist is None: dict_det_dist = bicorr.build_dict_det_dist() # If no data path provided, look for data folders here if root_path is None: root_path = os.getcwd() # Folders to run folders = np.arange(folder_start, folder_end, 1) if print_flag: print('Generating bicorr histograms for bicorr data in folders: ', folders) # Handle dt_bin_edges if dt_bin_edges is None: # Use default settings dt_bin_edges, num_dt_bins = bicorr.build_dt_bin_edges() else: num_dt_bins = len(dt_bin_edges) - 1 # Handle e_bin_edges if e_bin_edges is None: # Use default settings e_bin_edges, num_e_bins = build_energy_bin_edges() else: num_e_bins = len(e_bin_edges) - 1 # Set up binning num_det_pairs = len(det_df) # Create bhm, empty- all event types bhm = bicorr.alloc_bhm(num_det_pairs, 4, num_dt_bins) # Create bhm_e, empty- nn only bhm_e = alloc_bhm_e(num_det_pairs, 1, num_e_bins) # Loop through each folder and fill the histogram for folder in folders: if print_flag: print('Loading data in folder ', folder) bicorr_data = bicorr.load_bicorr(folder, root_path=root_path) if checkpoint_flag: fig_folder = os.path.join(root_path + '/' + str(folder) + '/fig') bicorr_plot.bicorr_checkpoint_plots(bicorr_data, fig_folder=fig_folder, show_flag=False) if print_flag: print('Building bhms in folder ', folder) bhm = bicorr.fill_bhm(bhm, bicorr_data, det_df, dt_bin_edges, disable_tqdm=disable_tqdm) bhm_e = fill_bhm_e(bhm_e, bicorr_data, det_df, dict_det_dist, e_bin_edges, disable_tqdm=False) if save_flag: # bhm: Generate sparse matrix if print_flag: print('Generating sparse matrix') sparse_bhm = bicorr.generate_sparse_bhm(bhm, disable_tqdm=disable_tqdm) if print_flag: print('Saving sparse matrix data to .npz file') bicorr.save_sparse_bhm(sparse_bhm, dt_bin_edges, save_folder=root_path, sparse_filename=sparse_filename) # bhm_e: store npz if print_flag: print('Saving bhm_e to .npz file') note = 'bhm_e generated from folder {} to {} in directory {}'.format( folder_start, folder_end, os.getcwd()) save_bhm_e(bhm_e, e_bin_edges, bhm_e_filename=bhm_e_filename, note=note) if print_flag: print('Bicorr hist master bhm_e build complete') if return_flag: return bhm, dt_bin_edges, bhm_e, e_bin_edges