The Gaudi Framework  v31r0 (aeb156f0)
OutputStream Class Reference

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

#include <src/PersistencySvc/OutputStream.h>

Inheritance diagram for OutputStream:
Collaboration diagram for OutputStream:

Public Types

typedef std::vector< DataStoreItem * > Items
 
typedef std::vector< std::stringItemNames
 
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< CounterHolder< PropertyHolder< CommonMessaging< implements< IAlgorithm, IDataHandleHolder, IProperty, IStateful > > > >, IDataHandleHolder >
using base_class = extends
 Typedef to this class. More...
 
using extend_interfaces_base = extend_interfaces< Interfaces... >
 Typedef to the base of this class. More...
 
- Public Types inherited from PropertyHolder< CommonMessaging< implements< IAlgorithm, IDataHandleHolder, IProperty, IStateful > > >
using PropertyHolderImpl = PropertyHolder< CommonMessaging< implements< IAlgorithm, IDataHandleHolder, IProperty, IStateful > > >
 Typedef used to refer to this class from derived classes, as in. More...
 
- Public Types inherited from CommonMessaging< implements< IAlgorithm, IDataHandleHolder, IProperty, IStateful > >
using base_class = CommonMessaging
 
- Public Types inherited from extend_interfaces< Interfaces... >
using ext_iids = typename Gaudi::interface_list_cat< typename Interfaces::ext_iids... >::type
 take union of the ext_iids of all Interfaces... More...
 

Public Member Functions

StatusCode initialize () override
 Initialize OutputStream. More...
 
StatusCode finalize () override
 Terminate OutputStream. More...
 
StatusCode execute () override
 Working entry point. More...
 
virtual StatusCode connectConversionSvc ()
 
virtual bool collect (IRegistry *dir, int level)
 Store agent's classback. More...
 
virtual StatusCode collectObjects ()
 Collect all objects to be written to the output stream. More...
 
void clearSelection ()
 Clear list of selected objects. More...
 
- Public Member Functions inherited from Gaudi::details::LegacyAlgorithmAdapter
 LegacyAlgorithmAdapter (const std::string &name, ISvcLocator *svcloc, const std::string &version=PACKAGE_VERSION)
 
const EventContextgetContext () const
 
bool isExecuted () const
 Has this algorithm been executed since the last reset? More...
 
void setExecuted (bool state) const
 Set the executed flag to the specified state. More...
 
void resetExecuted ()
 Reset the executed state of the Algorithm for the duration of the current event. More...
 
bool filterPassed () const
 Did this algorithm pass or fail its filter criterion for the last event? More...
 
void setFilterPassed (bool state) const
 Set the filter passed flag to the specified state. More...
 
- Public Member Functions inherited from Gaudi::Algorithm
 Algorithm (const std::string &name, ISvcLocator *svcloc, const std::string &version=PACKAGE_VERSION)
 Constructor. More...
 
StatusCode sysStart () override
 Reinitialization method invoked by the framework. More...
 
StatusCode sysInitialize () override
 Initialization method invoked by the framework. More...
 
StatusCode sysReinitialize () override
 Reinitialization method invoked by the framework. More...
 
StatusCode sysRestart () override
 Restart method invoked by the framework. More...
 
StatusCode sysExecute (const EventContext &ctx) override
 The actions to be performed by the algorithm on an event. More...
 
StatusCode sysStop () override
 System stop. More...
 
StatusCode sysFinalize () override
 System finalization. More...
 
StatusCode sysBeginRun () override
 beginRun method invoked by the framework. More...
 
StatusCode sysEndRun () override
 endRun method invoked by the framework. More...
 
const std::stringname () const override
 The identifying name of the algorithm object. More...
 
const Gaudi::StringKeynameKey () const override
 
const std::stringtype () const override
 The type of the algorithm object. More...
 
void setType (const std::string &type) override
 
const std::stringversion () const override
 
unsigned int index () const override
 
StatusCode configure () override
 Dummy implementation of IStateful::configure() method. More...
 
StatusCode terminate () override
 Dummy implementation of IStateful::terminate() method. More...
 
StatusCode initialize () override
 the default (empty) implementation of IStateful::initialize() method More...
 
StatusCode start () override
 the default (empty) implementation of IStateful::start() method More...
 
StatusCode stop () override
 the default (empty) implementation of IStateful::stop() method More...
 
StatusCode finalize () override
 the default (empty) implementation of IStateful::finalize() method More...
 
StatusCode reinitialize () override
 the default (empty) implementation of IStateful::reinitialize() method More...
 
StatusCode restart () override
 the default (empty) implementation of IStateful::restart() method More...
 
Gaudi::StateMachine::State FSMState () const override
 returns the current state of the algorithm More...
 
Gaudi::StateMachine::State targetFSMState () const override
 returns the state the algorithm will be in after the ongoing transition More...
 
StatusCode beginRun () override
 Algorithm begin run. More...
 
StatusCode endRun () override
 Algorithm end run. This method is called at the end of the event loop. More...
 
bool isEnabled () const override
 Is this algorithm enabled or disabled? More...
 
bool isSequence () const override
 Are we a Sequence? More...
 
unsigned int errorCount () const
 Get the number of failures of the algorithm. More...
 
template<class T >
StatusCode service (const std::string &name, T *&psvc, bool createIf=true) const
 Access a service by name, creating it if it doesn't already exist. More...
 
template<class T >
StatusCode service (const std::string &svcType, const std::string &svcName, T *&psvc) const
 Access a service by name and type, creating it if it doesn't already exist. More...
 
SmartIF< IServiceservice (const std::string &name, const bool createIf=true, const bool quiet=false) const
 Return a pointer to the service identified by name (or "type/name") More...
 
