@@ -358,47 +358,30 @@ void AODProducerWorkflowDPL::addToTracksExtraTable(TracksExtraCursorType& tracks
358358template <typename TracksQACursorType>
359359void 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
404387template <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 }
0 commit comments