| The Gaudi Framework v32r1 (f65d50dc)

Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
Gaudi::RootCnvSvc Class Reference

Description: More...

`#include <src/RootCnvSvc.h>`

Inheritance diagram for Gaudi::RootCnvSvc:
[legend]
Collaboration diagram for Gaudi::RootCnvSvc:
[legend]

## Public Member Functions
| RootCnvSvc (const std::string &name, ISvcLocator *svc)
| Standard constructor. More...
StatusCode | updateServiceState (IOpaqueAddress *) override
| Update state of the service. More...
StatusCode | error (const std::string &msg)
| Standard way to print errors. More...
StatusCode | connectDatabase (const std::string &dataset, int mode, RootDataConnection **con)
| Connect the output file to the service with open mode. More...
StatusCode | initialize () override
| ConversionSvc overload: initialize Db service. More...
StatusCode | finalize () override
| ConversionSvc overload: Finalize Db service. More...
IConverter * | createConverter (long typ, const CLID &wanted, const ICnvFactory *fac) override
| ConversionSvc overload: Create new Converter using factory. More...
void | loadConverter (DataObject *pObj) override
| ConversionSvc overload: Load the class (dictionary) for the converter. More...
StatusCode | connectOutput (const std::string &outputFile, const std::string &openMode) override
| Connect the output file to the service with open mode. More...
StatusCode | connectOutput (const std::string &outputFile) override
| Connect the output file to the service. More...
StatusCode | commitOutput (const std::string &outputFile, bool do_commit) override
| Commit pending output. More...
virtual StatusCode | disconnect (const std::string &dbName)
| Disconnect from an existing data stream. More...
StatusCode | createAddress (long svc_type, const CLID &clid, const std::string *par, const unsigned long *ip, IOpaqueAddress *&refpAddress) override
| IAddressCreator implementation: Address creation. More...
StatusCode | createAddress (long svc_type, const CLID &clid, const std::string &refAddress, IOpaqueAddress *&refpAddress) override
| IAddressCreator implementation: Creates an address in string form to object form. More...
virtual StatusCode | createNullRep (const std::string &path)
| Insert null marker for not existent transient object. More...
virtual StatusCode | createNullRef (const std::string &path)
| Insert null marker for not existent transient object. More...
virtual StatusCode | i__createRep (DataObject *pObj, IOpaqueAddress *&refpAddr)
| Convert the transient object to the requested persistent representation. More...
virtual StatusCode | i__fillRepRefs (IOpaqueAddress *pAddr, DataObject *pObj)
| Resolve the references of the converted object. More...
virtual StatusCode | i__createObj (IOpaqueAddress *pAddr, DataObject *&refpObj)
| Create transient object from persistent data. More...
virtual StatusCode | i__fillObjRefs (IOpaqueAddress *pAddr, DataObject *pObj)
| Resolve the references of the created transient object. More...
Public Member Functions inherited from ConversionSvc
| ConversionSvc (const std::string &name, ISvcLocator *svc, long type)
| Standard Constructor. More...
| ConversionSvc (const ConversionSvc &)=delete
| disable copy and assignment More...
ConversionSvc & | operator= (const ConversionSvc &)=delete
StatusCode | initialize () override
| Initialize the service. More...
StatusCode | finalize () override
| stop the service. More...
long | repSvcType () const override
| Retrieve the class type of the data store the converter uses. More...
const CLID & | objType () const override
| Implementation of IConverter: dummy call. More...
StatusCode | setDataProvider (IDataProviderSvc *pService) override
| Implementation of IConverter: Set Data provider service. More...
SmartIF< IDataProviderSvc > & | dataProvider () const override
| Implementation of IConverter: Get Data provider service. More...
StatusCode | setConversionSvc (IConversionSvc *svc) override
| Implementation of IConverter: Set conversion service the converter is connected to. More...
SmartIF< IConversionSvc > & | conversionSvc () const override
| Implementation of IConverter: Get conversion service the converter is connected to. More...
StatusCode | setAddressCreator (IAddressCreator *creator) override
| Set address creator facility. More...
SmartIF< IAddressCreator > & | addressCreator () const override
| Retrieve address creator facility. More...
StatusCode | createObj (IOpaqueAddress *pAddress, DataObject *&refpObject) override
| Implementation of IConverter: Create the transient representation of an object. More...
StatusCode | fillObjRefs (IOpaqueAddress *pAddress, DataObject *pObject) override
| Implementation of IConverter: Resolve the references of the created transient object. More...
StatusCode | updateObj (IOpaqueAddress *pAddress, DataObject *refpObject) override
| Implementation of IConverter: Update the transient object from the other representation. More...
StatusCode | updateObjRefs (IOpaqueAddress *pAddress, DataObject *pObject) override
| Implementation of IConverter: Update the references of an updated transient object. More...
StatusCode | createRep (DataObject *pObject, IOpaqueAddress *&refpAddress) override
| Implementation of IConverter: Convert the transient object to the requested representation. More...
StatusCode | fillRepRefs (IOpaqueAddress *pAddress, DataObject *pObject) override
| Implementation of IConverter: Resolve the references of the converted object. More...
StatusCode | updateRep (IOpaqueAddress *pAddress, DataObject *pObject) override
| Implementation of IConverter: Update the converted representation of a transient object. More...
StatusCode | updateRepRefs (IOpaqueAddress *pAddress, DataObject *pObject) override
| Implementation of IConverter: Update the references of an already converted object. More...
StatusCode | addConverter (const CLID &clid) override
| Add converter object to conversion service. More...
StatusCode | addConverter (IConverter *pConverter) override
| Add converter object to conversion service. More...
StatusCode | removeConverter (const CLID &clid) override
| Remove converter object from conversion service (if present). More...
IConverter * | converter (const CLID &wanted) override
| Retrieve converter from list. More...
StatusCode | connectOutput (const std::string &outputFile, const std::string &openMode) override
| Connect the output file to the service with open mode. More...
StatusCode | connectOutput (const std::string &output) override
| Connect the output file to the service. More...
StatusCode | commitOutput (const std::string &output, bool do_commit) override
| Commit pending output. More...
StatusCode | createAddress (long svc_type, const CLID &clid, const std::string *par, const unsigned long *ip, IOpaqueAddress *&refpAddress) override
| Create a Generic address using explicit arguments to identify a single object. More...
StatusCode | convertAddress (const IOpaqueAddress *pAddress, std::string &refAddress) override
| Convert an address to string form. More...
StatusCode | createAddress (long svc_type, const CLID &clid, const std::string &refAddress, IOpaqueAddress *&refpAddress) override
| Convert an address in string form to object form. More...
Public Member Functions inherited from extends< Service, IConversionSvc, IAddressCreator >
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 Service
const std::string & | name () const override
| Retrieve name of the service. More...
StatusCode | configure () override
StatusCode | initialize () override
StatusCode | start () override
StatusCode | stop () override
StatusCode | finalize () override
StatusCode | terminate () override
Gaudi::StateMachine::State | FSMState () const override
Gaudi::StateMachine::State | targetFSMState () const override
StatusCode | reinitialize () override
StatusCode | restart () override
StatusCode | sysInitialize () override
| Initialize Service. More...
StatusCode | sysStart () override
| Initialize Service. More...
StatusCode | sysStop () override
| Initialize Service. More...
StatusCode | sysFinalize () override
| Finalize Service. More...
StatusCode | sysReinitialize () override
| Re-initialize the Service. More...
StatusCode | sysRestart () override
| Re-initialize the Service. More...
| Service (std::string name, ISvcLocator *svcloc)
| Standard Constructor. More...
SmartIF< ISvcLocator > & | serviceLocator () const override
| Retrieve pointer to service locator. More...
StatusCode | setProperties ()
| Method for setting declared properties to the values specified for the job. More...
template<class T >
StatusCode | service (const std::string &name, const 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 &name, T *&psvc, bool createIf=true) const
template<typename IFace = IService>
SmartIF< IFace > | service (const std::string &name, bool createIf=true) const
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...
template<class T >
StatusCode | declareTool (ToolHandle< T > &handle, std::string toolTypeAndName, bool createIf=true)
| Declare used tool. More...
SmartIF< IAuditorSvc > & | auditorSvc () const
| The standard auditor service.May not be invoked before sysInitialize() has been invoked. More...
Public Member Functions inherited from PropertyHolder< CommonMessaging< implements< IService, 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< IService, 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
TClass * | getClass (DataObject *pObject)
| Helper: Get TClass for a given DataObject pointer. More...
MsgStream & | log () const
| Helper: Use message streamer. More...
Protected Member Functions inherited from ConversionSvc
virtual StatusCode | configureConverter (long typ, const CLID &clid, IConverter *cnv)
| Configure the new converter before initialize is called. More...
virtual StatusCode | initializeConverter (long typ, const CLID &clid, IConverter *cnv)
| Initialize the new converter. More...
virtual StatusCode | activateConverter (long typ, const CLID &clid, IConverter *cnv)
| Activate the new converter after initialization. More...
virtual SmartIF< IAddressCreator > & | addressCreator ()
| Retrieve address creation interface. More...
StatusCode | makeCall (int typ, bool ignore_add, bool ignore_obj, bool update, IOpaqueAddress *&pAddress, DataObject *&pObject)
Protected Member Functions inherited from Service
| ~Service () override
| Standard Destructor. More...
int | outputLevel () const
| get the `Service's` output level More...
Protected Member Functions inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
Gaudi::Details::PropertyBase * | property (const std::string &name) const
Protected Member Functions inherited from CommonMessaging< implements< IService, 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_ioPerfStats
Gaudi::Property< std::string > | m_shareFiles
Gaudi::Property< bool > | m_incidentEnabled {this, "EnableIncident", true, "Flag to enable incidents on FILE_OPEN"}
Gaudi::Property< std::string > | m_recordName
Gaudi::Property< int > | m_autoFlush
Gaudi::Property< int > | m_basketSize
Gaudi::Property< int > | m_bufferSize
Gaudi::Property< int > | m_splitLevel {this, "SplitLevel", 0, "Split level optimization parameter for ROOT TTree"}
Gaudi::Property< std::string > | m_compression
SmartIF< Gaudi::IIODataManager > | m_ioMgr
| Reference to the I/O data manager. More...
SmartIF< IIncidentSvc > | m_incidentSvc
| Reference to incident service. More...
Gaudi::RootDataConnection * | m_current = nullptr
| On writing: reference to active output stream. More...
TClass * | m_classRefs = nullptr
| TClass pointer to reference class. More...
TClass * | m_classDO = nullptr
| TClass pointer to DataObject class. More...
std::shared_ptr< RootConnectionSetup > | m_setup
| Setup structure (ref-counted) and passed to data connections. More...
std::string | m_currSection
| Property: ROOT section name. More...
std::set< std::string > | m_badFiles
| Set with bad files/tables. More...
std::unique_ptr< MsgStream > | m_log
| Message streamer. More...
Protected Attributes inherited from ConversionSvc
SmartIF< IDataProviderSvc > | m_dataSvc
| Pointer to data provider service. More...
SmartIF< IAddressCreator > | m_addressCreator
| Pointer to the address creation service interface. More...
SmartIF< IConversionSvc > | m_cnvSvc
| Pointer to the IConversionSvc interface of this. More...
long | m_type
| Conversion service type. More...
std::vector< WorkerEntry > | m_workers
| List of conversion workers. More...
Protected Attributes inherited from Service
Gaudi::StateMachine::State | m_state = Gaudi::StateMachine::OFFLINE
| Service state. More...
Gaudi::StateMachine::State | m_targetState = Gaudi::StateMachine::OFFLINE
| Service state. More...
Gaudi::Property< int > | m_outputLevel {this, "OutputLevel", MSG::NIL, "output level"}
Gaudi::Property< bool > | m_auditInit {this, "AuditServices", false, " unused"}
Gaudi::Property< bool > | m_auditorInitialize {this, "AuditInitialize", false, "trigger auditor on initialize()"}
Gaudi::Property< bool > | m_auditorStart {this, "AuditStart", false, "trigger auditor on start()"}
Gaudi::Property< bool > | m_auditorStop {this, "AuditStop", false, "trigger auditor on stop()"}
Gaudi::Property< bool > | m_auditorFinalize {this, "AuditFinalize", false, "trigger auditor on finalize()"}
Gaudi::Property< bool > | m_auditorReinitialize {this, "AuditReinitialize", false, "trigger auditor on reinitialize()"}
Gaudi::Property< bool > | m_auditorRestart {this, "AuditRestart", false, "trigger auditor on restart()"}
SmartIF< IAuditorSvc > | m_pAuditorSvc
| Auditor Service. More...

