@@ -61,13 +61,22 @@ struct femtoUniverseEfficiencyBase {
6161 Configurable<float > ConfNsigmaTPCPion{" ConfNsigmaTPCPion" , 3.0 , " TPC Pion Sigma for momentum < ConfMomPion" };
6262 } ConfBothTracks;
6363
64- // Lambda cuts
64+ // / Lambda cuts
6565 Configurable<float > ConfV0InvMassLowLimit{" ConfV0InvV0MassLowLimit" , 1.10 , " Lower limit of the V0 invariant mass" };
6666 Configurable<float > ConfV0InvMassUpLimit{" ConfV0InvV0MassUpLimit" , 1.13 , " Upper limit of the V0 invariant mass" };
6767
68- // Kaon configurables
68+ // / Kaon configurable
6969 Configurable<bool > IsKaonRun2{" IsKaonRun2" , false , " Enable kaon selection used in Run2" }; // to check consistency with Run2 results
7070
71+ // / Deuteron configurables
72+ struct : o2::framework::ConfigurableGroup {
73+ Configurable<float > ConfNsigmaTPCDe{" ConfNsigmaTPCDe" , 2 .0f , " TPC Deuteron Sigma for momentum < ConfTOFpMinDe" };
74+ Configurable<float > ConfNsigmaTOFDe{" ConfNsigmaTOFDe" , 2 .0f , " TOF Deuteron Sigma" };
75+ Configurable<float > ConfTOFpMinDe{" ConfTOFpMinDe" , 0 .5f , " Min. momentum for deuterons for which TOF is required for PID" };
76+ Configurable<float > ConfPLowDe{" ConfPLowDe" , 0 .8f , " Lower limit for momentum for deuterons" };
77+ Configurable<float > ConfPHighDe{" ConfPHighDe" , 1 .8f , " Higher limit for momentum for deuterons" };
78+ } deuteronconfigs;
79+
7180 // / Particle 1
7281 Configurable<int32_t > ConfPDGCodePartOne{" ConfPDGCodePartOne" , 2212 , " Particle 1 - PDG code" };
7382 Configurable<uint> ConfParticleTypePartOne{" ConfParticleTypePartOne" , aod::femtouniverseparticle::ParticleType::kTrack , " Particle 1 - particle type: 0 - track, 2 - V0, 6 - phi" };
@@ -239,7 +248,20 @@ struct femtoUniverseEfficiencyBase {
239248 return false ;
240249 }
241250
242- bool IsParticleNSigma (int pdgCode, float mom, float nsigmaTPCPr, float nsigmaTOFPr, float nsigmaTPCPi, float nsigmaTOFPi, float nsigmaTPCK, float nsigmaTOFK)
251+ bool IsDeuteronNSigma (float mom, float nsigmaTPCDe, float nsigmaTOFDe)
252+ {
253+ if (mom > deuteronconfigs.ConfPLowDe && mom < deuteronconfigs.ConfPHighDe ) {
254+ if (mom < deuteronconfigs.ConfTOFpMinDe ) {
255+ return (TMath::Abs (nsigmaTPCDe) < deuteronconfigs.ConfNsigmaTPCDe );
256+ } else {
257+ return (TMath::Abs (nsigmaTOFDe) < deuteronconfigs.ConfNsigmaTOFDe && (TMath::Abs (nsigmaTPCDe) < deuteronconfigs.ConfNsigmaTPCDe ));
258+ }
259+ } else {
260+ return false ;
261+ }
262+ }
263+
264+ bool IsParticleNSigma (int pdgCode, float mom, float nsigmaTPCPr, float nsigmaTOFPr, float nsigmaTPCPi, float nsigmaTOFPi, float nsigmaTPCK, float nsigmaTOFK, float nsigmaTPCDe, float nsigmaTOFDe)
243265 {
244266 switch (pdgCode) {
245267 case 2212 : // Proton
@@ -254,6 +276,10 @@ struct femtoUniverseEfficiencyBase {
254276 case -321 : // Kaon-
255277 return IsKaonNSigma (mom, nsigmaTPCK, nsigmaTOFK);
256278 break ;
279+ case 1000010020 : // Deuteron
280+ case -1000010020 : // Antideuteron
281+ return IsDeuteronNSigma (mom, nsigmaTPCDe, nsigmaTOFDe);
282+ break ;
257283 default :
258284 return false ;
259285 }
@@ -310,7 +336,7 @@ struct femtoUniverseEfficiencyBase {
310336 {
311337 // / Histogramming same event
312338 for (auto & part : grouppartsOneMCRec) {
313- if (part.partType () != ConfParticleTypePartOne || part.sign () != ConfChargePart1 || !IsParticleNSigma (ConfPDGCodePartOne, part.p (), trackCuts.getNsigmaTPC (part, o2::track::PID::Proton), trackCuts.getNsigmaTOF (part, o2::track::PID::Proton), trackCuts.getNsigmaTPC (part, o2::track::PID::Pion), trackCuts.getNsigmaTOF (part, o2::track::PID::Pion), trackCuts.getNsigmaTPC (part, o2::track::PID::Kaon), trackCuts.getNsigmaTOF (part, o2::track::PID::Kaon))) {
339+ if (part.partType () != ConfParticleTypePartOne || part.sign () != ConfChargePart1 || !IsParticleNSigma (ConfPDGCodePartOne, part.p (), trackCuts.getNsigmaTPC (part, o2::track::PID::Proton), trackCuts.getNsigmaTOF (part, o2::track::PID::Proton), trackCuts.getNsigmaTPC (part, o2::track::PID::Pion), trackCuts.getNsigmaTOF (part, o2::track::PID::Pion), trackCuts.getNsigmaTPC (part, o2::track::PID::Kaon), trackCuts.getNsigmaTOF (part, o2::track::PID::Kaon), trackCuts. getNsigmaTPC (part, o2::track::PID::Deuteron), trackCuts. getNsigmaTOF (part, o2::track::PID::Deuteron) )) {
314340 continue ;
315341 }
316342 trackHistoPartOneRec.fillQA <isMC, isDebug>(part);
@@ -326,7 +352,7 @@ struct femtoUniverseEfficiencyBase {
326352
327353 if (!ConfIsSame) {
328354 for (auto & part : grouppartsTwoMCRec) {
329- if (part.partType () != ConfParticleTypePartTwo || part.sign () != ConfChargePart2 || !IsParticleNSigma (ConfPDGCodePartTwo, part.p (), trackCuts.getNsigmaTPC (part, o2::track::PID::Proton), trackCuts.getNsigmaTOF (part, o2::track::PID::Proton), trackCuts.getNsigmaTPC (part, o2::track::PID::Pion), trackCuts.getNsigmaTOF (part, o2::track::PID::Pion), trackCuts.getNsigmaTPC (part, o2::track::PID::Kaon), trackCuts.getNsigmaTOF (part, o2::track::PID::Kaon))) {
355+ if (part.partType () != ConfParticleTypePartTwo || part.sign () != ConfChargePart2 || !IsParticleNSigma (ConfPDGCodePartTwo, part.p (), trackCuts.getNsigmaTPC (part, o2::track::PID::Proton), trackCuts.getNsigmaTOF (part, o2::track::PID::Proton), trackCuts.getNsigmaTPC (part, o2::track::PID::Pion), trackCuts.getNsigmaTOF (part, o2::track::PID::Pion), trackCuts.getNsigmaTPC (part, o2::track::PID::Kaon), trackCuts.getNsigmaTOF (part, o2::track::PID::Kaon), trackCuts. getNsigmaTPC (part, o2::track::PID::Deuteron), trackCuts. getNsigmaTOF (part, o2::track::PID::Deuteron) )) {
330356 continue ;
331357 }
332358
@@ -354,7 +380,7 @@ struct femtoUniverseEfficiencyBase {
354380 { // part1 is track and part2 is Phi
355381
356382 for (auto & part : grouppartsOneMCRec) {
357- if (part.partType () != ConfParticleTypePartOne || part.sign () != ConfChargePart1 || !IsParticleNSigma (ConfPDGCodePartOne, part.p (), trackCuts.getNsigmaTPC (part, o2::track::PID::Proton), trackCuts.getNsigmaTOF (part, o2::track::PID::Proton), trackCuts.getNsigmaTPC (part, o2::track::PID::Pion), trackCuts.getNsigmaTOF (part, o2::track::PID::Pion), trackCuts.getNsigmaTPC (part, o2::track::PID::Kaon), trackCuts.getNsigmaTOF (part, o2::track::PID::Kaon))) {
383+ if (part.partType () != ConfParticleTypePartOne || part.sign () != ConfChargePart1 || !IsParticleNSigma (ConfPDGCodePartOne, part.p (), trackCuts.getNsigmaTPC (part, o2::track::PID::Proton), trackCuts.getNsigmaTOF (part, o2::track::PID::Proton), trackCuts.getNsigmaTPC (part, o2::track::PID::Pion), trackCuts.getNsigmaTOF (part, o2::track::PID::Pion), trackCuts.getNsigmaTPC (part, o2::track::PID::Kaon), trackCuts.getNsigmaTOF (part, o2::track::PID::Kaon), trackCuts. getNsigmaTPC (part, o2::track::PID::Deuteron), trackCuts. getNsigmaTOF (part, o2::track::PID::Deuteron) )) {
358384 continue ;
359385 }
360386 trackHistoPartOneRec.fillQA <isMC, isDebug>(part);
@@ -482,7 +508,7 @@ struct femtoUniverseEfficiencyBase {
482508
483509 // / Histogramming same event
484510 for (auto & part : grouppartsOneMCRec) {
485- if (part.partType () != ConfParticleTypePartOne || part.sign () != ConfChargePart1 || !IsParticleNSigma (ConfPDGCodePartOne, part.p (), trackCuts.getNsigmaTPC (part, o2::track::PID::Proton), trackCuts.getNsigmaTOF (part, o2::track::PID::Proton), trackCuts.getNsigmaTPC (part, o2::track::PID::Pion), trackCuts.getNsigmaTOF (part, o2::track::PID::Pion), trackCuts.getNsigmaTPC (part, o2::track::PID::Kaon), trackCuts.getNsigmaTOF (part, o2::track::PID::Kaon))) {
511+ if (part.partType () != ConfParticleTypePartOne || part.sign () != ConfChargePart1 || !IsParticleNSigma (ConfPDGCodePartOne, part.p (), trackCuts.getNsigmaTPC (part, o2::track::PID::Proton), trackCuts.getNsigmaTOF (part, o2::track::PID::Proton), trackCuts.getNsigmaTPC (part, o2::track::PID::Pion), trackCuts.getNsigmaTOF (part, o2::track::PID::Pion), trackCuts.getNsigmaTPC (part, o2::track::PID::Kaon), trackCuts.getNsigmaTOF (part, o2::track::PID::Kaon), trackCuts. getNsigmaTPC (part, o2::track::PID::Deuteron), trackCuts. getNsigmaTOF (part, o2::track::PID::Deuteron) )) {
486512 continue ;
487513 }
488514
0 commit comments