| # Gaudi Framework, version v23r0 |

Home |  | Generated: Mon Jan 30 2012

Public Member Functions

# Gaudi::RootDirectoryCnv Class Reference

Description: NTuple directory converter class definition Definition of the converter to manage the directories in an database representing N-Tuples. More...

`#include <src/RootDirectoryCnv.h>`

Inheritance diagram for Gaudi::RootDirectoryCnv:
[legend]
Collaboration diagram for Gaudi::RootDirectoryCnv:
[legend]

List of all members.

## Public Member Functions
| RootDirectoryCnv (long typ, const CLID &clid, ISvcLocator *svc, RootCnvSvc *mgr)
| Initializing Constructor.
virtual | ~RootDirectoryCnv ()
| Standard Destructor.
virtual StatusCode | createObj (IOpaqueAddress *pAddr, DataObject *&refpObj)
| Converter overrides: Create transient object from persistent data.
virtual StatusCode | fillObjRefs (IOpaqueAddress *pAddr, DataObject *pObj)
| Converter overrides: Resolve the references of the transient object.
virtual StatusCode | updateObj (IOpaqueAddress *pAddr, DataObject *pObj)
| Converter overrides: Update transient object from persistent data.
virtual StatusCode | updateObjRefs (IOpaqueAddress *pAddr, DataObject *pObj)
| Converter overrides: Update the references of an updated transient object.
virtual StatusCode | createRep (DataObject *pObj, IOpaqueAddress *&refpAddr)
| Converter overrides: Convert the transient object to the requested representation.
virtual StatusCode | fillRepRefs (IOpaqueAddress *pAddr, DataObject *pObj)
| Converter overrides: Fill references of persistent object representation.
virtual StatusCode | updateRep (IOpaqueAddress *pAddr, DataObject *pObj)
| Converter overrides: Update persistent object representation.
virtual StatusCode | updateRepRefs (IOpaqueAddress *pAddr, DataObject *pObj)
| Converter overrides: Update references of persistent object representation.

## Detailed Description

Description: NTuple directory converter class definition Definition of the converter to manage the directories in an database representing N-Tuples.

Author:
  M.Frank

Version:
  1.0

Definition at line 31 of file RootDirectoryCnv.h.

## Constructor & Destructor Documentation

RootDirectoryCnv::RootDirectoryCnv | ( | long | typ,
|  | const CLID & | clid,
|  | ISvcLocator * | svc,
|  | RootCnvSvc * | mgr
| ) |  |

Initializing Constructor.

Parameters:

  typ | [IN] Concrete storage type of the converter
  clid | [IN] Class identifier of the object
  svc | [IN] Pointer to service locator object

Returns:
  Reference to RootBaseCnv object

Definition at line 33 of file RootDirectoryCnv.cpp.

                                        : RootStatCnv(typ, clid, svc, mgr)
    {
    }

virtual Gaudi::RootDirectoryCnv::~RootDirectoryCnv | ( | ) | `[inline, virtual]`

Standard Destructor.

Definition at line 44 of file RootDirectoryCnv.h.

    {  }

## Member Function Documentation

StatusCode RootDirectoryCnv::createObj | ( | IOpaqueAddress * | pAddr,
|  | DataObject *& | refpObj
| ) |  | `[virtual]`

Converter overrides: Create transient object from persistent data.

Parameters:

  pAddr | [IN] Pointer to object address.
  refpObj | [OUT] Location to pointer to store data object

Returns:
  Status code indicating success or failure.

Reimplemented from Gaudi::RootConverter.

Reimplemented in Gaudi::RootDatabaseCnv.

Definition at line 42 of file RootDirectoryCnv.cpp.

                                                                                 {
      refpObj = new NTuple::Directory();
      return StatusCode::SUCCESS;
    }

StatusCode RootDirectoryCnv::createRep | ( | DataObject * | pObj,
|  | IOpaqueAddress *& | refpAddr
| ) |  | `[virtual]`

Converter overrides: Convert the transient object to the requested representation.

