ATLAS Offline Software
Loading...
Searching...
No Matches
AthenaMonManager Class Reference

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>

Inheritance diagram for AthenaMonManager:
Collaboration diagram for AthenaMonManager:

Classes

class  Imp

Public Types

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...

Public Member Functions

 AthenaMonManager (const std::string &name, ISvcLocator *pSvcLocator)
virtual ~AthenaMonManager ()
bool forkedProcess ()
virtual StatusCode initialize ()
virtual StatusCode execute ()
virtual StatusCode start ()
virtual StatusCode stop ()
virtual StatusCode finalize ()
virtual std::string fileKey () const
virtual void passOwnership (TObject *h, const std::string &key)
 Pass ownership of a TObject to this manager so that it will be deleted appropriately.
virtual void writeAndDelete (const std::string &key)
 If the TObject is owned by this manager, its Write() method is called and it is deleted.
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Static Public Member Functions

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.
static Environment_t environment ()
 Returns the running environment of the monitoring application to help ManagedMonitorToolBase objects determine which histograms to produce.
static DataType_t dataType ()
 Returns the data type that the monitoring application is running over to help ManagedMonitorToolBase objects determine which histograms to produce.
static unsigned int lumiBlockNumber ()
static unsigned int runNumber ()
static unsigned int fillNumber ()
static unsigned int getLBsLowStat ()
static unsigned int getLBsMedStat ()
static unsigned int getLBsHigStat ()

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
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)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Protected Attributes

ToolHandleArray< IMonitorToolBasem_monTools
ServiceHandle< ITHistSvc > m_THistSvc

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

Impm_d
DataObjIDColl m_extendedExtraObjects
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

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.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Member Enumeration Documentation

◆ 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.

Constructor & Destructor Documentation

◆ AthenaMonManager()

AthenaMonManager::AthenaMonManager ( const std::string & name,
ISvcLocator * pSvcLocator )

Definition at line 193 of file AthenaMonManager.cxx.

195 : AthAlgorithm( name, pSvcLocator )
196 , m_monTools( this )
197 , m_THistSvc("THistSvc", name)
198 , m_d(new Imp(this, name))
199{
200 declareProperty( "AthenaMonTools", m_monTools );
201 declareProperty( "CheckEveryNoEvents", m_d->m_everyNevents );
202 declareProperty( "FileKey", m_d->m_fileKeyProp );
203 declareProperty( "ManualDataTypeSetup", m_d->m_manualDataTypeSetupProp );
204 declareProperty( "DataType", m_d->m_dataTypeProp );
205 declareProperty( "Environment", m_d->m_environmentProp );
206 declareProperty( "LBsInLowStatInterval", m_d->m_LBsLowStatProp );
207 declareProperty( "LBsInMediumStatInterval", m_d->m_LBsMedStatProp );
208 declareProperty( "LBsInHighStatInterval", m_d->m_LBsHigStatProp );
209 declareProperty( "ManualRunLBSetup", m_d->m_manualRunLBProp );
210 declareProperty( "Run", m_d->m_runProp );
211 declareProperty( "LumiBlock", m_d->m_lumiBlockProp );
212 declareProperty( "ROOTBackend", m_d->m_rootBackend );
213
214 if( !Imp::s_svcLocator )
215 Imp::s_svcLocator = pSvcLocator;
216}
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

Definition at line 219 of file AthenaMonManager.cxx.

221{
222 delete m_d;
223
224 // If it is known that ManagedMonitorToolBase objects are deleted _after_ this object,
225 // then one should call setMonManager(0) on each of them.
226}

Member Function Documentation

◆ dataType()

AthenaMonManager::DataType_t AthenaMonManager::dataType ( )
static

Returns the data type that the monitoring application is running over to help ManagedMonitorToolBase objects determine which histograms to produce.

Definition at line 313 of file AthenaMonManager.cxx.

315{
316 return Imp::s_dataType;
317}

◆ dataTypeStringToEnum()

AthenaMonManager::DataType_t AthenaMonManager::dataTypeStringToEnum ( const std::string & str)
static

Converts a string to a DataType_t of the same name.

Definition at line 266 of file AthenaMonManager.cxx.

