| The Gaudi Framework v27r1

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- Class List
- Class Index
- Class Hierarchy
- Class Members

Public Member Functions | Static Public Member Functions | Protected Attributes | List of all members
RootHistCnv::RFileCnv Class Reference

NTuple converter class definition. More...

`#include <src/RFileCnv.h>`

Inheritance diagram for RootHistCnv::RFileCnv:
[legend]
Collaboration diagram for RootHistCnv::RFileCnv:
[legend]

## Public Member Functions
StatusCode | initialize () override
| Initialise. More...
StatusCode | createObj (IOpaqueAddress *pAddress, DataObject *&refpObject) override
| Create the transient representation of an object. More...
StatusCode | createRep (DataObject *pObject, IOpaqueAddress *&refpAddress) override
| Convert the transient object to the requested representation. More...
StatusCode | updateRep (IOpaqueAddress *pAddress, DataObject *pObject) override
| Convert the transient object to the requested representation. More...
| RFileCnv (ISvcLocator *svc)
| Standard constructor. More...
| ~RFileCnv () override=default
| Standard destructor. More...
Public Member Functions inherited from RootHistCnv::RDirectoryCnv
StatusCode | createObj (IOpaqueAddress *pAddr, DataObject *&refpObj) override
| Create the transient representation of an object. More...
StatusCode | fillObjRefs (IOpaqueAddress *pAddr, DataObject *refpObj) override
| Update the transient object from the other representation. More...
StatusCode | createRep (DataObject *pObj, IOpaqueAddress *&refpAddr) override
| Convert the transient object to the requested representation. More...
StatusCode | updateRep (IOpaqueAddress *pAddr, DataObject *pObject) override
| Convert the transient object to the requested representation. More...
| RDirectoryCnv (ISvcLocator *svc)
| Standard constructor. More...
| RDirectoryCnv (ISvcLocator *svc, const CLID &clid)
| Standard constructor. More...
| ~RDirectoryCnv () override=default
| Standard destructor. More...
Public Member Functions inherited from RootHistCnv::RConverter
StatusCode | createRep (DataObject *pObj, IOpaqueAddress *&refpAddr) override
| Convert the transient object to the requested representation. More...
long | repSvcType () const override
StatusCode | error (const std::string &msg)
StatusCode | regTFile (const std::string, const TFile *)
StatusCode | findTFile (const std::string, TFile *&)
std::string | diskDirectory (const std::string &loc)
std::string | directory (const std::string &loc)
void | setDirectory (const std::string &loc)
void | setDiskDirectory (const std::string &loc)
StatusCode | createDirectory (const std::string &loc)
StatusCode | createDiskDirectory (const std::string &loc)
std::string | getDirectory ()
std::string | convertId (const std::string &) const
Public Member Functions inherited from Converter
StatusCode | initialize () override
| Initialize the converter. More...
StatusCode | finalize () override
| Initialize the converter. More...
StatusCode | setDataProvider (IDataProviderSvc *svc) override
| Set Data provider service. More...
SmartIF< IDataProviderSvc > & | dataProvider () const override
| Get Data provider service. More...
StatusCode | setConversionSvc (IConversionSvc *svc) override
| Set conversion service the converter is connected to. More...
SmartIF< IConversionSvc > & | conversionSvc () const override
| 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...
const CLID & | objType () const override
| Retrieve the class type of objects the converter produces. More...
virtual long | i_repSvcType () const
| Retrieve the class type of the data store the converter uses. More...
StatusCode | createObj (IOpaqueAddress *pAddress, DataObject *&refpObject) override
| Create the transient representation of an object. More...
StatusCode | fillObjRefs (IOpaqueAddress *pAddress, DataObject *pObject) override
| Resolve the references of the created transient object. More...
StatusCode | updateObj (IOpaqueAddress *pAddress, DataObject *refpObject) override
| Update the transient object from the other representation. More...
StatusCode | updateObjRefs (IOpaqueAddress *pAddress, DataObject *pObject) override
| Update the references of an updated transient object. More...
StatusCode | createRep (DataObject *pObject, IOpaqueAddress *&refpAddress) override
| Convert the transient object to the requested representation. More...
StatusCode | fillRepRefs (IOpaqueAddress *pAddress, DataObject *pObject) override
| Resolve the references of the converted object. More...
StatusCode | updateRep (IOpaqueAddress *pAddress, DataObject *pObject) override
| Update the converted representation of a transient object. More...
StatusCode | updateRepRefs (IOpaqueAddress *pAddress, DataObject *pObject) override
| Update the references of an already converted object. More...
| Converter (long storage_type, const CLID &class_type, ISvcLocator *svc=0)
| Standard Constructor. More...
template<class T >
StatusCode | service (const std::string &name, T *&psvc, bool createIf=false) const
| Access a service by name, creating it if it doesn't already exist. More...
template<class T >
StatusCode | service (const std::string &type, const std::string &name, T *&psvc) const
| Access a service by name, type creating it if it doesn't already exist. More...
SmartIF< IService > | service (const std::string &name, const bool createIf=true) const
| Return a pointer to the service identified by name (or "type/name") More...
Public Member Functions inherited from implements< IConverter >
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...
| implements ()=default
| Default constructor. More...
| implements (const implements &)
| Copy constructor (zero the reference count) More...
implements & | operator= (const implements &)
| Assignment operator (do not touch the reference count). More...
| ~implements () override=default
| Virtual destructor. More...
unsigned long | addRef () override
| Reference Interface instance. More...
unsigned long | release () override
| Release Interface instance. More...
unsigned long | refCount () const override
| Current reference count. More...
Public Member Functions inherited from extend_interfaces< Interfaces...>
| ~extend_interfaces () override=default
| Virtual destructor. More...

