@@ -47,14 +47,22 @@ struct heptaquark {
4747 Configurable<int > cfgPIDStrategy{" cfgPIDStrategy" , 3 , " PID strategy 1" };
4848 Configurable<float > cfgPIDPrPi{" cfgPIDPrPi" , 3 , " PID selection for proton and pion" };
4949
50- Configurable<float > minPhiMass{ " minPhiMass " , 1.01 , " Minimum phi mass" };
51- Configurable<float > maxPhiMass{ " maxPhiMass " , 1.03 , " Maximum phi mass" };
50+ Configurable<float > cfgMinPhiMass{ " cfgMinPhiMass " , 1.01 , " Minimum phi mass" };
51+ Configurable<float > cfgMaxPhiMass{ " cfgMaxPhiMass " , 1.03 , " Maximum phi mass" };
5252
53- Configurable<float > minLambdaMass{ " minLambdaMass " , 1.1 , " Minimum lambda mass" };
54- Configurable<float > maxLambdaMass{ " maxLambdaMass " , 1.13 , " Maximum lambda mass" };
53+ Configurable<float > cfgMinLambdaMass{ " cfgMinLambdaMass " , 1.1 , " Minimum lambda mass" };
54+ Configurable<float > cfgMaxLambdaMass{ " cfgMaxLambdaMass " , 1.13 , " Maximum lambda mass" };
5555
56- Configurable<float > cutNsigmaTPC{" cutNsigmaTPC" , 2.5 , " nsigma cut TPC" };
57- Configurable<float > cutNsigmaTOF{" cutNsigmaTOF" , 3.0 , " nsigma cut TOF" };
56+ Configurable<float > cfgNsigmaTPC{" cfgNsigmaTPC" , 2.5 , " nsigma cut TPC" };
57+ Configurable<float > cfgNsigmaTOF{" cfgNsigmaTOF" , 3.0 , " nsigma cut TOF" };
58+
59+ Configurable<bool > cfgSelectHQ{" cfgSelectHQ" , true , " switch to select HQ" };
60+
61+ Configurable<float > cfgMinPhiPt{" cfgMinPhiPt" , 0.2 , " Minimum phi pt" };
62+ Configurable<float > cfgMinLambdaPt{" cfgMinLambdaPt" , 0.5 , " Minimum lambda pt" };
63+
64+ Configurable<float > cfgSoftFraction{" cfgSoftFraction" , 0.01 , " Minimum allowed softest fraction" };
65+ Configurable<float > cfgCollinear{" cfgCollinear" , 0.98 , " Maximum allowed collinear selection" };
5866
5967 ConfigurableAxis massAxis{" massAxis" , {600 , 2.8 , 3.4 }, " Invariant mass axis" };
6068 ConfigurableAxis ptAxis{" ptAxis" , {VARIABLE_WIDTH, 0.2 , 0.5 , 1.0 , 1.5 , 2.0 , 2.5 , 3.0 , 4.0 , 5.0 , 6.5 , 8.0 , 10.0 , 100.0 }, " Transverse momentum bins" };
@@ -95,105 +103,115 @@ struct heptaquark {
95103 {
96104 if (PIDStrategy == 0 ) {
97105 if (TOFHit != 1 ) {
98- if (TMath::Abs (nsigmaTPC) < cutNsigmaTPC ) {
106+ if (TMath::Abs (nsigmaTPC) < cfgNsigmaTPC ) {
99107 return true ;
100108 }
101109 }
102110 if (TOFHit == 1 ) {
103- if (TMath::Abs (nsigmaTOF) < cutNsigmaTOF ) {
111+ if (TMath::Abs (nsigmaTOF) < cfgNsigmaTOF ) {
104112 return true ;
105113 }
106114 }
107115 }
108116 if (PIDStrategy == 1 ) {
109117 if (ptcand < 0.5 ) {
110- if (TOFHit != 1 && TMath::Abs (nsigmaTPC) < cutNsigmaTPC ) {
118+ if (TOFHit != 1 && TMath::Abs (nsigmaTPC) < cfgNsigmaTPC ) {
111119 return true ;
112120 }
113- if (TOFHit == 1 && TMath::Abs (nsigmaTOF) < cutNsigmaTOF ) {
121+ if (TOFHit == 1 && TMath::Abs (nsigmaTOF) < cfgNsigmaTOF ) {
114122 return true ;
115123 }
116124 }
117125 if (ptcand >= 0.5 ) {
118- if (TOFHit == 1 && TMath::Abs (nsigmaTOF) < cutNsigmaTOF ) {
126+ if (TOFHit == 1 && TMath::Abs (nsigmaTOF) < cfgNsigmaTOF ) {
119127 return true ;
120128 }
121129 }
122130 }
123131 if (PIDStrategy == 2 ) {
124132 if (ptcand < 0.5 ) {
125- if (TOFHit != 1 && TMath::Abs (nsigmaTPC) < cutNsigmaTPC ) {
133+ if (TOFHit != 1 && TMath::Abs (nsigmaTPC) < cfgNsigmaTPC ) {
126134 return true ;
127135 }
128- if (TOFHit == 1 && TMath::Abs (nsigmaTOF) < cutNsigmaTOF ) {
136+ if (TOFHit == 1 && TMath::Abs (nsigmaTOF) < cfgNsigmaTOF ) {
129137 return true ;
130138 }
131139 }
132140 if (ptcand >= 0.5 && ptcand < 1.2 ) {
133- if (TOFHit == 1 && TMath::Abs (nsigmaTOF) < cutNsigmaTOF ) {
141+ if (TOFHit == 1 && TMath::Abs (nsigmaTOF) < cfgNsigmaTOF ) {
134142 return true ;
135143 }
136- if (TOFHit != 1 && nsigmaTPC > -1.5 && nsigmaTPC < cutNsigmaTPC ) {
144+ if (TOFHit != 1 && nsigmaTPC > -1.5 && nsigmaTPC < cfgNsigmaTPC ) {
137145 return true ;
138146 }
139147 }
140148 if (ptcand >= 1.2 ) {
141- if (TOFHit == 1 && TMath::Abs (nsigmaTOF) < cutNsigmaTOF ) {
149+ if (TOFHit == 1 && TMath::Abs (nsigmaTOF) < cfgNsigmaTOF ) {
142150 return true ;
143151 }
144- if (TOFHit != 1 && TMath::Abs (nsigmaTPC) < cutNsigmaTPC ) {
152+ if (TOFHit != 1 && TMath::Abs (nsigmaTPC) < cfgNsigmaTPC ) {
145153 return true ;
146154 }
147155 }
148156 }
149157 if (PIDStrategy == 3 ) {
150158 if (ptcand < 0.5 ) {
151- if (TOFHit != 1 && TMath::Abs (nsigmaTPC) < cutNsigmaTPC ) {
159+ if (TOFHit != 1 && TMath::Abs (nsigmaTPC) < cfgNsigmaTPC ) {
152160 return true ;
153161 }
154- if (TOFHit == 1 && TMath::Abs (nsigmaTOF) < cutNsigmaTOF ) {
162+ if (TOFHit == 1 && TMath::Abs (nsigmaTOF) < cfgNsigmaTOF ) {
155163 return true ;
156164 }
157165 }
158166 if (ptcand >= 0.5 && ptcand < 1.2 ) {
159- if (TOFHit == 1 && TMath::Abs (nsigmaTOF) < cutNsigmaTOF ) {
167+ if (TOFHit == 1 && TMath::Abs (nsigmaTOF) < cfgNsigmaTOF ) {
160168 return true ;
161169 }
162170 }
163171 if (ptcand >= 1.2 ) {
164- if (TOFHit == 1 && TMath::Abs (nsigmaTOF) < cutNsigmaTOF ) {
172+ if (TOFHit == 1 && TMath::Abs (nsigmaTOF) < cfgNsigmaTOF ) {
165173 return true ;
166174 }
167- if (TOFHit != 1 && TMath::Abs (nsigmaTPC) < cutNsigmaTPC ) {
175+ if (TOFHit != 1 && TMath::Abs (nsigmaTPC) < cfgNsigmaTPC ) {
168176 return true ;
169177 }
170178 }
171179 }
172180 return false ;
173181 }
174182
175- template <typename V01, typename V02>
176- ROOT::Math::XYZVector getDCAofV0V0 (V01 const & v01, V02 const & v02)
177- {
178- ROOT::Math::XYZVector v01pos, v02pos, v01mom, v02mom;
179- v01pos.SetXYZ (v01.x (), v01.y (), v01.z ());
180- v02pos.SetXYZ (v02.x (), v02.y (), v02.z ());
181- v01mom.SetXYZ (v01.px (), v01.py (), v01.pz ());
182- v02mom.SetXYZ (v02.px (), v02.py (), v02.pz ());
183-
184- ROOT::Math::XYZVector posdiff = v02pos - v01pos;
185- ROOT::Math::XYZVector cross = v01mom.Cross (v02mom);
186- ROOT::Math::XYZVector dcaVec = (posdiff.Dot (cross) / cross.Mag2 ()) * cross;
187- return dcaVec;
188- }
189-
190- template <typename V01, typename V02>
191- float getCPA (V01 const & v01, V02 const & v02)
183+ template <typename HQ1, typename HQ2, typename HQ3>
184+ int selectHQ (HQ1 const & hq1, HQ2 const & hq2, HQ3 const & hq3)
192185 {
193- ROOT::Math::XYZVector v01mom, v02mom;
194- v01mom.SetXYZ (v01.px () / v01.p (), v01.py () / v01.p (), v01.pz () / v01.p ());
195- v02mom.SetXYZ (v02.px () / v02.p (), v02.py () / v02.p (), v02.pz () / v02.p ());
196- return v01mom.Dot (v02mom);
186+ int selection = 0 ;
187+ if (hq1.Pt () < cfgMinPhiPt || hq2.Pt () < cfgMinPhiPt || hq3.Pt () < cfgMinLambdaPt)
188+ selection += 1 ;
189+
190+ double sumE = hq1.E () + hq2.E () + hq3.E ();
191+ double emin = std::min ({hq1.E (), hq2.E (), hq3.E ()});
192+ double fmin = emin / std::max (1e-9 , sumE);
193+ if (fmin < cfgSoftFraction)
194+ selection += 2 ;
195+
196+ auto ex = hq1 + hq2 + hq3;
197+ TVector3 boost = -ex.BoostVector ();
198+ auto hqphipair_boost = hq1 + hq2;
199+ auto hqlambda_boost = hq3;
200+ hqphipair_boost.Boost (boost);
201+ hqlambda_boost.Boost (boost);
202+ double cosHel = hqlambda_boost.Vect ().Dot (hqphipair_boost.Vect ()) / (hqlambda_boost.Vect ().Mag () * hqphipair_boost.Vect ().Mag ());
203+ if (std::abs (cosHel) > cfgCollinear)
204+ selection += 4 ;
205+ /*
206+ ROOT::Math::XYZVector rPV(col.posX(), col.posY(), col.posZ());
207+ ROOT::Math::XYZVector rSV(hq3.hqx(), hq3.hqy(), hq3.hqz());
208+ ROOT::Math::XYZVector L = rSV - rPV;
209+ ROOT::Math::XYZVector exMom(ex.Px(), ex.Py(), ex.Pz());
210+ double cosPoint = L.Dot(exMom) / (L.R() * pEx.R() + 1e-9);
211+ if (cosPoint < cfgCosPoint)
212+ return 8;
213+ */
214+ return selection;
197215 }
198216
199217 ROOT::Math::PxPyPzMVector DauVec1, DauVec2;
@@ -214,7 +232,7 @@ struct heptaquark {
214232 if (hqtrackd1.hqId () != 333 )
215233 continue ;
216234
217- if (hqtrackd1.hqMass () < minPhiMass || hqtrackd1.hqMass () > maxPhiMass )
235+ if (hqtrackd1.hqMass () < cfgMinPhiMass || hqtrackd1.hqMass () > cfgMaxPhiMass )
218236 continue ;
219237
220238 DauVec1 = ROOT::Math::PxPyPzMVector (hqtrackd1.hqd1Px (), hqtrackd1.hqd1Py (), hqtrackd1.hqd1Pz (), massKa);
@@ -246,7 +264,7 @@ struct heptaquark {
246264 if (hqtrackd2.hqId () != 333 )
247265 continue ;
248266
249- if (hqtrackd2.hqMass () < minPhiMass || hqtrackd2.hqMass () > maxPhiMass )
267+ if (hqtrackd2.hqMass () < cfgMinPhiMass || hqtrackd2.hqMass () > cfgMaxPhiMass )
250268 continue ;
251269
252270 DauVec1 = ROOT::Math::PxPyPzMVector (hqtrackd2.hqd1Px (), hqtrackd2.hqd1Py (), hqtrackd2.hqd1Pz (), massKa);
@@ -278,7 +296,7 @@ struct heptaquark {
278296 if (std::abs (hqtrackd3.hqId ()) != 3122 )
279297 continue ;
280298
281- if (hqtrackd3.hqMass () < minLambdaMass || hqtrackd3.hqMass () > maxLambdaMass )
299+ if (hqtrackd3.hqMass () < cfgMinLambdaMass || hqtrackd3.hqMass () > cfgMaxLambdaMass )
282300 continue ;
283301
284302 int isLambda = static_cast <int >(hqtrackd3.hqId () < 0 );
@@ -321,6 +339,9 @@ struct heptaquark {
321339 HQ12 = HQ1 + HQ2;
322340 HQ13 = HQ1 + HQ3;
323341
342+ if (cfgSelectHQ && selectHQ (HQ1, HQ2, HQ3))
343+ continue ;
344+
324345 histos.fill (HIST (" h_InvMass_same" ), exotic.M (), exotic.Pt (), collision.centrality ());
325346 histos.fill (HIST (" hDalitz" ), HQ12.M2 (), HQ13.M2 (), exotic.M (), exotic.Pt (), isLambda, collision.centrality ());
326347
0 commit comments