예제 #1
0
 def __init__(self, **kwargs):
     self.configure_from_args(file_list='PbPb_file_list.txt',
                              n_events=500,
                              output='output',
                              run_jetfinder=False)
     super(Data2MP4, self).__init__(**kwargs)
     self.data_io = DataIO(file_list=self.file_list)
     #self.hetaphi = ROOT.TH2F('_hetaphi', '_hetaphi;#eta;#varphi', 51, -1, 1, 51, 0., 2.*ROOT.TMath.Pi())
     #self.hetaphi = ROOT.TH2F('_hetaphi', '_hetaphi;#eta;#varphi', 51, -1, 1, 51, -ROOT.TMath.Pi(), +ROOT.TMath.Pi())
     #self.hetaphi_jet = ROOT.TH2F('_hetaphi_jet', '_hetaphi_jet;#eta;#varphi', 51, -1, 1, 51, -ROOT.TMath.Pi(), +ROOT.TMath.Pi())
     #self.hetaphi = ROOT.TH2F('_hetaphi', '_hetaphi;#eta;#varphi', 101, -ROOT.TMath.Pi(), ROOT.TMath.Pi(), 101, -ROOT.TMath.Pi(), +ROOT.TMath.Pi())
     self.hetaphi = ROOT.TH2F('_hetaphi', '_hetaphi;#eta;#varphi', 51, -1,
                              1, 51, -ROOT.TMath.Pi(), +ROOT.TMath.Pi())
     self.hetaphi_jet = ROOT.TH2F('_hetaphi_jet',
                                  '_hetaphi_jet;#eta;#varphi', 51,
                                  -ROOT.TMath.Pi(), ROOT.TMath.Pi(), 51,
                                  -ROOT.TMath.Pi(), +ROOT.TMath.Pi())
     self.mean_eta = ROOT.TH1F('_hmean_eta', '_hmean_eta;<#eta>', 101, -0.3,
                               0.3)
     # self.mean_phi = ROOT.TH1F('_hmean_phi', '_hmean_phi;<#varphi>', 101, ROOT.TMath.Pi()-0.3, ROOT.TMath.Pi()+0.3)
     self.mean_phi = ROOT.TH1F('_hmean_phi', '_hmean_phi;<#varphi>', 101,
                               -0.3, +0.3)
     self.mean_e = ROOT.TH1F('_hmean_e', '_hmean_e;<E (GeV)>', 100, 0, 2)
     self.tc = None
     if self.run_jetfinder:
         fj.ClusterSequence.print_banner()
예제 #2
0
    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)
예제 #3
0
def main_make(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

	outf = ROOT.TFile(args.output, 'recreate')
	outf.cd()

	bgestim = BackgroundEstimator(name='bg_estim', grid_size=0.1, particle_eta_max=max_eta)
	print(bgestim)

	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)
		print(be)

	parts_selector = fj.SelectorAbsEtaMax(max_eta)

	if args.nev < 1:
		args.nev = 1

	### EVENT LOOP STARTS HERE
	for iev in tqdm.tqdm(range(args.nev)):
		if data:
			bg_parts = data.load_event(offset=10000)
		else:
			if be:
				bg_parts = be.generate(offset=10000)
		bgestim.fill_grid(bg_parts)

	outf.cd()
	if be:
		be.write()
	bgestim.write()
	outf.Write()
	outf.Close()
	print('[i] written', outf.GetName())
예제 #4
0
 def __init__(self, **kwargs):
     self.configure_from_args(file_list='PbPb_file_list.txt',
                              n_events=500,
                              output='output')
     super(Data2MP4Morph, self).__init__(**kwargs)
     self.data_io = DataIO(file_list=self.file_list)
     # self.hetaphi = ROOT.TH2F('_hetaphi', '_hetaphi;#eta;#varphi', 51, -ROOT.TMath.Pi(), ROOT.TMath.Pi(), 51, -ROOT.TMath.Pi(), +ROOT.TMath.Pi())
     # self.hetaphi = ROOT.TH2F('_hetaphi', '_hetaphi;#eta;#varphi', 101, -1, 1, 101, -ROOT.TMath.Pi(), +ROOT.TMath.Pi())
     self.hetaphi = ROOT.TH2F('_hetaphi', '_hetaphi;#varphi;#eta', 101,
                              -ROOT.TMath.Pi(), +ROOT.TMath.Pi(), 101, -1,
                              1)
     self.tc = None
     self.iframe = 0
     self.pythia = PythiaJetty(pthatmin=100,
                               eta_max=1,
                               jet_pt_min=20,
                               jet_R0=0.4)
