def __init__(self, jetRadius=0.4, jetpTMin=1, jetpTMax=None, jetRapidityCut=None, jetEtaCut=None, **kwargs): super().__init__(**kwargs) self.clusterPower = -1 self.jetRadius = jetRadius self.jetpTMin = jetpTMin self.jetpTMax = jetpTMax self.jetRapidityCut = jetRapidityCut self.jetEtaCut = jetEtaCut if self.clusterPower == -1: self.jetDefinition = fj.JetDefinition(fj.antikt_algorithm, self.jetRadius) self.jetSelector = fj.SelectorPtMin(self.jetpTMin) if self.jetpTMax != None: self.jetSelector = self.jetSelector & fj.SelectorPtMax( self.jetpTMax) if self.jetRapidityCut != None: self.jetSelector = self.jetSelector & fj.SelectorRapRange( self.jetRapidityCut[0], self.jetRapidityCut[1]) if self.jetEtaCut != None: self.jetSelector = self.jetSelector & fj.SelectorEtaRange( self.jetEtaCut[0], self.jetEtaCut[1])
def __init__(self, **kwargs): self.fout = None super(HFAnalysisInvMass, self).__init__(**kwargs) self.fout = ROOT.TFile(self.name+'.root', 'recreate') self.fout.cd() # self.hinvmass = ROOT.TH1F('hinvmass', 'hinvmass', 400, 1.5, 2.5) # self.hinvmass.Sumw2() # self.hinvmasspt = ROOT.TH2F('hinvmasspt', 'hinvmasspt', 400, 1.5, 2.5, 50, 2, 12) # self.hinvmasspt.Sumw2() self.tw = treewriter.RTreeWriter(tree_name='d0', fout=self.fout) # jet stuff max_eta = 0.9 self.parts_selector = fj.SelectorPtMin(0.15) & fj.SelectorPtMax(100.0) & fj.SelectorAbsEtaMax(max_eta) jet_R0 = 0.4 self.jet_selector = fj.SelectorPtMin(5.0) & fj.SelectorPtMax(100.0) & fj.SelectorAbsEtaMax(max_eta - 1.05 * jet_R0) self.jarho = JetAnalysisWithRho(jet_R=jet_R0, jet_algorithm=fj.antikt_algorithm, particle_eta_max=max_eta)
def main(args): nevents = args.nevents sconfig_pythia = get_pythia_config(args) if args.generate: pythia = create_and_init_pythia(sconfig_pythia) if not pythia: return all_jets = [] for iEvent in tqdm(range(nevents), 'event'): if not pythia.next(): continue print("[i] done generating") if args.write: pythia = create_and_init_pythia(sconfig_pythia) if not pythia: return pyhepmcwriter = mp.Pythia8HepMCWrapper(args.write) all_jets = [] for iEvent in tqdm(range(nevents), 'event'): if not pythia.next(): continue pyhepmcwriter.fillEvent(pythia) print("[i] done writing to {}".format(args.write)) if args.read: import pyhepmc_ng input = pyhepmc_ng.ReaderAsciiHepMC2(args.read) if input.failed(): print("[error] unable to read from {}".format(args.read)) return # 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(100.0) & fj.SelectorPtMax( 200.0) & fj.SelectorAbsEtaMax(1) event = pyhepmc_ng.GenEvent() pbar = tqdm(range(nevents)) while not input.failed(): e = input.read_event(event) if input.failed(): break fjparts = [] for i, p in enumerate(event.particles): if p.status == 1: psj = fj.PseudoJet(p.momentum.px, p.momentum.py, p.momentum.pz, p.momentum.e) psj.set_user_index(i) fjparts.append(psj) jets = jet_selector(jet_def(fjparts)) pbar.update()
def __init__(self, **kwargs): self.configure_from_args(tree_name='tree_Particle', tree_name_gen='tree_Particle_gen', args=None) super(Embedding, self).__init__(**kwargs) self.copy_attributes(self.args) self.jet_def = fj.JetDefinition(fj.antikt_algorithm, self.jetR) if self.benchmark: self.jet_selector = fj.SelectorPtMin(80.0) & fj.SelectorPtMax( 100.0) & fj.SelectorAbsEtaMax(self.max_eta - 1.05 * self.jetR) # jet_selector_cs = fj.SelectorPtMin(50.0) & fj.SelectorAbsEtaMax(max_eta - 1.05 * self.jetR) else: self.jet_selector = fj.SelectorAbsEtaMax(self.max_eta - 1.05 * self.jetR) self.parts_selector = fj.SelectorAbsEtaMax(self.max_eta) self.output = EmbeddingOutput(args=self.args) # self.output.copy_attributes(self) self.sd = fjcontrib.SoftDrop(0, self.sd_zcut, self.jetR) self.ja_part = JetAnalysis(jet_R=self.jetR, jet_algorithm=fj.antikt_algorithm, jet_pt_min=5., particle_eta_max=self.max_eta) self.ja_det = JetAnalysis(jet_R=self.jetR, jet_algorithm=fj.antikt_algorithm, jet_pt_min=self.jetptcut, particle_eta_max=self.max_eta) self.ja_hybrid = JetAnalysis(jet_R=self.jetR, jet_algorithm=fj.antikt_algorithm, jet_pt_min=5., particle_eta_max=self.max_eta) self.dataPbPb = DataBackgroundIO(name='Data PbPb', file_list=self.datalistAA) self.det_sim = DataIO(name='Sim Pythia Detector level', file_list=self.simulationpp, random_file_order=False) self.part_sim = DataIO(name='Sim Pythia Particle level', file_list=self.simulationpp, random_file_order=False, tree_name='tree_Particle_gen') self.cs = None if self.dRmax > 0: self.cs = CEventSubtractor(alpha=self.alpha, max_distance=self.dRmax, max_eta=self.max_eta, bge_rho_grid_size=0.25, max_pt_correct=100)
def main(): input_file = "$HOME/data/jetscape/test_out.hepmc" if len(sys.argv) > 1: input_file = sys.argv[1] input_file = os.path.expandvars(input_file) print('[i] reading from:', input_file) # input = pyhepmc_ng.ReaderAsciiHepMC2(input_file) input = pyhepmc_ng.ReaderAscii(input_file) if input.failed(): print("[error] unable to read from {}".format(input_file)) return nevents = 1000 # 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(0.0) & fj.SelectorPtMax( 200.0) & fj.SelectorAbsEtaMax(3) all_jets = [] event = pyhepmc_ng.GenEvent() pbar = tqdm.tqdm(range(nevents)) while not input.failed(): e = input.read_event(event) if input.failed(): break fjparts = [] for i, p in enumerate(event.particles): if p.status == 1 and not p.end_vertex: psj = fj.PseudoJet(p.momentum.px, p.momentum.py, p.momentum.pz, p.momentum.e) psj.set_user_index(i) fjparts.append(psj) jets = jet_selector(jet_def(fjparts)) all_jets.append([[j.pt(), j.eta()] for j in jets]) pbar.update() for j in jets: hjetpt.Fill(j.perp()) if pbar.n >= nevents: break pbar.close()
def main_jets(args): outfname = '{}_output.root'.format(args.read).replace('.dat', '') print("output file: {}".format(outfname)) foutput = r.TFile(outfname, "recreate") foutput.cd() lbins = logbins(1., 100, 10) hjetpt = r.TH1F('hjetpt', 'hjetpt', 10, lbins) input = pyhepmc_ng.ReaderAsciiHepMC2(args.read) if input.failed(): print ("[error] unable to read from {}".format(args.read)) return # 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(0.0) & fj.SelectorPtMax(200.0) & fj.SelectorAbsEtaMax(3) all_jets = [] event = pyhepmc_ng.GenEvent() pbar = tqdm(range(args.nevents)) while not input.failed(): e = input.read_event(event) if input.failed(): break fjparts = [] for i,p in enumerate(event.particles): if p.status == 1 and not p.end_vertex: psj = fj.PseudoJet(p.momentum.px, p.momentum.py, p.momentum.pz, p.momentum.e) psj.set_user_index(i) fjparts.append(psj) jets = jet_selector(jet_def(fjparts)) all_jets.append([ [j.pt(), j.eta()] for j in jets]) pbar.update() for j in jets: hjetpt.Fill(j.perp()) if pbar.n >= args.nevents: break foutput.Write() foutput.Close() joblib.dump(all_jets, outfname.replace(".root", ".joblib"))
def main(): parser = argparse.ArgumentParser(description='pythia8 in python', prog=os.path.basename(__file__)) pyconf.add_standard_pythia_args(parser) args = parser.parse_args() mycfg = [] pythia = pyconf.create_and_init_pythia_from_args(args, mycfg) max_eta_hadron = 3 jet_R0 = 0.4 jet_selector = fj.SelectorPtMin(100.0) & fj.SelectorPtMax( 125.0) & fj.SelectorAbsEtaMax(max_eta_hadron - 1.05 * jet_R0) parts_selector_h = fj.SelectorAbsEtaMax(max_eta_hadron) fj.ClusterSequence.print_banner() jet_def = fj.JetDefinition(fj.antikt_algorithm, jet_R0) pbar = tqdm.tqdm(range(args.nev)) for i in pbar: if not pythia.next(): pbar.update(-1) continue parts_pythia_h = pythiafjext.vectorize_select(pythia, [pythiafjext.kFinal], 0, False) parts_pythia_h_selected = parts_selector_h(parts_pythia_h) jets_h = fj.sorted_by_pt(jet_selector( jet_def(parts_pythia_h_selected))) if len(jets_h) < 1: continue # do your things with jets here... pythia.stat() pythia.settings.writeFile(args.py_cmnd_out)
def main(): fj.ClusterSequence.print_banner() print() sconfig_pythia = [ "Beams:eCM = 8000.", "HardQCD:all = on", "PhaseSpace:pTHatMin = 20." ] pythia = create_and_init_pythia(sconfig_pythia) jet_R0 = 0.4 jet_def = fj.JetDefinition(fj.antikt_algorithm, jet_R0) jet_selector = fj.SelectorPtMin(20.0) & fj.SelectorPtMax( 40.0) & fj.SelectorAbsEtaMax(1) # sd = rt.SoftDrop(0, 0.1, 1.0) all_jets = [] for iEvent in tqdm(range(1000), 'event'): if not pythia.next(): continue parts = pyfj.vectorize(pythia, True, -1, 1, True) jets = jet_selector(jet_def(parts)) all_jets.extend(jets) print_jets(all_jets)
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 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) # could use --py-seed parser.add_argument('--fj-R', help='jet finder R', default=0.8, type=float) parser.add_argument('--user-seed', help='pythia seed', default=1111, type=int) parser.add_argument('--output', default="pythia_dyngroom_test_output.root", type=str) parser.add_argument('--min-jet-pt', help='jet pt selection', default=450., type=float) parser.add_argument('--max-jet-pt', help='jet pt selection', default=1000., 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.fj_R jet_def = fj.JetDefinition(fj.antikt_algorithm, jet_R0) print(jet_def) # hadron level - ALICE max_eta_hadron = 3. pwarning('max eta for particles after hadronization set to', max_eta_hadron) parts_selector_h = fj.SelectorAbsEtaMax(max_eta_hadron) jet_selector = fj.SelectorPtMin(args.min_jet_pt) & fj.SelectorPtMax( args.max_jet_pt) & 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, 'recreate') outf.cd() t = ROOT.TTree('t', 't') tw = RTreeWriter(tree=t) jet_def_lund = fj.JetDefinition(fj.cambridge_algorithm, 1.0) dy_groomer = fjcontrib.DynamicalGroomer(jet_def_lund) print(dy_groomer.description()) # event loop for iev in tqdm.tqdm(range(args.nev)): if not pythia.next(): continue # parts_pythia_p = pythiafjext.vectorize_select(pythia, [pythiafjext.kFinal], add_particle_info = True) 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], add_particle_info = True) parts_pythia_h = pythiafjext.vectorize_select(pythia, [pythiafjext.kFinal], 0, True) parts_pythia_h_selected = parts_selector_h(parts_pythia_h) jets_p = jet_selector(fj.sorted_by_pt(jet_def(parts_pythia_p))) jets_h = jet_selector(fj.sorted_by_pt(jet_def(parts_pythia_h))) for j in jets_p: tw.fill_branch('iev', iev) tw.fill_branch('parton_j', j) for a in [0.1, 1.0, 2.0]: dy_groomed = dy_groomer.result(j, a) if dy_groomed.pair().pt() > 0: tw.fill_branch('parton_j_logkt_dg{:.1f}'.format(a), ROOT.TMath.Log(dy_groomed.kt())) tw.fill_branch('parton_j_log1odR_dg{:.1f}'.format(a), ROOT.TMath.Log(1 / dy_groomed.Delta())) max_pt_groomed = dy_groomer.max_pt_softer(j) if max_pt_groomed.pair().pt() > 0: tw.fill_branch('parton_j_logkt_max_pt_softer', ROOT.TMath.Log(max_pt_groomed.kt())) tw.fill_branch('parton_j_log1odR_max_pt_softer', ROOT.TMath.Log(1 / max_pt_groomed.Delta())) max_z_groomed = dy_groomer.max_z(j) if max_z_groomed.pair().pt() > 0: tw.fill_branch('parton_j_logkt_max_z', ROOT.TMath.Log(max_z_groomed.kt())) tw.fill_branch('parton_j_log1odR_max_z', ROOT.TMath.Log(1 / max_z_groomed.Delta())) max_kt_groomed = dy_groomer.max_kt(j) if max_kt_groomed.pair().pt() > 0: tw.fill_branch('parton_j_logkt_max_kt', ROOT.TMath.Log(max_kt_groomed.kt())) tw.fill_branch('parton_j_log1odR_max_kt', ROOT.TMath.Log(1 / max_kt_groomed.Delta())) max_kappa_groomed = dy_groomer.max_kappa(j) if max_kappa_groomed.pair().pt() > 0: tw.fill_branch('parton_j_logkt_max_kappa', ROOT.TMath.Log(max_kappa_groomed.kt())) tw.fill_branch('parton_j_log1odR_max_kappa', ROOT.TMath.Log(1 / max_kappa_groomed.Delta())) for j in jets_h: tw.fill_branch('hadron_j', j) for a in [0.1, 1.0, 2.0]: dy_groomed = dy_groomer.result(j, a) if dy_groomed.pair().pt() > 0: tw.fill_branch('hadron_j_logkt_dg{:.1f}'.format(a), ROOT.TMath.Log(dy_groomed.kt())) tw.fill_branch('hadron_j_log1odR_dg{:.1f}'.format(a), ROOT.TMath.Log(1 / dy_groomed.Delta())) max_pt_groomed = dy_groomer.max_pt_softer(j) if max_pt_groomed.pair().pt() > 0: tw.fill_branch('hadron_j_logkt_max_pt_softer', ROOT.TMath.Log(max_pt_groomed.kt())) tw.fill_branch('hadron_j_log1odR_max_pt_softer', ROOT.TMath.Log(1 / max_pt_groomed.Delta())) max_z_groomed = dy_groomer.max_z(j) if max_z_groomed.pair().pt() > 0: tw.fill_branch('hadron_j_logkt_max_z', ROOT.TMath.Log(max_z_groomed.kt())) tw.fill_branch('hadron_j_log1odR_max_z', ROOT.TMath.Log(1 / max_z_groomed.Delta())) max_kt_groomed = dy_groomer.max_kt(j) if max_kt_groomed.pair().pt() > 0: tw.fill_branch('hadron_j_logkt_max_kt', ROOT.TMath.Log(max_kt_groomed.kt())) tw.fill_branch('hadron_j_log1odR_max_kt', ROOT.TMath.Log(1 / max_kt_groomed.Delta())) max_kappa_groomed = dy_groomer.max_kappa(j) if max_kappa_groomed.pair().pt() > 0: tw.fill_branch('hadron_j_logkt_max_kappa', ROOT.TMath.Log(max_kappa_groomed.kt())) tw.fill_branch('hadron_j_log1odR_max_kappa', ROOT.TMath.Log(1 / max_kappa_groomed.Delta())) if len(jets_p) > 0 or len(jets_h) > 0: tw.fill_tree() pythia.stat() outf.Write() outf.Close()
def main(): parser = argparse.ArgumentParser( description='read jewel to lund jets object and pickle with joblib', prog=os.path.basename(__file__)) parser.add_argument('-d', '--dir', help='input directory', default='', type=str, required=True) parser.add_argument('-n', '--nfiles', help='number of files', default=-1, type=int, required=False) parser.add_argument('-p', '--pattern', help='input directory', default='', type=str, required=True) parser.add_argument('--nev', help='number of events', default=-1, type=int) parser.add_argument('--clean', help='remove output before writing', action='store_true', default=False) args = parser.parse_args() files = find_files(args.dir, args.pattern) # 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(40.0) & fj.SelectorPtMax( 500.0) & fj.SelectorAbsEtaMax(2) 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) if args.nfiles > 0: rfiles = files[:args.nfiles] else: rfiles = files print("[i] found {} files - running for {} files".format( len(files), len(rfiles))) for ifile, fn in enumerate(tqdm.tqdm(rfiles)): # now lets read the HEPMC file and do some jet finding input_hepmc = hepmc2wrap.ReadHepMCFile(fn) if input_hepmc.failed(): print("[error] unable to read from {}".format(fn)) sys.exit(1) all_jets = [] for iev in tqdm.tqdm(range(args.nev)): if input_hepmc.failed(): break if input_hepmc.NextEvent(): jets_hepmc = find_jets_hepmc(jet_def, jet_selector, input_hepmc, final=True) all_jets.extend(jets_hepmc) lunds = [lund_gen.result(j) for j in all_jets] lunds_pickle = [ lundjet.LundJet(j, lund_gen.result(j)) for j in all_jets ] all_jets_sd = [sd.result(j) for j in all_jets] lunds_sd = [lund_gen.result(j) for j in all_jets_sd] lunds_sd_pickle = [ lundjet.LundJet(j, lund_gen.result(j)) for j in all_jets_sd ] joblib_file = 'lund_{}.joblib'.format(os.path.basename(fn)) it = 0 while os.path.exists(joblib_file): if args.clean: os.unlink(joblib_file) break joblib_file = 'lund_{}_{}.joblib'.format(os.path.basename(fn), it) it += 1 joblib.dump(lunds_pickle, joblib_file) joblib_file_sd = 'lund_sd_{}.joblib'.format(os.path.basename(fn)) it = 0 while os.path.exists(joblib_file_sd): if args.clean: os.unlink(joblib_file_sd) break joblib_file_sd = 'lund_sd_{}_{}.joblib'.format( os.path.basename(fn), it) it += 1 joblib.dump(lunds_sd_pickle, joblib_file_sd)
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='test the TennGen', 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('--cent-bin', help="centraility bin 0 is the 0-5 % 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. |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') args = parser.parse_args() args.py_pthatmin = 100 mycfg = ['PhaseSpace:pThatMin = {}'.format(args.py_pthatmin)] if args.ignore_mycfg: mycfg = [] pythia = pyconf.create_and_init_pythia_from_args(args, mycfg) if not pythia: perror("pythia initialization failed.") return 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() # jet_R0 = 0.4 jet_def = fj.JetDefinition(fj.antikt_algorithm, jet_R0) jet_selector_pythia = fj.SelectorPtMin(args.py_pthatmin) & fj.SelectorPtMax(1000.0) &fj.SelectorAbsEtaMax(args.eta - jet_R0) jet_selector_hybrid = fj.SelectorPtMin(10) & fj.SelectorPtMax(1000.0) &fj.SelectorAbsEtaMax(args.eta - jet_R0) # jet_selector = fj.SelectorPtMin(40.0) & fj.SelectorPtMax(200.0) &fj.SelectorAbsEtaMax(1) parts_selector = fj.SelectorAbsEtaMax(args.eta) print(jet_def) tw = treewriter.RTreeWriter(name = 'tparts', file_name = 'test_TennGen.root') if args.nev < 100: args.nev = 100 pbar = tqdm.tqdm(total = args.nev) while pbar.n < args.nev: if not pythia.next(): continue # get pythia particles # parts = pythiafjext.vectorize_select(pythia, [pythiafjext.kFinal, pythiafjext.kCharged], 0, False) _py_fj_parts = parts_selector(pythiafjext.vectorize_select(pythia, [pythiafjext.kFinal], 0, False)) # get jets w/o area determination # pythia_jets = jet_selector_pythia(jet_def(_py_fj_parts)) # with area determination jet_area_def = fj.AreaDefinition(fj.active_area, fj.GhostedAreaSpec(args.eta)) cs = fj.ClusterSequenceArea(_py_fj_parts, jet_def, jet_area_def) pythia_jets = jet_selector_pythia(cs.inclusive_jets()) if len(pythia_jets) < 1: continue pbar.update(1) tw.fill_branches(pyj = pythia_jets) # now generate bg bg_tclones = tgbkg.GetBackground() # tgbkg.GetRandomSeed() nParticles = bg_tclones.GetEntries(); # pinfo('event', pbar.n, 'number of parts', nParticles) # _parts = { 'pt' : [], 'eta' : [], 'phi' : [], 'kf' : []} _parts = [[], [], [], []] _ = [[_parts[0].append(p[0].Pt()), _parts[1].append(p[0].Eta()), _parts[2].append(p[0].Phi()), _parts[3].append(p[1])] for p in [[tlv_from_tmcparticle(_p), _p.GetKF()] for _p in bg_tclones if _p.GetEnergy()>0]] _bg_fj_parts = fjext.vectorize_pt_eta_phi(_parts[0], _parts[1], _parts[2], 1000) #bg particles with index > 1000 # add background and pythia _fj_parts = [] _ = [_fj_parts.append(_p) for _p in _py_fj_parts] _ = [_fj_parts.append(_p) for _p in _bg_fj_parts] # stream all particles _ = [tw.fill_branches(part_pt = _pfj.perp(), part_eta = _pfj.eta(), part_phi = _pfj.phi(), part_idx=_pfj.user_index()) for _pfj in _fj_parts] # find jets in the hybrid event # w/o area # jets = jet_selector_hybrid(jet_def(_fj_parts)) # w/area cs_hybrid = fj.ClusterSequenceArea(_fj_parts, jet_def, jet_area_def) jets = jet_selector_hybrid(cs_hybrid.inclusive_jets()) # stream jets from the hybrid event tw.fill_branches(j = jets) # estimate the background bg_rho_range = fj.SelectorAbsEtaMax(args.eta * 1.1) bg_jet_def = fj.JetDefinition(fj.kt_algorithm, jet_R0) bg_area_def = fj.AreaDefinition(fj.active_area_explicit_ghosts, fj.GhostedAreaSpec(args.eta)) # bg_area_def = fj.AreaDefinition(fj.active_area, fj.GhostedAreaSpec(args.eta)) #active area defunct for bg estim bg_estimator = fj.JetMedianBackgroundEstimator(bg_rho_range, bg_jet_def, bg_area_def) bg_estimator.set_particles(_fj_parts) if len(_fj_parts) < 0: perror('no particles in the hybrid event?') continue rho = bg_estimator.rho() sigma = bg_estimator.sigma() corr_jet_pt = [j.pt() - j.area() * rho for j in jets] # matches = [j.perp(), matched_jet(j, pythia_jets) for j in jets] delta_pt = [delta_pt_matched(j, pythia_jets, rho) for j in jets] tw.fill_branches(j_corr_pt = corr_jet_pt, dpt = delta_pt) tw.fill_branches(rho = rho, rho_sigma = sigma) tw.fill_tree() bg_tclones.Clear() pbar.close() tgbkg.CloserFunction() 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) 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.0, type=float) parser.add_argument('--zcut', default=0.1, type=float) parser.add_argument('--overwrite', help="overwrite output", default=False, action='store_true') parser.add_argument('--embed', help='run embedding from a file list', default='', type=str) parser.add_argument('--SDsignal', help='embed only SD signal prongs', default=False, action='store_true') parser.add_argument('--SDsignal-single', help='embed only SD signal - only leading prong!', default=False, action='store_true') parser.add_argument('--efficiency', help='apply charged particle efficiency', default=False, action='store_true') parser.add_argument('--benchmark', help='benchmark pthat setting - 80 GeV', default=False, action='store_true') parser.add_argument('--csjet', help='constituent subtration jet-by-jet', 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 args.py_seed >= 0: args.output = 'output_alpha_{}_dRmax_{}_SDzcut_{}_seed_{}.root'.format( args.alpha, args.dRmax, args.zcut, args.py_seed) if args.embed: args.output = args.output.replace('.root', '_emb.root') if args.efficiency: args.output = args.output.replace('.root', '_effi.root') if args.SDsignal: args.output = args.output.replace('.root', '_SDsignal.root') if args.SDsignal_single: args.output = args.output.replace('.root', '_SDsignal_single.root') if args.csjet: args.output = args.output.replace('.root', '_csjet.root') if os.path.isfile(args.output): if not args.overwrite: print('[i] output', args.output, 'exists - use --overwrite to do just that...') return print(args) # alice specific max_eta = 0.9 # 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) print(jet_def) mycfg = [] if args.benchmark: mycfg = ['PhaseSpace:pThatMin = 80', 'PhaseSpace:pThatMax = -1'] jet_selector = fj.SelectorPtMin(80.0) & fj.SelectorPtMax( 100.0) & fj.SelectorAbsEtaMax(max_eta - 1.05 * jet_R0) # jet_selector_cs = fj.SelectorPtMin(50.0) & fj.SelectorAbsEtaMax(max_eta - 1.05 * jet_R0) else: args.py_biaspow = 4 args.py_biasref = 10 jet_selector = fj.SelectorPtMin(20) & fj.SelectorAbsEtaMax( max_eta - 1.05 * jet_R0) # jet_selector_cs = fj.SelectorPtMin(50.0) & fj.SelectorAbsEtaMax(max_eta - 1.05 * jet_R0) 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) jarho = JetAnalysisWithRho(jet_R=jet_R0, jet_algorithm=fj.antikt_algorithm, particle_eta_max=max_eta) ja = JetAnalysis(jet_R=jet_R0, jet_algorithm=fj.antikt_algorithm, particle_eta_max=max_eta) be = None embd = None if len(args.embed) > 0: embd = DataBackgroundIO(file_list=args.embed) print(embd) else: be = BoltzmannEvent(mean_pt=0.6, multiplicity=2000 * max_eta * 2, max_eta=max_eta, max_pt=100) print(be) cs = None if args.dRmax > 0: cs = CEventSubtractor(alpha=args.alpha, max_distance=args.dRmax, max_eta=max_eta, bge_rho_grid_size=0.25, max_pt_correct=100) print(cs) csjet = None if args.csjet: csjet = CSubtractorJetByJet(max_eta=max_eta, bge_rho_grid_size=0.25) print(csjet) parts_selector = fj.SelectorAbsEtaMax(max_eta) if args.nev < 1: args.nev = 1 outf = ROOT.TFile(args.output, 'recreate') outf.cd() t = ROOT.TTree('t', 't') tw = RTreeWriter(tree=t) te = ROOT.TTree('te', 'te') twe = RTreeWriter(tree=te) # effi_pp = AliceChargedParticleEfficiency(csystem='pp') effi_PbPb = None if args.efficiency: effi_PbPb = AliceChargedParticleEfficiency(csystem='PbPb') print(effi_PbPb) ### EVENT LOOP STARTS HERE for iev in tqdm.tqdm(range(args.nev)): if not pythia.next(): continue parts_pythia = pythiafjext.vectorize_select( pythia, [pythiafjext.kFinal, pythiafjext.kCharged]) parts_gen = parts_selector(parts_pythia) if effi_PbPb: parts = effi_PbPb.apply_efficiency(parts_gen) else: parts = parts_gen signal_jets = fj.sorted_by_pt(jet_selector(jet_def(parts))) if len(signal_jets) < 1: continue for sjet in signal_jets: if args.SDsignal or args.SDsignal_single: sd_sjet = sd.result(sjet) pe1 = fj.PseudoJet() pe2 = fj.PseudoJet() has_parents = sd_sjet.has_parents(pe1, pe2) if has_parents: jparts = fj.vectorPJ() pe1.set_user_index(0) pe2.set_user_index(1) if args.SDsignal_single: if pe1.pt() > pe2.pt(): jparts.push_back(pe1) else: jparts.push_back(pe2) else: jparts.push_back(pe1) jparts.push_back(pe2) sjets = fj.sorted_by_pt(jet_selector(jet_def(jparts))) if len(sjets) == 1: sjet = sjets[0] else: continue else: continue if embd: bg_parts = embd.load_event(offset=10000) # for p in bg_parts: # print(p.user_index()) else: bg_parts = be.generate(offset=10000) # for p in bg_parts: # print(p.user_index()) full_event = bg_parts tmp = [full_event.push_back(psj) for psj in sjet.constituents()] if cs: cs_parts = cs.process_event(full_event) rho = cs.bge_rho.rho() jarho.analyze_event(cs_parts) tmp = [ fill_tree_data(ej, twe, sd, rho, iev, pythia.info.weight(), pythia.info.sigmaGen()) for ej in jarho.jets ] tmp = [ fill_tree_matched(sjet, ej, tw, sd, rho, iev, pythia.info.weight(), pythia.info.sigmaGen()) for ej in jarho.jets ] else: jarho.analyze_event(full_event) rho = jarho.rho if csjet: #_csjet = fjcontrib.ConstituentSubtractor(jarho.bg_estimator) # subtr_jets = [_csjet.result(ej) for ej in jarho.jets] csjet.set_event_particles(full_event) #subtr_jets = [csjet.process_jet(ej) for ej in jarho.jets] #print ('jbyj cs', len(subtr_jets), 'from', len(jarho.jets)) #subtr_jets_wconstits = [_j for _j in subtr_jets if _j.has_constituents()] #for _j in subtr_jets_wconstits: # print(len(_j.constituents())) subtr_jets_wconstits = csjet.process_jets(jarho.jets) japerjet = JetAnalysisPerJet( jet_R=jet_R0, jet_algorithm=fj.antikt_algorithm, particle_eta_max=max_eta, input_jets=subtr_jets_wconstits) # for _j in japerjet.jets: # for _c in _j.constituents(): # if _c.user_index() >= 0: # print('user index kept?', _c.user_index()) # # else: # # print('user index kept?', _c.user_index(), _c.pt()) # _sd_j = sd.result(_j) # https://phab.hepforge.org/source/fastjetsvn/browse/contrib/contribs/RecursiveTools/trunk/Recluster.cc L 270 # tmp = [fill_tree_matched(sjet, ej, tw, sd, rho, iev, pythia.info.sigmaGen()) for ej in subtr_jets_wcs] tmp = [ fill_tree_data(ej, twe, sd, rho, iev, pythia.info.weight(), pythia.info.sigmaGen()) for ej in japerjet.jets ] tmp = [ fill_tree_matched(sjet, ej, tw, sd, rho, iev, pythia.info.weight(), pythia.info.sigmaGen()) for ej in japerjet.jets ] else: tmp = [ fill_tree_data(ej, twe, sd, rho, iev, pythia.info.weight(), pythia.info.sigmaGen()) for ej in jarho.jets ] tmp = [ fill_tree_matched(sjet, ej, tw, sd, rho, iev, pythia.info.weight(), pythia.info.sigmaGen()) for ej in jarho.jets ] pythia.stat() outf.Write() outf.Close() print('[i] written', outf.GetName())
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('--fj-R', help='jet finder R', default=0.8, type=float) parser.add_argument('--user-seed', help='pythia seed', default=-1, type=int) parser.add_argument('--output', default='{}.root'.format(os.path.basename(__file__)), type=str) parser.add_argument('--min-jet-pt', help='jet pt selection', default=50., type=float) parser.add_argument('--max-jet-pt', help='jet pt selection', default=1000., type=float) parser.add_argument('--npart-min', help='minimum npart in Argantyr', default=2, type=int) args = parser.parse_args() if args.user_seed < 0: args.user_seed = -1 mycfg = [] else: pinfo('user seed for pythia', args.user_seed) # mycfg = ['PhaseSpace:pThatMin = 100'] mycfg = ['Random:setSeed=on', 'Random:seed={}'.format(args.user_seed)] 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.fj_R jet_def = fj.JetDefinition(fj.antikt_algorithm, jet_R0) print(jet_def) # hadron level - ALICE max_eta_hadron = 3. pwarning('max eta for particles after hadronization set to', max_eta_hadron) parts_selector_h = fj.SelectorAbsEtaMax(max_eta_hadron) jet_selector = fj.SelectorPtMin(args.min_jet_pt) & fj.SelectorPtMax( args.max_jet_pt) & fj.SelectorAbsEtaMax(max_eta_hadron - 1.05 * jet_R0) parts_selector_cent = fj.SelectorAbsEtaMax(5.) & fj.SelectorAbsEtaMin(3.) hepmc2output = '{}.hepmc2.dat'.format(args.output.replace('.root', '')) pyhepmc2writer = pythiaext.Pythia8HepMC2Wrapper(hepmc2output) outf = ROOT.TFile(args.output, 'recreate') outf.cd() t = ROOT.TTree('t', 't') tw = RTreeWriter(tree=t) tch = ROOT.TTree('tch', 'tch') twch = RTreeWriter(tree=tch) te = ROOT.TTree('te', 'te') twe = RTreeWriter(tree=te) jet_def_lund = fj.JetDefinition(fj.cambridge_algorithm, 1.0) dy_groomer = fjcontrib.DynamicalGroomer(jet_def_lund) print(dy_groomer.description()) sds = [] sd01 = fjcontrib.SoftDrop(0, 0.1, 1.0) sd02 = fjcontrib.SoftDrop(0, 0.2, 1.0) sds.append(sd01) sds.append(sd02) # event loop for iev in tqdm.tqdm(range(args.nev)): if not pythia.next(): continue twe.clear() tw.clear() twch.clear() weight = pythia.info.weight() if args.py_PbPb: # from main113.cc # Also fill the number of (absorptively and diffractively) # wounded nucleaons. nw = pythia.info.hiinfo.nAbsTarg() + pythia.info.hiinfo.nDiffTarg( ) + pythia.info.hiinfo.nAbsProj() + pythia.info.hiinfo.nDiffProj() fill_ncoll_branches(pythia, twe) else: nw = 2 twe.fill_branch('nw', nw) twe.fill_branch('w', weight) parts_pythia_h = pythiafjext.vectorize_select(pythia, [pythiafjext.kFinal], 0, False) parts_pythia_h_selected = parts_selector_h(parts_pythia_h) parts_pythia_ch = pythiafjext.vectorize_select( pythia, [pythiafjext.kFinal, pythiafjext.kCharged], 0, False) parts_pythia_ch_selected = parts_selector_h(parts_pythia_ch) nch_total = len(parts_pythia_ch) twe.fill_branch('nch', nch_total) ncharged_fwd = len(parts_selector_cent(parts_pythia_ch)) twe.fill_branch('nchfwd', ncharged_fwd) twe.fill_branch('iev', iev) if args.py_PbPb and args.npart_min > nw: twe.fill_tree() continue if args.py_PbPb: pyhepmc2writer.fillEvent(pythia) # do the rest only if centrality right tw.fill_branch('iev', iev) tw.fill_branch('w', weight) twch.fill_branch('iev', iev) twch.fill_branch('w', weight) jets_h = jet_selector(fj.sorted_by_pt(jet_def(parts_pythia_h))) jets_h_ch = jet_selector(fj.sorted_by_pt(jet_def(parts_pythia_ch))) [ fill_branches(tw, j, dy_groomer, alphas=[0.1, 1.0, 2.0], sds=sds) for j in jets_h ] if len(jets_h) > 0: tw.fill_tree() if args.py_PbPb is False: pyhepmc2writer.fillEvent(pythia) [ fill_branches(twch, j, dy_groomer, alphas=[0.1, 1.0, 2.0], sds=sds) for j in jets_h_ch ] if len(jets_h_ch) > 0: twch.fill_tree() twe.fill_tree() pythia.stat() outf.Write() outf.Close()
return None # In[4]: sconfig_pythia = [ "Beams:eCM = 8000.", "HardQCD:all = on", "PhaseSpace:pTHatMin = 20." ] pythia = create_and_init_pythia(sconfig_pythia) # In[5]: # set up our jet definition and a jet selector jet_R0 = 0.4 jet_def = fj.JetDefinition(fj.antikt_algorithm, jet_R0) selector = fj.SelectorPtMin(20.0) & fj.SelectorPtMax( 40.0) & fj.SelectorAbsEtaMax(1) sd = rt.SoftDrop(0, 0.1, 1.0) # In[6]: # 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(20.0) & fj.SelectorPtMax( 40.0) & fj.SelectorAbsEtaMax(1) sd = rt.SoftDrop(0, 0.1, 1.0) # In[7]: all_jets = [] for iEvent in tqdm_notebook(range(100), 'event'):
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=True, 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_zloss.root', type=str) parser.add_argument('--jetptmin', help="jet pt minimum", default=-1, type=float) parser.add_argument('--jetptmax', help="jet pt maximum", default=1e6, type=float) parser.add_argument('--eta', help="jet eta max", default=2.4, type=float) parser.add_argument( '--kt', help="use kT algorithm instead of anti-kT for the subjets", 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(args.py_pthatmin) & fj.SelectorPtMax( 1000.0) & fj.SelectorAbsEtaMax(args.eta - jet_R0) mycfg = [] if args.jetptmin > 0: mycfg = ['PhaseSpace:pThatMin = {}'.format(args.jetptmin)] jet_selector = fj.SelectorPtMin(args.jetptmin) & fj.SelectorPtMax( args.jetptmax) & fj.SelectorAbsEtaMax(args.eta - jet_R0) print(jet_def) if args.ignore_mycfg: mycfg = [] pythia = pyconf.create_and_init_pythia_from_args(args, mycfg) if not pythia: perror("pythia initialization failed.") return nbins = 20 # sjrs = [0.001 + x * 0.04 for x in range(0, nbins)] sjrs = logbins(0.001, jet_R0, nbins) print(sjrs) print('log(1/r) :', [ROOT.TMath.Log(1 / r) for r in sjrs]) sjdefs = dict() for sjr in sjrs: if args.kt: _jet_def = fj.JetDefinition(fj.kt_algorithm, sjr) else: _jet_def = fj.JetDefinition(fj.antikt_algorithm, sjr) sjdefs[sjr] = _jet_def # tw = treewriter.RTreeWriter(name = 'lsjvsx', file_name = 'leadsj_vs_x.root') tw = treewriter.RTreeWriter(name='lsjvszloss', file_name=args.output) tw.fout.cd() h_zloss_r_q = dict() h_zloss_r_g = dict() for sjr in sjrs: sname = 'h_zloss_glue_{}'.format(sjr) _h_zloss_r_g = ROOT.TH1F(sname, sname, len(sjrs), 0., 1.) h_zloss_r_g[sjr] = _h_zloss_r_g sname = 'h_zloss_quark_{}'.format(sjr) _h_zloss_r_q = ROOT.TH1F(sname, sname, len(sjrs), 0., 1.) h_zloss_r_q[sjr] = _h_zloss_r_q lbins = logbins(ROOT.TMath.Log(1. / jet_R0), ROOT.TMath.Log(1. / sjrs[0]), nbins) print('lbins:', lbins) sname = 'prof_zloss_vs_r_any' prof_a = ROOT.TProfile(sname, sname, nbins, 0, jet_R0) prof_a_log = ROOT.TProfile(sname + '_log', sname + '_log', nbins, lbins) sname = 'prof_zloss_vs_r_glue' prof_g = ROOT.TProfile(sname, sname, nbins, 0, jet_R0) prof_g_log = ROOT.TProfile(sname + '_log', sname + '_log', nbins, lbins) sname = 'prof_zloss_vs_r_quark' prof_q = ROOT.TProfile(sname, sname, nbins, 0, jet_R0) prof_q_log = ROOT.TProfile(sname + '_log', sname + '_log', nbins, lbins) # prof_q_log = ROOT.TProfile(sname+'_log', sname+'_log', nbins, ROOT.TMath.Log(1./jet_R0), ROOT.TMath.Log(1./sjrs[0])) sname = 'h2_zloss_vs_r_glue' h2_zloss_r_g = ROOT.TH2F(sname, sname, nbins, 0., jet_R0, len(sjrs), 0., 1.) sname = 'h2_zloss_vs_r_quark' h2_zloss_r_q = ROOT.TH2F(sname, sname, nbins, 0., jet_R0, len(sjrs), 0., 1.) # loop 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 tw.fill_branch("j", j) for sjr in sjrs: rc_jets = fj.sorted_by_pt(sjdefs[sjr](j.constituents())) tw.fill_branch("sjr{}".format(sjr), rc_jets[0]) zloss = 1. - rc_jets[0].perp() / j.perp() tw.fill_branch("sjr{}_zloss".format(sjr), zloss) tw.fill_branch("ppid", j_type[0]) tw.fill_branch("pquark", j_type[1]) tw.fill_branch("pglue", j_type[2]) prof_a.Fill(sjr, zloss) prof_a_log.Fill(ROOT.TMath.Log(1. / sjr), zloss) if j_type[1]: h_zloss_r_q[sjr].Fill(zloss) h2_zloss_r_q.Fill(sjr, zloss) prof_q.Fill(sjr, zloss) prof_q_log.Fill(ROOT.TMath.Log(1. / sjr), zloss) if j_type[2]: h_zloss_r_g[sjr].Fill(zloss) h2_zloss_r_g.Fill(sjr, zloss) prof_g.Fill(sjr, zloss) prof_g_log.Fill(ROOT.TMath.Log(1. / sjr), zloss) 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) 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()
def main(): mycfg = [] ssettings = "--py-ecm 5000 --py-minbias --user-seed=100000" args = get_args_from_settings(ssettings) pythia_mb = pyconf.create_and_init_pythia_from_args(args, mycfg) mycfg = [] ssettings = "--py-ecm 5000 --user-seed=100000 --nev 100000" args = get_args_from_settings(ssettings) pythia_hard = pyconf.create_and_init_pythia_from_args(args, mycfg) max_eta_hadron = 1 parts_selector_h = fj.SelectorAbsEtaMax(max_eta_hadron) jet_R0 = 0.4 jet_selector = fj.SelectorPtMin(20.0) & fj.SelectorPtMax( 200.0) & fj.SelectorAbsEtaMax(max_eta_hadron - 1.05 * jet_R0) n_pileup = 1 #5 # 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) print(jet_def) fout = ROOT.TFile(args.output, 'recreate') fout.cd() tj_delta = ROOT.TNtuple( "tj_delta", "tj_delta", "pt:eta:phi:L11:L21:L31:ptm:etam:phim:L11m:L21m:L31m:mpt") tj_no_pup = ROOT.TNtuple("tj_no_pup", "tj_no_pup", "pt:eta:phi:L11:L21:L31") tj_pup = ROOT.TNtuple("tj_pup", "tj_pup", "pt:eta:phi:L11:L21:L31") hmult_hard = ROOT.TH1F("hmult_hard", "hmult_hard", 300, 0, 300) hmult_pup = ROOT.TH1F("hmult_pup", "hmult_pup", 300, 0, 300) hpt_acc_hard = ROOT.TProfile2D("hpt_acc_hard", "hpt_acc_hard;#eta;#varphi", 50, -1, 1, 50, 0, ROOT.TMath.Pi() * 2.) hpt_acc_pup = ROOT.TProfile2D("hpt_acc_pup", "hpt_acc_pup;#eta;#varphi", 50, -1, 1, 50, 0, ROOT.TMath.Pi() * 2.) for n in tqdm(range(args.nev)): if not pythia_hard.next(): continue parts_pythia_h = pythiafjext.vectorize_select( pythia_hard, [pythiafjext.kFinal, pythiafjext.kCharged], 0, False) parts_pythia_h_selected = parts_selector_h(parts_pythia_h) parts_pileup = None for ipile in range(n_pileup): while not pythia_mb.next(): continue parts_pythia_h_ue = pythiafjext.vectorize_select( pythia_mb, [pythiafjext.kFinal, pythiafjext.kCharged], 10000, False) parts_pythia_h_selected_ue = parts_selector_h(parts_pythia_h_ue) if parts_pileup is None: parts_pileup = parts_pythia_h_selected_ue else: parts_pileup += parts_pythia_h_selected_ue mult_hard = len(parts_pythia_h_selected) mult_ue = len(parts_pileup) jets_h = fj.sorted_by_pt(jet_selector( jet_def(parts_pythia_h_selected))) jets_h_w_ue = fj.sorted_by_pt( jet_selector(jet_def(parts_pileup + parts_pythia_h_selected))) if len(jets_h) < 1: continue fill_matched(jets_h, jets_h_w_ue, tj_no_pup, tj_pup, tj_delta, jet_R0) hmult_hard.Fill(mult_hard) hmult_pup.Fill(mult_ue) _tmp = [ hpt_acc_hard.Fill(p.eta(), p.phi(), p.perp()) for p in parts_pythia_h_selected ] _tmp = [ hpt_acc_pup.Fill(p.eta(), p.phi(), p.perp()) for p in parts_pileup ] pythia_hard.stat() pythia_mb.stat() fout.Write() fout.Close() print('[i] written ', fout.GetName())
def main(): parser = argparse.ArgumentParser(description='pythia8 in python', prog=os.path.basename(__file__)) pyconf.add_standard_pythia_args(parser) args = parser.parse_args() mycfg = [] pythia = pyconf.create_and_init_pythia_from_args(args, mycfg) max_eta_hadron = 3 jet_R0 = 0.4 jet_selector = fj.SelectorPtMin(100.0) & fj.SelectorPtMax( 125.0) & fj.SelectorAbsEtaMax(max_eta_hadron - 1.05 * jet_R0) # jet_selector = fj.SelectorPtMin(10.0) & fj.SelectorAbsEtaMax(max_eta_hadron - 1.05 * jet_R0) parts_selector_h = fj.SelectorAbsEtaMax(max_eta_hadron) fj.ClusterSequence.print_banner() jet_def = fj.JetDefinition(fj.antikt_algorithm, jet_R0) qweights = [0, 2, 4, 6, 10] # n-parts quenched output = MyOutput('gen_quench_out.root', qweights) if output.new_files(): print('[i] new files with', output.list_files()) else: return thm = [] for i, w in enumerate(qweights): _t = ROOT.RUtil.Thermalizer(0.7, w, 1.0, max_eta_hadron) thm.append(_t) run_number = 0 event_number = 0 pbar = tqdm.tqdm(range(args.nev)) while (pbar.n < args.nev): if not pythia.next(): continue parts_pythia_h = pythiafjext.vectorize_select(pythia, [pythiafjext.kFinal], 0, False) parts_pythia_h_selected = parts_selector_h(parts_pythia_h) jets_hv = fj.sorted_by_pt( jet_selector(jet_def(parts_pythia_h_selected))) if len(jets_hv) < 1: continue if event_number > 0 and event_number % 1000 == 0: if output.new_files(): print('[i] new files:', output.list_files()) else: print('[e] no new file. stop here.') break event_number = event_number + 1 pbar.update(1) jets_h = None # do your things with jets/events here... for i, w in enumerate(qweights): if w > 0: _pthermal = [] for p in parts_pythia_h_selected: parts = thm[i].thermalize(p.perp(), p.eta(), p.phi(), p.m()) __ = [ _pthermal.append( fj.PseudoJet(_p.px(), _p.py(), _p.pz(), _p.e())) for _p in parts ] # print(i, 'len', len(_pthermal), 'from', len(parts_pythia_h_selected)) jets_h = fj.sorted_by_pt(jet_selector(jet_def(_pthermal))) for _p in _pthermal: output.files[w].tn.Fill(run_number, event_number, _p.perp(), _p.eta(), _p.phi(), 111) else: jets_h = jets_hv for _p in parts_pythia_h_selected: output.files[w].tn.Fill(run_number, event_number, _p.perp(), _p.eta(), _p.phi(), 111) for j in jets_h: output.files[w].hpt.Fill(j.perp()) if j.perp() > 100 and j.perp() < 125: for c in j.constituents(): output.files[w].hz.Fill(c.perp() / j.perp()) pbar.close() output.close() pythia.stat() pythia.settings.writeFile(args.py_cmnd_out)
def main(): parser = argparse.ArgumentParser(description='pythia8 fastjet on the fly', prog=os.path.basename(__file__)) parser.add_argument('--output', default="output.root", type=str) parser.add_argument('datalist', help='run through a file list', default='', type=str) parser.add_argument('--alpha', default=0, type=float) parser.add_argument('--dRmax', default=0.0, type=float) parser.add_argument('--zcut', default=0.1, type=float) parser.add_argument('--overwrite', help="overwrite output", default=False, action='store_true') parser.add_argument('--benchmark', help='benchmark pthat setting - 80 GeV', default=False, action='store_true') parser.add_argument('--jetptcut', help='remove jets below the cut', default=-100, type=float) parser.add_argument('--nev', help='number of events to run', default=0, type=int) args = parser.parse_args() if args.output == 'output.root': args.output = 'output_data_alpha_{}_dRmax_{}_SDzcut_{}.root'.format( args.alpha, args.dRmax, args.zcut) if args.jetptcut > -100: args.output = 'output_data_alpha_{}_dRmax_{}_SDzcut_{}_jpt_{}.root'.format( args.alpha, args.dRmax, args.zcut, args.jetptcut) if os.path.isfile(args.output): if not args.overwrite: print('[i] output', args.output, 'exists - use --overwrite to do just that...') return print(args) # alice specific max_eta = 0.9 # 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) print(jet_def) if args.benchmark: jet_selector = fj.SelectorPtMin(80.0) & fj.SelectorPtMax( 100.0) & fj.SelectorAbsEtaMax(max_eta - 1.05 * jet_R0) # jet_selector_cs = fj.SelectorPtMin(50.0) & fj.SelectorAbsEtaMax(max_eta - 1.05 * jet_R0) else: jet_selector = fj.SelectorAbsEtaMax(max_eta - 1.05 * jet_R0) sd_zcut = args.zcut sd = fjcontrib.SoftDrop(0, sd_zcut, jet_R0) ja = JetAnalysisWithRho(jet_R=jet_R0, jet_algorithm=fj.antikt_algorithm, particle_eta_max=max_eta) data = DataIO(file_list=args.datalist) print(data) cs = None if args.dRmax > 0: cs = CEventSubtractor(alpha=args.alpha, max_distance=args.dRmax, max_eta=max_eta, bge_rho_grid_size=0.25, max_pt_correct=100) print(cs) parts_selector = fj.SelectorAbsEtaMax(max_eta) outf = ROOT.TFile(args.output, 'recreate') outf.cd() t = ROOT.TTree('t', 't') tw = RTreeWriter(tree=t) # need to change this for data to drive... delta_t = 1e-6 start_t = time.time() iev = 0 while data.load_event(): iev = iev + 1 _data_parts = data.particles if cs: cs_parts = cs.process_event(_data_parts) rho = cs.bge_rho.rho() ja.analyze_event(cs_parts) else: ja.analyze_event(_data_parts) rho = ja.rho tmp = [ fill_tree_data(j, tw, sd, rho, iev, 1.) for j in ja.jets if j.pt() > args.jetptcut ] if iev % 1000 == 0: delta_t = time.time() - start_t print('[i] processing event', iev, ' - ev/sec = ', iev / delta_t, 'elapsed = ', delta_t) if args.nev > 0: if iev > args.nev: break print('[i] processed events', iev, ' - ev/sec = ', iev / delta_t, 'elapsed = ', delta_t) outf.Write() outf.Close() print('[i] written', outf.GetName())
def main(args): fname = args.fname file = uproot.open(fname) all_ttrees = dict( file.allitems( filterclass=lambda cls: issubclass(cls, uproot.tree.TTreeMethods))) tracks = all_ttrees[b'PWGHF_TreeCreator/tree_Particle;1'] pds_trks = tracks.pandas.df() # entrystop=10) events = all_ttrees[b'PWGHF_TreeCreator/tree_event_char;1'] pds_evs = events.pandas.df() # print the banner first fj.ClusterSequence.print_banner() # signal jet definition maxrap = 0.9 jet_R0 = args.jetR jet_def = fj.JetDefinition(fj.antikt_algorithm, jet_R0) jet_selector = fj.SelectorPtMin(0.0) & fj.SelectorPtMax( 1000.0) & fj.SelectorAbsEtaMax(1) jet_area_def = fj.AreaDefinition(fj.active_area, fj.GhostedAreaSpec(maxrap)) print(jet_def) # background estimation grid_spacing = maxrap / 10. gmbge = fj.GridMedianBackgroundEstimator(maxrap, grid_spacing) print() output_columns = ['evid', 'pt', 'eta', 'phi', 'area', 'ptsub'] e_jets = pd.DataFrame(columns=output_columns) for i, e in pds_evs.iterrows(): iev_id = int(e['ev_id']) _ts = pds_trks.loc[pds_trks['ev_id'] == iev_id] start = time.time() _tpsj = fj_parts_from_tracks_numpy(_ts) end = time.time() dt_swig = end - start start = time.time() _tpsj_for = fj_parts_from_tracks(_ts) end = time.time() dt_for = end - start # print ('len {} =?= {}'.format(len(_tpsj_for), len(_tpsj))) print( '[i] timing (ntracks={}): dt_for: {} dt_swig: {} ratio: {}'.format( len(_tpsj), dt_for, dt_swig, dt_for / dt_swig)) # print('maximum particle rapidity:', max([psj.rap() for psj in _tpsj])) _cs = fj.ClusterSequenceArea(_tpsj, jet_def, jet_area_def) _jets = jet_selector(fj.sorted_by_pt(_cs.inclusive_jets())) gmbge.set_particles(_tpsj) # print("rho = ", gmbge.rho()) # print("sigma = ", gmbge.sigma()) # _jets = jet_selector(jet_def(_tpsj)) # _jets_a = [[iev_id, j.perp(), j.eta(), j.phi()] for j in _jets] # _jets_a = pd.DataFrame(np.array([[iev_id, j.perp(), j.eta(), j.phi()] for j in _jets]), columns=['evid', 'pt', 'eta', 'phi']) _jets_a = pd.DataFrame([[ iev_id, j.perp(), j.eta(), j.phi(), j.area(), j.perp() - gmbge.rho() * j.area() ] for j in _jets], columns=output_columns) # , columns=['evid, pt, eta, phi'] e_jets = e_jets.append(_jets_a, ignore_index=True) # print('event', i, 'number of parts', len(_tpsj), 'number of jets', len(_jets)) # print(_jets_a.describe()) if args.fjsubtract: fj_example_02_area(_tpsj) # print(e_jets.describe()) joblib.dump(e_jets, args.output)
def main(): parser = argparse.ArgumentParser(description='pythia8 fastjet on the fly', prog=os.path.basename(__file__)) pyconf.add_standard_pythia_args(parser) _default_output_filename = os.path.basename(__file__).replace( ".py", "") + "_output.root" parser.add_argument('--output', default=_default_output_filename, type=str) parser.add_argument('--user-seed', help='pythia seed', default=1111, type=int) parser.add_argument('--debug', default=0, type=int) args = parser.parse_args() # jets # print the banner first # fj.ClusterSequence.print_banner() # print() # # set up our jet definition and a jet selector jet_R0 = 1.0 # jet_def = fj.JetDefinition(fj.antikt_algorithm, jet_R0) # print(jet_def) # acceptance # hadron level acceptamce max_eta_hadron = 10. from pyjetty.mputils import pwarning pwarning('max eta for particles after hadronization set to', max_eta_hadron) parts_selector_h = fj.SelectorAbsEtaMax(max_eta_hadron) jet_selector = fj.SelectorPtMin(1.0) & fj.SelectorPtMax( 100.0) & fj.SelectorAbsEtaMax(max_eta_hadron - 1.05 * jet_R0) # parton level acceptamce max_eta_parton = max_eta_hadron + 3. * jet_R0 pwarning('max eta for partons set to', max_eta_parton) parts_selector_p = fj.SelectorAbsEtaMax(max_eta_parton) # initialize pythia # mZ = pythia8.Pythia().particleData.m0(23) mZ = 91.188 beams_eCM = "Beams:eCM={}".format(mZ) mycfg = [ "PDF:lepton = off", # Allow no substructure in e+- beams: normal for corrected LEP data. "WeakSingleBoson:ffbar2gmZ = on", # Process selection. "23:onMode = off", # Switch off all Z0 decays and then switch back on those to quarks. "23:onIfAny = 1 2 3 4 5", "Beams:idA = 11", "Beams:idB = -11", beams_eCM, # LEP1 initialization at Z0 mass. "HadronLevel:all=off", # parton level first "PhaseSpace:bias2Selection=off" ] # this is ON by default in pyconf - not OK for these settings pythia = pyconf.create_and_init_pythia_from_args(args, mycfg) if not pythia: return # initialize ROOT output outf = ROOT.TFile(args.output, 'recreate') outf.cd() tdf = ROOT.TDirectoryFile('PWGHF_TreeCreator', 'PWGHF_TreeCreator') tdf.cd() t_p = ROOT.TNtuple( 'tree_Particle_P', 'tree_Particle_P', 'run_number:ev_id:ParticlePt:ParticleEta:ParticlePhi:ParticleID:ParticleIDabs:ParticleCharge:isGluon:isQuark' ) # t_p = ROOT.TNtuple('tree_Particle_gen', 'tree_Particle_gen', 'run_number:ev_id:ParticlePt:ParticleEta:ParticlePhi:ParticleID:ParticleIDabs:ParticleCharge') t_h = ROOT.TNtuple( 'tree_Particle_H', 'tree_Particle_H', 'run_number:ev_id:ParticlePt:ParticleEta:ParticlePhi:ParticleID:ParticleIDabs:ParticleCharge:isHadron:isLepton:isVisible' ) t_e = ROOT.TNtuple('tree_event_char', 'tree_event_char', 'run_number:ev_id:z_vtx_reco:is_ev_rej') if args.nev < 100: args.nev = 100 run_number = args.user_seed # main loop for i in tqdm.tqdm(range(args.nev)): if not pythia.next(): continue if args.debug: pwarning('-- event', i) #select particles parts_pythia_p = pythiafjext.vectorize_select(pythia, [pythiafjext.kFinal], 0, True) parts_pythia_p_selected = parts_selector_p(parts_pythia_p) # hadronize hstatus = pythia.forceHadronLevel() if not hstatus: pwarning('forceHadronLevel false event', iev) continue parts_pythia_h = pythiafjext.vectorize_select(pythia, [pythiafjext.kFinal], 0, True) parts_pythia_h_selected = parts_selector_h(parts_pythia_h) # charged hadrons/particles only # parts_pythia_h = pythiafjext.vectorize_select(pythia, [pythiafjext.kHadron, pythiafjext.kCharged]) # parts_pythia_hch = pythiafjext.vectorize_select(pythia, [pythiafjext.kFinal, pythiafjext.kCharged], 0, True) # parts_pythia_hch_selected = parts_selector_h(parts_pythia_hch) # stream to trees ev_id = i t_e.Fill(run_number, ev_id, 0, 0) _tmp = [ t_p.Fill( run_number, ev_id, p.perp(), p.eta(), p.phi(), pythiafjext.getPythia8Particle(p).id(), pythiafjext.getPythia8Particle(p).idAbs(), pythiafjext.getPythia8Particle(p).charge(), pythiafjext.getPythia8Particle(p).isGluon(), pythiafjext.getPythia8Particle(p).isQuark(), ) for p in parts_pythia_p ] _tmp = [ t_h.Fill(run_number, ev_id, p.perp(), p.eta(), p.phi(), pythiafjext.getPythia8Particle(p).id(), pythiafjext.getPythia8Particle(p).idAbs(), pythiafjext.getPythia8Particle(p).charge(), pythiafjext.getPythia8Particle(p).isHadron(), pythiafjext.getPythia8Particle(p).isLepton(), pythiafjext.getPythia8Particle(p).isVisible()) for p in parts_pythia_h ] pythia.stat() outf.Write() outf.Close()
return pythia return None sconfig_pythia = [ "Beams:eCM = 8000.", "HardQCD:all = on", "PhaseSpace:pTHatMin = 100." ] pythia = create_and_init_pythia(sconfig_pythia) # 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.SelectorPtMax( 200.0) & fj.SelectorAbsEtaMax(1) sd = fjcontrib.SoftDrop(0, 0.1, 1.0) all_jets = [] for iEvent in tqdm(range(10), 'event'): if not pythia.next(): continue parts = pyfj.vectorize(pythia, True, -1, 1, False) jets = jet_selector(jet_def(parts)) all_jets.extend(jets) all_sd_jets = [sd.result(j) for j in all_jets] pts = [j.pt() for j in all_jets] sd_pts = [j.pt() for j in all_sd_jets] sd_delta_pt = [delta for delta in deltas(all_jets, all_sd_jets)] nangs0 = [pyfj.angularity(j, 0.) for j in all_jets]
def main(): parser = argparse.ArgumentParser(description='jetscape in python', \ prog=os.path.basename(__file__)) parser.add_argument('-i', '--input', help='input file', \ default='low', type=str, required=True) parser.add_argument('--nev', help='number of events', \ default=1000, type=int) args = parser.parse_args() # Use pyhepmc_ng to parse the HepMC file input_hepmc = pyhepmc_ng.ReaderAscii(args.input) if input_hepmc.failed(): print("[error] unable to read from {}".format(args.input)) sys.exit(1) # Create a histogram with ROOT lbins = logbins(1., 500, 50) hJetPt04 = ROOT.TH1D("hJetPt04", "hJetPt04", 50, lbins) # jet finder fj.ClusterSequence.print_banner() print() jet_R0 = 0.4 jet_def = fj.JetDefinition(fj.antikt_algorithm, jet_R0) jet_selector = fj.SelectorPtMin(50.0) & fj.SelectorPtMax( 200.0) & fj.SelectorAbsEtaMax(3) # Loop through events 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(): nstop = pbar.n pbar.close() print('End of HepMC file at event {} '.format(nstop)) break jets_hepmc = find_jets_hepmc(jet_def, jet_selector, event_hepmc) all_jets.extend(jets_hepmc) pbar.update() # Fill histogram [fill_jet_histogram(hJetPt04, jet) for jet in all_jets] if pbar.n >= args.nev: pbar.close() print('{} event limit reached'.format(args.nev)) break # Plot and save histogram print('Creating ROOT file...') c = ROOT.TCanvas('c', 'c', 600, 450) c.cd() c.SetLogy() hJetPt04.SetMarkerStyle(21) hJetPt04.Sumw2() hJetPt04.Draw('E P') output_filename = './AnalysisResult.root' c.SaveAs(output_filename) fout = ROOT.TFile(output_filename, "update") fout.cd() hJetPt04.Write() fout.Close()
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 __init__(self, **kwargs): # constants # self.max_eta=4 # specify the maximal pseudorapidity for the input particles. It is used for the subtraction. Particles with eta>|max_eta| are removed and not used during the subtraction (they are not returned). The same parameter should be used for the GridMedianBackgroundEstimator as it is demonstrated in this example. If JetMedianBackgroundEstimator is used, then lower parameter should be used (to avoid including particles outside this range). # self.max_eta_jet=3 # the maximal pseudorapidity for selected jets. Not used for the subtraction - just for the final output jets in this example. # self.bge_rho_grid_size = 0.2 # self.max_distance = 0.3 # self.alpha = 1 # self.ghost_area = 0.01 # self.distance_type = fjcontrib.ConstituentSubtractor.deltaR # self.CBS=1.0 # choose the scale for scaling the background charged particles # self.CSS=1.0 # choose the scale for scaling the signal charged particles # self.max_pt_correct = 5. # set the default values self.configure_from_args( max_eta=4, bge_rho_grid_size=0.2, max_distance=0.3, alpha=1, ghost_area=0.01, distance_type=fjcontrib.ConstituentSubtractor.deltaR, CBS=1.0, CSS=1.0, max_pt_correct=5.) super(CEventSubtractor, self).__init__(**kwargs) # background estimator self.bge_rho = fj.GridMedianBackgroundEstimator( self.max_eta, self.bge_rho_grid_size ) # Maximal pseudo-rapidity cut max_eta is used inside ConstituentSubtraction, but in GridMedianBackgroundEstimator, the range is specified by maximal rapidity cut. Therefore, it is important to apply the same pseudo-rapidity cut also for particles used for background estimation (specified by function "set_particles") and also derive the rho dependence on rapidity using this max pseudo-rapidity cut to get the correct rescaling function! self.subtractor = fjcontrib.ConstituentSubtractor( ) # no need to provide background estimator in this case self.subtractor.set_distance_type( self.distance_type ) # free parameter for the type of distance between particle i and ghost k. There are two options: "deltaR" or "angle" which are defined as deltaR=sqrt((y_i-y_k)^2+(phi_i-phi_k)^2) or Euclidean angle between the momenta self.subtractor.set_max_distance( self.max_distance ) # free parameter for the maximal allowed distance between particle i and ghost k self.subtractor.set_alpha( self.alpha ) # free parameter for the distance measure (the exponent of particle pt). The larger the parameter alpha, the more are favoured the lower pt particles in the subtraction process self.subtractor.set_ghost_area( self.ghost_area ) # free parameter for the density of ghosts. The smaller, the better - but also the computation is slower. # self.subtractor.set_do_mass_subtraction() # use this line if also the mass term sqrt(pT^2+m^2)-pT should be corrected or not. It is necessary to specify it like this because the function set_common_bge_for_rho_and_rhom cannot be used in this case. self.subtractor.set_remove_particles_with_zero_pt_and_mass( True ) # set to false if you want to have also the zero pt and mtMinuspt particles in the output. Set to true, if not. The choice has no effect on the performance. By deafult, these particles are removed - this is the recommended way since then the output contains much less particles, and therefore the next step (e.g. clustering) is faster. In this example, it is set to false to make sure that this test is successful on all systems (mac, linux). # self.subtractor.set_grid_size_background_estimator(self.bge_rho_grid_size) # set the grid size (not area) for the background estimation with GridMedianBackgroundEstimation which is used within CS correction using charged info self.subtractor.set_max_eta( self.max_eta) # parameter for the maximal eta cut self.subtractor.set_background_estimator( self.bge_rho) # specify the background estimator to estimate rho. self.sel_max_pt = fj.SelectorPtMax(self.max_pt_correct) self.subtractor.set_particle_selector(self.sel_max_pt) # only particles with pt<X will be corrected - the other particles will be copied without any changes. # subtractor.set_use_nearby_hard(0.2,2); // In this example, if there is a hard proxy within deltaR distance of 0.2, then the CS distance is multiplied by factor of 2, i.e. such particle is less favoured in the subtraction procedure. If you uncomment this line, then also uncomment line 106. self.subtractor.initialize()
aleph_file = "/Volumes/two/data/aleph/LEP1Data1992_recons_aftercut-001.aleph" if len(sys.argv) > 1: aleph_file = sys.argv[1] # aleph.dump(aleph_file, 2, False); # aleph.dump(aleph_file, -1, True); # 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(0.0) & fj.SelectorPtMax(200.0) & fj.SelectorAbsEtaMax(1) jet_selector = fj.SelectorPtMin(0.0) & fj.SelectorPtMax(200.0) all_jets = [] reader = aleph.Reader(aleph_file) nev = aleph_utils.get_n_events(aleph_file) pbar = tqdm(total=nev) dt_stats = [] while reader.read_next_event(): e = reader.get_event() aleph_parts = e.get_particles() pbar.update() start = time.time() old_loop(e)
def main_test(args): if os.path.isfile(args.output): if not args.overwrite: print('[i] output', args.output, 'exists - use --overwrite to do just that...') return print(args) # alice specific max_eta = 0.9 jet_R0 = 0.4 mycfg = [] if args.benchmark: mycfg = ['PhaseSpace:pThatMin = 80', 'PhaseSpace:pThatMax = -1'] jet_selector = fj.SelectorPtMin(80.0) & fj.SelectorPtMax(100.0) & fj.SelectorAbsEtaMax(max_eta - 1.05 * jet_R0) # jet_selector_cs = fj.SelectorPtMin(50.0) & fj.SelectorAbsEtaMax(max_eta - 1.05 * jet_R0) else: args.py_biaspow = 4 args.py_biasref = 10 jet_selector = fj.SelectorPtMin(20) & fj.SelectorAbsEtaMax(max_eta - 1.05 * jet_R0) # jet_selector_cs = fj.SelectorPtMin(50.0) & fj.SelectorAbsEtaMax(max_eta - 1.05 * jet_R0) 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 = 0.1 sd = fjcontrib.SoftDrop(0, sd_zcut, jet_R0) parts_selector = fj.SelectorAbsEtaMax(max_eta) fout = ROOT.TFile(args.output, 'recreate') fout.cd() twj = RTreeWriter(tree_name='jets', fout=fout) twjm = RTreeWriter(tree_name='jetsm', fout=fout) twp = RTreeWriter(tree_name='parts', fout=fout) bgestim = BackgroundEstimator(input_file=args.input, name='bg_estim') print(bgestim) boltzmann_subtractor = BoltzmannSubtractor(max_pt_subtract=10.) print(boltzmann_subtractor) be = None data = None if len(args.data) > 0: data = DataIO(file_list=args.data) print(data) else: # be = BoltzmannEvent(mean_pt=0.6, multiplicity=2000 * max_eta * 2, max_eta=max_eta, max_pt=100) pass be = fjtools.BoltzmannBackground(0.7, 0.01, 1.5) print(be.description()) parts_selector = fj.SelectorAbsEtaMax(max_eta) if args.nev < 1: args.nev = 1 jas = JetAnalysisWithRho(jet_R=jet_R0, jet_algorithm=fj.antikt_algorithm, particle_eta_max=max_eta) ja = JetAnalysisWithRho(jet_R=jet_R0, jet_algorithm=fj.antikt_algorithm, particle_eta_max=max_eta) jabg = JetAnalysisWithRho(jet_R=jet_R0, jet_algorithm=fj.antikt_algorithm, particle_eta_max=max_eta) ### EVENT LOOP STARTS HERE pbar = tqdm.tqdm(total=args.nev) iev = 0 while pbar.n < args.nev: iev = iev + 1 if not pythia.next(): continue parts_pythia = pythiafjext.vectorize_select(pythia, [pythiafjext.kFinal, pythiafjext.kCharged]) parts_gen = parts_selector(parts_pythia) jas.analyze_event(parts_gen) signal_jets = fj.sorted_by_pt(jet_selector(jas.jets)) if len(signal_jets) < 1: continue pbar.set_description('tried %i' % iev) pbar.update(1) if data: bg_parts = data.load_event(offset=10000) else: if be: # bg_parts = be.generate(offset=10000) bg_parts = be.generate(int(2000 * max_eta * 2.), max_eta, 10000) # len_bg_parts = len(bg_parts) # subtr_parts_b = be.subtract(bg_parts, 0.7, len(bg_parts)) # print('x nparts_bg=', len(bg_parts), 'nparts_pass='******' ', be.get_formula()) # subtr_parts_b = be.subtract(bg_parts) # print(' - nparts_bg=', len(bg_parts), 'nparts_pass='******' ', be.get_formula()) _pythia_inserts = [] _pythia_inserts_indexes = [] for sjet in signal_jets: _pythia_inserts = [bg_parts.push_back(psj) for psj in sjet.constituents() if psj.user_index() >= 0] _pythia_inserts_indexes.extend([psj.user_index() for psj in sjet.constituents() if psj.user_index() >= 0]) print ('pythia indexes:', len(_pythia_inserts_indexes), sorted(_pythia_inserts_indexes)) # subtr_parts_b = be.subtract(bg_parts) # print(' - nparts_bg=', len(bg_parts), 'nparts_pass='******' ', be.get_formula()) # subtr_parts_b = be.subtract(bg_parts, 0.7, len(_pythia_inserts)) # print('. nparts_bg=', len_bg_parts, 'nparts_pass='******' ', be.get_formula()) # _mpt = mean_pt(bg_parts) # subtr_parts_b = be.subtract(bg_parts, _mpt, len(_pythia_inserts)) # print('. nparts_bg=', len(bg_parts), 'nparts_pass='******' ', be.get_formula()) # subtr_parts = bgestim.subtracted_particles(bg_parts) # ja.analyze_event(subtr_parts) # for j in ja.jets: # if matched_pt(j, sjet) > 0.5: # tw.fill_branch('sjet_bg', j) # tw.fill_branch('delta_pt', sjet.pt() - j.pt()) #ja.analyze_event(bg_parts) #bg_signal_jets_b = fj.sorted_by_pt(ja.jets) #for j in bg_signal_jets_b: # if matched_pt(j, sjet) > 0.5: # tw.fill_branch('sjet_hybrid', j) # tw.fill_branch('delta_pt_hybrid', sjet.pt() - j.pt()) # subtr_parts_b = boltzmann_subtractor.subtracted_particles(bg_parts) # _it1 = [p for p in be.subtract(bg_parts)] # subtr_parts_b = be.subtract(_it1) jabg.analyze_event(bg_parts) bg_parts_noleads = remove_jets(bg_parts, jabg.jets[:2]) # print(bg_parts_noleads.size()) #for j in jabg.jets: # pass # continue # if i > 2: # break # _tmp = [p.pt() for p in j.constituents()] # reduce_total_pt = reduce_total_pt + sum(_tmp) #print ('reduce total pt by', reduce_total_pt) # subtr_parts_b = be.subtract(bg_parts) # print(be.get_formula()) # print('nparts_bg=', len(bg_parts), 'nparts_subtr=', len(subtr_parts_b), 'nparts_pythia=', len(tmp)) _mpt = mean_pt(bg_parts_noleads) # subtr_parts_b = be.subtract(bg_parts, _mpt, len(_pythia_inserts)) # subtr_parts_b = be.subtract(bg_parts, _mpt, len(bg_parts) - len(bg_parts_noleads)) subtr_parts_b = be.subtract(bg_parts, _mpt, len(bg_parts_noleads)) print('. nparts_bg=', len(bg_parts), 'nparts_pass='******' ', be.get_formula()) _indexes_subtr_parts_b = [p.user_index() for p in subtr_parts_b] print ('remaining indexes:', len(_indexes_subtr_parts_b), sorted(_indexes_subtr_parts_b)) ja.analyze_event(subtr_parts_b) bg_signal_jets_b = fj.sorted_by_pt(ja.jets) w = pythia.info.weight() s = pythia.info.sigmaGen() twj.fill_branch('sjet', signal_jets) twj.fill_tree() print( 'py jets=', len([j for j in signal_jets if j.pt() > 0.1 ]), 'sub jets=', len([j for j in bg_signal_jets_b if j.pt() > 0.1])) _tmp = [fill_tree_matched(sjet, j, twjm, sd, 0, iev, weight=w, sigma=s) for sjet in signal_jets for j in bg_signal_jets_b] twp.fill_branch('p', bg_parts) #twp.fill_branch('sp', subtr_parts) twp.fill_branch('sp_b', subtr_parts_b) twp.fill_tree() pbar.close() fout.cd() fout.Write() fout.Close() print('[i] written', fout.GetName())