An Algorithm that manages a set of modules, each inheriting from ManagedMonitorToolBase, by setting common configuration variables and organizing the output data.
More...
#include <AthenaMonManager.h>
|
| enum | Environment_t {
user = 0
, noOutput
, online
, tier0
,
tier0Raw
, tier0ESD
, AOD
, altprod
} |
| | An enumeration of the different types of running environment the monitoring application may be in. More...
|
| enum | DataType_t {
userDefined = 0
, monteCarlo
, collisions
, cosmics
,
heavyIonCollisions
} |
| | An enumeration of the different types of data the monitoring application may be running over. More...
|
An Algorithm that manages a set of modules, each inheriting from ManagedMonitorToolBase, by setting common configuration variables and organizing the output data.
It provides all the functionality and behaviour of AthenaMon.
- Author
- Michael Wilson, CERN, January 2007
Definition at line 34 of file AthenaMonManager.h.
◆ StoreGateSvc_t
◆ DataType_t
An enumeration of the different types of data the monitoring application may be running over.
This can be used to select which histograms to produce, e.g., to prevent the production of colliding-beam histograms when running on cosmic-ray data. Strings of the same names may be given as jobOptions.
| Enumerator |
|---|
| userDefined | |
| monteCarlo | |
| collisions | |
| cosmics | |
| heavyIonCollisions | |
Definition at line 58 of file AthenaMonManager.h.
◆ Environment_t
An enumeration of the different types of running environment the monitoring application may be in.
The running environment may be used to select which histograms are produced, and where they are located in the output. For example, the output paths of the histograms are different for the "user", "online" and the various offline flags. The 'tier0Raw' and 'tier0ESD' are used to select sets of histograms for production either during the RAW --> ESD transform or during the ESD --> AOD transform (but not both!) Strings of the same names may be given as jobOptions.
| Enumerator |
|---|
| user | |
| noOutput | |
| online | |
| tier0 | |
| tier0Raw | |
| tier0ESD | |
| AOD | |
| altprod | |
Definition at line 49 of file AthenaMonManager.h.
◆ AthenaMonManager()
| AthenaMonManager::AthenaMonManager |
( |
const std::string & | name, |
|
|
ISvcLocator * | pSvcLocator ) |
Definition at line 191 of file AthenaMonManager.cxx.
196 ,
m_d(
new Imp(
this, name))
197{
211
214}
AthAlgorithm()
Default constructor:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
static std::atomic< ISvcLocator * > s_svcLocator
ToolHandleArray< IMonitorToolBase > m_monTools
ServiceHandle< ITHistSvc > m_THistSvc
◆ ~AthenaMonManager()
| AthenaMonManager::~AthenaMonManager |
( |
| ) |
|
|
virtual |
◆ dataType()
Returns the data type that the monitoring application is running over to help ManagedMonitorToolBase objects determine which histograms to produce.
Definition at line 311 of file AthenaMonManager.cxx.
313{
314 return Imp::s_dataType;
315}
◆ dataTypeStringToEnum()
Converts a string to a DataType_t of the same name.
Definition at line 264 of file AthenaMonManager.cxx.
266{
267 std::string lcstr( strToLower(str) );
268
269 if( lcstr == "userdefined" )
271 else if( lcstr == "montecarlo" )
273 else if( lcstr == "collisions" )
275 else if( lcstr == "cosmics" )
277 else if( lcstr == "heavyioncollisions" )
279
283 MsgStream
log( ms,
"AthenaMonManager::dataTypeStringToEnum()" );
284 log << MSG::WARNING <<
"Unknown AthenaMonManager::DataType_t \""
285 <<
str <<
"\", returning \"userDefined\"" <<
endmsg;
286 }
287 }
288
290}
◆ declareGaudiProperty()
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition at line 156 of file AthCommonDataStore.h.
158 {
161 hndl.documentation());
162
163 }
◆ declareProperty()
Definition at line 145 of file AthCommonDataStore.h.
145 {
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
◆ detStore()
◆ environment()
Returns the running environment of the monitoring application to help ManagedMonitorToolBase objects determine which histograms to produce.
Definition at line 294 of file AthenaMonManager.cxx.
296{
297 return Imp::s_environment;
298}
◆ envStringToEnum()
Converts a string to an Environment_t of the same name.
static method (shared by all AthenaMonManager instances during run-time)
Definition at line 228 of file AthenaMonManager.cxx.
230{
231 std::string lcstr( strToLower(str) );
232
233 if( lcstr == "user" )
235 else if( lcstr == "nooutput" )
237 else if( lcstr == "online" )
239 else if( lcstr == "tier0" )
241 else if( lcstr == "tier0raw" )
243 else if( lcstr == "tier0esd" )
245 else if( lcstr == "aod" )
247 else if( lcstr == "altprod" )
249
253 MsgStream
log( ms,
"AthenaMonManager::envStringToEnum()" );
254 log << MSG::WARNING <<
"Unknown AthenaMonManager::Environment_t \""
255 <<
str <<
"\", returning \"user\"" <<
endmsg;
256 }
257 }
258
260}
◆ evtStore()
◆ execute()
| StatusCode AthenaMonManager::execute |
( |
| ) |
|
|
virtual |
Definition at line 465 of file AthenaMonManager.cxx.
467{
468 const EventContext& ctx = Gaudi::Hive::currentContext();
469
470 m_d->m_forkedProcess=
false;
471 pid_t currPID=getpid();
472
473 if (
m_d->m_lastPID!=0 &&
m_d->m_lastPID!=currPID) {
474 m_d->m_forkedProcess=
true;
476 }
477 m_d->m_lastPID=currPID;
478
480 if (
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"AthenaMonManager::execute():" <<
endmsg;
481
483
484 ToolHandleArray<IMonitorToolBase>::iterator monToolsEnd =
m_monTools.end();
485 for( ToolHandleArray<IMonitorToolBase>::iterator i =
m_monTools.begin(); i != monToolsEnd; ++i ) {
486 ToolHandle<IMonitorToolBase>&
tool = *
i;
487 m_d->toolAudStart(tool);
488 AthMonBench bench_tmp;
489 if (
m_d->m_doResourceMon)
491 if(
tool->preSelector() ) {
492
493 sc =
tool->fillHists(ctx);
494
495 if( !
sc.isSuccess() ) {
496 if (
msgLvl(MSG::WARNING))
msg(MSG::WARNING) <<
"IMonitorToolBase::fillHists() unsuccessful" <<
endmsg;
497 }
498 }
499
500
501 if (
m_d->m_doResourceMon) {
504 tb->m_bench_algexec_fillHists += bench_tmp;
505 if (
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
" --> m_doResourceMon is True" <<
endmsg;
506 }
508 }
509 if (
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
" --> Done calling IMonitorToolBase::fillHists()" <<
endmsg;
510
511 if(
m_d->m_eventCounter > 0 ) {
512 m_d->m_eventCounter--;
513 }
514 else if(
m_d->m_eventCounter == 0 ) {
515 for( ToolHandleArray<IMonitorToolBase>::iterator i =
m_monTools.begin(); i != monToolsEnd; ++i ) {
516 ToolHandle<IMonitorToolBase>&
tool = *
i;
517 m_d->toolAudStart(tool);
518 AthMonBench bench_tmp;
519
520 if (
m_d->m_doResourceMon)
522 sc =
tool->checkHists(
false);
523 if (
m_d->m_doResourceMon) {
526 tb->m_bench_algexec_checkHists += bench_tmp;
527 }
528 if( !
sc.isSuccess() ) {
529 if (
msgLvl(MSG::WARNING))
msg(MSG::WARNING) <<
"IMonitorToolBase::checkHists() unsuccessful" <<
endmsg;
530 }
532 }
533 if (
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
" --> Done calling IMonitorToolBase::checkHists()" <<
endmsg;
534
535 m_d->m_eventCounter =
m_d->m_everyNevents;
536 }
537 if (
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
" --> Exiting successfully" <<
endmsg;
538
539 return StatusCode::SUCCESS;
540}
bool msgLvl(const MSG::Level lvl) const
::StatusCode StatusCode
StatusCode definition for legacy code.
◆ extraDeps_update_handler()
Add StoreName to extra input/output deps as needed.
use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given
◆ extraOutputDeps()
| const DataObjIDColl & AthAlgorithm::extraOutputDeps |
( |
| ) |
const |
|
overridevirtualinherited |
Return the list of extra output dependencies.
This list is extended to include symlinks implied by inheritance relations.
Definition at line 50 of file AthAlgorithm.cxx.
51{
52
53
56 }
57 return Algorithm::extraOutputDeps();
58}
DataObjIDColl m_extendedExtraObjects
◆ fileKey()
| std::string AthenaMonManager::fileKey |
( |
| ) |
const |
|
virtual |
◆ fillNumber()
| unsigned int AthenaMonManager::fillNumber |
( |
| ) |
|
|
static |
◆ finalize()
| StatusCode AthenaMonManager::finalize |
( |
| ) |
|
|
virtual |
◆ forkedProcess()
| bool AthenaMonManager::forkedProcess |
( |
| ) |
|
◆ getLBsHigStat()
| unsigned int AthenaMonManager::getLBsHigStat |
( |
| ) |
|
|
static |
◆ getLBsLowStat()
| unsigned int AthenaMonManager::getLBsLowStat |
( |
| ) |
|
|
static |
◆ getLBsMedStat()
| unsigned int AthenaMonManager::getLBsMedStat |
( |
| ) |
|
|
static |
◆ initialize()
| StatusCode AthenaMonManager::initialize |
( |
| ) |
|
|
virtual |
Definition at line 357 of file AthenaMonManager.cxx.
359{
361
362 if (
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"AthenaMonManager::initialize():" <<
endmsg;
363
366
368
370 if (
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
" --> Initializing static data" <<
endmsg;
371
373 msg(MSG::DEBUG) <<
" * \"ManualDataTypeSetup\" = " <<
m_d->m_manualDataTypeSetupProp <<
endmsg;
374 }
375
376#if 0
377 if(
m_d->m_manualDataTypeSetupProp ) {
378 Imp::s_dataTypeStr =
m_d->m_dataTypeProp;
380 }
381 else
382#endif
383 {
384 Imp::s_dataTypeStr =
m_d->m_dataTypeProp;
386 }
387
388 if (
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
" * \"DataType\" = " << Imp::s_dataType <<
endmsg;
389
390 Imp::s_environmentStr =
m_d->m_environmentProp;
392
393 if (
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
" * \"Environment\" = " << Imp::s_environment <<
endmsg;
394
395 Imp::s_LBsLowStat =
m_d->m_LBsLowStatProp;
396 Imp::s_LBsMedStat =
m_d->m_LBsMedStatProp;
397 Imp::s_LBsHigStat =
m_d->m_LBsHigStatProp;
399 msg(MSG::DEBUG) <<
" * \"LBsInLowStatInterval\" = " << Imp::s_LBsLowStat <<
endmsg;
400 msg(MSG::DEBUG) <<
" * \"LBsInMediumStatInterval\" = " << Imp::s_LBsMedStat <<
endmsg;
401 msg(MSG::DEBUG) <<
" * \"LBsInHighStatInterval\" = " << Imp::s_LBsHigStat <<
endmsg;
402 }
403
404 m_d->m_isPrimaryManager =
true;
406
407 if (
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
" * \"ManualRunLBSetup\" = " <<
m_d->m_manualRunLBProp <<
endmsg;
408
409 if(
m_d->m_manualRunLBProp ) {
410 Imp::s_run =
m_d->m_runProp;
411 Imp::s_lumiBlock =
m_d->m_lumiBlockProp;
412 Imp::s_runLBOverridden = true;
414 msg(MSG::DEBUG) <<
" --> using run = " << Imp::s_run <<
", lumiBlock = " << Imp::s_lumiBlock <<
endmsg;
415 } else {
417 msg(MSG::DEBUG) <<
" --> using run = " << Imp::s_run <<
", lumiBlock = " << Imp::s_lumiBlock <<
endmsg;
418 }
419 }
420
421
422 m_d->m_dataTypeProp = Imp::s_dataTypeStr;
423 m_d->m_environmentProp = Imp::s_environmentStr;
424
425
426 ServiceHandle<Gaudi::Interfaces::IOptionsSvc> joSvc(
"JobOptionsSvc",
name());
429
430 const std::string
client =
name() + std::string(
"Properties");
431 ATH_MSG_DEBUG(
" --> Adding properties under name \"" << client <<
"\"");
432 joSvc->set( client +
".FileKey",
m_d->m_fileKeyProp );
433 joSvc->set( client +
".DataType",
m_d->m_dataTypeProp );
434 joSvc->set( client +
".Environment",
m_d->m_environmentProp );
435
438 if (
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
" --> Retrieved AthenaMonTools" <<
endmsg;
439 }
440
441 m_d->m_eventCounter =
m_d->m_everyNevents;
442
443 ToolHandleArray<IMonitorToolBase>::iterator monToolsEnd =
m_monTools.end();
444 for( ToolHandleArray<IMonitorToolBase>::iterator i =
m_monTools.begin(); i != monToolsEnd; ++i ) {
445 ToolHandle<IMonitorToolBase>&
tool = *
i;
446 AthMonBench bench_tmp;
447 IMonitorToolBase*
mon =
tool.operator->();
448 ManagedMonitorToolBase* managed =
dynamic_cast<ManagedMonitorToolBase*
>(
mon );
449 if( managed != 0 ) {
451 }
452 if (
m_d->m_doResourceMon) {
454 tb->m_bench_alginit_retrieve = bench_tmp;
455 }
456
457 }
458 if (
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
" --> Exiting successfully" <<
endmsg;
459
460 return StatusCode::SUCCESS;
461}
#define ATH_CHECK
Evaluate an expression and check for errors.
static const MSG::Level s_resourceMonThreshold
static std::atomic< bool > s_staticDataAreInit
static Environment_t envStringToEnum(const std::string &str)
Converts a string to an Environment_t of the same name.
static DataType_t dataTypeStringToEnum(const std::string &str)
Converts a string to a DataType_t of the same name.
◆ inputHandles()
Return this algorithm's input handles.
We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.
◆ lumiBlockNumber()
| unsigned int AthenaMonManager::lumiBlockNumber |
( |
| ) |
|
|
static |
Definition at line 325 of file AthenaMonManager.cxx.
327{
328 if (Imp::s_runLBOverridden) {
329 return Imp::s_lumiBlock;
330 } else {
331 return Gaudi::Hive::currentContext().eventID().lumi_block();
332 }
333}
◆ msg()
◆ msgLvl()
◆ outputHandles()
Return this algorithm's output handles.
We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.
◆ passOwnership()
| void AthenaMonManager::passOwnership |
( |
TObject * | h, |
|
|
const std::string & | key ) |
|
virtual |
Pass ownership of a TObject to this manager so that it will be deleted appropriately.
Definition at line 643 of file AthenaMonManager.cxx.
645{
646 m_d->m_objMap.emplace( key, h );
647}
◆ renounce()
Definition at line 380 of file AthCommonDataStore.h.
381 {
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)
◆ renounceArray()
◆ runNumber()
| unsigned int AthenaMonManager::runNumber |
( |
| ) |
|
|
static |
Definition at line 337 of file AthenaMonManager.cxx.
339{
340 if (Imp::s_runLBOverridden) {
341 return Imp::s_run;
342 } else {
343 return Gaudi::Hive::currentContext().eventID().run_number();
344 }
345}
◆ start()
| StatusCode AthenaMonManager::start |
( |
| ) |
|
|
virtual |
Definition at line 599 of file AthenaMonManager.cxx.
601{
603 if (
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"AthenaMonManager::start():" <<
endmsg;
604
606
607 ToolHandleArray<IMonitorToolBase>::iterator monToolsEnd =
m_monTools.end();
608 for( ToolHandleArray<IMonitorToolBase>::iterator i =
m_monTools.begin(); i != monToolsEnd; ++i ) {
609 ToolHandle<IMonitorToolBase>&
tool = *
i;
610 m_d->toolAudStart(tool);
611 AthMonBench bench_tmp;
612 if (
m_d->m_doResourceMon)
615 if (
m_d->m_doResourceMon) {
618 tb->m_bench_algexec_bookHists += bench_tmp;
619 }
620 if( !
sc.isSuccess() ) {
621 if (
msgLvl(MSG::WARNING))
msg(MSG::WARNING) <<
"IMonitorToolBase::bookHists() unsuccessful" <<
endmsg;
622 }
624 }
626 msg(MSG::DEBUG) <<
" --> Done calling IMonitorToolBase::bookHists()" <<
endmsg;
627 msg(MSG::DEBUG) <<
" --> Exiting successfully" <<
endmsg;
628 }
629
630 return StatusCode::SUCCESS;
631}
◆ stop()
| StatusCode AthenaMonManager::stop |
( |
| ) |
|
|
virtual |
Definition at line 551 of file AthenaMonManager.cxx.
553{
555 if (
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"AthenaMonManager::finalize():" <<
endmsg;
556
558
559 ToolHandleArray<IMonitorToolBase>::iterator monToolsEnd =
m_monTools.end();
560 for( ToolHandleArray<IMonitorToolBase>::iterator i =
m_monTools.begin(); i != monToolsEnd; ++i ) {
561 ToolHandle<IMonitorToolBase>&
tool = *
i;
562 m_d->toolAudStart(tool);
563
565 if( !
sc.isSuccess() ) {
566 if (
msgLvl(MSG::WARNING))
msg(MSG::WARNING) <<
"IMonitorToolBase::runStat() unsuccessful" <<
endmsg;
567 }
568
570 if (tb)
571 tb->m_bench_algfin_finalHists.startMeasurement();
573 if (tb)
574 tb->m_bench_algfin_finalHists.finishMeasurement();
575 if( !
sc.isSuccess() ) {
576 if (
msgLvl(MSG::WARNING))
msg(MSG::WARNING) <<
"IMonitorToolBase::finalHists() unsuccessful" <<
endmsg;
577 }
578 if (tb)
579 tb->m_bench_algfin_checkHists.startMeasurement();
580 sc =
tool->checkHists(
true);
581 if (tb)
582 tb->m_bench_algfin_checkHists.finishMeasurement();
583 if( !
sc.isSuccess() ) {
584 if (
msgLvl(MSG::WARNING))
msg(MSG::WARNING) <<
"IMonitorToolBase::checkHists() unsuccessful" <<
endmsg;
585 }
586 if (tb)
589 }
591 msg(MSG::DEBUG) <<
" --> Done calling IMonitorToolBase::finalHists() and IMonitorToolBase::checkHists()" <<
endmsg;
592 msg(MSG::DEBUG) <<
" --> Exiting successfully" <<
endmsg;
593 }
594 return StatusCode::SUCCESS;
595}
◆ sysInitialize()
| StatusCode AthAlgorithm::sysInitialize |
( |
| ) |
|
|
overridevirtualinherited |
Override sysInitialize.
Override sysInitialize from the base class.
Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc
Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc
Reimplemented from AthCommonDataStore< AthCommonMsg< Algorithm > >.
Reimplemented in AthAnalysisAlgorithm, AthFilterAlgorithm, AthHistogramAlgorithm, and PyAthena::Alg.
Definition at line 66 of file AthAlgorithm.cxx.
66 {
68
71 }
72 ServiceHandle<ICondSvc> cs(
"CondSvc",
name());
74 if (
h->isCondition() &&
h->mode() == Gaudi::DataHandle::Writer) {
75
76 if ( cs.retrieve().isFailure() ) {
78 return StatusCode::SUCCESS;
79 }
80 if (cs->regHandle(this,*h).isFailure()) {
81 sc = StatusCode::FAILURE;
82 ATH_MSG_ERROR(
"unable to register WriteCondHandle " <<
h->fullKey()
83 << " with CondSvc");
84 }
85 }
86 }
88}
#define ATH_MSG_WARNING(x)
virtual StatusCode sysInitialize() override
Override sysInitialize.
AthCommonDataStore(const std::string &name, T... args)
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
◆ sysStart()
Handle START transition.
We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.
◆ updateVHKA()
Definition at line 308 of file AthCommonDataStore.h.
308 {
309
310
313 for (
auto k :
keys) {
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka
◆ writeAndDelete()
| void AthenaMonManager::writeAndDelete |
( |
const std::string & | key | ) |
|
|
virtual |
If the TObject is owned by this manager, its Write() method is called and it is deleted.
Definition at line 651 of file AthenaMonManager.cxx.
653{
654
655
656
657 Imp::ObjMap_t::iterator
i =
m_d->m_objMap.find( key );
658 if( i !=
m_d->m_objMap.end() ) {
659 TObject* o =
i->second;
660 TH1*
h =
dynamic_cast<TH1*
>( o );
661 if( h != 0 ) {
662
663
664
665
666 bool doRecursiveReferenceDelete = gROOT->MustClean();
667 gROOT->SetMustClean(false);
668 TDirectory*
dir =
h->GetDirectory();
670 if( dir )
674
676 if( !
sc.isSuccess() ) {
677 if (
msgLvl(MSG::WARNING))
msg(MSG::WARNING) <<
"AthenaMonManager::WriteAndDeleteHist(): Failure to deReg( TObject* )" <<
endmsg;
678 }
679 delete o;
680 gROOT->SetMustClean(doRecursiveReferenceDelete);
681 m_d->m_objMap.erase( key );
682 }
683 }
684}
◆ m_d
| Imp* AthenaMonManager::m_d |
|
private |
◆ m_detStore
◆ m_evtStore
◆ m_extendedExtraObjects
| DataObjIDColl AthAlgorithm::m_extendedExtraObjects |
|
privateinherited |
◆ m_monTools
◆ m_THistSvc
◆ m_varHandleArraysDeclared
◆ m_vhka
The documentation for this class was generated from the following files: