The Gaudi Framework  master (ff829712)
Loading...
Searching...
No Matches
OutputStream Class Reference

A small to stream Data I/O. More...

#include </builds/gaudi/Gaudi/GaudiCommonSvc/src/PersistencySvc/OutputStream.h>

Inheritance diagram for OutputStream:
Collaboration diagram for OutputStream:

Public Types

typedef std::vector< DataStoreItem * > Items
 
typedef std::vector< std::string > ItemNames
 
typedef std::map< Gaudi::Algorithm *, ItemsAlgDependentItems
 
typedef std::map< std::string, ItemNamesAlgDependentItemNames
 
- Public Types inherited from Gaudi::Algorithm
typedef Gaudi::PluginService::Factory< IAlgorithm *(const std::string &, ISvcLocator *)> Factory
 
- Public Types inherited from extends< PropertyHolder< CommonMessaging< implements< IAlgorithm, IDataHandleHolder, IProperty, IStateful > > >, IDataHandleHolder >
using base_class
 Typedef to this class.
 
using extend_interfaces_base
 Typedef to the base of this class.
 
- Public Types inherited from PropertyHolder< CommonMessaging< implements< IAlgorithm, IDataHandleHolder, IProperty, IStateful > > >
using PropertyHolderImpl
 Typedef used to refer to this class from derived classes, as in.
 
- Public Types inherited from CommonMessaging< implements< IAlgorithm, IDataHandleHolder, IProperty, IStateful > >
using base_class
 
- Public Types inherited from extend_interfaces< Interfaces... >
using ext_iids
 take union of the ext_iids of all Interfaces...
 

Public Member Functions

StatusCode start () override
 Start OutputStream.
 
StatusCode initialize () override
 Initialize OutputStream.
 
StatusCode finalize () override
 Terminate OutputStream.
 
StatusCode execute () override
 Working entry point.
 
virtual StatusCode connectConversionSvc ()
 
virtual bool collect (IRegistry *dir, int level)
 Store agent's classback.
 
virtual StatusCode collectObjects ()
 Collect all objects to be written to the output stream.
 
void clearSelection ()
 Clear list of selected objects.
 
- Public Member Functions inherited from Algorithm
 LegacyAlgorithmAdapter (std::string name, ISvcLocator *svcloc, std::string version=PACKAGE_VERSION)
 
- Public Member Functions inherited from Gaudi::details::LegacyAlgorithmAdapter
 LegacyAlgorithmAdapter (std::string name, ISvcLocator *svcloc, std::string version=PACKAGE_VERSION)
 
const EventContextgetContext () const
 
bool isExecuted () const
 Has this algorithm been executed since the last reset?
 
void setExecuted (bool state) const
 Set the executed flag to the specified state.
 
bool filterPassed () const
 Did this algorithm pass or fail its filter criterion for the last event?
 
void setFilterPassed (bool state) const
 Set the filter passed flag to the specified state.
 
- Public Member Functions inherited from Gaudi::Algorithm
 Algorithm (std::string name, ISvcLocator *svcloc, std::string version=PACKAGE_VERSION)
 Constructor.
 
StatusCode sysStart () override
 Reinitialization method invoked by the framework.
 
StatusCode sysInitialize () override
 Initialization method invoked by the framework.
 
StatusCode sysReinitialize () override
 Reinitialization method invoked by the framework.
 
StatusCode sysRestart () override
 Restart method invoked by the framework.
 
StatusCode sysExecute (const EventContext &ctx) override
 The actions to be performed by the algorithm on an event.
 
StatusCode sysStop () override
 System stop.
 
StatusCode sysFinalize () override
 System finalization.
 
const std::string & name () const override
 The identifying name of the algorithm object.
 
const Gaudi::StringKeynameKey () const override
 
const std::string & type () const override
 The type of the algorithm object.
 
void setType (std::string type) override
 
const std::string & version () const override
 
unsigned int index () const override
 
StatusCode configure () override
 Dummy implementation of IStateful::configure() method.
 
StatusCode terminate () override
 Dummy implementation of IStateful::terminate() method.
 
StatusCode initialize () override
 the default (empty) implementation of IStateful::initialize() method
 
StatusCode start () override
 the default (empty) implementation of IStateful::start() method
 
StatusCode stop () override
 the default (empty) implementation of IStateful::stop() method
 
StatusCode finalize () override
 the default (empty) implementation of IStateful::finalize() method
 
StatusCode reinitialize () override
 the default (empty) implementation of IStateful::reinitialize() method
 
StatusCode restart () override
 the default (empty) implementation of IStateful::restart() method
 
Gaudi::StateMachine::State FSMState () const override
 returns the current state of the algorithm
 
Gaudi::StateMachine::State targetFSMState () const override
 returns the state the algorithm will be in after the ongoing transition
 
bool isEnabled () const override
 Is this algorithm enabled or disabled?
 
bool isSequence () const override
 Are we a Sequence?
 
unsigned int errorCount () const
 Get the number of failures of the algorithm.
 
SmartIF< IServiceservice (std::string_view name, const bool createIf=true, const bool quiet=false) const
 Return a pointer to the service identified by name (or "type/name")
 
template<class T>
SmartIF< T > service (std::string_view name, bool createIf=true, bool quiet=false) const
 
SmartIF< IAuditorSvc > & auditorSvc () const
 The standard auditor service.May not be invoked before sysInitialize() has been invoked.
 
SmartIF< IChronoStatSvc > & chronoSvc () const
 The standard Chrono & Stat service, Return a pointer to the service if present.
 
SmartIF< IDataProviderSvc > & detSvc () const
 The standard detector data service.
 
SmartIF< IConversionSvc > & detCnvSvc () const
 The standard detector data persistency conversion service.
 
SmartIF< IDataProviderSvc > & eventSvc () const
 The standard event data service.
 
SmartIF< IDataProviderSvc > & evtSvc () const
 shortcut for method eventSvc
 
SmartIF< IConversionSvc > & eventCnvSvc () const
 The standard event data persistency conversion service.
 
SmartIF< IHistogramSvc > & histoSvc () const
 The standard histogram service.
 
SmartIF< INTupleSvc > & ntupleSvc () const
 The standard N tuple service.
 
SmartIF< IRndmGenSvc > & randSvc () const
 The standard RandomGen service, Return a pointer to the service if present.
 
SmartIF< IToolSvc > & toolSvc () const
 The standard ToolSvc service, Return a pointer to the service if present.
 
SmartIF< IExceptionSvc > & exceptionSvc () const
 Get the exception Service.
 
SmartIF< IAlgContextSvc > & contextSvc () const
 get Algorithm Context Service
 
SmartIF< ITimelineSvc > & timelineSvc () const
 
