@@ -124,6 +124,7 @@ struct cascadeBuilder {
124124 Produces<aod::CascTrackXs> cascTrackXs; // if desired for replaying of position information
125125 Produces<aod::CascBBs> cascbb; // if enabled
126126 Produces<aod::CascCovs> casccovs; // if requested by someone
127+ Produces<aod::TraCascCovs> tracasccovs; // if requested by someone
127128 Produces<aod::KFCascCovs> kfcasccovs; // if requested by someone
128129
129130 // produces calls for machine-learning selections
@@ -136,7 +137,7 @@ struct cascadeBuilder {
136137 Configurable<bool > d_UseAutodetectMode{" d_UseAutodetectMode" , false , " Autodetect requested topo sels" };
137138
138139 // Configurables related to table creation
139- Configurable<int > createCascCovMats{" createCascCovMats" , -1 , {" Produces V0 cov matrices. -1: auto, 0: don't, 1: yes. Default: auto (-1)" }};
140+ Configurable<int > createCascCovMats{" createCascCovMats" , -1 , {" Produces casc cov matrices. -1: auto, 0: don't, 1: yes. Default: auto (-1)" }};
140141 Configurable<int > createCascTrackXs{" createCascTrackXs" , -1 , {" Produces track X at minima table. -1: auto, 0: don't, 1: yes. Default: auto (-1)" }};
141142
142143 // Topological selection criteria
@@ -1601,15 +1602,19 @@ struct cascadeBuilder {
16011602 // store momentum covariance matrix
16021603 std::array<float , 21 > covTv0 = {0 .};
16031604 std::array<float , 21 > covTbachelor = {0 .};
1605+ float covCascade[21 ];
16041606 // std::array<float, 6> momentumCovariance;
1605- float momentumCovariance[6 ];
16061607 lV0Track.getCovXYZPxPyPzGlo (covTv0);
16071608 lBachelorTrack.getCovXYZPxPyPzGlo (covTbachelor);
16081609 constexpr int MomInd[6 ] = {9 , 13 , 14 , 18 , 19 , 20 }; // cov matrix elements for momentum component
1610+ for (int i = 0 ; i < 21 ; i++) {
1611+ covCascade[i] = 0 .0f ;
1612+ }
16091613 for (int i = 0 ; i < 6 ; i++) {
1610- momentumCovariance[i] = covTv0[MomInd[i]] + covTbachelor[MomInd[i]];
1614+ covCascade[i] = positionCovariance[i];
1615+ covCascade[MomInd[i]] = covTv0[MomInd[i]] + covTbachelor[MomInd[i]];
16111616 }
1612- casccovs (positionCovariance, momentumCovariance );
1617+ casccovs (covCascade );
16131618 }
16141619 }
16151620
@@ -1778,15 +1783,19 @@ struct cascadeBuilder {
17781783 // store momentum covariance matrix
17791784 std::array<float , 21 > covTv0 = {0 .};
17801785 std::array<float , 21 > covTbachelor = {0 .};
1786+ float covCascade[21 ];
17811787 // std::array<float, 6> momentumCovariance;
1782- float momentumCovariance[6 ];
17831788 lV0Track.getCovXYZPxPyPzGlo (covTv0);
17841789 lBachelorTrack.getCovXYZPxPyPzGlo (covTbachelor);
17851790 constexpr int MomInd[6 ] = {9 , 13 , 14 , 18 , 19 , 20 }; // cov matrix elements for momentum component
1791+ for (int i = 0 ; i < 21 ; i++) {
1792+ covCascade[i] = 0 .0f ;
1793+ }
17861794 for (int i = 0 ; i < 6 ; i++) {
1787- momentumCovariance[i] = covTv0[MomInd[i]] + covTbachelor[MomInd[i]];
1795+ covCascade[i] = positionCovariance[i];
1796+ covCascade[MomInd[i]] = covTv0[MomInd[i]] + covTbachelor[MomInd[i]];
17881797 }
1789- casccovs (positionCovariance, momentumCovariance );
1798+ casccovs (covCascade );
17901799 }
17911800
17921801 float lPt = 0 .0f ;
@@ -1830,7 +1839,7 @@ struct cascadeBuilder {
18301839 continue ; // safety (should be fine but depends on future stratrack dev)
18311840 // Track casting to <TTracksTo>
18321841 auto cascadeTrack = trackedCascade.template track_as <TTrackTo>();
1833- auto cascadeTrackPar = getTrackPar (cascadeTrack);
1842+ auto cascadeTrackPar = getTrackParCov (cascadeTrack);
18341843 auto const & collision = cascade.collision ();
18351844 gpu::gpustd::array<float , 2 > dcaInfo;
18361845 lCascadeTrack.setPID (o2::track::PID::XiMinus); // FIXME: not OK for omegas
@@ -1910,6 +1919,19 @@ struct cascadeBuilder {
19101919 cascadecandidate.v0dcapostopv , cascadecandidate.v0dcanegtopv ,
19111920 cascadecandidate.bachDCAxy , cascadecandidate.cascDCAxy , cascadecandidate.cascDCAz , // <--- stratrack (cascDCAxy/z)
19121921 trackedCascade.matchingChi2 (), trackedCascade.topologyChi2 (), trackedCascade.itsClsSize ()); // <--- stratrack fit info
1922+
1923+ if (createCascCovMats) {
1924+ // create tracked cascade covariance in exactly the same way as non-tracked
1925+ // ensures getter consistency and full compatibility in template functions
1926+ // (easy switching between tracked and non-tracked)
1927+ std::array<float , 21 > traCovMat = {0 .};
1928+ cascadeTrackPar.getCovXYZPxPyPzGlo (traCovMat);
1929+ float traCovMatArray[21 ];
1930+ for (int ii = 0 ; ii < 21 ; ii++) {
1931+ traCovMatArray[ii] = traCovMat[ii];
1932+ }
1933+ tracasccovs (traCovMatArray);
1934+ }
19131935 }
19141936 }
19151937 // En masse filling at end of process call
0 commit comments