dE/dx electronic ADC non-linearity correction for highly ionising particles (used in offline hadron saturation calibration) parameters are for X vs Y relation and sep for inner and outer layer vector array 0,1 for inner and 2,3 for outer layers
More...
#include <CDCDedxADCNonLinearity.h>
|
std::vector< std::vector< double > > | m_nonlADC |
| ADC vs corrected ADC mapping.
|
|
dE/dx electronic ADC non-linearity correction for highly ionising particles (used in offline hadron saturation calibration) parameters are for X vs Y relation and sep for inner and outer layer vector array 0,1 for inner and 2,3 for outer layers
Definition at line 29 of file CDCDedxADCNonLinearity.h.
◆ CDCDedxADCNonLinearity() [1/2]
Default constructor.
Definition at line 35 of file CDCDedxADCNonLinearity.h.
std::vector< std::vector< double > > m_nonlADC
ADC vs corrected ADC mapping.
◆ CDCDedxADCNonLinearity() [2/2]
◆ ~CDCDedxADCNonLinearity()
◆ getCorrectedADC()
double getCorrectedADC |
( |
double |
ADC, |
|
|
int |
layer |
|
) |
| const |
|
inline |
Return corrected ADC with given parameters.
- Parameters
-
ADC | uncorrected version |
layer | outer vs inner 0 to 56 indexing |
Definition at line 79 of file CDCDedxADCNonLinearity.h.
80 {
81
82 unsigned int mylayer = 0;
83 if (layer < 0 || layer > 55) {
84 B2WARNING("CDCDedxADCNonLinearity:returning uncorrected ADC as input layer is out of range: must be 0-55");
85 return ADC;
86 } else {
87 if (layer >= 8) mylayer = 2;
88 }
89
90 if (mylayer + 1 >=
m_nonlADC.size())
return ADC;
91
92 const std::vector<double>& tempX =
m_nonlADC[mylayer];
93 const std::vector<double>& tempY =
m_nonlADC[mylayer + 1];
94
95 if (tempX.size() < 2 or tempX.size() != tempY.size()) {
96 B2WARNING("CDCDedxADCNonLinearity:returning uncorrected ADC as parameters range don't match: X=Y in bins");
97 return ADC;
98 }
99
100
101 unsigned int ibin = TMath::BinarySearch(tempY.size(), tempY.data(), double(ADC));
102
103 if (ibin >= tempY.size() - 1) ibin = tempY.size() - 2;
104 if (ibin >= tempY.size() - 1) {
105 B2WARNING("CDCDedxADCNonLinearity:returning uncorrected ADC as bins are not in range");
106 return ADC;
107 }
108
109 double slope = (tempY[ibin + 1] - tempY[ibin]) / (tempX[ibin + 1] - tempX[ibin]);
110 return std::round(tempX[ibin] + (ADC - tempY[ibin]) / slope);
111 }
◆ getNonLinearityPar()
double getNonLinearityPar |
( |
int |
layer, |
|
|
int |
axis, |
|
|
unsigned int |
par |
|
) |
| const |
|
inline |
return specific hadron parameter
- Parameters
-
layer | outer(8-55) vs inner(0-7) |
axis | 0 for X and 1 for Y |
par | number starts from 0 |
Definition at line 118 of file CDCDedxADCNonLinearity.h.
119 {
120
121 unsigned int mylayer = 0;
122 if (layer < 0 || layer > 55) {
123 B2ERROR("CDCDedxADCNonLinearity:CDC layer out of range, choose between 0-55");
124 return -99.0;
125 } else {
126 if (layer >= 8) mylayer = 2;
127 }
128
129 if (axis < 0 || axis > 1) {
130 B2ERROR("CDCDedxADCNonLinearity:Problem with X/Y axis: choose 0/1 for X/Y");
131 return -99.0;
132 } else {
133 mylayer = mylayer + axis;
134 }
135
137 B2ERROR("CDCDedxADCNonLinearity: vector-of-vectors too short");
138 return -99.0;
139 }
140
142 B2ERROR(
"CDCDedxADCNonLinearity:Problem with par index: choose 0 and " <<
m_nonlADC[mylayer].size());
143 return -99.0;
144 }
145
147 };
◆ getSize()
unsigned int getSize |
( |
int |
layer, |
|
|
int |
axis |
|
) |
| const |
|
inline |
Get the number of bins for the non-linearity angle correction.
- Parameters
-
layer | outer vs inner 0 to 56 indexing |
axis | 0 for X and 1 for Y |
Definition at line 52 of file CDCDedxADCNonLinearity.h.
53 {
54
55 unsigned int mylayer = 0;
56 if (layer < 0 || layer > 55) {
57 B2ERROR("CDCDedxADCNonLinearity:CDC layer out of range, choose between 0-55");
58 return 0;
59 } else {
60 if (layer >= 8) mylayer = 2;
61 }
62
63 if (axis < 0 || axis > 1) {
64 B2ERROR("CDCDedxADCNonLinearity:Problem with X/Y axis: choose 0/1 for X/Y");
65 return 0;
66 } else {
67 mylayer = mylayer + axis;
68 }
69
71 return 0;
72 };
◆ printNonLinearityPars()
void printNonLinearityPars |
( |
int |
layer, |
|
|
int |
axis |
|
) |
| const |
|
inline |
print requested hadron parameter array
- Parameters
-
layer | outer vs inner |
axis | 0 for X and 1 for Y |
Definition at line 153 of file CDCDedxADCNonLinearity.h.
154 {
155
156 unsigned int mylayer = 0;
157 if (layer < 0 || layer > 55) {
158 B2ERROR("CDCDedxADCNonLinearity:CDC layer out of range, choose between 0-55");
159 return;
160 } else {
161 if (layer >= 8) mylayer = 2;
162 }
163
164 if (axis < 0 || axis > 1) {
165 B2ERROR("CDCDedxADCNonLinearity:Problem with X/Y axis: choose 0/1 for X/Y");
166 return;
167 } else {
168 mylayer = mylayer + axis;
169 }
170
172 B2ERROR("CDCDedxADCNonLinearity: vector-of-vectors too short");
173 return;
174 }
175
176 B2INFO(
"Printing parameters for layer: " << layer <<
", axis: " << axis <<
", nPars:" <<
m_nonlADC[mylayer].size());
177 for (
unsigned int iPar = 0; iPar <
m_nonlADC[mylayer].size(); iPar++)
178 std::cout <<
"Par # " << iPar <<
": " <<
m_nonlADC[mylayer][iPar] << std::endl;
179
180 };
◆ setNonLinearityPar()
void setNonLinearityPar |
( |
unsigned int |
layer, |
|
|
unsigned int |
axis, |
|
|
unsigned int |
par, |
|
|
double |
value |
|
) |
| |
|
inline |
set specific hadron parameter
- Parameters
-
layer | outer(8-55) vs inner(0-7) |
axis | 0 for X and 1 for Y |
par | number starts from 0 |
value | of parameter to set |
Definition at line 188 of file CDCDedxADCNonLinearity.h.
189 {
190 unsigned int mylayer = 0;
191 if (layer > 55) {
192 B2ERROR("CDCDedxADCNonLinearity:CDC layer out of range, choose between 0-55");
193 return;
194 } else {
195 if (layer >= 8) mylayer = 2;
196 }
197
198 if (axis > 1) {
199 B2ERROR("CDCDedxADCNonLinearity:Problem with X/Y axis: choose 0/1 for X/Y");
200 return;
201 } else {
202 mylayer = mylayer + axis;
203 }
204
206 B2ERROR("CDCDedxADCNonLinearity: vector-of-vectors too short");
207 return;
208 }
210 B2ERROR(
"CDCDedxADCNonLinearity:Problem with par index: choose 0 and " <<
m_nonlADC[mylayer].size());
211 return;
212 }
213
214
216
217 };
◆ m_nonlADC
std::vector<std::vector<double> > m_nonlADC |
|
private |
The documentation for this class was generated from the following file: