 |
ATLAS Offline Software
|
Go to the documentation of this file.
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),
39 m_streamer (
"CondStream1")
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);
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) {
85 return StatusCode::SUCCESS;
94 if (m_writeCondObjs) {
95 m_streamer =
"AthenaOutputStreamTool/" + m_streamName;
112 if (!m_online)
return StatusCode::SUCCESS;
116 ATH_MSG_INFO(
"Registered callback for IOVDbTestAlg::testCallBack" );
119 return StatusCode::SUCCESS;
135 incSvc->fireIncident( Incident(
name(), IncidentType::BeginRun, Gaudi::Hive::currentContext()) );
137 return StatusCode::SUCCESS;
148 unsigned long long timestamp = ctx.eventID().time_stamp();
150 elemMap->
set(ctx.eventID().time_stamp(),
"mdt element map");
152 elemMap->
set(ctx.eventID().run_number(), ctx.eventID().event_number(),
"mdt element map");
164 for (
unsigned int i = 0;
i < 10; ++
i) {
167 unsigned long long timestamp = ctx.eventID().time_stamp();
169 elemMap->
set(ctx.eventID().time_stamp() + 10*
i,
"mdt element map");
171 elemMap->
set(ctx.eventID().run_number() +
i, ctx.eventID().event_number(),
"mdt element map");
178 ATH_CHECK(
detStore()->record(elemMapColl,
"/IOVDbTest/IOVDbTestMDTEleMapColl") );
182 HepGeom::Point3D<double>
x(1.0, 2.0, 3.0);
183 HepGeom::Point3D<double>
y(4.0, 5.0, 6.0);
186 x = HepGeom::Point3D<double>(11.0, 22.0, 33.0);
187 y = HepGeom::Point3D<double>(44.0, 55.0, 66.0);
189 amdbCorr->
set(
x,
y,
"amdb correction");
196 coral::AttributeListSpecification* attrSpec =
new coral::AttributeListSpecification();
197 attrSpec->extend(
"xPosition",
"float");
198 attrSpec->extend(
"id",
"int");
199 attrSpec->extend(
"name",
"string");
201 if (!attrSpec->size()) {
203 return(StatusCode::FAILURE);
212 (*attrList)[
"xPosition"].setValue((
float)
m_run);
213 (*attrList)[
"id"].setValue((
int)7);
214 (*attrList)[
"name"].setValue(std::string(
"TestAttrList"));
217 (*attrList)[
"xPosition"].setValue((
float)125.0);
218 (*attrList)[
"id"].setValue((
int)27);
219 (*attrList)[
"name"].setValue(std::string(
"TestAttrListNEWTAG"));
221 std::ostringstream attrStr1;
223 attrList->toOutputStream( attrStr1 );
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");
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";
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);
261 std::ostringstream fanstr;
262 fanList->toOutputStream(fanstr);
274 attrList0[
"xPosition"].setValue((
float)35.0);
275 attrList0[
"id"].setValue((
int)17);
276 attrList0[
"name"].setValue(std::string(
"TestAttrList"));
279 std::ostringstream attrStr2;
280 attrList0.toOutputStream( attrStr2 );
285 attrList1[
"xPosition"].setValue((
float)45.0);
286 attrList1[
"id"].setValue((
int)27);
287 attrList1[
"name"].setValue(std::string(
"TestAttrList"));
290 std::ostringstream attrStr3;
291 attrList1.toOutputStream( attrStr3 );
296 attrList2[
"xPosition"].setValue((
float)55.0);
297 attrList2[
"id"].setValue((
int)37);
298 attrList2[
"name"].setValue(std::string(
"TestAttrList"));
301 std::ostringstream attrStr4;
302 attrList2.toOutputStream( attrStr4 );
309 attrList3[
"xPosition"].setValue((
float)65.0);
310 attrList3[
"id"].setValue((
int)47);
311 attrList3[
"name"].setValue(std::string(
"TestAttrList"));
314 std::ostringstream attrStr5;
315 attrList3.toOutputStream( attrStr5 );
323 <<
" till " <<
range.stop().run() <<
" " <<
range.stop().event() );
326 attrList4[
"xPosition"].setValue((
float)75.0);
327 attrList4[
"id"].setValue((
int)57);
328 attrList4[
"name"].setValue(std::string(
"TestAttrList"));
331 std::ostringstream attrStr6;
332 attrList4.toOutputStream( attrStr6 );
345 citr!=attrListColl->
end();++citr) {
347 std::ostringstream
name;
353 ATH_CHECK(
detStore()->record(attrListColl,
"/IOVDbTest/IOVDbTestAttrListColl") );
355 return StatusCode::SUCCESS;
378 ATH_MSG_INFO (
"Retrieved /IOVDbTest/IOVDbTestAMDBCorrection" );
381 HepGeom::Point3D<double> rot = amdbCorr->
getRotation();
384 <<
" trans " << trans.x() <<
" " << trans.y() <<
" " << trans.z()
385 <<
" rot " << rot.x() <<
" " << rot.y() <<
" " << rot.z() );
392 ATH_MSG_INFO(
"Retrieved /IOVDbTest/IOVDbTestAMDBCorrection-NEWTAG" );
395 HepGeom::Point3D<double> rot = amdbCorr->
getRotation();
398 <<
" trans " << trans.x() <<
" " << trans.y() <<
" " << trans.z()
399 <<
" rot " << rot.x() <<
" " << rot.y() <<
" " << rot.z() );
411 std::ostringstream attrStr1;
412 attrList->
print( attrStr1 );
420 std::ostringstream attrStr1;
421 attrList->
print( attrStr1 );
422 ATH_MSG_DEBUG(
"Attribute list NEWTAG: " << attrStr1.str() );
429 std::ostringstream fanstr;
430 attrList->
print( fanstr );
434 const unsigned char*
p=
static_cast<const unsigned char*
>
435 (
blob.startingAddress());
437 for (
int i=0;
i<
blob.size();++
i,++
p)
if (*
p!=(
i % 256)) ++nerr;
439 " data mismatches!" );
447 std::ostringstream attrStr2;
455 std::ostringstream attrStr1;
456 (*first).second.toOutputStream( attrStr1 );
466 " Attribute list " << attrStr1.str() <<
endmsg;
472 if (iovIt != attrListColl->
iov_end()) {
474 if(
range.start().isTimestamp()) {
476 <<
" till " <<
range.stop().timestamp() );
480 <<
range.start().event()
481 <<
" till " <<
range.stop().run() <<
" "
482 <<
range.stop().event() );
492 if (
detStore()->
retrieve(attrList,
"/Simulation/Parameters").isFailure() ) {
498 std::ostringstream attrStr;
499 attrList->
print( attrStr );
503 if (
detStore()->
retrieve(attrList,
"/Digitization/Parameters").isFailure()) {
509 std::ostringstream attrStr;
510 attrList->
print( attrStr );
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);
531 bool hasIOVs = (elemMapColl->
iov_size() == elemMapColl->
size());
534 for (
unsigned int i = 0;
i < elemMapColl->
size(); ++
i, ++itChan) {
540 <<
" channel " << (*itChan);
548 return StatusCode::SUCCESS;
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;
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;
603 ATH_MSG_DEBUG(
"Calling printCondObjects" <<
m_online<<
"\t"<<ctx.eventID().run_number()<<
"\t"<<ctx.eventID().event_number() );
606 if (
m_online && 2 == ctx.eventID().run_number() && 9 == ctx.eventID().event_number())
611 return StatusCode::SUCCESS;
630 return StatusCode::SUCCESS;
644 typeKeys.emplace_back(
"IOVDbTestMDTEleMap",
"");
645 typeKeys.emplace_back(
"IOVDbTestAmdbCorrection",
"");
646 typeKeys.emplace_back(
"IOVDbTestMDTEleMapColl",
"");
651 for (
unsigned int i = 0;
i < typeKeys.size(); ++
i) {
658 return StatusCode::SUCCESS;
669 std::string
tag =
"no tag";
700 ATH_CHECK(
m_regSvc->registerIOV(
"AthenaAttributeList",
"/IOVDbTest/IOVDbTestAttrList",
"") );
710 ATH_CHECK(
m_regSvc->registerIOV(
"AthenaAttributeList",
"/IOVDbTest/IOVDbTestFancyList",
"") );
736 return StatusCode::SUCCESS;
ChanVec::const_iterator chan_const_iterator
def retrieve(aClass, aKey=None)
const_iterator end() const
BooleanProperty m_writeNewTag
Validity Range object. Holds two IOVTimes (start and stop)
void set(int runNumber, int eventNumber, const std::string &name)
iov_const_iterator iov_end() const
static constexpr uint32_t MAXRUN
This file defines the class for a collection of AttributeLists where each one is associated with a ch...
BooleanProperty m_readNewTag
BooleanProperty m_writeOnlyCool
chan_const_iterator chan_begin() const
Access to Channel numbers via iterators.
void print(std::ostream &os) const
print to simulate function provided by old POOL AttributeList
StatusCode IOVDbTestAlg::initialize ATLAS_NOT_THREAD_SAFE()
Install fatal handler with default options.
uint32_t event() const noexcept
CondMultChanCollection< IOVDbTestMDTEleMap > IOVDbTestMDTEleMapColl
This typedef represents a collection of IOVDbTestMDTEleMap objects.
StatusCode registerCondObjects()
A CondMultChanCollection is a template class which can hold a collection of T* objects which are inte...
const IOVTime & start() const
BooleanProperty m_readWriteCool
bool msgLvl(const MSG::Level lvl) const
const_iterator begin() const
Access to Chan/AttributeList pairs via iterators.
This is an interface to a tool used to register conditions objects in the Interval of Validity (IOV) ...
chan_size_type chan_size() const
number of channels
#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,...
This class is a collection of AttributeLists where each one is associated with a channel number....
BooleanProperty m_nameChans
const std::string & name() const
ChanIOVMap::const_iterator iov_const_iterator
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
An algorithm that can be simultaneously executed in multiple threads.
StatusCode testCallBack(IOVSVC_CALLBACK_ARGS)
const IOVTime & stop() const
IOVDbTestAlg(const std::string &name, ISvcLocator *pSvcLocator)
void set(const HepGeom::Point3D< double > &trans, const HepGeom::Point3D< double > &rot, const std::string &name)
ChanNameMap::const_iterator name_const_iterator
Basic time unit for IOVSvc. Hold time as a combination of run and event numbers.
BooleanProperty m_writeCondObjs
void waitForSecond() const
const std::string & name() const
IntegerProperty m_regTime
ServiceHandle< IIOVRegistrationSvc > m_regSvc
::StatusCode StatusCode
StatusCode definition for legacy code.
ToolHandle< IAthenaOutputStreamTool > m_streamer
StatusCode printCondObjects() const
static constexpr uint64_t MAXTIMESTAMP
HepGeom::Point3D< double > getTranslation() const
An AttributeList represents a logical row of attributes in a metadata table. The name and type of eac...
iov_const_iterator iov_begin() const
Access to IOVs via iterators.
StatusCode readWithBeginRun()
IOVVec::const_iterator iov_const_iterator
BooleanProperty m_fancylist
iov_size_type iov_size() const
number of IOVs
static constexpr uint32_t MAXEVENT
void add(ChanNum chanNum)
Adding in channel numbers.
name_size_type name_size() const
number of Chan/Name pairs
BooleanProperty m_noStream
uint32_t run() const noexcept
value_type push_back(value_type pElem)
Add an element to the end of the collection.
an iterator over instances of a given type in StoreGateSvc. It d-casts and caches locally the pointed...
static constexpr uint32_t MINEVENT
BooleanProperty m_twoStepWriteReg
StatusCode streamOutCondObjects()
#define ATH_MSG_WARNING(x)
ChanAttrListMap::const_iterator const_iterator
name_const_iterator chanNamePair(ChanNum chanNum) const
Access to Chan/Name pairs via channel number: returns map iterator.
virtual StatusCode finalize() override
virtual StatusCode execute(const EventContext &ctx) const override
StatusCode createCondObjects(const EventContext &ctx) const
iov_const_iterator chanIOVPair(ChanNum chanNum) const
Access to Chan/IOV pairs via channel number: returns map iterator.
bool add(ChanNum chanNum, const AttributeList &attributeList)
Adding in chan/attrList pairs.
BooleanProperty m_createExtraChans
BooleanProperty m_printLB
HepGeom::Point3D< double > getRotation() const
size_type size() const noexcept
Returns the number of elements in the collection.
name_const_iterator name_end() const