Skip to content

Commit 2622c7b

Browse files
EloviyoShirajum Monira
andauthored
[PWGCF] FemtoUniverse cascade task -- added MC truth process functions for track-cascade (#9497)
Co-authored-by: Shirajum Monira <shirajum.monira@cernch>
1 parent 9e6c4e4 commit 2622c7b

File tree

1 file changed

+85
-9
lines changed

1 file changed

+85
-9
lines changed

PWGCF/FemtoUniverse/Tasks/femtoUniversePairTaskTrackCascadeExtended.cxx

Lines changed: 85 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include "PWGCF/FemtoUniverse/Core/FemtoUniverseContainer.h"
3030
#include "PWGCF/FemtoUniverse/Core/FemtoUniverseDetaDphiStar.h"
3131
#include "PWGCF/FemtoUniverse/Core/femtoUtils.h"
32+
#include "Framework/O2DatabasePDGPlugin.h"
3233

3334
using namespace o2;
3435
using namespace o2::soa;
@@ -39,16 +40,11 @@ using namespace o2::aod::pidutils;
3940

4041
struct femtoUniversePairTaskTrackCascadeExtended { // o2-linter: disable=name/struct
4142

43+
Service<o2::framework::O2DatabasePDG> pdgMC;
4244
SliceCache cache;
4345
using FemtoFullParticles = soa::Join<aod::FDCascParticles, aod::FDExtParticles>;
4446
Preslice<FemtoFullParticles> perCol = aod::femtouniverseparticle::fdCollisionId;
4547

46-
Configurable<float> confZVertexCut{"ConfZVertexCut", 10.f, "Event sel: Maximum z-Vertex (cm)"}; // o2-linter: disable=name/configurable
47-
48-
Filter collisionFilter = (nabs(aod::collision::posZ) < confZVertexCut);
49-
using FilteredFDCollisions = soa::Filtered<o2::aod::FdCollisions>;
50-
using FilteredFDCollision = FilteredFDCollisions::iterator;
51-
5248
ConfigurableAxis confChildTempFitVarpTBins{"ConfChildTempFitVarpTBins", {20, 0.5, 4.05}, "V0 child: pT binning of the pT vs. TempFitVar plot"}; // o2-linter: disable=name/configurable
5349
ConfigurableAxis confChildTempFitVarBins{"ConfChildTempFitVarBins", {300, -0.15, 0.15}, "V0 child: binning of the TempFitVar in the pT vs. TempFitVar plot"}; // o2-linter: disable=name/configurable
5450
Configurable<float> confCascInvMassLowLimit{"ConfCascInvMassLowLimit", 1.315, "Lower limit of the Casc invariant mass"}; // o2-linter: disable=name/configurable
@@ -58,7 +54,11 @@ struct femtoUniversePairTaskTrackCascadeExtended { // o2-linter: disable=name/st
5854
Configurable<float> confNSigmaTPCPion{"NSigmaTPCPion", 4, "NSigmaTPCPion"}; // o2-linter: disable=name/configurable
5955
Configurable<float> confNSigmaTPCProton{"NSigmaTPCProton", 4, "NSigmaTPCProton"}; // o2-linter: disable=name/configurable
6056

61-
// configs for correlation part
57+
/// applying narrow cut
58+
Configurable<float> confZVertexCut{"ConfZVertexCut", 10.f, "Event sel: Maximum z-Vertex (cm)"}; // o2-linter: disable=name/configurable
59+
Configurable<float> confEta{"ConfEta", 0.8, "Eta cut for the global track"}; // o2-linter: disable=name/configurable
60+
61+
// configurations for correlation part
6262
Configurable<int> confTrackChoicePartOne{"ConfTrackChoicePartOne", 0, "0:Proton, 1:Pion, 2:Kaon"}; // o2-linter: disable=name/configurable
6363
Configurable<int> confTrkPDGCodePartOne{"ConfTrkPDGCodePartOne", 2212, "Particle 1 (Track) - PDG code"}; // o2-linter: disable=name/configurable
6464
Configurable<int> confCascType1{"ConfCascType1", 0, "select one of the V0s (Omega = 0, Xi = 1, anti-Omega = 2, anti-Xi = 3) for track-cascade combination"}; // o2-linter: disable=name/configurable
@@ -87,11 +87,17 @@ struct femtoUniversePairTaskTrackCascadeExtended { // o2-linter: disable=name/st
8787
ConfigurableAxis confTrkTempFitVarpTBins{"ConfTrkTempFitVarpTBins", {20, 0.5, 4.05}, "pT binning of the pT vs. TempFitVar plot"}; // o2-linter: disable=name/configurable
8888
ConfigurableAxis confTrkTempFitVarBins{"ConfTrkDTempFitVarBins", {300, -0.15, 0.15}, "binning of the TempFitVar in the pT vs. TempFitVar plot"}; // o2-linter: disable=name/configurable
8989

90+
Filter collisionFilter = (nabs(aod::collision::posZ) < confZVertexCut);
91+
using FilteredFDCollisions = soa::Filtered<o2::aod::FdCollisions>;
92+
using FilteredFDCollision = FilteredFDCollisions::iterator;
93+
9094
/// Partition for particle 1 (track)
91-
Partition<FemtoFullParticles> partsOne = (aod::femtouniverseparticle::partType == uint8_t(aod::femtouniverseparticle::ParticleType::kTrack)) && (aod::femtouniverseparticle::sign == confChargePart1) && (aod::femtouniverseparticle::pt < confHPtPart1) && (aod::femtouniverseparticle::pt > confLPtPart1);
95+
Partition<FemtoFullParticles> partsOne = (aod::femtouniverseparticle::partType == uint8_t(aod::femtouniverseparticle::ParticleType::kTrack)) && (aod::femtouniverseparticle::sign == confChargePart1) && (nabs(aod::femtouniverseparticle::eta) < confEta) && (aod::femtouniverseparticle::pt < confHPtPart1) && (aod::femtouniverseparticle::pt > confLPtPart1);
96+
Partition<FemtoFullParticles> partsOneMCgen = (aod::femtouniverseparticle::partType == uint8_t(aod::femtouniverseparticle::ParticleType::kMCTruthTrack)) && (nabs(aod::femtouniverseparticle::eta) < confEta) && (aod::femtouniverseparticle::pt < confHPtPart1) && (aod::femtouniverseparticle::pt > confLPtPart1);
9297

9398
/// Partition for particle 2 (cascade)
9499
Partition<FemtoFullParticles> partsTwo = (aod::femtouniverseparticle::partType == uint8_t(aod::femtouniverseparticle::ParticleType::kCascade)) && (aod::femtouniverseparticle::pt < confHPtPart2) && (aod::femtouniverseparticle::pt > confLPtPart2);
100+
Partition<FemtoFullParticles> partsTwoMCgen = (aod::femtouniverseparticle::partType == uint8_t(aod::femtouniverseparticle::ParticleType::kMCTruthTrack)) && (aod::femtouniverseparticle::pt < confHPtPart2) && (aod::femtouniverseparticle::pt > confLPtPart2);
95101

96102
/// Partition for cascades
97103
Partition<FemtoFullParticles> cascs = (aod::femtouniverseparticle::partType == uint8_t(aod::femtouniverseparticle::ParticleType::kCascade));
@@ -458,6 +464,7 @@ struct femtoUniversePairTaskTrackCascadeExtended { // o2-linter: disable=name/st
458464
ColumnBinningPolicy<aod::collision::PosZ, aod::femtouniversecollision::MultNtr> colBinning{{confVtxBins, confMultBins}, true};
459465

460466
for (const auto& [collision1, collision2] : soa::selfCombinations(colBinning, 5, -1, cols, cols)) {
467+
const int multCol = confUseCent ? collision1.multV0M() : collision1.multNtr();
461468

462469
auto groupPartsOne = partsTwo->sliceByCached(aod::femtouniverseparticle::fdCollisionId, collision1.globalIndex(), cache);
463470
auto groupPartsTwo = partsTwo->sliceByCached(aod::femtouniverseparticle::fdCollisionId, collision2.globalIndex(), cache);
@@ -493,11 +500,80 @@ struct femtoUniversePairTaskTrackCascadeExtended { // o2-linter: disable=name/st
493500
continue;
494501
}
495502

496-
mixedEventCont.setPair<false>(p1, p2, collision1.multNtr(), confUse3D, 1.0f);
503+
mixedEventCont.setPair<false>(p1, p2, multCol, confUse3D, 1.0f);
497504
}
498505
}
499506
}
500507
PROCESS_SWITCH(femtoUniversePairTaskTrackCascadeExtended, processMixedEventCasc, "Enable processing mixed event for cascade - cascade", false);
508+
// MC truth
509+
void processSameEventMCgen(const FilteredFDCollision& col, [[maybe_unused]] const FemtoFullParticles& parts)
510+
{
511+
auto groupPartsOne = partsOneMCgen->sliceByCached(aod::femtouniverseparticle::fdCollisionId, col.globalIndex(), cache);
512+
auto groupPartsTwo = partsTwoMCgen->sliceByCached(aod::femtouniverseparticle::fdCollisionId, col.globalIndex(), cache);
513+
514+
eventHisto.fillQA(col);
515+
516+
for (const auto& part : groupPartsTwo) {
517+
int pdgCode = static_cast<int>(part.pidCut());
518+
if ((confCascType1 == 0 && pdgCode != 3334) || (confCascType1 == 2 && pdgCode != -3334) || (confCascType1 == 1 && pdgCode != 3312) || (confCascType1 == 3 && pdgCode != -3312))
519+
continue;
520+
521+
cascQAHistos.fillQA<false, true>(part);
522+
523+
for (const auto& part : groupPartsOne) {
524+
int pdgCode = static_cast<int>(part.pidCut());
525+
if (pdgCode != confTrkPDGCodePartOne)
526+
continue;
527+
const auto& pdgTrackParticle = pdgMC->GetParticle(pdgCode);
528+
if (!pdgTrackParticle) {
529+
continue;
530+
}
531+
532+
if (pdgTrackParticle->Charge() > 0) {
533+
trackHistoPartOnePos.fillQA<false, false>(part);
534+
} else if (pdgTrackParticle->Charge() < 0) {
535+
trackHistoPartOneNeg.fillQA<false, false>(part);
536+
}
537+
}
538+
539+
for (const auto& [p1, p2] : combinations(CombinationsFullIndexPolicy(groupPartsOne, groupPartsTwo))) {
540+
if (static_cast<int>(p1.pidCut()) != confTrkPDGCodePartOne)
541+
continue;
542+
int pdgCodeCasc = static_cast<int>(p2.pidCut());
543+
if ((confCascType1 == 0 && pdgCodeCasc != 3334) || (confCascType1 == 2 && pdgCodeCasc != -3334) || (confCascType1 == 1 && pdgCodeCasc != 3312) || (confCascType1 == 3 && pdgCodeCasc != -3312))
544+
continue;
545+
sameEventCont.setPair<false>(p1, p2, col.multNtr(), confUse3D, 1.0f);
546+
}
547+
}
548+
}
549+
PROCESS_SWITCH(femtoUniversePairTaskTrackCascadeExtended, processSameEventMCgen, "Enable processing same event MC truth for track - cascade", false);
550+
551+
void processMixedEventMCgen(const FilteredFDCollisions& cols, [[maybe_unused]] const FemtoFullParticles& parts)
552+
{
553+
ColumnBinningPolicy<aod::collision::PosZ, aod::femtouniversecollision::MultNtr> colBinning{{confVtxBins, confMultBins}, true};
554+
555+
for (const auto& [collision1, collision2] : soa::selfCombinations(colBinning, 5, -1, cols, cols)) {
556+
557+
auto groupPartsOne = partsOneMCgen->sliceByCached(aod::femtouniverseparticle::fdCollisionId, collision1.globalIndex(), cache);
558+
auto groupPartsTwo = partsTwoMCgen->sliceByCached(aod::femtouniverseparticle::fdCollisionId, collision2.globalIndex(), cache);
559+
560+
const auto& magFieldTesla1 = collision1.magField();
561+
const auto& magFieldTesla2 = collision2.magField();
562+
563+
if (magFieldTesla1 != magFieldTesla2) {
564+
continue;
565+
}
566+
for (const auto& [p1, p2] : combinations(CombinationsFullIndexPolicy(groupPartsOne, groupPartsTwo))) {
567+
if (static_cast<int>(p1.pidCut()) != confTrkPDGCodePartOne)
568+
continue;
569+
int pdgCodeCasc = static_cast<int>(p2.pidCut());
570+
if ((confCascType1 == 0 && pdgCodeCasc != 3334) || (confCascType1 == 2 && pdgCodeCasc != -3334) || (confCascType1 == 1 && pdgCodeCasc != 3312) || (confCascType1 == 3 && pdgCodeCasc != -3312))
571+
continue;
572+
mixedEventCont.setPair<false>(p1, p2, collision1.multNtr(), confUse3D, 1.0f);
573+
}
574+
}
575+
}
576+
PROCESS_SWITCH(femtoUniversePairTaskTrackCascadeExtended, processMixedEventMCgen, "Enable processing mixed event MC truth for track - cascade", false);
501577
};
502578

503579
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

0 commit comments

Comments
 (0)