| # Gaudi Framework, version v25r0 |

Home |  | Generated: Mon Feb 17 2014

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

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

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
Public Member Functions | Static Public Member Functions | Protected Attributes | List of all members
RootHistCnv::RFileCnv Class Reference

NTuple converter class definition. More...

`#include <RFileCnv.h>`

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

## Public Member Functions
virtual StatusCode | initialize ()
| Initialise.
virtual StatusCode | createObj (IOpaqueAddress *pAddress, DataObject *&refpObject)
| Create the transient representation of an object.
virtual StatusCode | createRep (DataObject *pObject, IOpaqueAddress *&refpAddress)
| Convert the transient object to the requested representation.
virtual StatusCode | updateRep (IOpaqueAddress *pAddress, DataObject *pObject)
| Convert the transient object to the requested representation.
| RFileCnv (ISvcLocator *svc)
| Standard constructor.
virtual | ~RFileCnv ()
| Standard destructor.
Public Member Functions inherited from RootHistCnv::RDirectoryCnv
virtual StatusCode | fillObjRefs (IOpaqueAddress *pAddr, DataObject *refpObj)
| Update the transient object from the other representation.
| RDirectoryCnv (ISvcLocator *svc)
| Standard constructor.
| RDirectoryCnv (ISvcLocator *svc, const CLID &clid)
| Standard constructor.
virtual | ~RDirectoryCnv ()
| Standard destructor.
Public Member Functions inherited from RootHistCnv::RConverter
long | repSvcType () const
| Retrieve the class type of the data store the converter uses.
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
virtual StatusCode | finalize ()
| Initialize the converter.
virtual StatusCode | setDataProvider (IDataProviderSvc *svc)
| Set Data provider service.
virtual SmartIF < IDataProviderSvc > & | dataProvider () const
| Get Data provider service.
virtual StatusCode | setConversionSvc (IConversionSvc *svc)
| Set conversion service the converter is connected to.
virtual SmartIF< IConversionSvc > & | conversionSvc () const
| Get conversion service the converter is connected to.
virtual StatusCode | setAddressCreator (IAddressCreator *creator)
| Set address creator facility.
virtual SmartIF < IAddressCreator > & | addressCreator () const
| Retrieve address creator facility.
virtual const CLID & | objType () const
| Retrieve the class type of objects the converter produces.
virtual long | i_repSvcType () const
| Retrieve the class type of the data store the converter uses.
virtual StatusCode | updateObj (IOpaqueAddress *pAddress, DataObject *refpObject)
| Update the transient object from the other representation.
virtual StatusCode | updateObjRefs (IOpaqueAddress *pAddress, DataObject *pObject)
| Update the references of an updated transient object.
virtual StatusCode | fillRepRefs (IOpaqueAddress *pAddress, DataObject *pObject)
| Resolve the references of the converted object.
virtual StatusCode | updateRepRefs (IOpaqueAddress *pAddress, DataObject *pObject)
| Update the references of an already converted object.
| Converter (long storage_type, const CLID &class_type, ISvcLocator *svc=0)
| Standard Constructor.
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.
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.
SmartIF< IService > | service (const std::string &name, const bool createIf=true) const
| Return a pointer to the service identified by name (or "type/name")

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

## Protected Attributes
TFile * | rfile
| Pointer to ROOT file.
std::string | m_compLevel
| Compression setting.

## Additional Inherited Members
Public Types inherited from Converter
typedef Gaudi::PluginService::Factory1 < IConverter *, ISvcLocator * > | Factory
Protected Member Functions inherited from RootHistCnv::RConverter
| RConverter (const CLID &clid, ISvcLocator *svc)
| Standard constructor.
virtual | ~RConverter ()
| Standard destructor.
virtual StatusCode | readObject (IOpaqueAddress *pAddr, DataObject *&refpObj)
| Create the transient representation of an object.
virtual TObject * | createPersistent (DataObject *pObj)
| Create the persistent representation of an object.
StatusCode | createAddress (DataObject *pObject, TDirectory *pDir, TObject *pTObject, IOpaqueAddress *&refpAddr)
| Create address of the transient object according to the requested representation.
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)

## 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 23 of file RFileCnv.h.

## Constructor & Destructor Documentation

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

Standard constructor.

Definition at line 22 of file RFileCnv.cpp.

: RDirectoryCnv ( svc, classID() ),
m_compLevel ( "" )
{ }

RootHistCnv::RFileCnv::~RFileCnv | ( |  | ) |
| virtual

Standard destructor.

Definition at line 194 of file RFileCnv.cpp.

{
}

## Member Function Documentation

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

Inquire class type.

Definition at line 43 of file RFileCnv.h.

{
return CLID_NTupleFile;
}

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

Create the transient representation of an object.

Reimplemented from RootHistCnv::RDirectoryCnv.

Definition at line 45 of file RFileCnv.cpp.

