22 #define GAUDISVC_NTUPLESVC_CPP 53 m_rootName =
"/NTUPLES";
54 m_rootCLID = CLID_DataObject;
93 if ( !pRegistry )
return nullptr;
99 return ( i !=
m_connections.end() ) ? i->second.service :
nullptr;
104 long need_update = 0;
113 for (
auto d = leaves.
begin(); d != leaves.
end(); d++ ) {
114 if ( !( *d )->object() )
continue;
117 unsigned long typ = pA->
ipar()[1];
118 if ( typ !=
'R' && typ !=
'N' && typ !=
'U' )
continue;
121 if ( !svc )
continue;
132 if ( !status.isSuccess() ) iret = status;
137 if ( !status.isSuccess() ) iret = status;
148 if ( need_update > 0 ) {
149 info() <<
"NTuples saved successfully" <<
endmsg;
158 if ( isvc ) isvc->finalize().ignore();
177 m_connections.clear();
194 return connect( ident, logName );
204 long loc = ident.
find(
" " );
206 logname = ident.
substr( 0, loc );
210 for (
auto attrib : Parser( ident.
substr( loc + 1 ) ) ) {
211 switch (::
toupper( attrib.tag[0] ) ) {
219 switch (::
toupper( attrib.value[0] ) ) {
257 error() <<
"Cannot add " << ident <<
" invalid filename!" <<
endmsg;
274 StatusCode sts = appPropMgr->getProperty( &sp );
276 error() <<
"Could not get NTuple Persistency format" 277 <<
" from ApplicationMgr properties" <<
endmsg;
282 if ( sp.
value() ==
"HBOOK" ) {
284 }
else if ( sp.
value() ==
"ROOT" ) {
292 warning() <<
"NTuple persistency type is " << sp.
value() <<
"." <<
endmsg <<
"Type given by job option " 293 <<
"NTupleSvc.Input/Output ignored!" <<
endmsg;
309 auto status = pService->sysInitialize();
310 if ( !status.isSuccess() )
return status;
319 if ( typ == CLID_ColumnWiseTuple ) {
321 }
else if ( typ == CLID_RowWiseTuple ) {
339 assert( !path.
empty() );
347 error() <<
"Cannot book N-tuple " << path <<
" (Exists already)" <<
endmsg;
351 if ( sep == std::string::npos ) {
352 error() <<
"Cannot book N-tuple " << path <<
" (Invalid path)" <<
endmsg;
360 error() <<
"Cannot book N-tuple " << path <<
" (Invalid parent directory)" <<
endmsg;
366 error() <<
"Cannot book N-tuple " << path <<
" (Unknown reason)" <<
endmsg;
376 assert( !relPath.
empty() );
379 return book( full, type, title );
397 status =
create( type, title, pObj );
417 assert( !relPath.
empty() );
422 if ( relPath[0] !=
'/' ) full +=
"/";
445 assert( !relPath.
empty() );
447 if ( relPath[0] !=
'/' ) full +=
"/";
462 entryname += logname;
466 info() <<
"Added stream file:" << filename <<
" as " << logname <<
endmsg;
471 error() <<
"Cannot add file:" << filename <<
" as " << logname <<
endmsg;
482 if ( sep2 != std::string::npos ) {
519 return status.
isSuccess() ?
save( pObj ) : Status::INVALID_OBJ_PATH;
530 if ( pSvc && pReg ) {
536 return Status::NO_DATA_LOADER;
540 return Status::INVALID_OBJECT;
548 return status.
isSuccess() ?
save( pObj ) : Status::INVALID_OBJ_PATH;
572 return Status::NO_DATA_LOADER;
576 return Status::INVALID_OBJECT;
610 status = pSvc->
updateObj( pAddr, n_tuple );
616 status = Status::NO_DATA_LOADER;
618 status = Status::INVALID_OBJECT;
StatusCode registerAddress(boost::string_ref fullPath, IOpaqueAddress *pAddress) override
IDataManagerSvc: Register object address with the data store.
Parse attribute strings allowing iteration over the various attributes.
void releaseConnection(Connection &c)
Finalize single service.
StatusCode unregisterObject(boost::string_ref fullPath) override
Unregister object from the data store.
#define DECLARE_NAMESPACE_OBJECT_FACTORY(n, x)
const long TEST_StorageType
constexpr static const auto FAILURE
StatusCode writeRecord(NTuple::Tuple *tuple) override
Write single record to N tuple.
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
const long HBOOK_StorageType
const std::string & name() const override
Retrieve name of the service.
Implementation of property with value of concrete type.
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
StatusCode initialize() override
DataSvc overrides: Initialize the service.
StatusCode reinitialize() override
DataSvc overrides: reinitialize service.
unsigned long release() override
release reference to object
StatusCode setRoot(std::string root_name, DataObject *pRootObj) override
Initialize data store for new event by giving new event path and root object.
::details::reverse_wrapper< T > reverse(T &&iterable)
Gaudi::Property< std::string > m_rootName
virtual StatusCode setDataProvider(IDataProviderSvc *pService)=0
Set Data provider service.
std::map< std::string, Connection > m_connections
Container of connection points.
NTuple::Tuple * book(const std::string &fullPath, const CLID &type, const std::string &title) override
Book Ntuple and register it with the data store.
NTuple::Tuple * access(const std::string &fullPath, const std::string &filename) override
Access N tuple on disk.
virtual StatusCode createRep(DataObject *pObject, IOpaqueAddress *&refpAddress)=0
Convert the transient object to the requested representation.
StatusCode disconnect(const std::string &nam) override
Close open connection.
Generic Transient Address.
virtual StatusCode updateRepRefs(IOpaqueAddress *pAddress, DataObject *pObject)=0
Update the references of an already converted object.
StatusCode registerObject(boost::string_ref parentPath, boost::string_ref objPath, DataObject *pObject) override
Register object with the data store.
IRegistry * registry() const
Get pointer to Registry.
StatusCode updateDirectories()
Update directory data.
virtual StatusCode traverseSubTree(boost::string_ref sub_tree_path, IDataStoreAgent *pAgent)=0
Analyse by traversing all data objects below the sub tree identified by its full path name...
virtual StatusCode updateObj(IOpaqueAddress *pAddress, DataObject *refpObject)=0
Update the transient object from the other representation.
StatusCode createService(const std::string &nam, const std::string &typ, const std::vector< Prop > &props, IConversionSvc *&pSvc)
Create conversion service.
#define DECLARE_COMPONENT(type)
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
virtual const unsigned long * ipar() const =0
Access to generic link parameters.
virtual const id_type & identifier() const =0
Full identifier (or key)
This class is used for returning status codes from appropriate routines.
Definition of the basic interface.
virtual StatusCode updateObjRefs(IOpaqueAddress *pAddress, DataObject *pObject)=0
Update the references of an updated transient object.
StatusCode readRecord(NTuple::Tuple *tuple) override
Read single record from N tuple.
Gaudi::Property< DBaseEntries > m_output
StatusCode objectLeaves(const DataObject *pObject, std::vector< IRegistry * > &refLeaves) override
IDataManagerSvc: Explore the object store: retrieve all leaves attached to the object.
NTuple::Directory * createDirectory(DataObject *pParent, const std::string &title) override
Create Ntuple directory and register it with the data store.
bool isConnected(const std::string &identifier) const override
Check if a datasource is connected.
The IRegistry represents the entry door to the environment any data object residing in a transient da...
const long ROOT_StorageType
StatusCode finalize() override
Service initialization.
virtual StatusCode updateRep(IOpaqueAddress *pAddress, DataObject *pObject)=0
Update the converted representation of a transient object.
unsigned int CLID
Class ID definition.
StatusCode setProperties()
Method for setting declared properties to the values specified for the job.
constexpr static const auto SUCCESS
virtual DataObject * object() const =0
Retrieve object behind the link.
Abstract base class which allows the user to interact with the actual N tuple implementation.
virtual unsigned long release()
release reference to object
StatusCode finalize() override
DataSvc overrides: stop the service.
virtual unsigned long release()=0
Release Interface instance.
IConversionSvc * getDataLoader(IRegistry *pReg) override
DataSvc overrides: Retrieve data loader.
virtual long repSvcType() const =0
Retrieve the class type of the data store the converter uses.
StatusCode initialize() override
Service initialization.
virtual void setAddress(IOpaqueAddress *pAddress)=0
Set/Update Opaque storage address.
void setTupleService(INTupleSvc *svc)
Access conversion service.
StatusCode save(const std::string &fullPath) override
Save N tuple to disk. Must be called in order to close the ntuple file properly.
Gaudi::Property< DBaseEntries > m_input
virtual unsigned long addRef()=0
Increment the reference count of Interface instance.
StatusCode connect(const std::string &ident) override
Add file to list I/O list.
StatusCode create(const CLID &typ, const std::string &title, NTuple::Tuple *&refpTuple) override
Create requested N tuple (Hide constructor)
Small class representing an N tuple directory in the transient store.
void setConversionService(IConversionSvc *svc)
Access conversion service.
const ValueType & value() const
Backward compatibility (.
StatusCode disconnectAll() override
Close all open connections.
Opaque address interface definition.
Base class for all conversion services.
StatusCode retrieveObject(IRegistry *pDirectory, boost::string_ref path, DataObject *&pObject) override
Retrieve object from data store.
The IProperty is the basic interface for all components which have properties that can be set or get...
StatusCode attachTuple(const std::string &filename, const std::string &logname, const char typ, const long t)
Attach output/input file.
virtual IOpaqueAddress * address() const =0
Retrieve opaque storage address.
A DataObject is the base class of any identifiable object on any data store.
virtual StatusCode fillRepRefs(IOpaqueAddress *pAddress, DataObject *pObject)=0
Resolve the references of the converted object.
StatusCode findObject(boost::string_ref fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
SmartIF< ISvcLocator > & serviceLocator() const override
Retrieve pointer to service locator.
void toupper(std::string &s)
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
StatusCode clearStore() override
IDataManagerSvc: Remove all data objects in the data store.
IConversionSvc * conversionService() const
Access conversion service.