ATLAS Offline Software
IOVRegistrationSvc.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
15 //<<<<<< INCLUDES >>>>>>
16 
17 #include "IOVRegistrationSvc.h"
18 
19 //#include "GaudiKernel/DeclareFactoryEntries.h"
20 
21 // Athena includes
22 #include "IOVDbSvc/IIOVCondDbSvc.h"
23 #include "AthenaKernel/IOVTime.h"
25 
26 // Gaudi includes
27 #include "GaudiKernel/IAddressCreator.h"
28 #include "GaudiKernel/IClassIDSvc.h"
29 #include "GaudiKernel/IConversionSvc.h"
30 #include "GaudiKernel/IOpaqueAddress.h"
31 #include "GaudiKernel/IConverter.h"
32 
33 // AttrList and address
38 
39 // COOL includes
40 //#include "AttributeList/AttributeList.h"
41 #include "CoolKernel/IDatabase.h"
42 #include "CoolKernel/IFolder.h"
43 #include "CoolKernel/RecordSpecification.h"
44 #include "CoolKernel/FolderSpecification.h"
45 #include "CoolKernel/Record.h"
46 
47 //<<<<<< METHOD DEFINITIONS
48 
49 //--------------------------------------------------------------------------
50 
51 IOVRegistrationSvc::IOVRegistrationSvc( const std::string& name, ISvcLocator* svc )
52  :
53  base_class( name, svc ),
54  m_recreateFolders(false),
55  m_beginRun(IOVTime::MINRUN),
56  m_endRun(IOVTime::MAXRUN),
57  m_beginLB(IOVTime::MINEVENT),
58  m_endLB(IOVTime::MAXEVENT),
59  m_beginTime(IOVTime::MINTIMESTAMP),
60  m_endTime(IOVTime::MAXEVENT), // as the time parameter is only 32bit
61  m_tag(""),
62  m_timeStamp(false),
63  m_tagDescription("Athena IOVRegistrationSvc"),
64  m_writeKeyInfo(true),
65  m_userTags(true),
66  m_userTagsUH(false),
67  m_svFolder(false),
68  m_payloadTable(false),
69  m_forceGlobalIOV(false),
70  m_iov_db ( "IOVDbSvc", name ),
71  m_detStore( "DetectorStore", name ),
72  m_persSvc ( "EventPersistencySvc", name ),
73  m_clidSvc ( "ClassIDSvc", name )
74 {
75 
76  // Declare properties
77  declareProperty("RecreateFolders", m_recreateFolders);
78  declareProperty("BeginRun", m_beginRun);
79  declareProperty("EndRun", m_endRun);
80  declareProperty("BeginLB", m_beginLB);
81  declareProperty("EndLB", m_endLB);
82  declareProperty("BeginTime", m_beginTime);
83  declareProperty("EndTime", m_endTime);
84  declareProperty("IOVDbTag", m_tag);
85  declareProperty("IOVDbTimeStamp", m_timeStamp);
86  declareProperty("TagDescription", m_tagDescription);
87  declareProperty("writeKeyInfo", m_writeKeyInfo);
88  declareProperty("userTags", m_userTags);
89  declareProperty("userTagsUpdateHead",m_userTagsUH);
90  declareProperty("SVFolder", m_svFolder);
91  declareProperty("PayloadTable", m_payloadTable);
92  declareProperty("OverrideNames", m_overrideName);
93  declareProperty("OverrideTypes", m_overrideType);
94  declareProperty("UseGlobalIOVForCollections", m_forceGlobalIOV);
95 }
96 
97 //--------------------------------------------------------------------------
99 {}
100 
101 const InterfaceID& IOVRegistrationSvc::type() const
102 
103 {
104  return IIOVRegistrationSvc::interfaceID();
105 }
106 
107 //--------------------------------------------------------------------------
108 
110 {
111  ATH_MSG_DEBUG ("in initialize()");
112 
114  if ( sc.isFailure() ) {
115  ATH_MSG_ERROR ("Unable to call base initialize method");
116  return StatusCode::FAILURE;
117  }
118 
119  // locate the conditions store ptr to it.
120  sc = m_detStore.retrieve();
121  if (!sc.isSuccess() || 0 == m_detStore) {
122  ATH_MSG_ERROR ("Could not find ConditionStore");
123  return StatusCode::FAILURE;
124  }
125 
126  // Get the IOVDbSvc
127  sc = m_iov_db.retrieve();
128  if ( sc.isFailure() ) {
129  ATH_MSG_ERROR ("Unable to get the IOVDbSvc");
130  return StatusCode::FAILURE;
131  }
132 
133  // Get the persistency mgr for conversion of IOpaqueAddress to
134  // string
135  sc = m_persSvc.retrieve();
136  if ( sc != StatusCode::SUCCESS ) {
137  ATH_MSG_ERROR (" Cannot get IAddressCreator interface of the EventPersistencySvc ");
138  return sc ;
139  }
140  ATH_MSG_DEBUG ("Found PersistencySvc ");
141 
142 
143  // Get the ClassIDSvc - to get typename for clid
144  sc = m_clidSvc.retrieve();
145  if (sc != StatusCode::SUCCESS ) {
146  ATH_MSG_ERROR (" Cannot get IClassIDSvc interface of the CLIDSvc " );
147  return sc ;
148  }
149  ATH_MSG_DEBUG ("Found CLIDSvc ");
150 
151 
152  ATH_MSG_DEBUG ("Properties ");
153  ATH_MSG_DEBUG ("RecreateFolders " << m_recreateFolders);
154  if (m_timeStamp)
155  {
156  ATH_MSG_DEBUG ("BeginTime " << m_beginTime);
157  ATH_MSG_DEBUG ("EndTime " << m_endTime);
158  }
159  else
160  {
161  ATH_MSG_DEBUG ("BeginRun " << m_beginRun);
162  ATH_MSG_DEBUG ("EndRun " << m_endRun);
163  ATH_MSG_DEBUG ("BeginLB " << m_beginLB);
164  ATH_MSG_DEBUG ("EndLB " << m_endLB);
165  }
166  ATH_MSG_DEBUG ("IOVDbTag " << m_tag);
167 
168  // check consistency of override specification, if any
169  if (m_overrideName.size()!=m_overrideType.size()) {
170  ATH_MSG_FATAL ("Inconsistent settings of OverrideNames and OverrideTypes parameters");
171  return StatusCode::FAILURE;
172  }
173  for (unsigned int i=0;i<m_overrideName.size();++i)
174  ATH_MSG_INFO ("Attributes with name " << m_overrideName[i] <<
175  " will be stored as COOL type " << m_overrideType[i]);
176  return StatusCode::SUCCESS;
177 
178 }
179 
180 //--------------------------------------------------------------------------
181 
183 {
184  return StatusCode::SUCCESS;
185 }
186 
187 //--------------------------------------------------------------------------
188 
190 {
191  std::string key = "";
192 
193  if (m_timeStamp)
194  {
195  IOVTime start;
196  start.setTimestamp(timeToNano(m_beginTime));
197  IOVTime stop ;
198  stop.setTimestamp(timeToNano(m_endTime));
199 
200  return ( registerIOV( typeName,
201  key,key,
202  m_tag.value(),
203  start,
204  stop) );
205  }
206  else
207  {
208  IOVTime start;
209  start.setRunEvent( (unsigned long)m_beginRun, (unsigned long)m_beginLB );
210  IOVTime stop;
211  stop.setRunEvent ( (unsigned long)m_endRun, (unsigned long)m_endLB );
212 
213  return ( registerIOV( typeName,
214  key,key,
215  m_tag.value(),
216  start,
217  stop) );
218  }
219 }
220 
221 //--------------------------------------------------------------------------
222 
223 StatusCode IOVRegistrationSvc::registerIOV( const std::string& typeName, const std::string& tag ) const
224 {
225  std::string key = "";
226 
227  if (m_timeStamp)
228  {
229  IOVTime start;
230  start.setTimestamp( timeToNano(m_beginTime) );
231  IOVTime stop ;
232  stop.setTimestamp ( timeToNano(m_endTime) );
233 
234  return ( registerIOV( typeName,
235  key,key,
236  tag,
237  start,
238  stop) );
239  }
240  else
241  {
242  IOVTime start;
243  start.setRunEvent( (unsigned long)m_beginRun, (unsigned long)m_beginLB );
244  IOVTime stop;
245  stop.setRunEvent ( (unsigned long)m_endRun, (unsigned long)m_endLB );
246 
247  return ( registerIOV( typeName,
248  key,key,
249  tag,
250  start,
251  stop) );
252  }
253 }
254 
255 //--------------------------------------------------------------------------
256 
257 StatusCode IOVRegistrationSvc::registerIOV( const std::string& typeName, const std::string& key,
258  const std::string& tag ) const
259 {
260  if (m_timeStamp)
261  {
262  IOVTime start;
263  start.setTimestamp( timeToNano(m_beginTime) );
264  IOVTime stop ;
265  stop.setTimestamp ( timeToNano(m_endTime) );
266 
267  return ( registerIOV( typeName,
268  key,key,
269  tag,
270  start,
271  stop) );
272  }
273  else
274  {
275  IOVTime start;
276  start.setRunEvent( (unsigned long)m_beginRun, (unsigned long)m_beginLB );
277  IOVTime stop;
278  stop.setRunEvent ( (unsigned long)m_endRun, (unsigned long)m_endLB );
279 
280  return ( registerIOV( typeName,
281  key,key,
282  tag,
283  start,
284  stop) );
285  }
286 }
287 
288 //--------------------------------------------------------------------------
289 
291  const std::string& tag,
292  unsigned int beginRun,
293  unsigned int endRun,
294  unsigned int beginLB,
295  unsigned int endLB ) const
296 {
297  IOVTime start;
298  start.setRunEvent( (unsigned long)beginRun, (unsigned long)beginLB );
299  IOVTime stop;
300  stop.setRunEvent ( (unsigned long)endRun, (unsigned long)endLB );
301  std::string key = "";
302 
303  return ( registerIOV( typeName,
304  key,key,
305  tag,
306  start,
307  stop) );
308 }
309 
310 //--------------------------------------------------------------------------
311 
313  const std::string& tag,
314  uint64_t beginTime,
315  uint64_t endTime ) const
316 {
317  IOVTime start;
318  start.setTimestamp( beginTime );
319  IOVTime stop;
320  stop.setTimestamp ( endTime );
321 
322  std::string key = "";
323 
324  return ( registerIOV( typeName,
325  key,key,
326  tag,
327  start,
328  stop) );
329 }
330 
331 //--------------------------------------------------------------------------
332 
334  const std::string& key,
335  const std::string& tag,
336  unsigned int beginRun,
337  unsigned int endRun,
338  unsigned int beginLB,
339  unsigned int endLB ) const
340 {
341  IOVTime start;
342  start.setRunEvent( (unsigned long)beginRun, (unsigned long)beginLB );
343  IOVTime stop;
344  stop.setRunEvent ( (unsigned long)endRun, (unsigned long)endLB );
345 
346  return ( registerIOV( typeName,
347  key,key,
348  tag,
349  start,
350  stop) );
351 }
352 
353 //--------------------------------------------------------------------------
354 
356  const std::string& key,
357  const std::string& tag,
358  uint64_t beginTime,
359  uint64_t endTime ) const
360 {
361  IOVTime start;
362  start.setTimestamp( beginTime );
363  IOVTime stop;
364  stop.setTimestamp ( endTime );
365 
366  return ( registerIOV( typeName,
367  key,key,
368  tag,
369  start,
370  stop) );
371 }
372 
373 //--------------------------------------------------------------------------
374 
376  const std::string& key,
377  const std::string& folder,
378  const std::string& tag,
379  unsigned int beginRun,
380  unsigned int endRun,
381  unsigned int beginLB,
382  unsigned int endLB ) const
383 {
384  IOVTime start;
385  start.setRunEvent( (unsigned long)beginRun, (unsigned long)beginLB );
386  IOVTime stop;
387  stop.setRunEvent ( (unsigned long)endRun, (unsigned long)endLB );
388 
389  return ( registerIOV( typeName,
390  key,
391  folder,
392  tag,
393  start,
394  stop) );
395 }
396 
397 //--------------------------------------------------------------------------
398 
400  const std::string& key,
401  const std::string& folder,
402  const std::string& tag,
403  uint64_t beginTime,
404  uint64_t endTime ) const
405 {
406  IOVTime start;
407  start.setTimestamp( beginTime );
408  IOVTime stop;
409  stop.setTimestamp ( endTime );
410 
411  return ( registerIOV( typeName,
412  key,
413  folder,
414  tag,
415  start,
416  stop) );
417 }
418 
420 // Private methods
422 
423 //--------------------------------------------------------------------------
424 
426  const std::string& spec_key,
427  const std::string& folder,
428  const std::string& tag,
429  const IOVTime& start,
430  const IOVTime& stop ) const
431 {
432  // Register the conditions objects in the IOV database with
433  // start/stop as the time interval
434 
435 
436  msg() << MSG::DEBUG <<" in registerIOV()"
437  << " typename: " << typeName << " - tag: " << tag;
438  if (spec_key.empty())
439  {
440  msg() << " key: *empty* " << endmsg;
441  }
442  else
443  {
444  msg() << " spec_key " << spec_key << endmsg;
445  }
446  msg() << " - begin time: " << start
447  << " - end time: " << stop
448  << endmsg;
449 
450  // Check validity of start/stop
451  if(start.isBoth() || stop.isBoth() ||
452  start.isTimestamp() != stop.isTimestamp() ||
453  start.isRunEvent() != stop.isRunEvent()) {
454  ATH_MSG_ERROR ("Incorrect start/stop: "
455  << " isBoth: " << start.isBoth() << ":" << stop.isBoth()
456  << " isTimestamp: " << start.isTimestamp() << ":" << stop.isTimestamp()
457  << " isRunEvent: " << start.isRunEvent() << ":" << stop.isRunEvent());
458  return( StatusCode::FAILURE);
459  }
460 
461  return registerIOVCOOL( typeName,
462  spec_key,
463  folder,
464  tag,
465  start,
466  stop );
467 }
468 
469 
470 
471 //--------------------------------------------------------------------------
472 
474  const std::string& spec_key,
475  const std::string& folderName,
476  const std::string& tag,
477  const IOVTime& start,
478  const IOVTime& stop ) const
479 {
480  // Register the conditions objects in the IOV database with
481  // start/stop as the time interval
482 
483 
484  ATH_MSG_DEBUG (" in registerIOVCOOL()" );
485 
486 
487  // Find the clid for type name from the CLIDSvc
488  CLID clid;
489  StatusCode sc = m_clidSvc->getIDOfTypeName(typeName, clid);
490  if (sc.isFailure()) {
491  ATH_MSG_ERROR ("Could not get clid for typeName " << typeName);
492  return( StatusCode::FAILURE);
493  }
494 
495  try {
496 
497  // There are two possible states:
498  // 1) The DataObject is stored elsewhere and we store in the
499  // IOVDb only a stringified ref to the object, or
500  // 2) The DataObject is an AthenaAttributeList or a
501  // CondAttrListCollection and then we store it directly into
502  // the IOVDb.
503  //
504  // The second case is detected either with the type name,
505  // for AthenaAttributeList or CondAttrListCollection, or by
506  // checking the real type of the IOA - i.e. if it is a
507  // CondAttrListCollAddress then a CondAttrListCollection may
508  // have been filled with pool refs stored in it.
509 
510  bool storeRef = true;
511  bool storeAttrListColl = false;
512  bool needSGaddr=false;
513  if ("AthenaAttributeList" == typeName) {
514  storeRef = false;
515  needSGaddr=false;
516  }
517  if ("CondAttrListCollection" == typeName) {
518  storeRef = false;
519  storeAttrListColl = true;
520  needSGaddr=false;
521  }
522  // (See after retrieval of the IOA for a final check of the
523  // type of storage.)
524 
525  // Get IOpaqueAddress, key and symlinks for each data object
526  // from StoreGate
527  IOpaqueAddress* addr=0;
528  std::string key = spec_key;
529  std::vector<CLID> symlinks;
531  if (key.empty()) {
532  // Get IOpaqueAddress and key for each data object from
533  // StoreGate
534  proxy = m_detStore->proxy(clid);
535  if (!proxy) {
536  ATH_MSG_ERROR ("Could not get proxy for clid " << clid);
537  return( StatusCode::FAILURE);
538  }
539 
540  // Get key to be used for folder name
541  key = proxy->name();
542  // get proxy address - this will fail if object not streamed out
543  // but this can be recovered later for inline data
544  addr = proxy->address();
545  } else {
546  // Get IOpaqueAddress for each data object from StoreGate
547  proxy = m_detStore->proxy(clid, key);
548  if (!proxy) {
549  ATH_MSG_ERROR ("Could not get proxy for clid " << clid << " and key " << key);
550  return( StatusCode::FAILURE );
551  }
552  // get proxy address - this will fail if object not streamed out
553  // but this can be recovered later for inline data
554  addr = proxy->address();
555  }
556  std::string saddr;
557  if (addr) {
558  // Get symlinks, if any
559  symlinks = proxy->transientID();
560  auto it = std::find (symlinks.begin(), symlinks.end(), clid);
561  if (it != symlinks.end()) {
562  symlinks.erase (it);
563  }
564 
565  // Check whether the IOA is a CondAttrListCollAddress - if so
566  // we will store a CondAttrListCollection
567  CondAttrListCollAddress* collAddr = dynamic_cast<CondAttrListCollAddress*>(addr);
568  if (collAddr) {
569  storeRef = false;
570  storeAttrListColl = true;
571  }
572  // Convert IOpaqueAddress to string via the persistency
573  // service. We then store the string address in the IOV DB
574  sc = m_persSvc->convertAddress(addr, saddr);
575  if (sc.isFailure()) {
576  ATH_MSG_WARNING ("Could not get string from IOpaqueAddress for clid " << clid
577  << " is BAD_STORAGE_TYPE: " << (sc == IConversionSvc::Status::BAD_STORAGE_TYPE));
578  return( StatusCode::FAILURE);
579  }
580  ATH_MSG_DEBUG ("String address = \"" << saddr << "\"");
581  } else {
582  // if no addr was found, object has not been streamed out
583  // this is OK providing we do not need the addr later
584  // i.e. plain CondAttrListCollection or AthenaAttributeList
585  if (needSGaddr) {
586  ATH_MSG_ERROR ("Could not get address for clid " << clid);
587  return( StatusCode::FAILURE );
588  } else {
589  ATH_MSG_DEBUG ("Faking address for " << typeName);
590  // fake the saddr contents
591  if ("AthenaAttributeList" == typeName) {
592  saddr="<address_header service_type=\"256\" clid=\"40774348\" /> POOLContainer_AthenaAttributeList][CLID=x";
593  } else if ("CondAttrListCollection" == typeName) {
594  saddr="<address_header service_type=\"256\" clid=\"1238547719\" /> POOLContainer_CondAttrListCollection][CLID=x";
595  } else {
596  ATH_MSG_ERROR ("Cannot fake stringaddress for typename "
597  << typeName);
598  }
599  }
600  }
601 
602  ATH_MSG_DEBUG ("Storing ref: " << storeRef
603  << " Storing AttrListCollection: " << storeAttrListColl);
604 
605  // Set folder name - in the present case this is defined
606  // to be the key
607  // RJH - unless a non-null folder is given on input
608  std::string local_folder;
609  if (""==folderName) {
610  local_folder = key;
611  } else {
612  local_folder=folderName;
613  }
614  ATH_MSG_DEBUG ("Using folder name " << local_folder);
615 
616  // Get COOL database in update mode (false == readOnly flag)
617  cool::IDatabasePtr db = m_iov_db->getDatabase(false);
618  if (!db) {
619  ATH_MSG_ERROR ("Could not get pointer to COOL db ");
620  return(StatusCode::FAILURE);
621  }
622  // get some information about the database connection for later checks
623  const cool::DatabaseId& dbid=db->databaseId();
624  // look for direct connection to production accounts
625  bool dbidprod=(dbid.find("oracle")!=std::string::npos && (
626  dbid.find("ATLAS_COOLONL_")!=std::string::npos ||
627  dbid.find("ATLAS_COOLOFL_")!=std::string::npos ||
628  dbid.find("ATLAS_COOL_")!=std::string::npos));
629  // look for use of writer account ('_W' in connection string)
630  bool dbidwriter=(dbid.find("oracle")!=std::string::npos &&
631  dbid.find("_W")!=std::string::npos);
632  ATH_MSG_DEBUG ("Identified prod/writer " << dbidprod << dbidwriter);
633  // do not allow write accesss to production servers
634  if (dbidprod) {
635  ATH_MSG_FATAL ("Direct update of production Oracle servers from Athena is FORBIDDEN");
636  ATH_MSG_FATAL ("Please write to SQLite file and then merge with AtlCoolMerge.py");
637  return StatusCode::FAILURE;
638  }
639 
640  // For AthenaAttributeList/CondAttrListCollection, save a pointer to the object
641  const AthenaAttributeList* attrList = 0;
642  const CondAttrListCollection* attrListColl = 0;
643 
644  if (!storeRef) {
645  if ("CondAttrListCollection"==typeName) {
646  if (StatusCode::SUCCESS!=m_detStore->
647  retrieve(attrListColl,key)) {
648  ATH_MSG_ERROR ("Could not find CondAttrListCollecton for "
649  << key);
650  return StatusCode::FAILURE;
651  }
652  } else if (storeAttrListColl) {
653  // have to go through SG proxy, as it is a collection of POOLref
654  if (addr) {
655  CondAttrListCollAddress* attrAddr = dynamic_cast<CondAttrListCollAddress*>(addr);
656  if (attrAddr) {
657  // Successful cast
658  attrListColl = attrAddr->attrListColl();
659  ATH_MSG_DEBUG ("Set attr list coll ptr ");
660  ATH_MSG_DEBUG ("addr, attrAddr, coll "
661  << addr << " " << attrAddr << " " << attrListColl);
662  } else {
663  ATH_MSG_ERROR ("Could not extract ptr for CondAttrListCollAddress ");
664  return StatusCode::FAILURE;
665  }
666  } else {
667  ATH_MSG_ERROR ("Cannot write out collection of POOLref without streaming them first" );
668  return StatusCode::FAILURE;
669  }
670  } else {
671  // Just AttrList - get directly from Storegate
672  if (StatusCode::SUCCESS!=m_detStore->retrieve(attrList,key)) {
673  ATH_MSG_ERROR ("Could not find AthenaAttributeList for "
674  << key);
675  return StatusCode::FAILURE;
676  }
677  }
678 
679  }
680 
681 
682  ATH_MSG_DEBUG ("Set attr list coll ptr " << attrListColl);
683 
684  // Save folder pointer
685  cool::IFolderPtr folder;
686 
687  // Create folders if required - a job option allows on to
688  // delete existing folders and then recreate them
689 
690  bool createFolders = false;
691 
692  if(db->existsFolder(local_folder)) {
693 
694  if (m_recreateFolders) {
695  // do not allow this action on production schema or with writer
696  if (dbidprod || dbidwriter) {
697  ATH_MSG_FATAL ("Apparent attempt to delete folder on production COOL schema " << dbid);
698  return StatusCode::FAILURE;
699  }
700 
701  ATH_MSG_DEBUG (" Deleting existing COOL Folder " << local_folder);
702  db->dropNode( local_folder );
703  createFolders = true;
704  }
705  else {
706  // Get folder
707  ATH_MSG_DEBUG ("COOL Folder " << local_folder << " exists");
708  folder = db->getFolder(local_folder);
709  }
710 
711  }
712  else {
713  ATH_MSG_DEBUG ("COOL Folder " << local_folder
714  << " does not exist - must create it");
715  createFolders = true;
716  }
717 
718  // Split the string address into header and data parts
719  std::string address_header;
720  std::string address_data;
721 
722  sc = splitAddress(saddr,address_header,address_data);
723  if (sc.isFailure()) {
724  ATH_MSG_ERROR ("Could not split address: "
725  << "addr: " << saddr << "\n"
726  << "hdr: " << address_header << "\n"
727  << "data " << address_data);
728  return( StatusCode::FAILURE);
729  }
730  msg() << MSG::DEBUG <<"split address: " << saddr << endmsg
731  << " hdr: " << address_header << endmsg
732  << " data: " << address_data << endmsg;
733 
734 
735  if(createFolders) {
736  // first make sure not using writer account -if so abort
737  if (dbidwriter) {
738  ATH_MSG_FATAL ("Apparent attempt to create folder using writer account, dbID is: " << dbid);
739  return StatusCode::FAILURE;
740  }
741 
742  // We store extra information in the folder description.
743  // This info is:
744  // typeName - required information
745  // symlinks - the extra StoreGate keys, if any
746  // key - optional, only needed if key != folder name
747  // timeStamp - either run-lumi (default) or time
748  // address_header - added by convention
749  //
750  //
751  // The convention is that the address_header is stored
752  // in the description, and the IOV interval data
753  // payload is just the pool reference in string form.
754  // The address_header and address_data can be obtained
755  // from the string address returned from the
756  // persistency service, using splitAddress
757 
758  std::string mergedNames;
759 
760  sc = buildDescription( "typeName", typeName,
761  mergedNames );
762  if (sc.isFailure()) {
763  ATH_MSG_ERROR ("Could not merge towards merged description: "
764  << "typeName: " << typeName);
765  return( StatusCode::FAILURE);
766  }
767 
768  sc = buildDescription( "addrHeader", address_header,
769  mergedNames );
770  if (sc.isFailure()) {
771  ATH_MSG_ERROR ("Could not merge towards merged description: "
772  << "addrHeader: " << address_header);
773  return( StatusCode::FAILURE);
774  }
775  // RJH - if key is not same as folder, and we want the read-back
776  // objects to end up in the TDS with the given Storegate key rather
777  // than the folder name, need to set the <key> attribute
778  // a jobOption WriteKeyInfo=FALSE disables this, in case you have
779  // created objects with the 'wrong' SG key and want the key
780  // on read-back to correspond to the folder name
781  if (local_folder!=key && m_writeKeyInfo) {
782  sc=buildDescription("key",key,mergedNames);
783  if (sc.isFailure()) {
784  ATH_MSG_ERROR ("Could not merge towards merged description: "
785  << "key: " << key);
786  return( StatusCode::FAILURE);
787  }
788  }
789 
790  // Add in symlink types
791  if (!symlinks.empty()) {
792  std::string symlinkTypes;
793  for (unsigned int i = 0; i < symlinks.size(); ++i) {
794  std::string type;
795  sc = m_clidSvc->getTypeNameOfID(symlinks[i], type);
796  if (sc.isFailure()) {
797  ATH_MSG_ERROR ("Could not get type name for symlink clid "
798  << symlinks[i]);
799  return( StatusCode::FAILURE);
800  }
801  else {
802  ATH_MSG_DEBUG ("adding symlink: clid, type "
803  << symlinks[i] << " " << type);
804  }
805  if (symlinkTypes.size()) symlinkTypes += ':';
806  symlinkTypes += type;
807  }
808  sc=buildDescription("symlinks", symlinkTypes, mergedNames);
809  if (sc.isFailure()) {
810  msg() << MSG::ERROR <<"Could not merge symlinks to merged description: "
811  << "symlink types: ";
812  for (unsigned int i = 0; i < symlinkTypes.size(); ++i) {
813  msg() << MSG::ERROR << symlinkTypes[i] << " ";
814  }
815  msg() << MSG::ERROR << endmsg;
816  return( StatusCode::FAILURE);
817  }
818  else {
819  ATH_MSG_DEBUG ("symlinks, merged names "
820  << symlinkTypes << " " << mergedNames);
821  }
822  }
823 
824  // Type of time is defined by start/stop
825 
826  // Some checks on the times:
827  if (!start.isValid() ||
828  !stop.isValid() ||
829  start.isTimestamp() != stop.isTimestamp() ||
830  start.isRunEvent() != stop.isRunEvent()) {
831  ATH_MSG_ERROR ("Invalid times: start isValid/isTimeStamp/isRunEvent "
832  << "addrHeader: " << address_header
833  << start.isValid() << " " << start.isTimestamp() << " "
834  << start.isRunEvent());
835  ATH_MSG_ERROR ("Invalid times: stop isValid/isTimeStamp/isRunEvent "
836  << "addrHeader: " << address_header
837  << stop.isValid() << " " << stop.isTimestamp() << " "
838  << stop.isRunEvent());
839  return( StatusCode::FAILURE);
840  }
841  bool isTimeStamp = false;
842  if (start.isTimestamp()) isTimeStamp = true;
843 
844  if (isTimeStamp)
845  {
846  sc = buildDescription( "timeStamp", "time",
847  mergedNames );
848  }
849  else
850  {
851  sc = buildDescription( "timeStamp", "run-lumi",
852  mergedNames );
853  }
854  if (sc.isFailure()) {
855  ATH_MSG_ERROR ("Could not merge timeStamp flag towards merged description. ");
856  return( StatusCode::FAILURE);
857  }
858  // add <named/> for channels with names
859  if (storeAttrListColl && attrListColl!=0 &&
860  attrListColl->name_size()>0) mergedNames+="<named/>";
861 
862  ATH_MSG_DEBUG (" create folder " << local_folder
863  << " with description " << mergedNames);
864 
865  // Create folder
866 
867  ATH_MSG_DEBUG ("Set attr list coll ptr " << attrListColl);
868 
869  cool::RecordSpecification payloadSpec;
870  if (storeRef) {
871  // Folder with refs only:
872  // Payload specification - contains just a string
873  // assuming POOL refs will not be longer than 4000 chars
874  payloadSpec.extend("PoolRef",cool::StorageType::String4k);
875  }
876  else {
877  // Store AttributeList or a collection of AttributeLists
878  const coral::AttributeList* atr4spec=0;
879  if (storeAttrListColl) {
880 
881  // Folder with CondAttrListCollection itself
882  // Get the attribute spec from the first element in the collection
883  if (0 == attrListColl) {
884  ATH_MSG_ERROR ("attrListColl not found. ");
885  return( StatusCode::FAILURE);
886  }
887 
888  if (0 == attrListColl->size()) {
889  ATH_MSG_ERROR ("attrListColl is empty. ");
890  return( StatusCode::FAILURE);
891  }
892  // FIXME
893  ATH_MSG_DEBUG ("Size of AttrList collection" <<
894  attrListColl->size());
895 
896  atr4spec=&((*attrListColl->begin()).second);
897  } else {
898  // folder with simple AttributeList
899  atr4spec=attrList;
900  ATH_MSG_DEBUG ("In simple atrlist branch");
901  }
902  ATH_MSG_DEBUG ("Pointer to atrList is " << atr4spec);
903  // construct COOL specification
904  for (coral::AttributeList::const_iterator itr=
905  atr4spec->begin();itr!=atr4spec->end();++itr) {
906  // extend specification with appropriate COOL type
907  // giving opportunity to override default choice
908  payloadSpec.extend(itr->specification().name(),
909  coralToCoolType(itr->specification().name(),
910  itr->specification().typeName()));
911  }
912  }
913  // create folder
915  cool::FolderVersioning::MULTI_VERSION;
916  if (m_svFolder) {
917  version=cool::FolderVersioning::SINGLE_VERSION;
918  ATH_MSG_INFO ("Creating single version folder for "
919  << local_folder);
920  }
921  if (m_payloadTable)
922  ATH_MSG_INFO ("Creating separate payload table for "
923  << local_folder);
924  cool::FolderSpecification folderSpec(version,payloadSpec,cool::PayloadMode::SEPARATEPAYLOAD);
925  folder = db->createFolder(local_folder,folderSpec,
926  mergedNames,true);
927  ATH_MSG_DEBUG ("Creation of CondDBFolder " <<
928  local_folder << " done");
929 
930  // create channels if needed - only for CondAttrListColl with names
931  if (storeAttrListColl && attrListColl!=0 &&
932  attrListColl->name_size()>0) {
933  ATH_MSG_DEBUG ("Naming " << attrListColl->name_size() <<
934  " channels in " << local_folder);
936  attrListColl->name_begin();
937  nitr!=attrListColl->name_end();++nitr) {
938  folder->createChannel(nitr->first,nitr->second);
939  }
940  }
941  }
942 
943  // Print out stop/start ONLY for non-collections - collections
944  // have a per-channel start/stop
945  if (storeAttrListColl) {
946  ATH_MSG_DEBUG (" Global Start/stop time: "
947  << start << " " << stop << " Note: will be ignored for channels with differnt IOVs " );
948  }
949  else {
950  ATH_MSG_DEBUG (" Start/stop time " << start << " " << stop << " ");
951  }
952 
953  // Convert IOVTime to ValidityKey
954  cool::ValidityKey ivStart = start.re_time();
955  cool::ValidityKey ivStop = stop.re_time();
956  if(start.isTimestamp()) {
957  ivStart = start.timestamp();
958  ivStop = stop.timestamp();
959  }
960 
961  // get record specification of folder
962 
963  const cool::RecordSpecification& rspec=folder->payloadSpecification();
964 
965  if (storeAttrListColl) {
966  //
967  // Need to store multiple channels
968  //
969  // The policy for the IOV of each channel is to use the
970  // channel IOV already stored in the collection, if it is
971  // there. If it is not there, then use the global IOV.
972  //
973  if (storeRef) {
974  // Should NOT get here for a collection, signal error
975  ATH_MSG_ERROR ("Trying to store a ref for a CondAttrListCollection. ");
976  return( StatusCode::FAILURE);
977  }
978 
979  ATH_MSG_DEBUG (" --> Storing Object( " << start << ", " << stop
980  << ", " << tag << " )");
981  ATH_MSG_DEBUG (" --> address: " << address_data);
982  // Loop over collection
984  CondAttrListCollection::const_iterator last = attrListColl->end();
985  for (; first != last; ++first) {
986 
987  // Copy from retrieved attribute list
988  const coral::AttributeList& payload = (*first).second;
989  // Get channel id
990  CondAttrListCollection::ChanNum chanNum = (*first).first;
991 
992  // Check whether to use already stored IOV, or the
993  // global IOV
994  cool::ValidityKey ivStart1 = ivStart;
995  cool::ValidityKey ivStop1 = ivStop;
997  std::ostringstream attr;
998  payload.toOutputStream( attr );
999  ATH_MSG_DEBUG (" --> ChanNum: " << chanNum << " Payload: " << attr.str());
1000  if (!m_forceGlobalIOV && iovIt != attrListColl->iov_end()) {
1001  const IOVRange& range = (*iovIt).second;
1002  if(range.start().isTimestamp()) {
1003  ivStart1 = range.start().timestamp();
1004  ivStop1 = range.stop().timestamp();
1005  }
1006  else {
1007  ivStart1 = range.start().re_time();
1008  ivStop1 = range.stop().re_time();
1009  }
1010  ATH_MSG_DEBUG (" --> Start/stop time "
1011  << range.start() << " " << range.stop() << " ");
1012  }
1013  else {
1014  ATH_MSG_DEBUG (" --> Start/stop time "
1015  << start << " " << stop << " ");
1016  }
1017 
1018  // Store address in folder with interval
1019  cool::Record record(rspec,payload);
1020  if (m_userTags && tag!="") {
1021  ATH_MSG_DEBUG ("Object stored with user tag " << tag );
1022  folder->storeObject( ivStart1,
1023  ivStop1,
1024  record,
1026  } else {
1027  folder->storeObject( ivStart1,
1028  ivStop1,
1029  record,
1030  chanNum);
1031  }
1032  }
1033  }
1034  else {
1035  // Store a single channel
1036  cool::Record record(rspec);
1037  if (storeRef) {
1038  // PayLoad is ONLY the ref
1039  record["PoolRef"].setValue<std::string>(address_data);
1040  }
1041  else {
1042  // Copy from retrieved attribute list
1043  record=cool::Record(rspec,*attrList);
1044  }
1045 
1046  // Store address in folder with interval
1047  if (m_userTags && tag!="") {
1048  ATH_MSG_DEBUG ("Object stored with user tag " << tag );
1049  folder->storeObject( ivStart,
1050  ivStop,
1051  record,0,tag,!m_userTagsUH);
1052  } else {
1053  folder->storeObject( ivStart,
1054  ivStop,
1055  record,0);
1056  }
1057 
1058  ATH_MSG_DEBUG (" --> Stored Object( " << start << ", " << stop
1059  << ", " << tag << " )");
1060  ATH_MSG_DEBUG (" --> address: " << address_data);
1061  }
1062 
1063  ATH_MSG_DEBUG (" storeData OK ");
1064 
1065  // Now tag the folder if required
1066  if (!m_userTags) {
1067  if ("" == tag) {
1068  ATH_MSG_DEBUG (" tag is empty - folder is not being tagged ");
1069  }
1070  else {
1071  ATH_MSG_INFO (" Tagging HEAD of folder " << local_folder <<
1072  " with tag " << tag);
1073  try {
1074  folder->tagCurrentHead(tag,m_tagDescription);
1075  }
1076  catch ( cool::TagExists& e) {
1077  ATH_MSG_INFO ("Tag " << tag <<
1078  " exists - attempt to delete tag and retag HEAD");
1079  // first check this tag is really defined in THIS folder
1080  std::vector<std::string> taglist=folder->listTags();
1081  if (find(taglist.begin(),taglist.end(),tag)==
1082  taglist.end()) {
1083  ATH_MSG_ERROR ("Tag is defined in another folder - tag names must be global");
1084  } else if (folder->existsUserTag(tag)) {
1085  // this is a COOL user tag, in which case user
1086  // is trying to mix user and HEAD tags, not allowed in COOL1.3
1087  ATH_MSG_ERROR ("Tag " << tag <<
1088  " is already USER tag - cannot mix tagging modes");
1089  } else {
1090  try {
1091  folder->deleteTag(tag);
1092  folder->tagCurrentHead(tag,m_tagDescription);
1093  ATH_MSG_INFO ("Delete and retag succeeded");
1094  }
1095  catch ( cool::TagNotFound& e) {
1096  ATH_MSG_ERROR ("Delete and retag HEAD failed");
1097  }
1098  }
1099  }
1100  }
1101  }
1102  return StatusCode::SUCCESS;
1103  }
1104 
1105  catch (std::exception& e) {
1106  ATH_MSG_ERROR ("*** COOL exception caught: " << e.what() );
1107  // << "\n"
1108  // << "*** error code: " << e.code()
1109  return StatusCode::FAILURE;
1110  }
1111 
1112  //return StatusCode::SUCCESS;
1113 }
1114 
1116  const std::string& parname,const std::string& coralName) const {
1117  // map coral type onto corresponding COOL storage type
1118  std::string coralType=coralName;
1119  // check for any overrides
1120  for (unsigned int i=0;i<m_overrideType.size();++i) {
1121  if (m_overrideName[i]==parname) {
1122  coralType=m_overrideType[i];
1123  ATH_MSG_INFO ("Override default type for attribute " <<
1124  parname << " - use " << coralType);
1125  }
1126  }
1127  // FIXME to include all CORAL/COOL types
1128  // give both the names of CORAL types, and COOL types which may get specified
1129  // as overrides
1130  if (coralType=="bool") return cool::StorageType::Bool;
1131  if (coralType=="UChar" || coralType=="unsigned char") return cool::StorageType::UChar;
1132  if (coralType=="Int16") return cool::StorageType::Int16;
1133  if (coralType=="UInt16") return cool::StorageType::UInt16;
1134  if (coralType=="Int32" || coralType=="int") return cool::StorageType::Int32;
1135  if (coralType=="UInt32" || coralType=="unsigned int") return cool::StorageType::UInt32;
1136  if (coralType=="UInt63" || coralType=="unsigned long long") return cool::StorageType::UInt63;
1137  if (coralType=="Int64" || coralType=="long long") return cool::StorageType::Int64;
1138  if (coralType=="Float" || coralType=="float") return cool::StorageType::Float;
1139  if (coralType=="Double" || coralType=="double") return cool::StorageType::Double;
1140  if (coralType=="String255") return cool::StorageType::String255;
1141  if (coralType=="String4k" || coralType=="string") return cool::StorageType::String4k;
1142  if (coralType=="String64k") return cool::StorageType::String64k;
1143  if (coralType=="String16M") return cool::StorageType::String16M;
1144  if (coralType=="blob" || coralType=="Blob64k")
1145  return cool::StorageType::Blob64k;
1146  if (coralType=="Blob16M") return cool::StorageType::Blob16M;
1147 
1148  // if we get here, mapping is undefined
1149  ATH_MSG_FATAL ("No COOL mapping defined for CORAL type " << coralName);
1150  throw std::exception();
1151 }
1152 
1153 
1154 //--------------------------------------------------------------------------
1155 
1156 uint64_t IOVRegistrationSvc::timeToNano(const unsigned long int timesec) const
1157 {
1158  // convert time specified in seconds to ns used by COOL
1159  // use the magic value MAXEVENT to signal full range
1160  if (timesec==IOVTime::MAXEVENT) {
1161  return IOVTime::MAXTIMESTAMP;
1162  } else {
1163  return static_cast<uint64_t>(timesec)*1000000000;
1164  }
1165 }
1166 
1168  const std::string& value,
1169  std::string& description) const {
1170  // this routine was originally in IOVDbSvc, moved here as only client
1171  // buids an XML fragment of form <identifier>value</identifier>
1172  if (identifier.empty() || value.empty()) {
1173  ATH_MSG_ERROR ("Identifier or value is null.");
1174  return StatusCode::FAILURE;
1175  }
1176  description = "<"+identifier+">"+value+"</"+identifier+">"+description;
1177  return StatusCode::SUCCESS;
1178 }
1179 
1181  std::string& address_header,
1182  std::string& address_data ) const {
1183  // this routine was originally in IOVDbSvc, moved here as only client
1184  // Deals with address of form
1185  // <address_header service_type="256" clid="1238547719" /> POOLContainer_CondAttrListCollection][CLID=x
1186  // return header as part up to and including />, trailer as rest
1187 
1188  std::string::size_type p1=address.find(" />");
1189  if (p1!=std::string::npos) {
1190  address_header=address.substr(0,p1+3);
1191  address_data=address.substr(p1+4);
1192  return StatusCode::SUCCESS;
1193  } else {
1194  return StatusCode::FAILURE;
1195  }
1196 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
IOVRegistrationSvc::~IOVRegistrationSvc
virtual ~IOVRegistrationSvc()
Definition: IOVRegistrationSvc.cxx:98
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
python.SystemOfUnits.second
int second
Definition: SystemOfUnits.py:120
CondAttrListCollection::end
const_iterator end() const
Definition: CondAttrListCollection.h:315
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
IOVRegistrationSvc::m_beginLB
UnsignedIntegerProperty m_beginLB
Definition: IOVRegistrationSvc.h:189
IOVRange
Validity Range object. Holds two IOVTimes (start and stop)
Definition: IOVRange.h:30
StateLessPT_NewConfig.proxy
proxy
Definition: StateLessPT_NewConfig.py:392
CondAttrListCollection::iov_end
iov_const_iterator iov_end() const
Definition: CondAttrListCollection.h:343
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
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
CondAttrListCollAddress.h
This file contains the class definition for the CondAttrListCollAddress class.
initialize
void initialize()
Definition: run_EoverP.cxx:894
IOVRegistrationSvc::m_svFolder
BooleanProperty m_svFolder
Definition: IOVRegistrationSvc.h:201
IOVRegistrationSvc::m_tag
StringProperty m_tag
Definition: IOVRegistrationSvc.h:195
CaloCondBlobAlgs_fillNoiseFromASCII.db
db
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:43
mergePhysValFiles.start
start
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:14
python.CaloCondTools.MINRUN
int MINRUN
Definition: CaloCondTools.py:23
python.CreateTierZeroArgdict.parname
parname
Definition: CreateTierZeroArgdict.py:194
TRTCalib_cfilter.p1
p1
Definition: TRTCalib_cfilter.py:130
skel.it
it
Definition: skel.GENtoEVGEN.py:396
IOVRegistrationSvc::m_writeKeyInfo
BooleanProperty m_writeKeyInfo
Definition: IOVRegistrationSvc.h:198
CondAttrListCollection::begin
const_iterator begin() const
Access to Chan/AttributeList pairs via iterators.
Definition: CondAttrListCollection.h:309
CheckTagAssociation.taglist
taglist
Definition: CheckTagAssociation.py:103
athena.value
value
Definition: athena.py:124
IOVRegistrationSvc::m_userTags
BooleanProperty m_userTags
Definition: IOVRegistrationSvc.h:199
PixelModuleFeMask_create_db.stop
int stop
Definition: PixelModuleFeMask_create_db.py:76
IOVRegistrationSvc::registerIOVCOOL
StatusCode registerIOVCOOL(const std::string &typeName, const std::string &key, const std::string &folderName, const std::string &tag, const IOVTime &begin, const IOVTime &end) const
Definition: IOVRegistrationSvc.cxx:473
python.PyKernel.AttributeList
AttributeList
Definition: PyKernel.py:36
xAOD::identifier
identifier
Definition: UncalibratedMeasurement_v1.cxx:15
IOVRegistrationSvc::m_endRun
UnsignedIntegerProperty m_endRun
Definition: IOVRegistrationSvc.h:188
CondAttrListCollection
This class is a collection of AttributeLists where each one is associated with a channel number....
Definition: CondAttrListCollection.h:52
CaloTime_fillDB.folderSpec
folderSpec
Definition: CaloTime_fillDB.py:92
AthenaAttributeList.h
IOVRegistrationSvc::m_endLB
UnsignedIntegerProperty m_endLB
Definition: IOVRegistrationSvc.h:190
CondAttrListCollection::iov_const_iterator
ChanIOVMap::const_iterator iov_const_iterator
Definition: CondAttrListCollection.h:66
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
IOVTime.h
Basic time unit for IOVSvc. Hold time as a combination of run and event numbers.
IOVRegistrationSvc::splitAddress
StatusCode splitAddress(const std::string &address, std::string &address_header, std::string &address_data) const
Split address in its header and data parts.
Definition: IOVRegistrationSvc.cxx:1180
CondAttrListCollAddress
This class provides the an IOpaqueAddress/GenericAddress which can hold a pointer to an CondAttrListC...
Definition: CondAttrListCollAddress.h:27
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
IOVRegistrationSvc::m_forceGlobalIOV
BooleanProperty m_forceGlobalIOV
Definition: IOVRegistrationSvc.h:203
IOVRegistrationSvc::initialize
virtual StatusCode initialize()
Initialize AlgTool.
Definition: IOVRegistrationSvc.cxx:109
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
checkCoolLatestUpdate.chanNum
chanNum
Definition: checkCoolLatestUpdate.py:27
IOVRegistrationSvc::m_iov_db
ServiceHandle< IIOVCondDbSvc > m_iov_db
Definition: IOVRegistrationSvc.h:207
lumiFormat.i
int i
Definition: lumiFormat.py:85
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
AthenaAttrListAddress.h
This file contains the class definition for theAthenaAttrListAddress class.
calibdata.exception
exception
Definition: calibdata.py:496
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
IOVTime::MAXTIMESTAMP
static constexpr uint64_t MAXTIMESTAMP
Definition: IOVTime.h:58
IOVRegistrationSvc::coralToCoolType
cool::StorageType::TypeId coralToCoolType(const std::string &parname, const std::string &coralName) const
Definition: IOVRegistrationSvc.cxx:1115
xAOD::uint64_t
uint64_t
Definition: EventInfo_v1.cxx:123
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
Handler::svc
AthROOTErrorHandlerSvc * svc
Definition: AthROOTErrorHandlerSvc.cxx:10
IOVRegistrationSvc::m_overrideType
std::vector< std::string > m_overrideType
Definition: IOVRegistrationSvc.h:205
CLID
uint32_t CLID
The Class ID type.
Definition: Event/xAOD/xAODCore/xAODCore/ClassID_traits.h:47
CondAttrListCollection::ChanNum
unsigned int ChanNum
Definition: CondAttrListCollection.h:55
IOVRegistrationSvc::m_persSvc
ServiceHandle< IAddressCreator > m_persSvc
Definition: IOVRegistrationSvc.h:209
IOVRegistrationSvc::m_recreateFolders
BooleanProperty m_recreateFolders
Definition: IOVRegistrationSvc.h:186
CondAttrListCollection::name_begin
name_const_iterator name_begin() const
Access to Chan/Name pairs via iterators.
Definition: CondAttrListCollection.h:364
IOVTime::MAXEVENT
static constexpr uint32_t MAXEVENT
Definition: IOVTime.h:51
IOVRegistrationSvc::m_endTime
UnsignedLongProperty m_endTime
Definition: IOVRegistrationSvc.h:193
CondAttrListCollection::name_size
name_size_type name_size() const
number of Chan/Name pairs
Definition: CondAttrListCollection.h:377
CondAttrListCollAddress::attrListColl
CondAttrListCollection * attrListColl()
Access to AttributeList.
Definition: CondAttrListCollAddress.h:120
CaloCellTimeCorrFiller.folderName
string folderName
Definition: CaloCellTimeCorrFiller.py:20
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
EventContainers::Mode
Mode
Definition: IdentifiableContainerBase.h:13
python.CaloCondTools.MAXRUN
MAXRUN
Definition: CaloCondTools.py:25
RTTAlgmain.address
address
Definition: RTTAlgmain.py:55
CondAttrListCollection::size
size_type size() const
number of Chan/AttributeList pairs
Definition: CondAttrListCollection.h:322
PixelModuleFeMask_create_db.payload
string payload
Definition: PixelModuleFeMask_create_db.py:69
IOVRegistrationSvc::m_clidSvc
ServiceHandle< IClassIDSvc > m_clidSvc
Definition: IOVRegistrationSvc.h:210
IOVRegistrationSvc::finalize
virtual StatusCode finalize()
Finalize AlgTool.
Definition: IOVRegistrationSvc.cxx:182
IOVRegistrationSvc::buildDescription
virtual StatusCode buildDescription(const std::string &identifier, const std::string &value, std::string &description) const
Build the folder description field add in front of the description the value with identifier-markups.
Definition: IOVRegistrationSvc.cxx:1167
IOVRegistrationSvc::type
virtual const InterfaceID & type() const
Service type.
Definition: IOVRegistrationSvc.cxx:101
IOVRegistrationSvc.h
This is an interface to a tool used to register conditions objects in the Interval of Validity (IOV) ...
get_generator_info.version
version
Definition: get_generator_info.py:33
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
CondAttrListCollection::const_iterator
ChanAttrListMap::const_iterator const_iterator
Definition: CondAttrListCollection.h:63
TransientAddress.h
IOVRegistrationSvc::registerIOV
virtual StatusCode registerIOV(const std::string &typeName) const
Register IOV DB for an object given its typeName - run/LB numbers interval or times interval and tag ...
Definition: IOVRegistrationSvc.cxx:189
DeMoScan.first
bool first
Definition: DeMoScan.py:536
IOVRegistrationSvc::m_payloadTable
BooleanProperty m_payloadTable
Definition: IOVRegistrationSvc.h:202
DEBUG
#define DEBUG
Definition: page_access.h:11
IOVRegistrationSvc::m_userTagsUH
BooleanProperty m_userTagsUH
Definition: IOVRegistrationSvc.h:200
IOVRegistrationSvc::m_beginTime
UnsignedLongProperty m_beginTime
Definition: IOVRegistrationSvc.h:192
CaloCondBlobAlgs_fillNoiseFromASCII.folder
folder
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:56
ReadCalibFromCool.typeName
typeName
Definition: ReadCalibFromCool.py:477
IIOVCondDbSvc.h
IOVRegistrationSvc::m_timeStamp
BooleanProperty m_timeStamp
Definition: IOVRegistrationSvc.h:196
CaloCondBlobAlgs_fillNoiseFromASCII.tag
string tag
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:24
IOVRegistrationSvc::m_overrideName
std::vector< std::string > m_overrideName
Definition: IOVRegistrationSvc.h:204
CondAttrListCollection::chanIOVPair
iov_const_iterator chanIOVPair(ChanNum chanNum) const
Access to Chan/IOV pairs via channel number: returns map iterator.
Definition: CondAttrListCollection.h:330
IOVRegistrationSvc::IOVRegistrationSvc
IOVRegistrationSvc(const std::string &name, ISvcLocator *svc)
Definition: IOVRegistrationSvc.cxx:51
SG::DataProxy
Definition: DataProxy.h:45
IOVRegistrationSvc::m_beginRun
UnsignedIntegerProperty m_beginRun
Definition: IOVRegistrationSvc.h:187
Crest::TypeId
TypeId
Definition: CrestContainer.h:24
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7
IOVRegistrationSvc::m_detStore
ServiceHandle< StoreGateSvc > m_detStore
Definition: IOVRegistrationSvc.h:208
IOVRegistrationSvc::timeToNano
uint64_t timeToNano(const unsigned long int timesec) const
Definition: IOVRegistrationSvc.cxx:1156
lumiFormat.endTime
endTime
Definition: lumiFormat.py:100
CondAttrListCollection::name_end
name_const_iterator name_end() const
Definition: CondAttrListCollection.h:370
description
std::string description
glabal timer - how long have I taken so far?
Definition: hcg.cxx:88
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
IOVRegistrationSvc::m_tagDescription
StringProperty m_tagDescription
Definition: IOVRegistrationSvc.h:197