@@ -63,6 +63,8 @@ using namespace o2::framework::expressions;
6363using namespace o2 ::constants::physics;
6464using namespace o2 ::constants::math;
6565
66+ constexpr double massHypertriton = 2.99116 ;
67+
6668// Lightweight particle container
6769struct ReducedParticle {
6870 int64_t idPart = 0 ;
@@ -84,8 +86,9 @@ struct CoalescenceTreeProducer {
8486 // Configurable analysis parameters
8587 Configurable<float > zVtxMax{" zVtxMax" , 10 .f , " Maximum |z vertex| in cm" };
8688 Configurable<float > etaMax{" etaMax" , 1 .5f , " Maximum |eta| for generated particles" };
87- Configurable<float > pRhoMax{" pRhoMax" , 1 .0f , " Maximum Jacobi p_rho in GeV/c" };
88- Configurable<float > pLambdaMax{" pLambdaMax" , 1 .0f , " Maximum Jacobi p_lambda in GeV/c" };
89+ Configurable<float > pRhoMax{" pRhoMax" , 0 .5f , " Maximum Jacobi p_rho in GeV/c" };
90+ Configurable<float > pLambdaMax{" pLambdaMax" , 0 .5f , " Maximum Jacobi p_lambda in GeV/c" };
91+ Configurable<float > yMax{" yMax" , 0 .5f , " Maximum rapidity" };
8992
9093 // Output tree storing bound-state candidates
9194 OutputObj<TTree> treeBoundState{" treeBoundState" , OutputObjHandlingPolicy::AnalysisObject};
@@ -173,7 +176,7 @@ struct CoalescenceTreeProducer {
173176
174177 // Apply a momentum-space skim using Jacobi momenta in the candidate rest frame
175178 template <typename ReducedPart>
176- bool passThreeBodySkim (const ReducedPart& b1, const ReducedPart& b2, const ReducedPart& b3)
179+ bool passThreeBodySkim (const ReducedPart& b1, const ReducedPart& b2, const ReducedPart& b3, double massBoundState )
177180 {
178181 // Constituent masses from PDG codes
179182 double m1 = massFromPdg (b1.pdgPart );
@@ -189,10 +192,15 @@ struct CoalescenceTreeProducer {
189192 auto p4B3 = ROOT::Math::PxPyPzMVector{b3.pxPart , b3.pyPart , b3.pzPart , m3};
190193
191194 // Candidate four-momentum
192- auto candidate = p4B1 + p4B2 + p4B3;
195+ ROOT::Math::PxPyPzMVector p4Candidate (p4B1. Px () + p4B2. Px () + p4B3. Px (), p4B1. Py () + p4B2. Py () + p4B3. Py (), p4B1. Pz () + p4B2. Pz () + p4B3. Pz (), massBoundState) ;
193196
197+ // Apply rapidity selection
198+ if (std::abs (p4Candidate.Rapidity ()) > yMax) {
199+ return false ;
200+ }
201+
194202 // Boost to the candidate rest frame
195- auto betaCandidate = candidate .BoostToCM ();
203+ auto betaCandidate = p4Candidate .BoostToCM ();
196204 ROOT::Math::Boost boostToRest (betaCandidate);
197205
198206 // Constituent momenta in the candidate rest frame
@@ -298,7 +306,7 @@ struct CoalescenceTreeProducer {
298306 // Skip mixed-sign combinations
299307 if (!isMatter && !isAntimatter)
300308 continue ;
301- const bool passSkim = passThreeBodySkim (proton, neutron, lambda);
309+ const bool passSkim = passThreeBodySkim (proton, neutron, lambda, massHypertriton );
302310
303311 if (isMatter && passSkim)
304312 nCandidatesMatter++;
@@ -332,7 +340,7 @@ struct CoalescenceTreeProducer {
332340 continue ;
333341
334342 // Apply momentum-space selection
335- const bool passSkim = passThreeBodySkim (proton, neutron, lambda);
343+ const bool passSkim = passThreeBodySkim (proton, neutron, lambda, massHypertriton );
336344 if (!passSkim)
337345 continue ;
338346
0 commit comments