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< Algorithm *, ItemsAlgDependentItems
 
typedef std::map< std::string, ItemNamesAlgDependentItemNames
 
- Public Types inherited from Algorithm
typedef Gaudi::PluginService::Factory< IAlgorithm *, const std::string &, ISvcLocator * > Factory
 
- Public Types inherited from CommonMessaging< implements< IAlgorithm, IDataHandleHolder, IProperty, IStateful > >
using base_class = CommonMessaging
 

Public Member Functions

 OutputStream (const std::string &name, ISvcLocator *pSvcLocator)
 Standard algorithm Constructor. More...
 
virtual ~OutputStream ()=default
 Standard Destructor. More...
 
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 Algorithm
 Algorithm (const std::string &name, ISvcLocator *svcloc, const std::string &version=PACKAGE_VERSION)
 Constructor. More...
 
 ~Algorithm () override=default
 Destructor. 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 () 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...
 
bool isExecuted () const override
 Has this algorithm been executed since the last reset? More...
 
void setExecuted (bool state) override
 Set the executed flag to the specified state. More...
 
void resetExecuted () override
 Reset the executed state of the Algorithm for the duration of the current event. 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 filterPassed () const override
 Did this algorithm pass or fail its filter criterion for the last event? More...
 
void setFilterPassed (bool state) override
 Set the filter passed flag to the specified state. More...
 
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
 Obsoleted name, kept due to the backwards compatibility. More...
 
SmartIF< IDataProviderSvc > & detSvc () const
 The standard detector data service. More...
 
SmartIF< IDataProviderSvc > & detDataService () const
 Obsoleted name, kept due to the backwards compatibility. More...
 
SmartIF< IConversionSvc > & detCnvSvc () const
 The standard detector data persistency conversion service. More...
 
SmartIF< IConversionSvc > & detDataCnvService () const
 Obsoleted name, kept due to the backwards compatibility. More...
 
SmartIF< IDataProviderSvc > & eventSvc () const
 The standard event data service. More...
 
SmartIF< IDataProviderSvc > & evtSvc () const
 shortcut for method eventSvc More...
 
SmartIF< IDataProviderSvc > & eventDataService () const
 Obsoleted name, kept due to the backwards compatibility. More...
 
SmartIF< IConversionSvc > & eventCnvSvc () const
 The standard event data persistency conversion service. More...
 
SmartIF< IConversionSvc > & eventDataCnvService () const
 Obsoleted name, kept due to the backwards compatibility. More...
 
SmartIF< IHistogramSvc > & histoSvc () const
 The standard histogram service. More...
 
SmartIF< IHistogramSvc > & histogramDataService () const
 Obsoleted name, kept due to the backwards compatibility. More...
 
SmartIF< INTupleSvc > & ntupleSvc () const
 The standard N tuple service. More...
 
SmartIF< INTupleSvc > & ntupleService () const
 Obsoleted name, kept due to the backwards compatibility. More...
 
SmartIF< IRndmGenSvc > & randSvc () const
 AIDA-based NTuple service Returns a pointer to the AIDATuple 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
 
bool registerContext () const
 register for Algorithm Context Service? More...
 
StatusCode createSubAlgorithm (const std::string &type, const std::string &name, Algorithm *&pSubAlg)
 Create a sub algorithm. More...
 
const std::vector< Algorithm * > * subAlgorithms () const
 List of sub-algorithms. Returns a pointer to a vector of (sub) Algorithms. More...
 
std::vector< Algorithm * > * subAlgorithms ()
 List of sub-algorithms. Returns a pointer to a vector of (sub) Algorithms. More...
 
StatusCode setProperty (const Property &p) override
 Implementation of IProperty::setProperty. More...
 
StatusCode setProperty (const std::string &s) override
 Implementation of IProperty::setProperty. More...
 
StatusCode setProperty (const std::string &n, const std::string &v) override
 Implementation of IProperty::setProperty. More...
 
StatusCode getProperty (Property *p) const override
 Implementation of IProperty::getProperty. More...
 
const PropertygetProperty (const std::string &name) const override
 Implementation of IProperty::getProperty. More...
 
StatusCode getProperty (const std::string &n, std::string &v) const override
 Implementation of IProperty::getProperty. More...
 
const std::vector< Property * > & getProperties () const override
 Implementation of IProperty::getProperties. More...
 
bool hasProperty (const std::string &name) const override
 Implementation of IProperty::hasProperty. More...
 
PropertyMgrgetPropertyMgr ()
 
StatusCode setProperties ()
 Set the algorithm's properties. More...
 
template<class T >
PropertydeclareProperty (const std::string &name, T &property, const std::string &doc="none") const
 Declare the named property. More...
 
PropertydeclareRemoteProperty (const std::string &name, IProperty *rsvc, const std::string &rname="") const
 Declare remote named properties. More...
 
template<class T >
PropertydeclareProperty (const std::string &name, ToolHandle< T > &hndl, const std::string &doc="none") const
 
template<class T >
PropertydeclareProperty (const std::string &name, ToolHandleArray< T > &hndlArr, const std::string &doc="none") const
 
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...
 
template<class TYPE >
StatusCode setProperty (const std::string &name, const TYPE &value)
 set the property form the value More...
 
EventContextgetContext () const
 get the context More...
 
void setContext (EventContext *context)
 set the context More...
 
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 
virtual const DataObjIDCollextraInputDeps () const override
 
virtual const DataObjIDCollextraOutputDeps () const override
 
virtual void acceptDHVisitor (IDataHandleVisitor *) const override
 
const DataObjIDCollinputDataObjs () const
 
const DataObjIDColloutputDataObjs () const
 
void commitHandles () override
 
void registerTool (IAlgTool *tool) const
 
void deregisterTool (IAlgTool *tool) const
 
template<class T >
StatusCode declareTool (ToolHandle< T > &handle, std::string toolTypeAndName="", bool createIf=true)
 
const std::vector< IAlgTool * > & tools () const
 
bool isClonable () const override
 Specifies the clonability of the algorithm. More...
 
unsigned int cardinality () const override
 Return the cardinality. More...
 
const std::vector< std::string > & neededResources () const override
 
- Public Member Functions inherited from CommonMessagingBase
virtual ~CommonMessagingBase ()=default
 Virtual destructor. More...
 
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...
 
MSG::Level msgLevel () const
 get the output level from the embedded MsgStream More...
 
MSG::Level outputLevel () const __attribute__((deprecated))
 Backward compatibility function for getting the output level. More...
 
bool msgLevel (MSG::Level lvl) const
 get the output level from the embedded MsgStream More...
 

Protected Member Functions

StatusCode decodeAcceptAlgs ()
 Decode list of Algorithms that this stream accepts. More...
 
void acceptAlgsHandler (Property &theProp)
 Handler for AcceptAlgs Property. More...
 
StatusCode decodeRequireAlgs ()
 Decode list of Algorithms that this stream requires. More...
 
void requireAlgsHandler (Property &theProp)
 Handler for RequireAlgs Property. More...
 
StatusCode decodeVetoAlgs ()
 Decode list of Algorithms that this stream is vetoed by. More...
 
void vetoAlgsHandler (Property &theProp)
 Handler for VetoAlgs Property. More...
 
AlgorithmdecodeAlgorithm (const std::string &theName)
 Decode a single algorithm name. More...
 
StatusCode decodeAlgorithms (StringArrayProperty &theNames, std::vector< 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 Algorithm
virtual void declareInput (Gaudi::DataHandle *im) override
 
virtual void declareOutput (Gaudi::DataHandle *im) override
 
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...
 
- Protected Member Functions inherited from CommonMessaging< implements< IAlgorithm, IDataHandleHolder, IProperty, IStateful > >
void updateMsgStreamOutputLevel (int level)
 Update the output level of the cached MsgStream. More...
 

Protected Attributes

SmartIF< IIncidentSvcm_incidentSvc
 Reference to the incident service. More...
 
bool m_doPreLoad
 Flag indicating whether data pre-loading should be performed. More...
 
bool m_doPreLoadOpt
 Flag indicating whether optional items should be preloaded. More...
 
bool m_verifyItems
 Flag to indicate that item consistency should be checked. More...
 
std::string m_storeName
 Name of the service managing the data store. More...
 
std::string m_persName
 Name of the persistency service capable to write data from the store. More...
 
std::string m_output
 Name of the output file specification. More...
 
std::string m_outputName
 Name of the output file. More...
 
std::string m_outputType
 Output type: NEW(NEW,CREATE,WRITE,RECREATE), UPDATE) More...
 
std::unique_ptr< OutputStreamAgentm_agent
 Keep reference of agent. 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...
 
ItemNames m_itemNames
 Vector of item names. More...
 
Items m_itemList
 Vector of items to be saved to this stream. More...
 
ItemNames m_optItemNames
 Vector of item names. More...
 
Items m_optItemList
 Vector of optional items to be saved to this stream. More...
 
AlgDependentItemNames m_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. 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...
 
StringArrayProperty m_acceptNames
 Vector of names of Algorithms that this stream accepts. More...
 
StringArrayProperty m_requireNames
 Vector of names of Algorithms that this stream requires. More...
 
StringArrayProperty m_vetoNames
 Vector of names of Algorithms that this stream is vetoed by. More...
 
std::vector< Algorithm * > m_acceptAlgs
 Vector of Algorithms that this stream accepts. More...
 
std::vector< Algorithm * > m_requireAlgs
 Vector of Algorithms that this stream requires. More...
 
std::vector< Algorithm * > m_vetoAlgs
 Vector of Algorithms that this stream is vetoed by. More...
 
bool m_fireIncidents
 should I fire incidents for writing opening/closing etc? More...
 
- Protected Attributes inherited from Algorithm
EventContextm_event_context
 Event specific data for multiple event processing. More...
 
SmartIF< PropertyMgrm_propertyMgr
 For management of properties. More...
 
std::unique_ptr< IDataHandleVisitorm_updateDataHandles
 Hook for for derived classes to provide a custom visitor for data handles. More...
 

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...
 

Detailed Description

A small to stream Data I/O.

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

Definition at line 29 of file OutputStream.h.

Member Typedef Documentation

Definition at line 33 of file OutputStream.h.

Definition at line 32 of file OutputStream.h.

Definition at line 31 of file OutputStream.h.

Constructor & Destructor Documentation

OutputStream::OutputStream ( const std::string name,
ISvcLocator pSvcLocator 
)

Standard algorithm Constructor.

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

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

Definition at line 30 of file OutputStream.cpp.

31 : Algorithm(name, pSvcLocator),
32  m_agent { new OutputStreamAgent(this) }
33 {
34  m_doPreLoad = true;
35  m_doPreLoadOpt = false;
36  m_verifyItems = true;
37  m_outputType = "UPDATE";
38  m_storeName = "EventDataSvc";
39  m_persName = "EventPersistencySvc";
42  m_fireIncidents = true;
43  declareProperty("ItemList", m_itemNames);
44  declareProperty("OptItemList", m_optItemNames);
45  declareProperty("AlgDependentItemList", m_algDependentItemList);
46  declareProperty("Preload", m_doPreLoad);
47  declareProperty("PreloadOptItems", m_doPreLoadOpt);
48  declareProperty("Output", m_output);
49  declareProperty("OutputFile", m_outputName);
50  declareProperty("EvtDataSvc", m_storeName);
51  declareProperty("EvtConversionSvc", m_persName);
52  declareProperty("AcceptAlgs", m_acceptNames);
53  declareProperty("RequireAlgs", m_requireNames);
54  declareProperty("VetoAlgs", m_vetoNames);
55  declareProperty("VerifyItems", m_verifyItems);
58 
59  // Associate action handlers with the AcceptAlgs, RequireAlgs and VetoAlgs.
63 
64  //setProperty( "OutputLevel", 2 );
65 
66 }
StringArrayProperty m_acceptNames
Vector of names of Algorithms that this stream accepts.
Definition: OutputStream.h:82
std::string m_storeName
Name of the service managing the data store.
Definition: OutputStream.h:45
virtual Property & declareUpdateHandler(std::function< void(Property &)> fun)
set new callback for update
Definition: Property.cpp:72
std::string m_outputType
Output type: NEW(NEW,CREATE,WRITE,RECREATE), UPDATE)
Definition: OutputStream.h:53
StringArrayProperty m_vetoNames
Vector of names of Algorithms that this stream is vetoed by.
Definition: OutputStream.h:86
Property * declareProperty(const std::string &name, T &property, const std::string &doc="none") const
Declare the named property.
Definition: Algorithm.h:426
std::string m_outputName
Name of the output file.
Definition: OutputStream.h:51
void requireAlgsHandler(Property &theProp)
Handler for RequireAlgs Property.
std::string m_persName
Name of the persistency service capable to write data from the store.
Definition: OutputStream.h:47
AlgDependentItemNames m_algDependentItemList
Mapping between algorithm names, and a list of items for which, if the algorithm in question accepted...
Definition: OutputStream.h:74
std::unique_ptr< OutputStreamAgent > m_agent
Keep reference of agent.
Definition: OutputStream.h:55
bool m_verifyItems
Flag to indicate that item consistency should be checked.
Definition: OutputStream.h:43
bool m_doPreLoad
Flag indicating whether data pre-loading should be performed.
Definition: OutputStream.h:39
bool m_doPreLoadOpt
Flag indicating whether optional items should be preloaded.
Definition: OutputStream.h:41
Algorithm(const std::string &name, ISvcLocator *svcloc, const std::string &version=PACKAGE_VERSION)
Constructor.
Definition: Algorithm.cpp:43
ItemNames m_itemNames
Vector of item names.
Definition: OutputStream.h:65
ItemNames m_optItemNames
Vector of item names.
Definition: OutputStream.h:69
void acceptAlgsHandler(Property &theProp)
Handler for AcceptAlgs Property.
StringArrayProperty m_requireNames
Vector of names of Algorithms that this stream requires.
Definition: OutputStream.h:84
std::string m_output
Name of the output file specification.
Definition: OutputStream.h:49
void vetoAlgsHandler(Property &theProp)
Handler for VetoAlgs Property.
bool m_fireIncidents
should I fire incidents for writing opening/closing etc?
Definition: OutputStream.h:125
virtual OutputStream::~OutputStream ( )
virtualdefault

Standard Destructor.

Member Function Documentation

void OutputStream::acceptAlgsHandler ( Property theProp)
protected

Handler for AcceptAlgs Property.

Definition at line 506 of file OutputStream.cpp.

506  {
508  if (sc.isFailure()) {
509  throw GaudiException("Failure in OutputStream::decodeAlgorithms",
510  "OutputStream::acceptAlgsHandler",sc);
511  }
512 }
StringArrayProperty m_acceptNames
Vector of names of Algorithms that this stream accepts.
Definition: OutputStream.h:82
Define general base for Gaudi exception.
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:86
std::vector< Algorithm * > m_acceptAlgs
Vector of Algorithms that this stream accepts.
Definition: OutputStream.h:88
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
StatusCode decodeAlgorithms(StringArrayProperty &theNames, std::vector< Algorithm * > &theAlgs)
Decode specified list of Algorithms.
void OutputStream::addItem ( Items itms,
const std::string descriptor 
)
private

Add item to output streamer list.

Definition at line 398 of file OutputStream.cpp.

398  {
399  int level = 0;
400  auto sep = descriptor.rfind("#");
401  std::string obj_path = descriptor.substr(0,sep);
402  if ( sep != std::string::npos ) {
403  std::string slevel = descriptor.substr(sep+1);
404  level = ( slevel == "*" ) ? 9999999 : std::stoi(slevel);
405  }
406  if ( m_verifyItems ) {
407  size_t idx = obj_path.find("/",1);
408  while(idx != std::string::npos) {
409  std::string sub_item = obj_path.substr(0,idx);
410  if ( !findItem(sub_item) ) addItem(itms, sub_item+"#1");
411  idx = obj_path.find("/",idx+1);
412  }
413  }
414  itms.push_back( new DataStoreItem(obj_path, level) );
415  const auto& item = itms.back();
416  ON_DEBUG
417  debug() << "Adding OutputStream item " << item->path()
418  << " with " << item->depth()
419  << " level(s)." << endmsg;
420 }
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)
bool m_verifyItems
Flag to indicate that item consistency should be checked.
Definition: OutputStream.h:43
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)
tuple item
print s1,s2
Definition: ana.py:146
#define ON_DEBUG
T substr(T...args)
list itms
Definition: ana.py:135
T stoi(T...args)
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
void OutputStream::clearItems ( Items itms)
private

Clear item list.

Definition at line 380 of file OutputStream.cpp.

380  {
381  for ( auto& i : itms ) delete i;
382  itms.clear();
383 }
list itms
Definition: ana.py:135
list i
Definition: ana.py:128
void OutputStream::clearSelection ( )

Clear list of selected objects.

Definition at line 375 of file OutputStream.cpp.

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

Store agent's classback.

Definition at line 274 of file OutputStream.cpp.

274  {
275  if ( level < m_currentItem->depth() ) {
276  if ( dir->object() ) {
277  /*
278  std::cout << "Analysing ("
279  << dir->name()
280  << ") Object:"
281  << ((dir->object()==0) ? "UNLOADED" : "LOADED")
282  << std::endl;
283  */
284  m_objects.push_back(dir->object());
285  return true;
286  }
287  }
288  return false;
289 }
IDataSelector m_objects
Collection of objects being selected.
Definition: OutputStream.h:78
T push_back(T...args)
virtual DataObject * object() const =0
Retrieve object behind the link.
StatusCode OutputStream::collectObjects ( )
virtual

Collect all objects to be written to the output stream.

Reimplemented in InputCopyStream.

Definition at line 292 of file OutputStream.cpp.

292  {
294 
295  // Traverse the tree and collect the requested objects
296  for ( auto& i : m_itemList) {
297  DataObject* obj = nullptr;
298  m_currentItem = i;
300  if ( iret.isSuccess() ) {
301  iret = m_pDataManager->traverseSubTree(obj, m_agent.get());
302  if ( !iret.isSuccess() ) status = iret;
303  }
304  else {
305  error() << "Cannot write mandatory object(s) (Not found) "
306  << m_currentItem->path() << endmsg;
307  status = iret;
308  }
309  }
310 
311  // Traverse the tree and collect the requested objects (tolerate missing items here)
312  for ( auto& i : m_optItemList ) {
313  DataObject* obj = nullptr;
314  m_currentItem = i;
316  if ( iret.isSuccess() ) {
317  iret = m_pDataManager->traverseSubTree(obj, m_agent.get());
318  }
319  if ( !iret.isSuccess() ) {
320  ON_DEBUG
321  debug() << "Ignore request to write non-mandatory object(s) "
322  << m_currentItem->path() << endmsg;
323  }
324  }
325 
326  // Collect objects dependent on particular algorithms
327  for ( const auto& iAlgItems : m_algDependentItems )
328  {
329  Algorithm * alg = iAlgItems.first;
330  const Items& items = iAlgItems.second;
331  if ( alg->isExecuted() && alg->filterPassed() )
332  {
333  ON_DEBUG
334  debug() << "Algorithm '" << alg->name() << "' fired. Adding " << items << endmsg;
335  for ( const auto& i : items )
336  {
337  DataObject* obj = nullptr;
338  m_currentItem = i;
340  if ( iret.isSuccess() )
341  {
342  iret = m_pDataManager->traverseSubTree(obj,m_agent.get());
343  if ( !iret.isSuccess() ) status = iret;
344  }
345  else
346  {
347  error() << "Cannot write mandatory (algorithm dependent) object(s) (Not found) "
348  << m_currentItem->path() << endmsg;
349  status = iret;
350  }
351  }
352  }
353  }
354 
355  if (status.isSuccess())
356  {
357  // Remove duplicates from the list of objects, preserving the order in the list
359  std::vector<DataObject*> tmp; // temporary vector with the reduced list
360  tmp.reserve(m_objects.size());
361  for (auto& o : m_objects ) {
362  if (!unique.count(o)) {
363  // if the pointer is not in the set, add it to both the set and the temporary vector
364  unique.insert(o);
365  tmp.push_back(o);
366  }
367  }
368  m_objects.swap(tmp); // swap the data of the two vectors
369  }
370 
371  return status;
372 }
IDataSelector m_objects
Collection of objects being selected.
Definition: OutputStream.h:78
DataStoreItem * m_currentItem
Keep track of the current item.
Definition: OutputStream.h:63
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:76
bool filterPassed() const override
Did this algorithm pass or fail its filter criterion for the last event?
Definition: Algorithm.cpp:857
SmartIF< IDataProviderSvc > m_pDataProvider
Keep reference to the data provider service.
Definition: OutputStream.h:57
T unique(T...args)
std::unique_ptr< OutputStreamAgent > m_agent
Keep reference of agent.
Definition: OutputStream.h:55
const std::string & path() const
Accessor: Retrieve load path.
Definition: DataStoreItem.h:65
const std::string & name() const override
The identifying name of the algorithm object.
Definition: Algorithm.cpp:820
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:76
std::vector< DataStoreItem * > Items
Definition: OutputStream.h:31
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
bool isExecuted() const override
Has this algorithm been executed since the last reset?
Definition: Algorithm.cpp:840
Items m_itemList
Vector of items to be saved to this stream.
Definition: OutputStream.h:67
SmartIF< IDataManagerSvc > m_pDataManager
Keep reference to the data manager service.
Definition: OutputStream.h:59
T count(T...args)
T get(T...args)
T insert(T...args)
Base class from which all concrete algorithm classes should be derived.
Definition: Algorithm.h:74
T size(T...args)
STL class.
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
#define ON_DEBUG
virtual StatusCode traverseSubTree(const std::string &sub_path, IDataStoreAgent *pAgent)=0
Analyse by traversing all data objects below the sub tree identified by its full path name...
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
list i
Definition: ana.py:128
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
T reserve(T...args)
Items m_optItemList
Vector of optional items to be saved to this stream.
Definition: OutputStream.h:71
virtual StatusCode retrieveObject(IRegistry *pDirectory, const std::string &path, DataObject *&pObject)=0
Retrieve object identified by its directory entry.
StatusCode OutputStream::connectConversionSvc ( )
virtual

Definition at line 423 of file OutputStream.cpp.