## Static Public Member Functions
static const CLID & | classID ()
| Inquire class type. More...
Static Public Member Functions inherited from RootHistCnv::RDirectoryCnv
static const CLID & | classID ()
| Inquire class type. More...
Static Public Member Functions inherited from RootHistCnv::RConverter
static long | storageType ()
| Inquire storage type. More...

## Protected Attributes
TFile * | rfile
| Pointer to ROOT file. More...
std::string | m_compLevel
| Compression setting. More...
Protected Attributes inherited from implements< IConverter >
std::atomic_ulong | m_refCount
| Reference counter. More...

## Additional Inherited Members
Public Types inherited from Converter
typedef Gaudi::PluginService::Factory< IConverter *, ISvcLocator * > | Factory
Public Types inherited from implements< IConverter >
using | base_class = implements< Interfaces...>
| Typedef to this class. More...
using | extend_interfaces_base = extend_interfaces< Interfaces...>
| Typedef to the base of this class. More...
using | iids = typename extend_interfaces_base::ext_iids
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...
Protected Member Functions inherited from RootHistCnv::RConverter
| RConverter (const CLID &clid, ISvcLocator *svc)
| Standard constructor. More...
| ~RConverter () override=default
| Standard destructor. More...
virtual StatusCode | readObject (IOpaqueAddress *pAddr, DataObject *&refpObj)
| Create the transient representation of an object. More...
virtual TObject * | createPersistent (DataObject *pObj)
| Create the persistent representation of an object. More...
StatusCode | createAddress (DataObject *pObject, TDirectory *pDir, TObject *pTObject, IOpaqueAddress *&refpAddr)
| Create address of the transient object according to the requested representation. More...
StatusCode | createAddress (const std::string &rzdir, const CLID &clid, long id, TObject *pTobj, IOpaqueAddress *&refpAddress)
StatusCode | createAddress (const std::string &rzdir, const CLID &clid, const std::string &title, TObject *pTobj, IOpaqueAddress *&refpAddress)
TDirectory * | changeDirectory (DataObject *pObject)
| Switch to object directory (=Parent directory) More...
Protected Member Functions inherited from Converter
| ~Converter () override=default
| Standard Destructor. More...
SmartIF< ISvcLocator > & | serviceLocator () const
| Retrieve pointer to service locator. More...
SmartIF< IMessageSvc > & | msgSvc () const
| Retrieve pointer to message service. More...
SmartIF< IMessageSvc > & | messageService () const
SmartIF< IDataManagerSvc > & | dataManager () const
| Get Data Manager service. More...

## Detailed Description

NTuple converter class definition.

- Major cleanup and debugging for Gaudi v9
- Removal of all static storage

Author
  Charles Leggett
  Markus Frank

Definition at line 22 of file RFileCnv.h.

## Constructor & Destructor Documentation

RootHistCnv::RFileCnv::RFileCnv | ( | ISvcLocator * | svc | ) |

Standard constructor.

Definition at line 26 of file RFileCnv.cpp.

