ATLAS Offline Software
Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
CP::SysCopyHandle< T > Class Template Referencefinal

a systematics data handle that will either copy the input object or act like an update handle More...

#include <SysCopyHandle.h>

Inheritance diagram for CP::SysCopyHandle< T >:
Collaboration diagram for CP::SysCopyHandle< T >:

Public Member Functions

template<typename T2 >
 SysCopyHandle (T2 *owner, const std::string &propertyName, const std::string &propertyValue, const std::string &propertyDescription)
 Standard constructor. More...
 
template<typename T2 >
 SysCopyHandle (const std::string &inputName, const std::string &outputName, T2 *owner)
 Construct directly without declaring properties. More...
 
virtual bool empty () const noexcept override
 whether we have a name configured More...
 
 operator bool () const noexcept
 !empty() More...
 
virtual std::string getNamePattern () const override
 get the name pattern before substitution More...
 
::StatusCode getCopy (T *&object, const CP::SystematicSet &sys) const
 retrieve the object for the given name More...
 
bool msgLvl (const MSG::Level lvl) const
 Test the output level of the object. More...
 
MsgStream & msg () const
 The standard message stream. More...
 
MsgStream & msg (const MSG::Level lvl) const
 The standard message stream. More...
 
StatusCode initialize (SysListHandle &sysListHandle)
 initialize this handle More...
 
StatusCode initialize (SysListHandle &sysListHandle, SG::AllowEmptyEnum)
 

Private Types

typedef std::decay< decltype(*(std::declval< EL::AnaAlgorithm >).evtStore()))>::type StoreType
 the type of the event store we use More...
 

Private Member Functions

virtual CP::SystematicSet getInputAffecting (const ISystematicsSvc &svc) const override
 get the affecting systematics if this is an input handle More...
 
virtual StatusCode fillSystematics (const ISystematicsSvc &svc, const CP::SystematicSet &fullAffecting, const std::vector< CP::SystematicSet > &sysList) override
 register and cache the systematics More...
 

Private Attributes

std::string m_inputName
 the input name we use More...
 
std::string m_outputName
 the (optional) name of the copy we create More...
 
std::unordered_map< CP::SystematicSet, std::tuple< std::string, std::string, std::string > > m_nameCache
 the cache of names we use More...
 
StoreTypem_evtStore = nullptr
 the event store we use More...
 
std::function< StoreType *()> m_evtStoreGetter
 the function to retrieve the event store More...
 
std::function< MsgStream &()> m_msg
 the message stream we use More...
 

Detailed Description

template<typename T>
class CP::SysCopyHandle< T >

a systematics data handle that will either copy the input object or act like an update handle

There are several use cases for this data handle:

Normally this handle will be configured both with the name of the input object and the name of the output object to create. In that case it will create a shallow copy of the input object and add it to the event store.

Alternatively if the second name is not given, it will do a non-const retrieve of the input object and effectively act like an update handle. This is essentially an optimization to avoid shallow copies when no systematics are added. This is not common and may break some assumptions in Athena.

The template parameter T can optionally be const qualified to indicate that only a const object will be needed. This can be used if only the copy behavior of this handle is needed, but the copy won't be modified. That is a rather specialized behavior, since normally we only need copies to modify them. As such it is recommended to switch those algorithms to a SysReadHandle and schedule an CP::AsgShallowCopyAlg beforehand to do the copy.

Definition at line 60 of file SysCopyHandle.h.

Member Typedef Documentation

◆ StoreType

template<typename T >
typedef std::decay<decltype( *(std::declval<EL::AnaAlgorithm>).evtStore()))>::type CP::SysCopyHandle< T >::StoreType
private

the type of the event store we use

Definition at line 160 of file SysCopyHandle.h.

Constructor & Destructor Documentation

◆ SysCopyHandle() [1/2]

template<typename T >
template<typename T2 >
CP::SysCopyHandle< T >::SysCopyHandle ( T2 *  owner,
const std::string &  propertyName,
const std::string &  propertyValue,
const std::string &  propertyDescription 
)

Standard constructor.

Template Parameters
T2The type of the owner
Parameters
ownerUsed to declare the property and for its messaging
propertyNameThe name of the property to declare. An additional propertyName+"Out" property will be declared to set the output name
propertyValueThe default value for the property
propertyDescriptionThe description of the property

This version of the constructor declares a property on the parent object and should usually be preferred when the container to be copied should be configurable

◆ SysCopyHandle() [2/2]

template<typename T >
template<typename T2 >
CP::SysCopyHandle< T >::SysCopyHandle ( const std::string &  inputName,
const std::string &  outputName,
T2 *  owner 
)

Construct directly without declaring properties.

Template Parameters
T2The owner that provides the messaging and event store
Parameters
inputNameThe name of the input container
outputNameThe name of the output container (acts like an update handle if set to the empty string)
ownerThe owner that provides the messaging and event store

Member Function Documentation

◆ empty()

template<typename T >
virtual bool CP::SysCopyHandle< T >::empty ( ) const
overridevirtualnoexcept

