ATLAS Offline Software
Loading...
Searching...
No Matches
Athena::xAODEventSelector Class Reference

Class implementing the GAUDI IEvtSelector interface using ROOT TTree as a backend. More...

#include <xAODEventSelector.h>

Inheritance diagram for Athena::xAODEventSelector:

Classes

Public Member Functions

 xAODEventSelector (const std::string &name, ISvcLocator *svcLoc)
 Constructor with parameters:
virtual ~xAODEventSelector ()
 Destructor:
virtual StatusCode initialize () override
virtual StatusCode stop () override
virtual StatusCode finalize () override
virtual void handle (const Incident &incident) override
virtual StatusCode io_reinit () override
 Callback method to reinitialize the internal state of the component for I/O purposes (e.g.
virtual int size (Context &refCtxt) const override
 ICollectionSize interface
virtual StatusCode createContext (Context *&refpCtxt) const override
virtual StatusCode last (Context &refContext) const override
virtual StatusCode next (Context &refCtxt) const override
virtual StatusCode next (Context &refCtxt, int jump) const override
virtual StatusCode previous (Context &refCtxt) const override
virtual StatusCode previous (Context &refCtxt, int jump) const override
virtual StatusCode rewind (Context &refCtxt) const override
virtual StatusCode createAddress (const Context &refCtxt, IOpaqueAddress *&) const override
virtual StatusCode releaseContext (Context *&refCtxt) const override
virtual StatusCode resetCriteria (const std::string &cr, Context &ctx) const override
virtual StatusCode seek (Context &refCtxt, int evtnum) const override
 Seek to a given event number.
virtual int curEvent (const Context &refCtxt) const override
 return the current event number.
virtual StatusCode preLoadAddresses (StoreID::type storeID, tadList &list) override
virtual StatusCode loadAddresses (StoreID::type storeID, tadList &list) override
 get all new addresses from Provider for this Event.
virtual StatusCode updateAddress (StoreID::type storeID, SG::TransientAddress *tad, const EventContext &ctx) override
 update a transient Address

Private Member Functions

StatusCode createRootBranchAddresses (StoreID::type storeID, tadList &tads)
 helper method to create proxies
TFile * fetchNtupleFile (const std::string &fname) const
 helper method to retrieve the correct tuple
StatusCode createMetaDataRootBranchAddresses () const
 helper method to create proxies for the metadata store
StatusCode do_init_io ()
 helper method to init the i/o components
StatusCode setFile (const std::string &fname)
 switch to given file, loading metadata and triggering a beginInputFile incident
int find_coll_idx (int evtidx) const
 helper method to get the collection index (into m_inputCollectionsName) for a given event index evtidx.
xAODEventSelector * self () const
 non-const access to self (b/c ::next() is const)

Private Attributes

ServiceHandle< StoreGateSvc > m_dataStore
 Pointer to the StoreGateSvc event store.
ServiceHandle< StoreGateSvc > m_imetaStore
 Pointer to the StoreGateSvc input metadata store.
ServiceHandle< StoreGateSvc > m_ometaStore
 Pointer to the StoreGateSvc output metadata store.
ServiceHandle< IClassIDSvc > m_clidsvc
 Pointer to the IClassIDSvc.
ServiceHandle< IDictLoaderSvc > m_dictsvc
 Pointer to the IDictLoaderSvc.
ServiceHandle< IIncidentSvc > m_incsvc
 Handle to the incident service.
ServiceHandle< IPoolSvc > m_poolSvc
 Handle to the PoolSvc (used in Hybrid mode when user is reading metadata with pool).
ServiceHandle< IProxyProviderSvc > m_ppSvc
 Handle to the proxy provider svc.
StringArrayProperty m_inputCollectionsName
 List of input files containing TTree.
StringProperty m_tupleName
 Name of TTree to load from collection of input files.
StringProperty m_metadataName
 Name of TTree to load from metadata of input files.
long m_skipEvts
 Number of events to skip at the beginning.
long m_nbrEvts
 Number of Events read so far.
long m_curEvt
 current event index
long m_collIdx
 current collection index (into m_inputCollectionsName)
std::vector< CollMetaData > m_collEvts
 cache of the number of entries for each collection
bool m_needReload
std::unordered_map< SG::TransientAddress *, bool > m_rootAddresses
xAOD::xAODTEvent * m_tevent
 current TEvent being read
TFile * m_tfile
 current TFile being read
long m_tevent_entries
int m_accessMode
bool m_fillEventInfo = false
bool m_readMetadataWithPool = false
bool m_printPerfStats = false
bool m_printEventProxyWarnings = true
std::optional< InputFileIncidentGuard > m_inputFileGuard
 RAII guard: guarantees a matching EndInputFile for every BeginInputFile.

Friends

class Athena::xAODEventContext

Detailed Description

Class implementing the GAUDI IEvtSelector interface using ROOT TTree as a backend.

Definition at line 49 of file xAODEventSelector.h.

Constructor & Destructor Documentation

◆ xAODEventSelector()

Athena::xAODEventSelector::xAODEventSelector ( const std::string & name,
ISvcLocator * svcLoc )

Constructor with parameters:

Definition at line 112 of file xAODEventSelector.cxx.

113 :
114 base_class ( name, svcLoc ),
115 m_dataStore( "StoreGateSvc/StoreGateSvc", name ),
116 m_imetaStore( "StoreGateSvc/InputMetaDataStore", name ),
117 m_ometaStore( "StoreGateSvc/MetaDataStore", name ),
118 m_clidsvc ( "ClassIDSvc", name ),
119 m_dictsvc ( "AthDictLoaderSvc", name ),
120 m_incsvc ( "IncidentSvc", name ),
121 m_poolSvc ( "PoolSvc" , name ),
122 m_ppSvc ( "ProxyProviderSvc" , name ),
123 m_nbrEvts ( 0 ),
124 m_curEvt ( 0 ),
125 m_collIdx ( 0 ),
126 m_collEvts ( ),
127 m_needReload (true),
129 m_tevent(NULL),
130 m_tfile(NULL),
132{
133//Properties important to end user:
134 declareProperty( "InputCollections", m_inputCollectionsName,"List of input (ROOT) file names" );
135 declareProperty( "SkipEvents",m_skipEvts = 0,"Number of events to skip at the beginning" );
136 declareProperty( "AccessMode", m_accessMode = -1, "-1 = use TEvent Default; 0 = BranchAccess; 1 = ClassAccess; 2 = AthenaAccess" );
137
138 declareProperty( "FillEventInfo", m_fillEventInfo=false,"If True, will fill old EDM EventInfo with xAOD::EventInfo content, necessary for database reading (IOVDbSvc)");
139
140 declareProperty( "PrintPerfStats", m_printPerfStats=false,"If True, at end of job will print the xAOD perf stats");
141
142//Expert Properties:
143 declareProperty( "EvtStore", m_dataStore, "Store where to publish data");
144 declareProperty( "ProxyProviderSvc" , m_ppSvc , "The ProxyProviderSvc that we should register ourself in and connect the EvtStore to");
145 declareProperty( "InputMetaStore",m_imetaStore, "Store where to publish (input) metadata");
146 declareProperty( "MetaStore",m_ometaStore, "Store where to publish (output) metadata");
147 declareProperty( "TreeName",m_tupleName = "CollectionTree","Name of the TTree to load/read from input file(s)" );
148 declareProperty( "MetaDataTreeName", m_metadataName = "MetaData","Name of the TTree to load/read metadata from input file(s)" );
149
150 declareProperty( "ReadMetaDataWithPool", m_readMetadataWithPool=false, "If true, using POOL to read metadata, will ensure input file is registered with catalog");
151 declareProperty( "printEventProxyWarnings", m_printEventProxyWarnings);
152
153}
ServiceHandle< StoreGateSvc > m_ometaStore
Pointer to the StoreGateSvc output metadata store.
StringProperty m_tupleName
Name of TTree to load from collection of input files.
long m_nbrEvts
Number of Events read so far.
ServiceHandle< IDictLoaderSvc > m_dictsvc
Pointer to the IDictLoaderSvc.
TFile * m_tfile
current TFile being read
StringArrayProperty m_inputCollectionsName
List of input files containing TTree.
StringProperty m_metadataName
Name of TTree to load from metadata of input files.
xAOD::xAODTEvent * m_tevent
current TEvent being read
std::vector< CollMetaData > m_collEvts
cache of the number of entries for each collection
ServiceHandle< IProxyProviderSvc > m_ppSvc
Handle to the proxy provider svc.
ServiceHandle< StoreGateSvc > m_dataStore
Pointer to the StoreGateSvc event store.
std::unordered_map< SG::TransientAddress *, bool > m_rootAddresses
ServiceHandle< IIncidentSvc > m_incsvc
Handle to the incident service.
ServiceHandle< IClassIDSvc > m_clidsvc
Pointer to the IClassIDSvc.
long m_curEvt
current event index
ServiceHandle< IPoolSvc > m_poolSvc
Handle to the PoolSvc (used in Hybrid mode when user is reading metadata with pool).
long m_skipEvts
Number of events to skip at the beginning.
long m_collIdx
current collection index (into m_inputCollectionsName)
ServiceHandle< StoreGateSvc > m_imetaStore
Pointer to the StoreGateSvc input metadata store.

◆ ~xAODEventSelector()

Athena::xAODEventSelector::~xAODEventSelector ( )
virtual

Destructor:

Definition at line 157 of file xAODEventSelector.cxx.

158{}

Member Function Documentation

◆ createAddress()

StatusCode Athena::xAODEventSelector::createAddress ( const Context & refCtxt,
IOpaqueAddress *&  ) const
overridevirtual

Definition at line 572 of file xAODEventSelector.cxx.

574{
575 //std::cerr << "::TTES::createAddress()...\n";
576 return StatusCode::SUCCESS;
577}

◆ createContext()

StatusCode Athena::xAODEventSelector::createContext ( Context *& refpCtxt) const
overridevirtual

IEvtSelector interface

Definition at line 564 of file xAODEventSelector.cxx.

565{
566 xAODEventContext *ctx = new xAODEventContext(this);
567 refCtx = ctx;
568 return StatusCode::SUCCESS;
569}
friend class Athena::xAODEventContext

◆ createMetaDataRootBranchAddresses()

StatusCode Athena::xAODEventSelector::createMetaDataRootBranchAddresses ( ) const
private

helper method to create proxies for the metadata store

Definition at line 884 of file xAODEventSelector.cxx.

885{
886
887 ATH_MSG_DEBUG("In xAODEventSelector::createMetaDataRootBranchAddresses start ...");
888
889 if ( 0 == m_tfile ) {
890 ATH_MSG_ERROR ("Could not get m_tfile !!");
891 throw "xAODEventSelector: Unable to get m_tfile";
892 }
893
894 //FIXME JE
895 ATH_MSG_DEBUG("m_metadataName.value().c_str() = " << m_metadataName.value().c_str() );
896 TTree* tree = dynamic_cast<TTree*>(m_tfile->Get(m_metadataName.value().c_str()));
897 ATH_MSG_DEBUG("m_tfile = " << m_tfile );
898 ATH_MSG_DEBUG("tree = " << tree );
899 if (!tree) std::abort();
900 TObjArray *leaves = tree->GetListOfLeaves();
901 if (!leaves) {
902 ATH_MSG_INFO("no leaves!!");
903 return StatusCode::SUCCESS;
904 }
905
906 // loop over leaves
907 for (Int_t i = 0; i < leaves->GetEntries(); ++i) {
908 TLeaf *leaf = (TLeaf *)leaves->At(i);
909 TBranch *branch = leaf->GetBranch();
910 if (branch) {
911
912 CLID id = 0;
913 const void* value_ptr = m_tevent;
914 const std::string type_name = leaf->GetTypeName();
915 const std::string br_name = branch->GetName();
916 // Skip if type_name does contain xAOD, ie. is not an xAOD container
917 const std::string toCheck = "xAOD::";
918 if (type_name.find(toCheck) == std::string::npos) {
919 ATH_MSG_DEBUG("** Skip type-name = " << type_name << ", br_name = " << br_name );
920 continue;
921 }
922 const std::string sg_key = br_name;//m_tupleName.value()+"/"+br_name;
923 TClass *cls = TClass::GetClass(type_name.c_str());
924 const std::type_info *ti = 0;
925
926 // Skip the EventFormat branch. That must not be disturbed by the
927 // generic metadata handling.
928 if( br_name == "EventFormat" ) continue;
929
930 if (cls) {
931 ti = cls->GetTypeInfo();
932 // first, try to load a dict for that class...
933 if (ti) {
934 m_dictsvc->load_type(*ti);
935 }
936 if (!ti) {
937 ATH_MSG_DEBUG("could not find a type-info for [" <<
938 type_name << "]");
939 continue;
940 }
941
942 // Find the clid for the typeInfo
944
945 if (id == 0) {
946 ATH_MSG_DEBUG("** could not find a CLID for type-name ["
947 << type_name << "]");
948 continue;
949 }
950
951
952
953 ATH_MSG_DEBUG("id = " << id << ", m_metadataName.value() = " << m_metadataName.value() << ", br_name = " << br_name << ", value_ptr = " << value_ptr);
954 CxxUtils::RefCountedPtr<Athena::xAODBranchAddress> addr
955 (new Athena::xAODBranchAddress
957 m_metadataName.value(),
958 br_name,
959 (unsigned long)(value_ptr),
960 (unsigned long)(1))); //IMPORTANT THIS IS 1: signals to BranchAddress to read metadata
961 if (!m_imetaStore->recordAddress(br_name, std::move(addr), true).isSuccess()) {
962 ATH_MSG_ERROR("could not record address at [" << br_name << "] in store ["
963 << m_imetaStore->name() << "]");
964 }
965 // SG::TransientAddress* taddr = new SG::TransientAddress
966 // (id, sg_key, addr);
967 // taddr->setProvider(this);
968 // taddr->clearAddress(true);
969 // tads.push_back(taddr);
970 }
971 }
972 }
973
974 ATH_MSG_DEBUG("In xAODEventSelector::createMetaDataRootBranchAddresses end ...");
975
976 return StatusCode::SUCCESS;
977}
#define ATH_MSG_DEBUG(x,...)
#define ATH_MSG_ERROR(x,...)
#define ATH_MSG_INFO(x,...)
uint32_t CLID
The Class ID type.
static CLID typeinfoToCLID(const std::type_info &ti)
Return the CLID corresponding to a type_info.
static const DbType ROOT_StorageType
Definition DbType.h:85
TChain * tree

◆ createRootBranchAddresses()

StatusCode Athena::xAODEventSelector::createRootBranchAddresses ( StoreID::type storeID,
tadList & tads )
private

helper method to create proxies

className.ReplaceAll("vector","std::vector");

Definition at line 767 of file xAODEventSelector.cxx.

769{
770 if (storeID != StoreID::EVENT_STORE) {
771 ATH_MSG_INFO("-- not the event-store --");
772 return(StatusCode::SUCCESS);
773 }
774
775 if (0 == m_tfile) {
776 ATH_MSG_ERROR("null pointer to n-tuple !");
777 return StatusCode::FAILURE;
778 }
779
780 TTree* inputTree = dynamic_cast<TTree*>(m_tfile->Get(m_tupleName.value().c_str()));
781
782 if(inputTree!=0) {
783
784
785 ATH_MSG_DEBUG("Reading xAOD::EventFormat");
786
787 // m_tevent->dump();
788
789 const void* value_ptr = m_tevent; //passed as 'parameter' to the address object
790
791 std::set<std::string> missingAux;
792
793 for( auto itr = m_tevent->inputEventFormat()->begin(); itr!=m_tevent->inputEventFormat()->end();++itr) {
794 if(inputTree->GetBranch(itr->second.branchName().c_str())==0) continue; //skip branches that are not available in the input collection
795 ATH_MSG_VERBOSE("EFE:" << itr->first << " branchName = " << itr->second.branchName() << " className=" << itr->second.className());
796 CLID id = 0;
797 if( m_clidsvc->getIDOfTypeInfoName(itr->second.className(), id).isFailure() &&
798 m_clidsvc->getIDOfTypeName(itr->second.className(), id).isFailure()) {
799 //if this is an AuxStore (infer if key ends in Aux.), its possible we schema-evolved away from the version in the input file, but that this evolution is actually 'ok' in some cases. So don't print an error if the CLID is missing for an Aux, but we will print a warning at the end for these aux stores
800 if(itr->second.branchName().compare(itr->second.branchName().length()-4,4,"Aux.")==0) {
801 missingAux.insert( itr->second.className() );continue;
802 } else {
803 //vectors can be missing their std:: prefix, so add that and retry before failing
804 TString className = itr->second.className();
806 //ALT solution to this is do what RootNtupleEventSelector does: uses TClass:GetClass
807 //and GetTypeInfo() method to get the proper type info
808 TClass *cls = TClass::GetClass(className);
809 if(cls) {
810 const std::type_info *ti = cls->GetTypeInfo();
811 if(ti) className = System::typeinfoName(*ti);
812 }
813
814 if( m_clidsvc->getIDOfTypeInfoName(className.Data(), id).isFailure() &&
815 m_clidsvc->getIDOfTypeName(className.Data(), id).isFailure()) {
816 ATH_MSG_WARNING("No CLID for class " << itr->second.className() << " , cannot read " << itr->second.branchName());
817 continue;
818 }
819 }
820 }
821
822 const std::string br_name = itr->second.branchName();
823
824 Athena::xAODBranchAddress* addr = new Athena::xAODBranchAddress
826 m_tupleName.value(),
827 br_name,
828 (unsigned long)(value_ptr),
829 (unsigned long)(0)); //IMPORTANT THIS IS 0: signals to xAODBranchAddress to read event-level info (see setTEventAddress)
830 // recycle old rootaddress, if any.
831 SG::TransientAddress* taddr = NULL;
832 // FIXME: should we only iterate over m_rootAddresses which have been marked
833 // as invalid ? (ie: iaddr->second == false)
834 // probably not worth it... (but depends on the "occupancy")
835 for (auto
836 iaddr = m_rootAddresses.begin(),
837 iaddre= m_rootAddresses.end();
838 iaddr != iaddre;
839 ++iaddr) {
840 SG::TransientAddress *old = iaddr->first;
841 if (old->clID() == id &&
842 old->name() == br_name) {
843 // found a "cached" transient address which corresponds to this clid+key
844 // bind it to our new RootBranchAddress...
845 old->setAddress(addr);
846 taddr = old;
847 iaddr->second = true; // mark as valid
848 break;
849 }
850 }
851 if (taddr == NULL) {
852 taddr = new SG::TransientAddress(id, br_name, addr);
853 taddr->setProvider(this, storeID);
854 taddr->clearAddress(false);
855 // only add the *new* TransientAddress to the input list as the *old* ones
856 // are already tracked by the datastore (via the sticky proxies)
857 tads.push_back(taddr);
858 // note: we can store this taddr *b/c* we don't clearAddress it
859 // ie: b/c we just called clearAddress(false) so it will be recycled
860 // over the events.
861 m_rootAddresses.insert(std::make_pair(taddr, true));
862 }
863 // }
864 }
865
866
867 if(missingAux.size()) {
868 std::string allAux; for(auto& s : missingAux) allAux += s + ", ";
869 ATH_MSG_WARNING("The following AuxStore types are not directly accessible (missing CLID, possibly from schema evolution): " << allAux);
870 }
871 } //end if block of requiring input tree to exist
872 else {
873 ATH_MSG_DEBUG("No input collection " << m_tupleName.value() << " found in input file " << m_tfile->GetTitle() );
874 }
875
876 m_needReload = false;
877
878 ATH_MSG_DEBUG("In xAODEventSelector::createRootBranchAddresses end ...");
879
880 return StatusCode::SUCCESS;
881}
#define ATH_MSG_WARNING(x,...)
#define ATH_MSG_VERBOSE(x,...)
void clearAddress(const bool &flag)
Return the clearAddress flag.
void setProvider(IAddressProvider *provider, StoreID::type storeID)
@ EVENT_STORE
Definition StoreID.h:26