27 : RDirectoryCnv ( svc, classID() )
28 { }
RootHistCnv::RFileCnv::classID
static const CLID & classID()
Inquire class type.
Definition: RFileCnv.h:42
RootHistCnv::RDirectoryCnv::RDirectoryCnv
RDirectoryCnv(ISvcLocator *svc)
Standard constructor.
Definition: RDirectoryCnv.h:29

RootHistCnv::RFileCnv::~RFileCnv | ( |  | ) |
| override default

Standard destructor.

## Member Function Documentation

static const CLID& RootHistCnv::RFileCnv::classID | ( |  | ) |
| inline static

Inquire class type.

Definition at line 42 of file RFileCnv.h.

42 {
43 return CLID_NTupleFile;
44 }

StatusCode RootHistCnv::RFileCnv::createObj | ( | IOpaqueAddress * | pAddress,
|  | DataObject *& | refpObject
| ) |  |
| override

Create the transient representation of an object.

Definition at line 47 of file RFileCnv.cpp.

50 {
51 MsgStream log(msgSvc(), "RFileCnv");
52 unsigned long* ipar = (unsigned long*)pAddress->ipar();
53 char mode[2] = { char(ipar[1]), 0 };
54
55 std::string fname = pAddress->par()[0]; // Container name
56 std::string ooname = pAddress->par()[1]; // Object name
57
58 const std::string* spar = pAddress->par();
59 // Strip of store name to get the top level RZ directory
60 std::string oname = spar[1].substr(spar[1].find("/",1)+1);
61
62 // Protect against multiple instances of TROOT
63 if ( !gROOT ) {
64 static TROOT root("root","ROOT I/O");
65 // gDebug = 99;
66 } else {
67 log << MSG::VERBOSE << "ROOT already initialized, debug = "
68 << gDebug<< endmsg;
69 }
70
71 // Determine access mode:
72
73 if ( mode[0] == 'O' ) {
74
75 if (findTFile(ooname,rfile).isFailure()) {
76
77 log << MSG::INFO << "opening Root file \"" << fname << "\" for reading"
78 << endmsg;
79
80 rfile = TFile::Open(fname.c_str(),"READ");
81 if ( rfile && rfile->IsOpen() ) {
82 regTFile(ooname,rfile).ignore();
83
84 ipar[0] = (unsigned long)rfile;
85 NTuple::File* pFile = new NTuple::File(objType(), fname, oname);
86 pFile->setOpen(true);
87 refpObject = pFile;
88
89 return StatusCode::SUCCESS;
90
91 } else {
92 log << MSG::ERROR << "Couldn't open \"" << fname << "\" for reading"
93 << endmsg;
94 return StatusCode::FAILURE;
95 }
96
97 } else {
98 log << MSG::DEBUG << "Root file \"" << fname << "\" already opened"
99 << endmsg;
100 return StatusCode::SUCCESS;
101 }
102
103
104 } else if ( mode[0] == 'U' ) {
105
106 log << MSG::INFO << "opening Root file \"" << fname << "\" for updating"
107 << endmsg;
108
109 log << MSG::ERROR << "don't know how to do this yet. Aborting." << endmsg;
110 exit(1);
111
112 } else if ( mode[0] == 'N' ) {
113
114 log << MSG::INFO << "opening Root file \"" << fname << "\" for writing";
115 if ( !m_compLevel.empty() )
116 { log << ", CompressionLevel='" << m_compLevel << "'"; }
117 log << endmsg;
118
119 rfile = TFile::Open( fname.c_str(), "RECREATE", "Gaudi Trees" );
120 if ( ! ( rfile && rfile->IsOpen() ) ) {
121 log << MSG::ERROR << "Could not open file " << fname << " for writing"
122 << endmsg;
123 return StatusCode::FAILURE;
124 }
125 if ( !m_compLevel.empty() )
126 {
127 const RootCompressionSettings settings(m_compLevel);
128 rfile->SetCompressionSettings(settings.level());
129 }
130
131 regTFile(ooname,rfile).ignore();
132
133 log << MSG::DEBUG << "creating ROOT file " << fname << endmsg;
134
135 ipar[0] = (unsigned long)rfile;
136 NTuple::File* pFile = new NTuple::File(objType(), fname, oname);
137 pFile->setOpen(true);
138 refpObject = pFile;
139 return StatusCode::SUCCESS;
140
141 } else {
142
143 log << MSG::ERROR << "Uknown mode to access ROOT file" << endmsg;
144 return StatusCode::FAILURE;
145
146 }
147
148 return StatusCode::FAILURE;
149 }
IOpaqueAddress::par
virtual const std::string * par() const =0
Retrieve String parameters.
MsgStream
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
std::string::empty
T empty(T...args)
NTuple::File::setOpen
void setOpen(bool flag)
Set "open" flag.
Definition: NTuple.h:1140
RootHistCnv::RFileCnv::rfile
TFile * rfile
Pointer to ROOT file.
Definition: RFileCnv.h:54
Gaudi.Configuration.log
tuple log
Definition: Configuration.py:13
MSG::DEBUG
Definition: IMessageSvc.h:18
Converter::msgSvc
SmartIF< IMessageSvc > & msgSvc() const
Retrieve pointer to message service.
Definition: Converter.cpp:129
RootHistCnv::RConverter::regTFile
StatusCode regTFile(const std::string, const TFile *)
Definition: RConverter.cpp:299
RootHistCnv::RConverter::findTFile
StatusCode findTFile(const std::string, TFile *&)
Definition: RConverter.cpp:316
MSG::VERBOSE
Definition: IMessageSvc.h:17
std::string
STL class.
StatusCode::FAILURE
Definition: StatusCode.h:29
std::exit
T exit(T...args)
StatusCode::SUCCESS
Definition: StatusCode.h:30
RootHistCnv::RFileCnv::m_compLevel
std::string m_compLevel
Compression setting.
Definition: RFileCnv.h:55
std::find
T find(T...args)
std::string::c_str
T c_str(T...args)
IOTest.root
tuple root
Definition: IOTest.py:42
MSG::ERROR
Definition: IMessageSvc.h:21
std::string::substr
T substr(T...args)
StatusCode::ignore
void ignore() const
Definition: StatusCode.h:108
MSG::INFO
Definition: IMessageSvc.h:19
IOpaqueAddress::ipar
virtual const unsigned long * ipar() const =0
Access to generic link parameters.
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
Converter::objType
const CLID & objType() const override
Retrieve the class type of objects the converter produces.
Definition: Converter.cpp:14
NTuple::File
Small class representing an N tuple file in the transient store.
Definition: NTuple.h:1088

