Ejemplo n.º 1
0
def generate_singly_diff_fluxes(n_bins,datafile=config["nu_flux"]):
    """
    This is the newest, most streamlined function for generating the singly-differential flux arrays. 
    It has the same functionality as the old ones, but now it skips the step of filling in the regular flux array before swapping to the deposited energy flux array. 

    It goes over the different kind of fluxes and builds up a 2D or 3D array, convolving the entries with the relevant differential cross section
        the dimensionality depends on whether or we are integrating over the zenith angles
    """
    print("Depositing Energy")
    data = Data(datafile)

    e_min = 10*const.GeV
    e_max = 5*const.PeV
    extra = 0
    
    all_angles = data.angles
    
    event_edges       = np.logspace(np.log10(e_min), np.log10(e_max)+extra,n_bins+1)
    e_deposited_edges = np.logspace(np.log10(e_min)      , np.log10(e_max),n_bins+1)
    angle_edges = np.linspace(min(all_angles), max(all_angles), n_bins+1) # angle is in cos(zenith), so like -1->0
    
    nuflux = {}
    errs = {}

    for key in data.get_keys(): #flavor, current, interaction 
        if "Mu_nu" in key:
            continue
        fluxy, erry = do_for_key(event_edges,e_deposited_edges,key,data=data, angles=angle_edges)
        nuflux[key] = fluxy
        errs[key] = erry


    # if global variable "angle" isn't none, then we can separate out just a single angle

    return(event_edges,e_deposited_edges, nuflux, angle_edges, errs)
Ejemplo n.º 2
0
def downsize(filename, destination):
    if os.path.exists(destination):
        print("Already done! Skipping {}".format(destination))
        return

    dataobj = Data(filename)

    flux = {}
    for key in dataobj.get_keys():
        flux[key] = np.zeros(shape=(Ebin, zbin))
        for i_e in range(Ebin):
            for i_z in range(zbin):
                flux[key][i_e][i_z] = dataobj.get_flux( energies[i_e], key=key, angle=zeniths[i_z])

    # okay now we pickle 
    all_data = {}
    all_data["e_true"] = energies
    all_data["a_true"] = zeniths
    all_data["flux"] = flux
    f = open(destination, 'wb')
    pickle.dump(all_data, f, -1)
    f.close()
    print("Saved {}".format(destination))
Ejemplo n.º 3
0
                          0.0, 1.3)
null_dat = Data(null_pt, 4)
sterile_dat = Data(sterile_pt, 4)

n_bin = 100

_ang_range = (min(null_dat.angles), max(null_dat.angles))
_eng_range = (min(null_dat.energies), max(null_dat.energies))

angles = np.linspace(_ang_range[0], _ang_range[1], n_bin + 1)
energies = np.logspace(log10(_eng_range[0]), log10(_eng_range[1]), n_bin)

#angles = null_dat._angles
#energies = np.array(null_dat._energies)

key_list = null_dat.get_keys()

#null_flux = np.zeros(shape=np.shape(null_dat._fluxes[key_list[0]]))
#sterile_flux = np.zeros(shape=np.shape(sterile_dat._fluxes[key_list[0]]))

null_flux = np.zeros(shape=(n_bin, n_bin + 1))
sterile_flux = np.zeros(shape=(n_bin, n_bin + 1))

for key in key_list:
    for i in range(len(energies)):
        for j in range(len(angles)):

            energy = energies[i]
            angle = angles[j]

            #            null_flux[i][j] += null_dat._fluxes[key][i][j]