## Additional Inherited Members
Public Types inherited from extends< Service, IConversionSvc, IAddressCreator >
using | base_class = extends
| Typedef to this class. More...
using | extend_interfaces_base = extend_interfaces< Interfaces... >
| Typedef to the base of this class. More...
Public Types inherited from Service
using | Factory = Gaudi::PluginService::Factory< IService *(const std::string &, ISvcLocator *)>
Public Types inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
using | PropertyHolderImpl = PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
| Typedef used to refer to this class from derived classes, as in. More...
Public Types inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
using | base_class = CommonMessaging
Public Types inherited from extend_interfaces< Interfaces... >
using | ext_iids = typename Gaudi::interface_list_cat< typename Interfaces::ext_iids... >::type
| take union of the ext_iids of all Interfaces... More...

## Detailed Description

Description:

RootCnvSvc class implementation definition.

Author
  Markus Frank

Version
  1.0

Date
  20/12/2009

Definition at line 52 of file RootCnvSvc.h.

## Constructor & Destructor Documentation

## ◆ RootCnvSvc()

RootCnvSvc::RootCnvSvc | ( | const std::string & | name,
|  | ISvcLocator * | svc
| ) |  |

Standard constructor.

Definition at line 50 of file RootCnvSvc.cpp.

51 : ConversionSvc( nam, svc, ROOT_StorageType ), m_setup{new RootConnectionSetup()} {
52 m_setup->cacheBranches.push_back( "*" );
53 declareProperty( "LoadSection", m_setup->loadSection = "Event" );
54
55 // ROOT Read parameters: must be shared for the entire file!
56 declareProperty( "CacheSize", m_setup->cacheSize = 10 * MBYTE );
57 declareProperty( "LearnEntries", m_setup->learnEntries = 10 );
58 declareProperty( "CacheBranches", m_setup->cacheBranches );
59 declareProperty( "VetoBranches", m_setup->vetoBranches );
60 }
ConversionSvc::ConversionSvc
ConversionSvc(const std::string &name, ISvcLocator *svc, long type)
Standard Constructor.
Definition: ConversionSvc.cpp:310
Gaudi::RootCnvSvc::m_setup
std::shared_ptr< RootConnectionSetup > m_setup
Setup structure (ref-counted) and passed to data connections.
Definition: RootCnvSvc.h:84
PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Details::PropertyBase &prop)
Declare a property.
Definition: PropertyHolder.h:95
ROOT_StorageType
const long ROOT_StorageType
Definition: ClassID.h:52
MBYTE
#define MBYTE
Definition: RootCnvSvc.cpp:47
Gaudi::RootConnectionSetup
Definition: RootDataConnection.h:44

## Member Function Documentation

## ◆ commitOutput()

StatusCode RootCnvSvc::commitOutput | ( | const std::string & | outputFile,
|  | bool | do_commit
| ) |  |
| override

Commit pending output.

Parameters

  outputFile | String containig output file
  do_commit | if true commit the output and flush eventually pending items to the database if false, discard pending buffers. Note: The possibility to commit or rollback depends on the database technology used!

Returns
  Status code indicating success or failure.

fill NULL pointers to all branches, which have less entries than the section branch

Definition at line 292 of file RootCnvSvc.cpp.

292 {
293 if ( m_current ) {
294 size_t len = m_currSection.find( '/', 1 );
295 string section = m_currSection.substr( 1, len == string::npos ? string::npos : len - 1 );
296 TBranch* b = m_current->getBranch( section, m_currSection );
297 if ( b ) {
298 Long64_t evt = b->GetEntries();
299 TTree* t = b->GetTree();
300 TObjArray* a = t->GetListOfBranches();
301 Int_t nb = a->GetEntriesFast();
303 for ( Int_t i = 0; i < nb; ++i ) {
304 TBranch* br_ptr = (TBranch*)a->UncheckedAt( i );
305 Long64_t br_evt = br_ptr->GetEntries();
306 if ( br_evt < evt ) {
307 Long64_t num = evt - br_evt;
308 br_ptr->SetAddress( nullptr );
309 while ( num > 0 ) {
310 br_ptr->Fill();
311 --num;
312 }
313 if ( log().level() <= MSG::DEBUG )
314 log() << MSG::DEBUG << "commit: Added " << long( evt - br_evt ) << " Section: " << evt
315 << " Branch: " << br_ptr->GetEntries() << " RefNo: " << br_ptr->GetEntries() - 1
316 << " NULL entries to:" << br_ptr->GetName() << endmsg;
317 }
318 }
319
320 b->GetTree()->SetEntries( evt );
321 if ( evt == 1 ) { b->GetTree()->OptimizeBaskets( m_basketSize, 1.1, "" ); }
322 if ( evt > 0 && ( evt % m_autoFlush ) == 0 ) {
323 if ( evt == m_autoFlush ) {
324 b->GetTree()->SetAutoFlush( m_autoFlush );
325 b->GetTree()->OptimizeBaskets( m_basketSize, 1., "" );
326 } else {
327 b->GetTree()->FlushBaskets();
328 }
329 }
330 if ( log().level() <= MSG::DEBUG )
331 log() << MSG::DEBUG << "Set section entries of " << m_currSection << " to " << long( evt ) << " entries."
332 << endmsg;
333 } else {
334 return error( "commitOutput> Failed to update entry numbers on " + dsn );
335 }
336 }
337 return S_OK;
338 }
Gaudi::RootCnvSvc::m_autoFlush
Gaudi::Property< int > m_autoFlush
Definition: RootCnvSvc.h:63
Gaudi::RootDataConnection::getBranch
TBranch * getBranch(std::string_view section, std::string_view branch_name)
Access data branch by name: Get existing branch in read only mode.
Definition: RootDataConnection.h:303
Gaudi::RootCnvSvc::m_currSection
std::string m_currSection
Property: ROOT section name.
Definition: RootCnvSvc.h:86
MSG::DEBUG
Definition: IMessageSvc.h:15
Gaudi::RootCnvSvc::log
MsgStream & log() const
Helper: Use message streamer.
Definition: RootCnvSvc.h:97
CommonMessagingBase::error
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
Definition: CommonMessaging.h:98
S_OK
#define S_OK
Definition: RootCnvSvc.cpp:37
std::string::find
T find(T... args)
std::string::substr
T substr(T... args)
Gaudi::RootCnvSvc::m_basketSize
Gaudi::Property< int > m_basketSize
Definition: RootCnvSvc.h:65
gaudirun.level
level
Definition: gaudirun.py:334
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192
IOTest.evt
evt
Definition: IOTest.py:94
Gaudi::RootCnvSvc::m_current
Gaudi::RootDataConnection * m_current
On writing: reference to active output stream.
Definition: RootCnvSvc.h:78

