ATLAS Offline Software
ManagedMonitorToolBase.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef ManagedMonitorToolBase_CXX
6 #define ManagedMonitorToolBase_CXX
7 
9 
10 #include <cctype>
11 #include <ctime>
12 #include <sstream>
13 
14 #include "TGraph.h"
15 #include "TH1.h"
16 #include "TH2.h"
17 #include "TTree.h"
18 #include "TROOT.h"
19 #include "TFile.h"
20 #include "TEfficiency.h"
21 #include "LWHists/LWHist.h"
22 #include "LWHists/LWHistControls.h"
23 #include "LWHistAthMonWrapper.h"
24 #include "AthMonBench.h"
26 
27 #include "Gaudi/Interfaces/IOptionsSvc.h"
28 #include "GaudiKernel/IHistogramSvc.h"
29 #include "GaudiKernel/IMessageSvc.h"
30 #include "GaudiKernel/ISvcLocator.h"
31 #include "GaudiKernel/MsgStream.h"
32 
35 #include "GaudiKernel/ITHistSvc.h"
36 
37 
38 //____________________________________________________________________
40 public:
41  inline static std::atomic<ISvcLocator*> s_svcLocator{nullptr};
44  m_doResourceMon(false),
46  ~Imp() {}
47 
48  //Data members:
50  //To warn against clients that reimplemented initialize without calling ManagedMonitorToolBase::initialze():
52 
53  //Internal methods and data members for detailed LWHists-aware CPU/mem monitoring:
69  void benchFinalReport();
70  void benchReset();
71 };
72 
76 
77 //____________________________________________________________________
79 {
80  if (!m_doResourceMon)
81  return;
82  benchReset();
84 }
85 
86 //____________________________________________________________________
88 {
89  if (!m_doResourceMon)
90  return;
91  m_bench_book.finishMeasurement();
92  m_bench_total += m_bench_book;
93  m_benchNFillAfterbook = 0;
94 }
95 
96 //____________________________________________________________________
98 {
99  if (!m_doResourceMon)
100  return;
101  m_bench_tmp.reset();
102  m_bench_tmp.startMeasurement();
103 }
104 
105 //____________________________________________________________________
107 {
108  if (!m_doResourceMon)
109  return;
110  m_bench_tmp.finishMeasurement();
111  m_bench_total += m_bench_tmp;
112  ++m_benchNFillAfterbook;
113  if (m_benchNFillAfterbook==1) {
114  m_bench_fillfirst = m_bench_tmp;
115  } else {
116  m_bench_fillall += m_bench_tmp;
117  m_bench_filllast = m_bench_tmp;
118  }
119 }
120 
121 //____________________________________________________________________
123 {
124  if (!m_doResourceMon)
125  return;
126  m_bench_proc.startMeasurement();
127 }
128 
129 //____________________________________________________________________
131 {
132  if (!m_doResourceMon)
133  return;
134  m_bench_proc.finishMeasurement();
135  m_bench_total += m_bench_proc;
136  m_bench_fillall -= m_bench_filllast;
137  m_benchNFillAfterbook = 0;
138  benchFinalReport();
139  benchReset();
140 }
141 
142 //____________________________________________________________________
144 {
145  if (!m_doResourceMon)
146  return;
147  m_benchNFillAfterbook = 0;
148  m_bench_tmp.reset();
149  m_bench_book.reset();
150  m_bench_fillfirst.reset();
151  m_bench_fillall.reset();
152  m_bench_filllast.reset();
153  m_bench_proc.reset();
154  m_bench_total.reset();
155 
156 }
157 
158 //____________________________________________________________________
160 {
161  if (!m_doResourceMon)
162  return;
163  m_theclass->msg(AthMonBench::s_resourceMonThreshold) << "ResourceSummary --> Result of dedicated mon-tool resource monitoring:"<<endmsg;
164  m_theclass->msg(AthMonBench::s_resourceMonThreshold) << "ResourceSummary --> Book : "<<m_bench_book << endmsg;
165  m_theclass->msg(AthMonBench::s_resourceMonThreshold) << "ResourceSummary --> First Fill : "<<m_bench_fillfirst << endmsg;
166  m_theclass->msg(AthMonBench::s_resourceMonThreshold) << "ResourceSummary --> Last Fill : "<<m_bench_filllast << endmsg;
167  m_theclass->msg(AthMonBench::s_resourceMonThreshold) << "ResourceSummary --> Other Fills : "<<m_bench_fillall << endmsg;
168  m_theclass->msg(AthMonBench::s_resourceMonThreshold) << "ResourceSummary --> Proc : "<<m_bench_proc << endmsg;
169  m_bench_total.setUnitCount();//to avoid dividing by number of measurements
170  m_theclass->msg(AthMonBench::s_resourceMonThreshold) << "ResourceSummary --> Grand Total : "<<m_bench_total << endmsg;
171  //NB: Needs total also!
172 }
173 
174 
175 
179 
180 namespace {
181 
182  std::string strToLower( const std::string& str );
183 
184 } // unnamed namespace
185 
186 static std::atomic<unsigned> s_mmtb_mongroup_ncopies=0;
187 unsigned ManagedMonitorToolBase::MonGroup::ncopies() { return s_mmtb_mongroup_ncopies; }
188 void ManagedMonitorToolBase::MonGroup::badusage() { ++s_mmtb_mongroup_ncopies; }
189 
190 // *********************************************************************
191 // Public Methods
192 // *********************************************************************
195 regHist( TH1* h )
196 {
197  if( m_tool != 0 ) {
198  std::string hName( h->GetName() );
199  HistMap_t::value_type valToInsert( hName, h );
200  m_map.insert( valToInsert );
201  return m_tool->regHist( h, *this );
202  }
203 
204  return StatusCode::FAILURE;
205 }
206 
209 getHist( TH1*& h, const std::string& hName )
210 {
211  if( m_tool != 0 ) {
212  return m_tool->getHist( h, hName, *this );
213  }
214 
215  return StatusCode::FAILURE;
216 }
217 
218 
219 
220 StatusCode
222 regHist( LWHist* h )
223 {
224  if( m_tool != 0 ) {
225  std::string hName( h->GetName() );
226  HistMapLW_t::value_type valToInsert( hName, h );//Fixme: Just keep a list of the hists
227  m_mapLW.insert( valToInsert );
228  return m_tool->regHist( h, *this );
229  }
230 
231  return StatusCode::FAILURE;
232 }
233 
234 
235 
237 {
238  if( m_tool )
239  return m_tool->getHist( h, hName, *this );
240 
241  return StatusCode::FAILURE;
242 }
243 
244 
247 getHist( TH2*& h, const std::string& hName )
248 {
249  if( m_tool != 0 ) {
250  return m_tool->getHist( h, hName, *this );
251  }
252 
253  return StatusCode::FAILURE;
254 }
255 
256 
258  if( m_tool != 0 ) {
259  return m_tool->regEfficiency( e, *this );
260  }
261  return StatusCode::FAILURE;
262 }
263 
264 
267 regGraph( TGraph* g )
268 {
269  if( m_tool != 0 ) {
270  return m_tool->regGraph( g, *this );
271  }
272 
273  return StatusCode::FAILURE;
274 }
275 
276 
279 regTree( TTree* t )
280 {
281  if( m_tool != 0 ) {
282  return m_tool->regTree( t, *this );
283  }
284 
285  return StatusCode::FAILURE;
286 }
287 
288 
291 writeAndDelete( TH1* h )
292 {
293  if( m_tool != 0 ) {
294  std::string hName( h->GetName() );
295  m_map.erase( hName );
296  return m_tool->writeAndDelete( h, *this );
297  }
298 
299  return StatusCode::FAILURE;
300 }
301 
302 
305 deregHist( TH1* h )
306 {
307  if( m_tool != 0 ) {
308  std::string hName( h->GetName() );
309  m_map.erase( hName );
310  return m_tool->deregHist( h );
311  }
312 
313  return StatusCode::FAILURE;
314 }
315 
316 
318 {
319  if( m_tool != 0 ) {
320  std::string hName( h->GetName() );
321  m_mapLW.erase( hName );
322  return m_tool->deregHist( h );
323  }
324 
325  return StatusCode::FAILURE;
326 }
327 
328 
331 deregGraph( TGraph* g )
332 {
333  if( m_tool != 0 ) {
334  return m_tool->deregGraph( g );
335  }
336 
337  return StatusCode::FAILURE;
338 }
339 
340 
343 deregObject( const std::string& objName )
344 {
345  if( m_tool != 0 ) {
346  return m_tool->deregObject( objName, *this );
347  }
348 
349  return StatusCode::FAILURE;
350 }
351 
352 
355 deregAll()
356 {
357  if( m_tool != 0 ) {
358  bool isSuccess(true);
359  StatusCode sc;
360 
361  typedef HistMap_t::const_iterator MapIter_t;
362  MapIter_t mapEnd = m_map.end();
363  for( MapIter_t i = m_map.begin(); i != mapEnd; ++i ) {
364  sc = m_tool->deregHist( i->second );
365  if( !sc.isSuccess() )
366  isSuccess = false;
367  }
368 
369  typedef HistMapLW_t::const_iterator MapIterLW_t;
370  MapIterLW_t mapEndLW = m_mapLW.end();
371  for( MapIterLW_t i = m_mapLW.begin(); i != mapEndLW; ++i ) {
372  sc = m_tool->deregHist( i->second );
373  if( !sc.isSuccess() )
374  isSuccess = false;
375  }
376 
377  m_map.clear();
378  m_mapLW.clear();
379 
380  if( isSuccess )
381  return StatusCode::SUCCESS;
382  }
383 
384  return StatusCode::FAILURE;
385 }
386 
387 
389 ManagedMonitorToolBase( const std::string & type, const std::string & name,
390  const IInterface* parent )
391  : AthAlgTool( type, name, parent )
392  , m_manager(0)
393  , m_managerNameProp("AthenaMonManager")
394  , m_fileKey("")
395  , m_dataTypeStr("userDefined")
396  , m_environmentStr("noOutput")
397  , m_detailLevel(1)
398  , m_dataType(AthenaMonManager::userDefined)
400  , m_streamNameFcn(0)
401  , m_THistSvc("THistSvc",name)
402  , m_procNEventsProp(0)
403  , m_path("")
404  , m_preScaleProp(0)
405  , m_triggerChainProp("")
406  , m_triggerGroupProp("")
407  , m_useTrigger(false)
408  , m_lastLumiBlock(0)
409  , m_lastRun(0)
413  , m_nEvents(1)
415  , m_nLumiBlocks(1)
417  , m_bookHistogramsInitial(false)
418  , m_useLumi(false)
419  , m_defaultLBDuration(60.)
420  , m_d(new Imp(this))
421 {
422 // ManagedMonitorToolBase_resetHistStatistics(this);
423  declareInterface<IMonitorToolBase>(this);
424  declareProperty( "ProcessNEvents", m_procNEventsProp );
425  declareProperty( "histoPathBase", m_path );
426  declareProperty( "PreScale", m_preScaleProp );
427  declareProperty( "TriggerChain", m_triggerChainProp );
428  declareProperty( "TriggerGroup", m_triggerGroupProp );
429 
430  // If a class would like to associate itself to a manager but cannot actually
431  // be referenced by it, the manager name can be set explicitly. Otherwise,
432  // it is set automatically.
433  declareProperty( "ManagerName", m_managerNameProp );
434 
435  // Enable luminosity tool?
436  declareProperty( "EnableLumi", m_useLumi );
437 
438  // How detailed should the monitoring be?
439  declareProperty( "DetailLevel", m_detailLevel );
440 
441  // If we don't know how long an LB is, here's the default
442  declareProperty( "DefaultLBDuration", m_defaultLBDuration );
443 
444  // Properties that are overridden in initialize()---settings via jobOptions are ignored!
445  declareProperty( "FileKey", m_fileKey );
446  declareProperty( "DataType", m_dataTypeStr );
447  declareProperty( "Environment", m_environmentStr );
448 
449  if( !Imp::s_svcLocator )
450  Imp::s_svcLocator = svcLoc();
451 
452  for (auto interval: { eventsBlock, lumiBlock, lowStat, run, all }) {
453  m_templateHistograms[interval] = std::vector< MgmtParams<TH1> >();
454  m_templateGraphs[interval] = std::vector< MgmtParams<TGraph> >();
455  m_templateTrees[interval] = std::vector< MgmtParams<TTree> >();
456  m_templateLWHistograms[interval] = std::vector< MgmtParams<LWHist> >();
458  }
459 
460  newLowStatInterval = false;
461  newMedStatInterval = false;
462  newHigStatInterval = false;
463  newLowStat = false;
464  newLumiBlock = false;
465  newRun = false;
466  newEventsBlock = false;
467  endOfEventsBlock = false;
468  endOfLowStat = false;
469  endOfLumiBlock = false;
470  endOfRun = false;
471 
472  m_newLowStatInterval = false;
473  m_newMedStatInterval = false;
474  m_newHigStatInterval = false;
475  m_newLowStat = false;
476  m_newLumiBlock = false;
477  m_newRun = false;
478  m_newEventsBlock = false;
479  m_endOfEventsBlock = false;
480  m_endOfLowStat = false;
481  m_endOfLumiBlock = false;
482  m_endOfRun = false;
483 }
484 
485 
488 {
489 // ManagedMonitorToolBase_printHistStatistics(this);
490  delete m_streamNameFcn;
491 
494  i != mdend; ++i ) {
495  delete (i->second);
496  }
497  delete m_d;
498 }
499 
500 
504 {
505  if( m_streamNameFcn == 0 ) {
506  msg(MSG::ERROR) << "!! streamNameFunction() has not been initialized !!" << endmsg;
507  msg(MSG::ERROR) << " --> neither ManagedMonitorToolBase::initialize() nor" << endmsg;
508  msg(MSG::ERROR) << " --> ManagedMonitorToolBase::setMonManager() has been called." << endmsg;
509  msg(MSG::ERROR) << " --> Correct configuration cannot be guaranteed from this point." << endmsg;
511  }
512  return m_streamNameFcn;
513 }
514 
515 
516 /*
517 std::string
518 ManagedMonitorToolBase::
519 levelOfDetailEnumToString( LevelOfDetail_t level, bool useOnlineConventions )
520 {
521  std::string str("summary");
522 
523  switch( level ) {
524  case transient:
525  str = "transient";
526  break;
527  case debug:
528  str = "debug";
529  break;
530  case expert:
531  str = "expert";
532  break;
533  case shift:
534  str = "shift";
535  break;
536  case summary:
537  default:
538  if(useOnlineConventions)
539  str = "runstat";
540  else
541  str = "summary";
542  }
543 
544  if(useOnlineConventions)
545  str = strToUpper( str );
546 
547  return str;
548 }
549 */
550 
551 /*
552 ManagedMonitorToolBase::LevelOfDetail_t
553 ManagedMonitorToolBase::
554 levelOfDetailStringToEnum( const std::string& str )
555 {
556  std::string lcstr( strToLower(str) );
557 
558  if( lcstr == "summary" || lcstr == "runstat" )
559  return summary;
560  else if( lcstr == "shift" )
561  return shift;
562  else if( lcstr == "expert" )
563  return expert;
564  else if( lcstr == "debug" )
565  return debug;
566  else if( lcstr == "transient" )
567  return transient;
568 
569  // This is a static method (shared by all instances), so no "this" pointer
570  // is available (needed for msg). Have to use message service directly.
571  if( Imp::s_svcLocator!=0 ) {
572  IMessageSvc* ms(0);
573  StatusCode sc = Imp::s_svcLocator->service( "MessageSvc", ms, true );
574  if( sc.isSuccess() ) {
575  MsgStream log( ms, "ManagedMonitorToolBase::levelOfDetailStringToEnum()" );
576  log << MSG::WARNING << "Unknown ManagedMonitorToolBase::LevelOfDetail_t \""
577  << str << "\", returning \"transient\"" << endmsg;
578  }
579  }
580 
581  return transient;
582 }
583 */
584 
585 
586 std::string
589 {
590  std::string str("file");
591 
592  switch( interval ) {
593  case all:
594  str = "all";
595  break;
596  case fill:
597  str = "fill";
598  break;
599  case run:
600  str = "run";
601  break;
602  case lowStat:
603  str = "lowStat";
604  break;
605  case medStat:
606  str = "medStat";
607  break;
608  case higStat:
609  str = "higStat";
610  break;
611  case lumiBlock:
612  str = "lumiBlock";
613  break;
614  case eventsBlock:
615  str = "eventsBlock";
616  break;
617  case file:
618  str = "file";
619  break;
620  default:
621  str = "unknown";
622  }
623 
624  return str;
625 }
626 
627 
630 intervalStringToEnum( const std::string& str )
631 {
632  std::string lcstr( strToLower(str) );
633 
634  if( lcstr == "all" )
635  return all;
636  else if( lcstr == "fill" )
637  return fill;
638  else if( lcstr == "run" )
639  return run;
640  else if( lcstr == "lowStat" )
641  return lowStat;
642  else if( lcstr == "medStat" )
643  return medStat;
644  else if( lcstr == "higStat" )
645  return higStat;
646  else if( lcstr == "lumiBlock" )
647  return lumiBlock;
648  else if( lcstr == "eventsBlock" )
649  return eventsBlock;
650  else if( lcstr == "file" )
651  return file;
652 
653  if( Imp::s_svcLocator ) {
654  IMessageSvc* ms(0);
655  StatusCode sc = Imp::s_svcLocator.load()->service( "MessageSvc", ms, true );
656  if( sc.isSuccess() ) {
657  MsgStream log( ms, "ManagedMonitorToolBase::intervalStringToEnum()" );
658  log << MSG::WARNING << "Unknown ManagedMonitorToolBase::Interval_t \""
659  << str << "\", returning \"file\"" << endmsg;
660  }
661  }
662 
663  return file;
664 }
665 
666 
669 initialize()
670 {
672 
674  if( !sc.isSuccess() )
675  return StatusCode::FAILURE;
676 
677  ATH_MSG_DEBUG("ManagedMonitorToolBase::initialize():");
678 
680 
681  sc = m_THistSvc.retrieve();
682  if( !sc.isSuccess() ) {
683  msg(MSG::ERROR) << "!! Unable to locate the THistSvc service !!" << endmsg;
684  return sc;
685  }
686  ATH_MSG_DEBUG(" --> Found service \"THistSvc\"");
687 
688  if( !m_trigDecTool.empty() ) {
689  sc = m_trigDecTool.retrieve();
690  if( !sc.isSuccess() ) {
691  msg(MSG::ERROR) << "!! Unable to retrieve the TrigDecisionTool !!" << endmsg;
692  return sc;
693  }
694  ATH_MSG_DEBUG(" --> Found AlgTool \"TrigDecisionTool\"");
695 
696  if( !m_trigTranslator.empty() ) {
697  sc = m_trigTranslator.retrieve();
698  if ( !sc.isSuccess() ) {
699  ATH_MSG_ERROR(" Unable to retrieve the TrigTranslatorTool!" << endmsg);
700  return sc;
701  }
702  }
703 
704  if(m_triggerChainProp!="") {
705  ATH_MSG_DEBUG(" --> Found nonempty trigger chain list");
707  if(!sc.isSuccess()) {
708  msg(MSG::WARNING) << "Error parsing the trigger chain list, using empty list" << endmsg;
709  m_vTrigChainNames.clear();
710  }
711  if (!m_trigTranslator.empty()) {
713  }
714  }
715  else {
716  ATH_MSG_DEBUG(" --> trigger chain list empty");
717  }
718  if(m_triggerGroupProp!="") {
719  ATH_MSG_DEBUG(" --> Found nonempty trigger group list");
721  if(!sc.isSuccess()) {
722  msg(MSG::WARNING) << "Error parsing the trigger group names list, using empty list" << endmsg;
723  m_vTrigGroupNames.clear();
724  }
725  if (!m_trigTranslator.empty()) {
727  }
728  }
729  else {
730  ATH_MSG_DEBUG(" --> trigger group list empty");
731  }
732  }
733  else {
734  ATH_MSG_DEBUG(" --> no trigger decision tool specified");
735  }
736 
737  sc = m_DQFilterTools.retrieve();
738  if( !sc.isSuccess() ) {
739  ATH_MSG_ERROR("!! Unable to retrieve the Filter Tools !!");
740  return sc;
741  }
742 
743  ServiceHandle<Gaudi::Interfaces::IOptionsSvc> joSvc( "JobOptionsSvc", name() );
744  ATH_CHECK( joSvc.retrieve() );
745  ATH_MSG_DEBUG(" --> Found service \"JobOptionsSvc\"");
746 
747  const std::string client( m_managerNameProp + "Properties" );
748  ATH_MSG_DEBUG(" --> Asking for properties " << client);
749 
750  auto getProp = [this,joSvc](std::string& var, const std::string& name) {
751  if (joSvc->has(name))
752  var = joSvc->get(name);
753  else
754  ATH_MSG_DEBUG("Cannot read " << name); // on purpose not an ERROR (will be set by setMonManager)
755  };
756  getProp( m_fileKey, client + ".FileKey");
757  getProp( m_dataTypeStr, client + ".DataType");
758  getProp( m_environmentStr, client + ".Environment");
759 
760  ATH_MSG_DEBUG(" * Properties set from " << client << " to the values:\n"
761  << " FileKey: " << m_fileKey << "\n"
762  << " DataType: " << m_dataTypeStr << "\n"
763  << " Environment: " << m_environmentStr);
764 
767 
771 
772  delete m_streamNameFcn;
774 
775  ATH_MSG_DEBUG(" --> Exiting successfully");
776 
777  return StatusCode::SUCCESS;
778 }
779 
780 
783 bookHists()
784 {
785  // The Run/LumiBlock numbers are not set when beginRun() is called. Therefore,
786  // book histograms on the first call to fillHists(), which is called from execute().
787  return StatusCode::SUCCESS;
788 }
789 
790 
793 fillHists()
794 {
795 
798  msg(MSG::WARNING) << "ManagedMonitorToolBase::initialize() never called from reimplementation!" << endmsg;
799  }
800 
801 
802  bool isNewEventsBlock = ( m_procNEventsProp > 0 && ((m_nEvents % m_procNEventsProp) == 1) && m_haveClearedLastEventBlock );
803  if (isNewEventsBlock) m_haveClearedLastEventBlock = false;
804 
805  m_newLowStat = false;
806  m_newLumiBlock = false;
807  m_newRun = false;
808  newLowStat = false;
809  newLumiBlock = false;
810  newRun = false;
811 
812  m_newLowStatInterval = false;
813  m_newMedStatInterval = false;
814  m_newHigStatInterval = false;
815  newLowStatInterval = false;
816  newMedStatInterval = false;
817  newHigStatInterval = false;
818 
819  m_useTrigger = ( (m_triggerChainProp != "" || m_triggerGroupProp != "") && (!m_trigDecTool.empty()) );
820 
821  if( m_manager != 0 ) {
824  newLumiBlock = m_newLumiBlock;
825  newRun = m_newRun;
826 
827  if(m_newRun) {
828  m_newLumiBlock = true;
829  newLumiBlock = m_newLumiBlock;
830  isNewEventsBlock = true;
831  }
832 
833  m_newEventsBlock = isNewEventsBlock;
834  newEventsBlock = m_newEventsBlock;
835 
836  if( m_newLumiBlock ) {
837  // check if a new LB interval has started
838  // lowest lumiBlockNumber() is 1
839  // m_lastLowStatInterval is -1 initially
840  int currentLB = m_manager->lumiBlockNumber();
841  int LBsLowStat = m_manager->getLBsLowStat();
842  int LBsMedStat = m_manager->getLBsMedStat();
843  int LBsHigStat = m_manager->getLBsHigStat();
844 
845  if( LBsLowStat*LBsMedStat*LBsHigStat == 0) {
846  msg(MSG::WARNING) << "zero LBs requested for interval" << endmsg;
847  }
848  else {
849  if( ((currentLB-1)/LBsLowStat) != m_lastLowStatInterval ) m_newLowStatInterval = true;
850  if( ((currentLB-1)/LBsMedStat) != m_lastMedStatInterval ) m_newMedStatInterval = true;
851  if( ((currentLB-1)/LBsHigStat) != m_lastHigStatInterval ) m_newHigStatInterval = true;
852  newLowStatInterval = m_newLowStatInterval;
853  newMedStatInterval = m_newHigStatInterval;
854  newHigStatInterval = m_newHigStatInterval;
855  }
856  }
857 
858  // Allow inheriting classes the option of using the lastLumiBloc/lastRun values
859  // before updating them
860  }
861 
862 
863  StatusCode sc0( StatusCode::SUCCESS );
864  StatusCode sc1( StatusCode::SUCCESS );
865  StatusCode sc2( StatusCode::SUCCESS );
866  StatusCode sc3( StatusCode::SUCCESS );
867 
868  // Set end of LowStat, LumiBlock and Run variables
869  // These are needed to be used in procHistograms().
874  endOfEventsBlock = m_newEventsBlock;
875  endOfLowStat = m_newLowStatInterval;
876  endOfLumiBlock = m_newLumiBlock;
877  endOfRun = m_newRun;
878 
879  // just duplicates m_newLowStatInterval
881  newLowStat = m_newLowStatInterval;
882 
884  ATH_MSG_DEBUG("Interval transition processing");
885  // Process histograms from the previous lumiBlock/run
886  if( m_nEvents != 1 ) {
888  sc0 = procHistograms();
890  }
891  // Re-book new histograms
893 
895  sc1 = bookHistograms();
897  } else {
898  std::vector<Interval_t> intervals_to_process;
899  if (m_newEventsBlock) intervals_to_process.push_back(eventsBlock);
900  if (m_newLumiBlock) intervals_to_process.push_back(lumiBlock);
901  if (m_newLowStatInterval) intervals_to_process.push_back(lowStat);
902  if (m_newRun) intervals_to_process.push_back(run);
903  for (const auto interval: intervals_to_process) {
908  }
909  }
910  for (const auto& interval: std::vector<Interval_t>{ eventsBlock, lumiBlock, lowStat, run }) {
911  for (const auto& it: m_templateHistograms[interval]) {
912  // is histogram too small in x axis for LB range?
913  if (it.m_group.histo_mgmt() == ATTRIB_X_VS_LB) {
914  //ATH_MSG_WARNING("We are rebinning for " << it.m_templateHist->GetName());
915  while ( it.m_templateHist->GetXaxis()->GetXmax() <= AthenaMonManager::lumiBlockNumber() ) {
916  it.m_templateHist->LabelsInflate("X");
917  }
918  }
919  }
920  for (auto& it: m_templateEfficiencies[interval]) {
921  if (it.m_group.histo_mgmt() == ATTRIB_X_VS_LB) {
922  // get the underlying passed and total TH1's from the TEfficiency
923  TH1* passedHist = it.m_templateHist->GetCopyPassedHisto();
924  TH1* totalHist = it.m_templateHist->GetCopyTotalHisto();
925  // inflate them until they exceed the lumi-block number
926  while (passedHist->GetXaxis()->GetXmax() <= AthenaMonManager::lumiBlockNumber() ) {
927  passedHist->LabelsInflate("X");
928  totalHist->LabelsInflate("X");
929  }
930  // Replace them in the TEfficiency. First one has force ("f") option, since the
931  // histograms will not be consistent. This is corrected in the next line, so we
932  // do check for consistency then.
933  it.m_templateHist->SetPassedHistogram(*passedHist, "f");
934  it.m_templateHist->SetTotalHistogram(*totalHist, " ");
935  delete passedHist; // not owned by THistSvc, so need to be deleted.
936  delete totalHist;
937  }
938  }
939  }
940 
941  if (auto streamname = dynamic_cast<OfflineStream*>(streamNameFunction())) {
942  streamname->updateRunLB();
943  }
944 
945  sc3 = bookHistogramsRecurrent( );
946 
948 
949  if (m_manager->forkedProcess()) {
950  ATH_MSG_INFO("Child process: Resetting all " << m_lwhists.size() << " LW Histograms");
951  for (LWHist* h : m_lwhists) {
952  h->Reset();
953  }
954  }
955  }//end if new RUN/LB/Block
956 
957  // check filters
958  bool filterresult(true);
959  if (! m_DQFilterTools.empty()) {
960  ToolHandleArray<IDQFilterTool>::const_iterator ifilter(m_DQFilterTools.begin()), filterend(m_DQFilterTools.end());
961  for (; filterresult && (ifilter != filterend);
962  ++ifilter) {
963  filterresult = (filterresult && (*ifilter)->accept());
964  }
965  }
966 
967 
968  // ...and fill as normal
969  if(filterresult &&
970  (!m_useTrigger
973  ATH_MSG_DEBUG("Passed trigger, presumably");
975  fillHistograms().ignore();
978  ++m_nEvents;
979  } else { ATH_MSG_DEBUG("Failed trigger, presumably"); }
980 
982  if( m_newLumiBlock && (m_nEventsIgnoreTrigger != 1) ) {
983  ++m_nLumiBlocks;
984  }
985  if( m_manager != 0 ) {
987  if( m_newLumiBlock ) {
989 
990  int LBsLowStat = m_manager->getLBsLowStat();
991  int LBsMedStat = m_manager->getLBsMedStat();
992  int LBsHigStat = m_manager->getLBsHigStat();
993  if( LBsLowStat*LBsMedStat*LBsHigStat > 0) {
997  }
998  }
999  }
1000 
1001  return StatusCode::SUCCESS;
1002 }
1003 
1004 StatusCode
1006 registerMetadata(const std::string& streamName, const std::string& hName,
1007  const MonGroup& group) {
1009  TTree* metadata(0);
1010  std::string mdStreamName( streamName );
1011  size_t found=mdStreamName.rfind('/');
1012 
1013  if ( found != std::string::npos )
1014  mdStreamName.replace( found, mdStreamName.length(), "/metadata" );
1015 
1016  MDMap_t::iterator i = m_metadataMap.find( mdStreamName );
1017  if( i == m_metadataMap.end() ) {
1018  metadata = new TTree( "metadata", "Monitoring Metadata" );
1019  if (! metadata) return StatusCode::FAILURE;
1020  StatusCode scmd = m_THistSvc->regTree( mdStreamName, metadata );
1021  if (scmd == StatusCode::FAILURE) return StatusCode::FAILURE;
1022  MDMap_t::value_type valToInsert( mdStreamName, new OutputMetadata(metadata) );
1023  i = m_metadataMap.insert( valToInsert ).first;
1024  }
1025 
1026  i->second->fill( hName, group.interval(), group.chain(), group.merge() );
1027  }
1028  return StatusCode::SUCCESS;
1029 }
1030 
1031 StatusCode
1033 regManagedHistograms(std::vector< MgmtParams<TH1> >& templateHistograms)
1034 {
1035  // The method registers histograms with the THistSvc and saves them to file.
1036 
1037  // The funky business with registering and deregistering the histogram is needed
1038  // to get the correct directory when saving histograms. THistSvc deals with ROOT
1039  // to set up proper TDirectory, so we rely on it.
1040  // E.g.
1041  // m_THistSvc->regHist( streamName, h ): sets the correct TDirectory with streamName
1042  // m_THistSvc->deReg( h ) - deregister from THistSvc otherwise THistSvc will try to save it
1043  // at the end of execution
1044  // use passownership of the histogram and save it to file
1045  // m_manager->passOwnership( h, genericName );
1046  // m_manager->writeAndDelete( genericName );
1047  bool allIsOk = true;
1048 
1049  for( std::vector< MgmtParams<TH1> >::iterator it = templateHistograms.begin(); it != templateHistograms.end(); ++it ) {
1050  MonGroup& group = (*it).m_group;
1051 
1052  // Get a handle to the histogram
1053  TH1* theHist = (*it).m_templateHist;
1054 
1055  // Clone the histogram
1056  TH1* h = static_cast<TH1*>(theHist->Clone());
1057  theHist->Reset();
1058 
1059  // Get name
1060  std::string hName = h->GetName();
1061 
1062  // Get the streamName for the previous interval
1063  std::string streamName = streamNameFunction()->getStreamName( this, group, hName, true );
1064 
1065  // Register the histogram with the THistSvc
1066  StatusCode sc1 = m_THistSvc->deReg( theHist );
1067  if (sc1 == StatusCode::FAILURE) allIsOk = false;
1068 
1069  // Register clonned histogram under previous interval streamName
1070  StatusCode sc2 = m_THistSvc->regHist( streamName, h );
1071  if (sc2 == StatusCode::FAILURE) allIsOk = false;
1072 
1073  if( m_manager != 0 ) {
1074  std::string genericName = NoOutputStream().getStreamName( this, group, hName );
1075  m_manager->passOwnership( h, genericName );
1076  m_manager->writeAndDelete( genericName );
1077  }
1078 
1079  // Get streamName for the current interval
1080  streamName = streamNameFunction()->getStreamName( this, group, hName, false );
1081  // Register metadata information with the current interval streamname
1083  if (smd != StatusCode::SUCCESS) allIsOk = false;
1084 
1085  // Re-register the original histogram with the current interval streamName
1086  StatusCode sc3 = m_THistSvc->regHist( streamName, theHist );
1087  if (sc3 == StatusCode::FAILURE) allIsOk = false;
1088 
1089  }
1090 
1091  if (!allIsOk) return StatusCode::FAILURE;
1092 
1093  return StatusCode::SUCCESS;
1094 }
1095 
1096 StatusCode
1098 THistSvc_deReg_fixTGraph( TFile* file, TGraph* theGraph, std::string& directoryName)
1099 {
1100  // THistSvc employs TDirectory Append method when registering TGraph.
1101  // When deReg is used to de-register TGraph object, THistSvc only removes the object
1102  // from its internal management but forgets to delete from TDirectory.
1103  // The current method fixes this problem by removing the TGraph object manually
1104  // after THistSvc->deReg(TGraph* obj) is called.
1105 
1106  // Saves and restores gFile and gDirectory
1107  GlobalDirectoryRestore restore;
1108 
1109  // This check is true when TGraph object is removed successfully
1110  bool graphRemoved = false;
1111 
1112  file->cd("/");
1113  TDirectory* dir = file->GetDirectory(directoryName.c_str());
1114  if (dir != 0) {
1115  dir->cd();
1116  TObject* obj = dir->Remove(theGraph);
1117  if (obj != 0)
1118  graphRemoved = true;
1119  }
1120 
1121  if (!graphRemoved) {
1122  return StatusCode::FAILURE;
1123  }
1124 
1125  return StatusCode::SUCCESS;
1126 }
1127 
1128 StatusCode
1130 regManagedGraphs(std::vector< MgmtParams<TGraph> >& templateGraphs)
1131 {
1132  // See the description for the regManagedHistograms method
1133  bool allIsOk = true;
1134 
1135  for( std::vector< MgmtParams<TGraph> >::iterator it = templateGraphs.begin(); it != templateGraphs.end(); ++it ) {
1136  MonGroup group = (*it).m_group;
1137 
1138  // Get a handle to the graph
1139  TGraph* theGraph = (*it).m_templateHist;
1140 
1141  // Clone the graph
1142  TGraph* g = static_cast<TGraph*>(theGraph->Clone());
1143  theGraph->Set(0); // equivalent to Reset() for TH1
1144 
1145  // Get name
1146  std::string gName = g->GetName();
1147 
1148  // Get the streamName for the previous interval
1149  std::string streamName = streamNameFunction()->getStreamName( this, group, gName, true );
1150 
1151  // De-register the original graph with the THistSvc
1152  StatusCode sc1 = m_THistSvc->deReg( theGraph );
1153  if (sc1 == StatusCode::FAILURE)
1154  allIsOk = false;
1155 
1156  // *** begin ***
1157  // Fix THistSvc->deReg for TGraphs
1158  bool doneCleaning = false;
1159  std::string directoryName = streamNameFunction()->getDirectoryName( this, group, gName, true );
1160  TSeqCollection *filelist=gROOT->GetListOfFiles();
1161  for (int i=0; i<filelist->GetEntries(); i++) {
1162  ATH_MSG_DEBUG( "List of files: " << filelist->At(i)->GetName());
1163  TFile* file = static_cast<TFile*>(filelist->At(i));
1164  StatusCode sc2 = THistSvc_deReg_fixTGraph(file, theGraph, directoryName);
1165  if (sc2 == StatusCode::SUCCESS)
1166  doneCleaning = true;
1167  }
1168 
1169  // Check if TGraph fix has been applied successfully
1170  if (!doneCleaning) {
1171  ATH_MSG_ERROR("THistSvc_deReg_fixTGraph: failed to apply TGraph fix for the THist Svc!");
1172  allIsOk = false;
1173  }
1174  // *** end ***
1175 
1176  // Register clonned histogram under previous interval streamName
1177  StatusCode sc3 = m_THistSvc->regGraph( streamName, g );
1178  if (sc3 == StatusCode::FAILURE)
1179  allIsOk = false;
1180 
1181  // Get streamName for the current interval
1182  streamName = streamNameFunction()->getStreamName( this, group, gName, false );
1183  // Register metadata information with the current interval streamname
1185  if (smd != StatusCode::SUCCESS)
1186  allIsOk = false;
1187 
1188  // Re-register the original graph with the current interval streamName
1189  StatusCode sc4 = m_THistSvc->regGraph( streamName, theGraph );
1190  if (sc4 == StatusCode::FAILURE)
1191  allIsOk = false;
1192 
1193  }
1194 
1195  if (!allIsOk) return StatusCode::FAILURE;
1196 
1197  return StatusCode::SUCCESS;
1198 }
1199 
1201  bool allIsOk = true;
1202  for( auto& it : templateEfficiencies ) {
1203  // get components of MgmtParams and copy efficiency
1204  MonGroup group = it.m_group;
1205  TEfficiency* theEfficiency = it.m_templateHist;
1206  TEfficiency* e = static_cast<TEfficiency*>(theEfficiency->Clone());
1207  int nbins = theEfficiency->GetTotalHistogram()->GetNbinsX();
1208  int xlow = theEfficiency->GetTotalHistogram()->GetXaxis()->GetXmin();
1209  int xhigh = theEfficiency->GetTotalHistogram()->GetXaxis()->GetXmax();
1210  e->SetBins(nbins,xlow,xhigh); // reset histogram
1211  std::string name = e->GetName();
1212 
1213  // make TGraph casts of TEfficiencies
1214  TGraph* theGraph = reinterpret_cast<TGraph*>(theEfficiency);
1215  TGraph* g = reinterpret_cast<TGraph*>(e);
1216 
1217  // Get the streamName for the previous interval
1218  std::string streamName = streamNameFunction()->getStreamName( this, group, name, true );
1219 
1220  // RE-REGISTER
1221  // 1) De-register the original graph with the THistSvc
1222  StatusCode sc1 = m_THistSvc->deReg( theGraph );
1223  if (sc1 == StatusCode::FAILURE) allIsOk = false;
1224  // 2) Fix THistSvc->deReg for TGraphs
1225  bool doneCleaning = false;
1226  std::string directoryName = streamNameFunction()->getDirectoryName( this, group, name, true );
1227  TSeqCollection *filelist=gROOT->GetListOfFiles();
1228  for (int i=0; i<filelist->GetEntries(); i++) {
1229  ATH_MSG_DEBUG( "List of files: " << filelist->At(i)->GetName());
1230  TFile* file = static_cast<TFile*>(filelist->At(i));
1231  StatusCode sc2 = THistSvc_deReg_fixTGraph(file, theGraph, directoryName);
1232  if (sc2 == StatusCode::SUCCESS) doneCleaning = true;
1233  }
1234  // 3) Check if TGraph fix has been applied successfully
1235  if (!doneCleaning) {
1236  ATH_MSG_ERROR("THistSvc_deReg_fixTGraph: failed to apply TGraph fix for the THist Svc!");
1237  allIsOk = false;
1238  }
1239  // 4) Register cloned histogram under previous interval streamName
1240  StatusCode sc3 = m_THistSvc->regGraph( streamName, g );
1241  if (sc3 == StatusCode::FAILURE)
1242  allIsOk = false;
1243 
1244  // get streamname for interval
1245  streamName = streamNameFunction()->getStreamName( this, group, name, false );
1246  // store metadata
1248  if (smd != StatusCode::SUCCESS) allIsOk = false;
1249  // Re-register the original graph
1250  StatusCode sc4 = m_THistSvc->regGraph( streamName, theGraph );
1251  if (sc4 == StatusCode::FAILURE) allIsOk = false;
1252  }
1253 
1254  if (!allIsOk) return StatusCode::FAILURE;
1255  return StatusCode::SUCCESS;
1256 }
1257 
1258 
1259 StatusCode
1261 regManagedTrees(std::vector< MgmtParams<TTree> >& templateTrees)
1262 {
1263  // See the description for the regManagedHistograms method
1264  bool allIsOk = true;
1265 
1266  for( std::vector< MgmtParams<TTree> >::iterator it = templateTrees.begin(); it != templateTrees.end(); ++it ) {
1267  MonGroup group = (*it).m_group;
1268 
1269  // Get a handle to the original tree
1270  TTree* theTree = (*it).m_templateHist;
1271 
1272  // Clone the tree
1273  TTree* t = static_cast<TTree*>(theTree->Clone());
1274  theTree->Reset();
1275 
1276  // Dumping the tree
1277  std::string name = t->GetName();
1278 
1279  // Get the streamName for the previous interval
1280  std::string streamName = streamNameFunction()->getStreamName( this, group, name, true );
1281 
1282  // De-register original tree with the THistSvc
1283  StatusCode sc1 = m_THistSvc->deReg( theTree );
1284  if (sc1 == StatusCode::FAILURE) allIsOk = false;
1285 
1286  // Register clonned tree under previous interval streamName
1287  StatusCode sc2 = m_THistSvc->regTree( streamName, t );
1288  if (sc2 == StatusCode::FAILURE) allIsOk = false;
1289 
1290  if( m_manager != 0 ) {
1291  std::string genericName = NoOutputStream().getStreamName( this, group, name );
1292  m_manager->passOwnership( t, genericName );
1293  m_manager->writeAndDelete( genericName );
1294  }
1295 
1296  // Get streamName for the current interval
1297  streamName = streamNameFunction()->getStreamName( this, group, name, false );
1298  // Register metadata information with the current interval streamname
1300  if (smd != StatusCode::SUCCESS) allIsOk = false;
1301 
1302  // Re-register the original graph with the current interval streamName
1303  StatusCode sc3 = m_THistSvc->regTree( streamName, theTree );
1304  if (sc3 == StatusCode::FAILURE) allIsOk = false;
1305 
1306  }
1307 
1308  if (!allIsOk) return StatusCode::FAILURE;
1309 
1310  return StatusCode::SUCCESS;
1311 }
1312 
1313 StatusCode
1315 regManagedLWHistograms(std::vector<MgmtParams<LWHist> >& templateLWHistograms)
1316 {
1317  StatusCode sc1;
1318 
1319  for( std::vector< MgmtParams<LWHist> >::iterator it = templateLWHistograms.begin(); it != templateLWHistograms.end(); ++it ) {
1320  // Get histogram group
1321  MonGroup group = (*it).m_group;
1322 
1323  // Get handle to the histogram
1324  LWHist* h = (*it).m_templateHist;
1325 
1326  sc1 = regHist(h, group);
1327  }
1328 
1329  return sc1;
1330 }
1331 
1332 StatusCode
1334 finalHists()
1335 {
1336 
1337  // This assumes that the end of a file will naturally end a run, which is not always true.
1338  // A merging application run afterwards should be able to put parts of a run together.
1339  if( m_nEvents != 1 ) {
1341 
1342  // Set end flags for the LowStat, LumiBlock and Run variables.
1343  // This is needed to be used in the procHistograms method below.
1344  m_endOfEventsBlock = true;
1345  m_endOfLowStat = true;
1346  m_endOfLumiBlock = true;
1347  m_endOfRun = true;
1348  endOfEventsBlock = true;
1349  endOfLowStat = true;
1350  endOfLumiBlock = true;
1351  endOfRun = true;
1352 
1354 
1355 /*
1356  StatusCode sc1( StatusCode::SUCCESS );
1357 
1358 #if 0
1359  for (const auto interval: m_supportedIntervalsForRebooking) {
1360  //sc1 = regManagedHistograms(m_templateHistograms[interval], false);
1361  //sc1 = regManagedGraphs(m_templateGraphs[interval], false);
1362  //sc1 = regManagedTrees(m_templateTrees[interval], false);
1363 
1364  // Yura: commented out when fixing online environment
1365  //sc1 = regManagedLWHistograms(m_templateLWHistograms[interval], false, true);
1366  }
1367 */
1368 
1370  return sc;
1371  }
1372  return StatusCode::SUCCESS;
1373 }
1374 
1375 
1376 StatusCode
1379 {
1380  // note that managed histograms will be converted by regMonitoredLWHistograms
1381  // hence they are not in m_lwhists
1382  if (m_manager) {
1384  for (;it!=itE;++it)
1386  m_lwhists.clear();
1387  }
1388  return StatusCode::SUCCESS;
1389 
1390 }
1391 
1392 
1393 StatusCode
1396 {
1397  if( m_newEventsBlock ) { }
1398  if( m_newLumiBlock ) { }
1399  if( m_newRun ) { }
1400 
1401  return StatusCode::SUCCESS;
1402 }
1403 
1404 
1405 StatusCode
1407 bookHistograms( )
1408 {
1409 
1410  return StatusCode::SUCCESS;
1411 }
1412 
1413 StatusCode
1416 {
1417  return StatusCode::SUCCESS;
1418 }
1419 
1420 
1421 StatusCode
1423 procHistograms( )
1424 {
1425  if( m_endOfEventsBlock ) { }
1426  if( m_endOfLowStat ) { }
1427  if( m_endOfLumiBlock ) { }
1428  if( m_endOfRun) { }
1429 
1430  return StatusCode::SUCCESS;
1431 }
1432 
1433 
1434 void
1437 {
1438  ATH_MSG_DEBUG( "ManagedMonitorToolBase::setMonManager():");
1439  m_manager = manager;
1440  if( m_manager != 0 ) {
1441  ATH_MSG_DEBUG( " --> Setting manager");
1442  m_managerNameProp = m_manager->name();
1446  delete m_streamNameFcn;
1448  }
1449  ATH_MSG_DEBUG( " --> Exiting successfully");
1450 }
1451 
1452 StatusCode
1454 regHist( TH1* h, const std::string& system,
1455  Interval_t interval, MgmtAttr_t histo_mgmt, const std::string& chain, const std::string& merge )
1456 {
1457  MonGroup group( this, system, interval, histo_mgmt, chain, merge );
1458  return regHist( h, group );
1459 }
1460 
1461 StatusCode
1463 regHist( TH1* h, const MonGroup& group )
1464 {
1465 // ManagedMonitorToolBase_addHistStatistics(this,h);
1466 
1467  if (!h)
1468  return StatusCode::FAILURE;
1469 
1470  // This part of the code deals with MANAGED type
1471  if ( group.histo_mgmt() != ATTRIB_UNMANAGED ) {
1472  /*
1473  Create an unmanaged group based on the original MonGroup instance passed
1474  It is needed because managed histogram is presented as a number of unmanaged
1475  histograms (one per each interval)
1476  Update (PUEO) - I don't think it actually matters, and need to keep
1477  track of "proper" attribute for X_VS_LB
1478  */
1479 
1480  if (group.histo_mgmt() == ATTRIB_X_VS_LB && group.merge().empty()) {
1481  ATH_MSG_WARNING("HEY! You're attempting to register " << h->GetName() << " as a per-LB histogram, but you're not setting the merge algorithm! This is a SUPER-BAD idea! Use \"merge\", at least.");
1482  }
1483 
1484  if (m_supportedIntervalsForRebooking.count(group.interval())) {
1485  m_templateHistograms[group.interval()].push_back( MgmtParams<TH1>(h, group) );
1486  } else {
1487  ATH_MSG_ERROR("Attempt to book managed histogram " << h->GetName() << " with invalid interval type " << intervalEnumToString(group.interval()));
1488  return StatusCode::FAILURE;
1489  }
1490 
1491  std::string hName = h->GetName();
1492  MonGroup group_unmanaged( this, group.system(), group.interval(), ATTRIB_UNMANAGED, group.chain(), group.merge());
1493  std::string streamName = streamNameFunction()->getStreamName( this, group_unmanaged, hName, false );
1494  registerMetadata(streamName, hName, group).ignore();
1495  return m_THistSvc->regHist( streamName, h );
1496  }
1497 
1498  // This part of the code deals with UNMANAGED type
1499  std::string hName = h->GetName();
1500 
1501  if( m_manager != 0 ) {
1502  std::string genericName = NoOutputStream().getStreamName( this, group, hName );
1503  m_manager->writeAndDelete( genericName );
1504  m_manager->passOwnership( h, genericName );
1505  }
1506 
1507  std::string streamName = streamNameFunction()->getStreamName( this, group, hName, false );
1508 
1510  if (smd != StatusCode::SUCCESS) return StatusCode::FAILURE;
1511 
1512  return m_THistSvc->regHist( streamName, h );
1513 }
1514 
1516  Interval_t interval, MgmtAttr_t histo_mgmt, const std::string& chain, const std::string& merge )
1517 {
1518  MonGroup group( this, system, interval, histo_mgmt, chain, merge );
1519  return regHist( h, group );
1520 }
1521 
1523 {
1524  // You may want to setROOTBackend to true in online environment
1525  //LWHistControls::setROOTBackend(true);
1526 
1527  if (!h)
1528  return StatusCode::FAILURE;
1529 
1530  if (!m_bookHistogramsInitial) {
1531  ATH_MSG_DEBUG("Yura: very first time");
1532  if ( group.histo_mgmt() != ATTRIB_UNMANAGED ) {
1533 
1534  ATH_MSG_DEBUG("Yura: we have managed histograms");
1535  if (m_supportedIntervalsForRebooking.count(group.interval())) {
1536  ATH_MSG_DEBUG(" Yura: adding histogram" << h->GetName());
1537  m_templateLWHistograms[group.interval()].push_back( MgmtParams<LWHist>(h, group) );
1538  } else {
1539  ATH_MSG_ERROR("Attempt to book managed histogram " << h->GetName() << " with invalid interval type " << intervalEnumToString(group.interval()));
1540  return StatusCode::FAILURE;
1541  }
1542  //return StatusCode::SUCCESS;
1543  }
1544  }
1545 
1546  //FIXME: Code copied more or less verbatim from above. Collect most code (espc. for streamname) in common helpers!!
1547  std::string hName = h->GetName();
1548 
1549  if( m_manager )
1550  {
1551  std::string genericName = NoOutputStream().getStreamName(this, group, hName );
1552  LWHistAthMonWrapper::setKey(h,genericName);
1553  LWHist* prevLWHist = m_manager->ownedLWHistOfKey(genericName);
1554  if (prevLWHist)
1555  {
1556  std::set<LWHist*>::iterator it = m_lwhists.find(prevLWHist);
1557  if (it!=m_lwhists.end())
1558  {
1559  if ( group.histo_mgmt() != ATTRIB_UNMANAGED ) {
1560  m_manager->writeAndResetLWHist( genericName, LWHistAthMonWrapper::streamName(prevLWHist) );
1561  } else {
1562  m_manager->writeAndDeleteLWHist( genericName, LWHistAthMonWrapper::streamName(prevLWHist) );
1563  }
1564  m_lwhists.erase(it);
1565  }
1566  }
1567  m_manager->passOwnership( h, genericName );
1568  }
1569  m_lwhists.insert(h);
1570 
1571  std::string streamName = streamNameFunction()->getStreamName( this, group, hName );
1573  registerMetadata(streamName, hName, group).ignore();
1574 
1575  //Delay registration with THistSvc (unless root backend):
1576  //m_lwhistMap.insert(std::pair<LWHist*,std::string>(h,streamName));
1577  if (h->usingROOTBackend())
1578  {
1579  h->setOwnsROOTHisto(false);//Since might end up with thist svc
1580  return m_THistSvc->regHist( streamName, h->getROOTHistBase() );
1581  }
1582 
1583  return StatusCode::SUCCESS;
1584 
1585 }
1586 
1587 StatusCode
1589 getHist( TH1*& h, const std::string& hName, const std::string& system,
1591 {
1592  MonGroup group( this, system, interval );
1593  return getHist( h, hName, group );
1594 }
1595 
1596 
1597 StatusCode
1599 getHist( TH1*& h, const std::string& hName, const MonGroup& group )
1600 {
1601  std::string streamName = streamNameFunction()->getStreamName( this, group, hName );
1602  return m_THistSvc->getHist( streamName, h );
1603 }
1604 
1605 
1606 StatusCode ManagedMonitorToolBase::getHist( LWHist*& h, const std::string& hName, const std::string& system,
1608 {
1609  MonGroup group( this, system, interval );
1610  return getHist( h, hName, group );
1611 }
1612 
1613 
1614 StatusCode ManagedMonitorToolBase::getHist( LWHist*& h, const std::string& hName, const MonGroup& group )
1615 {
1616  h = 0;
1617  std::string streamName = streamNameFunction()->getStreamName( this, group, hName );
1619  for (;it!=itE;++it) {
1621  h = *it;
1622  return StatusCode::SUCCESS;
1623  }
1624  }
1625  return StatusCode::FAILURE;
1626 }
1627 
1628 
1629 StatusCode
1631 getHist( TH2*& h, const std::string& hName, const std::string& system,
1633 {
1634  MonGroup group( this, system, interval );
1635  return getHist( h, hName, group );
1636 }
1637 
1638 
1639 StatusCode
1641 getHist( TH2*& h, const std::string& hName, const MonGroup& group )
1642 {
1643  std::string streamName = streamNameFunction()->getStreamName( this, group, hName );
1644  return m_THistSvc->getHist( streamName, h );
1645 }
1646 
1647 
1649  if (!e)
1650  return StatusCode::FAILURE;
1651 
1652  TGraph* g = reinterpret_cast<TGraph*>(e);
1653  std::string name = e->GetName();
1654 
1655  // MANAGED
1656  if ( group.histo_mgmt() != ATTRIB_UNMANAGED ) {
1657  // warn about not using merge algorithms
1658  if (group.histo_mgmt() == ATTRIB_X_VS_LB && group.merge().empty()) {
1659  ATH_MSG_WARNING("HEY! Attempting to register "<<name<<" as a per-LB histogram, but not setting the merge algorithm! Use \"merge\", at least.");
1660  }
1661  // add the efficiency to rebooking vector
1662  if (m_supportedIntervalsForRebooking.count(group.interval())) {
1663  m_templateEfficiencies[group.interval()].push_back( MgmtParams<TEfficiency>(e, group) );
1664  } else {
1665  ATH_MSG_ERROR("Attempt to book managed graph " << name << " with invalid interval type " << intervalEnumToString(group.interval()));
1666  return StatusCode::FAILURE;
1667  }
1668 
1669  MonGroup group_unmanaged( this, group.system(), group.interval(), ATTRIB_UNMANAGED, group.chain(), group.merge());
1670  std::string streamName = streamNameFunction()->getStreamName( this, group_unmanaged, name, false );
1671  registerMetadata(streamName, name, group).ignore();
1672  return m_THistSvc->regGraph( streamName, g );
1673  } else {
1674  // UNMANAGED
1675  if( m_manager != 0 ) {
1676  std::string genericName = NoOutputStream().getStreamName( this, group, name );
1677  m_manager->writeAndDelete( genericName );
1678  m_manager->passOwnership( e, genericName );
1679  }
1680 
1681  std::string streamName = streamNameFunction()->getStreamName( this, group, name, false );
1683  if (smd != StatusCode::SUCCESS)
1684  return StatusCode::FAILURE;
1685 
1686  return m_THistSvc->regGraph( streamName, g );
1687  }
1688 }
1689 
1690 
1691 StatusCode
1693 regGraph( TGraph* g, const std::string& system,
1694  Interval_t interval, MgmtAttr_t histo_mgmt, const std::string& chain, const std::string& merge )
1695 {
1696  MonGroup group( this, system, interval, histo_mgmt, chain, merge );
1697  return regGraph( g, group );
1698 }
1699 
1700 
1701 StatusCode
1703 regGraph( TGraph* g, const MonGroup& group )
1704 {
1705  if (!g)
1706  return StatusCode::FAILURE;
1707 
1708  // This part of the code deals with MANAGED type
1709  if ( group.histo_mgmt() != ATTRIB_UNMANAGED ) {
1710  // Create an unmanaged group based on the original MonGroup instance passed
1711  // This is needed because managed graph is presented as a number of unmanaged
1712  // graphs (one per each interval)
1713  MonGroup group_unmanaged( this, group.system(), group.interval(), ATTRIB_UNMANAGED, group.chain(), group.merge());
1714 
1715  if (m_supportedIntervalsForRebooking.count(group.interval())) {
1716  m_templateGraphs[group.interval()].push_back( MgmtParams<TGraph>(g, group_unmanaged) );
1717  } else {
1718  ATH_MSG_ERROR("Attempt to book managed graph " << g->GetName() << " with invalid interval type " << intervalEnumToString(group.interval()));
1719  return StatusCode::FAILURE;
1720  }
1721 
1722  std::string name = g->GetName();
1723  std::string streamName = streamNameFunction()->getStreamName( this, group_unmanaged, name, false );
1724  registerMetadata(streamName, name, group).ignore();
1725  return m_THistSvc->regGraph( streamName, g );
1726  //return m_THistSvc->regGraph( streamName );
1727  }
1728 
1729  // This part of the code deals with UNMANAGED type
1730  std::string gName = g->GetName();
1731 
1732  if( m_manager != 0 ) {
1733  std::string genericName = NoOutputStream().getStreamName( this, group, gName );
1734  m_manager->writeAndDelete( genericName );
1735  m_manager->passOwnership( g, genericName );
1736  }
1737 
1738  std::string streamName = streamNameFunction()->getStreamName( this, group, gName, false );
1739 
1741  if (smd != StatusCode::SUCCESS) return StatusCode::FAILURE;
1742 
1743  return m_THistSvc->regGraph( streamName, g );
1744 }
1745 
1746 
1747 StatusCode
1749 regTree( TTree* t, const std::string& system,
1750  Interval_t interval, MgmtAttr_t histo_mgmt, const std::string& chain, const std::string& merge )
1751 {
1752  MonGroup group( this, system, interval, histo_mgmt, chain, merge );
1753  return regTree( t, group );
1754 }
1755 
1756 
1757 StatusCode
1759 regTree( TTree* t, const MonGroup& group )
1760 {
1761 
1762  // This part of the code deals with MANAGED type
1763  if ( group.histo_mgmt() != ATTRIB_UNMANAGED ) {
1764  // Create an unmanaged group based on the original MonGroup instance passed
1765  // This is needed because managed tree is presented as a number of unmanaged
1766  // trees (one per each interval)
1767  MonGroup group_unmanaged( this, group.system(), group.interval(), ATTRIB_UNMANAGED, group.chain(), group.merge());
1768 
1769  if (m_supportedIntervalsForRebooking.count(group.interval())) {
1770  m_templateTrees[group.interval()].push_back( MgmtParams<TTree>(t, group_unmanaged) );
1771  } else {
1772  ATH_MSG_ERROR("Attempt to book managed tree " << t->GetName() << " with invalid interval type " << intervalEnumToString(group.interval()));
1773  return StatusCode::FAILURE;
1774  }
1775 
1776  std::string name = t->GetName();
1777  std::string genericName = NoOutputStream().getStreamName( this, group_unmanaged, name );
1778  std::string streamName = streamNameFunction()->getStreamName( this, group_unmanaged, name, false );
1779  registerMetadata(streamName, name, group).ignore();
1780  return m_THistSvc->regTree( streamName, t );
1781  }
1782 
1783 
1784  // This part of the code deals with UNMANAGED type
1785  std::string tName = t->GetName();
1786 
1787  if( m_manager != 0 ) {
1788  std::string genericName = NoOutputStream().getStreamName( this, group, tName );
1789  m_manager->writeAndDelete( genericName );
1790  m_manager->passOwnership( t, genericName );
1791  }
1792 
1793  std::string streamName = streamNameFunction()->getStreamName( this, group, tName, false );
1794 
1796  if (smd != StatusCode::SUCCESS) return StatusCode::FAILURE;
1797 
1798  return m_THistSvc->regTree( streamName, t );
1799 }
1800 
1801 
1802 StatusCode
1804 writeAndDelete( TH1* h, const MonGroup& group ) {
1805  if (!h)
1806  return StatusCode::FAILURE;
1807 
1808  std::string hName = h->GetName();
1809 
1810  if( m_manager != 0 ) {
1811  std::string genericName = NoOutputStream().getStreamName( this, group, hName );
1812  m_manager->writeAndDelete( genericName );
1813  }
1814  return StatusCode::SUCCESS;
1815 }
1816 
1817 
1818 StatusCode
1820 deregHist( TH1* h )
1821 {
1822  return m_THistSvc->deReg( h );
1823 }
1824 
1825 
1827 {
1829  if (it==m_lwhists.end())
1830  return StatusCode::FAILURE;
1832  m_lwhists.erase(it);
1833  if (h->usingROOTBackend()) {
1834  h->setOwnsROOTHisto(true);
1835  return m_THistSvc->deReg( h->getROOTHistBase() );
1836  }
1837 
1838  return StatusCode::SUCCESS;
1839 }
1840 
1841 
1842 StatusCode
1844 deregGraph( TGraph* g )
1845 {
1846  return m_THistSvc->deReg( g );
1847 }
1848 
1849 
1850 StatusCode
1852 deregObject( const std::string& objName, const std::string& system,
1854 {
1855  MonGroup group( this, system, interval );
1856  return deregObject( objName, group );
1857 }
1858 
1859 
1860 StatusCode
1862 deregObject( const std::string& objName, const MonGroup& group )
1863 {
1864  std::string streamName = streamNameFunction()->getStreamName( this, group, objName );
1866  for (;it!=itE;++it) {
1867  LWHist * hlw = *it;
1868  if (LWHistAthMonWrapper::key(hlw)==objName) {
1869  m_lwhists.erase(it);
1870  if (hlw->usingROOTBackend()) {
1871  hlw->setOwnsROOTHisto(true);
1872  return m_THistSvc->deReg( hlw->getROOTHistBase() );
1873  }
1874  return StatusCode::SUCCESS;
1875  }
1876  }
1877  return m_THistSvc->deReg( streamName );
1878 }
1879 
1880 
1881 StatusCode
1883 setupOutputStreams( std::vector<std::string> )
1884 {
1885  // All instances should write to the stream(s) defined by the
1886  // AthenaMonManager.
1887 
1888  return StatusCode::SUCCESS;
1889 }
1890 
1891 
1892 StatusCode
1894 runStat()
1895 {
1896  return StatusCode::SUCCESS;
1897 }
1898 
1899 
1900 StatusCode
1902 checkHists( bool )
1903 {
1904  // Histograms will be checked using the data-quality monitoring framework (DQMF)
1905 
1906  return StatusCode::SUCCESS;
1907 }
1908 
1909 
1910 bool
1912 preSelector()
1913 {
1914  if( m_preScaleProp > 1 ) {
1915  return ( (m_nEvents % m_preScaleProp) == 1 );
1916  }
1917  return true;
1918 }
1919 
1920 
1921 // Average mu, i.e. <mu>
1922 float
1924 lbAverageInteractionsPerCrossing (const EventContext& ctx /*= Gaudi::Hive::currentContext()*/) const
1925 {
1926  if (!m_lumiDataKey.empty()) {
1928  return lumi->lbAverageInteractionsPerCrossing();
1929  } else {
1930  //ATH_MSG_FATAL("! Luminosity tool has been disabled ! lbAverageInteractionsPerCrossing() can't work properly! ");
1931  ATH_MSG_DEBUG("Warning: lbAverageInteractionsPerCrossing() - luminosity tools are not retrieved or turned on (i.e. EnableLumi = False)");
1932  return -1.0;
1933  }
1934  // not reached
1935 }
1936 
1937 // Instantaneous number of interactions, i.e. mu
1938 float
1940 lbInteractionsPerCrossing (const EventContext& ctx /*= Gaudi::Hive::currentContext()*/) const
1941 {
1942  if (!m_lumiDataKey.empty()) {
1944  float muToLumi = lumi->muToLumi();
1945  if (muToLumi > 0) {
1946  return lumi->lbLuminosityPerBCIDVector().at (ctx.eventID().bunch_crossing_id()) / muToLumi;
1947  }
1948  return 0;
1949  } else {
1950  //ATH_MSG_FATAL("! Luminosity tool has been disabled ! lbInteractionsPerCrossing() can't work properly! ");
1951  ATH_MSG_DEBUG("Warning: lbInteractionsPerCrossing() - luminosity tools are not retrieved or turned on (i.e. EnableLumi = False)");
1952  return -1.0;
1953  }
1954  // not reached
1955 }
1956 
1957 // Average luminosity (in ub-1 s-1 => 10^30 cm-2 s-1)
1958 float
1960 lbAverageLuminosity (const EventContext& ctx /*= Gaudi::Hive::currentContext()*/) const
1961 {
1962  if (!m_lumiDataKey.empty()) {
1964  return lumi->lbAverageLuminosity();
1965  } else {
1966  //ATH_MSG_FATAL("! Luminosity tool has been disabled ! lbAverageLuminosity() can't work properly! ");
1967  ATH_MSG_DEBUG("Warning: lbAverageLuminosity() - luminosity tools are not retrieved or turned on (i.e. EnableLumi = False)");
1968  return -1.0;
1969  }
1970  // not reached
1971 }
1972 
1973 // Instantaneous luminosity
1974 float
1976 lbLuminosityPerBCID (const EventContext& ctx /*= Gaudi::Hive::currentContext()*/) const
1977 {
1978  if (!m_lumiDataKey.empty()) {
1980  return lumi->lbLuminosityPerBCIDVector().at (ctx.eventID().bunch_crossing_id());
1981  } else {
1982  //ATH_MSG_FATAL("! Luminosity tool has been disabled ! lbLuminosityPerBCID() can't work properly! ");
1983  ATH_MSG_DEBUG("Warning: lbLuminosityPerBCID() - luminosity tools are not retrieved or turned on (i.e. EnableLumi = False)");
1984  return -1.0;
1985  }
1986  // not reached
1987 }
1988 
1989 
1990 // Average luminosity livefraction
1991 float
1993 lbAverageLivefraction (const EventContext& ctx /*= Gaudi::Hive::currentContext()*/) const
1994 {
1996  return 1.0;
1997 
2000  return live->lbAverageLiveFraction();
2001  } else {
2002  //ATH_MSG_FATAL("! Luminosity tool has been disabled ! lbAverageLivefraction() can't work properly! ");
2003  ATH_MSG_DEBUG("Warning: lbAverageLivefraction() - luminosity not availble (i.e. EnableLumi = False)");
2004  return -1.0;
2005  }
2006  // not reached
2007 }
2008 
2009 // Live Fraction per Bunch Crossing ID
2010 float
2012 livefractionPerBCID (const EventContext& ctx /*= Gaudi::Hive::currentContext()*/) const
2013 {
2015  return 1.0;
2016 
2019  return live->l1LiveFractionVector().at (ctx.eventID().bunch_crossing_id());
2020  } else {
2021  //ATH_MSG_FATAL("! Luminosity tool has been disabled ! livefractionPerBCID() can't work properly! ");
2022  ATH_MSG_DEBUG("Warning: livefractionPerBCID() - luminosity retrieved available (i.e. EnableLumi = False)");
2023  return -1.0;
2024  }
2025  // not reached
2026 }
2027 
2028 // Average Integrated Luminosity Live Fraction
2029 double
2031 lbLumiWeight (const EventContext& ctx /*= Gaudi::Hive::currentContext()*/) const
2032 {
2033  if (!m_lumiDataKey.empty()) {
2034  return (lbAverageLuminosity(ctx)*lbDuration(ctx))*lbAverageLivefraction(ctx);
2035  } else{
2036  //ATH_MSG_FATAL("! Luminosity tool has been disabled ! lbLumiWeight() can't work properly! ");
2037  ATH_MSG_DEBUG("Warning: lbLumiWeight() - luminosity tools are not retrieved or turned on (i.e. EnableLumi = False)");
2038  return -1.0;
2039  }
2040  // not reached
2041 }
2042 
2043 
2044 // Luminosity block time (in seconds)
2045 double
2047 lbDuration (const EventContext& ctx /*= Gaudi::Hive::currentContext()*/) const
2048 {
2050  return m_defaultLBDuration;
2051  }
2052  if (!m_lbDurationDataKey.empty()) {
2054  return dur->lbDuration();
2055  } else {
2056  //ATH_MSG_FATAL("! Luminosity tool has been disabled ! lbDuration() can't work properly! ");
2057  ATH_MSG_DEBUG("Warning: lbDuration() - luminosity tools are not retrieved or turned on (i.e. EnableLumi = False)");
2058  return m_defaultLBDuration;
2059  }
2060  // not reached
2061 }
2062 
2063 
2064 // *********************************************************************
2065 // Protected Methods
2066 // *********************************************************************
2067 
2069  OutputMetadata( TTree* metadata )
2070  : m_charArrSize(100)
2071  , m_metadata(metadata)
2072  , m_nameData(0)
2073  //, m_levelData(0)
2074  , m_intervalData(0)
2075  , m_triggerData(0)
2076  , m_mergeData(0)
2077 {
2078  m_nameData = new char[m_charArrSize];
2079  //m_levelData = new char[m_charArrSize];
2080  m_intervalData = new char[m_charArrSize];
2081  m_triggerData = new char[m_charArrSize];
2082  m_mergeData = new char[m_charArrSize];
2083  m_metadata->Branch( "Name", m_nameData, "Name/C" );
2084  //m_metadata->Branch( "LevelOfDetail", m_levelData, "LevelOfDetail/C" );
2085  m_metadata->Branch( "Interval", m_intervalData, "Interval/C" );
2086  m_metadata->Branch( "TriggerChain", m_triggerData, "TriggerChain/C" );
2087  m_metadata->Branch( "MergeMethod", m_mergeData, "MergeMethod/C" );
2088 }
2089 
2090 
2093 {
2094  delete [] m_mergeData;
2095  delete [] m_triggerData;
2096  delete [] m_intervalData;
2097  //delete [] m_levelData;
2098  delete [] m_nameData;
2099 }
2100 
2101 
2102 void
2104 fill( const std::string& name,
2105  //LevelOfDetail_t level,
2107  std::string trigger,
2108  std::string merge )
2109 {
2110  // ROOT does not properly write empty strings to output files in all cases. I haven't reported
2111  // this to the ROOT developers yet because I don't have time to develope a simple test case
2112  // for them (independent of Atlas software).
2113  // --M.G.Wilson, 7 July 2008
2114  if( trigger.empty() )
2115  trigger = "<none>";
2116  if( merge.empty() )
2117  merge = "<default>";
2118 
2119  copyString( m_nameData, name );
2120  //copyString( m_levelData, ManagedMonitorToolBase::levelOfDetailEnumToString( level ) );
2121  copyString( m_intervalData, ManagedMonitorToolBase::intervalEnumToString( interval ) );
2122  copyString( m_triggerData, trigger );
2123  copyString( m_mergeData, merge );
2124  m_metadata->Fill();
2125 }
2126 
2127 
2128 void
2130 copyString( char* to, const std::string& from )
2131 {
2132  int i = 0;
2133  const char* f = from.c_str();
2134  while( (++i < m_charArrSize) && ((*to++ = *f++) != 0) ) {};
2135  if( i == m_charArrSize ) {
2136  *to = 0;
2137  }
2138 }
2139 
2140 
2141 std::string
2143 getStreamName( const ManagedMonitorToolBase*, const MonGroup& group, const std::string& objName, bool )
2144 {
2145  std::ostringstream streamName;
2146 
2147  streamName << "/" << m_fileKey << "/";
2148 
2149  streamName << group.system() << "/" << objName;
2150  return streamName.str();
2151 }
2152 
2153 std::string
2155 getDirectoryName( const ManagedMonitorToolBase* tool, const MonGroup& group, const std::string& objName, const bool usePreviousInterval )
2156 {
2157  std::string streamName = getStreamName(tool, group, objName, usePreviousInterval);
2158  std::string root, rem;
2159  parseString(streamName, root, rem);
2160  // Remove object name at the end
2161  // to obtain directory path
2162  rem.erase(rem.rfind('/'), rem.length());
2163  return rem;
2164 }
2165 
2166 
2167 std::string
2169 getStreamName( const ManagedMonitorToolBase*, const MonGroup& group, const std::string& objName, bool )
2170 {
2171  std::ostringstream streamName;
2172  streamName << group.system() << "/" << objName;
2173  return streamName.str();
2174 }
2175 
2176 
2177 std::string
2179 getDirectoryName( const ManagedMonitorToolBase* tool, const MonGroup& group, const std::string& objName, const bool usePreviousInterval )
2180 {
2181  return getStreamName(tool, group, objName, usePreviousInterval);
2182 }
2183 
2184 std::string
2186 getStreamName( const ManagedMonitorToolBase*, const MonGroup& group, const std::string& objName, bool )
2187 {
2188  std::ostringstream streamName;
2189  //if( group.level() != ManagedMonitorToolBase::transient ) {
2190  // streamName << "/" << ManagedMonitorToolBase::levelOfDetailEnumToString( group.level(), true ) << "/";
2191  //}
2192  streamName << "/"; // slash is required for online environment;
2193  // otherwise the output histograms are placed in 'temp' subdirectory
2194 
2195  streamName << group.system() << "/" << objName;
2196  return streamName.str();
2197 }
2198 
2199 std::string
2201 getDirectoryName( const ManagedMonitorToolBase* tool, const MonGroup& group, const std::string& objName, const bool usePreviousInterval )
2202 {
2203  return getStreamName(tool, group, objName, usePreviousInterval);
2204 }
2205 
2206 void
2208 getLBrange(int *start, int *end, int LB, int length) {
2209  if(start && end) {
2210  *start = ((LB-1)/length) * length + 1;
2211  *end = *start + length - 1;
2212  }
2213 }
2214 
2215 std::string
2217 getStreamName( const ManagedMonitorToolBase* tool, const MonGroup& group, const std::string& objName, bool usePreviousInterval )
2218 {
2219  std::ostringstream streamName;
2220 
2221  //bool isTemp = ( group.level() == ManagedMonitorToolBase::transient );
2222  bool isTemp = false;
2223 
2224  bool useRunFolders = group.interval() != all;
2225 
2226  bool useLBFolders = ( useRunFolders )
2227  && ( group.interval() == ManagedMonitorToolBase::lumiBlock );
2228 
2229  bool useLowStatInterval = ( useRunFolders )
2230  && ( group.interval() == ManagedMonitorToolBase::lowStat );
2231 
2232  bool useMedStatInterval = ( useRunFolders )
2233  && ( group.interval() == ManagedMonitorToolBase::medStat );
2234 
2235  bool useHigStatInterval = ( useRunFolders )
2236  && ( group.interval() == ManagedMonitorToolBase::higStat );
2237 
2238  bool useEBFolders = ( group.interval() == ManagedMonitorToolBase::eventsBlock );
2239 
2240  if( !isTemp ) {
2241  streamName << "/" << m_fileKey << "/";
2242  }
2243 
2244  if( useRunFolders ) {
2245  if (usePreviousInterval && (group.interval() == ManagedMonitorToolBase::run) )
2246  streamName << "run_" << m_prev_run_number << "/";
2247  else
2248  streamName << "run_" << AthenaMonManager::runNumber() << "/";
2249  }
2250 
2251  int currentLB = AthenaMonManager::lumiBlockNumber();
2252  if( useLBFolders ) {
2253  if (usePreviousInterval && (group.interval() == ManagedMonitorToolBase::lumiBlock) )
2254  streamName << "lb_" << m_prev_lumi_block << "/";
2255  else
2256  streamName << "lb_" << currentLB << "/";
2257  }
2258  else if( useLowStatInterval ) {
2259  int start, end;
2260  if (usePreviousInterval && (group.interval() == ManagedMonitorToolBase::lowStat) )
2261  getLBrange(&start, &end, m_prev_lumi_block, AthenaMonManager::getLBsLowStat());
2262  else
2263  getLBrange(&start, &end, currentLB, AthenaMonManager::getLBsLowStat());
2264  streamName << "lowStat_LB" << start << "-" << end << "/";
2265  }
2266  else if( useMedStatInterval ) {
2267  int start, end;
2268  getLBrange(&start, &end, currentLB, AthenaMonManager::getLBsMedStat());
2269  streamName << "medStat_LB" << start << "-" << end << "/";
2270  }
2271  else if( useHigStatInterval ) {
2272  int start, end;
2273  getLBrange(&start, &end, currentLB, AthenaMonManager::getLBsHigStat());
2274  streamName << "higStat_LB" << start << "-" << end << "/";
2275  }
2276  else if( useEBFolders ) {
2277  // The number of events in an EventsBlock can vary for each ManagedMonitorToolBase object,
2278  // so there is no global way to determine when an EventsBlock has rolled over.
2279 
2280  // determine an eventsBlock number
2281  long eventsBlockNumber = 1; // assign some dafault value
2282  long procNEventsProp = tool->get_procNEventsProp();
2283  unsigned int nEvents = tool->get_nEvents();
2284  if (procNEventsProp > 0) {
2285  eventsBlockNumber = (long) nEvents / procNEventsProp;
2286  if ((nEvents % procNEventsProp) != 0)
2287  eventsBlockNumber++;
2288  }
2289 
2290  // lower eventsBlock number by 1 if usePreviousInterval is true;
2291  if (usePreviousInterval) {
2292  eventsBlockNumber--;
2293  }
2294 
2295  streamName << "eb_" << eventsBlockNumber << "/";
2296  }
2297 
2298  streamName << group.system() << "/" << objName;
2299 
2300  return streamName.str();
2301 }
2302 
2303 std::string
2305 getDirectoryName( const ManagedMonitorToolBase* tool, const MonGroup& group, const std::string& objName, const bool usePreviousInterval )
2306 {
2307  std::string streamName = getStreamName(tool, group, objName, usePreviousInterval);
2308  std::string root, rem;
2309  parseString(streamName, root, rem);
2310  // Remove object name at the end
2311  // to obtain directory path
2312  rem.erase(rem.rfind('/'), rem.length());
2313  return rem;
2314 }
2315 
2316 void
2318 updateRunLB() {
2319  m_prev_run_number = AthenaMonManager::runNumber();
2320  m_prev_lumi_block = AthenaMonManager::lumiBlockNumber();
2321 }
2322 
2323 bool
2325 trigChainsArePassed(std::vector<std::string>& vTrigNames)
2326 {
2327  ATH_MSG_DEBUG( "ManagedMonitorToolBase::trigChainsArePassed:");
2328 
2329  for(unsigned int i=0; i<vTrigNames.size(); i++) {
2330  if( m_trigDecTool->isPassed(vTrigNames[i]) ) {
2331  ATH_MSG_DEBUG( " + \"" << vTrigNames[i] << "\" passed, returning \'true\'");
2332  return true;
2333  }
2334  else {
2335  ATH_MSG_DEBUG( " - \"" << vTrigNames[i] << "\" did not pass");
2336  }
2337  }
2338 
2339  return false;
2340 }
2341 
2342 StatusCode
2344 parseList(const std::string& line, std::vector<std::string>& result) {
2345  std::string item;
2346  std::stringstream ss(line);
2347 
2348  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "ManagedMonitorToolBase::parseList:";
2349 
2350  while ( std::getline(ss, item, ',') ) {
2351  std::stringstream iss(item); // remove
2352  iss >> item; // whitespace
2353  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " " << item;
2354  result.push_back(item);
2355  }
2356 
2357  msg(MSG::DEBUG) << endmsg;
2358  return StatusCode::SUCCESS;
2359 }
2360 
2361 void
2363 updateTriggersForGroups(std::vector<std::string>& vTrigChainNames) {
2364  for (size_t i = 0; i < vTrigChainNames.size(); ++i) {
2365  std::string& thisName = vTrigChainNames[i];
2366  if (thisName.compare(0, 9, "CATEGORY_") ==0) {
2367  ATH_MSG_DEBUG("Found a trigger category: " << thisName << ". We will unpack it.");
2368  std::vector<std::string> triggers = m_trigTranslator->translate(thisName.substr(9,std::string::npos));
2369  std::ostringstream oss;
2370  oss << "(";
2371  for (size_t itrig = 0; itrig < triggers.size(); ++itrig) {
2372  if (itrig != 0) {
2373  oss << "|";
2374  }
2375  oss << triggers[itrig];
2376  }
2377  oss << ")";
2378  // replace with new value
2379  std::string newval = oss.str();
2380  ATH_MSG_DEBUG("Replaced with " << newval);
2381  vTrigChainNames[i] = newval;
2382  }
2383  }
2384 }
2385 
2388 getNewStreamNameFcn() const
2389 {
2390  StreamNameFcn* fcn(0);
2391 
2392  switch( m_environment ) {
2394  fcn = new NoOutputStream();
2395  break;
2397  fcn = new OnlineStream();
2398  break;
2400  fcn = new DefaultStream( m_fileKey );
2401  break;
2405  case AthenaMonManager::AOD:
2407  default:
2409  }
2410 
2411  return fcn;
2412 }
2413 
2414 void
2416 parseString(const std::string& streamName, std::string& root, std::string& rem) {
2417  std::string::size_type pos = streamName.find('/');
2418 
2419  if (pos == std::string::npos) {
2420  root = "";
2421  rem = streamName;
2422  return;
2423  }
2424 
2425  if (pos == 0) {
2426  parseString(streamName.substr(1,streamName.length()),root,rem);
2427  } else {
2428  root = streamName.substr(0,pos);
2429  rem = streamName.substr(pos+1,streamName.length());
2430  }
2431 
2432 }
2433 
2434 // *********************************************************************
2435 // Private Methods
2436 // *********************************************************************
2437 
2438 // GlobalDirectoryRestore ctor
2442  m_gd = gDirectory;
2443  m_gf = gFile;
2444 }
2445 
2446 // GlobalDirectoryRestore dtor
2450  gDirectory = m_gd;
2451  gFile = m_gf;
2452 }
2453 
2454 namespace {
2455 
2456  std::string strToLower( const std::string& str )
2457  {
2458  std::string lstr(str);
2459  std::string::const_iterator from = str.begin();
2460  std::string::const_iterator strend = str.end();
2461  std::string::iterator to = lstr.begin();
2462  while( from != strend ) {
2463  *to++ = tolower(*from++);
2464  }
2465  return lstr;
2466  }
2467 
2468 
2469 #if 0
2470  std::string strToUpper( const std::string& str )
2471  {
2472  std::string ustr(str);
2473  std::string::const_iterator from = str.begin();
2474  std::string::const_iterator strend = str.end();
2475  std::string::iterator to = ustr.begin();
2476  while( from != strend ) {
2477  *to++ = toupper(*from++);
2478  }
2479  return ustr;
2480  }
2481 #endif
2482 
2483 } // unnamed namespace
2484 
2485 #endif
AthenaMonManager::ownedLWHistOfKey
virtual LWHist * ownedLWHistOfKey(const std::string &key) const
Definition: AthenaMonManager.cxx:726
ManagedMonitorToolBase::m_nEvents
unsigned int m_nEvents
Definition: ManagedMonitorToolBase.h:926
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
LWHist
Definition: LWHist.h:26
ManagedMonitorToolBase::THistSvc_deReg_fixTGraph
StatusCode THistSvc_deReg_fixTGraph(TFile *file, TGraph *theGraph, std::string &directoryName)
Fixes THistSvc->deReg(obj) when obj is TGraph instance.
Definition: ManagedMonitorToolBase.cxx:1098
ManagedMonitorToolBase::m_templateEfficiencies
std::map< Interval_t, std::vector< MgmtParams< TEfficiency > > > m_templateEfficiencies
Definition: ManagedMonitorToolBase.h:738
AthenaMonManager::writeAndDeleteLWHist
virtual LWHist * writeAndDeleteLWHist(const std::string &key, const std::string &streamName)
Definition: AthenaMonManager.cxx:743
ManagedMonitorToolBase::streamNameFunction
virtual StreamNameFcn * streamNameFunction()
Returns the function object that converts logical paramters into a physical stream name.
Definition: ManagedMonitorToolBase.cxx:503
beamspotnt.var
var
Definition: bin/beamspotnt.py:1394
ManagedMonitorToolBase::Imp::m_bench_fillall
AthMonBench m_bench_fillall
Definition: ManagedMonitorToolBase.cxx:58
ManagedMonitorToolBase::m_newRun
bool m_newRun
Definition: ManagedMonitorToolBase.h:883
ManagedMonitorToolBase::MgmtParams< TH1 >
ManagedMonitorToolBase::StreamNameFcn
A function-object base class allowing the specific implementation of getStreamName to be decided at r...
Definition: ManagedMonitorToolBase.h:356
ManagedMonitorToolBase::m_supportedIntervalsForRebooking
std::set< Interval_t > m_supportedIntervalsForRebooking
Definition: ManagedMonitorToolBase.h:959
ManagedMonitorToolBase::preSelector
virtual bool preSelector()
Definition: ManagedMonitorToolBase.cxx:1912
ManagedMonitorToolBase::Interval_t
Interval_t
An enumeration describing how detailed a particular monitoring object is.
Definition: ManagedMonitorToolBase.h:114
defineDB.smd
string smd
Definition: JetTagCalibration/share/defineDB.py:44
python.CaloRecoConfig.f
f
Definition: CaloRecoConfig.py:127
ManagedMonitorToolBase::m_path
std::string m_path
Definition: ManagedMonitorToolBase.h:915
ManagedMonitorToolBase::m_dataTypeStr
std::string m_dataTypeStr
Definition: ManagedMonitorToolBase.h:897
ManagedMonitorToolBase::bookHistograms
virtual StatusCode bookHistograms()
An inheriting class should either override this function or bookHists().
Definition: ManagedMonitorToolBase.cxx:1407
ManagedMonitorToolBase::m_DQFilterTools
ToolHandleArray< IDQFilterTool > m_DQFilterTools
Definition: ManagedMonitorToolBase.h:912
checkFileSG.line
line
Definition: checkFileSG.py:75
ManagedMonitorToolBase::getHist
virtual StatusCode getHist(TH1 *&h, const std::string &hName, const std::string &system, Interval_t interval)
Returns a TH1 via the pointer passed as the first argument.
Definition: ManagedMonitorToolBase.cxx:1589
ManagedMonitorToolBase::m_newEventsBlock
bool m_newEventsBlock
Definition: ManagedMonitorToolBase.h:884
ManagedMonitorToolBase::Imp::benchPreProcHistograms
void benchPreProcHistograms()
Definition: ManagedMonitorToolBase.cxx:122
get_generator_info.result
result
Definition: get_generator_info.py:21
runLayerRecalibration.chain
chain
Definition: runLayerRecalibration.py:175
ManagedMonitorToolBase::Imp::m_bench_tmp
AthMonBench m_bench_tmp
Definition: ManagedMonitorToolBase.cxx:55
ManagedMonitorToolBase::Imp
Definition: ManagedMonitorToolBase.cxx:39
PowhegControl_ttHplus_NLO.ss
ss
Definition: PowhegControl_ttHplus_NLO.py:83
ManagedMonitorToolBase::OutputMetadata::m_intervalData
char * m_intervalData
Definition: ManagedMonitorToolBase.h:781
ManagedMonitorToolBase::deregHist
virtual StatusCode deregHist(LWHist *h)
Definition: ManagedMonitorToolBase.cxx:1826
CaloCellTimeCorrFiller.LB
LB
Definition: CaloCellTimeCorrFiller.py:37
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
ManagedMonitorToolBase::MgmtAttr_t
MgmtAttr_t
An enumeration describing how the class handles the histogram.
Definition: ManagedMonitorToolBase.h:131
ManagedMonitorToolBase::higStat
@ higStat
Definition: ManagedMonitorToolBase.h:115
ManagedMonitorToolBase::fillHists
virtual StatusCode fillHists()
Calls fillHists( bool, bool, bool ); if an eventBlock,lumiBlock, or run has turned over,...
Definition: ManagedMonitorToolBase.cxx:793
ManagedMonitorToolBase::Imp::m_benchNFillAfterbook
unsigned m_benchNFillAfterbook
Definition: ManagedMonitorToolBase.cxx:62
ManagedMonitorToolBase::lumiBlock
@ lumiBlock
Definition: ManagedMonitorToolBase.h:114
ManagedMonitorToolBase::m_endOfLumiBlock
bool m_endOfLumiBlock
Definition: ManagedMonitorToolBase.h:885
ManagedMonitorToolBase
Provides functionality for users to implement and save histograms, ntuples, and summary data,...
Definition: ManagedMonitorToolBase.h:74
ManagedMonitorToolBase::NoOutputStream
Definition: ManagedMonitorToolBase.h:800
ManagedMonitorToolBase::MonGroup::deregGraph
StatusCode deregGraph(TGraph *g)
De-registers a TGraph from the THistSvc, but does NOT delete the object (also works for LWHists).
Definition: ManagedMonitorToolBase.cxx:331
ManagedMonitorToolBase::m_THistSvc
ServiceHandle< ITHistSvc > m_THistSvc
Definition: ManagedMonitorToolBase.h:906
ManagedMonitorToolBase::m_procNEventsProp
long m_procNEventsProp
Definition: ManagedMonitorToolBase.h:914
AthCommonDataStore< AthCommonMsg< AlgTool > >::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
ManagedMonitorToolBase::regTree
virtual StatusCode regTree(TTree *t, const std::string &system, Interval_t interval, MgmtAttr_t histo_mgmt=ATTRIB_MANAGED, const std::string &chain="", const std::string &merge="")
Registers a TTree to be included in the output stream using logical parameters that describe it.
Definition: ManagedMonitorToolBase.cxx:1749
AthenaMonManager::runNumber
static unsigned int runNumber()
Definition: AthenaMonManager.cxx:364
initialize
void initialize()
Definition: run_EoverP.cxx:894
ManagedMonitorToolBase::setupOutputStreams
virtual StatusCode setupOutputStreams(std::vector< std::string > Mapping=std::vector< std::string >())
This implementation does nothing—streams in this class should be managed by the AthenaMonManager.
Definition: ManagedMonitorToolBase.cxx:1883
AthenaMonManager::fileKey
virtual std::string fileKey() const
Definition: AthenaMonManager.cxx:699
ManagedMonitorToolBase::NoOutputStream::getStreamName
virtual std::string getStreamName(const ManagedMonitorToolBase *tool, const MonGroup &group, const std::string &objName, bool usePreviousInterval=false)
A function that converts a MonGroup of logical parameters into a physical output stream name.
Definition: ManagedMonitorToolBase.cxx:2169
ManagedMonitorToolBase::m_environmentStr
std::string m_environmentStr
Definition: ManagedMonitorToolBase.h:898
mergePhysValFiles.start
start
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:14
ManagedMonitorToolBase::Imp::benchPreFillHistograms
void benchPreFillHistograms()
Definition: ManagedMonitorToolBase.cxx:97
AthenaMonManager::AOD
@ AOD
Definition: AthenaMonManager.h:49
ManagedMonitorToolBase::regManagedGraphs
StatusCode regManagedGraphs(std::vector< MgmtParams< TGraph > > &templateGraphs)
Definition: ManagedMonitorToolBase.cxx:1130
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
ManagedMonitorToolBase::Imp::benchPostFillHistograms
void benchPostFillHistograms()
Definition: ManagedMonitorToolBase.cxx:106
ManagedMonitorToolBase::runStat
virtual StatusCode runStat()
This implementation does nothing; equivalent functionality may be provided by procHists( true,...
Definition: ManagedMonitorToolBase.cxx:1894
ManagedMonitorToolBase::writeAndDelete
virtual StatusCode writeAndDelete(TH1 *h, const MonGroup &group)
Write out histogram and delete it.
Definition: ManagedMonitorToolBase.cxx:1804
ManagedMonitorToolBase::livefractionPerBCID
virtual float livefractionPerBCID(const EventContext &ctx=Gaudi::Hive::currentContext()) const
Livefraction per bunch crossing ID.
Definition: ManagedMonitorToolBase.cxx:2012
ManagedMonitorToolBase::regManagedHistograms
StatusCode regManagedHistograms(std::vector< MgmtParams< TH1 > > &templateHistograms)
Definition: ManagedMonitorToolBase.cxx:1033
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
ManagedMonitorToolBase::Imp::m_bench_total
AthMonBench m_bench_total
Definition: ManagedMonitorToolBase.cxx:61
ManagedMonitorToolBase::lbDuration
virtual double lbDuration(const EventContext &ctx=Gaudi::Hive::currentContext()) const
Luminosity block time (in seconds)
Definition: ManagedMonitorToolBase.cxx:2047
ManagedMonitorToolBase::m_trigDecTool
PublicToolHandle< Trig::ITrigDecisionTool > m_trigDecTool
Definition: ManagedMonitorToolBase.h:908
skel.it
it
Definition: skel.GENtoEVGEN.py:423
ManagedMonitorToolBase::Imp::~Imp
~Imp()
Definition: ManagedMonitorToolBase.cxx:46
ManagedMonitorToolBase::m_d
Imp * m_d
Definition: ManagedMonitorToolBase.h:962
ManagedMonitorToolBase::m_lastLowStatInterval
int m_lastLowStatInterval
Definition: ManagedMonitorToolBase.h:924
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
ManagedMonitorToolBase::OutputMetadata
Definition: ManagedMonitorToolBase.h:762
ManagedMonitorToolBase::m_triggerGroupProp
std::string m_triggerGroupProp
Definition: ManagedMonitorToolBase.h:918
LWHistAthMonWrapper::setStreamName
static void setStreamName(LWHist *, const std::string &streamName)
ManagedMonitorToolBase::Imp::benchPostProcHistograms
void benchPostProcHistograms()
Definition: ManagedMonitorToolBase.cxx:130
ManagedMonitorToolBase::m_dataType
AthenaMonManager::DataType_t m_dataType
Definition: ManagedMonitorToolBase.h:901
ManagedMonitorToolBase::regGraph
virtual StatusCode regGraph(TGraph *g, const std::string &system, Interval_t interval, MgmtAttr_t histo_mgmt=ATTRIB_MANAGED, const std::string &chain="", const std::string &merge="")
Registers a TGraph to be included in the output stream using logical parameters that describe the gra...
Definition: ManagedMonitorToolBase.cxx:1693
ManagedMonitorToolBase::m_useLumi
bool m_useLumi
Definition: ManagedMonitorToolBase.h:957
ManagedMonitorToolBase::m_newLowStatInterval
bool m_newLowStatInterval
Definition: ManagedMonitorToolBase.h:882
sendEI_SPB.root
root
Definition: sendEI_SPB.py:34
ManagedMonitorToolBase::fill
@ fill
Definition: ManagedMonitorToolBase.h:116
ManagedMonitorToolBase::parseList
StatusCode parseList(const std::string &, std::vector< std::string > &)
Definition: ManagedMonitorToolBase.cxx:2344
ManagedMonitorToolBase::regManagedEfficiencies
StatusCode regManagedEfficiencies(std::vector< MgmtParams< TEfficiency > > &templateEfficiencies)
Definition: ManagedMonitorToolBase.cxx:1200
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
python.TrigTLAMonitorAlgorithm.triggers
triggers
Definition: TrigTLAMonitorAlgorithm.py:196
ManagedMonitorToolBase::procHistograms
virtual StatusCode procHistograms()
An inheriting class should either override this function or finalHists().
Definition: ManagedMonitorToolBase.cxx:1423
ManagedMonitorToolBase::MonGroup::badusage
static void badusage()
Definition: ManagedMonitorToolBase.cxx:188
SG::VarHandleKey::empty
bool empty() const
Test if the key is blank.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:150
ManagedMonitorToolBase::DefaultStream::getDirectoryName
virtual std::string getDirectoryName(const ManagedMonitorToolBase *tool, const MonGroup &group, const std::string &objName, const bool usePreviousInterval)
A function that returns TDirectory path in a file that corresponds to a given MonGroup and object nam...
Definition: ManagedMonitorToolBase.cxx:2155
ManagedMonitorToolBase::Imp::m_bench_book
AthMonBench m_bench_book
Definition: ManagedMonitorToolBase.cxx:56
python.SystemOfUnits.ms
int ms
Definition: SystemOfUnits.py:132
ManagedMonitorToolBase::GlobalDirectoryRestore
Private helper class.
Definition: ManagedMonitorToolBase.h:937
ManagedMonitorToolBase::Imp::benchFinalReport
void benchFinalReport()
Definition: ManagedMonitorToolBase.cxx:159
ManagedMonitorToolBase::regManagedTrees
StatusCode regManagedTrees(std::vector< MgmtParams< TTree > > &templateTrees)
Definition: ManagedMonitorToolBase.cxx:1261
ManagedMonitorToolBase::OutputMetadata::m_charArrSize
const int m_charArrSize
Definition: ManagedMonitorToolBase.h:777
ManagedMonitorToolBase::registerMetadata
StatusCode registerMetadata(const std::string &streamName, const std::string &hName, const MonGroup &group)
Definition: ManagedMonitorToolBase.cxx:1006
AthenaMonManager::getLBsLowStat
static unsigned int getLBsLowStat()
Definition: AthenaMonManager.cxx:326
ManagedMonitorToolBase::checkHists
virtual StatusCode checkHists(bool calledFromFinalize)
This implementation does nothing; equivalent functionality may be provided by procHists(....
Definition: ManagedMonitorToolBase.cxx:1902
ManagedMonitorToolBase::m_newHigStatInterval
bool m_newHigStatInterval
Definition: ManagedMonitorToolBase.h:882
ReadCondHandle.h
ManagedMonitorToolBase::m_newMedStatInterval
bool m_newMedStatInterval
Definition: ManagedMonitorToolBase.h:882
TrigLiveFractionCondData::lbAverageLiveFraction
float lbAverageLiveFraction(bool highPriority=true) const
Luminosity-averaged live fraction over all physics BCIDs.
Definition: TrigLiveFractionCondData.cxx:66
ManagedMonitorToolBase::OutputMetadata::m_metadata
TTree * m_metadata
Definition: ManagedMonitorToolBase.h:778
TruthTest.itE
itE
Definition: TruthTest.py:25
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
ManagedMonitorToolBase::lbLuminosityPerBCID
virtual float lbLuminosityPerBCID(const EventContext &ctx=Gaudi::Hive::currentContext()) const
Instantaneous luminosity.
Definition: ManagedMonitorToolBase.cxx:1976
ManagedMonitorToolBase::Imp::m_bench_proc
AthMonBench m_bench_proc
Definition: ManagedMonitorToolBase.cxx:60
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
ManagedMonitorToolBase::OfflineStream::getStreamName
virtual std::string getStreamName(const ManagedMonitorToolBase *tool, const MonGroup &group, const std::string &objName, bool usePreviousInterval=false)
A function that converts a MonGroup of logical parameters into a physical output stream name.
Definition: ManagedMonitorToolBase.cxx:2217
python.checkMetadata.metadata
metadata
Definition: checkMetadata.py:175
ManagedMonitorToolBase::OutputMetadata::fill
virtual void fill(const std::string &name, Interval_t interval, std::string trigger, std::string merge)
Definition: ManagedMonitorToolBase.cxx:2104
AthenaMonManager::getLBsMedStat
static unsigned int getLBsMedStat()
Definition: AthenaMonManager.cxx:329
SCT_CalibAlgs::nbins
@ nbins
Definition: SCT_CalibNumbers.h:10
ManagedMonitorToolBase::m_bookHistogramsInitial
bool m_bookHistogramsInitial
Definition: ManagedMonitorToolBase.h:956
ManagedMonitorToolBase::Imp::m_warnAboutMissingInitialize
bool m_warnAboutMissingInitialize
Definition: ManagedMonitorToolBase.cxx:51
LWHist::usingROOTBackend
bool usingROOTBackend() const
Definition: LWHist.h:73
PyPoolBrowser.item
item
Definition: PyPoolBrowser.py:129
ManagedMonitorToolBase::getNewStreamNameFcn
virtual StreamNameFcn * getNewStreamNameFcn() const
Definition: ManagedMonitorToolBase.cxx:2388
ManagedMonitorToolBase::m_preScaleProp
long m_preScaleProp
Definition: ManagedMonitorToolBase.h:916
ManagedMonitorToolBase::lbInteractionsPerCrossing
virtual float lbInteractionsPerCrossing(const EventContext &ctx=Gaudi::Hive::currentContext()) const
Instantaneous number of interactions, i.e.
Definition: ManagedMonitorToolBase.cxx:1940
LWHistAthMonWrapper::removeCustomData
static void removeCustomData(LWHist *)
ManagedMonitorToolBase::trigChainsArePassed
virtual bool trigChainsArePassed(std::vector< std::string > &)
Definition: ManagedMonitorToolBase.cxx:2325
ManagedMonitorToolBase.h
ManagedMonitorToolBase::m_fileKey
std::string m_fileKey
Definition: ManagedMonitorToolBase.h:896
ManagedMonitorToolBase::m_lastLumiBlock
unsigned int m_lastLumiBlock
Definition: ManagedMonitorToolBase.h:922
ManagedMonitorToolBase::MonGroup
A container of information describing a monitoring object.
Definition: ManagedMonitorToolBase.h:138
ManagedMonitorToolBase::m_vTrigGroupNames
std::vector< std::string > m_vTrigGroupNames
Definition: ManagedMonitorToolBase.h:742
ManagedMonitorToolBase::GlobalDirectoryRestore::GlobalDirectoryRestore
GlobalDirectoryRestore()
Definition: ManagedMonitorToolBase.cxx:2441
ManagedMonitorToolBase::Imp::m_bench_fillfirst
AthMonBench m_bench_fillfirst
Definition: ManagedMonitorToolBase.cxx:57
AthenaMonManager::tier0ESD
@ tier0ESD
Definition: AthenaMonManager.h:49
ManagedMonitorToolBase::lbAverageLivefraction
virtual float lbAverageLivefraction(const EventContext &ctx=Gaudi::Hive::currentContext()) const
Average luminosity livefraction.
Definition: ManagedMonitorToolBase.cxx:1993
ManagedMonitorToolBase::m_templateGraphs
std::map< Interval_t, std::vector< MgmtParams< TGraph > > > m_templateGraphs
Definition: ManagedMonitorToolBase.h:726
AthenaMonManager::dataType
static DataType_t dataType()
Returns the data type that the monitoring application is running over to help ManagedMonitorToolBase ...
Definition: AthenaMonManager.cxx:338
ManagedMonitorToolBase::OutputMetadata::m_triggerData
char * m_triggerData
Definition: ManagedMonitorToolBase.h:782
AthenaMonManager
An Algorithm that manages a set of modules, each inheriting from ManagedMonitorToolBase,...
Definition: AthenaMonManager.h:34
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ManagedMonitorToolBase::m_manager
AthenaMonManager * m_manager
Definition: ManagedMonitorToolBase.h:892
ManagedMonitorToolBase::initialize
virtual StatusCode initialize()
Definition: ManagedMonitorToolBase.cxx:669
LWHistAthMonWrapper::key
static const std::string & key(LWHist *)
ManagedMonitorToolBase::m_lumiDataKey
SG::ReadCondHandleKey< LuminosityCondData > m_lumiDataKey
Definition: ManagedMonitorToolBase.h:950
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::deregGraph
virtual StatusCode deregGraph(TGraph *g)
De-registers a TGraph from the THistSvc, but does NOT delete the object.
Definition: ManagedMonitorToolBase.cxx:1844
ManagedMonitorToolBase::m_streamNameFcn
StreamNameFcn * m_streamNameFcn
Definition: ManagedMonitorToolBase.h:904
ManagedMonitorToolBase::OutputMetadata::m_nameData
char * m_nameData
Definition: ManagedMonitorToolBase.h:779
sim_rttUpdate.user
def user
Definition: sim_rttUpdate.py:662
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
ManagedMonitorToolBase::OutputMetadata::~OutputMetadata
virtual ~OutputMetadata()
Definition: ManagedMonitorToolBase.cxx:2092
lumiFormat.i
int i
Definition: lumiFormat.py:92
AthenaMonManager::tier0
@ tier0
Definition: AthenaMonManager.h:49
ITrigDecisionTool.h
python.CaloCondTools.g
g
Definition: CaloCondTools.py:15
ManagedMonitorToolBase::GlobalDirectoryRestore::~GlobalDirectoryRestore
~GlobalDirectoryRestore()
Definition: ManagedMonitorToolBase.cxx:2449
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
ManagedMonitorToolBase::file
@ file
Definition: ManagedMonitorToolBase.h:114
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
getLatestRuns.interval
interval
Definition: getLatestRuns.py:24
ManagedMonitorToolBase::DefaultStream
Definition: ManagedMonitorToolBase.h:787
ManagedMonitorToolBase::ATTRIB_UNMANAGED
@ ATTRIB_UNMANAGED
Definition: ManagedMonitorToolBase.h:131
file
TFile * file
Definition: tile_monitor.h:29
ManagedMonitorToolBase::Imp::benchPostBookHistograms
void benchPostBookHistograms()
Definition: ManagedMonitorToolBase.cxx:87
test_pyathena.parent
parent
Definition: test_pyathena.py:15
AthenaMonManager::tier0Raw
@ tier0Raw
Definition: AthenaMonManager.h:49
ManagedMonitorToolBase::m_triggerChainProp
std::string m_triggerChainProp
Definition: ManagedMonitorToolBase.h:917
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
ManagedMonitorToolBase::OnlineStream
Definition: ManagedMonitorToolBase.h:807
AthenaMonManager::user
@ user
Definition: AthenaMonManager.h:49
nEvents
int nEvents
Definition: fbtTestBasics.cxx:77
ManagedMonitorToolBase::MonGroup::ncopies
static unsigned ncopies()
Definition: ManagedMonitorToolBase.cxx:187
run
Definition: run.py:1
ManagedMonitorToolBase::OfflineStream
Definition: ManagedMonitorToolBase.h:814
ManagedMonitorToolBase::StreamNameFcn::getStreamName
virtual std::string getStreamName(const ManagedMonitorToolBase *tool, const MonGroup &group, const std::string &objName, bool usePreviousInterval=false)=0
A function that converts a MonGroup of logical parameters into a physical output stream name.
ManagedMonitorToolBase::Imp::m_doResourceMon
bool m_doResourceMon
Definition: ManagedMonitorToolBase.cxx:54
ManagedMonitorToolBase::~ManagedMonitorToolBase
virtual ~ManagedMonitorToolBase()
Definition: ManagedMonitorToolBase.cxx:487
ManagedMonitorToolBase::ManagedMonitorToolBase
ManagedMonitorToolBase(const std::string &type, const std::string &name, const IInterface *parent)
Definition: ManagedMonitorToolBase.cxx:389
ManagedMonitorToolBase::medStat
@ medStat
Definition: ManagedMonitorToolBase.h:115
ManagedMonitorToolBase::MonGroup::deregObject
StatusCode deregObject(const std::string &objName)
De-registers a TObject from the THistSvc, but does NOT delete the object (also works for LWHists).
Definition: ManagedMonitorToolBase.cxx:343
ManagedMonitorToolBase::m_templateTrees
std::map< Interval_t, std::vector< MgmtParams< TTree > > > m_templateTrees
Definition: ManagedMonitorToolBase.h:730
ManagedMonitorToolBase::m_metadataMap
MDMap_t m_metadataMap
Definition: ManagedMonitorToolBase.h:889
ManagedMonitorToolBase::bookHists
virtual StatusCode bookHists()
Calls bookHists( true, true, true ) and initializes lumiBlock and run numbers.
Definition: ManagedMonitorToolBase.cxx:783
ManagedMonitorToolBase::Imp::benchReset
void benchReset()
Definition: ManagedMonitorToolBase.cxx:143
ManagedMonitorToolBase::m_endOfEventsBlock
bool m_endOfEventsBlock
Definition: ManagedMonitorToolBase.h:885
TH2
Definition: rootspy.cxx:373
fcn
void fcn(int &, double *, double &result, double par[], int)
this is where we write out chi2
Definition: Chi2LJets.cxx:183
ManagedMonitorToolBase::m_trigLiveFractionDataKey
SG::ReadCondHandleKey< TrigLiveFractionCondData > m_trigLiveFractionDataKey
Definition: ManagedMonitorToolBase.h:954
TrigLiveFractionCondData::l1LiveFractionVector
const std::vector< float > & l1LiveFractionVector(bool highPriority=true) const
Return vector with all BCIDs indexed by BCID number.
Definition: TrigLiveFractionCondData.cxx:42
ManagedMonitorToolBase::m_environment
AthenaMonManager::Environment_t m_environment
Definition: ManagedMonitorToolBase.h:902
ManagedMonitorToolBase::MonGroup::regHist
StatusCode regHist(TH1 *h)
Registers a TH1 (including TH2, TH3, and TProfile) to be included in the output stream using logical ...
Definition: ManagedMonitorToolBase.cxx:195
beamspotman.dir
string dir
Definition: beamspotman.py:623
ManagedMonitorToolBase::regEfficiency
virtual StatusCode regEfficiency(TEfficiency *e, const MonGroup &group)
Registers a TEfficiency to be included in the output stream using logical parameters that describe th...
Definition: ManagedMonitorToolBase.cxx:1648
LBDurationCondData::lbDuration
double lbDuration() const
Definition: LBDurationCondData.cxx:27
ManagedMonitorToolBase::OutputMetadata::OutputMetadata
OutputMetadata(TTree *metadata)
Definition: ManagedMonitorToolBase.cxx:2069
ManagedMonitorToolBase::m_lastRun
unsigned int m_lastRun
Definition: ManagedMonitorToolBase.h:923
ManagedMonitorToolBase::intervalStringToEnum
static Interval_t intervalStringToEnum(const std::string &str)
Converts a string to the corresponding Interval_t.
Definition: ManagedMonitorToolBase.cxx:630
ManagedMonitorToolBase::DefaultStream::getStreamName
virtual std::string getStreamName(const ManagedMonitorToolBase *tool, const MonGroup &group, const std::string &objName, bool usePreviousInterval=false)
A function that converts a MonGroup of logical parameters into a physical output stream name.
Definition: ManagedMonitorToolBase.cxx:2143
ManagedMonitorToolBase::MonGroup::regEfficiency
StatusCode regEfficiency(TEfficiency *e)
Registers a TEfficiency to be included in the output stream.
Definition: ManagedMonitorToolBase.cxx:257
ManagedMonitorToolBase::m_newLumiBlock
bool m_newLumiBlock
Definition: ManagedMonitorToolBase.h:883
ManagedMonitorToolBase::m_endOfLowStat
bool m_endOfLowStat
Definition: ManagedMonitorToolBase.h:885
ManagedMonitorToolBase::m_lbDurationDataKey
SG::ReadCondHandleKey< LBDurationCondData > m_lbDurationDataKey
Definition: ManagedMonitorToolBase.h:952
ManagedMonitorToolBase::OfflineStream::updateRunLB
void updateRunLB()
Definition: ManagedMonitorToolBase.cxx:2318
ManagedMonitorToolBase::bookHistogramsRecurrent
virtual StatusCode bookHistogramsRecurrent()
An inheriting class should either override this function, bookHists() or bookHistograms().
Definition: ManagedMonitorToolBase.cxx:1395
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
AthenaMonManager::getLBsHigStat
static unsigned int getLBsHigStat()
Definition: AthenaMonManager.cxx:332
AthMonBench::startMeasurement
void startMeasurement()
Definition: AthMonBench.h:83
LWHistAthMonWrapper::setKey
static void setKey(LWHist *, const std::string &key)
AtlCoolConsole.tool
tool
Definition: AtlCoolConsole.py:453
ManagedMonitorToolBase::OfflineStream::getLBrange
void getLBrange(int *, int *, int, int)
Definition: ManagedMonitorToolBase.cxx:2208
ManagedMonitorToolBase::Imp::Imp
Imp(ManagedMonitorToolBase *tc)
Definition: ManagedMonitorToolBase.cxx:42
ManagedMonitorToolBase::OnlineStream::getDirectoryName
virtual std::string getDirectoryName(const ManagedMonitorToolBase *tool, const MonGroup &group, const std::string &objName, const bool usePreviousInterval)
A function that returns TDirectory path in a file that corresponds to a given MonGroup and object nam...
Definition: ManagedMonitorToolBase.cxx:2201
ExtractEBRunDetails.endOfRun
endOfRun
Definition: ExtractEBRunDetails.py:245
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
ManagedMonitorToolBase::OfflineStream::getDirectoryName
virtual std::string getDirectoryName(const ManagedMonitorToolBase *tool, const MonGroup &group, const std::string &objName, const bool usePreviousInterval)
A function that returns TDirectory path in a file that corresponds to a given MonGroup and object nam...
Definition: ManagedMonitorToolBase.cxx:2305
item
Definition: ItemListSvc.h:43
DiTauRecTools::parseString
std::vector< TString > parseString(const TString &str, const TString &delim=",")
Definition: Reconstruction/DiTauRecTools/Root/HelperFunctions.cxx:19
ManagedMonitorToolBase::lowStat
@ lowStat
Definition: ManagedMonitorToolBase.h:115
ManagedMonitorToolBase::updateTriggersForGroups
void updateTriggersForGroups(std::vector< std::string > &)
Definition: ManagedMonitorToolBase.cxx:2363
LWHist::setOwnsROOTHisto
void setOwnsROOTHisto(bool b)
Definition: LWHist.h:75
ManagedMonitorToolBase::m_lwhists
std::set< LWHist * > m_lwhists
Definition: ManagedMonitorToolBase.h:891
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
CxxUtils::to
CONT to(RANGE &&r)
Definition: ranges.h:32
ManagedMonitorToolBase::m_templateLWHistograms
std::map< Interval_t, std::vector< MgmtParams< LWHist > > > m_templateLWHistograms
Definition: ManagedMonitorToolBase.h:734
ManagedMonitorToolBase::OnlineStream::getStreamName
virtual std::string getStreamName(const ManagedMonitorToolBase *tool, const MonGroup &group, const std::string &objName, bool usePreviousInterval=false)
A function that converts a MonGroup of logical parameters into a physical output stream name.
Definition: ManagedMonitorToolBase.cxx:2186
ManagedMonitorToolBase::m_managerNameProp
std::string m_managerNameProp
Definition: ManagedMonitorToolBase.h:894
ManagedMonitorToolBase::lbLumiWeight
virtual double lbLumiWeight(const EventContext &ctx=Gaudi::Hive::currentContext()) const
Average Integrated Luminosity Live Fraction.
Definition: ManagedMonitorToolBase.cxx:2031
ManagedMonitorToolBase::MonGroup::regGraph
StatusCode regGraph(TGraph *g)
Registers a TGraph to be included in the output stream using logical parameters that describe the his...
Definition: ManagedMonitorToolBase.cxx:267
ManagedMonitorToolBase::m_nEventsIgnoreTrigger
unsigned int m_nEventsIgnoreTrigger
Definition: ManagedMonitorToolBase.h:927
ManagedMonitorToolBase::run
@ run
Definition: ManagedMonitorToolBase.h:116
ManagedMonitorToolBase::m_endOfRun
bool m_endOfRun
Definition: ManagedMonitorToolBase.h:885
ManagedMonitorToolBase::m_newLowStat
bool m_newLowStat
Definition: ManagedMonitorToolBase.h:883
AthenaPoolExample_Copy.streamName
string streamName
Definition: AthenaPoolExample_Copy.py:39
ManagedMonitorToolBase::convertLWHists
virtual StatusCode convertLWHists()
Deal with the LW histograms.
Definition: ManagedMonitorToolBase.cxx:1378
ManagedMonitorToolBase::MonGroup::writeAndDelete
StatusCode writeAndDelete(TH1 *h)
Write and delete a histogram.
Definition: ManagedMonitorToolBase.cxx:291
lumiFormat.lumi
lumi
Definition: lumiFormat.py:113
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
ManagedMonitorToolBase::StreamNameFcn::parseString
static void parseString(const std::string &streamName, std::string &root, std::string &rem)
A helper non-virtual function, parses id string.
Definition: ManagedMonitorToolBase.cxx:2416
CaloLCW_tf.group
group
Definition: CaloLCW_tf.py:28
ManagedMonitorToolBase::regManagedLWHistograms
StatusCode regManagedLWHistograms(std::vector< MgmtParams< LWHist > > &templateLWHistograms)
Definition: ManagedMonitorToolBase.cxx:1315
h
ManagedMonitorToolBase::OutputMetadata::m_mergeData
char * m_mergeData
Definition: ManagedMonitorToolBase.h:783
AthenaMonManager::forkedProcess
bool forkedProcess()
Definition: AthenaMonManager.cxx:345
CondAlgsOpts.found
int found
Definition: CondAlgsOpts.py:101
ManagedMonitorToolBase::m_lastHigStatInterval
int m_lastHigStatInterval
Definition: ManagedMonitorToolBase.h:924
ManagedMonitorToolBase::MonGroup::getHist
StatusCode getHist(TH1 *&h, const std::string &hName)
Returns a TH1 via the pointer passed as the first argument.
Definition: ManagedMonitorToolBase.cxx:209
python.CaloScaleNoiseConfig.str
str
Definition: CaloScaleNoiseConfig.py:78
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
ManagedMonitorToolBase::Imp::benchPreBookHistograms
void benchPreBookHistograms()
Definition: ManagedMonitorToolBase.cxx:78
ManagedMonitorToolBase::m_nLumiBlocks
unsigned int m_nLumiBlocks
Definition: ManagedMonitorToolBase.h:928
AthenaMonManager::altprod
@ altprod
Definition: AthenaMonManager.h:49
ManagedMonitorToolBase::eventsBlock
@ eventsBlock
Definition: ManagedMonitorToolBase.h:114
ManagedMonitorToolBase::OutputMetadata::copyString
void copyString(char *to, const std::string &from)
Definition: ManagedMonitorToolBase.cxx:2130
python.envutil.filelist
filelist
print ("Checking files %s..." % fullfile)
Definition: envutil.py:152
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
TH1
Definition: rootspy.cxx:268
ManagedMonitorToolBase::Imp::m_theclass
ManagedMonitorToolBase * m_theclass
Definition: ManagedMonitorToolBase.cxx:49
DEBUG
#define DEBUG
Definition: page_access.h:11
ManagedMonitorToolBase::finalHists
virtual StatusCode finalHists()
Calls procHists( true, true, true ).
Definition: ManagedMonitorToolBase.cxx:1334
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
ManagedMonitorToolBase::all
@ all
Definition: ManagedMonitorToolBase.h:116
ManagedMonitorToolBase::deregObject
virtual StatusCode deregObject(const std::string &objName, const std::string &system, Interval_t interval)
De-registers a TObject from the THistSvc, but does NOT delete the object.
Definition: ManagedMonitorToolBase.cxx:1852
ManagedMonitorToolBase::NoOutputStream::getDirectoryName
virtual std::string getDirectoryName(const ManagedMonitorToolBase *tool, const MonGroup &group, const std::string &objName, const bool usePreviousInterval)
A function that returns TDirectory path in a file that corresponds to a given MonGroup and object nam...
Definition: ManagedMonitorToolBase.cxx:2179
ManagedMonitorToolBase::StreamNameFcn::getDirectoryName
virtual std::string getDirectoryName(const ManagedMonitorToolBase *tool, const MonGroup &group, const std::string &objName, const bool usePreviousInterval)=0
A function that returns TDirectory path in a file that corresponds to a given MonGroup and object nam...
ManagedMonitorToolBase::MonGroup::deregHist
StatusCode deregHist(TH1 *h)
De-registers a TH1 from the THistSvc, but does NOT delete the object.
Definition: ManagedMonitorToolBase.cxx:305
LWHistAthMonWrapper.h
ManagedMonitorToolBase::fillHistograms
virtual StatusCode fillHistograms()
An inheriting class should either override this function or fillHists().
Definition: ManagedMonitorToolBase.cxx:1415
ManagedMonitorToolBase::lbAverageLuminosity
virtual float lbAverageLuminosity(const EventContext &ctx=Gaudi::Hive::currentContext()) const
Average luminosity (in ub-1 s-1 => 10^30 cm-2 s-1)
Definition: ManagedMonitorToolBase.cxx:1960
str
Definition: BTagTrackIpAccessor.cxx:11
python.Logging.manager
manager
Definition: PhysicsAnalysis/D3PDTools/AnaAlgorithm/python/Logging.py:92
ManagedMonitorToolBase::m_useTrigger
bool m_useTrigger
Definition: ManagedMonitorToolBase.h:920
ManagedMonitorToolBase::m_detailLevel
unsigned int m_detailLevel
Definition: ManagedMonitorToolBase.h:899
ManagedMonitorToolBase::m_haveClearedLastEventBlock
bool m_haveClearedLastEventBlock
Definition: ManagedMonitorToolBase.h:929
AthenaMonManager::lumiBlockNumber
static unsigned int lumiBlockNumber()
Definition: AthenaMonManager.cxx:352
LWHistControls.h
AthAlgTool
Definition: AthAlgTool.h:26
IDQFilterTool.h
ManagedMonitorToolBase::m_templateHistograms
std::map< Interval_t, std::vector< MgmtParams< TH1 > > > m_templateHistograms
Definition: ManagedMonitorToolBase.h:722
ManagedMonitorToolBase::Imp::m_bench_filllast
AthMonBench m_bench_filllast
Definition: ManagedMonitorToolBase.cxx:59
ManagedMonitorToolBase::ATTRIB_X_VS_LB
@ ATTRIB_X_VS_LB
Definition: ManagedMonitorToolBase.h:131
ManagedMonitorToolBase::Imp::s_svcLocator
static std::atomic< ISvcLocator * > s_svcLocator
Definition: ManagedMonitorToolBase.cxx:41
python.PyAthena.obj
obj
Definition: PyAthena.py:135
ManagedMonitorToolBase::m_trigTranslator
PublicToolHandle< ITriggerTranslatorTool > m_trigTranslator
Definition: ManagedMonitorToolBase.h:910
LWHist::getROOTHistBase
virtual TH1 * getROOTHistBase()=0
ManagedMonitorToolBase::m_lastMedStatInterval
int m_lastMedStatInterval
Definition: ManagedMonitorToolBase.h:924
ManagedMonitorToolBase::m_vTrigChainNames
std::vector< std::string > m_vTrigChainNames
Definition: ManagedMonitorToolBase.h:742
AthMonBench
Definition: AthMonBench.h:27
length
double length(const pvec &v)
Definition: FPGATrackSimLLPDoubletHoughTransformTool.cxx:26
LWHist.h
ManagedMonitorToolBase::MonGroup::deregAll
StatusCode deregAll()
De-registers all TH1 objects from the THistSvc, but does NOT delete the objects.
Definition: ManagedMonitorToolBase.cxx:355
ManagedMonitorToolBase::regHist
virtual StatusCode regHist(TH1 *h, const std::string &system, Interval_t interval, MgmtAttr_t histo_mgmt=ATTRIB_MANAGED, const std::string &chain="", const std::string &merge="")
Registers a TH1 (including TH2, TH3, and TProfile) to be included in the output stream using logical ...
Definition: ManagedMonitorToolBase.cxx:1454
merge
Definition: merge.py:1
AthenaMonManager::noOutput
@ noOutput
Definition: AthenaMonManager.h:49
AthenaMonManager::monteCarlo
@ monteCarlo
Definition: AthenaMonManager.h:58
ManagedMonitorToolBase::intervalEnumToString
static std::string intervalEnumToString(Interval_t interval)
Converts a LevelOfDetail_t to a string of the same name.
Definition: ManagedMonitorToolBase.cxx:588
PhysDESDM_Quirks.trigger
trigger
Definition: PhysDESDM_Quirks.py:27
ManagedMonitorToolBase::MonGroup::regTree
StatusCode regTree(TTree *t)
Registers a TTree to be included in the output stream using logical parameters that describe the hist...
Definition: ManagedMonitorToolBase.cxx:279
ManagedMonitorToolBase::m_defaultLBDuration
float m_defaultLBDuration
Definition: ManagedMonitorToolBase.h:958
ServiceHandle< Gaudi::Interfaces::IOptionsSvc >
ManagedMonitorToolBase::lbAverageInteractionsPerCrossing
virtual float lbAverageInteractionsPerCrossing(const EventContext &ctx=Gaudi::Hive::currentContext()) const
Average mu, i.e.
Definition: ManagedMonitorToolBase.cxx:1924