| # Gaudi Framework, version v23r1 |

Home |  | Generated: Wed Feb 29 2012

Public Member Functions | Protected Member Functions | Protected Attributes

# RootHistCnv::RNTupleCnv Class Reference

NTuple converter class definition. More...

`#include <RNTupleCnv.h>`

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

List of all members.

## 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.

## Detailed Description

NTuple converter class definition.

Package : RootHistCnv Author : Charles Leggett

Definition at line 24 of file RNTupleCnv.h.

## Constructor & Destructor Documentation

RootHistCnv::RNTupleCnv::RNTupleCnv | ( | ISvcLocator * | svc,
|  | const CLID & | clid
| ) |  | `[protected]`

Standard constructor.

Definition at line 38 of file RNTupleCnv.cpp.

      : RConverter(clid, svc) {
    }

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

Standard destructor.

Definition at line 46 of file RNTupleCnv.cpp.

                                                   {
    }

## Member Function Documentation

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 | ( | void | ) | `[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 | ( | void | ) | `[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::BOOL:      return "/O";           // bool
      case DataTypeInfo::SHORT:     return "/S";           // short
      case DataTypeInfo::INT:       return "/I";           // int
      case DataTypeInfo::LONG:      return "/I";           // long
      case DataTypeInfo::LONGLONG:  return "/L";           // longlong
      case DataTypeInfo::USHORT:    return "/s";           // ushort
      case DataTypeInfo::UINT:      return "/i";           // uint
      case DataTypeInfo::ULONG:     return "/i";           // ulong
      case DataTypeInfo::ULONGLONG: return "/l";           // ulonglong
      case DataTypeInfo::FLOAT:     return "/F";           // float
      case DataTypeInfo::DOUBLE:    return "/D";           // double
      case DataTypeInfo::CHAR:      return "/B";           // char
      case DataTypeInfo::UCHAR:     return "/b";           // char
      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.

## Member Data Documentation

SmartIF<INTupleSvc> RootHistCnv::RNTupleCnv::m_ntupleSvc`[protected]`

Reference to N tuple service.

Definition at line 58 of file RNTupleCnv.h.

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

- /afs/cern.ch/sw/Gaudi/releases/GAUDI/GAUDI_v23r1/RootHistCnv/src/RNTupleCnv.h
- /afs/cern.ch/sw/Gaudi/releases/GAUDI/GAUDI_v23r1/RootHistCnv/src/RNTupleCnv.cpp

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines