ATLAS Offline Software
TrigTSerializer.cxx
Go to the documentation of this file.
1 // -*- C++ -*-
2 
3 /*
4  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
5 */
6 
11 
12 
13 
14 
15 #include "TrigTSerializer.h"
16 #include "SerializeCommon.h"
18 #include "TROOT.h"
19 #include "TBufferFile.h"
20 #include "TClass.h"
21 #include "TError.h"
22 #include "TMethodCall.h"
23 #include <vector>
24 #include <string>
25 #include <iostream>
26 
27 //
28 #include "TFile.h"
29 #include "TList.h"
30 #include "TStreamerInfo.h"
32 
33 #include "DataModelRoot/RootType.h"
36 
37 #define TRIGTSERHEADER 0xf00dbeef
38 //#define TRIGTSERTRAILER 0xbeeff00d
39 #define TRIGTSERVERSION 0x0005U
40 
41  /*
42  * Format description:
43  * 1) versioning starts with version 0x0001
44  * 2) before that the root buffer was copied to ints
45  * 3) version 0001 introduces
46  * 4-byte header,
47  * 4-byte version,
48  * 4-bytes of the original Root buffer length buffersize
49  * buffersize/4 + bufsiz%4 integers of payload,
50  *
51  * version 2: attempt to decode non-versioned streams as
52  * version 0x0000 of the TrigTSerializer
53  *
54  * version 3: fix sending of bufsiz%4 integers (pointed out by Brian),
55  * in version 2 they do not contain useful data
56  *
57  * version 4: store an additional unsigned int identifying TP converter
58  * used to persistify the object (was never used)
59  *
60  * version 5: stores GUID along of the persistent class in the preambule
61  *
62  */
63 
64 
65 #include "TSchemaRuleSet.h"
66 #include "TExMap.h"
67 namespace ROOT8367Workaround {
68 const Int_t kMapOffset = 2; // first 2 map entries are taken by null obj and self obj
69 
70 
71 // Work around ROOT-8367
72 
74  : public TBufferFile
75 {
76 public:
77  void* ReadObjectAnyNV (const TClass*);
78  static void* doReadObjectAny NO_SANITIZE_UNDEFINED (TBufferFile* buf, const TClass* cl)
79  {
80  TBufferFileWorkaround* ba = reinterpret_cast<TBufferFileWorkaround*>(buf);
81  return ba->ReadObjectAnyNV(cl);
82  }
83 };
84 
85 
86 void* TBufferFileWorkaround::ReadObjectAnyNV(const TClass *clCast)
87 {
88  R__ASSERT(IsReading());
89 
90  // make sure fMap is initialized
91  InitMap();
92 
93  // before reading object save start position
94  UInt_t startpos = UInt_t(fBufCur-fBuffer);
95 
96  // attempt to load next object as TClass clCast
97  UInt_t tag; // either tag or byte count
98  TClass *clRef = ReadClass(clCast, &tag);
99  TClass *clOnfile = 0;
100  Int_t baseOffset = 0;
101  if (clRef && (clRef!=(TClass*)(-1)) && clCast) {
102  //baseOffset will be -1 if clRef does not inherit from clCast.
103  baseOffset = clRef->GetBaseClassOffset(clCast);
104  if (baseOffset == -1) {
105  // The 2 classes are unrelated, maybe there is a converter between the 2.
106 
107  if (!clCast->GetSchemaRules() ||
108  !clCast->GetSchemaRules()->HasRuleWithSourceClass(clRef->GetName()))
109  {
110  // There is no converter
111  Error("ReadObject", "got object of wrong class! requested %s but got %s",
112  clCast->GetName(), clRef->GetName());
113 
114  CheckByteCount(startpos, tag, (TClass*)0); // avoid mis-leading byte count error message
115  return 0; // We better return at this point
116  }
117  baseOffset = 0; // For now we do not support requesting from a class that is the base of one of the class for which there is transformation to ....
118 
119  //Info("ReadObjectAny","Using Converter StreamerInfo from %s to %s",clRef->GetName(),clCast->GetName());
120  clOnfile = clRef;
121  clRef = const_cast<TClass*>(clCast);
122 
123  }
124  if (clCast->GetState() > TClass::kEmulated && clRef->GetState() <= TClass::kEmulated) {
125  //we cannot mix a compiled class with an emulated class in the inheritance
126  Error("ReadObject", "trying to read an emulated class (%s) to store in a compiled pointer (%s)",
127  clRef->GetName(),clCast->GetName());
128  CheckByteCount(startpos, tag, (TClass*)0); // avoid mis-leading byte count error message
129  return 0;
130  }
131  }
132 
133  // check if object has not already been read
134  // (this can only happen when called via CheckObject())
135  char *obj;
136  if (fVersion > 0) {
137  obj = (char *) (Long_t)fMap->GetValue(startpos+kMapOffset);
138  if (obj == (void*) -1) obj = 0;
139  if (obj) {
140  CheckByteCount(startpos, tag, (TClass*)0);
141  return (obj+baseOffset);
142  }
143  }
144 
145  // unknown class, skip to next object and return 0 obj
146  if (clRef == (TClass*) -1) {
147  if (fBufCur >= fBufMax) return 0;
148  if (fVersion > 0)
149  MapObject((TObject*) -1, startpos+kMapOffset);
150  else
151  MapObject((void*)0, 0, fMapCount);
152  CheckByteCount(startpos, tag, (TClass*)0);
153  return 0;
154  }
155 
156  if (!clRef) {
157 
158  // got a reference to an already read object
159  if (fVersion > 0) {
160  tag += fDisplacement;
161  tag = CheckObject(tag, clCast);
162  } else {
163  if (tag > (UInt_t)fMap->GetSize()) {
164  Error("ReadObject", "object tag too large, I/O buffer corrupted");
165  return 0;
166  // exception
167  }
168  }
169  obj = (char *) (Long_t)fMap->GetValue(tag);
170  clRef = (TClass*) (Long_t)fClassMap->GetValue(tag);
171 
172  if (clRef && (clRef!=(TClass*)(-1)) && clCast) {
173  //baseOffset will be -1 if clRef does not inherit from clCast.
174  baseOffset = clRef->GetBaseClassOffset(clCast);
175  if (baseOffset == -1) {
176  Error("ReadObject", "Got object of wrong class (Got %s while expecting %s)",
177  clRef->GetName(),clCast->GetName());
178  // exception
179  baseOffset = 0;
180  }
181  }
182 
183  // There used to be a warning printed here when:
184  // obj && isTObject && !((TObject*)obj)->IsA()->InheritsFrom(clReq)
185  // however isTObject was based on clReq (now clCast).
186  // If the test was to fail, then it is as likely that the object is not a TObject
187  // and then we have a potential core dump.
188  // At this point (missing clRef), we do NOT have enough information to really
189  // answer the question: is the object read of the type I requested.
190 
191  } else {
192 
193  // allocate a new object based on the class found
194  obj = (char*)clRef->New();
195  if (!obj) {
196  Error("ReadObject", "could not create object of class %s",
197  clRef->GetName());
198  // exception
199  return 0;
200  }
201 
202  // add to fMap before reading rest of object
203  if (fVersion > 0)
204  MapObject(obj, clRef, startpos+kMapOffset);
205  else
206  MapObject(obj, clRef, fMapCount);
207 
208  // let the object read itself
209  clRef->Streamer( obj, *this, clOnfile );
210 
211  CheckByteCount(startpos, tag, clRef);
212  }
213 
214  return obj+baseOffset;
215 }
216 
217 
218 } // namespace ROOT8367Workaround
219 
220 
222 std::vector<std::string> TrigTSerializer::s_dictsToIgnore = {
223  "CosmicMuonCollection_tlp1", "MdtTrackSegmentCollection_tlp1",
224  "CosmicMuonCollection_p1", "CosmicMuon_p1", "MdtTrackSegmentCollection_p1",
225  "MdtTrackSegment_p1", "MdtTrackSegmentCollection_p2", "PanTauDetails_p1",
226  "SG::IAuxStoreCompression"
227 };
228 
229 TrigTSerializer::TrigTSerializer(const std::string& toolname, const std::string& type, const IInterface* parent) : AthAlgTool(toolname, type, parent), m_streamersList{nullptr} {
230  declareInterface<ITrigSerializerToolBase>( this );
231  declareProperty("OnlineMode", m_onlineMode=false, "avoid initializations not needed in the online");
232 
233  for (size_t i=0; i<4; i++) m_guid[i]=0;
234 }
235 
237  if (m_streamersList){
238  delete m_streamersList;
239  m_streamersList = nullptr;
240  }
241 }
242 
244  ATH_MSG_DEBUG( "TrigTSerializer::initialize " << name() );
245 
246  // copy missing dictionary names from the property to the static member
248  std::string msg;
249  for( const auto& n:s_dictsToIgnore ) {
250  if( not msg.empty() ) msg += ", ";
251  msg += n;
252  }
253  ATH_MSG_DEBUG( "Suppressing missing dictionary warnings for: " << msg );
254 
255  if (!m_onlineMode)
257 
259 
260  return StatusCode::SUCCESS;
261 
262 }
263 
265 
266  std::map<std::string,uint32_t>::const_iterator mitr(m_errCount.begin());
267  std::map<std::string,uint32_t>::const_iterator mend(m_errCount.end());
268  bool reported(false);
269  while (mitr!=mend){
270  reported=true;
271  ATH_MSG_WARNING( "Could not interpret persistent object " << (*mitr).first
272  << " /" << (*mitr).second << " times." );
273  ++mitr;
274  }
275  if (!reported)
276  ATH_MSG_INFO( name() << " no problems encountered" );
277  return StatusCode::SUCCESS;
278 }
279 
280 bool TrigTSerializer::bsDictWarningFilter(int level, bool abort_bool,
281  const char* location, const char *msg)
282 {
283  if( level == kWarning and gDebug == 0 ) {
284  if( strstr(msg, "no dictionary for class") ) {
285  for( std::string &type : s_dictsToIgnore ) {
286  if( strstr(msg, type.c_str()) ) {
287  return false;
288  }
289  }
290  }
291  }
292  DefaultErrorHandler(level,abort_bool, location, msg);
293  return false;
294 }
295 
296 
298 {
300  //temporary
301  std::string extStreamerInfos = "bs-streamerinfos.root";
302  std::string extFile = PathResolver::find_file (extStreamerInfos, "DATAPATH");
303  ATH_MSG_DEBUG( "Using " << extFile );
304  TFile f(extFile.c_str());
305  m_streamersList = f.GetStreamerInfoList();
306  TIter nextinfo(m_streamersList);
307  while (TObject* obj = nextinfo()) {
308  TStreamerInfo *inf = dynamic_cast<TStreamerInfo*> (obj);
309  if (!inf) continue;
310  TString t_name=inf->GetName();
311 
312  if (t_name.BeginsWith("listOfRules")){
313  ATH_MSG_WARNING( "Could not re-load class " << t_name );
314  continue;
315  }
316 
317  inf->BuildCheck();
318  //this triggers a crash on lcg60
319  TClass *cl = inf->GetClass();
320  if (cl)
321  ATH_MSG_DEBUG( "external TStreamerInfo for " << cl->GetName()
322  << " checksum: " << inf->GetCheckSum() );
323  }
324  f.Close();
325 }
326 
327 
329  const char* location, const char *msg){
330  if( level > kInfo ) {
331  //MN: ignore stuff below kWarning
332  s_decodingError = true;
333  }
334  int oldLvl = gErrorIgnoreLevel;
335  if( gDebug > 0 ) {
336  gErrorIgnoreLevel = kPrint;
337  }
338  ::DefaultErrorHandler(level,abort_bool, location, msg);
339  gErrorIgnoreLevel = oldLvl;
340 
341  return false;
342 }
343 
344 void TrigTSerializer::prepareForTBuffer(const std::string &nameOfClass){
346  //MN: this setting does not play well with ROOTDEBUG:
347  // gErrorIgnoreLevel = kInfo+1;
348  //had this class a problem before?
349  if (m_errCount.find(nameOfClass)!=m_errCount.end()){
351  }
352  s_decodingError = false;
353 }
354 
355 void TrigTSerializer::restoreAfterTBuffer(const std::string &nameOfClass){
356  if (s_decodingError){
357  s_decodingError = false;
358 
359 
360  if (m_errCount.find(nameOfClass)!=m_errCount.end()){
361  ++m_errCount[nameOfClass];
362  } else {
363  ATH_MSG_ERROR( "Errors while decoding " << nameOfClass
364  << " any further ROOT messages for this class will be suppressed" );
365  m_errCount[nameOfClass] = 1;
366  }
367  }
368 
370 }
371 
372 std::vector<uint32_t> TrigTSerializer::serialize(const std::string &nameOfClass, const void* instance){
373  std::vector<uint32_t> serialized;
374  serialize(nameOfClass, instance, serialized);
375  return serialized;
376 }
377 
378 void TrigTSerializer::serialize(const std::string &nameOfClass, const void* instance, std::vector<uint32_t> &serialized){
379 
380  serialized.clear();
381 
382  size_t rootDebug = gDebug;
383 
384  if (msgLvl(MSG::DEBUG)){
385  ATH_MSG_DEBUG( "in serialize for " << nameOfClass );
386  /*
387  //cannot be used in production
388  //higher gDebug seems to interfere with ErrorHandler
389  if (m_outputlevel<=MSG::VERBOSE && rootDebug<5)
390  gDebug=5;
391  */
392  }
393 
394  std::string noc= TrigSerializeResult::remapToDictName(nameOfClass);
395  TClass *pclass = gROOT->GetClass(noc.c_str());
396 
397  // do_persistify(noc, instance);
398 
399  TBufferFile *buff = new TBufferFile(TBuffer::kWrite);
400 
401  //std::vector<uint32_t> serialized;
402 
403  if (pclass){
404  //buff->StreamObject(instance, pclass);
405 
406  ATH_MSG_DEBUG( "writing instance " << instance << " to buffer for noc " << noc );
407 
408  prepareForTBuffer(noc);
409  {
411  buff->WriteObjectAny(instance, pclass);
412  }
413  restoreAfterTBuffer(noc);
414 
415  ATH_MSG_DEBUG( "wrote buffer of length " << buff->Length() );
416 
417 
418  const char *pbuff = buff->Buffer();
419  const size_t bufsiz = buff->Length();
420 
421  serialized.push_back(TRIGTSERHEADER);
422  serialized.push_back(TRIGTSERVERSION);
423  serialized.push_back(bufsiz);
424  serialized.push_back(m_guid[0]);
425  serialized.push_back(m_guid[1]);
426  serialized.push_back(m_guid[2]);
427  serialized.push_back(m_guid[3]);
428 
429  //inefficient - to be compatible with Serializer for the moment can be avoided later
430  uint32_t pbytes;
431  char *pp = (char *)&pbytes;
432 
433  for (size_t i=0; i<bufsiz/4; i++){
434  pbytes = 0;
435  for (size_t j=0; j<4; j++){
436  *(pp+3-j) = pbuff[4*i+j];
437  }
438  // ATH_MSG_DEBUG( "packed " << std::hex << pbytes << std::dec );
439 
440  serialized.push_back(pbytes);
441  }
442 
443  //send rest of chars as one int each
444  const size_t modb = bufsiz%4;
445  for (size_t i=0; i<modb; i++){
446  pbytes = 0;
447  *pp = pbuff[bufsiz-modb+i];
448  serialized.push_back(pbytes);
449  }
450 
451  if (msgLvl(MSG::VERBOSE)){
452  msg(MSG::VERBOSE) << "serialized dump: ";
453  for (size_t i=0; i<serialized.size(); i++){
454  msg(MSG::VERBOSE) << std::hex << serialized.at(i) <<std::dec << " ";
455  }
456  msg(MSG::VERBOSE) << endmsg;
457  }
458  }
459  else {
460  ATH_MSG_ERROR( "gROOT->GetClass failed for" << nameOfClass );
461  }
462 
463  delete buff;
464  gDebug=rootDebug;
465 
466  // return serialized;
467 }
468 
469 void* TrigTSerializer::deserialize(const std::string &nameOfClass, const std::vector<uint32_t>& v){
470 
471  size_t rootDebug = gDebug;
472  if (msgLvl(MSG::DEBUG)){
473  ATH_MSG_DEBUG( "in deserialize for " << nameOfClass );
474  /*
475  //cannot be used in production
476  //higher gDebug seems to interfere with ErrorHandler
477  if (m_outputlevel<=MSG::VERBOSE &&rootDebug<5)
478  gDebug=5;
479  */
480  }
481 
482  const size_t vsize = v.size();
483  uint32_t rVersion(0);
484  size_t bufsiz(0);
485  bool newFormatOK=true;
486  bool decodeOldFormat=true;
487  size_t pBuffOffset(3); //adjust below
488  //
489  //
490 
491  if (vsize>2){
492  if (v.at(0)==TRIGTSERHEADER){
493  rVersion = v.at(1);
494  bufsiz = v.at(2);
495  if (rVersion>3)
496  pBuffOffset++;
497  if (rVersion>4)
498  pBuffOffset += 3; //wrt ver 4
499 
500  //check size with vsize
501  size_t expectsize = pBuffOffset + bufsiz/4 + bufsiz%4;
502 
503  if (expectsize!=vsize){
504  newFormatOK = false;
505  ATH_MSG_WARNING( "expected payload length "<<expectsize
506  << " does not match the container size " << vsize
507  << " for " << nameOfClass << " fallback to the old format:" );
508  }
509  ATH_MSG_DEBUG( bufsiz << "bytes of payload version " << std::hex << rVersion << std::dec
510  << " for " << nameOfClass );
511  }
512  else {
513  ATH_MSG_WARNING( "not a versioned payload of "
514  << nameOfClass << " trying initial TrigTSerializer" );
515  newFormatOK = false;
516  }
517 
518  } else {
519  ATH_MSG_WARNING( "zero bytes of payload for " << nameOfClass );
520  gDebug=rootDebug;
521  return NULL;
522  }
523 
524  //
525  char *pbuf = NULL;
526 
527  if (newFormatOK){
528  // const size_t bufsiz = v.size();
529  pbuf = new char[bufsiz];
530  size_t bufpos=0;
531  const size_t nints = bufsiz/4;
532  for (size_t i=pBuffOffset; i<nints+pBuffOffset; i++){
533  uint32_t pbytes = v.at(i);
534  char *pch = (char *)&pbytes;
535  for (size_t c=0; c<4; c++){
536  pbuf[bufpos] = *(char *)(pch+3-c);
537  bufpos++;
538  }
539  }
540 
541  for (size_t i=nints+pBuffOffset; i<vsize; i++){
542  pbuf[bufpos] = (char)v.at(i);
543  bufpos++;
544  }
545 
546  if (msgLvl(MSG::VERBOSE)){
547  msg(MSG::VERBOSE) << "deserialized dump: ";
548  for (size_t i=0; i<v.size(); i++){
549  msg(MSG::VERBOSE) << std::hex << v.at(i) <<std::dec << " ";
550  }
551  msg(MSG::VERBOSE) << endmsg;
552  }
553 
554  } else if (!newFormatOK && decodeOldFormat){
555  bufsiz = v.size();
556  pbuf = new char[bufsiz];
557 
558  for (size_t i=0; i<bufsiz; i++)
559  pbuf[i] = v.at(i);
560  } else {
561  gDebug=rootDebug;
562  return NULL;
563  }
564 
565  /*
566  if (newFormatOK && rVersion >3)
567  setCLID(v.at(3));
568  */
569 
570  //common part
571  TBufferFile *buff = new TBufferFile(TBuffer::kRead, bufsiz, pbuf, kTRUE);
572 
573  std::string noc= TrigSerializeResult::remapToDictName(nameOfClass);
574  TClass *pclass = gROOT->GetClass(noc.c_str());
575 
576  TObject *pobj = NULL;
577  if (pclass){
578  prepareForTBuffer(noc);
579  {
581  //pobj = (TObject *)(buff->ReadObjectAny(pclass));
582  pobj = (TObject *)(ROOT8367Workaround::TBufferFileWorkaround::doReadObjectAny (buff, pclass));
583  }
584  restoreAfterTBuffer(noc);
585  //ErrorHandlerFunc_t oldhandler= ::SetErrorHandler(streamerErrorHandler);
586  //SetErrorHandler(oldhandler);
587  //buff->StreamObject(instance, pclass);
588  }
589  else {
590  ATH_MSG_ERROR( "gROOT->GetClass failed for" << nameOfClass );
591  }
592 
593  delete buff; //this also deletes pbuf owned by buff
594  gDebug=rootDebug;
595 
596  return (void *)pobj;
597 }
598 
599 
600 StatusCode TrigTSerializer::initClass(const std::string &nameOfClass) const {
601 
602  TClass *pclass = gROOT->GetClass(nameOfClass.c_str());
603 
604 
605  StatusCode sc(StatusCode::FAILURE);
606 
607  if (pclass)
608  sc = StatusCode::SUCCESS;
609 
610 
611  return sc;
612 
613 }
614 
615 
616 
618  m_guid[0] = m_guid[1] = m_guid[2] = m_guid[3] = 0;
619 }
620 
621 StatusCode TrigTSerializer::peekCLID(const std::vector<uint32_t>& v, uint32_t *guid) const {
622  if (v.size()>2){
623  if (v.at(0)==TRIGTSERHEADER){
624  const uint32_t rVersion = v.at(1);
625  if (rVersion>4){
626  guid[0] = v.at(3);
627  guid[1] = v.at(4);
628  guid[2] = v.at(5);
629  guid[3] = v.at(6);
630  return StatusCode::SUCCESS;
631  }
632  }
633  }
634  return StatusCode::FAILURE;
635 }
636 
638  for (size_t i=0; i<4; i++)
639  m_guid[i] = guid[i];
640 }
641 
642 
643 using namespace std;
644 
646  cerr << endl
647  << "ERROR! method TrigTSerializer::" << __PRETTY_FUNCTION__
648  << " was removed during migration to ROOT6" << endl;
649  abort();
650 }
651 
652 void TrigTSerializer::do_persistify(const std::string& , void* ) { TrigTSerializerUnimplError(); }
653 void TrigTSerializer::do_persistify_obj(const std::string& , void*) { TrigTSerializerUnimplError(); }
654 
655 
656 void TrigTSerializer::do_follow_ptr(const std::string& name, void *ptr){
657 
658  ATH_MSG_VERBOSE("Entering do_follow_ptr for " << name << " at " << ptr );
659 
660 
661  if (ptr){
662  const std::string classname = name.substr(0, name.find_last_of('*'));
663  ATH_MSG_DEBUG( "going deeper for " << classname << " at " << ptr );
664  do_persistify(classname, ptr);
665  }
666 
667 }
TrigTSerializer::~TrigTSerializer
virtual ~TrigTSerializer()
Definition: TrigTSerializer.cxx:236
get_hdefs.buff
buff
Definition: get_hdefs.py:64
python.CaloRecoConfig.f
f
Definition: CaloRecoConfig.py:127
TrigTSerializer::m_streamersList
TList * m_streamersList
Remember streamer info list for cleaning up later.
Definition: TrigTSerializer.h:91
TrigTSerializer::do_persistify_obj
void do_persistify_obj(const std::string &nameOfClass, void *instance)
Definition: TrigTSerializer.cxx:653
getMessageSvc.h
singleton-like access to IMessageSvc via open function and helper
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
TrigTSerializer::m_errCount
std::map< std::string, uint32_t > m_errCount
Definition: TrigTSerializer.h:81
PathResolver::find_file
static std::string find_file(const std::string &logical_file_name, const std::string &search_path, SearchType search_type=LocalSearch)
Definition: PathResolver.cxx:251
ATLAS_NOT_THREAD_SAFE
#define ATLAS_NOT_THREAD_SAFE
getNoisyStrip() Find noisy strips from hitmaps and write out into xml/db formats
Definition: checker_macros.h:212
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
TrigTSerializer::add_previous_streamerinfos
void add_previous_streamerinfos()
Definition: TrigTSerializer.cxx:297
TrigTSerializer::m_ignoreMissingDicts
StringArrayProperty m_ignoreMissingDicts
IgnoreMissingDicts.
Definition: TrigTSerializer.h:84
xAOD::char
char
Definition: TrigDecision_v1.cxx:38
ROOT8367Workaround::TBufferFileWorkaround
Definition: TrigTSerializer.cxx:75
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
TrigTSerializer::initClass
StatusCode initClass(const std::string &nameOfClass) const
initialize framework to be ready to serialize a given class method to be called to prevent delayed in...
Definition: TrigTSerializer.cxx:600
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
TrigTSerializer::m_guid
uint32_t m_guid[4]
Definition: TrigTSerializer.h:76
TrigTSerializer::peekCLID
StatusCode peekCLID(const std::vector< uint32_t > &v, uint32_t *guid) const
access clid of the payload (stored in BS)
Definition: TrigTSerializer.cxx:621
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
TrigTSerializer::s_dictsToIgnore
static std::vector< std::string > s_dictsToIgnore
static copy of the IgnoreMissingDicts property for the static error handler
Definition: TrigTSerializer.h:88
inf
TStreamerInfo * inf
Definition: liststreamerinfos.cxx:12
TrigTSerializer::bsDictWarningFilter
static bool bsDictWarningFilter(Int_t level, Bool_t abort_bool, const char *location, const char *msg)
Definition: TrigTSerializer.cxx:280
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
python.iconfTool.models.loaders.level
level
Definition: loaders.py:20
TrigTSerializer::s_decodingError
static bool s_decodingError
Definition: TrigTSerializer.h:79
instance
std::map< std::string, double > instance
Definition: Run_To_Get_Tags.h:8
TRIGTSERHEADER
#define TRIGTSERHEADER
Definition: TrigTSerializer.cxx:37
TrigTSerializer::deserialize
void * deserialize(const std::string &nameOfClass, const std::vector< uint32_t > &v)
deserializes an object of a class nameOfClass (and recursively other objects) found in std::vector<ui...
Definition: TrigTSerializer.cxx:469
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
nextinfo
TIter nextinfo(a)
TrigTSerializer::do_persistify
void do_persistify(const std::string &nameOfClass, void *instance)
Definition: TrigTSerializer.cxx:652
lumiFormat.i
int i
Definition: lumiFormat.py:92
SerializeCommon.h
beamspotman.n
n
Definition: beamspotman.py:731
Analysis::kError
@ kError
Definition: CalibrationDataVariables.h:60
TrigTSerializer::m_IgnoreErrLvl
uint32_t m_IgnoreErrLvl
Definition: TrigTSerializer.h:80
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
python.sizes.location
string location
Definition: sizes.py:11
TrigTSerializer::initialize
StatusCode initialize()
Definition: TrigTSerializer.cxx:243
ROOT8367Workaround::TBufferFileWorkaround::ReadObjectAnyNV
void * ReadObjectAnyNV(const TClass *)
Definition: TrigTSerializer.cxx:86
ROOT8367Workaround::kMapOffset
const Int_t kMapOffset
Definition: TrigTSerializer.cxx:68
test_pyathena.parent
parent
Definition: test_pyathena.py:15
TrigTSerializer::do_follow_ptr
void do_follow_ptr(const std::string &nameOfClass, void *instance)
Definition: TrigTSerializer.cxx:656
TrigTSerializer::restoreAfterTBuffer
void restoreAfterTBuffer(const std::string &nameOfClass)
Definition: TrigTSerializer.cxx:355
TrigTSerializer::setCLID
void setCLID(const uint32_t *guid)
access clid of the payload virtual CLID getCLID() const = 0;
Definition: TrigTSerializer.cxx:637
TrigSerializeResult::remapToDictName
std::string remapToDictName(const std::string &s)
Definition: SerializeCommon.cxx:31
pool_uuid.guid
guid
Definition: pool_uuid.py:112
TrigTSerializer::reset
void reset()
clean internal serializer state.
Definition: TrigTSerializer.cxx:617
ROOT8367Workaround::TBufferFileWorkaround::NO_SANITIZE_UNDEFINED
static void *doReadObjectAny NO_SANITIZE_UNDEFINED(TBufferFile *buf, const TClass *cl)
Definition: TrigTSerializer.cxx:78
PathResolver.h
python.hypoToolDisplay.toolname
def toolname(tool)
Definition: hypoToolDisplay.py:13
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
TRIGTSERVERSION
#define TRIGTSERVERSION
Definition: TrigTSerializer.cxx:39
TrigTSerializer::TrigTSerializer
TrigTSerializer(const std::string &name, const std::string &type, const IInterface *parent)
Definition: TrigTSerializer.cxx:229
RootUtils::WithRootErrorHandler
Run a MT piece of code with an alternate root error handler.
Definition: WithRootErrorHandler.h:56
TrigTSerializer::streamerErrorHandler
static bool streamerErrorHandler(Int_t level, Bool_t abort_bool, const char *location, const char *msg)
Definition: TrigTSerializer.cxx:328
TrigTSerializer::m_onlineMode
bool m_onlineMode
Definition: TrigTSerializer.h:75
TrigTSerializer::serialize
std::vector< uint32_t > serialize(const std::string &nameOfClass, const void *instance)
serializes an object of a class nameOfClass pointed to by instance and recursively also other objects...
Definition: TrigTSerializer.cxx:372
gErrorIgnoreLevel
int gErrorIgnoreLevel
WithRootErrorHandler.h
Run a MT piece of code with an alternate root error handler.
ROOT8367Workaround
Definition: TrigTSerializer.cxx:67
python.PyAthena.v
v
Definition: PyAthena.py:157
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
DEBUG
#define DEBUG
Definition: page_access.h:11
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
RootType.h
declareProperty
#define declareProperty(n, p, h)
Definition: BaseFakeBkgTool.cxx:15
no_sanitize_undefined.h
Helper to disable undefined behavior sanitizer for a function.
python.Constants.VERBOSE
int VERBOSE
Definition: Control/AthenaCommon/python/Constants.py:14
CaloCondBlobAlgs_fillNoiseFromASCII.tag
string tag
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:24
AthAlgTool
Definition: AthAlgTool.h:26
TrigTSerializerUnimplError
void TrigTSerializerUnimplError()
Definition: TrigTSerializer.cxx:645
TrigTSerializer::prepareForTBuffer
void prepareForTBuffer(const std::string &nameOfClass)
Definition: TrigTSerializer.cxx:344
python.PyAthena.obj
obj
Definition: PyAthena.py:135
python.compressB64.c
def c
Definition: compressB64.py:93
dq_make_web_display.cl
cl
print [x.__class__ for x in toList(dqregion.getSubRegions()) ]
Definition: dq_make_web_display.py:26
TrigTSerializer::finalize
StatusCode finalize()
Definition: TrigTSerializer.cxx:264
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7
TrigTSerializer.h