{
MsgStream log(msgSvc(), "RFileCnv");
unsigned long* ipar = (unsigned long*)pAddress->ipar();
char mode[2] = { char(ipar[1]), 0 };
std::string fname = pAddress->par()[0]; // Container name
std::string ooname = pAddress->par()[1]; // Object name
const std::string* spar = pAddress->par();
// Strip of store name to get the top level RZ directory
std::string oname = spar[1].substr(spar[1].find("/",1)+1, spar[1].length());
// Protect against multiple instances of TROOT
if ( 0 == gROOT ) {
static TROOT root("root","ROOT I/O");
// gDebug = 99;
} else {
log << MSG::VERBOSE << "ROOT already initialized, debug = "
<< gDebug<< endmsg;
}
// Determine access mode:
if ( mode[0] == 'O' ) {
if (findTFile(ooname,rfile).isFailure()) {
log << MSG::INFO << "opening Root file \"" << fname << "\" for reading"
<< endmsg;
rfile = TFile::Open(fname.c_str(),"READ");
if ( rfile != 0 && rfile->IsOpen() ) {
regTFile(ooname,rfile).ignore();
ipar[0] = (unsigned long)rfile;
NTuple::File* pFile = new NTuple::File(objType(), fname, oname);
pFile->setOpen(true);
refpObject = pFile;
return StatusCode::SUCCESS;
} else {
log << MSG::ERROR << "Couldn't open \"" << fname << "\" for reading"
<< endmsg;
return StatusCode::FAILURE;
}
} else {
log << MSG::DEBUG << "Root file \"" << fname << "\" already opened"
<< endmsg;
return StatusCode::SUCCESS;
}
} else if ( mode[0] == 'U' ) {
log << MSG::INFO << "opening Root file \"" << fname << "\" for updating"
<< endmsg;
log << MSG::ERROR << "don't know how to do this yet. Aborting." << endmsg;
exit(1);
} else if ( mode[0] == 'N' ) {
log << MSG::INFO << "opening Root file \"" << fname << "\" for writing";
if ( !m_compLevel.empty() )
{ log << ", CompressionLevel='" << m_compLevel << "'"; }
log << endmsg;
rfile = TFile::Open( fname.c_str(), "RECREATE", "Gaudi Trees" );
if ( ! ( rfile && rfile->IsOpen() ) ) {
log << MSG::ERROR << "Could not open file " << fname << " for writing"
<< endmsg;
return StatusCode::FAILURE;
}
if ( !m_compLevel.empty() )
{
const RootCompressionSettings settings(m_compLevel);
rfile->SetCompressionSettings(settings.level());
}
regTFile(ooname,rfile).ignore();
log << MSG::DEBUG << "creating ROOT file " << fname << endmsg;
ipar[0] = (unsigned long)rfile;
NTuple::File* pFile = new NTuple::File(objType(), fname, oname);
pFile->setOpen(true);
refpObject = pFile;
return StatusCode::SUCCESS;
} else {
log << MSG::ERROR << "Uknown mode to access ROOT file" << endmsg;
return StatusCode::FAILURE;
}
return StatusCode::FAILURE;
}

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

Convert the transient object to the requested representation.

Reimplemented from RootHistCnv::RDirectoryCnv.

Definition at line 150 of file RFileCnv.cpp.

{
refpAddress = pObject->registry()->address();
return RFileCnv::updateRep( refpAddress, pObject );
}

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

Initialise.

Reimplemented from Converter.

Definition at line 28 of file RFileCnv.cpp.

{
// Set compression level property ...
std::auto_ptr<PropertyMgr> pmgr ( new PropertyMgr() );
pmgr->declareProperty( "GlobalCompression", m_compLevel );
ISvcLocator * svcLoc = Gaudi::svcLocator();
SmartIF<IJobOptionsSvc> jobSvc =
svcLoc->service<IJobOptionsSvc>("JobOptionsSvc");
const StatusCode sc = ( jobSvc.isValid() &&
jobSvc->setMyProperties("RFileCnv",&*pmgr) );
// initialise base class
return ( sc && RDirectoryCnv::initialize() );
}

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

Convert the transient object to the requested representation.

Reimplemented from RootHistCnv::RDirectoryCnv.

Definition at line 159 of file RFileCnv.cpp.

{
MsgStream log(msgSvc(), "RFileCnv");
std::string ooname = pAddress->par()[1];
NTuple::File* pFile = dynamic_cast<NTuple::File*>(pObject);
if ( pFile != 0 && pFile->isOpen() ) {
unsigned long* ipar = (unsigned long*)pAddress->ipar();
if (findTFile(ooname,rfile).isFailure()) {
log << MSG::ERROR << "Problems closing TFile " << ooname << endmsg;
return StatusCode::FAILURE;
}
rfile->Write(0,TObject::kOverwrite);
if ( log.level() <= MSG::INFO ) {
log << MSG::INFO << "dumping contents of " << ooname << endmsg;
rfile->Print();
}
rfile->Close();
delete rfile;
ipar[0] = 0;
pFile->setOpen(false);
return StatusCode::SUCCESS;
} else {
log << MSG::ERROR << "TFile " << ooname << " is not open" << endmsg;
}
return StatusCode::FAILURE;
}

## Member Data Documentation

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

Compression setting.

Definition at line 56 of file RFileCnv.h.

TFile* RootHistCnv::RFileCnv::rfile
| protected

Pointer to ROOT file.

Definition at line 55 of file RFileCnv.h.

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

- /afs/cern.ch/sw/Gaudi/releases/GAUDI/GAUDI_v25r0/RootHistCnv/src/RFileCnv.h
- /afs/cern.ch/sw/Gaudi/releases/GAUDI/GAUDI_v25r0/RootHistCnv/src/RFileCnv.cpp