예제 #5
0
class Embedding(MPBase):
    def add_arguments_to_parser(parser):
        parser.add_argument('-o',
                            '--output-filename',
                            default="output.root",
                            type=str)
        parser.add_argument('datalistAA',
                            help='run through a file list',
                            default='',
                            type=str)
        parser.add_argument('simulationpp',
                            help='run through a file list',
                            default='',
                            type=str)
        parser.add_argument('--jetR', default=0.4, type=float)
        parser.add_argument('--alpha', default=0, type=float)
        parser.add_argument('--dRmax', default=0.25, type=float)
        parser.add_argument('--sd-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=1.e-3,
                            type=float)
        parser.add_argument('--nev',
                            help='number of events to run',
                            default=0,
                            type=int)
        parser.add_argument('--max-eta',
                            help='max eta for particles',
                            default=0.9)

    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 run(self):
        # need to change this for data to drive...
        delta_t = 0
        start_t = time.time()
        iev = 1
        # while self.det_sim.load_event() and self.part_sim.load_event():
        while self.det_sim.load_event():
            iev = iev + 1
            if self.nev > 0:
                if iev > self.nev:
                    iev = iev - 1
                    break
            if iev % 1000 == 0:
                delta_t = time.time() - start_t
                pinfo('processing event', iev, ' - ev/sec =', iev / delta_t,
                      'elapsed =', delta_t)

            # find jets on detector level
            if len(self.det_sim.particles) < 1:
                pwarning(iev, 'event skipped N detector parts',
                         len(self.det_sim.particles))
                continue
            self.ja_det.analyze_event(self.det_sim.particles)
            _jets_det = self.ja_det.jets
            # _x = [pdebug(' -d ', j) for j in _jets_det]
            if len(_jets_det) < 1:
                continue
            _too_high_pt = [
                p.pt() for j in _jets_det for p in j.constituents()
                if p.pt() > 100.
            ]
            if len(_too_high_pt) > 0:
                pwarning(iev, 'a likely fake high pT particle(s)',
                         _too_high_pt, '- skipping whole event')
                continue

            _output_fname = os.path.expanduser(
                os.path.expandvars(self.det_sim.file_io.file_input))
            _output_fname = _output_fname.replace("/", "_")
            self.output.initialize_output(_output_fname)

            self.output.fill_det_level(iev, _jets_det)

            # load the corresponding event on particle level
            self.part_sim.open_afile(afile=self.det_sim.file_io.file_input)
            if not self.part_sim.load_event_with_loc(
                    self.det_sim.event.run_number, self.det_sim.event.ev_id,
                    0):
                perror('unable to load partL event run#:',
                       self.det_sim.event.run_number, 'ev_id:',
                       self.det_sim.event.ev_id)
                continue
            if self.det_sim.event.run_number != self.part_sim.event.run_number:
                perror('run# missmatch detL:', self.det_sim.event.run_number,
                       'partL:', self.part_sim.event.run_number)
                continue
            if self.det_sim.event.ev_id != self.part_sim.event.ev_id:
                perror('ev_id# missmatch detL:', self.det_sim.event.ev_id,
                       'partL:', self.part_sim.event.ev_id)
                continue

            # find jets on particle level
            if len(self.part_sim.particles) < 1:
                pwarning(iev, 'event skipped N particle parts',
                         len(self.part_sim.particles))
                continue
            self.ja_part.analyze_event(self.part_sim.particles)
            _jets_part = self.ja_part.jets
            # _x = [pdebug(' -p ', j) for j in _jets_part]
            if len(_jets_part) < 1:
                continue

            # match in pp simulations
            _det_part_matches = []
            _n_matches = 0
            _part_psjv = self.ja_part.jets_as_psj_vector()
            for j_det in _jets_det:
                _mactches_pp = fjtools.matched_Reta(j_det, _part_psjv,
                                                    0.6 * self.jetR)
                #_mactches_pp = fjtools.matched_Ry(j_det, _part_psjv, 0.6 * self.jetR)
                _n_matches = _n_matches + len(_mactches_pp)
                if len(_mactches_pp) > 1:
                    pwarning('event:', iev, 'jet pt=', j_det.pt(),
                             'more than one match in pp jets',
                             [i for i in _mactches_pp])
                if len(_mactches_pp) == 1:
                    j_part = _part_psjv[_mactches_pp[0]]
                    # pinfo('j_det', j_det, 'j_part', j_part)
                    _det_part_matches.append([j_det, j_part])
                    self.output.fill_pp_pairs(iev, [j_det, j_part])

            if _n_matches < 1:
                if _n_matches < 1:
                    pwarning('event:', iev,
                             '- no matched jets in simulation!?',
                             len(_det_part_matches))

            # here embedding to PbPb data
            _offset = 10000
            while _offset < len(self.det_sim.particles):
                _offset = _offset + 1000
                pwarning('increasing bg index offset to', _offset)

            _PbPb_loaded = 0
            while _PbPb_loaded == 0:
                if not self.dataPbPb.load_event(offset=_offset):
                    perror('unable to load next PbPb event')
                    _PbPb_loaded = -1
                else:
                    _hybrid_event = self.dataPbPb.particles
                    _nparts_hybrid_no_emb = len(_hybrid_event)
                    if _nparts_hybrid_no_emb < 1:
                        pwarning(
                            'hybrid event with no particles! trying another one'
                        )
                        _PbPb_loaded = 0
                    else:
                        _PbPb_loaded = 1
            if _PbPb_loaded < 0:
                perror(
                    'unable to load PbPb event - permanent - bailing out here.'
                )
                break

            _tmp = [_hybrid_event.push_back(p) for p in self.det_sim.particles]

            if self.cs:
                cs_parts = self.cs.process_event(_hybrid_event)
                rho = self.cs.bge_rho.rho()
                self.ja_hybrid.analyze_event(cs_parts)
            else:
                self.ja_hybrid.analyze_event(_hybrid_event)

            _hybrid_matches = []
            _hybrid_psjv = self.ja_hybrid.jets_as_psj_vector()
            for m in _det_part_matches:
                j_det = m[0]
                j_part = m[1]
                _mactches_hybrid = fjtools.matched_Reta(
                    j_det, _hybrid_psjv, 0.6 * self.jetR)
                if len(_mactches_hybrid) > 1:
                    pwarning('event:', iev, 'jet pt=', j_det.pt(),
                             'more than one match in hybrid jets',
                             [i for i in _mactches_hybrid])
                if len(_mactches_hybrid) == 1:
                    # m.append(_hybrid_psjv[_mactches_hybrid[0]])
                    j_hybr = _hybrid_psjv[_mactches_hybrid[0]]
                    # pdebug('L302', 'j_det', j_det, 'j_part', j_part, 'j_hybr', j_hybr)
                    _hybrid_matches.append([j_det, j_part, j_hybr])
                    self.output.fill_emb_3(iev, [j_det, j_part, j_hybr])

            _n_matches_hybrid = len(_hybrid_matches)
            if _n_matches_hybrid < 1:
                if _n_matches_hybrid < 1:
                    pwarning('event:', iev, '- no matched jets in embedding!?',
                             _n_matches_hybrid)

        delta_t = time.time() - start_t
        pinfo('processed events', iev, ' - ev/sec =', iev / delta_t,
              'elapsed =', delta_t)
        self.output.close()
