Gaudi Framework, version v23r0

Home   Generated: Mon Jan 30 2012
Classes | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Friends

NTupleSvc Class Reference

NTuple service. More...

#include <NTupleSvc.h>

Inheritance diagram for NTupleSvc:
Inheritance graph
[legend]
Collaboration diagram for NTupleSvc:
Collaboration graph
[legend]

List of all members.

Classes

struct  Connection

Public Member Functions

virtual StatusCode initialize ()
 DataSvc overrides: Initialize the service.
virtual StatusCode reinitialize ()
 DataSvc overrides: reinitialize service.
virtual StatusCode finalize ()
 DataSvc overrides: stop the service.
virtual IConversionSvcgetDataLoader (IRegistry *pReg)
 DataSvc overrides: Retrieve data loader.
virtual NTuple::DirectorycreateDirectory (DataObject *pParent, const std::string &title)
 Create Ntuple directory and register it with the data store.
virtual NTuple::DirectorycreateDirectory (DataObject *pParent, long id)
 Create Ntuple directory and register it with the data store.
virtual NTuple::DirectorycreateDirectory (const std::string &dirPath, long id)
 Create Ntuple directory and register it with the data store.
virtual NTuple::DirectorycreateDirectory (const std::string &dirPath, const std::string &title)
 Create Ntuple directory and register it with the data store.
virtual NTuple::DirectorycreateDirectory (const std::string &fullPath)
 Create Ntuple directory and register it with the data store.
virtual StatusCode create (const CLID &typ, const std::string &title, NTuple::Tuple *&refpTuple)
 Create requested N tuple (Hide constructor)
virtual NTuple::Tuplebook (const std::string &fullPath, const CLID &type, const std::string &title)
 Book Ntuple and register it with the data store.
virtual NTuple::Tuplebook (const std::string &dirPath, const std::string &relPath, const CLID &type, const std::string &title)
 Book Ntuple and register it with the data store.
virtual NTuple::Tuplebook (const std::string &dirPath, long id, const CLID &type, const std::string &title)
 Book Ntuple and register it with the data store.
virtual NTuple::Tuplebook (DataObject *pParent, const std::string &relPath, const CLID &type, const std::string &title)
 Book Ntuple and register it with the data store.
virtual NTuple::Tuplebook (DataObject *pParent, long id, const CLID &type, const std::string &title)
 Book Ntuple and register it with the data store.
virtual NTuple::Tupleaccess (const std::string &fullPath, const std::string &filename)
 Access N tuple on disk.
virtual StatusCode save (const std::string &fullPath)
 Save N tuple to disk. Must be called in order to close the ntuple file properly.
virtual StatusCode save (NTuple::Tuple *tuple)
 Save N tuple to disk. Must be called in order to close the ntuple file properly.
virtual StatusCode save (DataObject *pParent, const std::string &relPath)
 Save N tuple to disk. Must be called in order to close the ntuple file properly.
virtual StatusCode writeRecord (NTuple::Tuple *tuple)
 Write single record to N tuple.
virtual StatusCode writeRecord (const std::string &fullPath)
 Write single record to N tuple.
virtual StatusCode writeRecord (DataObject *pParent, const std::string &relPath)
 Write single record to N tuple.
virtual StatusCode readRecord (NTuple::Tuple *tuple)
 Read single record from N tuple.
virtual StatusCode readRecord (const std::string &fullPath)
 Read single record from N tuple.
virtual StatusCode readRecord (DataObject *pParent, const std::string &relPath)
 Read single record from N tuple.
virtual bool isConnected (const std::string &identifier) const
 Check if a datasource is connected.
virtual StatusCode connect (const std::string &ident)
 Add file to list I/O list.
virtual StatusCode connect (const std::string &ident, std::string &logname)
 Add file to list I/O list.
virtual StatusCode disconnect (const std::string &nam)
 Close open connection.
virtual StatusCode disconnectAll ()
 Close all open connections.
 NTupleSvc (const std::string &name, ISvcLocator *svc)
 Standard Constructor.
virtual ~NTupleSvc ()
 Standard Destructor.

Protected Types

typedef std::vector< std::stringDBaseEntries
typedef std::map< std::string,
Connection
Connections
typedef std::pair< std::string,
std::string
Prop

Protected Member Functions

StatusCode createService (const std::string &nam, const std::string &typ, const std::vector< Prop > &props, IConversionSvc *&pSvc)
 Create conversion service.
void releaseConnection (Connection &c)
 Finalize single service.
StatusCode attachTuple (const std::string &filename, const std::string &logname, const char typ, const long t)
 Attach output/input file.
StatusCode updateDirectories ()
 Update directory data.

Protected Attributes

DBaseEntries m_output
 Output streams.
DBaseEntries m_input
 Input streams.
Connections m_connections
 Container of connection points.

Friends

class SvcFactory< NTupleSvc >

Detailed Description

NTuple service.

See the Interface definition files for more detailed documentation of the implementing class. Base class: Gaudi/DataSvc/DataSvc.h Generic N tuple service interface: Gaudi/Interfaces/INTupleSvc.h Generic IAddressCreator interface: Gaudi/Interfaces/IAddressCreator.h Generic IConversionSvc interface: Gaudi/Interfaces/IConversionSvc.h

Author:
M.Frank

Definition at line 27 of file NTupleSvc.h.


Member Typedef Documentation

Definition at line 38 of file NTupleSvc.h.

Definition at line 37 of file NTupleSvc.h.

Definition at line 39 of file NTupleSvc.h.


Constructor & Destructor Documentation

NTupleSvc::NTupleSvc ( const std::string name,
ISvcLocator svc 
)

Standard Constructor.

Definition at line 63 of file NTupleSvc.cpp.

NTupleSvc::~NTupleSvc (  ) [virtual]

Standard Destructor.

Definition at line 73 of file NTupleSvc.cpp.

                        {
}

Member Function Documentation

NTuple::Tuple * NTupleSvc::access ( const std::string fullPath,
const std::string filename 
) [virtual]

Access N tuple on disk.

Definition at line 562 of file NTupleSvc.cpp.

                                                                  {
  MsgStream log ( msgSvc(), name() );
  return 0;
}
StatusCode NTupleSvc::attachTuple ( const std::string filename,
const std::string logname,
const char  typ,
const long  t 
) [protected]

Attach output/input file.

Definition at line 495 of file NTupleSvc.cpp.

                                                                                                                     {
  MsgStream log(msgSvc(), name());
  DataObject* p;
  // First get the root object
  StatusCode status = retrieveObject(m_rootName, p);
  if ( status.isSuccess() )   {
    // Now add the registry entry to the store
    std::string entryname = m_rootName;
    entryname += '/';
    entryname += logname;
    GenericAddress* pA =
       new GenericAddress(t, CLID_NTupleFile, filename, entryname, 0, typ);
    status = registerAddress(p, logname, pA);
    if ( status.isSuccess() )    {
      log << MSG::INFO << "Added stream file:" << filename << " as " << logname << endmsg;
      return status;
    }
    pA->release();
  }
  log << MSG::ERROR << "Cannot add file:" << filename << " as " << logname << endmsg;
  return status;
}
NTuple::Tuple * NTupleSvc::book ( const std::string fullPath,
const CLID type,
const std::string title 
) [virtual]

Book Ntuple and register it with the data store.

