4545#include < unordered_map>
4646#include < vector>
4747
48+ // table for saving tree with info on data
49+ namespace jpsirl
50+ {
51+ // dimuon
52+ DECLARE_SOA_COLUMN (RunNumber, runNumber, int );
53+ DECLARE_SOA_COLUMN (M, m, float );
54+ DECLARE_SOA_COLUMN (Energy, energy, float );
55+ DECLARE_SOA_COLUMN (Px, px, float );
56+ DECLARE_SOA_COLUMN (Py, py, float );
57+ DECLARE_SOA_COLUMN (Pz, pz, float );
58+ DECLARE_SOA_COLUMN (Pt, pt, float );
59+ DECLARE_SOA_COLUMN (Rap, rap, float );
60+ DECLARE_SOA_COLUMN (Phi, phi, float );
61+ DECLARE_SOA_COLUMN (PhiAv, phiAv, float );
62+ DECLARE_SOA_COLUMN (PhiCh, phiCh, float );
63+ // tracks positive (p) and negative (n)
64+ DECLARE_SOA_COLUMN (EnergyP, energyP, float );
65+ DECLARE_SOA_COLUMN (Pxp, pxp, float );
66+ DECLARE_SOA_COLUMN (Pyp, pyp, float );
67+ DECLARE_SOA_COLUMN (Pzp, pzp, float );
68+ DECLARE_SOA_COLUMN (Ptp, ptp, float );
69+ DECLARE_SOA_COLUMN (Etap, etap, float );
70+ DECLARE_SOA_COLUMN (Phip, phip, float );
71+ DECLARE_SOA_COLUMN (TrackTypep, trackTypep, int );
72+ DECLARE_SOA_COLUMN (EnergyN, energyN, float );
73+ DECLARE_SOA_COLUMN (Pxn, pxn, float );
74+ DECLARE_SOA_COLUMN (Pyn, pyn, float );
75+ DECLARE_SOA_COLUMN (Pzn, pzn, float );
76+ DECLARE_SOA_COLUMN (Ptn, ptn, float );
77+ DECLARE_SOA_COLUMN (Etan, etan, float );
78+ DECLARE_SOA_COLUMN (Phin, phin, float );
79+ DECLARE_SOA_COLUMN (TrackTypen, trackTypen, int );
80+ // zn
81+ DECLARE_SOA_COLUMN (Tzna, tzna, float );
82+ DECLARE_SOA_COLUMN (Ezna, ezna, float );
83+ DECLARE_SOA_COLUMN (Tznc, tznc, float );
84+ DECLARE_SOA_COLUMN (Eznc, eznc, float );
85+ DECLARE_SOA_COLUMN (Nclass, nclass, int );
86+ } // namespace jpsirl
87+
88+ namespace o2 ::aod
89+ {
90+ DECLARE_SOA_TABLE (JpsiRL, " AOD" , " JPSI_RL" ,
91+ jpsirl::RunNumber,
92+ jpsirl::M, jpsirl::Energy, jpsirl::Px, jpsirl::Py, jpsirl::Pz, jpsirl::Pt, jpsirl::Rap, jpsirl::Phi,
93+ jpsirl::PhiAv, jpsirl::PhiCh,
94+ jpsirl::EnergyP, jpsirl::Pxp, jpsirl::Pyp, jpsirl::Pzp, jpsirl::Ptp, jpsirl::Etap, jpsirl::Phip, jpsirl::TrackTypep,
95+ jpsirl::EnergyN, jpsirl::Pxn, jpsirl::Pyn, jpsirl::Pzn, jpsirl::Ptn, jpsirl::Etan, jpsirl::Phin, jpsirl::TrackTypen,
96+ jpsirl::Tzna, jpsirl::Ezna, jpsirl::Tznc, jpsirl::Eznc, jpsirl::Nclass);
97+ } // namespace o2::aod
98+
4899using namespace o2 ;
49100using namespace o2 ::framework;
50101using namespace o2 ::framework::expressions;
@@ -71,6 +122,8 @@ struct UpcFwdJpsiRL {
71122 using CandidatesFwd = soa::Join<o2::aod::UDCollisions, o2::aod::UDCollisionsSelsFwd>;
72123 using ForwardTracks = soa::Join<o2::aod::UDFwdTracks, o2::aod::UDFwdTracksExtra>;
73124
125+ Produces<o2::aod::JpsiRL> dimuSel;
126+
74127 // defining histograms using histogram registry
75128 HistogramRegistry registry{" registry" , {}, OutputObjHandlingPolicy::AnalysisObject, true , true };
76129 HistogramRegistry reg0n0n{" reg0n0n" , {}, OutputObjHandlingPolicy::AnalysisObject, true , true };
@@ -409,20 +462,24 @@ struct UpcFwdJpsiRL {
409462 // neutron classes
410463 bool neutronA = std::abs (zdc.timeA ) < kMaxZDCTime && !std::isinf (zdc.timeA );
411464 bool neutronC = std::abs (zdc.timeC ) < kMaxZDCTime && !std::isinf (zdc.timeC );
465+ int znClass = -1 ;
412466
413467 if (!neutronC && !neutronA) {
468+ znClass = 1 ;
414469 reg0n0n.fill (HIST (" hMass" ), p.M ());
415470 reg0n0n.fill (HIST (" hPt" ), p.Pt ());
416471 reg0n0n.fill (HIST (" hPtFit" ), p.Pt ());
417472 reg0n0n.fill (HIST (" hEta" ), p.Eta ());
418473 reg0n0n.fill (HIST (" hRapidity" ), p.Rapidity ());
419474 } else if (neutronA ^ neutronC) {
475+ znClass = neutronA ? 2 : 3 ;
420476 regXn0n.fill (HIST (" hMass" ), p.M ());
421477 regXn0n.fill (HIST (" hPt" ), p.Pt ());
422478 regXn0n.fill (HIST (" hPtFit" ), p.Pt ());
423479 regXn0n.fill (HIST (" hEta" ), p.Eta ());
424480 regXn0n.fill (HIST (" hRapidity" ), p.Rapidity ());
425481 } else if (neutronA && neutronC) {
482+ znClass = 4 ;
426483 regXnXn.fill (HIST (" hMass" ), p.M ());
427484 regXnXn.fill (HIST (" hPt" ), p.Pt ());
428485 regXnXn.fill (HIST (" hPtFit" ), p.Pt ());
@@ -450,6 +507,24 @@ struct UpcFwdJpsiRL {
450507 registry.fill (HIST (" hCharge" ), tr2.sign ());
451508 registry.fill (HIST (" hPhiAverage" ), phiAverage);
452509 registry.fill (HIST (" hPhiCharge" ), phiCharge);
510+
511+ // store the event to save it into a tree
512+ // order tracks so that positive is first
513+ if (tr1.sign () > 0 ) {
514+ dimuSel (cand.runNumber (),
515+ p.M (), p.E (), p.Px (), p.Py (), p.Pz (), p.Pt (), p.Rapidity (), p.Phi (),
516+ phiAverage, phiCharge,
517+ p1.E (), p1.Px (), p1.Py (), p1.Pz (), p1.Pt (), p1.PseudoRapidity (), p1.Phi (), static_cast <int >(tr1.trackType ()),
518+ p2.E (), p2.Px (), p2.Py (), p2.Pz (), p2.Pt (), p2.PseudoRapidity (), p2.Phi (), static_cast <int >(tr2.trackType ()),
519+ zdc.timeA , zdc.enA , zdc.timeC , zdc.enC , znClass);
520+ } else {
521+ dimuSel (cand.runNumber (),
522+ p.M (), p.E (), p.Px (), p.Py (), p.Pz (), p.Pt (), p.Rapidity (), p.Phi (),
523+ phiAverage, phiCharge,
524+ p2.E (), p2.Px (), p2.Py (), p2.Pz (), p2.Pt (), p2.PseudoRapidity (), p2.Phi (), static_cast <int >(tr2.trackType ()),
525+ p1.E (), p1.Px (), p1.Py (), p1.Pz (), p1.Pt (), p1.PseudoRapidity (), p1.Phi (), static_cast <int >(tr1.trackType ()),
526+ zdc.timeA , zdc.enA , zdc.timeC , zdc.enC , znClass);
527+ }
453528 }
454529
455530 // PROCESS FUNCTION
0 commit comments