26 #define ON_DEBUG if (log.level() <= MSG::DEBUG)
149 for ( ItemNames::const_iterator
i = a->second.begin();
150 i != a->second.end(); ++
i )
236 if ( sel->begin() != sel->end() )
243 for ( IDataSelector::iterator j = sel->begin(); j != sel->end(); ++j )
256 catch (
const std::exception & excpt )
259 const std::string loc = ( (*j)->registry() ?
260 (*j)->registry()->identifier() :
"UnRegistered" );
262 <<
"std::exception during createRep for '" << loc <<
"' "
269 for ( IDataSelector::iterator j = sel->begin(); j != sel->end(); ++j )
280 catch (
const std::exception & excpt )
283 const std::string loc = ( (*j)->registry() ?
284 (*j)->registry()->identifier() :
"UnRegistered" );
286 <<
"std::exception during fillRepRefs for '" << loc <<
"'"
310 if ( level < m_currentItem->depth() ) {
311 if ( dir->
object() != 0 ) {
343 log <<
MSG::ERROR <<
"Cannot write mandatory object(s) (Not found) "
359 log <<
MSG::DEBUG <<
"Ignore request to write non-mandatory object(s) "
369 const Items& items = iAlgItems->second;
374 for ( Items::const_iterator
i = items.begin();
i != items.end(); ++
i )
382 if ( !iret.
isSuccess() ) { status = iret; }
386 log <<
MSG::ERROR <<
"Cannot write mandatory (algorithm dependent) object(s) (Not found) "
397 std::set<DataObject*> unique;
398 std::vector<DataObject*> tmp;
400 for (std::vector<DataObject*>::iterator o =
m_objects.begin(); o !=
m_objects.end(); ++o) {
401 if (!unique.count(*o)) {
420 for ( Items::iterator
i = itms.begin();
i != itms.end();
i++ ) {
423 itms.erase(itms.begin(), itms.end());
430 if ( (*i)->path() ==
path )
return (*
i);
433 if ( (*j)->path() ==
path )
return (*j);
442 size_t sep = descriptor.rfind(
"#");
443 std::string obj_path (descriptor,0,sep);
444 std::string slevel (descriptor,sep+1,descriptor.length());
445 if ( slevel ==
"*" ) {
449 level = atoi(slevel.c_str());
452 size_t idx = obj_path.find(
"/",1);
453 while(idx != std::string::npos) {
454 std::string sub_item = obj_path.substr(0,idx);
458 idx = obj_path.find(
"/",idx+1);
464 <<
" with " << item->
depth()
465 <<
" level(s)." <<
endmsg;
466 itms.push_back( item );
474 std::string dbType, svc, shr;
477 for(Tokenizer::Items::iterator
i = tok.
items().begin();
i != tok.
items().end(); ++
i) {
478 const std::string& tag = (*i).tag();
479 const std::string& val = (*i).value();
489 case 'V': svc = val;
break;
490 case 'H': shr =
"YES";
break;
496 if ( ::strncasecmp(val.c_str(),
"RECREATE",3)==0 )
498 else if ( ::strncasecmp(val.c_str(),
"READ",3)==0 )
523 if ( dbType.length() > 0 || svc.length() > 0 ) {
524 std::string typ = dbType.length()>0 ? dbType : svc;
531 status = ipers->getService(typ, cnvSvc);
533 log <<
MSG::FATAL <<
"Unable to locate IConversionSvc interface of database type " << typ <<
endmsg;
542 <<
"Unable to locate IConversionSvc interface (Unknown technology) " <<
endmsg
543 <<
"You either have to specify a technology name or a service name!" <<
endmsg
544 <<
"Please correct the job option \"" <<
name() <<
".Output\" !" <<
endmsg;
561 "OutputStream::acceptAlgsHandler",sc);
576 "OutputStream::requireAlgsHandler",sc);
591 "OutputStream::vetoAlgsHandler",sc);
627 <<
"Failed to decode Algorithm name " << theName <<
endmsg;
634 std::vector<Algorithm*>* theAlgs )
642 const std::vector<std::string> nameList = theNames.
value( );
643 for ( std::vector<std::string>::const_iterator it = nameList.begin();
644 it != nameList.end(); ++it )
651 for ( std::vector<Algorithm*>::iterator ita = theAlgs->begin();
652 ita != theAlgs->end(); ++ita )
655 if ( theAlgorithm == existAlgorithm )
664 theAlgs->push_back( theAlgorithm );
680 typedef std::vector<Algorithm*>::iterator AlgIter;
690 if ( (*i)->isExecuted() && (*i)->filterPassed() ) {
703 if ( !(*i)->isExecuted() || !(*i)->filterPassed() ) {
716 if ( (*i)->isExecuted() && (*i)->filterPassed() ) {
StringArrayProperty m_acceptNames
Vector of names of Algorithms that this stream accepts.
StatusCode decodeAlgorithms(StringArrayProperty &theNames, std::vector< Algorithm * > *theAlgs)
Decode specified list of Algorithms.
bool isEventAccepted() const
Test whether this event should be output.
Definition of the MsgStream class used to transmit messages.
void clearItems(Items &itms)
Clear item list.
virtual bool hasInput() const
Tell if the instance has been configured with input items or not.
Small smart pointer class with automatic reference counting for IInterface.
Define general base for Gaudi exception.
StatusCode decodeRequireAlgs()
Decode list of Algorithms that this stream requires.
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
IDataSelector m_objects
Collection of objects being selected.
int depth() const
Accessor: Retrieve load depth.
std::string m_storeName
Name of the service managing the data store.
SmartIF< ISvcLocator > & serviceLocator() const
The standard service locator.
int m_events
Number of events written to this output stream.
Items & items()
Access token collection.
virtual bool filterPassed() const
Did this algorithm pass or fail its filter criterion for the last event?
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.
DataStoreItem * m_currentItem
Keep track of the current item.
bool isSuccess() const
Test for a status code of SUCCESS.
StringArrayProperty m_vetoNames
Vector of names of Algorithms that this stream is vetoed by.
virtual bool isExecuted() const
Has this algorithm been executed since the last reset?
Property * declareProperty(const std::string &name, T &property, const std::string &doc="none") const
Declare the named property.
void analyse(const std::string &s, const char *delim, const char *tagBegin, const char *tagEnd, const char *eq, const char *valBegin, const char *valEnd)
Analyse tokens from string.
std::string m_outputName
Name of the output file.
void requireAlgsHandler(Property &theProp)
Handler for RequireAlgs Property.
std::string m_persName
Name of the persistency service capable to write data from the store.
IDataSelector * selectedObjects()
Return the list of selected objects.
virtual StatusCode execute()
Working entry point.
SmartIF< IDataProviderSvc > m_pDataProvider
Keep reference to the data provider service.
AlgDependentItemNames m_algDependentItemList
Mapping between algorithm names, and a list of items for which, if the algorithm in question accepted...
Description of the DataStoreItem class.
bool isFailure() const
Test for a status code of FAILURE.
#define DECLARE_COMPONENT(type)
const std::string & path() const
Accessor: Retrieve load path.
A small to stream Data I/O.
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)
virtual void declareUpdateHandler(PropertyCallbackFunctor *pf)
set new callback for update
virtual StatusCode writeObjects()
Select the different objects and write them to file.
SmartIF< IConversionSvc > m_pConversionSvc
Keep reference to the data conversion service.
const std::string EndOutputFile
an output file has been finished
virtual StatusCode connectConversionSvc()
bool isValid() const
Allow for check if smart pointer is valid.
AlgDependentItems m_algDependentItems
Items to be saved for specific algorithms.
bool m_verifyItems
Flag to indicate that item consistency should be checked.
std::vector< DataStoreItem * > Items
OutputStreamAgent * m_agent
Keep reference of agent.
This class is used for returning status codes from appropriate routines.
virtual StatusCode finalize()
Terminate OutputStream.
Items m_itemList
Vector of items to be saved to this stream.
bool m_doPreLoad
Flag indicating whether data pre-loading should be performed.
virtual const std::string & name() const
The identifying name of the algorithm object.
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.
std::vector< Algorithm * > * m_requireAlgs
Vector of Algorithms that this stream requires.
SmartIF< IMessageSvc > & msgSvc() const
The standard message service.
The IRegistry represents the entry door to the environment any data object residing in a transient da...
TYPE * get() const
Get interface pointer.
SmartIF< IDataManagerSvc > m_pDataManager
Keep reference to the data manager service.
std::vector< Algorithm * > * m_acceptAlgs
Vector of Algorithms that this stream accepts.
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.
const TYPE & value() const
explicit conversion
virtual DataObject * object() const =0
Retrieve object behind the link.
StatusCode decodeVetoAlgs()
Decode list of Algorithms that this stream is vetoed by.
GAUDI_API std::string path(const AIDA::IBaseHistogram *aida)
get the path in THS for AIDA histogram
virtual ~OutputStream()
Standard Destructor.
Base class from which all concrete algorithm classes should be derived.
ItemNames m_itemNames
Vector of item names.
Property base class allowing Property* collections to be "homogeneous".
ItemNames m_optItemNames
Vector of item names.
virtual void setAddress(IOpaqueAddress *pAddress)=0
Set/Update Opaque storage address.
Base class for all Incidents (computing events).
void acceptAlgsHandler(Property &theProp)
Handler for AcceptAlgs Property.
StringArrayProperty m_requireNames
Vector of names of Algorithms that this stream requires.
Algorithm * decodeAlgorithm(const std::string &theName)
Decode a single algorithm name.
virtual unsigned long addRef()=0
Increment the reference count of Interface instance.
OutputStream(const std::string &name, ISvcLocator *pSvcLocator)
Standard algorithm Constructor.
const std::string WroteToOutputFile
the output file was written to in this event
const std::string FailOutputFile
could not create or write to this file
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.
Opaque address interface definition.
std::string m_output
Name of the output file specification.
std::vector< Algorithm * > * m_vetoAlgs
Vector of Algorithms that this stream is vetoed by.
A DataObject is the base class of any identifiable object on any data store.
virtual StatusCode collectObjects()
Collect all objects to be written to the output stream.
virtual StatusCode initialize()
Initialize OutputStream.
std::vector< DataObject * > IDataSelector
This is only a placeholder to allow me compiling until the responsible guy does his work! M...
void reset(TYPE *ptr=0)
Set the internal pointer to the passed one disposing of the old one.
void toupper(std::string &s)
void vetoAlgsHandler(Property &theProp)
Handler for VetoAlgs Property.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
StatusCode decodeAcceptAlgs()
Decode list of Algorithms that this stream accepts.
bool m_fireIncidents
should I fire incidents for writing opening/closing etc?
Items m_optItemList
Vector of optional items to be saved to this stream.