Definition at line 388 of file NTupleSvc.cpp.

                                                                                                  {
  DataObject* pObj = 0;
  std::string path = fullPath;
  MsgStream log(msgSvc(), name());
  if ( path[0] != SEPARATOR )   {
    path = m_rootName;
    path += SEPARATOR;
    path += fullPath;
  }
  StatusCode status = retrieveObject(path, pObj);
  if ( !status.isSuccess() )    {
    int sep = path.rfind(SEPARATOR);
    if ( sep > 0 )    {
      std::string p_path (path, 0, sep);
      std::string o_path (path, sep, path.length());
      DataObject* dir = createDirectory(p_path);
      if ( 0 != dir )   {
        NTuple::Tuple* tup = book( dir, o_path, type, title);
        if ( 0 == tup )   {
          log << MSG::ERROR << "Cannot book N-tuple " << path << " (Unknown reason)" << endmsg;
        }
        return tup;
      }
      log << MSG::ERROR << "Cannot book N-tuple " << path << " (Invalid parent directory)" << endmsg;
      return 0;
    }
    log << MSG::ERROR << "Cannot book N-tuple " << path << " (Invalid path)" << endmsg;
    return 0;
  }
  log << MSG::ERROR << "Cannot book N-tuple " << path << " (Exists already)" << endmsg;
  return 0;
}
NTuple::Tuple * NTupleSvc::book ( const std::string dirPath,
const std::string relPath,
const CLID type,
const std::string title 
) [virtual]

Book Ntuple and register it with the data store.

Definition at line 422 of file NTupleSvc.cpp.

                                                                                                                           {
  std::string full = dirPath;
  if (relPath[0] != SEPARATOR) full += SEPARATOR;
  full += relPath;
  return book(full, type, title);
}
NTuple::Tuple * NTupleSvc::book ( const std::string dirPath,
long  id,
const CLID type,
const std::string title 
) [virtual]

Book Ntuple and register it with the data store.

Definition at line 430 of file NTupleSvc.cpp.

                                                                                                          {
  return book( dirPath, toStr(id), type, title);
}
NTuple::Tuple * NTupleSvc::book ( DataObject pParent,
const std::string relPath,
const CLID type,
const std::string title 
) [virtual]

Book Ntuple and register it with the data store.

Definition at line 435 of file NTupleSvc.cpp.

                                                                                                                      {
  NTuple::Tuple* pObj = 0;
  // Check if object is already present
  StatusCode status = findObject(pParent, relPath, *pp_cast<DataObject>(&pObj));
  // No ? Then create it!
  if ( !status.isSuccess() )    {
    status = create( type, title, pObj);
    if ( status.isSuccess() )   {
      // Finally register the created N tuple with the store
      status = registerObject(pParent, relPath, pObj);
      if ( status.isSuccess() )    {
        return pObj;
      }
      pObj->release();
    }
  }
  return 0;
}
NTuple::Tuple * NTupleSvc::book ( DataObject pParent,
long  id,
const CLID type,
const std::string title 
) [virtual]

Book Ntuple and register it with the data store.

Definition at line 455 of file NTupleSvc.cpp.

                                                         {
  return book( pParent, toStr(id), type, title);
}
StatusCode NTupleSvc::connect ( const std::string ident ) [virtual]

Add file to list I/O list.

Definition at line 226 of file NTupleSvc.cpp.

                                                       {
  std::string logName;
  return connect(ident, logName);
}
StatusCode NTupleSvc::connect ( const std::string ident,
std::string logname 
) [virtual]

Add file to list I/O list.

Reimplemented in TagCollectionSvc.

