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

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

Definition at line 217 of file AthenaMonManager.cxx.

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

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

313{
314 return Imp::s_dataType;
315}

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

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

296{
297 return Imp::s_environment;
298}

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

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

◆ 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 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 //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
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)
490 bench_tmp.startMeasurement();
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) {
502 bench_tmp.finishMeasurement();
503 Imp::ToolBench* tb = m_d->getToolBench(tool.operator->());
504 tb->m_bench_algexec_fillHists += bench_tmp;//fixme: count events and subdivide
505 if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> m_doResourceMon is True" << endmsg;
506 }
507 m_d->toolAudEnd();
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)
521 bench_tmp.startMeasurement();
522 sc = tool->checkHists(false);
523 if (m_d->m_doResourceMon) {
524 bench_tmp.finishMeasurement();
525 Imp::ToolBench* tb = m_d->getToolBench(tool.operator->());
526 tb->m_bench_algexec_checkHists += bench_tmp;//fixme: count events and subdivide
527 }
528 if( !sc.isSuccess() ) {
529 if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::checkHists() unsuccessful" << endmsg;
530 }
531 m_d->toolAudEnd();
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}
#define ATH_MSG_INFO(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 635 of file AthenaMonManager.cxx.

637{
638 return m_d->m_fileKeyProp;
639}

◆ fillNumber()

unsigned int AthenaMonManager::fillNumber ( )
static

Definition at line 349 of file AthenaMonManager.cxx.

351{
352 return Imp::s_fill;
353}

◆ finalize()

StatusCode AthenaMonManager::finalize ( )
virtual

Definition at line 544 of file AthenaMonManager.cxx.

546{
547 return StatusCode::SUCCESS;
548}

◆ forkedProcess()

bool AthenaMonManager::forkedProcess ( )

Definition at line 318 of file AthenaMonManager.cxx.

319 {
320 return m_d->m_forkedProcess;
321}

◆ getLBsHigStat()

unsigned int AthenaMonManager::getLBsHigStat ( )
static

Definition at line 306 of file AthenaMonManager.cxx.

306 {
307 return Imp::s_LBsHigStat;
308}

◆ getLBsLowStat()

unsigned int AthenaMonManager::getLBsLowStat ( )
static

Definition at line 300 of file AthenaMonManager.cxx.

300 {
301 return Imp::s_LBsLowStat;
302}

◆ getLBsMedStat()

unsigned int AthenaMonManager::getLBsMedStat ( )
static

Definition at line 303 of file AthenaMonManager.cxx.

303 {
304 return Imp::s_LBsMedStat;
305}

◆ 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
364 m_d->m_sgAudSvc = Imp::s_svcLocator.load()->service("SGAudSvc", false/*do not create*/);
366
367 ATH_CHECK( m_THistSvc.retrieve() );
368
370 if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " --> Initializing static data" << endmsg;
371
372 if (msgLvl(MSG::DEBUG)) {
373 msg(MSG::DEBUG) << " * \"ManualDataTypeSetup\" = " << m_d->m_manualDataTypeSetupProp << endmsg;
374 }
375
376#if 0 // The two branches of the conditional are identical.
377 if( m_d->m_manualDataTypeSetupProp ) {
378 Imp::s_dataTypeStr = m_d->m_dataTypeProp;
379 Imp::s_dataType = dataTypeStringToEnum( m_d->m_dataTypeProp );
380 }
381 else
382#endif
383 {
384 Imp::s_dataTypeStr = m_d->m_dataTypeProp;
385 Imp::s_dataType = dataTypeStringToEnum( 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;
391 Imp::s_environment = envStringToEnum( 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;
398 if (msgLvl(MSG::DEBUG)) {
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;
413 if (msgLvl(MSG::DEBUG))
414 msg(MSG::DEBUG) << " --> using run = " << Imp::s_run << ", lumiBlock = " << Imp::s_lumiBlock << endmsg;
415 } else {
416 if (msgLvl(MSG::DEBUG))
417 msg(MSG::DEBUG) << " --> using run = " << Imp::s_run << ", lumiBlock = " << Imp::s_lumiBlock << endmsg;
418 }
419 }
420
421 // Ensure consistency among all managers
422 m_d->m_dataTypeProp = Imp::s_dataTypeStr;
423 m_d->m_environmentProp = Imp::s_environmentStr;
424
425 // Provide a virtual Algorithm with a subset of the properties
426 ServiceHandle<Gaudi::Interfaces::IOptionsSvc> joSvc("JobOptionsSvc", name());
427 ATH_CHECK( joSvc.retrieve() );
428 ATH_MSG_DEBUG(" --> Found service \"JobOptionsSvc\"");
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
436 if( m_monTools.size() > 0 ) {
437 ATH_CHECK( m_monTools.retrieve() );
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 ) {
450 managed->setMonManager( this );
451 }
452 if (m_d->m_doResourceMon) {
453 Imp::ToolBench* tb = m_d->getToolBench(mon);
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.
#define ATH_MSG_DEBUG(x)
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 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()

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

645{
646 m_d->m_objMap.emplace( key, h );
647}

◆ 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 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)
613 bench_tmp.startMeasurement();
614 sc = tool->bookHists();
615 if (m_d->m_doResourceMon) {
616 bench_tmp.finishMeasurement();
617 Imp::ToolBench* tb = m_d->getToolBench(tool.operator->());
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 }
623 m_d->toolAudEnd();
624 }
625 if (msgLvl(MSG::DEBUG)) {
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
564 sc = tool->runStat();
565 if( !sc.isSuccess() ) {
566 if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "IMonitorToolBase::runStat() unsuccessful" << endmsg;
567 }
568
569 Imp::ToolBench* tb = m_d->m_doResourceMon ? m_d->getToolBench(tool.operator->()) : 0;
570 if (tb)
571 tb->m_bench_algfin_finalHists.startMeasurement();
572 sc = tool->finalHists();
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)
587 tb->report(this);
588 m_d->toolAudEnd();
589 }
590 if (msgLvl(MSG::DEBUG)) {
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
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 651 of file AthenaMonManager.cxx.

653{
654 // If is owned TObject, we deregister from THistSvc, write it in a
655 // root file, and delete it.
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 // By default, ROOT does its own bookkeeping of references to
663 // histograms, and this leads to a significant amount of time
664 // spent in the TObject d'tor when there are >= O(1000) TDirectories.
665 // So, turn this bookkeeping off when deleting these histograms.
666 bool doRecursiveReferenceDelete = gROOT->MustClean();
667 gROOT->SetMustClean(false);
668 TDirectory* dir = h->GetDirectory();
669 TDirectory* g = gDirectory;
670 if( dir )
671 dir->cd();
672 h->Write();
673 g->cd();
674
675 StatusCode sc = m_THistSvc->deReg( h );
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}

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: