12 using namespace
Diana;
13 using
std::stringstream;
19 fIsMRootFileWriter =
false;
25 std::map<std::string, QObject*>::iterator iter =
fObjectCache.begin();
27 if(iter->second)
delete iter->second;
39 if(!oFile || oFile->IsZombie()) {
41 err.SetDescription(__FILE__,__LINE__,std::string(
"Cannot open file CurrentWriter"));
54 err.SetDescription(__FILE__,__LINE__,std::string(
"Cannot create directory \"") + std::string(
ROOT_GLOBAL_DIR) + std::string(
"\" in file: ") +
"CurrentWriter");
60 std::map<std::string, QObject*>::iterator iter =
fObjectCache.begin();
63 if(iter->second->Write(iter->first.c_str()) == 0) {
66 msg<<
"Error while writing object \""<< iter->first;;
67 err.SetDescription(__FILE__,__LINE__,msg.str());
70 if(iter->second)
delete iter->second;
86 msg<<
"Error while writing object \""<< name <<
"\": "<<
" null pointer";
87 err.SetDescription(__FILE__,__LINE__,msg.str());
94 if(name ==
"RootFileWriter@FlushCache") {
100 msg<<
"Cannot execute command RootFileWriter@FlushCache because the QTFilePointer is not valid";
101 err.SetDescription(__FILE__,__LINE__,msg.str());
106 std::map<std::string, QObject*>::iterator iter =
fObjectCache.find(name);
107 if(iter !=
fObjectCache.end() && iter->second)
delete iter->second;
112 const TObject* wobj = 0;
113 if(name.find_first_of(
'@') == std::string::npos) {
119 msg<<
"Error while writing object in Old format \""<< name <<
"\": "<<
" conversion failed (try to look at QObjectR::Get)";
120 err.SetDescription(__FILE__,__LINE__,msg.str());
128 if(wobj->Write(name.c_str()) == 0) {
131 msg<<
"Error while writing object \""<< name;;
132 err.SetDescription(__FILE__,__LINE__,msg.str());
144 if(opt ==
"CURRENT_WRITER") {
148 fFile =
new TFile(filename.c_str(),
"RECREATE");
152 err.SetDescription(__FILE__,__LINE__,std::string(
"Cannot open file ") + filename);
162 err.SetDescription(__FILE__,__LINE__,std::string(
"Cannot create directory \"") + std::string(
ROOT_GLOBAL_DIR) + std::string(
"\" in file: ") + filename);
175 if(gROOT->GetListOfFiles()->GetSize() > 0)
delete fFile;
#define REGISTER_GLOBAL_WRITER(clazz, ext)
global writer for root files
QError Open(const std::string &filename, const std::string &opt="")
Open file, called by QGlobalWriterDispatcher.
std::map< std::string, Diana::QObject * > fObjectCache
QError FlushCache(TFile *oFile)
QError SetQObject(const std::string &name, const std::string &className, const Diana::QObject *obj, const std::string &descr)
QError Close()
Close file, called by QGlobalWriterDispatcher.
error class with error type and description
Abstract class for global writers.
one-line description of your QObject
the Diana namespace is needed because sometimes we use Qt libraries, that use same class names of our...