◆ curEvent()

int Athena::xAODEventSelector::curEvent ( const Context & refCtxt) const
overridevirtual

return the current event number.

Returns
The current event number.

Definition at line 649 of file xAODEventSelector.cxx.

650{
651 return m_curEvt;
652}

◆ do_init_io()

StatusCode Athena::xAODEventSelector::do_init_io ( )
private

helper method to init the i/o components

Definition at line 1070 of file xAODEventSelector.cxx.

1071{
1072 // std::cout << "::fetchNtuple..." << std::endl;
1073
1074 // initialize some helper structures and data
1075 {
1077 zero.min_entries = -1;
1078 zero.max_entries = -1;
1079 m_collEvts.resize(m_inputCollectionsName.value().size(), zero);
1080 m_collIdx = 0;
1081 }
1082
1083
1084
1085 //CHECK( setFile( m_inputCollectionsName.value()[m_collIdx] ) );
1086
1087
1088 // std::cout << "::clear-root-addresses..." << std::endl;
1089 // reset the list of branches
1090 //m_rootAddresses.clear();
1091 m_needReload = true;
1092
1093 // skip events we are asked to skip
1095 m_nbrEvts = 0;
1096
1097 // std::cout << "::fetchNtuple...[done]" << std::endl;
1098 return StatusCode::SUCCESS;
1099}
void zero(TH2 *h)
zero the contents of a 2d histogram
long min_entries
number of entries up to this collection

