17#include "GaudiKernel/IIncidentSvc.h"
18#include "GaudiKernel/Incident.h"
19#include "GaudiKernel/GaudiException.h"
20#include "GaudiKernel/IToolSvc.h"
23#include "CoralBase/Attribute.h"
24#include "CoralBase/Blob.h"
25#include "CoralBase/AttributeListSpecification.h"
38 m_regSvc(
"IOVRegistrationSvc", name),
63 while((msgqueue_id = msgget(key, 0660)) == -1) {
64 printf(
"waiting for message here.\n");
67 printf(
"Recieving a message ...\n");
70 msgrcv(msgqueue_id,
reinterpret_cast< msgbuf *
>(&qbuf), 80, 123, 0);
72 printf(
"Type: %ld Text: %s\n", qbuf.mtype, qbuf.mtext);
74 msgctl(msgqueue_id, IPC_RMID, 0);
100 return StatusCode::SUCCESS;
116 incSvc->fireIncident( Incident(name(), IncidentType::BeginRun, Gaudi::Hive::currentContext()) );
118 return StatusCode::SUCCESS;
129 unsigned long long timestamp = ctx.eventID().time_stamp();
131 elemMap->
set(ctx.eventID().time_stamp(),
"mdt element map");
133 elemMap->
set(ctx.eventID().run_number(), ctx.eventID().event_number(),
"mdt element map");
143 unsigned int offset = 0;
145 for (
unsigned int i = 0; i < 10; ++i) {
148 unsigned long long timestamp = ctx.eventID().time_stamp();
150 elemMap->
set(ctx.eventID().time_stamp() + 10*i,
"mdt element map");
152 elemMap->
set(ctx.eventID().run_number() + i, ctx.eventID().event_number(),
"mdt element map");
155 elemMapColl->
add(2*i+1+i + offset);
159 ATH_CHECK(
detStore()->record(elemMapColl,
"/IOVDbTest/IOVDbTestMDTEleMapColl") );
163 HepGeom::Point3D<double>
x(1.0, 2.0, 3.0);
164 HepGeom::Point3D<double>
y(4.0, 5.0, 6.0);
167 x = HepGeom::Point3D<double>(11.0, 22.0, 33.0);
168 y = HepGeom::Point3D<double>(44.0, 55.0, 66.0);
170 amdbCorr->
set(
x,
y,
"amdb correction");
177 coral::AttributeListSpecification* attrSpec =
new coral::AttributeListSpecification();
178 attrSpec->extend(
"xPosition",
"float");
179 attrSpec->extend(
"id",
"int");
180 attrSpec->extend(
"name",
"string");
182 if (!attrSpec->size()) {
184 return(StatusCode::FAILURE);
193 (*attrList)[
"xPosition"].setValue((
float)
m_run);
194 (*attrList)[
"id"].setValue((
int)7);
195 (*attrList)[
"name"].setValue(std::string(
"TestAttrList"));
198 (*attrList)[
"xPosition"].setValue((
float)125.0);
199 (*attrList)[
"id"].setValue((
int)27);
200 (*attrList)[
"name"].setValue(std::string(
"TestAttrListNEWTAG"));
202 std::ostringstream attrStr1;
204 attrList->toOutputStream( attrStr1 );
213 coral::AttributeListSpecification* fanSpec =
new coral::AttributeListSpecification();
214 fanSpec->extend(
"FanBool",
"bool");
215 fanSpec->extend(
"FanInt",
"int");
216 fanSpec->extend(
"FanUInt",
"unsigned int");
217 fanSpec->extend(
"FanI64",
"long long");
218 fanSpec->extend(
"FanU64",
"unsigned long long");
219 fanSpec->extend(
"FanFloat",
"float");
220 fanSpec->extend(
"FanDouble",
"double");
221 fanSpec->extend(
"FanSmallString",
"string");
222 fanSpec->extend(
"FanBigString",
"string");
223 fanSpec->extend(
"FanBlob",
"blob");
226 (*fanList)[
"FanBool"].data<
bool>()=
true;
227 (*fanList)[
"FanInt"].data<
int>()=-12345;
228 (*fanList)[
"FanUInt"].data<
unsigned int>()=12345;
229 (*fanList)[
"FanI64"].data<
long long>()=-98765432100LL;
230 (*fanList)[
"FanU64"].data<
unsigned long long>()=98765432100LL;
231 (*fanList)[
"FanFloat"].data<
float>()=1.2345;
232 (*fanList)[
"FanDouble"].data<
double>()=1.23456789;
233 (*fanList)[
"FanSmallString"].data<std::string>()=
"small string";
234 (*fanList)[
"FanBigString"].data<std::string>()=
"potentially long string";
236 coral::Blob& blob=(*fanList)[
"FanBlob"].data<coral::Blob>();
237 unsigned int blobsize=2000;
238 blob.resize(blobsize);
239 unsigned char* p=
static_cast<unsigned char*
>(blob.startingAddress());
240 for (
unsigned int i=0;i<blobsize;++i,++p) *p=(i % 256);
242 std::ostringstream fanstr;
243 fanList->toOutputStream(fanstr);
254 coral::AttributeList attrList0(*attrSpec);
255 attrList0[
"xPosition"].setValue((
float)35.0);
256 attrList0[
"id"].setValue((
int)17);
257 attrList0[
"name"].setValue(std::string(
"TestAttrList"));
260 std::ostringstream attrStr2;
261 attrList0.toOutputStream( attrStr2 );
262 ATH_MSG_DEBUG(
"ChanNum " << chanNum <<
" Attribute list " << attrStr2.str() );
263 attrListColl->
add(chanNum, attrList0);
265 coral::AttributeList attrList1(*attrSpec);
266 attrList1[
"xPosition"].setValue((
float)45.0);
267 attrList1[
"id"].setValue((
int)27);
268 attrList1[
"name"].setValue(std::string(
"TestAttrList"));
271 std::ostringstream attrStr3;
272 attrList1.toOutputStream( attrStr3 );
273 ATH_MSG_DEBUG(
"ChanNum " << chanNum <<
" Attribute list " << attrStr3.str() );
274 attrListColl->
add(chanNum, attrList1);
276 coral::AttributeList attrList2(*attrSpec);
277 attrList2[
"xPosition"].setValue((
float)55.0);
278 attrList2[
"id"].setValue((
int)37);
279 attrList2[
"name"].setValue(std::string(
"TestAttrList"));
282 std::ostringstream attrStr4;
283 attrList2.toOutputStream( attrStr4 );
284 ATH_MSG_DEBUG(
"ChanNum " << chanNum <<
" Attribute list " << attrStr4.str() );
285 attrListColl->
add(chanNum, attrList2);
289 coral::AttributeList attrList3(*attrSpec);
290 attrList3[
"xPosition"].setValue((
float)65.0);
291 attrList3[
"id"].setValue((
int)47);
292 attrList3[
"name"].setValue(std::string(
"TestAttrList"));
295 std::ostringstream attrStr5;
296 attrList3.toOutputStream( attrStr5 );
297 ATH_MSG_DEBUG(
"ChanNum " << chanNum <<
" Attribute list " << attrStr5.str() );
298 attrListColl->
add(chanNum, attrList3);
302 attrListColl->
add(chanNum, range);
303 ATH_MSG_DEBUG(
"Add min : since " << range.start().run() <<
" " << range.start().event()
304 <<
" till " << range.stop().run() <<
" " << range.stop().event() );
306 coral::AttributeList attrList4(*attrSpec);
307 attrList4[
"xPosition"].setValue((
float)75.0);
308 attrList4[
"id"].setValue((
int)57);
309 attrList4[
"name"].setValue(std::string(
"TestAttrList"));
312 std::ostringstream attrStr6;
313 attrList4.toOutputStream( attrStr6 );
314 ATH_MSG_DEBUG(
"ChanNum " << chanNum <<
" Attribute list " << attrStr6.str() );
315 attrListColl->
add(chanNum, attrList4);
319 attrListColl->
add(chanNum, range1);
326 citr!=attrListColl->
end();++citr) {
328 std::ostringstream name;
329 name <<
"Name_" << chan;
330 attrListColl->
add(chan,name.str());
334 ATH_CHECK(
detStore()->record(attrListColl,
"/IOVDbTest/IOVDbTestAttrListColl") );
336 return StatusCode::SUCCESS;
358 ATH_CHECK(
detStore()->retrieve(amdbCorr,
"/IOVDbTest/IOVDbTestAMDBCorrection") );
359 ATH_MSG_INFO (
"Retrieved /IOVDbTest/IOVDbTestAMDBCorrection" );
362 HepGeom::Point3D<double> rot = amdbCorr->
getRotation();
365 <<
" trans " << trans.x() <<
" " << trans.y() <<
" " << trans.z()
366 <<
" rot " << rot.x() <<
" " << rot.y() <<
" " << rot.z() );
372 ATH_CHECK(
detStore()->retrieve(amdbCorr,
"/IOVDbTest/IOVDbTestAMDBCorrection-NEWTAG") );
373 ATH_MSG_INFO(
"Retrieved /IOVDbTest/IOVDbTestAMDBCorrection-NEWTAG" );
376 HepGeom::Point3D<double> rot = amdbCorr->
getRotation();
379 <<
" trans " << trans.x() <<
" " << trans.y() <<
" " << trans.z()
380 <<
" rot " << rot.x() <<
" " << rot.y() <<
" " << rot.z() );
392 std::ostringstream attrStr1;
393 attrList->
print( attrStr1 );
398 ATH_CHECK(
detStore()->retrieve(attrList,
"/IOVDbTest/IOVDbTestAttrList-NEWTAG") );
401 std::ostringstream attrStr1;
402 attrList->
print( attrStr1 );
403 ATH_MSG_DEBUG(
"Attribute list NEWTAG: " << attrStr1.str() );
410 std::ostringstream fanstr;
411 attrList->
print( fanstr );
414 const coral::Blob& blob=(*attrList)[
"FanBlob"].data<coral::Blob>();
415 const unsigned char* p=
static_cast<const unsigned char*
>
416 (blob.startingAddress());
418 for (
int i=0;i<blob.size();++i,++p)
if (*p!=(i % 256)) ++nerr;
420 " data mismatches!" );
424 ATH_CHECK(
detStore()->retrieve(attrListColl,
"/IOVDbTest/IOVDbTestAttrListColl") );
428 std::ostringstream attrStr2;
433 for (; first != last; ++first) {
435 if (
msgLvl (MSG::DEBUG)) {
436 std::ostringstream attrStr1;
437 (*first).second.toOutputStream( attrStr1 );
438 msg() << MSG::DEBUG <<
"ChanNum " << (*first).first;
444 msg() << MSG::DEBUG <<
" name " << nitr->second;
446 msg() << MSG::DEBUG <<
447 " Attribute list " << attrStr1.str() <<
endmsg;
453 if (iovIt != attrListColl->
iov_end()) {
454 const IOVRange& range = (*iovIt).second;
455 if(range.start().isTimestamp()) {
456 ATH_MSG_DEBUG(
"Range timestamp : since " << range.start().timestamp()
457 <<
" till " << range.stop().timestamp() );
460 ATH_MSG_DEBUG(
"Range R/E : since " << range.start().run() <<
" "
461 << range.start().event()
462 <<
" till " << range.stop().run() <<
" "
463 << range.stop().event() );
473 if (
detStore()->retrieve(attrList,
"/Simulation/Parameters").isFailure() ) {
479 std::ostringstream attrStr;
480 attrList->
print( attrStr );
484 if (
detStore()->retrieve(attrList,
"/Digitization/Parameters").isFailure()) {
490 std::ostringstream attrStr;
491 attrList->
print( attrStr );
502 ATH_CHECK(
detStore()->retrieve(elemMapColl,
"/IOVDbTest/IOVDbTestMDTEleMapColl") );
507 ATH_MSG_ERROR(
"Must fill in channel numbers! Number of objects: " << elemMapColl->
size()
508 <<
" Number of channels: " << elemMapColl->
chan_size() );
509 return(StatusCode::FAILURE);
512 bool hasIOVs = (elemMapColl->
iov_size() == elemMapColl->
size());
515 for (
unsigned int i = 0; i < elemMapColl->
size(); ++i, ++itChan) {
517 msg() << MSG::INFO <<
"Found " << elemMap->
name()
521 <<
" channel " << (*itChan);
523 msg() << MSG::INFO <<
" iov " << (*itIOV);
529 return StatusCode::SUCCESS;
560 if (
msgLvl (MSG::DEBUG)) {
561 msg() << MSG::DEBUG <<
"Event (run,ev,lb:time): [" << ctx.eventID().run_number() <<
"," << ctx.eventID().event_number();
562 if (
m_printLB)
msg() <<
"," << ctx.eventID().lumi_block();
563 msg() <<
":" << ctx.eventID().time_stamp() <<
"]" <<
endmsg;
569 if (2 != ctx.eventID().run_number() || 5 != ctx.eventID().event_number()) {
570 ATH_MSG_DEBUG(
"Event NOT selected for creating conditions objects " );
571 return StatusCode::SUCCESS;
584 ATH_MSG_DEBUG(
"Calling printCondObjects" <<
m_online<<
"\t"<<ctx.eventID().run_number()<<
"\t"<<ctx.eventID().event_number() );
587 if (
m_online && 2 == ctx.eventID().run_number() && 9 == ctx.eventID().event_number())
592 return StatusCode::SUCCESS;
611 return StatusCode::SUCCESS;
625 typeKeys.emplace_back(
"IOVDbTestMDTEleMap",
"");
626 typeKeys.emplace_back(
"IOVDbTestAmdbCorrection",
"");
627 typeKeys.emplace_back(
"IOVDbTestMDTEleMapColl",
"");
632 for (
unsigned int i = 0; i < typeKeys.size(); ++i) {
633 ATH_MSG_DEBUG( typeKeys[i].first <<
" " << typeKeys[i].second <<
" " );
639 return StatusCode::SUCCESS;
650 std::string tag =
"no tag";
652 tag =
"tag MDTEleMap_" +
m_tagID;
657 ATH_MSG_DEBUG(
"registered IOVDbTestMDTEleMap with " << tag );
660 uint64_t start=
static_cast<long long>(
m_regTime)*1000000000LL;
664 tag =
"tag AmdbCorrection_" +
m_tagID;
669 ATH_MSG_DEBUG(
"registered IOVDbTestAmdbCorrection with " << tag );
678 tag =
"tag AttrList_" +
m_tagID;
681 ATH_CHECK(
m_regSvc->registerIOV(
"AthenaAttributeList",
"/IOVDbTest/IOVDbTestAttrList",
"") );
683 ATH_MSG_DEBUG(
"registered AthenaAttributeList with " << tag );
688 tag =
"tag FancyList_" +
m_tagID;
691 ATH_CHECK(
m_regSvc->registerIOV(
"AthenaAttributeList",
"/IOVDbTest/IOVDbTestFancyList",
"") );
693 ATH_MSG_DEBUG (
"registered Fancy AthenaAttributeList with " << tag );
698 tag =
"tag AttrListColl_" +
m_tagID;
703 ATH_MSG_DEBUG(
"registered CondAttrListCollection with " << tag );
709 tag =
"tag MDTEleMapColl_" +
m_tagID;
714 ATH_MSG_DEBUG(
"registered IOVDbTestMDTEleMapColl with " << tag );
717 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
This file defines the class for a collection of AttributeLists where each one is associated with a ch...
This is an interface to a tool used to register conditions objects in the Interval of Validity (IOV) ...
CondMultChanCollection< IOVDbTestMDTEleMap > IOVDbTestMDTEleMapColl
This typedef represents a collection of IOVDbTestMDTEleMap objects.
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
IOVVec::const_iterator iov_const_iterator
iov_size_type iov_size() const
number of IOVs
void add(ChanNum chanNum)
Adding in channel numbers.
ChanVec::const_iterator chan_const_iterator
chan_const_iterator chan_begin() const
Access to Channel numbers via iterators.
iov_const_iterator iov_begin() const
Access to IOVs via iterators.
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.
BooleanProperty m_writeNewTag
virtual StatusCode finalize() override
StatusCode streamOutCondObjects()
void waitForSecond() const
BooleanProperty m_twoStepWriteReg
virtual StatusCode initialize() override
BooleanProperty m_fancylist
BooleanProperty m_noStream
BooleanProperty m_readInInit
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)
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
StringProperty m_streamName
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
const IOVTime & stop() const
const IOVTime & start() const
Basic time unit for IOVSvc.
static constexpr uint64_t MAXTIMESTAMP
static constexpr uint32_t MAXRUN
uint32_t event() const noexcept
static constexpr uint32_t MINEVENT
uint32_t run() const noexcept
static constexpr uint32_t MAXEVENT