|
Gaudi Framework, version v23r0 |
| Home | Generated: Mon Jan 30 2012 |
#include <RConverter.h>


Public Member Functions | |
| virtual StatusCode | createRep (DataObject *pObj, IOpaqueAddress *&refpAddr) |
| Convert the transient object to the requested representation. | |
| long | repSvcType () const |
| Retrieve the class type of the data store the converter uses. | |
| StatusCode | error (const std::string &msg) |
| StatusCode | regTFile (const std::string, const TFile *) |
| StatusCode | findTFile (const std::string, TFile *&) |
| std::string | diskDirectory (const std::string &loc) |
| std::string | directory (const std::string &loc) |
| void | setDirectory (const std::string &loc) |
| void | setDiskDirectory (const std::string &loc) |
| StatusCode | createDirectory (const std::string &loc) |
| StatusCode | createDiskDirectory (const std::string &loc) |
| std::string | getDirectory () |
| std::string | convertId (const std::string &) const |
Static Public Member Functions | |
| static long | storageType () |
| Inquire storage type. | |
Protected Member Functions | |
| RConverter (const CLID &clid, ISvcLocator *svc) | |
| Standard constructor. | |
| virtual | ~RConverter () |
| Standard destructor. | |
| virtual StatusCode | readObject (IOpaqueAddress *pAddr, DataObject *&refpObj) |
| Create the transient representation of an object. | |
| virtual TObject * | createPersistent (DataObject *pObj) |
| Create the persistent representation of an object. | |
| StatusCode | createAddress (DataObject *pObject, TDirectory *pDir, TObject *pTObject, IOpaqueAddress *&refpAddr) |
| Create address of the transient object according to the requested representation. | |
| StatusCode | createAddress (const std::string &rzdir, const CLID &clid, long id, TObject *pTobj, IOpaqueAddress *&refpAddress) |
| StatusCode | createAddress (const std::string &rzdir, const CLID &clid, const std::string &title, TObject *pTobj, IOpaqueAddress *&refpAddress) |
| TDirectory * | changeDirectory (DataObject *pObject) |
| Switch to object directory (=Parent directory) | |
Root Converter.
Definition at line 36 of file RConverter.h.
| RootHistCnv::RConverter::RConverter | ( | const CLID & | clid, |
| ISvcLocator * | svc | ||
| ) | [inline, protected] |
Standard constructor.
Definition at line 61 of file RConverter.h.
: Converter(storageType(), clid, svc) { }
| virtual RootHistCnv::RConverter::~RConverter | ( | ) | [inline, protected, virtual] |
| TDirectory * RootHistCnv::RConverter::changeDirectory | ( | DataObject * | pObject ) | [protected] |
Switch to object directory (=Parent directory)
Definition at line 236 of file RConverter.cpp.
{
if ( pObject ) {
IRegistry* pReg = pObject->registry();
if ( pReg ) {
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 ) {
gDirectory->cd(pParentDir->GetPath());
return pParentDir;
}
}
}
}
}
}
return 0;
}
| std::string RootHistCnv::RConverter::convertId | ( | const std::string & | id ) | const |
Definition at line 370 of file RConverter.cpp.
{
bool forced = false;
if ( id.size() > 0 && isdigit(id[0]) ) {
try {
BooleanProperty tmp;
tmp.assign(SmartIF<IProperty>(conversionSvc())->getProperty( "ForceAlphaIds"));
forced = (bool)tmp;
}
catch ( ... ) { }
}
if (forced ) return std::string("h") + id;
else return id;
}
| StatusCode RootHistCnv::RConverter::createAddress | ( | const std::string & | rzdir, |
| const CLID & | clid, | ||
| long | id, | ||
| TObject * | pTobj, | ||
| IOpaqueAddress *& | refpAddress | ||
| ) | [protected] |
Definition at line 218 of file RConverter.cpp.
{
std::ostringstream obj; obj << id;
StatusCode status = createAddress(rzdir, clid, obj.str(), pTobj, refpAddress);
if ( status.isSuccess() ) {
unsigned long* ipar = (unsigned long*)refpAddress->ipar();
ipar[0] = id;
}
return status;
}
| StatusCode RootHistCnv::RConverter::createAddress | ( | const std::string & | rzdir, |
| const CLID & | clid, | ||
| const std::string & | title, | ||
| TObject * | pTobj, | ||
| IOpaqueAddress *& | refpAddress | ||
| ) | [protected] |
Definition at line 197 of file RConverter.cpp.
{
RootObjAddress* pA = new RootObjAddress(repSvcType(),
clid,
rzdir,
title,
0,
0,
pTObj );
refpAddress = pA;
return StatusCode::SUCCESS;
}
| StatusCode RootHistCnv::RConverter::createAddress | ( | DataObject * | pObject, |
| TDirectory * | pDir, | ||
| TObject * | pTObject, | ||
| IOpaqueAddress *& | refpAddr | ||
| ) | [protected] |
Create address of the transient object according to the requested representation.
Definition at line 171 of file RConverter.cpp.
{
// Get address again....it does not change
IRegistry* pReg = pObj->registry();
if ( 0 != pReg ) {
refpAddr = pReg->address();
if ( 0 == refpAddr ) {
refpAddr = new RootObjAddress(repSvcType(),
objType(),
pReg->name(),
"",
(unsigned long)(pDir),
(unsigned long)(pTObj),
pTObj);
return StatusCode::SUCCESS;
}
}
return StatusCode::FAILURE;
}
| StatusCode RootHistCnv::RConverter::createDirectory | ( | const std::string & | loc ) |
Definition at line 26 of file RConverter.cpp.
{
MsgStream log(msgSvc(), "RConverter::createDir");
// Get rid of leading /NTUPLES
std::string full;
full = diskDirectory( loc );
int p,i;
std::string fil,cur,s;
TDirectory *gDir;
gDir = gDirectory;
TFile *tf;
if ( findTFile(loc,tf).isSuccess() ) {
tf->cd();
}
std::list<std::string> lpath;
i = 1;
if ( (p=full.find(":",0)) != -1 ) {
fil = full.substr(0,p);
i = p+1;
fil += ":/";
gDirectory->cd(fil.c_str());
}
while ( (p = full.find("/",i)) != -1) {
s = full.substr(i,p-i);
lpath.push_back(s);
i = p+1;
}
lpath.push_back( full.substr(i,full.length()-i) );
if ( full.substr(0,1) == "/") {
gDirectory->cd("/");
}
std::list<std::string>::const_iterator litr;
for(litr=lpath.begin(); litr!=lpath.end(); ++litr) {
cur = *litr;
if (! gDirectory->GetKey(litr->c_str()) ) {
gDirectory->mkdir(litr->c_str());
}
gDirectory->cd(litr->c_str());
}
gDirectory = gDir;
return StatusCode::SUCCESS;
}
| StatusCode RootHistCnv::RConverter::createDiskDirectory | ( | const std::string & | loc ) |
| TObject * RootHistCnv::RConverter::createPersistent | ( | DataObject * | pObj ) | [protected, virtual] |
Create the persistent representation of an object.
Reimplemented in RootHistCnv::RHistogramCnv< T, S, Q >.
Definition at line 302 of file RConverter.cpp.
{
return 0;
}
| StatusCode RootHistCnv::RConverter::createRep | ( | DataObject * | pObj, |
| IOpaqueAddress *& | refpAddr | ||
| ) | [virtual] |
Convert the transient object to the requested representation.
Reimplemented from Converter.
Reimplemented in RootHistCnv::DirectoryCnv, RootHistCnv::RDirectoryCnv, RootHistCnv::RFileCnv, and RootHistCnv::RNTupleCnv.
Definition at line 264 of file RConverter.cpp.
{
GlobalDirectoryRestore restore;
pAddr = 0;
try {
TDirectory* pParentDir = changeDirectory(pObject);
if ( pParentDir ) {
TObject* pTObj = createPersistent(pObject);
if ( pTObj ) {
pTObj->Write();
delete pTObj;
return createAddress(pObject, pParentDir, 0, pAddr);
}
}
}
catch (...) {
}
MsgStream log (msgSvc(), "RConverter");
log << MSG::ERROR << "Failed to create persistent Object!" << endmsg;
return StatusCode::FAILURE;
}
| std::string RootHistCnv::RConverter::directory | ( | const std::string & | loc ) |
Definition at line 113 of file RConverter.cpp.
{
return ( diskDirectory(loc) );
}
| std::string RootHistCnv::RConverter::diskDirectory | ( | const std::string & | loc ) |
Definition at line 81 of file RConverter.cpp.
{
// Get rid of leading /NTUPLES/{INPUT_STREAM} or /stat/{INPUT_STREAM}
std::string dir;
long lf1 = loc.find("/NTUPLES/");
long lf2 = loc.find("/stat/");
long ll;
if (lf1 != -1) {
ll = loc.find("/",lf1+9);
} else if (lf2 != -1) {
ll = loc.find("/",lf2+6);
} else {
MsgStream log(msgSvc(), "RConverter");
log << MSG::ERROR << "diskDirectory(" << loc << ")"
<< " --> no leading /NTUPLES/ or /stat/" << endmsg;
return loc;
}
// dir = loc.substr(ll+8,loc.length()-ll-8);
if (ll == -1) {
dir = "/";
} else {
dir = loc.substr(ll,loc.length()-ll);
}
return dir;
}
| StatusCode RootHistCnv::RConverter::error | ( | const std::string & | msg ) |
Definition at line 386 of file RConverter.cpp.
{
MsgStream log(msgSvc(), "RootHistCnv");
log << MSG::ERROR << msg << endmsg;
return StatusCode::FAILURE;
}
| StatusCode RootHistCnv::RConverter::findTFile | ( | const std::string | id, |
| TFile *& | tfile | ||
| ) |
Definition at line 331 of file RConverter.cpp.
{
MsgStream log(msgSvc(), "RConverter");
tfile = 0;
std::string idm;
// make sure we only get first two parts of id
int i1,i2,i3;
i1 = id.find("/",0);
if (i1 != 0) {
log << MSG::ERROR << "Directory name does not start with \"/\": "
<< id << endmsg;
return StatusCode::FAILURE;
}
i2 = id.find("/",i1+1);
if (i2 == -1) {
log << MSG::ERROR << "Directory name has only one part: " << id << endmsg;
return StatusCode::FAILURE;
}
i3 = id.find("/",i2+1);
if (i3 == -1) {
idm = id;
} else {
idm = id.substr(0,i3);
}
std::map<std::string,TFile*>::const_iterator imap;
imap = s_fileMap.find(idm);
if ( imap == s_fileMap.end() ) {
return StatusCode::FAILURE;
}
tfile = (*imap).second;
return StatusCode::SUCCESS;
}
| std::string RootHistCnv::RConverter::getDirectory | ( | ) |
Definition at line 162 of file RConverter.cpp.
{
std::string dir = gDirectory->GetPath();
return (dir);
}
| StatusCode RootHistCnv::RConverter::readObject | ( | IOpaqueAddress * | pAddr, |
| DataObject *& | refpObj | ||
| ) | [protected, virtual] |
Create the transient representation of an object.
Definition at line 289 of file RConverter.cpp.
{
// MsgStream log(msgSvc(), "RConverter::readObject");
// log << MSG::WARNING << pAddr->par()[0] << " <> " << pAddr->par()[1]
// << " <> "
// << pAddr->ipar()[0] << " <> " << pAddr->ipar()[1] << " <> "
// << pAddr->registry()->identifier() << endmsg;
return StatusCode::SUCCESS;
}
| StatusCode RootHistCnv::RConverter::regTFile | ( | const std::string | id, |
| const TFile * | tfile | ||
| ) |
Definition at line 309 of file RConverter.cpp.
{
MsgStream log(msgSvc(), "RConverter");
std::map<std::string,TFile*>::const_iterator imap;
imap = s_fileMap.find(id);
if ( imap != s_fileMap.end() ) {
log << MSG::ERROR << "cannot register TTree " << id
<< ": already exists" << endmsg;
return StatusCode::FAILURE;
}
s_fileMap[id] = const_cast<TFile*>(tfile);
return StatusCode::SUCCESS;
}
| long RootHistCnv::RConverter::repSvcType | ( | ) | const [inline, virtual] |
Retrieve the class type of the data store the converter uses.
Implements IConverter.
Definition at line 43 of file RConverter.h.
{ return i_repSvcType(); }
| void RootHistCnv::RConverter::setDirectory | ( | const std::string & | loc ) |
Definition at line 120 of file RConverter.cpp.
{
MsgStream log(msgSvc(), "RConverter");
std::string full, id;
TFile *tf;
full = diskDirectory( loc );
// get associated TFile
if ( findTFile(loc,tf).isSuccess() ) {
tf->cd();
} else {
log << MSG::ERROR << "error getting TFile name " << loc << endmsg;
}
int p,i=1;
std::string cur,sdir;
gDirectory->cd("/");
while ( (p = full.find("/",i)) != -1) {
sdir = full.substr(i,p-i);
if (! gDirectory->GetKey(sdir.c_str()) ) {
log << MSG::ERROR << "cannot cd to " << full << " from "
<< gDirectory->GetPath() << endmsg;
return;
}
gDirectory->cd(sdir.c_str());
i = p+1;
}
gDirectory->cd( full.substr(i,full.length()-i).c_str() );
}
| void RootHistCnv::RConverter::setDiskDirectory | ( | const std::string & | loc ) |
Definition at line 155 of file RConverter.cpp.
{
setDirectory(loc);
}
| static long RootHistCnv::RConverter::storageType | ( | ) | [inline, static] |