◆ fetchNtupleFile()

TFile * Athena::xAODEventSelector::fetchNtupleFile ( const std::string & fname) const
private

helper method to retrieve the correct tuple

Definition at line 981 of file xAODEventSelector.cxx.

982{
983 TFile* file = NULL;
984 if(fname.empty()) return file; //if blank, return 0
985 RootGlobalsRestore rgr;
986 //see if file already open
987 file = (TFile*)gROOT->GetListOfFiles()->FindObject(fname.c_str());
988 if (!file) {
989 //open the file
990 file = TFile::Open(fname.c_str(), "READ");
991 if (file) file->SetName(fname.c_str());
992 }
993 //check file is ok before returning
994 if (!file || file->IsZombie()) {
995 ATH_MSG_ERROR("could not open next file in input collection ["
996 << fname << "]");
997 if (file) {
998 file->Close();
999 }
1000 return 0;
1001 }
1002 return file;
1003}
TFile * file

◆ finalize()

StatusCode Athena::xAODEventSelector::finalize ( )
overridevirtual

Definition at line 358 of file xAODEventSelector.cxx.

359{
360 ATH_MSG_VERBOSE ("Finalize...");
361 // FIXME: this should be tweaked/updated if/when a selection function
362 // or filtering predicate is applied (one day?)
363 ATH_MSG_INFO ("Total events read: " << (m_nbrEvts - m_skipEvts));
364
365 if(m_printPerfStats) {
368 }
369
370
371 return StatusCode::SUCCESS;
372}
ReadStats & stats()
Access the object belonging to the current thread.
Definition IOStats.cxx:17
static IOStats & instance()
Singleton object accessor.
Definition IOStats.cxx:11
void stop()
Stop the statistics collection.
static PerfStats & instance()
Function accessing the singleton instance.
void Print(::Option_t *option="") const
Print information about the collected statistics.

◆ find_coll_idx()

int Athena::xAODEventSelector::find_coll_idx ( int evtidx) const
private

helper method to get the collection index (into m_inputCollectionsName) for a given event index evtidx.

returns -1 if not found.

Definition at line 1105 of file xAODEventSelector.cxx.

1106{
1107 // std::cout << "--find_coll_idx(" << evtidx << ")..." << std::endl
1108 // << "--collsize: " << m_collEvts.size() << std::endl;
1109 for (std::size_t i = 0, imax = m_collEvts.size();
1110 i < imax;
1111 ++i) {
1112 // std::cout << "--[" << i << "]...\n";
1113 CollMetaData &itr = m_collEvts[i];
1114 if (itr.min_entries == -1) {
1115 TFile *file = fetchNtupleFile(m_inputCollectionsName.value()[i]);
1116 if (file) {
1117 long offset = 0;
1118 if (i > 0) {
1119 CollMetaData &jtr = m_collEvts[i-1];
1120 offset += jtr.max_entries;
1121 }
1122 itr.min_entries = offset;
1123 TTree* tree = dynamic_cast<TTree*>(file->Get(m_tupleName.value().c_str()));
1124 itr.max_entries = offset + ( (tree) ? tree->GetEntriesFast() : 0);
1125 } else {
1126 throw "xAODEventSelector: Unable to fetch ntuple";
1127 }
1128 }
1129 // std::cout << "--[" << i << "] => [" << itr.min_entries << ", "
1130 // << itr.max_entries << ") evtidx=[" << evtidx << "]"
1131 // << std::endl;
1132 if (itr.min_entries <= evtidx && evtidx < itr.max_entries) {
1133 return i;
1134 }
1135 }
1136 return -1;
1137}
int imax(int i, int j)
TFile * fetchNtupleFile(const std::string &fname) const
helper method to retrieve the correct tuple

◆ handle()

void Athena::xAODEventSelector::handle ( const Incident & incident)
overridevirtual

Definition at line 1147 of file xAODEventSelector.cxx.

1147 {
1148
1149}

◆ initialize()

StatusCode Athena::xAODEventSelector::initialize ( )
overridevirtual

Definition at line 160 of file xAODEventSelector.cxx.