SmartIF< ISvcLocator > & serviceLocator () const override
 The standard service locator.
 
SmartIF< ISvcLocator > & svcLoc () const
 shortcut for method serviceLocator
 
SmartIF< IHiveWhiteBoard > & whiteboard () const
 
SmartIF< IAlgExecStateSvc > & algExecStateSvc () const
 
bool registerContext () const
 register for Algorithm Context Service?
 
template<class T>
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, ToolHandle< T > &hndl, const std::string &doc="none")
 
template<class T>
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, ToolHandleArray< T > &hndlArr, const std::string &doc="none")
 
SmartIF< IMonitorSvc > & monitorSvc () const
 Access the monitor service.
 
template<class T>
void declareInfo (const std::string &name, const T &var, const std::string &desc) const
 Declare monitoring information.
 
void declareInfo (const std::string &name, const std::string &format, const void *var, int size, const std::string &desc) const
 Declare monitoring information (special case)
 
void acceptDHVisitor (IDataHandleVisitor *) const override
 
void registerTool (IAlgTool *tool) const
 
void deregisterTool (IAlgTool *tool) const
 
template<class T>
StatusCode declareTool (ToolHandle< T > &handle, bool createIf=true)
 
template<class T>
StatusCode declareTool (ToolHandle< T > &handle, const std::string &toolTypeAndName, bool createIf=true)
 
template<class T>
void addToolsArray (ToolHandleArray< T > &hndlArr)
 
const std::vector< IAlgTool * > & tools () const
 
bool isAsynchronous () const
 
void setAsynchronous (bool value)
 
unsigned int cardinality () const override
 Return the cardinality.
 
const std::vector< std::string > & neededResources () const override
 
AlgExecStateRef execState (const EventContext &ctx) const override
 get the AlgExecStateRef of current algorithm Actually a small wrapper around it, thus the plain object return type
 
std::ostream & toControlFlowExpression (std::ostream &os) const override
 Produce string represention of the control flow expression.
 
- Public Member Functions inherited from DataHandleHolderBase< PropertyHolder< CommonMessaging< implements< IAlgorithm, IDataHandleHolder, IProperty, IStateful > > > >
std::vector< Gaudi::DataHandle * > inputHandles () const override
 
std::vector< Gaudi::DataHandle * > outputHandles () const override
 
virtual const DataObjIDCollextraInputDeps () const override
 
virtual const DataObjIDCollextraOutputDeps () const override
 
void declare (Gaudi::DataHandle &handle) override
 
void renounce (Gaudi::DataHandle &handle) override
 
bool renounceInput (const DataObjID &id) override
 
const DataObjIDCollinputDataObjs () const override
 
const DataObjIDColloutputDataObjs () const override
 
void addDependency (const DataObjID &id, const Gaudi::DataHandle::Mode &mode) override
 
- Public Member Functions inherited from extends< PropertyHolder< CommonMessaging< implements< IAlgorithm, IDataHandleHolder, IProperty, IStateful > > >, IDataHandleHolder >
void const * i_cast (const InterfaceID &tid) const override
 Implementation of IInterface::i_cast.
 
StatusCode queryInterface (const InterfaceID &ti, void **pp) override
 Implementation of IInterface::queryInterface.
 
std::vector< std::string > getInterfaceNames () const override
 Implementation of IInterface::getInterfaceNames.
 
- Public Member Functions inherited from PropertyHolder< CommonMessaging< implements< IAlgorithm, IDataHandleHolder, IProperty, IStateful > > >
StatusCode setProperty (const Gaudi::Details::PropertyBase &p)
 Set the property from a property.
 
StatusCode setProperty (const std::string &name, const char *v)
 Special case for string literals.
 
StatusCode setProperty (const std::string &name, const std::string &v)
 Special case for std::string.
 
StatusCode setProperty (const std::string &name, const TYPE &value)
 set the property form the value
 
 PropertyHolder ()=default
 
Gaudi::Details::PropertyBasedeclareProperty (Gaudi::Details::PropertyBase &prop)
 Declare a property.
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, TYPE &value, const std::string &doc="none")
 Helper to wrap a regular data member and use it as a regular property.
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, Gaudi::Property< TYPE, VERIFIER, HANDLERS > &prop, const std::string &doc="none")
 Declare a PropertyBase instance setting name and documentation.
 
Gaudi::Details::PropertyBasedeclareRemoteProperty (const std::string &name, IProperty *rsvc, const std::string &rname="")
 Declare a remote property.
 
StatusCode setProperty (const std::string &name, const Gaudi::Details::PropertyBase &p) override
 set the property from another property with a different name
 
StatusCode setProperty (const std::string &s) override
 set the property from the formatted string
 
StatusCode setProperty (const Gaudi::Details::PropertyBase &p)
 Set the property from a property.
 
StatusCode setProperty (const std::string &name, const char *v)
 Special case for string literals.
 
StatusCode setProperty (const std::string &name, const std::string &v)
 Special case for std::string.
 
StatusCode setProperty (const std::string &name, const TYPE &value)
 set the property form the value
 
StatusCode setPropertyRepr (const std::string &n, const std::string &r) override
 set the property from name and value string representation
 
StatusCode getProperty (Gaudi::Details::PropertyBase *p) const override
 get the property
 
const Gaudi::Details::PropertyBasegetProperty (std::string_view name) const override
 get the property by name
 
StatusCode getProperty (std::string_view n, std::string &v) const override
 convert the property to the string
 
const std::vector< Gaudi::Details::PropertyBase * > & getProperties () const override
 get all properties
 
bool hasProperty (std::string_view name) const override
 Return true if we have a property with the given name.
 
Gaudi::Details::PropertyBaseproperty (std::string_view name) const
 \fixme property and bindPropertiesTo should be protected
 
void bindPropertiesTo (Gaudi::Interfaces::IOptionsSvc &optsSvc)
 
 PropertyHolder (const PropertyHolder &)=delete
 
PropertyHolderoperator= (const PropertyHolder &)=delete
 
- Public Member Functions inherited from CommonMessaging< implements< IAlgorithm, IDataHandleHolder, IProperty, IStateful > >
MSG::Level msgLevel () const
 get the cached level (originally extracted from the embedded MsgStream)
 
bool msgLevel (MSG::Level lvl) const
 get the output level from the embedded MsgStream
 
- Public Member Functions inherited from CommonMessagingBase
virtual ~CommonMessagingBase ()=default
 Virtual destructor.
 
const SmartIF< IMessageSvc > & msgSvc () const
 The standard message service.
 
MsgStreammsgStream () const
 Return an uninitialized MsgStream.
 
MsgStreammsgStream (const MSG::Level level) const
 Predefined configurable message stream for the efficient printouts.
 
