@@ -63,6 +63,8 @@ using namespace o2::framework::expressions;
6363using namespace o2 ::analysis::femto_universe;
6464using namespace o2 ::aod::pidutils;
6565
66+ // /* CONFIGURABLE NUMBER LIMIT REACHED? Add configurables to structs if anything else needed -> configurables, partitions, histograms .... */ ///
67+
6668struct femtoUniversePairTaskTrackCascadeExtended {
6769
6870 Service<o2::framework::O2DatabasePDG> pdgMC;
@@ -73,9 +75,10 @@ struct femtoUniversePairTaskTrackCascadeExtended {
7375
7476 ConfigurableAxis confChildTempFitVarpTBins{" confChildTempFitVarpTBins" , {20 , 0.5 , 4.05 }, " V0 child: pT binning of the pT vs. TempFitVar plot" };
7577 ConfigurableAxis confChildTempFitVarBins{" confChildTempFitVarBins" , {300 , -0.15 , 0.15 }, " V0 child: binning of the TempFitVar in the pT vs. TempFitVar plot" };
78+ struct : o2::framework::ConfigurableGroup {
7679 Configurable<float > confCascInvMassLowLimit{" confCascInvMassLowLimit" , 1.315 , " Lower limit of the Casc invariant mass" };
7780 Configurable<float > confCascInvMassUpLimit{" confCascInvMassUpLimit" , 1.325 , " Upper limit of the Casc invariant mass" };
78-
81+ } cascInvMassCuts;
7982 // / applying narrow cut
8083 struct : o2::framework::ConfigurableGroup {
8184 Configurable<float > confZVertexCut{" confZVertexCut" , 10 .f , " Event sel: Maximum z-Vertex (cm)" };
@@ -99,8 +102,10 @@ struct femtoUniversePairTaskTrackCascadeExtended {
99102 Configurable<int > confCascPDGCode{" confCascPDGCode" , 3312 , " Particle 2 (Cascade) - PDG code" };
100103 Configurable<int > confCascType1{" confCascType1" , 0 , " select one of the Cascades (Omega = 0, Xi = 1, anti-Omega = 2, anti-Xi = 3) for track-cascade and cascade-cascade combination" };
101104 Configurable<int > confCascType2{" confCascType2" , 0 , " select one of the Cascades (Omega = 0, Xi = 1, anti-Omega = 2, anti-Xi = 3) for cascade-cascade combination" };
105+ struct : o2::framework::ConfigurableGroup {
102106 Configurable<float > confHPtPart2{" confHPtPart2" , 4 .0f , " higher limit for pt of cascade" };
103107 Configurable<float > confLPtPart2{" confLPtPart2" , 0 .3f , " lower limit for pt of cascade" };
108+ } cascPtLimits; // Structs here only to make space for additional configurables/histograms/partitions
104109 Configurable<float > confmom{" confmom" , 0.75 , " momentum threshold for particle identification using TOF" };
105110 Configurable<float > confNsigmaTPCParticle{" confNsigmaTPCParticle" , 3.0 , " TPC Sigma for particle (track) momentum < Confmom" };
106111 Configurable<float > confNsigmaTPCParticleChild{" confNsigmaTPCParticleChild" , 3.0 , " TPC Sigma for particle (daugh & bach) momentum < Confmom" };
@@ -151,7 +156,8 @@ struct femtoUniversePairTaskTrackCascadeExtended {
151156
152157 // / Partition for the first track particle using extended table
153158 Partition<FemtoFullParticles> partsTrackOneFull = (aod::femtouniverseparticle::partType == uint8_t (aod::femtouniverseparticle::ParticleType::kTrack )) && (aod::femtouniverseparticle::mAntiLambda == trackparticleconfigs.confChargePart1) && (nabs(aod::femtouniverseparticle::eta) < narrowcuts.confEta) && (aod::femtouniverseparticle::pt < trackparticleconfigs.confHPtPart1) && (aod::femtouniverseparticle::pt > trackparticleconfigs.confLPtPart1); // used for track - cascade and track - track correlations
154-
159+ // / Partition for MC QA of track using partone configs
160+ Partition<FemtoRecoFullParticles> partsTrackOneFullMc = (aod::femtouniverseparticle::partType == uint8_t (aod::femtouniverseparticle::ParticleType::kTrack )) &&(aod::femtouniverseparticle::mAntiLambda == trackparticleconfigs.confChargePart1) && (nabs(aod::femtouniverseparticle::eta) < narrowcuts.confEta) && (aod::femtouniverseparticle::pt < trackparticleconfigs.confHPtPart1) && (aod::femtouniverseparticle::pt > trackparticleconfigs.confLPtPart1);
155161 // / Partition for the first track particle using bitmask (without extended table)
156162 Partition<aod::FDParticles> partsTrackOneBasic = (aod::femtouniverseparticle::partType == uint8_t (aod::femtouniverseparticle::ParticleType::kTrack )) && (aod::femtouniverseparticle::mAntiLambda == trackparticleconfigs.confChargePart1) && (nabs(aod::femtouniverseparticle::eta) < narrowcuts.confEta) && (aod::femtouniverseparticle::pt < trackparticleconfigs.confHPtPart1) && (aod::femtouniverseparticle::pt > trackparticleconfigs.confLPtPart1);
157163 Partition<aod::FDParticles> partsTrackOneMCgenBasic = (aod::femtouniverseparticle::partType == uint8_t (aod::femtouniverseparticle::ParticleType::kMCTruthTrack )) && (nabs(aod::femtouniverseparticle::eta) < narrowcuts.confEta) && (aod::femtouniverseparticle::pt < trackparticleconfigs.confHPtPart1) && (aod::femtouniverseparticle::pt > trackparticleconfigs.confLPtPart1);
@@ -163,16 +169,19 @@ struct femtoUniversePairTaskTrackCascadeExtended {
163169 Partition<aod::FDParticles> partsTrackTwoBasic = (aod::femtouniverseparticle::partType == uint8_t (aod::femtouniverseparticle::ParticleType::kTrack )) && (aod::femtouniverseparticle::mAntiLambda == trackparticleconfigs.confChargePart2) && (nabs(aod::femtouniverseparticle::eta) < narrowcuts.confEta) && (aod::femtouniverseparticle::pt < trackparticleconfigs.confHPtPart1) && (aod::femtouniverseparticle::pt > trackparticleconfigs.confLPtPart1);
164170
165171 // / Partition for cascades using extended table
166- Partition<FemtoFullParticles> partsTwoFull = (aod::femtouniverseparticle::partType == uint8_t (aod::femtouniverseparticle::ParticleType::kCascade )) && (aod::femtouniverseparticle::pt < confHPtPart2) && (aod::femtouniverseparticle::pt > confLPtPart2);
172+ Partition<FemtoFullParticles> partsTwoFull = (aod::femtouniverseparticle::partType == uint8_t (aod::femtouniverseparticle::ParticleType::kCascade )) && (aod::femtouniverseparticle::pt < cascPtLimits. confHPtPart2) && (aod::femtouniverseparticle::pt > cascPtLimits. confLPtPart2);
167173
168174 // / Partition for cascades using bitmask (without extended table)
169- Partition<aod::FDParticles> partsTwoBasic = (aod::femtouniverseparticle::partType == uint8_t (aod::femtouniverseparticle::ParticleType::kCascade )) && (aod::femtouniverseparticle::pt < confHPtPart2) && (aod::femtouniverseparticle::pt > confLPtPart2);
170- Partition<aod::FDParticles> partsTwoMCgenBasic = (aod::femtouniverseparticle::partType == uint8_t (aod::femtouniverseparticle::ParticleType::kMCTruthTrack )) && (aod::femtouniverseparticle::pt < confHPtPart2) && (aod::femtouniverseparticle::pt > confLPtPart2);
175+ Partition<aod::FDParticles> partsTwoBasic = (aod::femtouniverseparticle::partType == uint8_t (aod::femtouniverseparticle::ParticleType::kCascade )) && (aod::femtouniverseparticle::pt < cascPtLimits. confHPtPart2) && (aod::femtouniverseparticle::pt > cascPtLimits. confLPtPart2);
176+ Partition<aod::FDParticles> partsTwoMCgenBasic = (aod::femtouniverseparticle::partType == uint8_t (aod::femtouniverseparticle::ParticleType::kMCTruthTrack )) && (aod::femtouniverseparticle::pt < cascPtLimits. confHPtPart2) && (aod::femtouniverseparticle::pt > cascPtLimits. confLPtPart2);
171177
172178 // / Histogramming for track particle
173179 FemtoUniverseParticleHisto<aod::femtouniverseparticle::ParticleType::kTrack , 3 > trackHistoPartOnePos;
174180 FemtoUniverseParticleHisto<aod::femtouniverseparticle::ParticleType::kTrack , 4 > trackHistoPartOneNeg;
175181
182+ // / Histogramming for MC track QA
183+ FemtoUniverseParticleHisto<aod::femtouniverseparticle::ParticleType::kTrack > trackQAHistos;
184+
176185 // / Histogramming for cascade
177186 FemtoUniverseParticleHisto<aod::femtouniverseparticle::ParticleType::kV0Child , 3 > posChildHistos;
178187 FemtoUniverseParticleHisto<aod::femtouniverseparticle::ParticleType::kV0Child , 4 > negChildHistos;
@@ -211,7 +220,7 @@ struct femtoUniversePairTaskTrackCascadeExtended {
211220
212221 bool invMCascade (float invMassXi, float invMassOmega, int cascType)
213222 {
214- return (((cascType == 1 || cascType == 3 ) && (invMassXi > confCascInvMassLowLimit && invMassXi < confCascInvMassUpLimit)) || ((cascType == 0 || cascType == 2 ) && (invMassOmega > confCascInvMassLowLimit && invMassOmega < confCascInvMassUpLimit)));
223+ return (((cascType == 1 || cascType == 3 ) && (invMassXi > cascInvMassCuts. confCascInvMassLowLimit && invMassXi < cascInvMassCuts. confCascInvMassUpLimit )) || ((cascType == 0 || cascType == 2 ) && (invMassOmega > cascInvMassCuts. confCascInvMassLowLimit && invMassOmega < cascInvMassCuts. confCascInvMassUpLimit )));
215224 }
216225
217226 bool isNSigmaTPC (float nsigmaTPCParticle)
@@ -363,6 +372,7 @@ struct femtoUniversePairTaskTrackCascadeExtended {
363372
364373 trackHistoPartOnePos.init (&qaRegistry, confTrkTempFitVarpTBins, confTrkTempFitVarBins, confIsMC, trackparticleconfigs.confTrkPDGCodePartOne );
365374 trackHistoPartOneNeg.init (&qaRegistry, confTrkTempFitVarpTBins, confTrkTempFitVarBins, confIsMC, trackparticleconfigs.confTrkPDGCodePartOne );
375+ trackQAHistos.init (&qaRegistry, confTrkTempFitVarpTBins, confTrkTempFitVarBins, true , trackparticleconfigs.confTrkPDGCodePartOne .value ,true );
366376 posChildHistos.init (&qaRegistry, confChildTempFitVarpTBins, confChildTempFitVarBins, false , 0 , true );
367377 negChildHistos.init (&qaRegistry, confChildTempFitVarpTBins, confChildTempFitVarBins, false , 0 , true );
368378 bachHistos.init (&qaRegistry, confChildTempFitVarpTBins, confChildTempFitVarBins, false , 0 , true , " hBachelor" );
@@ -1490,6 +1500,21 @@ struct femtoUniversePairTaskTrackCascadeExtended {
14901500 doMCReco (parts, mcparts);
14911501 }
14921502 PROCESS_SWITCH (femtoUniversePairTaskTrackCascadeExtended, processMCRecoBitmask, " Process MC reco data for cascades using Bitmask for PID" , false );
1503+
1504+ // / Function used to get QA for MC tracks, mainly for DCAxy Primary, daughter and material
1505+ void processMCTrackQA (const FilteredFDCollision& col, FemtoRecoFullParticles& , o2::aod::FdMCParticles&)
1506+ {
1507+ auto groupPartsOneMC = partsTrackOneFullMc->sliceByCached (aod::femtouniverseparticle::fdCollisionId, col.globalIndex (), cache);
1508+ for (const auto & part : groupPartsOneMC) {
1509+ const float tpcNSigmas[3 ] = {aod::pidtpc_tiny::binning::unPackInTable (part.tpcNSigmaStorePr ()), aod::pidtpc_tiny::binning::unPackInTable (part.tpcNSigmaStorePi ()), aod::pidtpc_tiny::binning::unPackInTable (part.tpcNSigmaStoreKa ())};
1510+ const float tofNSigmas[3 ] = {aod::pidtof_tiny::binning::unPackInTable (part.tofNSigmaStorePr ()), aod::pidtof_tiny::binning::unPackInTable (part.tofNSigmaStorePi ()), aod::pidtof_tiny::binning::unPackInTable (part.tofNSigmaStoreKa ())};
1511+ if (!isNSigmaCombined (part.p (), tpcNSigmas[trackparticleconfigs.confTrackChoicePartOne ], tofNSigmas[trackparticleconfigs.confTrackChoicePartOne ], (part.pidCut () & 512u ) != 0 ))
1512+ continue ;
1513+ trackQAHistos.fillQA <true ,true >(part);
1514+ }
1515+ }
1516+ PROCESS_SWITCH (femtoUniversePairTaskTrackCascadeExtended, processMCTrackQA, " Process MC track QA" , false );
1517+
14931518};
14941519
14951520WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
0 commit comments