@@ -34,21 +34,27 @@ class CalVdriftExB
3434 void setVdrift (int iDet, float vd) { mVdrift [iDet] = vd; }
3535 void setExB (int iDet, float exb) { mExB [iDet] = exb; }
3636
37- float getVdrift (int iDet, bool defaultAvg = false ) const
37+ float getVdrift (int iDet, bool defaultAvg = true ) const
3838 {
3939 // if defaultAvg = false, we take the value stored whatever it is
4040 // if defaultAvg = true and we have default value or bad value stored, we take the average on all chambers instead
4141 if (!defaultAvg || (isGoodExB (iDet) && isGoodVdrift (iDet)))
4242 return mVdrift [iDet];
43- else
44- return getAverageVdrift ();
43+ else
44+ {
45+ if (TMath::Abs (mMeanVdrift + 999 .) < 1e-6 ) mMeanVdrift = getAverageVdrift ();
46+ return mMeanVdrift ;
47+ }
4548 }
46- float getExB (int iDet, bool defaultAvg = false ) const
49+ float getExB (int iDet, bool defaultAvg = true ) const
4750 {
4851 if (!defaultAvg || (isGoodExB (iDet) && isGoodVdrift (iDet)))
4952 return mExB [iDet];
50- else
51- return getAverageExB ();
53+ else
54+ {
55+ if (TMath::Abs (mMeanExB + 999 .) < 1e-6 ) mMeanExB = getAverageExB ();
56+ return mMeanExB ;
57+ }
5258 }
5359
5460 float getAverageVdrift () const
@@ -120,6 +126,8 @@ class CalVdriftExB
120126 private:
121127 std::array<float , constants::MAXCHAMBER> mVdrift {}; // /< calibrated drift velocity per TRD chamber
122128 std::array<float , constants::MAXCHAMBER> mExB {}; // /< calibrated Lorentz angle per TRD chamber
129+ mutable float mMeanVdrift {-999 .}; // /! average drift velocity, calculated only once
130+ mutable float mMeanExB {-999 .}; // /! average lorentz angle, calculated only once
123131
124132 ClassDefNV (CalVdriftExB, 2 );
125133};
0 commit comments