Juggler
Juggling algorithms and event processing using gaudi framework
PodioDataSvc.h
Go to the documentation of this file.
1 // SPDX-License-Identifier: LGPL-3.0-or-later
2 // Copyright (C) 2022 Whitney Armstrong, Wouter Deconinck
3 
4 #ifndef JUGBASE_PODIODATASVC_H
5 #define JUGBASE_PODIODATASVC_H
6 
7 #include <GaudiKernel/DataSvc.h>
8 #include <GaudiKernel/IConversionSvc.h>
9 // PODIO
10 #include <podio/CollectionBase.h>
11 #include <podio/CollectionIDTable.h>
12 #include <podio/EventStore.h>
13 #include <podio/ROOTReader.h>
14 
15 #include <utility>
16 // Forward declarations
17 
18 /** @class PodioEvtSvc EvtDataSvc.h
19  *
20  * An EvtDataSvc for PODIO classes
21  *
22  * @author B. Hegner
23  *
24  * \ingroup base
25  */
26 class PodioDataSvc : public DataSvc {
27 public:
28  typedef std::vector<std::pair<std::string, podio::CollectionBase*>> CollRegistry;
29 
30  /** Initialize the service.
31  * - attaches data loader
32  * - registers input filenames
33  */
34  virtual StatusCode initialize() override;
35  virtual StatusCode reinitialize() override;
36  virtual StatusCode finalize() override;
37  virtual StatusCode clearStore() override;
38 
39  /// Standard Constructor
40  PodioDataSvc(const std::string& name, ISvcLocator* svc);
41 
42  /// Standard Destructor
43  virtual ~PodioDataSvc();
44 
45  // Use DataSvc functionality except where we override
46  using DataSvc::registerObject;
47  /// Overriding standard behaviour of evt service
48  /// Register object with the data store.
49  virtual StatusCode registerObject(std::string_view parentPath,
50  std::string_view fullPath,
51  DataObject* pObject) override final;
52 
53  StatusCode readCollection(const std::string& collectionName, int collectionID);
54 
55  virtual const CollRegistry& getCollections() const { return m_collections; }
56  virtual const CollRegistry& getReadCollections() const { return m_readCollections; }
57  podio::EventStore& getProvider() { return m_provider; }
58  virtual podio::CollectionIDTable* getCollectionIDs() { return m_collectionIDs; }
59 
60  /// Set the collection IDs (if reading a file)
61  void setCollectionIDs(podio::CollectionIDTable* collectionIds);
62  /// Resets caches of reader and event store, increases event counter
63  void endOfRead();
64 
65 
66  TTree* eventDataTree() {return m_eventDataTree;}
67 
68 
69 private:
70 
71  // eventDataTree
72  TTree* m_eventDataTree;
73  /// PODIO reader for ROOT files
74  podio::ROOTReader m_reader;
75  /// PODIO EventStore, used to initialise collections
76  podio::EventStore m_provider;
77  /// Counter of the event number
78  int m_eventNum{0};
79  /// Number of events in the file / to process
80  int m_eventMax{-1};
81 
82 
83  SmartIF<IConversionSvc> m_cnvSvc;
84 
85  // special members for podio handling
86  std::vector<std::pair<std::string, podio::CollectionBase*>> m_collections;
87  std::vector<std::pair<std::string, podio::CollectionBase*>> m_readCollections;
88  podio::CollectionIDTable* m_collectionIDs;
89 
90 protected:
91  /// ROOT file name the input is read from. Set by option filename
92  std::vector<std::string> m_filenames;
93  std::string m_filename;
94  /// Jump to nth events at the beginning. Set by option FirstEventEntry
95  /// This option is helpful when we want to debug an event in the middle of a file
96  unsigned m_1stEvtEntry{0};
97 };
98 #endif
PodioDataSvc::getCollections
virtual const CollRegistry & getCollections() const
Definition: PodioDataSvc.h:55
PodioDataSvc::clearStore
virtual StatusCode clearStore() override
Definition: PodioDataSvc.cpp:55
PodioDataSvc::getProvider
podio::EventStore & getProvider()
Definition: PodioDataSvc.h:57
PodioDataSvc::m_filename
std::string m_filename
Definition: PodioDataSvc.h:93
PodioDataSvc::PodioDataSvc
PodioDataSvc(const std::string &name, ISvcLocator *svc)
Standard Constructor.
Definition: PodioDataSvc.cpp:93
PodioDataSvc::finalize
virtual StatusCode finalize() override
Service finalization.
Definition: PodioDataSvc.cpp:49
PodioDataSvc::~PodioDataSvc
virtual ~PodioDataSvc()
Standard Destructor.
Definition: PodioDataSvc.cpp:99
PodioDataSvc::registerObject
virtual StatusCode registerObject(std::string_view parentPath, std::string_view fullPath, DataObject *pObject) override final
Definition: PodioDataSvc.cpp:118
PodioDataSvc::CollRegistry
std::vector< std::pair< std::string, podio::CollectionBase * > > CollRegistry
Definition: PodioDataSvc.h:28
PodioDataSvc
Definition: PodioDataSvc.h:26
PodioDataSvc::reinitialize
virtual StatusCode reinitialize() override
Service reinitialization.
Definition: PodioDataSvc.cpp:44
PodioDataSvc::initialize
virtual StatusCode initialize() override
Service initialization.
Definition: PodioDataSvc.cpp:14
PodioDataSvc::endOfRead
void endOfRead()
Resets caches of reader and event store, increases event counter.
Definition: PodioDataSvc.cpp:72
PodioDataSvc::m_filenames
std::vector< std::string > m_filenames
ROOT file name the input is read from. Set by option filename.
Definition: PodioDataSvc.h:92
PodioDataSvc::m_1stEvtEntry
unsigned m_1stEvtEntry
Definition: PodioDataSvc.h:96
PodioDataSvc::setCollectionIDs
void setCollectionIDs(podio::CollectionIDTable *collectionIds)
Set the collection IDs (if reading a file)
Definition: PodioDataSvc.cpp:87
PodioDataSvc::eventDataTree
TTree * eventDataTree()
Definition: PodioDataSvc.h:66
PodioDataSvc::getReadCollections
virtual const CollRegistry & getReadCollections() const
Definition: PodioDataSvc.h:56
PodioDataSvc::readCollection
StatusCode readCollection(const std::string &collectionName, int collectionID)
Definition: PodioDataSvc.cpp:103
PodioDataSvc::getCollectionIDs
virtual podio::CollectionIDTable * getCollectionIDs()
Definition: PodioDataSvc.h:58