268{
269 std::string lcstr( strToLower(str) );
270
271 if( lcstr == "userdefined" )
272 return userDefined;
273 else if( lcstr == "montecarlo" )
274 return monteCarlo;
275 else if( lcstr == "collisions" )
276 return collisions;
277 else if( lcstr == "cosmics" )
278 return cosmics;
279 else if( lcstr == "heavyioncollisions" )
280 return heavyIonCollisions;
281
282 if( Imp::s_svcLocator ) {
283 SmartIF<IMessageSvc> ms{Imp::s_svcLocator.load()->service( "MessageSvc" )};
284 if( ms.isValid() ) {
285 MsgStream log( ms, "AthenaMonManager::dataTypeStringToEnum()" );
286 log << MSG::WARNING << "Unknown AthenaMonManager::DataType_t \""
287 << str << "\", returning \"userDefined\"" << endmsg;
288 }
289 }
290
291 return userDefined;
292}
#define endmsg

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ environment()

AthenaMonManager::Environment_t AthenaMonManager::environment ( )
static

Returns the running environment of the monitoring application to help ManagedMonitorToolBase objects determine which histograms to produce.

Definition at line 296 of file AthenaMonManager.cxx.

298{
299 return Imp::s_environment;
300}

◆ envStringToEnum()

AthenaMonManager::Environment_t AthenaMonManager::envStringToEnum ( const std::string & str)
static

Converts a string to an Environment_t of the same name.

static method (shared by all AthenaMonManager instances during run-time)

Definition at line 230 of file AthenaMonManager.cxx.

232{
233 std::string lcstr( strToLower(str) );
234
235 if( lcstr == "user" )
236 return user;
237 else if( lcstr == "nooutput" )
238 return noOutput;
239 else if( lcstr == "online" )
240 return online;
241 else if( lcstr == "tier0" )
242 return tier0;
243 else if( lcstr == "tier0raw" )
244 return tier0Raw;
245 else if( lcstr == "tier0esd" )
246 return tier0ESD;
247 else if( lcstr == "aod" )
248 return AOD;
249 else if( lcstr == "altprod" )
250 return altprod;
251
252 if( Imp::s_svcLocator ) {
253 SmartIF<IMessageSvc> ms{Imp::s_svcLocator.load()->service( "MessageSvc" )};
254 if( ms.isValid() ) {
255 MsgStream log( ms, "AthenaMonManager::envStringToEnum()" );
256 log << MSG::WARNING << "Unknown AthenaMonManager::Environment_t \""
257 << str << "\", returning \"user\"" << endmsg;
258 }
259 }
260
261 return user;
262}

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ execute()

StatusCode AthenaMonManager::execute ( )
virtual

Definition at line 467 of file AthenaMonManager.cxx.

