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)
示例#2
0
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
示例#3
0
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