423  {
424  StatusCode status = StatusCode(StatusCode::FAILURE, true);
425  // Get output file from input
426  std::string dbType, svc, shr;
427  for(auto attrib: Gaudi::Utils::AttribStringParser(m_output)) {
428  const std::string& tag = attrib.tag;
429  const std::string& val = attrib.value;
430  switch( ::toupper(tag[0]) ) {
431  case 'D':
432  m_outputName = val;
433  break;
434  case 'T':
435  dbType = val;
436  break;
437  case 'S':
438  switch( ::toupper(tag[1]) ) {
439  case 'V': svc = val; break;
440  case 'H': shr = "YES"; break;
441  }
442  break;
443  case 'O': // OPT='<NEW<CREATE,WRITE,RECREATE>, UPDATE>'
444  switch( ::toupper(val[0]) ) {
445  case 'R':
446  if ( ::strncasecmp(val.c_str(),"RECREATE",3)==0 )
447  m_outputType = "RECREATE";
448  else if ( ::strncasecmp(val.c_str(),"READ",3)==0 )
449  m_outputType = "READ";
450  break;
451  case 'C':
452  case 'N':
453  case 'W':
454  m_outputType = "NEW";
455  break;
456  case 'U':
457  m_outputType = "UPDATE";
458  break;
459  default:
460  m_outputType = "???";
461  break;
462  }
463  break;
464  default:
465  break;
466  }
467  }
468  if ( !shr.empty() ) m_outputType += "|SHARED";
469  // Get access to the default Persistency service
470  // The default service is the same for input as for output.
471  // If this is not desired, then a specialized OutputStream must overwrite
472  // this value.
473  if ( !dbType.empty() || !svc.empty() ) {
474  std::string typ = !dbType.empty() ? dbType : svc;
476  if( !ipers ) {
477  fatal() << "Unable to locate IPersistencySvc interface of " << m_persName << endmsg;
478  return StatusCode::FAILURE;
479  }
480  IConversionSvc *cnvSvc = nullptr;
481  status = ipers->getService(typ, cnvSvc);
482  if( !status.isSuccess() ) {
483  fatal() << "Unable to locate IConversionSvc interface of database type " << typ << endmsg;
484  return status;
485  }
486  // Increase reference count and keep service.
487  m_pConversionSvc = cnvSvc;
488  }
489  else
490  {
491  fatal()
492  << "Unable to locate IConversionSvc interface (Unknown technology) " << endmsg
493  << "You either have to specify a technology name or a service name!" << endmsg
494  << "Please correct the job option \"" << name() << ".Output\" !" << endmsg;
495  return StatusCode::FAILURE;
496  }
497  return StatusCode::SUCCESS;
498 }
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:53
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:76
SmartIF< ISvcLocator > & serviceLocator() const override
The standard service locator.
Definition: Algorithm.cpp:929
std::string m_outputName
Name of the output file.
Definition: OutputStream.h:51
std::string m_persName
Name of the persistency service capable to write data from the store.
Definition: OutputStream.h:47
STL class.
const std::string & name() const override
The identifying name of the algorithm object.
Definition: Algorithm.cpp:820
StatusCode service(const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
Templated method to access a service by name.
Definition: ISvcLocator.h:78
SmartIF< IConversionSvc > m_pConversionSvc
Keep reference to the data conversion service.
Definition: OutputStream.h:61
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
T c_str(T...args)
Data persistency service interface.
MsgStream & fatal() const
shortcut for the method msgStream(MSG::FATAL)
std::string m_output
Name of the output file specification.
Definition: OutputStream.h:49
void toupper(std::string &s)
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
StatusCode OutputStream::decodeAcceptAlgs ( )
protected

Decode list of Algorithms that this stream accepts.

Definition at line 500 of file OutputStream.cpp.

500  {
501  ON_DEBUG
502  debug() << "AcceptAlgs : " << m_acceptNames.value() << endmsg;
504 }
StringArrayProperty m_acceptNames
Vector of names of Algorithms that this stream accepts.
Definition: OutputStream.h:82
std::vector< Algorithm * > m_acceptAlgs
Vector of Algorithms that this stream accepts.
Definition: OutputStream.h:88
const TYPE & value() const
explicit conversion
Definition: Property.h:341
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
StatusCode decodeAlgorithms(StringArrayProperty &theNames, std::vector< Algorithm * > &theAlgs)
Decode specified list of Algorithms.
#define ON_DEBUG
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
Algorithm * OutputStream::decodeAlgorithm ( const std::string theName)
protected

Decode a single algorithm name.

Definition at line 542 of file OutputStream.cpp.

543 {
544  Algorithm * theAlgorithm = nullptr;
545 
546  auto theAlgMgr = serviceLocator()->as<IAlgManager>();
547  if ( theAlgMgr )
548  {
549  // Check whether the supplied name corresponds to an existing
550  // Algorithm object.
551  SmartIF<IAlgorithm> &theIAlg = theAlgMgr->algorithm(theName);
552  if ( theIAlg )
553  {
554  try
555  {
556  theAlgorithm = dynamic_cast<Algorithm*>(theIAlg.get());
557  }
558  catch(...)
559  {
560  // do nothing
561  }
562  }
563  }
564  else
565  {
566  fatal() << "Can't locate ApplicationMgr!!!" << endmsg;
567  }
568 
569  if ( !theAlgorithm )
570  {
571  warning() << "Failed to decode Algorithm name " << theName << endmsg;
572  }
573 
574  return theAlgorithm;
575 }
SmartIF< ISvcLocator > & serviceLocator() const override
The standard service locator.
Definition: Algorithm.cpp:929
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:106
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:74
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:244
StatusCode OutputStream::decodeAlgorithms ( StringArrayProperty theNames,
std::vector< Algorithm * > &  theAlgs 
)
protected

Decode specified list of Algorithms.

Definition at line 577 of file OutputStream.cpp.

579 {
580  // Reset the list of Algorithms
581  theAlgs.clear( );
582 
584 
585  // Build the list of Algorithms from the names list
586  for ( const auto& it : theNames.value() )
587  {
588 
589  Algorithm * theAlgorithm = decodeAlgorithm( it );
590  if ( theAlgorithm )
591  {
592  // Check that the specified algorithm doesn't already exist in the list
593  if ( std::find( std::begin(theAlgs), std::end(theAlgs), theAlgorithm ) == std::end(theAlgs) ) {
594  theAlgorithm->addRef();
595  theAlgs.push_back( theAlgorithm );
596  }
597  }
598  else
599  {
600  info() << it << " doesn't exist - ignored" << endmsg;
601  }
602 
603  }
604  result = StatusCode::SUCCESS;
605 
606  return result;
607 }
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
T end(T...args)
T push_back(T...args)
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
T clear(T...args)
const TYPE & value() const
explicit conversion
Definition: Property.h:341
Base class from which all concrete algorithm classes should be derived.
Definition: Algorithm.h:74
T find(T...args)
T begin(T...args)
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:244
StatusCode OutputStream::decodeRequireAlgs ( )
protected

Decode list of Algorithms that this stream requires.

Definition at line 514 of file OutputStream.cpp.

514  {
515  ON_DEBUG
516  debug() << "RequireAlgs : " << m_requireNames.value() << endmsg;
518 }
std::vector< Algorithm * > m_requireAlgs
Vector of Algorithms that this stream requires.
Definition: OutputStream.h:90
const TYPE & value() const
explicit conversion
Definition: Property.h:341
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
StatusCode decodeAlgorithms(StringArrayProperty &theNames, std::vector< Algorithm * > &theAlgs)
Decode specified list of Algorithms.
StringArrayProperty m_requireNames
Vector of names of Algorithms that this stream requires.
Definition: OutputStream.h:84
#define ON_DEBUG
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
StatusCode OutputStream::decodeVetoAlgs ( )
protected

Decode list of Algorithms that this stream is vetoed by.

Definition at line 528 of file OutputStream.cpp.

528  {
529  ON_DEBUG
530  debug() << "VetoAlgs : " << m_vetoNames.value() << endmsg;
532 }
StringArrayProperty m_vetoNames
Vector of names of Algorithms that this stream is vetoed by.
Definition: OutputStream.h:86
const TYPE & value() const
explicit conversion
Definition: Property.h:341
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
StatusCode decodeAlgorithms(StringArrayProperty &theNames, std::vector< Algorithm * > &theAlgs)
Decode specified list of Algorithms.
#define ON_DEBUG
std::vector< Algorithm * > m_vetoAlgs
Vector of Algorithms that this stream is vetoed by.
Definition: OutputStream.h:92
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
StatusCode OutputStream::execute ( )
override

Working entry point.

Definition at line 173 of file OutputStream.cpp.

174 {
175  // Clear any previously existing item list
176  clearSelection();
177  // Test whether this event should be output
178  if ( isEventAccepted() )
179  {
180  const StatusCode sc = writeObjects();
181  clearSelection();
182  ++m_events;
183  if ( sc.isSuccess() && m_fireIncidents )
184  {
186  IncidentType::WroteToOutputFile));
187  }
188  else if ( m_fireIncidents )
189  {
191  IncidentType::FailOutputFile));
192  }
193  return sc;
194  }
195  return StatusCode::SUCCESS;
196 }
bool isEventAccepted() const
Test whether this event should be output.
int m_events
Number of events written to this output stream.
Definition: OutputStream.h:80
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:76
std::string m_outputName
Name of the output file.
Definition: OutputStream.h:51
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:26
void clearSelection()
Clear list of selected objects.
SmartIF< IIncidentSvc > m_incidentSvc
Reference to the incident service.
Definition: OutputStream.h:37
Base class for all Incidents (computing events).
Definition: Incident.h:17
bool m_fireIncidents
should I fire incidents for writing opening/closing etc?
Definition: OutputStream.h:125
StatusCode OutputStream::finalize ( )
override

