26 #define ON_DEBUG if ( msgLevel( MSG::DEBUG ) ) 31 return algState.state() == AlgExecState::State::Done && algState.filterPassed();
43 fatal() <<
"Unable to locate IDataManagerSvc interface" <<
endmsg;
61 fatal() <<
"Unable to connect to conversion service." <<
endmsg;
160 if (
sel->begin() !=
sel->end() ) {
165 for (
auto& j : *
sel ) {
175 const std::string loc = ( j->registry() ? j->registry()->identifier() :
"UnRegistered" );
182 for (
auto& j : *
sel ) {
188 const std::string loc = ( j->registry() ? j->registry()->identifier() :
"UnRegistered" );
209 if ( level < m_currentItem->depth() ) {
257 auto alg = iAlgItems.first;
259 if ( passed(
alg ) ) {
262 for (
const auto& i :
items ) {
284 if ( !unique.count( o ) ) {
301 for (
auto& i : itms )
delete i;
319 auto sep = descriptor.
rfind(
"#" );
321 if ( sep != std::string::npos ) {
326 size_t idx = obj_path.
find(
"/", 1 );
327 while ( idx != std::string::npos ) {
330 idx = obj_path.
find(
"/", idx + 1 );
334 const auto& item = itms.
back();
336 debug() <<
"Adding OutputStream item " << item->path() <<
" with " << item->depth() <<
" level(s)." <<
endmsg;
347 switch ( ::
toupper( tag[0] ) ) {
355 switch ( ::
toupper( tag[1] ) ) {
365 switch ( ::
toupper( val[0] ) ) {
367 if ( ::strncasecmp( val.
c_str(),
"RECREATE", 3 ) == 0 )
369 else if ( ::strncasecmp( val.
c_str(),
"READ", 3 ) == 0 )
402 status = ipers->getService( typ, cnvSvc );
404 fatal() <<
"Unable to locate IConversionSvc interface of database type " << typ <<
endmsg;
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;
428 theAlgorithm = dynamic_cast<Gaudi::Algorithm*>( theIAlg.
get() );
434 fatal() <<
"Can't locate ApplicationMgr!!!" <<
endmsg;
437 if ( !theAlgorithm ) {
warning() <<
"Failed to decode Algorithm name " << theName <<
endmsg; }
448 for (
const auto& it : theNames.value() ) {
451 if ( theAlgorithm ) {
454 theAlgorithm->addRef();
458 info() << it <<
" doesn't exist - ignored" <<
endmsg;
Gaudi::Property< std::vector< std::string > > m_acceptNames
Parse attribute strings allowing iteration over the various attributes.
void clearItems(Items &itms)
Clear item list.
Gaudi::Property< std::vector< std::string > > m_vetoNames
IDataSelector m_objects
Collection of objects being selected.
StatusCode finalize() override
Terminate OutputStream.
int m_events
Number of events written to this output stream.
Implementation of property with value of concrete type.
virtual StatusCode traverseSubTree(std::string_view sub_tree_path, IDataStoreAgent *pAgent)=0
Analyse by traversing all data objects below the sub tree identified by its full path name.
virtual StatusCode addPreLoadItem(const DataStoreItem &item)=0
Add an item to the preload list.
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
std::string m_outputType
Output type: NEW(NEW,CREATE,WRITE,RECREATE), UPDATE)
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Gaudi::Property< bool > m_verifyItems
std::vector< Gaudi::Algorithm * > m_requireAlgs
Vector of Algorithms that this stream requires.
DataStoreItem * m_currentItem
Keep track of the current item.
Gaudi::Property< std::string > m_output
Gaudi::Property< std::string > m_outputName
The IAlgManager is the interface implemented by the Algorithm Factory in the Application Manager to s...
constexpr static const auto SUCCESS
Gaudi::Property< ItemNames > m_optItemNames
virtual StatusCode createRep(DataObject *pObject, IOpaqueAddress *&refpAddress)=0
Convert the transient object to the requested representation.
IDataSelector * selectedObjects()
Return the list of selected objects.
SmartIF< ISvcLocator > & serviceLocator() const override
The standard service locator.
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
SmartIF< IDataProviderSvc > m_pDataProvider
Keep reference to the data provider service.
Description of the DataStoreItem class.
Gaudi::Property< bool > m_doPreLoad
TYPE * get() const
Get interface pointer.
A small to stream Data I/O.
#define DECLARE_COMPONENT(type)
virtual bool collect(IRegistry *dir, int level)
Store agent's classback.
DataStoreItem * findItem(const std::string &path)
Find single item identified by its path (exact match)
StatusCode service(const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
Templated method to access a service by name.
virtual bool hasInput() const
Tell if the instance has been configured with input items or not.
virtual StatusCode writeObjects()
Select the different objects and write them to file.
SmartIF< IConversionSvc > m_pConversionSvc
Keep reference to the data conversion service.
virtual StatusCode connectOutput(const std::string &outputFile)=0
Connect the output file to the service.
StatusCode initialize() override
Initialize OutputStream.
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
virtual void fireIncident(const Incident &incident)=0
Fire an Incident.
virtual StatusCode connectConversionSvc()
AlgDependentItems m_algDependentItems
Items to be saved for specific algorithms.
virtual StatusCode commitOutput(const std::string &outputFile, bool do_commit)=0
Commit pending output.
std::vector< Gaudi::Algorithm * > m_vetoAlgs
Vector of Algorithms that this stream is vetoed by.
Gaudi::Property< std::vector< std::string > > m_requireNames
This class is used for returning status codes from appropriate routines.
Items m_itemList
Vector of items to be saved to this stream.
void addItem(Items &itms, const std::string &descriptor)
Add item to output streamer list.
GAUDI_API const EventContext & currentContext()
The IRegistry represents the entry door to the environment any data object residing in a transient da...
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
Gaudi::Property< AlgDependentItemNames > m_algDependentItemList
SmartIF< IDataManagerSvc > m_pDataManager
Keep reference to the data manager service.
void clearSelection()
Clear list of selected objects.
SmartIF< IIncidentSvc > m_incidentSvc
Reference to the incident service.
virtual IOpaqueAddress * address() const =0
Retrieve opaque storage address.
virtual DataObject * object() const =0
Retrieve object behind the link.
StatusCode execute() override
Working entry point.
const StatusCode & ignore() const
Ignore/check StatusCode.
Gaudi::Property< std::string > m_storeName
virtual StatusCode retrieveObject(IRegistry *pDirectory, std::string_view path, DataObject *&pObject)=0
Retrieve object identified by its directory entry.
virtual void setAddress(IOpaqueAddress *pAddress)=0
Set/Update Opaque storage address.
Base class for all Incidents (computing events).
Base class from which all concrete algorithm classes should be derived.
Gaudi::Property< bool > m_doPreLoadOpt
constexpr static const auto FAILURE
bool isEventAccepted() const
Test whether this event should be output.
Data persistency service interface.
void reset(TYPE *ptr=nullptr)
Set the internal pointer to the passed one disposing of the old one.
StatusCode collectFromSubTree(DataObject *)
void decodeAlgorithms(Gaudi::Property< std::vector< std::string >> &theNames, std::vector< Gaudi::Algorithm * > &theAlgs)
Decode specified list of Algorithms.
Opaque address interface definition.
Gaudi::Property< std::string > m_persName
Gaudi::Algorithm * decodeAlgorithm(const std::string &theName)
Decode a single algorithm name.
A DataObject is the base class of any identifiable object on any data store.
Gaudi::Property< ItemNames > m_itemNames
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.
void toupper(std::string &s)
MsgStream & fatal() const
shortcut for the method msgStream(MSG::FATAL)
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
std::vector< Gaudi::Algorithm * > m_acceptAlgs
Vector of Algorithms that this stream accepts.
bool m_fireIncidents
should I fire incidents for writing opening/closing etc? in the baseclass, always fire the incidents ...
const std::string & name() const override
The identifying name of the algorithm object.
const std::string & path() const
Accessor: Retrieve load path.
Items m_optItemList
Vector of optional items to be saved to this stream.