## ◆ connectDatabase()

StatusCode RootCnvSvc::connectDatabase | ( | const std::string & | dataset,
|  | int | mode,
|  | RootDataConnection ** | con
| ) |  |

Connect the output file to the service with open mode.

Parameters

  dataset | String containig file name
  mode | String containig opening mode

Returns
  Status code indicating success or failure.

Definition at line 194 of file RootCnvSvc.cpp.

194 {
195 try {
196 IDataConnection* c = m_ioMgr->connection( dataset );
197 bool fire_incident = false;
198 *con = nullptr;
199 if ( !c ) {
200 auto connection = std::make_unique<RootDataConnection>( this, dataset, m_setup );
201 StatusCode sc = ( mode != IDataConnection::READ )
202 ? m_ioMgr->connectWrite( connection.get(), IDataConnection::IoType( mode ), "ROOT" )
203 : m_ioMgr->connectRead( false, connection.get() );
204 c = sc.isSuccess() ? m_ioMgr->connection( dataset ) : nullptr;
205 if ( c ) {
206 bool writable = 0 != ( mode & ( IDataConnection::UPDATE | IDataConnection::RECREATE ) );
207 fire_incident = m_incidentEnabled && ( 0 != ( mode & ( IDataConnection::UPDATE | IDataConnection::READ ) ) );
208 if ( writable ) {
209 m_incidentSvc->fireIncident(
210 ContextIncident<TFile*>( connection->pfn(), "CONNECTED_OUTPUT", connection->file() ) );
211 }
212 if ( 0 != ( mode & IDataConnection::READ ) ) {
213 if ( !m_ioPerfStats.empty() ) { connection->enableStatistics( m_setup->loadSection ); }
214 }
215 connection.release();
216 } else {
217 m_incidentSvc->fireIncident( Incident(
218 dataset, mode == IDataConnection::READ ? IncidentType::FailInputFile : IncidentType::FailOutputFile ) );
219 // An error message was already printed by the IODataManager. no need to do it here!
220 return StatusCode::FAILURE;
221 }
222 }
223 RootDataConnection* pc = dynamic_cast<RootDataConnection*>( c );
224 if ( pc ) {
225 if ( !pc->isConnected() ) pc->connectRead();
226 *con = pc;
227 pc->resetAge();
228 pc->addClient( this );
229 }
230 if ( *con ) {
231 if ( fire_incident ) {
232 IOpaqueAddress* pAddr = nullptr;
233 string fid = pc->fid();
234 string section = m_recordName[0] == '/' ? m_recordName.value().substr( 1 ) : m_recordName.value();
235 TBranch* b = pc->getBranch( section, m_recordName.value() );
236 if ( b ) {
237 const string par[2] = {fid, m_recordName};
238 unsigned long ipar[2] = {(unsigned long)( *con ), (unsigned long)b->GetEntries() - 1};
239 for ( int i = 0; i < b->GetEntries(); ++i ) {
240 ipar[1] = i;
241 if ( !pc->mergeFIDs().empty() ) fid = pc->mergeFIDs()[i];
242 if ( !createAddress( repSvcType(), CLID_DataObject, par, ipar, pAddr ).isSuccess() ) {
243 if ( log().level() <= MSG::VERBOSE )
244 log() << MSG::VERBOSE << "Failed to create address for " << m_recordName << " in:" << fid << " ["
245 << pc->fid() << "][" << i << "]" << endmsg;
246 continue;
247 }
248 if ( log().level() <= MSG::VERBOSE )
249 log() << MSG::VERBOSE << "Prepare " << m_recordName << " " << fid << " [" << par[0] << "][" << i << "]"
250 << endmsg;
251 m_incidentSvc->fireIncident( ContextIncident<IOpaqueAddress*>( fid, "FILE_OPEN_READ", pAddr ) );
252 }
253 } else {
254 if ( log().level() <= MSG::VERBOSE )
255 log() << MSG::VERBOSE << "No valid Records " << m_recordName << " present in:" << pc->fid() << endmsg;
256 }
257 }
258
259 // We can remove retired connections, which are no longer used....
260 for ( auto& i : m_ioMgr->connections( this ) ) {
261 if ( i != *con && !i->isConnected() ) {
262 RootDataConnection* pc = dynamic_cast<RootDataConnection*>( i );
263 if ( pc && pc->lookupClient( this ) ) {
264 size_t num_client = pc->removeClient( this );
265 if ( num_client == 0 ) {
266 if ( m_ioMgr->disconnect( pc ).isSuccess() ) {
267 log() << MSG::INFO << "Removed disconnected IO stream:" << pc->fid() << " [" << pc->pfn() << "]"
268 << endmsg;
269 delete pc;
270 }
271 }
272 }
273 }
274 }
275 return S_OK;
276 }
277 m_incidentSvc->fireIncident( Incident( dataset, IncidentType::FailOutputFile ) );
278 return S_FAIL;
279 } catch ( exception& e ) {
280 m_incidentSvc->fireIncident( Incident( dataset, IncidentType::FailOutputFile ) );
281 return error( string( "connectDatabase> Caught exception:" ) + e.what() );
282 } catch ( ... ) {
283 m_incidentSvc->fireIncident( Incident( dataset, IncidentType::FailOutputFile ) );
284 return error( "connectDatabase> Unknown Fatal Exception for " + dataset );
285 }
286 }
gaudirun.c
c
Definition: gaudirun.py:487
Gaudi::RootCnvSvc::m_recordName
Gaudi::Property< std::string > m_recordName
Definition: RootCnvSvc.h:59
Gaudi::IDataConnection::IoType
IoType
I/O Connection types.
Definition: IIODataManager.h:39
Gaudi::RootCnvSvc::m_incidentSvc
SmartIF< IIncidentSvc > m_incidentSvc
Reference to incident service.
Definition: RootCnvSvc.h:76
Gaudi::RootCnvSvc::createAddress
StatusCode createAddress(long svc_type, const CLID &clid, const std::string *par, const unsigned long *ip, IOpaqueAddress *&refpAddress) override
IAddressCreator implementation: Address creation.
Definition: RootCnvSvc.cpp:347
Gaudi::RootCnvSvc::m_setup
std::shared_ptr< RootConnectionSetup > m_setup
Setup structure (ref-counted) and passed to data connections.
Definition: RootCnvSvc.h:84
Gaudi::IIODataManager::connection
virtual Connection * connection(const std::string &dsn) const =0
Retrieve known connection.
Gaudi::Units::pc
constexpr double pc
Definition: SystemOfUnits.h:100
ConversionSvc::repSvcType
long repSvcType() const override
Retrieve the class type of the data store the converter uses.
Definition: ConversionSvc.cpp:275
Gaudi::IDataConnection::RECREATE
Definition: IIODataManager.h:39
MSG::VERBOSE
Definition: IMessageSvc.h:15
Gaudi::RootCnvSvc::log
MsgStream & log() const
Helper: Use message streamer.
Definition: RootCnvSvc.h:97
Gaudi::IIODataManager::disconnect
virtual StatusCode disconnect(IDataConnection *con)=0
Release data stream.
CommonMessagingBase::error
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
Definition: CommonMessaging.h:98
Gaudi::IDataConnection::READ
Definition: IIODataManager.h:39
IIncidentSvc::fireIncident
virtual void fireIncident(const Incident &incident)=0
Fire an Incident.
compareOutputFiles.par
string par
Definition: compareOutputFiles.py:465
std::exception::what
T what(T... args)
Gaudi::RootCnvSvc::m_ioPerfStats
Gaudi::Property< std::string > m_ioPerfStats
Definition: RootCnvSvc.h:54
StatusCode
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
ContextIncident
Definition: DataIncident.h:16
S_OK
#define S_OK
Definition: RootCnvSvc.cpp:37
Gaudi::IIODataManager::connections
virtual Connections connections(const IInterface *owner) const =0
Get connection by owner instance (0=ALL)
Gaudi::IIODataManager::connectRead
virtual StatusCode connectRead(bool keep_open, IDataConnection *con)=0
Open data stream in read mode.
StatusCode::isSuccess
bool isSuccess() const
Definition: StatusCode.h:267
std::exception
STL class.
Gaudi::IDataConnection::UPDATE
Definition: IIODataManager.h:39
Gaudi::IDataConnection
ABC describing basic data connection.
Definition: IIODataManager.h:24
Gaudi::RootCnvSvc::m_ioMgr
SmartIF< Gaudi::IIODataManager > m_ioMgr
Reference to the I/O data manager.
Definition: RootCnvSvc.h:74
Incident
Base class for all Incidents (computing events).
Definition: Incident.h:17
StatusCode::FAILURE
constexpr static const auto FAILURE
Definition: StatusCode.h:86
gaudirun.level
level
Definition: gaudirun.py:334
IOpaqueAddress
Opaque address interface definition.
Definition: IOpaqueAddress.h:23
MSG::INFO
Definition: IMessageSvc.h:15
S_FAIL
#define S_FAIL
Definition: RootCnvSvc.cpp:38
Gaudi::RootDataConnection
Concrete implementation of the IDataConnection interface to access ROOT files.
Definition: RootDataConnection.h:93
Gaudi::IIODataManager::connectWrite
virtual StatusCode connectWrite(IDataConnection *con, IoType mode=Connection::CREATE, const std::string &doctype="UNKNOWN")=0
Open data stream in write mode.
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192
Gaudi::RootCnvSvc::m_incidentEnabled
Gaudi::Property< bool > m_incidentEnabled
Definition: RootCnvSvc.h:58

