@@ -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{" Cos of pointing angle" , 0.99 , " Cos of pointing angle: pt < 3 GeV" };
84+ Configurable<float > DCosPAHighPt{" Cos of pointing angle high pt" , 0.995 , " Cos of pointing angle: 3 GeV < pt" };
85+ Configurable<float > DCosPAxy{" Cos of pointing angle xy" , 0.99 , " Cos of pointing angle xy: pt < 3 GeV" };
86+ Configurable<float > DCosPAxyHighPt{" Cos of pointing angle xy high pt" , 0.995 , " Cos of pointing angle xy: 3 GeV < pt" };
87+ Configurable<float > DCosThetaStarLowPt{" Cos theta low pt" , 0.8 , " Cos theta; pt < 9" };
88+ Configurable<float > DCosThetaStarHighPt{" Cos theta high pt" , 0.9 , " Cos theta; 9 < pt < 16" };
89+ Configurable<float > DCosThetaStarVHighPt{" Cos theta vhigh" , 1.0 , " Cos theta; 16 < pt" };
90+ Configurable<float > DDauDecayLength{" Normalized dau decay length" , 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,8 +99,8 @@ 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)" };
93- ConfigurableAxis axisDMass{" axisDMass" , {200 , 1 .765f , 1 .965f }, " D Inv Mass (GeV/c^{2})" };
94102 ConfigurableAxis axisDCADaughters{" axisDCADaughters" , {200 , 0 , 100 }, " DCA (#mum)" };
103+ ConfigurableAxis axisDMass{" axisDMass" , {200 , 1 .765f , 1 .965f }, " D Inv Mass (GeV/c^{2})" };
95104 ConfigurableAxis axisLcMass{" axisLcMass" , {200 , 2 .186f , 2 .386f }, " #Lambda_{c} Inv Mass (GeV/c^{2})" };
96105
97106 o2::vertexing::DCAFitterN<2 > fitter;
@@ -120,7 +129,9 @@ struct alice3decayFinder {
120129
121130 // partitions for D mesons
122131 Partition<alice3tracks> tracksPiPlusFromD =
123- ((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);
124135 Partition<alice3tracks> tracksPiMinusFromD =
125136 ((aod::a3DecayMap::decayMap & trackSelectionPiMinusFromD) == trackSelectionPiMinusFromD) && aod::track::signed1Pt < 0 .0f && nabs(aod::track::dcaXY) > piFromD_dcaXYconstant + piFromD_dcaXYpTdep* nabs (aod::track::signed1Pt);
126137 Partition<alice3tracks> tracksKaPlusFromD =
@@ -147,8 +158,14 @@ struct alice3decayFinder {
147158 struct {
148159 float dcaDau;
149160 float mass;
161+ std::array<float , 3 > posSV;
162+ std::array<float , 3 > P;
150163 float pt;
151164 float eta;
165+ float cosPA;
166+ float cosPAxy;
167+ float cosThetaStar;
168+ float normalizedDecayLength;
152169 } dmeson;
153170
154171 struct {
@@ -183,15 +200,19 @@ struct alice3decayFinder {
183200 std::array<float , 3 > negP;
184201 posTrack.getPxPyPzGlo (posP);
185202 negTrack.getPxPyPzGlo (negP);
186-
187203 dmeson.dcaDau = TMath::Sqrt (fitter.getChi2AtPCACandidate ());
188- if (dmeson.dcaDau > dcaDaughtersSelection)
189- return false ;
190204
191205 // return mass
192206 dmeson.mass = RecoDecay::m (array{array{posP[0 ], posP[1 ], posP[2 ]}, array{negP[0 ], negP[1 ], negP[2 ]}}, array{posMass, negMass});
193207 dmeson.pt = std::hypot (posP[0 ] + negP[0 ], posP[1 ] + negP[1 ]);
194208 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 );
195216 return true ;
196217 }
197218
@@ -225,7 +246,7 @@ struct alice3decayFinder {
225246 t1.getPxPyPzGlo (P1);
226247 t2.getPxPyPzGlo (P2);
227248
228- lcbaryon.dcaDau = TMath::Sqrt (fitter .getChi2AtPCACandidate ());
249+ lcbaryon.dcaDau = TMath::Sqrt (fitter3 .getChi2AtPCACandidate ());
229250 if (lcbaryon.dcaDau > dcaDaughtersSelection)
230251 return false ;
231252
@@ -292,10 +313,15 @@ struct alice3decayFinder {
292313
293314 histos.add (" hMassD" , " hMassD" , kTH1F , {axisDMass});
294315 histos.add (" hMassDbar" , " hMassDbar" , kTH1F , {axisDMass});
295- histos.add (" hDCADDaughters" , " hDCADDaughters" , kTH1D , {axisDCADaughters});
296- histos.add (" hDCADbarDaughters" , " hDCADbarDaughters" , kTH1D , {axisDCADaughters});
316+
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 }});
297321
298322 if (doDCAplotsD) {
323+ histos.add (" hDCADDaughters" , " hDCADDaughters" , kTH1D , {axisDCADaughters});
324+ histos.add (" hDCADbarDaughters" , " hDCADbarDaughters" , kTH1D , {axisDCA});
299325 histos.add (" h2dDCAxyVsPtPiPlusFromD" , " h2dDCAxyVsPtPiPlusFromD" , kTH2F , {axisPt, axisDCA});
300326 histos.add (" h2dDCAxyVsPtPiMinusFromD" , " h2dDCAxyVsPtPiMinusFromD" , kTH2F , {axisPt, axisDCA});
301327 histos.add (" h2dDCAxyVsPtKaPlusFromD" , " h2dDCAxyVsPtKaPlusFromD" , kTH2F , {axisPt, axisDCA});
@@ -310,10 +336,10 @@ struct alice3decayFinder {
310336
311337 histos.add (" hMassLc" , " hMassLc" , kTH1F , {axisLcMass});
312338 histos.add (" hMassLcbar" , " hMassLcbar" , kTH1F , {axisLcMass});
313- histos.add (" hDCALcDaughters" , " hDCALcDaughters" , kTH1D , {axisDCADaughters});
314- histos.add (" hDCALcbarDaughters" , " hDCALcbarDaughters" , kTH1D , {axisDCADaughters});
315339
316340 if (doDCAplotsD) {
341+ histos.add (" hDCALcDaughters" , " hDCALcDaughters" , kTH1D , {axisDCADaughters});
342+ histos.add (" hDCALcbarDaughters" , " hDCALcbarDaughters" , kTH1D , {axisDCA});
317343 histos.add (" h2dDCAxyVsPtPiPlusFromLc" , " h2dDCAxyVsPtPiPlusFromLc" , kTH2F , {axisPt, axisDCA});
318344 histos.add (" h2dDCAxyVsPtPiMinusFromLc" , " h2dDCAxyVsPtPiMinusFromLc" , kTH2F , {axisPt, axisDCA});
319345 histos.add (" h2dDCAxyVsPtKaPlusFromLc" , " h2dDCAxyVsPtKaPlusFromLc" , kTH2F , {axisPt, axisDCA});
@@ -369,6 +395,41 @@ struct alice3decayFinder {
369395 continue ;
370396 if (!buildDecayCandidateTwoBody (posTrackRow, negTrackRow, o2::constants::physics::MassPionCharged, o2::constants::physics::MassKaonCharged))
371397 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+
372433 histos.fill (HIST (" hDCADDaughters" ), dmeson.dcaDau * 1e+4 );
373434 histos.fill (HIST (" hMassD" ), dmeson.mass );
374435 histos.fill (HIST (" h3dRecD" ), dmeson.pt , dmeson.eta , dmeson.mass );
@@ -381,6 +442,41 @@ struct alice3decayFinder {
381442 continue ;
382443 if (!buildDecayCandidateTwoBody (posTrackRow, negTrackRow, o2::constants::physics::MassKaonCharged, o2::constants::physics::MassPionCharged))
383444 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+
384480 histos.fill (HIST (" hDCADbarDaughters" ), dmeson.dcaDau * 1e+4 );
385481 histos.fill (HIST (" hMassDbar" ), dmeson.mass );
386482 histos.fill (HIST (" h3dRecDbar" ), dmeson.pt , dmeson.eta , dmeson.mass );
@@ -426,7 +522,7 @@ struct alice3decayFinder {
426522 continue ;
427523 if (!buildDecayCandidateThreeBody (proton, kaon, pion, o2::constants::physics::MassProton, o2::constants::physics::MassKaonCharged, o2::constants::physics::MassPionCharged))
428524 continue ;
429- histos.fill (HIST (" hDCALcDaughters" ), lcbaryon.dcaDau );
525+ histos.fill (HIST (" hDCALcDaughters" ), lcbaryon.dcaDau * 1e+4 );
430526 histos.fill (HIST (" hMassLc" ), lcbaryon.mass );
431527 histos.fill (HIST (" h3dRecLc" ), lcbaryon.pt , lcbaryon.eta , lcbaryon.mass );
432528 }
@@ -442,7 +538,7 @@ struct alice3decayFinder {
442538 continue ;
443539 if (!buildDecayCandidateThreeBody (proton, kaon, pion, o2::constants::physics::MassProton, o2::constants::physics::MassKaonCharged, o2::constants::physics::MassPionCharged))
444540 continue ;
445- histos.fill (HIST (" hDCALcbarDaughters" ), lcbaryon.dcaDau );
541+ histos.fill (HIST (" hDCALcbarDaughters" ), lcbaryon.dcaDau * 1e+4 );
446542 histos.fill (HIST (" hMassLcbar" ), lcbaryon.mass );
447543 histos.fill (HIST (" h3dRecLcbar" ), lcbaryon.pt , lcbaryon.eta , lcbaryon.mass );
448544 }
0 commit comments