469{
470 m_d->m_forkedProcess=false;
471 pid_t currPID=getpid();
472 //m_lastPID 0 means the execute method was not called yet.
473 if (m_d->m_lastPID!=0 && m_d->m_lastPID!=currPID) {
474 m_d->m_forkedProcess=true;
475 ATH_MSG_INFO("Forked event discovered!");
476 }
477 m_d->m_lastPID=currPID;
478
480 if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "AthenaMonManager::execute():" << endmsg;
481
482 // This is legacy R2 monitoring.
483 // We only permit serial access (over all slots) to both HLT monitoring AND navigation thinning, as both use the same underlying thread un-safe navigation tool
484 // All of these elements are deprecated for R3 and are in the process of being replaced.
485 std::unique_lock<std::mutex> hltLock(TrigNavigationThinningSvcMutex::s_mutex, std::defer_lock);
486 if (name() == "HLTMonManager") {
487 ATH_MSG_DEBUG("HLTMonManager is obtaining the TrigNavigationThinningSvc lock in slot "
488 << Gaudi::Hive::currentContext().slot() << " for event " << Gaudi::Hive::currentContext().eventID().event_number() );
489 hltLock.lock();
490 }
491
493
494 ToolHandleArray<IMonitorToolBase>::iterator monToolsEnd = m_monTools.end();
495 for( ToolHandleArray<IMonitorToolBase>::iterator i = m_monTools.begin(); i != monToolsEnd; ++i ) {
496 ToolHandle<IMonitorToolBase>& tool = *i;
497 m_d->toolAudStart(tool);
498 AthMonBench bench_tmp;
499 if (m_d->m_doResourceMon)
500 bench_tmp.startMeasurement();
501 if( tool->preSelector() ) {
502
503 sc = tool->fillHists();
504
505 if( !sc.isSuccess() ) {
506 if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::fillHists() unsuccessful" << endmsg;
507 }
508 }
509
510
511 if (m_d->m_doResourceMon) {
512 bench_tmp.finishMeasurement();
513 Imp::ToolBench* tb = m_d->getToolBench(tool.operator->());
514 tb->m_bench_algexec_fillHists += bench_tmp;//fixme: count events and subdivide
515 if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> m_doResourceMon is True" << endmsg;
516 }
517 m_d->toolAudEnd();
518 }
519 if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> Done calling IMonitorToolBase::fillHists()" << endmsg;
520
521 if( m_d->m_eventCounter > 0 ) {
522 m_d->m_eventCounter--;
523 }
524 else if( m_d->m_eventCounter == 0 ) {
525 for( ToolHandleArray<IMonitorToolBase>::iterator i = m_monTools.begin(); i != monToolsEnd; ++i ) {
526 ToolHandle<IMonitorToolBase>& tool = *i;
527 m_d->toolAudStart(tool);
528 AthMonBench bench_tmp;
529
530 if (m_d->m_doResourceMon)
531 bench_tmp.startMeasurement();
532 sc = tool->checkHists(false);
533 if (m_d->m_doResourceMon) {
534 bench_tmp.finishMeasurement();
535 Imp::ToolBench* tb = m_d->getToolBench(tool.operator->());
536 tb->m_bench_algexec_checkHists += bench_tmp;//fixme: count events and subdivide
537 }
538 if( !sc.isSuccess() ) {
539 if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::checkHists() unsuccessful" << endmsg;
540 }
541 m_d->toolAudEnd();
542 }
543 if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> Done calling IMonitorToolBase::checkHists()" << endmsg;
544
545 m_d->m_eventCounter = m_d->m_everyNevents;
546 }
547 if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> Exiting successfully" << endmsg;
548
549 ATH_MSG_DEBUG(name() << " is releasing the TrigNavigationThinningSvc lock");
550 return StatusCode::SUCCESS;
551}
#define ATH_MSG_INFO(x)
#define ATH_MSG_DEBUG(x)
int32_t pid_t
static Double_t sc
bool msgLvl(const MSG::Level lvl) const
MsgStream & msg() const
void finishMeasurement()
Definition AthMonBench.h:83
void startMeasurement()
Definition AthMonBench.h:76
::StatusCode StatusCode
StatusCode definition for legacy code.

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

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 // If we didn't find any symlinks to add, just return the collection
53 // from the base class. Otherwise, return the extended collection.
54 if (!m_extendedExtraObjects.empty()) {
56 }
57 return Algorithm::extraOutputDeps();
58}
DataObjIDColl m_extendedExtraObjects

◆ fileKey()

std::string AthenaMonManager::fileKey ( ) const
virtual

Definition at line 646 of file AthenaMonManager.cxx.

648{
649 return m_d->m_fileKeyProp;
650}

◆ fillNumber()

unsigned int AthenaMonManager::fillNumber ( )
static

Definition at line 351 of file AthenaMonManager.cxx.

353{
354 return Imp::s_fill;
355}

◆ finalize()

StatusCode AthenaMonManager::finalize ( )
virtual

Definition at line 555 of file AthenaMonManager.cxx.

557{
558 return StatusCode::SUCCESS;
559}

◆ forkedProcess()

bool AthenaMonManager::forkedProcess ( )

Definition at line 320 of file AthenaMonManager.cxx.

321 {
322 return m_d->m_forkedProcess;
323}

◆ getLBsHigStat()

unsigned int AthenaMonManager::getLBsHigStat ( )
static

Definition at line 308 of file AthenaMonManager.cxx.

308 {
309 return Imp::s_LBsHigStat;
310}

◆ getLBsLowStat()

unsigned int AthenaMonManager::getLBsLowStat ( )
static

Definition at line 302 of file AthenaMonManager.cxx.

302 {
303 return Imp::s_LBsLowStat;
304}