161{
162 ATH_MSG_VERBOSE ("Enter xAODEventSelector initialization...");
163
164 CHECK( m_clidsvc.retrieve() );
165 CHECK( m_dictsvc.retrieve() );
166
167 if ( m_tupleName.value().empty() ) {
168 ATH_MSG_ERROR("You have to give a TTree name to read from the ROOT files !");
169 return StatusCode::FAILURE;
170 }
171
172 const std::size_t nbrInputFiles = m_inputCollectionsName.value().size();
173 if ( nbrInputFiles < 1 ) {
174 ATH_MSG_ERROR("You need to give at least 1 input file !!" << endmsg
175 << "(Got [" << nbrInputFiles << "] file instead !)");
176 return StatusCode::FAILURE;
177 } else {
178 ATH_MSG_INFO("Selector configured to read [" << nbrInputFiles << "] file(s)...");
179 }
180
181 ATH_MSG_DEBUG("Calling xAOD::Init...");
182 int old_level = gErrorIgnoreLevel;
183 gErrorIgnoreLevel = kWarning;
184 xAOD::Init().ignore();
185 gErrorIgnoreLevel = old_level;
186 //if using the AthROOTErrorHandlerSvc, need to initialize it once again to give back error handling control to svc
187 if(serviceLocator()->existsService("AthROOTErrorHandlerSvc")) {
188 ServiceHandle<IService> ehSvc("AthROOTErrorHandlerSvc",name());
189 CHECK( ehSvc.retrieve() );
190 CHECK( ehSvc->initialize() ); //gives back control to svc
191 CHECK( ehSvc.release() );
192 }
193 switch(m_accessMode) {
194 case -1: ATH_MSG_INFO("Using DEFAULT xAOD access mode (usually same as CLASS mode)"); break;
195 case 0: ATH_MSG_INFO("Using BRANCH xAOD access mode"); break;
196 case 1: ATH_MSG_INFO("Using CLASS xAOD access mode"); break;
197 case 2: ATH_MSG_INFO("Using ATHENA xAOD access mode"); break;
198 }
199 if(m_accessMode != -1) {
200 m_tevent = new xAOD::xAODTEvent(xAOD::TEvent::EAuxMode(m_accessMode)); //our special class inheriting from xAOD::TEvent
201 } else {
202 m_tevent = new xAOD::xAODTEvent(); //our special class inheriting from xAOD::TEvent
203 }
204 m_tevent->printProxyWarnings(m_printEventProxyWarnings);
205
206 //use the first file to decide if reading metadata with POOL is ok
208 std::unique_ptr<TFile> f( TFile::Open( m_inputCollectionsName.value()[0].c_str() ) );
209 if(!f) {
210 ATH_MSG_ERROR("Failed to open first input file: " << m_inputCollectionsName.value()[0]);
211 return StatusCode::FAILURE;
212 }
213 if(!f->Get("##Shapes")) {
214 ATH_MSG_INFO("First file is not POOL file (e.g. is CxAOD), so reading metadata with xAOD::TEvent instead");
216 }
217 f->Close();
218 }
219
220
221 {
222 // register this service for 'I/O' events
223 ServiceHandle<IIoComponentMgr> iomgr("IoComponentMgr", name());
224 if (!iomgr.retrieve().isSuccess()) {
225 ATH_MSG_FATAL("Could not retrieve IoComponentMgr !");
226 return StatusCode::FAILURE;
227 }
228 if (!iomgr->io_register(this).isSuccess()) {
229 ATH_MSG_FATAL("Could not register myself with the IoComponentMgr !");
230 return StatusCode::FAILURE;
231 }
232 // register input file's names with the I/O manager
233 const std::vector<std::string>& incol = m_inputCollectionsName.value();
234 bool allGood = true;
235 for (std::size_t icol = 0, imax = incol.size(); icol < imax; icol++) {
236 if (!iomgr->io_register(this,
237 IIoComponentMgr::IoMode::READ,
238 incol[icol]).isSuccess()) {
239 ATH_MSG_FATAL("could not register [" << incol[icol] << "] for output !");
240 allGood = false;
241 } else {
242 ATH_MSG_VERBOSE("io_register[" << this->name() << "](" << incol[icol] << ") [ok]");
243 }
244 }
245 if (!allGood) {
246 return StatusCode::FAILURE;
247 }
248 }
249
250 if (!do_init_io().isSuccess()) {
251 return StatusCode::FAILURE;
252 }
253
254 // retrieve event stores
255 // this needs to happen *after* having initialized the i/o
256 // as our branches (which need a valid m_ntuple pointer)
257 // may be asked to be registered as we are a ProxyProvider.
258 // retrieving the event store will poke the ProxyProviderSvc...
259/*
260 if ( !m_dataStore.retrieve().isSuccess() ) {
261 ATH_MSG_ERROR("Could not retrieve [" << m_dataStore.typeAndName() << "] !!");
262 return StatusCode::FAILURE;
263 }
264
265 // ditto for (input) meta data store
266 if (!m_imetaStore.retrieve().isSuccess()) {
267 ATH_MSG_ERROR("Could not retrieve [" << m_imetaStore.typeAndName() << "] !!");
268 return StatusCode::FAILURE;
269 }
270
271 // ditto for (output) meta data store
272 if (!m_ometaStore.retrieve().isSuccess()) {
273 ATH_MSG_ERROR
274 ("Could not retrieve [" << m_ometaStore.typeAndName() << "] !!");
275 return StatusCode::FAILURE;
276 }
277*/
278
279 //ensure the xAODCnvSvc is listed in the EventPersistencySvc
280 ServiceHandle<IProperty> epSvc("EventPersistencySvc",name());
281
282
283 std::vector<std::string> propVal;
284 CHECK( Gaudi::Parsers::parse( propVal , epSvc->getProperty("CnvServices").toString() ) );
285 bool foundSvc(false); bool foundPoolSvc(false);
286 for(const std::string& s : propVal) {
287 if(s=="Athena::xAODCnvSvc") { foundSvc=true; }
288 if(s=="AthenaPoolCnvSvc") { foundPoolSvc=true; } //only need this if in hybrid mode
289 }
290 if(!foundSvc) propVal.push_back("Athena::xAODCnvSvc");
291 if(!foundPoolSvc && m_readMetadataWithPool) propVal.push_back("AthenaPoolCnvSvc");
292
293 if(!foundSvc || (!foundPoolSvc && m_readMetadataWithPool)) {
294 CHECK( epSvc->setProperty("CnvServices", Gaudi::Utils::toString( propVal ) ));
295 }
296
297
298 //we should also add ourself as a proxy provider
299 CHECK( m_ppSvc.retrieve() );
300
301 //ensure the MetaDataSvc is added as a provider first, if we are in hybrid mode
303 std::vector<std::string> propVal;
304 IProperty* prop = dynamic_cast<IProperty*>(&*m_ppSvc);
305 if (!prop) {
306 return StatusCode::FAILURE;
307 }
308 CHECK( Gaudi::Parsers::parse( propVal , prop->getProperty("ProviderNames").toString() ) );
309 bool foundSvc(false);
310 for(const std::string& s : propVal) {
311 if(s=="MetaDataSvc") { foundSvc=true; break; }
312 }
313 if(!foundSvc) {
314 propVal.push_back("MetaDataSvc");
315 IProperty* prop = dynamic_cast<IProperty*>(&*m_ppSvc);
316 if (!prop) {
317 return StatusCode::FAILURE;
318 }
319 CHECK( prop->setProperty("ProviderNames", Gaudi::Utils::toString( propVal ) ));
320 }
321 }
322
323 //now we add ourself as a provider
324 m_ppSvc->addProvider( this );
325 //trigger a reload of proxies in the storegate, which will poke the proxyprovidersvc
326 //not actually needed
327 //CHECK( m_dataStore->loadEventProxies() );
328
329
330 //finally ensure the storegate has our proxy set in it
331 //FIXME: this doesnt seem to allow multi storegates on the fly ???
332 //m_dataStore->setProxyProviderSvc( &*m_ppSvc );
333
334 CHECK( m_ppSvc.release() );
335
336
337 //load the first file .. this is so metadata can be read even if no events present
338 //checked above that there's at least one file
339 CHECK( setFile(m_inputCollectionsName.value()[0]) );
340
341 //first FirstInputFile incident so that input metadata store is populated by MetaDataSvc
342 m_incsvc->fireIncident(FileIncident(name(), "FirstInputFile", m_inputCollectionsName.value()[0]));
343
345
346
347 return StatusCode::SUCCESS;
348}
#define endmsg
#define ATH_MSG_FATAL(x,...)
#define CHECK(...)
Evaluate an expression and check for errors.
StatusCode do_init_io()
helper method to init the i/o components
StatusCode setFile(const std::string &fname)
switch to given file, loading metadata and triggering a beginInputFile incident
void start(bool clear=true)
Start the statistics collection.
StatusCode parse(std::tuple< Tup... > &tup, const Gaudi::Parsers::InputData &input)
bool allGood
Loop over the SDOs & Digits.
StatusCode Init(const char *appname)
Function initialising ROOT/PyROOT for using the ATLAS EDM.
Definition Init.cxx:31

