ATLAS Offline Software
Loading...
Searching...
No Matches
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
36IOVDbTestAlg::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
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.
90StatusCode IOVDbTestAlg::initialize ATLAS_NOT_THREAD_SAFE (){
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
142StatusCode IOVDbTestAlg::createCondObjects(const EventContext& ctx) const
143{
144 ATH_MSG_INFO ("in createCondObjects()");
145
146 // Create 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) {
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
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) {
346 CondAttrListCollection::ChanNum chan=citr->first;
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
450 CondAttrListCollection::const_iterator first = attrListColl->begin();
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;
471 CondAttrListCollection::iov_const_iterator iovIt = attrListColl->chanIOVPair(chanNum);
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
553StatusCode 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())
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
637StatusCode
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
664StatusCode
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;
680 uint64_t stop = IOVTime::MAXTIMESTAMP;
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
#define endmsg
#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)
This file defines the class for a collection of AttributeLists where each one is associated with a ch...
Interface to an output stream tool.
This is an interface to a tool used to register conditions objects in the Interval of Validity (IOV) ...
StatusCode IOVDbTestAlg::initialize ATLAS_NOT_THREAD_SAFE()
Install fatal handler with default options.
CondMultChanCollection< IOVDbTestMDTEleMap > IOVDbTestMDTEleMapColl
This typedef represents a collection of IOVDbTestMDTEleMap objects.
#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
#define y
#define x
const ServiceHandle< StoreGateSvc > & detStore() const
bool msgLvl(const MSG::Level lvl) const
An algorithm that can be simultaneously executed in multiple threads.
An AttributeList represents a logical row of attributes in a metadata table.
void print(std::ostream &os) const
print to simulate function provided by old POOL AttributeList
This class is a collection of AttributeLists where each one is associated with a channel number.
const_iterator end() const
name_size_type name_size() const
number of Chan/Name pairs
bool add(ChanNum chanNum, const AttributeList &attributeList)
Adding in chan/attrList pairs.
const_iterator begin() const
Access to Chan/AttributeList pairs via iterators.
iov_const_iterator iov_end() const
name_const_iterator name_end() const
name_const_iterator chanNamePair(ChanNum chanNum) const
Access to Chan/Name pairs via channel number: returns map iterator.
iov_const_iterator chanIOVPair(ChanNum chanNum) const
Access to Chan/IOV pairs via channel number: returns map iterator.
ChanAttrListMap::const_iterator const_iterator
ChanNameMap::const_iterator name_const_iterator
ChanIOVMap::const_iterator iov_const_iterator
chan_size_type chan_size() const
number of channels
iov_size_type iov_size() const
number of IOVs
void add(ChanNum chanNum)
Adding in channel numbers.
chan_const_iterator chan_begin() const
Access to Channel numbers via iterators.
iov_const_iterator iov_begin() const
Access to IOVs via iterators.
an iterator over instances of a given type in StoreGateSvc.
Definition DataHandle.h:43
value_type push_back(value_type pElem)
Add an element to the end of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
std::vector< TypeKeyPair > TypeKeyPairs
BooleanProperty m_writeNewTag
BooleanProperty m_regIOV
virtual StatusCode finalize() override
StatusCode streamOutCondObjects()
IntegerProperty m_run
void waitForSecond() const
BooleanProperty m_twoStepWriteReg
StringProperty m_tagID
StatusCode testCallBack(IOVSVC_CALLBACK_ARGS)
BooleanProperty m_online
BooleanProperty m_fancylist
BooleanProperty m_noStream
BooleanProperty m_createExtraChans
BooleanProperty m_writeCondObjs
StatusCode readWithBeginRun()
virtual StatusCode execute(const EventContext &ctx) const override
BooleanProperty m_readWriteCool
IOVDbTestAlg(const std::string &name, ISvcLocator *pSvcLocator)
virtual ~IOVDbTestAlg()
BooleanProperty m_printLB
ToolHandle< IAthenaOutputStreamTool > m_streamer
IntegerProperty m_regTime
BooleanProperty m_readNewTag
ServiceHandle< IIOVRegistrationSvc > m_regSvc
StatusCode registerCondObjects()
BooleanProperty m_nameChans
StatusCode printCondObjects() const
BooleanProperty m_writeOnlyCool
StatusCode createCondObjects(const EventContext &ctx) const
HepGeom::Point3D< double > getTranslation() const
void set(const HepGeom::Point3D< double > &trans, const HepGeom::Point3D< double > &rot, const std::string &name)
HepGeom::Point3D< double > getRotation() const
const std::string & name() const
void set(int runNumber, int eventNumber, const std::string &name)
const std::string & name() const
Validity Range object.
Definition IOVRange.h:30
const IOVTime & stop() const
Definition IOVRange.h:39
const IOVTime & start() const
Definition IOVRange.h:38
Basic time unit for IOVSvc.
Definition IOVTime.h:33
static constexpr uint64_t MAXTIMESTAMP
Definition IOVTime.h:58
static constexpr uint32_t MAXRUN
Definition IOVTime.h:48
uint32_t event() const noexcept
Definition IOVTime.h:106
static constexpr uint32_t MINEVENT
Definition IOVTime.h:50
uint32_t run() const noexcept
Definition IOVTime.h:105
static constexpr uint32_t MAXEVENT
Definition IOVTime.h:51