ATLAS Offline Software
IOVDbTestAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "IOVDbTestAlg.h"
6 
7 // IOVDbTest includes
12 
13 // Athena includes
15 
16 // Gaudi includes
17 #include "GaudiKernel/IIncidentSvc.h"
18 #include "GaudiKernel/Incident.h"
19 #include "GaudiKernel/GaudiException.h"
20 #include "GaudiKernel/IToolSvc.h"
21 
22 // AttributeList
23 #include "CoralBase/Attribute.h"
24 #include "CoralBase/Blob.h"
25 #include "CoralBase/AttributeListSpecification.h"
28 
29 // for online testing
30 #include <sys/ipc.h>
31 #include <sys/msg.h>
32 
33 
35 
36 IOVDbTestAlg::IOVDbTestAlg(const std::string& name, ISvcLocator* pSvcLocator) :
37  AthReentrantAlgorithm(name, pSvcLocator),
38  m_writeCondObjs(false),
39  m_regIOV(false),
40  m_readWriteCool(false),
41  m_twoStepWriteReg(false),
42  m_createExtraChans(false),
43  m_readInInit(false),
44  m_writeOnlyCool(false),
45  m_fancylist(false),
46  m_printLB(false),
47  m_writeNewTag(false),
48  m_readNewTag(false),
49  m_noStream(false),
50  m_regTime(0),
51  m_streamName("CondStream1"),
52  m_tagID(""),
53  m_regSvc("IOVRegistrationSvc", name),
54  m_streamer ("CondStream1")
55 
56 {
57  declareProperty("WriteCondObjs", m_writeCondObjs);
58  declareProperty("RegisterIOV", m_regIOV);
59  declareProperty("ReadWriteCool", m_readWriteCool);
60  declareProperty("WriteOnlyCool", m_writeOnlyCool);
61  declareProperty("TwoStepWriteReg", m_twoStepWriteReg);
62  declareProperty("StreamName", m_streamName);
63  declareProperty("CreateExtraChanns", m_createExtraChans);
64  declareProperty("NameChanns", m_nameChans);
65  declareProperty("ReadInInit", m_readInInit);
66  declareProperty("FancyList", m_fancylist);
67  declareProperty("PrintLB", m_printLB);
68  declareProperty("WriteNewTag", m_writeNewTag);
69  declareProperty("ReadNewTag", m_readNewTag);
70  declareProperty("RegTime", m_regTime); // Register time in sec
71  declareProperty("TagID", m_tagID);
72  declareProperty("run", m_run);
73  declareProperty("online", m_online);
74  declareProperty("NoStream", m_noStream);
75 }
76 
77 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
78 
80 { }
81 
82 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
84  struct mymsgbuf {
85  long mtype;
86  char mtext[80];
87  };
88 
89  key_t key;
90  int msgqueue_id;
91  struct mymsgbuf qbuf;
92 
93  /* Create unique key via call to ftok() */
94  key = ftok(".", 'm');
95 
96  /* Open the queue */
97  while((msgqueue_id = msgget(key, 0660)) == -1) {
98  printf("waiting for message here.\n");
99  sleep(3);
100  }
101  printf("Recieving a message ...\n");
102 
103  qbuf.mtype = 123;
104  msgrcv(msgqueue_id, (struct msgbuf *)(&qbuf), 80, 123, 0);
105 
106  printf("Type: %ld Text: %s\n", qbuf.mtype, qbuf.mtext);
107 
108  msgctl(msgqueue_id, IPC_RMID, 0); // clearing the message
109 
110 }
111 
113  // print out the keys we were given (for info)
114  msg() << MSG::INFO << "IOVDbTestAlg::testCallBack callback invoked for keys: i = " << i << " ";
115  for (std::list<std::string>::const_iterator itr=keys.begin(); itr!=keys.end(); ++itr) {
116  msg() << *itr << " ";
117  }
118  msg() << endmsg;
119  return StatusCode::SUCCESS;
120 }
121 
122 
123 // Not thread-safe due to binding DataHandle.
125  ATH_MSG_DEBUG( "in initialize()" );
126 
127  // Get Output Stream tool for writing
128  if (m_writeCondObjs) {
129  m_streamer = "AthenaOutputStreamTool/" + m_streamName;
130  ATH_CHECK( m_streamer.retrieve() );
131  }
132 
133  // Get the IOVRegistrationSvc when needed
134  if (m_regIOV) {
135  ATH_CHECK( m_regSvc.retrieve() );
136  ATH_MSG_DEBUG( "Found IOVRegistrationSvc " );
137  ATH_MSG_INFO( "Tag to be used: " << m_tagID );
138  }
139 
140  if (m_readInInit) {
141  ATH_CHECK( readWithBeginRun() );
142  ATH_MSG_DEBUG( "Read with BeginRun " );
143  }
144 
145  // register callbacks for test of online change of constants
146  if (!m_online) return StatusCode::SUCCESS;
147 
148  const DataHandle<IOVDbTestMDTEleMap> mdtelemap;
149  ATH_CHECK( detStore()->regFcn(&IOVDbTestAlg::testCallBack, this, mdtelemap, "/IOVDbTest/IOVDbTestMDTEleMap") );
150  ATH_MSG_INFO( "Registered callback for IOVDbTestAlg::testCallBack" );
151 
152 
153  return StatusCode::SUCCESS;
154 }
155 
156 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
157 
159  ATH_MSG_INFO( "in readWithBeginRun()" );
160 
161  // As a result of the restructuring the EventIncident class (dropping the reference to EventInfo)
162  // the old mechanism of overriding run&event&time is no longer working.
163  // If we need this functionality, then we need to find a new way of implementing it.
164  // For the time being this function simply fires a BeginRun incident using the EventContext, without overriding anything
165 
166  ServiceHandle<IIncidentSvc> incSvc("IncidentSvc", name() );
167  ATH_CHECK( incSvc.retrieve() );
168 
169  incSvc->fireIncident( Incident(name(), IncidentType::BeginRun, Gaudi::Hive::currentContext()) );
170 
171  return StatusCode::SUCCESS;
172 }
173 
174 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
175 
176 StatusCode IOVDbTestAlg::createCondObjects(const EventContext& ctx) const
177 {
178  ATH_MSG_INFO ("in createCondObjects()");
179 
180  // Create IOVDbTestMDTEleMap
181  IOVDbTestMDTEleMap* elemMap = new IOVDbTestMDTEleMap;
182  unsigned long long timestamp = ctx.eventID().time_stamp();
183  if (timestamp)
184  elemMap->set(ctx.eventID().time_stamp(),"mdt element map");
185  else
186  elemMap->set(ctx.eventID().run_number(), ctx.eventID().event_number(), "mdt element map");
187 
188 
189  // Must provide a key which is used as the name to create the folder
190  ATH_CHECK( detStore()->record(elemMap, "/IOVDbTest/IOVDbTestMDTEleMap") );
191 
192  // Create IOVDbTestMDTEleMapColl
194 
195  // Add in 10 maps, set indices
196  unsigned int offset = 0;
197  if (m_createExtraChans) offset = 100;
198  for (unsigned int i = 0; i < 10; ++i) {
199  IOVDbTestMDTEleMap* elemMap = new IOVDbTestMDTEleMap;
200 
201  unsigned long long timestamp = ctx.eventID().time_stamp();
202  if (timestamp)
203  elemMap->set(ctx.eventID().time_stamp() + 10*i, "mdt element map");
204  else
205  elemMap->set(ctx.eventID().run_number() + i, ctx.eventID().event_number(), "mdt element map");
206 
207  elemMapColl->push_back(elemMap);
208  elemMapColl->add(2*i+1+i + offset);
209  }
210 
211  // Must provide a key which is used as the name to create the folder
212  ATH_CHECK( detStore()->record(elemMapColl, "/IOVDbTest/IOVDbTestMDTEleMapColl") );
213 
214  // Create IOVDbTestAmdbCorrection
216  HepGeom::Point3D<double> x(1.0, 2.0, 3.0);
217  HepGeom::Point3D<double> y(4.0, 5.0, 6.0);
218  if (m_writeNewTag) {
219  // writing with new tag, set to different values
220  x = HepGeom::Point3D<double>(11.0, 22.0, 33.0);
221  y = HepGeom::Point3D<double>(44.0, 55.0, 66.0);
222  }
223  amdbCorr->set(x, y, "amdb correction");
224 
225  ATH_CHECK( detStore()->record(amdbCorr, "/IOVDbTest/IOVDbTestAMDBCorrection") );
226 
227  // Create an attribute list
228 
229  // Create spec
230  coral::AttributeListSpecification* attrSpec = new coral::AttributeListSpecification();
231  attrSpec->extend("xPosition", "float");
232  attrSpec->extend("id", "int");
233  attrSpec->extend("name", "string");
234 
235  if (!attrSpec->size()) {
236  ATH_MSG_ERROR (" Attribute list specification is empty");
237  return(StatusCode::FAILURE);
238  }
239 
240  // FIX this
241  //std::ostringstream attrStr;
242  //attrSpec->print( attrStr );
243  //log << MSG::DEBUG << "Attribute spec " << attrStr.str() << endmsg;
244 
245  AthenaAttributeList* attrList = new AthenaAttributeList(*attrSpec);
246  (*attrList)["xPosition"].setValue((float)m_run);
247  (*attrList)["id"].setValue((int)7);
248  (*attrList)["name"].setValue(std::string("TestAttrList"));
249  if (m_writeNewTag) {
250  // writing with new tag, set to different values
251  (*attrList)["xPosition"].setValue((float)125.0);
252  (*attrList)["id"].setValue((int)27);
253  (*attrList)["name"].setValue(std::string("TestAttrListNEWTAG"));
254  }
255  std::ostringstream attrStr1;
256  // FIXME
257  attrList->toOutputStream( attrStr1 );
258  // attrList->print(std::cout);
259  ATH_MSG_DEBUG( "Attribute list " << attrStr1.str() );
260 
261  ATH_CHECK( detStore()->record(attrList, "/IOVDbTest/IOVDbTestAttrList") );
262 
263  // optionally create a second 'fancy' attributelist testing more datatypes
264  // including bool, CLOB and BLOB types
265  if (m_fancylist) {
266  coral::AttributeListSpecification* fanSpec = new coral::AttributeListSpecification();
267  fanSpec->extend("FanBool","bool");
268  fanSpec->extend("FanInt","int");
269  fanSpec->extend("FanUInt","unsigned int");
270  fanSpec->extend("FanI64","long long");
271  fanSpec->extend("FanU64","unsigned long long");
272  fanSpec->extend("FanFloat","float");
273  fanSpec->extend("FanDouble","double");
274  fanSpec->extend("FanSmallString","string");
275  fanSpec->extend("FanBigString","string");
276  fanSpec->extend("FanBlob","blob");
277  AthenaAttributeList* fanList=new AthenaAttributeList(*fanSpec);
278  // set values, note new style access methods
279  (*fanList)["FanBool"].data<bool>()=true;
280  (*fanList)["FanInt"].data<int>()=-12345;
281  (*fanList)["FanUInt"].data<unsigned int>()=12345;
282  (*fanList)["FanI64"].data<long long>()=-98765432100LL;
283  (*fanList)["FanU64"].data<unsigned long long>()=98765432100LL;
284  (*fanList)["FanFloat"].data<float>()=1.2345;
285  (*fanList)["FanDouble"].data<double>()=1.23456789;
286  (*fanList)["FanSmallString"].data<std::string>()="small string";
287  (*fanList)["FanBigString"].data<std::string>()="potentially long string";
288  // special construction to set blob type
289  coral::Blob& blob=(*fanList)["FanBlob"].data<coral::Blob>();
290  unsigned int blobsize=2000;
291  blob.resize(blobsize);
292  unsigned char* p=static_cast<unsigned char*>(blob.startingAddress());
293  for (unsigned int i=0;i<blobsize;++i,++p) *p=(i % 256);
294  // print out attributelist
295  std::ostringstream fanstr;
296  fanList->toOutputStream(fanstr);
297  ATH_MSG_DEBUG( "Fancy Attribute list " << fanstr.str() );
298  ATH_CHECK( detStore()->record(fanList, "/IOVDbTest/IOVDbTestFancyList") );
299  }
300 
301  // Create an attribute list collection
302 
303  // Use existing spec
304  CondAttrListCollection* attrListColl = new CondAttrListCollection(true);
305 
306  // Add three attr lists
307  coral::AttributeList attrList0(*attrSpec);
308  attrList0["xPosition"].setValue((float)35.0);
309  attrList0["id"].setValue((int)17);
310  attrList0["name"].setValue(std::string("TestAttrList"));
312 
313  std::ostringstream attrStr2;
314  attrList0.toOutputStream( attrStr2 );
315  ATH_MSG_DEBUG( "ChanNum " << chanNum << " Attribute list " << attrStr2.str() );
316  attrListColl->add(chanNum, attrList0);
317 
318  coral::AttributeList attrList1(*attrSpec);
319  attrList1["xPosition"].setValue((float)45.0);
320  attrList1["id"].setValue((int)27);
321  attrList1["name"].setValue(std::string("TestAttrList"));
322  chanNum = 26;
323 
324  std::ostringstream attrStr3;
325  attrList1.toOutputStream( attrStr3 );
326  ATH_MSG_DEBUG( "ChanNum " << chanNum << " Attribute list " << attrStr3.str() );
327  attrListColl->add(chanNum, attrList1);
328 
329  coral::AttributeList attrList2(*attrSpec);
330  attrList2["xPosition"].setValue((float)55.0);
331  attrList2["id"].setValue((int)37);
332  attrList2["name"].setValue(std::string("TestAttrList"));
333  chanNum = 36;
334 
335  std::ostringstream attrStr4;
336  attrList2.toOutputStream( attrStr4 );
337  ATH_MSG_DEBUG( "ChanNum " << chanNum << " Attribute list " << attrStr4.str() );
338  attrListColl->add(chanNum, attrList2);
339 
340  if(m_createExtraChans) {
341  // Two more channels
342  coral::AttributeList attrList3(*attrSpec);
343  attrList3["xPosition"].setValue((float)65.0);
344  attrList3["id"].setValue((int)47);
345  attrList3["name"].setValue(std::string("TestAttrList"));
346  chanNum = 46;
347 
348  std::ostringstream attrStr5;
349  attrList3.toOutputStream( attrStr5 );
350  ATH_MSG_DEBUG( "ChanNum " << chanNum << " Attribute list " << attrStr5.str() );
351  attrListColl->add(chanNum, attrList3);
352 
353  // Add in new IOV with min run == 4
355  attrListColl->add(chanNum, range);
356  ATH_MSG_DEBUG( "Add min : since " << range.start().run() << " " << range.start().event()
357  << " till " << range.stop().run() << " " << range.stop().event() );
358 
359  coral::AttributeList attrList4(*attrSpec);
360  attrList4["xPosition"].setValue((float)75.0);
361  attrList4["id"].setValue((int)57);
362  attrList4["name"].setValue(std::string("TestAttrList"));
363  chanNum = 56;
364 
365  std::ostringstream attrStr6;
366  attrList4.toOutputStream( attrStr6 );
367  ATH_MSG_DEBUG( "ChanNum " << chanNum << " Attribute list " << attrStr6.str() );
368  attrListColl->add(chanNum, attrList4);
369 
370  // Add in new IOV with min run == 5
372  attrListColl->add(chanNum, range1);
373  ATH_MSG_DEBUG( "Add min : since " << range1.start().run() << " " << range1.start().event() << " till " << range1.stop().run() << " " << range1.stop().event() );
374  }
375  // add names to the channels if needed
376  if (m_nameChans) {
377  ATH_MSG_DEBUG( "Name channels in CondAttrListCollection" );
378  for (CondAttrListCollection::const_iterator citr=attrListColl->begin();
379  citr!=attrListColl->end();++citr) {
381  std::ostringstream name;
382  name << "Name_" << chan;
383  attrListColl->add(chan,name.str());
384  }
385  }
386 
387  ATH_CHECK( detStore()->record(attrListColl, "/IOVDbTest/IOVDbTestAttrListColl") );
388 
389  return StatusCode::SUCCESS;
390 }
391 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
392 
393 
395  ATH_MSG_INFO( "in printCondObjects()" );
396 
397  // IOVDbTestMDTEleMap
398  const IOVDbTestMDTEleMap* elemMap = nullptr;
399  ATH_CHECK( detStore()->retrieve(elemMap, "/IOVDbTest/IOVDbTestMDTEleMap") );
400  ATH_MSG_INFO( "Retrieved IOVDbTestMDTEleMap " );
401 
402  ATH_MSG_INFO( "Found " << elemMap->name()
403  << " run " << elemMap->runNumber()
404  << " event " << elemMap->eventNumber()
405  << " time " << elemMap->timeStamp() );
406 
407 
408 
409  // IOVDbTestAmdbCorrection
410  const IOVDbTestAmdbCorrection* amdbCorr = nullptr;
411  ATH_CHECK( detStore()->retrieve(amdbCorr, "/IOVDbTest/IOVDbTestAMDBCorrection") );
412  ATH_MSG_INFO ("Retrieved /IOVDbTest/IOVDbTestAMDBCorrection" );
413 
414  HepGeom::Point3D<double> trans = amdbCorr->getTranslation();
415  HepGeom::Point3D<double> rot = amdbCorr->getRotation();
416 
417  ATH_MSG_INFO( "Found " << amdbCorr->name()
418  << " trans " << trans.x() << " " << trans.y() << " " << trans.z()
419  << " rot " << rot.x() << " " << rot.y() << " " << rot.z() );
420 
421 
422  if (m_readNewTag) {
423  // IOVDbTestAmdbCorrection
424  const IOVDbTestAmdbCorrection* amdbCorr = nullptr;
425  ATH_CHECK( detStore()->retrieve(amdbCorr, "/IOVDbTest/IOVDbTestAMDBCorrection-NEWTAG") );
426  ATH_MSG_INFO( "Retrieved /IOVDbTest/IOVDbTestAMDBCorrection-NEWTAG" );
427 
428  HepGeom::Point3D<double> trans = amdbCorr->getTranslation();
429  HepGeom::Point3D<double> rot = amdbCorr->getRotation();
430 
431  ATH_MSG_INFO( "Found " << amdbCorr->name()
432  << " trans " << trans.x() << " " << trans.y() << " " << trans.z()
433  << " rot " << rot.x() << " " << rot.y() << " " << rot.z() );
434  }
435 
436 
437  const AthenaAttributeList* attrList = nullptr;
438  const CondAttrListCollection* attrListColl = nullptr;
439 
441  // AttrList
442  ATH_CHECK( detStore()->retrieve(attrList, "/IOVDbTest/IOVDbTestAttrList") );
443  ATH_MSG_DEBUG( "Retrieved IOVDbTestAttrList" );
444 
445  std::ostringstream attrStr1;
446  attrList->print( attrStr1 );
447  ATH_MSG_DEBUG( "Attribute list " << attrStr1.str() );
448 
449  if (m_readNewTag) {
450  // AttrList
451  ATH_CHECK( detStore()->retrieve(attrList, "/IOVDbTest/IOVDbTestAttrList-NEWTAG") );
452  ATH_MSG_DEBUG( "Retrieved IOVDbTestAttrList-NEWTAG" );
453 
454  std::ostringstream attrStr1;
455  attrList->print( attrStr1 );
456  ATH_MSG_DEBUG( "Attribute list NEWTAG: " << attrStr1.str() );
457  }
458 
459  // fancy attributelist
460  if (m_fancylist) {
461  ATH_MSG_DEBUG( detStore()->retrieve(attrList, "/IOVDbTest/IOVDbTestFancyList") );
462  ATH_MSG_DEBUG( "Retrieved IOVDbTestFancyList" );
463  std::ostringstream fanstr;
464  attrList->print( fanstr );
465  ATH_MSG_DEBUG( "Fancy Attribute list " << fanstr.str() );
466  // for the blob type, check the actual data is correct
467  const coral::Blob& blob=(*attrList)["FanBlob"].data<coral::Blob>();
468  const unsigned char* p=static_cast<const unsigned char*>
469  (blob.startingAddress());
470  int nerr=0;
471  for (int i=0;i<blob.size();++i,++p) if (*p!=(i % 256)) ++nerr;
472  if (nerr>0) ATH_MSG_ERROR( "Blob has " << nerr <<
473  " data mismatches!" );
474  }
475 
476  // AttrListColl
477  ATH_CHECK( detStore()->retrieve(attrListColl, "/IOVDbTest/IOVDbTestAttrListColl") );
478  ATH_MSG_DEBUG( "Retrieved IOVDbTestAttrListColl" );
479 
480 
481  std::ostringstream attrStr2;
482 
483  // Loop over collection
485  CondAttrListCollection::const_iterator last = attrListColl->end();
486  for (; first != last; ++first) {
487 
488  if (msgLvl (MSG::DEBUG)) {
489  std::ostringstream attrStr1;
490  (*first).second.toOutputStream( attrStr1 );
491  msg() << MSG::DEBUG << "ChanNum " << (*first).first;
492  // print out the name if present
493  if (attrListColl->name_size()>0) {
495  nitr=attrListColl->chanNamePair((*first).first);
496  if (nitr!=attrListColl->name_end())
497  msg() << MSG::DEBUG << " name " << nitr->second;
498  }
499  msg() << MSG::DEBUG <<
500  " Attribute list " << attrStr1.str() << endmsg;
501  }
502 
503  // Print out range if it exits
504  CondAttrListCollection::ChanNum chanNum = (*first).first;
506  if (iovIt != attrListColl->iov_end()) {
507  const IOVRange& range = (*iovIt).second;
508  if(range.start().isTimestamp()) {
509  ATH_MSG_DEBUG( "Range timestamp : since " << range.start().timestamp()
510  << " till " << range.stop().timestamp() );
511  }
512  else {
513  ATH_MSG_DEBUG( "Range R/E : since " << range.start().run() << " "
514  << range.start().event()
515  << " till " << range.stop().run() << " "
516  << range.stop().event() );
517  }
518  }
519  else {
520  ATH_MSG_DEBUG( "No range found " );
521  }
522  }
523 
524  // Simulation and digitization parameters:
525 
526  if ( detStore()->retrieve(attrList, "/Simulation/Parameters").isFailure() ) {
527  // May not have been added - just a warning
528  ATH_MSG_WARNING( "Could not retrieve Simulation parameters" );
529  }
530  else {
531  ATH_MSG_DEBUG( "Retrieved Simulation parameters" );
532  std::ostringstream attrStr;
533  attrList->print( attrStr );
534  ATH_MSG_DEBUG( "Attribute list " << attrStr.str() );
535  }
536 
537  if (detStore()->retrieve(attrList, "/Digitization/Parameters").isFailure()) {
538  // May not have been added - just a warning
539  ATH_MSG_WARNING( "Could not retrieve Digitization parameters" );
540  }
541  else {
542  ATH_MSG_DEBUG( "Retrieved Digitization parameters" );
543  std::ostringstream attrStr;
544  attrList->print( attrStr );
545  ATH_MSG_DEBUG( "Attribute list " << attrStr.str() );
546  }
547  }
548 
549 
550  // IOVDbTestMDTEleMapColl
551 
552 // if (m_readWriteCool) {
553 
554  const IOVDbTestMDTEleMapColl* elemMapColl = nullptr;
555  ATH_CHECK( detStore()->retrieve(elemMapColl, "/IOVDbTest/IOVDbTestMDTEleMapColl") );
556  ATH_MSG_INFO( "Retrieved IOVDbTestMDTEleMapColl " );
557 
558  // Make sure the channel vector is filled
559  if (elemMapColl->size() != elemMapColl->chan_size()) {
560  ATH_MSG_ERROR( "Must fill in channel numbers! Number of objects: " << elemMapColl->size()
561  << " Number of channels: " << elemMapColl->chan_size() );
562  return(StatusCode::FAILURE);
563  }
564  // Print out IOVs if they are there
565  bool hasIOVs = (elemMapColl->iov_size() == elemMapColl->size());
568  for (unsigned int i = 0; i < elemMapColl->size(); ++i, ++itChan) {
569  const IOVDbTestMDTEleMap* elemMap = (*elemMapColl)[i];
570  msg() << MSG::INFO << "Found " << elemMap->name()
571  << " run " << elemMap->runNumber()
572  << " event " << elemMap->eventNumber()
573  << " time " << elemMap->timeStamp()
574  << " channel " << (*itChan);
575  if(hasIOVs) {
576  msg() << MSG::INFO << " iov " << (*itIOV);
577  ++itIOV;
578  }
579  msg() << MSG::INFO << endmsg;
580  }
581 // }
582  return StatusCode::SUCCESS;
583 }
584 
585 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
586 
587 StatusCode IOVDbTestAlg::execute (const EventContext& ctx) const {
588 
589  // There are different scenario for conditions data:
590  //
591  // A) Calculating and writing conditions
592  //
593  // 1) Loop over events and accumulate "averages"
594  //
595  // 2) At the desired moment, e.g. after N events or at the end
596  // of the job, calculate the conditions data to be written
597  // out by creating the corresponding objects and store in the
598  // DetectorStore
599  //
600  // 3) Write out objects with the IAthenaOutputStreamTool - done
601  // in finalize.
602  //
603  // 4) Finally, one must "register" the objects written out in
604  // the IOV DB. This writes and IOV and a ref to each object,
605  // and is done in the finalize method.
606  //
607  // B) Reading back in conditions data to analyse it
608  //
609  // 1) Aside from specifying the correct jobOptions, this is
610  // simply done by doing a standard StoreGate retrieve from
611  // the DetectorStore.
612 
613  if (msgLvl (MSG::DEBUG)) {
614  msg() << MSG::DEBUG << "Event (run,ev,lb:time): [" << ctx.eventID().run_number() << "," << ctx.eventID().event_number();
615  if (m_printLB) msg() << "," << ctx.eventID().lumi_block();
616  msg() << ":" << ctx.eventID().time_stamp() << "]" << endmsg;
617  }
618 
620 
621  // We create the conditions objects only at run == 2, event == 5
622  if (2 != ctx.eventID().run_number() || 5 != ctx.eventID().event_number()) {
623  ATH_MSG_DEBUG( "Event NOT selected for creating conditions objects " );
624  return StatusCode::SUCCESS;
625  }
626 
627  ATH_MSG_DEBUG( "Creating condtions objects " );
629 
630  // Read objects from DetectorStore
631  if(!m_noStream){
633  }
634  }
635  else {
636 
637  ATH_MSG_DEBUG( "Calling printCondObjects" <<m_online<< "\t"<<ctx.eventID().run_number()<<"\t"<<ctx.eventID().event_number() );
638 
639  // Read objects from DetectorStore
640  if (m_online && 2 == ctx.eventID().run_number() && 9 == ctx.eventID().event_number())
641  waitForSecond();
643  }
644 
645  return StatusCode::SUCCESS;
646 }
647 
648 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
649 
651  ATH_MSG_INFO( "in finalize()" );
652 
653  if (m_writeCondObjs) {
654  // Stream out and register objects here
655  ATH_MSG_DEBUG( "Stream out objects directly " );
657  ATH_MSG_DEBUG( "Streamed out OK " );
658  }
659  if(m_regIOV) {
661  ATH_MSG_DEBUG( "Register OK " );
662  }
663 
664  return StatusCode::SUCCESS;
665 }
666 
667 
668 
669 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
670 
671 StatusCode
673  ATH_MSG_DEBUG( "entering streamOutCondObjects " );
674  ATH_CHECK( m_streamer->connectOutput() );
675 
676  int npairs = 3;
677  int index = 0;
678  IAthenaOutputStreamTool::TypeKeyPairs typeKeys(npairs);
679  if (!m_writeOnlyCool) {
680  IAthenaOutputStreamTool::TypeKeyPair mdtPair("IOVDbTestMDTEleMap", "");
681  typeKeys[index] = mdtPair;
682  ++index;
683  IAthenaOutputStreamTool::TypeKeyPair amdbCorr("IOVDbTestAmdbCorrection", "");
684  typeKeys[index] = amdbCorr;
685  ++index;
686  IAthenaOutputStreamTool::TypeKeyPair mdtCollPair("IOVDbTestMDTEleMapColl", "");
687  typeKeys[index] = mdtCollPair;
688  ++index;
689  }
690 
691  ATH_MSG_DEBUG( "Stream out for pairs:" );
692  for (unsigned int i = 0; i < typeKeys.size(); ++i) {
693  ATH_MSG_DEBUG( typeKeys[i].first << " " << typeKeys[i].second << " " );
694  }
695 
696  ATH_CHECK( m_streamer->streamObjects(typeKeys) );
697  ATH_CHECK( m_streamer->commitOutput() );
698 
699  return StatusCode::SUCCESS;
700 }
701 
702 
703 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
704 
705 StatusCode
707  ATH_MSG_DEBUG( "entering registerCondObject " );
708 
709  // Register the IOV DB with the conditions data written out
710  std::string tag = "no tag";
711  if (m_tagID!="") {
712  tag = "tag MDTEleMap_" + m_tagID;
713  ATH_CHECK( m_regSvc->registerIOV("IOVDbTestMDTEleMap", "MDTEleMap_"+m_tagID,m_run,IOVTime::MAXRUN,IOVTime::MINEVENT,IOVTime::MAXEVENT) );
714  } else {
715  ATH_CHECK( m_regSvc->registerIOV("IOVDbTestMDTEleMap", "") );
716  }
717  ATH_MSG_DEBUG( "registered IOVDbTestMDTEleMap with " << tag );
718 
719  // For IOVDbTestAmdbCorrection use time (in sec)
720  uint64_t start=static_cast<long long>(m_regTime)*1000000000LL;
722  tag = "no tag";
723  if (m_tagID!="") {
724  tag = "tag AmdbCorrection_" + m_tagID;
725  ATH_CHECK( m_regSvc->registerIOV("IOVDbTestAmdbCorrection", "AmdbCorrection_"+m_tagID, start, stop) );
726  } else {
727  ATH_CHECK( m_regSvc->registerIOV("IOVDbTestAmdbCorrection", "", start, stop) );
728  }
729  ATH_MSG_DEBUG( "registered IOVDbTestAmdbCorrection with " << tag );
730  if (m_readWriteCool) {
731 
732  // Can only write out AttrList's if this is NOT write and reg in two steps
733  if (!m_twoStepWriteReg) {
734 
735  // Using COOL, write out attrlist and collection of attrlists
736  tag = "no tag";
737  if (m_tagID!="") {
738  tag = "tag AttrList_" + m_tagID;
739  ATH_CHECK( m_regSvc->registerIOV("AthenaAttributeList","/IOVDbTest/IOVDbTestAttrList","AttrList_"+m_tagID,m_run,IOVTime::MAXRUN,IOVTime::MINEVENT,IOVTime::MAXEVENT) );
740  } else {
741  ATH_CHECK( m_regSvc->registerIOV("AthenaAttributeList","/IOVDbTest/IOVDbTestAttrList","") );
742  }
743  ATH_MSG_DEBUG( "registered AthenaAttributeList with " << tag );
744  if (m_fancylist) {
745  // register Fancy AttributeList
746  tag = "no tag";
747  if (m_tagID!="") {
748  tag = "tag FancyList_" + m_tagID;
749  ATH_CHECK( m_regSvc->registerIOV("AthenaAttributeList","/IOVDbTest/IOVDbTestFancyList","FancyList_"+m_tagID,m_run,IOVTime::MAXRUN,IOVTime::MINEVENT,IOVTime::MAXEVENT) );
750  } else {
751  ATH_CHECK( m_regSvc->registerIOV("AthenaAttributeList", "/IOVDbTest/IOVDbTestFancyList","") );
752  }
753  ATH_MSG_DEBUG ( "registered Fancy AthenaAttributeList with " << tag );
754  }
755  // attrlist collection
756  tag = "no tag";
757  if (m_tagID!="") {
758  tag = "tag AttrListColl_" + m_tagID;
759  ATH_CHECK( m_regSvc->registerIOV("CondAttrListCollection","AttrListColl_"+m_tagID,m_run,IOVTime::MAXRUN,IOVTime::MINEVENT,IOVTime::MAXEVENT) );
760  } else {
761  ATH_CHECK( m_regSvc->registerIOV("CondAttrListCollection", "") );
762  }
763  ATH_MSG_DEBUG( "registered CondAttrListCollection with " << tag );
764  }
765 
766  // mdtMapColl
767  tag = "no tag";
768  if (m_tagID!="") {
769  tag = "tag MDTEleMapColl_" + m_tagID;
770  ATH_CHECK( m_regSvc->registerIOV("IOVDbTestMDTEleMapColl","MDTEleMapColl_"+m_tagID,m_run,IOVTime::MAXRUN,IOVTime::MINEVENT,IOVTime::MAXEVENT) );
771  } else {
772  ATH_CHECK( m_regSvc->registerIOV("IOVDbTestMDTEleMapColl","") );
773  }
774  ATH_MSG_DEBUG( "registered IOVDbTestMDTEleMapColl with " << tag );
775  }
776 
777  return StatusCode::SUCCESS;
778 
779 }
780 
CondMultChanCollection::chan_const_iterator
ChanVec::const_iterator chan_const_iterator
Definition: CondMultChanCollection.h:58
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
IOVDbTestAmdbCorrection
Definition: IOVDbTestAmdbCorrection.h:20
IOVDbTestAlg::m_tagID
std::string m_tagID
Definition: IOVDbTestAlg.h:74
python.SystemOfUnits.second
int second
Definition: SystemOfUnits.py:120
CondAttrListCollection::end
const_iterator end() const
Definition: CondAttrListCollection.h:315
IOVDbTestAlg::m_writeNewTag
BooleanProperty m_writeNewTag
Definition: IOVDbTestAlg.h:67
IAthenaOutputStreamTool::TypeKeyPairs
std::vector< TypeKeyPair > TypeKeyPairs
Definition: IAthenaOutputStreamTool.h:100
IOVRange
Validity Range object. Holds two IOVTimes (start and stop)
Definition: IOVRange.h:30
IOVDbTestMDTEleMap::set
void set(int runNumber, int eventNumber, const std::string &name)
Definition: IOVDbTestMDTEleMap.cxx:32
IOVDbTestAlg::m_run
IntegerProperty m_run
Definition: IOVDbTestAlg.h:72
CondAttrListCollection::iov_end
iov_const_iterator iov_end() const
Definition: CondAttrListCollection.h:343
IOVDbTestMDTEleMap::runNumber
int runNumber() const
Definition: IOVDbTestMDTEleMap.cxx:46
IOVTime::MAXRUN
static constexpr uint32_t MAXRUN
Definition: IOVTime.h:48
CondAttrListCollection.h
This file defines the class for a collection of AttributeLists where each one is associated with a ch...
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
IOVDbTestAlg::m_readNewTag
BooleanProperty m_readNewTag
Definition: IOVDbTestAlg.h:68
IOVDbTestAlg::m_writeOnlyCool
BooleanProperty m_writeOnlyCool
Definition: IOVDbTestAlg.h:64
CondMultChanCollection::chan_begin
chan_const_iterator chan_begin() const
Access to Channel numbers via iterators.
Definition: CondMultChanCollection.h:128
AthenaAttributeList::print
void print(std::ostream &os) const
print to simulate function provided by old POOL AttributeList
Definition: AthenaAttributeList.cxx:16
ATLAS_NOT_THREAD_SAFE
StatusCode IOVDbTestAlg::initialize ATLAS_NOT_THREAD_SAFE()
Install fatal handler with default options.
Definition: IOVDbTestAlg.cxx:124
IOVTime::event
uint32_t event() const noexcept
Definition: IOVTime.h:106
IOVDbTestMDTEleMapColl
CondMultChanCollection< IOVDbTestMDTEleMap > IOVDbTestMDTEleMapColl
This typedef represents a collection of IOVDbTestMDTEleMap objects.
Definition: IOVDbTestMDTEleMapColl.h:16
IOVDbTestMDTEleMap.h
index
Definition: index.py:1
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
IOVDbTestAlg::registerCondObjects
StatusCode registerCondObjects()
Definition: IOVDbTestAlg.cxx:706
initialize
void initialize()
Definition: run_EoverP.cxx:894
CondMultChanCollection
A CondMultChanCollection is a template class which can hold a collection of T* objects which are inte...
Definition: CondMultChanCollection.h:52
mergePhysValFiles.start
start
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:14
IOVRange::start
const IOVTime & start() const
Definition: IOVRange.h:38
IOVDbTestAlg::m_readWriteCool
BooleanProperty m_readWriteCool
Definition: IOVDbTestAlg.h:59
IOVDbTestAlg::m_regIOV
BooleanProperty m_regIOV
Definition: IOVDbTestAlg.h:58
AthCommonMsg< Gaudi::Algorithm >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
CondAttrListCollection::begin
const_iterator begin() const
Access to Chan/AttributeList pairs via iterators.
Definition: CondAttrListCollection.h:309
python.subdetectors.tile.Blob
Blob
Definition: tile.py:17
IIOVRegistrationSvc.h
This is an interface to a tool used to register conditions objects in the Interval of Validity (IOV) ...
CondMultChanCollection::chan_size
chan_size_type chan_size() const
number of channels
Definition: CondMultChanCollection.h:145
IOVDbTestMDTEleMap
Definition: IOVDbTestMDTEleMap.h:22
PixelModuleFeMask_create_db.stop
int stop
Definition: PixelModuleFeMask_create_db.py:76
IOVSVC_CALLBACK_ARGS_P
#define IOVSVC_CALLBACK_ARGS_P(I, K)
short hand for IOVSvc call back argument list, to be used when access to formal arguments is needed,...
Definition: IOVSvcDefs.h:42
python.PyKernel.AttributeList
AttributeList
Definition: PyKernel.py:36
IOVDbTestMDTEleMapColl.h
CondAttrListCollection
This class is a collection of AttributeLists where each one is associated with a channel number....
Definition: CondAttrListCollection.h:52
x
#define x
AthenaAttributeList.h
IOVDbTestAlg::m_nameChans
BooleanProperty m_nameChans
Definition: IOVDbTestAlg.h:62
IOVDbTestMDTEleMap::name
const std::string & name() const
Definition: IOVDbTestMDTEleMap.cxx:26
CondAttrListCollection::iov_const_iterator
ChanIOVMap::const_iterator iov_const_iterator
Definition: CondAttrListCollection.h:66
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:83
IOVDbTestAlg::testCallBack
StatusCode testCallBack(IOVSVC_CALLBACK_ARGS)
Definition: IOVDbTestAlg.cxx:112
IAthenaOutputStreamTool.h
Interface to an output stream tool.
IOVRange::stop
const IOVTime & stop() const
Definition: IOVRange.h:39
IOVDbTestAlg::IOVDbTestAlg
IOVDbTestAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: IOVDbTestAlg.cxx:36
IOVDbTestAmdbCorrection::set
void set(const HepGeom::Point3D< double > &trans, const HepGeom::Point3D< double > &rot, const std::string &name)
Definition: IOVDbTestAmdbCorrection.cxx:21
CondAttrListCollection::name_const_iterator
ChanNameMap::const_iterator name_const_iterator
Definition: CondAttrListCollection.h:69
IOVTime
Basic time unit for IOVSvc. Hold time as a combination of run and event numbers.
Definition: IOVTime.h:33
IOVDbTestAlg::m_streamName
StringProperty m_streamName
Definition: IOVDbTestAlg.h:71
IOVDbTestAlg::m_writeCondObjs
BooleanProperty m_writeCondObjs
Definition: IOVDbTestAlg.h:57
IOVDbTestAlg::waitForSecond
void waitForSecond() const
Definition: IOVDbTestAlg.cxx:83
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
IOVDbTestAmdbCorrection::name
const std::string & name() const
Definition: IOVDbTestAmdbCorrection.cxx:29
IOVDbTestMDTEleMap::timeStamp
int timeStamp() const
Definition: IOVDbTestMDTEleMap.cxx:56
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
IOVDbTestAlg::m_regTime
IntegerProperty m_regTime
Definition: IOVDbTestAlg.h:70
checkCoolLatestUpdate.chanNum
chanNum
Definition: checkCoolLatestUpdate.py:27
IOVDbTestAlg::m_regSvc
ServiceHandle< IIOVRegistrationSvc > m_regSvc
Definition: IOVDbTestAlg.h:76
IOVDbTestAmdbCorrection.h
lumiFormat.i
int i
Definition: lumiFormat.py:85
ReadCellNoiseFromCool.chan
chan
Definition: ReadCellNoiseFromCool.py:52
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
IOVDbTestAlg::m_streamer
ToolHandle< IAthenaOutputStreamTool > m_streamer
Definition: IOVDbTestAlg.h:77
IOVDbTestAlg::printCondObjects
StatusCode printCondObjects() const
Definition: IOVDbTestAlg.cxx:394
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
IOVTime::MAXTIMESTAMP
static constexpr uint64_t MAXTIMESTAMP
Definition: IOVTime.h:58
IAthenaOutputStreamTool::TypeKeyPair
std::pair< std::string, std::string > TypeKeyPair
Stream out objects.
Definition: IAthenaOutputStreamTool.h:99
IOVDbTestAmdbCorrection::getTranslation
HepGeom::Point3D< double > getTranslation() const
Definition: IOVDbTestAmdbCorrection.cxx:34
xAOD::uint64_t
uint64_t
Definition: EventInfo_v1.cxx:123
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
IOVDbTestMDTEleMap::eventNumber
int eventNumber() const
Definition: IOVDbTestMDTEleMap.cxx:51
CondAttrListCollection::ChanNum
unsigned int ChanNum
Definition: CondAttrListCollection.h:55
CondMultChanCollection::iov_begin
iov_const_iterator iov_begin() const
Access to IOVs via iterators.
Definition: CondMultChanCollection.h:155
IOVDbTestAlg::readWithBeginRun
StatusCode readWithBeginRun()
Definition: IOVDbTestAlg.cxx:158
CondMultChanCollection::iov_const_iterator
IOVVec::const_iterator iov_const_iterator
Definition: CondMultChanCollection.h:61
IOVDbTestAlg::m_fancylist
BooleanProperty m_fancylist
Definition: IOVDbTestAlg.h:65
CondMultChanCollection::iov_size
iov_size_type iov_size() const
number of IOVs
Definition: CondMultChanCollection.h:172
IOVTime::MAXEVENT
static constexpr uint32_t MAXEVENT
Definition: IOVTime.h:51
CondMultChanCollection::add
void add(ChanNum chanNum)
Adding in channel numbers.
Definition: CondMultChanCollection.h:199
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
CondAttrListCollection::name_size
name_size_type name_size() const
number of Chan/Name pairs
Definition: CondAttrListCollection.h:377
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
IOVDbTestAlg::m_noStream
BooleanProperty m_noStream
Definition: IOVDbTestAlg.h:69
IOVTime::run
uint32_t run() const noexcept
Definition: IOVTime.h:105
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
DataHandle
an iterator over instances of a given type in StoreGateSvc. It d-casts and caches locally the pointed...
Definition: DataHandle.h:42
IOVTime::MINEVENT
static constexpr uint32_t MINEVENT
Definition: IOVTime.h:50
IOVDbTestAlg::m_twoStepWriteReg
BooleanProperty m_twoStepWriteReg
Definition: IOVDbTestAlg.h:60
IOVDbTestAlg::m_readInInit
BooleanProperty m_readInInit
Definition: IOVDbTestAlg.h:63
IOVDbTestAlg::streamOutCondObjects
StatusCode streamOutCondObjects()
Definition: IOVDbTestAlg.cxx:672
DeMoScan.index
string index
Definition: DeMoScan.py:364
y
#define y
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
CondAttrListCollection::const_iterator
ChanAttrListMap::const_iterator const_iterator
Definition: CondAttrListCollection.h:63
CondAttrListCollection::chanNamePair
name_const_iterator chanNamePair(ChanNum chanNum) const
Access to Chan/Name pairs via channel number: returns map iterator.
Definition: CondAttrListCollection.h:357
DeMoScan.first
bool first
Definition: DeMoScan.py:536
DEBUG
#define DEBUG
Definition: page_access.h:11
AthCommonMsg< Gaudi::Algorithm >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
convertTimingResiduals.offset
offset
Definition: convertTimingResiduals.py:71
IOVDbTestAlg::finalize
virtual StatusCode finalize() override
Definition: IOVDbTestAlg.cxx:650
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:798
IOVDbTestAlg::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition: IOVDbTestAlg.cxx:587
CaloCondBlobAlgs_fillNoiseFromASCII.tag
string tag
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:24
IOVDbTestAlg::createCondObjects
StatusCode createCondObjects(const EventContext &ctx) const
Definition: IOVDbTestAlg.cxx:176
IOVDbTestAlg.h
IOVDbTestAlg::~IOVDbTestAlg
virtual ~IOVDbTestAlg()
Definition: IOVDbTestAlg.cxx:79
CondAttrListCollection::chanIOVPair
iov_const_iterator chanIOVPair(ChanNum chanNum) const
Access to Chan/IOV pairs via channel number: returns map iterator.
Definition: CondAttrListCollection.h:330
CondAttrListCollection::add
bool add(ChanNum chanNum, const AttributeList &attributeList)
Adding in chan/attrList pairs.
Definition: CondAttrListCollection.h:452
IOVDbTestAlg::m_createExtraChans
BooleanProperty m_createExtraChans
Definition: IOVDbTestAlg.h:61
IOVDbTestAlg::m_printLB
BooleanProperty m_printLB
Definition: IOVDbTestAlg.h:66
IOVDbTestAmdbCorrection::getRotation
HepGeom::Point3D< double > getRotation() const
Definition: IOVDbTestAmdbCorrection.cxx:39
IOVDbTestAlg::m_online
BooleanProperty m_online
Definition: IOVDbTestAlg.h:73
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
CaloCondBlobAlgs_fillNoiseFromASCII.blob
blob
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:96
CondAttrListCollection::name_end
name_const_iterator name_end() const
Definition: CondAttrListCollection.h:370
ServiceHandle< IIncidentSvc >
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37