MsgStreamalways () const
 shortcut for the method msgStream(MSG::ALWAYS)
 
MsgStreamfatal () const
 shortcut for the method msgStream(MSG::FATAL)
 
MsgStreamerr () const
 shortcut for the method msgStream(MSG::ERROR)
 
MsgStreamerror () const
 shortcut for the method msgStream(MSG::ERROR)
 
MsgStreamwarning () const
 shortcut for the method msgStream(MSG::WARNING)
 
MsgStreaminfo () const
 shortcut for the method msgStream(MSG::INFO)
 
MsgStreamdebug () const
 shortcut for the method msgStream(MSG::DEBUG)
 
MsgStreamverbose () const
 shortcut for the method msgStream(MSG::VERBOSE)
 
MsgStreammsg () const
 shortcut for the method msgStream(MSG::INFO)
 

Protected Member Functions

Gaudi::AlgorithmdecodeAlgorithm (const std::string &theName)
 Decode a single algorithm name.
 
void decodeAlgorithms (Gaudi::Property< std::vector< std::string > > &theNames, std::vector< Gaudi::Algorithm * > &theAlgs)
 Decode specified list of Algorithms.
 
bool isEventAccepted () const
 Test whether this event should be output.
 
DataStoreItemfindItem (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.
 
virtual bool hasInput () const
 Tell if the instance has been configured with input items or not.
 
- Protected Member Functions inherited from Gaudi::details::LegacyAlgorithmAdapter
bool isReEntrant () const override
 
- Protected Member Functions inherited from Gaudi::Algorithm
std::vector< IAlgTool * > & tools ()
 
bool isInitialized () const override
 Has the Algorithm already been initialized?
 
bool isFinalized () const override
 Has the Algorithm already been finalized?
 
void setIndex (const unsigned int &idx) override
 set instantiation index of Alg
 
bool isReEntrant () const override
 
- Protected Member Functions inherited from DataHandleHolderBase< PropertyHolder< CommonMessaging< implements< IAlgorithm, IDataHandleHolder, IProperty, IStateful > > > >
void initDataHandleHolder ()
 initializes all handles - called by the sysInitialize method of any descendant of this
 
- Protected Member Functions inherited from CommonMessaging< implements< IAlgorithm, IDataHandleHolder, IProperty, IStateful > >
MSG::Level setUpMessaging () const
 Set up local caches.
 
MSG::Level resetMessaging ()
 Reinitialize internal states.
 
void updateMsgStreamOutputLevel (int level)
 Update the output level of the cached MsgStream.
 

Protected Attributes

Gaudi::Property< ItemNamesm_itemNames { this, "ItemList", {}, "vector of item names to be saved to this stream" }
 
Gaudi::Property< ItemNamesm_optItemNames
 
Gaudi::Property< AlgDependentItemNamesm_algDependentItemList
 
Gaudi::Property< bool > m_doPreLoad
 
Gaudi::Property< bool > m_doPreLoadOpt
 
Gaudi::Property< std::string > m_output { this, "Output", {}, "name of the output file specification" }
 
Gaudi::Property< std::string > m_outputName { this, "OutputFile", {}, "name of the output file" }
 
Gaudi::Property< std::string > m_storeName
 
Gaudi::Property< std::string > m_persName
 
Gaudi::Property< std::vector< std::string > > m_acceptNames
 
Gaudi::Property< std::vector< std::string > > m_requireNames
 
Gaudi::Property< std::vector< std::string > > m_vetoNames
 
Gaudi::Property< bool > m_verifyItems
 
bool m_fireIncidents = true
 should I fire incidents for writing opening/closing etc?
 
SmartIF< IIncidentSvcm_incidentSvc
 Reference to the incident service.
 
std::string m_outputType = "UPDATE"
 Output type: NEW(NEW,CREATE,WRITE,RECREATE), UPDATE)
 
SmartIF< IDataProviderSvcm_pDataProvider
 Keep reference to the data provider service.
 
SmartIF< IDataManagerSvcm_pDataManager
 Keep reference to the data manager service.
 
SmartIF< IConversionSvcm_pConversionSvc
 Keep reference to the data conversion service.
 
DataStoreItemm_currentItem
 Keep track of the current item.
 
Items m_itemList
 Vector of items to be saved to this stream.
 
Items m_optItemList
 Vector of optional items to be saved to this stream.
 
AlgDependentItems m_algDependentItems
 Items to be saved for specific algorithms.
 
IDataSelector m_objects
 Collection of objects being selected.
 
int m_events
 Number of events written to this output stream.
 
std::vector< Gaudi::Algorithm * > m_acceptAlgs
 Vector of Algorithms that this stream accepts.
 
std::vector< Gaudi::Algorithm * > m_requireAlgs
 Vector of Algorithms that this stream requires.
 
std::vector< Gaudi::Algorithm * > m_vetoAlgs
 Vector of Algorithms that this stream is vetoed by.
 
- Protected Attributes inherited from Gaudi::Algorithm
std::unique_ptr< IDataHandleVisitorm_updateDataHandles
 Hook for for derived classes to provide a custom visitor for data handles.
 
- Protected Attributes inherited from DataHandleHolderBase< PropertyHolder< CommonMessaging< implements< IAlgorithm, IDataHandleHolder, IProperty, IStateful > > > >
DataObjIDColl m_inputDataObjs
 
DataObjIDColl m_outputDataObjs
 

Private Member Functions

void clearItems (Items &itms)
 Clear item list.
 
void addItem (Items &itms, const std::string &descriptor)
 Add item to output streamer list.
 
IDataSelectorselectedObjects ()
 Return the list of selected objects.
 
StatusCode collectFromSubTree (DataObject *)
 

Additional Inherited Members

- Public Attributes inherited from Gaudi::Algorithm
friend AlgorithmManager
 

Detailed Description

A small to stream Data I/O.

Author: M.Frank author R. Lambert Version: 1.0

Definition at line 37 of file OutputStream.h.

Member Typedef Documentation

◆ AlgDependentItemNames

typedef std::map<std::string, ItemNames> OutputStream::AlgDependentItemNames

Definition at line 42 of file OutputStream.h.

◆ AlgDependentItems

Definition at line 41 of file OutputStream.h.

◆ ItemNames

typedef std::vector<std::string> OutputStream::ItemNames

Definition at line 40 of file OutputStream.h.

◆ Items

typedef std::vector<DataStoreItem*> OutputStream::Items

Definition at line 39 of file OutputStream.h.

Member Function Documentation

◆ addItem()

void OutputStream::addItem ( Items & itms,
const std::string & descriptor )
private

Add item to output streamer list.

Definition at line 343 of file OutputStream.cpp.

