Gaudi Framework, version v21r4

Home   Generated: 7 Sep 2009

RootHistCnv::RNTupleCnv Class Reference

#include <RNTupleCnv.h>

Inheritance diagram for RootHistCnv::RNTupleCnv:

Inheritance graph
[legend]
Collaboration diagram for RootHistCnv::RNTupleCnv:

Collaboration graph
[legend]

List of all members.


Detailed Description

NTuple converter class definition.

Package : RootHistCnv Author : Charles Leggett

Definition at line 24 of file 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< INTupleSvcm_ntupleSvc
 Reference to N tuple service.

Constructor & Destructor Documentation

RootHistCnv::RNTupleCnv::RNTupleCnv ( ISvcLocator svc,
const CLID clid 
) [protected]

Standard constructor.

Definition at line 32 of file RNTupleCnv.cpp.

00033 : RConverter(clid, svc) {
00034 }

RootHistCnv::RNTupleCnv::~RNTupleCnv (  )  [protected, virtual]

Standard destructor.

Definition at line 40 of file RNTupleCnv.cpp.

00040                                                {
00041 }


Member Function Documentation

StatusCode RootHistCnv::RNTupleCnv::initialize (  )  [virtual]

Initialize the converter.

Reimplemented from Converter.

Definition at line 46 of file RNTupleCnv.cpp.

00046                                                {
00047 //-----------------------------------------------------------------------------
00048   StatusCode status = Converter::initialize();
00049   if ( status.isSuccess() ) {
00050     m_ntupleSvc = serviceLocator()->service("NTupleSvc");
00051     if (!m_ntupleSvc.isValid()) status = StatusCode::FAILURE;
00052   }
00053   return status;
00054 }

StatusCode RootHistCnv::RNTupleCnv::finalize ( void   )  [virtual]

Finalize the converter.

: the release at this point may brake (?)

Reimplemented from Converter.

Definition at line 59 of file RNTupleCnv.cpp.

00059                                                {
00060 //-----------------------------------------------------------------------------
00062   m_ntupleSvc = 0; // release
00063   return Converter::finalize();
00064 }

StatusCode RootHistCnv::RNTupleCnv::createObj ( IOpaqueAddress pAddr,
DataObject *&  refpObj 
) [virtual]

Create the transient representation of an object.

Reimplemented from Converter.

Definition at line 97 of file RNTupleCnv.cpp.

00100 {
00101   MsgStream log (msgSvc(), "RNTupleCnv");
00102 
00103   IRegistry* pReg = pAddress->registry();
00104 
00105 //    log << MSG::WARNING << "adr: " << pAddress->par()[0] << " <> "
00106 //        << pAddress->par()[1] << " <> " << pAddress->ipar()[0] << " <> "
00107 //        << pAddress->ipar()[1] << " <> " << hex << rAddr->tObj()
00108 //        << dec << " <> " << pReg->identifier() << endmsg;
00109 
00110   std::string ident = pReg->identifier();
00111 
00112   StatusCode status = readObject(pAddress, refpObject);  // Doesn't do anything
00113   if ( status.isSuccess() )   {
00114     RootObjAddress *rAddr = dynamic_cast<RootObjAddress*>( pAddress );
00115     if (rAddr == 0) {
00116       log << MSG::ERROR << "Could not cast to RootObjAddress" << endmsg;
00117       return StatusCode::FAILURE;
00118     }
00119     INTuple* nt = 0;
00120     TTree* tobj = (TTree*) rAddr->tObj();
00121     status = load(tobj, nt);
00122     if (status.isSuccess()) {
00123       refpObject = dynamic_cast<DataObject*>(nt);
00124     } else {
00125       log << MSG::ERROR << "Problems loading ntuple id: " << pReg->identifier()
00126           << endmsg;
00127     }
00128   }
00129   return status;
00130 }

StatusCode RootHistCnv::RNTupleCnv::updateObj ( IOpaqueAddress pAddr,
DataObject refpObj 
) [virtual]

Update the transient object from the other representation.

Reimplemented from Converter.

Definition at line 68 of file RNTupleCnv.cpp.

00071 {
00072   MsgStream log (msgSvc(), "RNTupleCnv");
00073 
00074   StatusCode status = StatusCode::FAILURE;
00075 
00076   RootObjAddress *rAddr = dynamic_cast<RootObjAddress*>(pAddress);
00077 
00078   if (rAddr == 0) {
00079     log << MSG::ERROR << "Could not dynamic cast to RootObjAddress" << endmsg;
00080     return StatusCode::FAILURE;
00081   }
00082 
00083   TTree* rtree = (TTree*) rAddr->tObj();
00084 
00085   try   {
00086     unsigned long* info = (unsigned long*)pAddress->ipar();
00087     setDirectory(pAddress->par()[0]);
00088     status = readData(rtree, dynamic_cast<INTuple*>(pObject), info[1]++);
00089   }
00090   catch (...)   {
00091   }
00092   return status;
00093 }

StatusCode RootHistCnv::RNTupleCnv::createRep ( DataObject pObj,
IOpaqueAddress *&  refpAddr 
) [virtual]

Convert the transient object to the requested representation.

Reimplemented from RootHistCnv::RConverter.

Definition at line 134 of file RNTupleCnv.cpp.

