The Gaudi Framework  v30r4 (9b837755)
OutputStream.h
Go to the documentation of this file.
1 #ifndef GAUDISVC_PERSISTENCYSVC_OUTPUTSTREAM_H
2 #define GAUDISVC_PERSISTENCYSVC_OUTPUTSTREAM_H
3 
4 // Required for inheritance
8 #include "GaudiKernel/Property.h"
9 
10 // STL include files
11 #include <memory>
12 #include <string>
13 #include <vector>
14 
15 // forward declarations
16 class IIncidentSvc;
17 class IRegistry;
18 class IConversionSvc;
19 struct IDataManagerSvc;
20 class OutputStreamAgent;
21 class DataStoreItem;
22 
28 class OutputStream : public Algorithm
29 {
30 public:
35 
36 public:
39 
40 protected:
41  Gaudi::Property<ItemNames> m_itemNames{this, "ItemList", {}, "vector of item names to be saved to this stream"};
43  this, "OptItemList", {}, "vector of optional item names to be saved to this stream"};
45  this,
46  "AlgDependentItemList",
47  {},
48  "mapping between algorithm names, and a list of items for which, if the "
49  "algorithm in question accepted the event, they should be also stored"};
50  Gaudi::Property<bool> m_doPreLoad{this, "Preload", true,
51  "flag indicating whether data pre-loading should be performed"};
52  Gaudi::Property<bool> m_doPreLoadOpt{this, "PreloadOptItems", false,
53  "flag indicating whether optional items should be preloaded"};
54  Gaudi::Property<std::string> m_output{this, "Output", {}, "name of the output file specification"};
55  Gaudi::Property<std::string> m_outputName{this, "OutputFile", {}, "name of the output file"};
56  Gaudi::Property<std::string> m_storeName{this, "EvtDataSvc", "EventDataSvc",
57  "name of the service managing the data store"};
58  Gaudi::Property<std::string> m_persName{this, "EvtConversionSvc", "EventPersistencySvc",
59  "name of the persistency service capable to write data from the store"};
61  this,
62  "AcceptAlgs",
63  {},
64  [this]( auto& ) { this->decodeAlgorithms( this->m_acceptNames, this->m_acceptAlgs ); },
65  "names of Algorithms that this stream accepts"};
67  this,
68  "RequireAlgs",
69  {},
70  [this]( auto& ) { this->decodeAlgorithms( this->m_requireNames, this->m_requireAlgs ); },
71  "names of Algorithms that this stream requires"};
73  this,
74  "VetoAlgs",
75  {},
76  [this]( auto& ) { this->decodeAlgorithms( this->m_vetoNames, this->m_vetoAlgs ); },
77  "names of Algorithms that this stream is vetoed by"};
78  Gaudi::Property<bool> m_verifyItems{this, "VerifyItems", true,
79  "flag to indicate that item consistency should be checked"};
80 
84  bool m_fireIncidents = true;
85 
88 
100  Items m_itemList;
104  AlgDependentItems m_algDependentItems;
108  int m_events;
109 
116 
117 protected:
119  Algorithm* decodeAlgorithm( const std::string& theName );
123  bool isEventAccepted() const;
127  virtual StatusCode writeObjects();
128 
130  virtual bool hasInput() const;
131 
132 public:
134  StatusCode initialize() override;
136  StatusCode finalize() override;
138  StatusCode execute() override;
139  // Connect to proper conversion service
142  virtual bool collect( IRegistry* dir, int level );
144  virtual StatusCode collectObjects();
146  void clearSelection();
147 
148 private:
150  void clearItems( Items& itms );
152  void addItem( Items& itms, const std::string& descriptor );
155 
157 };
158 
159 #endif // GAUDISVC_PERSISTENCYSVC_OUTPUTSTREAM_H
Gaudi::Property< std::vector< std::string > > m_acceptNames
Definition: OutputStream.h:60
void decodeAlgorithms(Gaudi::Property< std::vector< std::string >> &theNames, std::vector< Algorithm * > &theAlgs)
Decode specified list of Algorithms.
bool isEventAccepted() const
Test whether this event should be output.
void clearItems(Items &itms)
Clear item list.
virtual bool hasInput() const
Tell if the instance has been configured with input items or not.
Gaudi::Property< std::vector< std::string > > m_vetoNames
Definition: OutputStream.h:72
IDataSelector m_objects
Collection of objects being selected.
Definition: OutputStream.h:106
StatusCode finalize() override
Terminate OutputStream.
int m_events
Number of events written to this output stream.
Definition: OutputStream.h:108
Implementation of property with value of concrete type.
Definition: Property.h:383
std::map< std::string, ItemNames > AlgDependentItemNames
Definition: OutputStream.h:34
std::map< Algorithm *, Items > AlgDependentItems
Definition: OutputStream.h:33
std::string m_outputType
Output type: NEW(NEW,CREATE,WRITE,RECREATE), UPDATE)
Definition: OutputStream.h:90
Gaudi::Property< bool > m_verifyItems
Definition: OutputStream.h:78
DataStoreItem * m_currentItem
Keep track of the current item.
Definition: OutputStream.h:98
Gaudi::Property< std::string > m_output
Definition: OutputStream.h:54
Gaudi::Property< std::string > m_outputName
Definition: OutputStream.h:55
Gaudi::Property< ItemNames > m_optItemNames
Definition: OutputStream.h:42
std::vector< Algorithm * > m_requireAlgs
Vector of Algorithms that this stream requires.
Definition: OutputStream.h:113
IDataSelector * selectedObjects()
Return the list of selected objects.
Definition: OutputStream.h:154
SmartIF< IDataProviderSvc > m_pDataProvider
Keep reference to the data provider service.
Definition: OutputStream.h:92
Description of the DataStoreItem class.
Definition: DataStoreItem.h:17
Gaudi::Property< bool > m_doPreLoad
Definition: OutputStream.h:50
A small to stream Data I/O.
Definition: OutputStream.h:28
std::vector< Algorithm * > m_acceptAlgs
Vector of Algorithms that this stream accepts.
Definition: OutputStream.h:111
STL class.
virtual bool collect(IRegistry *dir, int level)
Store agent&#39;s classback.
DataStoreItem * findItem(const std::string &path)
Find single item identified by its path (exact match)
virtual StatusCode writeObjects()
Select the different objects and write them to file.
SmartIF< IConversionSvc > m_pConversionSvc
Keep reference to the data conversion service.
Definition: OutputStream.h:96
StatusCode initialize() override
Initialize OutputStream.
virtual StatusCode connectConversionSvc()
AlgDependentItems m_algDependentItems
Items to be saved for specific algorithms.
Definition: OutputStream.h:104
std::vector< DataStoreItem * > Items
Definition: OutputStream.h:31
Gaudi::Property< std::vector< std::string > > m_requireNames
Definition: OutputStream.h:66
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:51
Items m_itemList
Vector of items to be saved to this stream.
Definition: OutputStream.h:100
void addItem(Items &itms, const std::string &descriptor)
Add item to output streamer list.
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
Gaudi::Property< AlgDependentItemNames > m_algDependentItemList
Definition: OutputStream.h:44
SmartIF< IDataManagerSvc > m_pDataManager
Keep reference to the data manager service.
Definition: OutputStream.h:94
void clearSelection()
Clear list of selected objects.
SmartIF< IIncidentSvc > m_incidentSvc
Reference to the incident service.
Definition: OutputStream.h:87
Algorithm(const std::string &name, ISvcLocator *svcloc, const std::string &version=PACKAGE_VERSION)
Constructor.
Definition: Algorithm.cpp:49
StatusCode execute() override
Working entry point.
Base class from which all concrete algorithm classes should be derived.
Definition: Algorithm.h:79
Gaudi::Property< std::string > m_storeName
Definition: OutputStream.h:56
std::vector< std::string > ItemNames
Definition: OutputStream.h:32
Gaudi::Property< bool > m_doPreLoadOpt
Definition: OutputStream.h:52
Algorithm * decodeAlgorithm(const std::string &theName)
Decode a single algorithm name.
StatusCode collectFromSubTree(DataObject *)
Gaudi::Property< std::string > m_persName
Definition: OutputStream.h:58
std::vector< Algorithm * > m_vetoAlgs
Vector of Algorithms that this stream is vetoed by.
Definition: OutputStream.h:115
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
Gaudi::Property< ItemNames > m_itemNames
Definition: OutputStream.h:41
virtual StatusCode collectObjects()
Collect all objects to be written to the output stream.
The interface implemented by the IncidentSvc service.
Definition: IIncidentSvc.h:23
bool m_fireIncidents
should I fire incidents for writing opening/closing etc? in the baseclass, always fire the incidents ...
Definition: OutputStream.h:84
Items m_optItemList
Vector of optional items to be saved to this stream.
Definition: OutputStream.h:102