@@ -111,6 +111,7 @@ struct FemtoUniversePairTaskTrackV0Helicity {
111111 Configurable<int > confPDGCodeV0{" confPDGCodeV0" , 3122 , " V0 -- PDG code" };
112112 Configurable<int > confPDGCodePosChild{" confPDGCodePosChild" , 2212 , " Positive Child -- PDG code" };
113113 Configurable<int > confPDGCodeNegChild{" confPDGCodeNegChild" , 211 , " Negative Child -- PDG code" };
114+ Configurable<bool > confSeparateInvMassCheck{" confSeparateInvMassCheck" , false , " Apply additional cut separate for mLambda and mAntiLambda" };
114115 } V0configs;
115116
116117 // / Partitioning for particle 2
@@ -159,12 +160,13 @@ struct FemtoUniversePairTaskTrackV0Helicity {
159160 ConfigurableAxis confmTBins3D{" confmTBins3D" , {VARIABLE_WIDTH, 1 .02f , 1 .14f , 1 .20f , 1 .26f , 1 .38f , 1 .56f , 1 .86f , 4 .50f }, " mT binning for the 3D plot: k* vs multiplicity vs mT (set <confUse3D> to true in order to use)" };
160161 ConfigurableAxis confMultBins3D{" confMultBins3D" , {VARIABLE_WIDTH, 0 .0f , 20 .0f , 30 .0f , 40 .0f , 99999 .0f }, " multiplicity binning for the 3D plot: k* vs multiplicity vs mT (set <confUse3D> to true in order to use)" };
161162
162- // / Helicity ranges (approximate)
163+ // / Helicity ranges and configurables
163164 Configurable<bool > cfgProcessHel{" cfgProcessHel" , true , " Process particle pairs from all helicity ranges" };
164- Configurable<bool > cfgProcessHel1{" cfgProcessHel1" , false , " Process particle pairs from the helicity range 1" }; // 1.0 > cosineTheta >= 0.1
165+ Configurable<bool > cfgProcessHel1{" cfgProcessHel1" , false , " Process particle pairs from the helicity range 1" }; // 1.0 >= cosineTheta >= 0.1
165166 Configurable<bool > cfgProcessHel2{" cfgProcessHel2" , false , " Process particle pairs from the helicity range 2" }; // 0.1 > cosineTheta >= -0.1
166167 Configurable<bool > cfgProcessHel3{" cfgProcessHel3" , false , " Process particle pairs from the helicity range 3" }; // -0.1 > cosineTheta >= -0.5
167168 Configurable<bool > cfgProcessHel4{" cfgProcessHel4" , false , " Process particle pairs from the helicity range 4" }; // -0.5 > cosineTheta >= -1.0
169+ ConfigurableAxis confInvMassMotherpTBinsHel{" confInvMassMotherpTBinsHel" , {5 , 0 , 5 }, " pT binning in the pT vs. InvMassMother plot for helicity" };
168170
169171 // / Efficiency
170172 Configurable<std::string> confLocalEfficiency{" confLocalEfficiency" , " " , " Local path to efficiency .root file" };
@@ -218,10 +220,17 @@ struct FemtoUniversePairTaskTrackV0Helicity {
218220 }
219221 }
220222
221- bool invMLambda (float invMassLambda, float invMassAntiLambda)
223+ bool invMLambda (float invMassLambda, float invMassAntiLambda, int V0Type )
222224 {
223- if ((invMassLambda < V0configs.confV0InvMassLowLimit || invMassLambda > V0configs.confV0InvMassUpLimit ) && (invMassAntiLambda < V0configs.confV0InvMassLowLimit || invMassAntiLambda > V0configs.confV0InvMassUpLimit )) {
224- return false ;
225+ if (V0configs.confSeparateInvMassCheck ) {
226+ const float pMass = V0Type ? invMassAntiLambda : invMassLambda;
227+ if (pMass < V0configs.confV0InvMassLowLimit || pMass > V0configs.confV0InvMassUpLimit ) {
228+ return false ;
229+ }
230+ } else {
231+ if ((invMassLambda < V0configs.confV0InvMassLowLimit || invMassLambda > V0configs.confV0InvMassUpLimit ) && (invMassAntiLambda < V0configs.confV0InvMassLowLimit || invMassAntiLambda > V0configs.confV0InvMassUpLimit )) {
232+ return false ;
233+ }
225234 }
226235 return true ;
227236 }
@@ -287,6 +296,10 @@ struct FemtoUniversePairTaskTrackV0Helicity {
287296 thetaRegistry.add (" Theta/NegativeChild/hThetaPt" , " ; p_{T} (GeV/#it{c}); cos(#theta)" , kTH2F , {{100 , 0 , 10 }, {110 , -1.1 , 1.1 }});
288297 thetaRegistry.add (" Theta/NegativeChild/hThetaEta" , " ; #eta; cos(#theta)" , kTH2F , {{100 , -1 , 1 }, {110 , -1.1 , 1.1 }});
289298 thetaRegistry.add (" Theta/NegativeChild/hThetaPhi" , " ; #phi; cos(#theta)" , kTH2F , {{100 , -1 , 7 }, {110 , -1.1 , 1.1 }});
299+ thetaRegistry.add (" Theta/Mother/hInvMassMotherHel1" , " ; p_{T}, M_{#Lambda};" , kTH2F , {confInvMassMotherpTBinsHel, {100 , 0.5 , 1.5 }});
300+ thetaRegistry.add (" Theta/Mother/hInvMassMotherHel2" , " ; p_{T}, M_{#Lambda};" , kTH2F , {confInvMassMotherpTBinsHel, {100 , 0.5 , 1.5 }});
301+ thetaRegistry.add (" Theta/Mother/hInvMassMotherHel3" , " ; p_{T}, M_{#Lambda};" , kTH2F , {confInvMassMotherpTBinsHel, {100 , 0.5 , 1.5 }});
302+ thetaRegistry.add (" Theta/Mother/hInvMassMotherHel4" , " ; p_{T}, M_{#Lambda};" , kTH2F , {confInvMassMotherpTBinsHel, {100 , 0.5 , 1.5 }});
290303
291304 // / MC Truth
292305 registryMCtruth.add (" plus/MCtruthLambda" , " MC truth Lambdas;#it{p}_{T} (GeV/c); #eta" , {HistType::kTH2F , {{500 , 0 , 5 }, {400 , -1.0 , 1.0 }}});
@@ -427,7 +440,7 @@ struct FemtoUniversePairTaskTrackV0Helicity {
427440
428441 // / Histogramming same event
429442 for (const auto & part : groupPartsTwo) {
430- if (!invMLambda (part.mLambda (), part.mAntiLambda ()))
443+ if (!invMLambda (part.mLambda (), part.mAntiLambda (), V0configs. confV0Type1 ))
431444 continue ;
432445 const auto & posChild = parts.iteratorAt (part.index () - 2 );
433446 const auto & negChild = parts.iteratorAt (part.index () - 1 );
@@ -453,6 +466,15 @@ struct FemtoUniversePairTaskTrackV0Helicity {
453466 thetaRegistry.fill (HIST (" Theta/NegativeChild/hThetaPt" ), negChild.pt (), cosineTheta);
454467 thetaRegistry.fill (HIST (" Theta/NegativeChild/hThetaEta" ), negChild.eta (), cosineTheta);
455468 thetaRegistry.fill (HIST (" Theta/NegativeChild/hThetaPhi" ), negChild.phi (), cosineTheta);
469+
470+ if (cosineTheta <= 1.0 && cosineTheta >= 0.1 )
471+ thetaRegistry.fill (HIST (" Theta/Mother/hInvMassMotherHel1" ), part.pt (), part.mLambda ());
472+ else if (cosineTheta < 0.1 && cosineTheta >= -0.1 )
473+ thetaRegistry.fill (HIST (" Theta/Mother/hInvMassMotherHel2" ), part.pt (), part.mLambda ());
474+ else if (cosineTheta < -0.1 && cosineTheta >= -0.5 )
475+ thetaRegistry.fill (HIST (" Theta/Mother/hInvMassMotherHel3" ), part.pt (), part.mLambda ());
476+ else if (cosineTheta < -0.5 && cosineTheta >= -1 )
477+ thetaRegistry.fill (HIST (" Theta/Mother/hInvMassMotherHel4" ), part.pt (), part.mLambda ());
456478 }
457479
458480 for (const auto & part : groupPartsOne) {
@@ -476,7 +498,7 @@ struct FemtoUniversePairTaskTrackV0Helicity {
476498 // / Now build the combinations
477499 for (const auto & [p1, p2] : combinations (CombinationsFullIndexPolicy (groupPartsOne, groupPartsTwo))) {
478500 // Lambda invariant mass cut
479- if (!invMLambda (p2.mLambda (), p2.mAntiLambda ()))
501+ if (!invMLambda (p2.mLambda (), p2.mAntiLambda (), V0configs. confV0Type1 ))
480502 continue ;
481503 // / PID using stored binned nsigma
482504 if (!isParticleCombined (p1, trackconfigs.confTrackChoicePartOne ))
@@ -517,7 +539,7 @@ struct FemtoUniversePairTaskTrackV0Helicity {
517539 }
518540
519541 case 1 : {
520- if (cosineTheta < 1.0 && cosineTheta >= 0.1 )
542+ if (cosineTheta <= 1.0 && cosineTheta >= 0.1 )
521543 sameEventContHel1.setPair <false >(p1, p2, multCol, confUse3D, weight);
522544
523545 break ;
@@ -592,7 +614,7 @@ struct FemtoUniversePairTaskTrackV0Helicity {
592614
593615 // / Histogramming same event
594616 for (const auto & part : groupPartsTwo) {
595- if (!invMLambda (part.mLambda (), part.mAntiLambda ()))
617+ if (!invMLambda (part.mLambda (), part.mAntiLambda (), V0configs. confV0Type2 ))
596618 continue ;
597619 const auto & posChild = parts.iteratorAt (part.index () - 2 );
598620 const auto & negChild = parts.iteratorAt (part.index () - 1 );
@@ -613,10 +635,10 @@ struct FemtoUniversePairTaskTrackV0Helicity {
613635
614636 auto pairProcessFunc = [&](auto & p1, auto & p2) -> void {
615637 // Lambda invariant mass cut for p1
616- if (!invMLambda (p1.mLambda (), p1.mAntiLambda ()))
638+ if (!invMLambda (p1.mLambda (), p1.mAntiLambda (), V0configs. confV0Type2 ))
617639 return ;
618640 // Lambda invariant mass cut for p2
619- if (!invMLambda (p2.mLambda (), p2.mAntiLambda ()))
641+ if (!invMLambda (p2.mLambda (), p2.mAntiLambda (), V0configs. confV0Type2 ))
620642 return ;
621643 // track cleaning
622644 if (!pairCleanerV0.isCleanPair (p1, p2, parts)) {
@@ -773,7 +795,7 @@ struct FemtoUniversePairTaskTrackV0Helicity {
773795
774796 for (const auto & [p1, p2] : combinations (CombinationsFullIndexPolicy (groupPartsOne, groupPartsTwo))) {
775797 // Lambda invariant mass cut
776- if (!invMLambda (p2.mLambda (), p2.mAntiLambda ()))
798+ if (!invMLambda (p2.mLambda (), p2.mAntiLambda (), V0configs. confV0Type1 ))
777799 continue ;
778800 // / PID using stored binned nsigma
779801 if (!isParticleCombined (p1, trackconfigs.confTrackChoicePartOne ))
@@ -815,7 +837,7 @@ struct FemtoUniversePairTaskTrackV0Helicity {
815837 }
816838
817839 case 1 : {
818- if (cosineTheta < 1.0 && cosineTheta >= 0.1 )
840+ if (cosineTheta <= 1.0 && cosineTheta >= 0.1 )
819841 mixedEventContHel1.setPair <false >(p1, p2, multCol, confUse3D, weight);
820842
821843 break ;
@@ -907,11 +929,11 @@ struct FemtoUniversePairTaskTrackV0Helicity {
907929
908930 for (const auto & [p1, p2] : combinations (CombinationsFullIndexPolicy (groupPartsOne, groupPartsTwo))) {
909931 // Lambda invariant mass cut for p1
910- if (!invMLambda (p1.mLambda (), p1.mAntiLambda ())) {
932+ if (!invMLambda (p1.mLambda (), p1.mAntiLambda (), V0configs. confV0Type2 )) {
911933 continue ;
912934 }
913935 // Lambda invariant mass cut for p2
914- if (!invMLambda (p2.mLambda (), p2.mAntiLambda ())) {
936+ if (!invMLambda (p2.mLambda (), p2.mAntiLambda (), V0configs. confV0Type2 )) {
915937 continue ;
916938 }
917939
0 commit comments