## ◆ connectOutput() [1/2]

StatusCode Gaudi::RootCnvSvc::connectOutput | ( | const std::string & | outputFile,
|  | const std::string & | openMode
| ) |  |
| override

Connect the output file to the service with open mode.

Parameters

  outputFile | String containig output file
  openMode | String containig opening mode of the output file

Returns
  Status code indicating success or failure.

## ◆ connectOutput() [2/2]

StatusCode Gaudi::RootCnvSvc::connectOutput | ( | const std::string & | outputFile | ) |
| override

Connect the output file to the service.

Parameters

  outputFile | String containig output file

Returns
  Status code indicating success or failure.

## ◆ createAddress() [1/2]

StatusCode RootCnvSvc::createAddress | ( | long | svc_type,
|  | const CLID & | clid,
|  | const std::string * | par,
|  | const unsigned long * | ip,
|  | IOpaqueAddress *& | refpAddress
| ) |  |
| override

IAddressCreator implementation: Address creation.

Create an address using the link infotmation together with the triple (database name/container name/object name).

Parameters

  refLink | Reference to abstract link information
  dbName | Database name
  containerName | Object container name
  refpAddress | Opaque address information to retrieve object

Returns
  StatusCode indicating SUCCESS or failure

Definition at line 347 of file RootCnvSvc.cpp.

348 {
349 refpAddress = new RootAddress( typ, clid, par[0], par[1], ip[0], ip[1] );
350 return S_OK;
351 }
Gaudi::RootAddress
Description:
Definition: RootAddress.h:36
compareOutputFiles.par
string par
Definition: compareOutputFiles.py:465
S_OK
#define S_OK
Definition: RootCnvSvc.cpp:37

## ◆ createAddress() [2/2]

StatusCode Gaudi::RootCnvSvc::createAddress | ( | long | svc_type,
|  | const CLID & | clid,
|  | const std::string & | refAddress,
|  | IOpaqueAddress *& | refpAddress
| ) |  |
| inline override

IAddressCreator implementation: Creates an address in string form to object form.

Parameters

  svc_type | Technology identifier encapsulated in this address.
  clid | Class identifier of the DataObject represented by the opaque address
  address | Input address.
  refpAddress | Output address in string form.

Returns
  Status code indicating success or failure.

Definition at line 190 of file RootCnvSvc.h.

191 {
192 return this->ConversionSvc::createAddress( svc_type, clid, refAddress, refpAddress );
193 }
ConversionSvc::createAddress
StatusCode createAddress(long svc_type, const CLID &clid, const std::string *par, const unsigned long *ip, IOpaqueAddress *&refpAddress) override
Create a Generic address using explicit arguments to identify a single object.
Definition: ConversionSvc.cpp:289

## ◆ createConverter()

IConverter * RootCnvSvc::createConverter | ( | long | typ,
|  | const CLID & | wanted,
|  | const ICnvFactory * | fac
| ) |  |
| override virtual

ConversionSvc overload: Create new Converter using factory.

Reimplemented from ConversionSvc.

Definition at line 130 of file RootCnvSvc.cpp.

130 {
131 if ( wanted == CLID_StatisticsFile )
132 return new RootDatabaseCnv( typ, wanted, serviceLocator().get(), this );
133 else if ( wanted == CLID_StatisticsDirectory )
134 return new RootDirectoryCnv( typ, wanted, serviceLocator().get(), this );
135 else if ( wanted == CLID_RowWiseTuple )
136 return new RootNTupleCnv( typ, wanted, serviceLocator().get(), this );
137 else if ( wanted == CLID_ColumnWiseTuple )
138 return new RootNTupleCnv( typ, wanted, serviceLocator().get(), this );
139 else
140 return new RootConverter( typ, wanted, serviceLocator().get(), this );
141 }
Service::serviceLocator
SmartIF< ISvcLocator > & serviceLocator() const override
Retrieve pointer to service locator.
Definition: Service.cpp:277
Gaudi::RootDatabaseCnv
Statistics file converter class definition.
Definition: RootDatabaseCnv.h:28
Gaudi::RootNTupleCnv
NTuple converter class definition for NTuples writted/read using ROOT.
Definition: RootNTupleCnv.h:35
Gaudi::RootDirectoryCnv
Description: NTuple directory converter class definition Definition of the converter to manage the di...
Definition: RootDirectoryCnv.h:30
Gaudi::Functional::details::get
auto get(const Handle &handle, const Algo &, const EventContext &) -> decltype(details::deref(handle.get()))
Definition: FunctionalDetails.h:332
Gaudi::RootConverter
Description: Definition of the ROOT data converter.
Definition: RootConverter.h:32

## ◆ createNullRef()

StatusCode RootCnvSvc::createNullRef | ( | const std::string & | path | ) |
| virtual

Insert null marker for not existent transient object.

Parameters

  path | [IN] Path to the (null-)object

Returns
  Status code indicating success or failure.

Definition at line 362 of file RootCnvSvc.cpp.

362 {
363 RootObjectRefs* refs = nullptr;
364 size_t len = path.find( '/', 1 );
365 string section = path.substr( 1, len == string::npos ? string::npos : len - 1 );
366 pair<int, unsigned long> ret = m_current->save( section, path + "#R", nullptr, refs, m_bufferSize, m_splitLevel );
367 if ( log().level() <= MSG::VERBOSE )
368 log() << MSG::VERBOSE << "Writing object:" << path << " " << ret.first << " " << hex << ret.second << dec
369 << " [NULL]" << endmsg;
370 return S_OK;
371 }
GaudiPython.HistoUtils.path
path
Definition: HistoUtils.py:932
Gaudi::RootDataConnection::save
std::pair< int, unsigned long > save(std::string_view section, std::string_view cnt, TClass *cl, void *pObj, int buff_siz, int split_lvl, bool fill_missing=false)
Save object of a given class to section and container.
Definition: RootDataConnection.cpp:467
MSG::dec
MsgStream & dec(MsgStream &log)
Definition: MsgStream.h:267
MSG::hex
MsgStream & hex(MsgStream &log)
Definition: MsgStream.h:271
Gaudi::RootCnvSvc::m_splitLevel
Gaudi::Property< int > m_splitLevel
Definition: RootCnvSvc.h:69
Gaudi::RootCnvSvc::m_bufferSize
Gaudi::Property< int > m_bufferSize
Definition: RootCnvSvc.h:67
MSG::VERBOSE
Definition: IMessageSvc.h:15
Gaudi::RootObjectRefs
Persistent reference object containing all leafs and links corresponding to a Gaudi DataObject.
Definition: extractEvt.C:71
Gaudi::RootCnvSvc::log
MsgStream & log() const
Helper: Use message streamer.
Definition: RootCnvSvc.h:97
S_OK
#define S_OK
Definition: RootCnvSvc.cpp:37
std::pair
gaudirun.level
level
Definition: gaudirun.py:334
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192
Gaudi::RootCnvSvc::m_current
Gaudi::RootDataConnection * m_current
On writing: reference to active output stream.
Definition: RootCnvSvc.h:78

## ◆ createNullRep()

StatusCode RootCnvSvc::createNullRep | ( | const std::string & | path | ) |
| virtual

Insert null marker for not existent transient object.

Parameters

  path | [IN] Path to the (null-)object

Returns
  Status code indicating success or failure.

Definition at line 354 of file RootCnvSvc.cpp.

354 {
355 size_t len = path.find( '/', 1 );
356 string section = path.substr( 1, len == string::npos ? string::npos : len - 1 );
357 m_current->saveObj( section, path, nullptr, nullptr, m_bufferSize, m_splitLevel );
358 return S_OK;
359 }
GaudiPython.HistoUtils.path
path
Definition: HistoUtils.py:932
Gaudi::RootDataConnection::saveObj
std::pair< int, unsigned long > saveObj(std::string_view section, std::string_view cnt, TClass *cl, DataObject *pObj, int buff_siz, int split_lvl, bool fill_missing=false)
Save object of a given class to section and container.
Definition: RootDataConnection.cpp:460
Gaudi::RootCnvSvc::m_splitLevel
Gaudi::Property< int > m_splitLevel
Definition: RootCnvSvc.h:69
Gaudi::RootCnvSvc::m_bufferSize
Gaudi::Property< int > m_bufferSize
Definition: RootCnvSvc.h:67
S_OK
#define S_OK
Definition: RootCnvSvc.cpp:37
Gaudi::RootCnvSvc::m_current
Gaudi::RootDataConnection * m_current
On writing: reference to active output stream.
Definition: RootCnvSvc.h:78

## ◆ disconnect()

StatusCode RootCnvSvc::disconnect | ( | const std::string & | dbName | ) |
| virtual