예제 #6
0
def main():
    parser = argparse.ArgumentParser(description='test groomers',
                                     prog=os.path.basename(__file__))
    parser.add_argument('-o',
                        '--output-filename',
                        default="output.root",
                        type=str)
    parser.add_argument('datalistpp',
                        help='run through a file list',
                        default='',
                        type=str)
    parser.add_argument('--datalistAA',
                        help='run through a file list - embedding mode',
                        default='',
                        type=str)
    parser.add_argument('--jetR', default=0.4, type=float)
    parser.add_argument('--alpha', default=0, type=float)
    parser.add_argument('--dRmax', default=0.25, type=float)
    parser.add_argument('--overwrite',
                        help="overwrite output",
                        default=False,
                        action='store_true')
    parser.add_argument('--jetptcut',
                        help='remove jets below the cut',
                        default=50.,
                        type=float)
    parser.add_argument('--nev',
                        help='number of events to run',
                        default=0,
                        type=int)
    parser.add_argument('--max-eta',
                        help='max eta for particles',
                        default=0.9,
                        type=float)
    parser.add_argument('--npart-cut',
                        help='npart cut on centrality low,high hint:' +
                        npart_cents,
                        default='325,450',
                        type=str)

    args = parser.parse_args()

    try:
        npart_min = int(args.npart_cut.split(',')[0])
        npart_max = int(args.npart_cut.split(',')[1])
    except:
        perror(
            'unable to parse npart centrality selection - two integer numbers with a coma in-between needed - specified:',
            args.npart_cut)
        return 1

    # initialize constituent subtractor
    cs = None
    if args.dRmax > 0:
        cs = CEventSubtractor(alpha=args.alpha,
                              max_distance=args.dRmax,
                              max_eta=args.max_eta,
                              bge_rho_grid_size=0.25,
                              max_pt_correct=100)

    pp_data = DataIO(name='Sim Pythia Detector level',
                     file_list=args.datalistpp,
                     random_file_order=False,
                     tree_name='tree_Particle_gen')
    ja_pp = JetAnalysis(jet_R=args.jetR,
                        jet_algorithm=fj.antikt_algorithm,
                        jet_pt_min=50.,
                        particle_eta_max=args.max_eta)

    if args.datalistAA:
        aa_data = DataBackgroundIO(name='PbPb',
                                   file_list=args.datalistAA,
                                   tree_name='tree_Particle_gen')
        ja_emb = JetAnalysis(jet_R=args.jetR,
                             jet_algorithm=fj.antikt_algorithm,
                             jet_pt_min=50.,
                             particle_eta_max=args.max_eta)
        ja_aa = JetAnalysis(jet_R=args.jetR,
                            jet_algorithm=fj.antikt_algorithm,
                            jet_pt_min=50.,
                            particle_eta_max=args.max_eta)

    dndeta_selector = fj.SelectorAbsEtaMax(1.)

    # tg = thg.ThermalGenerator()
    print(cs)

    # print the banner first
    fj.ClusterSequence.print_banner()
    print()

    gout = GroomerOutput(args.output_filename,
                         enable_aa_trees=bool(args.datalistAA))

    delta_t = 0
    start_t = time.time()
    iev = 1
    while pp_data.load_event(offset=0):
        iev = iev + 1
        if args.nev > 0:
            if iev > args.nev:
                iev = iev - 1
                break
        if iev % 1000 == 0:
            delta_t = time.time() - start_t
            pinfo('processing event', iev, ' - ev/sec =', iev / delta_t,
                  'elapsed =', delta_t)

        # find jets on detector level
        if len(pp_data.particles) < 1:
            pwarning(iev, 'pp event skipped N parts', len(pp_data.particles))
            continue
        ja_pp.analyze_event(pp_data.particles)
        if len(ja_pp.jets) < 1:
            continue

        # pinfo('n particles', len(pp_data.particles))
        dndeta0 = dndeta_selector(pp_data.particles)
        [
            gout.fill_branches(j, syst=0, dndeta=len(dndeta0) / 2.)
            for j in ja_pp.jets
        ]
        # pinfo('n jets', len(ja_pp.jets))

        if args.datalistAA:
            while True:
                aa_loaded = aa_data.load_event(offset=10000)
                if aa_data.event.npart < npart_min or aa_data.event.npart >= npart_max:
                    continue
                else:
                    if len(aa_data.particles) < 1:
                        pwarning(iev, 'AA event skipped N parts',
                                 len(aa_data.particles))
                        continue
                    else:
                        break
            if aa_loaded:
                ja_aa.analyze_event(aa_data.particles)
                dndeta1 = dndeta_selector(aa_data.particles)
                if len(ja_aa.jets) > 0:
                    [
                        gout.fill_branches(j, syst=1, dndeta=len(dndeta1) / 2.)
                        for j in ja_aa.jets
                    ]
                else:
                    # pwarning('no jets in AA event?', len(ja_aa.jets), 'while dndeta=', len(dndeta1)/2.)
                    pass
                emb_event = fj.vectorPJ()
                [emb_event.push_back(p) for p in pp_data.particles]
                [emb_event.push_back(p) for p in aa_data.particles]
                rho = 0
                if cs:
                    cs_parts = cs.process_event(emb_event)
                    rho = cs.bge_rho.rho()
                    ja_emb.analyze_event(cs_parts)
                else:
                    ja_emb.analyze_event(emb_event)
                # matches = [[jpp, jemb] for jpp in ja_pp.jets for jemb in ja_emb.jets if fjtools.matched_pt(jemb, jpp) > 0.5]
                # for mj in matches:
                # 	gout.fill_branches(mj[0], syst=2, dndeta=len(dndeta1)/2., rho=rho)
                # 	gout.fill_branches(mj[1], syst=3)
                [
                    gout.fill_branches_prong_matching(j_pp,
                                                      j_emb,
                                                      dndeta=len(dndeta1) / 2.,
                                                      rho=rho)
                    for j_pp in ja_pp.jets for j_emb in ja_emb.jets
                ]

    delta_t = time.time() - start_t
    pinfo('processed events', iev, ' - ev/sec =', iev / delta_t, 'elapsed =',
          delta_t)
    gout.write()