Definition at line 231 of file NTupleSvc.cpp.

                                                                           {
  MsgStream log ( msgSvc(), name() );
  DataObject* pO = 0;
  StatusCode status = findObject(m_rootName, pO);
  if ( status.isSuccess() )   {
    char typ=0;
    Tokenizer tok(true);
    std::vector<Prop> props;
    long loc = ident.find(" ");
    std::string filename, auth, svc = "", db_typ = "";
    logname = ident.substr(0,loc);
    tok.analyse(ident.substr(loc+1,ident.length()), " ", "", "", "=", "'", "'");
    for ( Tokenizer::Items::iterator i = tok.items().begin(); i != tok.items().end(); ++i)    {
      const std::string& tag = (*i).tag();
      switch( ::toupper(tag[0]) )   {
      case 'A':
        break;
      case 'F':   // FILE='<file name>'
      case 'D':   // DATAFILE='<file name>'
        filename = (*i).value();
        break;
      case 'O':   // OPT='<NEW<CREATE,WRITE>, UPDATE, READ>'
        switch( ::toupper((*i).value()[0]) )   {
        case 'C':
        case 'N':
        case 'W':
          typ = 'N';
          break;
        case 'U':
          typ = 'U';
          break;
        case 'O':
        case 'R':
          typ = 'O';
          break;
        default:
          typ = 0;
          break;
        }
        break;
      case 'T':   // TYP='<HBOOK,ROOT,OBJY,...>'
        db_typ = (*i).value();
        break;
      default:
        props.push_back( Prop((*i).tag(), (*i).value()));
        break;
      }
    }
    if ( 0 != typ )    {
      IConversionSvc* pSvc = 0;
      status = createService(name()+'.'+logname, db_typ, props, pSvc);
      if ( status.isSuccess() )   {
        status = attachTuple(filename, logname, typ, pSvc->repSvcType());
        if ( status.isSuccess() )    {
          m_connections.insert(Connections::value_type(m_rootName+'/'+logname,Connection(pSvc)));
          return StatusCode::SUCCESS;
        }
      }
    }
  }
  log << MSG::ERROR << "Cannot add " << ident << " invalid filename!" << endmsg;
  return StatusCode::FAILURE;
}
StatusCode NTupleSvc::create ( const CLID typ,
const std::string title,
NTuple::Tuple *&  refpTuple 
) [virtual]

Create requested N tuple (Hide constructor)

Eventually allow loading through factory?

Definition at line 367 of file NTupleSvc.cpp.

                                                                                                 {
  NTuple::TupleImp* pTuple = 0;
  StatusCode status = StatusCode::FAILURE;
  if ( typ == CLID_ColumnWiseTuple )    {
    pTuple = new NTuple::ColumnWiseTuple( title );
  }
  else if ( typ == CLID_RowWiseTuple )    {
    pTuple = new NTuple::RowWiseTuple( title );
  }
  else    {
  }
  if ( 0 != pTuple )      {
    pTuple->setTupleService(this);
    status = StatusCode::SUCCESS;
  }
  refpTuple = pTuple;
  return status;
}
NTuple::Directory * NTupleSvc::createDirectory ( const std::string fullPath ) [virtual]

Create Ntuple directory and register it with the data store.

Definition at line 519 of file NTupleSvc.cpp.

                                                                        {
  NTuple::Directory* p = 0;
  StatusCode status = findObject(fullPath, *pp_cast<DataObject>(&p));
  if ( !status.isSuccess() )   {
    int sep2 = fullPath.rfind(SEPARATOR);
    if ( sep2 > 0 )   {
      std::string relPath = fullPath.substr(0, sep2);
      p = createDirectory(relPath);
      if ( 0 != p )    {
        p = new NTuple::Directory();
        // Finally register the created N tuple with the store
        status = registerObject(fullPath, p);
        if ( status.isSuccess() )    {
          // ...starting from the file entries
          IConversionSvc* svc = getDataLoader(p->registry());
          if ( 0 != svc )   {
            IOpaqueAddress* pAddr = 0;
            status = svc->createRep (p, pAddr);
            if ( status.isSuccess() )   {
              p->registry()->setAddress(pAddr);
              status = svc->fillRepRefs (pAddr, p);
              if ( status.isSuccess() )   {
                return p;
              }
            }
          }
          unregisterObject(p);
        }
        p->release();
        p = 0;
      }
    }
  }
  try {
    p = dynamic_cast<NTuple::Directory*>(p);
    return p;
  }
  catch (...) {
  }
  return 0;
}
NTuple::Directory * NTupleSvc::createDirectory ( DataObject pParent,
const std::string title 
) [virtual]

Create Ntuple directory and register it with the data store.

Definition at line 463 of file NTupleSvc.cpp.

                                                                           {
  if ( 0 != pParent )   {
    IRegistry* pDir = pParent->registry();
    if ( 0 != pDir )    {
      std::string full = pDir->identifier();
      full += (relPath[0]=='/') ? "" : "/";
      full += relPath;
      return createDirectory(full);
    }
  }
  return 0;
}
NTuple::Directory * NTupleSvc::createDirectory ( const std::string dirPath,
const std::string title 
) [virtual]

