#include "HistMan/HistMan.h"
#include <TSystem.h>
#include <TKey.h>
#include <TROOT.h>
#include <TFile.h>
#include <TH1.h>
#include <TH2.h>
#include <TProfile.h>
#include <TTree.h>
#include <string>
#include <vector>
#include <iostream>
#include <cassert>
#include <algorithm>
Include dependency graph for HistMan.cc:
Go to the source code of this file.
Namespaces | |
namespace | std |
Functions | |
vector< string > | parse_path (const char *path) |
TFolder & | mkdir_p (TFolder &top, const char *path) |
static TFolder * | directory_to_folder (TDirectory &directory) |
static void | folder_to_directory (TFolder *folder, TDirectory &directory) |
Variables | |
const char | baseName [] = "stats" |
static int | histcount = 0 |
vector<string> parse_path | ( | const char * | path | ) |
Definition at line 22 of file HistMan.cc.
00023 { 00024 vector<string> vs; 00025 string p(path); 00026 string::iterator it1=p.begin(), it2, done=p.end(); 00027 for (it2=find(p.begin(),done,'/'); it2 != done; it2=find(it1,done,'/')) { 00028 if (it1==it2) { 00029 ++it1; 00030 continue; 00031 } 00032 string dir(it1,it2); 00033 if (dir != ".") 00034 vs.push_back(dir); 00035 it1 = it2+1; 00036 } 00037 if (it1 != it2) { 00038 string dir(it1,it2); 00039 if (dir != ".") 00040 vs.push_back(string(it1,it2)); 00041 } 00042 return vs; 00043 }
TFolder& mkdir_p | ( | TFolder & | top, | |
const char * | path | |||
) |
Definition at line 45 of file HistMan.cc.
00046 { 00047 if (!path || path[0] == '\0') return top; 00048 00049 vector<string> vp = parse_path(path); 00050 TFolder* folder = ⊤ 00051 for (unsigned int ind=0; ind < vp.size(); ++ind) { 00052 const char* name = vp[ind].c_str(); 00053 TFolder* tmp = dynamic_cast<TFolder*>(folder->FindObject(name)); 00054 if (tmp) folder = tmp; 00055 else folder = folder->AddFolder(name,name); 00056 } 00057 return *folder; 00058 }
static TFolder* directory_to_folder | ( | TDirectory & | directory | ) | [static] |
Definition at line 80 of file HistMan.cc.
00081 { 00082 TFolder* folder = new TFolder(directory.GetName(),directory.GetName()); 00083 00084 TList *l = directory.GetListOfKeys(); 00085 if (!l) return folder; 00086 00087 TIter it(l->MakeIterator()); 00088 TObject *obj=0; 00089 while ( (obj=it()) ) { 00090 TKey* key = dynamic_cast<TKey*>(obj); 00091 assert(key); 00092 obj = directory.Get(key->GetName()); 00093 TDirectory* dir = dynamic_cast<TDirectory*>(obj); 00094 if (dir) { 00095 TFolder* fol = directory_to_folder(*dir); 00096 //cerr << "Adding folder " << fol->GetName() 00097 //<< " to folder " << folder->GetName() 00098 //<< " from directory " << dir->GetName() << endl; 00099 folder->Add(fol); 00100 } 00101 else { 00102 //cerr << "Adding object " << obj->GetName() 00103 //<< " to folder " << folder->GetName() << endl; 00104 folder->Add(obj); 00105 } 00106 } 00107 return folder; 00108 }
static void folder_to_directory | ( | TFolder * | folder, | |
TDirectory & | directory | |||
) | [static] |
Definition at line 211 of file HistMan.cc.
00212 { 00213 TDirectory*& prevdir = gDirectory, *dir = 0; 00214 00215 TObject* obj = directory.Get(folder->GetName()); 00216 if (obj) { 00217 dir = dynamic_cast<TDirectory*>(obj); 00218 if (!dir) { 00219 cerr << "Non-directory object \"" << folder->GetName() 00220 << "\" already in directory\n"; 00221 return; 00222 } 00223 } 00224 else 00225 dir = directory.mkdir(folder->GetName()); 00226 00227 dir->cd(); 00228 00229 TCollection* sf = folder->GetListOfFolders(); 00230 if (!sf) { 00231 prevdir->cd(); 00232 return; 00233 } 00234 00235 TIter it(sf->MakeIterator()); 00236 obj=0; 00237 while ( (obj=it()) ) { 00238 TFolder *fol = dynamic_cast<TFolder*>(obj); 00239 if (fol) folder_to_directory(fol,*dir); 00240 else { 00241 dir->cd(); 00242 obj->Write(); 00243 } 00244 } 00245 prevdir->cd(); 00246 }
const char baseName[] = "stats" |
Definition at line 20 of file HistMan.cc.
int histcount = 0 [static] |
Definition at line 60 of file HistMan.cc.