whether we have a name configured

Implements CP::ISysHandleBase.

◆ fillSystematics()

template<typename T >
virtual StatusCode CP::SysCopyHandle< T >::fillSystematics ( const ISystematicsSvc svc,
const CP::SystematicSet fullAffecting,
const std::vector< CP::SystematicSet > &  sysList 
)
overrideprivatevirtual

register and cache the systematics

Implements CP::ISysHandleBase.

◆ getCopy()

template<typename T >
::StatusCode CP::SysCopyHandle< T >::getCopy ( T *&  object,
const CP::SystematicSet sys 
) const

retrieve the object for the given name

◆ getInputAffecting()

template<typename T >
virtual CP::SystematicSet CP::SysCopyHandle< T >::getInputAffecting ( const ISystematicsSvc svc) const
overrideprivatevirtual

get the affecting systematics if this is an input handle

This returns the empty set if this is either not an input handle, or if the input handle is not affected by systematics.

Implements CP::ISysHandleBase.

◆ getNamePattern()

template<typename T >
virtual std::string CP::SysCopyHandle< T >::getNamePattern ( ) const
overridevirtual

get the name pattern before substitution

Implements CP::ISysHandleBase.

◆ initialize() [1/2]

template<typename T >
StatusCode CP::SysCopyHandle< T >::initialize ( SysListHandle sysListHandle)

initialize this handle

◆ initialize() [2/2]

template<typename T >
StatusCode CP::SysCopyHandle< T >::initialize ( SysListHandle sysListHandle,
SG::AllowEmptyEnum   
)

◆ msg() [1/2]

MsgStream & asg::AsgMessagingForward::msg ( ) const
inherited

The standard message stream.

Returns
A reference to the default message stream of this object.

Definition at line 24 of file AsgMessagingForward.cxx.

25  {
26  return m_msg();
27  }

◆ msg() [2/2]

MsgStream & asg::AsgMessagingForward::msg ( const MSG::Level  lvl) const
inherited

The standard message stream.

Parameters
lvlThe message level to set the stream to
Returns
A reference to the default message stream, set to level "lvl"

Definition at line 29 of file AsgMessagingForward.cxx.

30  {
31  MsgStream& msg = m_msg ();
32  msg << lvl;
33  return msg;
34  }

◆ msgLvl()

bool asg::AsgMessagingForward::msgLvl ( const MSG::Level  lvl) const
inherited

Test the output level of the object.

Parameters
lvlThe message level to test against
Returns
boolean Indicting if messages at given level will be printed
true If messages at level "lvl" will be printed

Definition at line 11 of file AsgMessagingForward.cxx.

12  {
13  MsgStream& msg = m_msg();
14  if (msg.level() <= lvl)
15  {
16  msg << lvl;
17  return true;
18  } else
19  {
20  return false;
21  }
22  }

◆ operator bool()

template<typename T >
CP::SysCopyHandle< T >::operator bool ( ) const
explicitnoexcept

!empty()

Member Data Documentation

◆ m_evtStore

template<typename T >
StoreType* CP::SysCopyHandle< T >::m_evtStore = nullptr
private

the event store we use

Definition at line 164 of file SysCopyHandle.h.

◆ m_evtStoreGetter

template<typename T >
std::function<StoreType*()> CP::SysCopyHandle< T >::m_evtStoreGetter
private

the function to retrieve the event store

This is an std::function to allow the parent to be either a tool or an algorithm. Though we are not really supporting tools as parents when using SysListHandle, so in principle this could be replaced with a pointer to the algorithm instead.

Definition at line 174 of file SysCopyHandle.h.

◆ m_inputName

template<typename T >
std::string CP::SysCopyHandle< T >::m_inputName
private

the input name we use

Definition at line 146 of file SysCopyHandle.h.

◆ m_msg

std::function<MsgStream& ()> asg::AsgMessagingForward::m_msg
privateinherited

the message stream we use

This used to be a simple pointer to the MsgStream itself, but in AthenaMT the actual object used is local to the thread. So instead of pointing to it directly we are now using a function to look it up, which will get the thread-local object.

Definition at line 77 of file AsgMessagingForward.h.

◆ m_nameCache

template<typename T >
std::unordered_map<CP::SystematicSet,std::tuple<std::string,std::string,std::string> > CP::SysCopyHandle< T >::m_nameCache
private

the cache of names we use

Definition at line 154 of file SysCopyHandle.h.

◆ m_outputName

template<typename T >
std::string CP::SysCopyHandle< T >::m_outputName
private

the (optional) name of the copy we create

Definition at line 150 of file SysCopyHandle.h.


The documentation for this class was generated from the following file:
asg::AsgMessagingForward::m_msg
std::function< MsgStream &()> m_msg
the message stream we use
Definition: AsgMessagingForward.h:77
asg::AsgMessagingForward::msg
MsgStream & msg() const
The standard message stream.
Definition: AsgMessagingForward.cxx:24