Create Ntuple directory and register it with the data store.

Definition at line 488 of file NTupleSvc.cpp.

                                                                                                   {
  std::string full = dirPath;
  full += (relPath[0]=='/') ? "" : "/";
  full += relPath;
  return createDirectory(full);
}
NTuple::Directory * NTupleSvc::createDirectory ( DataObject pParent,
long  id 
) [virtual]

Create Ntuple directory and register it with the data store.

Definition at line 478 of file NTupleSvc.cpp.

                                                                            {
  return createDirectory( pParent, toStr(id) );
}
NTuple::Directory * NTupleSvc::createDirectory ( const std::string dirPath,
long  id 
) [virtual]

Create Ntuple directory and register it with the data store.

Definition at line 483 of file NTupleSvc.cpp.

                                                                                 {
  return createDirectory( dirPath, toStr(id) );
}
StatusCode NTupleSvc::createService ( const std::string nam,
const std::string typ,
const std::vector< Prop > &  props,
IConversionSvc *&  pSvc 
) [protected]

Create conversion service.

CGL: set the storage type

Reimplemented in TagCollectionSvc.

Definition at line 295 of file NTupleSvc.cpp.

{
  MsgStream log ( msgSvc(), name() );
  // Get the value of the Stat persistancy mechanism from the AppMgr
  IProperty*   appPropMgr = 0;
  StatusCode sts = serviceLocator()->queryInterface(IProperty::interfaceID(), pp_cast<void>(&appPropMgr) );
  if( !sts.isSuccess() ) {
   // Report an error and return the FAILURE status code
   log << MSG::ERROR << "Could not get PropMgr" << endmsg;
   return sts;
  }

  StringProperty sp("HistogramPersistency","");
  sts = appPropMgr->getProperty( &sp );
  if ( !sts.isSuccess() ) {
   log << MSG::ERROR << "Could not get NTuple Persistency format"
       << " from ApplicationMgr properties" << endmsg;
   return sts;
  }

  long storage_typ = TEST_StorageType;
  if ( sp.value() == "HBOOK" ) {
    storage_typ = HBOOK_StorageType;
  }
  else if ( sp.value() == "ROOT" ) {
    storage_typ = ROOT_StorageType;
  }
  else {
    appPropMgr->release();
    log << MSG::ERROR << "Unknown NTuple Persistency format: " << sp.value() << endmsg;
    return StatusCode::FAILURE;
  }
  // Clean up
  appPropMgr->release();

  if ( typ.length() > 0 && typ != sp.value() )    {
    log << MSG::WARNING << "NTuple persistency type is "
        << sp.value() << "." << endmsg
        << "Type given by job option "
        << "NTupleSvc.Input/Output ignored!" << endmsg;
  }

  //      log << MSG::DEBUG << "storage type: " << m_storageType << endmsg;

  // FIXME: (MCl) why NTupleSvc has to directly create a ConversionSvc?
  IService* pService = 0;
  IInterface* iface = new ConversionSvc(name()+"Conversions", serviceLocator(), storage_typ);
  StatusCode status = iface->queryInterface(IService::interfaceID(), pp_cast<void>(&pService));
  if ( status.isSuccess() )   {
    status = iface->queryInterface(IConversionSvc::interfaceID(), pp_cast<void>(&pSvc));
    if ( !status.isSuccess() )   {
      pService->release();
      return status;
    }
  }
  status = pService->sysInitialize();
  if ( !status.isSuccess() )    {
    return status;
  }
  pService->release();
  status = pSvc->setDataProvider(this);
  if ( !status.isSuccess() )    {
    return status;
  }
  return status;
}
StatusCode NTupleSvc::disconnect ( const std::string nam ) [virtual]

Close open connection.

Definition at line 198 of file NTupleSvc.cpp.

StatusCode NTupleSvc::disconnectAll (  ) [virtual]

Close all open connections.

Definition at line 209 of file NTupleSvc.cpp.

StatusCode NTupleSvc::finalize (  ) [virtual]

