Skip to content

Commit 6a2a47c

Browse files
committed
calculate average only once
1 parent cefb1d6 commit 6a2a47c

File tree

6 files changed

+28
-26
lines changed

6 files changed

+28
-26
lines changed

DataFormats/Detectors/TRD/include/DataFormatsTRD/CalGain.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,17 @@ class CalGain
3333

3434
void setMPVdEdx(int iDet, float mpv) { mMPVdEdx[iDet] = mpv; }
3535

36-
float getMPVdEdx(int iDet, bool defaultAvg = false) const
36+
float getMPVdEdx(int iDet, bool defaultAvg = true) const
3737
{
3838
// if defaultAvg = false, we take the value stored whatever it is
3939
// if defaultAvg = true and we have default value or bad value stored, we take the average on all chambers instead
4040
if (!defaultAvg || isGoodGain(iDet))
4141
return mMPVdEdx[iDet];
42-
else
43-
return getAverageGain();
42+
else
43+
{
44+
if (TMath::Abs(mMeanGain + 999.) < 1e-6) mMeanGain = getAverageGain();
45+
return mMeanGain;
46+
}
4447
}
4548

4649
float getAverageGain() const
@@ -73,6 +76,7 @@ class CalGain
7376

7477
private:
7578
std::array<float, constants::MAXCHAMBER> mMPVdEdx{}; ///< Most probable value of dEdx distribution per TRD chamber
79+
mutable float mMeanGain{-999.}; ///! average gain, calculated only once
7680

7781
ClassDefNV(CalGain, 2);
7882
};

DataFormats/Detectors/TRD/include/DataFormatsTRD/CalVdriftExB.h

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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
};

Detectors/Align/Workflow/src/BarrelAlignmentSpec.cxx

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -307,11 +307,7 @@ void BarrelAlignmentSpec::finaliseCCDB(o2::framework::ConcreteDataMatcher& match
307307
}
308308
if (matcher == ConcreteDataMatcher("TRD", "CALVDRIFTEXB", 0)) {
309309
LOG(info) << "CalVdriftExB object has been updated";
310-
for (int iDet = 0; iDet < o2::trd::constants::MAXCHAMBER; iDet++) {
311-
// set to average value if the calibration is not correct
312-
mTRDTransformer->setVdrift(iDet, ((const o2::trd::CalVdriftExB*)obj)->getVdrift(iDet, true));
313-
mTRDTransformer->setExB(iDet, ((const o2::trd::CalVdriftExB*)obj)->getExB(iDet, true));
314-
}
310+
mTRDTransformer->setCalVdriftExB((const o2::trd::CalVdriftExB*)obj);
315311
return;
316312
}
317313
if (mTPCVDriftHelper.accountCCDBInputs(matcher, obj)) {

Detectors/TRD/base/include/TRDBase/TrackletTransformer.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@ class TrackletTransformer
3030

3131
void init();
3232

33-
void setVdrift(int iDet, float vd) { mVdrift[iDet] = vd; }
34-
void setExB(int iDet, float exb) { mExB[iDet] = exb; }
33+
void setCalVdriftExB(const CalVdriftExB* cal) { mCalVdriftExB = cal; };
3534
void setApplyXOR() { mApplyXOR = true; }
3635
void setApplyShift(bool f) { mApplyShift = f; }
3736
bool isShiftApplied() const { return mApplyShift; }
@@ -55,8 +54,7 @@ class TrackletTransformer
5554

5655
float mXAnode;
5756

58-
std::array<float, constants::MAXCHAMBER> mVdrift{};
59-
std::array<float, constants::MAXCHAMBER> mExB{};
57+
const CalVdriftExB* mCalVdriftExB{nullptr};
6058
};
6159

6260
} // namespace trd

Detectors/TRD/base/src/TrackletTransformer.cxx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ float TrackletTransformer::calculateDy(int detector, int slope, const PadPlane*
4040
{
4141
double padWidth = padPlane->getWidthIPad();
4242

43-
float vDrift = mVdrift[detector];
44-
float exb = mExB[detector];
43+
float vDrift = mCalVdriftExB->getVdrift(detector);
44+
float exb = mCalVdriftExB->getExB(detector);
4545

4646
// dy = slope * nTimeBins * padWidth * GRANULARITYTRKLSLOPE;
4747
// nTimeBins should be number of timebins in drift region. 1 timebin is 100 nanosecond
@@ -125,7 +125,7 @@ CalibratedTracklet TrackletTransformer::transformTracklet(Tracklet64 tracklet, b
125125
double TrackletTransformer::getTimebin(int detector, double x) const
126126
{
127127
// calculate timebin from x position within chamber
128-
float vDrift = mVdrift[detector];
128+
float vDrift = mCalVdriftExB->getVdrift(detector);
129129
double t0 = 4.0; // time (in timebins) of start of drift region
130130

131131
double timebin;

Detectors/TRD/workflow/src/TRDTrackletTransformerSpec.cxx

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -141,11 +141,7 @@ void TRDTrackletTransformerSpec::finaliseCCDB(ConcreteDataMatcher& matcher, void
141141
}
142142
if (matcher == ConcreteDataMatcher("TRD", "CALVDRIFTEXB", 0)) {
143143
LOG(info) << "CalVdriftExB object has been updated";
144-
for (int iDet = 0; iDet < constants::MAXCHAMBER; iDet++) {
145-
// set to average value if the calibration is not correct
146-
mTransformer.setVdrift(iDet, ((const o2::trd::CalVdriftExB*)obj)->getVdrift(iDet, true));
147-
mTransformer.setExB(iDet, ((const o2::trd::CalVdriftExB*)obj)->getExB(iDet, true));
148-
}
144+
mTransformer.setCalVdriftExB((const o2::trd::CalVdriftExB*)obj);
149145
return;
150146
}
151147
}

0 commit comments

Comments
 (0)