Parameters:

  pObj | [IN] Pointer to data object
  refpAddr | [OUT] Location to store pointer to object address.

Returns:
  Status code indicating success or failure.

Reimplemented from Gaudi::RootConverter.

Definition at line 49 of file RootDirectoryCnv.cpp.

                                                                                 {
      string dsc;
      if ( objType() == CLID_StatisticsDirectory )  {
        dsc = "Directory containing statistics results.";
      }
      else if ( objType() == CLID_StatisticsFile )  {
        dsc = "File containing statistics results.";
      }
      else  {
        return StatusCode::FAILURE;
      }
      string ident = containerName(pObj->registry());
      string path  = fileName(pObj->registry());
      return saveDescription(path, ident, dsc, ident, objType());
    }

StatusCode RootDirectoryCnv::fillObjRefs | ( | IOpaqueAddress * | pAddr,
|  | DataObject * | pObj
| ) |  | `[virtual]`

Converter overrides: Resolve the references of the transient object.

Parameters:

  pAddr | [IN] Pointer to object address.
  pObj | [IN] Pointer to data object

Returns:
  Status code indicating success or failure.

Reimplemented from Gaudi::RootConverter.

Definition at line 66 of file RootDirectoryCnv.cpp.

                                                                                     {
      return updateObjRefs(pAddr, pObj);
    }

StatusCode RootDirectoryCnv::fillRepRefs | ( | IOpaqueAddress * | pAddr,
|  | DataObject * | pObj
| ) |  | `[virtual]`

Converter overrides: Fill references of persistent object representation.

Parameters:

  pObj | [IN] Pointer to data object
  refpAddr | [OUT] Location to store pointer to object address.

Returns:
  Status code indicating success or failure.

Reimplemented from Gaudi::RootConverter.

Definition at line 198 of file RootDirectoryCnv.cpp.

    {
      return StatusCode::SUCCESS;
    }

StatusCode RootDirectoryCnv::updateObj | ( | IOpaqueAddress * | pAddr,
|  | DataObject * | pObj
| ) |  | `[virtual]`

Converter overrides: Update transient object from persistent data.

Parameters:

  pAddr | [IN] Pointer to object address.
  pObj | [IN] Pointer to data object

Returns:
  Status code indicating success or failure.

Reimplemented from Converter.

Definition at line 174 of file RootDirectoryCnv.cpp.

    {
      return StatusCode::SUCCESS;
    }

StatusCode RootDirectoryCnv::updateObjRefs | ( | IOpaqueAddress * | pAddr,
|  | DataObject * | pObj
| ) |  | `[virtual]`

Converter overrides: Update the references of an updated transient object.

Parameters:

  pAddr | [IN] Pointer to object address.
  pObj | [IN] Pointer to data object

Returns:
  Status code indicating success or failure.

Reimplemented from Converter.