DataSvc overrides: stop the service.

stop the service.

Reimplemented from DataSvc.

Reimplemented in TagCollectionSvc.

Definition at line 218 of file NTupleSvc.cpp.

                                    {
  StatusCode status = updateDirectories();
  status = clearStore();
  status = DataSvc::finalize();
  status = disconnectAll();
  return status;
}
IConversionSvc * NTupleSvc::getDataLoader ( IRegistry pReg ) [virtual]

DataSvc overrides: Retrieve data loader.

DataSvc override: Retrieve data loader.

Reimplemented from DataSvc.

Definition at line 114 of file NTupleSvc.cpp.

                                                                {
  if ( 0 != pRegistry )    {
    std::string full = pRegistry->identifier();
    size_t len = m_rootName.length();
    size_t idx = full.find(SEPARATOR,len+1);
    std::string path = (idx==std::string::npos) ? full : full.substr(0, idx);
    Connections::iterator i = m_connections.find(path);
    if ( i != m_connections.end() )   {
      return (*i).second.service;
    }
  }
  return 0;
}
StatusCode NTupleSvc::initialize (  ) [virtual]

DataSvc overrides: Initialize the service.

Initialize the service.

Reimplemented from DataSvc.

Reimplemented in TagCollectionSvc.

Definition at line 77 of file NTupleSvc.cpp.

                                     {
  StatusCode status = DataSvc::initialize();
  if ( status.isSuccess() )   {
    status = setProperties();
    if ( status.isSuccess() )   {
      StatusCode iret(StatusCode::SUCCESS,true);
      DataObject* root = new NTuple::Directory();
      status = setRoot(m_rootName, root);
      for ( DBaseEntries::iterator i = m_output.begin(); i != m_output.end(); ++i )    {
        iret = connect(*i);
        if ( !iret.isSuccess() )    {
          status = iret;
        }
      }
      for ( DBaseEntries::iterator j = m_input.begin(); j != m_input.end(); ++j )    {
        iret = connect(*j);
        if ( !iret.isSuccess() )    {
          status = iret;
        }
      }
    }
  }
  return status;
}
bool NTupleSvc::isConnected ( const std::string identifier ) const [virtual]

Check if a datasource is connected.

Definition at line 108 of file NTupleSvc.cpp.

                                                                {
  Connections::const_iterator i = m_connections.find(identifier);
  return !(i==m_connections.end());
}
StatusCode NTupleSvc::readRecord ( NTuple::Tuple tuple ) [virtual]

Read single record from N tuple.

Definition at line 660 of file NTupleSvc.cpp.

                                                        {
  StatusCode status = INVALID_OBJECT;
  NTuple::TupleImp* tuple = (NTuple::TupleImp*)n_tuple;
  if ( 0 != tuple )   {
    try   {
      IConversionSvc* pSvc = tuple->conversionService();
      if ( 0 == pSvc )    {
        pSvc = getDataLoader(n_tuple->registry());
        tuple->setConversionService(pSvc);
      }
      if ( 0 != pSvc )    {
        IRegistry*      pReg  = n_tuple->registry();
        IOpaqueAddress* pAddr = pReg->address();
        status = pSvc->updateObj(pAddr, n_tuple);
        if ( status.isSuccess() )   {
          status = pSvc->updateObjRefs(pAddr, n_tuple);
        }
        return status;
      }
      status = IDataProviderSvc::NO_DATA_LOADER;
    }
    catch(...)    {
      status = INVALID_OBJECT;
    }
  }
  return status;
}
StatusCode NTupleSvc::readRecord ( const std::string fullPath ) [virtual]

Read single record from N tuple.

Definition at line 689 of file NTupleSvc.cpp.

                                                           {
  NTuple::Tuple* pObj = 0;
  StatusCode status = findObject(fullPath, *pp_cast<DataObject>(&pObj));  // Check if object is  present
  if ( status.isSuccess() )   {
    return readRecord ( pObj );
  }
  return INVALID_OBJ_PATH;
}
StatusCode NTupleSvc::readRecord ( DataObject pParent,
const std::string relPath 
) [virtual]

