@@ -316,6 +316,19 @@ struct Kstar892LightIon {
316316 hMC.add (" CorrFactors/h2dGenKstar" , " Centrality vs p_{T}" , kTH2D , {{101 , 0 .0f , 101 .0f }, ptAxis});
317317 hMC.add (" CorrFactors/h3dGenKstarVsMultMCVsCentrality" , " MC centrality vs centrality vs p_{T}" , kTH3D , {axisNch, {101 , 0 .0f , 101 .0f }, ptAxis});
318318 }
319+
320+ if (doprocessRecMisID) {
321+ hMC.add (" RecMisID/hMassMisID" , " Reconstruction misidentification" , kTH3F , {ptAxis, centralityAxis, invmassAxis});
322+ }
323+
324+ if (doprocessLossMCMultiplicity) {
325+ hMC.add (" LossMult/hMultMC" , " Charged Paticle multiplicity in generated MC before event selection" , kTH1F , {axisNch});
326+ hMC.add (" LossMult/hCentVsMultMC" , " Centrality vs Charged Particle Multiplicity" , kTH2F , {centralityAxis, axisNch});
327+ hMC.add (" LossMult/hGenEvt_vs_multMC" , " Charged Paticle multiplicity in generated MC after event selection" , kTH1F , {axisNch});
328+ hMC.add (" LossMult/hGenEvtRecoEvt_vs_multMC" , " Charged Paticle multiplicity in generated MC before event selection with reconstruction" , kTH1F , {axisNch});
329+ hMC.add (" LossMult/hGenKstar_vs_pt_vs_multMC" , " pT vs Charged particle multiplicity" , kTH2F , {ptAxis, axisNch});
330+ hMC.add (" LossMult/hGenKstarRecoEvt_vs_pt_vs_multMC" , " pT vs Charged particle multiplicity with reconstruction" , kTH2F , {ptAxis, axisNch});
331+ }
319332 }
320333
321334 double massPi = o2::constants::physics::MassPiPlus;
@@ -1478,6 +1491,131 @@ struct Kstar892LightIon {
14781491 hMC.fill (HIST (" CorrFactors/hGenEvents" ), mcCollision.multMCNParticlesEta08 (), 2.5 );
14791492 }
14801493 PROCESS_SWITCH (Kstar892LightIon, processCorrFactors, " Process Signal Loss, Event Loss using chaged particle multiplicity" , false );
1494+
1495+ void processRecMisID (EventCandidatesMC::iterator const & collision, TrackCandidatesMC const & tracks, aod::McParticles const &, EventMCGenerated const &)
1496+ {
1497+ if (!collision.has_mcCollision ()) {
1498+ return ;
1499+ }
1500+
1501+ centrality = collision.centFT0M ();
1502+ if (!selectionEvent (collision, false )) {
1503+ return ;
1504+ }
1505+
1506+ for (const auto & [track1, track2] : combinations (CombinationsFullIndexPolicy (tracks, tracks))) {
1507+
1508+ if (!selectionTrack (track1) || !selectionTrack (track2))
1509+ continue ;
1510+
1511+ if (track1.index () == track2.index ())
1512+ continue ;
1513+
1514+ if (track1.sign () * track2.sign () >= 0 )
1515+ continue ;
1516+
1517+ if (!track1.has_mcParticle () || !track2.has_mcParticle ())
1518+ continue ;
1519+
1520+ const auto mc1 = track1.mcParticle ();
1521+ const auto mc2 = track2.mcParticle ();
1522+
1523+ if (!mc1.isPhysicalPrimary () || !mc2.isPhysicalPrimary ())
1524+ continue ;
1525+
1526+ int pdg1 = std::abs (mc1.pdgCode ());
1527+ int pdg2 = std::abs (mc2.pdgCode ());
1528+
1529+ bool ok1 = (pdg1 == PDG_t::kPiPlus || pdg1 == PDG_t::kKPlus );
1530+ bool ok2 = (pdg2 == PDG_t::kPiPlus || pdg2 == PDG_t::kKPlus );
1531+ if (!ok1 || !ok2)
1532+ continue ;
1533+
1534+ ROOT::Math::PxPyPzMVector p1 (track1.px (), track1.py (), track1.pz (), pdg1 == PDG_t::kPiPlus ? massPi : massKa);
1535+ ROOT::Math::PxPyPzMVector p2 (track2.px (), track2.py (), track2.pz (), pdg2 == PDG_t::kPiPlus ? massPi : massKa);
1536+
1537+ if (pdg1 == PDG_t::kPiPlus ) {
1538+ ROOT::Math::PxPyPzMVector p1Fake (track1.px (), track1.py (), track1.pz (), massKa);
1539+ auto misIDMother = p1Fake + p2;
1540+ hMC.fill (HIST (" RecMisID/hMassMisID" ), centrality, misIDMother.Pt (), misIDMother.M ());
1541+ }
1542+
1543+ if (pdg2 == PDG_t::kPiPlus ) {
1544+ ROOT::Math::PxPyPzMVector p2Fake (track2.px (), track2.py (), track2.pz (), massKa);
1545+ auto misIDMother = p1 + p2Fake;
1546+ hMC.fill (HIST (" RecMisID/hMassMisID" ), centrality, misIDMother.Pt (), misIDMother.M ());
1547+ }
1548+
1549+ if (pdg1 == PDG_t::kKPlus ) {
1550+ ROOT::Math::PxPyPzMVector p1Fake (track1.px (), track1.py (), track1.pz (), massPi);
1551+ auto misIDMother = p1Fake + p2;
1552+ hMC.fill (HIST (" RecMisID/hMassMisID" ), centrality, misIDMother.Pt (), misIDMother.M ());
1553+ }
1554+
1555+ if (pdg2 == PDG_t::kKPlus ) {
1556+ ROOT::Math::PxPyPzMVector p2Fake (track2.px (), track2.py (), track2.pz (), massPi);
1557+ auto misIDMother = p1 + p2Fake;
1558+ hMC.fill (HIST (" RecMisID/hMassMisID" ), centrality, misIDMother.Pt (), misIDMother.M ());
1559+ }
1560+ }
1561+ }
1562+ PROCESS_SWITCH (Kstar892LightIon, processRecMisID, " Process Reconstructed MisID Background" , false );
1563+
1564+ void processLossMCMultiplicity (McCollisionMults::iterator const & mcCollision, soa::SmallGroups<EventCandidatesMC> const & collisions, aod::McParticles const & mcParticles)
1565+ {
1566+ const int multMC = mcCollision.multMCNParticlesEta05 ();
1567+ hMC.fill (HIST (" LossMult/hMultMC" ), multMC);
1568+
1569+ bool hasRecoEvent = false ;
1570+ float centrality = -1 .f ;
1571+
1572+ for (auto const & coll : collisions) {
1573+
1574+ if (!selectionEvent (coll, false ))
1575+ continue ;
1576+
1577+ if (selectCentEstimator == kFT0M ) {
1578+ centrality = coll.centFT0M ();
1579+ } else if (selectCentEstimator == kFT0A ) {
1580+ centrality = coll.centFT0A ();
1581+ } else if (selectCentEstimator == kFT0C ) {
1582+ centrality = coll.centFT0C ();
1583+ } else if (selectCentEstimator == kFV0A ) {
1584+ centrality = coll.centFV0A ();
1585+ } else {
1586+ centrality = coll.centFT0M (); // default
1587+ }
1588+
1589+ hasRecoEvent = true ;
1590+ }
1591+
1592+ hMC.fill (HIST (" LossMult/hCentVsMultMC" ), centrality, multMC);
1593+
1594+ // Event loss histograms
1595+ hMC.fill (HIST (" LossMult/hGenEvt_vs_multMC" ), multMC);
1596+
1597+ if (hasRecoEvent) {
1598+ hMC.fill (HIST (" LossMult/hGenEvtRecoEvt_vs_multMC" ), multMC);
1599+ }
1600+
1601+ // Signal loss histograms
1602+ for (auto const & p : mcParticles) {
1603+
1604+ if (std::abs (p.pdgCode ()) != o2::constants::physics::kK0Star892 )
1605+ continue ;
1606+ if (std::abs (p.y ()) >= selectionConfig.motherRapidityCut )
1607+ continue ;
1608+
1609+ const float pt = p.pt ();
1610+
1611+ hMC.fill (HIST (" LossMult/hGenKstar_vs_pt_vs_multMC" ), pt, multMC);
1612+
1613+ if (hasRecoEvent) {
1614+ hMC.fill (HIST (" LossMult/hGenKstarRecoEvt_vs_pt_vs_multMC" ), pt, multMC);
1615+ }
1616+ }
1617+ }
1618+ PROCESS_SWITCH (Kstar892LightIon, processLossMCMultiplicity, " Signal + Event loss (using MC multiplicity)" , false );
14811619};
14821620
14831621WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
0 commit comments