Definition at line 72 of file RootDirectoryCnv.cpp.

    {
      typedef vector<RootNTupleDescriptor*> REFS;
      REFS refs;
      StatusCode status = StatusCode(StatusCode::FAILURE,true);
      if ( pAddr ) {
        IRegistry* pReg = pAddr->registry();
        if ( pReg )  {
          typedef vector<IRegistry*> Leaves;
          string ident   = pReg->identifier();
          string fname   = fileName(pReg);
          string cntName = containerName(pReg);
          RootDataConnection* con = 0;
          Leaves leaves;
          status = m_dbMgr->connectDatabase(fname, IDataConnection::READ, &con);
          if ( status.isSuccess() )  {
            TBranch* b = con->getBranch("##Descriptors","GaudiStatisticsDescription");
            if ( b ) {
              for(Long64_t n=b->GetEntries(), i=0; i<n; ++i)  {
                RootNTupleDescriptor* ref=0;
                b->SetAddress(&ref);
                int nb = b->GetEntry(i);
                if ( nb > 1 ) {
                  string s = ref->container.substr(0,cntName.length());
                  log() << MSG::VERBOSE << "Read description:" << ref->container
                    << " " << ident << " " << cntName << endmsg;
                  if ( s == cntName )  {
                    if ( ref->container.length() >= cntName.length()+1 )  {
                      if ( ref->container.find('/',cntName.length()+1) == string::npos ) {
                        refs.push_back(ref);
                        continue;
                      }
                    }
                  }
                }
                delete ref;
              }
            }
            log() << MSG::DEBUG << "Got " << refs.size() << " tuple connection(s)....." << endmsg;
            status = m_dataMgr->objectLeaves(pObject, leaves);
            if ( status.isSuccess() )    {
              for(REFS::iterator i = refs.begin(); i != refs.end(); ++i)  {
                REFS::value_type& ref = *i;
                if ( ref )   {
                  bool need_to_add = true;
                  for(Leaves::iterator j=leaves.begin(); j != leaves.end(); ++j )  {
                    string curr_leaf = containerName(*j);
                    if ( curr_leaf == ref->container )  {
                      need_to_add = false;
                      break;
                    }
                  }
                  if ( need_to_add )  {
                    IOpaqueAddress* pA= 0;
                    if ( ref->clid == CLID_StatisticsDirectory ||
                      ref->clid == CLID_StatisticsFile      ||
                      ref->clid == CLID_RowWiseTuple        ||
                      ref->clid == CLID_ColumnWiseTuple      )
                    {
                      string spar[]   = { fname, ref->container};
                      unsigned long ipar[] = { ~0x0UL, ~0x0UL };
                      status = m_dbMgr->createAddress(repSvcType(),
                        ref->clid,
                        spar,
                        ipar,
                        pA);
                    }
                    if ( status.isSuccess() )  {
                      string top = topLevel(pReg);
                      string leaf_name = top + ref->container.substr(7);
                      status = m_dataMgr->registerAddress(leaf_name, pA);
                      if ( status.isSuccess() )  {
                        log() << MSG::DEBUG << "Created address for " << leaf_name
                          << " of type " << ref->clid << endmsg;
                        continue;
                      }
                      makeError("Failed to register leaves to directory:"+ident,false).ignore();
                      break;
                    }
                    makeError("Failed to create leave address to directory:"+ident,false).ignore();
                    break;
                  }
                }
                makeError("Failed to add leaves to directory:"+ident,false).ignore();
                break;
              }
            }
          }
          else  {
            return makeError("Failed to access required tuple data description.",false);
          }
        }
      }
      for(REFS::iterator k = refs.begin(); k != refs.end(); ++k)  {
        if ( *k ) delete (*k);
      }
      return status;
    }

StatusCode RootDirectoryCnv::updateRep | ( | IOpaqueAddress * | pAddr,
|  | DataObject * | pObj
| ) |  | `[virtual]`

Converter overrides: Update persistent object representation.

Parameters:

  pObj | [IN] Pointer to data object
  refpAddr | [OUT] Location to store pointer to object address.

Returns:
  Status code indicating success or failure.

Reimplemented from Converter.

Definition at line 182 of file RootDirectoryCnv.cpp.

    {
      return StatusCode::SUCCESS;
    }

StatusCode RootDirectoryCnv::updateRepRefs | ( | IOpaqueAddress * | pAddr,
|  | DataObject * | pObj
| ) |  | `[virtual]`

Converter overrides: Update references of persistent object representation.

Parameters:

  pObj | [IN] Pointer to data object
  refpAddr | [OUT] Location to store pointer to object address.

Returns:
  Status code indicating success or failure.

Reimplemented from Converter.

Definition at line 190 of file RootDirectoryCnv.cpp.

    {
      return StatusCode::SUCCESS;
    }

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

- /afs/cern.ch/sw/Gaudi/releases/GAUDI/GAUDI_v23r0/RootCnv/RootCnv/RootDirectoryCnv.h
- /afs/cern.ch/sw/Gaudi/releases/GAUDI/GAUDI_v23r0/RootCnv/src/RootDirectoryCnv.cpp

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