Skip to content

Commit 4e92d0d

Browse files
miranov25miranov25f3sch
authored
O2-4592 - adding TOF dX and dZ to the track QA table with int8 precision (#13787)
* O2-4592 - adding TOF dX and dZ to the track QA table with relative sigma precision nBins*2 * O2-4592 - typo fix * O2-4592 - clang-format * AOD: TrackQA_002 Signed-off-by: Felix Schlepper <felix.schlepper@cern.ch> * AOD: Activate TrackQA_002 Signed-off-by: Felix Schlepper <felix.schlepper@cern.ch> * O2-4592 - patch fix from Felix (not full fix yet) * O2-4592 - typ fix - getting TOF source --------- Signed-off-by: Felix Schlepper <felix.schlepper@cern.ch> Co-authored-by: miranov25 <marian.ivanov@cern.cg> Co-authored-by: Felix Schlepper <felix.schlepper@cern.ch>
1 parent 560a1e9 commit 4e92d0d

File tree

4 files changed

+40
-10
lines changed

4 files changed

+40
-10
lines changed

Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,8 @@ class AODProducerWorkflowDPL : public Task
433433
int8_t dRefGloSnp{std::numeric_limits<int8_t>::min()};
434434
int8_t dRefGloTgl{std::numeric_limits<int8_t>::min()};
435435
int8_t dRefGloQ2Pt{std::numeric_limits<int8_t>::min()};
436+
int8_t dTofdX{std::numeric_limits<int8_t>::min()};
437+
int8_t dTofdZ{std::numeric_limits<int8_t>::min()};
436438
};
437439

438440
// helper struct for addToFwdTracksTable()

Detectors/AOD/src/AODProducerWorkflowSpec.cxx

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,9 @@ void AODProducerWorkflowDPL::addToTracksQATable(TracksQACursorType& tracksQACurs
381381
trackQAInfoHolder.dRefGloZ,
382382
trackQAInfoHolder.dRefGloSnp,
383383
trackQAInfoHolder.dRefGloTgl,
384-
trackQAInfoHolder.dRefGloQ2Pt);
384+
trackQAInfoHolder.dRefGloQ2Pt,
385+
trackQAInfoHolder.dTofdX,
386+
trackQAInfoHolder.dTofdZ);
385387
}
386388

387389
template <typename mftTracksCursorType, typename AmbigMFTTracksCursorType>
@@ -2567,6 +2569,12 @@ AODProducerWorkflowDPL::TrackQA AODProducerWorkflowDPL::processBarrelTrackQA(int
25672569
trackQAHolder.tpcdcaR = 100. * dcaInfo[0] / sqrt(1. + trackPar.getQ2Pt() * trackPar.getQ2Pt());
25682570
trackQAHolder.tpcdcaZ = 100. * dcaInfo[1] / sqrt(1. + trackPar.getQ2Pt() * trackPar.getQ2Pt());
25692571
}
2572+
// This allows to safely clamp any float to one byte, using the
2573+
// minmal/maximum values as under-/overflow borders and rounding to the nearest integer
2574+
auto safeInt8Clamp = [](auto value) -> int8_t {
2575+
using ValType = decltype(value);
2576+
return static_cast<int8_t>(TMath::Nint(std::clamp(value, static_cast<ValType>(std::numeric_limits<int8_t>::min()), static_cast<ValType>(std::numeric_limits<int8_t>::max()))));
2577+
};
25702578
/// get tracklet byteMask
25712579
uint8_t clusterCounters[8] = {0};
25722580
{
@@ -2597,6 +2605,16 @@ AODProducerWorkflowDPL::TrackQA AODProducerWorkflowDPL::processBarrelTrackQA(int
25972605
trackQAHolder.tpcdEdxTot1R = uint8_t(tpcOrig.getdEdx().dEdxTotOROC1 * dEdxNorm);
25982606
trackQAHolder.tpcdEdxTot2R = uint8_t(tpcOrig.getdEdx().dEdxTotOROC2 * dEdxNorm);
25992607
trackQAHolder.tpcdEdxTot3R = uint8_t(tpcOrig.getdEdx().dEdxTotOROC3 * dEdxNorm);
2608+
///
2609+
float scaleTOF{0};
2610+
auto contributorsGIDA = data.getSingleDetectorRefs(trackIndex);
2611+
if (contributorsGIDA[GIndex::Source::TOF].isIndexSet()) { // ITS-TPC-TRD-TOF, ITS-TPC-TOF, TPC-TRD-TOF, TPC-TOF
2612+
const auto& tofMatch = data.getTOFMatch(trackIndex);
2613+
const float qpt = trackPar.getQ2Pt();
2614+
scaleTOF = std::sqrt(o2::aod::track::trackQAScaledTOF[0] * o2::aod::track::trackQAScaledTOF[0] + qpt * qpt * o2::aod::track::trackQAScaledTOF[1] * o2::aod::track::trackQAScaledTOF[1]) / (2. * o2::aod::track::trackQAScaleBins);
2615+
trackQAHolder.dTofdX = safeInt8Clamp(tofMatch.getDXatTOF() / scaleTOF);
2616+
trackQAHolder.dTofdZ = safeInt8Clamp(tofMatch.getDZatTOF() / scaleTOF);
2617+
}
26002618

26012619
// Add matching information at a reference point (defined by
26022620
// o2::aod::track::trackQARefRadius) in the same frame as the global track
@@ -2622,13 +2640,6 @@ AODProducerWorkflowDPL::TrackQA AODProducerWorkflowDPL::processBarrelTrackQA(int
26222640
return o2::aod::track::trackQAScaleBins / std::sqrt(o2::aod::track::trackQAScaleGloP0[i] * o2::aod::track::trackQAScaleGloP0[i] + (o2::aod::track::trackQAScaleGloP1[i] * x) * (o2::aod::track::trackQAScaleGloP1[i] * x));
26232641
};
26242642

2625-
// This allows to safely clamp any float to one byte, using the
2626-
// minmal/maximum values as under-/overflow borders and rounding to the nearest integer
2627-
auto safeInt8Clamp = [](auto value) -> int8_t {
2628-
using ValType = decltype(value);
2629-
return static_cast<int8_t>(TMath::Nint(std::clamp(value, static_cast<ValType>(std::numeric_limits<int8_t>::min()), static_cast<ValType>(std::numeric_limits<int8_t>::max()))));
2630-
};
2631-
26322643
// Calculate deltas for contributors
26332644
trackQAHolder.dRefContY = safeInt8Clamp((itsCopy.getY() - tpcCopy.getY()) * scaleCont(0));
26342645
trackQAHolder.dRefContZ = safeInt8Clamp((itsCopy.getZ() - tpcCopy.getZ()) * scaleCont(1));
@@ -2641,6 +2652,7 @@ AODProducerWorkflowDPL::TrackQA AODProducerWorkflowDPL::processBarrelTrackQA(int
26412652
trackQAHolder.dRefGloSnp = safeInt8Clamp(((itsCopy.getSnp() + tpcCopy.getSnp()) * 0.5f - gloCopy.getSnp()) * scaleGlo(2));
26422653
trackQAHolder.dRefGloTgl = safeInt8Clamp(((itsCopy.getTgl() + tpcCopy.getTgl()) * 0.5f - gloCopy.getTgl()) * scaleGlo(3));
26432654
trackQAHolder.dRefGloQ2Pt = safeInt8Clamp(((itsCopy.getQ2Pt() + tpcCopy.getQ2Pt()) * 0.5f - gloCopy.getQ2Pt()) * scaleGlo(4));
2655+
//
26442656

26452657
if (O2_ENUM_TEST_BIT(mStreamerMask, AODProducerStreamerMask::TrackQA)) {
26462658
(*mStreamer) << "trackQA"
@@ -2684,6 +2696,9 @@ AODProducerWorkflowDPL::TrackQA AODProducerWorkflowDPL::processBarrelTrackQA(int
26842696
<< "trackQAHolder.dRefGloSnp=" << trackQAHolder.dRefGloSnp
26852697
<< "trackQAHolder.dRefGloTgl=" << trackQAHolder.dRefGloTgl
26862698
<< "trackQAHolder.dRefGloQ2Pt=" << trackQAHolder.dRefGloQ2Pt
2699+
<< "trackQAHolder.dTofdX=" << trackQAHolder.dTofdX
2700+
<< "trackQAHolder.dTofdZ=" << trackQAHolder.dTofdZ
2701+
<< "scaleTOF=" << scaleTOF
26872702
<< "\n";
26882703
}
26892704
}

Framework/Core/include/Framework/AnalysisDataModel.h

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -686,6 +686,8 @@ DECLARE_SOA_COLUMN(DeltaRefGloParamZ, deltaRefGloParamZ, int8_t); //! No
686686
DECLARE_SOA_COLUMN(DeltaRefGloParamSnp, deltaRefGloParamSnp, int8_t); //! Normalized delta of global track to average contributors matched tracks at reference point in the same frame Snp
687687
DECLARE_SOA_COLUMN(DeltaRefGloParamTgl, deltaRefGloParamTgl, int8_t); //! Normalized delta of global track to average contributors matched tracks at reference point in the same frame Tgl
688688
DECLARE_SOA_COLUMN(DeltaRefGloParamQ2Pt, deltaRefGloParamQ2Pt, int8_t); //! Normalized delta of global track to average contributors matched tracks at reference point in the same frame Q2Pt
689+
DECLARE_SOA_COLUMN(DeltaTOFdX, deltaTOFdX, int8_t); //!
690+
DECLARE_SOA_COLUMN(DeltaTOFdZ, deltaTOFdZ, int8_t); //!
689691

690692
DECLARE_SOA_DYNAMIC_COLUMN(IsDummy, isDummy, //! indicates if the propagation of the contrib. tracks was successful and residuals are available
691693
[](int8_t cY, int8_t cZ, int8_t cSnp, int8_t cTgl, int8_t cQ2Pt, int8_t gY, int8_t gZ, int8_t gSnp, int8_t gTgl, int8_t gQ2Pt) -> bool {
@@ -709,7 +711,17 @@ DECLARE_SOA_TABLE_VERSIONED(TracksQA_001, "AOD", "TRACKQA", 1, //! trackQA infor
709711
trackqa::IsDummy<trackqa::DeltaRefContParamY, trackqa::DeltaRefContParamZ, trackqa::DeltaRefContParamSnp, trackqa::DeltaRefContParamTgl, trackqa::DeltaRefContParamQ2Pt,
710712
trackqa::DeltaRefGloParamY, trackqa::DeltaRefGloParamZ, trackqa::DeltaRefGloParamSnp, trackqa::DeltaRefGloParamTgl, trackqa::DeltaRefGloParamQ2Pt>);
711713

712-
using TracksQAVersion = TracksQA_001;
714+
DECLARE_SOA_TABLE_VERSIONED(TracksQA_002, "AOD", "TRACKQA", 2, //! trackQA information - version 2 - including contributor residuals of matched tracks at reference radius + TOF delta information
715+
o2::soa::Index<>, trackqa::TrackId, trackqa::TPCTime0, trackqa::TPCDCAR, trackqa::TPCDCAZ, trackqa::TPCClusterByteMask,
716+
trackqa::TPCdEdxMax0R, trackqa::TPCdEdxMax1R, trackqa::TPCdEdxMax2R, trackqa::TPCdEdxMax3R,
717+
trackqa::TPCdEdxTot0R, trackqa::TPCdEdxTot1R, trackqa::TPCdEdxTot2R, trackqa::TPCdEdxTot3R,
718+
trackqa::DeltaRefContParamY, trackqa::DeltaRefContParamZ, trackqa::DeltaRefContParamSnp, trackqa::DeltaRefContParamTgl, trackqa::DeltaRefContParamQ2Pt,
719+
trackqa::DeltaRefGloParamY, trackqa::DeltaRefGloParamZ, trackqa::DeltaRefGloParamSnp, trackqa::DeltaRefGloParamTgl, trackqa::DeltaRefGloParamQ2Pt,
720+
trackqa::DeltaTOFdX, trackqa::DeltaTOFdZ,
721+
trackqa::IsDummy<trackqa::DeltaRefContParamY, trackqa::DeltaRefContParamZ, trackqa::DeltaRefContParamSnp, trackqa::DeltaRefContParamTgl, trackqa::DeltaRefContParamQ2Pt,
722+
trackqa::DeltaRefGloParamY, trackqa::DeltaRefGloParamZ, trackqa::DeltaRefGloParamSnp, trackqa::DeltaRefGloParamTgl, trackqa::DeltaRefGloParamQ2Pt>);
723+
724+
using TracksQAVersion = TracksQA_002;
713725
using TracksQA = TracksQAVersion::iterator;
714726

715727
namespace fwdtrack
@@ -1651,7 +1663,7 @@ using Tracked3body = Tracked3Bodys::iterator;
16511663
namespace origins
16521664
{
16531665
DECLARE_SOA_COLUMN(DataframeID, dataframeID, uint64_t); //! Data frame ID (what is usually found in directory name in the AO2D.root, i.e. DF_XXX)
1654-
} // namespace origin
1666+
} // namespace origins
16551667

16561668
DECLARE_SOA_TABLE(Origins, "AOD", "ORIGIN", //! Table which contains the IDs of all dataframes merged into this dataframe
16571669
o2::soa::Index<>, origins::DataframeID);

Framework/Core/include/Framework/DataTypes.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ constexpr std::array<float, 5> trackQAScaleContP0{0.257192, 0.0775375, 0.0042428
130130
constexpr std::array<float, 5> trackQAScaleContP1{0.189371, 0.409071, 0.00694444, 0.00720038, 0.0806902};
131131
constexpr std::array<float, 5> trackQAScaleGloP0{0.130985, 0.0775375, 0.00194703, 0.000405458, 0.0160007};
132132
constexpr std::array<float, 5> trackQAScaleGloP1{0.183731, 0.409071, 0.00621802, 0.00624881, 0.0418957};
133+
constexpr std::array<float, 2> trackQAScaledTOF{1.1, 0.33};
133134
} // namespace o2::aod::track
134135

135136
namespace o2::aod::fwdtrack

0 commit comments

Comments
 (0)