343 {
344 int level = 0;
345 auto sep = descriptor.rfind( "#" );
346 std::string obj_path = descriptor.substr( 0, sep );
347 if ( sep != std::string::npos ) {
348 std::string slevel = descriptor.substr( sep + 1 );
349 level = ( slevel == "*" ) ? 9999999 : std::stoi( slevel );
350 }
351 if ( m_verifyItems ) {
352 size_t idx = obj_path.find( "/", 1 );
353 while ( idx != std::string::npos ) {
354 std::string sub_item = obj_path.substr( 0, idx );
355 if ( !findItem( sub_item ) ) addItem( itms, sub_item + "#1" );
356 idx = obj_path.find( "/", idx + 1 );
357 }
358 }
359 itms.push_back( new DataStoreItem( obj_path, level ) );
360 const auto& item = itms.back();
362 debug() << "Adding OutputStream item " << item->path() << " with " << item->depth() << " level(s)." << endmsg;
363}
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition MsgStream.h:198
#define ON_DEBUG
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
DataStoreItem * findItem(const std::string &path)
Find single item identified by its path (exact match)
Gaudi::Property< bool > m_verifyItems
void addItem(Items &itms, const std::string &descriptor)
Add item to output streamer list.

◆ clearItems()

void OutputStream::clearItems ( Items & itms)
private

Clear item list.

Definition at line 326 of file OutputStream.cpp.

326 {
327 for ( auto& i : itms ) delete i;
328 itms.clear();
329}

◆ clearSelection()

void OutputStream::clearSelection ( )

Clear list of selected objects.

Definition at line 323 of file OutputStream.cpp.

323{ m_objects.clear(); }
IDataSelector m_objects
Collection of objects being selected.

◆ collect()

bool OutputStream::collect ( IRegistry * dir,
int level )
virtual

Store agent's classback.

Definition at line 234 of file OutputStream.cpp.

234 {
235 if ( level < m_currentItem->depth() ) {
236 if ( dir->object() ) {
237 /*
238 std::cout << "Analysing ("
239 << dir->name()
240 << ") Object:"
241 << ((dir->object()==0) ? "UNLOADED" : "LOADED")
242 << std::endl;
243 */
244 m_objects.push_back( dir->object() );
245 return true;
246 }
247 }
248 return false;
249}
virtual DataObject * object() const =0
Retrieve object behind the link.

◆ collectFromSubTree()

StatusCode OutputStream::collectFromSubTree ( DataObject * pObj)
private

Definition at line 518 of file OutputStream.cpp.

518 {
519 return m_pDataManager->traverseSubTree( pObj,
520 [this]( IRegistry* r, int level ) { return this->collect( r, level ); } );
521}
SmartIF< IDataManagerSvc > m_pDataManager
Keep reference to the data manager service.
virtual bool collect(IRegistry *dir, int level)
Store agent's classback.

◆ collectObjects()

StatusCode OutputStream::collectObjects ( )
virtual

Collect all objects to be written to the output stream.

Reimplemented in CopyInputStream, and InputCopyStream.

Definition at line 252 of file OutputStream.cpp.

252 {
253 StatusCode status = StatusCode::SUCCESS;
254
255 // Traverse the tree and collect the requested objects
256 for ( auto& i : m_itemList ) {
257 DataObject* obj = nullptr;
258 m_currentItem = i;
259 StatusCode iret = m_pDataProvider->retrieveObject( m_currentItem->path(), obj );
260 if ( iret.isSuccess() ) {
261 iret = collectFromSubTree( obj );
262 if ( !iret.isSuccess() ) status = iret;
263 } else {
264 error() << "Cannot write mandatory object(s) (Not found) " << m_currentItem->path() << endmsg;
265 status = iret;
266 }
267 }
268
269 // Traverse the tree and collect the requested objects (tolerate missing items here)
270 for ( auto& i : m_optItemList ) {
271 DataObject* obj = nullptr;
272 m_currentItem = i;
273 StatusCode iret = m_pDataProvider->retrieveObject( m_currentItem->path(), obj );
274 if ( iret.isSuccess() ) iret = collectFromSubTree( obj );
275 if ( !iret.isSuccess() ) {
277 debug() << "Ignore request to write non-mandatory object(s) " << m_currentItem->path() << endmsg;
278 }
279 }
280
281 // Collect objects dependent on particular algorithms
282 for ( const auto& iAlgItems : m_algDependentItems ) {
283 auto alg = iAlgItems.first;
284 const Items& items = iAlgItems.second;
285 if ( passed( alg ) ) {
287 debug() << "Algorithm '" << alg->name() << "' fired. Adding " << items << endmsg;
288 for ( const auto& i : items ) {
289 DataObject* obj = nullptr;
290 m_currentItem = i;
291 StatusCode iret = m_pDataProvider->retrieveObject( m_currentItem->path(), obj );
292 if ( iret.isSuccess() ) {
293 iret = collectFromSubTree( obj );
294 if ( !iret.isSuccess() ) status = iret;
295 } else {
296 error() << "Cannot write mandatory (algorithm dependent) object(s) (Not found) " << m_currentItem->path()
297 << endmsg;
298 status = iret;
299 }
300 }
301 }
302 }
303
304 if ( status.isSuccess() ) {
305 // Remove duplicates from the list of objects, preserving the order in the list
306 std::set<DataObject*> unique;
307 std::vector<DataObject*> tmp; // temporary vector with the reduced list
308 tmp.reserve( m_objects.size() );
309 for ( auto& o : m_objects ) {
310 if ( !unique.count( o ) ) {
311 // if the pointer is not in the set, add it to both the set and the temporary vector
312 unique.insert( o );
313 tmp.push_back( o );
314 }
315 }
316 m_objects.swap( tmp ); // swap the data of the two vectors
317 }
318
319 return status;
320}
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
Items m_optItemList
Vector of optional items to be saved to this stream.
Items m_itemList
Vector of items to be saved to this stream.
StatusCode collectFromSubTree(DataObject *)
std::vector< DataStoreItem * > Items
SmartIF< IDataProviderSvc > m_pDataProvider
Keep reference to the data provider service.
AlgDependentItems m_algDependentItems
Items to be saved for specific algorithms.
DataStoreItem * m_currentItem
Keep track of the current item.
bool isSuccess() const
Definition StatusCode.h:314
constexpr static const auto SUCCESS
Definition StatusCode.h:99

◆ connectConversionSvc()

StatusCode OutputStream::connectConversionSvc ( )
virtual

Definition at line 366 of file OutputStream.cpp.

