ATLAS Offline Software
TileRawChannelBuilderQIEFilter.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 //
7 // Author:
8 // Alexander.Paramonov@cern.ch
9 //
10 // Created:
11 // 05 February 2016
12 //
13 // File Name:
14 // TileRawChannelBuilderQIEFilter.h
15 //
16 // Description:
17 // The code calculates time and energy/charge of QIE pulses
18 //
20 
23 
24 // Gaudi includes
25 #include "Gaudi/Property.h"
26 
27 // Atlas includes
28 #include "AthAllocators/DataPool.h"
30 
31 // Tile includes
33 #include "CLHEP/Matrix/Matrix.h"
36 #include "TileEvent/TileDigits.h"
37 #include "CaloIdentifier/TileID.h"
40 
41 //using namespace std;
42 #include <algorithm>
43 
44 //interface stuff
45 static const InterfaceID IID_ITileRawChannelBuilderQIEFilter("TileRawChannelBuilderQIEFilter", 1, 0);
46 
48  return IID_ITileRawChannelBuilderQIEFilter;
49 }
50 
51 #define TILE_QIEFilterBUILDERVERBOSE false
52 
53 TileRawChannelBuilderQIEFilter::TileRawChannelBuilderQIEFilter(const std::string& type, const std::string& name, const IInterface *parent) :
55 // , m_tileToolTiming("TileCondToolTiming")
56 // , m_tileCondToolOfc("TileCondToolOfc")
57 // , m_tileCondToolOfcCool("TileCondToolOfcCool")
58 // , m_tileToolNoiseSample("TileCondToolNoiseSample")
59 // , m_nSignal(0)
60 // , m_nNegative(0)
61 // , m_nCenter(0)
62 // , m_nConst(0)
63 // , m_nSamples(0)
64 // , m_t0SamplePosition(0)
65 // , m_maxTime(0.0)
66 // , m_minTime(0.0)
67 {
68  //declare interfaces
69  declareInterface < TileRawChannelBuilder > (this);
70  declareInterface < TileRawChannelBuilderQIEFilter > (this);
71 
72  m_rawChannelContainerKey = "TileRawChannelQIE";
73 
74  //declare properties
75 // declareProperty("TileCondToolTiming", m_tileToolTiming);
76 // declareProperty("TileCondToolOfc", m_tileCondToolOfc ,"TileCondToolOfc");
77 // declareProperty("TileCondToolOfcCool",m_tileCondToolOfcCool ,"TileCondToolOfcCool");
78 // declareProperty("TileCondToolNoiseSample", m_tileToolNoiseSample,"TileCondToolNoiseSample");
79 // declareProperty("MaxIterations",m_maxIterations = 5);
80  declareProperty("PedestalMode", m_pedestalMode = 17);
81 // declareProperty("TimeForConvergence",m_timeForConvergence = 0.5);
82 // declareProperty("ConfTB",m_confTB = false);
83 // declareProperty("OF2",m_of2 = true);
84 // declareProperty("Minus1Iteration",m_minus1Iter = false);
85 // declareProperty("AmplitudeCorrection",m_correctAmplitude = false);
86 // declareProperty("BestPhase",m_bestPhase = false);
87 // declareProperty("OfcfromCool",m_ofcFromCool = false);
88 // declareProperty("EmulateDSP",m_emulateDsp = false);
89 }
90 
92 }
93 
95 
96  ATH_MSG_INFO("initialize()");
97 
98  m_rChType = TileFragHash::OptFilterOffline; // type for offline Opt Filter
99 
100  // init in superclass
102 
103  // bits 12-15 - various options
104  //if (m_correctAmplitude) m_bsflags |= 0x2000;
105  //if (m_maxIterations > 1) m_bsflags |= 0x4000;
106  //if (m_bestPhase) m_bsflags |= 0x8000;
107 
108  //ATH_MSG_DEBUG( " MaxIterations=" << m_maxIterations
109  // << " PedestalMode=" << m_pedestalMode
110  // << " TimeForConvergence=" << m_timeForConvergence
111  // << " ConfTB=" << m_confTB
112  // << " OF2=" << m_of2
113  // << " Minus1Iteration=" << m_minus1Iter
114  // << " AmplitudeCorrection=" << m_correctAmplitude
115  // << " Best Phase " << m_bestPhase );
116 
118  //m_t0SamplePosition = m_tileInfo->ItrigSample();
119  //m_maxTime = 25 * (m_nSamples - m_t0SamplePosition - 1);
120  //m_minTime = -25 * m_t0SamplePosition;
121  //ATH_MSG_DEBUG(" NSamples=" << m_nSamples
122  // << " T0Sample=" << m_t0SamplePosition
123  // << " minTime=" << m_minTime
124  // << " maxTime=" << m_maxTime );
125 
126  //if (m_pedestalMode % 10 > 2 && m_nSamples != m_pedestalMode % 10) {
127  // if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Changing PedestalMode from " << m_pedestalMode;
128  // m_pedestalMode = (m_pedestalMode / 10) * 10 + m_nSamples;
129  // if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " to " << m_pedestalMode << endmsg;
130  //}
131 
132  if (m_nSamples != 7) { // && (m_pedestalMode == 71 || m_pedestalMode == 7621)) {
133  ATH_MSG_ERROR("Incompatable pedestal mode [" << m_pedestalMode << "] and number of samples [" << m_nSamples << "]");
134  return StatusCode::FAILURE;
135  }
136 
137  //m_nSignal = 0;
138  //m_nNegative = 0;
139  //m_nCenter = 0;
140  //m_nConst = 0;
141 
142  return StatusCode::SUCCESS;
143 }
144 
146 
147  /*
148  if (msgLvl(MSG::VERBOSE)) {
149  if (m_maxIterations == 1) { // Without iterations
150  msg(MSG::VERBOSE) << "Counters: Signal=" << m_nSignal
151  << " Constant=" << m_nConst
152  << " Total=" << m_nSignal + m_nConst << endmsg;
153  } else {
154  msg(MSG::VERBOSE) << "Counters: Signal=" << m_nSignal
155  << " Negat=" << m_nNegative
156  << " Center=" << m_nCenter
157  << " Constant=" << m_nConst
158  << " Total=" << m_nSignal + m_nNegative + m_nConst + m_nCenter << endmsg;
159  }
160  }*/
161 
162  ATH_MSG_DEBUG("Finalizing");
163 
164  return StatusCode::SUCCESS;
165 }
166 
167 TileRawChannel * TileRawChannelBuilderQIEFilter::rawChannel(const TileDigits* digits, const EventContext& /*ctx*/) {
168 
169  ++m_chCounter;
170 
171  float pedestal = 10.; // A non-zero default is used to avoid the data quality cuts.
172  float energy = 0.;
173  float time = 0.;
174  float chi2 = 0.;
175  m_digits = digits->samples(); //the 7 samples; currently charge is expected. It the future these will be digitized
176  const HWIdentifier adcId = digits->adc_HWID();
177  int gain = m_tileHWID->adc(adcId); //this is set to 1 for QIE FEB by default
178 
179  ATH_MSG_VERBOSE("Building Raw Channel, with QIEFilter, HWID:" << m_tileHWID->to_string(adcId) << " gain=" << gain);
180 
181  int ros = m_tileHWID->ros(adcId);
182  int drawer = m_tileHWID->drawer(adcId);
183  int channel = m_tileHWID->channel(adcId);
185 
186 //TODO: Energy calibration needs to be implemented
187 // if (m_calibrateEnergy) {
188 // energy = m_tileInfo->CisCalib(adcId, energy);
189 // }
190 
191  if (msgLvl(MSG::VERBOSE)) {
192  msg(MSG::VERBOSE) << "Creating QIEFilter RawChannel" << " a=" << energy << " t=" << time
193  //<< " ped=" << pedestal
194  << " q=" << chi2 << endmsg;
195 
196  msg(MSG::VERBOSE) << "digits:";
197 
198  for (unsigned int i = 0; i < m_digits.size(); ++i)
199  msg(MSG::VERBOSE) << " " << m_digits[i];
200 
201  msg(MSG::VERBOSE) << " " << endmsg;
202  }
203 
204  // return new TileRawChannel
205  // TileRawChannel *rawCh = new TileRawChannel(adcId,OptFilterEne,OptFilterTime,OptFilterChi2,OptFilterPed);
207  TileRawChannel *rawCh = tileRchPool.nextElementPtr();
208  rawCh->assign (adcId,
209  energy,
210  time,
211  chi2,
212  pedestal);
213 
214  //if (m_correctTime
215  // && (time != 0
216  // && time < m_maxTime
217  // && time > m_minTime)) {
218  //
219  // rawCh->insertTime(m_tileInfo->TimeCalib(adcId, time));
220  // ATH_MSG_VERBOSE( "Correcting time, new time=" << rawCh->time() );
221  //
222  //}
223 
224  if (TileID::HIGHGAIN == gain) {
225  ++m_nChH;
226  m_RChSumH += energy;
227  } else {
228  ++m_nChL;
229  m_RChSumL += energy;
230  }
231 
232  return rawCh;
233 }
234 
236 
237  ATH_MSG_VERBOSE(" findMaxDigitPosition()");
238 
239  int iMaxDigit = 0;
240  float maxDigit = 0.;
241  //bool saturated = false;
242 
243  for (unsigned int i = 0; i < m_digits.size(); i++) {
244  //TODO: Enable when digitization is introduced
245  //if (m_digits[i] > 510.99) saturated = true; //QIE returns range *128 + adc codes from 0 511
246  if (maxDigit < m_digits[i]) {
247  maxDigit = m_digits[i];
248  iMaxDigit = i;
249  }
250  }
251 
252  if (msgLvl(MSG::VERBOSE)) {
253  for (unsigned int i = 0; i < m_digits.size(); i++) {
254  msg(MSG::VERBOSE) << " " << m_digits[i];
255  }
256 
257  msg(MSG::VERBOSE) << "; Max: digit[" << iMaxDigit << "]=" << maxDigit << endmsg;
258 
259  //if (saturated)
260  // msg(MSG::VERBOSE) << " Samples saturated" << endmsg;
261  }
262 
263  return iMaxDigit;
264 }
265 
266 //There is no need to set the pedestal for QIE
267 //It is a part of the look-up table
268 /*
269  float TileRawChannelBuilderQIEFilter::setPedestal(int ros, int drawer, int channel, int gain) {
270  float pedestal = 0.;
271 
272  switch (m_pedestalMode) {
273  case -1:
274  // use pedestal from conditions DB
275  pedestal = m_tileToolNoiseSample->getPed(TileCalibUtils::getDrawerIdx(ros, drawer), channel, gain);
276  break;
277  case 7:
278  pedestal = m_digits[6];
279  break;
280  case 9:
281  pedestal = m_digits[8];
282  break;
283  case 12:
284  pedestal = .5 * (m_digits[0] + m_digits[1]);
285  break;
286  case 17:
287  pedestal = .5 * (m_digits[0] + m_digits[6]);
288  break;
289  case 19:
290  pedestal = .5 * (m_digits[0] + m_digits[8]);
291  break;
292  case 71:
293  pedestal = std::min(m_digits[0], m_digits[6]);
294  break;
295  case 7621:
296  pedestal = 0.5 * std::min(m_digits[0] + m_digits[1], m_digits[5] + m_digits[6]);
297  break;
298  default:
299  pedestal = m_digits[0];
300  break;
301  }
302 
303  ATH_MSG_VERBOSE("setPedestal(): pedestal=" << pedestal);
304 
305  return pedestal;
306  }
307  */
308 
309 float TileRawChannelBuilderQIEFilter::filter(int ros, int drawer, int channel, float &amplitude, float &time) {
310 
311  ATH_MSG_VERBOSE("filter()");
312 
313  amplitude = 0.;
314  time = 0.;
315  float chi2 = -1.;
316 
317  auto minMaxDigits = std::minmax_element(m_digits.begin(), m_digits.end());
318  float minDigit = *minMaxDigits.first;
319  float maxDigit = *minMaxDigits.second;
320 
321  if (maxDigit - minDigit < 0.01) { // constant value in all samples // TODO: the cut-off needs to be adjusted for the charge difference
322 
323  //pedestal = minDigit;
324  chi2 = 0.;
325  ATH_MSG_VERBOSE("CASE NO SIGNAL: maxdig-mindig = " << maxDigit << "-" << minDigit << " = " << maxDigit - minDigit);
326 
327  m_nConst++;
328 
329  } else {
330 
331  //pedestal = setPedestal(ros, drawer, channel, gain);
332  //double phase = 0.;
333 
334  //unsigned int drawerIdx = TileCalibUtils::getDrawerIdx(ros, drawer);
336  //if (m_bestPhase) {
337  // // AS 19.11.09 - note minus sign here - time in DB is opposite to best phase
338  // phase = -m_tileToolTiming->getSignalPhase(drawerIdx, channel, gain);
339  // ATH_MSG_VERBOSE("Best phase: " << phase << " drawerIdx " << drawerIdx << " channel " << channel);
340  //}
341 
342  chi2 = compute(ros, drawer, channel, amplitude, time);
343 
346  //if (m_correctAmplitude && amplitude > m_ampMinThresh && time > m_timeMinThresh && time < m_timeMaxThresh) {
347  //
348  // amplitude *= correctAmp(time, m_of2);
349  // ATH_MSG_VERBOSE("Amplitude corrected by " << correctAmp(time, m_of2) << " new amplitude is " << amplitude);
350  //}
351 
352  m_nSignal++;
353 
354  }
355 
356  return chi2;
357 }
358 
359 /*
360  int TileRawChannelBuilderOpt2Filter::iterate(int ros, int drawer, int channel, int gain, double &pedestal, double &amplitude, double &time, double &chi2) {
361 
362  ATH_MSG_VERBOSE("iterate()");
363 
364  int nIterations = 0;
365  double savePhase = 0.0;
366  double phase = 0.0;
367  time = -1000.;
368 
369  // Mythic -1 iteration or DSP emulation case
370  if (m_minus1Iter || (m_emulateDsp && (m_maxIterations > 1)))
371  phase = 25 * (m_t0SamplePosition - findMaxDigitPosition());
372 
373  while ((time > m_timeForConvergence || time < (-1.) * m_timeForConvergence || m_emulateDsp) && nIterations < m_maxIterations) {
374 
375  chi2 = compute(ros, drawer, channel, gain, pedestal, amplitude, time, phase);
376 
377  savePhase = phase;
378 
379  if (m_emulateDsp)
380  phase -= round(time); // rounding phase to integer like in DSP
381  else if (m_ofcFromCool)
382  phase -= round(time * 10.) / 10.; // rounding phase to 0.1 - OFC in DB are stored with 0.1ns steps
383  else
384  phase -= time; // no rounding at all for OFC on the fly
385 
386  if (phase > m_maxTime)
387  phase = m_maxTime;
388  if (phase < m_minTime)
389  phase = m_minTime;
390 
391  ++nIterations;
392  ATH_MSG_VERBOSE(
393  " OptFilter computed with phase=" << savePhase << " Time=" << time << " END ITER=" << nIterations << " new phase=" << phase << " chi2=" << chi2 << " Amp=" << amplitude);
394  }
395 
396  time -= savePhase;
397  if (time > m_maxTime)
398  time = m_maxTime;
399  if (time < m_minTime)
400  time = m_minTime;
401 
402  ATH_MSG_VERBOSE("OptFilterEne=" << amplitude << " Phase=" << savePhase << " Absolute Time=" << time);
403 
404  return nIterations;
405  }
406  */
407 
408 //charge per 25 ns is calculated here
409 float TileRawChannelBuilderQIEFilter::compute(int ros, int drawer, int channel, float &amplitude, float &time) {
410 
411  ATH_MSG_VERBOSE("compute();" << " ros=" << ros << " drawer=" << drawer << " channel=" << channel);
412 
413  //int i = 0, digits_size = m_digits.size();
414  float chi2 = -999.; //the chi2 is not calculated by default
415  float fraction_mean = 0;
416  //float expected_fraction_RMS = 0;
417 
418  /*
419  double a[9];
420  double b[9];
421  double c[9];
422  double g[9];
423  double dg[9];
424  */
425 
426  amplitude = 0.;
427  time = 0.; //TODO: Time needs to be implemented using the QIE TDC
428 
429  /*
430  float ofcPhase = (float) phase;
431 
432  unsigned int drawerIdx = TileCalibUtils::getDrawerIdx(ros, drawer);
433  const TileOfcWeightsStruct* m_weights;
434  if (m_ofcFromCool) {
435  m_weights = m_tileCondToolOfcCool->getOfcWeights(drawerIdx, channel, gain, ofcPhase, m_of2);
436  } else {
437  m_weights = m_tileCondToolOfc->getOfcWeights(drawerIdx, channel, gain, ofcPhase, m_of2);
438  }
439 
440  for (i = 0; i < digits_size; ++i) {
441  a[i] = m_weights->w_a[i];
442  b[i] = m_weights->w_b[i];
443  g[i] = m_weights->g[i];
444  dg[i] = m_weights->dg[i];
445  if (m_of2)
446  c[i] = m_weights->w_c[i]; // [OptFilterPha+100];
447  }
448  */
449 
450  //Case 1: No pileup suppression
451  // Here we assume that the digits are in fC
452  // TODO; The code needs to be able to handle QIE counts instead of fC
453  //amplitude = m_digits[3] + m_digits[4];
454  //Case 2: with Pileup suppression
455  //TODO: Timing information needs to be added
456  //February 2016: The transfer constants are taken from the Oct 2015 testbeam results; they are not optimal:
457  //0.16/(1-0.16) = 0.19
458  //TODO: These numbers may be placed in a database
459  const float avg_fraction = 0.18;
460  const float Q_1pe = 17.; //charge per a photo-electron in fC
461  //const float pileup_cutoff = 3.0; //Cut-off for the pileup subtractions
462 
463  //m_digits[3] charge in the central interaction
464  //m_digits[4] charge in the following interaction;
465  //it is expected to be ~5 times smaller than in the central interaction without the out-of-time pileup
466  /*
467  if (m_digits[2] > 0) //check if there is pileup in the preceding BC.
468  amplitude = m_digits[3] - avg_fraction * m_digits[2] / (1. - avg_fraction); // suppress pileup from the previous BC.
469  else
470  amplitude = m_digits[3];
471 
472  //Check if there is visible pileup in the next BC
473  //pileup only increases the measured charge
474 
475  if (amplitude > 0) {
476  fraction_mean = m_digits[4] * (1. - avg_fraction) / amplitude;
477  expected_fraction_RMS = sqrt(avg_fraction * (1. - avg_fraction) * (1. - avg_fraction) * Q_1pe / amplitude);
478  chi2 = (fraction_mean - avg_fraction) / expected_fraction_RMS;
479 
480  if (chi2 > pileup_cutoff) { //There may be pileup in the following BC
481  amplitude *= 1. / (1. - avg_fraction); // The pileup is high enough so we ignore the following interaction
482  } else { // The pileup is low enough so we include the following interaction charge as is
483  amplitude += m_digits[4];
484  }
485  }*/
486 
487  //Case 3: with pileup suppression
488  double prob_cut_off = 0.005;
489 
490  if (m_digits[2] > 0) //check if there is pileup in the preceding BC.
491  amplitude = m_digits[3] - avg_fraction * m_digits[2] / (1. - avg_fraction);
492 
493  if (amplitude < 0)
494  amplitude = 0;
495 
496  if (m_digits[4] > 0) {
497  amplitude += m_digits[4];
498  fraction_mean = m_digits[4] / amplitude;
499 
500  if (fraction_mean > avg_fraction) { // Pileup is suspected in the 2nd integration window
501  int n = (int) (amplitude / Q_1pe);
502  int k = (int) (m_digits[4] / Q_1pe);
503 
504  //Here we calculate the binomial coefficient; n>=k
505  // n!/(k! (n-k!))
506  double binom_coeff = 1.;
507 
508  for (int j = n; j > 0; j--) {
509  if (j > k)
510  binom_coeff = binom_coeff * (double) j;
511 
512  if (j < (n - k + 1))
513  binom_coeff = binom_coeff / (double) j;
514  }
515 
516  //binomial probability
517  double prob = binom_coeff * pow(avg_fraction, k) * pow(1. - avg_fraction, n - k);
518 
519  if (prob < prob_cut_off) { //likely there is too much pileup in the 2nd integration window.
520  amplitude -= m_digits[4];
521  amplitude *= 1. / (1. - avg_fraction);
522  }
523  }
524 
525  }
526 
527  bool goodEnergy = (fabs(amplitude) > 1.0e-04);
528  if (goodEnergy) {
529  if (msgLvl(MSG::VERBOSE)) {
530  msg(MSG::VERBOSE) << "QIEFilterEne=" << amplitude << endmsg;
531  msg(MSG::VERBOSE) << "QIEFilterTimee=" << time << endmsg;
532  }
533  } else {
534  if (msgLvl(MSG::VERBOSE)) {
535  msg(MSG::VERBOSE) << "QIEFilterEne=" << amplitude << " ... assuming 0.0" << endmsg;
536  msg(MSG::VERBOSE) << "QIEFilterTime=" << time << " ... assuming 0.0" << endmsg;
537  }
538  //time = amplitude = 0.0;
539  }
540 
541 // std::cout << "emulate " << m_emulatedsp << " OptFilterEne " << OptFilterEne << " OptFilterDigits[3]" << OptFilterDigits[3] << " OptFilterTime="<<OptFilterTime<<" OptFilterPed="<<OptFilterPed<<" OptFilterChi2="<<OptFilterChi2<<" g 3 " << g[3] << " dg 1 3 5 " << dg[1] << " " << dg[3] << " " << dg[5] <<std::endl;
542  if (fabs(chi2) > 1.0e-04 || goodEnergy) {
543  if (msgLvl(MSG::VERBOSE)) {
544  msg(MSG::VERBOSE) << "QIEFilterTime=" << time << endmsg;
545  msg(MSG::VERBOSE) << "QIEFilterChi2=" << chi2 << endmsg;
546  }
547  } else {
548  if (msgLvl(MSG::VERBOSE)) {
549  msg(MSG::VERBOSE) << "QIEFilterTime=" << time << endmsg;
550  msg(MSG::VERBOSE) << "QIEFilterChi2=" << chi2 << " ... assuming 0.0" << endmsg;
551  }
552  //chi2 = 0.0;
553  }
554 
555  return chi2;
556 }
557 
TileRawChannelBuilderQIEFilter::initialize
virtual StatusCode initialize()
Initialize method.
Definition: TileRawChannelBuilderQIEFilter.cxx:94
TileRawChannelBuilderQIEFilter.h
TileRawChannelBuilder::m_dataPoollSize
int m_dataPoollSize
Definition: TileRawChannelBuilder.h:204
TileRawChannel.h
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:28
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
TileRawChannelBuilder::m_chCounter
unsigned int m_chCounter
Definition: TileRawChannelBuilder.h:196
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
TileInfo::NdigitSamples
int NdigitSamples() const
Returns the number of sammples (digits) per event.
Definition: TileInfo.h:75
TileRawChannelBuilderQIEFilter::m_nSignal
int m_nSignal
internal counters
Definition: TileRawChannelBuilderQIEFilter.h:94
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
TileRawChannelBuilder::m_tileHWID
const TileHWID * m_tileHWID
Definition: TileRawChannelBuilder.h:161
TileRawChannelBuilderQIEFilter::findMaxDigitPosition
int findMaxDigitPosition()
Finds maximum digit position in the pulse.
Definition: TileRawChannelBuilderQIEFilter.cxx:235
conifer::pow
constexpr int pow(int x)
Definition: conifer.h:20
CaloCondBlobAlgs_fillNoiseFromASCII.gain
gain
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:110
TileRawChannelBuilder::initialize
virtual StatusCode initialize()
Initializer.
Definition: TileRawChannelBuilder.cxx:98
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
TileInfo.h
Tile_Base_ID::HIGHGAIN
@ HIGHGAIN
Definition: Tile_Base_ID.h:57
TileCalibUtils.h
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
TileRawData::adc_HWID
HWIdentifier adc_HWID(void) const
Definition: TileRawData.h:53
HWIdentifier
Definition: HWIdentifier.h:13
covarianceTool.prob
prob
Definition: covarianceTool.py:678
TileRawChannelBuilderQIEFilter::m_nConst
int m_nConst
internal counters
Definition: TileRawChannelBuilderQIEFilter.h:97
Example_ReadSampleNoise.drawer
drawer
Definition: Example_ReadSampleNoise.py:39
TileHWID::channel
int channel(const HWIdentifier &id) const
extract channel field from HW identifier
Definition: TileHWID.h:189
TileID.h
TileRawChannel::assign
void assign(const HWIdentifier &id, float amplitude, float time, float quality, float ped=0.0)
Definition: TileRawChannel.h:63
TileHWID::ros
int ros(const HWIdentifier &id) const
extract ros field from HW identifier
Definition: TileHWID.h:167
TileFragHash::OptFilterOffline
@ OptFilterOffline
Definition: TileFragHash.h:34
TileRawChannelBuilderQIEFilter::m_digits
std::vector< float > m_digits
Definition: TileRawChannelBuilderQIEFilter.h:114
TileRawChannelContainer.h
TileRawChannelBuilder::m_rChType
TileFragHash::TYPE m_rChType
Definition: TileRawChannelBuilder.h:136
TileHWID::adc
int adc(const HWIdentifier &id) const
extract adc field from HW identifier
Definition: TileHWID.h:193
TileRawChannelBuilderQIEFilter::finalize
virtual StatusCode finalize()
Finalize method.
Definition: TileRawChannelBuilderQIEFilter.cxx:145
TileRawChannelBuilderQIEFilter::interfaceID
static const InterfaceID & interfaceID()
AlgTool InterfaceID.
Definition: TileRawChannelBuilderQIEFilter.cxx:47
TileRawChannelBuilder::m_nChL
int m_nChL
Definition: TileRawChannelBuilder.h:198
TileHWID.h
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ParticleGun_FastCalo_ChargeFlip_Config.energy
energy
Definition: ParticleGun_FastCalo_ChargeFlip_Config.py:78
TileRawChannelBuilderQIEFilter::compute
float compute(int ros, int drawer, int channel, float &amplitude, float &time)
< Apply the number of iterations needed for reconstruction by calling the Filter method
Definition: TileRawChannelBuilderQIEFilter.cxx:409
lumiFormat.i
int i
Definition: lumiFormat.py:92
TileDigitsContainer.h
beamspotman.n
n
Definition: beamspotman.py:731
TileRawChannelBuilder::m_rawChannelContainerKey
SG::WriteHandleKey< TileRawChannelContainer > m_rawChannelContainerKey
Definition: TileRawChannelBuilder.h:129
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TileRawChannelBuilder::m_nChH
int m_nChH
Definition: TileRawChannelBuilder.h:199
chi2
double chi2(TH1 *h0, TH1 *h1)
Definition: comparitor.cxx:522
TileRawChannel
Definition: TileRawChannel.h:35
test_pyathena.parent
parent
Definition: test_pyathena.py:15
TileRawChannelBuilder::m_RChSumL
double m_RChSumL
Definition: TileRawChannelBuilder.h:200
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
TileRawChannelBuilderQIEFilter::filter
float filter(int ros, int drawer, int channel, float &amplitude, float &time)
< Applies OF algorithm
Definition: TileRawChannelBuilderQIEFilter.cxx:309
xAOD::double
double
Definition: CompositeParticle_v1.cxx:159
TileRawChannelBuilder
Definition: TileRawChannelBuilder.h:59
maskDeadModules.ros
ros
Definition: maskDeadModules.py:35
DataPool::nextElementPtr
pointer nextElementPtr()
obtain the next available element in pool by pointer pool is resized if its limit has been reached On...
TileDigits::samples
const std::vector< float > & samples() const
Definition: TileDigits.h:58
DataPool.h
TileRawChannelBuilder::m_tileInfo
const TileInfo * m_tileInfo
Definition: TileRawChannelBuilder.h:216
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
TileDigits
Definition: TileDigits.h:30
errorcheck.h
Helpers for checking error return status codes and reporting errors.
TileRawChannelBuilderQIEFilter::m_nSamples
int m_nSamples
number of samples in the data
Definition: TileRawChannelBuilderQIEFilter.h:99
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
TileRawChannelBuilderQIEFilter::rawChannel
virtual TileRawChannel * rawChannel(const TileDigits *digits, const EventContext &ctx)
Builder virtual method to be implemented by subclasses.
Definition: TileRawChannelBuilderQIEFilter.cxx:167
TileHWID::drawer
int drawer(const HWIdentifier &id) const
extract drawer field from HW identifier
Definition: TileHWID.h:171
CaloSwCorrections.time
def time(flags, cells_name, *args, **kw)
Definition: CaloSwCorrections.py:242
TileRawChannelBuilderQIEFilter::TileRawChannelBuilderQIEFilter
TileRawChannelBuilderQIEFilter(const std::string &type, const std::string &name, const IInterface *parent)
Constructor.
Definition: TileRawChannelBuilderQIEFilter.cxx:53
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
TileRawChannelBuilder::m_RChSumH
double m_RChSumH
Definition: TileRawChannelBuilder.h:201
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
DataPool
a typed memory pool that saves time spent allocation small object. This is typically used by containe...
Definition: DataPool.h:47
TileRawChannelBuilderQIEFilter::~TileRawChannelBuilderQIEFilter
~TileRawChannelBuilderQIEFilter()
Destructor.
Definition: TileRawChannelBuilderQIEFilter.cxx:91
TileRawChannelBuilderQIEFilter::m_pedestalMode
int m_pedestalMode
pedestal mode to use
Definition: TileRawChannelBuilderQIEFilter.h:84
python.Constants.VERBOSE
int VERBOSE
Definition: Control/AthenaCommon/python/Constants.py:14
TileHWID::to_string
std::string to_string(const HWIdentifier &id, int level=0) const
extract all fields from HW identifier HWIdentifier get_all_fields ( const HWIdentifier & id,...
Definition: TileHWID.cxx:49
TileDigits.h
fitman.k
k
Definition: fitman.py:528