11 #define ROOTHISTCNV_RCONVERTER_CPP
23 #include <TDirectory.h>
43 TDirectory* gDir = gDirectory;
46 if (
findTFile( loc, tf ).isSuccess() ) { tf->cd(); }
51 auto p = full.find(
":", 0 );
52 if ( p != std::string::npos ) {
53 fil = full.substr( 0, p );
56 gDirectory->cd( fil.
c_str() );
59 while ( ( p = full.find(
"/", i ) ) != std::string::npos ) {
60 s = full.substr( i, p - i );
66 if ( full.compare( 0, 1,
"/" ) == 0 ) gDirectory->cd(
"/" );
68 for (
const auto& litr : lpath ) {
70 if ( !gDirectory->GetKey( litr.c_str() ) ) { gDirectory->mkdir( litr.c_str() ); }
71 gDirectory->cd( litr.c_str() );
84 long lf1 = loc.
find(
"/NTUPLES/" );
85 long lf2 = loc.
find(
"/stat/" );
88 ll = loc.
find(
"/", lf1 + 9 );
90 }
else if ( lf2 != -1 ) {
91 ll = loc.
find(
"/", lf2 + 6 );
96 <<
" --> no leading /NTUPLES/ or /stat/" <<
endmsg;
114 return diskDirectory( loc );
127 if ( findTFile( loc, tf ).isSuccess() ) {
136 gDirectory->cd(
"/" );
137 while ( ( p = full.find(
"/", i ) ) != -1 ) {
138 sdir = full.substr( i, p - i );
139 if ( !gDirectory->GetKey( sdir.
c_str() ) ) {
140 log <<
MSG::ERROR <<
"cannot cd to " << full <<
" from " << gDirectory->GetPath() <<
endmsg;
143 gDirectory->cd( sdir.
c_str() );
147 gDirectory->cd( full.substr( i ).c_str() );
161 return gDirectory->GetPath();
174 refpAddr =
new RootObjAddress( repSvcType(), objType(), pReg->
name(),
"", (
unsigned long)( pDir ),
175 (
unsigned long)( pTObj ), pTObj );
188 auto pA =
new RootObjAddress( repSvcType(), clid, rzdir, title, 0, 0, pTObj );
200 StatusCode status = createAddress( rzdir, clid, obj, pTobj, refpAddress );
202 unsigned long* ipar = (
unsigned long*)refpAddress->
ipar();
219 StatusCode status = dataMgr->objectParent( pReg, pParentReg );
223 TDirectory* pParentDir = (TDirectory*)pParAddr->
ipar()[0];
225 gDirectory->cd( pParentDir->GetPath() );
244 TDirectory* pParentDir = changeDirectory( pObject );
246 TObject* pTObj = createPersistent( pObject );
250 return createAddress( pObject, pParentDir,
nullptr, pAddr );
277 auto imap = s_fileMap.find(
id );
278 if ( imap != s_fileMap.end() ) {
283 s_fileMap[
id] =
const_cast<TFile*
>( tfile );
299 i1 =
id.
find(
"/", 0 );
304 i2 =
id.find(
"/", i1 + 1 );
309 i3 =
id.find(
"/", i2 + 1 );
316 auto imap = s_fileMap.find( idm );
318 tfile = imap->second;
326 if (
id.
size() > 0 && isdigit(
id[0] ) ) {
330 forced = tmp.
value();