366 {
367 StatusCode status = StatusCode::FAILURE;
368 // Get output file from input
369 std::string dbType, svc, shr;
370 for ( auto attrib : Gaudi::Utils::AttribStringParser( m_output ) ) {
371 const std::string& tag = attrib.tag;
372 const std::string& val = attrib.value;
373 switch ( ::toupper( tag[0] ) ) {
374 case 'D':
375 m_outputName = val;
376 break;
377 case 'T':
378 dbType = val;
379 break;
380 case 'S':
381 switch ( ::toupper( tag[1] ) ) {
382 case 'V':
383 svc = val;
384 break;
385 case 'H':
386 shr = "YES";
387 break;
388 }
389 break;
390 case 'O': // OPT='<NEW<CREATE,WRITE,RECREATE>, UPDATE>'
391 switch ( ::toupper( val[0] ) ) {
392 case 'R':
393 if ( ::strncasecmp( val.c_str(), "RECREATE", 3 ) == 0 )
394 m_outputType = "RECREATE";
395 else if ( ::strncasecmp( val.c_str(), "READ", 3 ) == 0 )
396 m_outputType = "READ";
397 break;
398 case 'C':
399 case 'N':
400 case 'W':
401 m_outputType = "NEW";
402 break;
403 case 'U':
404 m_outputType = "UPDATE";
405 break;
406 default:
407 m_outputType = "???";
408 break;
409 }
410 break;
411 default:
412 break;
413 }
414 }
415 if ( !shr.empty() ) m_outputType += "|SHARED";
416 // Get access to the default Persistency service
417 // The default service is the same for input as for output.
418 // If this is not desired, then a specialized OutputStream must overwrite
419 // this value.
420 if ( !dbType.empty() || !svc.empty() ) {
421 std::string typ = !dbType.empty() ? dbType : svc;
422 auto ipers = serviceLocator()->service<IPersistencySvc>( m_persName );
423 if ( !ipers ) {
424 fatal() << "Unable to locate IPersistencySvc interface of " << m_persName << endmsg;
425 return StatusCode::FAILURE;
426 }
427 IConversionSvc* cnvSvc = nullptr;
428 status = ipers->getService( typ, cnvSvc );
429 if ( !status.isSuccess() ) {
430 fatal() << "Unable to locate IConversionSvc interface of database type " << typ << endmsg;
431 return status;
432 }
433 // Increase reference count and keep service.
434 m_pConversionSvc = cnvSvc;
435 } else {
436 fatal() << "Unable to locate IConversionSvc interface (Unknown technology) " << endmsg
437 << "You either have to specify a technology name or a service name!" << endmsg
438 << "Please correct the job option \"" << name() << ".Output\" !" << endmsg;
439 return StatusCode::FAILURE;
440 }
441 return StatusCode::SUCCESS;
442}
void toupper(std::string &s)
MsgStream & fatal() const
shortcut for the method msgStream(MSG::FATAL)
SmartIF< ISvcLocator > & serviceLocator() const override
The standard service locator.
const std::string & name() const override
The identifying name of the algorithm object.
virtual SmartIF< IService > & service(const Gaudi::Utils::TypeNameString &typeName, const bool createIf=true)=0
Returns a smart pointer to a service.
SmartIF< IConversionSvc > m_pConversionSvc
Keep reference to the data conversion service.
Gaudi::Property< std::string > m_outputName
Gaudi::Property< std::string > m_persName
Gaudi::Property< std::string > m_output
std::string m_outputType
Output type: NEW(NEW,CREATE,WRITE,RECREATE), UPDATE)
constexpr static const auto FAILURE
Definition StatusCode.h:100

◆ decodeAlgorithm()

Gaudi::Algorithm * OutputStream::decodeAlgorithm ( const std::string & theName)
protected

Decode a single algorithm name.

Definition at line 444 of file OutputStream.cpp.

444 {
445 Gaudi::Algorithm* theAlgorithm = nullptr;
446
447 auto theAlgMgr = serviceLocator()->as<IAlgManager>();
448 if ( theAlgMgr ) {
449 // Check whether the supplied name corresponds to an existing
450 // Algorithm object.
451 SmartIF<IAlgorithm>& theIAlg = theAlgMgr->algorithm( theName );
452 if ( theIAlg ) {
453 try {
454 theAlgorithm = dynamic_cast<Gaudi::Algorithm*>( theIAlg.get() );
455 } catch ( ... ) {
456 // do nothing
457 }
458 }
459 } else {
460 fatal() << "Can't locate ApplicationMgr!!!" << endmsg;
461 }
462
463 if ( !theAlgorithm ) { warning() << "Failed to decode Algorithm name " << theName << endmsg; }
464
465 return theAlgorithm;
466}
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
SmartIF< IFace > as()
Definition ISvcLocator.h:64
TYPE * get() const
Get interface pointer.
Definition SmartIF.h:82

◆ decodeAlgorithms()

void OutputStream::decodeAlgorithms ( Gaudi::Property< std::vector< std::string > > & theNames,
std::vector< Gaudi::Algorithm * > & theAlgs )
protected

Decode specified list of Algorithms.

Definition at line 468 of file OutputStream.cpp.

469 {
470 // Reset the list of Algorithms
471 theAlgs.clear();
472
473 // Build the list of Algorithms from the names list
474 for ( const auto& it : theNames.value() ) {
475
476 auto theAlgorithm = decodeAlgorithm( it );
477 if ( theAlgorithm ) {
478 // Check that the specified algorithm doesn't already exist in the list
479 if ( std::find( std::begin( theAlgs ), std::end( theAlgs ), theAlgorithm ) == std::end( theAlgs ) ) {
480 theAlgorithm->addRef();
481 theAlgs.push_back( theAlgorithm );
482 }
483 } else {
484 info() << it << " doesn't exist - ignored" << endmsg;
485 }
486 }
487}
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
const ValueType & value() const
Definition Property.h:229
Gaudi::Algorithm * decodeAlgorithm(const std::string &theName)
Decode a single algorithm name.

◆ execute()

StatusCode OutputStream::execute ( )
overridevirtual

Working entry point.

Implements Algorithm.

Reimplemented in RecordStream, RunRecordStream, and SequentialOutputStream.

Definition at line 162 of file OutputStream.cpp.

162 {
163 // Clear any previously existing item list
165 // Test whether this event should be output
166 if ( isEventAccepted() ) {
167 const StatusCode sc = writeObjects();
169 ++m_events;
170 if ( sc.isSuccess() && m_fireIncidents ) {
171 m_incidentSvc->fireIncident( Incident( m_outputName, IncidentType::WroteToOutputFile ) );
172 } else if ( m_fireIncidents ) {
173 m_incidentSvc->fireIncident( Incident( m_outputName, IncidentType::FailOutputFile ) );
174 }
175 return sc;
176 }
177 return StatusCode::SUCCESS;
178}
void clearSelection()
Clear list of selected objects.
int m_events
Number of events written to this output stream.
bool m_fireIncidents
should I fire incidents for writing opening/closing etc?
virtual StatusCode writeObjects()
Select the different objects and write them to file.
bool isEventAccepted() const
Test whether this event should be output.
SmartIF< IIncidentSvc > m_incidentSvc
Reference to the incident service.

◆ finalize()

StatusCode OutputStream::finalize ( )
override

Terminate OutputStream.

Definition at line 149 of file OutputStream.cpp.

149 {
150 info() << "Events output: " << m_events << endmsg;
151 if ( m_fireIncidents ) m_incidentSvc->fireIncident( Incident( m_outputName, IncidentType::EndOutputFile ) );
152 m_incidentSvc.reset();
153 m_pDataProvider.reset();
154 m_pDataManager.reset();
155 m_pConversionSvc.reset();
158 return StatusCode::SUCCESS;
159}
void clearItems(Items &itms)
Clear item list.

◆ findItem()

DataStoreItem * OutputStream::findItem ( const std::string & path)
protected

Find single item identified by its path (exact match)

Definition at line 332 of file OutputStream.cpp.

332 {
333 auto matchPath = [&]( const DataStoreItem* i ) { return i->path() == path; };
334 auto i = std::find_if( m_itemList.begin(), m_itemList.end(), matchPath );
335 if ( i == m_itemList.end() ) {
336 i = std::find_if( m_optItemList.begin(), m_optItemList.end(), matchPath );
337 if ( i == m_optItemList.end() ) return nullptr;
338 }
339 return *i;
340}
GAUDI_API std::string path(const AIDA::IBaseHistogram *aida)
get the path in THS for AIDA histogram

◆ hasInput()

bool OutputStream::hasInput ( ) const
protectedvirtual

Tell if the instance has been configured with input items or not.

Reimplemented in CopyInputStream, and InputCopyStream.

Definition at line 514 of file OutputStream.cpp.

514 {
515 return !( m_itemNames.empty() && m_optItemNames.empty() && m_algDependentItemList.empty() );
516}
Gaudi::Property< ItemNames > m_optItemNames
Gaudi::Property< ItemNames > m_itemNames
Gaudi::Property< AlgDependentItemNames > m_algDependentItemList

◆ initialize()

StatusCode OutputStream::initialize ( )
override

Initialize OutputStream.

Definition at line 54 of file OutputStream.cpp.

54 {
55 auto status = Algorithm::initialize();
56 if ( status.isFailure() ) return status;
57
58 if ( m_output.empty() ) {
59 fatal() << "property Output not set. OutputStream instances require an output" << endmsg;
61 }
62
63 // Reset the number of events written
64 m_events = 0;
65 // Get access to the DataManagerSvc
67 if ( !m_pDataManager ) {
68 fatal() << "Unable to locate IDataManagerSvc interface" << endmsg;
70 }
71 // Get access to the IncidentService
72 m_incidentSvc = serviceLocator()->service( "IncidentSvc" );
73 if ( !m_incidentSvc ) {
74 warning() << "Error retrieving IncidentSvc." << endmsg;
76 }
77 // Get access to the assigned data service
79 if ( !m_pDataProvider ) {
80 fatal() << "Unable to locate IDataProviderSvc interface of " << m_storeName << endmsg;
82 }
83 if ( hasInput() ) {
84 StatusCode status = connectConversionSvc();
85 if ( !status.isSuccess() ) {
86 fatal() << "Unable to connect to conversion service." << endmsg;
87 if ( m_outputName != "" && m_fireIncidents )
88 m_incidentSvc->fireIncident( Incident( m_outputName, IncidentType::FailOutputFile ) );
89 return status;
90 }
91 }
92
93 // Clear the list with optional items
95 // Clear the item list
97
98 // Take the new item list from the properties.
99 ON_DEBUG debug() << "ItemList : " << m_itemNames.value() << endmsg;
100 for ( const auto& i : m_itemNames ) addItem( m_itemList, i );
101
102 // Take the new item list from the properties.
103 ON_DEBUG debug() << "OptItemList : " << m_optItemNames.value() << endmsg;
104 for ( const auto& i : m_optItemNames ) addItem( m_optItemList, i );
105
106 // prepare the algorithm selected dependent locations
107 ON_DEBUG debug() << "AlgDependentItemList : " << m_algDependentItemList.value() << endmsg;
108 for ( const auto& a : m_algDependentItemList ) {
109 // Get the algorithm pointer
110 auto theAlgorithm = decodeAlgorithm( a.first );
111 if ( theAlgorithm ) {
112 // Get the item list for this alg
113 auto& items = m_algDependentItems[theAlgorithm];
114 // Clear the list for this alg
115 clearItems( items );
116 // fill the list again
117 for ( const auto& i : a.second ) addItem( items, i );
118 }
119 }
120
121 // Take the item list to the data service preload list.
122 if ( m_doPreLoad ) {
123 for ( auto& j : m_itemList ) m_pDataProvider->addPreLoadItem( *j ).ignore();
124 // Not working: bad reference counting! pdataSvc->release();
125 }
126
127 if ( m_doPreLoadOpt ) {
128 for ( auto& j : m_optItemList ) m_pDataProvider->addPreLoadItem( *j ).ignore();
129 }
130 info() << "Data source: " << m_storeName.value() << " output: " << m_output.value() << endmsg;
131
132 // Decode the accept, required and veto Algorithms. The logic is the following:
133 // a. The event is accepted if all lists are empty.
134 // b. The event is provisionally accepted if any Algorithm in the accept list
135 // has been executed and has indicated that its filter is passed. This
136 // provisional acceptance can be overridden by the other lists.
137 // c. The event is rejected unless all Algorithms in the required list have
138 // been executed and have indicated that their filter passed.
139 // d. The event is rejected if any Algorithm in the veto list has been
140 // executed and has indicated that its filter has passed.
141 m_acceptNames.useUpdateHandler();
142 m_requireNames.useUpdateHandler();
143 m_vetoNames.useUpdateHandler();
144
145 return StatusCode::SUCCESS;
146}
StatusCode initialize() override
the default (empty) implementation of IStateful::initialize() method
Definition Algorithm.h:175
Gaudi::Property< std::vector< std::string > > m_requireNames
Gaudi::Property< bool > m_doPreLoadOpt
virtual StatusCode connectConversionSvc()
Gaudi::Property< std::vector< std::string > > m_acceptNames
Gaudi::Property< bool > m_doPreLoad
virtual bool hasInput() const
Tell if the instance has been configured with input items or not.
Gaudi::Property< std::string > m_storeName
Gaudi::Property< std::vector< std::string > > m_vetoNames

◆ isEventAccepted()

bool OutputStream::isEventAccepted ( ) const
protected