template<class T >
SmartIF< T > service (const std::string &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. More...
 
SmartIF< IChronoStatSvc > & chronoSvc () const
 The standard Chrono & Stat service, Return a pointer to the service if present. More...
 
SmartIF< IChronoStatSvc > & chronoStatService () const
 
SmartIF< IDataProviderSvc > & detSvc () const
 The standard detector data service. More...
 
SmartIF< IDataProviderSvc > & detDataService () const
 
SmartIF< IConversionSvc > & detCnvSvc () const
 The standard detector data persistency conversion service. More...
 
SmartIF< IConversionSvc > & detDataCnvService () const
 
SmartIF< IDataProviderSvc > & eventSvc () const
 The standard event data service. More...
 
SmartIF< IDataProviderSvc > & evtSvc () const
 shortcut for method eventSvc More...
 
SmartIF< IDataProviderSvc > & eventDataService () const
 
SmartIF< IConversionSvc > & eventCnvSvc () const
 The standard event data persistency conversion service. More...
 
SmartIF< IConversionSvc > & eventDataCnvService () const
 
SmartIF< IHistogramSvc > & histoSvc () const
 The standard histogram service. More...
 
SmartIF< IHistogramSvc > & histogramDataService () const
 
SmartIF< INTupleSvc > & ntupleSvc () const
 The standard N tuple service. More...
 
SmartIF< INTupleSvc > & ntupleService () const
 
SmartIF< IRndmGenSvc > & randSvc () const
 The standard RandomGen service, Return a pointer to the service if present. More...
 
SmartIF< IToolSvc > & toolSvc () const
 The standard ToolSvc service, Return a pointer to the service if present. More...
 
SmartIF< IExceptionSvc > & exceptionSvc () const
 Get the exception Service. More...
 
SmartIF< IAlgContextSvc > & contextSvc () const
 get Algorithm Context Service More...
 
SmartIF< ITimelineSvc > & timelineSvc () const
 
SmartIF< ISvcLocator > & serviceLocator () const override
 The standard service locator. More...
 
SmartIF< ISvcLocator > & svcLoc () const
 shortcut for method serviceLocator More...
 
SmartIF< IHiveWhiteBoard > & whiteboard () const
 
SmartIF< IAlgExecStateSvc > & algExecStateSvc () const
 
bool registerContext () const
 register for Algorithm Context Service? More...
 
StatusCode setProperties ()
 Set the algorithm's properties. More...
 
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. More...
 
template<class T >
void declareInfo (const std::string &name, const T &var, const std::string &desc) const
 Declare monitoring information. More...
 
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) More...
 
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, std::string toolTypeAndName, bool createIf=true)
 
template<class T >
void addToolsArray (ToolHandleArray< T > &hndlArr)
 
const std::vector< IAlgTool * > & tools () const
 
bool isIOBound () const
 
void setIOBound (bool value)
 
unsigned int cardinality () const override
 Return the cardinality. More...
 
const std::vector< std::string > & neededResources () const override
 
AlgExecStateexecState (const EventContext &ctx) const override
 reference to AlgExecState of Alg More...
 
std::ostreamtoControlFlowExpression (std::ostream &os) const override
 Produce string represention of the control flow expression. More...
 
- Public Member Functions inherited from DataHandleHolderBase< CounterHolder< 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
 
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< CounterHolder< PropertyHolder< CommonMessaging< implements< IAlgorithm, IDataHandleHolder, IProperty, IStateful > > > >, IDataHandleHolder >
void * i_cast (const InterfaceID &tid) const override
 Implementation of IInterface::i_cast. More...
 
StatusCode queryInterface (const InterfaceID &ti, void **pp) override
 Implementation of IInterface::queryInterface. More...
 
std::vector< std::stringgetInterfaceNames () const override
 Implementation of IInterface::getInterfaceNames. More...
 
- Public Member Functions inherited from CounterHolder< PropertyHolder< CommonMessaging< implements< IAlgorithm, IDataHandleHolder, IProperty, IStateful > > > >
void declareCounter (const std::string &tag, Gaudi::Accumulators::PrintableCounter &r)
 
const Gaudi::Accumulators::PrintableCounterfindCounter (const std::string &tag) const
 
void forEachCounter (Callable &&f) const
 
int nCounters () const
 
void clearCounters ()
 
- Public Member Functions inherited from PropertyHolder< CommonMessaging< implements< IAlgorithm, IDataHandleHolder, IProperty, IStateful > > >
 PropertyHolder ()=default
 
Gaudi::Details::PropertyBasedeclareProperty (Gaudi::Details::PropertyBase &prop)
 Declare a property. More...
 
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. More...
 
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. More...
 
Gaudi::Details::PropertyBasedeclareRemoteProperty (const std::string &name, IProperty *rsvc, const std::string &rname="")
 Declare a remote property. More...
 
StatusCode setProperty (const Gaudi::Details::PropertyBase &p) override
 set the property form another property More...
 
StatusCode setProperty (const std::string &s) override
 set the property from the formatted string More...
 
StatusCode setProperty (const std::string &n, const std::string &v) override
 set the property from name and the value More...
 
StatusCode setProperty (const std::string &name, const TYPE &value)
 set the property form the value More...
 
StatusCode getProperty (Gaudi::Details::PropertyBase *p) const override
 get the property More...
 
const Gaudi::Details::PropertyBasegetProperty (const std::string &name) const override
 get the property by name More...
 
StatusCode getProperty (const std::string &n, std::string &v) const override
 convert the property to the string More...
 
const std::vector< Gaudi::Details::PropertyBase * > & getProperties () const override
 get all properties More...
 
bool hasProperty (const std::string &name) const override
 Return true if we have a property with the given name. More...
 
 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) More...
 
bool msgLevel (MSG::Level lvl) const
 get the output level from the embedded MsgStream More...
 
MSG::Level outputLevel () const
 Backward compatibility function for getting the output level. More...
 
- Public Member Functions inherited from CommonMessagingBase
virtual ~CommonMessagingBase ()=default
 Virtual destructor. More...
 
const SmartIF< IMessageSvc > & msgSvc () const
 The standard message service. More...
 
MsgStreammsgStream () const
 Return an uninitialized MsgStream. More...
 
MsgStreammsgStream (const MSG::Level level) const
 Predefined configurable message stream for the efficient printouts. More...
 
MsgStreamalways () const
 shortcut for the method msgStream(MSG::ALWAYS) More...
 
MsgStreamfatal () const
 shortcut for the method msgStream(MSG::FATAL) More...
 
MsgStreamerr () const
 shortcut for the method msgStream(MSG::ERROR) More...
 
MsgStreamerror () const
 shortcut for the method msgStream(MSG::ERROR) More...
 
MsgStreamwarning () const
 shortcut for the method msgStream(MSG::WARNING) More...
 