Terminate OutputStream.

Definition at line 159 of file OutputStream.cpp.

159  {
160  info() << "Events output: " << m_events << endmsg;
162  IncidentType::EndOutputFile));
169  return StatusCode::SUCCESS;
170 }
void clearItems(Items &itms)
Clear item list.
int m_events
Number of events written to this output stream.
Definition: OutputStream.h:80
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
std::string m_outputName
Name of the output file.
Definition: OutputStream.h:51
SmartIF< IDataProviderSvc > m_pDataProvider
Keep reference to the data provider service.
Definition: OutputStream.h:57
SmartIF< IConversionSvc > m_pConversionSvc
Keep reference to the data conversion service.
Definition: OutputStream.h:61
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:67
SmartIF< IDataManagerSvc > m_pDataManager
Keep reference to the data manager service.
Definition: OutputStream.h:59
SmartIF< IIncidentSvc > m_incidentSvc
Reference to the incident service.
Definition: OutputStream.h:37
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:88
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
bool m_fireIncidents
should I fire incidents for writing opening/closing etc?
Definition: OutputStream.h:125
Items m_optItemList
Vector of optional items to be saved to this stream.
Definition: OutputStream.h:71
DataStoreItem * OutputStream::findItem ( const std::string path)
protected

Find single item identified by its path (exact match)

Definition at line 387 of file OutputStream.cpp.

387  {
388  auto matchPath = [&](const DataStoreItem* i) { return i->path() == path; } ;
389  auto i = std::find_if( m_itemList.begin(), m_itemList.end(), matchPath );
390  if (i == m_itemList.end()) {
391  i = std::find_if( m_optItemList.begin(), m_optItemList.end(), matchPath );
392  if (i == m_optItemList.end()) return nullptr;
393  }
394  return *i;
395 }
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:67
GAUDI_API std::string path(const AIDA::IBaseHistogram *aida)
get the path in THS for AIDA histogram
T find_if(T...args)
T begin(T...args)
list i
Definition: ana.py:128
Items m_optItemList
Vector of optional items to be saved to this stream.
Definition: OutputStream.h:71
bool OutputStream::hasInput ( ) const
protectedvirtual

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

Reimplemented in InputCopyStream.

Definition at line 638 of file OutputStream.cpp.