Test whether this event should be output.

Definition at line 489 of file OutputStream.cpp.

489 {
490 // Loop over all Algorithms in the accept list to see
491 // whether any have been executed and have their filter
492 // passed flag set. Any match causes the event to be
493 // provisionally accepted.
494 bool result = m_acceptAlgs.empty() || std::any_of( std::begin( m_acceptAlgs ), std::end( m_acceptAlgs ), passed );
495
496 // Loop over all Algorithms in the required list to see
497 // whether all have been executed and have their filter
498 // passed flag set. Any mismatch causes the event to be
499 // rejected.
500 if ( result && !m_requireAlgs.empty() ) {
501 result = std::all_of( std::begin( m_requireAlgs ), std::end( m_requireAlgs ), passed );
502 }
503
504 // Loop over all Algorithms in the veto list to see
505 // whether any have been executed and have their filter
506 // passed flag set. Any match causes the event to be
507 // rejected.
508 if ( result && !m_vetoAlgs.empty() ) {
509 result = std::none_of( std::begin( m_vetoAlgs ), std::end( m_vetoAlgs ), passed );
510 }
511 return result;
512}
std::vector< Gaudi::Algorithm * > m_vetoAlgs
Vector of Algorithms that this stream is vetoed by.
std::vector< Gaudi::Algorithm * > m_acceptAlgs
Vector of Algorithms that this stream accepts.
std::vector< Gaudi::Algorithm * > m_requireAlgs
Vector of Algorithms that this stream requires.

◆ selectedObjects()

IDataSelector * OutputStream::selectedObjects ( )
inlineprivate

Return the list of selected objects.

Definition at line 164 of file OutputStream.h.

164{ return &m_objects; }

◆ start()

StatusCode OutputStream::start ( )
override

Start OutputStream.

Definition at line 46 of file OutputStream.cpp.

46 {
47 return Algorithm::start().andThen( [this]() {
48 // Open the output file now to ensure it is always written even if empty
49 return m_pConversionSvc->connectOutput( m_outputName, m_outputType );
50 } );
51}
StatusCode start() override
the default (empty) implementation of IStateful::start() method
Definition Algorithm.h:177
StatusCode andThen(F &&f, ARGS &&... args) const
Chain code blocks making the execution conditional a success result.
Definition StatusCode.h:163

◆ writeObjects()

StatusCode OutputStream::writeObjects ( )
protectedvirtual

Select the different objects and write them to file.

Reimplemented in SequentialOutputStream, and TagCollectionStream.

Definition at line 181 of file OutputStream.cpp.

181 {
182 // Connect the output file to the service
183 StatusCode status = collectObjects();
184 if ( status.isSuccess() ) {
186 if ( sel->begin() != sel->end() ) {
187 status = m_pConversionSvc->connectOutput( m_outputName, m_outputType );
188 if ( status.isSuccess() ) {
189 // Now pass the collection to the persistency service
190 IOpaqueAddress* pAddress = nullptr;
191 for ( auto& j : *sel ) {
192 try {
193 const StatusCode iret = m_pConversionSvc->createRep( j, pAddress );
194 if ( !iret.isSuccess() ) {
195 status = iret;
196 continue;
197 }
198 IRegistry* pReg = j->registry();
199 pReg->setAddress( pAddress );
200 } catch ( const std::exception& excpt ) {
201 const std::string loc = ( j->registry() ? j->registry()->identifier() : "UnRegistered" );
202 fatal() << "std::exception during createRep for '" << loc << "' " << System::typeinfoName( typeid( *j ) )
203 << endmsg;
204 fatal() << excpt.what() << endmsg;
205 throw;
206 }
207 }
208 for ( auto& j : *sel ) {
209 try {
210 IRegistry* pReg = j->registry();
211 const StatusCode iret = m_pConversionSvc->fillRepRefs( pReg->address(), j );
212 if ( !iret.isSuccess() ) status = iret;
213 } catch ( const std::exception& excpt ) {
214 const std::string loc = ( j->registry() ? j->registry()->identifier() : "UnRegistered" );
215 fatal() << "std::exception during fillRepRefs for '" << loc << "'" << System::typeinfoName( typeid( *j ) )
216 << endmsg;
217 fatal() << excpt.what() << endmsg;
218 throw;
219 }
220 }
221 // Commit the data if there was no error; otherwise possibly discard
222 if ( status.isSuccess() ) {
223 status = m_pConversionSvc->commitOutput( m_outputName, true );
224 } else {
225 m_pConversionSvc->commitOutput( m_outputName, false ).ignore();
226 }
227 }
228 }
229 }
230 return status;
231}
std::vector< DataObject * > IDataSelector
This is only a placeholder to allow me compiling until the responsible guy does his work!
virtual IOpaqueAddress * address() const =0
Retrieve opaque storage address.
virtual void setAddress(IOpaqueAddress *pAddress)=0
Set/Update Opaque storage address.
virtual StatusCode collectObjects()
Collect all objects to be written to the output stream.
IDataSelector * selectedObjects()
Return the list of selected objects.
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition System.cpp:260

Member Data Documentation

◆ m_acceptAlgs

std::vector<Gaudi::Algorithm*> OutputStream::m_acceptAlgs
protected

Vector of Algorithms that this stream accepts.

Definition at line 119 of file OutputStream.h.

◆ m_acceptNames

Gaudi::Property<std::vector<std::string> > OutputStream::m_acceptNames
protected
Initial value:
{
this,
"AcceptAlgs",
{},
[this]( auto& ) { this->decodeAlgorithms( this->m_acceptNames, this->m_acceptAlgs ); },
"names of Algorithms that this stream accepts" }
void decodeAlgorithms(Gaudi::Property< std::vector< std::string > > &theNames, std::vector< Gaudi::Algorithm * > &theAlgs)
Decode specified list of Algorithms.

Definition at line 68 of file OutputStream.h.

68 {
69 this,
70 "AcceptAlgs",
71 {},
72 [this]( auto& ) { this->decodeAlgorithms( this->m_acceptNames, this->m_acceptAlgs ); },
73 "names of Algorithms that this stream accepts" };

◆ m_algDependentItemList

Gaudi::Property<AlgDependentItemNames> OutputStream::m_algDependentItemList
protected
Initial value:
{
this,
"AlgDependentItemList",
{},
"mapping between algorithm names, and a list of items for which, if the "
"algorithm in question accepted the event, they should be also stored" }

Definition at line 52 of file OutputStream.h.

52 {
53 this,
54 "AlgDependentItemList",
55 {},
56 "mapping between algorithm names, and a list of items for which, if the "
57 "algorithm in question accepted the event, they should be also stored" };

◆ m_algDependentItems

AlgDependentItems OutputStream::m_algDependentItems
protected

