Skip to content

Commit ccc8508

Browse files
EloviyoShirajum Monira
andauthored
[PWGCF] FemtoUniverse v0cascade task -- PID bitmask for v0 and cascade analysis (#12163)
Co-authored-by: Shirajum Monira <shirajum.monira@cernch>
1 parent ba15dd3 commit ccc8508

File tree

2 files changed

+79
-23
lines changed

2 files changed

+79
-23
lines changed

PWGCF/FemtoUniverse/Core/FemtoUniverseDetaDphiStar.h

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,19 @@
1919
#ifndef PWGCF_FEMTOUNIVERSE_CORE_FEMTOUNIVERSEDETADPHISTAR_H_
2020
#define PWGCF_FEMTOUNIVERSE_CORE_FEMTOUNIVERSEDETADPHISTAR_H_
2121

22-
#include <memory>
23-
#include <string>
24-
#include <vector>
25-
#include "TMath.h"
26-
#include "PWGCF/FemtoUniverse/DataModel/FemtoDerived.h"
27-
#include "PWGCF/FemtoUniverse/Core/FemtoUniverseFemtoContainer.h"
2822
#include "PWGCF/FemtoUniverse/Core/FemtoUniverseAngularContainer.h"
2923
#include "PWGCF/FemtoUniverse/Core/FemtoUniverseContainer.h"
30-
#include "Framework/HistogramRegistry.h"
24+
#include "PWGCF/FemtoUniverse/Core/FemtoUniverseFemtoContainer.h"
3125
#include "PWGCF/FemtoUniverse/Core/FemtoUniverseTrackSelection.h"
26+
#include "PWGCF/FemtoUniverse/DataModel/FemtoDerived.h"
27+
28+
#include "Framework/HistogramRegistry.h"
29+
30+
#include "TMath.h"
31+
32+
#include <memory>
33+
#include <string>
34+
#include <vector>
3235

3336
namespace o2::analysis
3437
{
@@ -279,7 +282,7 @@ class FemtoUniverseDetaDphiStar
279282
auto indexOfDaughterpart2 = (ChosenEventType == femto_universe_container::EventType::mixed ? part2.globalIndex() : part2.index()) + CascChildTable[i][1];
280283
auto daughterpart1 = particles.begin() + indexOfDaughterpart1;
281284
auto daughterpart2 = particles.begin() + indexOfDaughterpart2;
282-
if (isSameSignCPR && (daughterpart1.sign() != daughterpart2.sign()))
285+
if (isSameSignCPR && (daughterpart1.mAntiLambda() != daughterpart2.mAntiLambda())) // mAntiLambda() is used here as sign getter
283286
continue;
284287
auto deta = daughterpart1.eta() - daughterpart2.eta();
285288
auto dphiAvg = averagePhiStar(*daughterpart1, *daughterpart2, i);

PWGCF/FemtoUniverse/TableProducer/femtoUniverseProducerTask.cxx

Lines changed: 68 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ struct FemtoUniverseProducerTask {
125125
Produces<aod::FDCascParticles> outputCascParts;
126126

127127
Configurable<bool> confIsDebug{"confIsDebug", true, "Enable Debug tables"};
128+
Configurable<bool> confIsUseCutculator{"confIsUseCutculator", true, "Enable cutculator for track cuts"};
128129
// Choose if filtering or skimming version is run
129130
// Configurable<bool> confIsTrigger{"confIsTrigger", false, "Store all collisions"}; //Commented: not used configurable
130131
// Choose if running on converted data or Run3 / Pilot
@@ -325,6 +326,15 @@ struct FemtoUniverseProducerTask {
325326
Configurable<std::vector<int>> classMlD0D0bar{"classMlD0D0bar", {0, 1, 2}, "Indexes of ML scores to be stored. Three indexes max."};
326327
} ConfD0Selection;
327328

329+
// PID bitmask configurables
330+
struct : o2::framework::ConfigurableGroup {
331+
Configurable<float> confMinMomTOF{"confMinMomTOF", 0.75, "momentum threshold for particle identification using TOF"};
332+
Configurable<float> confNsigmaTPCParticleChild{"confNsigmaTPCParticleChild", 3.0, "TPC Sigma for particle (daugh & bach) momentum < Confmom"};
333+
Configurable<float> confNsigmaTOFParticleChild{"confNsigmaTOFParticleChild", 3.0, "TOF Sigma for particle (daugh & bach) momentum > Confmom"};
334+
Configurable<float> confNsigmaTPCParticle{"confNsigmaTPCParticle", 3.0, "TPC Sigma for particle (track) momentum < Confmom"};
335+
Configurable<float> confNsigmaCombinedParticle{"confNsigmaCombinedParticle", 3.0, "TPC and TOF Sigma (combined) for particle (track) momentum > Confmom"};
336+
} ConfPIDBitmask;
337+
328338
HfHelper hfHelper;
329339
bool isKaonNSigma(float mom, float nsigmaTPCK, float nsigmaTOFK)
330340
{
@@ -411,6 +421,48 @@ struct FemtoUniverseProducerTask {
411421
}
412422
}
413423

424+
bool isNSigmaTPC(float nsigmaTPCParticle)
425+
{
426+
return (std::abs(nsigmaTPCParticle) < ConfPIDBitmask.confNsigmaTPCParticleChild);
427+
}
428+
429+
bool isNSigmaTOF(float mom, float nsigmaTOFParticle, bool hasTOF)
430+
{
431+
// Cut only on daughter and bachelor tracks, that have TOF signal
432+
if (mom > ConfPIDBitmask.confMinMomTOF && hasTOF) {
433+
return (std::abs(nsigmaTOFParticle) < ConfPIDBitmask.confNsigmaTOFParticleChild);
434+
} else {
435+
return true;
436+
}
437+
}
438+
439+
bool isNSigmaCombined(float mom, float nsigmaTPCParticle, float nsigmaTOFParticle)
440+
{
441+
if (mom <= ConfPIDBitmask.confMinMomTOF) {
442+
return (std::abs(nsigmaTPCParticle) < ConfPIDBitmask.confNsigmaTPCParticle);
443+
} else {
444+
return (TMath::Hypot(nsigmaTOFParticle, nsigmaTPCParticle) < ConfPIDBitmask.confNsigmaCombinedParticle);
445+
}
446+
}
447+
448+
template <typename TrackType>
449+
aod::femtouniverseparticle::CutContainerType PIDBitmask(const TrackType& track)
450+
{
451+
static const o2::track::PID pids[] = {o2::track::PID::Proton, o2::track::PID::Pion, o2::track::PID::Kaon};
452+
aod::femtouniverseparticle::CutContainerType mask = 0u;
453+
for (UInt_t i = 0; i < 3; ++i) {
454+
if (isNSigmaTPC(trackCuts.getNsigmaTPC(track, pids[i])))
455+
mask |= (1u << i);
456+
if (isNSigmaTOF(track.p(), trackCuts.getNsigmaTOF(track, pids[i]), track.hasTOF()))
457+
mask |= (8u << i);
458+
if (isNSigmaCombined(track.p(), trackCuts.getNsigmaTPC(track, pids[i]), trackCuts.getNsigmaTOF(track, pids[i])))
459+
mask |= (64u << i);
460+
}
461+
if (track.hasTOF())
462+
mask |= (512u);
463+
return mask;
464+
}
465+
414466
/// \todo should we add filter on min value pT/eta of V0 and daughters?
415467
/*Filter v0Filter = (nabs(aod::v0data::x) < V0DecVtxMax.value) &&
416468
(nabs(aod::v0data::y) < V0DecVtxMax.value) &&
@@ -1023,8 +1075,9 @@ struct FemtoUniverseProducerTask {
10231075
track.phi(), aod::femtouniverseparticle::ParticleType::kTrack,
10241076
cutContainer.at(
10251077
femto_universe_track_selection::TrackContainerPosition::kCuts),
1026-
cutContainer.at(
1027-
femto_universe_track_selection::TrackContainerPosition::kPID),
1078+
confIsUseCutculator ? cutContainer.at(
1079+
femto_universe_track_selection::TrackContainerPosition::kPID)
1080+
: PIDBitmask(track),
10281081
track.dcaXY(), childIDs, 0,
10291082
track.sign()); // sign getter is mAntiLambda()
10301083

@@ -1078,11 +1131,11 @@ struct FemtoUniverseProducerTask {
10781131
v0.positiveeta(), v0.positivephi(),
10791132
aod::femtouniverseparticle::ParticleType::kV0Child,
10801133
cutContainerV0.at(femto_universe_v0_selection::V0ContainerPosition::kPosCuts),
1081-
cutContainerV0.at(femto_universe_v0_selection::V0ContainerPosition::kPosPID),
1134+
confIsUseCutculator ? cutContainerV0.at(femto_universe_v0_selection::V0ContainerPosition::kPosPID) : PIDBitmask(postrack),
10821135
0.,
10831136
childIDs,
10841137
0,
1085-
0);
1138+
postrack.sign());
10861139
const int rowOfPosTrack = outputParts.lastIndex();
10871140
if constexpr (isMC) {
10881141
fillMCParticle(postrack, o2::aod::femtouniverseparticle::ParticleType::kV0Child);
@@ -1098,11 +1151,11 @@ struct FemtoUniverseProducerTask {
10981151
v0.negativephi(),
10991152
aod::femtouniverseparticle::ParticleType::kV0Child,
11001153
cutContainerV0.at(femto_universe_v0_selection::V0ContainerPosition::kNegCuts),
1101-
cutContainerV0.at(femto_universe_v0_selection::V0ContainerPosition::kNegPID),
1154+
confIsUseCutculator ? cutContainerV0.at(femto_universe_v0_selection::V0ContainerPosition::kNegPID) : PIDBitmask(negtrack),
11021155
0.,
11031156
childIDs,
11041157
0,
1105-
0);
1158+
negtrack.sign());
11061159
const int rowOfNegTrack = outputParts.lastIndex();
11071160
if constexpr (isMC) {
11081161
fillMCParticle(negtrack, o2::aod::femtouniverseparticle::ParticleType::kV0Child);
@@ -1160,12 +1213,12 @@ struct FemtoUniverseProducerTask {
11601213
casc.positiveeta(),
11611214
casc.positivephi(),
11621215
aod::femtouniverseparticle::ParticleType::kV0Child,
1163-
0, // cutContainerV0.at(femto_universe_v0_selection::V0ContainerPosition::kPosCuts),
1164-
0, // cutContainerV0.at(femto_universe_v0_selection::V0ContainerPosition::kPosPID),
1216+
0, // cutContainerV0.at(femto_universe_v0_selection::V0ContainerPosition::kPosCuts),
1217+
PIDBitmask(posTrackCasc), // cutContainerV0.at(femto_universe_v0_selection::V0ContainerPosition::kPosPID),
11651218
hasTOF,
11661219
childIDs,
11671220
0,
1168-
0);
1221+
posTrackCasc.sign());
11691222
const int rowOfPosTrack = outputParts.lastIndex();
11701223
if constexpr (isMC) {
11711224
fillMCParticle(posTrackCasc, o2::aod::femtouniverseparticle::ParticleType::kV0Child);
@@ -1182,12 +1235,12 @@ struct FemtoUniverseProducerTask {
11821235
casc.negativeeta(),
11831236
casc.negativephi(),
11841237
aod::femtouniverseparticle::ParticleType::kV0Child,
1185-
0, // cutContainerV0.at(femto_universe_v0_selection::V0ContainerPosition::kNegCuts),
1186-
0, // cutContainerV0.at(femto_universe_v0_selection::V0ContainerPosition::kNegPID),
1238+
0, // cutContainerV0.at(femto_universe_v0_selection::V0ContainerPosition::kNegCuts),
1239+
PIDBitmask(negTrackCasc), // cutContainerV0.at(femto_universe_v0_selection::V0ContainerPosition::kNegPID),
11871240
hasTOF,
11881241
childIDs,
11891242
0,
1190-
0);
1243+
negTrackCasc.sign());
11911244
const int rowOfNegTrack = outputParts.lastIndex();
11921245
if constexpr (isMC) {
11931246
fillMCParticle(negTrackCasc, o2::aod::femtouniverseparticle::ParticleType::kV0Child);
@@ -1205,12 +1258,12 @@ struct FemtoUniverseProducerTask {
12051258
casc.bacheloreta(),
12061259
casc.bachelorphi(),
12071260
aod::femtouniverseparticle::ParticleType::kCascadeBachelor,
1208-
0, // cutContainerV0.at(femto_universe_v0_selection::V0ContainerPosition::kNegCuts),
1209-
0, // cutContainerV0.at(femto_universe_v0_selection::V0ContainerPosition::kNegPID),
1261+
0, // cutContainerV0.at(femto_universe_v0_selection::V0ContainerPosition::kNegCuts),
1262+
PIDBitmask(bachTrackCasc), // cutContainerV0.at(femto_universe_v0_selection::V0ContainerPosition::kNegPID),
12101263
hasTOF,
12111264
childIDs,
12121265
0,
1213-
0);
1266+
bachTrackCasc.sign());
12141267
const int rowOfBachTrack = outputParts.lastIndex();
12151268
if constexpr (isMC) {
12161269
fillMCParticle(bachTrackCasc, o2::aod::femtouniverseparticle::ParticleType::kCascadeBachelor);

0 commit comments

Comments
 (0)