Disconnect from an existing data stream.

Parameters

  dbName | String containing name of the database

Returns
  Status code indicating success or failure.

Definition at line 341 of file RootCnvSvc.cpp.

341 {
342 IDataConnection* c = m_ioMgr->connection( dataset );
343 return c ? m_ioMgr->disconnect( c ) : S_FAIL;
344 }
gaudirun.c
c
Definition: gaudirun.py:487
Gaudi::IIODataManager::connection
virtual Connection * connection(const std::string &dsn) const =0
Retrieve known connection.
Gaudi::IIODataManager::disconnect
virtual StatusCode disconnect(IDataConnection *con)=0
Release data stream.
Gaudi::IDataConnection
ABC describing basic data connection.
Definition: IIODataManager.h:24
Gaudi::RootCnvSvc::m_ioMgr
SmartIF< Gaudi::IIODataManager > m_ioMgr
Reference to the I/O data manager.
Definition: RootCnvSvc.h:74
S_FAIL
#define S_FAIL
Definition: RootCnvSvc.cpp:38

## ◆ error()

StatusCode RootCnvSvc::error | ( | const std::string & | msg | ) |

Standard way to print errors.

after the printout an exception is thrown.

Parameters

  msg | [IN] Message string to be printed.

Returns
  Status code returning failure.

Definition at line 63 of file RootCnvSvc.cpp.

63 {
64 if ( m_log ) {
65 log() << MSG::ERROR << "Error: " << msg << endmsg;
66 return S_FAIL;
67 }
68 MsgStream m( msgSvc(), name() );
69 m << MSG::ERROR << "Error: " << msg << endmsg;
70 return S_FAIL;
71 }
MsgStream
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
CommonMessagingBase::msgSvc
const SmartIF< IMessageSvc > & msgSvc() const
The standard message service.
Definition: CommonMessaging.h:68
Gaudi::RootCnvSvc::log
MsgStream & log() const
Helper: Use message streamer.
Definition: RootCnvSvc.h:97
Service::name
const std::string & name() const override
Retrieve name of the service.
Definition: Service.cpp:274
Gaudi::RootCnvSvc::m_log
std::unique_ptr< MsgStream > m_log
Message streamer.
Definition: RootCnvSvc.h:92
Gaudi::Units::m
constexpr double m
Definition: SystemOfUnits.h:92
CommonMessagingBase::msg
MsgStream & msg() const
shortcut for the method msgStream(MSG::INFO)
Definition: CommonMessaging.h:113
MSG::ERROR
Definition: IMessageSvc.h:15
S_FAIL
#define S_FAIL
Definition: RootCnvSvc.cpp:38
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192

## ◆ finalize()

StatusCode RootCnvSvc::finalize | ( |  | ) |
| override

ConversionSvc overload: Finalize Db service.

Definition at line 102 of file RootCnvSvc.cpp.

102 {
103 log() << MSG::INFO;
104 if ( m_ioMgr ) {
105 IIODataManager::Connections cons = m_ioMgr->connections( nullptr );
106 for ( auto& i : cons ) {
107 auto pc = dynamic_cast<RootDataConnection*>( i );
108 if ( pc ) {
109 if ( pc->owner() == this && !m_ioPerfStats.empty() ) { pc->saveStatistics( m_ioPerfStats.value() ); }
110 if ( pc->lookupClient( this ) ) {
111 size_t num_clients = pc->removeClient( this );
112 if ( num_clients == 0 ) {
113 if ( m_ioMgr->disconnect( pc ).isSuccess() ) {
114 log() << "Disconnected data IO:" << pc->fid() << " [" << pc->pfn() << "]" << endmsg;
115 delete pc;
116 }
117 }
118 }
119 }
120 }
121 m_ioMgr.reset();
122 }
123 m_log.reset();
124 m_incidentSvc.reset();
125 m_setup->setIncidentSvc( nullptr );
126 return ConversionSvc::finalize();
127 }
Gaudi::RootCnvSvc::m_incidentSvc
SmartIF< IIncidentSvc > m_incidentSvc
Reference to incident service.
Definition: RootCnvSvc.h:76
Gaudi::RootCnvSvc::m_setup
std::shared_ptr< RootConnectionSetup > m_setup
Setup structure (ref-counted) and passed to data connections.
Definition: RootCnvSvc.h:84
Gaudi::Units::pc
constexpr double pc
Definition: SystemOfUnits.h:100
Gaudi::RootCnvSvc::log
MsgStream & log() const
Helper: Use message streamer.
Definition: RootCnvSvc.h:97
Gaudi::IIODataManager::disconnect
virtual StatusCode disconnect(IDataConnection *con)=0
Release data stream.
Gaudi::RootCnvSvc::m_ioPerfStats
Gaudi::Property< std::string > m_ioPerfStats
Definition: RootCnvSvc.h:54
Gaudi::RootCnvSvc::m_log
std::unique_ptr< MsgStream > m_log
Message streamer.
Definition: RootCnvSvc.h:92
Gaudi::IIODataManager::connections
virtual Connections connections(const IInterface *owner) const =0
Get connection by owner instance (0=ALL)
std::unique_ptr::reset
T reset(T... args)
StatusCode::isSuccess
bool isSuccess() const
Definition: StatusCode.h:267
std::vector
STL class.
Gaudi::RootCnvSvc::m_ioMgr
SmartIF< Gaudi::IIODataManager > m_ioMgr
Reference to the I/O data manager.
Definition: RootCnvSvc.h:74
SmartIF::reset
void reset(TYPE *ptr=nullptr)
Set the internal pointer to the passed one disposing of the old one.
Definition: SmartIF.h:86
MSG::INFO
Definition: IMessageSvc.h:15
ConversionSvc::finalize
StatusCode finalize() override
stop the service.
Definition: ConversionSvc.cpp:229
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192

## ◆ getClass()

TClass * RootCnvSvc::getClass | ( | DataObject * | pObject | ) |
| protected

Helper: Get TClass for a given DataObject pointer.

Definition at line 161 of file RootCnvSvc.cpp.

161 {
162 auto i = s_classesClids.find( pObject->clID() );
163 if ( i != s_classesClids.end() ) return i->second;
164 loadConverter( pObject );
165 i = s_classesClids.find( pObject->clID() );
166 if ( i != s_classesClids.end() ) return i->second;
167
168 string cname = System::typeinfoName( typeid( *pObject ) );
169 throw runtime_error( "Unknown ROOT class for object:" + cname );
170 return nullptr;
171 }
System::typeinfoName
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:298
Gaudi::RootCnvSvc::loadConverter
void loadConverter(DataObject *pObj) override
ConversionSvc overload: Load the class (dictionary) for the converter.
Definition: RootCnvSvc.cpp:144
std::runtime_error
STL class.
DataObject::clID
virtual const CLID & clID() const
Retrieve reference to class definition structure.
Definition: DataObject.cpp:56

## ◆ i__createObj()

StatusCode RootCnvSvc::i__createObj | ( | IOpaqueAddress * | pAddr,
|  | DataObject *& | refpObj
| ) |  |
| virtual

Create transient object from persistent data.

Parameters

  pAddr | [IN] Pointer to object address.
  refpObj | [OUT] Location to pointer to store data object

Returns
  Status code indicating success or failure.

Definition at line 435 of file RootCnvSvc.cpp.

435 {
436 refpObj = nullptr;
437 if ( !pA ) return S_FAIL;
438 RootDataConnection* con = nullptr;
439 const string* par = pA->par();
440 unsigned long* ipar = const_cast<unsigned long*>( pA->ipar() );
441 StatusCode sc = connectDatabase( par[0], IDataConnection::READ, &con );
442 if ( sc.isSuccess() ) {
443 ipar[0] = (unsigned long)con;
444 DataObject* pObj = nullptr;
445 size_t len = par[1].find( '/', 1 );
446 string section = par[1].substr( 1, len == string::npos ? string::npos : len - 1 );
447
448 int nb = con->loadObj( section, par[1], ipar[1], pObj );
449 if ( nb > 1 || ( nb == 1 && pObj->clID() == CLID_DataObject ) ) {
450 refpObj = pObj;
451 return S_OK;
452 }
453 delete pObj;
454 }
455 string tag = par[0] + ":" + par[1];
456 if ( m_badFiles.find( tag ) == m_badFiles.end() ) {
457 m_badFiles.insert( tag );
458 return error( "createObj> Cannot access the object:" + tag );
459 }
460 return S_FAIL;
461 }
std::set::end
T end(T... args)
Gaudi::RootCnvSvc::connectDatabase
StatusCode connectDatabase(const std::string &dataset, int mode, RootDataConnection **con)
Connect the output file to the service with open mode.
Definition: RootCnvSvc.cpp:194
CommonMessagingBase::error
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
Definition: CommonMessaging.h:98
Gaudi::IDataConnection::READ
Definition: IIODataManager.h:39
compareOutputFiles.par
string par
Definition: compareOutputFiles.py:465
StatusCode
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
S_OK
#define S_OK
Definition: RootCnvSvc.cpp:37
Gaudi::RootDataConnection::loadObj
int loadObj(std::string_view section, std::string_view cnt, unsigned long entry, DataObject *&pObj)
Load object.
Definition: RootDataConnection.cpp:497
std::set::insert
T insert(T... args)
Gaudi::RootCnvSvc::m_badFiles
std::set< std::string > m_badFiles
Set with bad files/tables.
Definition: RootCnvSvc.h:89
std::set::find
T find(T... args)
DataObject::clID
virtual const CLID & clID() const
Retrieve reference to class definition structure.
Definition: DataObject.cpp:56
S_FAIL
#define S_FAIL
Definition: RootCnvSvc.cpp:38
DataObject
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
Gaudi::RootDataConnection
Concrete implementation of the IDataConnection interface to access ROOT files.
Definition: RootDataConnection.h:93