Items to be saved for specific algorithms.

Definition at line 112 of file OutputStream.h.

◆ m_currentItem

DataStoreItem* OutputStream::m_currentItem
protected

Keep track of the current item.

Definition at line 106 of file OutputStream.h.

◆ m_doPreLoad

Gaudi::Property<bool> OutputStream::m_doPreLoad
protected
Initial value:
{ this, "Preload", true,
"flag indicating whether data pre-loading should be performed" }

Definition at line 58 of file OutputStream.h.

58 { this, "Preload", true,
59 "flag indicating whether data pre-loading should be performed" };

◆ m_doPreLoadOpt

Gaudi::Property<bool> OutputStream::m_doPreLoadOpt
protected
Initial value:
{ this, "PreloadOptItems", false,
"flag indicating whether optional items should be preloaded" }

Definition at line 60 of file OutputStream.h.

60 { this, "PreloadOptItems", false,
61 "flag indicating whether optional items should be preloaded" };

◆ m_events

int OutputStream::m_events
protected

Number of events written to this output stream.

Definition at line 116 of file OutputStream.h.

◆ m_fireIncidents

bool OutputStream::m_fireIncidents = true
protected

should I fire incidents for writing opening/closing etc?

in the baseclass, always fire the incidents by default in e.g. RecordStream this will be set to false, and configurable

Definition at line 92 of file OutputStream.h.

◆ m_incidentSvc

SmartIF<IIncidentSvc> OutputStream::m_incidentSvc
protected

Reference to the incident service.

Definition at line 95 of file OutputStream.h.

◆ m_itemList

Items OutputStream::m_itemList
protected

Vector of items to be saved to this stream.

Definition at line 108 of file OutputStream.h.

◆ m_itemNames

Gaudi::Property<ItemNames> OutputStream::m_itemNames { this, "ItemList", {}, "vector of item names to be saved to this stream" }
protected

Definition at line 49 of file OutputStream.h.

49{ this, "ItemList", {}, "vector of item names to be saved to this stream" };

◆ m_objects

IDataSelector OutputStream::m_objects
protected

Collection of objects being selected.

Definition at line 114 of file OutputStream.h.

◆ m_optItemList

Items OutputStream::m_optItemList
protected

Vector of optional items to be saved to this stream.

Definition at line 110 of file OutputStream.h.

◆ m_optItemNames

Gaudi::Property<ItemNames> OutputStream::m_optItemNames
protected
Initial value:
{
this, "OptItemList", {}, "vector of optional item names to be saved to this stream" }

Definition at line 50 of file OutputStream.h.

50 {
51 this, "OptItemList", {}, "vector of optional item names to be saved to this stream" };

◆ m_output

Gaudi::Property<std::string> OutputStream::m_output { this, "Output", {}, "name of the output file specification" }
protected

Definition at line 62 of file OutputStream.h.

62{ this, "Output", {}, "name of the output file specification" };

◆ m_outputName

Gaudi::Property<std::string> OutputStream::m_outputName { this, "OutputFile", {}, "name of the output file" }
protected

Definition at line 63 of file OutputStream.h.

63{ this, "OutputFile", {}, "name of the output file" };

◆ m_outputType

std::string OutputStream::m_outputType = "UPDATE"
protected

Output type: NEW(NEW,CREATE,WRITE,RECREATE), UPDATE)

Definition at line 98 of file OutputStream.h.

◆ m_pConversionSvc

SmartIF<IConversionSvc> OutputStream::m_pConversionSvc
protected

Keep reference to the data conversion service.

Definition at line 104 of file OutputStream.h.

◆ m_pDataManager

SmartIF<IDataManagerSvc> OutputStream::m_pDataManager
protected

Keep reference to the data manager service.

Definition at line 102 of file OutputStream.h.

◆ m_pDataProvider

SmartIF<IDataProviderSvc> OutputStream::m_pDataProvider
protected

Keep reference to the data provider service.

Definition at line 100 of file OutputStream.h.

◆ m_persName

Gaudi::Property<std::string> OutputStream::m_persName
protected
Initial value:
{ this, "EvtConversionSvc", "EventPersistencySvc",
"name of the persistency service capable to write data from the store" }

Definition at line 66 of file OutputStream.h.

66 { this, "EvtConversionSvc", "EventPersistencySvc",
67 "name of the persistency service capable to write data from the store" };

◆ m_requireAlgs

std::vector<Gaudi::Algorithm*> OutputStream::m_requireAlgs
protected

Vector of Algorithms that this stream requires.

Definition at line 121 of file OutputStream.h.

◆ m_requireNames

Gaudi::Property<std::vector<std::string> > OutputStream::m_requireNames
protected
Initial value:
{
this,
"RequireAlgs",
{},
[this]( auto& ) { this->decodeAlgorithms( this->m_requireNames, this->m_requireAlgs ); },
"names of Algorithms that this stream requires" }

Definition at line 74 of file OutputStream.h.

74 {
75 this,
76 "RequireAlgs",
77 {},
78 [this]( auto& ) { this->decodeAlgorithms( this->m_requireNames, this->m_requireAlgs ); },
79 "names of Algorithms that this stream requires" };

◆ m_storeName

Gaudi::Property<std::string> OutputStream::m_storeName
protected
Initial value:
{ this, "EvtDataSvc", "EventDataSvc",
"name of the service managing the data store" }

Definition at line 64 of file OutputStream.h.

64 { this, "EvtDataSvc", "EventDataSvc",
65 "name of the service managing the data store" };

◆ m_verifyItems

Gaudi::Property<bool> OutputStream::m_verifyItems
protected
Initial value:
{ this, "VerifyItems", true,
"flag to indicate that item consistency should be checked" }

Definition at line 86 of file OutputStream.h.

86 { this, "VerifyItems", true,
87 "flag to indicate that item consistency should be checked" };

◆ m_vetoAlgs

std::vector<Gaudi::Algorithm*> OutputStream::m_vetoAlgs
protected

Vector of Algorithms that this stream is vetoed by.

Definition at line 123 of file OutputStream.h.

◆ m_vetoNames

Gaudi::Property<std::vector<std::string> > OutputStream::m_vetoNames
protected
Initial value:
{
this,
"VetoAlgs",
{},
[this]( auto& ) { this->decodeAlgorithms( this->m_vetoNames, this->m_vetoAlgs ); },
"names of Algorithms that this stream is vetoed by" }

Definition at line 80 of file OutputStream.h.

80 {
81 this,
82 "VetoAlgs",
83 {},
84 [this]( auto& ) { this->decodeAlgorithms( this->m_vetoNames, this->m_vetoAlgs ); },
85 "names of Algorithms that this stream is vetoed by" };

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