Gaudi Framework, version v23r0

Home   Generated: Mon Jan 30 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:
Inheritance graph
[legend]
Collaboration diagram for RootHistCnv::RNTupleCnv:
Collaboration graph
[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< INTupleSvcm_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 (  ) [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::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

Reference to N tuple service.

Definition at line 58 of file RNTupleCnv.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines

Generated at Mon Jan 30 2012 13:53:36 for Gaudi Framework, version v23r0 by Doxygen version 1.7.2 written by Dimitri van Heesch, © 1997-2004