Skip to content

Commit 8d75c84

Browse files
authored
AOD: switch TracksQA from 000 to 001 (#13758)
1 parent 33b4212 commit 8d75c84

File tree

2 files changed

+112
-131
lines changed

2 files changed

+112
-131
lines changed

Detectors/AOD/src/AODProducerWorkflowSpec.cxx

Lines changed: 111 additions & 130 deletions
Original file line numberDiff line numberDiff line change
@@ -358,47 +358,30 @@ void AODProducerWorkflowDPL::addToTracksExtraTable(TracksExtraCursorType& tracks
358358
template <typename TracksQACursorType>
359359
void AODProducerWorkflowDPL::addToTracksQATable(TracksQACursorType& tracksQACursor, TrackQA& trackQAInfoHolder)
360360
{
361-
if constexpr (std::is_same_v<o2::aod::TracksQAVersion, o2::aod::TracksQA_001>) { // TODO remove remove once version changes
362-
tracksQACursor(
363-
trackQAInfoHolder.trackID,
364-
truncateFloatFraction(trackQAInfoHolder.tpcTime0, mTPCTime0),
365-
trackQAInfoHolder.tpcdcaR,
366-
trackQAInfoHolder.tpcdcaZ,
367-
trackQAInfoHolder.tpcClusterByteMask,
368-
trackQAInfoHolder.tpcdEdxMax0R,
369-
trackQAInfoHolder.tpcdEdxMax1R,
370-
trackQAInfoHolder.tpcdEdxMax2R,
371-
trackQAInfoHolder.tpcdEdxMax3R,
372-
trackQAInfoHolder.tpcdEdxTot0R,
373-
trackQAInfoHolder.tpcdEdxTot1R,
374-
trackQAInfoHolder.tpcdEdxTot2R,
375-
trackQAInfoHolder.tpcdEdxTot3R,
376-
trackQAInfoHolder.dRefContY,
377-
trackQAInfoHolder.dRefContZ,
378-
trackQAInfoHolder.dRefContSnp,
379-
trackQAInfoHolder.dRefContTgl,
380-
trackQAInfoHolder.dRefContQ2Pt,
381-
trackQAInfoHolder.dRefGloY,
382-
trackQAInfoHolder.dRefGloZ,
383-
trackQAInfoHolder.dRefGloSnp,
384-
trackQAInfoHolder.dRefGloTgl,
385-
trackQAInfoHolder.dRefGloQ2Pt);
386-
} else {
387-
tracksQACursor(
388-
trackQAInfoHolder.trackID,
389-
trackQAInfoHolder.tpcTime0,
390-
trackQAInfoHolder.tpcdcaR,
391-
trackQAInfoHolder.tpcdcaZ,
392-
trackQAInfoHolder.tpcClusterByteMask,
393-
trackQAInfoHolder.tpcdEdxMax0R,
394-
trackQAInfoHolder.tpcdEdxMax1R,
395-
trackQAInfoHolder.tpcdEdxMax2R,
396-
trackQAInfoHolder.tpcdEdxMax3R,
397-
trackQAInfoHolder.tpcdEdxTot0R,
398-
trackQAInfoHolder.tpcdEdxTot1R,
399-
trackQAInfoHolder.tpcdEdxTot2R,
400-
trackQAInfoHolder.tpcdEdxTot3R);
401-
}
361+
tracksQACursor(
362+
trackQAInfoHolder.trackID,
363+
truncateFloatFraction(trackQAInfoHolder.tpcTime0, mTPCTime0),
364+
trackQAInfoHolder.tpcdcaR,
365+
trackQAInfoHolder.tpcdcaZ,
366+
trackQAInfoHolder.tpcClusterByteMask,
367+
trackQAInfoHolder.tpcdEdxMax0R,
368+
trackQAInfoHolder.tpcdEdxMax1R,
369+
trackQAInfoHolder.tpcdEdxMax2R,
370+
trackQAInfoHolder.tpcdEdxMax3R,
371+
trackQAInfoHolder.tpcdEdxTot0R,
372+
trackQAInfoHolder.tpcdEdxTot1R,
373+
trackQAInfoHolder.tpcdEdxTot2R,
374+
trackQAInfoHolder.tpcdEdxTot3R,
375+
trackQAInfoHolder.dRefContY,
376+
trackQAInfoHolder.dRefContZ,
377+
trackQAInfoHolder.dRefContSnp,
378+
trackQAInfoHolder.dRefContTgl,
379+
trackQAInfoHolder.dRefContQ2Pt,
380+
trackQAInfoHolder.dRefGloY,
381+
trackQAInfoHolder.dRefGloZ,
382+
trackQAInfoHolder.dRefGloSnp,
383+
trackQAInfoHolder.dRefGloTgl,
384+
trackQAInfoHolder.dRefGloQ2Pt);
402385
}
403386

404387
template <typename mftTracksCursorType, typename AmbigMFTTracksCursorType>
@@ -2615,95 +2598,93 @@ AODProducerWorkflowDPL::TrackQA AODProducerWorkflowDPL::processBarrelTrackQA(int
26152598
trackQAHolder.tpcdEdxTot2R = uint8_t(tpcOrig.getdEdx().dEdxTotOROC2 * dEdxNorm);
26162599
trackQAHolder.tpcdEdxTot3R = uint8_t(tpcOrig.getdEdx().dEdxTotOROC3 * dEdxNorm);
26172600

2618-
if constexpr (std::is_same_v<o2::aod::TracksQAVersion, o2::aod::TracksQA_001>) { // TODO remove remove once version changes
2619-
// Add matching information at a reference point (defined by
2620-
// o2::aod::track::trackQARefRadius) in the same frame as the global track
2621-
// without material corrections and error propagation
2622-
if (auto itsContGID = data.getITSContributorGID(trackIndex); itsContGID.isIndexSet() && itsContGID.getSource() != GIndex::ITSAB) {
2623-
const auto& itsOrig = data.getITSTrack(itsContGID);
2624-
o2::track::TrackPar gloCopy = trackPar;
2625-
o2::track::TrackPar itsCopy = itsOrig;
2626-
o2::track::TrackPar tpcCopy = tpcOrig;
2627-
if (prop->propagateToX(gloCopy, o2::aod::track::trackQARefRadius, prop->getNominalBz(), o2::base::Propagator::MAX_SIN_PHI, o2::base::Propagator::MAX_STEP, mMatCorr) &&
2628-
prop->propagateToAlphaX(tpcCopy, gloCopy.getAlpha(), o2::aod::track::trackQARefRadius, false, o2::base::Propagator::MAX_SIN_PHI, o2::base::Propagator::MAX_STEP, 1, mMatCorr) &&
2629-
prop->propagateToAlphaX(itsCopy, gloCopy.getAlpha(), o2::aod::track::trackQARefRadius, false, o2::base::Propagator::MAX_SIN_PHI, o2::base::Propagator::MAX_STEP, 1, mMatCorr)) {
2630-
// All tracks are now at the same radius and in the same frame and we can calculate the deltas wrt. to the global track
2631-
// The scale is defined by the global track scaling depending on beta0
2632-
const float beta0 = std::sqrt(std::min(50.f / tpcOrig.getdEdx().dEdxMaxTPC, 1.f));
2633-
const float qpt = gloCopy.getQ2Pt();
2634-
const float x = qpt / beta0;
2635-
// scaling is defined as sigmaBins/sqrt(p0^2 + (p1 * q/pt / beta)^2)
2636-
auto scaleCont = [&x](int i) -> float {
2637-
return o2::aod::track::trackQAScaleBins / std::sqrt(o2::aod::track::trackQAScaleContP0[i] * o2::aod::track::trackQAScaleContP0[i] + (o2::aod::track::trackQAScaleContP1[i] * x) * (o2::aod::track::trackQAScaleContP1[i] * x));
2638-
};
2639-
auto scaleGlo = [&x](int i) -> float {
2640-
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));
2641-
};
2642-
2643-
// This allows to safely clamp any float to one byte, using the
2644-
// minmal/maximum values as under-/overflow borders and rounding to the nearest integer
2645-
auto safeInt8Clamp = [](auto value) -> int8_t {
2646-
using ValType = decltype(value);
2647-
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()))));
2648-
};
2649-
2650-
// Calculate deltas for contributors
2651-
trackQAHolder.dRefContY = safeInt8Clamp((itsCopy.getY() - tpcCopy.getY()) * scaleCont(0));
2652-
trackQAHolder.dRefContZ = safeInt8Clamp((itsCopy.getZ() - tpcCopy.getZ()) * scaleCont(1));
2653-
trackQAHolder.dRefContSnp = safeInt8Clamp((itsCopy.getSnp() - tpcCopy.getSnp()) * scaleCont(2));
2654-
trackQAHolder.dRefContTgl = safeInt8Clamp((itsCopy.getTgl() - tpcCopy.getTgl()) * scaleCont(3));
2655-
trackQAHolder.dRefContQ2Pt = safeInt8Clamp((itsCopy.getQ2Pt() - tpcCopy.getQ2Pt()) * scaleCont(4));
2656-
// Calculate deltas for global track against averaged contributors
2657-
trackQAHolder.dRefGloY = safeInt8Clamp(((itsCopy.getY() + tpcCopy.getY()) * 0.5f - gloCopy.getY()) * scaleGlo(0));
2658-
trackQAHolder.dRefGloZ = safeInt8Clamp(((itsCopy.getZ() + tpcCopy.getZ()) * 0.5f - gloCopy.getZ()) * scaleGlo(1));
2659-
trackQAHolder.dRefGloSnp = safeInt8Clamp(((itsCopy.getSnp() + tpcCopy.getSnp()) * 0.5f - gloCopy.getSnp()) * scaleGlo(2));
2660-
trackQAHolder.dRefGloTgl = safeInt8Clamp(((itsCopy.getTgl() + tpcCopy.getTgl()) * 0.5f - gloCopy.getTgl()) * scaleGlo(3));
2661-
trackQAHolder.dRefGloQ2Pt = safeInt8Clamp(((itsCopy.getQ2Pt() + tpcCopy.getQ2Pt()) * 0.5f - gloCopy.getQ2Pt()) * scaleGlo(4));
2662-
2663-
if (O2_ENUM_TEST_BIT(mStreamerMask, AODProducerStreamerMask::TrackQA)) {
2664-
(*mStreamer) << "trackQA"
2665-
<< "trackITSOrig=" << itsOrig
2666-
<< "trackTPCOrig=" << tpcOrig
2667-
<< "trackITSTPCOrig=" << trackPar
2668-
<< "trackITSProp=" << itsCopy
2669-
<< "trackTPCProp=" << tpcCopy
2670-
<< "trackITSTPCProp=" << gloCopy
2671-
<< "refRadius=" << o2::aod::track::trackQARefRadius
2672-
<< "scaleBins=" << o2::aod::track::trackQAScaleBins
2673-
<< "scaleCont0=" << scaleCont(0)
2674-
<< "scaleCont1=" << scaleCont(1)
2675-
<< "scaleCont2=" << scaleCont(2)
2676-
<< "scaleCont3=" << scaleCont(3)
2677-
<< "scaleCont4=" << scaleCont(4)
2678-
<< "scaleGlo0=" << scaleGlo(0)
2679-
<< "scaleGlo1=" << scaleGlo(1)
2680-
<< "scaleGlo2=" << scaleGlo(2)
2681-
<< "scaleGlo3=" << scaleGlo(3)
2682-
<< "scaleGlo4=" << scaleGlo(4)
2683-
<< "trackQAHolder.tpcTime0=" << trackQAHolder.tpcTime0
2684-
<< "trackQAHolder.tpcdcaR=" << trackQAHolder.tpcdcaR
2685-
<< "trackQAHolder.tpcdcaZ=" << trackQAHolder.tpcdcaZ
2686-
<< "trackQAHolder.tpcdcaClusterByteMask=" << trackQAHolder.tpcClusterByteMask
2687-
<< "trackQAHolder.tpcdEdxMax0R=" << trackQAHolder.tpcdEdxMax0R
2688-
<< "trackQAHolder.tpcdEdxMax1R=" << trackQAHolder.tpcdEdxMax1R
2689-
<< "trackQAHolder.tpcdEdxMax2R=" << trackQAHolder.tpcdEdxMax2R
2690-
<< "trackQAHolder.tpcdEdxMax3R=" << trackQAHolder.tpcdEdxMax3R
2691-
<< "trackQAHolder.tpcdEdxTot0R=" << trackQAHolder.tpcdEdxTot0R
2692-
<< "trackQAHolder.tpcdEdxTot1R=" << trackQAHolder.tpcdEdxTot1R
2693-
<< "trackQAHolder.tpcdEdxTot2R=" << trackQAHolder.tpcdEdxTot2R
2694-
<< "trackQAHolder.tpcdEdxTot3R=" << trackQAHolder.tpcdEdxTot3R
2695-
<< "trackQAHolder.dRefContY=" << trackQAHolder.dRefContY
2696-
<< "trackQAHolder.dRefContZ=" << trackQAHolder.dRefContZ
2697-
<< "trackQAHolder.dRefContSnp=" << trackQAHolder.dRefContSnp
2698-
<< "trackQAHolder.dRefContTgl=" << trackQAHolder.dRefContTgl
2699-
<< "trackQAHolder.dRefContQ2Pt=" << trackQAHolder.dRefContQ2Pt
2700-
<< "trackQAHolder.dRefGloY=" << trackQAHolder.dRefGloY
2701-
<< "trackQAHolder.dRefGloZ=" << trackQAHolder.dRefGloZ
2702-
<< "trackQAHolder.dRefGloSnp=" << trackQAHolder.dRefGloSnp
2703-
<< "trackQAHolder.dRefGloTgl=" << trackQAHolder.dRefGloTgl
2704-
<< "trackQAHolder.dRefGloQ2Pt=" << trackQAHolder.dRefGloQ2Pt
2705-
<< "\n";
2706-
}
2601+
// Add matching information at a reference point (defined by
2602+
// o2::aod::track::trackQARefRadius) in the same frame as the global track
2603+
// without material corrections and error propagation
2604+
if (auto itsContGID = data.getITSContributorGID(trackIndex); itsContGID.isIndexSet() && itsContGID.getSource() != GIndex::ITSAB) {
2605+
const auto& itsOrig = data.getITSTrack(itsContGID);
2606+
o2::track::TrackPar gloCopy = trackPar;
2607+
o2::track::TrackPar itsCopy = itsOrig;
2608+
o2::track::TrackPar tpcCopy = tpcOrig;
2609+
if (prop->propagateToX(gloCopy, o2::aod::track::trackQARefRadius, prop->getNominalBz(), o2::base::Propagator::MAX_SIN_PHI, o2::base::Propagator::MAX_STEP, mMatCorr) &&
2610+
prop->propagateToAlphaX(tpcCopy, gloCopy.getAlpha(), o2::aod::track::trackQARefRadius, false, o2::base::Propagator::MAX_SIN_PHI, o2::base::Propagator::MAX_STEP, 1, mMatCorr) &&
2611+
prop->propagateToAlphaX(itsCopy, gloCopy.getAlpha(), o2::aod::track::trackQARefRadius, false, o2::base::Propagator::MAX_SIN_PHI, o2::base::Propagator::MAX_STEP, 1, mMatCorr)) {
2612+
// All tracks are now at the same radius and in the same frame and we can calculate the deltas wrt. to the global track
2613+
// The scale is defined by the global track scaling depending on beta0
2614+
const float beta0 = std::sqrt(std::min(50.f / tpcOrig.getdEdx().dEdxMaxTPC, 1.f));
2615+
const float qpt = gloCopy.getQ2Pt();
2616+
const float x = qpt / beta0;
2617+
// scaling is defined as sigmaBins/sqrt(p0^2 + (p1 * q/pt / beta)^2)
2618+
auto scaleCont = [&x](int i) -> float {
2619+
return o2::aod::track::trackQAScaleBins / std::sqrt(o2::aod::track::trackQAScaleContP0[i] * o2::aod::track::trackQAScaleContP0[i] + (o2::aod::track::trackQAScaleContP1[i] * x) * (o2::aod::track::trackQAScaleContP1[i] * x));
2620+
};
2621+
auto scaleGlo = [&x](int i) -> float {
2622+
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));
2623+
};
2624+
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+
2632+
// Calculate deltas for contributors
2633+
trackQAHolder.dRefContY = safeInt8Clamp((itsCopy.getY() - tpcCopy.getY()) * scaleCont(0));
2634+
trackQAHolder.dRefContZ = safeInt8Clamp((itsCopy.getZ() - tpcCopy.getZ()) * scaleCont(1));
2635+
trackQAHolder.dRefContSnp = safeInt8Clamp((itsCopy.getSnp() - tpcCopy.getSnp()) * scaleCont(2));
2636+
trackQAHolder.dRefContTgl = safeInt8Clamp((itsCopy.getTgl() - tpcCopy.getTgl()) * scaleCont(3));
2637+
trackQAHolder.dRefContQ2Pt = safeInt8Clamp((itsCopy.getQ2Pt() - tpcCopy.getQ2Pt()) * scaleCont(4));
2638+
// Calculate deltas for global track against averaged contributors
2639+
trackQAHolder.dRefGloY = safeInt8Clamp(((itsCopy.getY() + tpcCopy.getY()) * 0.5f - gloCopy.getY()) * scaleGlo(0));
2640+
trackQAHolder.dRefGloZ = safeInt8Clamp(((itsCopy.getZ() + tpcCopy.getZ()) * 0.5f - gloCopy.getZ()) * scaleGlo(1));
2641+
trackQAHolder.dRefGloSnp = safeInt8Clamp(((itsCopy.getSnp() + tpcCopy.getSnp()) * 0.5f - gloCopy.getSnp()) * scaleGlo(2));
2642+
trackQAHolder.dRefGloTgl = safeInt8Clamp(((itsCopy.getTgl() + tpcCopy.getTgl()) * 0.5f - gloCopy.getTgl()) * scaleGlo(3));
2643+
trackQAHolder.dRefGloQ2Pt = safeInt8Clamp(((itsCopy.getQ2Pt() + tpcCopy.getQ2Pt()) * 0.5f - gloCopy.getQ2Pt()) * scaleGlo(4));
2644+
2645+
if (O2_ENUM_TEST_BIT(mStreamerMask, AODProducerStreamerMask::TrackQA)) {
2646+
(*mStreamer) << "trackQA"
2647+
<< "trackITSOrig=" << itsOrig
2648+
<< "trackTPCOrig=" << tpcOrig
2649+
<< "trackITSTPCOrig=" << trackPar
2650+
<< "trackITSProp=" << itsCopy
2651+
<< "trackTPCProp=" << tpcCopy
2652+
<< "trackITSTPCProp=" << gloCopy
2653+
<< "refRadius=" << o2::aod::track::trackQARefRadius
2654+
<< "scaleBins=" << o2::aod::track::trackQAScaleBins
2655+
<< "scaleCont0=" << scaleCont(0)
2656+
<< "scaleCont1=" << scaleCont(1)
2657+
<< "scaleCont2=" << scaleCont(2)
2658+
<< "scaleCont3=" << scaleCont(3)
2659+
<< "scaleCont4=" << scaleCont(4)
2660+
<< "scaleGlo0=" << scaleGlo(0)
2661+
<< "scaleGlo1=" << scaleGlo(1)
2662+
<< "scaleGlo2=" << scaleGlo(2)
2663+
<< "scaleGlo3=" << scaleGlo(3)
2664+
<< "scaleGlo4=" << scaleGlo(4)
2665+
<< "trackQAHolder.tpcTime0=" << trackQAHolder.tpcTime0
2666+
<< "trackQAHolder.tpcdcaR=" << trackQAHolder.tpcdcaR
2667+
<< "trackQAHolder.tpcdcaZ=" << trackQAHolder.tpcdcaZ
2668+
<< "trackQAHolder.tpcdcaClusterByteMask=" << trackQAHolder.tpcClusterByteMask
2669+
<< "trackQAHolder.tpcdEdxMax0R=" << trackQAHolder.tpcdEdxMax0R
2670+
<< "trackQAHolder.tpcdEdxMax1R=" << trackQAHolder.tpcdEdxMax1R
2671+
<< "trackQAHolder.tpcdEdxMax2R=" << trackQAHolder.tpcdEdxMax2R
2672+
<< "trackQAHolder.tpcdEdxMax3R=" << trackQAHolder.tpcdEdxMax3R
2673+
<< "trackQAHolder.tpcdEdxTot0R=" << trackQAHolder.tpcdEdxTot0R
2674+
<< "trackQAHolder.tpcdEdxTot1R=" << trackQAHolder.tpcdEdxTot1R
2675+
<< "trackQAHolder.tpcdEdxTot2R=" << trackQAHolder.tpcdEdxTot2R
2676+
<< "trackQAHolder.tpcdEdxTot3R=" << trackQAHolder.tpcdEdxTot3R
2677+
<< "trackQAHolder.dRefContY=" << trackQAHolder.dRefContY
2678+
<< "trackQAHolder.dRefContZ=" << trackQAHolder.dRefContZ
2679+
<< "trackQAHolder.dRefContSnp=" << trackQAHolder.dRefContSnp
2680+
<< "trackQAHolder.dRefContTgl=" << trackQAHolder.dRefContTgl
2681+
<< "trackQAHolder.dRefContQ2Pt=" << trackQAHolder.dRefContQ2Pt
2682+
<< "trackQAHolder.dRefGloY=" << trackQAHolder.dRefGloY
2683+
<< "trackQAHolder.dRefGloZ=" << trackQAHolder.dRefGloZ
2684+
<< "trackQAHolder.dRefGloSnp=" << trackQAHolder.dRefGloSnp
2685+
<< "trackQAHolder.dRefGloTgl=" << trackQAHolder.dRefGloTgl
2686+
<< "trackQAHolder.dRefGloQ2Pt=" << trackQAHolder.dRefGloQ2Pt
2687+
<< "\n";
27072688
}
27082689
}
27092690
}

Framework/Core/include/Framework/AnalysisDataModel.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -714,7 +714,7 @@ DECLARE_SOA_TABLE_VERSIONED(TracksQA_001, "AOD", "TRACKQA", 1, //! trackQA infor
714714
trackqa::IsDummy<trackqa::DeltaRefContParamY, trackqa::DeltaRefContParamZ, trackqa::DeltaRefContParamSnp, trackqa::DeltaRefContParamTgl, trackqa::DeltaRefContParamQ2Pt,
715715
trackqa::DeltaRefGloParamY, trackqa::DeltaRefGloParamZ, trackqa::DeltaRefGloParamSnp, trackqa::DeltaRefGloParamTgl, trackqa::DeltaRefGloParamQ2Pt>);
716716

717-
using TracksQAVersion = TracksQA_000;
717+
using TracksQAVersion = TracksQA_001;
718718
using TracksQA = TracksQAVersion::iterator;
719719

720720
namespace fwdtrack

0 commit comments

Comments
 (0)