Initialize thresholds and noise amplitudes.
71 {
72
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
92
93
95
97
98 std::vector<float> maxLTOverNoiseAmp;
99 m_pElectronicsNoise->getSamplesOfMaxLTOverNoiseAmp(maxLTOverNoiseAmp,10000,elecNoiseRndmEngine);
100
102 reverse( maxLTOverNoiseAmp.begin(), maxLTOverNoiseAmp.end() );
103
104
105
106 double relfluct =
m_settings->relativeLowThresholdFluctuation();
107
108 if ( relfluct > 0. ) {
109 std::vector<float> nl_given_LT2Amp;
110 float min_lt2amp, max_lt2amp;
112 nl_given_LT2Amp, min_lt2amp, max_lt2amp);
113 float new_min_lt2amp, new_max_lt2amp;
115 min_lt2amp, max_lt2amp,
116 relfluct,
117 new_min_lt2amp, new_max_lt2amp,
118 static_cast<unsigned int>(0.1*nl_given_LT2Amp.size()));
119 float min_nl,max_nl;
121 }
122
124
126
127
128
129 unsigned long nstrawsBa_Xe(0), nstrawsEC_Xe(0);
130 unsigned long nstrawsBa_Kr(0), nstrawsEC_Kr(0);
131 unsigned long nstrawsBa_Ar(0), nstrawsEC_Ar(0);
132 double sumBa_Xe(0.), sumEC_Xe(0.);
133 double sumBa_Kr(0.), sumEC_Kr(0.);
134 double sumBa_Ar(0.), sumEC_Ar(0.);
135 int hitid(0);
136 float noiselevel(0.), noiseamp(0.);
137
139
142
143 const bool isBarrel(!(hitid & 0x00200000));
146 float lt =
useLookupTable(noiselevel, maxLTOverNoiseAmp, 0., 1.) * noiseamp;
147
148 if (strawGasType==0) {
149 if ( isBarrel ) { ++nstrawsBa_Xe; sumBa_Xe += lt; }
150 else { ++nstrawsEC_Xe; sumEC_Xe += lt; }
151 }
152 else if (strawGasType==1) {
153 if ( isBarrel ) { ++nstrawsBa_Kr; sumBa_Kr += lt; }
154 else { ++nstrawsEC_Kr; sumEC_Kr += lt; }
155 }
156 else if (strawGasType==2) {
157 if ( isBarrel ) { ++nstrawsBa_Ar; sumBa_Ar += lt; }
158 else { ++nstrawsEC_Ar; sumEC_Ar += lt; }
159 }
160
161 };
162
163
164 double kBa_Xe(0.), kEC_Xe(0.);
165 double kBa_Kr(0.), kEC_Kr(0.);
166 double kBa_Ar(0.), kEC_Ar(0.);
167 if (sumBa_Xe !=0.) kBa_Xe =
m_settings->lowThresholdBar(0) * (nstrawsBa_Xe/sumBa_Xe);
168 if (sumBa_Kr !=0.) kBa_Kr =
m_settings->lowThresholdBar(1) * (nstrawsBa_Kr/sumBa_Kr);
169 if (sumBa_Ar !=0.) kBa_Ar =
m_settings->lowThresholdBar(2) * (nstrawsBa_Ar/sumBa_Ar);
170 if (sumEC_Xe !=0.) kEC_Xe =
m_settings->lowThresholdEC(0) * (nstrawsEC_Xe/sumEC_Xe);
171 if (sumEC_Kr !=0.) kEC_Kr =
m_settings->lowThresholdEC(1) * (nstrawsEC_Kr/sumEC_Kr);
172 if (sumEC_Ar !=0.) kEC_Ar =
m_settings->lowThresholdEC(2) * (nstrawsEC_Ar/sumEC_Ar);
173
175
177
178 std::vector<float> actual_LTs, actual_noiseamps;
179 std::vector<int> strawTypes;
182 actual_LTs.reserve(nstraws);
183 actual_noiseamps.reserve(nstraws);
184 };
185
186 float actualLT, actualNA;
187
189
190 double sumLT_Ar(0.), sumLTsq_Ar(0.), sumNA_Ar(0.), sumNAsq_Ar(0.);
191 double sumLT_Xe(0.), sumLTsq_Xe(0.), sumNA_Xe(0.), sumNAsq_Xe(0.);
192 double sumLT_Kr(0.), sumLTsq_Kr(0.), sumNA_Kr(0.), sumNAsq_Kr(0.);
193
195
198
199 const bool isBarrel(!(hitid & 0x00200000));
200 if (strawGasType==0) { actualNA = noiseamp*(
isBarrel ? kBa_Xe : kEC_Xe ); }
201 else if (strawGasType==1) { actualNA = noiseamp*(
isBarrel ? kBa_Kr : kEC_Kr ); }
202 else if (strawGasType==2) { actualNA = noiseamp*(
isBarrel ? kBa_Ar : kEC_Ar ); }
203 else { actualNA = 0.0; }
204
205 actualLT =
useLookupTable(noiselevel, maxLTOverNoiseAmp, 0., 1.)*actualNA;
206
207 if (strawGasType==0) {
208 sumNA_Xe += actualNA; sumNAsq_Xe += actualNA*actualNA;
209 sumLT_Xe += actualLT; sumLTsq_Xe += actualLT*actualLT;
210 }
211 else if (strawGasType==1) {
212 sumNA_Kr += actualNA; sumNAsq_Kr += actualNA*actualNA;
213 sumLT_Kr += actualLT; sumLTsq_Kr += actualLT*actualLT;
214 }
215 else if (strawGasType==2) {
216 sumNA_Ar += actualNA; sumNAsq_Ar += actualNA*actualNA;
217 sumLT_Ar += actualLT; sumLTsq_Ar += actualLT*actualLT;
218 }
219
221
223 actual_LTs.push_back(actualLT);
224 actual_noiseamps.push_back(actualNA);
225 strawTypes.push_back(strawGasType);
226 }
227
228 };
229
230
232
233 unsigned long nstraws_Kr = nstrawsBa_Kr + nstrawsEC_Kr;
234 unsigned long nstraws_Xe = nstrawsBa_Xe + nstrawsEC_Xe;
235 unsigned long nstraws_Ar = nstrawsBa_Ar + nstrawsEC_Ar;
236
237 if (nstraws_Xe) {
238 ATH_MSG_INFO(
"Xe Average LT is " << sumLT_Xe/nstraws_Xe/CLHEP::eV <<
" eV, with an RMS of "
239 << sqrt((sumLTsq_Xe/nstraws_Xe)-(sumLT_Xe/nstraws_Xe)*(sumLT_Xe/nstraws_Xe))/CLHEP::eV << " eV");
240 ATH_MSG_INFO(
"Xe Average NA is " << sumNA_Xe/nstraws_Xe/CLHEP::eV <<
" eV, with an RMS of "
241 << sqrt((sumNAsq_Xe/nstraws_Xe)-(sumNA_Xe/nstraws_Xe)*(sumNA_Xe/nstraws_Xe))/CLHEP::eV << " eV");
242 }
243 if (nstraws_Kr) {
244 ATH_MSG_INFO(
"Kr Average LT is " << sumLT_Kr/nstraws_Kr/CLHEP::eV <<
" eV, with an RMS of "
245 << sqrt((sumLTsq_Kr/nstraws_Kr)-(sumLT_Kr/nstraws_Kr)*(sumLT_Kr/nstraws_Kr))/CLHEP::eV << " eV");
246 ATH_MSG_INFO(
"Kr Average NA is " << sumNA_Kr/nstraws_Kr/CLHEP::eV <<
" eV, with an RMS of "
247 << sqrt((sumNAsq_Kr/nstraws_Kr)-(sumNA_Kr/nstraws_Kr)*(sumNA_Kr/nstraws_Kr))/CLHEP::eV << " eV");
248 }
249 if (nstraws_Ar) {
250 ATH_MSG_INFO(
"Ar Average LT is " << sumLT_Ar/nstraws_Ar/CLHEP::eV <<
" eV, with an RMS of "
251 << sqrt((sumLTsq_Ar/nstraws_Ar)-(sumLT_Ar/nstraws_Ar)*(sumLT_Ar/nstraws_Ar))/CLHEP::eV << " eV");
252 ATH_MSG_INFO(
"Ar Average NA is " << sumNA_Ar/nstraws_Ar/CLHEP::eV <<
" eV, with an RMS of "
253 << sqrt((sumNAsq_Ar/nstraws_Ar)-(sumNA_Ar/nstraws_Ar)*(sumNA_Ar/nstraws_Ar))/CLHEP::eV << " eV");
254 }
255
256 }
257
259
262 ProduceNoiseDigitPool( actual_LTs, actual_noiseamps, strawTypes, noiseRndmEngine, elecNoiseRndmEngine, elecProcRndmEngine );
263 }
264
265 }
MsgStream & msg() const
The standard message stream.
bool msgLvl(const MSG::Level lvl) const
Test the output level.
static void makeInvertedLookupTable(const std::vector< float > &y_given_x, const float &min_x, const 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.
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, const float &min_lt2na, const float &max_lt2na, const float relativeLTFluct, float &new_min_lt2na, float &new_max_lt2na, const unsigned int &number_new_bins)
Refined noise treatment by allowing for event-by-event fluctuations in the low threshold settings.
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.