Ejemplo n.º 1
0
    def fill_emb_3(self, iev, jm):
        # pdebug('@fill: jm[0]', jm[0], 'jm[1]', jm[1], 'jm[2]', jm[2])
        self.twh.fill_branch('iev', iev)
        self.twh.fill_branch('det', jm[0])
        self.twh.fill_branch('part', jm[1])
        self.twh.fill_branch('hybr', jm[2])
        self.twh.fill_branch('dpt_pp', jm[0].pt() - jm[1].pt())
        self.twh.fill_branch('dpt_emb', jm[2].pt() - jm[0].pt())
        self.twh.fill_branch('dR_pp', jm[0].delta_R(jm[1]))
        self.twh.fill_branch('dR_emb', jm[0].delta_R(jm[2]))

        sd0 = self.sd.result(jm[0])
        self.twh.fill_branch('sd_det', sd0)
        sd0_pe1 = fj.PseudoJet()
        sd0_pe2 = fj.PseudoJet()
        sd0_has_parents = sd0.has_parents(sd0_pe1, sd0_pe2)
        self.twh.fill_branch('sd_det_p1', sd0_pe1)
        self.twh.fill_branch('sd_det_p2', sd0_pe2)
        sdi0 = fjcontrib.get_SD_jet_info(sd0)
        self.twh.fill_branch('sd_det_zg', sdi0.z)
        self.twh.fill_branch('sd_det_Rg', sdi0.dR)

        sd1 = self.sd.result(jm[1])
        self.twh.fill_branch('sd_part', sd1)
        sd1_pe1 = fj.PseudoJet()
        sd1_pe2 = fj.PseudoJet()
        sd1_has_parents = sd1.has_parents(sd1_pe1, sd1_pe2)
        self.twh.fill_branch('sd_part_p1', sd1_pe1)
        self.twh.fill_branch('sd_part_p2', sd1_pe2)
        sdi1 = fjcontrib.get_SD_jet_info(sd1)
        self.twh.fill_branch('sd_part_zg', sdi1.z)
        self.twh.fill_branch('sd_part_Rg', sdi1.dR)

        sd2 = self.sd.result(jm[2])
        self.twh.fill_branch('sd_emb', sd2)
        sd2_pe1 = fj.PseudoJet()
        sd2_pe2 = fj.PseudoJet()
        sd2_has_parents = sd2.has_parents(sd2_pe1, sd2_pe2)
        self.twh.fill_branch('sd_emb_p1', sd2_pe1)
        self.twh.fill_branch('sd_emb_p2', sd2_pe2)
        sdi2 = fjcontrib.get_SD_jet_info(sd2)
        self.twh.fill_branch('sd_emb_zg', sdi2.z)
        self.twh.fill_branch('sd_emb_Rg', sdi2.dR)

        m02_1 = -1
        m02_2 = -1
        if sd0_has_parents and sd2_has_parents:
            m02_1 = fjtools.matched_pt(sd2_pe1, sd0_pe1)
            m02_2 = fjtools.matched_pt(sd2_pe2, sd0_pe2)

        self.twh.fill_branch('sd_det_emb_mpt1', m02_1)
        self.twh.fill_branch('sd_det_emb_mpt2', m02_2)

        self.twh.fill_branch('sd_det_split', sd0_has_parents)
        self.twh.fill_branch('sd_part_split', sd1_has_parents)
        self.twh.fill_branch('sd_emb_split', sd2_has_parents)

        self.twh.fill_tree()
Ejemplo n.º 2
0
def fill_branches(tw, j, dy_groomer, alphas=[], sds=[]):
    tw.fill_branch('j', j)
    for a in alphas:
        dy_groomed = dy_groomer.result(j, a)
        # if dy_groomed.pair().pt() > 0:
        # 	tw.fill_branch('dg_{:.1f}'.format(a), dy_groomed.harder())
        # 	tw.fill_branch('dg_{:.1f}'.format(a), dy_groomed.softer())
        tw.fill_branch('dg_{:.1f}'.format(a), dy_groomed)
    max_pt_groomed = dy_groomer.max_pt_softer(j)
    tw.fill_branch('max_ptsoft', max_pt_groomed)
    max_z_groomed = dy_groomer.max_z(j)
    tw.fill_branch('max_z', max_z_groomed)
    max_kt_groomed = dy_groomer.max_kt(j)
    tw.fill_branch('max_kt', max_kt_groomed)
    max_kappa_groomed = dy_groomer.max_kappa(j)
    tw.fill_branch('max_kappa', max_kappa_groomed)
    max_tf_groomed = dy_groomer.max_tf(j)
    tw.fill_branch('max_tf', max_tf_groomed)
    min_tf_groomed = dy_groomer.min_tf(j)
    tw.fill_branch('min_tf', min_tf_groomed)

    for i, sd in enumerate(sds):
        j_sd = sd.result(j)
        tw.fill_branch('sd{}'.format(i), j_sd)
        sd_info = fjcontrib.get_SD_jet_info(j_sd)
        tw.fill_branch('sd{}_z'.format(i), sd_info.z)
        tw.fill_branch('sd{}_Delta'.format(i), sd_info.dR)
        tw.fill_branch('sd{}_mu'.format(i), sd_info.mu)
        tw.fill_branch('sd{}_kt'.format(i), sd_info.z * j_sd.pt() * sd_info.dR)
Ejemplo n.º 3
0
def main():
	parser = argparse.ArgumentParser(description='pythia8 fastjet on the fly', prog=os.path.basename(__file__))
	pyconf.add_standard_pythia_args(parser)
	args = parser.parse_args()

	# print the banner first
	fj.ClusterSequence.print_banner()
	print()
	# set up our jet definition and a jet selector
	jet_R0 = 0.4
	jet_def = fj.JetDefinition(fj.antikt_algorithm, jet_R0)
	jet_selector = fj.SelectorPtMin(5.0) & fj.SelectorAbsEtaMax(2)
	print(jet_def)

	all_jets = []

	# mycfg = ['PhaseSpace:pThatMin = 100']
	mycfg = []
	pythia = pyconf.create_and_init_pythia_from_args(args, mycfg)
	if args.nev < 100:
		args.nev = 100
	for i in tqdm.tqdm(range(args.nev)):
		if not pythia.next():
			continue
		parts = pythiafjext.vectorize(pythia, True, -1, 1, False)
		jets = jet_selector(jet_def(parts))
		all_jets.extend(jets)

	pythia.stat()

	jet_def_lund = fj.JetDefinition(fj.cambridge_algorithm, 1.0)
	lund_gen = fjcontrib.LundGenerator(jet_def_lund)

	print('making lund diagram for all jets...')
	lunds = [lund_gen.result(j) for j in all_jets]

	print('listing lund plane points... Delta, kt - for {} selected jets'.format(len(all_jets)))
	for l in lunds:
		print ('- jet pT={0:5.2f} eta={1:5.2f}'.format(l[0].pair().perp(), l[0].pair().eta()))
		print ('  Deltas={}'.format([s.Delta() for s in l]))
		print ('  kts={}'.format([s.Delta() for s in l]))
		print ( )

	print('[i] reclustering and using soft drop...')
	jet_def_rc = fj.JetDefinition(fj.cambridge_algorithm, 1.0)
	print('Reclustering:', jet_def_rc)

	rc = fjcontrib.Recluster(jet_def_rc, True)
	sd = fjcontrib.SoftDrop(0, 0.1, 1.0)
	for i,j in enumerate(all_jets):
		j_rc = rc.result(j)
		print()
		print('- [{0:3d}] orig pT={1:10.3f} reclustered pT={2:10.3f}'.format(i, j.perp(), j_rc.perp()))
		j_sd = sd.result(j)
		print('  |-> after soft drop pT={0:10.3f} delta={1:10.3f}'.format(j_sd.perp(), j_sd.perp() - j.perp()))
		sd_info = fjcontrib.get_SD_jet_info(j_sd)
		print("  |-> SD jet params z={0:10.3f} dR={1:10.3f} mu={2:10.3f}".format(sd_info.z, sd_info.dR, sd_info.mu))
Ejemplo n.º 4
0
    def lund_coordinates_SD(self, jet_sd):

        sd_info = fjcontrib.get_SD_jet_info(jet_sd)
        dR = sd_info.dR
        z = sd_info.z
        pt = jet_sd.pt()
        kt = z * dR * pt

        if dR > 1e-5:
            return [np.log(1 / dR), np.log(kt)]
        else:
            return [sys.maxsize, -sys.maxsize]
Ejemplo n.º 5
0
def main():

    # get the banner out of the way early on
    fj.ClusterSequence.print_banner()
    print()

    # set up our jet definition and a jet selector
    jet_def = fj.JetDefinition(fj.antikt_algorithm, 0.4)
    selector = fj.SelectorPtMin(15.0) & fj.SelectorAbsRapMax(4.5)
    print("jet definition is:", jet_def)
    print("jet selector is:", selector, "\n")

    filename = './Pythia-dijet-ptmin100-lhc-pileup-1ev.dat'
    f = open(filename, 'r')
    #filename = '/Users/gsalam/work/fastjet/data/Pythia-PtMin50-LHC-10kev.dat.gz'
    #f = gzip.GzipFile(filename,'rb')

    # get the event
    iev = 0
    while True:
        event = read_event(f)
        iev += 1
        if (len(event) == 0): break

        # cluster it
        jets = selector(jet_def(event))

        # print some info
        npileup = 0
        for p in event:
            if (p.python_info().subevent_index > 0): npileup += 1
        print("Event {0} has {1} particles (of which {2} from pileup)".format(
            iev, len(event), npileup))
        print_jets(jets)

        jet_def_rc = fj.JetDefinition(fj.antikt_algorithm, 0.1)
        rc = fjcontrib.Recluster(jet_def_rc, True)
        sd = fjcontrib.SoftDrop(0, 0.1, 1.0)
        for i, j in enumerate(jets):
            j_rc = rc.result(j)
            print(
                '- [{0:3d}] orig pT={1:10.3f} reclustered pT={2:10.3f}'.format(
                    i, j.perp(), j_rc.perp()))
            j_sd = sd.result(j)
            # j_sd.structure_of<fj.contrib.SoftDrop>().delta_R()
            # print(j_sd.python_info())
            print('  |-> after soft drop pT={0:10.3f} delta={1:10.3f}'.format(
                j_sd.perp(),
                j_sd.perp() - j.perp()))
            sd_info = fjcontrib.get_SD_jet_info(j_sd)
            print("  |-> SD jet params z={0:10.3f} dR={1:10.3f} mu={2:10.3f}".
                  format(sd_info.z, sd_info.dR, sd_info.mu))
