Go to the documentation of this file.
   32 #define GAUDISVC_NTUPLESVC_CPP 
   62   m_rootName = 
"/NTUPLES";
 
   63   m_rootCLID = CLID_DataObject;
 
   96   if ( !pRegistry ) 
return nullptr;
 
   99   auto        idx  = full.find( 
SEPARATOR, len + 1 );
 
  100   std::string path = ( idx == std::string::npos ) ? full : full.substr( 0, idx );
 
  102   return ( i != 
m_connections.end() ) ? i->second.service : 
nullptr;
 
  106   long        need_update = 0;
 
  115       for ( 
auto d = leaves.
begin(); d != leaves.
end(); d++ ) {
 
  116         if ( !( *d )->object() ) 
continue;
 
  119         unsigned long typ = pA->
ipar()[1];
 
  120         if ( typ != 
'R' && typ != 
'N' && typ != 
'U' ) 
continue;
 
  123         if ( !svc ) 
continue;
 
  127           DataObject* obj = r->object();
 
  128           if ( obj ) sel.push_back( obj );
 
  133           auto       status = svc->
updateRep( 
r->address(), o );
 
  134           if ( !status.isSuccess() ) iret = status;
 
  139           if ( !status.isSuccess() ) iret = status;
 
  147     error() << 
"ERROR while saving NTuples" << 
endmsg;
 
  150   if ( need_update > 0 ) { info() << 
"NTuples saved successfully" << 
endmsg; }
 
  157   if ( isvc ) isvc->finalize().ignore();
 
  158   c.service->release();
 
  189   return connect( ident, logName );
 
  198     long              loc = ident.
find( 
" " );
 
  200     logname      = ident.
substr( 0, loc );
 
  204     for ( 
auto attrib : Parser( ident.
substr( loc + 1 ) ) ) {
 
  205       switch ( ::
toupper( attrib.tag[0] ) ) {
 
  213         switch ( ::
toupper( attrib.value[0] ) ) {
 
  235         props.emplace_back( attrib.tag, attrib.value );
 
  251   error() << 
"Cannot add " << ident << 
" invalid filename!" << 
endmsg;
 
  262     error() << 
"Could not get PropMgr" << 
endmsg;
 
  269     error() << 
"Could not get NTuple Persistency format" 
  270             << 
" from ApplicationMgr properties" << 
endmsg;
 
  275   if ( 
sp.value() == 
"HBOOK" ) {
 
  277   } 
else if ( 
sp.value() == 
"ROOT" ) {
 
  280     error() << 
"Unknown NTuple Persistency format: " << 
sp.value() << 
endmsg;
 
  284   if ( !typ.
empty() && typ != 
sp.value() ) {
 
  285     warning() << 
"NTuple persistency type is " << 
sp.value() << 
"." << 
endmsg << 
"Type given by job option " 
  286               << 
"NTupleSvc.Input/Output ignored!" << 
endmsg;
 
  302   auto status = pService->sysInitialize();
 
  303   if ( !status.isSuccess() ) 
return status;
 
  311   if ( typ == CLID_ColumnWiseTuple ) {
 
  313   } 
else if ( typ == CLID_RowWiseTuple ) {
 
  330   assert( !
path.empty() );
 
  338     error() << 
"Cannot book N-tuple " << 
path << 
" (Exists already)" << 
endmsg;
 
  342   if ( sep == std::string::npos ) {
 
  343     error() << 
"Cannot book N-tuple " << 
path << 
" (Invalid path)" << 
endmsg;
 
  351     error() << 
"Cannot book N-tuple " << 
path << 
" (Invalid parent directory)" << 
endmsg;
 
  356   if ( !tup ) { error() << 
"Cannot book N-tuple " << 
path << 
" (Unknown reason)" << 
endmsg; }
 
  364   assert( !relPath.
empty() );
 
  401   assert( !relPath.
empty() );
 
  406       if ( relPath[0] != 
'/' ) full += 
"/";
 
  426   assert( !relPath.
empty() );
 
  428   if ( relPath[0] != 
'/' ) full += 
"/";
 
  442     entryname += logname;
 
  446       info() << 
"Added stream file:" << 
filename << 
" as " << logname << 
endmsg;
 
  451   error() << 
"Cannot add file:" << 
filename << 
" as " << logname << 
endmsg;
 
  461     if ( sep2 != std::string::npos ) {
 
  497   return status.
isSuccess() ? 
save( pObj ) : Status::INVALID_OBJ_PATH;
 
  507       if ( pSvc && pReg ) {
 
  513       return Status::NO_DATA_LOADER;
 
  516   return Status::INVALID_OBJECT;
 
  523   return status.
isSuccess() ? 
save( pObj ) : Status::INVALID_OBJ_PATH;
 
  546       return Status::NO_DATA_LOADER;
 
  549   return Status::INVALID_OBJECT;
 
  580         status                = pSvc->
updateObj( pAddr, n_tuple );
 
  584       status = Status::NO_DATA_LOADER;
 
  585     } 
catch ( ... ) { status = Status::INVALID_OBJECT; }
 
  
 
std::map< std::string, Connection > m_connections
Container of connection points.
NTuple::Directory * createDirectory(DataObject *pParent, const std::string &title) override
Create Ntuple directory and register it with the data store.
StatusCode attachTuple(const std::string &filename, const std::string &logname, const char typ, const long t)
Attach output/input file.
StatusCode writeRecord(NTuple::Tuple *tuple) override
Write single record to N tuple.
virtual StatusCode fillRepRefs(IOpaqueAddress *pAddress, DataObject *pObject)=0
Resolve the references of the converted object.
virtual StatusCode updateRepRefs(IOpaqueAddress *pAddress, DataObject *pObject)=0
Update the references of an already converted object.
Small class representing an N tuple directory in the transient store.
StatusCode updateDirectories()
Update directory data.
IConversionSvc * conversionService() const
Access conversion service.
::details::reverse_wrapper< T > reverse(T &&iterable)
virtual unsigned long release()
release reference to object
const long HBOOK_StorageType
StatusCode reinitialize() override
DataSvc overrides: reinitialize service.
NTuple::Tuple * book(const std::string &fullPath, const CLID &type, const std::string &title) override
Book Ntuple and register it with the data store.
Gaudi::Property< DBaseEntries > m_output
StatusCode findObject(std::string_view fullPath, DataObject *&pObject) override
Find object identified by its full path in the data store.
StatusCode retrieveObject(IRegistry *pDirectory, std::string_view path, DataObject *&pObject) override
Retrieve object from data store.
StatusCode clearStore() override
IDataManagerSvc: Remove all data objects in the data store.
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 setDataProvider(IDataProviderSvc *pService)=0
Set Data provider service.
#define DECLARE_NAMESPACE_OBJECT_FACTORY(n, x)
StatusCode connect(const std::string &ident) override
Add file to list I/O list.
const std::string & name() const override
Retrieve name of the service
virtual StatusCode createRep(DataObject *pObject, IOpaqueAddress *&refpAddress)=0
Convert the transient object to the requested representation.
void toupper(std::string &s)
Gaudi::Property< std::string > m_rootName
StatusCode finalize() override
DataSvc overrides: stop the service.
NTuple::Tuple * access(const std::string &fullPath, const std::string &filename) override
Access N tuple on disk.
virtual StatusCode updateObj(IOpaqueAddress *pAddress, DataObject *refpObject)=0
Update the transient object from the other representation.
const ValueType & value() const
Backward compatibility (.
Gaudi::Property< DBaseEntries > m_input
unsigned int CLID
Class ID definition.
virtual void setAddress(IOpaqueAddress *pAddress)=0
Set/Update Opaque storage address.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
const long ROOT_StorageType
StatusCode create(const CLID &typ, const std::string &title, NTuple::Tuple *&refpTuple) override
Create requested N tuple (Hide constructor)
virtual long repSvcType() const =0
Retrieve the class type of the data store the converter uses.
const StatusCode & ignore() const
Allow discarding a StatusCode without warning.
void releaseConnection(Connection &c)
Finalize single service.
SmartIF< IFace > as() const
return a new SmartIF instance to another interface
virtual IOpaqueAddress * address() const =0
Retrieve opaque storage address.
StatusCode disconnect(const std::string &nam) override
Close open connection.
constexpr static const auto SUCCESS
StatusCode objectLeaves(const DataObject *pObject, std::vector< IRegistry * > &refLeaves) override
IDataManagerSvc: Explore the object store: retrieve all leaves attached to the object.
virtual StatusCode updateObjRefs(IOpaqueAddress *pAddress, DataObject *pObject)=0
Update the references of an updated transient object.
unsigned long release() override
release reference to object
bool isConnected(const std::string &identifier) const override
Check if a datasource is connected.
StatusCode createService(const std::string &nam, const std::string &typ, const std::vector< Prop > &props, IConversionSvc *&pSvc)
Create conversion service.
Abstract base class which allows the user to interact with the actual N tuple implementation.
virtual StatusCode updateRep(IOpaqueAddress *pAddress, DataObject *pObject)=0
Update the converted representation of a transient object.
#define DECLARE_COMPONENT(type)
StatusCode disconnectAll() override
Close all open connections.
StatusCode setRoot(std::string root_name, DataObject *pRootObj) override
Initialize data store for new event by giving new event path and root object.
virtual const id_type & identifier() const =0
Full identifier (or key)
StatusCode registerObject(std::string_view parentPath, std::string_view objPath, DataObject *pObject) override
Register object with the data store.
StatusCode initialize() override
Service initialization.
StatusCode unregisterObject(std::string_view fullPath) override
Unregister object from the data store.
constexpr static const auto FAILURE
StatusCode initialize() override
DataSvc overrides: Initialize the service.
StatusCode readRecord(NTuple::Tuple *tuple) override
Read single record from N tuple.
IConversionSvc * getDataLoader(IRegistry *pReg) override
DataSvc overrides: Retrieve data loader.
Parse attribute strings allowing iteration over the various attributes.
const long TEST_StorageType
void setConversionService(IConversionSvc *svc)
Access conversion service.
IRegistry * registry() const
Get pointer to Registry.
virtual unsigned long addRef()=0
Increment the reference count of Interface instance.
void setTupleService(INTupleSvc *svc)
Access conversion service.
StatusCode registerAddress(std::string_view fullPath, IOpaqueAddress *pAddress) override
IDataManagerSvc: Register object address with the data store.
StatusCode save(const std::string &fullPath) override
Save N tuple to disk. Must be called in order to close the ntuple file properly.
virtual const unsigned long * ipar() const =0
Access to generic link parameters.
SmartIF< ISvcLocator > & serviceLocator() const override
Retrieve pointer to service locator
StatusCode finalize() override
Service initialization.