Project
Loading...
Searching...
No Matches
CalVdriftExB.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
14
15#ifndef ALICEO2_CALVDRIFTEXB_H
16#define ALICEO2_CALVDRIFTEXB_H
17
19#include "Rtypes.h"
20#include <array>
21
22namespace o2
23{
24namespace trd
25{
26
28{
29 public:
30 CalVdriftExB() = default;
31 CalVdriftExB(const CalVdriftExB&) = default;
32 ~CalVdriftExB() = default;
33
34 void setVdrift(int iDet, float vd) { mVdrift[iDet] = vd; }
35 void setExB(int iDet, float exb) { mExB[iDet] = exb; }
36
37 float getVdrift(int iDet, bool defaultAvg = true) const
38 {
39 // if defaultAvg = false, we take the value stored whatever it is
40 // if defaultAvg = true and we have default value or bad value stored, we take the average on all chambers instead
41 if (!defaultAvg || (isGoodExB(iDet) && isGoodVdrift(iDet)))
42 return mVdrift[iDet];
43 else {
44 if (TMath::Abs(mMeanVdrift + 999.) < 1e-6)
45 mMeanVdrift = getAverageVdrift();
46 return mMeanVdrift;
47 }
48 }
49 float getExB(int iDet, bool defaultAvg = true) const
50 {
51 if (!defaultAvg || (isGoodExB(iDet) && isGoodVdrift(iDet)))
52 return mExB[iDet];
53 else {
54 if (TMath::Abs(mMeanExB + 999.) < 1e-6)
55 mMeanExB = getAverageExB();
56 return mMeanExB;
57 }
58 }
59
60 float getAverageVdrift() const
61 {
62 float averageVdrift = 0.;
63 int ngood = 0;
64
65 for (int iDet = 0; iDet < constants::MAXCHAMBER; iDet++) {
66 if (isGoodExB(iDet) && isGoodVdrift(iDet)) {
67 // Both values need to be correct to declare a chamber as well calibrated
68 ngood++;
69 averageVdrift += mVdrift[iDet];
70 }
71 }
72 if (ngood == 0) {
73 // we should make sure it never happens
75 }
76 averageVdrift /= ngood;
77 return averageVdrift;
78 }
79
80 float getAverageExB() const
81 {
82 float averageExB = 0.;
83 int ngood = 0;
84
85 for (int iDet = 0; iDet < constants::MAXCHAMBER; iDet++) {
86 if (isGoodExB(iDet) && isGoodVdrift(iDet)) {
87 // Both values need to be correct to declare a chamber as well calibrated
88 ngood++;
89 averageExB += mExB[iDet];
90 }
91 }
92 if (ngood == 0) {
93 // we should make sure it never happens
95 }
96 averageExB /= ngood;
97 return averageExB;
98 }
99
100 bool isGoodExB(int iDet) const
101 {
102 // check if value is well calibrated or not
103 // default calibration if not enough entries
104 // close to boundaries indicate a failed fit
105 if (TMath::Abs(mExB[iDet] - constants::EXBDEFAULT) > 1e-6 &&
106 TMath::Abs(mExB[iDet] - constants::EXBMIN) > 0.01 &&
107 TMath::Abs(mExB[iDet] - constants::EXBMAX) > 0.01)
108 return true;
109 else
110 return false;
111 }
112
113 bool isGoodVdrift(int iDet) const
114 {
115 // check if value is well calibrated or not
116 // default calibration if not enough entries
117 // close to boundaries indicate a failed fit
118 if (TMath::Abs(mVdrift[iDet] - constants::VDRIFTDEFAULT) > 1e-6 &&
119 TMath::Abs(mVdrift[iDet] - constants::VDRIFTMIN) > 0.1 &&
120 TMath::Abs(mVdrift[iDet] - constants::VDRIFTMAX) > 0.1)
121 return true;
122 else
123 return false;
124 }
125
126 private:
127 std::array<float, constants::MAXCHAMBER> mVdrift{};
128 std::array<float, constants::MAXCHAMBER> mExB{};
129 mutable float mMeanVdrift{-999.};
130 mutable float mMeanExB{-999.};
131
132 ClassDefNV(CalVdriftExB, 2);
133};
134
135} // namespace trd
136} // namespace o2
137
138#endif // ALICEO2_CALVDRIFTEXB_H
Global TRD definitions and constants.
float getAverageVdrift() const
CalVdriftExB(const CalVdriftExB &)=default
float getAverageExB() const
float getExB(int iDet, bool defaultAvg=true) const
bool isGoodVdrift(int iDet) const
void setExB(int iDet, float exb)
float getVdrift(int iDet, bool defaultAvg=true) const
bool isGoodExB(int iDet) const
void setVdrift(int iDet, float vd)
constexpr double VDRIFTMIN
min value for vDrift
Definition Constants.h:78
constexpr double EXBDEFAULT
default value for LorentzAngle
Definition Constants.h:80
constexpr double EXBMAX
max value for LorentzAngle
Definition Constants.h:82
constexpr int MAXCHAMBER
the maximum number of installed chambers
Definition Constants.h:30
constexpr double EXBMIN
min value for LorentzAngle
Definition Constants.h:81
constexpr double VDRIFTMAX
max value for vDrift
Definition Constants.h:79
constexpr double VDRIFTDEFAULT
default value for vDrift
Definition Constants.h:77
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...