예제 #7
0
def main():
    parser = argparse.ArgumentParser(description='test groomers',
                                     prog=os.path.basename(__file__))
    parser.add_argument('-o',
                        '--output-filename',
                        default="centrality_output.root",
                        type=str)
    parser.add_argument('datalist',
                        help='run through a file list',
                        default='',
                        type=str)
    parser.add_argument('--overwrite',
                        help="overwrite output",
                        default=False,
                        action='store_true')
    parser.add_argument('--nev',
                        help='number of events to run',
                        default=0,
                        type=int)
    parser.add_argument('--max-eta', help='max eta for particles', default=0.9)
    parser.add_argument('--thermal',
                        help='enable thermal generator',
                        action='store_true',
                        default=False)
    parser.add_argument('--thermal-default',
                        help='enable thermal generator',
                        action='store_true',
                        default=False)
    parser.add_argument('--particles',
                        help='stream particles',
                        action='store_true',
                        default=False)
    parser.add_argument('--npart-cut',
                        help='npart cut on centrality low,high hint:' +
                        npart_cents,
                        default='325,450',
                        type=str)
    parser.add_argument('--nch-cut',
                        help='nch cut on centrality low,high hint:' +
                        nch_cents,
                        default='18467,50000',
                        type=str)

    args = parser.parse_args()

    try:
        npart_min = int(args.npart_cut.split(',')[0])
        npart_max = int(args.npart_cut.split(',')[1])
    except:
        perror(
            'unable to parse npart centrality selection - two integer numbers with a coma in-between needed - specified:',
            args.npart_cut)
        return 1

    try:
        nch_min = int(args.nch_cut.split(',')[0])
        nch_max = int(args.nch_cut.split(',')[1])
    except:
        perror(
            'unable to parse nch centrality selection - two integer numbers with a coma in-between needed - specified:',
            args.nch_cut)
        return 1

    outf = ROOT.TFile(args.output_filename, 'recreate')
    outf.cd()
    t = ROOT.TTree('t', 't')
    tw = RTreeWriter(tree=t)
    hpt_antyr = ROOT.TH1F('hpt_antyr', 'hpt_antyr', 100, 0, 100)
    hpt_antyr_c = ROOT.TH1F('hpt_antyr_c', 'hpt_antyr_c', 100, 0, 100)
    hpt_therm = ROOT.TH1F('hpt_therm', 'hpt_therm', 100, 0, 100)
    hpt_therm_c = ROOT.TH1F('hpt_therm_c', 'hpt_therm_c', 100, 0, 100)

    data = DataIO(name='Sim Pythia Detector level',
                  file_list=args.datalist,
                  random_file_order=False,
                  tree_name='tree_Particle_gen')
    dndeta_selector = fj.SelectorAbsEtaMax(abs(
        args.max_eta)) & fj.SelectorPtMin(0.15)

    tg_default = None
    if args.thermal_default:
        tg_default = thg.ThermalGenerator()
        print(tg_default)

    tg_central = None
    if args.thermal:
        tg_central = thg.ThermalGenerator(beta=0.5, N_avg=3000, sigma_N=500)
        print(tg_central)

    delta_t = 0
    start_t = time.time()
    iev = 1
    while data.load_event(offset=0):
        iev = iev + 1
        if args.nev > 0:
            if iev > args.nev:
                iev = iev - 1
                break
        if iev % 1000 == 0:
            delta_t = time.time() - start_t
            pinfo('processing event', iev, ' - ev/sec =', iev / delta_t,
                  'elapsed =', delta_t)

        # find jets on detector level
        if len(data.particles) < 1:
            pwarning(iev, 'pp event skipped N parts', len(data.particles))
            continue

        # print(data.event)

        dndeta0_parts = dndeta_selector(data.particles)
        dndeta0 = len(dndeta0_parts) / (abs(args.max_eta * 2.))
        [hpt_antyr.Fill(p.perp()) for p in dndeta0_parts]
        if args.particles:
            tw.fill_branches(dndeta=dndeta0, p=data.particles)
        else:
            tw.fill_branches(dndeta=dndeta0)
        tw.fill_branches_attribs(
            data.event, ['sigma', 'npart', 'nch', 'nchfwd', 'nchselect'],
            prefix='antyr_')

        if data.event.npart < npart_min or data.event.npart >= npart_max:
            tw.fill_branches(cent10npart=0)
        else:
            tw.fill_branches(cent10npart=1)
            [hpt_antyr_c.Fill(p.perp()) for p in dndeta0_parts]

        if data.event.nch < nch_min or data.event.nch >= nch_max:
            tw.fill_branches(cent10nch=0)
        else:
            tw.fill_branches(cent10nch=1)

        if tg_default:
            thg_particles = tg_default.load_event()
            dndetathg_default = dndeta_selector(thg_particles)
            if args.particles:
                tw.fill_branches(dndeta_thg_0=len(dndetathg_default) /
                                 (abs(args.max_eta * 2.)),
                                 p_thg_0=thg_particles)
            else:
                tw.fill_branches(dndeta_thg_0=len(dndetathg_default) /
                                 (abs(args.max_eta * 2.)))

        if tg_central:
            thg_parts_central = tg_central.load_event()
            dndetathg_central = dndeta_selector(thg_parts_central)
            [hpt_therm_c.Fill(p.perp()) for p in dndetathg_central]
            if args.particles:
                tw.fill_branches(dndeta_thg_c=len(dndetathg_central) /
                                 (abs(args.max_eta * 2.)),
                                 p_thg_c=thg_parts_central)
            else:
                tw.fill_branches(dndeta_thg_c=len(dndetathg_central) /
                                 (abs(args.max_eta * 2.)))

        tw.fill_tree()

    delta_t = time.time() - start_t
    pinfo('processed events', iev, ' - ev/sec =', iev / delta_t, 'elapsed =',
          delta_t)

    outf.Write()
    outf.Close()
예제 #8
0
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())
예제 #9
0
class Data2MP4(MPBase):
    def __init__(self, **kwargs):
        self.configure_from_args(file_list='PbPb_file_list.txt',
                                 n_events=500,
                                 output='output',
                                 run_jetfinder=False)
        super(Data2MP4, self).__init__(**kwargs)
        self.data_io = DataIO(file_list=self.file_list)
        #self.hetaphi = ROOT.TH2F('_hetaphi', '_hetaphi;#eta;#varphi', 51, -1, 1, 51, 0., 2.*ROOT.TMath.Pi())
        #self.hetaphi = ROOT.TH2F('_hetaphi', '_hetaphi;#eta;#varphi', 51, -1, 1, 51, -ROOT.TMath.Pi(), +ROOT.TMath.Pi())
        #self.hetaphi_jet = ROOT.TH2F('_hetaphi_jet', '_hetaphi_jet;#eta;#varphi', 51, -1, 1, 51, -ROOT.TMath.Pi(), +ROOT.TMath.Pi())
        #self.hetaphi = ROOT.TH2F('_hetaphi', '_hetaphi;#eta;#varphi', 101, -ROOT.TMath.Pi(), ROOT.TMath.Pi(), 101, -ROOT.TMath.Pi(), +ROOT.TMath.Pi())
        self.hetaphi = ROOT.TH2F('_hetaphi', '_hetaphi;#eta;#varphi', 51, -1,
                                 1, 51, -ROOT.TMath.Pi(), +ROOT.TMath.Pi())
        self.hetaphi_jet = ROOT.TH2F('_hetaphi_jet',
                                     '_hetaphi_jet;#eta;#varphi', 51,
                                     -ROOT.TMath.Pi(), ROOT.TMath.Pi(), 51,
                                     -ROOT.TMath.Pi(), +ROOT.TMath.Pi())
        self.mean_eta = ROOT.TH1F('_hmean_eta', '_hmean_eta;<#eta>', 101, -0.3,
                                  0.3)
        # self.mean_phi = ROOT.TH1F('_hmean_phi', '_hmean_phi;<#varphi>', 101, ROOT.TMath.Pi()-0.3, ROOT.TMath.Pi()+0.3)
        self.mean_phi = ROOT.TH1F('_hmean_phi', '_hmean_phi;<#varphi>', 101,
                                  -0.3, +0.3)
        self.mean_e = ROOT.TH1F('_hmean_e', '_hmean_e;<E (GeV)>', 100, 0, 2)
        self.tc = None
        if self.run_jetfinder:
            fj.ClusterSequence.print_banner()

    def run(self):
        _err_level_tmp = ROOT.gErrorIgnoreLevel
        if self.tc is None:
            self.tc = ROOT.TCanvas('_tc', '_tc', 800, 800)
            self.tc.Divide(2, 2)
        ROOT.gErrorIgnoreLevel = ROOT.kWarning
        for iev in tqdm.tqdm(range(self.n_events)):
            parts = self.data_io.load_event(offset=10000)
            if self.run_jetfinder:
                jet_R0 = 0.4
                jet_def = fj.JetDefinition(fj.antikt_algorithm, jet_R0)
                jets = fj.sorted_by_pt(jet_def(parts))
                if len(jets) > 0:
                    jet = jets[0]
                else:
                    jet = fj.PseudoJet()
            else:
                jet = fj.PseudoJet()
            self.hetaphi.Reset()
            self.hetaphi_jet.Reset()
            #_tmp = [self.hetaphi.Fill(p.eta(), jet.delta_phi_to(p), p.e()) for p in parts]
            _tmp = [
                self.hetaphi.Fill(p.eta(),
                                  p.phi() - ROOT.TMath.Pi(), p.e())
                for p in parts
            ]
            if self.run_jetfinder:
                # _tmp = [self.hetaphi_jet.Fill(p.eta(), jet.delta_phi_to(p), p.e()) for p in jet.constituents()]
                _tmp = [
                    self.hetaphi_jet.Fill(p.eta(),
                                          p.phi() - ROOT.TMath.Pi(), p.e())
                    for p in jet.constituents()
                ]
            _e = [p.e() for p in parts]
            _phi = [p.phi() - ROOT.TMath.Pi() for p in parts]
            # _phi = [jet.delta_phi_to(p) for p in parts]
            _eta = [p.eta() for p in parts]
            # self.mean_eta.Fill(self.hetaphi.GetMean(1))
            self.mean_eta.Fill(np.mean(_eta))
            # self.mean_phi.Fill(self.hetaphi.GetMean(2))
            self.mean_phi.Fill(np.mean(_phi))
            self.mean_e.Fill(np.mean(_e))
            self.tc.cd()
            # self.hetaphi.Scale(1./self.hetaphi.Integral())
            self.hetaphi.SetMaximum(10.)
            self.hetaphi.SetMinimum(0.)
            self.tc.cd(1)
            self.hetaphi.Draw('colz')
            # self.hetaphi.Draw('lego2')
            self.hetaphi_jet.SetLineColor(ROOT.kRed)
            self.hetaphi_jet.SetFillColor(ROOT.kRed)
            self.hetaphi_jet.SetFillStyle(1001)
            self.hetaphi_jet.Draw('cont3 same')
            self.tc.cd(2)
            self.mean_e.Draw()
            self.tc.cd(3)
            self.mean_phi.Draw()
            self.tc.cd(4)
            self.mean_eta.Draw()
            self.tc.SaveAs('_{}_{}.png'.format(self.output, iev), '.png')
        ROOT.gErrorIgnoreLevel = _err_level_tmp

    def save_mp4(self):
        # os.system('ffmpeg -i _{}_%01d.png -vcodec mpeg4 -y {}.mp4'.format(self.output, self.output))
        os.system(
            'ffmpeg -r 4 -f image2 -s 1920x1080 -i _{}_%d.png -vcodec libx264 -crf 25  -pix_fmt yuv420p {}.mp4'
            .format(self.output, self.output))
