@@ -80,6 +80,15 @@ struct alice3decayFinder {
8080 Configurable<float > kaFromD_dcaXYconstant{" kaFromD_dcaXYconstant" , -1 .0f , " [0] in |DCAxy| > [0]+[1]/pT" };
8181 Configurable<float > kaFromD_dcaXYpTdep{" kaFromD_dcaXYpTdep" , 0.0 , " [1] in |DCAxy| > [0]+[1]/pT" };
8282
83+ Configurable<float > DCosPA{" DCosPA" , 0.99 , " Cos of pointing angle: pt < 3 GeV" };
84+ Configurable<float > DCosPAHighPt{" DCosPAHighPt" , 0.995 , " Cos of pointing angle: 3 GeV < pt" };
85+ Configurable<float > DCosPAxy{" DCosPAxy" , 0.99 , " Cos of pointing angle xy: pt < 3 GeV" };
86+ Configurable<float > DCosPAxyHighPt{" DCosPAxyHighPt" , 0.995 , " Cos of pointing angle xy: 3 GeV < pt" };
87+ Configurable<float > DCosThetaStarLowPt{" DCosThetaStarLowPt" , 0.8 , " Cos theta; pt < 9" };
88+ Configurable<float > DCosThetaStarHighPt{" DCosThetaStarHighPt" , 0.9 , " Cos theta; 9 < pt < 16" };
89+ Configurable<float > DCosThetaStarVHighPt{" DCosThetaStarVHighPt" , 1.0 , " Cos theta; 16 < pt" };
90+ Configurable<float > DDauDecayLength{" DDauDecayLength" , 3 , " |Normalized dau decay length| > [0]" };
91+
8392 Configurable<float > piFromLc_dcaXYconstant{" piFromLc_dcaXYconstant" , -1 .0f , " [0] in |DCAxy| > [0]+[1]/pT" };
8493 Configurable<float > piFromLc_dcaXYpTdep{" piFromLc_dcaXYpTdep" , 0.0 , " [1] in |DCAxy| > [0]+[1]/pT" };
8594 Configurable<float > kaFromLc_dcaXYconstant{" kaFromLc_dcaXYconstant" , -1 .0f , " [0] in |DCAxy| > [0]+[1]/pT" };
@@ -90,6 +99,7 @@ struct alice3decayFinder {
9099 ConfigurableAxis axisEta{" axisEta" , {8 , -4 .0f , +4 .0f }, " #eta" };
91100 ConfigurableAxis axisPt{" axisPt" , {VARIABLE_WIDTH, 0 .0f , 0 .1f , 0 .2f , 0 .3f , 0 .4f , 0 .5f , 0 .6f , 0 .7f , 0 .8f , 0 .9f , 1 .0f , 1 .1f , 1 .2f , 1 .3f , 1 .4f , 1 .5f , 1 .6f , 1 .7f , 1 .8f , 1 .9f , 2 .0f , 2 .2f , 2 .4f , 2 .6f , 2 .8f , 3 .0f , 3 .2f , 3 .4f , 3 .6f , 3 .8f , 4 .0f , 4 .4f , 4 .8f , 5 .2f , 5 .6f , 6 .0f , 6 .5f , 7 .0f , 7 .5f , 8 .0f , 9 .0f , 10 .0f , 11 .0f , 12 .0f , 13 .0f , 14 .0f , 15 .0f , 17 .0f , 19 .0f , 21 .0f , 23 .0f , 25 .0f , 30 .0f , 35 .0f , 40 .0f , 50 .0f }, " pt axis for QA histograms" };
92101 ConfigurableAxis axisDCA{" axisDCA" , {200 , -100 , 100 }, " DCA (#mum)" };
102+ ConfigurableAxis axisDCADaughters{" axisDCADaughters" , {200 , 0 , 100 }, " DCA (#mum)" };
93103 ConfigurableAxis axisDMass{" axisDMass" , {200 , 1 .765f , 1 .965f }, " D Inv Mass (GeV/c^{2})" };
94104 ConfigurableAxis axisLcMass{" axisLcMass" , {200 , 2 .186f , 2 .386f }, " #Lambda_{c} Inv Mass (GeV/c^{2})" };
95105
@@ -119,7 +129,9 @@ struct alice3decayFinder {
119129
120130 // partitions for D mesons
121131 Partition<alice3tracks> tracksPiPlusFromD =
122- ((aod::a3DecayMap::decayMap & trackSelectionPiPlusFromD) == trackSelectionPiPlusFromD) && aod::track::signed1Pt > 0 .0f && nabs(aod::track::dcaXY) > piFromD_dcaXYconstant + piFromD_dcaXYpTdep* nabs (aod::track::signed1Pt);
132+ ((aod::a3DecayMap::decayMap & trackSelectionPiPlusFromD) == trackSelectionPiPlusFromD) &&
133+ aod::track::signed1Pt > 0 .0f &&
134+ nabs (aod::track::dcaXY) > piFromD_dcaXYconstant + piFromD_dcaXYpTdep* nabs (aod::track::signed1Pt);
123135 Partition<alice3tracks> tracksPiMinusFromD =
124136 ((aod::a3DecayMap::decayMap & trackSelectionPiMinusFromD) == trackSelectionPiMinusFromD) && aod::track::signed1Pt < 0 .0f && nabs(aod::track::dcaXY) > piFromD_dcaXYconstant + piFromD_dcaXYpTdep* nabs (aod::track::signed1Pt);
125137 Partition<alice3tracks> tracksKaPlusFromD =
@@ -144,12 +156,20 @@ struct alice3decayFinder {
144156
145157 // Helper struct to pass candidate information
146158 struct {
159+ float dcaDau;
147160 float mass;
161+ std::array<float , 3 > posSV;
162+ std::array<float , 3 > P;
148163 float pt;
149164 float eta;
165+ float cosPA;
166+ float cosPAxy;
167+ float cosThetaStar;
168+ float normalizedDecayLength;
150169 } dmeson;
151170
152171 struct {
172+ float dcaDau;
153173 float mass;
154174 float pt;
155175 float eta;
@@ -180,15 +200,19 @@ struct alice3decayFinder {
180200 std::array<float , 3 > negP;
181201 posTrack.getPxPyPzGlo (posP);
182202 negTrack.getPxPyPzGlo (negP);
183-
184- float dcaDau = TMath::Sqrt (fitter.getChi2AtPCACandidate ());
185- if (dcaDau > dcaDaughtersSelection)
186- return false ;
203+ dmeson.dcaDau = TMath::Sqrt (fitter.getChi2AtPCACandidate ());
187204
188205 // return mass
189206 dmeson.mass = RecoDecay::m (array{array{posP[0 ], posP[1 ], posP[2 ]}, array{negP[0 ], negP[1 ], negP[2 ]}}, array{posMass, negMass});
190207 dmeson.pt = std::hypot (posP[0 ] + negP[0 ], posP[1 ] + negP[1 ]);
191208 dmeson.eta = RecoDecay::eta (array{posP[0 ] + negP[0 ], posP[1 ] + negP[1 ], posP[2 ] + negP[2 ]});
209+ const auto posSV = fitter.getPCACandidate ();
210+ dmeson.posSV [0 ] = posSV[0 ];
211+ dmeson.posSV [1 ] = posSV[1 ];
212+ dmeson.posSV [2 ] = posSV[2 ];
213+ o2::track::TrackParCov parentTrack = fitter.createParentTrackParCov ();
214+ parentTrack.getPxPyPzGlo (dmeson.P );
215+ dmeson.cosThetaStar = RecoDecay::cosThetaStar (std::array{std::array{posP[0 ], posP[1 ], posP[2 ]}, std::array{negP[0 ], negP[1 ], negP[2 ]}}, std::array{posMass, negMass}, dmeson.mass , 0 );
192216 return true ;
193217 }
194218
@@ -222,8 +246,8 @@ struct alice3decayFinder {
222246 t1.getPxPyPzGlo (P1);
223247 t2.getPxPyPzGlo (P2);
224248
225- float dcaDau = TMath::Sqrt (fitter3.getChi2AtPCACandidate ());
226- if (dcaDau > dcaDaughtersSelection)
249+ lcbaryon. dcaDau = TMath::Sqrt (fitter3.getChi2AtPCACandidate ());
250+ if (lcbaryon. dcaDau > dcaDaughtersSelection)
227251 return false ;
228252
229253 // return mass
@@ -290,7 +314,14 @@ struct alice3decayFinder {
290314 histos.add (" hMassD" , " hMassD" , kTH1F , {axisDMass});
291315 histos.add (" hMassDbar" , " hMassDbar" , kTH1F , {axisDMass});
292316
317+ histos.add (" hDCosPA" , " hDCosPA" , kTH1F , {{200 , 0 , 1 }});
318+ histos.add (" hDCosPAxy" , " hDCosPAxy" , kTH1F , {{200 , 0 , 1 }});
319+ histos.add (" hDCosThetaStar" , " hDCosThetaStar" , kTH1F , {{200 , -1 , 1 }});
320+ histos.add (" hDDauDecayLength" , " hDDauDecayLength" , kTH1F , {{100 , 0 , 10 }});
321+
293322 if (doDCAplotsD) {
323+ histos.add (" hDCADDaughters" , " hDCADDaughters" , kTH1D , {axisDCADaughters});
324+ histos.add (" hDCADbarDaughters" , " hDCADbarDaughters" , kTH1D , {axisDCA});
294325 histos.add (" h2dDCAxyVsPtPiPlusFromD" , " h2dDCAxyVsPtPiPlusFromD" , kTH2F , {axisPt, axisDCA});
295326 histos.add (" h2dDCAxyVsPtPiMinusFromD" , " h2dDCAxyVsPtPiMinusFromD" , kTH2F , {axisPt, axisDCA});
296327 histos.add (" h2dDCAxyVsPtKaPlusFromD" , " h2dDCAxyVsPtKaPlusFromD" , kTH2F , {axisPt, axisDCA});
@@ -307,6 +338,8 @@ struct alice3decayFinder {
307338 histos.add (" hMassLcbar" , " hMassLcbar" , kTH1F , {axisLcMass});
308339
309340 if (doDCAplotsD) {
341+ histos.add (" hDCALcDaughters" , " hDCALcDaughters" , kTH1D , {axisDCADaughters});
342+ histos.add (" hDCALcbarDaughters" , " hDCALcbarDaughters" , kTH1D , {axisDCA});
310343 histos.add (" h2dDCAxyVsPtPiPlusFromLc" , " h2dDCAxyVsPtPiPlusFromLc" , kTH2F , {axisPt, axisDCA});
311344 histos.add (" h2dDCAxyVsPtPiMinusFromLc" , " h2dDCAxyVsPtPiMinusFromLc" , kTH2F , {axisPt, axisDCA});
312345 histos.add (" h2dDCAxyVsPtKaPlusFromLc" , " h2dDCAxyVsPtKaPlusFromLc" , kTH2F , {axisPt, axisDCA});
@@ -362,6 +395,42 @@ struct alice3decayFinder {
362395 continue ;
363396 if (!buildDecayCandidateTwoBody (posTrackRow, negTrackRow, o2::constants::physics::MassPionCharged, o2::constants::physics::MassKaonCharged))
364397 continue ;
398+
399+ dmeson.cosPA = RecoDecay::cpa (std::array{collision.posX (), collision.posY (), collision.posZ ()}, std::array{dmeson.posSV [0 ], dmeson.posSV [1 ], dmeson.posSV [2 ]}, std::array{dmeson.P [0 ], dmeson.P [1 ], dmeson.P [2 ]});
400+ dmeson.cosPAxy = RecoDecay::cpaXY (std::array{collision.posX (), collision.posY (), collision.posZ ()}, std::array{dmeson.posSV [0 ], dmeson.posSV [1 ], dmeson.posSV [2 ]}, std::array{dmeson.P [0 ], dmeson.P [1 ], dmeson.P [2 ]});
401+
402+ const float dmesonCtau = 0.012301 ;
403+ dmeson.normalizedDecayLength = ((dmeson.mass * std::fabs (std::hypot (collision.posX (), collision.posY (), collision.posZ ()) - std::hypot (dmeson.posSV [0 ], dmeson.posSV [1 ], dmeson.posSV [2 ]))) / std::hypot (dmeson.P [0 ], dmeson.P [1 ], dmeson.P [2 ])) / dmesonCtau;
404+
405+ histos.fill (HIST (" hDCosPA" ), dmeson.cosPA );
406+ histos.fill (HIST (" hDCosPAxy" ), dmeson.cosPAxy );
407+ histos.fill (HIST (" hDCosThetaStar" ), dmeson.cosThetaStar );
408+ histos.fill (HIST (" hDDauDecayLength" ), dmeson.normalizedDecayLength );
409+
410+ if (dmeson.dcaDau > dcaDaughtersSelection)
411+ continue ;
412+
413+ if (dmeson.pt <= 3 && dmeson.cosPA < DCosPA)
414+ continue ;
415+ else if (dmeson.pt > 3 && dmeson.cosPA < DCosPAHighPt)
416+ continue ;
417+
418+ if (dmeson.pt <= 3 && dmeson.cosPAxy < DCosPAxy)
419+ continue ;
420+ else if (dmeson.pt > 3 && dmeson.cosPAxy < DCosPAxyHighPt)
421+ continue ;
422+
423+ if (dmeson.pt <= 9 && std::fabs (dmeson.cosThetaStar ) > DCosThetaStarLowPt)
424+ continue ;
425+ else if (dmeson.pt <= 16 && std::fabs (dmeson.cosThetaStar ) > DCosThetaStarHighPt)
426+ continue ;
427+ else if (dmeson.pt > 16 && std::fabs (dmeson.cosThetaStar ) > DCosThetaStarVHighPt)
428+ continue ;
429+
430+ if (dmeson.normalizedDecayLength > DDauDecayLength)
431+ continue ;
432+
433+ histos.fill (HIST (" hDCADDaughters" ), dmeson.dcaDau * 1e+4 );
365434 histos.fill (HIST (" hMassD" ), dmeson.mass );
366435 histos.fill (HIST (" h3dRecD" ), dmeson.pt , dmeson.eta , dmeson.mass );
367436 }
@@ -373,6 +442,42 @@ struct alice3decayFinder {
373442 continue ;
374443 if (!buildDecayCandidateTwoBody (posTrackRow, negTrackRow, o2::constants::physics::MassKaonCharged, o2::constants::physics::MassPionCharged))
375444 continue ;
445+
446+ dmeson.cosPA = RecoDecay::cpa (std::array{collision.posX (), collision.posY (), collision.posZ ()}, std::array{dmeson.posSV [0 ], dmeson.posSV [1 ], dmeson.posSV [2 ]}, std::array{dmeson.P [0 ], dmeson.P [1 ], dmeson.P [2 ]});
447+ dmeson.cosPAxy = RecoDecay::cpaXY (std::array{collision.posX (), collision.posY (), collision.posZ ()}, std::array{dmeson.posSV [0 ], dmeson.posSV [1 ], dmeson.posSV [2 ]}, std::array{dmeson.P [0 ], dmeson.P [1 ], dmeson.P [2 ]});
448+
449+ const float dmesonCtau = 0.012301 ;
450+ dmeson.normalizedDecayLength = ((dmeson.mass * std::fabs (std::hypot (collision.posX (), collision.posY (), collision.posZ ()) - std::hypot (dmeson.posSV [0 ], dmeson.posSV [1 ], dmeson.posSV [2 ]))) / std::hypot (dmeson.P [0 ], dmeson.P [1 ], dmeson.P [2 ])) / dmesonCtau;
451+
452+ histos.fill (HIST (" hDCosPA" ), dmeson.cosPA );
453+ histos.fill (HIST (" hDCosPAxy" ), dmeson.cosPAxy );
454+ histos.fill (HIST (" hDCosThetaStar" ), dmeson.cosThetaStar );
455+ histos.fill (HIST (" hDDauDecayLength" ), dmeson.normalizedDecayLength );
456+
457+ if (dmeson.dcaDau > dcaDaughtersSelection)
458+ continue ;
459+
460+ if (dmeson.pt <= 3 && dmeson.cosPA < DCosPA)
461+ continue ;
462+ else if (dmeson.pt > 3 && dmeson.cosPA < DCosPAHighPt)
463+ continue ;
464+
465+ if (dmeson.pt <= 3 && dmeson.cosPAxy < DCosPAxy)
466+ continue ;
467+ else if (dmeson.pt > 3 && dmeson.cosPAxy < DCosPAxyHighPt)
468+ continue ;
469+
470+ if (dmeson.pt <= 9 && std::fabs (dmeson.cosThetaStar ) > DCosThetaStarLowPt)
471+ continue ;
472+ else if (dmeson.pt <= 16 && std::fabs (dmeson.cosThetaStar ) > DCosThetaStarHighPt)
473+ continue ;
474+ else if (dmeson.pt > 16 && std::fabs (dmeson.cosThetaStar ) > DCosThetaStarVHighPt)
475+ continue ;
476+
477+ if (dmeson.normalizedDecayLength > DDauDecayLength)
478+ continue ;
479+
480+ histos.fill (HIST (" hDCADbarDaughters" ), dmeson.dcaDau * 1e+4 );
376481 histos.fill (HIST (" hMassDbar" ), dmeson.mass );
377482 histos.fill (HIST (" h3dRecDbar" ), dmeson.pt , dmeson.eta , dmeson.mass );
378483 }
@@ -417,6 +522,7 @@ struct alice3decayFinder {
417522 continue ;
418523 if (!buildDecayCandidateThreeBody (proton, kaon, pion, o2::constants::physics::MassProton, o2::constants::physics::MassKaonCharged, o2::constants::physics::MassPionCharged))
419524 continue ;
525+ histos.fill (HIST (" hDCALcDaughters" ), lcbaryon.dcaDau * 1e+4 );
420526 histos.fill (HIST (" hMassLc" ), lcbaryon.mass );
421527 histos.fill (HIST (" h3dRecLc" ), lcbaryon.pt , lcbaryon.eta , lcbaryon.mass );
422528 }
@@ -432,6 +538,7 @@ struct alice3decayFinder {
432538 continue ;
433539 if (!buildDecayCandidateThreeBody (proton, kaon, pion, o2::constants::physics::MassProton, o2::constants::physics::MassKaonCharged, o2::constants::physics::MassPionCharged))
434540 continue ;
541+ histos.fill (HIST (" hDCALcbarDaughters" ), lcbaryon.dcaDau * 1e+4 );
435542 histos.fill (HIST (" hMassLcbar" ), lcbaryon.mass );
436543 histos.fill (HIST (" h3dRecLcbar" ), lcbaryon.pt , lcbaryon.eta , lcbaryon.mass );
437544 }
0 commit comments