◆ io_reinit()

StatusCode Athena::xAODEventSelector::io_reinit ( )
overridevirtual

Callback method to reinitialize the internal state of the component for I/O purposes (e.g.

upon fork(2))

Definition at line 657 of file xAODEventSelector.cxx.

658{
659 ATH_MSG_VERBOSE("I/O reinitialization...");
660
661 ServiceHandle<IIoComponentMgr> iomgr("IoComponentMgr", name());
662 if (!iomgr.retrieve().isSuccess()) {
663 ATH_MSG_FATAL("Could not retrieve IoComponentMgr !");
664 return StatusCode::FAILURE;
665 }
666 if (!iomgr->io_hasitem(this)) {
667 ATH_MSG_FATAL("IoComponentMgr does not know about myself !");
668 return StatusCode::FAILURE;
669 }
670 std::vector<std::string> inputCollections = m_inputCollectionsName.value();
671
672 for (std::size_t
673 i = 0,
674 imax = m_inputCollectionsName.value().size();
675 i < imax;
676 ++i) {
677 std::string &fname = inputCollections[i];
678 // std::cout << "--retrieve new name for [" << fname << "]...\n";
679 if (!iomgr->io_contains(this, fname)) {
680 ATH_MSG_ERROR("IoComponentMgr does not know about [" << fname << "] !");
681 return StatusCode::FAILURE;
682 }
683 if (!iomgr->io_retrieve(this, fname).isSuccess()) {
684 ATH_MSG_FATAL("Could not retrieve new value for [" << fname << "] !");
685 return StatusCode::FAILURE;
686 }
687 // std::cout << "--> [" << fname << "]\n" << std::flush;
688 }
689 // all good... copy over.
691
692 // remove our EventInfo if any...
693 // {
694 // const bool force_remove = true;
695 // if (!m_dataStore->clearStore(force_remove).isSuccess()) {
696 // ATH_MSG_ERROR("could not clear event store!");
697 // return StatusCode::FAILURE;
698 // } else {
699 // ATH_MSG_INFO("sgdump: \n" << m_dataStore->dump());
700 // }
701 // }
702
703 // std::cout << "--> do_init_io...\n" << std::flush;
704 if (!do_init_io().isSuccess()) {
705 return StatusCode::FAILURE;
706 }
707
708 ATH_MSG_INFO("I/O reinitialization... [done]");
709 return StatusCode::SUCCESS;
710}

◆ last()

StatusCode Athena::xAODEventSelector::last ( Context & refContext) const
overridevirtual

Definition at line 550 of file xAODEventSelector.cxx.

551{
552 ATH_MSG_ERROR ("............. Last Event Not Implemented .............");
553 return StatusCode::FAILURE;
554}

◆ loadAddresses()

StatusCode Athena::xAODEventSelector::loadAddresses ( StoreID::type storeID,
tadList & list )
overridevirtual

get all new addresses from Provider for this Event.

Definition at line 728 of file xAODEventSelector.cxx.

729{
730 if (m_needReload || m_rootAddresses.empty()) {
731 //CHECK(createMetaDataRootBranchAddresses());
732 return createRootBranchAddresses(storeID, tads);
733 }
734
735 return StatusCode::SUCCESS;
736}
StatusCode createRootBranchAddresses(StoreID::type storeID, tadList &tads)
helper method to create proxies

◆ next() [1/2]

virtual StatusCode Athena::xAODEventSelector::next ( Context & refCtxt) const
overridevirtual

◆ next() [2/2]

StatusCode Athena::xAODEventSelector::next ( Context & refCtxt,
int jump ) const
overridevirtual

Definition at line 527 of file xAODEventSelector.cxx.

528{
529 ATH_MSG_DEBUG ("next(" << jump << ") : iEvt " << m_curEvt);
530
531 if (self()->seek(ctx, m_curEvt + jump).isSuccess()) {
532 return StatusCode::FAILURE;
533 }
534 return next(ctx);
535}
virtual StatusCode next(Context &refCtxt) const override
xAODEventSelector * self() const
non-const access to self (b/c next() is const)
virtual StatusCode seek(Context &refCtxt, int evtnum) const override
Seek to a given event number.

◆ preLoadAddresses()

StatusCode Athena::xAODEventSelector::preLoadAddresses ( StoreID::type storeID,
tadList & list )
overridevirtual

IAddressProvider interface get all addresses from Provider : Called before Begin Event

Definition at line 717 of file xAODEventSelector.cxx.

719{
720 // std::cerr << "TTES::preLoadAddresses(" << int(storeID)
721 // << "," << tads.size()
722 // << ")...\n";
723 return StatusCode::SUCCESS;
724}

◆ previous() [1/2]

virtual StatusCode Athena::xAODEventSelector::previous ( Context & refCtxt) const
overridevirtual

◆ previous() [2/2]

StatusCode Athena::xAODEventSelector::previous ( Context & refCtxt,
int jump ) const
overridevirtual

Definition at line 544 of file xAODEventSelector.cxx.

545{
546 return next( ctx, -jump );
547}

◆ releaseContext()

StatusCode Athena::xAODEventSelector::releaseContext ( Context *& refCtxt) const
overridevirtual

Definition at line 580 of file xAODEventSelector.cxx.

