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