Read single record from N tuple.

Definition at line 699 of file NTupleSvc.cpp.

                                                                               {
  NTuple::Tuple* pObj = 0;
  StatusCode status = findObject(pParent, relPath, *pp_cast<DataObject>(&pObj));  // Check if object is  present
  if ( status.isSuccess() )   {
    return readRecord ( pObj );
  }
  return INVALID_OBJ_PATH;
}
StatusCode NTupleSvc::reinitialize (  ) [virtual]

DataSvc overrides: reinitialize service.

Initialize the service.

Reimplemented from DataSvc.

Definition at line 103 of file NTupleSvc.cpp.

                                   {
  return StatusCode::SUCCESS;
}
void NTupleSvc::releaseConnection ( Connection c ) [protected]

Finalize single service.

Definition at line 188 of file NTupleSvc.cpp.

                                                {
  SmartIF<IService> isvc( c.service );
  if ( isvc.isValid( ) )   {
    isvc->finalize().ignore();
  }
  c.service->release();
  c.service = 0;
}
StatusCode NTupleSvc::save ( NTuple::Tuple tuple ) [virtual]

Save N tuple to disk. Must be called in order to close the ntuple file properly.

Definition at line 579 of file NTupleSvc.cpp.

                                                {
  NTuple::TupleImp* tuple = (NTuple::TupleImp*)n_tuple;
  if ( 0 != tuple )   {
    try   {
      IConversionSvc* pSvc = tuple->conversionService();
      IRegistry*      pReg = tuple->registry();
      if ( 0 != pSvc && 0 != pReg )    {
        IOpaqueAddress* pAddr = pReg->address();
        StatusCode status = pSvc->updateRep(pAddr, n_tuple);
        if ( status.isSuccess() )   {
          status = pSvc->updateRepRefs(pAddr, n_tuple);
        }
        return status;
      }
      return IDataProviderSvc::NO_DATA_LOADER;
    }
    catch(...)    {
    }
  }
  return INVALID_OBJECT;
}
StatusCode NTupleSvc::save ( const std::string fullPath ) [virtual]

Save N tuple to disk. Must be called in order to close the ntuple file properly.

Definition at line 568 of file NTupleSvc.cpp.

                                                     {
  MsgStream log ( msgSvc(), name() );
  NTuple::Tuple* pObj = 0;
  StatusCode status = findObject(fullPath, *pp_cast<DataObject>(&pObj));  // Check if object is  present
  if ( status.isSuccess() )   {
    return save ( pObj );
  }
  return INVALID_OBJ_PATH;
}
StatusCode NTupleSvc::save ( DataObject pParent,
const std::string relPath 
) [virtual]

Save N tuple to disk. Must be called in order to close the ntuple file properly.

Definition at line 602 of file NTupleSvc.cpp.

                                                                         {
  NTuple::Tuple* pObj = 0;
  StatusCode status = findObject(pParent, relPath, *pp_cast<DataObject>(&pObj));  // Check if object is  present
  if ( status.isSuccess() )   {
    return save ( pObj );
  }
  return INVALID_OBJ_PATH;
}
StatusCode NTupleSvc::updateDirectories (  ) [protected]

Update directory data.