581{
582 if(refCtxt==0) return StatusCode::SUCCESS; //added to avoid warning from MetaDataSvc, which passes an empty context
583 xAODEventContext *ctx = dynamic_cast<xAODEventContext*>(refCtxt);
584 if ( ctx ) {
585 delete ctx; ctx = 0;
586 return StatusCode::SUCCESS;
587 }
588
589 return StatusCode::FAILURE;
590}

◆ resetCriteria()

StatusCode Athena::xAODEventSelector::resetCriteria ( const std::string & cr,
Context & ctx ) const
overridevirtual

Definition at line 593 of file xAODEventSelector.cxx.

594{
595 ATH_MSG_ERROR ("............. resetCriteria Not Implemented .............");
596 return StatusCode::FAILURE;
597}

◆ rewind()

StatusCode Athena::xAODEventSelector::rewind ( Context & refCtxt) const
overridevirtual

Definition at line 558 of file xAODEventSelector.cxx.

559{
560 return self()->seek(ctxt, 0);
561}

◆ seek()

StatusCode Athena::xAODEventSelector::seek ( Context & refCtxt,
int evtnum ) const
overridevirtual

Seek to a given event number.

IEventSeek interface

Parameters
evtnumThe event number to which to seek.
evtnumThe event number to which to seek.

Definition at line 608 of file xAODEventSelector.cxx.

609{
610 // std::cout << "::seek - evtnum=" << evtnum
611 // << " curevt=" << m_curEvt
612 // << " curcol=" << m_collIdx
613 // << std::endl;
614 long coll_idx = find_coll_idx(evtnum);
615 // std::cout << "::seek - evtnum=" << evtnum
616 // << " curevt=" << m_curEvt
617 // << " curcol=" << m_collIdx
618 // << " colidx=" << coll_idx
619 // << std::endl;
620 if (coll_idx == -1 && evtnum < m_curEvt) {
621 coll_idx = m_collIdx;
622 }
623
624 if (coll_idx == -1) {
625 ATH_MSG_INFO("seek: reached end of input.");
626 return StatusCode::RECOVERABLE;
627 }
628
629 if (coll_idx != m_collIdx) {
630 // tell everyone we switched files...
631 xAODEventContext* rctx = dynamic_cast<xAODEventContext*>(&refCtxt);
632 if (!rctx) {
633 return StatusCode::FAILURE;
634 }
635 ATH_CHECK(rctx->setFile(""));
636 }
637
638 m_collIdx = coll_idx;
639 m_curEvt = evtnum;
640
641 return StatusCode::SUCCESS;
642}
#define ATH_CHECK
Evaluate an expression and check for errors.
int find_coll_idx(int evtidx) const
helper method to get the collection index (into m_inputCollectionsName) for a given event index evtid...

◆ self()

xAODEventSelector * Athena::xAODEventSelector::self ( ) const
inlineprivate

non-const access to self (b/c ::next() is const)

Definition at line 161 of file xAODEventSelector.h.

162 { return const_cast<xAODEventSelector*>(this); }
xAODEventSelector(const std::string &name, ISvcLocator *svcLoc)
Constructor with parameters:

◆ setFile()

StatusCode Athena::xAODEventSelector::setFile ( const std::string & fname)
private

switch to given file, loading metadata and triggering a beginInputFile incident

Definition at line 1006 of file xAODEventSelector.cxx.

1006 {
1007
1008 TFile* newFile = fetchNtupleFile(fname);
1009 if(!newFile && !fname.empty()) {
1010 ATH_MSG_FATAL( "xAODEventSelector: Unable to fetch Ntuple: " << fname);
1011 return StatusCode::FAILURE; //failed to load file
1012 }
1013
1014 if(m_tfile && m_tfile != newFile) {
1015 const std::string currFile = m_tfile->GetName();
1016 //disconnect pool if necessary ... always fire this, hopefully it is safe even if not needed
1017 m_poolSvc->disconnectDb("PFN:"+currFile).ignore();
1018 //close existing file
1019 m_tfile->Close();
1020 //we should also cleanup after pool, in case it has left open files dangling
1021 }
1022 m_tfile = newFile;
1023 m_tevent_entries = 0; //will set in a moment
1024
1025 if(!m_tfile) return StatusCode::SUCCESS; //must have been setting to blank file
1026
1027 if(m_tevent->readFrom( m_tfile ).isFailure()) {
1028 ATH_MSG_FATAL( "xAODEventSelector: TEvent cannot read " << fname);
1029 return StatusCode::FAILURE;
1030 }
1031
1032 m_tevent_entries = m_tevent->getEntries();
1033
1034 //need to load metadata for file
1035 if (!m_imetaStore->clearStore().isSuccess()) {
1036 ATH_MSG_INFO("could not clear store [" << m_imetaStore.typeAndName() << "]");
1037 return StatusCode::FAILURE;
1038 }
1039
1040
1042 //ensure input file collection created
1043 ATH_MSG_DEBUG("Creating poolsvc collection for " << fname);
1044 StatusCode sc = m_poolSvc->connectCollection( "PFN:"+fname , fname );
1045 pool::ICollection* collPtr ATLAS_THREAD_SAFE = nullptr;
1046 // Try to open EventTags Collection in the input file
1047 try {
1048 collPtr = pool::CollectionService::open(fname, "PFN:"+fname, m_poolSvc->getInputContextSession(IPoolSvc::kInputStream));
1049 } catch (std::exception &e) {
1050 collPtr = nullptr;
1051 }
1052 if (sc.isRecoverable() || collPtr == nullptr) {
1053 m_poolSvc->checkCollection("PFN:"+fname, IPoolSvc::kInputStream, collPtr == nullptr).ignore();
1054 }
1055 //metadata will be read by MetaDataSvc, triggered by the BeginInputFile call
1056 } else {
1057 if (!createMetaDataRootBranchAddresses().isSuccess()) {
1058 ATH_MSG_ERROR("Could not load metadata");
1059 }
1060 }
1061
1062
1063
1064 return StatusCode::SUCCESS;
1065
1066}
static Double_t sc
#define ATLAS_THREAD_SAFE
StatusCode createMetaDataRootBranchAddresses() const
helper method to create proxies for the metadata store
@ kInputStream
Definition IPoolSvc.h:39
static ICollection * open(const std::string &name, const std::string &connection="", ISession *session=0)
Opens an existing collection for reading.
::StatusCode StatusCode
StatusCode definition for legacy code.

◆ size()

int Athena::xAODEventSelector::size ( Context & refCtxt) const
overridevirtual

ICollectionSize interface

Definition at line 1140 of file xAODEventSelector.cxx.

1140 {
1141 //use find_coll_idx to trigger a population of the m_collEvts ... dummy call with -1 to trigger all colls loaded
1142 find_coll_idx(-1);
1143 return m_collEvts.back().max_entries;
1144}

◆ stop()

StatusCode Athena::xAODEventSelector::stop ( )
overridevirtual

