| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

HistMan.cc File Reference

#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

Function Documentation

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 = &top;
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 }


Variable Documentation

const char baseName[] = "stats"

Definition at line 20 of file HistMan.cc.

int histcount = 0 [static]

Definition at line 60 of file HistMan.cc.

| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:06:26 2011 for HistMan by doxygen 1.4.7