638  {
639  return !(m_itemNames.empty() && m_optItemNames.empty() &&
641 }
T empty(T...args)
AlgDependentItemNames m_algDependentItemList
Mapping between algorithm names, and a list of items for which, if the algorithm in question accepted...
Definition: OutputStream.h:74
ItemNames m_itemNames
Vector of item names.
Definition: OutputStream.h:65
ItemNames m_optItemNames
Vector of item names.
Definition: OutputStream.h:69
StatusCode OutputStream::initialize ( )
override

Initialize OutputStream.

Definition at line 70 of file OutputStream.cpp.

70  {
71 
72  // Reset the number of events written
73  m_events = 0;
74  // Get access to the DataManagerSvc
76  if( !m_pDataManager ) {
77  fatal() << "Unable to locate IDataManagerSvc interface" << endmsg;
78  return StatusCode::FAILURE;
79  }
80  // Get access to the IncidentService
81  m_incidentSvc = serviceLocator()->service("IncidentSvc");
82  if( !m_incidentSvc ) {
83  warning() << "Error retrieving IncidentSvc." << endmsg;
84  return StatusCode::FAILURE;
85  }
86  // Get access to the assigned data service
88  if( !m_pDataProvider ) {
89  fatal() << "Unable to locate IDataProviderSvc interface of " << m_storeName << endmsg;
90  return StatusCode::FAILURE;
91  }
92  if ( hasInput() ) {
94  if( !status.isSuccess() ) {
95  fatal() << "Unable to connect to conversion service." << endmsg;
97  IncidentType::FailOutputFile));
98  return status;
99  }
100  }
101 
102  // Clear the list with optional items
104  // Clear the item list
106 
107  // Take the new item list from the properties.
108  ON_DEBUG debug() << "ItemList : " << m_itemNames << endmsg;
109  for( const auto& i : m_itemNames ) addItem( m_itemList, i );
110 
111  // Take the new item list from the properties.
112  ON_DEBUG debug() << "OptItemList : " << m_optItemNames << endmsg;
113  for( const auto& i : m_optItemNames ) addItem( m_optItemList, i );
114 
115  // prepare the algorithm selected dependent locations
116  ON_DEBUG debug() << "AlgDependentItemList : " << m_algDependentItemList << endmsg;
117  for ( const auto& a : m_algDependentItemList )
118  {
119  // Get the algorithm pointer
120  Algorithm * theAlgorithm = decodeAlgorithm( a.first );
121  if ( theAlgorithm )
122  {
123  // Get the item list for this alg
124  auto& items = m_algDependentItems[theAlgorithm];
125  // Clear the list for this alg
126  clearItems( items );
127  // fill the list again
128  for ( const auto& i : a.second ) addItem( items, i );
129  }
130  }
131 
132  // Take the item list to the data service preload list.
133  if ( m_doPreLoad ) {
134  for(auto& j : m_itemList) m_pDataProvider->addPreLoadItem( *j ).ignore();
135  // Not working: bad reference counting! pdataSvc->release();
136  }
137 
138  if ( m_doPreLoadOpt ) {
139  for(auto& j : m_optItemList) m_pDataProvider->addPreLoadItem( *j ).ignore();
140  }
141  info() << "Data source: " << m_storeName << " output: " << m_output << endmsg;
142 
143  // Decode the accept, required and veto Algorithms. The logic is the following:
144  // a. The event is accepted if all lists are empty.
145  // b. The event is provisionally accepted if any Algorithm in the accept list
146  // has been executed and has indicated that its filter is passed. This
147  // provisional acceptance can be overridden by the other lists.
148  // c. The event is rejected unless all Algorithms in the required list have
149  // been executed and have indicated that their filter passed.
150  // d. The event is rejected if any Algorithm in the veto list has been
151  // executed and has indicated that its filter has passed.
154  decodeVetoAlgs ().ignore();
155  return StatusCode::SUCCESS;
156 }
void clearItems(Items &itms)
Clear item list.
virtual bool hasInput() const
Tell if the instance has been configured with input items or not.
StatusCode decodeRequireAlgs()
Decode list of Algorithms that this stream requires.
std::string m_storeName
Name of the service managing the data store.
Definition: OutputStream.h:45
int m_events
Number of events written to this output stream.
Definition: OutputStream.h:80
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
Test for a status code of SUCCESS.
Definition: StatusCode.h:76
SmartIF< ISvcLocator > & serviceLocator() const override
The standard service locator.
Definition: Algorithm.cpp:929
std::string m_outputName
Name of the output file.
Definition: OutputStream.h:51
SmartIF< IDataProviderSvc > m_pDataProvider
Keep reference to the data provider service.
Definition: OutputStream.h:57
AlgDependentItemNames m_algDependentItemList
Mapping between algorithm names, and a list of items for which, if the algorithm in question accepted...
Definition: OutputStream.h:74
StatusCode service(const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
Templated method to access a service by name.
Definition: ISvcLocator.h:78
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:76
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
Items m_itemList
Vector of items to be saved to this stream.
Definition: OutputStream.h:67
bool m_doPreLoad
Flag indicating whether data pre-loading should be performed.
Definition: OutputStream.h:39
void addItem(Items &itms, const std::string &descriptor)
Add item to output streamer list.
bool m_doPreLoadOpt
Flag indicating whether optional items should be preloaded.
Definition: OutputStream.h:41
SmartIF< IDataManagerSvc > m_pDataManager
Keep reference to the data manager service.
Definition: OutputStream.h:59
SmartIF< IIncidentSvc > m_incidentSvc
Reference to the incident service.
Definition: OutputStream.h:37
StatusCode decodeVetoAlgs()
Decode list of Algorithms that this stream is vetoed by.
Base class from which all concrete algorithm classes should be derived.
Definition: Algorithm.h:74
ItemNames m_itemNames
Vector of item names.
Definition: OutputStream.h:65
ItemNames m_optItemNames
Vector of item names.
Definition: OutputStream.h:69
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
Base class for all Incidents (computing events).
Definition: Incident.h:17
#define ON_DEBUG
Algorithm * decodeAlgorithm(const std::string &theName)
Decode a single algorithm name.
void ignore() const
Definition: StatusCode.h:108
MsgStream & fatal() const
shortcut for the method msgStream(MSG::FATAL)
std::string m_output
Name of the output file specification.
Definition: OutputStream.h:49
list i
Definition: ana.py:128
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
StatusCode decodeAcceptAlgs()
Decode list of Algorithms that this stream accepts.
bool m_fireIncidents
should I fire incidents for writing opening/closing etc?
Definition: OutputStream.h:125
Items m_optItemList
Vector of optional items to be saved to this stream.
Definition: OutputStream.h:71
bool OutputStream::isEventAccepted ( ) const
protected

Test whether this event should be output.

Definition at line 609 of file OutputStream.cpp.

609  {
610  auto passed = [](const Algorithm* alg) { return alg->isExecuted()
611  && alg->filterPassed(); };
612 
613  // Loop over all Algorithms in the accept list to see
614  // whether any have been executed and have their filter
615  // passed flag set. Any match causes the event to be
616  // provisionally accepted.
617  bool result = m_acceptAlgs.empty() ||
619 
620  // Loop over all Algorithms in the required list to see
621  // whether all have been executed and have their filter
622  // passed flag set. Any mismatch causes the event to be
623  // rejected.
624  if ( result && !m_requireAlgs.empty() ) {
626  }
627 
628  // Loop over all Algorithms in the veto list to see
629  // whether any have been executed and have their filter
630  // passed flag set. Any match causes the event to be
631  // rejected.
632  if ( result && !m_vetoAlgs.empty() ) {
633  result = std::none_of( std::begin(m_vetoAlgs), std::end(m_vetoAlgs), passed);
634  }
635  return result;
636 }
T empty(T...args)
T end(T...args)
std::vector< Algorithm * > m_requireAlgs
Vector of Algorithms that this stream requires.
Definition: OutputStream.h:90
std::vector< Algorithm * > m_acceptAlgs
Vector of Algorithms that this stream accepts.
Definition: OutputStream.h:88
Base class from which all concrete algorithm classes should be derived.
Definition: Algorithm.h:74
T begin(T...args)
T any_of(T...args)
std::vector< Algorithm * > m_vetoAlgs
Vector of Algorithms that this stream is vetoed by.
Definition: OutputStream.h:92
void OutputStream::requireAlgsHandler ( Property theProp)
protected

Handler for RequireAlgs Property.

Definition at line 520 of file OutputStream.cpp.

520  {
522  if (sc.isFailure()) {
523  throw GaudiException("Failure in OutputStream::decodeAlgorithms",
524  "OutputStream::requireAlgsHandler",sc);
525  }
526 }
Define general base for Gaudi exception.
std::vector< Algorithm * > m_requireAlgs
Vector of Algorithms that this stream requires.
Definition: OutputStream.h:90
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:86
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
StatusCode decodeAlgorithms(StringArrayProperty &theNames, std::vector< Algorithm * > &theAlgs)
Decode specified list of Algorithms.
StringArrayProperty m_requireNames
Vector of names of Algorithms that this stream requires.
Definition: OutputStream.h:84
IDataSelector* OutputStream::selectedObjects ( )
inlineprivate

Return the list of selected objects.

Definition at line 152 of file OutputStream.h.

152 { return &m_objects; }
IDataSelector m_objects
Collection of objects being selected.
Definition: OutputStream.h:78
void OutputStream::vetoAlgsHandler ( Property theProp)
protected

Handler for VetoAlgs Property.

Definition at line 534 of file OutputStream.cpp.

534  {
536  if (sc.isFailure()) {
537  throw GaudiException("Failure in OutputStream::decodeAlgorithms",
538  "OutputStream::vetoAlgsHandler",sc);
539  }
540 }
Define general base for Gaudi exception.
StringArrayProperty m_vetoNames
Vector of names of Algorithms that this stream is vetoed by.
Definition: OutputStream.h:86
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:86
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
StatusCode decodeAlgorithms(StringArrayProperty &theNames, std::vector< Algorithm * > &theAlgs)
Decode specified list of Algorithms.
std::vector< Algorithm * > m_vetoAlgs
Vector of Algorithms that this stream is vetoed by.
Definition: OutputStream.h:92
StatusCode OutputStream::writeObjects ( )
protectedvirtual

Select the different objects and write them to file.

Reimplemented in TagCollectionStream, and SequentialOutputStream.

Definition at line 199 of file OutputStream.cpp.

200 {
201  // Connect the output file to the service
202  StatusCode status = collectObjects();
203  if ( status.isSuccess() )
204  {
206  if ( sel->begin() != sel->end() )
207  {
209  if ( status.isSuccess() )
210  {
211  // Now pass the collection to the persistency service
212  IOpaqueAddress* pAddress = nullptr;
213  for ( auto& j : *sel )
214  {
215  try
216  {
217  const StatusCode iret = m_pConversionSvc->createRep( j, pAddress );
218  if ( !iret.isSuccess() )
219  {
220  status = iret;
221  continue;
222  }
223  IRegistry* pReg = j->registry();
224  pReg->setAddress(pAddress);
225  }
226  catch ( const std::exception & excpt )
227  {
228  const std::string loc = ( j->registry() ?
229  j->registry()->identifier() : "UnRegistered" );
230  fatal()
231  << "std::exception during createRep for '" << loc << "' "
232  << System::typeinfoName( typeid(*j) )
233  << endmsg;
234  fatal() << excpt.what() << endmsg;
235  throw;
236  }
237  }
238  for ( auto& j : *sel )
239  {
240  try
241  {
242  IRegistry* pReg = j->registry();
243  const StatusCode iret = m_pConversionSvc->fillRepRefs( pReg->address(), j );
244  if ( !iret.isSuccess() ) status = iret;
245  }
246  catch ( const std::exception & excpt )
247  {
248  const std::string loc = ( j->registry() ?
249  j->registry()->identifier() : "UnRegistered" );
250  fatal()
251  << "std::exception during fillRepRefs for '" << loc << "'"
252  << System::typeinfoName( typeid(*j) )
253  << endmsg;
254  fatal() << excpt.what() << endmsg;
255  throw;
256  }
257  }
258  // Commit the data if there was no error; otherwise possibly discard
259  if ( status.isSuccess() )
260  {
261  status = m_pConversionSvc->commitOutput(m_outputName, true);
262  }
263  else
264  {
266  }
267  }
268  }
269  }
270  return status;
271 }
std::string m_outputType
Output type: NEW(NEW,CREATE,WRITE,RECREATE), UPDATE)
Definition: OutputStream.h:53
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:297
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:76
std::string m_outputName
Name of the output file.
Definition: OutputStream.h:51
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:152
STL class.
SmartIF< IConversionSvc > m_pConversionSvc
Keep reference to the data conversion service.
Definition: OutputStream.h:61
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:26
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
STL class.
virtual IOpaqueAddress * address() const =0
Retrieve opaque storage address.
T begin(T...args)
virtual void setAddress(IOpaqueAddress *pAddress)=0
Set/Update Opaque storage address.
Opaque address interface definition.
void ignore() const
Definition: StatusCode.h:108
MsgStream & fatal() const
shortcut for the method msgStream(MSG::FATAL)
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:244