MsgStreaminfo () const
 shortcut for the method msgStream(MSG::INFO) More...
 
MsgStreamdebug () const
 shortcut for the method msgStream(MSG::DEBUG) More...
 
MsgStreamverbose () const
 shortcut for the method msgStream(MSG::VERBOSE) More...
 
MsgStreammsg () const
 shortcut for the method msgStream(MSG::INFO) More...
 

Protected Member Functions

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

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::stringm_output {this, "Output", {}, "name of the output file specification"}
 
Gaudi::Property< std::stringm_outputName {this, "OutputFile", {}, "name of the output file"}
 
Gaudi::Property< std::stringm_storeName
 
Gaudi::Property< std::stringm_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? in the baseclass, always fire the incidents by default in e.g. More...
 
SmartIF< IIncidentSvcm_incidentSvc
 Reference to the incident service. More...
 
std::string m_outputType = "UPDATE"
 Output type: NEW(NEW,CREATE,WRITE,RECREATE), UPDATE) More...
 
SmartIF< IDataProviderSvcm_pDataProvider
 Keep reference to the data provider service. More...
 
SmartIF< IDataManagerSvcm_pDataManager
 Keep reference to the data manager service. More...
 
SmartIF< IConversionSvcm_pConversionSvc
 Keep reference to the data conversion service. More...
 
DataStoreItemm_currentItem
 Keep track of the current item. More...
 
Items m_itemList
 Vector of items to be saved to this stream. More...
 
Items m_optItemList
 Vector of optional items to be saved to this stream. More...
 
AlgDependentItems m_algDependentItems
 Items to be saved for specific algorithms. More...
 
IDataSelector m_objects
 Collection of objects being selected. More...
 
int m_events
 Number of events written to this output stream. More...
 
std::vector< Gaudi::Algorithm * > m_acceptAlgs
 Vector of Algorithms that this stream accepts. More...
 
std::vector< Gaudi::Algorithm * > m_requireAlgs
 Vector of Algorithms that this stream requires. More...
 
std::vector< Gaudi::Algorithm * > m_vetoAlgs
 Vector of Algorithms that this stream is vetoed by. More...
 
- Protected Attributes inherited from Gaudi::Algorithm
std::unique_ptr< IDataHandleVisitorm_updateDataHandles
 Hook for for derived classes to provide a custom visitor for data handles. More...
 
- Protected Attributes inherited from DataHandleHolderBase< CounterHolder< PropertyHolder< CommonMessaging< implements< IAlgorithm, IDataHandleHolder, IProperty, IStateful > > > > >
DataObjIDColl m_inputDataObjs
 
DataObjIDColl m_outputDataObjs
 

Private Member Functions

void clearItems (Items &itms)
 Clear item list. More...
 
void addItem (Items &itms, const std::string &descriptor)
 Add item to output streamer list. More...
 
IDataSelectorselectedObjects ()
 Return the list of selected objects. More...
 
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 28 of file OutputStream.h.

Member Typedef Documentation

Definition at line 31 of file OutputStream.h.

Definition at line 30 of file OutputStream.h.

Member Function Documentation

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

Add item to output streamer list.

Definition at line 317 of file OutputStream.cpp.

317  {
318  int level = 0;
319  auto sep = descriptor.rfind( "#" );
320  std::string obj_path = descriptor.substr( 0, sep );
321  if ( sep != std::string::npos ) {
322  std::string slevel = descriptor.substr( sep + 1 );
323  level = ( slevel == "*" ) ? 9999999 : std::stoi( slevel );
324  }
325  if ( m_verifyItems ) {
326  size_t idx = obj_path.find( "/", 1 );
327  while ( idx != std::string::npos ) {
328  std::string sub_item = obj_path.substr( 0, idx );
329  if ( !findItem( sub_item ) ) addItem( itms, sub_item + "#1" );
330  idx = obj_path.find( "/", idx + 1 );
331  }
332  }
333  itms.push_back( new DataStoreItem( obj_path, level ) );
334  const auto& item = itms.back();
335  ON_DEBUG
336  debug() << "Adding OutputStream item " << item->path() << " with " << item->depth() << " level(s)." << endmsg;
337 }
Gaudi::Property< bool > m_verifyItems
Definition: OutputStream.h:77
T rfind(T...args)
Description of the DataStoreItem class.
Definition: DataStoreItem.h:17
STL class.
DataStoreItem * findItem(const std::string &path)
Find single item identified by its path (exact match)
void addItem(Items &itms, const std::string &descriptor)
Add item to output streamer list.
T find(T...args)
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
#define ON_DEBUG
T substr(T...args)
T stoi(T...args)
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192
void OutputStream::clearItems ( Items itms)
private

Clear item list.

Definition at line 300 of file OutputStream.cpp.

300  {
301  for ( auto& i : itms ) delete i;
302  itms.clear();
303 }
void OutputStream::clearSelection ( )

Clear list of selected objects.

Definition at line 297 of file OutputStream.cpp.

297 { m_objects.clear(); }
IDataSelector m_objects
Collection of objects being selected.
Definition: OutputStream.h:105
T clear(T...args)
bool OutputStream::collect ( IRegistry dir,
int  level 
)
virtual

Store agent's classback.

Definition at line 208 of file OutputStream.cpp.

208  {
209  if ( level < m_currentItem->depth() ) {
210  if ( dir->object() ) {
211  /*
212  std::cout << "Analysing ("
213  << dir->name()
214  << ") Object:"
215  << ((dir->object()==0) ? "UNLOADED" : "LOADED")
216  << std::endl;
217  */
218  m_objects.push_back( dir->object() );
219  return true;
220  }
221  }
222  return false;
223 }
IDataSelector m_objects
Collection of objects being selected.
Definition: OutputStream.h:105
T push_back(T...args)
virtual DataObject * object() const =0
Retrieve object behind the link.
StatusCode OutputStream::collectFromSubTree ( DataObject pObj)
private

Definition at line 492 of file OutputStream.cpp.

492  {
493  return m_pDataManager->traverseSubTree( pObj,
494  [this]( IRegistry* r, int level ) { return this->collect( r, level ); } );
495 }
virtual StatusCode traverseSubTree(boost::string_ref sub_tree_path, IDataStoreAgent *pAgent)=0
Analyse by traversing all data objects below the sub tree identified by its full path name...
virtual bool collect(IRegistry *dir, int level)
Store agent&#39;s classback.
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
SmartIF< IDataManagerSvc > m_pDataManager
Keep reference to the data manager service.
Definition: OutputStream.h:93
StatusCode OutputStream::collectObjects ( )
virtual

Collect all objects to be written to the output stream.

Reimplemented in InputCopyStream.

Definition at line 226 of file OutputStream.cpp.

226  {
228 
229  // Traverse the tree and collect the requested objects
230  for ( auto& i : m_itemList ) {
231  DataObject* obj = nullptr;
232  m_currentItem = i;
234  if ( iret.isSuccess() ) {
235  iret = collectFromSubTree( obj );
236  if ( !iret.isSuccess() ) status = iret;
237  } else {
238  error() << "Cannot write mandatory object(s) (Not found) " << m_currentItem->path() << endmsg;
239  status = iret;
240  }
241  }
242 
243  // Traverse the tree and collect the requested objects (tolerate missing items here)
244  for ( auto& i : m_optItemList ) {
245  DataObject* obj = nullptr;
246  m_currentItem = i;
248  if ( iret.isSuccess() ) iret = collectFromSubTree( obj );
249  if ( !iret.isSuccess() ) {
250  ON_DEBUG
251  debug() << "Ignore request to write non-mandatory object(s) " << m_currentItem->path() << endmsg;
252  }
253  }
254 
255  // Collect objects dependent on particular algorithms
256  for ( const auto& iAlgItems : m_algDependentItems ) {
257  auto alg = iAlgItems.first;
258  const Items& items = iAlgItems.second;
259  if ( passed( alg ) ) {
260  ON_DEBUG
261  debug() << "Algorithm '" << alg->name() << "' fired. Adding " << items << endmsg;
262  for ( const auto& i : items ) {
263  DataObject* obj = nullptr;
264  m_currentItem = i;
266  if ( iret.isSuccess() ) {
267  iret = collectFromSubTree( obj );
268  if ( !iret.isSuccess() ) status = iret;
269  } else {
270  error() << "Cannot write mandatory (algorithm dependent) object(s) (Not found) " << m_currentItem->path()
271  << endmsg;
272  status = iret;
273  }
274  }
275  }
276  }
277 
278  if ( status.isSuccess() ) {
279  // Remove duplicates from the list of objects, preserving the order in the list
281  std::vector<DataObject*> tmp; // temporary vector with the reduced list
282  tmp.reserve( m_objects.size() );
283  for ( auto& o : m_objects ) {
284  if ( !unique.count( o ) ) {
285  // if the pointer is not in the set, add it to both the set and the temporary vector
286  unique.insert( o );
287  tmp.push_back( o );
288  }
289  }
290  m_objects.swap( tmp ); // swap the data of the two vectors
291  }
292 
293  return status;
294 }
IDataSelector m_objects
Collection of objects being selected.
Definition: OutputStream.h:105
DataStoreItem * m_currentItem
Keep track of the current item.
Definition: OutputStream.h:97
bool isSuccess() const
Definition: StatusCode.h:267
constexpr static const auto SUCCESS
Definition: StatusCode.h:85
SmartIF< IDataProviderSvc > m_pDataProvider
Keep reference to the data provider service.
Definition: OutputStream.h:91
T unique(T...args)
const std::string & path() const
Accessor: Retrieve load path.
Definition: DataStoreItem.h:55
T push_back(T...args)
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
AlgDependentItems m_algDependentItems
Items to be saved for specific algorithms.
Definition: OutputStream.h:103
std::vector< DataStoreItem * > Items
Definition: OutputStream.h:30
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
Items m_itemList
Vector of items to be saved to this stream.
Definition: OutputStream.h:99
virtual StatusCode retrieveObject(IRegistry *pDirectory, boost::string_ref path, DataObject *&pObject)=0
Retrieve object identified by its directory entry.
T count(T...args)
T insert(T...args)
T size(T...args)
STL class.
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
#define ON_DEBUG
StatusCode collectFromSubTree(DataObject *)
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192
T reserve(T...args)
Items m_optItemList
Vector of optional items to be saved to this stream.
Definition: OutputStream.h:101
StatusCode OutputStream::connectConversionSvc ( )
virtual

Definition at line 340 of file OutputStream.cpp.

340  {
341  StatusCode status = StatusCode( StatusCode::FAILURE, true );
342  // Get output file from input
343  std::string dbType, svc, shr;
344  for ( auto attrib : Gaudi::Utils::AttribStringParser( m_output ) ) {
345  const std::string& tag = attrib.tag;
346  const std::string& val = attrib.value;
347  switch ( ::toupper( tag[0] ) ) {
348  case 'D':
349  m_outputName = val;
350  break;
351  case 'T':
352  dbType = val;
353  break;
354  case 'S':
355  switch ( ::toupper( tag[1] ) ) {
356  case 'V':
357  svc = val;
358  break;
359  case 'H':
360  shr = "YES";
361  break;
362  }
363  break;
364  case 'O': // OPT='<NEW<CREATE,WRITE,RECREATE>, UPDATE>'
365  switch ( ::toupper( val[0] ) ) {
366  case 'R':
367  if ( ::strncasecmp( val.c_str(), "RECREATE", 3 ) == 0 )
368  m_outputType = "RECREATE";
369  else if ( ::strncasecmp( val.c_str(), "READ", 3 ) == 0 )
370  m_outputType = "READ";
371  break;
372  case 'C':
373  case 'N':
374  case 'W':
375  m_outputType = "NEW";
376  break;
377  case 'U':
378  m_outputType = "UPDATE";
379  break;
380  default:
381  m_outputType = "???";
382  break;
383  }
384  break;
385  default:
386  break;
387  }
388  }
389  if ( !shr.empty() ) m_outputType += "|SHARED";
390  // Get access to the default Persistency service
391  // The default service is the same for input as for output.
392  // If this is not desired, then a specialized OutputStream must overwrite
393  // this value.
394  if ( !dbType.empty() || !svc.empty() ) {
395  std::string typ = !dbType.empty() ? dbType : svc;
396  auto ipers = serviceLocator()->service<IPersistencySvc>( m_persName );
397  if ( !ipers ) {
398  fatal() << "Unable to locate IPersistencySvc interface of " << m_persName << endmsg;
399  return StatusCode::FAILURE;
400  }
401  IConversionSvc* cnvSvc = nullptr;
402  status = ipers->getService( typ, cnvSvc );
403  if ( !status.isSuccess() ) {
404  fatal() << "Unable to locate IConversionSvc interface of database type " << typ << endmsg;
405  return status;
406  }
407  // Increase reference count and keep service.
408  m_pConversionSvc = cnvSvc;
409  } else {
410  fatal() << "Unable to locate IConversionSvc interface (Unknown technology) " << endmsg
411  << "You either have to specify a technology name or a service name!" << endmsg
412  << "Please correct the job option \"" << name() << ".Output\" !" << endmsg;
413  return StatusCode::FAILURE;
414  }
415  return StatusCode::SUCCESS;
416 }
Parse attribute strings allowing iteration over the various attributes.
T empty(T...args)
std::string m_outputType
Output type: NEW(NEW,CREATE,WRITE,RECREATE), UPDATE)
Definition: OutputStream.h:89
const std::string & name() const override
The identifying name of the algorithm object.
Definition: Algorithm.cpp:635
bool isSuccess() const
Definition: StatusCode.h:267
Gaudi::Property< std::string > m_output
Definition: OutputStream.h:53
Gaudi::Property< std::string > m_outputName
Definition: OutputStream.h:54
constexpr static const auto SUCCESS
Definition: StatusCode.h:85
STL class.
StatusCode service(const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
Templated method to access a service by name.
Definition: ISvcLocator.h:76
SmartIF< IConversionSvc > m_pConversionSvc
Keep reference to the data conversion service.
Definition: OutputStream.h:95
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
T c_str(T...args)
constexpr static const auto FAILURE
Definition: StatusCode.h:86
SmartIF< ISvcLocator > & serviceLocator() const override
The standard service locator.
Definition: Algorithm.cpp:679
Data persistency service interface.
MsgStream & fatal() const
shortcut for the method msgStream(MSG::FATAL)
Gaudi::Property< std::string > m_persName
Definition: OutputStream.h:57
void toupper(std::string &s)
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192
Gaudi::Algorithm * OutputStream::decodeAlgorithm ( const std::string theName)
protected

Decode a single algorithm name.

Definition at line 418 of file OutputStream.cpp.

418  {
419  Gaudi::Algorithm* theAlgorithm = nullptr;
420 
421  auto theAlgMgr = serviceLocator()->as<IAlgManager>();
422  if ( theAlgMgr ) {
423  // Check whether the supplied name corresponds to an existing
424  // Algorithm object.
425  SmartIF<IAlgorithm>& theIAlg = theAlgMgr->algorithm( theName );
426  if ( theIAlg ) {
427  try {
428  theAlgorithm = dynamic_cast<Gaudi::Algorithm*>( theIAlg.get() );
429  } catch ( ... ) {
430  // do nothing
431  }
432  }
433  } else {
434  fatal() << "Can't locate ApplicationMgr!!!" << endmsg;
435  }
436 
437  if ( !theAlgorithm ) { warning() << "Failed to decode Algorithm name " << theName << endmsg; }
438 
439  return theAlgorithm;
440 }
The IAlgManager is the interface implemented by the Algorithm Factory in the Application Manager to s...
Definition: IAlgManager.h:27
SmartIF< IFace > as()
Definition: ISvcLocator.h:103
TYPE * get() const
Get interface pointer.
Definition: SmartIF.h:76
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
Base class from which all concrete algorithm classes should be derived.
Definition: Algorithm.h:79
SmartIF< ISvcLocator > & serviceLocator() const override
The standard service locator.
Definition: Algorithm.cpp:679
MsgStream & fatal() const
shortcut for the method msgStream(MSG::FATAL)
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192
void OutputStream::decodeAlgorithms ( Gaudi::Property< std::vector< std::string >> &  theNames,
std::vector< Gaudi::Algorithm * > &  theAlgs 
)
protected

Decode specified list of Algorithms.

Definition at line 442 of file OutputStream.cpp.

443  {
444  // Reset the list of Algorithms
445  theAlgs.clear();
446 
447  // Build the list of Algorithms from the names list
448  for ( const auto& it : theNames.value() ) {
449 
450  auto theAlgorithm = decodeAlgorithm( it );
451  if ( theAlgorithm ) {
452  // Check that the specified algorithm doesn't already exist in the list
453  if ( std::find( std::begin( theAlgs ), std::end( theAlgs ), theAlgorithm ) == std::end( theAlgs ) ) {
454  theAlgorithm->addRef();
455  theAlgs.push_back( theAlgorithm );
456  }
457  } else {
458  info() << it << " doesn't exist - ignored" << endmsg;
459  }
460  }
461 }
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
T end(T...args)
T push_back(T...args)
T clear(T...args)
T find(T...args)
T begin(T...args)
const ValueType & value() const
Backward compatibility (.
Definition: Property.h:525
Gaudi::Algorithm * decodeAlgorithm(const std::string &theName)
Decode a single algorithm name.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192
StatusCode OutputStream::execute ( )
overridevirtual

Working entry point.

Implements Algorithm.

Reimplemented in SequentialOutputStream, RecordStream, and RunRecordStream.

Definition at line 136 of file OutputStream.cpp.

136  {
137  // Clear any previously existing item list
138  clearSelection();
139  // Test whether this event should be output
140  if ( isEventAccepted() ) {
141  const StatusCode sc = writeObjects();
142  clearSelection();
143  ++m_events;
144  if ( sc.isSuccess() && m_fireIncidents ) {
145  m_incidentSvc->fireIncident( Incident( m_outputName, IncidentType::WroteToOutputFile ) );
146  } else if ( m_fireIncidents ) {
147  m_incidentSvc->fireIncident( Incident( m_outputName, IncidentType::FailOutputFile ) );
148  }
149  return sc;
150  }
151  return StatusCode::SUCCESS;
152 }
bool isEventAccepted() const
Test whether this event should be output.
int m_events
Number of events written to this output stream.
Definition: OutputStream.h:107
bool isSuccess() const
Definition: StatusCode.h:267
Gaudi::Property< std::string > m_outputName
Definition: OutputStream.h:54
constexpr static const auto SUCCESS
Definition: StatusCode.h:85
virtual StatusCode writeObjects()
Select the different objects and write them to file.
virtual void fireIncident(const Incident &incident)=0
Fire an Incident.
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
void clearSelection()
Clear list of selected objects.
SmartIF< IIncidentSvc > m_incidentSvc
Reference to the incident service.
Definition: OutputStream.h:86
Base class for all Incidents (computing events).
Definition: Incident.h:17
bool m_fireIncidents
should I fire incidents for writing opening/closing etc? in the baseclass, always fire the incidents ...
Definition: OutputStream.h:83
StatusCode OutputStream::finalize ( )
override

Terminate OutputStream.

Definition at line 123 of file OutputStream.cpp.

123  {
124  info() << "Events output: " << m_events << endmsg;
125  if ( m_fireIncidents ) m_incidentSvc->fireIncident( Incident( m_outputName, IncidentType::EndOutputFile ) );
132  return StatusCode::SUCCESS;
133 }
void clearItems(Items &itms)
Clear item list.
int m_events
Number of events written to this output stream.
Definition: OutputStream.h:107
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
Gaudi::Property< std::string > m_outputName
Definition: OutputStream.h:54
constexpr static const auto SUCCESS
Definition: StatusCode.h:85
SmartIF< IDataProviderSvc > m_pDataProvider
Keep reference to the data provider service.
Definition: OutputStream.h:91
SmartIF< IConversionSvc > m_pConversionSvc
Keep reference to the data conversion service.
Definition: OutputStream.h:95
virtual void fireIncident(const Incident &incident)=0
Fire an Incident.
Items m_itemList
Vector of items to be saved to this stream.
Definition: OutputStream.h:99
SmartIF< IDataManagerSvc > m_pDataManager
Keep reference to the data manager service.
Definition: OutputStream.h:93
SmartIF< IIncidentSvc > m_incidentSvc
Reference to the incident service.
Definition: OutputStream.h:86
Base class for all Incidents (computing events).
Definition: Incident.h:17
void reset(TYPE *ptr=nullptr)
Set the internal pointer to the passed one disposing of the old one.
Definition: SmartIF.h:86
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192
bool m_fireIncidents
should I fire incidents for writing opening/closing etc? in the baseclass, always fire the incidents ...
Definition: OutputStream.h:83
Items m_optItemList
Vector of optional items to be saved to this stream.
Definition: OutputStream.h:101
DataStoreItem * OutputStream::findItem ( const std::string path)
protected

Find single item identified by its path (exact match)

Definition at line 306 of file OutputStream.cpp.

306  {
307  auto matchPath = [&]( const DataStoreItem* i ) { return i->path() == path; };
308  auto i = std::find_if( m_itemList.begin(), m_itemList.end(), matchPath );
309  if ( i == m_itemList.end() ) {
310  i = std::find_if( m_optItemList.begin(), m_optItemList.end(), matchPath );
311  if ( i == m_optItemList.end() ) return nullptr;
312  }
313  return *i;
314 }
T end(T...args)
Description of the DataStoreItem class.
Definition: DataStoreItem.h:17
Items m_itemList
Vector of items to be saved to this stream.
Definition: OutputStream.h:99
T find_if(T...args)
T begin(T...args)
Items m_optItemList
Vector of optional items to be saved to this stream.
Definition: OutputStream.h:101
bool OutputStream::hasInput ( ) const
protectedvirtual

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

Reimplemented in InputCopyStream.

Definition at line 488 of file OutputStream.cpp.

488  {
489  return !( m_itemNames.empty() && m_optItemNames.empty() && m_algDependentItemList.empty() );
490 }
Gaudi::Property< ItemNames > m_optItemNames
Definition: OutputStream.h:41
Gaudi::Property< AlgDependentItemNames > m_algDependentItemList
Definition: OutputStream.h:43
Gaudi::Property< ItemNames > m_itemNames
Definition: OutputStream.h:40
StatusCode OutputStream::initialize ( )
override

Initialize OutputStream.

Definition at line 36 of file OutputStream.cpp.

36  {
37 
38  // Reset the number of events written
39  m_events = 0;
40  // Get access to the DataManagerSvc
42  if ( !m_pDataManager ) {
43  fatal() << "Unable to locate IDataManagerSvc interface" << endmsg;
44  return StatusCode::FAILURE;
45  }
46  // Get access to the IncidentService
47  m_incidentSvc = serviceLocator()->service( "IncidentSvc" );
48  if ( !m_incidentSvc ) {
49  warning() << "Error retrieving IncidentSvc." << endmsg;
50  return StatusCode::FAILURE;
51  }
52  // Get access to the assigned data service
54  if ( !m_pDataProvider ) {
55  fatal() << "Unable to locate IDataProviderSvc interface of " << m_storeName << endmsg;
56  return StatusCode::FAILURE;
57  }
58  if ( hasInput() ) {
60  if ( !status.isSuccess() ) {
61  fatal() << "Unable to connect to conversion service." << endmsg;
62  if ( m_outputName != "" && m_fireIncidents )
63  m_incidentSvc->fireIncident( Incident( m_outputName, IncidentType::FailOutputFile ) );
64  return status;
65  }
66  }
67 
68  // Clear the list with optional items
70  // Clear the item list
72 
73  // Take the new item list from the properties.
74  ON_DEBUG debug() << "ItemList : " << m_itemNames.value() << endmsg;
75  for ( const auto& i : m_itemNames ) addItem( m_itemList, i );
76 
77  // Take the new item list from the properties.
78  ON_DEBUG debug() << "OptItemList : " << m_optItemNames.value() << endmsg;
79  for ( const auto& i : m_optItemNames ) addItem( m_optItemList, i );
80 
81  // prepare the algorithm selected dependent locations
82  ON_DEBUG debug() << "AlgDependentItemList : " << m_algDependentItemList.value() << endmsg;
83  for ( const auto& a : m_algDependentItemList ) {
84  // Get the algorithm pointer
85  auto theAlgorithm = decodeAlgorithm( a.first );
86  if ( theAlgorithm ) {
87  // Get the item list for this alg
88  auto& items = m_algDependentItems[theAlgorithm];
89  // Clear the list for this alg
90  clearItems( items );
91  // fill the list again
92  for ( const auto& i : a.second ) addItem( items, i );
93  }
94  }
95 
96  // Take the item list to the data service preload list.
97  if ( m_doPreLoad ) {
98  for ( auto& j : m_itemList ) m_pDataProvider->addPreLoadItem( *j ).ignore();
99  // Not working: bad reference counting! pdataSvc->release();
100  }
101 
102  if ( m_doPreLoadOpt ) {
103  for ( auto& j : m_optItemList ) m_pDataProvider->addPreLoadItem( *j ).ignore();
104  }
105  info() << "Data source: " << m_storeName.value() << " output: " << m_output.value() << endmsg;
106 
107  // Decode the accept, required and veto Algorithms. The logic is the following:
108  // a. The event is accepted if all lists are empty.
109  // b. The event is provisionally accepted if any Algorithm in the accept list
110  // has been executed and has indicated that its filter is passed. This
111  // provisional acceptance can be overridden by the other lists.
112  // c. The event is rejected unless all Algorithms in the required list have
113  // been executed and have indicated that their filter passed.
114  // d. The event is rejected if any Algorithm in the veto list has been
115  // executed and has indicated that its filter has passed.
116  m_acceptNames.useUpdateHandler();
117  m_requireNames.useUpdateHandler();
118  m_vetoNames.useUpdateHandler();
119  return StatusCode::SUCCESS;
120 }
Gaudi::Property< std::vector< std::string > > m_acceptNames
Definition: OutputStream.h:59
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:71
int m_events
Number of events written to this output stream.
Definition: OutputStream.h:107
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
virtual StatusCode addPreLoadItem(const DataStoreItem &item)=0
Add an item to the preload list.
bool isSuccess() const
Definition: StatusCode.h:267
Gaudi::Property< std::string > m_output
Definition: OutputStream.h:53
Gaudi::Property< std::string > m_outputName
Definition: OutputStream.h:54
constexpr static const auto SUCCESS
Definition: StatusCode.h:85
Gaudi::Property< ItemNames > m_optItemNames
Definition: OutputStream.h:41
SmartIF< IDataProviderSvc > m_pDataProvider
Keep reference to the data provider service.
Definition: OutputStream.h:91
Gaudi::Property< bool > m_doPreLoad
Definition: OutputStream.h:49
StatusCode service(const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
Templated method to access a service by name.
Definition: ISvcLocator.h:76
virtual void fireIncident(const Incident &incident)=0
Fire an Incident.
virtual StatusCode connectConversionSvc()
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
AlgDependentItems m_algDependentItems
Items to be saved for specific algorithms.
Definition: OutputStream.h:103
Gaudi::Property< std::vector< std::string > > m_requireNames
Definition: OutputStream.h:65
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
Items m_itemList
Vector of items to be saved to this stream.
Definition: OutputStream.h:99
void addItem(Items &itms, const std::string &descriptor)
Add item to output streamer list.
Gaudi::Property< AlgDependentItemNames > m_algDependentItemList
Definition: OutputStream.h:43
SmartIF< IDataManagerSvc > m_pDataManager
Keep reference to the data manager service.
Definition: OutputStream.h:93
SmartIF< IIncidentSvc > m_incidentSvc
Reference to the incident service.
Definition: OutputStream.h:86
Gaudi::Property< std::string > m_storeName
Definition: OutputStream.h:55
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
const StatusCode & ignore() const
Ignore/check StatusCode.
Definition: StatusCode.h:153
Base class for all Incidents (computing events).
Definition: Incident.h:17
Gaudi::Property< bool > m_doPreLoadOpt
Definition: OutputStream.h:51
constexpr static const auto FAILURE
Definition: StatusCode.h:86
#define ON_DEBUG
SmartIF< ISvcLocator > & serviceLocator() const override
The standard service locator.
Definition: Algorithm.cpp:679
MsgStream & fatal() const
shortcut for the method msgStream(MSG::FATAL)
Gaudi::Algorithm * decodeAlgorithm(const std::string &theName)
Decode a single algorithm name.
Gaudi::Property< ItemNames > m_itemNames
Definition: OutputStream.h:40
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192
bool m_fireIncidents
should I fire incidents for writing opening/closing etc? in the baseclass, always fire the incidents ...
Definition: OutputStream.h:83
Items m_optItemList
Vector of optional items to be saved to this stream.
Definition: OutputStream.h:101
bool OutputStream::isEventAccepted ( ) const
protected

Test whether this event should be output.

Definition at line 463 of file OutputStream.cpp.

463  {
464  // Loop over all Algorithms in the accept list to see
465  // whether any have been executed and have their filter
466  // passed flag set. Any match causes the event to be
467  // provisionally accepted.
468  bool result = m_acceptAlgs.empty() || std::any_of( std::begin( m_acceptAlgs ), std::end( m_acceptAlgs ), passed );
469 
470  // Loop over all Algorithms in the required list to see
471  // whether all have been executed and have their filter
472  // passed flag set. Any mismatch causes the event to be
473  // rejected.
474  if ( result && !m_requireAlgs.empty() ) {
475  result = std::all_of( std::begin( m_requireAlgs ), std::end( m_requireAlgs ), passed );
476  }
477 
478  // Loop over all Algorithms in the veto list to see
479  // whether any have been executed and have their filter
480  // passed flag set. Any match causes the event to be
481  // rejected.
482  if ( result && !m_vetoAlgs.empty() ) {
483  result = std::none_of( std::begin( m_vetoAlgs ), std::end( m_vetoAlgs ), passed );
484  }
485  return result;
486 }
T empty(T...args)
std::vector< Gaudi::Algorithm * > m_requireAlgs
Vector of Algorithms that this stream requires.
Definition: OutputStream.h:112
T end(T...args)
std::vector< Gaudi::Algorithm * > m_vetoAlgs
Vector of Algorithms that this stream is vetoed by.
Definition: OutputStream.h:114
T begin(T...args)
T any_of(T...args)
std::vector< Gaudi::Algorithm * > m_acceptAlgs
Vector of Algorithms that this stream accepts.
Definition: OutputStream.h:110
IDataSelector* OutputStream::selectedObjects ( )
inlineprivate

Return the list of selected objects.

Definition at line 153 of file OutputStream.h.

153 { return &m_objects; }
IDataSelector m_objects
Collection of objects being selected.
Definition: OutputStream.h:105
StatusCode OutputStream::writeObjects ( )
protectedvirtual

Select the different objects and write them to file.

Reimplemented in TagCollectionStream, and SequentialOutputStream.

Definition at line 155 of file OutputStream.cpp.

155  {
156  // Connect the output file to the service
157  StatusCode status = collectObjects();
158  if ( status.isSuccess() ) {
160  if ( sel->begin() != sel->end() ) {
162  if ( status.isSuccess() ) {
163  // Now pass the collection to the persistency service
164  IOpaqueAddress* pAddress = nullptr;
165  for ( auto& j : *sel ) {
166  try {
167  const StatusCode iret = m_pConversionSvc->createRep( j, pAddress );
168  if ( !iret.isSuccess() ) {
169  status = iret;
170  continue;
171  }
172  IRegistry* pReg = j->registry();
173  pReg->setAddress( pAddress );
174  } catch ( const std::exception& excpt ) {
175  const std::string loc = ( j->registry() ? j->registry()->identifier() : "UnRegistered" );
176  fatal() << "std::exception during createRep for '" << loc << "' " << System::typeinfoName( typeid( *j ) )
177  << endmsg;
178  fatal() << excpt.what() << endmsg;
179  throw;
180  }
181  }
182  for ( auto& j : *sel ) {
183  try {
184  IRegistry* pReg = j->registry();
185  const StatusCode iret = m_pConversionSvc->fillRepRefs( pReg->address(), j );
186  if ( !iret.isSuccess() ) status = iret;
187  } catch ( const std::exception& excpt ) {
188  const std::string loc = ( j->registry() ? j->registry()->identifier() : "UnRegistered" );
189  fatal() << "std::exception during fillRepRefs for '" << loc << "'" << System::typeinfoName( typeid( *j ) )
190  << endmsg;
191  fatal() << excpt.what() << endmsg;
192  throw;
193  }
194  }
195  // Commit the data if there was no error; otherwise possibly discard
196  if ( status.isSuccess() ) {
197  status = m_pConversionSvc->commitOutput( m_outputName, true );
198  } else {
200  }
201  }
202  }
203  }
204  return status;
205 }
std::string m_outputType
Output type: NEW(NEW,CREATE,WRITE,RECREATE), UPDATE)
Definition: OutputStream.h:89
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:309
bool isSuccess() const
Definition: StatusCode.h:267
Gaudi::Property< std::string > m_outputName
Definition: OutputStream.h:54
sel
Definition: IOTest.py:93
T end(T...args)
virtual StatusCode createRep(DataObject *pObject, IOpaqueAddress *&refpAddress)=0
Convert the transient object to the requested representation.
IDataSelector * selectedObjects()
Return the list of selected objects.
Definition: OutputStream.h:153
STL class.
SmartIF< IConversionSvc > m_pConversionSvc
Keep reference to the data conversion service.
Definition: OutputStream.h:95
virtual StatusCode connectOutput(const std::string &outputFile)=0
Connect the output file to the service.
virtual StatusCode commitOutput(const std::string &outputFile, bool do_commit)=0
Commit pending output.
T what(T...args)
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
STL class.
T begin(T...args)
virtual void setAddress(IOpaqueAddress *pAddress)=0
Set/Update Opaque storage address.
const StatusCode & ignore() const
Ignore/check StatusCode.
Definition: StatusCode.h:153
Opaque address interface definition.
MsgStream & fatal() const
shortcut for the method msgStream(MSG::FATAL)
virtual IOpaqueAddress * address() const =0
Retrieve opaque storage address.
virtual StatusCode collectObjects()
Collect all objects to be written to the output stream.
virtual StatusCode fillRepRefs(IOpaqueAddress *pAddress, DataObject *pObject)=0
Resolve the references of the converted object.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192

Member Data Documentation

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

Vector of Algorithms that this stream accepts.

Definition at line 110 of file OutputStream.h.

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"}

Definition at line 59 of file OutputStream.h.

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 43 of file OutputStream.h.

AlgDependentItems OutputStream::m_algDependentItems
protected

Items to be saved for specific algorithms.

Definition at line 103 of file OutputStream.h.

DataStoreItem* OutputStream::m_currentItem
protected

Keep track of the current item.

Definition at line 97 of file OutputStream.h.

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

Definition at line 49 of file OutputStream.h.

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

Definition at line 51 of file OutputStream.h.

int OutputStream::m_events
protected

Number of events written to this output stream.

Definition at line 107 of file OutputStream.h.

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 83 of file OutputStream.h.

SmartIF<IIncidentSvc> OutputStream::m_incidentSvc
protected

Reference to the incident service.

Definition at line 86 of file OutputStream.h.

Items OutputStream::m_itemList
protected

Vector of items to be saved to this stream.

Definition at line 99 of file OutputStream.h.

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

Definition at line 40 of file OutputStream.h.

IDataSelector OutputStream::m_objects
protected

Collection of objects being selected.

Definition at line 105 of file OutputStream.h.

Items OutputStream::m_optItemList
protected

Vector of optional items to be saved to this stream.

Definition at line 101 of file OutputStream.h.

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 41 of file OutputStream.h.

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

Definition at line 53 of file OutputStream.h.

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

Definition at line 54 of file OutputStream.h.

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

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

Definition at line 89 of file OutputStream.h.

SmartIF<IConversionSvc> OutputStream::m_pConversionSvc
protected

Keep reference to the data conversion service.

Definition at line 95 of file OutputStream.h.

SmartIF<IDataManagerSvc> OutputStream::m_pDataManager
protected

Keep reference to the data manager service.

Definition at line 93 of file OutputStream.h.

SmartIF<IDataProviderSvc> OutputStream::m_pDataProvider
protected

Keep reference to the data provider service.

Definition at line 91 of file OutputStream.h.

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 57 of file OutputStream.h.

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

Vector of Algorithms that this stream requires.

Definition at line 112 of file OutputStream.h.

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 65 of file OutputStream.h.

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

Definition at line 55 of file OutputStream.h.

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

Definition at line 77 of file OutputStream.h.

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

Vector of Algorithms that this stream is vetoed by.

Definition at line 114 of file OutputStream.h.

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 71 of file OutputStream.h.


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