ATLAS Offline Software
LArPhysWavePredictor.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 #include "GaudiKernel/ToolHandle.h"
9 
12 
17 
20 
26 
32 
35 
36 #include "LArCalibUtils/LArPhysWaveTool.h" // added by FT
37 #include "LArCalibUtils/LArPhysWaveHECTool.h" // added by FT
38 
39 #include <cstdio>
40 #include <fstream>
41 #include <iostream>
42 #include <memory>
43 #include <string>
44 
45 
47 
48 LArPhysWavePredictor::LArPhysWavePredictor (const std::string& name, ISvcLocator* pSvcLocator)
49  : AthAlgorithm(name, pSvcLocator),
50  m_groupingType("FeedThrough") // SubDetector, Single, FeedThrough
51 {
52  declareProperty("TestMode", m_testmode = false);
53  declareProperty("StoreEmpty", m_storeEmpty = false);
54  declareProperty("isSC", m_isSC = false);
55 
56  m_keyCali.clear() ;
57  declareProperty("KeyCaliList", m_keyCali); // Keys of LArCaliWaveContainers
58  declareProperty("KeyPhys", m_keyPhys = "LArPhysWave") ; // Key of LArPhysWaveContainer
59  declareProperty("KeyIdealPhys", m_keyIdealPhys = "LArPhysWaveHECIdeal") ; // added by FT
60  declareProperty("KeyFcal", m_keyFcal = "FCALFromTB") ; // added by FT
61  declareProperty("KeyMphysMcali", m_keyMphysMcali = "LArMphysOverMcal") ; // Key of LArMphysOverMcalComplete
62  declareProperty("DumpMphysMcali", m_dumpMphysMcali = false ) ; // for debugging
63  declareProperty("NormalizeCali", m_normalizeCali = false ) ; // for debugging
64  declareProperty("isHEC", m_isHEC = false ) ;
65 
66  //
67  // jobOptions for calibration pulse paramers (Tcali, Fstep)
68  //
69  declareProperty("UseCaliPulseParamsFromJO", m_useJOCaliPulseParams = false );
70  declareProperty("Tcali", m_Tcali = 450. );
71  declareProperty("Fstep", m_Fstep = 0.07 );
72 
73  declareProperty("UseDetCellParamsFromJO" , m_useJODetCellParams = false );
74  declareProperty("Omega0", m_Omega0 = 0. ); // Omega0 == 0 will skip injection point correction
75  declareProperty("Taur", m_Taur = 0. );
76 
77  //
78  // jobOptions for drift time of predicted pulses (Tdrift)
79  //
80  declareProperty("UseTdriftFromJO", m_useJOTdrift = false );
81  m_Tdrift.clear();
82  double default_Tdrift[4] = { 420 , 475 , 475 , 475 } ;
83  for ( unsigned i=0;i<4;i++) m_Tdrift.push_back(default_Tdrift[i]);
84  declareProperty("Tdrift", m_Tdrift) ;
85  m_Tdrift2.clear();
86  double default_Tdrift2[4] = { 1200. , 1200. , 1200. , 1200. } ;
87  for ( unsigned i=0;i<4;i++) m_Tdrift2.push_back(default_Tdrift2[i]);
88  declareProperty("Tdrift2", m_Tdrift2) ;
89  m_wTriangle2.clear();
90  double default_wTriangle2[4] = { 0.01 , 0.01 , 0.01 , 0.01 } ;
91  for ( unsigned i=0;i<4;i++) m_wTriangle2.push_back(default_wTriangle2[i]);
92  declareProperty("WeightTriangle2", m_wTriangle2) ;
93  declareProperty("UseDoubleTriangle", m_doubleTriangle = false );
94 
95  //
96  // jobOptions for time shift of predicted pulses
97  //
98  declareProperty("UseTimeShiftFromJO", m_useJOPhysCaliTdiff = false );
99  declareProperty("TimeShiftByIndex" , m_timeShiftByIndex = 0);
100  declareProperty("TimeShiftByHelper", m_timeShiftByHelper = false);
101  declareProperty("TimeShiftByLayer", m_timeShiftByLayer = false) ;
102  declareProperty("TimeShiftByFEB", m_timeShiftByFEB = false) ;
103  declareProperty("TimeShiftGuardRegion", m_timeShiftGuardRegion = 0 ) ;
104  m_TshiftLayer.clear();
105  unsigned int default_TshiftLayer[4] = { 0 , 0 , 0 , 0 } ;
106  for ( unsigned i=0;i<4;i++) m_TshiftLayer.push_back(default_TshiftLayer[i]);
107  declareProperty("Tshift",m_TshiftLayer) ;
108 
109  // Grouping type
110  declareProperty("GroupingType", m_groupingType);
111 }
112 
113 
115 = default;
116 
117 
119 {
120  if ( ! m_doubleTriangle ) {
121  ATH_MSG_INFO( "Using standard triangular ionization pulse" ) ;
122  } else {
123  ATH_MSG_INFO( "Using refined ionization pulse (double triangle)" ) ;
124  }
125 
126  StatusCode sc;
127  if ( m_isSC ) {
128  const LArOnline_SuperCellID* ll;
129  ATH_CHECK(detStore()->retrieve(ll, "LArOnline_SuperCellID"));
131  ATH_MSG_DEBUG("Found the LArOnlineID helper");
132  const CaloCell_SuperCell_ID* scid;
133  ATH_CHECK(detStore()->retrieve(scid, "CaloCell_SuperCell_ID" ));
134  m_caloCellId= (const CaloCell_Base_ID*)scid;
135 
136  } else { // m_isSC
137  const LArOnlineID* ll;
138  ATH_CHECK(detStore()->retrieve(ll, "LArOnlineID") );
140  ATH_MSG_DEBUG(" Found the LArOnlineID helper. ");
141  const CaloCell_ID* cid;
142  ATH_CHECK(detStore()->retrieve(cid, "CaloCell_ID" ));
143  m_caloCellId= (const CaloCell_Base_ID*)cid;
144  }
145 
146  ATH_CHECK( m_BCKey.initialize() );
150 
151  return StatusCode::SUCCESS ;
152 }
153 
154 
155 namespace {
156 struct FileCloser
157 {
158  explicit FileCloser (FILE* the_f): f (the_f) {}
159  ~FileCloser() { if (f) fclose(f); }
160  FILE* f;
161 
162  FileCloser (const FileCloser&) = delete;
163  FileCloser& operator= (const FileCloser&) = delete;
164 };
165 } // anonymous namespace
166 
168 {
169  ATH_MSG_INFO( "... in stop()" ) ;
170 
171  LArWaveHelper larWaveHelper;
172 
173  // Get access to the Detector Store
174  //StoreGateSvc* detStore;
175  //StatusCode sc = service("DetectorStore",detStore);
176  //if (sc!=StatusCode::SUCCESS) {
177  // ATH_MSG_ERROR( "Cannot get DetectorStore!" );
178  // return sc;
179  //}
180 
181  // Retrieve LArPhysWaveTool
182  ToolHandle<LArPhysWaveTool> larPhysWaveTool("LArPhysWaveTool");
183  StatusCode sc=larPhysWaveTool.retrieve();
184  if (sc!=StatusCode::SUCCESS) {
185  ATH_MSG_ERROR( " Can't get LArPhysWaveTool " );
186  return sc;
187  }
188 
189  // Retrieve LArPhysWaveHECTool // added by FT
190  ToolHandle<LArPhysWaveHECTool> larPhysWaveHECTool("LArPhysWaveHECTool");
191  if(m_isSC || m_isHEC){
192  sc=larPhysWaveHECTool.retrieve();
193  if (sc!=StatusCode::SUCCESS) {
194  ATH_MSG_ERROR( " Can't get LArPhysWaveHECTool " );
195  return sc;
196  }}
197 
198 
199  // Retrieve cabling
200  const LArOnOffIdMapping* cabling(nullptr);
201  if( m_isSC ){
203  cabling = {*cablingHdl};
204  if(!cabling) {
205  ATH_MSG_ERROR("Do not have mapping object " << m_cablingKeySC.key());
206  return StatusCode::FAILURE;
207  }
208  }else{
210  cabling = {*cablingHdl};
211  if(!cabling) {
212  ATH_MSG_ERROR("Do not have mapping object " << m_cablingKey.key());
213  return StatusCode::FAILURE;
214  }
215  }
216 
217  // Get parameters from detStore (access through abtract interfaces)
218  const ILArCaliPulseParams* larCaliPulseParams = nullptr;
219  const ILArDetCellParams* larDetCellParams = nullptr;
220  const ILArTdrift* larTdrift = nullptr;
221  const ILArPhysCaliTdiff* larPhysCaliTdiff = nullptr;
222 
223  if ( !m_useJOCaliPulseParams ) {
224  sc = detStore()->retrieve(larCaliPulseParams);
225  if ( sc == StatusCode::FAILURE ) {
226  ATH_MSG_WARNING( "Cannot retrieve LArCaliPulseParams" ) ;
227  return sc;
228  } else {
229  ATH_MSG_INFO( "LArCaliPulseParams successfully retrieved" ) ;
230  }
231  }
232 
233  if ( !m_useJODetCellParams ) {
234  if (!m_isHEC ) {
235  sc = detStore()->retrieve(larDetCellParams);
236  if ( sc == StatusCode::FAILURE ) {
237  ATH_MSG_WARNING( "Cannot retrieve LArDetCellParams" );
238  return sc;
239  }else {
240  ATH_MSG_INFO( "LArDetCellParams successfully retrieved" );
241  }
242  }else{
243  m_useJODetCellParams = true ;
244  }
245  }
246 
247  if ( !m_useJOTdrift ) {
248  sc = detStore()->retrieve(larTdrift);
249  if ( sc == StatusCode::FAILURE ) {
250  ATH_MSG_WARNING( "Cannot retrieve LArTdriftComplete" );
251  return sc;
252  }else {
253  ATH_MSG_INFO( "LArTdriftComplete successfully retrieved" );
254  }
255  }
256 
257  if ( !m_useJOPhysCaliTdiff ) {
258  sc = detStore()->retrieve(larPhysCaliTdiff);
259  if ( sc == StatusCode::FAILURE ) {
260  ATH_MSG_WARNING( "Cannot retrieve LArPhysCaliTdiff" );
261  return sc;
262  }else {
263  ATH_MSG_INFO( "LArPhysCaliTdiff successfully retrieved" );
264  }
265  }
266 
267  const ILArFEBTimeOffset* larFebTshift = nullptr;
268  if ( m_useJOPhysCaliTdiff ) { // no LArPhysCaliTdiffComplete found, or manual time shift selected
269  if ( m_timeShiftByHelper ) {
270  ATH_MSG_INFO( "Will use helper class for start time." );
271  m_timeShiftByIndex = -1 ;
272  m_timeShiftByLayer = false ;
273  m_timeShiftByFEB = false ;
274  }
275  if ( m_timeShiftByIndex != -1 ) {
276  ATH_MSG_INFO( "Manually shifting pulses by time index " << m_timeShiftByIndex );
277  m_timeShiftByLayer = false ;
278  m_timeShiftByFEB = false ;
279  }
280  if ( m_timeShiftByLayer ) {
281  ATH_MSG_INFO( "Manually shifting pulses by *layer-dependent* time indexes." );
282  m_timeShiftByFEB = false ;
283  }
284  if ( m_timeShiftByFEB ) {
285  ATH_MSG_INFO( "Manually shifting pulses by *FEB* time indexes." );
286  sc = detStore()->retrieve(larFebTshift);
287  if (sc.isFailure())
288  larFebTshift = nullptr;
289  }
290  }
291 
292  const LArPhysWaveContainer *fcalPhysWaves=nullptr;
293 
294  if ( m_isSC ) { //retrieve FCAL phys waves from COOL
295  sc = detStore()->retrieve(fcalPhysWaves, m_keyFcal);
296  if ( sc.isFailure() || !fcalPhysWaves) {
297  ATH_MSG_WARNING( "Cannot retrieve FCAL Phys waves" );
298  return sc;
299  }else {
300  ATH_MSG_INFO( "LArPhysCaliTdiff successfully retrieved" );
301  }
302  }
303 
304  int nchannel = 0 ;
305 
306  // Create LArPhysWaveContainer for predicted physics waveforms
307  std::unique_ptr<LArPhysWaveContainer> larPhysWaveContainer = std::make_unique<LArPhysWaveContainer>();
308 
309  sc=larPhysWaveContainer->setGroupingType(m_groupingType,msg());
310  if (sc.isFailure()) {
311  ATH_MSG_ERROR( "Failed to set groupingType for LArPhysWaveContainer object" );
312  return sc;
313  }
314 
315  sc=larPhysWaveContainer->initialize();
316  if (sc.isFailure()) {
317  ATH_MSG_ERROR( "Failed initialize LArPhysWaveContainer object" );
318  return sc;
319  }
320 
321  // Create LArMphysOverMcalComplete for predicted Mphys/Mcali
322  std::unique_ptr<LArMphysOverMcalComplete> MphysOverMcalComplete = std::make_unique<LArMphysOverMcalComplete>();
323  sc=MphysOverMcalComplete->setGroupingType(m_groupingType,msg());
324  if (sc.isFailure()) {
325  ATH_MSG_ERROR( "Failed to set groupingType for LArMphysOverMcalComplete object" );
326  return sc;
327  }
328 
329  sc=MphysOverMcalComplete->initialize();
330  if (sc.isFailure()) {
331  ATH_MSG_ERROR( "Failed initialize LArMphysOverMcalComplete object" );
332  return sc;
333  }
334 
335  FILE* f = nullptr;
336  if (m_dumpMphysMcali) {
337  f = fopen("MphysOverMcali.dat","w");
338  fprintf(f,"# Region Layer Eta Phi Gain MphysMcali\n");
339  }
340  FileCloser fcloser (f);
341 
342  std::vector<int> nTotal;
343  std::vector<int> noTcali;
344  std::vector<int> noFstep;
345  std::vector<int> noOmega0;
346  std::vector<int> noTaur;
347  std::vector<int> noTdrift;
348  std::vector<int> noTdiff;
349 
350  unsigned maxgain = m_isSC ? CaloGain::LARNGAIN : 1;
351  for ( unsigned i=0; i<maxgain; ++i ) {
352  nTotal.push_back(0);
353  noTcali.push_back(0);
354  noFstep.push_back(0);
355  noOmega0.push_back(0);
356  noTaur.push_back(0);
357  noTdrift.push_back(0);
358  noTdiff.push_back(0);
359  }
360 
362  // Get current LArPhysWaveContainer
363  const LArPhysWaveContainer* larIdealPhysWaveContainer=nullptr;
364  if(m_isHEC || m_isSC){
365  ATH_CHECK(detStore()->retrieve(larIdealPhysWaveContainer,m_keyIdealPhys));
366  ATH_MSG_INFO("LArPhysWaveContainer with (key = " << m_keyIdealPhys << ") reading from StoreGate" );
367  }
369 
370  // get the calibration waveforms from the detector store
371 
372  int NPhysWave=0;
373  int NMPMC=0;
374 
375  for (const std::string& key : m_keyCali) { // Loop over all LArCaliWave containers that are to be processed
376 
377  // Get current LArCaliWaveContainer
378  const LArCaliWaveContainer* caliWaveContainer;
379  sc = detStore()->retrieve(caliWaveContainer,key);
380  if (sc.isFailure()) {
381  //log << MSG::INF0 << "LArCaliWaveContainer (key = " << key << ") not found in StoreGate" );
382  continue;
383  }
384  if ( caliWaveContainer == nullptr ) {
385  ATH_MSG_INFO( "LArCaliWaveContainer (key = " << key << ") is empty" );
386  continue;
387  }
388 
389  ATH_MSG_INFO( "Processing LArCaliWaveContainer from StoreGate, key = " << key );
390 
391  for ( unsigned gain = CaloGain::LARHIGHGAIN ; gain < CaloGain::LARNGAIN ; ++ gain ) { // loop over gain in the current LArCaliWAveContainer
392 
393  ATH_MSG_INFO( "Now processing gain = " << gain << " in LArCaliWaveContainer with key = " << key );
394 
395 
396  // loop over current cali wave container
398  const_iterator itVec = caliWaveContainer->begin(gain);
399  const_iterator itVec_e = caliWaveContainer->end(gain);
400  for (; itVec != itVec_e; ++itVec) { // loop over channels for a given gain
401 
402  for (const LArCaliWave& larCaliWave : *itVec) { // loop over DAC values for a given channel
403 
404  ATH_MSG_DEBUG((*itVec).size() << " LArCaliWaves found for channel " << m_onlineHelper->channel_name(itVec.channelId()) << " 0x"
405  << std::hex << itVec.channelId().get_identifier32().get_compact() << std::dec);
406  const HWIdentifier chid = itVec.channelId();
407  //
408  // region and layer information are needed
409  Identifier id;
410  try {
411  id = cabling->cnvToIdentifier(chid);
412  } catch (LArID_Exception & execpt) {
413  ATH_MSG_ERROR( "LArCabling exception caught for channel 0x" << MSG::hex << chid << MSG::dec
414  << ". Skipping channel." ) ;
415  continue ;
416  }
417 
418  int region = m_caloCellId->region(id);
419  int layer = m_caloCellId->sampling(id);
420 
421  if ( nchannel < 100 || ( nchannel < 1000 && nchannel%100==0 ) || nchannel%1000==0 )
422  ATH_MSG_INFO( "Processing calibration waveform number " << nchannel );
423 
424  if(m_onlineHelper->isFCALchannel(chid)) {
425  if(!m_isSC) continue; // Skip if it is FCAL ini standard readout
426  LArPhysWave fcalw;
427  // we have only 3 FCAL phys waves, according a layer
428  switch (layer) {
429  case 1: fcalw = fcalPhysWaves->get(HWIdentifier(0x3b300000),0); break;
430  case 2: fcalw = fcalPhysWaves->get(HWIdentifier(0x3b348000),0); break;
431  case 3: fcalw = fcalPhysWaves->get(HWIdentifier(0x3b368000),0); break;
432  default : ATH_MSG_ERROR("Wrong layer for FCAL SC: "<<layer<<" skipping channel 0x"<< MSG::hex << chid << MSG::dec); continue;
433  }
434 
435  larPhysWaveContainer->setPdata(chid,fcalw, gain);
436  continue;
437  } //isFCALchannel
438 
439 
440  if ( larCaliWave.getFlag() == LArWave::dac0 ) continue ; // skip dac0 waves
441  // TODO: here we should add a DAC selection mechanism for TCM method
442 
443  nTotal[gain]++; // counter of processed pulse per gain
444 
445  ATH_MSG_VERBOSE("Predicting physics waveform for channel 0x" << MSG::hex << chid << MSG::dec
446  << " (gain = " << gain << " - DAC = " << larCaliWave.getDAC() << ")");
447 
448  // calibration pulse copy (working around the const iterator to be able to manipulate it...)
449  LArCaliWave theLArCaliWave = larCaliWave;
450  ++nchannel;
451 
452  if ( !cabling->isOnlineConnected(chid) ) { // unconnected channel : skipping ...
453  ATH_MSG_VERBOSE("Unconnected channel 0x" << MSG::hex << chid << MSG::dec
454  << ". Skipping channel.");
455  continue ;
456  }
457 
458  // Get the parameters corresponding to current LArCaliWave
459  float Tcali;
460  float Fstep;
461  float Omega0;
462  float Taur;
463  float Tdrift;
464  int Tdiff;
465 
466  // LArCaliPulseParams: if not fould, will use jobOptions values
467  if ( !m_useJOCaliPulseParams ) {
468  Tcali = larCaliPulseParams->Tcal(chid,gain) ;
469 
470  if ( Tcali <= 1.0+LArCaliPulseParamsComplete::ERRORCODE ) {
471  notFoundMsg(chid,gain,"Tcali");
472  Tcali = m_Tcali;
473  noTcali[gain]++;
474  }
475  Fstep = larCaliPulseParams->Fstep(chid,gain) ;
476  if ( Fstep <= 1.0+LArCaliPulseParamsComplete::ERRORCODE ) {
477  notFoundMsg(chid,gain,"Fstep");
478  Fstep = m_Fstep;
479  noFstep[gain]++;
480  }
481  } else {
482  Tcali = m_Tcali;
483  Fstep = m_Fstep;
484  }
485 
486  // LArDetCellParams: if not found, will not apply injection point correction
487  if ( !m_useJODetCellParams ) {
488  Omega0 = larDetCellParams->Omega0(chid,gain) ;
489  if ( Omega0 <= 1.0+LArDetCellParamsComplete::ERRORCODE ) {
490  notFoundMsg(chid,gain,"Omega0");
491  Omega0 = m_Omega0;
492  noOmega0[gain]++;
493  }
494  Taur = larDetCellParams->Taur(chid,gain) ;
495  if ( Taur <= 1.0+LArDetCellParamsComplete::ERRORCODE ) {
496  notFoundMsg(chid,gain,"Taur");
497  Taur = m_Taur;
498  noTaur[gain]++;
499  }
500  } else {
501  Omega0 = m_Omega0;
502  Taur = m_Taur;
503  }
504 
505  // LArTdrift: if not found will be set to jobOptions settings (or defaults if none) according to layer
506  if ( !m_useJOTdrift ) {
507  Tdrift = larTdrift->Tdrift(chid) ;
508  if ( Tdrift <= 1.0+LArTdriftComplete::ERRORCODE ) {
509  notFoundMsg(chid,gain,"Tdrift");
510  //ATH_MSG_ERROR( "Cannot access Tdrift for channel 0x" << MSG::hex << chid << MSG::dec
511  // << ". Will use jobOption setting." ) ;
512  if ( layer>=0 && layer<4 )
513  Tdrift = m_Tdrift[layer]; // Set drift time according to layer
514  else
515  Tdrift = 475.; // very crude!
516  noTdrift[gain]++;
517  }
518  } else { // use jobOptions settings
519  if ( layer>=0 && layer<4 )
520  Tdrift = m_Tdrift[layer]; // Set drift time according to layer
521  else
522  Tdrift = 475.; // very crude!
523  }
524 
525 
526  // LArPhysCaliTdiff: if not found, will use jobOptions settings
527  Tdiff = 0 ; // default value if everything else fails...
528  if ( !m_useJOPhysCaliTdiff ) {
529  Tdiff = (int)larPhysCaliTdiff->Tdiff(chid,gain) ;
530  if ( Tdiff <= 1.0+LArPhysCaliTdiffComplete::ERRORCODE ) {
531  notFoundMsg(chid,gain,"Tdiff");
532  Tdiff = 0 ;
533  m_useJOPhysCaliTdiff = true ;
534  noTdiff[gain]++;
535  }
536  }
537  if ( m_useJOPhysCaliTdiff ) {
538  if ( m_timeShiftByHelper ) {
539  Tdiff = larWaveHelper.getStart(theLArCaliWave) ;
540  Tdiff -= m_timeShiftGuardRegion ;
541  }
542  if ( m_timeShiftByIndex != 0 ) {
543  Tdiff = m_timeShiftByIndex;
544  }
545  if ( m_timeShiftByLayer ) {
546  Tdiff = m_TshiftLayer[layer] ;
547  }
548  if ( m_timeShiftByFEB && larFebTshift ) {
549  const HWIdentifier febid = m_onlineHelper->feb_Id(chid);
550  Tdiff = (int)larFebTshift->TimeOffset(febid);
551  Tdiff -= m_timeShiftGuardRegion ;
552  }
553  }
554 
555  // Fill the LArWFParams structure to be used by the LArPhysWaveTool
556  float Tshaper = 15. ;
557  float Amplitude = 1. ;
558  LArWFParams wfParams(Tcali,Fstep,Tdrift,Omega0,Taur,Tshaper,Amplitude);
559  wfParams.setFlag( 0 ) ; // this should contain the method used to find parameters and the gain
560  wfParams.setTdiff(Tdiff);
561 
562  ATH_MSG_VERBOSE( "wfParams: " << Tcali << " " <<Fstep<<" " <<Tdrift<<" "<<Omega0<<" "<<Taur<<" "<<Tdiff<<" "<<layer<<" "<<region );
563  // calibration pulse normalization
564  // (should be done here instead than in LArPhysWaveTool to get
565  // the correct Mphys/Mcali in case of double triangle prediction)
566  if ( m_normalizeCali ) {
567  double peak = theLArCaliWave.getSample(larWaveHelper.getMax(theLArCaliWave));
568  ATH_MSG_VERBOSE("Channel 0x" << MSG::hex << chid << MSG::dec << " -> Applying normalisation (CaliWave peak = " << peak << ")");
569  if ( peak <=0 ) {
570  ATH_MSG_WARNING( "Peak value <=0 , cannot normalize!" ) ;
571  } else {
572  theLArCaliWave = LArCaliWave( (theLArCaliWave*(1./peak)).getWave(),
573  theLArCaliWave.getErrors(),
574  theLArCaliWave.getTriggers(),
575  theLArCaliWave.getDt(),
576  theLArCaliWave.getDAC(),
577  theLArCaliWave.getIsPulsedInt(),
578  theLArCaliWave.getFlag() );
579  }
580  }
581 
582  //
583  // Predict the Physics Waveform
584  //
585  LArPhysWave larPhysWave;
586  float MphysMcali ;
587  //if(larIdealPhysWaveContainer && m_caloCellId->is_lar_hec(id)) {
588  // decide by online helper, not sure if offline is working for SC
589  if(larIdealPhysWaveContainer && m_onlineHelper->isHECchannel(chid)) {
590  const LArPhysWave& laridealPhysWave = larIdealPhysWaveContainer -> get(chid,gain);
591  int LArWaveFlag=LArWave::predCali; // 111 - for HEC Wave
592  //int LArIdealPhysWaveFlag=LArWave::predCali; // 111 - for HEC Wave
593  ATH_MSG_DEBUG( "Using HEC tool to predict LArPhysWave for channel " << chid.get_identifier32().get_compact());
594 
595  sc = larPhysWaveHECTool->makeLArPhysWaveHEC(wfParams,theLArCaliWave,larPhysWave,laridealPhysWave,MphysMcali,chid,gain,LArWaveFlag);
596 
597  //laridealPhysWave.setFlag( LArIdealPhysWaveFlag ) ;
598  }
599  else {
600  ATH_MSG_DEBUG( "Using EM tool to predict LArPhysWave for channel 0x" << chid.get_identifier32().get_compact() );
601  sc = larPhysWaveTool->makeLArPhysWave(wfParams,theLArCaliWave,region,layer,larPhysWave,MphysMcali);
602  }
603  if (sc.isFailure()) {
604  ATH_MSG_FATAL( "Cannot predict LArPhysWave for channel " << chid.get_identifier32().get_compact() );
605  continue;
606  }
607  larPhysWave.setFlag( LArWave::predCali ) ;
608 
609  if ( m_doubleTriangle ) { // mix of Tdrift ...
610  ATH_MSG_DEBUG("Applying double triangle correction");
611  if ( region==0 && layer>=0 && layer<4 && m_wTriangle2[layer]>0 ) { // EMB: set drift times and weight according to layer
612  LArWFParams wfParams2 = wfParams ;
613  wfParams2.setTdrift(m_Tdrift2[layer]);
614  LArPhysWave larPhysWave2;
615  float MphysMcali2 ;
616  sc = larPhysWaveTool->makeLArPhysWave(wfParams2,theLArCaliWave,region,layer,larPhysWave2,MphysMcali2);
617  if (sc.isFailure()) {
618  ATH_MSG_FATAL( "Cannot predict LArPhysWave for channel 0x" << MSG::hex << chid << MSG::dec << "with double triangle." );
619  continue;
620  }
621  larPhysWave = LArPhysWave ( ( larPhysWave*(1.-m_wTriangle2[layer])+larPhysWave2*m_wTriangle2[layer] ).getWave() ,
622  larPhysWave.getDt(),
623  larPhysWave.getFlag() ) ;
624  // Double-triagle predicion was used, Mphys/Mcali should be recomputed...
625  MphysMcali = larPhysWave.getSample(larWaveHelper.getMax(larPhysWave))/theLArCaliWave.getSample(larWaveHelper.getMax(theLArCaliWave));
626  } else {
627  ATH_MSG_WARNING( "Double triangle implemented only for EMB, skip channel!" ) ;
628  }
629  } // end if 2nd triangle
630 
631  // Apply time shift...
632  if ( Tdiff !=0 ) {
633  ATH_MSG_DEBUG("Time shift for channel " << (itVec.channelId()).get_compact() << " is "
634  << Tdiff << " samples (" << Tdiff*larPhysWave.getDt() << " ns)");
635  larPhysWave = LArPhysWave( (larWaveHelper.translate(larPhysWave,-Tdiff,0)).getWave() ,
636  larPhysWave.getDt(),
637  larPhysWave.getFlag() ) ;
638  }
639 
640  // Add predicted physics wave to container
641  larPhysWaveContainer->setPdata(chid,larPhysWave,gain);
642  NPhysWave++;
643 
644  // Add Mphys/Mcali to container
645  if (MphysMcali<=0.) {
647  }
648  ATH_MSG_VERBOSE("Channel 0x" << MSG::hex << chid << MSG::dec << " -> Mphys/Mcali = " << MphysMcali);
649  MphysOverMcalComplete->set(chid,gain,MphysMcali);
650  NMPMC++;
651  if ( m_dumpMphysMcali ) {
652  int eta = m_caloCellId->eta(id);
653  int phi = m_caloCellId->phi(id);
654  fprintf( f , "%2d %2d %3d %3d %2u %8.3f \n", region, layer, eta, phi, gain, MphysMcali ) ;
655  } //end if m_dumpMphysMcal
656 
657  } // end loop over DAC value for a given cell
658  if ( m_testmode && nchannel>=1 ) break;
659  } // end loop over cells for a given gain
660  if ( m_testmode && nchannel>=1 ) break;
661  } // end loop over gains for a give container
662  if ( m_testmode && nchannel>=1 ) break;
663  } // End loop over all CaliWave containers
664 
665  //ATH_MSG_INFO( " Summary : Number of cells with a PhysWave values computed : " << larPhysWaveContainer->totalNumberOfConditions() );
666  //ATH_MSG_INFO( " Summary : Number of cells with a MphysOverMcal values computed : " << MphysOverMcalComplete->totalNumberOfConditions() );
667  ATH_MSG_INFO( " Summary : Number of cells with a PhysWave values computed : " << NPhysWave );
668  ATH_MSG_INFO( " Summary : Number of cells with a MphysOverMcal values computed : " << NMPMC );
669  ATH_MSG_INFO( " Summary : Number of Barrel PS cells side A or C (connected+unconnected): 3904+ 192 " );
670  ATH_MSG_INFO( " Summary : Number of Barrel cells side A or C (connected+unconnected): 50944+2304 " );
671  ATH_MSG_INFO( " Summary : Number of EMEC cells side A or C (connected+unconnected): 31872+3456 " );
672  ATH_MSG_INFO( " Summary : Number of HEC cells side A or C (connected+unconnected): 2816+ 256 " );
673  ATH_MSG_INFO( " Summary : Number of FCAL cells side A or C (connected+unconnected): 1762+ 30 " );
674 
675  ATH_MSG_DEBUG("LArPhysWaveContainer->totalNumberOfConditions() = " << larPhysWaveContainer->totalNumberOfConditions());
676  ATH_MSG_DEBUG("LArMphysOverMcalComplete->totalNumberOfConditions() = " << MphysOverMcalComplete->totalNumberOfConditions());
677 
678  // final report
679  ATH_MSG_INFO( "\n Final report \n" );
680  for ( unsigned theGain = CaloGain::LARHIGHGAIN ; theGain < CaloGain::LARNGAIN ; ++theGain ) {
681 
682  ATH_MSG_INFO( " *** Gain = " << theGain << " ***" );
683  if ( !m_useJOCaliPulseParams ) {
684  ATH_MSG_INFO( "\t" << noTcali[theGain] << " / " << nTotal[theGain] << " channel(s) missing Tcali" );
685  ATH_MSG_INFO( "\t" << noFstep[theGain] << " / " << nTotal[theGain] << " channel(s) missing Fstep" );
686  }
687  if ( !m_useJODetCellParams ) {
688  ATH_MSG_INFO( "\t" << noOmega0[theGain] << " / " << nTotal[theGain] << " channel(s) missing Omega0" );
689  ATH_MSG_INFO( "\t" << noTaur[theGain] << " / " << nTotal[theGain] << " channel(s) missing Taur" );
690  }
691  if ( !m_useJOTdrift )
692  ATH_MSG_INFO( "\t" << noTdrift[theGain] << " / " << nTotal[theGain] << " channel(s) missing Tdrift" );
693  if ( !m_useJOPhysCaliTdiff )
694  ATH_MSG_INFO( "\t" << noTdiff[theGain] << " / " << nTotal[theGain] << " channel(s) missing Tdiff" );
695  }
696  ATH_MSG_INFO( "\n" );
697 
698  // Record LArPhysWaveContainer to DetectorStore
699  sc = detStore()->record(std::move(larPhysWaveContainer),m_keyPhys);
700  if (sc.isFailure()) {
701  ATH_MSG_FATAL( "Cannot record LArPhysWaveContainer to StoreGate! key=" << m_keyPhys );
702  return StatusCode::FAILURE;
703  }
704 
705  // Record LArMphysOverMcalComplete to DetectorStore
706  sc = detStore()->record(std::move(MphysOverMcalComplete),m_keyMphysMcali);
707  if (sc.isFailure()) {
708  ATH_MSG_FATAL( "Cannot record LArMphysOverMcalComplete to StoreGate! key=" << m_keyMphysMcali );
709  return StatusCode::FAILURE;
710  }
711 
712  // Symlink LArMphysOverMcalComplete to ILArMphysOverMcal for further use
713  ATH_MSG_DEBUG("Trying to symlink ILArMphysOverMcal with LArMphysOverMcalComplete...");
715  if (sc.isFailure()) {
716  ATH_MSG_FATAL( "Could not symlink ILArMphysOverMcal with LArMphysOverMcalComplete." );
717  return StatusCode::FAILURE;
718  }
719  ATH_MSG_INFO( "ILArMphysOverMcal symlink with LArMphysOverMcalComplete successfully" ) ;
720 
721  ATH_MSG_INFO( "LArPhysWavePredictor finalized!" );
722 
723  return StatusCode::SUCCESS;
724 }
725 
726 void LArPhysWavePredictor::notFoundMsg(const HWIdentifier chid, const int gain, const char* value) {
728  const LArBadChannelCont* bcCont{*bcContHdl};
729 
730  if (m_bcMask.cellShouldBeMasked(bcCont,chid)) {
731  ATH_MSG_WARNING( "Cannot access " << value << " for known bad channel channel " << m_onlineHelper->channel_name(chid)
732  << ", gain = " << gain << ". Will use jobO setting." ) ;
733  }
734  else {
735  LArBadChanBitPacking packer;
736  const LArBadChannel bc = bcCont->status(chid);
737  const std::string badChanStatus=packer.stringStatus(bc);
738 
739  ATH_MSG_ERROR( "Cannot access " << value << " for channel " << m_onlineHelper->channel_name(chid)
740  << ", gain = " << gain << " BC status=[" << badChanStatus << "]. Will use jobO setting." );
741  }
742  }
743 
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
LArPhysWavePredictor::m_onlineHelper
const LArOnlineID_Base * m_onlineHelper
Definition: LArPhysWavePredictor.h:48
LArDetCellParamsComplete.h
LArBadChanBitPacking
Definition: LArBadChanBitPacking.h:13
LArConditionsContainer< LArPhysWave >::ConstConditionsMapIterator
ConditionsMap::const_iterator ConstConditionsMapIterator
Definition: LArConditionsContainer.h:86
ILArPhysCaliTdiff::Tdiff
virtual const float & Tdiff(const HWIdentifier &id, int gain) const =0
LArPhysWavePredictor::m_timeShiftGuardRegion
int m_timeShiftGuardRegion
Definition: LArPhysWavePredictor.h:86
python.CaloRecoConfig.f
f
Definition: CaloRecoConfig.py:127
LArPhysWavePredictor::m_Fstep
double m_Fstep
Definition: LArPhysWavePredictor.h:66
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
LArPhysWavePredictor::m_problemsToMask
Gaudi::Property< std::vector< std::string > > m_problemsToMask
Definition: LArPhysWavePredictor.h:45
LArConditionsContainer::setPdata
void setPdata(const HWIdentifier id, const T &payload, unsigned int gain=0)
put payload in persistent data
LArFEBTimeOffset.h
CaloCell_Base_ID::region
int region(const Identifier id) const
LAr field values (NOT_VALID == invalid request)
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
LArCaliWaveContainer.h
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
LArWaveHelper::getStart
unsigned getStart(const LArWave &theWave) const
Definition: LArWaveHelper.cxx:409
LArWave::getFlag
unsigned getFlag() const
flag: ...
Definition: LArWave.h:178
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
LArWaveFlag
int LArWaveFlag
Definition: LArPhysWaveHECTool.cxx:57
LArParamsProperties::MphysOverMcalComplete
@ MphysOverMcalComplete
Definition: LArParamsProperties.h:85
LArPhysWavePredictor::initialize
StatusCode initialize()
Definition: LArPhysWavePredictor.cxx:118
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
LArPhysWavePredictor::m_Taur
double m_Taur
Definition: LArPhysWavePredictor.h:70
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
ILArPhysCaliTdiff.h
ILArFEBTimeOffset::TimeOffset
virtual float TimeOffset(const HWIdentifier fId) const =0
ILArDetCellParams
Definition: ILArDetCellParams.h:13
LArWave::dac0
@ dac0
Definition: LArWave.h:125
LArBadXCont
Conditions-Data class holding LAr Bad Channel or Bad Feb information.
Definition: LArBadChannelCont.h:28
LArPhysWaveContainer.h
LArPhysWavePredictor::m_useJOPhysCaliTdiff
bool m_useJOPhysCaliTdiff
Definition: LArPhysWavePredictor.h:80
ILArTdrift.h
LArConditionsContainerDB::iteratorT
Declaration of const iterator.
Definition: LArConditionsContainerDB.h:72
CaloCondBlobAlgs_fillNoiseFromASCII.gain
gain
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:110
ILArPhysCaliTdiff::ERRORCODE
@ ERRORCODE
Definition: ILArPhysCaliTdiff.h:29
LArWFParams::setTdrift
void setTdrift(double tdrift)
Definition: LArWFParams.h:228
ReadCellNoiseFromCool.cabling
cabling
Definition: ReadCellNoiseFromCool.py:154
LArPhysWave.h
LArWave::getDt
const double & getDt() const
delta time
Definition: LArWave.h:50
LArWaveHelper::translate
LArWave translate(const LArWave &theWave, int nShift, double baseline=0.) const
Definition: LArWaveHelper.cxx:11
LArBadChannelMask::buildBitMask
StatusCode buildBitMask(const std::vector< std::string > &problemsToMask, MsgStream &msg)
Definition: LArBadChannelMask.cxx:10
LArWaveHelper
Definition: LArWaveHelper.h:14
LArCaliWave::getDAC
int getDAC() const
DAC value.
Definition: LArCaliWave.h:156
athena.value
value
Definition: athena.py:122
LArPhysWavePredictor::LArPhysWavePredictor
LArPhysWavePredictor(const std::string &name, ISvcLocator *pSvcLocator)
Definition: LArPhysWavePredictor.cxx:48
LArWFParams
Definition: LArWFParams.h:20
LArPhysWavePredictor::m_groupingType
std::string m_groupingType
Definition: LArPhysWavePredictor.h:62
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
LArWaveHelper::getMax
unsigned int getMax(const LArWave &theWave) const
return index of maximum sample
Definition: LArWaveHelper.cxx:89
HWIdentifier
Definition: HWIdentifier.h:13
LArBadChannelMask::cellShouldBeMasked
bool cellShouldBeMasked(const LArBadChannelCont *bcCont, const HWIdentifier &hardwareId) const
Definition: LArBadChannelMask.h:42
CaloGain::LARNGAIN
@ LARNGAIN
Definition: CaloGain.h:19
ILArCaliPulseParams::Tcal
virtual const float & Tcal(const HWIdentifier &id, int gain) const =0
LArCaliWave.h
LArPhysWave
Definition: LArPhysWave.h:14
LArPhysWavePredictor::m_timeShiftByFEB
bool m_timeShiftByFEB
Definition: LArPhysWavePredictor.h:85
LArPhysWavePredictor::m_wTriangle2
std::vector< double > m_wTriangle2
Definition: LArPhysWavePredictor.h:78
LArPhysWaveContainer
Liquid Argon Physics Wave Container.
Definition: LArPhysWaveContainer.h:23
ILArMphysOverMcal.h
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
CaloCell_ID.h
LArCaliWaveContainer
Liquid Argon Cumulative Wave Container.
Definition: LArCaliWaveContainer.h:33
AthCommonDataStore< AthCommonMsg< Algorithm > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
LArCaliWave::getIsPulsedInt
int getIsPulsedInt() const
isPulsed value
Definition: LArCaliWave.h:163
LArPhysWavePredictor::m_normalizeCali
bool m_normalizeCali
Definition: LArPhysWavePredictor.h:53
ILArCaliPulseParams::Fstep
virtual const float & Fstep(const HWIdentifier &id, int gain) const =0
LArPhysWavePredictor::m_isHEC
bool m_isHEC
Definition: LArPhysWavePredictor.h:72
LArPhysWavePredictor::m_caloCellId
const CaloCell_Base_ID * m_caloCellId
Definition: LArPhysWavePredictor.h:49
ILArTdrift
Definition: ILArTdrift.h:12
LArConditionsContainer::totalNumberOfConditions
unsigned int totalNumberOfConditions() const
Statistics: total number of conditions.
LArOnlineID_Base::isFCALchannel
bool isFCALchannel(const HWIdentifier id) const
Definition: LArOnlineID_Base.cxx:1657
LArWave::getSample
const double & getSample(const unsigned int i) const
Amplitude per time bin.
Definition: LArWave.h:53
LArPhysWaveTool.h
LArPhysWavePredictor::m_useJODetCellParams
bool m_useJODetCellParams
Definition: LArPhysWavePredictor.h:68
LArWFParams::setTdiff
void setTdiff(double tdiff)
Definition: LArWFParams.h:233
LArCaliWave
Definition: LArCaliWave.h:44
LArWave::predCali
@ predCali
Definition: LArWave.h:129
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ILArFEBTimeOffset
Definition: ILArFEBTimeOffset.h:11
LArPhysWavePredictor::m_doubleTriangle
bool m_doubleTriangle
Definition: LArPhysWavePredictor.h:76
Identifier32::get_compact
value_type get_compact(void) const
Get the compact id.
Definition: Identifier32.h:171
LArConditionsContainer::end
ConstConditionsMapIterator end(unsigned int gain) const
end of all channels for this gain
CaloCell_SuperCell_ID
Helper class for offline supercell identifiers.
Definition: CaloCell_SuperCell_ID.h:48
lumiFormat.i
int i
Definition: lumiFormat.py:92
LArWFParams::setFlag
void setFlag(unsigned flag)
Definition: LArWFParams.h:224
ClassID_traits.h
a traits class that associates a CLID to a type T It also detects whether T inherits from Gaudi DataO...
LArPhysWaveHECTool.h
LArOnlineID_Base::isHECchannel
virtual bool isHECchannel(const HWIdentifier id) const =0
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
ILArDetCellParams::Omega0
virtual const float & Omega0(const HWIdentifier &id, int gain) const =0
CaloCell_Base_ID::sampling
int sampling(const Identifier id) const
LAr field values (NOT_VALID == invalid request)
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
LArPhysWavePredictor::m_BCKey
SG::ReadCondHandleKey< LArBadChannelCont > m_BCKey
Definition: LArPhysWavePredictor.h:40
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
LArConditionsContainer::get
ConstReference get(const HWIdentifier id, unsigned int gain=0) const
get data with online identifier
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
LArPhysWavePredictor::notFoundMsg
void notFoundMsg(const HWIdentifier chid, const int gain, const char *value)
Definition: LArPhysWavePredictor.cxx:726
ClassID_traits
Default, invalid implementation of ClassID_traits.
Definition: Control/AthenaKernel/AthenaKernel/ClassID_traits.h:40
LArBadChannel
Definition: LArBadChannel.h:10
LArCaliPulseParamsComplete.h
LArPhysWavePredictor::m_dumpMphysMcali
bool m_dumpMphysMcali
Definition: LArPhysWavePredictor.h:52
LArPhysWavePredictor::m_timeShiftByIndex
int m_timeShiftByIndex
Definition: LArPhysWavePredictor.h:81
CaloCell_SuperCell_ID.h
Helper class for offline supercell identifiers.
CaloCell_Base_ID::eta
int eta(const Identifier id) const
LAr field values (NOT_VALID == invalid request)
LArPhysWavePredictor::stop
StatusCode stop()
Definition: LArPhysWavePredictor.cxx:167
ILArTdrift::Tdrift
virtual const float & Tdrift(const HWIdentifier &id) const =0
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
LArPhysWavePredictor::m_keyMphysMcali
std::string m_keyMphysMcali
Definition: LArPhysWavePredictor.h:58
CaloCell_ID
Helper class for offline cell identifiers.
Definition: CaloCell_ID.h:34
LArPhysWavePredictor::m_timeShiftByHelper
bool m_timeShiftByHelper
Definition: LArPhysWavePredictor.h:82
LArPhysWavePredictor::m_keyIdealPhys
std::string m_keyIdealPhys
Definition: LArPhysWavePredictor.h:59
AthAlgorithm
Definition: AthAlgorithm.h:47
LArOnlineID_Base::feb_Id
HWIdentifier feb_Id(int barrel_ec, int pos_neg, int feedthrough, int slot) const
Create feb_Id from fields.
Definition: LArOnlineID_Base.cxx:1483
LArPhysWavePredictor::m_bcMask
LArBadChannelMask m_bcMask
Definition: LArPhysWavePredictor.h:44
LArPhysWavePredictor::m_useJOTdrift
bool m_useJOTdrift
Definition: LArPhysWavePredictor.h:74
LArPhysWavePredictor::m_storeEmpty
bool m_storeEmpty
Definition: LArPhysWavePredictor.h:51
LArOnlineID_Base
Helper for the Liquid Argon Calorimeter cell identifiers.
Definition: LArOnlineID_Base.h:105
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:194
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
LArPhysWavePredictor::m_Tcali
double m_Tcali
Definition: LArPhysWavePredictor.h:65
LArPhysWavePredictor::~LArPhysWavePredictor
~LArPhysWavePredictor()
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
LArOnlineID
Definition: LArOnlineID.h:20
CaloGain::LARHIGHGAIN
@ LARHIGHGAIN
Definition: CaloGain.h:18
CaloCell_Base_ID::phi
int phi(const Identifier id) const
LAr field values (NOT_VALID == invalid request)
LArOnline_SuperCellID
Definition: LArOnline_SuperCellID.h:20
LArPhysWavePredictor::m_Omega0
double m_Omega0
Definition: LArPhysWavePredictor.h:69
LArPhysWavePredictor::m_Tdrift2
std::vector< double > m_Tdrift2
Definition: LArPhysWavePredictor.h:77
ILArDetCellParams::Taur
virtual const float & Taur(const HWIdentifier &id, int gain) const =0
ILArDetCellParams::ERRORCODE
@ ERRORCODE
Definition: ILArDetCellParams.h:29
TLArBadChanBitPackingBase::stringStatus
std::string stringStatus(const LArBadChannel &bc) const
LArPhysWavePredictor::m_cablingKey
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKey
Definition: LArPhysWavePredictor.h:41
ILArPhysCaliTdiff
Definition: ILArPhysCaliTdiff.h:13
LArPhysWavePredictor::m_keyFcal
std::string m_keyFcal
Definition: LArPhysWavePredictor.h:60
LArPhysWavePredictor::m_Tdrift
std::vector< double > m_Tdrift
Definition: LArPhysWavePredictor.h:75
LArPhysWavePredictor::m_keyCali
std::vector< std::string > m_keyCali
Definition: LArPhysWavePredictor.h:56
LArPhysWavePredictor::m_timeShiftByLayer
bool m_timeShiftByLayer
Definition: LArPhysWavePredictor.h:83
LArConditionsContainer::initialize
virtual StatusCode initialize()
Initialization done after creation or read back - derived classes may augment the functionality.
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
LArWFParams.h
LArPhysWavePredictor::m_keyPhys
std::string m_keyPhys
Definition: LArPhysWavePredictor.h:57
LArPhysWavePredictor::m_testmode
bool m_testmode
Definition: LArPhysWavePredictor.h:50
LArPhysWavePredictor::m_cablingKeySC
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKeySC
Definition: LArPhysWavePredictor.h:42
AthCommonMsg< Algorithm >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
LArPhysWavePredictor::m_isSC
bool m_isSC
Definition: LArPhysWavePredictor.h:54
ILArTdrift::ERRORCODE
@ ERRORCODE
Definition: ILArTdrift.h:27
LArConditionsContainer::begin
ConstConditionsMapIterator begin(unsigned int gain) const
get iterator for all channels for a gain
get
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition: hcg.cxx:127
LArPhysWavePredictor::m_useJOCaliPulseParams
bool m_useJOCaliPulseParams
Definition: LArPhysWavePredictor.h:64
ILArDetCellParams.h
LArWave::setFlag
void setFlag(const unsigned flag)
set flag
Definition: LArWave.h:199
LArOnline_SuperCellID.h
ILArCaliPulseParams::ERRORCODE
@ ERRORCODE
Definition: ILArCaliPulseParams.h:32
LArPhysCaliTdiffComplete.h
ILArCaliPulseParams.h
python.CaloScaleNoiseConfig.default
default
Definition: CaloScaleNoiseConfig.py:79
Identifier::get_identifier32
Identifier32 get_identifier32(void) const
Get the 32-bit version Identifier, will be invalid if >32 bits needed.
LArMphysOverMcalComplete.h
LArOnlineID_Base::channel_name
std::string channel_name(const HWIdentifier id) const
Return a string corresponding to a feedthrough name given an identifier.
Definition: LArOnlineID_Base.cxx:218
CaloCell_Base_ID
Helper base class for offline cell identifiers.
Definition: CaloCell_Base_ID.h:41
LArTdriftComplete.h
LArID_Exception
Exception class for LAr Identifiers.
Definition: LArID_Exception.h:20
LArPhysWavePredictor::m_TshiftLayer
std::vector< unsigned int > m_TshiftLayer
Definition: LArPhysWavePredictor.h:84
LArWaveCumul::getErrors
const std::vector< double > & getErrors() const
error vector
Definition: LArWaveCumul.h:138
LArPhysWavePredictor.h
ILArCaliPulseParams
Definition: ILArCaliPulseParams.h:14
LArOnlineID.h
ILArMphysOverMcal::ERRORCODE
@ ERRORCODE
Definition: ILArMphysOverMcal.h:29
DiTauMassTools::TauTypes::ll
@ ll
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:49
LArOnOffIdMapping
Definition: LArOnOffIdMapping.h:20
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
LArWaveCumul::getTriggers
const std::vector< int > & getTriggers() const
trigger vector
Definition: LArWaveCumul.h:150