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()
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)
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))
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]
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))
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
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()
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
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()
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)
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()
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))
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()
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()
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
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()
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()
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()
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()