|
Gaudi Framework, version v23r2 |
| Home | Generated: Thu Jun 28 2012 |
#include <NTupleSvc.h>


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 IConversionSvc * | getDataLoader (IRegistry *pReg) |
| DataSvc overrides: Retrieve data loader. | |
| virtual NTuple::Directory * | createDirectory (DataObject *pParent, const std::string &title) |
| Create Ntuple directory and register it with the data store. | |
| virtual NTuple::Directory * | createDirectory (DataObject *pParent, long id) |
| Create Ntuple directory and register it with the data store. | |
| virtual NTuple::Directory * | createDirectory (const std::string &dirPath, long id) |
| Create Ntuple directory and register it with the data store. | |
| virtual NTuple::Directory * | createDirectory (const std::string &dirPath, const std::string &title) |
| Create Ntuple directory and register it with the data store. | |
| virtual NTuple::Directory * | createDirectory (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::Tuple * | book (const std::string &fullPath, const CLID &type, const std::string &title) |
| Book Ntuple and register it with the data store. | |
| virtual NTuple::Tuple * | book (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::Tuple * | book (const std::string &dirPath, long id, const CLID &type, const std::string &title) |
| Book Ntuple and register it with the data store. | |
| virtual NTuple::Tuple * | book (DataObject *pParent, const std::string &relPath, const CLID &type, const std::string &title) |
| Book Ntuple and register it with the data store. | |
| virtual NTuple::Tuple * | book (DataObject *pParent, long id, const CLID &type, const std::string &title) |
| Book Ntuple and register it with the data store. | |
| virtual NTuple::Tuple * | access (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::string > | DBaseEntries |
| 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 > |
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
Definition at line 27 of file NTupleSvc.h.
typedef std::map<std::string, Connection> NTupleSvc::Connections [protected] |
Definition at line 38 of file NTupleSvc.h.
typedef std::vector< std::string > NTupleSvc::DBaseEntries [protected] |
Definition at line 37 of file NTupleSvc.h.
typedef std::pair<std::string,std::string> NTupleSvc::Prop [protected] |
Definition at line 39 of file NTupleSvc.h.
| NTupleSvc::NTupleSvc | ( | const std::string & | name, |
| ISvcLocator * | svc | ||
| ) |
Standard Constructor.
Definition at line 63 of file NTupleSvc.cpp.
: base_class(name, svc) { declareProperty("Input", m_input); declareProperty("Output", m_output); m_rootName = "/NTUPLES"; m_rootCLID = CLID_DataObject; }
| NTupleSvc::~NTupleSvc | ( | ) | [virtual] |
| NTuple::Tuple * NTupleSvc::access | ( | const std::string & | fullPath, |
| const std::string & | filename | ||
| ) | [virtual] |
| 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.
| 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.
| 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.
{
Connections::iterator i = m_connections.find(nam);
if ( i != m_connections.end() ) {
releaseConnection((*i).second);
m_connections.erase(i);
return StatusCode::SUCCESS;
}
return StatusCode::FAILURE;
}
| StatusCode NTupleSvc::disconnectAll | ( | ) | [virtual] |
Close all open connections.
Definition at line 209 of file NTupleSvc.cpp.
{
for(Connections::iterator i = m_connections.begin(); i != m_connections.end(); ++i) {
releaseConnection((*i).second);
}
m_connections.erase(m_connections.begin(), m_connections.end());
return StatusCode::SUCCESS;
}
| 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;
}
friend class SvcFactory< NTupleSvc > [friend] |
Definition at line 36 of file NTupleSvc.h.
Connections NTupleSvc::m_connections [protected] |
Container of connection points.
Definition at line 130 of file NTupleSvc.h.
DBaseEntries NTupleSvc::m_input [protected] |
Input streams.
Definition at line 128 of file NTupleSvc.h.
DBaseEntries NTupleSvc::m_output [protected] |
Output streams.
Definition at line 126 of file NTupleSvc.h.