ATLAS Offline Software
Loading...
Searching...
No Matches
LArHVPathologyDbAlg.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
6
10
16
25#include "LArHV/HECHVSubgap.h"
27#include "LArHV/FCALHVLine.h"
28
29#include <fstream>
30#include <cstdlib>
31
33#include "CoralBase/Blob.h"
34
35#include "TBufferFile.h"
36#include "TClass.h"
37
38
40{
41 ATH_MSG_INFO(" in initialize()");
42
43 if(m_writeCondObjs && m_folder.value().empty()) {
44 ATH_MSG_ERROR("Folder property not set. Exiting ... ");
45 return StatusCode::FAILURE;
46 }
47
48 // Get HVPathology tool
49 //ATH_CHECK(m_pathologyTool.retrieve());
50
51 // retrieve LArEM id helpers
52 ATH_CHECK(detStore()->retrieve(m_caloIdMgr));
53
54 m_larem_id = m_caloIdMgr->getEM_ID();
55 m_larhec_id = m_caloIdMgr->getHEC_ID();
56 m_larfcal_id = m_caloIdMgr->getFCAL_ID();
57
58 ATH_CHECK(detStore()->retrieve(m_laronline_id,"LArOnlineID"));
59
60 ATH_CHECK( m_hvCablingKey.initialize() );
61 ATH_CHECK( m_cablingKey.initialize() );
62 ATH_CHECK( m_caloMgrKey.initialize() );
64
65 return StatusCode::SUCCESS;
66}
67
68StatusCode LArHVPathologyDbAlg::execute(const EventContext& ctx)
69{
70 ATH_MSG_INFO(" in execute()");
71
72
73 int nevt = ctx.eventID().event_number();
74 if (nevt!=1) return StatusCode::SUCCESS;
75
76
78 ATH_CHECK(caloMgrHandle.isValid());
79 const CaloDetDescrManager* calodetdescrmgr = *caloMgrHandle;
80
81
82 const std::vector<LArHVPathologiesDb::LArHVElectPathologyDb>* pathologyContainer=nullptr;
83 if(m_writeCondObjs) {
84 ATH_MSG_INFO("Creating conditions objects");
85
86 // Create cond objects
87 auto pathologies=createCondObjects(ctx,calodetdescrmgr);
88 if(!pathologies) {
89 ATH_MSG_ERROR("Could not create cond objects ");
90 m_writeCondObjs = false;
91 return StatusCode::FAILURE;
92 }
93 pathologyContainer=&(pathologies->m_v);
94 std::unique_ptr<AthenaAttributeList> attrlist = hvPathology2AttrList(*pathologies);
95 ATH_MSG_INFO("Created Attribute List");
96 coral::Blob& blob=(*attrlist)["Constants"].data<coral::Blob>();
97 ATH_MSG_DEBUG("Blob size=" << blob.size());
98 StatusCode sc = detStore()->record(std::move(attrlist),m_folder.value());
99 if(!sc.isSuccess()) {
100 ATH_MSG_ERROR("Could not record " << m_folder.value());
101 return sc;
102 }
103 else
104 ATH_MSG_INFO("Recorded " << m_folder.value());
105 }
106 // Dump cond objects
107 ATH_CHECK(printCondObjects (ctx,calodetdescrmgr,pathologyContainer));
108 return StatusCode::SUCCESS;
109}
110
111
112std::optional<LArHVPathologiesDb> LArHVPathologyDbAlg::createCondObjects (const EventContext & ctx, const CaloDetDescrManager* calodetdescrmgr) const
113{
114 ATH_MSG_INFO(" in createCondObjects() ");
115
117
119 const LArOnOffIdMapping *cabling = *cabHdl;
120 if(!cabling) {
121 ATH_MSG_ERROR("Do not have cabling object with key " << m_cablingKey.key());
122 return std::nullopt;
123 }
124 // Read input file and construct LArHVPathologiesDb for given folder
125 std::ifstream infile;
126 infile.open(m_inpFile.value().c_str());
127
128 if(!infile.is_open()) {
129 ATH_MSG_ERROR("Unable to open " << m_inpFile << " for reading");
130 return std::nullopt;
131 }
132
133 char checkChar;
134 char commentSign('#');
135 std::string commentLine(""), foldername("");
136 unsigned int cellID;
137 unsigned short electInd, pathologyType;
138
139 // Look for the folder name in the file
140 while(!infile.eof()) {
141 infile >> foldername;
142 if(foldername==m_folder.value())
143 break;
144 }
145
146 if(foldername!=m_folder.value()) {
147 ATH_MSG_ERROR("Unable to find data for the folder " << m_folder.value()
148 << " in the input file");
149 return std::nullopt;
150 }
151 else
152 ATH_MSG_INFO("Found folder " << foldername << " in the input file");
153
154 // Get data corresponding to the folder and put it into LArHVPathologiesDb object
155 LArHVPathologiesDb pathologies;
156
157 ATH_MSG_INFO(" start reading input file ");
158 while(!infile.eof()) {
159 // Number or string?
160 checkChar = static_cast<char> (infile.get());
161 if(checkChar=='\n')
162 continue;
163 if((checkChar >= '0') && (checkChar <= '9')) {
164 // Number - read three values
165 infile.unget();
166 std::vector<unsigned int> elecList;
167 elecList.reserve(2);
168 if (m_mode==0) {
169 infile >> cellID >> electInd >> pathologyType;
170 elecList.push_back(electInd);
171 } else {
172 unsigned int bec,pos_neg,FT,slot,channel,hvModule,hvLine;
173 infile >> bec >> pos_neg >> FT >> slot >> channel >> hvModule >> hvLine >> pathologyType;
174 ATH_MSG_INFO(" read " << bec << " " << pos_neg << " " << FT << " " << slot << " " << channel << " " << hvModule << " " << hvLine << " " << pathologyType);
175 HWIdentifier hwid = m_laronline_id->channel_Id(bec,pos_neg,FT,slot,channel);
176 Identifier id = cabling->cnvToIdentifier( hwid);
177 cellID = (unsigned int)(id.get_identifier32().get_compact());
178 elecList=getElectInd(**hvIdMapping, id,hvModule,hvLine,calodetdescrmgr);
179 ATH_MSG_INFO(" cellId , elecList size " << cellID << " " << elecList.size());
180 }
181 for (unsigned int i=0;i<elecList.size();i++) {
183 electPath.cellID = cellID;
184 electPath.electInd = elecList[i];
185 if(m_mode==2) electPath.pathologyType = ((pathologyType&0x0FFF)<<4);
186 else electPath.pathologyType = pathologyType;
187 pathologies.m_v.push_back(electPath);
188 ATH_MSG_INFO("Created electrode pathology (" << cellID
189 << "," << elecList[i]
190 << "," << pathologyType << ")");
191 }
192 }
193 else if(checkChar==commentSign) {
194 // Skip the comment
195 std::getline(infile,commentLine);
196 }
197 else {
198 // We found another folder. Stop parsing
199 break;
200 }
201 }
202
203 infile.close();
204 ATH_MSG_INFO("Finished parsing input file");
205 return std::make_optional<LArHVPathologiesDb>(pathologies);
206}
207
208StatusCode LArHVPathologyDbAlg::printCondObjects (const EventContext& ctx, const CaloDetDescrManager* calodetdescrmgr,
209 const std::vector<LArHVPathologiesDb::LArHVElectPathologyDb>* pathologyContainer) const
210{
211 ATH_MSG_INFO(" in printCondObjects() ");
212
215 const LArOnOffIdMapping *cabling = *cabHdl;
216 if(!cabling) {
217 ATH_MSG_ERROR("Do not have cabling object with key " << m_cablingKey.key());
218 return StatusCode::FAILURE;
219 }
220
221 std::ofstream *fout=nullptr;
222 if (!m_hvPathologyKey.empty() && pathologyContainer==nullptr) {
224 pathologyContainer=&(pathHdl->getPathology());
225 }
226 if (!pathologyContainer) {
227 ATH_MSG_WARNING("No input data ");
228
229 return StatusCode::SUCCESS;
230 }
231
232 else {
233 if(!m_outFile.value().empty()) {
234 fout = new std::ofstream(m_outFile.value().c_str());
235 if((!fout) || (fout && !(fout->good()))) {
236 ATH_MSG_WARNING("Could not open output file: " << m_outFile.value());
237 fout=nullptr;
238 }
239 if(fout) *fout<<m_folder.value()<<std::endl;
240 }
241 for (const LArHVPathologiesDb::LArHVElectPathologyDb& electPath : *pathologyContainer) {
242 if(m_mode==0) {
243 ATH_MSG_INFO("Got pathology for cell ID: " << electPath.cellID
244 << "(" << electPath.electInd
245 << "," << electPath.pathologyType << ") ");
246 if(fout) *fout<<electPath.cellID<<"\t"<<electPath.electInd<<"\t"<<electPath.pathologyType<<std::endl;
247 } else {
248 ATH_MSG_INFO("Got pathology for cell ID: " << electPath.cellID);
249 HWIdentifier hwid = cabling->createSignalChannelID(Identifier32(electPath.cellID));
250 int HVLine=getHVline(**hvIdMapping,Identifier(electPath.cellID),electPath.electInd,calodetdescrmgr);
251 if(HVLine<0) {
252 ATH_MSG_ERROR("No HVline for cell "<<electPath.cellID);
253 } else {
254 int hvmodule=HVLine/1000;
255 int hvline=HVLine%1000;
256 if(m_mode==1) {
257 ATH_MSG_INFO(m_laronline_id->barrel_ec(hwid) << " " << m_laronline_id->pos_neg(hwid) << " " << m_laronline_id->feedthrough(hwid) << " " << m_laronline_id->slot(hwid) << " " << m_laronline_id->channel(hwid) << " " << hvmodule << " " << hvline << " " << electPath.pathologyType);
258 if(fout) *fout << m_laronline_id->barrel_ec(hwid) << " " << m_laronline_id->pos_neg(hwid) << " " << m_laronline_id->feedthrough(hwid) << " " << m_laronline_id->slot(hwid) << " " << m_laronline_id->channel(hwid) << " " << hvmodule << " " << hvline << " " << electPath.pathologyType << std::endl;
259 } else if (m_mode==2){
260 ATH_MSG_INFO(m_laronline_id->barrel_ec(hwid) << " " << m_laronline_id->pos_neg(hwid) << " " << m_laronline_id->feedthrough(hwid) << " " << m_laronline_id->slot(hwid) << " " << m_laronline_id->channel(hwid) << " " << hvmodule << " " << hvline << " " << ((electPath.pathologyType&0xFF0)>>4));
261 if(fout) *fout << m_laronline_id->barrel_ec(hwid) << " " << m_laronline_id->pos_neg(hwid) << " " << m_laronline_id->feedthrough(hwid) << " " << m_laronline_id->slot(hwid) << " " << m_laronline_id->channel(hwid) << " " << hvmodule << " " << hvline << " " << ((electPath.pathologyType&0xFFF0)>>4) << std::endl;
262
263 }
264 }
265 }
266 }
267 }
268 if(fout) fout->close();
269 return StatusCode::SUCCESS;
270}
271
272std::vector<unsigned int>
274 const Identifier & id,
275 unsigned int module,
276 unsigned int line,
277 const CaloDetDescrManager* calodetdescrmgr) const
278{
279
280 std::vector<unsigned int> list;
281 int HVline = 1000*module + line;
282// EM calo
283 if (m_larem_id->is_lar_em(id)) {
284// LAr EMB
285 if (abs(m_larem_id->barrel_ec(id))==1 && m_larem_id->sampling(id) > 0) {
286 if (const EMBDetectorElement* embElement = dynamic_cast<const EMBDetectorElement*>(calodetdescrmgr->get_element(id))) {
287 const EMBCellConstLink cell = embElement->getEMBCell();
288 unsigned int nelec = cell->getNumElectrodes();
289 for (unsigned int i=0;i<nelec;i++) {
290 const EMBHVElectrode& electrode = cell->getElectrode(i);
291 for (unsigned int igap=0;igap<2;igap++) {
292 if (electrode.hvLineNo(igap, &hvIdMapping)==HVline) {
293 list.push_back(2*i+igap);
294 }
295 }
296 }
297 }
298 }
299// LAr EMEC
300 if (abs(m_larem_id->barrel_ec(id))>1 && m_larem_id->sampling(id) > 0) {
301 if (const EMECDetectorElement* emecElement = dynamic_cast<const EMECDetectorElement*>(calodetdescrmgr->get_element(id))) {
302 const EMECCellConstLink cell = emecElement->getEMECCell();
303 unsigned int nelec = cell->getNumElectrodes();
304 for (unsigned int i=0;i<nelec;i++) {
305 const EMECHVElectrode& electrode = cell->getElectrode(i);
306 for (unsigned int igap=0;igap<2;igap++) {
307 if (electrode.hvLineNo(igap, &hvIdMapping)==HVline) {
308 list.push_back(2*i+igap);
309 }
310 }
311 }
312 }
313 }
314// EMBPS
315 if (abs(m_larem_id->barrel_ec(id))==1 && m_larem_id->sampling(id)==0) {
316 if (const EMBDetectorElement* embElement = dynamic_cast<const EMBDetectorElement*>(calodetdescrmgr->get_element(id))) {
317 const EMBCellConstLink cell = embElement->getEMBCell();
318 const EMBPresamplerHVModule& hvmodule = cell->getPresamplerHVModule ();
319 for (unsigned int igap=0;igap<2;igap++) {
320 if (hvmodule.hvLineNo(igap, &hvIdMapping)==HVline) {
321 list.push_back(igap);
322 }
323 }
324 }
325 }
326// EMECPS
327 if (abs(m_larem_id->barrel_ec(id))>1 && m_larem_id->sampling(id)==0) {
328 if (const EMECDetectorElement* emecElement = dynamic_cast<const EMECDetectorElement*>(calodetdescrmgr->get_element(id))) {
329 const EMECCellConstLink cell = emecElement->getEMECCell();
330 const EMECPresamplerHVModule& hvmodule = cell->getPresamplerHVModule ();
331 for (unsigned int igap=0;igap<2;igap++) {
332 if (hvmodule.hvLineNo(igap, &hvIdMapping)==HVline) {
333 list.push_back(igap);
334 }
335 }
336 }
337 }
338 }
339//HEC
340 if (m_larhec_id->is_lar_hec(id)) {
341 if (const HECDetectorElement* hecElement = dynamic_cast<const HECDetectorElement*>(calodetdescrmgr->get_element(id))) {
342 const HECCellConstLink cell = hecElement->getHECCell();
343 unsigned int nsubgaps = cell->getNumSubgaps();
344 for (unsigned int i=0;i<nsubgaps;i++) {
345 const HECHVSubgap& subgap = cell->getSubgap(i);
346 if (subgap.hvLineNo(&hvIdMapping)==HVline) {
347 list.push_back(i);
348 }
349 }
350 }
351 }
352//FCAL
353 if (m_larfcal_id->is_lar_fcal(id)) {
354 if (const FCALDetectorElement* fcalElement = dynamic_cast<const FCALDetectorElement*>(calodetdescrmgr->get_element(id))) {
355 const FCALTile* tile = fcalElement->getFCALTile();
356 unsigned int nlines = FCALTile::getNumHVLines();
357 for (unsigned int i=0;i<nlines;i++) {
358 const FCALHVLine* line2 = tile->getHVLine(i);
359 if(line2) {
360 if (line2->hvLineNo(&hvIdMapping)==HVline) {
361 list.push_back(i);
362 }
363 }
364 }
365 }
366 }
367
368 return list;
369
370}
371
373 const Identifier & id,
374 short unsigned int ElectInd,
375 const CaloDetDescrManager* calodetdescrmgr) const
376{
377
378 unsigned int igap, ielec;
379// EM calo
380 if (m_larem_id->is_lar_em(id)) {
381// LAr EMB
382 if (abs(m_larem_id->barrel_ec(id))==1 && m_larem_id->sampling(id) > 0) {
383 if (const EMBDetectorElement* embElement = dynamic_cast<const EMBDetectorElement*>(calodetdescrmgr->get_element(id))) {
384 const EMBCellConstLink cell = embElement->getEMBCell();
385 unsigned int nelec = cell->getNumElectrodes();
386 igap = ElectInd % 2;
387 ielec = std::div(ElectInd - igap, 2).quot;
388 if (ielec > nelec) {
389 ATH_MSG_ERROR("Wrong electrode number " << ielec << " for cell "<< id.get_identifier32().get_compact());
390 return -1;
391 } else {
392 return cell->getElectrode(ielec).hvLineNo(igap, &hvIdMapping);
393 }
394 }
395 }
396// LAr EMEC
397 if (abs(m_larem_id->barrel_ec(id))>1 && m_larem_id->sampling(id) > 0) {
398 if (const EMECDetectorElement* emecElement = dynamic_cast<const EMECDetectorElement*>(calodetdescrmgr->get_element(id))) {
399 const EMECCellConstLink cell = emecElement->getEMECCell();
400 unsigned int nelec = cell->getNumElectrodes();
401 igap = ElectInd % 2;
402 ielec = std::div(ElectInd - igap, 2).quot;
403 if (ielec > nelec) {
404 ATH_MSG_ERROR("Wrong electrode number " << ielec << " for cell "<< id.get_identifier32().get_compact());
405 return -1;
406 } else {
407 return cell->getElectrode(ielec).hvLineNo(igap, &hvIdMapping);
408 }
409 }
410 }
411// EMBPS
412 if (abs(m_larem_id->barrel_ec(id))==1 && m_larem_id->sampling(id)==0) {
413 if (const EMBDetectorElement* embElement = dynamic_cast<const EMBDetectorElement*>(calodetdescrmgr->get_element(id))) {
414 const EMBCellConstLink cell = embElement->getEMBCell();
415 const EMBPresamplerHVModule& hvmodule = cell->getPresamplerHVModule ();
416 if(ElectInd >= 2) {
417 ATH_MSG_ERROR("Wrong igap "<<ElectInd<<" for EMBPS cell "<<id.get_identifier32().get_compact());
418 return -1;
419 } else {
420 return hvmodule.hvLineNo(ElectInd, &hvIdMapping);
421 }
422 }
423 }
424// EMECPS
425 if (abs(m_larem_id->barrel_ec(id))>1 && m_larem_id->sampling(id)==0) {
426 if (const EMECDetectorElement* emecElement = dynamic_cast<const EMECDetectorElement*>(calodetdescrmgr->get_element(id))) {
427 const EMECCellConstLink cell = emecElement->getEMECCell();
428 const EMECPresamplerHVModule& hvmodule = cell->getPresamplerHVModule ();
429 if(ElectInd >= 2) {
430 ATH_MSG_ERROR("Wrong igap "<<ElectInd<<" for EMECPS cell "<<id.get_identifier32().get_compact());
431 return -1;
432 } else {
433 return hvmodule.hvLineNo(ElectInd, &hvIdMapping);
434 }
435 }
436 }
437 }
438//HEC
439 if (m_larhec_id->is_lar_hec(id)) {
440 if (const HECDetectorElement* hecElement = dynamic_cast<const HECDetectorElement*>(calodetdescrmgr->get_element(id))) {
441 const HECCellConstLink cell = hecElement->getHECCell();
442 unsigned int nsubgaps = cell->getNumSubgaps();
443 if( ElectInd >= nsubgaps) {
444 ATH_MSG_ERROR("Wrong igap "<<ElectInd<<" for HEC cell "<<id.get_identifier32().get_compact());
445 return -1;
446 } else {
447 return cell->getSubgap(ElectInd).hvLineNo(&hvIdMapping);
448 }
449 }
450 }
451//FCAL
452 if (m_larfcal_id->is_lar_fcal(id)) {
453 if (const FCALDetectorElement* fcalElement = dynamic_cast<const FCALDetectorElement*>(calodetdescrmgr->get_element(id))) {
454 const FCALTile* tile = fcalElement->getFCALTile();
455 unsigned int nlines = FCALTile::getNumHVLines();
456 if( ElectInd >= nlines) {
457 ATH_MSG_ERROR("Wrong line "<<ElectInd<<" for FCAL cell "<<id.get_identifier32().get_compact());
458 return -1;
459 } else {
460 const FCALHVLine* line2 = tile->getHVLine(ElectInd);
461 if(line2) {
462 return line2->hvLineNo(&hvIdMapping);
463 } else {
464 ATH_MSG_ERROR("Do not have HVLine for "<<ElectInd<<" for FCAL cell "<<id.get_identifier32().get_compact());
465 return -1;
466 }
467 }
468 }
469 }
470
471 // should not get up to this point....
472 return -1;
473
474}
475
476std::unique_ptr<AthenaAttributeList> LArHVPathologyDbAlg::hvPathology2AttrList(const LArHVPathologiesDb& pathologyContainer) const {
477
478 coral::AttributeListSpecification* spec = new coral::AttributeListSpecification();
479 spec->extend("blobVersion",
480 "unsigned int"); // Should allow schema evolution if needed
481 spec->extend("Constants", "blob"); // Holds the container
482
483 std::unique_ptr<AthenaAttributeList> attrList = std::make_unique<AthenaAttributeList>(*spec);
484
485 (*attrList)["blobVersion"].data<unsigned int>() = (unsigned int)0;
486 coral::Blob& blob = (*attrList)["Constants"].data<coral::Blob>();
487
488 TClass* klass = TClass::GetClass("LArHVPathologiesDb");
489 if (klass == nullptr) {
490 ATH_MSG_ERROR("Can't find TClass LArHVPathologiesDb");
491 return nullptr;
492 } else
493 ATH_MSG_DEBUG("Got TClass LArHVPathologiesDb");
494
495 TBufferFile buf(TBuffer::kWrite);
496
497 if (buf.WriteObjectAny(&pathologyContainer, klass) != 1) {
498 ATH_MSG_ERROR("Failed to stream LArHVPathologiesDb");
499 return nullptr;
500 }
501
502 blob.resize(buf.Length());
503 void* adr = blob.startingAddress();
504 memcpy(adr, buf.Buffer(), buf.Length());
505 return attrList;
506}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
Calo Subsystem specific Detector Elements + Dummy element for testing.
This is an interface to a tool used to register conditions objects in the Interval of Validity (IOV) ...
static Double_t sc
const ServiceHandle< StoreGateSvc > & detStore() const
const CaloDetDescrElement * get_element(const Identifier &cellId) const
get element by its identifier
This class provides the client interface for accessing the detector description information common to...
LAr EMB Detector Element.
int hvLineNo(int iGap, const LArHVIdMapping *hvIdMapping) const
Describes one HV Module within the EMB Presampler.
int hvLineNo(int iGap, const LArHVIdMapping *hvIdMapping) const
LAr EMEC Detector Element.
int hvLineNo(int iGap, const LArHVIdMapping *hvIdMapping) const
Describes one HV Module within the EMEc Presampler.
int hvLineNo(int iGap, const LArHVIdMapping *hvIdMapping) const
LAr FCAL Detector Element.
A tile of the forward calorimeter readout geometry.
Definition FCALTile.h:27
static unsigned int getNumHVLines()
Get num hvlines.
Definition FCALTile.cxx:81
LAr HEC Detector Element.
int hvLineNo(const LArHVIdMapping *hvIdMapping) const
std::vector< LArHVElectPathologyDb > m_v
SG::ReadCondHandleKey< LArHVIdMapping > m_hvCablingKey
SG::ReadCondHandleKey< CaloDetDescrManager > m_caloMgrKey
const CaloIdManager * m_caloIdMgr
std::vector< unsigned int > getElectInd(const LArHVIdMapping &hvIdMapping, const Identifier &id, unsigned int module, unsigned int line, const CaloDetDescrManager *calodetdescrmgr) const
virtual StatusCode initialize() override
const LArHEC_ID * m_larhec_id
SG::ReadCondHandleKey< LArHVPathology > m_hvPathologyKey
std::unique_ptr< AthenaAttributeList > hvPathology2AttrList(const LArHVPathologiesDb &pathologyContainer) const
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKey
StatusCode printCondObjects(const EventContext &ctx, const CaloDetDescrManager *calodetdescrmgr, const std::vector< LArHVPathologiesDb::LArHVElectPathologyDb > *path=nullptr) const
const LArFCAL_ID * m_larfcal_id
std::optional< LArHVPathologiesDb > createCondObjects(const EventContext &ctx, const CaloDetDescrManager *calodetdescrmgr) const
BooleanProperty m_writeCondObjs
virtual StatusCode execute(const EventContext &ctx) override
Execute method.
int getHVline(const LArHVIdMapping &hvIdMapping, const Identifier &id, short unsigned int ElectInd, const CaloDetDescrManager *calodetdescrmgr) const
const LArEM_ID * m_larem_id
const LArOnlineID * m_laronline_id
static TFile * fout
Definition listroot.cxx:40