◆ getLBsMedStat()

unsigned int AthenaMonManager::getLBsMedStat ( )
static

Definition at line 305 of file AthenaMonManager.cxx.

305 {
306 return Imp::s_LBsMedStat;
307}

◆ initialize()

StatusCode AthenaMonManager::initialize ( )
virtual

Definition at line 359 of file AthenaMonManager.cxx.

361{
363
364 if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "AthenaMonManager::initialize():" << endmsg;
365
366 m_d->m_sgAudSvc = Imp::s_svcLocator.load()->service("SGAudSvc", false/*do not create*/);
368
369 ATH_CHECK( m_THistSvc.retrieve() );
370
372 if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> Initializing static data" << endmsg;
373
374 if (msgLvl(MSG::DEBUG)) {
375 msg(MSG::DEBUG) << " * \"ManualDataTypeSetup\" = " << m_d->m_manualDataTypeSetupProp << endmsg;
376 }
377
378#if 0 // The two branches of the conditional are identical.
379 if( m_d->m_manualDataTypeSetupProp ) {
380 Imp::s_dataTypeStr = m_d->m_dataTypeProp;
381 Imp::s_dataType = dataTypeStringToEnum( m_d->m_dataTypeProp );
382 }
383 else
384#endif
385 {
386 Imp::s_dataTypeStr = m_d->m_dataTypeProp;
387 Imp::s_dataType = dataTypeStringToEnum( m_d->m_dataTypeProp );
388 }
389
390 if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " * \"DataType\" = " << Imp::s_dataType << endmsg;
391
392 Imp::s_environmentStr = m_d->m_environmentProp;
393 Imp::s_environment = envStringToEnum( m_d->m_environmentProp );
394
395 if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " * \"Environment\" = " << Imp::s_environment << endmsg;
396
397 Imp::s_LBsLowStat = m_d->m_LBsLowStatProp;
398 Imp::s_LBsMedStat = m_d->m_LBsMedStatProp;
399 Imp::s_LBsHigStat = m_d->m_LBsHigStatProp;
400 if (msgLvl(MSG::DEBUG)) {
401 msg(MSG::DEBUG) << " * \"LBsInLowStatInterval\" = " << Imp::s_LBsLowStat << endmsg;
402 msg(MSG::DEBUG) << " * \"LBsInMediumStatInterval\" = " << Imp::s_LBsMedStat << endmsg;
403 msg(MSG::DEBUG) << " * \"LBsInHighStatInterval\" = " << Imp::s_LBsHigStat << endmsg;
404 }
405
406 m_d->m_isPrimaryManager = true;
408
409 if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " * \"ManualRunLBSetup\" = " << m_d->m_manualRunLBProp << endmsg;
410
411 if( m_d->m_manualRunLBProp ) {
412 Imp::s_run = m_d->m_runProp;
413 Imp::s_lumiBlock = m_d->m_lumiBlockProp;
414 Imp::s_runLBOverridden = true;
415 if (msgLvl(MSG::DEBUG))
416 msg(MSG::DEBUG) << " --> using run = " << Imp::s_run << ", lumiBlock = " << Imp::s_lumiBlock << endmsg;
417 } else {
418 if (msgLvl(MSG::DEBUG))
419 msg(MSG::DEBUG) << " --> using run = " << Imp::s_run << ", lumiBlock = " << Imp::s_lumiBlock << endmsg;
420 }
421 }
422
423 // Ensure consistency among all managers
424 m_d->m_dataTypeProp = Imp::s_dataTypeStr;
425 m_d->m_environmentProp = Imp::s_environmentStr;
426
427 // Provide a virtual Algorithm with a subset of the properties
428 ServiceHandle<Gaudi::Interfaces::IOptionsSvc> joSvc("JobOptionsSvc", name());
429 ATH_CHECK( joSvc.retrieve() );
430 ATH_MSG_DEBUG(" --> Found service \"JobOptionsSvc\"");
431
432 const std::string client = name() + std::string("Properties");
433 ATH_MSG_DEBUG(" --> Adding properties under name \"" << client << "\"");
434 joSvc->set( client + ".FileKey", m_d->m_fileKeyProp );
435 joSvc->set( client + ".DataType", m_d->m_dataTypeProp );
436 joSvc->set( client + ".Environment", m_d->m_environmentProp );
437
438 if( m_monTools.size() > 0 ) {
439 ATH_CHECK( m_monTools.retrieve() );
440 if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> Retrieved AthenaMonTools" << endmsg;
441 }
442
443 m_d->m_eventCounter = m_d->m_everyNevents;
444
445 ToolHandleArray<IMonitorToolBase>::iterator monToolsEnd = m_monTools.end();
446 for( ToolHandleArray<IMonitorToolBase>::iterator i = m_monTools.begin(); i != monToolsEnd; ++i ) {
447 ToolHandle<IMonitorToolBase>& tool = *i;
448 AthMonBench bench_tmp;
449 IMonitorToolBase* mon = tool.operator->();
450 ManagedMonitorToolBase* managed = dynamic_cast<ManagedMonitorToolBase*>( mon );
451 if( managed != 0 ) {
452 managed->setMonManager( this );
453 }
454 if (m_d->m_doResourceMon) {
455 Imp::ToolBench* tb = m_d->getToolBench(mon);
456 tb->m_bench_alginit_retrieve = bench_tmp;
457 }
458
459 }
460 if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> Exiting successfully" << endmsg;
461
462 return StatusCode::SUCCESS;
463}
#define ATH_CHECK
Evaluate an expression and check for errors.
static const MSG::Level s_resourceMonThreshold
Definition AthMonBench.h:28
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.
virtual void setMonManager(AthenaMonManager *manager)
Takes a pointer to a managing object to get information from it when needed.

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Algorithm > >::inputHandles ( ) const
overridevirtualinherited

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 327 of file AthenaMonManager.cxx.

