1818#include " DetectorsBase/GeometryManager.h"
1919#include " TRDBase/Geometry.h"
2020#include " TRDBase/PadPlane.h"
21+ #include " Framework/ProcessingContext.h"
2122#include < fairlogger/Logger.h>
2223
2324using namespace o2 ::trd;
@@ -28,7 +29,7 @@ void Tracking::init()
2829 mRecoParam .setBfield (o2::base::Propagator::Instance ()->getNominalBz ());
2930}
3031
31- void Tracking::setInput (const o2::globaltracking::RecoContainer& input)
32+ void Tracking::setInput (const o2::globaltracking::RecoContainer& input, o2::framework::ProcessingContext& pc )
3233{
3334 // mRecoCont = &input;
3435 mTracksTPC = input.getTPCTracks ();
@@ -37,6 +38,11 @@ void Tracking::setInput(const o2::globaltracking::RecoContainer& input)
3738 mTracksTPCTRD = input.getTPCTRDTracks <TrackTRD>();
3839 mTrackletsRaw = input.getTRDTracklets ();
3940 mTrackletsCalib = input.getTRDCalibratedTracklets ();
41+
42+ if (!mCCDBInit ) {
43+ mCCDBInit = true ;
44+ mLocalGain = *(pc.inputs ().get <o2::trd::LocalGainFactor*>(" localgainfactors" ));
45+ }
4046}
4147
4248void Tracking::run ()
@@ -77,7 +83,8 @@ void Tracking::checkTrack(const TrackTRD& trkTrd, bool isTPCTRD)
7783 if (trkltId < 0 ) {
7884 continue ;
7985 }
80- int trkltDet = mTrackletsRaw [trkltId].getDetector ();
86+ const auto & tracklet = mTrackletsRaw [trkltId];
87+ int trkltDet = tracklet.getDetector ();
8188 int trkltSec = trkltDet / (NLAYER * NSTACK );
8289 if (trkltSec != o2::math_utils::angle2Sector (trk.getAlpha ())) {
8390 if (!trk.rotate (o2::math_utils::sector2Angle (trkltSec))) {
@@ -94,14 +101,14 @@ void Tracking::checkTrack(const TrackTRD& trkTrd, bool isTPCTRD)
94101 float tilt = tan (TMath::DegToRad () * pad->getTiltingAngle ()); // tilt is signed! and returned in degrees
95102 float tiltCorrUp = tilt * (mTrackletsCalib [trkltId].getZ () - trk.getZ ());
96103 float zPosCorrUp = mTrackletsCalib [trkltId].getZ () + mRecoParam .getZCorrCoeffNRC () * trk.getTgl ();
97- float padLength = pad->getRowSize (mTrackletsRaw [trkltId] .getPadRow ());
104+ float padLength = pad->getRowSize (tracklet .getPadRow ());
98105 if (!((trk.getSigmaZ2 () < (padLength * padLength / 12 .f )) && (std::fabs (mTrackletsCalib [trkltId].getZ () - trk.getZ ()) < padLength))) {
99106 tiltCorrUp = 0 .f ;
100107 }
101108
102109 std::array<float , 2 > trkltPosUp{mTrackletsCalib [trkltId].getY () - tiltCorrUp, zPosCorrUp};
103110 std::array<float , 3 > trkltCovUp;
104- mRecoParam .recalcTrkltCov (tilt, trk.getSnp (), pad->getRowSize (mTrackletsRaw [trkltId] .getPadRow ()), trkltCovUp);
111+ mRecoParam .recalcTrkltCov (tilt, trk.getSnp (), pad->getRowSize (tracklet .getPadRow ()), trkltCovUp);
105112 auto chi2trklt = trk.getPredictedChi2 (trkltPosUp, trkltCovUp);
106113
107114 qcStruct.trackX [iLayer] = trk.getX ();
@@ -117,19 +124,25 @@ void Tracking::checkTrack(const TrackTRD& trkTrd, bool isTPCTRD)
117124 qcStruct.trackletY [iLayer] = trkltPosUp[0 ];
118125 qcStruct.trackletZ [iLayer] = trkltPosUp[1 ];
119126 qcStruct.trackletDy [iLayer] = mTrackletsCalib [trkltId].getDy ();
120- qcStruct.trackletSlope [iLayer] = mTrackletsRaw [trkltId] .getSlope ();
121- qcStruct.trackletSlopeSigned [iLayer] = mTrackletsRaw [trkltId] .getSlopeBinSigned ();
122- qcStruct.trackletPosition [iLayer] = mTrackletsRaw [trkltId] .getPosition ();
123- qcStruct.trackletPositionSigned [iLayer] = mTrackletsRaw [trkltId] .getPositionBinSigned ();
127+ qcStruct.trackletSlope [iLayer] = tracklet .getSlope ();
128+ qcStruct.trackletSlopeSigned [iLayer] = tracklet .getSlopeBinSigned ();
129+ qcStruct.trackletPosition [iLayer] = tracklet .getPosition ();
130+ qcStruct.trackletPositionSigned [iLayer] = tracklet .getPositionBinSigned ();
124131 qcStruct.trackletDet [iLayer] = trkltDet;
125- qcStruct.trackletHCId [iLayer] = mTrackletsRaw [trkltId] .getHCID ();
126- qcStruct.trackletRob [iLayer] = mTrackletsRaw [trkltId] .getROB ();
127- qcStruct.trackletMcm [iLayer] = mTrackletsRaw [trkltId] .getMCM ();
132+ qcStruct.trackletHCId [iLayer] = tracklet .getHCID ();
133+ qcStruct.trackletRob [iLayer] = tracklet .getROB ();
134+ qcStruct.trackletMcm [iLayer] = tracklet .getMCM ();
128135 qcStruct.trackletChi2 [iLayer] = chi2trklt;
129136 qcStruct.trackletCharges [iLayer] = {
130- mTrackletsRaw [trkltId].getQ0 (),
131- mTrackletsRaw [trkltId].getQ1 (),
132- mTrackletsRaw [trkltId].getQ2 (),
137+ tracklet.getQ0 (),
138+ tracklet.getQ1 (),
139+ tracklet.getQ2 (),
140+ };
141+ auto correction = mLocalGain .getValue (tracklet.getHCID () / 2 , tracklet.getPadCol (), tracklet.getPadRow ());
142+ qcStruct.trackletCorCharges [iLayer] = {
143+ static_cast <float >(tracklet.getQ0 ()) * correction,
144+ static_cast <float >(tracklet.getQ1 ()) * correction,
145+ static_cast <float >(tracklet.getQ2 ()) * correction,
133146 };
134147 }
135148 mTrackQC .push_back (qcStruct);
0 commit comments