Ejemplo n.º 1
0
def test_list_directories():
    directories = rnp.list_directories(load('directories.root'))
    assert_equal(set(directories), set(['Dir1', 'Dir2']))
Ejemplo n.º 2
0
def calculate_arrays(args):
    input_file = args[0]
    treename = args[1]
    foldername = args[2]
    output_file = args[3]
    model_path = args[4]
    full_output = args[5]
    channel = args[6]
    mode = args[7]
    lock = args[8]
    try:
        arr = root2array(input_file,
                         foldername + "/" + treename,
                         branches=branches)
    except:
        # The input file has not been found or the tree size is 0
        return (input_file, 0)

    # pre-allocate the input vector to Keras

    X = np.zeros([arr.shape[0], len(branches)])
    L = np.zeros([arr.shape[0], 4])

    # convert inputs to cartesian coordinates
    for index, a in enumerate(arr):
        tau_1 = FourMomentum(a[0], a[1], a[2], a[3], False)
        tau_2 = FourMomentum(a[4], a[5], a[6], a[7], False)
        met = FourMomentum(0, a[8], 0, a[9], False)
        metcovxx = np.sqrt(a[10])
        metcovyy = np.sqrt(a[11])
        metcovxy = a[12]

        X[index, :] = np.array([
            tau_1.e, tau_1.px, tau_1.py, tau_1.pz, tau_2.e, tau_2.px, tau_2.py,
            tau_2.pz, met.px, met.py, metcovxx, metcovyy, metcovxy
        ])

        visible = tau_1 + tau_2
        L[index, :] = visible.as_numpy_array()
    Y = predict(model_path, X, channel)
    # convert Y to usual hadron-collider coordinates

    fullvector_hc, fullvector_cartesian = full_fourvector(
        Y,
        L,
        cartesian_types=[("e_N", np.float64), ("px_N", np.float64),
                         ("py_N", np.float64), ("pz_N", np.float64)],
        hc_types=[("pt_N", np.float64), ("eta_N", np.float64),
                  ("phi_N", np.float64), ("m_N", np.float64)])

    #outputs = [fullvector_hc, fullvector_cartesian]
    outputs = [fullvector_hc]
    #        if mode == 'copy':
    #            outputs.append(arr_all)
    #        if full_output:
    #            for i in range(2):
    #                neutrino_four_momenta = []
    #                for line in range(Y.shape[0]):
    #                    neutrino_four_momenta.append(FourMomentum(Y[line,13+4*i], Y[line,14+4*i], Y[line,15+4*i], Y[line,16+4*i], cartesian=True))
    #                    s = "_n" + str(i+1)
    #                    neutrino_hc, neutrino_cartesian = transform_fourvector(neutrino_four_momenta,
    #                                                           cartesian_types = [("e"+s,np.float64),  ("px"+s, np.float64),  ("py"+s, np.float64),  ("pz"+s, np.float64)],
    #                                                           hc_types =        [("pt"+s,np.float64), ("eta"+s, np.float64), ("phi"+s, np.float64), ("m"+s, np.float64)])
    #                    outputs.append(neutrino_hc)
    #                    outputs.append(neutrino_cartesian)
    lock.acquire()
    #print os.getpid(), ": lock hold by process creating", output_file, " lock: ", lock

    if not os.path.exists(os.path.dirname(output_file)):
        os.makedirs(os.path.dirname(output_file))

    if not os.path.exists(output_file):
        if mode == 'copy':
            copyfile(input_file, output_file)
    f = TFile(output_file, "UPDATE")

    if not foldername in list_directories(output_file):
        f.mkdir(foldername)

    if mode == 'friend':
        tree = None
    elif mode == 'copy':
        tree = f.Get(foldername + "/" + treename)
    getattr(f, foldername).cd()
    for output in outputs:
        tree = array2tree(output, name=treename, tree=tree)
    f.Write("", r.TObject.kOverwrite)
    f.Close()
    lock.release()
    #print os.getpid(), ": lock released by process "
    return (input_file, X.shape[0])
Ejemplo n.º 3
0
def test_list_directories():
    directories = rnp.list_directories(load('directories.root'))
    assert_equal(set(directories), set(['Dir1', 'Dir2']))
Ejemplo n.º 4
0
                            15.9), np.percentile(outputs[nick], 84.1)
            print nick, "CORRECTED", "median, down, up:", np.percentile(
                diffcorr, 50.0), np.percentile(diffcorr, 15.9), np.percentile(
                    diffcorr,
                    84.1), "absolute median, down, up:", np.percentile(
                        outputs_corrected[nick], 50.0), np.percentile(
                            outputs_corrected[nick],
                            15.9), np.percentile(outputs_corrected[nick], 84.1)
            print "-----------------------------------------"
            outputs[nick] = np.array(outputs[nick],
                                     dtype=[('m_DDT', np.float32)])
            outputs_corrected[nick] = np.array(outputs_corrected[nick],
                                               dtype=[('m_DDTcorr', np.float32)
                                                      ])

            if not foldername in list_directories(output_file):
                F.mkdir(foldername)
            tree = F.Get("/".join([foldername, treename]))
            getattr(F, foldername).cd()
            print "writing DNN outputs to tree"
            tree = array2tree(outputs[nick], name=treename, tree=tree)
            tree = array2tree(outputs_corrected[nick],
                              name=treename,
                              tree=tree)
            print "Saving tree to file"
            F.Write("", r.TObject.kOverwrite)
    print "Closing file"
    F.Close()

exit()