329{
330 if (Imp::s_runLBOverridden) {
331 return Imp::s_lumiBlock;
332 } else {
333 return Gaudi::Hive::currentContext().eventID().lumi_block();
334 }
335}

◆ msg()

MsgStream & AthCommonMsg< Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< Algorithm >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Algorithm > >::outputHandles ( ) const
overridevirtualinherited

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 654 of file AthenaMonManager.cxx.

656{
657 m_d->m_objMap.emplace( key, h );
658}

◆ renounce()

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 > AthCommonDataStore< AthCommonMsg< Algorithm > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
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()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ runNumber()

unsigned int AthenaMonManager::runNumber ( )
static

Definition at line 339 of file AthenaMonManager.cxx.

341{
342 if (Imp::s_runLBOverridden) {
343 return Imp::s_run;
344 } else {
345 return Gaudi::Hive::currentContext().eventID().run_number();
346 }
347}

◆ start()

StatusCode AthenaMonManager::start ( )
virtual

Definition at line 610 of file AthenaMonManager.cxx.

612{
614 if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "AthenaMonManager::start():" << endmsg;
615
617
618 ToolHandleArray<IMonitorToolBase>::iterator monToolsEnd = m_monTools.end();
619 for( ToolHandleArray<IMonitorToolBase>::iterator i = m_monTools.begin(); i != monToolsEnd; ++i ) {
620 ToolHandle<IMonitorToolBase>& tool = *i;
621 m_d->toolAudStart(tool);
622 AthMonBench bench_tmp;
623 if (m_d->m_doResourceMon)
624 bench_tmp.startMeasurement();
625 sc = tool->bookHists();
626 if (m_d->m_doResourceMon) {
627 bench_tmp.finishMeasurement();
628 Imp::ToolBench* tb = m_d->getToolBench(tool.operator->());
629 tb->m_bench_algexec_bookHists += bench_tmp;
630 }
631 if( !sc.isSuccess() ) {
632 if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::bookHists() unsuccessful" << endmsg;
633 }
634 m_d->toolAudEnd();
635 }
636 if (msgLvl(MSG::DEBUG)) {
637 msg(MSG::DEBUG) << " --> Done calling IMonitorToolBase::bookHists()" << endmsg;
638 msg(MSG::DEBUG) << " --> Exiting successfully" << endmsg;
639 }
640
641 return StatusCode::SUCCESS;
642}

◆ stop()

StatusCode AthenaMonManager::stop ( )
virtual

Definition at line 562 of file AthenaMonManager.cxx.

