ATLAS Offline Software
AthenaMonManager.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 #include <cctype>
8 
9 #include "TDirectory.h"
10 #include "TH1.h"
11 #include "TObject.h"
12 #include "TROOT.h"
13 #include "LWHists/LWHist.h"
14 #include "LWHists/LWHistControls.h"
15 #include "LWHists/LWHistStats.h"
16 #include "LWHistAthMonWrapper.h"
17 #include "AthMonBench.h"
18 
19 #include "Gaudi/Interfaces/IOptionsSvc.h"
20 #include "GaudiKernel/IMessageSvc.h"
21 #include "GaudiKernel/ISvcLocator.h"
22 #include "GaudiKernel/ITHistSvc.h"
23 #include "GaudiKernel/MsgStream.h"
24 #include "Gaudi/Property.h"
25 #include "GaudiKernel/ServiceHandle.h"
26 
31 
33 
34 #include "SGAudCore/ISGAudSvc.h"
35 
36 #include <limits.h>
37 #include <vector>
38 
39 
41 public:
42  Imp(AthenaMonManager*man,const std::string& name) : m_theManager(man),
43  m_sgAudSvc(0),
44  m_isPrimaryManager(false),
45  m_everyNevents(-1),
46  m_eventCounter(-1),
49  m_dataTypeProp("userDefined"),
50  m_environmentProp("user"),
51  m_LBsLowStatProp(10),
52  m_LBsMedStatProp(30),
53  m_LBsHigStatProp(90),
54  m_manualRunLBProp(false),
55  m_runProp(0),
56  m_lumiBlockProp(0),
59  m_forkedProcess(false),
60  m_lastPID(0),
61  m_rootBackend(false),
62  m_doResourceMon(false)
63  {}
64 
65  ~Imp()
66  {
68 
69  for (it=m_toolbenchmarks.begin(),itE=m_toolbenchmarks.end(); it!=itE; ++it) {
70  delete it->second;
71  }
72 
73  m_toolbenchmarks.clear();
74  }
75 
76  //These were protected before we moved to a private implementation:
77  typedef std::map<std::string,TObject*> ObjMap_t;
79 
80  typedef std::map<std::string,LWHist*> ObjMapLW_t;
82 
85 
87 
90 
91  std::string m_fileKeyProp;
92 
94  std::string m_dataTypeProp;
95  std::string m_environmentProp;
97 
99 
100  unsigned int m_runProp;
101  unsigned int m_lumiBlockProp;
102 
105 
108 
110 
111  //NB: The LW hist leak checker is now also looking for
112  //inappropriate usage of MonGroup copy constructors (temporary
113  //until we outlaw copy/assignment of MonGroups):
115  Imp * m_d;
116  long m_initVal;
118  public:
119  LWHistLeakChecker(Imp*d) : m_d(d), m_initVal(LWHistStats::nActiveLWHists()),
120  m_mgcopies_initval(ManagedMonitorToolBase::MonGroup::ncopies()) {}
124  }
125  };
126 
127  template<class T> void toolAudStart(const T&tool) {
128  if (m_sgAudSvc) m_sgAudSvc->setFakeCurrentAlg(m_theManager->name()+"_MT_"+tool->name());
129  }
130  void toolAudEnd() {
132  }
133 
135 
136  class ToolBench {
137  public:
141  AthMonBench m_bench_algexec_fillHists;//NB: includes call to preselector
144  //NB: So far we don't check the call to runStat()
150  a->msg(l)<<"Init ResourceSummary ["<<m_theTool->name()<<"] --> load/create/initialize : "<<m_bench_alginit_retrieve<<endmsg;
153  a->msg(l)<<"Exec ResourceSummary ["<<m_theTool->name()<<"] --> book : "<<m_bench_algexec_bookHists<<endmsg;
154  a->msg(l)<<"Exec ResourceSummary ["<<m_theTool->name()<<"] --> check : "<<m_bench_algexec_checkHists<<endmsg;
155  a->msg(l)<<"Exec ResourceSummary ["<<m_theTool->name()<<"] --> fill : "<<m_bench_algexec_fillHists<<endmsg;
156  a->msg(l)<<"Fin ResourceSummary ["<<m_theTool->name()<<"] --> finalHists : "<<m_bench_algfin_finalHists<<endmsg;
157  a->msg(l)<<"Fin ResourceSummary ["<<m_theTool->name()<<"] --> checkHists(fromFinalize==true) : "<<m_bench_algfin_checkHists<<endmsg;
158  a->msg(l)<<"Fin ResourceSummary ["<<m_theTool->name()<<"] --> final LWHist conversion+writeout : "<<m_bench_algfin_convertLWHists<<endmsg;
159  }
160 
161  };
162  std::map<IMonitorToolBase*,ToolBench*> m_toolbenchmarks;
165  if (it==m_toolbenchmarks.end()) {
166  ToolBench*tb =new ToolBench(t);
167  m_toolbenchmarks[t] = tb;
168  return tb;
169  }
170  return it->second;
171  }
172 
173  // The data below should be truly global for a job, and inheriting classes should
174  // not have the option of modifying them.
175  // The data are set from the corresponding m_* properties of the first AthenaMonManager
176  // in the Athena algorithm chain (this manager sets s_staticDataAreInit to true).
177 
178  inline static std::atomic<ISvcLocator*> s_svcLocator{nullptr};
179 
180  inline static std::atomic<bool> s_staticDataAreInit{false};
181 
182  inline static std::string s_dataTypeStr ATLAS_THREAD_SAFE {"userDefined"};
183  inline static std::string s_environmentStr ATLAS_THREAD_SAFE {"user"};
184  inline static DataType_t s_dataType ATLAS_THREAD_SAFE {userDefined};
185  inline static Environment_t s_environment ATLAS_THREAD_SAFE {user};
186 
187  inline static bool s_runLBOverridden ATLAS_THREAD_SAFE {false};
188  inline static unsigned int s_lumiBlock ATLAS_THREAD_SAFE {0};
189  inline static unsigned int s_run ATLAS_THREAD_SAFE {0};
190  inline static unsigned int s_fill ATLAS_THREAD_SAFE {0};
191  inline static unsigned int s_LBsLowStat ATLAS_THREAD_SAFE {0};
192  inline static unsigned int s_LBsMedStat ATLAS_THREAD_SAFE {0};
193  inline static unsigned int s_LBsHigStat ATLAS_THREAD_SAFE {0};
194 };
195 
196 
197 namespace {
198 
199 std::string strToLower( const std::string& str );
200 
201 } // unnamed namespace
202 
203 // *********************************************************************
204 // Public Methods
205 // *********************************************************************
206 
208 AthenaMonManager( const std::string& name, ISvcLocator* pSvcLocator )
209  : AthAlgorithm( name, pSvcLocator )
210  , m_monTools( this )
211  , m_THistSvc(0)
212  , m_d(new Imp(this, name))
213 {
214  declareProperty( "AthenaMonTools", m_monTools );
215  declareProperty( "CheckEveryNoEvents", m_d->m_everyNevents );
216  declareProperty( "FileKey", m_d->m_fileKeyProp );
217  declareProperty( "ManualDataTypeSetup", m_d->m_manualDataTypeSetupProp );
218  declareProperty( "DataType", m_d->m_dataTypeProp );
219  declareProperty( "Environment", m_d->m_environmentProp );
220  declareProperty( "LBsInLowStatInterval", m_d->m_LBsLowStatProp );
221  declareProperty( "LBsInMediumStatInterval", m_d->m_LBsMedStatProp );
222  declareProperty( "LBsInHighStatInterval", m_d->m_LBsHigStatProp );
223  declareProperty( "ManualRunLBSetup", m_d->m_manualRunLBProp );
224  declareProperty( "Run", m_d->m_runProp );
225  declareProperty( "LumiBlock", m_d->m_lumiBlockProp );
226  declareProperty( "ROOTBackend", m_d->m_rootBackend );
227 
228  if( !Imp::s_svcLocator )
229  Imp::s_svcLocator = pSvcLocator;
230 }
231 
232 
235 {
236  if (m_d->m_nActiveLWHists)
237  msg(MSG::WARNING) << m_d->m_nActiveLWHists<< " LW histograms were created but never deleted" << endmsg;
238  /*
239  if (m_d->m_nMonGroupCopies)
240  msg(MSG::WARNING) << "Usage of MonGroup copy constructor or assignment operator detected in associated tools "
241  << m_d->m_nMonGroupCopies<<" time(s). This usually happens when tools pass MonGroup's around by"
242  <<" value. This behaviour will be forbidden at the compilation stage soon, so please fix your packages!" << endmsg;
243  */
244  delete m_d;
245 
246  // If it is known that ManagedMonitorToolBase objects are deleted _after_ this object,
247  // then one should call setMonManager(0) on each of them.
248 }
249 
250 
253 envStringToEnum( const std::string& str )
254 {
255  std::string lcstr( strToLower(str) );
256 
257  if( lcstr == "user" )
258  return user;
259  else if( lcstr == "nooutput" )
260  return noOutput;
261  else if( lcstr == "online" )
262  return online;
263  else if( lcstr == "tier0" )
264  return tier0;
265  else if( lcstr == "tier0raw" )
266  return tier0Raw;
267  else if( lcstr == "tier0esd" )
268  return tier0ESD;
269  else if( lcstr == "aod" )
270  return AOD;
271  else if( lcstr == "altprod" )
272  return altprod;
273 
274  if( Imp::s_svcLocator ) {
275  IMessageSvc* ms(0);
276  StatusCode sc = Imp::s_svcLocator.load()->service( "MessageSvc", ms, true );
277  if( sc.isSuccess() ) {
278  MsgStream log( ms, "AthenaMonManager::envStringToEnum()" );
279  log << MSG::WARNING << "Unknown AthenaMonManager::Environment_t \""
280  << str << "\", returning \"user\"" << endmsg;
281  }
282  }
283 
284  return user;
285 }
286 
287 
290 dataTypeStringToEnum( const std::string& str )
291 {
292  std::string lcstr( strToLower(str) );
293 
294  if( lcstr == "userdefined" )
295  return userDefined;
296  else if( lcstr == "montecarlo" )
297  return monteCarlo;
298  else if( lcstr == "collisions" )
299  return collisions;
300  else if( lcstr == "cosmics" )
301  return cosmics;
302  else if( lcstr == "heavyioncollisions" )
303  return heavyIonCollisions;
304 
305  if( Imp::s_svcLocator ) {
306  IMessageSvc* ms(0);
307  StatusCode sc = Imp::s_svcLocator.load()->service( "MessageSvc", ms, true );
308  if( sc.isSuccess() ) {
309  MsgStream log( ms, "AthenaMonManager::dataTypeStringToEnum()" );
310  log << MSG::WARNING << "Unknown AthenaMonManager::DataType_t \""
311  << str << "\", returning \"userDefined\"" << endmsg;
312  }
313  }
314 
315  return userDefined;
316 }
317 
318 
321 environment()
322 {
323  return Imp::s_environment;
324 }
325 
327  return Imp::s_LBsLowStat;
328 }
330  return Imp::s_LBsMedStat;
331 }
333  return Imp::s_LBsHigStat;
334 }
335 
338 dataType()
339 {
340  return Imp::s_dataType;
341 }
342 
343 bool
345 forkedProcess() {
346  return m_d->m_forkedProcess;
347 }
348 
349 
350 unsigned int
353 {
354  if (Imp::s_runLBOverridden) {
355  return Imp::s_lumiBlock;
356  } else {
357  return Gaudi::Hive::currentContext().eventID().lumi_block();
358  }
359 }
360 
361 
362 unsigned int
364 runNumber()
365 {
366  if (Imp::s_runLBOverridden) {
367  return Imp::s_run;
368  } else {
369  return Gaudi::Hive::currentContext().eventID().run_number();
370  }
371 }
372 
373 
374 unsigned int
376 fillNumber()
377 {
378  return Imp::s_fill;
379 }
380 
381 
384 initialize()
385 {
387 
388  //typedef std::vector<IMonitorToolBase*> MonList_t;
389  //typedef MonList_t::iterator MonIter_t;
390 
391  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "AthenaMonManager::initialize():" << endmsg;
392 
393  if (Imp::s_svcLocator.load()->service("SGAudSvc", m_d->m_sgAudSvc, false/*do not create*/).isFailure())
394  m_d->m_sgAudSvc=0;
395 
396 
398 
399  StatusCode sc;
400 
401  sc = service( "THistSvc", m_THistSvc, true );
402  if( !sc.isSuccess() ) {
403  msg(MSG::ERROR) << "!! Unable to locate the THistSvc service !!" << endmsg;
404  return sc;
405  }
406 
407  if( !Imp::s_staticDataAreInit ) {
408  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> Initializing static data" << endmsg;
409 
410  if (msgLvl(MSG::DEBUG)) {
411  msg(MSG::DEBUG) << " * \"ManualDataTypeSetup\" = " << m_d->m_manualDataTypeSetupProp << endmsg;
412  }
413 
414 #if 0 // The two branches of the conditional are identical.
416  Imp::s_dataTypeStr = m_d->m_dataTypeProp;
417  Imp::s_dataType = dataTypeStringToEnum( m_d->m_dataTypeProp );
418  }
419  else
420 #endif
421  {
422  Imp::s_dataTypeStr = m_d->m_dataTypeProp;
423  Imp::s_dataType = dataTypeStringToEnum( m_d->m_dataTypeProp );
424  }
425 
426  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " * \"DataType\" = " << Imp::s_dataType << endmsg;
427 
428  Imp::s_environmentStr = m_d->m_environmentProp;
429  Imp::s_environment = envStringToEnum( m_d->m_environmentProp );
430 
431  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " * \"Environment\" = " << Imp::s_environment << endmsg;
432 
433  Imp::s_LBsLowStat = m_d->m_LBsLowStatProp;
434  Imp::s_LBsMedStat = m_d->m_LBsMedStatProp;
435  Imp::s_LBsHigStat = m_d->m_LBsHigStatProp;
436  if (msgLvl(MSG::DEBUG)) {
437  msg(MSG::DEBUG) << " * \"LBsInLowStatInterval\" = " << Imp::s_LBsLowStat << endmsg;
438  msg(MSG::DEBUG) << " * \"LBsInMediumStatInterval\" = " << Imp::s_LBsMedStat << endmsg;
439  msg(MSG::DEBUG) << " * \"LBsInHighStatInterval\" = " << Imp::s_LBsHigStat << endmsg;
440  }
441 
442  m_d->m_isPrimaryManager = true;
444 
445  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " * \"ManualRunLBSetup\" = " << m_d->m_manualRunLBProp << endmsg;
446 
447  if( m_d->m_manualRunLBProp ) {
448  Imp::s_run = m_d->m_runProp;
449  Imp::s_lumiBlock = m_d->m_lumiBlockProp;
450  Imp::s_runLBOverridden = true;
451  if (msgLvl(MSG::DEBUG))
452  msg(MSG::DEBUG) << " --> using run = " << Imp::s_run << ", lumiBlock = " << Imp::s_lumiBlock << endmsg;
453  } else {
454  if (msgLvl(MSG::DEBUG))
455  msg(MSG::DEBUG) << " --> using run = " << Imp::s_run << ", lumiBlock = " << Imp::s_lumiBlock << endmsg;
456  }
457  }
458 
459  // Ensure consistency among all managers
460  m_d->m_dataTypeProp = Imp::s_dataTypeStr;
461  m_d->m_environmentProp = Imp::s_environmentStr;
462 
463  // Provide a virtual Algorithm with a subset of the properties
464  ServiceHandle<Gaudi::Interfaces::IOptionsSvc> joSvc("JobOptionsSvc", name());
465  ATH_CHECK( joSvc.retrieve() );
466  ATH_MSG_DEBUG(" --> Found service \"JobOptionsSvc\"");
467 
468  const std::string client = name() + std::string("Properties");
469  ATH_MSG_DEBUG(" --> Adding properties under name \"" << client << "\"");
470  joSvc->set( client + ".FileKey", m_d->m_fileKeyProp );
471  joSvc->set( client + ".DataType", m_d->m_dataTypeProp );
472  joSvc->set( client + ".Environment", m_d->m_environmentProp );
473 
474  // LWHists not thread-safe. Use alg property to use ROOT backend in MT mode.
475  ATH_MSG_DEBUG("Setting LWHist ROOT backend flag to " << m_d->m_rootBackend);
477 
478  if( m_monTools.size() > 0 ) {
479  sc = m_monTools.retrieve();
480  if( !sc.isSuccess() ) {
481  msg(MSG::ERROR) << "!! Unable to retrieve monitoring tool " << m_monTools << endmsg;
482  return sc;
483  }
484  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> Retrieved AthenaMonTools" << endmsg;
485  }
486 
488 
490  for( ToolHandleArray<IMonitorToolBase>::iterator i = m_monTools.begin(); i != monToolsEnd; ++i ) {
491  ToolHandle<IMonitorToolBase>& tool = *i;
492  AthMonBench bench_tmp;
493  IMonitorToolBase* mon = tool.operator->();
494  ManagedMonitorToolBase* managed = dynamic_cast<ManagedMonitorToolBase*>( mon );
495  if( managed != 0 ) {
496  managed->setMonManager( this );
497  }
498  if (m_d->m_doResourceMon) {
500  tb->m_bench_alginit_retrieve = bench_tmp;
501  }
502 
503  }
504  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> Exiting successfully" << endmsg;
505 
506  return StatusCode::SUCCESS;
507 }
508 
509 
512 execute()
513 {
514  m_d->m_forkedProcess=false;
515  pid_t currPID=getpid();
516  //m_lastPID 0 means the execute method was not called yet.
517  if (m_d->m_lastPID!=0 && m_d->m_lastPID!=currPID) {
518  m_d->m_forkedProcess=true;
519  ATH_MSG_INFO("Forked event discovered!");
520  }
521  m_d->m_lastPID=currPID;
522 
524  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "AthenaMonManager::execute():" << endmsg;
525 
526  // This is legacy R2 monitoring.
527  // We only permit serial access (over all slots) to both HLT monitoring AND navigation thinning, as both use the same underlying thread un-safe navigation tool
528  // All of these elements are deprecated for R3 and are in the process of being replaced.
529  std::unique_lock<std::mutex> hltLock(TrigNavigationThinningSvcMutex::s_mutex, std::defer_lock);
530  if (name() == "HLTMonManager") {
531  ATH_MSG_DEBUG("HLTMonManager is obtaining the TrigNavigationThinningSvc lock in slot "
532  << Gaudi::Hive::currentContext().slot() << " for event " << Gaudi::Hive::currentContext().eventID().event_number() );
533  hltLock.lock();
534  }
535 
536  StatusCode sc;
537 
539  for( ToolHandleArray<IMonitorToolBase>::iterator i = m_monTools.begin(); i != monToolsEnd; ++i ) {
540  ToolHandle<IMonitorToolBase>& tool = *i;
542  AthMonBench bench_tmp;
543  if (m_d->m_doResourceMon)
544  bench_tmp.startMeasurement();
545  if( tool->preSelector() ) {
546 
547  sc = tool->fillHists();
548 
549  if( !sc.isSuccess() ) {
550  if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::fillHists() unsuccessful" << endmsg;
551  }
552  }
553 
554 
555  if (m_d->m_doResourceMon) {
556  bench_tmp.finishMeasurement();
557  Imp::ToolBench* tb = m_d->getToolBench(tool.operator->());
558  tb->m_bench_algexec_fillHists += bench_tmp;//fixme: count events and subdivide
559  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> m_doResourceMon is True" << endmsg;
560  }
561  m_d->toolAudEnd();
562  }
563  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> Done calling IMonitorToolBase::fillHists()" << endmsg;
564 
565  if( m_d->m_eventCounter > 0 ) {
566  m_d->m_eventCounter--;
567  }
568  else if( m_d->m_eventCounter == 0 ) {
569  for( ToolHandleArray<IMonitorToolBase>::iterator i = m_monTools.begin(); i != monToolsEnd; ++i ) {
570  ToolHandle<IMonitorToolBase>& tool = *i;
572  AthMonBench bench_tmp;
573 
574  if (m_d->m_doResourceMon)
575  bench_tmp.startMeasurement();
576  sc = tool->checkHists(false);
577  if (m_d->m_doResourceMon) {
578  bench_tmp.finishMeasurement();
579  Imp::ToolBench* tb = m_d->getToolBench(tool.operator->());
580  tb->m_bench_algexec_checkHists += bench_tmp;//fixme: count events and subdivide
581  }
582  if( !sc.isSuccess() ) {
583  if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::checkHists() unsuccessful" << endmsg;
584  }
585  m_d->toolAudEnd();
586  }
587  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> Done calling IMonitorToolBase::checkHists()" << endmsg;
588 
590  }
591  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> Exiting successfully" << endmsg;
592 
593  ATH_MSG_DEBUG(name() << " is releasing the TrigNavigationThinningSvc lock");
594  return StatusCode::SUCCESS;
595 }
596 
597 
600 finalize()
601 {
602  return StatusCode::SUCCESS;
603 }
604 
607 stop()
608 {
610  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "AthenaMonManager::finalize():" << endmsg;
611 
612  StatusCode sc;
613 
615  for( ToolHandleArray<IMonitorToolBase>::iterator i = m_monTools.begin(); i != monToolsEnd; ++i ) {
616  ToolHandle<IMonitorToolBase>& tool = *i;
618 
619  sc = tool->runStat();
620  if( !sc.isSuccess() ) {
621  if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::runStat() unsuccessful" << endmsg;
622  }
623 
624  Imp::ToolBench* tb = m_d->m_doResourceMon ? m_d->getToolBench(tool.operator->()) : 0;
625  if (tb)
626  tb->m_bench_algfin_finalHists.startMeasurement();
627  sc = tool->finalHists();
628  if (tb)
629  tb->m_bench_algfin_finalHists.finishMeasurement();
630  if( !sc.isSuccess() ) {
631  if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::finalHists() unsuccessful" << endmsg;
632  }
633  if (tb)
634  tb->m_bench_algfin_checkHists.startMeasurement();
635  sc = tool->checkHists(true);
636  if (tb)
637  tb->m_bench_algfin_checkHists.finishMeasurement();
638  if( !sc.isSuccess() ) {
639  if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::checkHists() unsuccessful" << endmsg;
640  }
641  if (tb)
642  tb->m_bench_algfin_convertLWHists.startMeasurement();
643  sc = tool->convertLWHists();
644  if (tb)
645  tb->m_bench_algfin_convertLWHists.finishMeasurement();
646  if( !sc.isSuccess() ) {
647  if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::convertLWHists() unsuccessful" << endmsg;
648  }
649  if (tb)
650  tb->report(this);
651  m_d->toolAudEnd();
652  }
653  if (msgLvl(MSG::DEBUG)) {
654  msg(MSG::DEBUG) << " --> Done calling IMonitorToolBase::finalHists() and IMonitorToolBase::checkHists()" << endmsg;
655  msg(MSG::DEBUG) << " --> Exiting successfully" << endmsg;
656  }
657  return StatusCode::SUCCESS;
658 }
659 
660 
663 start()
664 {
666  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "AthenaMonManager::start():" << endmsg;
667 
668  StatusCode sc;
669 
671  for( ToolHandleArray<IMonitorToolBase>::iterator i = m_monTools.begin(); i != monToolsEnd; ++i ) {
672  ToolHandle<IMonitorToolBase>& tool = *i;
674  AthMonBench bench_tmp;
675  if (m_d->m_doResourceMon)
676  bench_tmp.startMeasurement();
677  sc = tool->bookHists();
678  if (m_d->m_doResourceMon) {
679  bench_tmp.finishMeasurement();
680  Imp::ToolBench* tb = m_d->getToolBench(tool.operator->());
681  tb->m_bench_algexec_bookHists += bench_tmp;
682  }
683  if( !sc.isSuccess() ) {
684  if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::bookHists() unsuccessful" << endmsg;
685  }
686  m_d->toolAudEnd();
687  }
688  if (msgLvl(MSG::DEBUG)) {
689  msg(MSG::DEBUG) << " --> Done calling IMonitorToolBase::bookHists()" << endmsg;
690  msg(MSG::DEBUG) << " --> Exiting successfully" << endmsg;
691  }
692 
693  return StatusCode::SUCCESS;
694 }
695 
696 
697 std::string
699 fileKey() const
700 {
701  return m_d->m_fileKeyProp;
702 }
703 
704 
705 void
707 passOwnership( TObject* h, const std::string& key )
708 {
709  Imp::ObjMap_t::value_type valToInsert( key, h );
710  m_d->m_objMap.insert( valToInsert );
711 }
712 
713 
714 void
716 passOwnership( LWHist* h, const std::string& key )
717 {
718  Imp::ObjMapLW_t::value_type valToInsert( key, h );
719  m_d->m_objMapLW.insert( valToInsert );
720 }
721 
722 
723 
724 LWHist *
726 ownedLWHistOfKey(const std::string& key) const
727 {
729  return iLW == m_d->m_objMapLW.end() ? 0 : iLW->second;
730 }
731 
732 
733 void
736 {
738 }
739 
740 
741 LWHist *
743 writeAndDeleteLWHist( const std::string& key, const std::string& streamName )
744 {
745 // std::cout<<"writeAndDeleteLWHist... maybe"<<std::endl;
746  //If is owned LWHist we write it in a root file and deletes it + returns it's (now deallocated) address.
747 
749  if( iLW != m_d->m_objMapLW.end() )
750  {
751  //Fixme: add private helper method actualWriteAndDelete(TH1*), to use by both...
752  LWHist * lwhist =iLW->second;
753  TH1 * h = lwhist->getROOTHistBase();
754  if( h != 0 )
755  {
756  //Get correct dir by doing a quick reg/dereg:
757  bool ok(false);
758  if (lwhist->usingROOTBackend())
759  {
760  //Already registered
761  ok = true;
762  }
763  else
764  {
765  //Delayed registration:
766  if (m_THistSvc->regHist( streamName, h ).isSuccess())
767  // if (m_THistSvc->deReg( h ).isSuccess())
768  ok = true;
769  }
770 
771  if (ok)
772  {
773  bool doRecursiveReferenceDelete = gROOT->MustClean();
774  gROOT->SetMustClean(false);
775  TDirectory* dir = h->GetDirectory();
776  TDirectory* g = gDirectory;
777  if(dir)
778  dir->cd();
779  h->Write();
780  g->cd();
781 
782  StatusCode sc = m_THistSvc->deReg( h );
783  if( !sc.isSuccess() )
784  {
785  if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "AthenaMonManager::WriteAndDeleteHist(): Failure to deReg( TObject* )" << endmsg;
786  }
787 
788  m_d->m_objMapLW.erase( iLW );
789  lwhist->setOwnsROOTHisto(true);//Since we deregistered
791  lwhist=0;
792  gROOT->SetMustClean(doRecursiveReferenceDelete);//Should be after the deleteLWHist call
793  }
794  return lwhist;
795  }
796  }
797  return 0;
798 }
799 
800 LWHist *
802 writeAndResetLWHist( const std::string& key, const std::string& streamName )
803 {
804 // std::cout<<"writeAndDeleteLWHist... maybe"<<std::endl;
805  //If is owned LWHist we write it in a root file and deletes it + returns it's (now deallocated) address.
806 
808  if( iLW != m_d->m_objMapLW.end() )
809  {
810  //Fixme: add private helper method actualWriteAndDelete(TH1*), to use by both...
811  LWHist * lwhist =iLW->second;
812  TH1 * h = lwhist->getROOTHistBase();
813  if( h != 0 )
814  {
815  //Get correct dir by doing a quick reg/dereg:
816  bool ok(false);
817  if (lwhist->usingROOTBackend())
818  {
819  //Already registered
820  ok = true;
821  }
822  else
823  {
824  //Delayed registration:
825  if (m_THistSvc->regHist( streamName, h ).isSuccess())
826  // if (m_THistSvc->deReg( h ).isSuccess())
827  ok = true;
828  }
829 
830  if (ok)
831  {
832  bool doRecursiveReferenceDelete = gROOT->MustClean();
833  gROOT->SetMustClean(false);
834  TDirectory* dir = h->GetDirectory();
835  TDirectory* g = gDirectory;
836  if(dir)
837  dir->cd();
838  h->Write();
839  g->cd();
840 
841  StatusCode sc = m_THistSvc->deReg( h );
842  if( !sc.isSuccess() )
843  {
844  if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "AthenaMonManager::WriteAndDeleteHist(): Failure to deReg( TObject* )" << endmsg;
845  }
846 
847  m_d->m_objMapLW.erase( iLW );
848  lwhist->setOwnsROOTHisto(true);//Since we deregistered
849 
850  //LWHistAthMonWrapper::deleteLWHist(lwhist);
851  // Yuriy: commented out this line to make the code properly place histograms
852  // in the offline environament; It has been a bug after I fixed online environment
853  // with a new approach; Basically inherited from writeAndDeletLWHist(...)
854  //LWHistAthMonWrapper::removeCustomData(lwhist);
855 
856  lwhist->Reset();
857 
858  lwhist=0;
859  gROOT->SetMustClean(doRecursiveReferenceDelete);//Should be after the deleteLWHist call
860  }
861  return lwhist;
862  }
863  }
864  return 0;
865 }
866 
867 
868 void
870 writeAndDelete( const std::string& key )
871 {
872  // If is owned TObject, we deregister from THistSvc, write it in a
873  // root file, and delete it.
874 
876  if( i != m_d->m_objMap.end() ) {
877  TObject* o = i->second;
878  TH1* h = dynamic_cast<TH1*>( o );
879  if( h != 0 ) {
880  // By default, ROOT does its own bookkeeping of references to
881  // histograms, and this leads to a significant amount of time
882  // spent in the TObject d'tor when there are >= O(1000) TDirectories.
883  // So, turn this bookkeeping off when deleting these histograms.
884  bool doRecursiveReferenceDelete = gROOT->MustClean();
885  gROOT->SetMustClean(false);
886  TDirectory* dir = h->GetDirectory();
887  TDirectory* g = gDirectory;
888  if( dir )
889  dir->cd();
890  h->Write();
891  g->cd();
892 
893  StatusCode sc = m_THistSvc->deReg( h );
894  if( !sc.isSuccess() ) {
895  if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "AthenaMonManager::WriteAndDeleteHist(): Failure to deReg( TObject* )" << endmsg;
896  }
897  delete o;
898  gROOT->SetMustClean(doRecursiveReferenceDelete);
899  m_d->m_objMap.erase( key );
900  }
901  }
902 }
903 
904 // *********************************************************************
905 // Protected Methods
906 // *********************************************************************
907 
908 
909 // *********************************************************************
910 // Private Methods
911 // *********************************************************************
912 namespace {
913 
914 std::string strToLower( const std::string& str )
915 {
916  std::string lstr(str);
917  std::string::const_iterator from = str.begin();
918  std::string::const_iterator strend = str.end();
919  std::string::iterator to = lstr.begin();
920  while( from != strend ) {
921  *to++ = tolower(*from++);
922  }
923  return lstr;
924 }
925 
926 } // unnamed namespace
AthenaMonManager::ownedLWHistOfKey
virtual LWHist * ownedLWHistOfKey(const std::string &key) const
Definition: AthenaMonManager.cxx:726
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
LWHist
Definition: LWHist.h:26
AthenaMonManager::Imp::ATLAS_THREAD_SAFE
static std::string s_dataTypeStr ATLAS_THREAD_SAFE
Definition: AthenaMonManager.cxx:182
pid_t
int32_t pid_t
Definition: FPGATrackSimTypes.h:19
IMonitorToolBase.h
AthenaMonManager::writeAndDeleteLWHist
virtual LWHist * writeAndDeleteLWHist(const std::string &key, const std::string &streamName)
Definition: AthenaMonManager.cxx:743
LWHistStats::nActiveLWHists
static long nActiveLWHists()
Definition: LWHistStats.h:24
AthenaMonManager::Imp::~Imp
~Imp()
Definition: AthenaMonManager.cxx:65
AthenaMonManager::Imp::Imp
Imp(AthenaMonManager *man, const std::string &name)
Definition: AthenaMonManager.cxx:42
AthenaMonManager::Imp::ToolBench::m_bench_alginit_retrieve
AthMonBench m_bench_alginit_retrieve
Definition: AthenaMonManager.cxx:140
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
LWHistStats.h
ManagedMonitorToolBase
Provides functionality for users to implement and save histograms, ntuples, and summary data,...
Definition: ManagedMonitorToolBase.h:74
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
AthenaMonManager::writeAndResetLWHist
virtual LWHist * writeAndResetLWHist(const std::string &key, const std::string &streamName)
Definition: AthenaMonManager.cxx:802
hist_file_dump.d
d
Definition: hist_file_dump.py:137
AthenaMonManager::Imp::m_toolbenchmarks
std::map< IMonitorToolBase *, ToolBench * > m_toolbenchmarks
Definition: AthenaMonManager.cxx:162
AthenaMonManager::Imp::m_eventCounter
long m_eventCounter
Definition: AthenaMonManager.cxx:89
AthenaMonManager::Imp::LWHistLeakChecker::m_d
Imp * m_d
Definition: AthenaMonManager.cxx:115
AthenaMonManager::runNumber
static unsigned int runNumber()
Definition: AthenaMonManager.cxx:364
AthenaMonManager::fileKey
virtual std::string fileKey() const
Definition: AthenaMonManager.cxx:699
AthenaMonManager::cosmics
@ cosmics
Definition: AthenaMonManager.h:58
AthenaMonManager::Imp::ObjMap_t
std::map< std::string, TObject * > ObjMap_t
Definition: AthenaMonManager.cxx:77
AthenaMonManager::AOD
@ AOD
Definition: AthenaMonManager.h:49
AthenaMonManager::passOwnership
virtual void passOwnership(TObject *h, const std::string &key)
Pass ownership of a TObject/LWHist to this manager so that it will be deleted appropriately.
Definition: AthenaMonManager.cxx:707
AthenaMonManager::finalize
virtual StatusCode finalize()
Definition: AthenaMonManager.cxx:600
AthenaMonManager::Imp::m_everyNevents
long m_everyNevents
Definition: AthenaMonManager.cxx:88
AthenaMonManager::envStringToEnum
static Environment_t envStringToEnum(const std::string &str)
Converts a string to an Environment_t of the same name.
Definition: AthenaMonManager.cxx:253
CSV_InDetExporter.new
new
Definition: CSV_InDetExporter.py:145
skel.it
it
Definition: skel.GENtoEVGEN.py:423
AthenaMonManager::Imp::m_objMap
ObjMap_t m_objMap
Definition: AthenaMonManager.cxx:78
AthCommonMsg< Algorithm >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
AthenaMonManager::heavyIonCollisions
@ heavyIonCollisions
Definition: AthenaMonManager.h:58
AthenaMonManager::Imp::ToolBench::m_bench_algexec_bookHists
AthMonBench m_bench_algexec_bookHists
Definition: AthenaMonManager.cxx:143
UploadAMITag.l
list l
Definition: UploadAMITag.larcaf.py:158
AthenaMonManager::Imp::s_staticDataAreInit
static std::atomic< bool > s_staticDataAreInit
Definition: AthenaMonManager.cxx:180
AthenaMonManager::Imp::ToolBench
Definition: AthenaMonManager.cxx:136
AthenaMonManager::DataType_t
DataType_t
An enumeration of the different types of data the monitoring application may be running over.
Definition: AthenaMonManager.h:58
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
AthenaMonManager::Imp::s_svcLocator
static std::atomic< ISvcLocator * > s_svcLocator
Definition: AthenaMonManager.cxx:178
python.LumiCalcHtml.lc
lc
Definition: LumiCalcHtml.py:579
ISGAudSvc::setFakeCurrentAlg
virtual void setFakeCurrentAlg(const std::string &)
Definition: ISGAudSvc.h:37
AthenaMonManager::Imp::m_nActiveLWHists
long m_nActiveLWHists
Definition: AthenaMonManager.cxx:104
AthenaMonManager::Imp::toolAudStart
void toolAudStart(const T &tool)
Definition: AthenaMonManager.cxx:127
AthenaAttributeList.h
python.SystemOfUnits.ms
int ms
Definition: SystemOfUnits.py:132
AthenaMonManager::m_d
Imp * m_d
Definition: AthenaMonManager.h:129
AthenaMonManager::getLBsLowStat
static unsigned int getLBsLowStat()
Definition: AthenaMonManager.cxx:326
AthenaMonManager::Imp::ToolBench::report
void report(AthenaMonManager *a)
Definition: AthenaMonManager.cxx:148
ISGAudSvc::clearFakeCurrentAlg
virtual void clearFakeCurrentAlg()
Definition: ISGAudSvc.h:38
AthenaMonManager::Imp::LWHistLeakChecker::m_mgcopies_initval
unsigned m_mgcopies_initval
Definition: AthenaMonManager.cxx:117
TruthTest.itE
itE
Definition: TruthTest.py:25
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
AthenaMonManager::Imp::m_runProp
unsigned int m_runProp
Definition: AthenaMonManager.cxx:100
AthenaMonManager::Imp::m_isPrimaryManager
bool m_isPrimaryManager
Definition: AthenaMonManager.cxx:86
AthenaMonManager::Imp::ToolBench::m_bench_algexec_fillHists
AthMonBench m_bench_algexec_fillHists
Definition: AthenaMonManager.cxx:141
AthenaMonManager::environment
static Environment_t environment()
Returns the running environment of the monitoring application to help ManagedMonitorToolBase objects ...
Definition: AthenaMonManager.cxx:321
LWHistAthMonWrapper::streamName
static const std::string & streamName(LWHist *)
rerun_display.client
client
Definition: rerun_display.py:31
AthenaMonManager::Imp::m_sgAudSvc
ISGAudSvc * m_sgAudSvc
Definition: AthenaMonManager.cxx:84
AthenaMonManager::fillNumber
static unsigned int fillNumber()
Definition: AthenaMonManager.cxx:376
AthenaMonManager::Imp::m_environmentProp
std::string m_environmentProp
Definition: AthenaMonManager.cxx:95
AthenaMonManager::getLBsMedStat
static unsigned int getLBsMedStat()
Definition: AthenaMonManager.cxx:329
LWHist::usingROOTBackend
bool usingROOTBackend() const
Definition: LWHist.h:73
Execution.tb
tb
Definition: Execution.py:15
ManagedMonitorToolBase.h
AthMonBench::finishMeasurement
void finishMeasurement()
Definition: AthMonBench.h:91
AthenaMonManager::Imp::m_dataTypeProp
std::string m_dataTypeProp
Definition: AthenaMonManager.cxx:94
AthenaMonManager::tier0ESD
@ tier0ESD
Definition: AthenaMonManager.h:49
AthenaMonManager::Imp::m_LBsLowStatProp
unsigned int m_LBsLowStatProp
Definition: AthenaMonManager.cxx:96
AthenaMonManager::dataType
static DataType_t dataType()
Returns the data type that the monitoring application is running over to help ManagedMonitorToolBase ...
Definition: AthenaMonManager.cxx:338
AthenaMonManager::Imp::ToolBench::m_bench_algexec_checkHists
AthMonBench m_bench_algexec_checkHists
Definition: AthenaMonManager.cxx:142
TrigConf::MSGTC::Level
Level
Definition: Trigger/TrigConfiguration/TrigConfBase/TrigConfBase/MsgStream.h:21
AthenaMonManager::start
virtual StatusCode start()
Definition: AthenaMonManager.cxx:663
AthenaMonManager
An Algorithm that manages a set of modules, each inheriting from ManagedMonitorToolBase,...
Definition: AthenaMonManager.h:34
AthenaMonManager::Imp::ToolBench::m_bench_algfin_checkHists
AthMonBench m_bench_algfin_checkHists
Definition: AthenaMonManager.cxx:146
AthenaMonManager::Imp::ToolBench::m_bench_algfin_convertLWHists
AthMonBench m_bench_algfin_convertLWHists
Definition: AthenaMonManager.cxx:147
LWHistAthMonWrapper::key
static const std::string & key(LWHist *)
AthenaMonManager::dataTypeStringToEnum
static DataType_t dataTypeStringToEnum(const std::string &str)
Converts a string to a DataType_t of the same name.
Definition: AthenaMonManager.cxx:290
ManagedMonitorToolBase::setMonManager
virtual void setMonManager(AthenaMonManager *manager)
Takes a pointer to a managing object to get information from it when needed.
Definition: ManagedMonitorToolBase.cxx:1436
ParseInputs.gDirectory
gDirectory
Definition: Final2012/ParseInputs.py:133
lumiFormat.i
int i
Definition: lumiFormat.py:92
AthenaMonManager::collisions
@ collisions
Definition: AthenaMonManager.h:58
TrigNavigationThinningSvcMutex::s_mutex
static std::mutex s_mutex
Definition: TrigNavigationThinningSvcMutex.h:19
AthenaMonManager::tier0
@ tier0
Definition: AthenaMonManager.h:49
AthenaMonManager::Imp::m_nMonGroupCopies
unsigned m_nMonGroupCopies
Definition: AthenaMonManager.cxx:103
AthenaMonManager::Imp::LWHistLeakChecker
Definition: AthenaMonManager.cxx:114
python.CaloCondTools.g
g
Definition: CaloCondTools.py:15
AthenaMonManager::Imp::LWHistLeakChecker::m_initVal
long m_initVal
Definition: AthenaMonManager.cxx:116
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
AthenaMonManager::online
@ online
Definition: AthenaMonManager.h:49
tolower
void tolower(std::string &s)
Definition: AthenaSummarySvc.cxx:113
AthenaMonManager::writeAndDelete
virtual void writeAndDelete(const std::string &key)
If the TObject is owned by this manager, its Write() method is called and it is deleted.
Definition: AthenaMonManager.cxx:870
AthenaMonManager::Imp::m_manualDataTypeSetupProp
bool m_manualDataTypeSetupProp
Definition: AthenaMonManager.cxx:93
LWHistControls::setROOTBackend
static void setROOTBackend(bool)
Definition: LWHistControls.cxx:53
AthenaMonManager::tier0Raw
@ tier0Raw
Definition: AthenaMonManager.h:49
AthenaMonManager.h
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
AthenaMonManager::user
@ user
Definition: AthenaMonManager.h:49
ManagedMonitorToolBase::MonGroup::ncopies
static unsigned ncopies()
Definition: ManagedMonitorToolBase.cxx:187
AthenaMonManager::Imp::toolAudEnd
void toolAudEnd()
Definition: AthenaMonManager.cxx:130
AthenaMonManager::m_monTools
ToolHandleArray< IMonitorToolBase > m_monTools
Definition: AthenaMonManager.h:123
AthenaMonManager::Imp::ToolBench::ToolBench
ToolBench(IMonitorToolBase *t)
Definition: AthenaMonManager.cxx:138
AthenaMonManager::Imp::m_manualRunLBProp
bool m_manualRunLBProp
Definition: AthenaMonManager.cxx:98
AthAlgorithm
Definition: AthAlgorithm.h:47
beamspotman.dir
string dir
Definition: beamspotman.py:623
AthenaMonManager::Imp::LWHistLeakChecker::~LWHistLeakChecker
~LWHistLeakChecker()
Definition: AthenaMonManager.cxx:121
AthenaMonManager::Environment_t
Environment_t
An enumeration of the different types of running environment the monitoring application may be in.
Definition: AthenaMonManager.h:49
AthenaMonManager::Imp::m_LBsMedStatProp
unsigned int m_LBsMedStatProp
Definition: AthenaMonManager.cxx:96
AthenaMonManager::Imp::ObjMapLW_t
std::map< std::string, LWHist * > ObjMapLW_t
Definition: AthenaMonManager.cxx:80
IMonitorToolBase
Definition: IMonitorToolBase.h:25
AthMonBench::s_resourceMonThreshold
static const MSG::Level s_resourceMonThreshold
Definition: AthMonBench.h:30
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
AthMonBench.h
ISGAudSvc
Definition: ISGAudSvc.h:21
AthenaMonManager::getLBsHigStat
static unsigned int getLBsHigStat()
Definition: AthenaMonManager.cxx:332
AthMonBench::startMeasurement
void startMeasurement()
Definition: AthMonBench.h:83
LWHistStats
Definition: LWHistStats.h:22
AtlCoolConsole.tool
tool
Definition: AtlCoolConsole.py:453
AthenaMonManager::execute
virtual StatusCode execute()
Definition: AthenaMonManager.cxx:512
AthenaMonManager::Imp::m_fileKeyProp
std::string m_fileKeyProp
Definition: AthenaMonManager.cxx:91
AthenaMonManager::Imp::m_theManager
AthenaMonManager * m_theManager
Definition: AthenaMonManager.cxx:83
AthenaMonManager::stop
virtual StatusCode stop()
Definition: AthenaMonManager.cxx:607
AthenaMonManager::Imp::getToolBench
ToolBench * getToolBench(IMonitorToolBase *t)
Definition: AthenaMonManager.cxx:163
LWHist::setOwnsROOTHisto
void setOwnsROOTHisto(bool b)
Definition: LWHist.h:75
CxxUtils::to
CONT to(RANGE &&r)
Definition: ranges.h:32
AthenaMonManager::Imp::m_doResourceMon
bool m_doResourceMon
Definition: AthenaMonManager.cxx:134
AthenaMonManager::Imp::m_forkedProcess
bool m_forkedProcess
Definition: AthenaMonManager.cxx:106
LWHist::Reset
virtual void Reset()=0
AthenaPoolExample_Copy.streamName
string streamName
Definition: AthenaPoolExample_Copy.py:39
AthenaMonManager::Imp::m_rootBackend
bool m_rootBackend
Definition: AthenaMonManager.cxx:109
LWHistAthMonWrapper::deleteLWHist
static void deleteLWHist(LWHist *)
a
TList * a
Definition: liststreamerinfos.cxx:10
AthenaMonManager::AthenaMonManager
AthenaMonManager(const std::string &name, ISvcLocator *pSvcLocator)
Definition: AthenaMonManager.cxx:208
h
AthenaMonManager::forkedProcess
bool forkedProcess()
Definition: AthenaMonManager.cxx:345
AthenaMonManager::Imp::m_lumiBlockProp
unsigned int m_lumiBlockProp
Definition: AthenaMonManager.cxx:101
AthenaMonManager::altprod
@ altprod
Definition: AthenaMonManager.h:49
AthenaMonManager::Imp::m_lastPID
pid_t m_lastPID
Definition: AthenaMonManager.cxx:107
ISGAudSvc.h
TH1
Definition: rootspy.cxx:268
AthenaMonManager::Imp::ToolBench::m_bench_algfin_finalHists
AthMonBench m_bench_algfin_finalHists
Definition: AthenaMonManager.cxx:145
DEBUG
#define DEBUG
Definition: page_access.h:11
plotBeamSpotMon.mon
mon
Definition: plotBeamSpotMon.py:67
AthCommonMsg< Algorithm >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
AthenaMonManager::Imp::m_LBsHigStatProp
unsigned int m_LBsHigStatProp
Definition: AthenaMonManager.cxx:96
AthenaMonManager::m_THistSvc
ITHistSvc * m_THistSvc
Definition: AthenaMonManager.h:125
AthenaMonManager::Imp::LWHistLeakChecker::LWHistLeakChecker
LWHistLeakChecker(Imp *d)
Definition: AthenaMonManager.cxx:119
LWHistAthMonWrapper.h
str
Definition: BTagTrackIpAccessor.cxx:11
AthenaMonManager::Imp::m_objMapLW
ObjMapLW_t m_objMapLW
Definition: AthenaMonManager.cxx:81
AthenaMonManager::Imp
Definition: AthenaMonManager.cxx:40
AthenaMonManager::lumiBlockNumber
static unsigned int lumiBlockNumber()
Definition: AthenaMonManager.cxx:352
LWHistControls.h
AthenaMonManager::userDefined
@ userDefined
Definition: AthenaMonManager.h:58
python.root_pickle.load
def load(f, use_proxy=1, key=None)
Definition: root_pickle.py:476
checker_macros.h
Define macros for attributes used to control the static checker.
AthenaMonManager::~AthenaMonManager
virtual ~AthenaMonManager()
Definition: AthenaMonManager.cxx:234
LWHist::getROOTHistBase
virtual TH1 * getROOTHistBase()=0
AthMonBench::setUnitCount
void setUnitCount()
Definition: AthMonBench.h:123
AthMonBench
Definition: AthMonBench.h:27
LWHist.h
AthenaMonManager::Imp::ToolBench::m_theTool
const IMonitorToolBase * m_theTool
Definition: AthenaMonManager.cxx:139
AthenaMonManager::noOutput
@ noOutput
Definition: AthenaMonManager.h:49
AthenaMonManager::monteCarlo
@ monteCarlo
Definition: AthenaMonManager.h:58
TSU::T
unsigned long long T
Definition: L1TopoDataTypes.h:35
TrigNavigationThinningSvcMutex.h
AthenaMonManager::initialize
virtual StatusCode initialize()
Definition: AthenaMonManager.cxx:384
ServiceHandle< Gaudi::Interfaces::IOptionsSvc >
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37