Пример #1
0
def make_particle_mask(db, ids, particle, multiprocess=True):

    # find the particle code to make mask for
    particle_code = get_particle_code(particle)

    # Split the candidates into chunks for multiprocessing
    if multiprocess:
        ids_chunked = np.array_split(ids, AVAILABLE_CORES)
        packed = make_multiprocess_pack(ids_chunked, db, particle_code)
        with Pool(AVAILABLE_CORES) as p:
            accepted_lists = p.map(find_particles, packed)

        # Combine again
        mask = sorted(flatten_list_of_lists(accepted_lists))
        # x = np.arange(len(mask))
        # d = {'x': [x], 'y': [mask]}
        # d['savefig'] = get_project_root()+'/MASK'+str(len(mask))+'_TESTLOL.png'
        # _ = make_plot(d)
    else:
        raise ValueError(
            'make_particle_mask: Only multiprocessing solution implemented')

    mask_name = particle

    return mask, mask_name
Пример #2
0
def assign_energy_weights_multiprocess(
    ids, 
    db, 
    interpolator_quadratic, 
    true_key=['true_primary_energy'], 
    debug=False
    ):
    
    # Create packs - loop over all events
    n_chunks = len(ids)//AVAILABLE_CORES
    chunks = np.array_split(ids, n_chunks)
    packed = make_multiprocess_pack(
        chunks, interpolator_quadratic, true_key, db
    )

    # Multiprocess and recombine
    with Pool(AVAILABLE_CORES) as p:
        weights = p.map(calc_weights_multiprocess, packed)
    weights_combined = flatten_list_of_lists(weights)
    
    # # Make a dictionary with weights - put nan where mask didn't apply
    # event_ids = db.ids
    # all_weights_dict = {str(event_id): np.nan for event_id in event_ids}
    # weights_dict = {
    #     str(event_id): weight for event_id, weight in zip(ids, weights_combined)
    # }
    # all_weights_dict.update(weights_dict)
    
    return weights_combined
Пример #3
0
def make_dom_interval_mask(db,
                           ids,
                           min_doms,
                           max_doms,
                           multiprocess=True,
                           dom_mask='SplitInIcePulses'):

    # Split the candidates into chunks for multiprocessing
    if multiprocess:
        ids_chunked = np.array_split(ids, AVAILABLE_CORES)
        packed = make_multiprocess_pack(ids_chunked, db, min_doms, max_doms,
                                        dom_mask)

        with Pool(AVAILABLE_CORES) as p:
            accepted_lists = p.map(find_dom_interval_passed_cands, packed)

        # Combine again
        mask = sorted(flatten_list_of_lists(accepted_lists))

    else:
        raise ValueError(
            'make_dom_interval_mask: Only multiprocessing solution implemented'
        )

    # save it
    mask_name = 'dom_interval_%s_min%d_max%d' % (dom_mask, min_doms, max_doms)

    return mask, mask_name
Пример #4
0
def make_energy_interval_mask(db,
                              ids,
                              min_energy,
                              max_energy,
                              multiprocess=True):

    # Split the candidates into chunks for multiprocessing
    if multiprocess:
        ids_chunked = np.array_split(ids, AVAILABLE_CORES)
        packed = make_multiprocess_pack(ids_chunked, db, min_energy,
                                        max_energy)

        with Pool(AVAILABLE_CORES) as p:
            accepted_lists = p.map(find_energy_interval_passed_cands, packed)

        # Combine again
        mask = sorted(flatten_list_of_lists(accepted_lists))

    else:
        raise ValueError(
            'make_energy_interval_mask: Only multiprocessing solution implemented'
        )
    print(len(mask) / len(ids))

    # save it
    mask_name = 'energy_interval_min%.1f_max%.1f' % (min_energy, max_energy)

    return mask, mask_name
Пример #5
0
def assign_energy_weights_multiprocess(masks,
                                       dataset_path,
                                       interpolator_quadratic,
                                       true_key='true_primary_energy',
                                       debug=False):
    available_cores = cpu_count()
    n_tot = get_n_tot_pickles(dataset_path)

    # * Create packs - loop over all events
    # * Get mask

    mask_all = np.array(load_pickle_mask(dataset_path, masks))
    if debug:
        mask_all = mask_all[:1000]
    chunks = np.array_split(mask_all, available_cores)
    interpolator_list = [interpolator_quadratic] * len(chunks)
    keys_list = [true_key] * len(chunks)
    paths = [dataset_path] * len(chunks)
    n_per_dir_list = [get_n_events_per_dir(dataset_path)] * len(chunks)
    subprocess_id = list(range(available_cores))
    packed = zip(chunks, interpolator_list, keys_list, paths, n_per_dir_list,
                 subprocess_id)

    # * Multiprocess and recombine
    with Pool(available_cores) as p:
        weights = p.map(calc_weights_multiprocess, packed)
    weights_combined = flatten_list_of_lists(weights)

    # * Make a list of weights - put nan where mask didn't apply
    weights_list = np.array([np.nan] * n_tot)
    weights_list[mask_all] = np.array(weights_combined)

    return weights_list
