![]() |
The Gaudi Framework
v30r4 (9b837755)
|
Specialized output stream class for event tag collections, where the basic Event entry point should be placed as well into the collection itself. More...
#include <PersistencySvc/TagCollectionStream.h>


Public Member Functions | |
| TagCollectionStream (const std::string &name, ISvcLocator *pSvcLocator) | |
| Standard algorithm Constructor. More... | |
| StatusCode | initialize () override |
| Initialize TagCollectionStream. More... | |
| StatusCode | finalize () override |
| Terminate TagCollectionStream. More... | |
Public Member Functions inherited from OutputStream | |
| 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... | |
| 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::string & | name () const override |
| The identifying name of the algorithm object. More... | |
| const Gaudi::StringKey & | nameKey () const override |
| const std::string & | type () const override |
| The type of the algorithm object. More... | |
| void | setType (const std::string &type) override |
| const std::string & | version () 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) const 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 | isSequence () const override |
| Are we a Sequence? More... | |
| bool | filterPassed () const override |
| Did this algorithm pass or fail its filter criterion for the last event? More... | |
| void | setFilterPassed (bool state) const override |
| Set the filter passed flag to the specified state. 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< IService > | service (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 final override |
| 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 | 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 | setProperties () |
| Set the algorithm's properties. More... | |
| template<class T > | |
| Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, ToolHandle< T > &hndl, const std::string &doc="none") |
| template<class T > | |
| Gaudi::Details::PropertyBase * | declareProperty (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... | |
| const EventContext & | getContext () const override |
| get the context More... | |
| 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 |
| std::ostream & | toControlFlowExpression (std::ostream &os) const override |
| Produce string represention of the control flow expression. More... | |
Public Member Functions inherited from DataHandleHolderBase< PropertyHolder< CommonMessaging< implements< IAlgorithm, IDataHandleHolder, IProperty, IStateful > > > > | |
| DataHandleHolderBase (Args &&...args) | |
| NOTE: Cannot use "using Super::Super;" due to a GCC 6 bug. More... | |
| void | registerDataHandle (Gaudi::v2::DataHandle &handle) final override |
| Register a data handle of this algorithm/tool. More... | |
| void | addDataDependency (const DataObjID &key, AccessMode access) final override |
| Add a data dependency, even after initialization. More... | |
| const DataObjIDColl & | dataDependencies (AccessMode access) const final override |
| Tell which whiteboard keys the algorithm will be reading or writing. More... | |
| void | declare (Gaudi::v1::DataHandle &handle) override |
| Declare ownership of a legacy DataHandle. More... | |
| void | renounce (Gaudi::v1::DataHandle &handle) override |
| Discard ownership of a legacy DataHandle. More... | |
| const DataObjIDColl * | allDataDependencies () const final override |
Public Member Functions inherited from extends< 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::string > | getInterfaceNames () const override |
| Implementation of IInterface::getInterfaceNames. More... | |
Public Member Functions inherited from PropertyHolder< CommonMessaging< implements< IAlgorithm, IDataHandleHolder, IProperty, IStateful > > > | |
| PropertyHolder ()=default | |
| Gaudi::Details::PropertyBase & | declareProperty (Gaudi::Details::PropertyBase &prop) |
| Declare a property. More... | |
| Gaudi::Details::PropertyBase * | declareProperty (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::PropertyBase * | declareProperty (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::PropertyBase * | declareRemoteProperty (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::PropertyBase & | getProperty (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 | |
| PropertyHolder & | operator= (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... | |
| MsgStream & | msgStream () const |
| Return an uninitialized MsgStream. More... | |
| MsgStream & | msgStream (const MSG::Level level) const |
| Predefined configurable message stream for the efficient printouts. More... | |
| MsgStream & | always () const |
| shortcut for the method msgStream(MSG::ALWAYS) More... | |
| MsgStream & | fatal () const |
| shortcut for the method msgStream(MSG::FATAL) More... | |
| MsgStream & | err () const |
| shortcut for the method msgStream(MSG::ERROR) More... | |
| MsgStream & | error () const |
| shortcut for the method msgStream(MSG::ERROR) More... | |
| MsgStream & | warning () const |
| shortcut for the method msgStream(MSG::WARNING) More... | |
| MsgStream & | info () const |
| shortcut for the method msgStream(MSG::INFO) More... | |
| MsgStream & | debug () const |
| shortcut for the method msgStream(MSG::DEBUG) More... | |
| MsgStream & | verbose () const |
| shortcut for the method msgStream(MSG::VERBOSE) More... | |
| MsgStream & | msg () const |
| shortcut for the method msgStream(MSG::INFO) More... | |
Protected Member Functions | |
| StatusCode | writeObjects () override |
| OutputStream override: Select the different objects and write them to file. More... | |
| virtual StatusCode | connectAddress () |
| Connect address column, if not already connected. More... | |
| StatusCode | writeData () |
| Write data objects. More... | |
| StatusCode | writeTuple () |
| Write tuple data. More... | |
| StatusCode | writeRecord () |
| Write full event record. More... | |
Protected Member Functions inherited from OutputStream | |
| Algorithm * | decodeAlgorithm (const std::string &theName) |
| Decode a single algorithm name. More... | |
| void | decodeAlgorithms (Gaudi::Property< std::vector< std::string >> &theNames, std::vector< Algorithm * > &theAlgs) |
| Decode specified list of Algorithms. More... | |
| bool | isEventAccepted () const |
| Test whether this event should be output. More... | |
| DataStoreItem * | findItem (const std::string &path) |
| Find single item identified by its path (exact match) More... | |
| virtual bool | hasInput () const |
| Tell if the instance has been configured with input items or not. More... | |
Protected Member Functions inherited from 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... | |
| AlgExecState & | execState (const EventContext &ctx) const |
| reference to AlgExecState of Alg More... | |
Protected Member Functions inherited from DataHandleHolderBase< PropertyHolder< CommonMessaging< implements< IAlgorithm, IDataHandleHolder, IProperty, IStateful > > > > | |
| void | updateDataDependencies (const DataObjIDMapping &keyMap) |
| Update the key of each registered data dependency, using a user-defined mapping from the old to the new key. More... | |
| void | collectExplicitDataDependencies () |
| Collect all explicit data dependencies in a single place. More... | |
| StatusCode | handleCircularDataDependencies (CircularDepHandler &&circularDepHandler) |
| Look for circular dependencies and let a user-specified handler deal with each of them. More... | |
| void | collectImplicitDataDependencies (const IDataHandleHolder *child) |
| Add the dependencies of another DataHandleHolder to our dependency list. More... | |
| const DataObjIDColl & | ignoredDataDependencies (AccessMode access) const |
| Tell which data dependencies have been ignored due to an empty key. More... | |
| void | initializeDataHandleHolder () |
| Initialize the DataHandles. More... | |
Protected Member Functions inherited from PropertyHolder< CommonMessaging< implements< IAlgorithm, IDataHandleHolder, IProperty, IStateful > > > | |
| Gaudi::Details::PropertyBase * | property (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< std::string > | m_addrLeaf |
| Gaudi::Property< std::string > | m_addrColName |
| Gaudi::Property< std::string > | m_collSvcName {this, "TagCollectionSvc", "NTupleSvc", "name of the collection service"} |
| Gaudi::Property< bool > | m_objectsFirst |
| Gaudi::Property< std::string > | m_tagName {this, "Collection", "", "name of the tag collection in the transient store"} |
| INTupleItem * | m_addrColumn = nullptr |
| NTuple column to hold the opaque address of the address leaf. More... | |
| std::string | m_topLeafName |
| Name of the top leaf (performance cache) More... | |
| bool | m_isTopLeaf = false |
| Short cut flag to indicate if the address leaf is the top leaf (performace cache) More... | |
| SmartIF< INTupleSvc > | m_collectionSvc |
| Keep reference to the tuple service. More... | |
| std::unique_ptr< GenericAddress > | m_addr |
| Address buffer. More... | |
| NTuple::Item< IOpaqueAddress * > | m_item |
| Address item buffer. More... | |
Protected Attributes inherited from OutputStream | |
| Gaudi::Property< ItemNames > | m_itemNames {this, "ItemList", {}, "vector of item names to be saved to this stream"} |
| Gaudi::Property< ItemNames > | m_optItemNames |
| Gaudi::Property< AlgDependentItemNames > | m_algDependentItemList |
| Gaudi::Property< bool > | m_doPreLoad |
| Gaudi::Property< bool > | m_doPreLoadOpt |
| Gaudi::Property< std::string > | m_output {this, "Output", {}, "name of the output file specification"} |
| Gaudi::Property< std::string > | m_outputName {this, "OutputFile", {}, "name of the output file"} |
| Gaudi::Property< std::string > | m_storeName |
| Gaudi::Property< std::string > | m_persName |
| Gaudi::Property< std::vector< std::string > > | m_acceptNames |
| Gaudi::Property< std::vector< std::string > > | m_requireNames |
| Gaudi::Property< std::vector< std::string > > | m_vetoNames |
| Gaudi::Property< bool > | m_verifyItems |
| bool | m_fireIncidents = true |
| should I fire incidents for writing opening/closing etc? in the baseclass, always fire the incidents by default in e.g. More... | |
| SmartIF< IIncidentSvc > | m_incidentSvc |
| Reference to the incident service. More... | |
| std::string | m_outputType = "UPDATE" |
| Output type: NEW(NEW,CREATE,WRITE,RECREATE), UPDATE) More... | |
| SmartIF< IDataProviderSvc > | m_pDataProvider |
| Keep reference to the data provider service. More... | |
| SmartIF< IDataManagerSvc > | m_pDataManager |
| Keep reference to the data manager service. More... | |
| SmartIF< IConversionSvc > | m_pConversionSvc |
| Keep reference to the data conversion service. More... | |
| DataStoreItem * | m_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< 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... | |
Protected Attributes inherited from Algorithm | |
| DataObjIDMapping | m_updateDependencies |
| Hook for for derived classes to alter the DataObjID of dependencies. More... | |
Specialized output stream class for event tag collections, where the basic Event entry point should be placed as well into the collection itself.
The TagCollectionStream is a rather specialized object combining features of NTuple I/O and object I/O. The main working points are:
1) Write a "normal" tag collection. The address column [property AddressColumn, default:"Address"] is added to the Ntuple identified by its name [mandatory property Collection]. The address column is set to the opaque address of the specified leaf [property "AddressLeaf", default:"/Event"]. The NTuple must be registered to the TES of the service [property: TagCollectionSvc, default:"NTupleSvc"]. This is the normal mode event tag collections work.
2) Write a tag collection with "REDIRECTED INPUT". Example: The collection is created from an intermediate file (MINI DST), but the Address column of the NTuple should point to the file e.g. containing the raw data.
Note: The actual address of "/Event" get changed. No other output should be created after writing such a tag collection.
3) Write an "EMBEDDED COLLECTION". In this mode the OutputStream and the NTuple stream are combined. depending on the property TagCollectionStream.ObjectsFirst the objects are written first and the the tags. The tag file and the file containing the objects may be identical.
Note:
Author: M.Frank Version: 1.0
Definition at line 61 of file TagCollectionStream.h.
| TagCollectionStream::TagCollectionStream | ( | const std::string & | name, |
| ISvcLocator * | pSvcLocator | ||
| ) |
Standard algorithm Constructor.
Definition at line 17 of file TagCollectionStream.cpp.
|
protectedvirtual |
Connect address column, if not already connected.
Definition at line 23 of file TagCollectionStream.cpp.
|
override |
Terminate TagCollectionStream.
Definition at line 94 of file TagCollectionStream.cpp.
|
override |
Initialize TagCollectionStream.
Definition at line 42 of file TagCollectionStream.cpp.
|
protected |
Write data objects.
Definition at line 114 of file TagCollectionStream.cpp.
|
overrideprotectedvirtual |
OutputStream override: Select the different objects and write them to file.
Reimplemented from OutputStream.
Definition at line 134 of file TagCollectionStream.cpp.
|
protected |
Write full event record.
Definition at line 125 of file TagCollectionStream.cpp.
|
protected |
Write tuple data.
Definition at line 103 of file TagCollectionStream.cpp.
|
protected |
Address buffer.
Definition at line 82 of file TagCollectionStream.h.
|
protected |
Definition at line 66 of file TagCollectionStream.h.
|
protected |
NTuple column to hold the opaque address of the address leaf.
Definition at line 74 of file TagCollectionStream.h.
|
protected |
Definition at line 64 of file TagCollectionStream.h.
|
protected |
Keep reference to the tuple service.
Definition at line 80 of file TagCollectionStream.h.
|
protected |
Definition at line 68 of file TagCollectionStream.h.
|
protected |
Short cut flag to indicate if the address leaf is the top leaf (performace cache)
Definition at line 78 of file TagCollectionStream.h.
|
protected |
Address item buffer.
Definition at line 84 of file TagCollectionStream.h.
|
protected |
Definition at line 69 of file TagCollectionStream.h.
|
protected |
Definition at line 71 of file TagCollectionStream.h.
|
protected |
Name of the top leaf (performance cache)
Definition at line 76 of file TagCollectionStream.h.