Member Data Documentation

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

Vector of Algorithms that this stream accepts.

Definition at line 88 of file OutputStream.h.

StringArrayProperty OutputStream::m_acceptNames
protected

Vector of names of Algorithms that this stream accepts.

Definition at line 82 of file OutputStream.h.

std::unique_ptr<OutputStreamAgent> OutputStream::m_agent
protected

Keep reference of agent.

Definition at line 55 of file OutputStream.h.

AlgDependentItemNames OutputStream::m_algDependentItemList
protected

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

AlgDependentItems OutputStream::m_algDependentItems
protected

Items to be saved for specific algorithms.

Definition at line 76 of file OutputStream.h.

DataStoreItem* OutputStream::m_currentItem
protected

Keep track of the current item.

Definition at line 63 of file OutputStream.h.

bool OutputStream::m_doPreLoad
protected

Flag indicating whether data pre-loading should be performed.

Definition at line 39 of file OutputStream.h.

bool OutputStream::m_doPreLoadOpt
protected

Flag indicating whether optional items should be preloaded.

Definition at line 41 of file OutputStream.h.

int OutputStream::m_events
protected

Number of events written to this output stream.

Definition at line 80 of file OutputStream.h.

bool OutputStream::m_fireIncidents
protected

should I fire incidents for writing opening/closing etc?

Definition at line 125 of file OutputStream.h.

SmartIF<IIncidentSvc> OutputStream::m_incidentSvc
protected

Reference to the incident service.

Definition at line 37 of file OutputStream.h.

Items OutputStream::m_itemList
protected

Vector of items to be saved to this stream.

Definition at line 67 of file OutputStream.h.

ItemNames OutputStream::m_itemNames
protected

Vector of item names.

Definition at line 65 of file OutputStream.h.

IDataSelector OutputStream::m_objects
protected

Collection of objects being selected.

Definition at line 78 of file OutputStream.h.

Items OutputStream::m_optItemList
protected

Vector of optional items to be saved to this stream.

Definition at line 71 of file OutputStream.h.

ItemNames OutputStream::m_optItemNames
protected

Vector of item names.

Definition at line 69 of file OutputStream.h.

std::string OutputStream::m_output
protected

Name of the output file specification.

Definition at line 49 of file OutputStream.h.

std::string OutputStream::m_outputName
protected

Name of the output file.

Definition at line 51 of file OutputStream.h.

std::string OutputStream::m_outputType
protected

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

Definition at line 53 of file OutputStream.h.

SmartIF<IConversionSvc> OutputStream::m_pConversionSvc
protected

Keep reference to the data conversion service.

Definition at line 61 of file OutputStream.h.

SmartIF<IDataManagerSvc> OutputStream::m_pDataManager
protected

Keep reference to the data manager service.

Definition at line 59 of file OutputStream.h.

SmartIF<IDataProviderSvc> OutputStream::m_pDataProvider
protected

Keep reference to the data provider service.

Definition at line 57 of file OutputStream.h.

std::string OutputStream::m_persName
protected

Name of the persistency service capable to write data from the store.

Definition at line 47 of file OutputStream.h.

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

Vector of Algorithms that this stream requires.

Definition at line 90 of file OutputStream.h.

StringArrayProperty OutputStream::m_requireNames
protected

Vector of names of Algorithms that this stream requires.

Definition at line 84 of file OutputStream.h.

std::string OutputStream::m_storeName
protected

Name of the service managing the data store.

Definition at line 45 of file OutputStream.h.

bool OutputStream::m_verifyItems
protected

Flag to indicate that item consistency should be checked.

Definition at line 43 of file OutputStream.h.

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

Vector of Algorithms that this stream is vetoed by.

Definition at line 92 of file OutputStream.h.

StringArrayProperty OutputStream::m_vetoNames
protected

Vector of names of Algorithms that this stream is vetoed by.

Definition at line 86 of file OutputStream.h.


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