00137 {
00138   GlobalDirectoryRestore restore;
00139   pAddr = 0;
00140   try   {
00141     IRegistry* pReg = pObject->registry();
00142     if ( 0 != pReg )    {
00143       pAddr = pReg->address();
00144       if ( 0 == pAddr )   {
00145         SmartIF<IDataManagerSvc> dataMgr(dataProvider());
00146         if ( dataMgr.isValid() )    {
00147           IRegistry* pParentReg = 0;
00148           StatusCode status = dataMgr->objectParent(pReg, pParentReg);
00149           if ( status.isSuccess() )  {
00150             IOpaqueAddress* pParAddr = pParentReg->address();
00151             if ( pParAddr )   {
00152               TDirectory* pParentDir = (TDirectory*)pParAddr->ipar()[0];
00153               if ( pParentDir )   {
00154                 TTree* pTree = 0;
00155                 std::string dsc = pReg->name().substr(1);
00156                 gDirectory = pParentDir;
00157                 status = book(dsc, dynamic_cast<INTuple*>(pObject), pTree);
00158                 if ( !status.isSuccess() )   {
00159                   return status;
00160                 }
00161                 status = createAddress(pObject, gDirectory, pTree, pAddr);
00162                 if ( !status.isSuccess() )   {
00163                   return status;
00164                 }
00165                 return writeData(pTree, dynamic_cast<INTuple*>(pObject));
00166               }
00167             }
00168           }
00169         }
00170       }
00171       else  {
00172         TDirectory* pDir  = (TDirectory*)pAddr->ipar()[0];
00173         RootObjAddress *rAddr = dynamic_cast<RootObjAddress*>( pAddr );
00174         if (rAddr == 0) {
00175           MsgStream log (msgSvc(), "RNTupleCnv");
00176           log << MSG::ERROR << "Could not cast to RootObjAddress" << endmsg;
00177           return StatusCode::FAILURE;
00178         }
00179         TTree*      pTree = (TTree*) rAddr->tObj();
00180         gDirectory = pDir;
00181         return writeData(pTree, dynamic_cast<INTuple*>(pObject));
00182       }
00183     }
00184   }
00185   catch (...)   {
00186   }
00187   MsgStream log (msgSvc(), "RNTupleCnv");
00188   log << MSG::ERROR << "Failed to create persistent N-tuple!" << endmsg;
00189   return StatusCode::FAILURE;
00190 }

StatusCode RootHistCnv::RNTupleCnv::updateRep ( IOpaqueAddress pAddr,
DataObject pObj 
) [virtual]

Update the converted representation of a transient object.

Reimplemented from Converter.

Definition at line 194 of file RNTupleCnv.cpp.

00197 {
00198   MsgStream log (msgSvc(), "RNTupleCnv");
00199   if ( 0 != pAddr )    {
00200     GlobalDirectoryRestore restore;
00201     TDirectory* pDir = (TDirectory*)pAddr->ipar()[0];
00202     RootObjAddress *rAddr = dynamic_cast<RootObjAddress*>( pAddr );
00203     if (rAddr == 0) {
00204       log << MSG::ERROR << "Could not cast to RootObjAddress" << endmsg;
00205       return StatusCode::FAILURE;
00206     }
00207     TTree* pTree     = (TTree*) rAddr->tObj();
00208     if ( 0 != pDir && 0 != pTree )  {
00209       gDirectory->cd(pDir->GetPath());
00210       pTree->Write("",TObject::kOverwrite);
00211       return StatusCode::SUCCESS;
00212     }
00213   }
00214   else {
00215     log << MSG::WARNING << "empty ntuple: " << pObj->registry()->identifier()
00216         << endmsg;
00217     return ( createRep(pObj,pAddr) );
00218   }
00219   return StatusCode::FAILURE;
00220 }

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::book ( const std::string desc,
INTuple pObj,
TTree *&  tree 
) [protected, pure virtual]

Book a new N tuple.

Implemented in RootHistCnv::RCWNTupleCnv, and RootHistCnv::RRWNTupleCnv.

virtual StatusCode RootHistCnv::RNTupleCnv::writeData ( TTree *  rtree,
INTuple pObj 
) [protected, pure virtual]

Write N tuple data.

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 226 of file RNTupleCnv.cpp.

00226                                                      {
00227 //-----------------------------------------------------------------------------
00228   switch( type ) {
00229   case DataTypeInfo::SHORT:   return "/S";           // short
00230   case DataTypeInfo::INT:     return "/I";           // int
00231   case DataTypeInfo::LONG:    return "/I";           // long
00232   case DataTypeInfo::USHORT:  return "/s";           // ushort
00233   case DataTypeInfo::UINT:    return "/i";           // uint
00234   case DataTypeInfo::ULONG:   return "/i";           // ulong
00235   case DataTypeInfo::FLOAT:   return "/F";           // float
00236   case DataTypeInfo::DOUBLE:  return "/D";           // double
00237   default:                    return "";
00238   }
00239   return "";
00240 }


Member Data Documentation

Reference to N tuple service.

Definition at line 58 of file RNTupleCnv.h.


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

Generated at Mon Sep 7 18:27:38 2009 for Gaudi Framework, version v21r4 by Doxygen version 1.5.6 written by Dimitri van Heesch, © 1997-2004