StatusCode RootHistCnv::RFileCnv::createRep | ( | DataObject * | pObject,
|  | IOpaqueAddress *& | refpAddress
| ) |  |
| override

Convert the transient object to the requested representation.

Definition at line 152 of file RFileCnv.cpp.

155 {
156 refpAddress = pObject->registry()->address();
157 return RFileCnv::updateRep( refpAddress, pObject );
158 }
RootHistCnv::RFileCnv::updateRep
StatusCode updateRep(IOpaqueAddress *pAddress, DataObject *pObject) override
Convert the transient object to the requested representation.
Definition: RFileCnv.cpp:161
DataObject::registry
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:74
IRegistry::address
virtual IOpaqueAddress * address() const =0
Retrieve opaque storage address.

StatusCode RootHistCnv::RFileCnv::initialize | ( |  | ) |
| override

Initialise.

Definition at line 31 of file RFileCnv.cpp.

32 {
33 // Set compression level property ...
34 std::unique_ptr<PropertyMgr> pmgr ( new PropertyMgr() );
35 pmgr->declareProperty( "GlobalCompression", m_compLevel );
36 ISvcLocator * svcLoc = Gaudi::svcLocator();
37 auto jobSvc = svcLoc->service<IJobOptionsSvc>("JobOptionsSvc");
38 const StatusCode sc = ( jobSvc &&
39 jobSvc->setMyProperties("RFileCnv",pmgr.get()) );
40
41 // initialise base class
42 return ( sc && RDirectoryCnv::initialize() );
43 }
ISvcLocator
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
Definition: ISvcLocator.h:25
Converter::initialize
StatusCode initialize() override
Initialize the converter.
Definition: Converter.cpp:65
merge_files.sc
int sc
Definition: merge_files.py:167
PropertyMgr
Property manager helper class.
Definition: PropertyMgr.h:37
ISvcLocator::service
StatusCode service(const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
Templated method to access a service by name.
Definition: ISvcLocator.h:78
IJobOptionsSvc
Main interface for the JobOptions service.
Definition: IJobOptionsSvc.h:20
Gaudi::svcLocator
GAUDI_API ISvcLocator * svcLocator()
StatusCode
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
RootHistCnv::RFileCnv::m_compLevel
std::string m_compLevel
Compression setting.
Definition: RFileCnv.h:55
std::unique_ptr
STL class.

StatusCode RootHistCnv::RFileCnv::updateRep | ( | IOpaqueAddress * | pAddress,
|  | DataObject * | pObject
| ) |  |
| override

Convert the transient object to the requested representation.

Definition at line 161 of file RFileCnv.cpp.

164 {
165 MsgStream log(msgSvc(), "RFileCnv");
166 std::string ooname = pAddress->par()[1];
167
168 NTuple::File* pFile = dynamic_cast<NTuple::File*>(pObject);
169 if ( pFile && pFile->isOpen() ) {
170
171 unsigned long* ipar = (unsigned long*)pAddress->ipar();
172 if (findTFile(ooname,rfile).isFailure()) {
173 log << MSG::ERROR << "Problems closing TFile " << ooname << endmsg;
174 return StatusCode::FAILURE;
175 }
176
177 rfile->Write(nullptr,TObject::kOverwrite);
178 if ( log.level() <= MSG::INFO ) {
179 log << MSG::INFO << "dumping contents of " << ooname << endmsg;
180 rfile->Print();
181 }
182
183 /*
184 * MetaData
185 * Ana Trisovic
186 * March 2015
187 * */
188 SmartIF <IMetaDataSvc> mds;
189 mds = serviceLocator()->service("Gaudi::MetaDataSvc", false);
190 //auto mds = service<IMetaDataSvc>("MetaDataSvc", false);
191 if (mds) {
192 std::map <std::string, std::string> m_metadata = mds->getMetaDataMap();
193 if(!rfile->WriteObject(&m_metadata, "info")){
194 return StatusCode::FAILURE;
195 }
196 }
197 /* */
198
199 rfile->Close();
200 delete rfile;
201
202 ipar[0] = 0;
203 pFile->setOpen(false);
204 return StatusCode::SUCCESS;
205
206 } else {
207 log << MSG::ERROR << "TFile " << ooname << " is not open" << endmsg;
208 }
209 return StatusCode::FAILURE;
210 }
IOpaqueAddress::par
virtual const std::string * par() const =0
Retrieve String parameters.
MsgStream
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
SmartIF
Small smart pointer class with automatic reference counting for IInterface.
Definition: IConverter.h:14
NTuple::File::setOpen
void setOpen(bool flag)
Set "open" flag.
Definition: NTuple.h:1140
RootHistCnv::RFileCnv::rfile
TFile * rfile
Pointer to ROOT file.
Definition: RFileCnv.h:54
Gaudi.Configuration.log
tuple log
Definition: Configuration.py:13
Converter::msgSvc
SmartIF< IMessageSvc > & msgSvc() const
Retrieve pointer to message service.
Definition: Converter.cpp:129
RootHistCnv::RConverter::findTFile
StatusCode findTFile(const std::string, TFile *&)
Definition: RConverter.cpp:316
std::map< std::string, std::string >
std::string
STL class.
ISvcLocator::service
StatusCode service(const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
Templated method to access a service by name.
Definition: ISvcLocator.h:78
IMetaDataSvc::getMetaDataMap
virtual std::map< std::string, std::string > getMetaDataMap()=0
StatusCode::FAILURE
Definition: StatusCode.h:29
StatusCode::SUCCESS
Definition: StatusCode.h:30
NTuple::File::isOpen
bool isOpen() const
Access "open" flag.
Definition: NTuple.h:1144
Converter::serviceLocator
SmartIF< ISvcLocator > & serviceLocator() const
Retrieve pointer to service locator.
Definition: Converter.cpp:124
MSG::ERROR
Definition: IMessageSvc.h:21
MSG::INFO
Definition: IMessageSvc.h:19
IOpaqueAddress::ipar
virtual const unsigned long * ipar() const =0
Access to generic link parameters.
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
NTuple::File
Small class representing an N tuple file in the transient store.
Definition: NTuple.h:1088

## Member Data Documentation

std::string RootHistCnv::RFileCnv::m_compLevel
| protected

Compression setting.

Definition at line 55 of file RFileCnv.h.

TFile* RootHistCnv::RFileCnv::rfile
| protected

Pointer to ROOT file.

Definition at line 54 of file RFileCnv.h.

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

- RootHistCnv/src/RFileCnv.h
- RootHistCnv/src/RFileCnv.cpp