@@ -362,6 +362,7 @@ void AODProducerWorkflowDPL::addToTracksQATable(TracksQACursorType& tracksQACurs
362362 tracksQACursor (
363363 trackQAInfoHolder.trackID ,
364364 truncateFloatFraction (trackQAInfoHolder.tpcTime0 , mTPCTime0 ),
365+ truncateFloatFraction (trackQAInfoHolder.tpcdEdxNorm , mTrackSignal ),
365366 trackQAInfoHolder.tpcdcaR ,
366367 trackQAInfoHolder.tpcdcaZ ,
367368 trackQAInfoHolder.tpcClusterByteMask ,
@@ -2542,14 +2543,18 @@ AODProducerWorkflowDPL::TrackExtraInfo AODProducerWorkflowDPL::processBarrelTrac
25422543 if (contributorsGID[GIndex::Source::TPC].isIndexSet ()) {
25432544 const auto & tpcOrig = data.getTPCTrack (contributorsGID[GIndex::TPC]);
25442545 const auto & tpcClData = mTPCCounters [contributorsGID[GIndex::TPC]];
2546+ const auto & dEdx = tpcOrig.getdEdx ().dEdxTotTPC > 0 ? tpcOrig.getdEdx () : tpcOrig.getdEdxAlt ();
2547+ if (tpcOrig.getdEdx ().dEdxTotTPC == 0 ) {
2548+ extraInfoHolder.flags |= o2::aod::track::TPCdEdxAlt;
2549+ }
25452550 extraInfoHolder.tpcInnerParam = tpcOrig.getP () / tpcOrig.getAbsCharge ();
25462551 extraInfoHolder.tpcChi2NCl = tpcOrig.getNClusters () ? tpcOrig.getChi2 () / tpcOrig.getNClusters () : 0 ;
2547- extraInfoHolder.tpcSignal = tpcOrig. getdEdx () .dEdxTotTPC ;
2552+ extraInfoHolder.tpcSignal = dEdx .dEdxTotTPC ;
25482553 extraInfoHolder.tpcNClsFindable = tpcOrig.getNClusters ();
25492554 extraInfoHolder.tpcNClsFindableMinusFound = tpcOrig.getNClusters () - tpcClData.found ;
25502555 extraInfoHolder.tpcNClsFindableMinusCrossedRows = tpcOrig.getNClusters () - tpcClData.crossed ;
25512556 extraInfoHolder.tpcNClsShared = tpcClData.shared ;
2552- uint32_t clsUsedForPID = tpcOrig. getdEdx (). NHitsIROC + tpcOrig. getdEdx (). NHitsOROC1 + tpcOrig. getdEdx (). NHitsOROC2 + tpcOrig. getdEdx () .NHitsOROC3 ;
2557+ uint32_t clsUsedForPID = dEdx. NHitsIROC + dEdx. NHitsOROC1 + dEdx. NHitsOROC2 + dEdx .NHitsOROC3 ;
25532558 extraInfoHolder.tpcNClsFindableMinusPID = tpcOrig.getNClusters () - clsUsedForPID;
25542559 if (src == GIndex::TPC) { // standalone TPC track should set its time from their timebins range
25552560 if (needBCSlice) {
@@ -2605,6 +2610,11 @@ AODProducerWorkflowDPL::TrackQA AODProducerWorkflowDPL::processBarrelTrackQA(int
26052610 using ValType = decltype (value);
26062611 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 ()))));
26072612 };
2613+ auto safeUInt8Clamp = [](auto value) -> uint8_t {
2614+ using ValType = decltype (value);
2615+ return static_cast <uint8_t >(TMath::Nint (std::clamp (value, static_cast <ValType>(std::numeric_limits<uint8_t >::min ()), static_cast <ValType>(std::numeric_limits<uint8_t >::max ()))));
2616+ };
2617+
26082618 // / get tracklet byteMask
26092619 uint8_t clusterCounters[8 ] = {0 };
26102620 {
@@ -2625,16 +2635,18 @@ AODProducerWorkflowDPL::TrackQA AODProducerWorkflowDPL::processBarrelTrackQA(int
26252635 }
26262636 trackQAHolder.tpcTime0 = tpcOrig.getTime0 ();
26272637 trackQAHolder.tpcClusterByteMask = byteMask;
2628- const float dEdxNorm = (tpcOrig.getdEdx ().dEdxTotTPC > 0 ) ? 100 . / tpcOrig.getdEdx ().dEdxTotTPC : 0 ;
2629- trackQAHolder.tpcdEdxMax0R = uint8_t (tpcOrig.getdEdx ().dEdxMaxIROC * dEdxNorm);
2630- trackQAHolder.tpcdEdxMax1R = uint8_t (tpcOrig.getdEdx ().dEdxMaxOROC1 * dEdxNorm);
2631- trackQAHolder.tpcdEdxMax2R = uint8_t (tpcOrig.getdEdx ().dEdxMaxOROC2 * dEdxNorm);
2632- trackQAHolder.tpcdEdxMax3R = uint8_t (tpcOrig.getdEdx ().dEdxMaxOROC3 * dEdxNorm);
2638+ const auto & dEdxInfoAlt = tpcOrig.getdEdxAlt (); // tpcOrig.getdEdx()
2639+ const float dEdxNorm = (dEdxInfoAlt.dEdxTotTPC > 0 ) ? 100 . / dEdxInfoAlt.dEdxTotTPC : 0 ;
2640+ trackQAHolder.tpcdEdxNorm = dEdxInfoAlt.dEdxTotTPC ;
2641+ trackQAHolder.tpcdEdxMax0R = safeUInt8Clamp (dEdxInfoAlt.dEdxMaxIROC * dEdxNorm);
2642+ trackQAHolder.tpcdEdxMax1R = safeUInt8Clamp (dEdxInfoAlt.dEdxMaxOROC1 * dEdxNorm);
2643+ trackQAHolder.tpcdEdxMax2R = safeUInt8Clamp (dEdxInfoAlt.dEdxMaxOROC2 * dEdxNorm);
2644+ trackQAHolder.tpcdEdxMax3R = safeUInt8Clamp (dEdxInfoAlt.dEdxMaxOROC3 * dEdxNorm);
26332645 //
2634- trackQAHolder.tpcdEdxTot0R = uint8_t (tpcOrig. getdEdx () .dEdxTotIROC * dEdxNorm);
2635- trackQAHolder.tpcdEdxTot1R = uint8_t (tpcOrig. getdEdx () .dEdxTotOROC1 * dEdxNorm);
2636- trackQAHolder.tpcdEdxTot2R = uint8_t (tpcOrig. getdEdx () .dEdxTotOROC2 * dEdxNorm);
2637- trackQAHolder.tpcdEdxTot3R = uint8_t (tpcOrig. getdEdx () .dEdxTotOROC3 * dEdxNorm);
2646+ trackQAHolder.tpcdEdxTot0R = safeUInt8Clamp (dEdxInfoAlt .dEdxTotIROC * dEdxNorm);
2647+ trackQAHolder.tpcdEdxTot1R = safeUInt8Clamp (dEdxInfoAlt .dEdxTotOROC1 * dEdxNorm);
2648+ trackQAHolder.tpcdEdxTot2R = safeUInt8Clamp (dEdxInfoAlt .dEdxTotOROC2 * dEdxNorm);
2649+ trackQAHolder.tpcdEdxTot3R = safeUInt8Clamp (dEdxInfoAlt .dEdxTotOROC3 * dEdxNorm);
26382650 // /
26392651 float scaleTOF{0 };
26402652 auto contributorsGIDA = data.getSingleDetectorRefs (trackIndex);
@@ -2705,6 +2717,7 @@ AODProducerWorkflowDPL::TrackQA AODProducerWorkflowDPL::processBarrelTrackQA(int
27052717 << " scaleGlo3=" << scaleGlo (3 )
27062718 << " scaleGlo4=" << scaleGlo (4 )
27072719 << " trackQAHolder.tpcTime0=" << trackQAHolder.tpcTime0
2720+ << " trackQAHolder.tpcdEdxNorm=" << trackQAHolder.tpcdEdxNorm
27082721 << " trackQAHolder.tpcdcaR=" << trackQAHolder.tpcdcaR
27092722 << " trackQAHolder.tpcdcaZ=" << trackQAHolder.tpcdcaZ
27102723 << " trackQAHolder.tpcdcaClusterByteMask=" << trackQAHolder.tpcClusterByteMask
0 commit comments