Skip to content

Commit 27a453b

Browse files
committed
Added a process function to recontruct background from MC
1 parent 6826646 commit 27a453b

File tree

1 file changed

+138
-0
lines changed

1 file changed

+138
-0
lines changed

PWGLF/Tasks/Resonances/kstar892LightIon.cxx

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

14831621
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

0 commit comments

Comments
 (0)