Definition at line 128 of file NTupleSvc.cpp.

                                          {
  typedef std::vector<IRegistry*> Leaves;
  long need_update = 0;
  DataObject* pO = 0;
  StatusCode iret = findObject(m_rootName, pO);
  MsgStream log ( msgSvc(), name() );
  //  log << MSG::DEBUG << "in finalize()" << endmsg;
  if ( iret.isSuccess() )   {
    Leaves leaves;
    iret = objectLeaves(pO, leaves);
    if ( iret.isSuccess() )    {
      // Only traverse the tree below the files
      for ( Leaves::iterator d = leaves.begin(); d != leaves.end(); d++ )    {
        if ( (*d)->object() )   {
          IOpaqueAddress* pA = (*d)->address();
          if ( pA )   {
            unsigned long typ = pA->ipar()[1];
            if ( typ == 'R' || typ == 'N' || typ == 'U' )   {
              // ...starting from the file entries: first save the directories/ntuples
              IConversionSvc* svc = getDataLoader(*d);
              if ( 0 != svc )   {
                StatusCode status;
                DataSelectionAgent agent;
                IDataSelector*     sel = agent.selectedObjects();
                traverseSubTree ( (*d)->object(), &agent ).ignore();
                for(int i = sel->size()-1; i >= 0; i-- )    {
                  DataObject* o = (*sel)[i];
                  IRegistry*  r = o->registry();
                  status = svc->updateRep(r->address(), o);
                  if ( !status.isSuccess() )    {
                    iret = status;
                  }
                }
                for(int j = sel->size()-1; j >= 0; j-- )    {
                  DataObject* o = (*sel)[j];
                  IRegistry*  r = o->registry();
                  status = svc->updateRepRefs(r->address(), o);
                  if ( !status.isSuccess() )    {
                    iret = status;
                  }
                }
                if ( iret.isSuccess() ) need_update += sel->size();
              }
            }
          }
        }
      }
    }
  }
  if ( !iret.isSuccess() )    {
    log << MSG::ERROR << "ERROR while saving NTuples" << endmsg;
    return iret;
  }
  else if ( need_update > 0 )    {
    log << MSG::INFO << "NTuples saved successfully" << endmsg;
  }
  return iret;
}
StatusCode NTupleSvc::writeRecord ( NTuple::Tuple tuple ) [virtual]

Write single record to N tuple.

Definition at line 612 of file NTupleSvc.cpp.

                                                          {
  NTuple::TupleImp* tuple = (NTuple::TupleImp*)n_tuple;
  if ( 0 != tuple )   {
    try   {
      IConversionSvc* pSvc = tuple->conversionService();
      if ( 0 == pSvc )    {
        pSvc = getDataLoader(n_tuple->registry());
        tuple->setConversionService(pSvc);
      }
      if ( 0 != pSvc )    {
        IRegistry* pReg = n_tuple->registry();
        IOpaqueAddress* pAddr = pReg->address();
        StatusCode status = pSvc->createRep(n_tuple, pAddr);
        if ( status.isSuccess() )   {
          pReg->setAddress(pAddr);
          status = pSvc->fillRepRefs(pAddr, n_tuple);
        }
        return status;
      }
      return IDataProviderSvc::NO_DATA_LOADER;
    }
    catch(...)    {
    }
  }
  return INVALID_OBJECT;
}
StatusCode NTupleSvc::writeRecord ( DataObject pParent,
const std::string relPath 
) [virtual]

Write single record to N tuple.

Definition at line 650 of file NTupleSvc.cpp.

                                                                                  {
  NTuple::Tuple* pObj = 0;
  StatusCode status = findObject(pParent, relPath, *pp_cast<DataObject>(&pObj));  // Check if object is  present
  if ( status.isSuccess() )   {
    return writeRecord ( pObj );
  }
  return INVALID_OBJ_PATH;
}
StatusCode NTupleSvc::writeRecord ( const std::string fullPath ) [virtual]

Write single record to N tuple.

Definition at line 640 of file NTupleSvc.cpp.

                                                              {
  NTuple::Tuple* pObj = 0;
  StatusCode status = findObject(fullPath, *pp_cast<DataObject>(&pObj));  // Check if object is  present
  if ( status.isSuccess() )   {
    return writeRecord ( pObj );
  }
  return INVALID_OBJ_PATH;
}

Friends And Related Function Documentation

friend class SvcFactory< NTupleSvc > [friend]

Definition at line 36 of file NTupleSvc.h.


Member Data Documentation

Container of connection points.

Definition at line 130 of file NTupleSvc.h.

Input streams.

Definition at line 128 of file NTupleSvc.h.

Output streams.

Definition at line 126 of file NTupleSvc.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:19 for Gaudi Framework, version v23r0 by Doxygen version 1.7.2 written by Dimitri van Heesch, © 1997-2004