## ◆ i__createRep()

StatusCode RootCnvSvc::i__createRep | ( | DataObject * | pObj,
|  | IOpaqueAddress *& | refpAddr
| ) |  |
| virtual

Convert the transient object to the requested persistent representation.

Parameters

  pObj | [IN] Pointer to data object
  refpAddr | [OUT] Location to store pointer to object address.

Returns
  Status code indicating success or failure.

Definition at line 374 of file RootCnvSvc.cpp.

374 {
375 refpAddr = nullptr;
376 if ( !pObj ) return error( "createRep> Current Database is invalid!" );
377 CLID clid = pObj->clID();
378 IRegistry* pR = pObj->registry();
379 string p[2] = {m_current->fid(), pR->identifier()};
380 TClass* cl = ( clid == CLID_DataObject ) ? m_classDO : getClass( pObj );
381 size_t len = p[1].find( '/', 1 );
382 string sect = p[1].substr( 1, len == string::npos ? string::npos : len - 1 );
383 pair<int, unsigned long> ret = m_current->saveObj( sect, p[1], cl, pObj, m_bufferSize, m_splitLevel, true );
384 if ( ret.first > 1 || ( clid == CLID_DataObject && ret.first == 1 ) ) {
385 unsigned long ip[2] = {0, ret.second};
386 if ( m_currSection.empty() ) m_currSection = p[1];
387 return createAddress( repSvcType(), clid, p, ip, refpAddr );
388 }
389 return error( "Failed to write object data for:" + p[1] );
390 }
std::string::empty
T empty(T... args)
DataObject::registry
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:72
Gaudi::RootCnvSvc::m_currSection
std::string m_currSection
Property: ROOT section name.
Definition: RootCnvSvc.h:86
Gaudi::RootDataConnection::saveObj
std::pair< int, unsigned long > saveObj(std::string_view section, std::string_view cnt, TClass *cl, DataObject *pObj, int buff_siz, int split_lvl, bool fill_missing=false)
Save object of a given class to section and container.
Definition: RootDataConnection.cpp:460
Gaudi::RootCnvSvc::createAddress
StatusCode createAddress(long svc_type, const CLID &clid, const std::string *par, const unsigned long *ip, IOpaqueAddress *&refpAddress) override
IAddressCreator implementation: Address creation.
Definition: RootCnvSvc.cpp:347
Gaudi::IDataConnection::fid
const std::string & fid() const
Access file id.
Definition: IIODataManager.h:53
ConversionSvc::repSvcType
long repSvcType() const override
Retrieve the class type of the data store the converter uses.
Definition: ConversionSvc.cpp:275
Gaudi::RootCnvSvc::m_splitLevel
Gaudi::Property< int > m_splitLevel
Definition: RootCnvSvc.h:69
Gaudi::RootCnvSvc::m_bufferSize
Gaudi::Property< int > m_bufferSize
Definition: RootCnvSvc.h:67
CommonMessagingBase::error
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
Definition: CommonMessaging.h:98
Gaudi::RootCnvSvc::m_classDO
TClass * m_classDO
TClass pointer to DataObject class.
Definition: RootCnvSvc.h:82
IRegistry
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
CLID
unsigned int CLID
Class ID definition.
Definition: ClassID.h:8
std::pair
std::string::find
T find(T... args)
DataObject::clID
virtual const CLID & clID() const
Retrieve reference to class definition structure.
Definition: DataObject.cpp:56
std::string::substr
T substr(T... args)
IRegistry::identifier
virtual const id_type & identifier() const =0
Full identifier (or key)
Gaudi::RootCnvSvc::m_current
Gaudi::RootDataConnection * m_current
On writing: reference to active output stream.
Definition: RootCnvSvc.h:78
Gaudi::RootCnvSvc::getClass
TClass * getClass(DataObject *pObject)
Helper: Get TClass for a given DataObject pointer.
Definition: RootCnvSvc.cpp:161

## ◆ i__fillObjRefs()

StatusCode RootCnvSvc::i__fillObjRefs | ( | IOpaqueAddress * | pAddr,
|  | DataObject * | pObj
| ) |  |
| virtual

Resolve the references of the created transient object.

Parameters

  pAddr | [IN] Pointer to object address.
  pObj | [IN] Pointer to data object

Returns
  Status code indicating success or failure.

Definition at line 464 of file RootCnvSvc.cpp.

464 {
465 if ( !pA || !pObj ) return error( "read> Cannot read object -- no valid object address present " );
466
467 const unsigned long* ipar = pA->ipar();
468 RootDataConnection* con = (RootDataConnection*)ipar[0];
469 if ( con ) {
470 RootObjectRefs refs;
471 const string* par = pA->par();
472 size_t len = par[1].find( '/', 1 );
473 string section = par[1].substr( 1, len == string::npos ? string::npos : len - 1 );
474 int nb = con->loadRefs( section, par[1], ipar[1], refs );
475 if ( nb >= 1 ) {
476 string npar[3];
477 unsigned long nipar[2];
478 IRegistry* pR = pObj->registry();
479 auto dataMgr = SmartIF<IDataManagerSvc>{pR->dataSvc()};
480 LinkManager* mgr = pObj->linkMgr();
481 for ( const auto& i : refs.links ) mgr->addLink( con->getLink( i ), nullptr );
482 for ( auto& r : refs.refs ) {
483 npar[0] = con->getDb( r.dbase );
484 npar[1] = con->getCont( r.container );
485 npar[2] = con->getLink( r.link );
486 nipar[0] = 0;
487 nipar[1] = r.entry;
488 IOpaqueAddress* nPA = nullptr;
489 StatusCode sc = addressCreator()->createAddress( r.svc, r.clid, npar, nipar, nPA );
490 if ( sc.isSuccess() ) {
491 if ( log().level() <= MSG::VERBOSE )
492 log() << MSG::VERBOSE << dataMgr.as<IService>()->name() << " -> Register:" << pA->registry()->identifier()
493 << "#" << npar[2] << "[" << r.entry << "]" << endmsg;
494 sc = dataMgr->registerAddress( pA->registry(), npar[2], nPA );
495 if ( sc.isSuccess() ) continue;
496 }
497 log() << MSG::ERROR << con->fid() << ": Failed to create address!!!!" << endmsg;
498 return S_FAIL;
499 }
500 return pObj->update();
501 } else if ( nb < 0 ) {
502 string tag = par[0] + ":" + par[1];
503 if ( m_badFiles.find( tag ) == m_badFiles.end() ) {
504 m_badFiles.insert( tag );
505 return error( "createObj> Cannot access the object:" + tag + " [Corrupted file]" );
506 }
507 }
508 }
509 return S_FAIL;
510 }
DataObject::update
virtual StatusCode update()
Provide empty placeholder for internal object reconfiguration callback.
Definition: DataObject.cpp:65
SmartIF< IDataManagerSvc >
DataObject::registry
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:72
IAddressCreator::createAddress
virtual StatusCode createAddress(long svc_type, const CLID &clid, const std::string *par, const unsigned long *ipar, IOpaqueAddress *&refpAddress)=0
Create a Generic address using explicit arguments to identify a single object.
DataObject::linkMgr
LinkManager * linkMgr() const
Retrieve Link manager.
Definition: DataObject.h:74
Gaudi::RootDataConnection::loadRefs
int loadRefs(std::string_view section, std::string_view cnt, unsigned long entry, RootObjectRefs &refs)
Load references object.
Definition: RootDataConnection.cpp:547
Gaudi::IDataConnection::fid
const std::string & fid() const
Access file id.
Definition: IIODataManager.h:53
std::set::end
T end(T... args)
Gaudi::RootDataConnection::getDb
const std::string & getDb(int which) const
Access database/file name from saved index.
Definition: RootDataConnection.cpp:448
MSG::VERBOSE
Definition: IMessageSvc.h:15
Gaudi::RootObjectRefs::links
std::vector< int > links
The links of the link manager.
Definition: extractEvt.C:73
Gaudi::RootObjectRefs
Persistent reference object containing all leafs and links corresponding to a Gaudi DataObject.
Definition: extractEvt.C:71
Gaudi::RootCnvSvc::log
MsgStream & log() const
Helper: Use message streamer.
Definition: RootCnvSvc.h:97
Service::name
const std::string & name() const override
Retrieve name of the service.
Definition: Service.cpp:274
CommonMessagingBase::error
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
Definition: CommonMessaging.h:98
compareOutputFiles.par
string par
Definition: compareOutputFiles.py:465
Gaudi::RootDataConnection::getCont
const std::string & getCont(int which) const
Access container name from saved index.
Definition: RootDataConnection.h:323
IService
General service interface definition.
Definition: IService.h:18
StatusCode
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
Gaudi::RootDataConnection::getLink
const std::string & getLink(int which) const
Access link name from saved index.
Definition: RootDataConnection.h:328
IRegistry
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
StatusCode::isSuccess
bool isSuccess() const
Definition: StatusCode.h:267
ConversionSvc::addressCreator
SmartIF< IAddressCreator > & addressCreator() const override
Retrieve address creator facility.
Definition: ConversionSvc.cpp:170
std::set::insert
T insert(T... args)
Gaudi::RootCnvSvc::m_badFiles
std::set< std::string > m_badFiles
Set with bad files/tables.
Definition: RootCnvSvc.h:89
std::set::find
T find(T... args)
MsgStream::level
MSG::Level level() const
Retrieve output level.
Definition: MsgStream.h:103
IRegistry::dataSvc
virtual IDataProviderSvc * dataSvc() const =0
Retrieve pointer to Transient Store.
MSG::ERROR
Definition: IMessageSvc.h:15
IOpaqueAddress
Opaque address interface definition.
Definition: IOpaqueAddress.h:23
S_FAIL
#define S_FAIL
Definition: RootCnvSvc.cpp:38
Gaudi::RootDataConnection
Concrete implementation of the IDataConnection interface to access ROOT files.
Definition: RootDataConnection.h:93
Gaudi::RootObjectRefs::refs
std::vector< RootRef > refs
The references corresponding to the next layer of items in the data store.
Definition: extractEvt.C:75
LinkManager
A LinkManager is the object aggregated into a DataObject, which is responsible for the handling of no...
Definition: LinkManager.h:21
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192
LinkManager::addLink
long addLink(const std::string &path, const DataObject *pObject) const
Add link by object reference and path.
Definition: LinkManager.cpp:54