564{
566 if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "AthenaMonManager::finalize():" << endmsg;
567
569
570 ToolHandleArray<IMonitorToolBase>::iterator monToolsEnd = m_monTools.end();
571 for( ToolHandleArray<IMonitorToolBase>::iterator i = m_monTools.begin(); i != monToolsEnd; ++i ) {
572 ToolHandle<IMonitorToolBase>& tool = *i;
573 m_d->toolAudStart(tool);
574
575 sc = tool->runStat();
576 if( !sc.isSuccess() ) {
577 if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::runStat() unsuccessful" << endmsg;
578 }
579
580 Imp::ToolBench* tb = m_d->m_doResourceMon ? m_d->getToolBench(tool.operator->()) : 0;
581 if (tb)
582 tb->m_bench_algfin_finalHists.startMeasurement();
583 sc = tool->finalHists();
584 if (tb)
585 tb->m_bench_algfin_finalHists.finishMeasurement();
586 if( !sc.isSuccess() ) {
587 if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::finalHists() unsuccessful" << endmsg;
588 }
589 if (tb)
590 tb->m_bench_algfin_checkHists.startMeasurement();
591 sc = tool->checkHists(true);
592 if (tb)
593 tb->m_bench_algfin_checkHists.finishMeasurement();
594 if( !sc.isSuccess() ) {
595 if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::checkHists() unsuccessful" << endmsg;
596 }
597 if (tb)
598 tb->report(this);
599 m_d->toolAudEnd();
600 }
601 if (msgLvl(MSG::DEBUG)) {
602 msg(MSG::DEBUG) << " --> Done calling IMonitorToolBase::finalHists() and IMonitorToolBase::checkHists()" << endmsg;
603 msg(MSG::DEBUG) << " --> Exiting successfully" << endmsg;
604 }
605 return StatusCode::SUCCESS;
606}

◆ 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
69 if (sc.isFailure()) {
70 return sc;
71 }
72 ServiceHandle<ICondSvc> cs("CondSvc",name());
73 for (auto h : outputHandles()) {
74 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
75 // do this inside the loop so we don't create the CondSvc until needed
76 if ( cs.retrieve().isFailure() ) {
77 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
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 }
87 return sc;
88}
#define ATH_MSG_ERROR(x)
#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()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
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 662 of file AthenaMonManager.cxx.

664{
665 // If is owned TObject, we deregister from THistSvc, write it in a
666 // root file, and delete it.
667
668 Imp::ObjMap_t::iterator i = m_d->m_objMap.find( key );
669 if( i != m_d->m_objMap.end() ) {
670 TObject* o = i->second;
671 TH1* h = dynamic_cast<TH1*>( o );
672 if( h != 0 ) {
673 // By default, ROOT does its own bookkeeping of references to
674 // histograms, and this leads to a significant amount of time
675 // spent in the TObject d'tor when there are >= O(1000) TDirectories.
676 // So, turn this bookkeeping off when deleting these histograms.
677 bool doRecursiveReferenceDelete = gROOT->MustClean();
678 gROOT->SetMustClean(false);
679 TDirectory* dir = h->GetDirectory();
680 TDirectory* g = gDirectory;
681 if( dir )
682 dir->cd();
683 h->Write();
684 g->cd();
685
686 StatusCode sc = m_THistSvc->deReg( h );
687 if( !sc.isSuccess() ) {
688 if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "AthenaMonManager::WriteAndDeleteHist(): Failure to deReg( TObject* )" << endmsg;
689 }
690 delete o;
691 gROOT->SetMustClean(doRecursiveReferenceDelete);
692 m_d->m_objMap.erase( key );
693 }
694 }
695}

Member Data Documentation

◆ m_d

Imp* AthenaMonManager::m_d
private

Definition at line 123 of file AthenaMonManager.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthAlgorithm::m_extendedExtraObjects
privateinherited

Definition at line 79 of file AthAlgorithm.h.

◆ m_monTools

ToolHandleArray<IMonitorToolBase> AthenaMonManager::m_monTools
protected

Definition at line 116 of file AthenaMonManager.h.

◆ m_THistSvc

ServiceHandle<ITHistSvc> AthenaMonManager::m_THistSvc
protected

Definition at line 118 of file AthenaMonManager.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Algorithm > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files: