@@ -786,18 +786,39 @@ struct UpcJpsiCentralBarrel {
786786
787787 // MC histograms
788788 MC.add (" MC/hNumberOfMCCollisions" , " hNumberOfCollisions" , {HistType::kTH1F , {{10 , 0 , 10 }}});
789- MC.add (" MC/hNumberOfMCTracks" , " hNumberOfMCTracks" , {HistType::kTH1F , {{10 , 0 , 10 }}});
789+ MC.add (" MC/hNumberOfRecoCollisions" , " hNumberOfRecoCollisions" , {HistType::kTH1F , {{10 , 0 , 10 }}});
790+ MC.add (" MC/Muon/hNumberOfMCTracks" , " hNumberOfMCTracks" , {HistType::kTH1F , {{10 , 0 , 10 }}});
791+ MC.add (" MC/Electron/hNumberOfMCTracks" , " hNumberOfMCTracks" , {HistType::kTH1F , {{10 , 0 , 10 }}});
792+ MC.add (" MC/Proton/hNumberOfMCTracks" , " hNumberOfMCTracks" , {HistType::kTH1F , {{10 , 0 , 10 }}});
790793 MC.add (" MC/hPosZ" , " hPosZ" , {HistType::kTH1F , {{60 , -15 , 15 }}});
791- MC.add (" MC/hPDG" , " hPDG" , {HistType::kTH1F , {{900 , -450 , 450 }}});
792- MC.add (" MC/hEta1" , " hEta1" , {HistType::kTH1F , {axisEta}});
793- MC.add (" MC/hEta2" , " hEta2" , {HistType::kTH1F , {axisEta}});
794- MC.add (" MC/hPhi1" , " hPhi1" , {HistType::kTH1F , {axisPhi}});
795- MC.add (" MC/hPhi2" , " hPhi2" , {HistType::kTH1F , {axisPhi}});
796- MC.add (" MC/hIVM" , " hIVM" , {HistType::kTH1F , {axisIVM}});
797- MC.add (" MC/hRapidity" , " hRapidity" , {HistType::kTH1F , {axisEta}});
798- MC.add (" MC/hPt1" , " hPt1" , {HistType::kTH1F , {axisPt}});
799- MC.add (" MC/hPt2" , " hPt2" , {HistType::kTH1F , {axisPt}});
800- MC.add (" MC/hPt" , " hPt" , {HistType::kTH1F , {axisPt}});
794+ MC.add (" MC/hPDG" , " hPDG" , {HistType::kTH1F , {{200000 , -100000 , 100000 }}});
795+ MC.add (" MC/Electron/hEta1" , " hEta1" , {HistType::kTH1F , {axisEta}});
796+ MC.add (" MC/Electron/hEta2" , " hEta2" , {HistType::kTH1F , {axisEta}});
797+ MC.add (" MC/Electron/hPhi1" , " hPhi1" , {HistType::kTH1F , {axisPhi}});
798+ MC.add (" MC/Electron/hPhi2" , " hPhi2" , {HistType::kTH1F , {axisPhi}});
799+ MC.add (" MC/Electron/hIVM" , " hIVM" , {HistType::kTH1F , {axisIVM}});
800+ MC.add (" MC/Electron/hRapidity" , " hRapidity" , {HistType::kTH1F , {axisEta}});
801+ MC.add (" MC/Electron/hPt1" , " hPt1" , {HistType::kTH1F , {axisPt}});
802+ MC.add (" MC/Electron/hPt2" , " hPt2" , {HistType::kTH1F , {axisPt}});
803+ MC.add (" MC/Electron/hPt" , " hPt" , {HistType::kTH1F , {axisPt}});
804+ MC.add (" MC/Muon/hEta1" , " hEta1" , {HistType::kTH1F , {axisEta}});
805+ MC.add (" MC/Muon/hEta2" , " hEta2" , {HistType::kTH1F , {axisEta}});
806+ MC.add (" MC/Muon/hPhi1" , " hPhi1" , {HistType::kTH1F , {axisPhi}});
807+ MC.add (" MC/Muon/hPhi2" , " hPhi2" , {HistType::kTH1F , {axisPhi}});
808+ MC.add (" MC/Muon/hIVM" , " hIVM" , {HistType::kTH1F , {axisIVM}});
809+ MC.add (" MC/Muon/hRapidity" , " hRapidity" , {HistType::kTH1F , {axisEta}});
810+ MC.add (" MC/Muon/hPt1" , " hPt1" , {HistType::kTH1F , {axisPt}});
811+ MC.add (" MC/Muon/hPt2" , " hPt2" , {HistType::kTH1F , {axisPt}});
812+ MC.add (" MC/Muon/hPt" , " hPt" , {HistType::kTH1F , {axisPt}});
813+ MC.add (" MC/Proton/hEta1" , " hEta1" , {HistType::kTH1F , {axisEta}});
814+ MC.add (" MC/Proton/hEta2" , " hEta2" , {HistType::kTH1F , {axisEta}});
815+ MC.add (" MC/Proton/hPhi1" , " hPhi1" , {HistType::kTH1F , {axisPhi}});
816+ MC.add (" MC/Proton/hPhi2" , " hPhi2" , {HistType::kTH1F , {axisPhi}});
817+ MC.add (" MC/Proton/hIVM" , " hIVM" , {HistType::kTH1F , {axisIVM}});
818+ MC.add (" MC/Proton/hRapidity" , " hRapidity" , {HistType::kTH1F , {axisEta}});
819+ MC.add (" MC/Proton/hPt1" , " hPt1" , {HistType::kTH1F , {axisPt}});
820+ MC.add (" MC/Proton/hPt2" , " hPt2" , {HistType::kTH1F , {axisPt}});
821+ MC.add (" MC/Proton/hPt" , " hPt" , {HistType::kTH1F , {axisPt}});
801822 }
802823
803824 bool cutITSLayers (uint8_t itsClusterMap) const
@@ -1227,7 +1248,8 @@ struct UpcJpsiCentralBarrel {
12271248 } else if (OnOn) {
12281249 JPsiToEl.get <TH1>(HIST (" JPsiToEl/NotCoherent/OnOn/hIVM" ))->Fill (massJpsi);
12291250 }
1230- } else {
1251+ }
1252+ if (RecoDecay::pt (mother) > 0 .2f ) {
12311253 JPsiToEl.get <TH1>(HIST (" JPsiToEl/Incoherent/hIVM" ))->Fill (massJpsi);
12321254 if (XnXn) {
12331255 JPsiToEl.get <TH1>(HIST (" JPsiToEl/Incoherent/XnXn/hIVM" ))->Fill (massJpsi);
@@ -1631,7 +1653,8 @@ struct UpcJpsiCentralBarrel {
16311653 } else if (OnOn) {
16321654 JPsiToMu.get <TH1>(HIST (" JPsiToMu/NotCoherent/OnOn/hIVM" ))->Fill (massJpsi);
16331655 }
1634- } else {
1656+ }
1657+ if (RecoDecay::pt (mother) > 0 .2f ) {
16351658 JPsiToMu.get <TH1>(HIST (" JPsiToMu/Incoherent/hIVM" ))->Fill (massJpsi);
16361659 if (XnXn) {
16371660 JPsiToMu.get <TH1>(HIST (" JPsiToMu/Incoherent/XnXn/hIVM" ))->Fill (massJpsi);
@@ -2083,44 +2106,106 @@ struct UpcJpsiCentralBarrel {
20832106 MC.get <TH1>(HIST (" MC/hNumberOfMCCollisions" ))->Fill (1 .);
20842107 MC.get <TH1>(HIST (" MC/hPosZ" ))->Fill (mcCollision.posZ ());
20852108
2086- std::array<float , 3 > daughPart1;
2087- std::array<float , 3 > daughPart2;
2109+ std::array<float , 3 > daughPart1Mu;
2110+ std::array<float , 3 > daughPart2Mu;
2111+ std::array<float , 3 > daughPart1El;
2112+ std::array<float , 3 > daughPart2El;
2113+ std::array<float , 3 > daughPart1Pr;
2114+ std::array<float , 3 > daughPart2Pr;
20882115
20892116 // fill number of particles
20902117 for (auto const & mcParticle : mcParticles) {
2091- MC.get <TH1>(HIST (" MC/hNumberOfMCTracks" ))->Fill (1 .);
2118+ MC.get <TH1>(HIST (" MC/Muon/hNumberOfMCTracks" ))->Fill (1 .);
2119+ MC.get <TH1>(HIST (" MC/Electron/hNumberOfMCTracks" ))->Fill (1 .);
2120+ MC.get <TH1>(HIST (" MC/Proton/hNumberOfMCTracks" ))->Fill (1 .);
20922121 MC.get <TH1>(HIST (" MC/hPDG" ))->Fill (mcParticle.pdgCode ());
20932122
20942123 // check if only muons and physical primaries are present
20952124 if ((mcParticle.pdgCode () == 13 ) && mcParticle.isPhysicalPrimary ()) {
2096- daughPart1 = {mcParticle.px (), mcParticle.py (), mcParticle.pz ()};
2125+ daughPart1Mu = {mcParticle.px (), mcParticle.py (), mcParticle.pz ()};
20972126
2098- MC.get <TH1>(HIST (" MC/hNumberOfMCTracks" ))->Fill (2 .);
2127+ MC.get <TH1>(HIST (" MC/Muon/ hNumberOfMCTracks" ))->Fill (2 .);
20992128 }
21002129 if ((mcParticle.pdgCode () == -13 ) && mcParticle.isPhysicalPrimary ()) {
2101- daughPart2 = {mcParticle.px (), mcParticle.py (), mcParticle.pz ()};
2130+ daughPart2Mu = {mcParticle.px (), mcParticle.py (), mcParticle.pz ()};
2131+
2132+ MC.get <TH1>(HIST (" MC/Muon/hNumberOfMCTracks" ))->Fill (3 .);
2133+ }
2134+ if ((mcParticle.pdgCode () == 11 ) && mcParticle.isPhysicalPrimary ()) {
2135+ daughPart1El = {mcParticle.px (), mcParticle.py (), mcParticle.pz ()};
2136+
2137+ MC.get <TH1>(HIST (" MC/Electron/hNumberOfMCTracks" ))->Fill (2 .);
2138+ }
2139+ if ((mcParticle.pdgCode () == -11 ) && mcParticle.isPhysicalPrimary ()) {
2140+ daughPart2El = {mcParticle.px (), mcParticle.py (), mcParticle.pz ()};
2141+
2142+ MC.get <TH1>(HIST (" MC/Electron/hNumberOfMCTracks" ))->Fill (3 .);
2143+ }
2144+ if ((mcParticle.pdgCode () == 2212 ) && mcParticle.isPhysicalPrimary ()) {
2145+ daughPart1Pr = {mcParticle.px (), mcParticle.py (), mcParticle.pz ()};
21022146
2103- MC.get <TH1>(HIST (" MC/hNumberOfMCTracks" ))->Fill (3 .);
2147+ MC.get <TH1>(HIST (" MC/Proton/hNumberOfMCTracks" ))->Fill (2 .);
2148+ }
2149+ if ((mcParticle.pdgCode () == -2212 ) && mcParticle.isPhysicalPrimary ()) {
2150+ daughPart2Pr = {mcParticle.px (), mcParticle.py (), mcParticle.pz ()};
2151+
2152+ MC.get <TH1>(HIST (" MC/Proton/hNumberOfMCTracks" ))->Fill (3 .);
21042153 }
21052154 }
21062155
21072156 // calculate J/psi system and needed distributions
2108- std::array<double , 3 > motherPart = {daughPart1[0 ] + daughPart2[0 ], daughPart1[1 ] + daughPart2[1 ], daughPart1[2 ] + daughPart2[2 ]};
2157+ std::array<double , 3 > motherPartMu = {daughPart1Mu[0 ] + daughPart2Mu[0 ], daughPart1Mu[1 ] + daughPart2Mu[1 ], daughPart1Mu[2 ] + daughPart2Mu[2 ]};
2158+ std::array<double , 3 > motherPartEl = {daughPart1El[0 ] + daughPart2El[0 ], daughPart1El[1 ] + daughPart2El[1 ], daughPart1El[2 ] + daughPart2El[2 ]};
2159+ std::array<double , 3 > motherPartPr = {daughPart1Pr[0 ] + daughPart2Pr[0 ], daughPart1Pr[1 ] + daughPart2Pr[1 ], daughPart1Pr[2 ] + daughPart2Pr[2 ]};
21092160
2161+ float massEl = o2::constants::physics::MassElectron;
21102162 float massMu = o2::constants::physics::MassMuonMinus;
2111- auto arrMom = std::array{daughPart1, daughPart2};
2112- float massJpsi = RecoDecay::m (arrMom, std::array{massMu, massMu});
2113-
2114- MC.get <TH1>(HIST (" MC/hEta1" ))->Fill (RecoDecay::eta (daughPart1));
2115- MC.get <TH1>(HIST (" MC/hEta2" ))->Fill (RecoDecay::eta (daughPart2));
2116- MC.get <TH1>(HIST (" MC/hPhi1" ))->Fill (RecoDecay::phi (daughPart1));
2117- MC.get <TH1>(HIST (" MC/hPhi2" ))->Fill (RecoDecay::phi (daughPart2));
2118- MC.get <TH1>(HIST (" MC/hPt1" ))->Fill (RecoDecay::pt (daughPart1));
2119- MC.get <TH1>(HIST (" MC/hPt2" ))->Fill (RecoDecay::pt (daughPart2));
2120- MC.get <TH1>(HIST (" MC/hPt" ))->Fill (RecoDecay::pt (motherPart));
2121- MC.get <TH1>(HIST (" MC/hIVM" ))->Fill (massJpsi);
2122- MC.get <TH1>(HIST (" MC/hRapidity" ))->Fill (RecoDecay::y (motherPart, massJpsi));
2123- } // end MC process
2163+ float massPr = o2::constants::physics::MassProton;
2164+
2165+ auto arrMomMu = std::array{daughPart1Mu, daughPart2Mu};
2166+ float massJpsiMu = RecoDecay::m (arrMomMu, std::array{massMu, massMu});
2167+ auto arrMomEl = std::array{daughPart1El, daughPart2El};
2168+ float massJpsiEl = RecoDecay::m (arrMomEl, std::array{massEl, massEl});
2169+ auto arrMomPr = std::array{daughPart1Pr, daughPart2Pr};
2170+ float massJpsiPr = RecoDecay::m (arrMomPr, std::array{massPr, massPr});
2171+
2172+ MC.get <TH1>(HIST (" MC/Muon/hEta1" ))->Fill (RecoDecay::eta (daughPart1Mu));
2173+ MC.get <TH1>(HIST (" MC/Muon/hEta2" ))->Fill (RecoDecay::eta (daughPart2Mu));
2174+ MC.get <TH1>(HIST (" MC/Muon/hPhi1" ))->Fill (RecoDecay::phi (daughPart1Mu));
2175+ MC.get <TH1>(HIST (" MC/Muon/hPhi2" ))->Fill (RecoDecay::phi (daughPart2Mu));
2176+ MC.get <TH1>(HIST (" MC/Muon/hPt1" ))->Fill (RecoDecay::pt (daughPart1Mu));
2177+ MC.get <TH1>(HIST (" MC/Muon/hPt2" ))->Fill (RecoDecay::pt (daughPart2Mu));
2178+ MC.get <TH1>(HIST (" MC/Muon/hPt" ))->Fill (RecoDecay::pt (motherPartMu));
2179+ MC.get <TH1>(HIST (" MC/Muon/hIVM" ))->Fill (massJpsiMu);
2180+ MC.get <TH1>(HIST (" MC/Muon/hRapidity" ))->Fill (RecoDecay::y (motherPartMu, massJpsiMu));
2181+
2182+ MC.get <TH1>(HIST (" MC/Electron/hEta1" ))->Fill (RecoDecay::eta (daughPart1El));
2183+ MC.get <TH1>(HIST (" MC/Electron/hEta2" ))->Fill (RecoDecay::eta (daughPart2El));
2184+ MC.get <TH1>(HIST (" MC/Electron/hPhi1" ))->Fill (RecoDecay::phi (daughPart1El));
2185+ MC.get <TH1>(HIST (" MC/Electron/hPhi2" ))->Fill (RecoDecay::phi (daughPart2El));
2186+ MC.get <TH1>(HIST (" MC/Electron/hPt1" ))->Fill (RecoDecay::pt (daughPart1El));
2187+ MC.get <TH1>(HIST (" MC/Electron/hPt2" ))->Fill (RecoDecay::pt (daughPart2El));
2188+ MC.get <TH1>(HIST (" MC/Electron/hPt" ))->Fill (RecoDecay::pt (motherPartEl));
2189+ MC.get <TH1>(HIST (" MC/Electron/hIVM" ))->Fill (massJpsiEl);
2190+ MC.get <TH1>(HIST (" MC/Electron/hRapidity" ))->Fill (RecoDecay::y (motherPartEl, massJpsiEl));
2191+
2192+ MC.get <TH1>(HIST (" MC/Proton/hEta1" ))->Fill (RecoDecay::eta (daughPart1Pr));
2193+ MC.get <TH1>(HIST (" MC/Proton/hEta2" ))->Fill (RecoDecay::eta (daughPart2Pr));
2194+ MC.get <TH1>(HIST (" MC/Proton/hPhi1" ))->Fill (RecoDecay::phi (daughPart1Pr));
2195+ MC.get <TH1>(HIST (" MC/Proton/hPhi2" ))->Fill (RecoDecay::phi (daughPart2Pr));
2196+ MC.get <TH1>(HIST (" MC/Proton/hPt1" ))->Fill (RecoDecay::pt (daughPart1Pr));
2197+ MC.get <TH1>(HIST (" MC/Proton/hPt2" ))->Fill (RecoDecay::pt (daughPart2Pr));
2198+ MC.get <TH1>(HIST (" MC/Proton/hPt" ))->Fill (RecoDecay::pt (motherPartPr));
2199+ MC.get <TH1>(HIST (" MC/Proton/hIVM" ))->Fill (massJpsiPr);
2200+ MC.get <TH1>(HIST (" MC/Proton/hRapidity" ))->Fill (RecoDecay::y (motherPartPr, massJpsiPr));
2201+
2202+ } // end MC skimmed process
2203+
2204+ template <typename C>
2205+ void processMCU (C const & collisions)
2206+ {
2207+ MC.fill (HIST (" MC/hNumberOfRecoCollisions" ), collisions.size ());
2208+ } // end MC unskimmed process
21242209
21252210 void processDGrecoLevel (UDCollisionFull const & collision, UDTracksFull const & tracks)
21262211 {
@@ -2146,9 +2231,15 @@ struct UpcJpsiCentralBarrel {
21462231 processMC (mcCollision, mcParticles);
21472232 }
21482233
2234+ void processMCUnskimmed (aod::McCollision const & mcCollision, soa::SmallGroups<soa::Join<aod::McCollisionLabels, aod::Collisions>> const & collisions /* , aod::McParticles const& mcParticles, aod::TracksIU const& tracks*/ )
2235+ {
2236+ processMCU (collisions);
2237+ }
2238+
21492239 PROCESS_SWITCH (UpcJpsiCentralBarrel, processDGrecoLevel, " Iterate over DG skimmed data." , false );
21502240 PROCESS_SWITCH (UpcJpsiCentralBarrel, processSGrecoLevel, " Iterate over SG skimmed data." , false );
21512241 PROCESS_SWITCH (UpcJpsiCentralBarrel, processMCtruth, " Iterate of MC true data." , true );
2242+ PROCESS_SWITCH (UpcJpsiCentralBarrel, processMCUnskimmed, " Iterate over unskimmed data." , true );
21522243}; // end struct
21532244
21542245WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
0 commit comments