## ◆ i__fillRepRefs()

StatusCode RootCnvSvc::i__fillRepRefs | ( | IOpaqueAddress * | pAddr,
|  | DataObject * | pObj
| ) |  |
| virtual

Resolve the references of the converted object.

Parameters

  pAddr | [IN] Pointer to object address.
  pObj | [IN] Pointer to data object

Returns
  Status code indicating success or failure.

Definition at line 393 of file RootCnvSvc.cpp.

393 {
394 if ( pObj ) {
395 typedef vector<IRegistry*> Leaves;
396 Leaves leaves;
397 RootObjectRefs refs;
398 IRegistry* pR = pObj->registry();
399 auto dataMgr = SmartIF<IDataManagerSvc>{pR->dataSvc()};
400 if ( dataMgr ) {
401 StatusCode status = dataMgr->objectLeaves( pObj, leaves );
402 if ( status.isSuccess() ) {
403 RootRef ref;
404 const string& id = pR->identifier();
405 size_t len = id.find( '/', 1 );
406 string sect = id.substr( 1, len == string::npos ? string::npos : len - 1 );
407 LinkManager* pLinks = pObj->linkMgr();
408 for ( auto& i : leaves ) {
409 if ( i->address() ) {
410 m_current->makeRef( *i, ref );
411 ref.entry = i->address()->ipar()[1];
412 refs.refs.push_back( ref );
413 }
414 }
415 for ( int i = 0, n = pLinks->size(); i < n; ++i ) {
416 LinkManager::Link* lnk = pLinks->link( i );
417 int link_id = m_current->makeLink( lnk->path() );
418 refs.links.push_back( link_id );
419 }
420 pair<int, unsigned long> ret =
421 m_current->save( sect, id + "#R", m_classRefs, &refs, m_bufferSize, m_splitLevel, true );
422 if ( ret.first > 1 ) {
423 if ( log().level() <= MSG::DEBUG )
424 log() << MSG::DEBUG << "Writing object:" << id << " " << ret.first << " " << hex << ret.second << dec
425 << endmsg;
426 return S_OK;
427 }
428 }
429 }
430 }
431 return S_FAIL;
432 }
SmartIF< IDataManagerSvc >
DataObject::registry
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:72
Gaudi::RootDataConnection::save
std::pair< int, unsigned long > save(std::string_view section, std::string_view cnt, TClass *cl, void *pObj, int buff_siz, int split_lvl, bool fill_missing=false)
Save object of a given class to section and container.
Definition: RootDataConnection.cpp:467
Gaudi::RootDataConnection::makeLink
int makeLink(std::string_view p)
Convert path string to path index.
Definition: RootDataConnection.cpp:440
DataObject::linkMgr
LinkManager * linkMgr() const
Retrieve Link manager.
Definition: DataObject.h:74
MSG::DEBUG
Definition: IMessageSvc.h:15
MSG::dec
MsgStream & dec(MsgStream &log)
Definition: MsgStream.h:267
MSG::hex
MsgStream & hex(MsgStream &log)
Definition: MsgStream.h:271
Gaudi::RootCnvSvc::m_splitLevel
Gaudi::Property< int > m_splitLevel
Definition: RootCnvSvc.h:69
Gaudi::RootCnvSvc::m_bufferSize
Gaudi::Property< int > m_bufferSize
Definition: RootCnvSvc.h:67
Gaudi::RootObjectRefs::links
std::vector< int > links
The links of the link manager.
Definition: extractEvt.C:73
Gaudi::RootObjectRefs
Persistent reference object containing all leafs and links corresponding to a Gaudi DataObject.
Definition: extractEvt.C:71
Gaudi::RootCnvSvc::log
MsgStream & log() const
Helper: Use message streamer.
Definition: RootCnvSvc.h:97
compareRootHistos.ref
string ref
Definition: compareRootHistos.py:14
GaudiPluginService.cpluginsvc.n
n
Definition: cpluginsvc.py:210
Gaudi::RootRef
Persistent reference object.
Definition: extractEvt.C:34
std::vector::push_back
T push_back(T... args)
StatusCode
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
LinkManager::Link::path
const std::string & path() const
Access to path of object.
Definition: LinkManager.h:61
S_OK
#define S_OK
Definition: RootCnvSvc.cpp:37
LinkManager::link
Link * link(long id)
Retrieve symbolic link identified by ID.
Definition: LinkManager.cpp:29
IRegistry
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
StatusCode::isSuccess
bool isSuccess() const
Definition: StatusCode.h:267
std::pair
std::string::find
T find(T... args)
std::vector< IRegistry * >
LinkManager::size
long size() const
Retrieve number of link present.
Definition: LinkManager.h:100
IRegistry::dataSvc
virtual IDataProviderSvc * dataSvc() const =0
Retrieve pointer to Transient Store.
gaudirun.level
level
Definition: gaudirun.py:334
Gaudi::RootDataConnection::makeRef
void makeRef(const IRegistry &pA, RootRef &ref)
Create reference object from registry entry.
Definition: RootDataConnection.cpp:590
IRegistry::identifier
virtual const id_type & identifier() const =0
Full identifier (or key)
LinkManager::Link
Embedded class defining a symbolic link Note: No copy constructor; bitwise copy (done by the compiler...
Definition: LinkManager.h:31
S_FAIL
#define S_FAIL
Definition: RootCnvSvc.cpp:38
Gaudi::RootObjectRefs::refs
std::vector< RootRef > refs
The references corresponding to the next layer of items in the data store.
Definition: extractEvt.C:75
LinkManager
A LinkManager is the object aggregated into a DataObject, which is responsible for the handling of no...
Definition: LinkManager.h:21
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192
Gaudi::RootCnvSvc::m_current
Gaudi::RootDataConnection * m_current
On writing: reference to active output stream.
Definition: RootCnvSvc.h:78
Gaudi::RootCnvSvc::m_classRefs
TClass * m_classRefs
TClass pointer to reference class.
Definition: RootCnvSvc.h:80

## ◆ initialize()

StatusCode RootCnvSvc::initialize | ( |  | ) |
| override

ConversionSvc overload: initialize Db service.

Definition at line 74 of file RootCnvSvc.cpp.

74 {
75 string cname;
76 StatusCode status = ConversionSvc::initialize();
77 if ( !status.isSuccess() ) { return error( "Failed to initialize ConversionSvc base class." ); }
78 m_log.reset( new MsgStream( msgSvc(), name() ) );
79 if ( !m_compression.empty() ) {
80 log() << MSG::INFO << "Setting global ROOT compression to:" << m_compression.value() << endmsg;
81 if ( !( status = RootConnectionSetup::setCompression( m_compression.value() ) ).isSuccess() ) {
82 return error( "Unable to interprete ROOT compression encoding:" + m_compression );
83 }
84 }
85 m_ioMgr = service( "IODataManager" );
86 if ( !m_ioMgr ) return error( "Unable to localize interface from service:IODataManager" );
87 m_incidentSvc = service( "IncidentSvc" );
88 if ( !m_incidentSvc ) return error( "Unable to localize interface from service:IncidentSvc" );
89 m_setup->setMessageSvc( new MsgStream( msgSvc(), name() ) );
90 m_setup->setIncidentSvc( m_incidentSvc.get() );
91 GaudiRoot::patchStreamers( log() );
92 cname = System::typeinfoName( typeid( DataObject ) );
93 m_classDO = TClass::GetClass( cname.c_str() );
94 if ( !m_classDO ) return error( "Unable to load class description for DataObject" );
95 cname = System::typeinfoName( typeid( RootObjectRefs ) );
96 m_classRefs = TClass::GetClass( cname.c_str() );
97 if ( !m_classRefs ) return error( "Unable to load class description for ObjectRefs" );
98 return S_OK;
99 }
MsgStream
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
CommonMessagingBase::msgSvc
const SmartIF< IMessageSvc > & msgSvc() const
The standard message service.
Definition: CommonMessaging.h:68
Gaudi::RootCnvSvc::m_incidentSvc
SmartIF< IIncidentSvc > m_incidentSvc
Reference to incident service.
Definition: RootCnvSvc.h:76
System::typeinfoName
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:298
Gaudi::RootCnvSvc::m_setup
std::shared_ptr< RootConnectionSetup > m_setup
Setup structure (ref-counted) and passed to data connections.
Definition: RootCnvSvc.h:84
Gaudi::RootCnvSvc::m_compression
Gaudi::Property< std::string > m_compression
Definition: RootCnvSvc.h:70
GaudiRoot::patchStreamers
bool patchStreamers(MsgStream &log)
Definition: RootIOHandler.cpp:201
SmartIF::get
TYPE * get() const
Get interface pointer.
Definition: SmartIF.h:76
Gaudi::RootObjectRefs
Persistent reference object containing all leafs and links corresponding to a Gaudi DataObject.
Definition: extractEvt.C:71
Gaudi::RootCnvSvc::log
MsgStream & log() const
Helper: Use message streamer.
Definition: RootCnvSvc.h:97
Service::name
const std::string & name() const override
Retrieve name of the service.
Definition: Service.cpp:274
Gaudi::RootConnectionSetup::setCompression
static StatusCode setCompression(std::string_view compression)
Set the global compression level.
Definition: RootDataConnection.cpp:110
CommonMessagingBase::error
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
Definition: CommonMessaging.h:98
StatusCode
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
Gaudi::RootCnvSvc::m_log
std::unique_ptr< MsgStream > m_log
Message streamer.
Definition: RootCnvSvc.h:92
S_OK
#define S_OK
Definition: RootCnvSvc.cpp:37
Gaudi::RootCnvSvc::m_classDO
TClass * m_classDO
TClass pointer to DataObject class.
Definition: RootCnvSvc.h:82
std::unique_ptr::reset
T reset(T... args)
StatusCode::isSuccess
bool isSuccess() const
Definition: StatusCode.h:267
Gaudi::RootCnvSvc::m_ioMgr
SmartIF< Gaudi::IIODataManager > m_ioMgr
Reference to the I/O data manager.
Definition: RootCnvSvc.h:74
std::string::c_str
T c_str(T... args)
Service::service
StatusCode service(const std::string &name, const T *&psvc, bool createIf=true) const
Access a service by name, creating it if it doesn't already exist.
Definition: Service.h:83
MSG::INFO
Definition: IMessageSvc.h:15
DataObject
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
ConversionSvc::initialize
StatusCode initialize() override
Initialize the service.
Definition: ConversionSvc.cpp:226
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192
Gaudi::RootCnvSvc::m_classRefs
TClass * m_classRefs
TClass pointer to reference class.
Definition: RootCnvSvc.h:80

## ◆ loadConverter()

void RootCnvSvc::loadConverter | ( | DataObject * | pObj | ) |
| override virtual

ConversionSvc overload: Load the class (dictionary) for the converter.

Reimplemented from ConversionSvc.

Definition at line 144 of file RootCnvSvc.cpp.

144 {
145 if ( pObject ) {
146 string cname = System::typeinfoName( typeid( *pObject ) );
147 if ( log().level() <= MSG::DEBUG )
148 log() << MSG::DEBUG << "Trying to 'Autoload' dictionary for class " << cname << endmsg;
149 TClass* cl = s_classesNames[cname];
150 if ( nullptr == cl ) {
151 cl = TClass::GetClass( cname.c_str() );
152 if ( cl ) {
153 s_classesNames[cname] = cl;
154 s_classesClids[pObject->clID()] = cl;
155 }
156 }
157 }
158 }
System::typeinfoName
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:298
MSG::DEBUG
Definition: IMessageSvc.h:15
Gaudi::RootCnvSvc::log
MsgStream & log() const
Helper: Use message streamer.
Definition: RootCnvSvc.h:97
std::string::c_str
T c_str(T... args)
gaudirun.level
level
Definition: gaudirun.py:334
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192

## ◆ log()

MsgStream& Gaudi::RootCnvSvc::log | ( |  | ) | const
| inline protected

Helper: Use message streamer.

Definition at line 97 of file RootCnvSvc.h.

97 { return *m_log; }
Gaudi::RootCnvSvc::m_log
std::unique_ptr< MsgStream > m_log
Message streamer.
Definition: RootCnvSvc.h:92

## ◆ updateServiceState()

StatusCode Gaudi::RootCnvSvc::updateServiceState | ( | IOpaqueAddress * |  | ) |
| inline override virtual

Update state of the service.

Reimplemented from ConversionSvc.

Definition at line 104 of file RootCnvSvc.h.

104 { return StatusCode::SUCCESS; }
StatusCode::SUCCESS
constexpr static const auto SUCCESS
Definition: StatusCode.h:85

## Member Data Documentation

## ◆ m_autoFlush

Gaudi::Property<int> Gaudi::RootCnvSvc::m_autoFlush
| protected

Initial value:
{this, "AutoFlush", 100,
"AutoFlush parameter for ROOT TTree (Number of events between auto flushes)"}

Definition at line 63 of file RootCnvSvc.h.

## ◆ m_badFiles

std::set<std::string> Gaudi::RootCnvSvc::m_badFiles
| protected

Set with bad files/tables.

Definition at line 89 of file RootCnvSvc.h.

## ◆ m_basketSize

Gaudi::Property<int> Gaudi::RootCnvSvc::m_basketSize
| protected

Initial value:
{this, "BasketSize", 2 * 1024 * 1024 ,
"Basket optimization parameter for ROOT TTree (total basket size)"}

Definition at line 65 of file RootCnvSvc.h.

## ◆ m_bufferSize

Gaudi::Property<int> Gaudi::RootCnvSvc::m_bufferSize
| protected

Initial value:
{this, "BufferSize", 2 * 1024 ,
"Buffer size optimization parameter for ROOT TTree"}

Definition at line 67 of file RootCnvSvc.h.

## ◆ m_classDO

TClass* Gaudi::RootCnvSvc::m_classDO = nullptr
| protected

TClass pointer to DataObject class.

Definition at line 82 of file RootCnvSvc.h.

## ◆ m_classRefs

TClass* Gaudi::RootCnvSvc::m_classRefs = nullptr
| protected

TClass pointer to reference class.

Definition at line 80 of file RootCnvSvc.h.

## ◆ m_compression

Gaudi::Property<std::string> Gaudi::RootCnvSvc::m_compression
| protected

Initial value:
{this, "GlobalCompression", "",
"Compression-algorithm:compression-level, empty: do nothing"}

Definition at line 70 of file RootCnvSvc.h.

## ◆ m_current

Gaudi::RootDataConnection* Gaudi::RootCnvSvc::m_current = nullptr
| protected

On writing: reference to active output stream.

Definition at line 78 of file RootCnvSvc.h.

## ◆ m_currSection

std::string Gaudi::RootCnvSvc::m_currSection
| protected

Property: ROOT section name.

Definition at line 86 of file RootCnvSvc.h.

## ◆ m_incidentEnabled

Gaudi::Property<bool> Gaudi::RootCnvSvc::m_incidentEnabled {this, "EnableIncident", true, "Flag to enable incidents on FILE_OPEN"}
| protected

Definition at line 58 of file RootCnvSvc.h.

## ◆ m_incidentSvc

SmartIF<IIncidentSvc> Gaudi::RootCnvSvc::m_incidentSvc
| protected

Reference to incident service.

Definition at line 76 of file RootCnvSvc.h.

## ◆ m_ioMgr

SmartIF<Gaudi::IIODataManager> Gaudi::RootCnvSvc::m_ioMgr
| protected

Reference to the I/O data manager.

Definition at line 74 of file RootCnvSvc.h.

## ◆ m_ioPerfStats

Gaudi::Property<std::string> Gaudi::RootCnvSvc::m_ioPerfStats
| protected

Initial value:
{this, "IOPerfStats", "",
"Enable TTree IOperfStats if not empty; otherwise perf stat file name"}

Definition at line 54 of file RootCnvSvc.h.

## ◆ m_log

std::unique_ptr<MsgStream> Gaudi::RootCnvSvc::m_log
| protected

Message streamer.

Definition at line 92 of file RootCnvSvc.h.

## ◆ m_recordName

Gaudi::Property<std::string> Gaudi::RootCnvSvc::m_recordName
| protected

Initial value:
{this, "RecordsName", "/FileRecords",
"Records name to fire incident for file records"}

Definition at line 59 of file RootCnvSvc.h.

## ◆ m_setup

std::shared_ptr<RootConnectionSetup> Gaudi::RootCnvSvc::m_setup
| protected

Setup structure (ref-counted) and passed to data connections.

Definition at line 84 of file RootCnvSvc.h.

## ◆ m_shareFiles

Gaudi::Property<std::string> Gaudi::RootCnvSvc::m_shareFiles
| protected

Initial value:
{this, "ShareFiles", "NO",
"Share files? If set to YES, files will not be closed on finalize"}

Definition at line 56 of file RootCnvSvc.h.

## ◆ m_splitLevel

Gaudi::Property<int> Gaudi::RootCnvSvc::m_splitLevel {this, "SplitLevel", 0, "Split level optimization parameter for ROOT TTree"}
| protected

Definition at line 69 of file RootCnvSvc.h.

The documentation for this class was generated from the following files:

- RootCnv/RootCnv/RootCnvSvc.h
- RootCnv/src/RootCnvSvc.cpp