Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

PhysicsNtuple/Hist/HistMan.h

Go to the documentation of this file.
00001 #ifndef ANP_HISTMAN_H
00002 #define ANP_HISTMAN_H
00003 
00004 // C++
00005 #include <iostream>
00006 #include <map>
00007 #include <string>
00008 #include <vector>
00009 
00010 // Local
00011 #include "PhysicsNtuple/Hist1d.h"
00012 #include "PhysicsNtuple/Mutex.h"
00013 
00014 class TiXmlElement;
00015 class TDirectory;
00016 class TH1;
00017 class TH2;
00018 
00019 namespace Anp
00020 {   
00021    class AxisInfo
00022    {
00023    public:
00024       
00025       AxisInfo();
00026       ~AxisInfo();
00027 
00028       const std::string& GetTitle() const;
00029       
00030       double GetMin() const;
00031       double GetMax() const;
00032       int GetNbins() const;
00033 
00034       bool Valid() const;
00035 
00036       const std::vector<double>& GetBins() const;
00037 
00038       void Print(std::ostream& o = std::cout) const;
00039 
00040    protected:
00041 
00042       friend class HistMan;
00043       
00044       int fNbins;
00045       double fMin;
00046       double fMax;
00047       
00048       bool fValid;
00049 
00050       std::vector<double> fBins;
00051 
00052       std::string fTitle;
00053    };
00054 
00055    class HistInfo
00056    {
00057    public:
00058       
00059       HistInfo();
00060       ~HistInfo();
00061       
00062       const std::string& GetName() const;
00063       const std::string& GetTitle() const;
00064       
00065       const AxisInfo& GetXaxis() const;
00066       const AxisInfo& GetYaxis() const;
00067 
00068       const std::string& GetKey() const;
00069 
00070       bool operator <(const HistInfo &rhs) const;
00071       bool operator==(const HistInfo &rhs) const;
00072 
00073       void Print(std::ostream& o = std::cout) const;
00074 
00075       friend class HistMan;
00076 
00077    protected:
00078       
00079       std::string fKey;
00080 
00081       std::string fName;
00082       std::string fTitle;
00083 
00084       AxisInfo fXaxis;
00085       AxisInfo fYaxis;
00086    };
00087 
00088    class HistMan
00089    {
00090    public:
00091       
00092       typedef std::map<std::string, HistInfo> InfoMap;
00093       typedef InfoMap::const_iterator InfoIter;
00094       typedef std::map<std::string, InfoMap> DirMap;
00095       typedef DirMap::const_iterator DirIter;
00096 
00097    public:
00098 
00099       static HistMan& Instance();
00100 
00101       bool ReadFile(const std::string file);
00102 
00103       bool KeyExists(int key, const std::string &dir = ".") const;
00104       bool KeyExists(const std::string &key, const std::string &dir = ".") const;
00105 
00106       unsigned int NMiss() const;
00107 
00108       const Hist1d<double> CreateHist1d(int key, const std::string &dir = ".");
00109       const Hist1d<double> CreateHist1d(const std::string &key, const std::string &dir = ".");
00110 
00111       TH1* CreateTH1(int key, const std::string &dir = ".");
00112       TH2* CreateTH2(int key, const std::string &dir = ".");
00113 
00114       TH1* CreateTH1(const std::string &key, const std::string &dir = ".");
00115       TH2* CreateTH2(const std::string &key, const std::string &dir = ".");
00116 
00117       TH2* GetTH2(int xkey, int ykey, const std::string &dir = ".");
00118       TH2* GetTH2(const std::string &xkey, const std::string &ykey, const std::string &dir = ".");
00119 
00120       void Print(std::ostream& o = std::cout) const;
00121 
00122    private:     
00123 
00124       HistMan();
00125       ~HistMan();
00126 
00127       HistMan(const HistMan &);
00128       const HistMan& operator=(const HistMan &);
00129       
00130    private:
00131       
00132       const Hist1d<double> CreateHist1d(const HistInfo &info);
00133 
00134       TH1* CreateTH1(const HistInfo &info, const std::string &opt = "double");
00135       TH2* CreateTH2(const HistInfo &info, const std::string &opt = "float");
00136 
00137       bool ReadHistogramBlock(TiXmlElement &hist);
00138       bool ReadHistogram(const TiXmlElement &hist, HistInfo &info);
00139       bool ReadAxis(const TiXmlElement &hist, AxisInfo &info);
00140       
00141       const std::vector<int> GetIntVec(const std::string &list) const;
00142       const std::vector<std::string> GetStringVec(const std::string &list) const;
00143 
00144       const std::string Convert(int key, int width = 0) const;
00145       unsigned short ComputeWidth(int key) const;
00146 
00147    private:
00148       
00149       unsigned int fNMiss;
00150 
00151       unsigned short fKeyWidth;
00152 
00153       DirMap fDirMap; 
00154 
00155       static HistMan *fgInstance; 
00156      
00157       static Mutex fMutex; 
00158    }; 
00159 
00160    TH1* MakeTH1(const std::string &dir, TDirectory *dir_, const std::string &key);
00161    TH2* MakeTH2(const std::string &dir, TDirectory *dir_, const std::string &key);
00162 
00163    std::ostream& operator<<(std::ostream& o, const HistInfo &self);
00164    std::ostream& operator<<(std::ostream& o, const AxisInfo &self);
00165 }
00166 
00167 #endif

Generated on Mon Feb 15 11:06:47 2010 for loon by  doxygen 1.3.9.1