예제 #10
0
class Data2MP4Morph(MPBase):
    def __init__(self, **kwargs):
        self.configure_from_args(file_list='PbPb_file_list.txt',
                                 n_events=500,
                                 output='output')
        super(Data2MP4Morph, self).__init__(**kwargs)
        self.data_io = DataIO(file_list=self.file_list)
        # self.hetaphi = ROOT.TH2F('_hetaphi', '_hetaphi;#eta;#varphi', 51, -ROOT.TMath.Pi(), ROOT.TMath.Pi(), 51, -ROOT.TMath.Pi(), +ROOT.TMath.Pi())
        # self.hetaphi = ROOT.TH2F('_hetaphi', '_hetaphi;#eta;#varphi', 101, -1, 1, 101, -ROOT.TMath.Pi(), +ROOT.TMath.Pi())
        self.hetaphi = ROOT.TH2F('_hetaphi', '_hetaphi;#varphi;#eta', 101,
                                 -ROOT.TMath.Pi(), +ROOT.TMath.Pi(), 101, -1,
                                 1)
        self.tc = None
        self.iframe = 0
        self.pythia = PythiaJetty(pthatmin=100,
                                  eta_max=1,
                                  jet_pt_min=20,
                                  jet_R0=0.4)

    def make_a_frame(self, h):
        self.tc.cd()
        for ibx in range(1, h.GetNbinsX() + 1):
            for iby in range(1, h.GetNbinsY() + 1):
                if h.GetBinContent(ibx, iby) < 1e-1:
                    h.SetBinContent(ibx, iby, 1e-1)
        h.SetMaximum(100.)
        h.SetMinimum(1e-1)
        # h.Draw('colz')
        h.SetName('{}_f{}'.format(h.GetName().split('_f')[0], self.iframe))
        h.Draw('LEGO2 FB BB')

        # h.Draw('surf2 FB BB')
        # h.Draw('CONT3 COLZ')
        # h.Draw('CYL LEGO2 COLZ')
        h.SetLineColor(ROOT.kWhite)
        h.SetLineColorAlpha(ROOT.kWhite, 1.)
        # h.Draw('CYL SURF2')
        # h.Draw('SURF2')
        # h.Draw('PSR LEGO2')
        # self.tc.SetLogz()
        self.tc.SaveAs('_{}_{}.png'.format(self.output, self.iframe), '.png')
        self.iframe = self.iframe + 1

    def morph(self, hfrom, hto, nframes):
        _hmorph = hfrom.Clone("_hmorph")
        _hmorph.SetDirectory(0)
        _hdeltas = hto.Clone('_delta')
        _hdeltas.Add(hfrom, -1.)
        for ifr in tqdm.tqdm(range(1, nframes + 1)):
            fr = 1.0 * ifr / nframes
            for ibx in range(1, hfrom.GetNbinsX() + 1):
                for iby in range(1, hfrom.GetNbinsY() + 1):
                    v = hfrom.GetBinContent(
                        ibx, iby) + fr * _hdeltas.GetBinContent(ibx, iby)
                    _hmorph.SetBinContent(ibx, iby, v)
            self.make_a_frame(_hmorph)

    def run(self):
        _err_level_tmp = ROOT.gErrorIgnoreLevel
        if self.tc is None:
            self.tc = ROOT.TCanvas('_tc', '_tc', 800, 800)
        ROOT.gErrorIgnoreLevel = ROOT.kWarning
        _hetaphi_next = self.hetaphi.Clone("_next")
        for iev in tqdm.tqdm(range(self.n_events)):
            parts = self.data_io.load_event(offset=10000)
            _hetaphi_next.Reset()
            #_tmp = [_hetaphi_next.Fill(p.eta(), p.phi()-ROOT.TMath.Pi(), p.e()) for p in parts]
            #_tmp = [_hetaphi_next.Fill(p.phi()-ROOT.TMath.Pi(), p.eta(), p.e()) for p in parts]
            pyev = None
            if self.pythia:
                pyev = self.pythia.get_event()
                if pyev:
                    _tmp = [
                        _hetaphi_next.Fill(p.phi() - ROOT.TMath.Pi(), p.eta(),
                                           p.e()) for p in pyev
                    ]
            if iev > 0:
                self.morph(self.hetaphi, _hetaphi_next, 10)
            self.hetaphi.Reset()
            #_tmp = [self.hetaphi.Fill(p.phi()-ROOT.TMath.Pi(), p.eta(), p.e()) for p in parts]
            if pyev:
                _tmp = [
                    self.hetaphi.Fill(p.phi() - ROOT.TMath.Pi(), p.eta(),
                                      p.e()) for p in pyev
                ]
            self.make_a_frame(self.hetaphi)
        ROOT.gErrorIgnoreLevel = _err_level_tmp

    def save_mp4(self):
        # os.system('ffmpeg -r 10 -i _{}_%d.png -vcodec mpeg4 -y {}.mp4'.format(self.output, self.output))
        # good page: https://hamelot.io/visualization/using-ffmpeg-to-convert-a-set-of-images-into-a-video/
        os.system(
            'ffmpeg -r 60 -f image2 -s 1920x1080 -i _{}_%d.png -vcodec libx264 -crf 25  -pix_fmt yuv420p {}.mp4'
            .format(self.output, self.output))