From 7243fc217d7500d019b3ae4789c13616e885ca9e Mon Sep 17 00:00:00 2001 From: sawankumawat Date: Tue, 5 May 2026 12:02:47 +0530 Subject: [PATCH] added rejection condition for track misidentification --- PWGLF/Tasks/Resonances/kstarqa.cxx | 73 +++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 2 deletions(-) diff --git a/PWGLF/Tasks/Resonances/kstarqa.cxx b/PWGLF/Tasks/Resonances/kstarqa.cxx index 15a859b5f5f..cb175523fd2 100644 --- a/PWGLF/Tasks/Resonances/kstarqa.cxx +++ b/PWGLF/Tasks/Resonances/kstarqa.cxx @@ -101,6 +101,7 @@ struct Kstarqa { Configurable isapplypTdepPIDTOF{"isapplypTdepPIDTOF", false, "Apply pT dependent PID for TOF"}; Configurable isApplyParticleMID{"isApplyParticleMID", false, "Apply particle misidentification"}; Configurable isApplyParticleMIDPtDep{"isApplyParticleMIDPtDep", false, "Apply pT dependent MID selection"}; + Configurable isApplyParticleMIDPtDep2{"isApplyParticleMIDPtDep2", false, "Apply pT dependent MID selection (nSigma less of contamination lt nSigma of signal)"}; Configurable allGenEvents{"allGenEvents", false, "Fill all generated events in MC for signal loss calculations"}; Configurable isApplyDeepAngle{"isApplyDeepAngle", false, "Deep Angle cut"}; @@ -670,7 +671,7 @@ struct Kstarqa { return true; } } else { - if (candidate.hasTOF() && std::abs(candidate.tofNSigmaPi() - configGp.shiftInNsigmaTOFPi) < configGp.nsigmaCutCombinedPi && std::abs(candidate.tpcNSigmaPi()) < configGp.nsigmaCutCombinedPi) { + if (candidate.hasTOF() && std::abs(candidate.tofNSigmaPi() - configGp.shiftInNsigmaTOFPi) < configGp.nsigmaCutTOFPi && std::abs(candidate.tpcNSigmaPi()) < configGp.nsigmaCutTPCPi) { return true; } } @@ -693,7 +694,7 @@ struct Kstarqa { return true; } } else { - if (candidate.hasTOF() && std::abs(candidate.tofNSigmaKa() - configGp.shiftInNsigmaTOFKa) < configGp.nsigmaCutCombinedKa && std::abs(candidate.tpcNSigmaKa()) < configGp.nsigmaCutCombinedKa) { + if (candidate.hasTOF() && std::abs(candidate.tofNSigmaKa() - configGp.shiftInNsigmaTOFKa) < configGp.nsigmaCutTOFKa && std::abs(candidate.tpcNSigmaKa()) < configGp.nsigmaCutTPCKa) { return true; } } @@ -827,6 +828,25 @@ struct Kstarqa { return false; } + template + bool selectionMIDPtDep2(const T& candidate, int PID) + { + const float ptCut1 = 1.0f; + const float ptCut2p5 = 2.5f; + const float ptCut07 = 0.7f; + + if (PID == PIDParticle::kPion) { + if (candidate.pt() >= ptCut1 && candidate.pt() < ptCut2p5 && !candidate.hasTOF() && std::abs(candidate.tpcNSigmaPi()) < std::abs(candidate.tpcNSigmaKa())) { + return true; + } + } else if (PID == PIDParticle::kKaon) { + if (candidate.pt() >= ptCut07 && candidate.pt() < ptCut2p5 && !candidate.hasTOF() && std::abs(candidate.tpcNSigmaKa()) < std::abs(candidate.tpcNSigmaPi())) { + return true; + } + } + return false; + } + template bool selectionPIDPtDep(const T& candidate, int PID) { @@ -1184,6 +1204,13 @@ struct Kstarqa { continue; } + if (configGp.isApplyParticleMIDPtDep2) { + if (selectionMIDPtDep2(track1, 0)) // Kaon misidentified as pion + continue; + if (selectionMIDPtDep2(track2, 1)) // Pion misidentified as kaon + continue; + } + rEventSelection.fill(HIST("tracksCheckData"), 5.5); if (cQAplots) { @@ -1327,6 +1354,13 @@ struct Kstarqa { continue; } + if (configGp.isApplyParticleMIDPtDep2) { + if (selectionMIDPtDep2(t1, 0)) // Kaon misidentified as pion + continue; + if (selectionMIDPtDep2(t2, 1)) // Pion misidentified as kaon + continue; + } + if (!selectionPair(t1, t2)) { continue; } @@ -1406,6 +1440,13 @@ struct Kstarqa { continue; } + if (configGp.isApplyParticleMIDPtDep2) { + if (selectionMIDPtDep2(t1, 0)) // Kaon misidentified as pion + continue; + if (selectionMIDPtDep2(t2, 1)) // Pion misidentified as kaon + continue; + } + if (!t1.has_mcParticle() || !t2.has_mcParticle()) { continue; // skip if no MC particle associated } @@ -1556,6 +1597,13 @@ struct Kstarqa { continue; } + if (configGp.isApplyParticleMIDPtDep2) { + if (selectionMIDPtDep2(track1, 0)) // Kaon misidentified as pion + continue; + if (selectionMIDPtDep2(track2, 1)) // Pion misidentified as kaon + continue; + } + rEventSelection.fill(HIST("tracksCheckData"), 5.5); // if (std::abs(track1.rapidity(o2::track::PID::getMass(o2::track::PID::Kaon))) > configGp.ctrackRapidity) // continue; @@ -2124,6 +2172,13 @@ struct Kstarqa { if (selectionMIDPtDep(track2, 0)) // Pion misidentified as kaon continue; } + + if (configGp.isApplyParticleMIDPtDep2) { + if (selectionMIDPtDep2(track1, 1)) // Kaon misidentified as pion + continue; + if (selectionMIDPtDep2(track2, 0)) // Pion misidentified as kaon + continue; + } rEventSelection.fill(HIST("recMCparticles"), 13.5); // if (std::abs(track1.rapidity(o2::track::PID::getMass(o2::track::PID::Pion))) > configGp.ctrackRapidity) @@ -2170,6 +2225,13 @@ struct Kstarqa { continue; } + if (configGp.isApplyParticleMIDPtDep2) { + if (selectionMIDPtDep2(track1, 0)) // Kaon misidentified as pion + continue; + if (selectionMIDPtDep2(track2, 1)) // Pion misidentified as kaon + continue; + } + // if (std::abs(track1.rapidity(o2::track::PID::getMass(o2::track::PID::Kaon))) > configGp.ctrackRapidity) // continue; @@ -2401,6 +2463,13 @@ struct Kstarqa { continue; } + if (configGp.isApplyParticleMIDPtDep2) { + if (selectionMIDPtDep2(track1, 1)) // Pion misidentified as kaon + continue; + if (selectionMIDPtDep2(track2, 0)) // Kaon misidentified as pion + continue; + } + // if (std::abs(track1.rapidity(o2::track::PID::getMass(o2::track::PID::Kaon))) > configGp.ctrackRapidity) // continue;