Definition at line 350 of file xAODEventSelector.cxx.

351{
352 // Fire EndInputFile for any file still open (the event loop may end
353 // before the file is fully read).
354 m_inputFileGuard.reset();
355 return StatusCode::SUCCESS;
356}
std::optional< InputFileIncidentGuard > m_inputFileGuard
RAII guard: guarantees a matching EndInputFile for every BeginInputFile.

◆ updateAddress()

StatusCode Athena::xAODEventSelector::updateAddress ( StoreID::type storeID,
SG::TransientAddress * tad,
const EventContext & ctx )
overridevirtual

update a transient Address

Definition at line 740 of file xAODEventSelector.cxx.

742{
743 // check if this tad is known to us.
744 if (tad) {
745 auto itr = m_rootAddresses.find(tad);
746 if ( itr != m_rootAddresses.end() && itr->second ) {
747 return StatusCode::SUCCESS;
748 }
749 ATH_MSG_DEBUG("updateAddress: address [" << tad->clID() << "#"
750 << tad->name() << ") NOT known to us.");
751 return StatusCode::FAILURE;
752 }
753
754 // do nothing.
755 return StatusCode::SUCCESS;
756}
CLID clID() const
Retrieve string key:
const std::string & name() const
Get the primary (hashed) SG key.

◆ Athena::xAODEventContext

friend class Athena::xAODEventContext
friend

Definition at line 57 of file xAODEventSelector.h.

Member Data Documentation

◆ m_accessMode

int Athena::xAODEventSelector::m_accessMode
private

Definition at line 234 of file xAODEventSelector.h.

◆ m_clidsvc

ServiceHandle<IClassIDSvc> Athena::xAODEventSelector::m_clidsvc
private

Pointer to the IClassIDSvc.

Definition at line 176 of file xAODEventSelector.h.

◆ m_collEvts

std::vector<CollMetaData> Athena::xAODEventSelector::m_collEvts
mutableprivate

cache of the number of entries for each collection

Definition at line 214 of file xAODEventSelector.h.

◆ m_collIdx

long Athena::xAODEventSelector::m_collIdx
mutableprivate

current collection index (into m_inputCollectionsName)

Definition at line 205 of file xAODEventSelector.h.

◆ m_curEvt

long Athena::xAODEventSelector::m_curEvt
mutableprivate

current event index

Definition at line 202 of file xAODEventSelector.h.

◆ m_dataStore

ServiceHandle<StoreGateSvc> Athena::xAODEventSelector::m_dataStore
private

Pointer to the StoreGateSvc event store.

Definition at line 170 of file xAODEventSelector.h.

◆ m_dictsvc

ServiceHandle<IDictLoaderSvc> Athena::xAODEventSelector::m_dictsvc
private

Pointer to the IDictLoaderSvc.

Definition at line 178 of file xAODEventSelector.h.

◆ m_fillEventInfo

bool Athena::xAODEventSelector::m_fillEventInfo = false
private

Definition at line 236 of file xAODEventSelector.h.

◆ m_imetaStore

ServiceHandle<StoreGateSvc> Athena::xAODEventSelector::m_imetaStore
private

Pointer to the StoreGateSvc input metadata store.

Definition at line 172 of file xAODEventSelector.h.

◆ m_incsvc

ServiceHandle<IIncidentSvc> Athena::xAODEventSelector::m_incsvc
private

Handle to the incident service.

Definition at line 180 of file xAODEventSelector.h.

◆ m_inputCollectionsName

StringArrayProperty Athena::xAODEventSelector::m_inputCollectionsName
private

List of input files containing TTree.

Definition at line 187 of file xAODEventSelector.h.

◆ m_inputFileGuard

std::optional<InputFileIncidentGuard> Athena::xAODEventSelector::m_inputFileGuard
mutableprivate

RAII guard: guarantees a matching EndInputFile for every BeginInputFile.

Definition at line 245 of file xAODEventSelector.h.

◆ m_metadataName

StringProperty Athena::xAODEventSelector::m_metadataName
private

Name of TTree to load from metadata of input files.

Definition at line 193 of file xAODEventSelector.h.

◆ m_nbrEvts

long Athena::xAODEventSelector::m_nbrEvts
mutableprivate

Number of Events read so far.

Definition at line 199 of file xAODEventSelector.h.

◆ m_needReload

bool Athena::xAODEventSelector::m_needReload
mutableprivate

Definition at line 218 of file xAODEventSelector.h.

◆ m_ometaStore

ServiceHandle<StoreGateSvc> Athena::xAODEventSelector::m_ometaStore
private

Pointer to the StoreGateSvc output metadata store.

Definition at line 174 of file xAODEventSelector.h.

◆ m_poolSvc

ServiceHandle<IPoolSvc> Athena::xAODEventSelector::m_poolSvc
private

Handle to the PoolSvc (used in Hybrid mode when user is reading metadata with pool).

Definition at line 182 of file xAODEventSelector.h.

◆ m_ppSvc

ServiceHandle<IProxyProviderSvc> Athena::xAODEventSelector::m_ppSvc
private

Handle to the proxy provider svc.

Definition at line 184 of file xAODEventSelector.h.

◆ m_printEventProxyWarnings

bool Athena::xAODEventSelector::m_printEventProxyWarnings = true
private

Definition at line 242 of file xAODEventSelector.h.

◆ m_printPerfStats

bool Athena::xAODEventSelector::m_printPerfStats = false
private

Definition at line 240 of file xAODEventSelector.h.

◆ m_readMetadataWithPool

bool Athena::xAODEventSelector::m_readMetadataWithPool = false
private

Definition at line 238 of file xAODEventSelector.h.

◆ m_rootAddresses

std::unordered_map<SG::TransientAddress*, bool> Athena::xAODEventSelector::m_rootAddresses
private

Definition at line 223 of file xAODEventSelector.h.

◆ m_skipEvts

long Athena::xAODEventSelector::m_skipEvts
private

Number of events to skip at the beginning.

Definition at line 196 of file xAODEventSelector.h.

◆ m_tevent

xAOD::xAODTEvent* Athena::xAODEventSelector::m_tevent
mutableprivate

current TEvent being read

Definition at line 227 of file xAODEventSelector.h.

◆ m_tevent_entries

long Athena::xAODEventSelector::m_tevent_entries
mutableprivate

Definition at line 232 of file xAODEventSelector.h.

◆ m_tfile

TFile* Athena::xAODEventSelector::m_tfile
mutableprivate

current TFile being read

Definition at line 230 of file xAODEventSelector.h.

◆ m_tupleName

StringProperty Athena::xAODEventSelector::m_tupleName
private

Name of TTree to load from collection of input files.

Definition at line 190 of file xAODEventSelector.h.


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