@@ -124,6 +124,7 @@ struct cascadeBuilder {
124124 Configurable<bool > d_GenerateOnlyTrackedCascades{" d_GenerateOnlyTrackedCascades" , false , " Skip cascades that aren't tracked" };
125125 Configurable<bool > d_QA_checkMC{" d_QA_checkMC" , true , " check MC truth in QA" };
126126 Configurable<bool > d_QA_checkdEdx{" d_QA_checkdEdx" , false , " check dEdx in QA" };
127+ Configurable<bool > calculateBachBaryonVars{" calculateBachBaryonVars" , false , " calculate variables for removing cascade inv mass bump" };
127128
128129 // CCDB options
129130 Configurable<std::string> ccdburl{" ccdb-url" , " http://alice-ccdb.cern.ch" , " url of the ccdb repository" };
@@ -196,6 +197,8 @@ struct cascadeBuilder {
196197 float mOmega ;
197198 float yXi;
198199 float yOmega;
200+ float bachBaryonCosPA;
201+ float bachBaryonDCAxyToPV;
199202 } cascadecandidate;
200203
201204 o2::track::TrackParCov lBachelorTrack;
@@ -518,6 +521,10 @@ struct cascadeBuilder {
518521 matCorrCascade = o2::base::Propagator::MatCorrType::USEMatCorrTGeo;
519522 if (useMatCorrTypeCasc == 2 )
520523 matCorrCascade = o2::base::Propagator::MatCorrType::USEMatCorrLUT;
524+
525+ // initialize bach baryon variables just in case
526+ cascadecandidate.bachBaryonCosPA = 1 ; // would ordinarily reject all
527+ cascadecandidate.bachBaryonDCAxyToPV = 0 ; // would ordinarily reject all
521528 }
522529
523530 void initCCDB (aod::BCsWithTimestamps::iterator const & bc)
@@ -568,6 +575,60 @@ struct cascadeBuilder {
568575 }
569576 }
570577
578+ template <typename TCollision, typename TTrack>
579+ void processBachBaryonVariables (TCollision const & collision, TTrack const & track1, TTrack const & track2)
580+ {
581+ cascadecandidate.bachBaryonCosPA = 0 ; // would ordinarily accept all
582+ cascadecandidate.bachBaryonDCAxyToPV = 1e+3 ; // would ordinarily accept all
583+
584+ // create tracks from table rows
585+ o2::track::TrackParCov tr1 = getTrackParCov (track1);
586+ o2::track::TrackParCov tr2 = getTrackParCov (track2);
587+
588+ // ---/---/---/
589+ // Move close to minima
590+ int nCand = 0 ;
591+ try {
592+ nCand = fitter.process (tr1, tr2);
593+ } catch (...) {
594+ registry.fill (HIST (" hCaughtExceptions" ), 0 .5f );
595+ LOG (error) << " Exception caught in DCA fitter process call!" ;
596+ return ;
597+ }
598+ if (nCand == 0 )
599+ return ; // variables are such that candidate is accepted (not obvious...)
600+
601+ // Calculate DCAxy of the cascade (with bending)
602+ o2::track::TrackPar wrongV0 = fitter.createParentTrackPar ();
603+ wrongV0.setAbsCharge (0 ); // charge zero
604+ gpu::gpustd::array<float , 2 > dcaInfo;
605+ dcaInfo[0 ] = 999 ;
606+ dcaInfo[1 ] = 999 ;
607+
608+ // bachelor-baryon DCAxy to PV
609+ o2::base::Propagator::Instance ()->propagateToDCABxByBz ({collision.posX (), collision.posY (), collision.posZ ()}, wrongV0, 2 .f , matCorr, &dcaInfo);
610+ cascadecandidate.bachBaryonDCAxyToPV = dcaInfo[0 ];
611+
612+ const auto & vtx = fitter.getPCACandidate ();
613+ if (!fitter.isPropagateTracksToVertexDone ())
614+ return ;
615+
616+ std::array<float , 3 > tr1p;
617+ std::array<float , 3 > tr2p;
618+
619+ fitter.getTrack (1 ).getPxPyPzGlo (tr1p);
620+ fitter.getTrack (2 ).getPxPyPzGlo (tr2p);
621+
622+ // bachelor-baryon CosPA
623+ cascadecandidate.bachBaryonCosPA = RecoDecay::cpa (
624+ array{collision.posX (), collision.posY (), collision.posZ ()},
625+ array{vtx[0 ], vtx[1 ], vtx[2 ]},
626+ array{tr1p[0 ] + tr2p[0 ], tr1p[1 ] + tr2p[1 ], tr1p[2 ] + tr2p[2 ]});
627+
628+ // Potentially also to be considered: bachelor-baryon DCA (between the two tracks)
629+ // to be added here as complementary information in the future
630+ }
631+
571632 template <class TTrackTo , typename TCascObject>
572633 bool buildCascadeCandidate (TCascObject const & cascade)
573634 {
@@ -582,6 +643,16 @@ struct cascadeBuilder {
582643 auto negTrack = v0.template negTrack_as <TTrackTo>();
583644 auto const & collision = cascade.collision ();
584645
646+ if (calculateBachBaryonVars) {
647+ // Calculates properties of the V0 comprised of bachelor and baryon in the cascade
648+ // baryon: distinguished via bachelor charge
649+ if (bachTrack.sign () < 0 ) {
650+ processBachBaryonVariables (collision, bachTrack, posTrack);
651+ } else {
652+ processBachBaryonVariables (collision, bachTrack, negTrack);
653+ }
654+ }
655+
585656 // value 0.5: any considered cascade
586657 statisticsRegistry.cascstats [kCascAll ]++;
587658
@@ -785,7 +856,8 @@ struct cascadeBuilder {
785856 cascadecandidate.bachP [2 ] + cascadecandidate.v0mompos [2 ] + cascadecandidate.v0momneg [2 ], // <--- redundant but ok
786857 cascadecandidate.v0dcadau , cascadecandidate.dcacascdau ,
787858 cascadecandidate.v0dcapostopv , cascadecandidate.v0dcanegtopv ,
788- cascadecandidate.bachDCAxy , cascadecandidate.cascDCAxy , cascadecandidate.cascDCAz ); // <--- no corresponding stratrack information available
859+ cascadecandidate.bachDCAxy , cascadecandidate.cascDCAxy , cascadecandidate.cascDCAz , // <--- no corresponding stratrack information available
860+ cascadecandidate.bachBaryonCosPA , cascadecandidate.bachBaryonDCAxyToPV );
789861
790862 // populate cascade covariance matrices if required by any other task
791863 if (createCascCovMats) {
@@ -853,7 +925,8 @@ struct cascadeBuilder {
853925 cascadecandidate.bachP [2 ] + cascadecandidate.v0mompos [2 ] + cascadecandidate.v0momneg [2 ],
854926 cascadecandidate.v0dcadau , cascadecandidate.dcacascdau ,
855927 cascadecandidate.v0dcapostopv , cascadecandidate.v0dcanegtopv ,
856- cascadecandidate.bachDCAxy , cascadecandidate.cascDCAxy , cascadecandidate.cascDCAz );
928+ cascadecandidate.bachDCAxy , cascadecandidate.cascDCAxy , cascadecandidate.cascDCAz ,
929+ cascadecandidate.bachBaryonCosPA , cascadecandidate.bachBaryonDCAxyToPV );
857930
858931 // populate cascade covariance matrices if required by any other task
859932 if (createCascCovMats) {
@@ -1003,6 +1076,7 @@ struct cascadeBuilder {
10031076 cascadecandidate.v0dcadau , cascadecandidate.dcacascdau ,
10041077 cascadecandidate.v0dcapostopv , cascadecandidate.v0dcanegtopv ,
10051078 cascadecandidate.bachDCAxy , cascadecandidate.cascDCAxy , cascadecandidate.cascDCAz , // <--- stratrack (cascDCAxy/z)
1079+ cascadecandidate.bachBaryonCosPA , cascadecandidate.bachBaryonDCAxyToPV , // <--- anti-inv-mass structure
10061080 trackedCascade.matchingChi2 (), trackedCascade.topologyChi2 (), trackedCascade.itsClsSize ()); // <--- stratrack fit info
10071081 }
10081082 }
0 commit comments