ATLAS Offline Software
LArCompleteToFlat.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 
9 
12 
17 
20 
22 
25 
28 #include "CoralBase/Blob.h"
29 
32 
34 
36 // Public methods:
38 
39 // Constructors
42  ISvcLocator* pSvcLocator ) :
43  ::AthAlgorithm( name, pSvcLocator ),
44  m_hashMax(0),
45  m_onlineID(nullptr),
46  m_isSC(false)
47 {
48  declareProperty("isSC",m_isSC);
49  declareProperty("uA2MeVInput",m_uA2MeVInput);//="LAruA2MeV");
50  declareProperty("DAC2uAVInput",m_DAC2uAInput);//="LArDAC2uA");
51  declareProperty("HVScaleCorrInput",m_HVScaleCorrInput);//="LArHVScaleCorr");
52  declareProperty("PedestalInput",m_PedestalInput);//="Pedestal");
53  declareProperty("RampInput",m_RampInput);//="LArRamp");
54  declareProperty("MphysOverMcalInput",m_MphysOverMcalInput);//="LArMphysOverMcal");
55  declareProperty("OFCInput",m_OFCInput);//="LArOFC");
56  declareProperty("OFCCaliInput",m_OFCCaliInput);//="LArOFC");
57  declareProperty("ShapeInput",m_ShapeInput);//="LArShape");
58  declareProperty("DSPThresholdsInput",m_DSPThresholdsInput);//="LArDSPThresholds");
59  declareProperty("NameOfSet",m_nameOfSet); // for DSPThreshold
60 
61  declareProperty("ForceStop",m_forceStop=true);
62 
63  declareProperty("FakeEMBPSLowGain",m_fakeEMBPSLowGain=false);
64 
65 
66 }
67 
68 // Destructor
71 = default;
72 
73 // Athena Algorithm's Hooks
76 {
80  return StatusCode::SUCCESS;
81 }
82 
83 
84 
86  const std::string& outputName, const unsigned nGain,const bool withFCAL) {
87 
88  unsigned nChannels=0;
89  unsigned nCopiedEMPS=0;
90  unsigned nDefault=0;
91 
92  coral::AttributeListSpecification* spec = new coral::AttributeListSpecification();
93  spec->extend(blobName, "blob");
94  spec->extend<unsigned>("version");
96  for (unsigned gain=0;gain<nGain;++gain) {
98  (*attrList)["version"].setValue(0U);
99  coral::Blob& blob=(*attrList)[blobName].data<coral::Blob>();
100  blob.resize(m_hashMax*sizeof(float));
101  float* pblob=static_cast<float*>(blob.startingAddress());
102  for (unsigned hs=0;hs<m_hashMax;++hs) {
103  const HWIdentifier chid=m_onlineID->channel_Id(hs);
104  float value;
105  if (!withFCAL && m_onlineID->isFCALchannel(chid)) {
106  value=1.0; //Fill fcal channels with 1.0. for MPhysOverMcal
107  }
108  else
109  value=input->get(chid,gain).m_data;
110 
111  if (value<0 && gain==2 && m_fakeEMBPSLowGain) {
112  //Fill medium gain for EMB PS low gain
113  value=input->get(chid,1).m_data;
114  ++nCopiedEMPS;
115  }
116  if (value < 0) {
117  errIfConnected(chid,gain,blobName);
118  value=1.0; //Default vaue is 1.0, since these are multiplicative constants
119  ++nDefault;
120  }
121  pblob[hs]=value;
122  ++nChannels;
123  }
124  unsigned coolChan=gain;
125  //Special case: Store single-gain constant in channel 1
126  //To avoid AttrList vs AttrListCollection confusion in Athena DB infrastructure
127  if (nGain==1) coolChan=1;
128 
129  coll->add(coolChan,*attrList);
130  //delete attrList;//???
131  }
132 
133  ATH_MSG_INFO( "Converted " << blobName << " to inline storage. Total number of channels=" << nChannels );
134  ATH_MSG_INFO( "Number of channels filled with default value (1.0) " << nDefault << " (including disconnected)" );
135  if (nCopiedEMPS)
136  ATH_MSG_INFO( "\t Number of low gain EMBPS channels copied from medium gain" << nCopiedEMPS );
137  StatusCode sc=detStore()->record(coll,outputName);
138  if (sc.isFailure()) {
139  ATH_MSG_ERROR( "Failed to record CondAttrListCollection with key" << outputName );
140  return nullptr;
141  }
142  return coll;
143 }
144 
145 
146 
148  ATH_MSG_INFO("LArCompleteToFlat::pedestalFlat, starting");
149 
150  unsigned nChannels=0;
151  unsigned nCopiedEMPS=0;
152 
153  coral::AttributeListSpecification* spec = new coral::AttributeListSpecification();
154  spec->extend("Pedestal", "blob");
155  spec->extend("PedestalRMS", "blob");
156  spec->extend<unsigned>("version");
157 
159 
160  const unsigned nGain = m_isSC ? 1 : 3;
161  for (unsigned gain=0;gain<nGain;++gain) {
163  (*attrList)["version"].setValue(0U);
164  coral::Blob& blobPed=(*attrList)["Pedestal"].data<coral::Blob>();
165  coral::Blob& blobRMS=(*attrList)["PedestalRMS"].data<coral::Blob>();
166  blobPed.resize(m_hashMax*sizeof(float));
167  blobRMS.resize(m_hashMax*sizeof(float));
168  float* pblobPed=static_cast<float*>(blobPed.startingAddress());
169  float* pblobRMS=static_cast<float*>(blobRMS.startingAddress());
170  int nDefault=0;
171  for (unsigned hs=0;hs<m_hashMax;++hs) {
172  const HWIdentifier chid=m_onlineID->channel_Id(hs);
173  float ped=input->pedestal(chid,gain);
174  float pedRMS=input->pedestalRMS(chid,gain);
175  if (gain==0){
176  if (ped<0){
177  ped = 1000;
178  pedRMS = 1;
179  ++nDefault;
180  }
181 
182 
183  }
184  if (ped<0 && gain==2 && m_fakeEMBPSLowGain) {
185  ped=input->pedestal(chid,1);
186  pedRMS=input->pedestalRMS(chid,1);
187  ++nCopiedEMPS;
188  }
189 
190  pblobPed[hs]=ped;
191  pblobRMS[hs]=pedRMS;
192  ++nChannels;
193  }//end loop over hash ids
194  collPed->add(gain,*attrList);
195  ATH_MSG_INFO( "Number of channels filled with default Pedestal (1000) and PedestalRMS (1) "<< nDefault << " (including disconnected)" );
196  }//end loop over gains
197 
198  StatusCode sc=detStore()->record(collPed,outputName);//"/LAR/ElecCalibFlat/Pedestal");
199  if (sc.isFailure()) {
200  ATH_MSG_ERROR( "Failed to record CondAttrListCollection for pedestal with key " << outputName );
201  return nullptr;
202  }
203  ATH_MSG_INFO( "Converted Pedestal to inline storage. Total number of channels=" << nChannels );
204  if (nCopiedEMPS)
205  ATH_MSG_INFO( "\t Number of low gain EMBPS channels copied from medium gain" << nCopiedEMPS );
206 
207  return collPed;
208 }
209 
210 
212 
213  ATH_MSG_INFO("LArCompleteToFlat::ofcFlat, starting");
214  unsigned nChannels=0;
215  unsigned nCopiedEMPS=0;
216  unsigned nDefault=0;
217 
218  coral::AttributeListSpecification* spec = new coral::AttributeListSpecification();
219  spec->extend("OFCa", "blob");
220  spec->extend("OFCb", "blob");
221  spec->extend("TimeOffset","blob");
222  spec->extend<unsigned>("nSamples");
223  spec->extend<unsigned>("version");
225  int phase = 0;
226  const unsigned nGain = m_isSC ? 1 : 3;
227  for (unsigned gain=0;gain<nGain;++gain) {
228 
229  //Auto-detect the number of samples (at least in theory, could be different for each gain)
230  unsigned nSamples=0;
231  for (unsigned hs=0;hs<m_hashMax && nSamples==0;++hs) {
232  const HWIdentifier chid=m_onlineID->channel_Id(hs);
233  LArOFCFlat::OFCRef_t ofca= input->OFC_a(chid,gain);
234  if ( input->nTimeBins(chid,gain) > 23 ){
235  phase = 23;
236  ofca = input->OFC_a(chid,gain,phase);
237  }
238 
239  nSamples=ofca.size();
240  }
241  if (nSamples==0) {
242  ATH_MSG_ERROR( "All input OFCs for gain " << gain << " have 0 samples!" );
243  continue;//jump to the next gain
244  }
245 
246  ATH_MSG_INFO( "Gain " << gain <<": Found " << nSamples << " OFC samples in input data" );
247 
249  (*attrList)["version"].setValue(0U);
250  coral::Blob& ofcaBlob=(*attrList)["OFCa"].data<coral::Blob>();
251  coral::Blob& ofcbBlob=(*attrList)["OFCb"].data<coral::Blob>();
252  coral::Blob& toBlob=(*attrList)["TimeOffset"].data<coral::Blob>();
253 
254  (*attrList)["nSamples"].setValue(nSamples);
255 
256  ofcaBlob.resize(m_hashMax*sizeof(float)*nSamples);
257  ofcbBlob.resize(m_hashMax*sizeof(float)*nSamples);
258  toBlob.resize(m_hashMax*sizeof(float));
259  float* pOfca=static_cast<float*>(ofcaBlob.startingAddress());
260  float* pOfcb=static_cast<float*>(ofcbBlob.startingAddress());
261  float* pTimeOffset=static_cast<float*>(toBlob.startingAddress());
262  for (unsigned hs=0;hs<m_hashMax;++hs) {
263  const HWIdentifier chid=m_onlineID->channel_Id(hs);
264  LArOFCFlat::OFCRef_t ofca= input->OFC_a(chid,gain,phase);
265  LArOFCFlat::OFCRef_t ofcb= input->OFC_b(chid,gain,phase);
266  float timeOffset=input->timeOffset(chid,gain);
267  if (ofca.size()==0 && gain==2 && m_fakeEMBPSLowGain) {
268  ofca= input->OFC_a(chid,1,phase);
269  ofcb= input->OFC_b(chid,1,phase);
270  timeOffset=input->timeOffset(chid,1);
271  ++nCopiedEMPS;
272  }
273 
274  if (ofca.size()==nSamples) {
275  for (unsigned i=0;i<nSamples;++i) {
276  pOfca[hs*nSamples+i]=ofca[i];
277  }
278  }
279  else {
280  std::stringstream message;
281  message <<"Number of samples don't match. Expect " << nSamples << ", got " << ofca.size() << ".";
282  errIfConnected(chid,gain,"OFCa", message.str().c_str());
283  for (unsigned i=0;i<nSamples;++i) {
284  pOfca[hs*nSamples+i]=1.0;
285  }
286  ++nDefault;
287  }
288 
289  if (ofcb.size()==nSamples) {
290  for (unsigned i=0;i<nSamples;++i) {
291  pOfcb[hs*nSamples+i]=ofcb[i];
292  // FIXME: it should be replaced by proper conditions per channel
293  // HERE - multiplying HEC OFCb by 1.5 for SCs
294  // https://its.cern.ch/jira/browse/ATLLARONL-1784
295  //if (m_isSC && m_onlineID->isHECchannel(chid)){
296  // pOfcb[hs*nSamples+i]=ofcb[i]*1.5;
297  // ATH_MSG_WARNING("NOTE: this OFC for channel "<<chid<<" was multiplied by 1.5. This should be a HEC SC("<<m_onlineID->channel_name(chid)<<"). Was "<<ofcb[i]<<" now "<<pOfcb[hs*nSamples+i]);
298  //}
299  if (m_isSC && weights) pOfcb[hs*nSamples+i] *= weights->FSAMPL(chid);
300  if (weights && weights->FSAMPL(chid) != 1.) ATH_MSG_WARNING("NOTE: this OFC for channel "<<chid<<" was multiplied by "<<weights->FSAMPL(chid)<<" This should be a SC("<<m_onlineID->channel_name(chid)<<"). Was "<<ofcb[i]<<" now "<<pOfcb[hs*nSamples+i]);
301  }
302  }
303  else {
304  std::stringstream message;
305  message <<"Number of samples don't match. Expect " << nSamples << ", got " << ofcb.size() << ".";
306  errIfConnected(chid,gain,"OFCb", message.str().c_str());
307  for (unsigned i=0;i<nSamples;++i) {
308  pOfcb[hs*nSamples+i]=1.0;
309  }
310  }
311  pTimeOffset[hs]=timeOffset;
312  ++nChannels;
313 
314  }//end loop over hash ids
315  collOFC->add(gain,*attrList);
316  }//end loop over gains
317 
318  StatusCode sc=detStore()->record(collOFC,outputName);//"/LAR/ElecCalibFlat/OFC");
319  if (sc.isFailure()) {
320  ATH_MSG_ERROR( "Failed to record CondAttrListCollection OFC with key " << outputName );
321  return nullptr;
322  }
323 
324  ATH_MSG_INFO( "Converted OFCs to inline storage. Total number of channels=" << nChannels );
325  ATH_MSG_INFO( "Number of channels filled with default OFCs {1,1,1,1} " << nDefault << " (including disconnected)" );
326  if (nCopiedEMPS)
327  ATH_MSG_INFO( "\t Number of low gain EMBPS channels copied from medium gain" << nCopiedEMPS );
328  return collOFC;
329 }
330 
331 
333 
334  ATH_MSG_INFO("LArCompleteToFlat::shapeFlat, starting");
335 
336  unsigned nChannels=0;
337  unsigned nCopiedEMPS=0;
338  unsigned nDefault=0;
339 
340  coral::AttributeListSpecification* spec = new coral::AttributeListSpecification();
341  spec->extend("Shape", "blob");
342  spec->extend("ShapeDer", "blob");
343  spec->extend("TimeOffset","blob");
344  spec->extend<unsigned>("nSamples");
345  spec->extend<unsigned>("version");
347 
348  const unsigned nGain = m_isSC ? 1 : 3;
349  for (unsigned gain=0;gain<nGain;++gain) {
350 
351  unsigned nSamples=0;
352  for (unsigned hs=0;hs<m_hashMax && nSamples==0;++hs) {
353  const HWIdentifier chid=m_onlineID->channel_Id(hs);
354  ILArShape::ShapeRef_t shape= input->Shape(chid,gain);
355  nSamples=shape.size();
356  }
357  if (nSamples==0) {
358  ATH_MSG_ERROR( "All input Shapes for gain " << gain << " have 0 samples!" );
359  continue;//jump to the next gain
360  }
361 
362  ATH_MSG_INFO( "Gain " << gain <<": Found " << nSamples << " shape samples in input data" );
363 
365  (*attrList)["version"].setValue(0U);
366  coral::Blob& shapeBlob=(*attrList)["Shape"].data<coral::Blob>();
367  coral::Blob& shapeDerBlob=(*attrList)["ShapeDer"].data<coral::Blob>();
368  coral::Blob& toBlob=(*attrList)["TimeOffset"].data<coral::Blob>();
369 
370  (*attrList)["nSamples"].setValue(nSamples);
371 
372  shapeBlob.resize(m_hashMax*sizeof(float)*nSamples);
373  shapeDerBlob.resize(m_hashMax*sizeof(float)*nSamples);
374  toBlob.resize(m_hashMax*sizeof(float));
375  float* pShape=static_cast<float*>(shapeBlob.startingAddress());
376  float* pShapeDer=static_cast<float*>(shapeDerBlob.startingAddress());
377  float* pTimeOffset=static_cast<float*>(toBlob.startingAddress());
378  for (unsigned hs=0;hs<m_hashMax;++hs) {
379  const HWIdentifier chid=m_onlineID->channel_Id(hs);
380 
381  ILArShape::ShapeRef_t shape= input->Shape(chid,gain);
382  ILArShape::ShapeRef_t shapeDer= input->ShapeDer(chid,gain);
383  float timeOffset=input->timeOffset(chid,gain);
384  if (shape.size()==0 && gain==2 && m_fakeEMBPSLowGain) {
385  shape=input->Shape(chid,1);
386  shapeDer=input->ShapeDer(chid,1);
387  timeOffset=input->timeOffset(chid,1);
388  ++nCopiedEMPS;
389  }
390 
391  if (shape.size()==nSamples) {
392  for (unsigned i=0;i<nSamples;++i) {
393  pShape[hs*nSamples+i]=shape[i];
394  }
395  }
396  else {
397  std::stringstream message;
398  message <<"Number of samples don't match. Expect " << nSamples << ", got " << shape.size() << ".";
399  errIfConnected(chid,gain,"Shape", message.str().c_str());
400  for (unsigned i=0;i<nSamples;++i) {
401  pShape[hs*nSamples+i]=0.0;
402  }
403  ++nDefault;
404  }
405 
406 
407  if (shapeDer.size()==nSamples) {
408  for (unsigned i=0;i<nSamples;++i) {
409  pShapeDer[hs*nSamples+i]=shapeDer[i];
410  }
411  }
412  else {
413  std::stringstream message;
414  message <<"Number of samples don't match. Expect " << nSamples << ", got " << shapeDer.size() << ".";
415  errIfConnected(chid,gain,"ShapeDer", message.str().c_str());
416  for (unsigned i=0;i<nSamples;++i) {
417  pShapeDer[hs*nSamples+i]=0.0;
418  }
419  }
420  pTimeOffset[hs]=timeOffset;
421  ++nChannels;
422 
423  }//end loop over hash ids
424  coll->add(gain,*attrList);
425  }//end loop over gains
426 
427  StatusCode sc=detStore()->record(coll,outputName);//"/LAR/ElecCalibFlat/SHAPE");
428  if (sc.isFailure()) {
429  ATH_MSG_ERROR( "Failed to record CondAttrListCollection Shape with key " << outputName );
430  return nullptr;
431  }
432 
433  ATH_MSG_INFO( "Converted Shapes to inline storage. Total number of channels=" << nChannels );
434  ATH_MSG_INFO( "Number of channels filled with default shape {0,0,0,0} " << nDefault << " (including disconnected)" );
435  if (nCopiedEMPS)
436  ATH_MSG_INFO( "\t Number of low gain EMBPS channels copied from medium gain" << nCopiedEMPS );
437 
438  return coll;
439 }
440 
441 
442 
444 
445  ATH_MSG_INFO("LArCompleteToFlat::rampFlat, starting");
446 
447  unsigned nChannels=0;
448  unsigned nCopiedEMPS=0;
449  unsigned nDefault=0;
450 
451  coral::AttributeListSpecification* spec = new coral::AttributeListSpecification();
452  spec->extend("RampVec", "blob");
453  spec->extend<unsigned>("nPoints");
454  spec->extend<unsigned>("version");
456 
457  std::vector<float> defaultRamp={0.0,1.0};
458 
459  const LArOnOffIdMapping* cabling(nullptr);
460  if(m_isSC){
462  cabling=*cablingHdl;
463  }else{
465  cabling=*cablingHdl;
466  }
467  if(!cabling) {
468  ATH_MSG_ERROR( "Do not have cabling mapping from key " << m_cablingKey.key() );
469  return coll;
470  }
471 
472  const unsigned nGain = m_isSC ? 1 : 3;
473  for (unsigned gain=0;gain<nGain;++gain) {
474 
475  unsigned nPoints=0;
476  for (unsigned hs=0;hs<m_hashMax && nPoints==0;++hs) {
477  const HWIdentifier chid=m_onlineID->channel_Id(hs);
478  const ILArRamp::RampRef_t ramp= input->ADC2DAC(chid,gain);
479  nPoints=ramp.size();
480  }
481  if (nPoints==0) {
482  ATH_MSG_ERROR( "All input Ramps for gain " << gain << " have 0 points!" );
483  continue;//jump to the next gain
484  }
485 
486  defaultRamp.resize(nPoints,0.0); //fill remaining points if needed
487  ATH_MSG_INFO( "Gain " << gain << ": Found a ramp polynom of degree " << nPoints << " in input data" );
489  (*attrList)["version"].setValue(0U);
490  coral::Blob& blobRamp=(*attrList)["RampVec"].data<coral::Blob>();
491  (*attrList)["nPoints"].setValue(nPoints);
492  blobRamp.resize(m_hashMax*sizeof(float)*nPoints);
493  float* pblobRamp=static_cast<float*>(blobRamp.startingAddress());
494 
495  for (unsigned hs=0;hs<m_hashMax;++hs) {
496  const HWIdentifier chid=m_onlineID->channel_Id(hs);
497  std::vector<float> rampVec(input->ADC2DAC(chid,gain).asVector());
498  if(rampVec.size()>=2 && rampVec[1]>500) {
499  ATH_MSG_WARNING("Protection against crazy ramp values, set 500");
500  rampVec[1]=500.;
501  }
502  if (rampVec.empty() && gain==2 && m_fakeEMBPSLowGain && cabling->isOnlineConnected(chid) ) {
503  rampVec=input->ADC2DAC(chid,1).asVector();
504  if(rampVec.empty()) {
505  ATH_MSG_WARNING("Filling EMBPS ramp with default values 0,10");
506  rampVec.resize(2);
507  rampVec[0]=0.;
508  rampVec[1]=10.;
509  } else {
510  rampVec[1]*=10.0;
511  if(rampVec[1]>500) {
512  ATH_MSG_WARNING("Protection against crazy ramp values, set 500");
513  rampVec[1]=500.;
514  }
515  }
516  ++nCopiedEMPS;
517  }
518 
519  if (rampVec.size()>=nPoints) {
520  for (size_t i=0;i<nPoints;++i) {
521  pblobRamp[nPoints*hs+i]=rampVec[i];
522  }
523  }
524  else {
525  std::stringstream message;
526  message <<"Polynom degree doesn't match. Expect " << nPoints << ", got " << rampVec.size() << ".";
527  errIfConnected(chid,gain,"Ramp", message.str().c_str());
528  for (size_t i=0;i<nPoints;++i) {
529  pblobRamp[nPoints*hs+i]=defaultRamp[i];
530  }
531  ++nDefault;
532  }
533  ++nChannels;
534  }//end loop over hash ids
535  coll->add(gain,*attrList);
536  }//end loop over gains
537 
538  StatusCode sc=detStore()->record(coll,outputName);//"/LAR/ElecCalibFlat/Ramp");
539  if (sc.isFailure()) {
540  ATH_MSG_ERROR( "Failed to record CondAttrListCollection for ramp with key " << outputName );
541  return nullptr;
542  }
543 
544  ATH_MSG_INFO( "Converted Ramps to inline storage. Total number of channels " << nChannels );
545  ATH_MSG_INFO( "Number of channels filled with default ramp {0,1} " << nDefault << " (including disconnected)" );
546  if (nCopiedEMPS)
547  ATH_MSG_INFO( "\t Number of low gain EMBPS channels copied from medium gain (applied factor 10)" << nCopiedEMPS );
548 
549 
550  return coll;
551 }
552 
553 
555  coral::AttributeListSpecification* spec = new coral::AttributeListSpecification();
556  spec->extend("DAC2uA", "blob");
557  spec->extend<unsigned>("version");
560  (*attrList)["version"].setValue(0U);
561  coral::Blob& blob=(*attrList)["DAC2uA"].data<coral::Blob>();
562  blob.resize(m_hashMax*sizeof(float));
563  float* pblob=static_cast<float*>(blob.startingAddress());
564  for (unsigned hs=0;hs<m_hashMax;++hs) {
565  const HWIdentifier chid=m_onlineID->channel_Id(hs);
566  pblob[hs]=input->DAC2UA(chid);
567  }
568  coll->add(1,*attrList);
569  //delete attrList;//???
570  StatusCode sc=detStore()->record(coll,outputName);
571  if (sc.isFailure()) {
572  ATH_MSG_ERROR( "Failed to record CondAttrListCollection with key" << outputName );
573  return nullptr;
574  }
575  return coll;
576 }
577 
578 
580  coral::AttributeListSpecification* spec = new coral::AttributeListSpecification();
581  spec->extend("uA2MeV", "blob");
582  spec->extend<unsigned>("version");
585  (*attrList)["version"].setValue(0U);
586  coral::Blob& blob=(*attrList)["uA2MeV"].data<coral::Blob>();
587  blob.resize(m_hashMax*sizeof(float));
588  float* pblob=static_cast<float*>(blob.startingAddress());
589  for (unsigned hs=0;hs<m_hashMax;++hs) {
590  const HWIdentifier chid=m_onlineID->channel_Id(hs);
591  pblob[hs]=input->UA2MEV(chid);
592  }
593  coll->add(1,*attrList);
594  //delete attrList;//???
595  StatusCode sc=detStore()->record(coll,outputName);
596  if (sc.isFailure()) {
597  ATH_MSG_ERROR( "Failed to record CondAttrListCollection with key" << outputName );
598  return nullptr;
599  }
600  return coll;
601 }
602 
604 
605  coral::AttributeListSpecification* spec = new coral::AttributeListSpecification();
606  spec->extend("tQThr", "blob");
607  spec->extend("samplesThr", "blob");
608  spec->extend("trigSumThr","blob");
609  //spec->extend<unsigned>("version");
610  spec->extend("Name","string");
611 
613  //(*attrList)["version"].setValue(0U);
614  (*attrList)["Name"].setValue(m_nameOfSet);
615  coral::Blob& QBlob=(*attrList)["tQThr"].data<coral::Blob>();
616  coral::Blob& SamplesBlob=(*attrList)["samplesThr"].data<coral::Blob>();
617  coral::Blob& TrigBlob=(*attrList)["trigSumThr"].data<coral::Blob>();
618 
619  QBlob.resize(m_hashMax*sizeof(float));
620  SamplesBlob.resize(m_hashMax*sizeof(float));
621  TrigBlob.resize(m_hashMax*sizeof(float));
622  float* ptQThr=static_cast<float*>(QBlob.startingAddress());
623  float* pSamplesThr=static_cast<float*>(SamplesBlob.startingAddress());
624  float* pTrigThr=static_cast<float*>(TrigBlob.startingAddress());
625 
626  for (unsigned hs=0;hs<m_hashMax;++hs) {
627  const HWIdentifier chid=m_onlineID->channel_Id(hs);
628 
629  ptQThr[hs] = input->tQThr(chid);
630  pSamplesThr[hs] = input->samplesThr(chid);
631  pTrigThr[hs] = input->trigSumThr(chid);
632 
633  ATH_MSG_INFO( "hwid: "<<chid.getString()<<" "<<hs<<" | "<<ptQThr[hs]<<" : "<<pSamplesThr[hs]<<" | "<<pTrigThr[hs] );
634  }//end loop over hash ids
635 
636  AthenaAttributeList* coll=new AthenaAttributeList(*attrList);
637 
638  StatusCode sc=detStore()->record(coll,outputName);
639  if (sc.isFailure()) {
640  ATH_MSG_ERROR( "Failed to record AthenaAttributeList DSPThresholds with key " << outputName );
641  return nullptr;
642  }
643 
644  return coll;
645 }
646 
647 
648 
650  std::string flatName = "/LAR/ElecCalibFlat";
651  StatusCode sc;
652  if(m_isSC){
653  flatName += "SC";
654  const LArOnline_SuperCellID* ll = nullptr;
655  sc = detStore()->retrieve(ll, "LArOnline_SuperCellID");
656  if (sc.isFailure()) {
657  ATH_MSG_ERROR( "Could not get LArOnlineID helper !" );
658  return StatusCode::FAILURE;
659  }
660  else {
661  m_onlineID = (const LArOnlineID_Base*)ll;
662  ATH_MSG_DEBUG("Found the LArOnlineID helper");
663  }
664  }else{
665  const LArOnlineID* ll = nullptr;
666  sc = detStore()->retrieve(ll, "LArOnlineID");
667  if (sc.isFailure()) {
668  ATH_MSG_ERROR( "Could not get LArOnlineID helper !" );
669  return StatusCode::FAILURE;
670  }
671  else {
672  m_onlineID = (const LArOnlineID_Base*)ll;
673  ATH_MSG_DEBUG(" Found the LArOnlineID helper. ");
674  }
675 
676  }
677 
679 
680  if (!m_uA2MeVInput.empty()) {
681  const ILAruA2MeV* uA2MeVComplete = nullptr;
682  sc=detStore()->retrieve(uA2MeVComplete,m_uA2MeVInput);
683  if (sc.isFailure()) {
684  if(m_forceStop) {
685  ATH_MSG_ERROR( "Failed to get LAruA2MeV with key " << m_uA2MeVInput );
686  return sc;
687  } else {
688  ATH_MSG_WARNING( "Will not process LAruA2MeV" );
689  }
690  } else {
691  uA2MeVFlat(uA2MeVComplete, flatName+"/uA2MeV");
692  }
693  }//end if have m_uA2MeV
694 
695 
696  if (!m_DAC2uAInput.empty()) {
697  const ILArDAC2uA* DAC2uAComplete = nullptr;
698  sc=detStore()->retrieve(DAC2uAComplete,m_DAC2uAInput);
699  if (sc.isFailure()) {
700  if(m_forceStop) {
701  ATH_MSG_ERROR( "Failed to get LArDAC2uA with key " << m_DAC2uAInput );
702  return sc;
703  } else {
704  ATH_MSG_WARNING( "Will not process LArDAC2uA" );
705  }
706  } else {
707  DAC2uAFlat(DAC2uAComplete, flatName+"/DAC2uA");
708  }
709  }//end if have m_DAC2uAInput
710 
711  if (!m_MphysOverMcalInput.empty()) {
714  if (sc.isFailure()) {
715  if(m_forceStop) {
716  ATH_MSG_ERROR( "Failed to get LArMphysOverMcal with key " << m_MphysOverMcalInput );
717  return sc;
718  } else {
719  ATH_MSG_WARNING( "Will not process LArMphysOverMcal" );
720  }
721  } else {
722  const int nGain = m_isSC ? 1 : 3;
723  const bool wfcal = m_isSC ? true : false;
724  singleFloatFlat("MphysOverMcal", MphysOverMcalComplete, flatName+"/MphysOverMcal",nGain,wfcal); //No MphysOverMCal for FCAL
725  }
726  }//end if have m_MphysOverMcalInput
727 
728 
729  if (!m_HVScaleCorrInput.empty()) {
730  const LArHVScaleCorrComplete* HVScaleCorrComplete = nullptr;
731  sc=detStore()->retrieve(HVScaleCorrComplete,m_HVScaleCorrInput);
732  if (sc.isFailure()) {
733  if(m_forceStop) {
734  ATH_MSG_ERROR( "Failed to get LArHVScaleCorr with key " << m_HVScaleCorrInput );
735  return sc;
736  } else {
737  ATH_MSG_WARNING( "Will not process LArHVScaleCorr" );
738  }
739  } else {
740  singleFloatFlat("HVScaleCorr", HVScaleCorrComplete, flatName+"/HVScaleCorr",1);
741  }
742  }//end if have m_HVScaleCorrInput
743 
744  if (!m_PedestalInput.empty()) {
745  const LArPedestalComplete* pedComplete = nullptr;
746  sc=detStore()->retrieve(pedComplete,m_PedestalInput);
747  if (sc.isFailure()) {
748  if(m_forceStop) {
749  ATH_MSG_ERROR( "Failed to get LArPedestal" );
750  return sc;
751  } else {
752  ATH_MSG_WARNING( "Will not process LArPedestal" );
753  }
754  } else {
755  pedestalFlat(pedComplete,flatName+"/Pedestal");
756 
757  /*
758  CondAttrListCollection* coll=pedestalFlat(pedComplete,"/LAR/ElecCalibFlat/Pedestal");
759  LArPedestalFlat* pf=new LArPedestalFlat(coll);
760 
761  sc=detStore()->record(pf,"PedestalFlat");
762  if (sc.isFailure()) {
763  ATH_MSG_ERROR( "Failed to record LArPedestalFlat" );
764  }
765 
766  ILArPedestal* iped=pf;
767  sc=detStore()->symLink(pf,iped);
768  if (sc.isFailure()) {
769  ATH_MSG_ERROR( "Failed to symlink LArPedestalFlat" );
770  }
771  }
772  */
773  }
774  }//end if have m_pedestalInput
775 
776  //OFC:
777  if (!m_OFCInput.empty()) {
778  const LArOFCComplete* ofcComplete = nullptr;
779  sc=detStore()->retrieve(ofcComplete,m_OFCInput);
780  if (sc.isFailure()) {
781  if(m_forceStop) {
782  ATH_MSG_ERROR( "Failed to get LArOFCComplete object" );
783  return sc;
784  } else {
785  ATH_MSG_WARNING( "Will not process LArOFCComplete" );
786  }
787  } else {
788  const LArfSamplSC* weightsComplete(nullptr);
789  if(m_isSC && !m_weightsKeySC.empty()) {
791  weightsComplete=*wHdl;
792  if(!weightsComplete) {
793  ATH_MSG_WARNING("Do not have OFCb weights !!!! Not applying");
794  }
795  }
796  ofcFlat(ofcComplete,flatName+"/OFC",weightsComplete);
797  }
798  }//end have m_OFCInput
799  if (!m_OFCCaliInput.empty()) {
800  const LArOFCComplete* ofcComplete = nullptr;
801  sc=detStore()->retrieve(ofcComplete,m_OFCCaliInput);
802  if (sc.isFailure()) {
803  if(m_forceStop) {
804  ATH_MSG_ERROR( "Failed to get LArOFCComplete object (cali)" );
805  return sc;
806  } else {
807  ATH_MSG_WARNING( "Will not process LArOFCComplete (cali)" );
808  }
809  } else {
810  ofcFlat(ofcComplete,flatName+"/OFCCali");
811 
812  }
813  }//end have m_OFCInput
814  //Shape:
815  if (!m_ShapeInput.empty()) {
816  const LArShapeComplete* shapeComplete = nullptr;
817  sc=detStore()->retrieve(shapeComplete,m_ShapeInput);
818  if (sc.isFailure()) {
819  if(m_forceStop) {
820  ATH_MSG_ERROR( "Failed to get LArShapeComplete object" );
821  return sc;
822  } else {
823  ATH_MSG_WARNING( "Will not process LArShapeComplete" );
824  }
825  } else {
826  shapeFlat(shapeComplete,flatName+"/Shape");
827  /*
828  CondAttrListCollection* coll=shapeFlat(shapeComplete,"/LAR/ElecCalibFlat/Shape");
829 
830  LArShapeFlat* sf=new LArShapeFlat(coll);
831 
832  sc=detStore()->record(sf,"ShapeFlat");
833  if (sc.isFailure()) {
834  ATH_MSG_ERROR( "Failed to record LArShapeFlat" );
835  }
836 
837  ILArShape* ishape=sf;
838  sc=detStore()->symLink(sf,ishape);
839  if (sc.isFailure()) {
840  ATH_MSG_ERROR( "Failed to symlink LArShapeFlat" );
841  }
842  */
843  }
844  }//end if have m_shapeInput
845 
846  //Ramp
847  if (!m_RampInput.empty()) {
848  const LArRampComplete* rampComplete = nullptr;
849  sc=detStore()->retrieve(rampComplete,m_RampInput);
850  if (sc.isFailure()) {
851  if(m_forceStop) {
852  ATH_MSG_ERROR( "Failed to get LArRampComplete object" );
853  return sc;
854  } else {
855  ATH_MSG_WARNING( "Will not process LArRampComplete" );
856  }
857  } else {
858  rampFlat(rampComplete,flatName+"/Ramp");
859  }
860  }
861 
862  if(!m_DSPThresholdsInput.empty()) {
863  //DSPThresh:
864  const LArDSPThresholdsComplete* DSPTComplete = nullptr;
865  sc=detStore()->retrieve(DSPTComplete,m_DSPThresholdsInput);
866  if (sc.isFailure()) {
867  if(m_forceStop) {
868  ATH_MSG_ERROR( "Failed to get LArDSPThresholdsComplete object" );
869  return sc;
870  } else {
871  ATH_MSG_WARNING( "Will not process LArDSPThresholdsComplete" );
872  }
873  }
874  DSPThresholdsFlat(DSPTComplete,"/LAR/Configuration/DSPThresholdFlat/Templates");
875  /*
876  AthenaAttributeList *cl=DSPThresholdsFlat(DSPTComplete,"/LAR/Configuration/DSPThresholdFlat/Templates");
877 
878  LArDSPThresholdsFlat* df;
879  if(cl) {
880  df=new LArDSPThresholdsFlat(cl);
881 
882  sc=detStore()->record(df,"DSPThresholdsFlat");
883  if (sc.isFailure()) {
884  ATH_MSG_ERROR( "Failed to record LArDSPThresholdsFlat" );
885  }
886  }
887  */
888  } //end if have m__DSPThresholdsInput
889 
890 
891  return StatusCode::SUCCESS;
892 }
893 
894 
895 
896 
897 
898 void LArCompleteToFlat::errIfConnected(const HWIdentifier chid, const int gain, const char* objName, const char* message) const{
899 
900  const LArOnOffIdMapping* cabling(nullptr);
901  if(m_isSC){
903  cabling=*cablingHdl;
904  }else{
906  cabling=*cablingHdl;
907  }
908  if(!cabling) {
909  ATH_MSG_ERROR( "Do not have cabling mapping from key " << m_cablingKey.key() );
910  return;
911  }
912 
913  if (cabling->isOnlineConnected(chid)) {
914  if (gain!=2 || !m_onlineID->isEMBPS(chid)) { //No LG Presampler calibration
915  ATH_MSG_ERROR( "No valid " << objName << " found for channel " << m_onlineID->channel_name(chid) << ", gain " << gain << ". ");
916  if (message) ATH_MSG_ERROR( message );
917  ATH_MSG_ERROR( " Filling with default value." );
918  }
919  }
920  }
LArCompleteToFlat::m_OFCCaliInput
std::string m_OFCCaliInput
Definition: LArCompleteToFlat.h:84
LArCompleteToFlat::m_uA2MeVInput
std::string m_uA2MeVInput
InputSGKeys.
Definition: LArCompleteToFlat.h:77
LArCompleteToFlat::rampFlat
CondAttrListCollection * rampFlat(const ILArRamp *input, const std::string &outputName)
Definition: LArCompleteToFlat.cxx:443
LArCompleteToFlat::~LArCompleteToFlat
virtual ~LArCompleteToFlat()
Destructor:
ReadOfcFromCool.phase
phase
Definition: ReadOfcFromCool.py:127
LArRampComplete.h
LArCompleteToFlat::m_PedestalInput
std::string m_PedestalInput
Definition: LArCompleteToFlat.h:80
CondAttrListCollection.h
This file defines the class for a collection of AttributeLists where each one is associated with a ch...
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
LArRampComplete
Definition: LArRampComplete.h:50
LArParamsProperties::MphysOverMcalComplete
@ MphysOverMcalComplete
Definition: LArParamsProperties.h:85
LArCompleteToFlat::initialize
StatusCode initialize()
Definition: LArCompleteToFlat.cxx:75
CaloCondBlobAlgs_fillNoiseFromASCII.spec
spec
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:47
LAruA2MeVMC.h
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
LArDSPThresholdsComplete
Definition: LArDSPThresholdsComplete.h:21
ILAruA2MeV
Definition: ILAruA2MeV.h:13
ILArPedestal
Definition: ILArPedestal.h:12
LArPedestalComplete
This class implements the ILArPedestal interface.
Definition: LArPedestalComplete.h:26
CaloCondBlobAlgs_fillNoiseFromASCII.gain
gain
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:110
ReadCellNoiseFromCool.cabling
cabling
Definition: ReadCellNoiseFromCool.py:154
LArCompleteToFlat.h
LArShapeComplete
This class implements the ILArShape interface.
Definition: LArShapeComplete.h:26
LArDAC2uAMC.h
python.subdetectors.tile.Blob
Blob
Definition: tile.py:17
athena.value
value
Definition: athena.py:122
ILArDAC2uA
Definition: ILArDAC2uA.h:13
LArShapeComplete.h
python.PyKernel.AttributeList
AttributeList
Definition: PyKernel.py:36
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
SG::VarHandleKey::empty
bool empty() const
Test if the key is blank.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:150
HWIdentifier
Definition: HWIdentifier.h:13
CondAttrListCollection
This class is a collection of AttributeLists where each one is associated with a channel number....
Definition: CondAttrListCollection.h:52
AthenaAttributeList.h
ReweightUtils.message
message
Definition: ReweightUtils.py:15
LArOFCFlat.h
LArCalibErrorCode.h
Defines a common ERRORCODE enum for LAr-Calibration objects.
LArHVScaleCorrComplete
This class implements the ILArHVScaleCorr interface.
Definition: LArHVScaleCorrComplete.h:18
LArCompleteToFlat::m_forceStop
bool m_forceStop
Definition: LArCompleteToFlat.h:92
LArCompleteToFlat::m_RampInput
std::string m_RampInput
Definition: LArCompleteToFlat.h:81
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
LArPedestalFlat.h
LArCompleteToFlat::m_cablingKeySC
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKeySC
Definition: LArCompleteToFlat.h:73
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
LArConditionsContainer< LArSingleFloatP >
LArCompleteToFlat::LArCompleteToFlat
LArCompleteToFlat()
Default constructor:
LArCompleteToFlat::m_isSC
bool m_isSC
Definition: LArCompleteToFlat.h:91
LArCompleteToFlat::m_nameOfSet
std::string m_nameOfSet
Definition: LArCompleteToFlat.h:89
LArOnlineID_Base::isFCALchannel
bool isFCALchannel(const HWIdentifier id) const
Definition: LArOnlineID_Base.cxx:1657
LArCompleteToFlat::ofcFlat
CondAttrListCollection * ofcFlat(const ILArOFC *input, const std::string &outputName, const LArfSamplSC *weights=nullptr)
Definition: LArCompleteToFlat.cxx:211
LArCompleteToFlat::stop
virtual StatusCode stop()
Definition: LArCompleteToFlat.cxx:649
LArCompleteToFlat::shapeFlat
CondAttrListCollection * shapeFlat(const LArShapeComplete *input, const std::string &outputName)
Definition: LArCompleteToFlat.cxx:332
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
LArCompleteToFlat::m_hashMax
unsigned m_hashMax
Definition: LArCompleteToFlat.h:69
LArMphysOverMcalComplete
This class implements the ILArMphysOverMcal interface.
Definition: LArMphysOverMcalComplete.h:29
lumiFormat.i
int i
Definition: lumiFormat.py:92
CreatePhysValWebPage.hs
hs
Definition: CreatePhysValWebPage.py:107
LArOFCComplete.h
LArDSPThresholdsComplete.h
A LArRawConditionsContainer holding thresholds used by the DSP.
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
ILArRamp
Definition: ILArRamp.h:12
LArCompleteToFlat::uA2MeVFlat
CondAttrListCollection * uA2MeVFlat(const ILAruA2MeV *input, const std::string &outputName)
Definition: LArCompleteToFlat.cxx:579
PlotPulseshapeFromCool.input
input
Definition: PlotPulseshapeFromCool.py:106
LArCompleteToFlat::m_onlineID
const LArOnlineID_Base * m_onlineID
Definition: LArCompleteToFlat.h:70
LArOnlineID_Base::channel_Id
HWIdentifier channel_Id(int barrel_ec, int pos_neg, int feedthrough, int slot, int channel) const
create channel identifier from fields
Definition: LArOnlineID_Base.cxx:1569
LArCompleteToFlat::m_MphysOverMcalInput
std::string m_MphysOverMcalInput
Definition: LArCompleteToFlat.h:82
LArCompleteToFlat::m_DAC2uAInput
std::string m_DAC2uAInput
Definition: LArCompleteToFlat.h:78
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
AthenaAttributeList
An AttributeList represents a logical row of attributes in a metadata table. The name and type of eac...
Definition: PersistentDataModel/PersistentDataModel/AthenaAttributeList.h:45
LArfSamplSC
Definition: LArfSamplSC.h:18
AthAlgorithm
Definition: AthAlgorithm.h:47
LArDSPThresholdsFlat.h
ILArOFC
Definition: ILArOFC.h:14
LArOnlineID_Base
Helper for the Liquid Argon Calorimeter cell identifiers.
Definition: LArOnlineID_Base.h:105
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
LArCompleteToFlat::m_cablingKey
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKey
Definition: LArCompleteToFlat.h:72
LArOnlineID_Base::channelHashMax
size_type channelHashMax(void) const
Define channel hash tables max size.
Definition: LArOnlineID_Base.cxx:1901
LArCompleteToFlat::singleFloatFlat
CondAttrListCollection * singleFloatFlat(const char *blobName, const LArConditionsContainer< LArSingleFloatP > *input, const std::string &outputName, const unsigned nGain, const bool withFCAL=true)
Definition: LArCompleteToFlat.cxx:85
LArCompleteToFlat::m_OFCInput
std::string m_OFCInput
Definition: LArCompleteToFlat.h:83
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
LArOnlineID
Definition: LArOnlineID.h:20
LArShapeFlat.h
LArCompleteToFlat::m_weightsKeySC
SG::ReadCondHandleKey< LArfSamplSC > m_weightsKeySC
Definition: LArCompleteToFlat.h:74
LArHVScaleCorrComplete.h
LArOnline_SuperCellID
Definition: LArOnline_SuperCellID.h:20
lumiFormat.outputName
string outputName
Definition: lumiFormat.py:71
Example_ReadSampleNoise.ped
ped
Definition: Example_ReadSampleNoise.py:45
LArCompleteToFlat::pedestalFlat
CondAttrListCollection * pedestalFlat(const ILArPedestal *input, const std::string &outputName)
Definition: LArCompleteToFlat.cxx:147
Identifier::getString
std::string getString() const
Provide a string form of the identifier - hexadecimal.
Definition: Identifier.cxx:25
LArCompleteToFlat::m_ShapeInput
std::string m_ShapeInput
Definition: LArCompleteToFlat.h:85
LArCompleteToFlat::DSPThresholdsFlat
AthenaAttributeList * DSPThresholdsFlat(const LArDSPThresholdsComplete *input, const std::string &outputName)
Definition: LArCompleteToFlat.cxx:603
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
LArOnlineID_Base::isEMBPS
bool isEMBPS(const HWIdentifier id) const
Definition: LArOnlineID_Base.cxx:1665
LArPedestalComplete.h
LArCompleteToFlat::DAC2uAFlat
CondAttrListCollection * DAC2uAFlat(const ILArDAC2uA *input, const std::string &outputName)
Definition: LArCompleteToFlat.cxx:554
LArCompleteToFlat::m_HVScaleCorrInput
std::string m_HVScaleCorrInput
Definition: LArCompleteToFlat.h:79
LArOnline_SuperCellID.h
LArDigits2NtupleDumper.nSamples
nSamples
Definition: LArDigits2NtupleDumper.py:70
LArfSamplSC::FSAMPL
virtual const float & FSAMPL(const HWIdentifier &chid) const
Definition: LArfSamplSC.cxx:34
LArCompleteToFlat::m_DSPThresholdsInput
std::string m_DSPThresholdsInput
Definition: LArCompleteToFlat.h:86
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
LArCompleteToFlat::m_fakeEMBPSLowGain
bool m_fakeEMBPSLowGain
Definition: LArCompleteToFlat.h:93
LArCompleteToFlat::errIfConnected
void errIfConnected(const HWIdentifier chid, const int gain, const char *objName, const char *message=0) const
Definition: LArCompleteToFlat.cxx:898
LArOFCComplete
This class implements the ILArOFC interface.
Definition: LArOFCComplete.h:25
CaloCondBlobAlgs_fillNoiseFromASCII.blob
blob
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:96
LArOnlineID.h
LArVectorProxy
Proxy for accessing a range of float values like a vector.
Definition: LArVectorProxy.h:38
DiTauMassTools::TauTypes::ll
@ ll
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:49
LArOnOffIdMapping
Definition: LArOnOffIdMapping.h:20