Initialize thresholds and noise amplitudes.
72 {
73
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
93
94
96
98
99 std::vector<float> maxLTOverNoiseAmp;
100 m_pElectronicsNoise->getSamplesOfMaxLTOverNoiseAmp(maxLTOverNoiseAmp,10000,elecNoiseRndmEngine);
101
103 reverse( maxLTOverNoiseAmp.begin(), maxLTOverNoiseAmp.end() );
104
105
106
107 double relfluct =
m_settings->relativeLowThresholdFluctuation();
108
109 if ( relfluct > 0. ) {
110 std::vector<float> nl_given_LT2Amp;
111 float min_lt2amp, max_lt2amp;
113 nl_given_LT2Amp, min_lt2amp, max_lt2amp);
114 float new_min_lt2amp, new_max_lt2amp;
116 min_lt2amp, max_lt2amp,
117 relfluct,
118 new_min_lt2amp, new_max_lt2amp,
119 static_cast<unsigned int>(0.1*nl_given_LT2Amp.size()));
120 float min_nl,max_nl;
122 }
123
125
127
128
129
130 unsigned long nstrawsBa_Xe(0), nstrawsEC_Xe(0);
131 unsigned long nstrawsBa_Kr(0), nstrawsEC_Kr(0);
132 unsigned long nstrawsBa_Ar(0), nstrawsEC_Ar(0);
133 double sumBa_Xe(0.), sumEC_Xe(0.);
134 double sumBa_Kr(0.), sumEC_Kr(0.);
135 double sumBa_Ar(0.), sumEC_Ar(0.);
136 int hitid(0);
137 float noiselevel(0.), noiseamp(0.);
138
140
143
144 const bool isBarrel(!(hitid & 0x00200000));
147 float lt =
useLookupTable(noiselevel, maxLTOverNoiseAmp, 0., 1.) * noiseamp;
148
149 if (strawGasType==0) {
150 if ( isBarrel ) { ++nstrawsBa_Xe; sumBa_Xe += lt; }
151 else { ++nstrawsEC_Xe; sumEC_Xe += lt; }
152 }
153 else if (strawGasType==1) {
154 if ( isBarrel ) { ++nstrawsBa_Kr; sumBa_Kr += lt; }
155 else { ++nstrawsEC_Kr; sumEC_Kr += lt; }
156 }
157 else if (strawGasType==2) {
158 if ( isBarrel ) { ++nstrawsBa_Ar; sumBa_Ar += lt; }
159 else { ++nstrawsEC_Ar; sumEC_Ar += lt; }
160 }
161
162 };
163
164
165 double kBa_Xe(0.), kEC_Xe(0.);
166 double kBa_Kr(0.), kEC_Kr(0.);
167 double kBa_Ar(0.), kEC_Ar(0.);
168 if (sumBa_Xe !=0.) kBa_Xe =
m_settings->lowThresholdBar(0) * (nstrawsBa_Xe/sumBa_Xe);
169 if (sumBa_Kr !=0.) kBa_Kr =
m_settings->lowThresholdBar(1) * (nstrawsBa_Kr/sumBa_Kr);
170 if (sumBa_Ar !=0.) kBa_Ar =
m_settings->lowThresholdBar(2) * (nstrawsBa_Ar/sumBa_Ar);
171 if (sumEC_Xe !=0.) kEC_Xe =
m_settings->lowThresholdEC(0) * (nstrawsEC_Xe/sumEC_Xe);
172 if (sumEC_Kr !=0.) kEC_Kr =
m_settings->lowThresholdEC(1) * (nstrawsEC_Kr/sumEC_Kr);
173 if (sumEC_Ar !=0.) kEC_Ar =
m_settings->lowThresholdEC(2) * (nstrawsEC_Ar/sumEC_Ar);
174
176
178
179 std::vector<float> actual_LTs, actual_noiseamps;
180 std::vector<int> strawTypes;
183 actual_LTs.reserve(nstraws);
184 actual_noiseamps.reserve(nstraws);
185 };
186
187 float actualLT, actualNA;
188
190
191 double sumLT_Ar(0.), sumLTsq_Ar(0.), sumNA_Ar(0.), sumNAsq_Ar(0.);
192 double sumLT_Xe(0.), sumLTsq_Xe(0.), sumNA_Xe(0.), sumNAsq_Xe(0.);
193 double sumLT_Kr(0.), sumLTsq_Kr(0.), sumNA_Kr(0.), sumNAsq_Kr(0.);
194
196
199
200 const bool isBarrel(!(hitid & 0x00200000));
201 if (strawGasType==0) { actualNA = noiseamp*(
isBarrel ? kBa_Xe : kEC_Xe ); }
202 else if (strawGasType==1) { actualNA = noiseamp*(
isBarrel ? kBa_Kr : kEC_Kr ); }
203 else if (strawGasType==2) { actualNA = noiseamp*(
isBarrel ? kBa_Ar : kEC_Ar ); }
204 else { actualNA = 0.0; }
205
206 actualLT =
useLookupTable(noiselevel, maxLTOverNoiseAmp, 0., 1.)*actualNA;
207
208 if (strawGasType==0) {
209 sumNA_Xe += actualNA; sumNAsq_Xe += actualNA*actualNA;
210 sumLT_Xe += actualLT; sumLTsq_Xe += actualLT*actualLT;
211 }
212 else if (strawGasType==1) {
213 sumNA_Kr += actualNA; sumNAsq_Kr += actualNA*actualNA;
214 sumLT_Kr += actualLT; sumLTsq_Kr += actualLT*actualLT;
215 }
216 else if (strawGasType==2) {
217 sumNA_Ar += actualNA; sumNAsq_Ar += actualNA*actualNA;
218 sumLT_Ar += actualLT; sumLTsq_Ar += actualLT*actualLT;
219 }
220
222
224 actual_LTs.push_back(actualLT);
225 actual_noiseamps.push_back(actualNA);
226 strawTypes.push_back(strawGasType);
227 }
228
229 };
230
231
233
234 unsigned long nstraws_Kr = nstrawsBa_Kr + nstrawsEC_Kr;
235 unsigned long nstraws_Xe = nstrawsBa_Xe + nstrawsEC_Xe;
236 unsigned long nstraws_Ar = nstrawsBa_Ar + nstrawsEC_Ar;
237
238 if (nstraws_Xe) {
239 ATH_MSG_INFO(
"Xe Average LT is " << sumLT_Xe/nstraws_Xe/CLHEP::eV <<
" eV, with an RMS of "
240 << sqrt((sumLTsq_Xe/nstraws_Xe)-(sumLT_Xe/nstraws_Xe)*(sumLT_Xe/nstraws_Xe))/CLHEP::eV << " eV");
241 ATH_MSG_INFO(
"Xe Average NA is " << sumNA_Xe/nstraws_Xe/CLHEP::eV <<
" eV, with an RMS of "
242 << sqrt((sumNAsq_Xe/nstraws_Xe)-(sumNA_Xe/nstraws_Xe)*(sumNA_Xe/nstraws_Xe))/CLHEP::eV << " eV");
243 }
244 if (nstraws_Kr) {
245 ATH_MSG_INFO(
"Kr Average LT is " << sumLT_Kr/nstraws_Kr/CLHEP::eV <<
" eV, with an RMS of "
246 << sqrt((sumLTsq_Kr/nstraws_Kr)-(sumLT_Kr/nstraws_Kr)*(sumLT_Kr/nstraws_Kr))/CLHEP::eV << " eV");
247 ATH_MSG_INFO(
"Kr Average NA is " << sumNA_Kr/nstraws_Kr/CLHEP::eV <<
" eV, with an RMS of "
248 << sqrt((sumNAsq_Kr/nstraws_Kr)-(sumNA_Kr/nstraws_Kr)*(sumNA_Kr/nstraws_Kr))/CLHEP::eV << " eV");
249 }
250 if (nstraws_Ar) {
251 ATH_MSG_INFO(
"Ar Average LT is " << sumLT_Ar/nstraws_Ar/CLHEP::eV <<
" eV, with an RMS of "
252 << sqrt((sumLTsq_Ar/nstraws_Ar)-(sumLT_Ar/nstraws_Ar)*(sumLT_Ar/nstraws_Ar))/CLHEP::eV << " eV");
253 ATH_MSG_INFO(
"Ar Average NA is " << sumNA_Ar/nstraws_Ar/CLHEP::eV <<
" eV, with an RMS of "
254 << sqrt((sumNAsq_Ar/nstraws_Ar)-(sumNA_Ar/nstraws_Ar)*(sumNA_Ar/nstraws_Ar))/CLHEP::eV << " eV");
255 }
256
257 }
258
260
263 ProduceNoiseDigitPool( actual_LTs, actual_noiseamps, strawTypes, noiseRndmEngine, elecNoiseRndmEngine, elecProcRndmEngine );
264 }
265
266 }
MsgStream & msg() const
The standard message stream.
bool msgLvl(const MSG::Level lvl) const
Test the output level.
void ProduceNoiseDigitPool(const std::vector< float > &lowthresholds, const std::vector< float > &noiseamps, const std::vector< int > &strawType, CLHEP::HepRandomEngine *noiseRndmEngine, CLHEP::HepRandomEngine *elecNoiseRndmEngine, CLHEP::HepRandomEngine *elecProcRndmEngine)
Produce pool of pure noise digits (for simulation of noise in unhit straws) and store them in m_digit...
static void evolve_LT2AmpVsNL_to_include_LTfluct(std::vector< float > &nl_given_lt2na, float min_lt2na, float max_lt2na, float relativeLTFluct, float &new_min_lt2na, float &new_max_lt2na, unsigned int number_new_bins)
Refined noise treatment by allowing for event-by-event fluctuations in the low threshold settings.
static void makeInvertedLookupTable(const std::vector< float > &y_given_x, float min_x, float max_x, std::vector< float > &x_given_y, float &min_y, float &max_y)
Invert look-up-table: Go from tabulated y values vs.
Identifier getStrawIdentifier(int hitID)
int StrawGasType(int statusHT, int useGasMix, MsgStream *log)
void stable_sort(DataModel_detail::iterator< DVL > beg, DataModel_detail::iterator< DVL > end)
Specialization of stable_sort for DataVector/List.