@@ -68,7 +68,7 @@ enum DaughterType {
6868
6969namespace
7070{
71- // constexpr std::array<float, 7> LayerRadii{2.33959f, 3.14076f, 3.91924f, 19.6213f, 24.5597f, 34.388f, 39.3329f};
71+ constexpr std::array<float , 7 > LayerRadii{2 .33959f , 3 .14076f , 3 .91924f , 19 .6213f , 24 .5597f , 34 .388f , 39 .3329f };
7272constexpr int kITSLayers = 7 ;
7373constexpr int kITSInnerBarrelLayers = 3 ;
7474// constexpr int kITSOuterBarrelLayers = 4;
@@ -231,6 +231,7 @@ struct Hyphe4sCandidate {
231231
232232 std::array<float , 3 > primVtx = {0 .0f , 0 .0f , 0 .0f };
233233 std::array<float , 3 > decVtx = {0 .0f , 0 .0f , 0 .0f };
234+ std::array<float , 3 > lastPosMoth = {0 .0f , 0 .0f , 0 .0f }; // last position of mother track at the radii of ITS layer which has the outermost update
234235 std::array<float , 3 > momMoth = {0 .0f , 0 .0f , 0 .0f };
235236 std::array<float , 3 > momDaug = {0 .0f , 0 .0f , 0 .0f };
236237
@@ -251,7 +252,8 @@ struct Hyphe4sCandidate {
251252 bool isSurvEvSelection = false ;
252253
253254 std::array<float , 3 > trueDecVtx = {0 .0f , 0 .0f , 0 .0f };
254- std::array<float , 3 > gMomMoth = {0 .0f , 0 .0f , 0 .0f };
255+ std::array<float , 3 > gMomMoth = {0 .0f , 0 .0f , 0 .0f }; // generated mother momentum
256+ std::array<float , 3 > trueMomMoth = {0 .0f , 0 .0f , 0 .0f }; // true mother momentum at decay vertex
255257 std::array<float , 3 > gMomDau = {0 .0f , 0 .0f , 0 .0f };
256258
257259 bool isMothReco = false ;
@@ -322,8 +324,8 @@ struct Hyperhelium4sigmaRecoTask {
322324 registry.add <TH2>(" h2TrueMotherDiffPyVsRecSVR" , " ;Reconstruced SV R (cm);#Delta #it{p}_{T} (GeV/#it{c});" , HistType::kTH2F , {radiusAxis, diffPyAxis});
323325 registry.add <TH2>(" h2TrueMotherDiffPtVsRecSVR" , " ;Reconstruced SV R (cm);#Delta #it{p}_{T} (GeV/#it{c});" , HistType::kTH2F , {radiusAxis, diffPtAxis});
324326 registry.add <TH2>(" h2TrueMotherDiffPzVsRecSVR" , " ;Reconstruced SV R (cm);#Delta #it{p}_{z} (GeV/#it{c});" , HistType::kTH2F , {radiusAxis, diffPzAxis});
325- registry.add <TH2>(" h2TrueMotherDiffTglVsRecSVR" , " ;Reconstruced SV R (cm);#Delta tan#lambda;" , HistType::kTH2F , {radiusAxis, {200 , -1 . f , 1 . f }});
326- registry.add <TH2>(" h2TrueMotherDiffEtaVsRecSVR" , " ;Reconstruced SV R (cm);#Delta #eta;" , HistType::kTH2F , {radiusAxis, {200 , -1 . f , 1 . f }});
327+ registry.add <TH2>(" h2TrueMotherDiffTglVsRecSVR" , " ;Reconstruced SV R (cm);#Delta tan#lambda;" , HistType::kTH2F , {radiusAxis, {200 , -0.1 , 0.1 }});
328+ registry.add <TH2>(" h2TrueMotherDiffEtaVsRecSVR" , " ;Reconstruced SV R (cm);#Delta #eta;" , HistType::kTH2F , {radiusAxis, {200 , -0.1 , 0.1 }});
327329 registry.add <TH1>(" hDiffDauPx" , " ;#Delta p_{x} (GeV/#it{c}); " , HistType::kTH1D , {{200 , -10 , 10 }});
328330 registry.add <TH1>(" hDiffDauPy" , " ;#Delta p_{y} (GeV/#it{c}); " , HistType::kTH1D , {{200 , -10 , 10 }});
329331 registry.add <TH1>(" hDiffDauPz" , " ;#Delta p_{z} (GeV/#it{c}); " , HistType::kTH1D , {{200 , -10 , 10 }});
@@ -394,6 +396,22 @@ struct Hyperhelium4sigmaRecoTask {
394396 hyphe4sCand.itsClusterSizeDau = trackDau.itsClusterSizes ();
395397 hyphe4sCand.nSigmaTPCDau = trackDau.tpcNSigmaAl ();
396398 hyphe4sCand.nSigmaITSDau = itsResponse.nSigmaITS <o2::track::PID::Alpha>(trackDau);
399+
400+ int lastLayerMoth = 0 ;
401+ for (int i = 6 ; i >= 0 ; i--) {
402+ if (trackMoth.itsClusterMap () & (1 << i)) {
403+ lastLayerMoth = i;
404+ break ;
405+ }
406+ }
407+ auto trackparMother = getTrackParCov (trackMoth);
408+ o2::base::Propagator::Instance ()->PropagateToXBxByBz (trackparMother, LayerRadii[lastLayerMoth]);
409+ std::array<float , 9 > vecLab{0 .f };
410+ if (trackparMother.getPosDirGlo (vecLab)) {
411+ hyphe4sCand.lastPosMoth [0 ] = vecLab[0 ];
412+ hyphe4sCand.lastPosMoth [1 ] = vecLab[1 ];
413+ hyphe4sCand.lastPosMoth [2 ] = vecLab[2 ];
414+ }
397415 }
398416
399417 template <typename TTrack>
@@ -407,20 +425,23 @@ struct Hyperhelium4sigmaRecoTask {
407425 }
408426
409427 template <typename TMCParticle>
410- void fillCandidateMCInfo (Hyphe4sCandidate& hyphe4sCand, TMCParticle const & mcMothTrack, TMCParticle const & mcDauTrack)
428+ void fillCandidateMCInfo (Hyphe4sCandidate& hyphe4sCand, TMCParticle const & mcMothTrack, TMCParticle const & mcDauTrack, TMCParticle const & mcNeutDauTrack )
411429 {
412430 hyphe4sCand.trueDecVtx [0 ] = mcDauTrack.vx ();
413431 hyphe4sCand.trueDecVtx [1 ] = mcDauTrack.vy ();
414432 hyphe4sCand.trueDecVtx [2 ] = mcDauTrack.vz ();
415433 hyphe4sCand.gMomMoth [0 ] = mcMothTrack.px ();
416434 hyphe4sCand.gMomMoth [1 ] = mcMothTrack.py ();
417435 hyphe4sCand.gMomMoth [2 ] = mcMothTrack.pz ();
436+ hyphe4sCand.trueMomMoth [0 ] = mcDauTrack.px () + mcNeutDauTrack.px ();
437+ hyphe4sCand.trueMomMoth [1 ] = mcDauTrack.py () + mcNeutDauTrack.py ();
438+ hyphe4sCand.trueMomMoth [2 ] = mcDauTrack.pz () + mcNeutDauTrack.pz ();
418439 hyphe4sCand.gMomDau [0 ] = mcDauTrack.px ();
419440 hyphe4sCand.gMomDau [1 ] = mcDauTrack.py ();
420441 hyphe4sCand.gMomDau [2 ] = mcDauTrack.pz ();
421442 }
422443
423- void processData (CollisionsFull const & collisions, aod::KinkCands const & KinkCands, FullTracksExtIU const &)
444+ void processData (CollisionsFull const & collisions, aod::KinkCands const & KinkCands, FullTracksExtIU const &, aod::BCs const & )
424445 {
425446 for (const auto & collision : collisions) {
426447 registry.fill (HIST (" hEventCounter" ), 0 );
@@ -448,14 +469,18 @@ struct Hyperhelium4sigmaRecoTask {
448469 registry.fill (HIST (" h2MassHyperhelium4sigmaPt" ), kinkCand.mothSign () * kinkCand.ptMoth (), invMass);
449470 registry.fill (HIST (" h2NSigmaAlPt" ), kinkCand.mothSign () * kinkCand.ptDaug (), dauTrack.tpcNSigmaAl ());
450471
472+ auto bc = collision.bc_as <aod::BCs>();
473+ initCCDB (bc);
451474 auto motherTrack = kinkCand.trackMoth_as <FullTracksExtIU>();
452475 Hyphe4sCandidate hyphe4sCand;
453476 fillCandidate (hyphe4sCand, collision, kinkCand, motherTrack, dauTrack);
454477
455478 outputDataTable (
456479 hyphe4sCand.primVtx [0 ], hyphe4sCand.primVtx [1 ], hyphe4sCand.primVtx [2 ],
457480 hyphe4sCand.decVtx [0 ], hyphe4sCand.decVtx [1 ], hyphe4sCand.decVtx [2 ],
458- hyphe4sCand.isMatter , hyphe4sCand.momMoth [0 ], hyphe4sCand.momMoth [1 ], hyphe4sCand.momMoth [2 ],
481+ hyphe4sCand.isMatter ,
482+ hyphe4sCand.lastPosMoth [0 ], hyphe4sCand.lastPosMoth [1 ], hyphe4sCand.lastPosMoth [2 ],
483+ hyphe4sCand.momMoth [0 ], hyphe4sCand.momMoth [1 ], hyphe4sCand.momMoth [2 ],
459484 hyphe4sCand.momDaug [0 ], hyphe4sCand.momDaug [1 ], hyphe4sCand.momDaug [2 ],
460485 hyphe4sCand.dcaXYMothPv , hyphe4sCand.dcaXYDauPv , hyphe4sCand.dcaKinkTopo ,
461486 hyphe4sCand.chi2ITSMoth , hyphe4sCand.itsClusterSizeMoth , hyphe4sCand.itsClusterSizeDau ,
@@ -524,13 +549,16 @@ struct Hyperhelium4sigmaRecoTask {
524549 registry.fill (HIST (" h2MassHyperhelium4sigmaPt" ), kinkCand.mothSign () * kinkCand.ptMoth (), invMass);
525550 registry.fill (HIST (" h2NSigmaAlPt" ), kinkCand.mothSign () * kinkCand.ptDaug (), dauTrack.tpcNSigmaAl ());
526551
552+ auto bc = collision.bc_as <aod::BCs>();
553+ initCCDB (bc);
527554 Hyphe4sCandidate hyphe4sCand;
528555 fillCandidate (hyphe4sCand, collision, kinkCand, motherTrack, dauTrack);
529556
530557 // qa for true signal
531558 if (isTrueSignal) {
532559 auto mcMotherTrack = motherTrack.mcParticle_as <aod::McParticles>();
533560 auto mcDauTrack = dauTrack.mcParticle_as <aod::McParticles>();
561+ auto mcNeutTrack = particlesMC.rawIteratorAt (dauIDList[2 ]);
534562 float posDecVtx[3 ] = {kinkCand.xDecVtx () + collision.posX (), kinkCand.yDecVtx () + collision.posY (), kinkCand.zDecVtx () + collision.posZ ()};
535563 float recSVR = std::sqrt (posDecVtx[0 ] * posDecVtx[0 ] + posDecVtx[1 ] * posDecVtx[1 ]);
536564 registry.fill (HIST (" hDiffSVx" ), posDecVtx[0 ] - mcDauTrack.vx ());
@@ -551,11 +579,9 @@ struct Hyperhelium4sigmaRecoTask {
551579 hyphe4sCand.isSignalReco = true ;
552580 hyphe4sCand.isCollReco = true ;
553581 hyphe4sCand.isSurvEvSelection = true ;
554- fillCandidateMCInfo (hyphe4sCand, mcMotherTrack, mcDauTrack);
582+ fillCandidateMCInfo (hyphe4sCand, mcMotherTrack, mcDauTrack, mcNeutTrack );
555583 mcHe4sIndices.push_back (mcMotherTrack.globalIndex ());
556584
557- auto bc = collision.bc_as <aod::BCs>();
558- initCCDB (bc);
559585 std::array<float , 2 > dcaInfo;
560586 auto mcMotherTrackPar = getTrackParFromMC (mcMotherTrack);
561587 o2::base::Propagator::Instance ()->propagateToDCABxByBz ({posDecVtx[0 ], posDecVtx[1 ], posDecVtx[2 ]}, mcMotherTrackPar, 2 .f , matCorr, &dcaInfo);
@@ -591,14 +617,17 @@ struct Hyperhelium4sigmaRecoTask {
591617 outputMCTable (
592618 hyphe4sCand.primVtx [0 ], hyphe4sCand.primVtx [1 ], hyphe4sCand.primVtx [2 ],
593619 hyphe4sCand.decVtx [0 ], hyphe4sCand.decVtx [1 ], hyphe4sCand.decVtx [2 ],
594- hyphe4sCand.isMatter , hyphe4sCand.momMoth [0 ], hyphe4sCand.momMoth [1 ], hyphe4sCand.momMoth [2 ],
620+ hyphe4sCand.isMatter ,
621+ hyphe4sCand.lastPosMoth [0 ], hyphe4sCand.lastPosMoth [1 ], hyphe4sCand.lastPosMoth [2 ],
622+ hyphe4sCand.momMoth [0 ], hyphe4sCand.momMoth [1 ], hyphe4sCand.momMoth [2 ],
595623 hyphe4sCand.momDaug [0 ], hyphe4sCand.momDaug [1 ], hyphe4sCand.momDaug [2 ],
596624 hyphe4sCand.dcaXYMothPv , hyphe4sCand.dcaXYDauPv , hyphe4sCand.dcaKinkTopo ,
597625 hyphe4sCand.chi2ITSMoth , hyphe4sCand.itsClusterSizeMoth , hyphe4sCand.itsClusterSizeDau ,
598626 hyphe4sCand.nSigmaTPCDau , hyphe4sCand.nSigmaITSDau ,
599627 hyphe4sCand.isSignal , hyphe4sCand.isSignalReco , hyphe4sCand.isCollReco , hyphe4sCand.isSurvEvSelection ,
600628 hyphe4sCand.trueDecVtx [0 ], hyphe4sCand.trueDecVtx [1 ], hyphe4sCand.trueDecVtx [2 ],
601629 hyphe4sCand.gMomMoth [0 ], hyphe4sCand.gMomMoth [1 ], hyphe4sCand.gMomMoth [2 ],
630+ hyphe4sCand.trueMomMoth [0 ], hyphe4sCand.trueMomMoth [1 ], hyphe4sCand.trueMomMoth [2 ],
602631 hyphe4sCand.gMomDau [0 ], hyphe4sCand.gMomDau [1 ], hyphe4sCand.gMomDau [2 ],
603632 hyphe4sCand.isMothReco , hyphe4sCand.ptMoth , hyphe4sCand.pzMoth );
604633 }
@@ -615,7 +644,8 @@ struct Hyperhelium4sigmaRecoTask {
615644
616645 Hyphe4sCandidate hyphe4sCand;
617646 auto mcDauTrack = particlesMC.rawIteratorAt (dauIDList[0 ]);
618- fillCandidateMCInfo (hyphe4sCand, mcparticle, mcDauTrack);
647+ auto mcNeutTrack = particlesMC.rawIteratorAt (dauIDList[2 ]);
648+ fillCandidateMCInfo (hyphe4sCand, mcparticle, mcDauTrack, mcNeutTrack);
619649
620650 if (mcPartIndices[mcparticle.globalIndex ()] != -1 ) {
621651 auto mothTrack = tracks.rawIteratorAt (mcPartIndices[mcparticle.globalIndex ()]);
@@ -625,14 +655,17 @@ struct Hyperhelium4sigmaRecoTask {
625655 outputMCTable (
626656 -1 , -1 , -1 ,
627657 -1 , -1 , -1 ,
628- -1 , -1 , -1 , -1 ,
658+ -1 ,
659+ -1 , -1 , -1 ,
660+ -1 , -1 , -1 ,
629661 -1 , -1 , -1 ,
630662 -1 , -1 , -1 ,
631663 -1 , -1 , -1 ,
632664 -1 , -1 ,
633665 true , false , isReconstructedMCCollisions[mcparticle.mcCollisionId ()], isSelectedMCCollisions[mcparticle.mcCollisionId ()],
634666 hyphe4sCand.trueDecVtx [0 ], hyphe4sCand.trueDecVtx [1 ], hyphe4sCand.trueDecVtx [2 ],
635667 hyphe4sCand.gMomMoth [0 ], hyphe4sCand.gMomMoth [1 ], hyphe4sCand.gMomMoth [2 ],
668+ hyphe4sCand.trueMomMoth [0 ], hyphe4sCand.trueMomMoth [1 ], hyphe4sCand.trueMomMoth [2 ],
636669 hyphe4sCand.gMomDau [0 ], hyphe4sCand.gMomDau [1 ], hyphe4sCand.gMomDau [2 ],
637670 hyphe4sCand.isMothReco , hyphe4sCand.ptMoth , hyphe4sCand.pzMoth );
638671 }
@@ -731,6 +764,7 @@ struct Hyperhelium4sigmaQa {
731764 hDauTPCNSigma[kDauTriton ] = recoQAHist.add <TH2>(" hDauTritonTPCNSigma" , " " , HistType::kTH2F , {rigidityAxis, nsigmaAxis});
732765 hDauTPCNSigma[kDauProton ] = recoQAHist.add <TH2>(" hDauProtonTPCNSigma" , " " , HistType::kTH2F , {rigidityAxis, nsigmaAxis});
733766 hDauTPCNSigma[kDauChargedPion ] = recoQAHist.add <TH2>(" hDauPionTPCNSigma" , " " , HistType::kTH2F , {rigidityAxis, nsigmaAxis});
767+ recoQAHist.add <TH2>(" hDauAlphaITSNSigmaCheck" , " " , HistType::kTH2F , {rigidityAxis, itsnsigmaAxis});
734768
735769 hRecoMotherCounter = recoQAHist.add <TH1>(" hRecoMotherCounter" , " " , HistType::kTH1F , {{9 , 0 .f , 9 .f }});
736770 hRecoDauAlphaCounter = recoQAHist.add <TH1>(" hRecoDauAlphaCounter" , " " , HistType::kTH1F , {{9 , 0 .f , 9 .f }});
@@ -750,8 +784,8 @@ struct Hyperhelium4sigmaQa {
750784 recoQAHist.add <TH1>(" hMotherITSCls" , " " , HistType::kTH1F , {{8 , 0 .f , 8 .f }});
751785 recoQAHist.add <TH1>(" hDauAlphaIsPVContributer" , " " , HistType::kTH1F , {{2 , 0 .f , 2 .f }});
752786 recoQAHist.add <TH1>(" hDauAlphaITSCls" , " " , HistType::kTH1F , {{8 , 0 .f , 8 .f }});
753- recoQAHist.add <TH2>(" hDauAlphaPVsITSNSigma " , " " , HistType::kTH2F , {rigidityAxis, itsnsigmaAxis});
754- recoQAHist.add <TH2>(" h2BCandDauAlphaPVsITSNSigma " , " " , HistType::kTH2F , {rigidityAxis, nsigmaAxis });
787+ recoQAHist.add <TH2>(" hDauAlphaITSNSigma " , " " , HistType::kTH2F , {rigidityAxis, itsnsigmaAxis});
788+ recoQAHist.add <TH2>(" hReco2BDauAlphaPVsITSNSigma " , " " , HistType::kTH2F , {rigidityAxis, itsnsigmaAxis });
755789 recoQAHist.add <TH1>(" hReco2BCandidateCount" , " " , HistType::kTH1F , {{4 , 0 .f , 4 .f }});
756790 }
757791 }
@@ -950,6 +984,9 @@ struct Hyperhelium4sigmaQa {
950984 if (track.hasTPC ()) {
951985 hDauTPCNSigma[type]->Fill (track.p () * track.sign (), tpcNSigma);
952986 }
987+ if (type == kDauAlpha && track.itsNCls () > kITSLayers - 2 ) {
988+ recoQAHist.fill (HIST (" hDauAlphaITSNSigmaCheck" ), track.p () * track.sign (), itsResponse.nSigmaITS <o2::track::PID::Alpha>(track));
989+ }
953990 }
954991 }
955992 }
@@ -1000,7 +1037,7 @@ struct Hyperhelium4sigmaQa {
10001037
10011038 float itsNSigma = itsResponse.nSigmaITS <o2::track::PID::Alpha>(daughterTrack);
10021039 if (daughterTrack.hasITS ()) {
1003- recoQAHist.fill (HIST (" hDauAlphaPVsITSNSigma " ), daughterTrack.sign () * daughterTrack.p (), itsNSigma);
1040+ recoQAHist.fill (HIST (" hDauAlphaITSNSigma " ), daughterTrack.sign () * daughterTrack.p (), itsNSigma);
10041041 recoQAHist.fill (HIST (" hDauAlphaITSCls" ), daughterTrack.itsNCls ());
10051042 }
10061043
@@ -1013,7 +1050,7 @@ struct Hyperhelium4sigmaQa {
10131050
10141051 if (isMoth && isDaug) {
10151052 recoQAHist.fill (HIST (" hReco2BCandidateCount" ), 3.5 );
1016- recoQAHist.fill (HIST (" h2BCandDauAlphaPVsITSNSigma " ), daughterTrack.sign () * daughterTrack.p (), itsNSigma);
1053+ recoQAHist.fill (HIST (" hReco2BDauAlphaPVsITSNSigma " ), daughterTrack.sign () * daughterTrack.p (), itsNSigma);
10171054 }
10181055 }
10191056 }
0 commit comments