ATLAS Offline Software
List of all members
SG::Folder Class Reference

a run-time configurable list of data objects More...

#include <SGFolder.h>

Inheritance diagram for SG::Folder:
Collaboration diagram for SG::Folder:

structors

typedef IFolder::ItemList ItemList
 the list we manage More...
 
 Folder (const std::string &type, const std::string &name, const IInterface *parent)
 
virtual ~Folder () override
 

access the ItemList

typedef IFolder::const_iterator const_iterator
 
virtual const_iterator begin () const override
 
virtual const_iterator end () const override
 
virtual StatusCode add (const std::string &typeName, const std::string &skey) override
 add a data object identifier to the list. More...
 
virtual StatusCode add (const CLID &clid, const std::string &skey) override
 add a data object identifier to the list. More...
 
virtual void clear () override
 clear the folder contents More...
 
virtual void updateItemList (bool checkValidCLID) override final
 update contents of the ItemList More...
 

AlgTool boilerplate

ServiceHandle< IClassIDSvc > m_pCLIDSvc
 
StringArrayProperty m_itemList
 property: the list of items (data objects identified by a class name/key pair) More...
 
ItemList m_list
 
BooleanProperty m_checkItems
 property: check if item types are known to ClassIDSvc More...
 
class Folder_tester
 
virtual StatusCode initialize () override
 
void decodeItemList (Gaudi::Details::PropertyBase &)
 
void decodeItem (const std::string &item, bool checkValidCLID)
 
StatusCode add (const CLID &clid, const std::string &skey, bool checkValidCLID, bool exact)
 add a data object identifier to the list, optionally checking if the clid is known to ClassIDSvc. More...
 

Detailed Description

a run-time configurable list of data objects

the ItemList property, used to initialize the folder, is a list of class name (or clid)/key pairs. One can use '*' as key value to add all objects of a given type to the Folder. Examples:

ItemList = [ "DataHeader#*", "AthenaAttributeList#SimpleTag", "8101/Foo" ]

Normally, an object will be written as the type as which it was recorded in StoreGate, regardless of the type used to request it in the ItemList. But if the type name ends with a !, then the object will be written as the exact type which was requested in the ItemList.

Definition at line 42 of file SGFolder.h.

Member Typedef Documentation

◆ const_iterator

Definition at line 58 of file SGFolder.h.

◆ ItemList

the list we manage

Definition at line 54 of file SGFolder.h.

Constructor & Destructor Documentation

◆ Folder()

Folder::Folder ( const std::string &  type,
const std::string &  name,
const IInterface *  parent 
)

Definition at line 27 of file SGFolder.cxx.

29  :
30  base_class( type, name, parent ),
31  m_pCLIDSvc("ClassIDSvc", name),
32  m_checkItems(false)
33 {
34  declareProperty("ItemList", m_itemList,
35  " list of data objects identified by a class name (or clid)#key pairs. One can use '*' as key value to add all objects of a given type to the Folder. If the type name ends with !, then write the object as exactly that type (and not as any derived class). ");
36  m_itemList.declareUpdateHandler(&Folder::decodeItemList, this);
37  declareProperty("CheckItems", m_checkItems,
38  "check if item types are known to ClassIDSvc");
39 }

◆ ~Folder()

Folder::~Folder ( )
overridevirtual

Definition at line 42 of file SGFolder.cxx.

43 {}

Member Function Documentation

◆ add() [1/3]

virtual StatusCode SG::Folder::add ( const CLID clid,
const std::string &  skey 
)
inlineoverridevirtual

add a data object identifier to the list.

The clid is not checked against the ClassIDSvc registry

Definition at line 69 of file SGFolder.h.

69  {
70  const bool DONTCHECKVALIDCLID(false);
71  return add(clid, skey, DONTCHECKVALIDCLID, false);
72  }

◆ add() [2/3]

StatusCode Folder::add ( const CLID clid,
const std::string &  skey,
bool  checkValidCLID,
bool  exact 
)
private

add a data object identifier to the list, optionally checking if the clid is known to ClassIDSvc.

Definition at line 101 of file SGFolder.cxx.

103 {
104  StatusCode sc(StatusCode::FAILURE);
105  if ( !checkValid || m_pCLIDSvc->isIDInUse(clid) ) {
106  m_list.insert(FolderItem(clid, skey, exact));
107  sc = StatusCode::SUCCESS;
108  } else if (0 != clid) {
109  MsgStream log(msgSvc(), name());
110  log << MSG::WARNING << "add: can not find clid "
111  << clid << " in clid db" << endmsg;
112  }
113 #ifdef SGFOLDER_DEBUG
114  std::cout << "SG::Folder::add(" << clid << ",\"" << skey << "\") returns "
115  << (sc.isSuccess() ? "SUCCESS" : "FAILURE") << std::endl;
116 #endif
117  return sc;
118 }

◆ add() [3/3]

StatusCode Folder::add ( const std::string &  typeName,
const std::string &  skey 
)
overridevirtual

add a data object identifier to the list.

Notice that if the typename is not yet in the ClassIDSvc registry the entry will be ignored and and add will return StatusCode::FAILURE

Definition at line 79 of file SGFolder.cxx.

79  {
80  bool exact = false;
81  std::string tn = typeName;
82  if (tn.size() > 0 && tn[tn.size()-1] == '!') {
83  exact = true;
84  tn.erase (tn.end()-1);
85  }
86 
87  CLID clid;
88  //let's see if the typename is known to ClassIDSvc
89  StatusCode sc(m_pCLIDSvc->getIDOfTypeName(tn, clid));
90  //if so, add the corresponding clid (no point in checking it again)
91  if (sc.isSuccess()) sc=add(clid, skey, false, exact);
92  else {
93  MsgStream log(msgSvc(), name());
94  log << MSG::WARNING << "add: can not find type ["
95  << typeName << "] in clid db" << endmsg;
96  }
97  return sc;
98 }

