|
Gaudi Framework, version v21r4 |
| Home | Generated: 7 Sep 2009 |
#include <RFileCnv.h>


Definition at line 23 of file RFileCnv.h.
Public Member Functions | |
| virtual StatusCode | createObj (IOpaqueAddress *pAddress, DataObject *&refpObject) |
| Create the transient representation of an object. | |
| virtual StatusCode | createRep (DataObject *pObject, IOpaqueAddress *&refpAddress) |
| Convert the transient object to the requested representation. | |
| virtual StatusCode | updateRep (IOpaqueAddress *pAddress, DataObject *pObject) |
| Convert the transient object to the requested representation. | |
| RFileCnv (ISvcLocator *svc) | |
| Standard constructor. | |
| virtual | ~RFileCnv () |
| Standard destructor. | |
Static Public Member Functions | |
| static const CLID & | classID () |
| Inquire class type. | |
Protected Attributes | |
| TFile * | rfile |
| RootHistCnv::RFileCnv::RFileCnv | ( | ISvcLocator * | svc | ) | [inline] |
Standard constructor.
Definition at line 37 of file RFileCnv.h.
00037 : RDirectoryCnv(svc, classID()) { 00038 }
| RootHistCnv::RFileCnv::~RFileCnv | ( | ) | [virtual] |
| StatusCode RootHistCnv::RFileCnv::createObj | ( | IOpaqueAddress * | pAddress, | |
| DataObject *& | refpObject | |||
| ) | [virtual] |
Create the transient representation of an object.
Reimplemented from RootHistCnv::RDirectoryCnv.
Definition at line 19 of file RFileCnv.cpp.
00022 { 00023 MsgStream log(msgSvc(), "RFileCnv"); 00024 unsigned long* ipar = (unsigned long*)pAddress->ipar(); 00025 char mode[2] = { char(ipar[1]), 0 }; 00026 00027 std::string fname = pAddress->par()[0]; // Container name 00028 std::string ooname = pAddress->par()[1]; // Object name 00029 00030 const std::string* spar = pAddress->par(); 00031 // Strip of store name to get the top level RZ directory 00032 std::string oname = spar[1].substr(spar[1].find("/",1)+1, spar[1].length()); 00033 00034 // Protect against multiple instances of TROOT 00035 if ( 0 == gROOT ) { 00036 static TROOT root("root","ROOT I/O"); 00037 // gDebug = 99; 00038 } else { 00039 log << MSG::VERBOSE << "ROOT already initialized, debug = " 00040 << gDebug<< endmsg; 00041 } 00042 00043 00044 // Determine access mode: 00045 00046 if ( mode[0] == 'O' ) { 00047 00048 if (findTFile(ooname,rfile).isFailure()) { 00049 00050 log << MSG::INFO << "opening Root file \"" << fname << "\" for reading" 00051 << endmsg; 00052 00053 rfile = TFile::Open(fname.c_str(),"READ"); 00054 if ( rfile != 0 && rfile->IsOpen() ) { 00055 regTFile(ooname,rfile).ignore(); 00056 00057 ipar[0] = (unsigned long)rfile; 00058 NTuple::File* pFile = new NTuple::File(objType(), fname, oname); 00059 pFile->setOpen(true); 00060 refpObject = pFile; 00061 00062 return StatusCode::SUCCESS; 00063 00064 } else { 00065 log << MSG::ERROR << "Couldn't open \"" << fname << "\" for reading" 00066 << endmsg; 00067 return StatusCode::FAILURE; 00068 } 00069 00070 } else { 00071 log << MSG::DEBUG << "Root file \"" << fname << "\" already opened" 00072 << endmsg; 00073 return StatusCode::SUCCESS; 00074 } 00075 00076 00077 } else if ( mode[0] == 'U' ) { 00078 log << MSG::INFO << "opening Root file \"" << fname << "\" for updating" 00079 << endmsg; 00080 00081 log << MSG::ERROR << "don't know how to do this yet. Aborting." << endmsg; 00082 exit(1); 00083 00084 00085 } else if ( mode[0] == 'N' ) { 00086 log << MSG::INFO << "opening Root file \"" << fname << "\" for writing" 00087 << endmsg; 00088 00089 00090 rfile = TFile::Open(fname.c_str(),"RECREATE","Gaudi Trees"); 00091 if (! rfile->IsOpen() ) { 00092 log << MSG::ERROR << "Could not open file " << fname << " for writing" 00093 << endmsg; 00094 return StatusCode::FAILURE; 00095 } 00096 00097 regTFile(ooname,rfile).ignore(); 00098 00099 log << MSG::DEBUG << "creating ROOT file " << fname << endmsg; 00100 00101 ipar[0] = (unsigned long)rfile; 00102 NTuple::File* pFile = new NTuple::File(objType(), fname, oname); 00103 pFile->setOpen(true); 00104 refpObject = pFile; 00105 return StatusCode::SUCCESS; 00106 00107 } else { 00108 00109 log << MSG::ERROR << "Uknown mode to access ROOT file" << endmsg; 00110 return StatusCode::FAILURE; 00111 00112 } 00113 00114 return StatusCode::FAILURE; 00115 00116 00117 // TFile* rfile = TFile::Open(spar[0].c_str(),"RECREATE","Gaudi ROOT Ntuples"); 00118 // if (! rfile->IsOpen() ) { 00119 // log << MSG::ERROR << "Could not open file " << spar[0] << " for writing" << endmsg; 00120 // return StatusCode::FAILURE; 00121 // } 00122 // ipar[0] = (unsigned long)rfile; 00123 // NTuple::File* pFile = new NTuple::File(objType(), spar[0], oname); 00124 // pFile->setOpen(true); 00125 // refpObject = pFile; 00126 // return StatusCode::SUCCESS; 00127 00128 }
| StatusCode RootHistCnv::RFileCnv::createRep | ( | DataObject * | pObject, | |
| IOpaqueAddress *& | refpAddress | |||
| ) | [virtual] |
Convert the transient object to the requested representation.
Reimplemented from RootHistCnv::RDirectoryCnv.
Definition at line 132 of file RFileCnv.cpp.
00135 { 00136 refpAddress = pObject->registry()->address(); 00137 return RFileCnv::updateRep( refpAddress, pObject ); 00138 }
| StatusCode RootHistCnv::RFileCnv::updateRep | ( | IOpaqueAddress * | pAddress, | |
| DataObject * | pObject | |||
| ) | [virtual] |
Convert the transient object to the requested representation.
Reimplemented from RootHistCnv::RDirectoryCnv.
Definition at line 141 of file RFileCnv.cpp.
00144 { 00145 MsgStream log(msgSvc(), "RFileCnv"); 00146 std::string ooname = pAddress->par()[1]; 00147 00148 NTuple::File* pFile = dynamic_cast<NTuple::File*>(pObject); 00149 if ( pFile != 0 && pFile->isOpen() ) { 00150 00151 unsigned long* ipar = (unsigned long*)pAddress->ipar(); 00152 if (findTFile(ooname,rfile).isFailure()) { 00153 log << MSG::ERROR << "Problems closing TFile " << ooname << endmsg; 00154 return StatusCode::FAILURE; 00155 } 00156 00157 rfile->Write(0,TObject::kOverwrite); 00158 if ( log.level() <= MSG::INFO ) { 00159 log << MSG::INFO << "dumping contents of " << ooname << endmsg; 00160 rfile->Print(); 00161 } 00162 rfile->Close(); 00163 delete rfile; 00164 00165 ipar[0] = 0; 00166 pFile->setOpen(false); 00167 return StatusCode::SUCCESS; 00168 00169 } else { 00170 log << MSG::ERROR << "TFile " << ooname << " is not open" << endmsg; 00171 } 00172 return StatusCode::FAILURE; 00173 }
| static const CLID& RootHistCnv::RFileCnv::classID | ( | ) | [inline, static] |
Inquire class type.
Reimplemented from RootHistCnv::RDirectoryCnv.
Definition at line 32 of file RFileCnv.h.
00032 { 00033 return CLID_NTupleFile; 00034 }
TFile* RootHistCnv::RFileCnv::rfile [protected] |
Definition at line 43 of file RFileCnv.h.