Пример #6
0
def make_particle_mask(data_path, dirs, particle, multiprocess=True):
    
    particle_code = get_particle_code(particle)

    # * Split the candidates into chunks for multiprocessing
    if multiprocess:
        available_cores = cpu_count()
        dirs_chunked = np.array_split(dirs, available_cores)
        particle_codes = [particle_code]*len(dirs_chunked)
        packed = zip(dirs_chunked, particle_codes)
        
        with Pool(available_cores) as p:
            accepted_lists = p.map(find_particles, packed)
        
        # * Combine again
        mask = sorted(flatten_list_of_lists(accepted_lists))

    else:
        raise ValueError('make_particle_mask: Only multiprocessing solution implemented')
    
    # * save it
    mask_path = data_path+'/masks/%s.pickle'%(particle)
    pickle.dump(mask, open(mask_path, 'wb'))
    
    return mask_path
Пример #7
0
def make_dom_interval_mask(data_path, dirs, min_doms, max_doms, multiprocess=True, dom_mask='SplitInIcePulses'):
    
    # * Split the candidates into chunks for multiprocessing
    if multiprocess:
        available_cores = cpu_count()
        dirs_chunked = np.array_split(dirs, available_cores)
        min_doms_list = [min_doms]*len(dirs_chunked)
        max_doms_list = [max_doms]*len(dirs_chunked)
        dom_mask_list = [dom_mask]*len(dirs_chunked)
        subprocess_ids = np.arange(len(dirs_chunked))
        packed = zip(dirs_chunked, min_doms_list, max_doms_list, dom_mask_list, subprocess_ids)
        
        with Pool(available_cores) as p:
            accepted_lists = p.map(find_dom_interval_passed_cands, packed)
        
        # * Combine again
        mask = sorted(flatten_list_of_lists(accepted_lists))

    else:
        raise ValueError('make_dom_interval_mask: Only multiprocessing solution implemented')
    
    # * save it
    mask_path = data_path+'/masks/dom_interval_%s_min%d_max%d.pickle'%(dom_mask, min_doms, max_doms)
    pickle.dump(mask, open(mask_path, 'wb'))
    
    return mask_path
Пример #8
0
def assign_energy_balanced_weights_multiprocess(
    ids, 
    db, 
    interpolator_quadratic, 
    true_key=['true_primary_energy'], 
    debug=False
    ):
    
    # Create packs - loop over all events
    # n_chunks = len(ids)//AVAILABLE_CORES
    chunks = np.array_split(ids, AVAILABLE_CORES)
    packed = make_multiprocess_pack(
        chunks, interpolator_quadratic, true_key, db
    )

    # Multiprocess and recombine
    with Pool(AVAILABLE_CORES) as p:
        weights = p.map(calc_weights_multiprocess, packed)
    weights_combined = flatten_list_of_lists(weights)
    
    return weights_combined
Пример #9
0
def make_energy_interval_mask(data_path, dirs, min_energy, max_energy, multiprocess=True):

    # * Split the candidates into chunks for multiprocessing
    if multiprocess:
        available_cores = cpu_count()
        dirs_chunked = np.array_split(dirs, available_cores)
        min_energy_list = [min_energy]*len(dirs_chunked)
        max_energy_list = [max_energy]*len(dirs_chunked)
        packed = zip(dirs_chunked, min_energy_list, max_energy_list)
        
        with Pool(available_cores) as p:
            accepted_lists = p.map(find_energy_interval_passed_cands, packed)
        
        # * Combine again
        mask = sorted(flatten_list_of_lists(accepted_lists))

    else:
        raise ValueError('make_energy_interval_mask: Only multiprocessing solution implemented')
    
    # * save it
    mask_path = data_path+'/masks/energy_interval_min%.1f_max%.1f.pickle'%(min_energy, max_energy)
    pickle.dump(mask, open(mask_path, 'wb'))
    
    return mask_path