◆ begin()

virtual const_iterator SG::Folder::begin ( ) const
inlineoverridevirtual

Definition at line 59 of file SGFolder.h.

59 { return m_list.begin(); }

◆ clear()

virtual void SG::Folder::clear ( )
inlineoverridevirtual

clear the folder contents

Definition at line 75 of file SGFolder.h.

75 { m_list.clear(); }

◆ decodeItem()

void Folder::decodeItem ( const std::string &  item,
bool  checkValidCLID 
)
private

Definition at line 57 of file SGFolder.cxx.

57  {
58  assert( !item.empty() );
59  assert( m_pCLIDSvc );
60 #ifdef SGFOLDER_DEBUG
61  //can't use MsgStream (log level still not defined)
62  std::cout << "Folder::decodeItem("<< item<<") called" << std::endl;
63 #endif
64  std::string::size_type sep(item.rfind('#'));
65  std::string typeName (item.substr(0,sep));
66  std::string skey;
67  if (sep != std::string::npos) skey = item.substr(sep+1);
68 
69  //item contains a typename OR a CLID. Try the CLID hypothesis first
70  CLID clid(atoi(typeName.c_str()));
71  //atoi would return 0 if "typeName" is not a stringified number
72  if ( 0 == clid) {
73  //notice that if the typename is not yet in the ClassIDSvc registry the entry will be ignored
74  add(typeName, skey).ignore();
75  } else add(clid, skey, checkValid, false).ignore();
76 }

◆ decodeItemList()

void SG::Folder::decodeItemList ( Gaudi::Details::PropertyBase &  )
inlineprivate

Definition at line 91 of file SGFolder.h.

91  {
92  const bool DONTCHECKVALIDCLID(false);
93  Folder::updateItemList(DONTCHECKVALIDCLID);
94  }

◆ end()

virtual const_iterator SG::Folder::end ( ) const
inlineoverridevirtual

Definition at line 60 of file SGFolder.h.

60 { return m_list.end(); }

◆ initialize()

StatusCode Folder::initialize ( )
overridevirtual

Definition at line 46 of file SGFolder.cxx.

46  {
47  return m_pCLIDSvc.retrieve();
48 }

◆ updateItemList()

void Folder::updateItemList ( bool  checkValidCLID)
finaloverridevirtual

update contents of the ItemList

Definition at line 51 of file SGFolder.cxx.

51  {
52  std::vector< std::string >::const_iterator
53  i(m_itemList.value().begin()), e(m_itemList.value().end());
54  while (i != e) decodeItem(*i++, checkValid);
55 }

Friends And Related Function Documentation

◆ Folder_tester

friend class Folder_tester
friend

Definition at line 96 of file SGFolder.h.

Member Data Documentation

◆ m_checkItems

BooleanProperty SG::Folder::m_checkItems
private

property: check if item types are known to ClassIDSvc

Definition at line 104 of file SGFolder.h.

◆ m_itemList

StringArrayProperty SG::Folder::m_itemList
private

property: the list of items (data objects identified by a class name/key pair)

Definition at line 90 of file SGFolder.h.

◆ m_list

ItemList SG::Folder::m_list
private

Definition at line 102 of file SGFolder.h.

◆ m_pCLIDSvc

ServiceHandle<IClassIDSvc> SG::Folder::m_pCLIDSvc
private

Definition at line 88 of file SGFolder.h.


The documentation for this class was generated from the following files:
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
SG::Folder::updateItemList
virtual void updateItemList(bool checkValidCLID) override final
update contents of the ItemList
Definition: SGFolder.cxx:51
SG::Folder::m_pCLIDSvc
ServiceHandle< IClassIDSvc > m_pCLIDSvc
Definition: SGFolder.h:88
SG::Folder::m_itemList
StringArrayProperty m_itemList
property: the list of items (data objects identified by a class name/key pair)
Definition: SGFolder.h:90
SG::Folder::ItemList
IFolder::ItemList ItemList
the list we manage
Definition: SGFolder.h:54
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
StdJOSetup.msgSvc
msgSvc
Provide convenience handles for various services.
Definition: StdJOSetup.py:36
lumiFormat.i
int i
Definition: lumiFormat.py:85
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
SG::Folder::m_list
ItemList m_list
Definition: SGFolder.h:102
test_pyathena.parent
parent
Definition: test_pyathena.py:15
SG::Folder::decodeItemList
void decodeItemList(Gaudi::Details::PropertyBase &)
Definition: SGFolder.h:91
CLID
uint32_t CLID
The Class ID type.
Definition: Event/xAOD/xAODCore/xAODCore/ClassID_traits.h:47
grepfile.sep
sep
Definition: grepfile.py:38
SG::Folder::m_checkItems
BooleanProperty m_checkItems
property: check if item types are known to ClassIDSvc
Definition: SGFolder.h:104
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
SG::Folder::add
virtual StatusCode add(const std::string &typeName, const std::string &skey) override
add a data object identifier to the list.
Definition: SGFolder.cxx:79
item
Definition: ItemListSvc.h:43
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
ReadCalibFromCool.typeName
typeName
Definition: ReadCalibFromCool.py:477
CxxUtils::atoi
int atoi(std::string_view str)
Helper functions to unpack numbers decoded in string into integers and doubles The strings are requir...
Definition: Control/CxxUtils/Root/StringUtils.cxx:85
SG::Folder::decodeItem
void decodeItem(const std::string &item, bool checkValidCLID)
Definition: SGFolder.cxx:57
SG::FolderItem
a Folder item (data object) is identified by the clid/key pair
Definition: SGFolderItem.h:24