Ejemplo n.º 6
0
def fill_tree_data(jet, tw, sd, rho, iev=None, weight=None, sigma=None):
    tw.clear()
    if iev:
        tw.fill_branch('ev_id', iev)
    if weight:
        tw.fill_branch('weight', weight)
    if sigma:
        tw.fill_branch('sigma', sigma)

    good_jet = 0.0
    if len(jet.constituents()) > 0:
        if fj.sorted_by_pt(jet.constituents())[0].pt() < 100.:
            good_jet = 1.0
    tw.fill_branch('good', good_jet)

    sd_jet = sd.result(jet)
    sd_info_jet = fjcontrib.get_SD_jet_info(sd_jet)

    tw.fill_branch('rho', rho)

    tw.fill_branch('j', jet)
    tw.fill_branch('j_ptc', jet.pt() - jet.area() * rho)
    tw.fill_branch('sd_j', sd_jet)
    tw.fill_branch('sd_j_cpt', sd_jet.pt() - sd_jet.area() * rho)
    tw.fill_branch('sd_j_z', sd_info_jet.z)
    tw.fill_branch('sd_j_dR', sd_info_jet.dR)

    pe1 = fj.PseudoJet()
    pe2 = fj.PseudoJet()
    has_parents = sd_jet.has_parents(pe1, pe2)
    tw.fill_branch('j_p1', pe1)
    tw.fill_branch('j_p2', pe2)
    if has_parents:
        tw.fill_branch('j_p1_ptc', pe1.pt() - pe1.area() * rho)
        tw.fill_branch('j_p2_ptc', pe2.pt() - pe2.area() * rho)
    else:
        tw.fill_branch('j_p1_ptc', -1000)
        tw.fill_branch('j_p2_ptc', -1000)

    tw.fill_tree()
    return jet
Ejemplo n.º 7
0
def main():
    parser = argparse.ArgumentParser(description='pythia8 fastjet on the fly',
                                     prog=os.path.basename(__file__))
    pyconf.add_standard_pythia_args(parser)
    # Could use --py-seed
    parser.add_argument('--user-seed', help='PYTHIA starting seed', default=1111, type=int)
    parser.add_argument('--output', default="output.root", type=str)
    parser.add_argument('--sd_beta', help='SoftDrop beta', default=None, type=float)
    parser.add_argument('--jetR', help='Jet radius/resolution parameter', default=0.4, type=float)
    parser.add_argument('--no-match-level', help="Save simulation for only one level with " + \
                        "no matching. Options: 'p', 'h', 'ch'", default=None, type=str)
    parser.add_argument('--p-ch-MPI', help="Match between parton level (no MPI) and charged " + \
                        "hadron level (with MPI) for ALICE response characterization",
                        action='store_true', default=False)
    args = parser.parse_args()

    level = args.no_match_level
    if args.p_ch_MPI:
        if level:
            print("ERROR: --no-match-level and --p-ch-MPI cannot be set simultaneously.")
            exit(1)
    if level not in [None, 'p', 'h', 'ch']:
        print("ERROR: Unrecognized type %s. Please use 'p', 'h', or 'ch'" % args.type_only)
        exit(1)

    # Angularity beta values
    betas = [1, 1.5, 2, 3]

    if args.user_seed < 0:
        args.user_seed = 1111
    pinfo('user seed for pythia', args.user_seed)
    # mycfg = ['PhaseSpace:pThatMin = 100']
    mycfg = ['Random:setSeed=on', 'Random:seed={}'.format(args.user_seed)]
    mycfg.append('HadronLevel:all=off')

    # Have at least 1 event
    if args.nev < 1:
        args.nev = 1

    if args.p_ch_MPI:
        d = vars(args)
        d['py_noMPI'] = True
        pythia_noMPI = pyconf.create_and_init_pythia_from_args(args, mycfg)
        args_MPI = copy.deepcopy(args)
        d = vars(args_MPI)
        d['py_noMPI'] = False
        pythia = pyconf.create_and_init_pythia_from_args(args_MPI, mycfg)
    else:
        pythia = pyconf.create_and_init_pythia_from_args(args, mycfg)

    # print the banner first
    fj.ClusterSequence.print_banner()
    print()
    # set up our jet definition and a jet selector
    jet_R0 = args.jetR
    jet_def = fj.JetDefinition(fj.antikt_algorithm, jet_R0)
    print(jet_def)

    # hadron level - ALICE
    max_eta_hadron = 0.9
    pwarning('max eta for particles after hadronization set to', max_eta_hadron)
    parts_selector_h = fj.SelectorAbsEtaMax(max_eta_hadron)
    jet_selector = fj.SelectorPtMin(5.0) #& fj.SelectorAbsEtaMax(max_eta_hadron - jet_R0)

    max_eta_parton = max_eta_hadron + 2. * jet_R0
    pwarning('max eta for partons set to', max_eta_parton)
    parts_selector_p = fj.SelectorAbsEtaMax(max_eta_parton)

    if not args.sd_beta is None:
        args.output = args.output.replace('.root', '_sdbeta{}.root'.format(args.sd_beta))
    outf = ROOT.TFile(args.output, 'recreate')
    outf.cd()
    t = ROOT.TTree('t', 't')
    tw = RTreeWriter(tree=t)

    count1 = 0
    count2 = 0

    # event loop
    for iev in range(args.nev):  #tqdm.tqdm(range(args.nev)):
        if not pythia.next():
            if args.p_ch_MPI:
                pythia_noMPI.next()
            continue
        if args.p_ch_MPI and not pythia_noMPI.next():
            continue

        parts_pythia_p = pythiafjext.vectorize_select(pythia, [pythiafjext.kFinal], 0, True)
        parts_pythia_p_selected = parts_selector_p(parts_pythia_p)

        if args.p_ch_MPI:
            parts_pythia_p = pythiafjext.vectorize_select(pythia_noMPI, [pythiafjext.kFinal], 0, True)
            parts_pythia_p_selected = parts_selector_p(parts_pythia_p)

        hstatus = pythia.forceHadronLevel()
        if not hstatus:
            #pwarning('forceHadronLevel false event', iev)
            continue
        # parts_pythia_h = pythiafjext.vectorize_select(
        #     pythia, [pythiafjext.kHadron, pythiafjext.kCharged])
        parts_pythia_h = pythiafjext.vectorize_select(pythia, [pythiafjext.kFinal], 0, True)
        parts_pythia_h_selected = parts_selector_h(parts_pythia_h)

        parts_pythia_hch = pythiafjext.vectorize_select(
            pythia, [pythiafjext.kFinal, pythiafjext.kCharged], 0, True)
        parts_pythia_hch_selected = parts_selector_h(parts_pythia_hch)

        # pinfo('debug partons...')
        # for p in parts_pythia_p_selected:
        #   pyp = pythiafjext.getPythia8Particle(p)
        #   print(pyp.name())
        # pinfo('debug hadrons...')
        # for p in parts_pythia_h_selected:
        #   pyp = pythiafjext.getPythia8Particle(p)
        #   print(pyp.name())
        # pinfo('debug ch. hadrons...')
        # for p in parts_pythia_hch_selected:
        #   pyp = pythiafjext.getPythia8Particle(p)
        #   print(pyp.name())

        # parts = pythiafjext.vectorize(pythia, True, -1, 1, False)
        jets_p = fj.sorted_by_pt(jet_selector(jet_def(parts_pythia_p)))
        jets_h = fj.sorted_by_pt(jet_selector(jet_def(parts_pythia_h)))
        jets_ch = fj.sorted_by_pt(jet_selector(jet_def(parts_pythia_hch)))

        if level:  # Only save info at one level w/o matching
            jets = locals()["jets_%s" % level]
            for jet in jets:
                tw.fill_branch('iev', iev)
                tw.fill_branch(level, jet)
                kappa = 1
                for beta in betas:
                    label = str(beta).replace('.', '')
                    tw.fill_branch('l_%s_%s' % (level, label),
                                   lambda_beta_kappa(jet, jet_R0, beta, kappa))
            continue

        if not args.sd_beta is None:
            sd = fjcontrib.SoftDrop(args.sd_beta, 0.1, jet_R0)

        for i,jchh in enumerate(jets_ch):

            # match hadron (full) jet
            drhh_list = []
            for j, jh in enumerate(jets_h):
                drhh = jchh.delta_R(jh)
                if drhh < jet_R0 / 2.:
                    drhh_list.append((j,jh))
            if len(drhh_list) != 1:
                count1 += 1
            else:  # Require unique match
                j, jh = drhh_list[0]

                # match parton level jet
                dr_list = []
                for k, jp in enumerate(jets_p):
                    dr = jh.delta_R(jp)
                    if dr < jet_R0 / 2.:
                        dr_list.append((k, jp))
                if len(dr_list) != 1:
                    count2 += 1
                else:
                    k, jp = dr_list[0]

                    # pwarning('event', iev)
                    # pinfo('matched jets: ch.h:', jchh.pt(), 'h:', jh.pt(),
                    #       'p:', jp.pt(), 'dr:', dr)

                    tw.fill_branch('iev', iev)
                    tw.fill_branch('ch', jchh)
                    tw.fill_branch('h', jh)
                    tw.fill_branch('p', jp)

                    kappa = 1
                    for beta in betas:
                        label = str(beta).replace('.', '')
                        tw.fill_branch("l_ch_%s" % label,
                                       lambda_beta_kappa(jchh, jet_R0, beta, kappa))
                        tw.fill_branch("l_h_%s" % label,
                                       lambda_beta_kappa(jh, jet_R0, beta, kappa))
                        tw.fill_branch("l_p_%s" % label,
                                       lambda_beta_kappa(jp, jet_R0, beta, kappa))

                    if not args.sd_beta is None:
                        jchh_sd = sd.result(jchh)
                        jchh_sd_info = fjcontrib.get_SD_jet_info(jchh_sd)
                        jh_sd = sd.result(jh)
                        jh_sd_info = fjcontrib.get_SD_jet_info(jh_sd)
                        jp_sd = sd.result(jp)
                        jp_sd_info = fjcontrib.get_SD_jet_info(jp_sd)

                        tw.fill_branch('p_zg', jp_sd_info.z)
                        tw.fill_branch('p_Rg', jp_sd_info.dR)
                        tw.fill_branch('p_thg', jp_sd_info.dR/jet_R0)
                        tw.fill_branch('p_mug', jp_sd_info.mu)

                        tw.fill_branch('h_zg', jh_sd_info.z)
                        tw.fill_branch('h_Rg', jh_sd_info.dR)
                        tw.fill_branch('h_thg', jh_sd_info.dR/jet_R0)
                        tw.fill_branch('h_mug', jh_sd_info.mu)

                        tw.fill_branch('ch_zg', jchh_sd_info.z)
                        tw.fill_branch('ch_Rg', jchh_sd_info.dR)
                        tw.fill_branch('ch_thg', jchh_sd_info.dR/jet_R0)
                        tw.fill_branch('ch_mug', jchh_sd_info.mu)

            #print("  |-> SD jet params z={0:10.3f} dR={1:10.3f} mu={2:10.3f}".format(
            #    sd_info.z, sd_info.dR, sd_info.mu))

    tw.fill_tree()
    if args.p_ch_MPI:
        pythia_noMPI.stat()
    pythia.stat()

    print("%i jets cut at first match criteria; %i jets cut at second match criteria." % 
          (count1, count2))

    outf.Write()
    outf.Close()
Ejemplo n.º 8
0
def fill_tree_matched(signal_jet,
                      emb_jet,
                      tw,
                      sd,
                      rho,
                      iev=None,
                      weight=None,
                      sigma=None):
    tw.clear()
    mpt = fjtools.matched_pt(emb_jet, signal_jet)
    if mpt <= 0.5:
        return None

    tw.fill_branch('j_mpt', mpt)

    if iev:
        tw.fill_branch('ev_id', iev)
    if weight:
        tw.fill_branch('weight', weight)
    if sigma:
        tw.fill_branch('sigma', sigma)

    sd_signal_jet = sd.result(signal_jet)
    sd_info_signal_jet = fjcontrib.get_SD_jet_info(sd_signal_jet)
    sd_emb_jet = sd.result(emb_jet)
    sd_info_emb_jet = fjcontrib.get_SD_jet_info(sd_emb_jet)

    tw.fill_branch('rho', rho)

    tw.fill_branch('j', signal_jet)
    tw.fill_branch('sd_j', sd_signal_jet)
    tw.fill_branch('sd_j_z', sd_info_signal_jet.z)
    tw.fill_branch('sd_j_dR', sd_info_signal_jet.dR)
    tw.fill_branch('j_nc', len(signal_jet.constituents()))

    tw.fill_branch('ej', emb_jet)
    tw.fill_branch('ej_ptc', emb_jet.pt() - emb_jet.area() * rho)
    tw.fill_branch('sd_ej', sd_emb_jet)
    tw.fill_branch('sd_ej_cpt', sd_emb_jet.pt() - sd_emb_jet.area() * rho)
    tw.fill_branch('sd_ej_z', sd_info_emb_jet.z)
    tw.fill_branch('sd_ej_dR', sd_info_emb_jet.dR)

    p1 = fj.PseudoJet()
    p2 = fj.PseudoJet()
    has_parents_signal = sd_signal_jet.has_parents(p1, p2)
    # print('signal_jet:', has_parents, len(p1.constituents()), len(p2.constituents()))
    tw.fill_branch('j_p1', p1)
    tw.fill_branch('j_p2', p2)

    pe1 = fj.PseudoJet()
    pe2 = fj.PseudoJet()
    has_parents_emb = sd_emb_jet.has_parents(pe1, pe2)
    tw.fill_branch('ej_p1', pe1)
    tw.fill_branch('ej_p2', pe2)
    if has_parents_emb:
        tw.fill_branch('ej_p1_ptc', pe1.pt() - pe1.area() * rho)
        tw.fill_branch('ej_p2_ptc', pe2.pt() - pe2.area() * rho)
    else:
        tw.fill_branch('ej_p1_ptc', -1000)
        tw.fill_branch('ej_p2_ptc', -1000)

    mpt1 = -1.0  # not passed SD
    mpt2 = -1.0  # not passed SD

    if has_parents_signal and has_parents_emb:
        mpt1 = fjtools.matched_pt(pe1, p1)
        mpt2 = fjtools.matched_pt(pe2, p2)
    tw.fill_branch('mpt1', mpt1)
    tw.fill_branch('mpt2', mpt2)

    # print('signal_jet:', has_parents, len(pe1.constituents()), len(pe2.constituents()))
    # print('emb_jets', has_parents, len(pe1.constituents()), len(pe2.constituents()))

    # for c in pe2.constituents():
    # 	cp1 = fj.PseudoJet()
    # 	cp2 = fj.PseudoJet()
    # 	print(' - ', c.has_parents(cp1, cp2))

    #tw.fill_branch('jsd', sd_j)
    #tw.fill_branch('jm', ej)
    tw.fill_tree()
    return emb_jet
Ejemplo n.º 9
0
def main():
	parser = argparse.ArgumentParser(description='pythia8 fastjet on the fly', prog=os.path.basename(__file__))
	pyconf.add_standard_pythia_args(parser)
	parser.add_argument('--nw', help="no warn", default=False, action='store_true')
	parser.add_argument('--ignore-mycfg', help="ignore some settings hardcoded here", default=False, action='store_true')
	parser.add_argument('--enable-background', help="enable background calc", default=False, action='store_true')
	parser.add_argument('--output', help="output file name", default='leadsj_vs_x_output.root', type=str)

	# for background
	parser.add_argument('--cent-bin', help="centraility bin 0 is the  0-5 percent most central bin", type=int, default=0)
	parser.add_argument('--seed', help="pr gen seed", type=int, default=1111)
	parser.add_argument('--harmonics', help="set harmonics flag (0 : v1 - v5) , (1 : v2 - v5) , (2: v3 - v5) , (3: v1 - v4) , (4: v1 - v3) , (5: uniform dN/dphi no harmonics) , (6 : v1 - v2 , v4 - v5) , (7 : v1 - v3 , v5) , (8 : v1 , v3 - v5) , (9 : v1 only) , (10 : v2 only) , (11 : v3 only) , (12 : v4 only) , (13 : v5 only)", 
						type=int, default=5)
	parser.add_argument('--eta', help="set eta range must be uniform (e.g. abs(eta) < 0.9, which is ALICE TPC fiducial acceptance)",
						type=float, default=0.9)
	parser.add_argument('--qa', help="PrintOutQAHistos", default=False, action='store_true')

	parser.add_argument('--dRmax', default=0.25, type=float)
	parser.add_argument('--alpha', default=0, type=float)


	args = parser.parse_args()

	# print the banner first
	fj.ClusterSequence.print_banner()
	print()
	# set up our jet definition and a jet selector
	jet_R0 = 0.4
	jet_def = fj.JetDefinition(fj.antikt_algorithm, jet_R0)
	jet_selector = fj.SelectorPtMin(args.py_pthatmin) & fj.SelectorPtMax(1000.0) & fj.SelectorAbsEtaMax(args.eta - jet_R0)
	# jet_selector = fj.SelectorPtMin(40.0) & fj.SelectorPtMax(200.0) &fj.SelectorAbsEtaMax(1)
	print(jet_def)

	all_jets = []

	# mycfg = ['PhaseSpace:pThatMin = 80']
	# mycfg = ['PhaseSpace:pThatMin = 40']	
	mycfg = ['']	
	if args.ignore_mycfg:
		mycfg = []
	pythia = pyconf.create_and_init_pythia_from_args(args, mycfg)
	if not pythia:
		perror("pythia initialization failed.")
		return

	jet_def_lund = fj.JetDefinition(fj.cambridge_algorithm, 1.0)
	lund_gen = fjcontrib.LundGenerator(jet_def_lund)
	print (lund_gen.description())
	dy_groomer = fjcontrib.DynamicalGroomer(jet_def_lund)
	print (dy_groomer.description())

	# sd = fjcontrib.SoftDrop(0, 0.1, 1.0)
	sd01 = fjcontrib.SoftDrop(0, 0.1, 1.0)
	print (sd01)
	sd02 = fjcontrib.SoftDrop(0, 0.2, 1.0)
	print (sd02)

	# jet_def_rc01 = fj.JetDefinition(fj.cambridge_algorithm, 0.1)
	# jet_def_rc02 = fj.JetDefinition(fj.cambridge_algorithm, 0.2)
	# print (jet_def_rc01)
	# print (jet_def_rc02)
	# rc = fjcontrib.Recluster(jet_def_rc, True)

	jet_def_rc01 = fj.JetDefinition(fj.antikt_algorithm, 0.1)
	jet_def_rc02 = fj.JetDefinition(fj.antikt_algorithm, 0.2)
	print (jet_def_rc01)
	print (jet_def_rc02)
	#rc = fjcontrib.Recluster(jet_def_rc, True)

	# tw = treewriter.RTreeWriter(name = 'lsjvsx', file_name = 'leadsj_vs_x.root')
	tw = treewriter.RTreeWriter(name = 'lsjvsx', file_name = args.output)
	tgbkg = None
	be = None
	if args.enable_background:
		# ROOT.gSystem.Load("libpyjetty_TennGen.dylib")
		# tgbkg = ROOT.TennGen() # //constructor
		# tgbkg.SetCentralityBin(args.cent_bin) # //centraility bin 0 is the  0-5 % most central bin
		# tgbkg.SetRandomSeed(args.seed) # //setting the seed
		# tgbkg.SetHarmonics(args.harmonics) # // set harmonics flag (0 : v1 - v5) , (1 : v2 - v5) , (2: v3 - v5) , (3: v1 - v4) , (4: v1 - v3) , (5: uniform dN/dphi no harmonics) , (6 : v1 - v2 , v4 - v5) , (7 : v1 - v3 , v5) , (8 : v1 , v3 - v5) , (9 : v1 only) , (10 : v2 only) , (11 : v3 only) , (12 : v4 only) , (13 : v5 only)
		# tgbkg.SetEtaRange(args.eta) # //set eta range must be uniform (e.g. |eta| < 0.9, which is ALICE TPC fiducial acceptance)
		# tgbkg.PrintOutQAHistos(args.qa) #
		# tgbkg.InitializeBackground() #

		from pyjetty.mputils import BoltzmannEvent
		be = BoltzmannEvent(mean_pt=0.7, multiplicity=2000 * args.eta * 2, max_eta=max_eta, max_pt=100)
		print(be)

		from pyjetty.mputils import CEventSubtractor, CSubtractorJetByJet
		cs = CEventSubtractor(alpha=args.alpha, max_distance=args.dRmax, max_eta=args.eta, bge_rho_grid_size=0.25, max_pt_correct=100)
		print(cs)


	if args.nev < 100:
		args.nev = 100
	for i in tqdm.tqdm(range(args.nev)):
		if not pythia.next():
			continue
		# parts = pythiafjext.vectorize(pythia, True, -1, 1, False)
		partons = pythiafjext.vectorize_select(pythia, [pythiafjext.kParton], 0, True)
		parts = pythiafjext.vectorize_select(pythia, [pythiafjext.kFinal, pythiafjext.kCharged], 0, False)
		# parts = pythiafjext.vectorize_select(pythia, [pythiafjext.kFinal], 0, False)
		jets = jet_selector(jet_def(parts))

		# for j in tqdm.tqdm(jets):
		for j in jets:
			j_type = match_dR(j, partons, jet_R0 / 2.)
			if j_type[0] is None:
				if args.nw:
					continue
				pwarning('Jet with no parton label')
				continue

			j_sd02 = sd02.result(j)
			sd02_info = fjcontrib.get_SD_jet_info(j_sd02)
			j_sd01 = sd01.result(j)
			sd01_info = fjcontrib.get_SD_jet_info(j_sd01)

			rc_sjets01 = fj.sorted_by_pt(jet_def_rc01(j.constituents()))
			rc_sjets02 = fj.sorted_by_pt(jet_def_rc02(j.constituents()))
			tw.fill_branches(	j 			= j, 
								lund 		= [ls for ls in lund_gen.result(j)], 
								dyg1 		= dy_groomer.result(j, 1), 

								sd01 		= j_sd01, 
								sd01_z 		= sd01_info.z, 
								sd01_mu 	= sd01_info.mu, 
								sd01_Delta 	= sd01_info.dR, 

								sd02 		= j_sd02, 
								sd02_z 		= sd02_info.z, 
								sd02_mu 	= sd02_info.mu, 
								sd02_Delta 	= sd02_info.dR, 

								# breaking compatibility
								# sd 			= j_sd, 
								# sd_z 		= sd_info.z, 
								# sd_mu 		= sd_info.mu, 
								# sd_Delta 	= sd_info.dR, 

								lsjet01 	= rc_sjets01[0],
								nsjet01    	= len(rc_sjets01),
								sjet01     	= rc_sjets01,
								lsjet02 	= rc_sjets02[0],
								nsjet02    	= len(rc_sjets02),
								sjet02     	= rc_sjets02,

								ppid       	= j_type[0],
								pquark     	= j_type[1],
								pglue      	= j_type[2], # this is redundancy

								pycode 		= pythia.info.code(),
								pysigmagen  = pythia.info.sigmaGen(),
								pysigmaerr  = pythia.info.sigmaErr(),
								pyid1       = pythia.info.id1pdf(),
								pyid2       = pythia.info.id1pdf(),
								pyx1 	    = pythia.info.x1pdf(),
								pyx2       	= pythia.info.x2pdf(),
								pypdf1      = pythia.info.pdf1(),
								pyQfac 		= pythia.info.QFac(),
								pyalphaS 	= pythia.info.alphaS(),

								pypthat 	= pythia.info.pTHat(),
								pymhat 		= pythia.info.mHat()

							 )
			if be:
				bg_parts = be.generate(offset=10000)
				full_event = bg_parts
				tmp = [full_event.push_back(psj) for psj in j.constituents()]
				if cs:
					cs_parts = cs.process_event(full_event)
					rho = cs.bge_rho.rho()
					bg_jets = fj.sorted_by_pt(jet_def(cs_parts))
					for bj in bg_jets:
						if fjtools.matched_pt(bj, j) > 0.5:
							pass

			tw.fill_tree()

	pythia.stat()

	tw.write_and_close()
Ejemplo n.º 10
0
    def analyze_groomed_jet(self, grooming_setting, jet, jetR, R_max):

        # Check additional acceptance criteria
        if not self.utils.is_det_jet_accepted(jet):
            return

        jet_pt_ungroomed = jet.pt()

        grooming_label = self.utils.grooming_label(grooming_setting)

        # Construct SD groomer, and groom jet
        if 'sd' in grooming_setting:

            zcut = grooming_setting['sd'][0]
            beta = grooming_setting['sd'][1]
            sd = fjcontrib.SoftDrop(beta, zcut, jetR)
            jet_def_recluster = fj.JetDefinition(fj.cambridge_algorithm, jetR)
            reclusterer = fjcontrib.Recluster(jet_def_recluster)
            sd.set_reclustering(True, reclusterer)
            if self.debug_level > 2:
                print('SoftDrop groomer is: {}'.format(sd.description()))

            jet_sd = sd.result(jet)

        # Construct Dynamical groomer, and groom jet
        if 'dg' in grooming_setting:

            a = grooming_setting['dg'][0]
            jet_def_lund = fj.JetDefinition(fj.cambridge_algorithm, 2 * jetR)
            dy_groomer = fjcontrib.DynamicalGroomer(jet_def_lund)
            if self.debug_level > 2:
                print('Dynamical groomer is: {}'.format(
                    dy_groomer.description()))

            jet_dg_lund = dy_groomer.result(jet, a)
            jet_dg = jet_dg_lund.pair()

        # Compute groomed observables
        if 'sd' in grooming_setting:

            # If both SD and DG are specified, first apply DG, then SD
            if 'dg' in grooming_setting:
                if jet_dg.has_constituents():
                    jet_groomed = sd.result(jet_dg)
                else:
                    return
            else:
                jet_groomed = jet_sd

            sd_info = fjcontrib.get_SD_jet_info(jet_groomed)
            theta_g = sd_info.dR / jetR
            zg = sd_info.z

        elif 'dg' in grooming_setting:
            jet_groomed = jet_dg

            # (https://phab.hepforge.org/source/fastjetsvn/browse/contrib/contribs/LundPlane/tags/1.0.3/LundGenerator.hh)
            dR = jet_dg_lund.Delta()
            theta_g = dR / jetR
            zg = jet_dg_lund.z()

        # Fill histograms
        if R_max:
            suffix = '_Rmax{}'.format(R_max)
        else:
            suffix = ''
        if grooming_setting in self.obs_grooming_settings['theta_g']:
            getattr(
                self, 'h_theta_g_JetPt_R{}_{}{}'.format(
                    jetR, grooming_label,
                    suffix)).Fill(jet_pt_ungroomed, theta_g)
        if grooming_setting in self.obs_grooming_settings['zg']:
            getattr(self, 'h_zg_JetPt_R{}_{}{}'.format(
                jetR, grooming_label, suffix)).Fill(jet_pt_ungroomed, zg)

        # Fill jet axis difference
        if 'jet_axis' in self.observable_list:

            # Recluster with WTA (with larger jet R)
            jet_def_wta = fj.JetDefinition(fj.cambridge_algorithm, 2 * jetR)
            jet_def_wta.set_recombination_scheme(fj.WTA_pt_scheme)
            if self.debug_level > 2:
                print('WTA jet definition is:', jet_def_wta)
            reclusterer_wta = fjcontrib.Recluster(jet_def_wta)
            jet_wta = reclusterer_wta.result(jet)

            self.fill_jet_axis_histograms(jet, jet_groomed, jet_wta, jetR,
                                          grooming_setting, grooming_label)
Ejemplo n.º 11
0
def main():
    parser = argparse.ArgumentParser(description='pythia8 in python',
                                     prog=os.path.basename(__file__))
    parser.add_argument('-i',
                        '--input',
                        help='input file',
                        default='low',
                        type=str,
                        required=True)
    parser.add_argument('--hepmc',
                        help='what format 2 or 3',
                        default=2,
                        type=int)
    parser.add_argument('--nev', help='number of events', default=10, type=int)
    args = parser.parse_args()

    ###
    # now lets read the HEPMC file and do some jet finding
    if args.hepmc == 3:
        input_hepmc = pyhepmc_ng.ReaderAscii(args.input)
    if args.hepmc == 2:
        input_hepmc = pyhepmc_ng.ReaderAsciiHepMC2(args.input)

    if input_hepmc.failed():
        print("[error] unable to read from {}".format(args.input))
        sys.exit(1)

    # jet finder
    # print the banner first
    fj.ClusterSequence.print_banner()
    print()
    jet_R0 = 0.4
    jet_def = fj.JetDefinition(fj.antikt_algorithm, jet_R0)
    jet_selector = fj.SelectorPtMin(10.0) & fj.SelectorPtMax(
        500.0) & fj.SelectorAbsEtaMax(3)

    all_jets = []
    event_hepmc = pyhepmc_ng.GenEvent()
    pbar = tqdm.tqdm(range(args.nev))
    while not input_hepmc.failed():
        ev = input_hepmc.read_event(event_hepmc)
        if input_hepmc.failed():
            break
        jets_hepmc = find_jets_hepmc(jet_def, jet_selector, event_hepmc)
        all_jets.extend(jets_hepmc)
        pbar.update()
        if pbar.n >= args.nev:
            break

    jet_def_lund = fj.JetDefinition(fj.cambridge_algorithm, 1.0)
    lund_gen = fjcontrib.LundGenerator(jet_def_lund)

    print('[i] making lund diagram for all jets...')
    lunds = [lund_gen.result(j) for j in all_jets]

    print('[i] listing lund plane points... Delta, kt - for {} selected jets'.
          format(len(all_jets)))
    for l in lunds:
        if len(l) < 1:
            continue
        print('- jet pT={0:5.2f} eta={1:5.2f}'.format(l[0].pair().perp(),
                                                      l[0].pair().eta()))
        print('  Deltas={}'.format([s.Delta() for s in l]))
        print('  kts={}'.format([s.kt() for s in l]))
        print()

    print('[i] reclustering and using soft drop...')
    jet_def_rc = fj.JetDefinition(fj.cambridge_algorithm, 0.1)
    print('[i] Reclustering:', jet_def_rc)

    all_jets_sd = []
    rc = fjcontrib.Recluster(jet_def_rc, True)
    sd = fjcontrib.SoftDrop(0, 0.1, 1.0)
    for i, j in enumerate(all_jets):
        j_rc = rc.result(j)
        print()
        print('- [{0:3d}] orig pT={1:10.3f} reclustered pT={2:10.3f}'.format(
            i, j.perp(), j_rc.perp()))
        j_sd = sd.result(j)
        print('  |-> after soft drop pT={0:10.3f} delta={1:10.3f}'.format(
            j_sd.perp(),
            j_sd.perp() - j.perp()))
        all_jets_sd.append(j_sd)
        sd_info = fjcontrib.get_SD_jet_info(j_sd)
        print(
            "  |-> SD jet params z={0:10.3f} dR={1:10.3f} mu={2:10.3f}".format(
                sd_info.z, sd_info.dR, sd_info.mu))

    fout = ROOT.TFile('hepmc_jetreco.root', 'recreate')
    lbins = logbins(1., 500, 50)
    hJetPt04 = ROOT.TH1D("hJetPt04", "hJetPt04", 50, lbins)
    hJetPt04sd = ROOT.TH1D("hJetPt04sd", "hJetPt04sd", 50, lbins)
    [hJetPt04.Fill(j.perp()) for j in all_jets]
    [hJetPt04sd.Fill(j.perp()) for j in all_jets_sd]
    hLund = ROOT.TH2D("hLund", "hLund", 60, 0, 6, 100, -4, 5)
    lunds = [lund_gen.result(j) for j in all_jets if j.perp() > 100]
    j100 = [j for j in all_jets if j.perp() > 100]
    print('{} jets above 100 GeV/c'.format(len(j100)))
    for l in lunds:
        for s in l:
            hLund.Fill(math.log(1. / s.Delta()), math.log(s.kt()))
    fout.Write()
Ejemplo n.º 12
0
def main():
    parser = argparse.ArgumentParser(description='pythia8 fastjet on the fly',
                                     prog=os.path.basename(__file__))
    pyconf.add_standard_pythia_args(parser)
    parser.add_argument('--ignore-mycfg',
                        help="ignore some settings hardcoded here",
                        default=False,
                        action='store_true')

    args = parser.parse_args()

    # print the banner first
    fj.ClusterSequence.print_banner()
    print()
    # set up our jet definition and a jet selector
    jet_R0 = 0.4
    jet_def = fj.JetDefinition(fj.antikt_algorithm, jet_R0)
    jet_selector = fj.SelectorPtMin(100.0) & fj.SelectorAbsEtaMax(1)
    print(jet_def)

    all_jets = []

    mycfg = ['PhaseSpace:pThatMin = 100']
    if args.ignore_mycfg:
        mycfg = []
    pythia = pyconf.create_and_init_pythia_from_args(args, mycfg)
    if not pythia:
        print("[e] pythia initialization failed.")
        return
    if args.nev < 100:
        args.nev = 100
    for i in tqdm.tqdm(range(args.nev)):
        if not pythia.next():
            continue
        parts = pythiafjext.vectorize(pythia, True, -1, 1, False)
        jets = jet_selector(jet_def(parts))
        all_jets.extend(jets)

    pythia.stat()

    jet_def_lund = fj.JetDefinition(fj.cambridge_algorithm, 1.0)
    lund_gen = fjcontrib.LundGenerator(jet_def_lund)

    print('making lund diagram for all jets...', lund_gen.description())
    lunds = [lund_gen.result(j) for j in all_jets]

    print(
        'listing lund plane points... Delta, kt - for {} selected jets'.format(
            len(all_jets)))
    for l in lunds:
        print('- jet pT={0:5.2f} eta={1:5.2f}'.format(l[0].pair().perp(),
                                                      l[0].pair().eta()))
        print('  Deltas={}'.format([s.Delta() for s in l]))
        print('  kts={}'.format([s.kt() for s in l]))
        print()

    dy_groomer = fjcontrib.DynamicalGroomer(jet_def_lund)
    print(dy_groomer.description())
    dy_groomed = [dy_groomer.result(j, 2) for j in all_jets]
    print('listing results from dynamical grooming...')
    for l in dy_groomed:
        print(l, '  kt={}'.format(l.kt()))

    for j in all_jets:
        rdyng2 = dy_groomer.result(j, 2)
        rdyng1 = dy_groomer.result(j, 1)
        print('jet', j)
        print('- all splits kts:',
              sorted([s.kt() for s in dy_groomer.lund_splits()], reverse=True))
        print('- dynG kt a=1:', rdyng1.kt(), 'a=2:', rdyng2.kt())
        print()

    return
    print('[i] reclustering and using soft drop...')
    jet_def_rc = fj.JetDefinition(fj.cambridge_algorithm, 0.1)
    print('Reclustering:', jet_def_rc)

    rc = fjcontrib.Recluster(jet_def_rc, True)
    sd = fjcontrib.SoftDrop(0, 0.1, 1.0)
    for i, j in enumerate(all_jets):
        j_rc = rc.result(j)
        print()
        print('- [{0:3d}] orig pT={1:10.3f} reclustered pT={2:10.3f}'.format(
            i, j.perp(), j_rc.perp()))
        j_sd = sd.result(j)
        print('  |-> after soft drop pT={0:10.3f} delta={1:10.3f}'.format(
            j_sd.perp(),
            j_sd.perp() - j.perp()))
        sd_info = fjcontrib.get_SD_jet_info(j_sd)
        print(
            "  |-> SD jet params z={0:10.3f} dR={1:10.3f} mu={2:10.3f}".format(
                sd_info.z, sd_info.dR, sd_info.mu))
Ejemplo n.º 13
0
def main():
    parser = argparse.ArgumentParser(description='pythia8 fastjet on the fly',
                                     prog=os.path.basename(__file__))
    pyconf.add_standard_pythia_args(parser)
    parser.add_argument('--ignore-mycfg',
                        help="ignore some settings hardcoded here",
                        default=False,
                        action='store_true')
    parser.add_argument('--output',
                        help="output file name",
                        default="test_hjet_parton.root",
                        type=str)
    parser.add_argument('--no-tt',
                        help="do not require TT to accept the event",
                        default=False,
                        action='store_true')
    parser.add_argument('--charged',
                        help="analyze only the charged particles of the FS",
                        default=False,
                        action='store_true')
    parser.add_argument('--max-jet-pt',
                        help="maximum jet pT to consider",
                        type=float,
                        default=100.)
    args = parser.parse_args()

    # print the banner first
    fj.ClusterSequence.print_banner()
    print()
    # set up our jet definition and a jet selector
    hadron_eta_max = 2.0
    jet_R0 = 0.4
    jet_def = fj.JetDefinition(fj.antikt_algorithm, jet_R0)
    jet_selector = fj.SelectorPtMin(10.0) & fj.SelectorPtMax(
        args.max_jet_pt) & fj.SelectorAbsEtaMax(hadron_eta_max - jet_R0)
    # jet_selector = fj.SelectorPtMin(40.0) & fj.SelectorPtMax(200.0) &fj.SelectorAbsEtaMax(hadron_eta_max - jet_R0)
    hTT6_selector = fj.SelectorPtMin(6) & fj.SelectorPtMax(
        7) & fj.SelectorAbsEtaMax(hadron_eta_max)
    hTT12_selector = fj.SelectorPtMin(12) & fj.SelectorPtMax(
        50) & fj.SelectorAbsEtaMax(hadron_eta_max)
    hTT20_selector = fj.SelectorPtMin(20) & fj.SelectorPtMax(
        50) & fj.SelectorAbsEtaMax(hadron_eta_max)

    pythia_fs_part_selection = [pythiafjext.kFinal]
    if args.charged is True:
        pwarning('running with charged particles in the final state')
        pythia_fs_part_selection.append(pythiafjext.kCharged)
    print(jet_def)

    all_jets = []

    # mycfg = ['PhaseSpace:pThatMin = 80']
    # mycfg = ['PhaseSpace:pThatMin = 6']
    # mycfg = ['PhaseSpace:pThatMin = 12']
    # mycfg = ['PhaseSpace:pThatMin = 40']
    mycfg = []
    if args.ignore_mycfg:
        mycfg = []
    pythia = pyconf.create_and_init_pythia_from_args(args, mycfg)
    if not pythia:
        perror("pythia initialization failed.")
        return

    jet_def_lund = fj.JetDefinition(fj.cambridge_algorithm, 1.0)
    lund_gen = fjcontrib.LundGenerator(jet_def_lund)
    print(lund_gen.description())
    dy_groomer = fjcontrib.DynamicalGroomer(jet_def_lund)
    print(dy_groomer.description())
    # sd = fjcontrib.SoftDrop(0, 0.1, 1.0)
    sd = fjcontrib.SoftDrop(0, 0.2, 1.0)
    print(sd)

    # jet_def_rc01 = fj.JetDefinition(fj.cambridge_algorithm, 0.1)
    # jet_def_rc02 = fj.JetDefinition(fj.cambridge_algorithm, 0.2)
    # print (jet_def_rc01)
    # print (jet_def_rc02)
    # rc = fjcontrib.Recluster(jet_def_rc, True)

    jet_def_rc01 = fj.JetDefinition(fj.antikt_algorithm, 0.1)
    jet_def_rc02 = fj.JetDefinition(fj.antikt_algorithm, 0.2)
    print(jet_def_rc01)
    print(jet_def_rc02)
    #rc = fjcontrib.Recluster(jet_def_rc, True)

    # tw = treewriter.RTreeWriter(name = 'lsjvsx', file_name = 'leadsj_vs_x.root')
    tw = treewriter.RTreeWriter(name='lsjvsx', file_name=args.output)

    zero_psj = fj.PseudoJet(0, 0, 10, 10)

    if args.nev < 100:
        args.nev = 100
    t = tqdm.tqdm(total=args.nev)
    while t.n < args.nev:
        if not pythia.next():
            continue

        # information about the leading process
        # print(pythia.info.code(), pythia.info.nameProc(pythia.info.code()))
        # continue
        # parts = pythiafjext.vectorize(pythia, True, -1, 1, False)
        partons = pythiafjext.vectorize_select(pythia, [pythiafjext.kParton],
                                               0, True)
        # parts = pythiafjext.vectorize_select(pythia, [pythiafjext.kFinal, pythiafjext.kCharged], 0, False)
        # parts = pythiafjext.vectorize_select(pythia, [pythiafjext.kFinal], 0, False)
        parts = pythiafjext.vectorize_select(pythia, pythia_fs_part_selection,
                                             0, False)

        hTT6 = zero_psj
        hTT6s = fj.sorted_by_pt(hTT6_selector(parts))
        if len(hTT6s) > 0:
            hTT6 = hTT6s[0]

        hTT12 = zero_psj
        hTT12s = fj.sorted_by_pt(hTT12_selector(parts))
        if len(hTT12s) > 0:
            hTT12 = hTT12s[0]

        hTT20 = zero_psj
        hTT20s = fj.sorted_by_pt(hTT20_selector(parts))
        if len(hTT20s) > 0:
            hTT20 = hTT20s[0]

        if args.no_tt is False:
            if hTT12.perp() < 1 and hTT6.perp() < 1 and hTT20.perp() < 1:
                continue

        jets = jet_selector(jet_def(parts))

        # for j in tqdm.tqdm(jets):
        for j in jets:
            t.update(1)
            j_type = match_dR(j, partons, jet_R0 / 2.)
            if j_type[0] is None:
                continue
            j_sd = sd.result(j)
            sd_info = fjcontrib.get_SD_jet_info(j_sd)
            rc_sjets01 = fj.sorted_by_pt(jet_def_rc01(j.constituents()))
            rc_sjets02 = fj.sorted_by_pt(jet_def_rc02(j.constituents()))
            tw.fill_branches(
                j=j,
                mult=len(parts),
                lund=[ls for ls in lund_gen.result(j)],
                dyg1=dy_groomer.result(j, 1),
                sd=j_sd,
                sd_z=sd_info.z,
                sd_mu=sd_info.mu,
                sd_Delta=sd_info.dR,
                lsjet01=rc_sjets01[0],
                nsjet01=len(rc_sjets01),
                sjet01=rc_sjets01,
                lsjet02=rc_sjets02[0],
                nsjet02=len(rc_sjets02),
                sjet02=rc_sjets02,
                hTT6=hTT6,
                hTT12=hTT12,
                hTT20=hTT20,
                dphi6=j.delta_phi_to(hTT6),
                dphi12=j.delta_phi_to(hTT12),
                dphi20=j.delta_phi_to(hTT20),
                ppid=j_type[0],
                pquark=j_type[1],
                pglue=j_type[2],  # this is redundancy
                pycode=pythia.info.code(),
                pysigmagen=pythia.info.sigmaGen(),
                pysigmaerr=pythia.info.sigmaErr(),
                pyid1=pythia.info.id1pdf(),
                pyid2=pythia.info.id1pdf(),
                pyx1=pythia.info.x1pdf(),
                pyx2=pythia.info.x2pdf(),
                pypdf1=pythia.info.pdf1(),
                pyQfac=pythia.info.QFac(),
                pyalphaS=pythia.info.alphaS(),
                pypthat=pythia.info.pTHat(),
                pymhat=pythia.info.mHat())
            tw.fill_tree()

    t.close()
    pythia.stat()

    tw.write_and_close()
Ejemplo n.º 14
0
pythia.stat()

jet_def_lund = fj.JetDefinition(fj.cambridge_algorithm, 1.0)
lund_gen = fjcontrib.LundGenerator(jet_def_lund)

print('making lund diagram for all jets...')
lunds = [lund_gen.result(j) for j in all_jets]

print('listing lund plane points... Delta, kt - for {} selected jets'.format(len(all_jets)))
for l in lunds:
	print ('- jet pT={0:5.2f} eta={1:5.2f}'.format(l[0].pair().perp(), l[0].pair().eta()))
	print ('  Deltas={}'.format([s.Delta() for s in l]))
	print ('  kts={}'.format([s.Delta() for s in l]))
	print ( )

print('[i] reclustering and using soft drop...')
jet_def_rc = fj.JetDefinition(fj.cambridge_algorithm, 0.1)
print('Reclustering:', jet_def_rc)

rc = fjcontrib.Recluster(jet_def_rc, True)
sd = fjcontrib.SoftDrop(0, 0.1, 1.0)
for i,j in enumerate(all_jets):
    j_rc = rc.result(j)
    print()
    print('- [{0:3d}] orig pT={1:10.3f} reclustered pT={2:10.3f}'.format(i, j.perp(), j_rc.perp()))
    j_sd = sd.result(j)
    print('  |-> after soft drop pT={0:10.3f} delta={1:10.3f}'.format(j_sd.perp(), j_sd.perp() - j.perp()))
    sd_info = fjcontrib.get_SD_jet_info(j_sd)
    print("  |-> SD jet params z={0:10.3f} dR={1:10.3f} mu={2:10.3f}".format(sd_info.z, sd_info.dR, sd_info.mu))
def main():
    parser = argparse.ArgumentParser(description='pythia8 fastjet on the fly',
                                     prog=os.path.basename(__file__))
    parser.add_argument('-o',
                        '--output',
                        help='output file name',
                        default='pythia_lund_sd.root',
                        type=str)
    pyconf.add_standard_pythia_args(parser)
    args = parser.parse_args()

    # print the banner first
    fj.ClusterSequence.print_banner()
    print()
    # set up our jet definition and a jet selector
    jet_R0 = 0.4
    jet_def = fj.JetDefinition(fj.antikt_algorithm, jet_R0)

    jet_def_lund = fj.JetDefinition(fj.cambridge_algorithm, 1.0)
    lund_gen = fjcontrib.LundGenerator(jet_def_lund)
    sd = fjcontrib.SoftDrop(0, 0.1, 1.0)

    jet_selector = fj.SelectorPtMin(10) & fj.SelectorAbsEtaMax(1)
    print(jet_def)

    fout = r.TFile(args.output, 'RECREATE')
    fout.cd()
    tnjets = r.TNtuple('jets', 'jets',
                       'iev:nj:pt:eta:phi:f5:f6:f5dR:f6dR:proc:xsec')
    tnjets_sd = r.TNtuple('jets_sd', 'jets_sd',
                          'iev:nj:pt:f5:f6:f5dR:f6dR:proc:xsec:pt_sd:z:dR:mu')
    tnlund = r.TNtuple('lund', 'lund',
                       "iev:nj:pt:f5:f6:f5dR:f6dR:ns:pts:delta:kt")

    nbins = 20
    lbins = logbins(10, 500, nbins)
    hjpt = r.TH1F('hjpt', 'hjpt', nbins, lbins)
    hjptq = r.TH1F('hjptq', 'hjptq', nbins, lbins)
    hjptg = r.TH1F('hjptg', 'hjptg', nbins, lbins)

    hjptsd = r.TH1F('hjptsd', 'hjptsd', nbins, lbins)
    hjptsdq = r.TH1F('hjptsdq', 'hjptsdq', nbins, lbins)
    hjptsdg = r.TH1F('hjptsdg', 'hjptsdg', nbins, lbins)

    hjptsdkt10 = r.TH1F('hjptsdkt10', 'hjptsdkt10', nbins, lbins)
    hjptsdqkt10 = r.TH1F('hjptsdqkt10', 'hjptsdqkt10', nbins, lbins)
    hjptsdgkt10 = r.TH1F('hjptsdgkt10', 'hjptsdgkt10', nbins, lbins)

    hjptsdkt30 = r.TH1F('hjptsdkt30', 'hjptsdkt30', nbins, lbins)
    hjptsdqkt30 = r.TH1F('hjptsdqkt30', 'hjptsdqkt30', nbins, lbins)
    hjptsdgkt30 = r.TH1F('hjptsdgkt30', 'hjptsdgkt30', nbins, lbins)

    hjptktsd = r.TH2F('hjptktsd', 'hjptktsd', 50, 0, 500, 50, 0, 500)

    mycfg = []
    pythia = pyconf.create_and_init_pythia_from_args(args, mycfg)
    if args.nev < 100:
        args.nev = 100
    for i in tqdm.tqdm(range(args.nev)):
        if not pythia.next():
            continue
        parts = pythiafjext.vectorize(pythia, True, -2, 2, False)
        jets = fj.sorted_by_pt(jet_selector(jet_def(parts)))
        f5 = pythia.event[5]
        f6 = pythia.event[6]
        f5psj = fj.PseudoJet(f5.px(), f5.py(), f5.pz(), f5.e())
        f6psj = fj.PseudoJet(f6.px(), f6.py(), f6.pz(), f6.e())
        iproc = pythia.info.code()
        xsec = pythia.info.sigmaGen()
        for nj, j in enumerate(jets):
            f5dR = f5psj.delta_R(j)
            f6dR = f6psj.delta_R(j)
            tnjets.Fill(i, nj, j.pt(), j.eta(), j.phi(), f5.id(), f6.id(),
                        f5dR, f6dR, iproc, xsec)
            lund = lund_gen.result(j)
            for ns, s in enumerate(lund):
                tnlund.Fill(i, nj, j.pt(), f5.id(), f6.id(), f5dR, f6dR, ns,
                            s.pair().perp(), s.Delta(), s.kt())
            j_sd = sd.result(j)
            sd_info = fjcontrib.get_SD_jet_info(j_sd)
            tnjets_sd.Fill(i, nj, j.pt(), f5.id(), f6.id(), f5dR, f6dR, iproc,
                           xsec, j_sd.pt(), sd_info.z, sd_info.dR, sd_info.mu)
            # fill the histograms
            f = None
            if f5dR < 0.4: f = f5
            if f6dR < 0.4: f = f6
            if f is not None:
                kt = sd_info.z * j_sd.perp()
                hjpt.Fill(j.pt())
                if sd_info.z >= 0:
                    hjptsd.Fill(j.pt())
                    if kt > 10: hjptsdkt10.Fill(j.pt())
                    if kt > 30: hjptsdkt30.Fill(j.pt())
                if f.id() != 21:
                    hjptq.Fill(j.pt())
                    if sd_info.z >= 0:
                        hjptsdq.Fill(j.pt())
                        if kt > 10: hjptsdqkt10.Fill(j.pt())
                        if kt > 30: hjptsdqkt30.Fill(j.pt())
                else:
                    hjptg.Fill(j.pt())
                    if sd_info.z >= 0:
                        hjptsdg.Fill(j.pt())
                        if kt > 10: hjptsdgkt10.Fill(j.pt())
                        if kt > 30: hjptsdgkt30.Fill(j.pt())
    pythia.stat()

    fout.cd()
    hjptq_r = hjptq.Clone('hjptq_r')
    hjptq_r.Sumw2()
    hjptq_r.Divide(hjpt)
    hjptg_r = hjptg.Clone('hjptg_r')
    hjptg_r.Sumw2()
    hjptg_r.Divide(hjpt)

    hjptsdq_r = hjptsdq.Clone('hjptsdq_r')
    hjptsdq_r.Sumw2()
    hjptsdq_r.Divide(hjptsd)
    hjptsdg_r = hjptsdg.Clone('hjptsdg_r')
    hjptsdg_r.Sumw2()
    hjptsdg_r.Divide(hjptsd)

    hjptsdqkt10_r = hjptsdqkt10.Clone('hjptsdqkt10_r')
    hjptsdqkt10_r.Sumw2()
    hjptsdqkt10_r.Divide(hjptsdkt10)
    hjptsdgkt10_r = hjptsdgkt10.Clone('hjptsdgkt10_r')
    hjptsdgkt10_r.Sumw2()
    hjptsdgkt10_r.Divide(hjptsdkt10)

    hjptsdqkt30_r = hjptsdqkt30.Clone('hjptsdqkt30_r')
    hjptsdqkt30_r.Sumw2()
    hjptsdqkt30_r.Divide(hjptsdkt30)
    hjptsdgkt30_r = hjptsdgkt30.Clone('hjptsdgkt30_r')
    hjptsdgkt30_r.Sumw2()
    hjptsdgkt30_r.Divide(hjptsdkt30)

    fout.Write()
    fout.Close()
Ejemplo n.º 16
0
    def process_event(self, event):
        # assume this is done already (when creating the ntuples):
        # self.fj_particles_selected = self.particle_selector(fj_particles)
        if self.constit_subtractor:
            self.fj_particles_selected = self.constit_subtractor.process_event(
                event.particles)
        else:
            self.fj_particles_selected = event.particles
        self.cs = fj.ClusterSequenceArea(self.fj_particles_selected,
                                         self.jet_def, self.jet_area_def)
        # self.cs = fj.ClusterSequence(self.fj_particles_selected, self.jet_def)
        self.jets = fj.sorted_by_pt(self.cs.inclusive_jets())
        self.rho = 0
        if self.bg_estimator:
            self.bg_estimator.set_particles(self.fj_particles_selected)
            self.rho = self.bg_estimator.rho()
        if self.jets[0].pt(
        ) - self.rho * self.jets[0].area() < self.jet_pt_min:
            return False
        self.jets_selected = self.jet_selector(self.jets)
        # remove jets containing bad (high pT) particles
        self.jets_detok = list(
            filter(
                lambda j: max([t.pt() for t in j.constituents()]) < self.
                particle_pt_max, self.jets_selected))
        # print(len(self.jets_selected), len(self.jets_detok))
        self.sd_jets = []
        self.sd_jets_info = []
        for isd, sd in enumerate(self.sds):
            self.sd_jets.append([])
            self.sd_jets_info.append([])
        for j in self.jets_detok:
            for isd, sd in enumerate(self.sds):
                jet_sd = sd.result(j)
                self.sd_jets[isd].append(jet_sd)
                self.sd_jets_info[isd].append(
                    fjcontrib.get_SD_jet_info(jet_sd))

        if self.event_output:
            self.event_output.fill_branch('ev_id', event.ev_id)
            self.event_output.fill_branch('run_number', event.run_number)
            self.event_output.fill_branch('rho', self.rho)
            self.event_output.fill_tree()

        if self.jet_output:
            self.jet_output.fill_branch('ev_id', event.ev_id)
            self.jet_output.fill_branch('run_number', event.run_number)
            self.jet_output.fill_branch('rho', self.rho)
            self.jet_output.fill_branch('jet', [j for j in self.jets_detok])
            self.jet_output.fill_branch(
                'jet_ptsub',
                [j.pt() - (self.rho * j.area()) for j in self.jets_detok])
            for isd, sd in enumerate(self.sds):
                bname = 'jet_sd{}pt'.format(self.sd_betas[isd])
                self.jet_output.fill_branch(
                    bname, [j.pt() for j in self.sd_jets[isd]])
                bname = 'jet_sd{}zg'.format(self.sd_betas[isd])
                self.jet_output.fill_branch(
                    bname, [j.z for j in self.sd_jets_info[isd]])
                bname = 'jet_sd{}Rg'.format(self.sd_betas[isd])
                self.jet_output.fill_branch(
                    bname, [j.dR for j in self.sd_jets_info[isd]])
                bname = 'jet_sd{}thetag'.format(self.sd_betas[isd])
                self.jet_output.fill_branch(
                    bname, [j.dR / self.jet_R for j in self.sd_jets_info[isd]])
            self.jet_output.fill_tree()
        return True
Ejemplo n.º 17
0
def main():
    parser = argparse.ArgumentParser(description='pythia8 fastjet on the fly',
                                     prog=os.path.basename(__file__))
    pyconf.add_standard_pythia_args(parser)
    parser.add_argument('--ignore-mycfg',
                        help="ignore some settings hardcoded here",
                        default=False,
                        action='store_true')

    args = parser.parse_args()

    # print the banner first
    fj.ClusterSequence.print_banner()
    print()
    # set up our jet definition and a jet selector
    jet_R0 = 0.4
    jet_def = fj.JetDefinition(fj.antikt_algorithm, jet_R0)
    jet_selector = fj.SelectorPtMin(100.0) & fj.SelectorAbsEtaMax(1)
    print(jet_def)

    all_jets = []

    mycfg = ['PhaseSpace:pThatMin = 100']
    if args.ignore_mycfg:
        mycfg = []
    pythia = pyconf.create_and_init_pythia_from_args(args, mycfg)
    if not pythia:
        print("[e] pythia initialization failed.")
        return
    if args.nev < 10:
        args.nev = 10
    for i in tqdm.tqdm(range(args.nev)):
        if not pythia.next():
            continue
        attach_pythia_particle_info = True
        parts = pythiafjext.vectorize_select(pythia, [pythiafjext.kFinal],
                                             attach_pythia_particle_info)
        jets = jet_selector(jet_def(parts))
        for j in jets:
            gshop = fjcontrib.GroomerShop(j)
            # note these LundDeclustering objects can be streamed to a tree using RTreeStreamer
            dg01 = gshop.dynamical(0.1)
            idg01 = gshop.index(dg01)
            dg20 = gshop.dynamical(2.0)
            idg20 = gshop.index(dg20)
            max_kt = gshop.max_kt()
            imax_kt = gshop.index(max_kt)
            max_pt_softer = gshop.max_pt_softer()
            # check if the same split selected:
            # if dg01.pair() == dg20.pair():
            # or use indices
            if idg01 == idg20 and idg01 > 0:
                print('- interesting jet?:')
                print('  dg01         :', dg01.as_string(), 'index dg01:',
                      idg01)
                print('  dg20         :', dg20.as_string(), 'index dg20:',
                      idg20)
                print('  max_kt       :', max_kt.as_string(), 'index max_kt:',
                      imax_kt)
                print('  max_pt_softer:', max_pt_softer.as_string())
                print('  max_kappa    :', gshop.max_kappa().as_string())
                print('  max_tf       :', gshop.max_tf().as_string())
                print('  min_tf       :', gshop.min_tf().as_string())
                print('  max_z        :', gshop.max_z().as_string())

            print('softdrop check for jet:', j)
            sd = fjcontrib.SoftDrop(0, 0.1, 1.0)
            j_sd = sd.result(j)
            #print('  |-> after soft drop pT={0:10.3f} delta={1:10.3f}'.format(j_sd.perp(), j_sd.perp() - j.perp()))
            sd_info = fjcontrib.get_SD_jet_info(j_sd)
            print("  |-> SD jet params          z={} dR={} mu={}".format(
                sd_info.z, sd_info.dR, sd_info.mu))
            print('  |-> GroomerShop::soft_drop',
                  gshop.soft_drop(0, 0.1, 1.0).as_string())
            # or call with no radius param - will use max allowed
            # print('  |-> GroomerShop::soft_drop', gshop.soft_drop(0, 0.1).as_string())

    pythia.stat()
Ejemplo n.º 18
0
def main():
    parser = argparse.ArgumentParser(description='pythia8 fastjet on the fly',
                                     prog=os.path.basename(__file__))
    pyconf.add_standard_pythia_args(parser)
    parser.add_argument('--ignore-mycfg',
                        help="ignore some settings hardcoded here",
                        default=False,
                        action='store_true')

    args = parser.parse_args()

    # print the banner first
    fj.ClusterSequence.print_banner()
    print()
    # set up our jet definition and a jet selector
    jet_R0 = 0.4
    jet_def = fj.JetDefinition(fj.antikt_algorithm, jet_R0)
    jet_selector = fj.SelectorPtMin(80.0) & fj.SelectorPtMax(
        100.0) & fj.SelectorAbsEtaMax(1)
    # jet_selector = fj.SelectorPtMin(40.0) & fj.SelectorPtMax(200.0) &fj.SelectorAbsEtaMax(1)
    print(jet_def)

    all_jets = []

    mycfg = ['PhaseSpace:pThatMin = 80']
    # mycfg = ['PhaseSpace:pThatMin = 40']
    if args.ignore_mycfg:
        mycfg = []
    pythia = pyconf.create_and_init_pythia_from_args(args, mycfg)
    if not pythia:
        perror("pythia initialization failed.")
        return

    jet_def_lund = fj.JetDefinition(fj.cambridge_algorithm, 1.0)
    lund_gen = fjcontrib.LundGenerator(jet_def_lund)
    print(lund_gen.description())
    dy_groomer = fjcontrib.DynamicalGroomer(jet_def_lund)
    print(dy_groomer.description())
    # sd = fjcontrib.SoftDrop(0, 0.1, 1.0)
    sd = fjcontrib.SoftDrop(0, 0.2, 1.0)
    print(sd)

    # jet_def_rc01 = fj.JetDefinition(fj.cambridge_algorithm, 0.1)
    # jet_def_rc02 = fj.JetDefinition(fj.cambridge_algorithm, 0.2)
    # print (jet_def_rc01)
    # print (jet_def_rc02)
    # rc = fjcontrib.Recluster(jet_def_rc, True)

    jet_def_rc01 = fj.JetDefinition(fj.antikt_algorithm, 0.1)
    jet_def_rc02 = fj.JetDefinition(fj.antikt_algorithm, 0.2)
    print(jet_def_rc01)
    print(jet_def_rc02)
    #rc = fjcontrib.Recluster(jet_def_rc, True)

    # tw = treewriter.RTreeWriter(name = 'lsjvsx', file_name = 'leadsj_vs_x.root')
    tw = treewriter.RTreeWriter(name='lsjvsx',
                                file_name='leadsj_vs_x_bias80.root')

    if args.nev < 100:
        args.nev = 100
    for i in tqdm.tqdm(range(args.nev)):
        if not pythia.next():
            continue
        # parts = pythiafjext.vectorize(pythia, True, -1, 1, False)
        partons = pythiafjext.vectorize_select(pythia, [pythiafjext.kParton],
                                               0, True)
        parts = pythiafjext.vectorize_select(
            pythia, [pythiafjext.kFinal, pythiafjext.kCharged], 0, False)
        # parts = pythiafjext.vectorize_select(pythia, [pythiafjext.kFinal], 0, False)
        jets = jet_selector(jet_def(parts))

        # for j in tqdm.tqdm(jets):
        for j in jets:
            j_type = match_dR(j, partons, jet_R0 / 2.)
            j_sd = sd.result(j)
            sd_info = fjcontrib.get_SD_jet_info(j_sd)
            rc_sjets01 = fj.sorted_by_pt(jet_def_rc01(j.constituents()))
            rc_sjets02 = fj.sorted_by_pt(jet_def_rc02(j.constituents()))
            tw.fill_branches(
                j=j,
                lund=[ls for ls in lund_gen.result(j)],
                dyg1=dy_groomer.result(j, 1),
                sd=j_sd,
                sd_z=sd_info.z,
                sd_mu=sd_info.mu,
                sd_Delta=sd_info.dR,
                lsjet01=rc_sjets01[0],
                nsjet01=len(rc_sjets01),
                sjet01=rc_sjets01,
                lsjet02=rc_sjets02[0],
                nsjet02=len(rc_sjets02),
                sjet02=rc_sjets02,
                ppid=j_type[0],
                pquark=j_type[1],
                pglue=j_type[2]  # this is redundancy
            )
            tw.fill_tree()

    pythia.stat()

    tw.write_and_close()
Ejemplo n.º 19
0
def main():
    parser = argparse.ArgumentParser(description='pythia8 fastjet on the fly',
                                     prog=os.path.basename(__file__))
    pyconf.add_standard_pythia_args(parser)
    # could use --py-seed
    parser.add_argument('--user-seed',
                        help='pythia seed',
                        default=1111,
                        type=int)
    parser.add_argument('--output', default="output.root", type=str)
    parser.add_argument('--beta', help='sd beta', default=0, type=float)
    parser.add_argument('--jetR', help='jet radius', default=0.4, type=float)
    args = parser.parse_args()

    if args.user_seed < 0:
        args.user_seed = 1111
    pinfo('user seed for pythia', args.user_seed)
    # mycfg = ['PhaseSpace:pThatMin = 100']
    mycfg = ['Random:setSeed=on', 'Random:seed={}'.format(args.user_seed)]
    mycfg.append('HadronLevel:all=off')
    pythia = pyconf.create_and_init_pythia_from_args(args, mycfg)
    if args.nev < 100:
        args.nev = 100

    # print the banner first
    fj.ClusterSequence.print_banner()
    print()
    # set up our jet definition and a jet selector
    jet_R0 = args.jetR
    jet_def = fj.JetDefinition(fj.antikt_algorithm, jet_R0)
    print(jet_def)

    # hadron level - ALICE
    max_eta_hadron = 0.9
    pwarning('max eta for particles after hadronization set to',
             max_eta_hadron)
    parts_selector_h = fj.SelectorAbsEtaMax(max_eta_hadron)
    jet_selector = fj.SelectorPtMin(20.0) & fj.SelectorPtMax(
        100.0) & fj.SelectorAbsEtaMax(max_eta_hadron - 1.05 * jet_R0)

    max_eta_parton = max_eta_hadron + 2. * jet_R0
    pwarning('max eta for partons set to', max_eta_parton)
    parts_selector_p = fj.SelectorAbsEtaMax(max_eta_parton)

    outf = ROOT.TFile(
        args.output.replace('.root', '_beta{}.root'.format(args.beta)),
        'recreate')
    outf.cd()
    t = ROOT.TTree('t', 't')
    tw = RTreeWriter(tree=t)

    # event loop
    for iev in tqdm.tqdm(range(args.nev)):
        if not pythia.next():
            continue

        parts_pythia_p = pythiafjext.vectorize_select(pythia,
                                                      [pythiafjext.kFinal], 0,
                                                      True)
        parts_pythia_p_selected = parts_selector_p(parts_pythia_p)

        hstatus = pythia.forceHadronLevel()
        if not hstatus:
            pwarning('forceHadronLevel false event', iev)
            continue
        # parts_pythia_h = pythiafjext.vectorize_select(pythia, [pythiafjext.kHadron, pythiafjext.kCharged])
        parts_pythia_h = pythiafjext.vectorize_select(pythia,
                                                      [pythiafjext.kFinal], 0,
                                                      True)
        parts_pythia_h_selected = parts_selector_h(parts_pythia_h)

        parts_pythia_hch = pythiafjext.vectorize_select(
            pythia, [pythiafjext.kFinal, pythiafjext.kCharged], 0, True)
        parts_pythia_hch_selected = parts_selector_h(parts_pythia_hch)

        # pinfo('debug partons...')
        # for p in parts_pythia_p_selected:
        # 	pyp = pythiafjext.getPythia8Particle(p)
        # 	print(pyp.name())
        # pinfo('debug hadrons...')
        # for p in parts_pythia_h_selected:
        # 	pyp = pythiafjext.getPythia8Particle(p)
        # 	print(pyp.name())
        # pinfo('debug ch. hadrons...')
        # for p in parts_pythia_hch_selected:
        # 	pyp = pythiafjext.getPythia8Particle(p)
        # 	print(pyp.name())

        # parts = pythiafjext.vectorize(pythia, True, -1, 1, False)
        jets_p = fj.sorted_by_pt(jet_def(parts_pythia_p))
        jets_h = fj.sorted_by_pt(jet_def(parts_pythia_h))
        jets_ch_h = fj.sorted_by_pt(jet_selector(jet_def(parts_pythia_hch)))

        sd = fjcontrib.SoftDrop(args.beta, 0.1, jet_R0)

        for i, jchh in enumerate(jets_ch_h):
            # match hadron (full) jet
            for j, jh in enumerate(jets_h):
                drhh = jchh.delta_R(jh)
                if drhh < jet_R0 / 2.:
                    # match parton level jet
                    for k, jp in enumerate(jets_p):
                        dr = jh.delta_R(jp)
                        if dr < jet_R0 / 2.:
                            jchh_sd = sd.result(jchh)
                            jchh_sd_info = fjcontrib.get_SD_jet_info(jchh_sd)
                            jh_sd = sd.result(jh)
                            jh_sd_info = fjcontrib.get_SD_jet_info(jh_sd)
                            jp_sd = sd.result(jp)
                            jp_sd_info = fjcontrib.get_SD_jet_info(jp_sd)

                            # pwarning('event', iev)
                            # pinfo('matched jets: ch.h:', jchh.pt(), 'h:', jh.pt(), 'p:', jp.pt(), 'dr:', dr)

                            tw.fill_branch('iev', iev)
                            tw.fill_branch('ch', jchh)
                            tw.fill_branch('h', jh)
                            tw.fill_branch('p', jp)

                            tw.fill_branch('p_zg', jp_sd_info.z)
                            tw.fill_branch('p_Rg', jp_sd_info.dR)
                            tw.fill_branch('p_thg', jp_sd_info.dR / jet_R0)
                            tw.fill_branch('p_mug', jp_sd_info.mu)

                            tw.fill_branch('h_zg', jh_sd_info.z)
                            tw.fill_branch('h_Rg', jh_sd_info.dR)
                            tw.fill_branch('h_thg', jh_sd_info.dR / jet_R0)
                            tw.fill_branch('h_mug', jh_sd_info.mu)

                            tw.fill_branch('ch_zg', jchh_sd_info.z)
                            tw.fill_branch('ch_Rg', jchh_sd_info.dR)
                            tw.fill_branch('ch_thg', jchh_sd_info.dR / jet_R0)
                            tw.fill_branch('ch_mug', jchh_sd_info.mu)

                            tw.fill_tree()
            #print("  |-> SD jet params z={0:10.3f} dR={1:10.3f} mu={2:10.3f}".format(sd_info.z, sd_info.dR, sd_info.mu))

    pythia.stat()
    outf.Write()
    outf.Close()
Ejemplo n.º 20
0
def main():
    parser = argparse.ArgumentParser(description='pythia8 fastjet on the fly',
                                     prog=os.path.basename(__file__))
    pyconf.add_standard_pythia_args(parser)
    parser.add_argument('--ignore-mycfg',
                        help="ignore some settings hardcoded here",
                        default=False,
                        action='store_true')
    parser.add_argument('--output', default="output.root", type=str)
    parser.add_argument('--alpha', default=0, type=float)
    parser.add_argument('--dRmax', default=0.25, type=float)
    parts.add_argument('--zcut', default=0.1, type=float)
    parser.add_argument('--overwrite',
                        help="overwrite output",
                        default=False,
                        action='store_true')

    args = parser.parse_args()

    if args.output == 'output.root':
        args.output = 'output_alpha_{}_dRmax_{}_SDzcut_{}.root'.format(
            args.alpha, args.dRmax, args.zcut)

    if os.path.isfile(args.output):
        if not args.overwrite:
            print('[i] output', args.output,
                  'exists - use --overwrite to do just that...')
            return

    # print the banner first
    fj.ClusterSequence.print_banner()
    print()
    # set up our jet definition and a jet selector
    jet_R0 = 0.4
    jet_def = fj.JetDefinition(fj.antikt_algorithm, jet_R0)
    jet_selector = fj.SelectorPtMin(80.0) & fj.SelectorPtMax(
        100.0) & fj.SelectorAbsEtaMax(1 - 1.05 * jet_R0)
    jet_selector_cs = fj.SelectorPtMin(50.0) & fj.SelectorAbsEtaMax(1 - 1.05 *
                                                                    jet_R0)
    # jet_selector = fj.SelectorPtMin(10.0) & fj.SelectorPtMax(20.0) & fj.SelectorAbsEtaMax(1 - 1.05 * jet_R0)
    # jet_selector_cs = fj.SelectorPtMin(0.0) & fj.SelectorAbsEtaMax(1 - 1.05 * jet_R0)
    print(jet_def)

    mycfg = ['PhaseSpace:pThatMin = 80', 'PhaseSpace:pThatMax = -1']
    # mycfg = []
    if args.ignore_mycfg:
        mycfg = []
    pythia = pyconf.create_and_init_pythia_from_args(args, mycfg)
    if not pythia:
        print("[e] pythia initialization failed.")
        return

    sd_zcut = args.zcut
    sd = fjcontrib.SoftDrop(0, sd_zcut, jet_R0)

    max_eta = 1
    cs = CEventSubtractor(alpha=args.alpha,
                          max_distance=args.dRmax,
                          max_eta=max_eta,
                          bge_rho_grid_size=0.25,
                          max_pt_correct=100)
    be = BoltzmannEvent(mean_pt=0.6,
                        multiplicity=1000 * max_eta * 2,
                        max_eta=max_eta,
                        max_pt=100)
    parts_selector = fj.SelectorAbsEtaMax(max_eta)

    if args.nev < 100:
        args.nev = 100

    outf = ROOT.TFile(args.output, 'recreate')
    outf.cd()
    tn = ROOT.TNtuple(
        'tn', 'tn',
        'n:pt:phi:eta:cspt:csphi:cseta:dR:dpt:rg:csrg:z:csz:dRg:dzg')
    hpt = ROOT.TH1F('hpt', 'hpt', 40, 00, 160)
    hptcs = ROOT.TH1F('hptcs', 'hptcs', 40, 00, 160)
    hdpt = ROOT.TH1F('hdpt', 'hdpt', 40, -50, 50)
    hrg = ROOT.TH1F('hrg', 'hrg', 40, -1.1, 0.9)
    hrgcs = ROOT.TH1F('hrgcs', 'hrgcs', 40, -1.1, 0.9)
    hdrg = ROOT.TH1F('hdrg', 'hdrg', 40, -1.1, 0.9)
    hdz = ROOT.TH1F('hdz', 'hdz', 40, -1.1, 0.9)
    hdzz = ROOT.TH2F('hdzz', 'hdzz', 40, -1.1, 0.9, 40, -1.1, 0.9)
    hdphi = ROOT.TH1F('hdphi', 'hdphi', 90, -ROOT.TMath.Pi(), ROOT.TMath.Pi())

    t = ROOT.TTree('t', 't')
    tw = RTreeWriter(tree=t)

    for i in tqdm.tqdm(range(args.nev)):
        if not pythia.next():
            continue

        parts_pythia = pythiafjext.vectorize_select(pythia,
                                                    [pythiafjext.kFinal])
        parts = parts_selector(parts_pythia)
        signal_jets = fj.sorted_by_pt(jet_selector(jet_def(parts)))

        if len(signal_jets) < 1:
            continue

        bg_parts = be.generate(offset=10000)

        full_event = bg_parts
        sjet = signal_jets[0]
        lc = [full_event.push_back(psj) for psj in sjet.constituents()]
        # idxs = [psj.user_index() for psj in sjet.constituents()]
        # print('pythia jet:', idxs)
        cs_parts = cs.process_event(full_event)
        cs_signal_jets = fj.sorted_by_pt(jet_selector_cs(jet_def(cs_parts)))

        emb_jets = fj.sorted_by_pt(jet_selector_cs(jet_def(full_event)))

        # max_eta_part = max([j.eta() for j in full_event])
        # print ('number of particles', len(full_event), max_eta_part)
        # mean_pt = sum([j.pt() for j in bg_parts]) / len(bg_parts)
        # print ('mean pt in bg', mean_pt)
        # print ('number of CS particles', len(cs_parts))

        sd_signal_jet = sd.result(sjet)
        sd_info_signal_jet = fjcontrib.get_SD_jet_info(sd_signal_jet)

        # for j in cs_signal_jets:
        for j in emb_jets:
            if matched_pt(sjet, j) <= 0.5:
                continue
            sd_j = sd.result(j)
            sd_info_j = fjcontrib.get_SD_jet_info(sd_j)
            rho = cs.bge_rho.rho()
            tn.Fill(i, sjet.pt(), sjet.phi(), sjet.eta(), j.pt(), j.phi(),
                    j.eta(), j.delta_R(sjet),
                    j.pt() - sjet.pt(), sd_info_signal_jet.dR, sd_info_j.dR,
                    sd_info_j.dR - sd_info_signal_jet.dR, sd_info_signal_jet.z,
                    sd_info_j.z, sd_info_j.z - sd_info_signal_jet.z)
            hpt.Fill(sjet.pt())
            hptcs.Fill(j.pt())
            hdpt.Fill(j.pt() - sjet.pt())
            hrg.Fill(sd_info_signal_jet.dR)
            hrgcs.Fill(sd_info_j.dR)
            hdphi.Fill(sjet.delta_phi_to(j))

            if sd_info_j.dR > 0 and sd_info_signal_jet.dR > 0:
                hdrg.Fill(sd_info_j.dR - sd_info_signal_jet.dR)
            if sd_info_j.z > 0 and sd_info_signal_jet.z > 0:
                hdz.Fill(sd_info_j.z - sd_info_signal_jet.z)
                hdzz.Fill(sd_info_j.z, sd_info_j.z - sd_info_signal_jet.z)

        # for i,j in enumerate(signal_jets):
        # 	j_sd = sd.result(j)
        # 	sd_info = fjcontrib.get_SD_jet_info(j_sd)
        # 	# print("  |-> SD jet params z={0:10.3f} dR={1:10.3f} mu={2:10.3f}".format(sd_info.z, sd_info.dR, sd_info.mu))

    pythia.stat()
    outf.Write()
    outf.Close()