Skip to content

Commit ef76d9c

Browse files
committed
Add kaon and pion Nsigma rejection in proton selection
1 parent c5313c8 commit ef76d9c

2 files changed

Lines changed: 59 additions & 19 deletions

File tree

PWGCF/FemtoUniverse/Tasks/femtoUniversePairTaskTrackTrackMultKtExtended.cxx

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,9 @@ struct FemtoUniversePairTaskTrackTrackMultKtExtended {
7676
Configurable<bool> isNsigmaRectangular{"isNsigmaRectangular", false, "Apply rectangular TPC and TOF nSigma cut, instead of a combined one (TPC<confNsigmaTPC, TOF<confNsigmaCombined)"};
7777
Configurable<float> confNsigmaCombined{"confNsigmaCombined", 3.0f, "TPC and TOF Pion Sigma (combined) for momentum > confTOFpMin"};
7878
Configurable<float> confNsigmaTPC{"confNsigmaTPC", 3.0f, "TPC Pion Sigma for momentum < confTOFpMin"};
79+
Configurable<float> confNsigmaKaonRejection{"confNsigmaKaonRejection", 0, "In proton selection reject tracks with combined Nsigma <confNsigmaRejection"};
80+
Configurable<float> confNsigmaPionRejection{"confNsigmaPionRejection", 0, "In proton selection reject tracks with combined Nsigma <confNsigmaRejection"};
81+
7982
Configurable<float> confTOFpMin{"confTOFpMin", 0.5f, "Min. momentum for which TOF is required for PID."};
8083
Configurable<float> confEtaMax{"confEtaMax", 0.8f, "Higher limit for |Eta| (the same for both particles)"};
8184

@@ -280,6 +283,30 @@ struct FemtoUniversePairTaskTrackTrackMultKtExtended {
280283
return std::hypot(nsigmaTOF, nsigmaTPC) < twotracksconfigs.confNsigmaCombined;
281284
}
282285

286+
bool isNSigmaProton(float mom, float nsigmaTPC, float nsigmaTOF, float nsigmaTPCkaon, float nsigmaTOFkaon, float nsigmaTPCpion, float nsigmaTOFpion)
287+
{
288+
// with additional nSigma kaon and pion rejection
289+
if (mom < twotracksconfigs.confTOFpMin) {
290+
if (std::abs(nsigmaTPCkaon) < twotracksconfigs.confNsigmaKaonRejection || std::abs(nsigmaTPCpion) < twotracksconfigs.confNsigmaPionRejection) {
291+
return false;
292+
}
293+
} else if (std::hypot(nsigmaTOFkaon, nsigmaTPCkaon) < twotracksconfigs.confNsigmaKaonRejection || std::hypot(nsigmaTOFpion, nsigmaTPCpion) < twotracksconfigs.confNsigmaPionRejection) {
294+
return false;
295+
}
296+
297+
if (twotracksconfigs.isNsigmaRectangular) {
298+
if (mom < twotracksconfigs.confTOFpMin) {
299+
return std::abs(nsigmaTPC) < twotracksconfigs.confNsigmaTPC;
300+
}
301+
return (std::abs(nsigmaTPC) < twotracksconfigs.confNsigmaTPC && std::abs(nsigmaTOF) < twotracksconfigs.confNsigmaCombined);
302+
}
303+
304+
if (mom < twotracksconfigs.confTOFpMin) {
305+
return std::abs(nsigmaTPC) < twotracksconfigs.confNsigmaTPC;
306+
}
307+
return std::hypot(nsigmaTOF, nsigmaTPC) < twotracksconfigs.confNsigmaCombined;
308+
}
309+
283310
/// TPC Kaon Sigma selection (stricter cuts for K+ and K-) -- based on Run2 results
284311
bool isKaonNsigma(float mom, float nsigmaTPCK, float nsigmaTOFK)
285312
{
@@ -313,7 +340,7 @@ struct FemtoUniversePairTaskTrackTrackMultKtExtended {
313340
switch (trackonefilter.confPDGCodePartOne) {
314341
case kProton:
315342
case kProtonBar:
316-
return isNSigma(mom, nsigmaTPCPr, nsigmaTOFPr);
343+
return isNSigmaProton(mom, nsigmaTPCPr, nsigmaTOFPr, nsigmaTPCK, nsigmaTOFK, nsigmaTPCPi, nsigmaTOFPi);
317344
case kPiPlus:
318345
case kPiMinus:
319346
case kPi0:
@@ -331,7 +358,7 @@ struct FemtoUniversePairTaskTrackTrackMultKtExtended {
331358
switch (tracktwofilter.confPDGCodePartTwo) {
332359
case kProton:
333360
case kProtonBar:
334-
return isNSigma(mom, nsigmaTPCPr, nsigmaTOFPr);
361+
return isNSigmaProton(mom, nsigmaTPCPr, nsigmaTOFPr, nsigmaTPCK, nsigmaTOFK, nsigmaTPCPi, nsigmaTOFPi);
335362
case kPiPlus:
336363
case kPiMinus:
337364
case kPi0:

PWGCF/FemtoUniverse/Tasks/femtoUniversePairTaskTrackV0Extended.cxx

Lines changed: 30 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,15 @@ struct FemtoUniversePairTaskTrackV0Extended {
104104
Configurable<float> confDcaXYCustom2FilterCut{"confDcaXYCustom2FilterCut", 0, "Value for [2] custom DCAxy cut -> |DCAxy| < [1] + [2]/pT (if stricter than in Producer)"};
105105
} ConfTrkSelection;
106106

107-
Configurable<float> confmom{"confmom", 0.5, "momentum threshold for particle identification using TOF"};
108-
Configurable<float> confNsigmaTPCParticle{"confNsigmaTPCParticle", 3.0, "TPC Sigma for particle momentum < confmom"};
109-
Configurable<float> confNsigmaTPCDaughter{"confNsigmaTPCDaughter", 3.0, "TPC Sigma for daughter"};
110-
Configurable<float> confNsigmaTOFParticle{"confNsigmaTOFParticle", 3.0, "TOF Sigma for particle (daugh & bach) momentum > Confmom"};
111-
Configurable<float> confNsigmaCombinedParticle{"confNsigmaCombinedParticle", 3.0, "TPC and TOF Sigma (combined) for particle momentum > confmom"};
107+
struct : o2::framework::ConfigurableGroup {
108+
Configurable<float> confmom{"confmom", 0.5, "momentum threshold for particle identification using TOF"};
109+
Configurable<float> confNsigmaTPCParticle{"confNsigmaTPCParticle", 3.0, "TPC Sigma for particle momentum < ConfNSigmaSelection.confmom"};
110+
Configurable<float> confNsigmaTPCDaughter{"confNsigmaTPCDaughter", 3.0, "TPC Sigma for daughter"};
111+
Configurable<float> confNsigmaTOFParticle{"confNsigmaTOFParticle", 3.0, "TOF Sigma for particle (daugh & bach) momentum > ConfNSigmaSelection.confmom"};
112+
Configurable<float> confNsigmaCombinedParticle{"confNsigmaCombinedParticle", 3.0, "TPC and TOF Sigma (combined) for particle momentum > ConfNSigmaSelection.confmom"};
113+
Configurable<float> confNsigmaKaonRejection{"confNsigmaKaonRejection", 0, "In proton selection reject tracks with kaon Nsigma <confNsigmaRejection"};
114+
Configurable<float> confNsigmaPionRejection{"confNsigmaPionRejection", 0, "In proton selection reject tracks with pion Nsigma <confNsigmaRejection"};
115+
} ConfNSigmaSelection;
112116

113117
Filter collisionFilter = (nabs(aod::collision::posZ) < confZVertexCut);
114118
using FilteredFDCollisions = soa::Filtered<o2::aod::FdCollisions>;
@@ -255,19 +259,19 @@ struct FemtoUniversePairTaskTrackV0Extended {
255259

256260
bool isNSigmaCombined(float mom, float nsigmaTPCParticle, float nsigmaTOFParticle, bool hasTOF)
257261
{
258-
if (mom <= confmom) {
259-
return (std::abs(nsigmaTPCParticle) < confNsigmaTPCParticle);
262+
if (mom <= ConfNSigmaSelection.confmom) {
263+
return (std::abs(nsigmaTPCParticle) < ConfNSigmaSelection.confNsigmaTPCParticle);
260264
}
261265
if (hasTOF) {
262-
return (std::hypot(nsigmaTOFParticle, nsigmaTPCParticle) < confNsigmaCombinedParticle);
266+
return (std::hypot(nsigmaTOFParticle, nsigmaTPCParticle) < ConfNSigmaSelection.confNsigmaCombinedParticle);
263267
}
264268
return false;
265269
}
266270

267271
template <typename T>
268272
bool isNSigmaCombinedBitmask(float mom, const T& part)
269273
{
270-
if (mom <= confmom) {
274+
if (mom <= ConfNSigmaSelection.confmom) {
271275
return ((part.pidCut() & (1u << ConfTrkSelection.confTrackChoicePartOne)) != 0);
272276
}
273277
if ((part.pidCut() & 512u) != 0) {
@@ -293,14 +297,14 @@ struct FemtoUniversePairTaskTrackV0Extended {
293297

294298
bool isNSigmaTPC(float nsigmaTPCParticle)
295299
{
296-
return std::abs(nsigmaTPCParticle) < confNsigmaTPCDaughter;
300+
return std::abs(nsigmaTPCParticle) < ConfNSigmaSelection.confNsigmaTPCDaughter;
297301
}
298302

299303
bool isNSigmaTOF(float mom, float nsigmaTOFParticle, bool hasTOF)
300304
{
301305
// Cut only on daughter tracks, that have TOF signal
302-
if (mom > confmom && hasTOF) {
303-
return std::abs(nsigmaTOFParticle) < confNsigmaTOFParticle;
306+
if (mom > ConfNSigmaSelection.confmom && hasTOF) {
307+
return std::abs(nsigmaTOFParticle) < ConfNSigmaSelection.confNsigmaTOFParticle;
304308
}
305309
return true;
306310
}
@@ -310,7 +314,19 @@ struct FemtoUniversePairTaskTrackV0Extended {
310314
{
311315
const std::array<float, 3> tpcNSigmas = {aod::pidtpc_tiny::binning::unPackInTable(part.tpcNSigmaStorePr()), aod::pidtpc_tiny::binning::unPackInTable(part.tpcNSigmaStorePi()), aod::pidtpc_tiny::binning::unPackInTable(part.tpcNSigmaStoreKa())};
312316
const std::array<float, 3> tofNSigmas = {aod::pidtof_tiny::binning::unPackInTable(part.tofNSigmaStorePr()), aod::pidtof_tiny::binning::unPackInTable(part.tofNSigmaStorePi()), aod::pidtof_tiny::binning::unPackInTable(part.tofNSigmaStoreKa())};
317+
enum particleID { protonId,
318+
pionId,
319+
kaonId };
313320

321+
if (id == protonId) {
322+
if (part.p() < ConfNSigmaSelection.confmom) {
323+
if (std::abs(tpcNSigmas[kaonId]) < ConfNSigmaSelection.confNsigmaKaonRejection || std::abs(tpcNSigmas[pionId]) < ConfNSigmaSelection.confNsigmaPionRejection) {
324+
return false;
325+
}
326+
} else if (std::hypot(tofNSigmas[kaonId], tpcNSigmas[kaonId]) < ConfNSigmaSelection.confNsigmaKaonRejection || std::hypot(tofNSigmas[pionId], tpcNSigmas[pionId]) < ConfNSigmaSelection.confNsigmaPionRejection) {
327+
return false;
328+
}
329+
}
314330
return isNSigmaCombined(part.p(), tpcNSigmas[id], tofNSigmas[id], (part.pidCut() & 512u) != 0);
315331
}
316332

@@ -560,7 +576,7 @@ struct FemtoUniversePairTaskTrackV0Extended {
560576
const std::array<float, 3> tpcNSigmas = {aod::pidtpc_tiny::binning::unPackInTable(part.tpcNSigmaStorePr()), aod::pidtpc_tiny::binning::unPackInTable(part.tpcNSigmaStorePi()), aod::pidtpc_tiny::binning::unPackInTable(part.tpcNSigmaStoreKa())};
561577
const std::array<float, 3> tofNSigmas = {aod::pidtof_tiny::binning::unPackInTable(part.tofNSigmaStorePr()), aod::pidtof_tiny::binning::unPackInTable(part.tofNSigmaStorePi()), aod::pidtof_tiny::binning::unPackInTable(part.tofNSigmaStoreKa())};
562578

563-
if (!isNSigmaCombined(part.p(), tpcNSigmas[ConfTrkSelection.confTrackChoicePartOne], tofNSigmas[ConfTrkSelection.confTrackChoicePartOne], (part.pidCut() & 512u) != 0)) {
579+
if (!isParticleCombined(part, ConfTrkSelection.confTrackChoicePartOne)) {
564580
continue;
565581
}
566582
if (part.sign() > 0) {
@@ -1832,10 +1848,7 @@ struct FemtoUniversePairTaskTrackV0Extended {
18321848
}
18331849

18341850
for (const auto& part : groupPartsOne) {
1835-
const std::array<float, 3> tpcNSigmas = {aod::pidtpc_tiny::binning::unPackInTable(part.tpcNSigmaStorePr()), aod::pidtpc_tiny::binning::unPackInTable(part.tpcNSigmaStorePi()), aod::pidtpc_tiny::binning::unPackInTable(part.tpcNSigmaStoreKa())};
1836-
const std::array<float, 3> tofNSigmas = {aod::pidtof_tiny::binning::unPackInTable(part.tofNSigmaStorePr()), aod::pidtof_tiny::binning::unPackInTable(part.tofNSigmaStorePi()), aod::pidtof_tiny::binning::unPackInTable(part.tofNSigmaStoreKa())};
1837-
1838-
if (!isNSigmaCombined(part.p(), tpcNSigmas[ConfTrkSelection.confTrackChoicePartOne], tofNSigmas[ConfTrkSelection.confTrackChoicePartOne], (part.pidCut() & 512u) != 0)) {
1851+
if (!isParticleCombined(part, ConfTrkSelection.confTrackChoicePartOne)) {
18391852
continue;
18401853
}
18411854
registryMCreco.fill(HIST("mothersReco/motherParticleTrack"), part.motherPDG());

0 commit comments

Comments
 (0)