Gaudi Framework, version v23r7

Home   Generated: Wed Mar 20 2013
 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:
Inheritance graph
[legend]
Collaboration diagram for RootHistCnv::RFileCnv:
Collaboration graph
[legend]

Public Member Functions

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 initialize ()
 Initialize the 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 CLIDobjType () 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< IServiceservice (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 CLIDclassID ()
 Inquire class type.
 
- Static Public Member Functions inherited from RootHistCnv::RDirectoryCnv
static const CLIDclassID ()
 Inquire class type.
 
- Static Public Member Functions inherited from RootHistCnv::RConverter
static long storageType ()
 Inquire storage type.
 

Protected Attributes

TFile * rfile
 

Additional Inherited Members

- Public Types inherited from implements1< IConverter >
typedef implements1 base_class
 Typedef to this class.
 
typedef extend_interfaces1
< IConverter
extend_interfaces_base
 Typedef to the base of this class.
 
typedef
extend_interfaces_base::ext_iids 
interfaces
 MPL set of all the implemented interfaces.
 
- 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.

Author
Charles Leggett
Markus Frank

Definition at line 23 of file RFileCnv.h.

Constructor & Destructor Documentation

RootHistCnv::RFileCnv::RFileCnv ( ISvcLocator svc)
inline

Standard constructor.

Definition at line 37 of file RFileCnv.h.

: RDirectoryCnv(svc, classID()) {
}
RootHistCnv::RFileCnv::~RFileCnv ( )
virtual

Standard destructor.

Definition at line 176 of file RFileCnv.cpp.

{
}

Member Function Documentation

static const CLID& RootHistCnv::RFileCnv::classID ( )
inlinestatic

Inquire class type.

Definition at line 32 of file RFileCnv.h.

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

Create the transient representation of an object.

Reimplemented from RootHistCnv::RDirectoryCnv.

Definition at line 19 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;
} else {
log << MSG::ERROR << "Couldn't open \"" << fname << "\" for reading"
<< endmsg;
}
} else {
log << MSG::DEBUG << "Root file \"" << fname << "\" already opened"
<< endmsg;
}
} 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"
<< 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;
}
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;
} else {
log << MSG::ERROR << "Uknown mode to access ROOT file" << endmsg;
}
// TFile* rfile = TFile::Open(spar[0].c_str(),"RECREATE","Gaudi ROOT Ntuples");
// if (! rfile->IsOpen() ) {
// log << MSG::ERROR << "Could not open file " << spar[0] << " for writing" << endmsg;
// return StatusCode::FAILURE;
// }
// ipar[0] = (unsigned long)rfile;
// NTuple::File* pFile = new NTuple::File(objType(), spar[0], oname);
// pFile->setOpen(true);
// refpObject = pFile;
// return StatusCode::SUCCESS;
}
StatusCode RootHistCnv::RFileCnv::createRep ( DataObject pObject,
IOpaqueAddress *&  refpAddress 
)
virtual

Convert the transient object to the requested representation.

Reimplemented from RootHistCnv::RDirectoryCnv.

Definition at line 132 of file RFileCnv.cpp.

{
refpAddress = pObject->registry()->address();
return RFileCnv::updateRep( refpAddress, pObject );
}
StatusCode RootHistCnv::RFileCnv::updateRep ( IOpaqueAddress pAddress,
DataObject pObject 
)
virtual

Convert the transient object to the requested representation.

Reimplemented from RootHistCnv::RDirectoryCnv.

Definition at line 141 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;
}
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);
} else {
log << MSG::ERROR << "TFile " << ooname << " is not open" << endmsg;
}
}

Member Data Documentation

TFile* RootHistCnv::RFileCnv::rfile
protected

Definition at line 43 of file RFileCnv.h.


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

Generated at Wed Mar 20 2013 17:59:52 for Gaudi Framework, version v23r7 by Doxygen version 1.8.2 written by Dimitri van Heesch, © 1997-2004