|
Gaudi Framework, version v22r1 |
| Home | Generated: Mon Feb 28 2011 |
NTuple converter class definition. More...
#include <RNTupleCnv.h>


Public Member Functions | |
| virtual StatusCode | initialize () |
| Initialize the converter. | |
| virtual StatusCode | finalize () |
| Finalize the converter. | |
| virtual StatusCode | createObj (IOpaqueAddress *pAddr, DataObject *&refpObj) |
| Create the transient representation of an object. | |
| virtual StatusCode | updateObj (IOpaqueAddress *pAddr, DataObject *refpObj) |
| Update the transient object from the other representation. | |
| virtual StatusCode | createRep (DataObject *pObj, IOpaqueAddress *&refpAddr) |
| Convert the transient object to the requested representation. | |
| virtual StatusCode | updateRep (IOpaqueAddress *pAddr, DataObject *pObj) |
| Update the converted representation of a transient object. | |
Protected Member Functions | |
| RNTupleCnv (ISvcLocator *svc, const CLID &clid) | |
| Standard constructor. | |
| virtual | ~RNTupleCnv () |
| Standard destructor. | |
| virtual StatusCode | load (TTree *tree, INTuple *&refpObj)=0 |
| Create the transient representation of an object. | |
| virtual StatusCode | book (const std::string &desc, INTuple *pObj, TTree *&tree)=0 |
| Book a new N tuple. | |
| virtual StatusCode | writeData (TTree *rtree, INTuple *pObj)=0 |
| Write N tuple data. | |
| virtual StatusCode | readData (TTree *rtree, INTuple *pObj, long ievt)=0 |
| Read N tuple data. | |
| virtual std::string | rootVarType (int) |
| Return ROOT type info: | |
Protected Attributes | |
| SmartIF< INTupleSvc > | m_ntupleSvc |
| Reference to N tuple service. | |
NTuple converter class definition.
Package : RootHistCnv Author : Charles Leggett
Definition at line 24 of file RNTupleCnv.h.
| RootHistCnv::RNTupleCnv::RNTupleCnv | ( | ISvcLocator * | svc, |
| const CLID & | clid | ||
| ) | [protected] |
| RootHistCnv::RNTupleCnv::~RNTupleCnv | ( | ) | [protected, virtual] |
| virtual StatusCode RootHistCnv::RNTupleCnv::book | ( | const std::string & | desc, |
| INTuple * | pObj, | ||
| TTree *& | tree | ||
| ) | [protected, pure virtual] |
Book a new N tuple.
Implemented in RootHistCnv::RCWNTupleCnv, and RootHistCnv::RRWNTupleCnv.
| StatusCode RootHistCnv::RNTupleCnv::createObj | ( | IOpaqueAddress * | pAddr, |
| DataObject *& | refpObj | ||
| ) | [virtual] |
Create the transient representation of an object.
Reimplemented from Converter.
Definition at line 103 of file RNTupleCnv.cpp.
{
MsgStream log (msgSvc(), "RNTupleCnv");
IRegistry* pReg = pAddress->registry();
// log << MSG::WARNING << "adr: " << pAddress->par()[0] << " <> "
// << pAddress->par()[1] << " <> " << pAddress->ipar()[0] << " <> "
// << pAddress->ipar()[1] << " <> " << hex << rAddr->tObj()
// << dec << " <> " << pReg->identifier() << endmsg;
std::string ident = pReg->identifier();
StatusCode status = readObject(pAddress, refpObject); // Doesn't do anything
if ( status.isSuccess() ) {
RootObjAddress *rAddr = dynamic_cast<RootObjAddress*>( pAddress );
if (rAddr == 0) {
log << MSG::ERROR << "Could not cast to RootObjAddress" << endmsg;
return StatusCode::FAILURE;
}
INTuple* nt = 0;
TTree* tobj = (TTree*) rAddr->tObj();
status = load(tobj, nt);
if (status.isSuccess()) {
refpObject = dynamic_cast<DataObject*>(nt);
} else {
log << MSG::ERROR << "Problems loading ntuple id: " << pReg->identifier()
<< endmsg;
}
}
return status;
}
| StatusCode RootHistCnv::RNTupleCnv::createRep | ( | DataObject * | pObj, |
| IOpaqueAddress *& | refpAddr | ||
| ) | [virtual] |
Convert the transient object to the requested representation.
Reimplemented from RootHistCnv::RConverter.
Definition at line 140 of file RNTupleCnv.cpp.
{
GlobalDirectoryRestore restore;
pAddr = 0;
try {
IRegistry* pReg = pObject->registry();
if ( 0 != pReg ) {
pAddr = pReg->address();
if ( 0 == pAddr ) {
SmartIF<IDataManagerSvc> dataMgr(dataProvider());
if ( dataMgr.isValid() ) {
IRegistry* pParentReg = 0;
StatusCode status = dataMgr->objectParent(pReg, pParentReg);
if ( status.isSuccess() ) {
IOpaqueAddress* pParAddr = pParentReg->address();
if ( pParAddr ) {
TDirectory* pParentDir = (TDirectory*)pParAddr->ipar()[0];
if ( pParentDir ) {
TTree* pTree = 0;
std::string dsc = pReg->name().substr(1);
gDirectory = pParentDir;
status = book(dsc, dynamic_cast<INTuple*>(pObject), pTree);
if ( !status.isSuccess() ) {
return status;
}
status = createAddress(pObject, gDirectory, pTree, pAddr);
if ( !status.isSuccess() ) {
return status;
}
return writeData(pTree, dynamic_cast<INTuple*>(pObject));
}
}
}
}
}
else {
TDirectory* pDir = (TDirectory*)pAddr->ipar()[0];
RootObjAddress *rAddr = dynamic_cast<RootObjAddress*>( pAddr );
if (rAddr == 0) {
MsgStream log (msgSvc(), "RNTupleCnv");
log << MSG::ERROR << "Could not cast to RootObjAddress" << endmsg;
return StatusCode::FAILURE;
}
TTree* pTree = (TTree*) rAddr->tObj();
gDirectory = pDir;
return writeData(pTree, dynamic_cast<INTuple*>(pObject));
}
}
}
catch (...) {
}
MsgStream log (msgSvc(), "RNTupleCnv");
log << MSG::ERROR << "Failed to create persistent N-tuple!" << endmsg;
return StatusCode::FAILURE;
}
| StatusCode RootHistCnv::RNTupleCnv::finalize | ( | ) | [virtual] |
Finalize the converter.
: the release at this point may brake (?)
Reimplemented from Converter.
Definition at line 65 of file RNTupleCnv.cpp.
{
//-----------------------------------------------------------------------------
m_ntupleSvc = 0; // release
return Converter::finalize();
}
| StatusCode RootHistCnv::RNTupleCnv::initialize | ( | ) | [virtual] |
Initialize the converter.
Reimplemented from Converter.
Definition at line 52 of file RNTupleCnv.cpp.
{
//-----------------------------------------------------------------------------
StatusCode status = Converter::initialize();
if ( status.isSuccess() ) {
m_ntupleSvc = serviceLocator()->service("NTupleSvc");
if (!m_ntupleSvc.isValid()) status = StatusCode::FAILURE;
}
return status;
}
| virtual StatusCode RootHistCnv::RNTupleCnv::load | ( | TTree * | tree, |
| INTuple *& | refpObj | ||
| ) | [protected, pure virtual] |
Create the transient representation of an object.
Implemented in RootHistCnv::RCWNTupleCnv, and RootHistCnv::RRWNTupleCnv.
| virtual StatusCode RootHistCnv::RNTupleCnv::readData | ( | TTree * | rtree, |
| INTuple * | pObj, | ||
| long | ievt | ||
| ) | [protected, pure virtual] |
Read N tuple data.
Implemented in RootHistCnv::RCWNTupleCnv, and RootHistCnv::RRWNTupleCnv.
| std::string RootHistCnv::RNTupleCnv::rootVarType | ( | int | type ) | [protected, virtual] |
Return ROOT type info:
Definition at line 232 of file RNTupleCnv.cpp.
{
//-----------------------------------------------------------------------------
switch( type ) {
case DataTypeInfo::SHORT: return "/S"; // short
case DataTypeInfo::INT: return "/I"; // int
case DataTypeInfo::LONG: return "/I"; // long
case DataTypeInfo::USHORT: return "/s"; // ushort
case DataTypeInfo::UINT: return "/i"; // uint
case DataTypeInfo::ULONG: return "/i"; // ulong
case DataTypeInfo::FLOAT: return "/F"; // float
case DataTypeInfo::DOUBLE: return "/D"; // double
default: return "";
}
// cannot reach this point
}
| StatusCode RootHistCnv::RNTupleCnv::updateObj | ( | IOpaqueAddress * | pAddr, |
| DataObject * | refpObj | ||
| ) | [virtual] |
Update the transient object from the other representation.
Reimplemented from Converter.
Definition at line 74 of file RNTupleCnv.cpp.
{
MsgStream log (msgSvc(), "RNTupleCnv");
StatusCode status = StatusCode::FAILURE;
RootObjAddress *rAddr = dynamic_cast<RootObjAddress*>(pAddress);
if (rAddr == 0) {
log << MSG::ERROR << "Could not dynamic cast to RootObjAddress" << endmsg;
return StatusCode::FAILURE;
}
TTree* rtree = (TTree*) rAddr->tObj();
try {
unsigned long* info = (unsigned long*)pAddress->ipar();
setDirectory(pAddress->par()[0]);
status = readData(rtree, dynamic_cast<INTuple*>(pObject), info[1]++);
}
catch (...) {
}
return status;
}
| StatusCode RootHistCnv::RNTupleCnv::updateRep | ( | IOpaqueAddress * | pAddr, |
| DataObject * | pObj | ||
| ) | [virtual] |
Update the converted representation of a transient object.
Reimplemented from Converter.
Definition at line 200 of file RNTupleCnv.cpp.
{
MsgStream log (msgSvc(), "RNTupleCnv");
if ( 0 != pAddr ) {
GlobalDirectoryRestore restore;
TDirectory* pDir = (TDirectory*)pAddr->ipar()[0];
RootObjAddress *rAddr = dynamic_cast<RootObjAddress*>( pAddr );
if (rAddr == 0) {
log << MSG::ERROR << "Could not cast to RootObjAddress" << endmsg;
return StatusCode::FAILURE;
}
TTree* pTree = (TTree*) rAddr->tObj();
if ( 0 != pDir && 0 != pTree ) {
gDirectory->cd(pDir->GetPath());
pTree->Write("",TObject::kOverwrite);
return StatusCode::SUCCESS;
}
}
else {
log << MSG::WARNING << "empty ntuple: " << pObj->registry()->identifier()
<< endmsg;
return ( createRep(pObj,pAddr) );
}
return StatusCode::FAILURE;
}
| virtual StatusCode RootHistCnv::RNTupleCnv::writeData | ( | TTree * | rtree, |
| INTuple * | pObj | ||
| ) | [protected, pure virtual] |
Write N tuple data.
Implemented in RootHistCnv::RCWNTupleCnv, and RootHistCnv::RRWNTupleCnv.
SmartIF<INTupleSvc> RootHistCnv::RNTupleCnv::m_ntupleSvc [protected] |
Reference to N tuple service.
Definition at line 58 of file RNTupleCnv.h.