Skip to content

Commit f0c05c6

Browse files
ddobrigkalibuild
andauthored
PWGLF: seamless treatment of cascade cov mats in builder / data model (#8225)
Co-authored-by: ALICE Builder <alibuild@users.noreply.github.com>
1 parent 8c1e889 commit f0c05c6

File tree

2 files changed

+56
-14
lines changed

2 files changed

+56
-14
lines changed

PWGLF/DataModel/LFStrangenessTables.h

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1043,13 +1043,22 @@ DECLARE_SOA_COLUMN(BachX, bachX, float); //! bachelor track X at min
10431043
//______________________________________________________
10441044
// REGULAR COLUMNS FOR CASCCOVS
10451045
// Saved from finding: covariance matrix of parent track (on request)
1046-
DECLARE_SOA_COLUMN(PositionCovMat, positionCovMat, float[6]); //! covariance matrix elements
1047-
DECLARE_SOA_COLUMN(MomentumCovMat, momentumCovMat, float[6]); //! covariance matrix elements
1046+
DECLARE_SOA_DYNAMIC_COLUMN(PositionCovMat, positionCovMat, //! for transparent handling
1047+
[](const float covMat[21]) -> std::vector<float> {
1048+
std::vector<float> posCovMat { covMat[0], covMat[1], covMat[2], covMat[3], covMat[4], covMat[5] };
1049+
return posCovMat; });
1050+
DECLARE_SOA_DYNAMIC_COLUMN(MomentumCovMat, momentumCovMat, //! for transparent handling
1051+
[](const float covMat[21]) -> std::vector<float> {
1052+
std::vector<float> momCovMat { covMat[9], covMat[13], covMat[14], covMat[18], covMat[19], covMat[20] };
1053+
return momCovMat; });
10481054
DECLARE_SOA_COLUMN(KFTrackCovMat, kfTrackCovMat, float[21]); //! covariance matrix elements for KF method (Cascade)
10491055
DECLARE_SOA_COLUMN(KFTrackCovMatV0, kfTrackCovMatV0, float[21]); //! covariance matrix elements for KF method (V0)
10501056
DECLARE_SOA_COLUMN(KFTrackCovMatV0DauPos, kfTrackCovMatV0DauPos, float[21]); //! covariance matrix elements for KF method (V0 pos daughter)
10511057
DECLARE_SOA_COLUMN(KFTrackCovMatV0DauNeg, kfTrackCovMatV0DauNeg, float[21]); //! covariance matrix elements for KF method (V0 neg daughter)
10521058

1059+
// for CascCovs / TraCascCovs, meant to provide consistent interface everywhere
1060+
DECLARE_SOA_COLUMN(CovMat, covMat, float[21]); //! covariance matrix elements
1061+
10531062
//______________________________________________________
10541063
// REGULAR COLUMNS FOR CASCBBS
10551064
// General cascade properties: position, momentum
@@ -1419,11 +1428,20 @@ DECLARE_SOA_TABLE(CascMCMothers, "AOD", "CASCMCMOTHER", //! optional table for M
14191428
DECLARE_SOA_TABLE(CascBBs, "AOD", "CASCBB", //! bachelor-baryon correlation variables
14201429
cascdata::BachBaryonCosPA, cascdata::BachBaryonDCAxyToPV)
14211430

1422-
DECLARE_SOA_TABLE_FULL(CascCovs, "CascCovs", "AOD", "CASCCOVS", //!
1423-
cascdata::PositionCovMat, cascdata::MomentumCovMat);
1431+
DECLARE_SOA_TABLE(CascCovs, "AOD", "CASCCOVS", //!
1432+
cascdata::CovMat,
1433+
cascdata::PositionCovMat<cascdata::CovMat>,
1434+
cascdata::MomentumCovMat<cascdata::CovMat>,
1435+
o2::soa::Marker<1>);
1436+
1437+
DECLARE_SOA_TABLE(KFCascCovs, "AOD", "KFCASCCOVS", //!
1438+
cascdata::KFTrackCovMat, cascdata::KFTrackCovMatV0, cascdata::KFTrackCovMatV0DauPos, cascdata::KFTrackCovMatV0DauNeg);
14241439

1425-
DECLARE_SOA_TABLE_FULL(KFCascCovs, "KFCascCovs", "AOD", "KFCASCCOVS", //!
1426-
cascdata::KFTrackCovMat, cascdata::KFTrackCovMatV0, cascdata::KFTrackCovMatV0DauPos, cascdata::KFTrackCovMatV0DauNeg);
1440+
DECLARE_SOA_TABLE(TraCascCovs, "AOD", "TRACASCCOVS", //!
1441+
cascdata::CovMat,
1442+
cascdata::PositionCovMat<cascdata::CovMat>,
1443+
cascdata::MomentumCovMat<cascdata::CovMat>,
1444+
o2::soa::Marker<2>);
14271445

14281446
// extended table with expression columns that can be used as arguments of dynamic columns
14291447
DECLARE_SOA_EXTENDED_TABLE_USER(CascCores, StoredCascCores, "CascDATAEXT", //!
@@ -1499,6 +1517,8 @@ using CascadesLinked = soa::Join<Cascades, CascDataLink>;
14991517
using CascadeLinked = CascadesLinked::iterator;
15001518
using KFCascadesLinked = soa::Join<Cascades, KFCascDataLink>;
15011519
using KFCascadeLinked = KFCascadesLinked::iterator;
1520+
using TraCascadesLinked = soa::Join<Cascades, TraCascDataLink>;
1521+
using TraCascadeLinked = TraCascadesLinked::iterator;
15021522

15031523
namespace cascdata
15041524
{

PWGLF/TableProducer/Strangeness/cascadebuilder.cxx

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)