ROOT logo
#ifndef HRICH700HISTMANAGER_H_
#define HRICH700HISTMANAGER_H_

#include "TObject.h"
#include "TH1.h"
#include "TH2.h"
#include "TH3.h"
#include "TGraph.h"
#include "TGraph2D.h"
#include "TProfile.h"
#include "TProfile2D.h"
#include "TCanvas.h"
#include <iostream>
#include <map>
#include <string>
#include <vector>
#include <cassert>
#include <utility>
#include <functional>

class TFile;
class TNamed;

using std::map;
using std::make_pair;
using std::string;
using std::vector;

class HRich700HistManager : public TObject
{
public:

   HRich700HistManager();

   virtual ~HRich700HistManager();

   void Add( const string& name,TNamed* object);

   template<class T> void Create1(const string& name,
				  const string& title,
				  Int_t nofBins,
				  Double_t minBin,
				  Double_t maxBin)
   {
       // Helper function for creation of 1-dimensional histograms and profiles.
       // Template argument is a real object type that has to be created, for example,
       //  Create1<TH1F>("name", "title", 100, 0, 100);
       // name Object name.
       // title Object title.
       // nofBins Number of bins.
       // minBin Low axis limit.
       //maxBin Upper axis limit.

       T* h = new T(name.c_str(), title.c_str(), nofBins, minBin, maxBin);
       Add(name, h);
   };

   template<class T> void Create2(const string& name,
				  const string& title,
				  Int_t nofBinsX,
				  Double_t minBinX,
				  Double_t maxBinX,
				  Int_t nofBinsY,
				  Double_t minBinY,
				  Double_t maxBinY)
   {
       // Helper function for creation of 2-dimensional histograms and profiles.
       // Template argument is a real object type that has to be created, for example,
       // Create2<TH2F>("name", "title", 100, 0, 100, 200, 0, 200);
       // name Object name.
       //  title Object title.
       // nofBinsX Number of bins for X axis.
       // minBinX Low X axis limit.
       // maxBinX Upper X axis limit.
       // nofBinsY Number of bins for Y axis.
       // minBinY Low Y axis limit.
       //maxBinY Upper Y axis limit.

       T* h = new T(name.c_str(), title.c_str(), nofBinsX, minBinX, maxBinX, nofBinsY, minBinY, maxBinY);
       Add(name, h);
   };

   template<class T> void Create3(const string& name,
				  const string& title,
				  Int_t nofBinsX,
				  Double_t minBinX,
				  Double_t maxBinX,
				  Int_t nofBinsY,
				  Double_t minBinY,
				  Double_t maxBinY,
				  Int_t nofBinsZ,
				  Double_t minBinZ,
				  Double_t maxBinZ)
   {
       // Helper function for creation of 3-dimensional histograms and profiles.
       // Template argument is a real object type that has to be created, for example,
       // Create3<TH3F>("name", "title", 100, 0, 100, 200, 0, 200, 300, 0, 300);
       // name Object name.
       // title Object title.
       // nofBinsX Number of bins for X axis.
       // minBinX Low X axis limit.
       // maxBinX Upper X axis limit.
       // nofBinsY Number of bins for Y axis.
       // minBinY Low Y axis limit.
       // maxBinY Upper Y axis limit.
       // nofBinsZ Number of bins for Z axis.
       // minBinZ Low Z axis limit.
       // maxBinZ Upper Z axis limit.

       T* h = new T(name.c_str(), title.c_str(), nofBinsX, minBinX, maxBinX, nofBinsY, minBinY, maxBinY, nofBinsZ, minBinZ, maxBinZ);
       Add(name, h);
}

   TH1* H1( const string& name) const;
   TH2* H2( const string& name) const;
   TH3* H3( const string& name) const;
   TGraph*     G1( const string& name) const;
   TGraph2D*   G2( const string& name) const;
   TProfile*   P1( const string& name) const;
   TProfile2D* P2( const string& name) const ;

   Bool_t Exists( const string& name) const;

   void WriteToFile();
   void ReadFromFile(TFile* file);
   void AddTNamedObject(TObject* obj);
   void AddTDirectoryObject(TObject* obj);
   void Clear(Option_t*);
   void ShrinkEmptyBinsH1(const string& histName);
   void ShrinkEmptyBinsH2(const string& histName);
   void Scale( const string& histName, Double_t scale);
   void NormalizeToIntegral(const string& histName);
   void Rebin( const string& histName, Int_t ngroup);
   string ToString() const;

    TCanvas* CreateCanvas(
         const string& name,
         const string& title,
         Int_t width,
         Int_t height);

    void SaveCanvasToImage(
         const string& outputDir,
         const string& options = "png");

    // Operator << for convenient output to std::ostream.
    // return Insertion stream in order to be able to call a succession of insertion operations.

   friend std::ostream& operator<<(std::ostream& strm, const HRich700HistManager& histManager) {
      strm << histManager.ToString();
      return strm;
   }

private:

   // Map of histogram (graph) name to its pointer
   map<string, TNamed*> fMap;

   vector<TCanvas*> fCanvases; // Pointers to all created canvases

   ClassDef(HRich700HistManager, 1)
};

#endif /* HRICH700HISTMANAGER_H_ */
 hrich700histmanager.h:1
 hrich700histmanager.h:2
 hrich700histmanager.h:3
 hrich700histmanager.h:4
 hrich700histmanager.h:5
 hrich700histmanager.h:6
 hrich700histmanager.h:7
 hrich700histmanager.h:8
 hrich700histmanager.h:9
 hrich700histmanager.h:10
 hrich700histmanager.h:11
 hrich700histmanager.h:12
 hrich700histmanager.h:13
 hrich700histmanager.h:14
 hrich700histmanager.h:15
 hrich700histmanager.h:16
 hrich700histmanager.h:17
 hrich700histmanager.h:18
 hrich700histmanager.h:19
 hrich700histmanager.h:20
 hrich700histmanager.h:21
 hrich700histmanager.h:22
 hrich700histmanager.h:23
 hrich700histmanager.h:24
 hrich700histmanager.h:25
 hrich700histmanager.h:26
 hrich700histmanager.h:27
 hrich700histmanager.h:28
 hrich700histmanager.h:29
 hrich700histmanager.h:30
 hrich700histmanager.h:31
 hrich700histmanager.h:32
 hrich700histmanager.h:33
 hrich700histmanager.h:34
 hrich700histmanager.h:35
 hrich700histmanager.h:36
 hrich700histmanager.h:37
 hrich700histmanager.h:38
 hrich700histmanager.h:39
 hrich700histmanager.h:40
 hrich700histmanager.h:41
 hrich700histmanager.h:42
 hrich700histmanager.h:43
 hrich700histmanager.h:44
 hrich700histmanager.h:45
 hrich700histmanager.h:46
 hrich700histmanager.h:47
 hrich700histmanager.h:48
 hrich700histmanager.h:49
 hrich700histmanager.h:50
 hrich700histmanager.h:51
 hrich700histmanager.h:52
 hrich700histmanager.h:53
 hrich700histmanager.h:54
 hrich700histmanager.h:55
 hrich700histmanager.h:56
 hrich700histmanager.h:57
 hrich700histmanager.h:58
 hrich700histmanager.h:59
 hrich700histmanager.h:60
 hrich700histmanager.h:61
 hrich700histmanager.h:62
 hrich700histmanager.h:63
 hrich700histmanager.h:64
 hrich700histmanager.h:65
 hrich700histmanager.h:66
 hrich700histmanager.h:67
 hrich700histmanager.h:68
 hrich700histmanager.h:69
 hrich700histmanager.h:70
 hrich700histmanager.h:71
 hrich700histmanager.h:72
 hrich700histmanager.h:73
 hrich700histmanager.h:74
 hrich700histmanager.h:75
 hrich700histmanager.h:76
 hrich700histmanager.h:77
 hrich700histmanager.h:78
 hrich700histmanager.h:79
 hrich700histmanager.h:80
 hrich700histmanager.h:81
 hrich700histmanager.h:82
 hrich700histmanager.h:83
 hrich700histmanager.h:84
 hrich700histmanager.h:85
 hrich700histmanager.h:86
 hrich700histmanager.h:87
 hrich700histmanager.h:88
 hrich700histmanager.h:89
 hrich700histmanager.h:90
 hrich700histmanager.h:91
 hrich700histmanager.h:92
 hrich700histmanager.h:93
 hrich700histmanager.h:94
 hrich700histmanager.h:95
 hrich700histmanager.h:96
 hrich700histmanager.h:97
 hrich700histmanager.h:98
 hrich700histmanager.h:99
 hrich700histmanager.h:100
 hrich700histmanager.h:101
 hrich700histmanager.h:102
 hrich700histmanager.h:103
 hrich700histmanager.h:104
 hrich700histmanager.h:105
 hrich700histmanager.h:106
 hrich700histmanager.h:107
 hrich700histmanager.h:108
 hrich700histmanager.h:109
 hrich700histmanager.h:110
 hrich700histmanager.h:111
 hrich700histmanager.h:112
 hrich700histmanager.h:113
 hrich700histmanager.h:114
 hrich700histmanager.h:115
 hrich700histmanager.h:116
 hrich700histmanager.h:117
 hrich700histmanager.h:118
 hrich700histmanager.h:119
 hrich700histmanager.h:120
 hrich700histmanager.h:121
 hrich700histmanager.h:122
 hrich700histmanager.h:123
 hrich700histmanager.h:124
 hrich700histmanager.h:125
 hrich700histmanager.h:126
 hrich700histmanager.h:127
 hrich700histmanager.h:128
 hrich700histmanager.h:129
 hrich700histmanager.h:130
 hrich700histmanager.h:131
 hrich700histmanager.h:132
 hrich700histmanager.h:133
 hrich700histmanager.h:134
 hrich700histmanager.h:135
 hrich700histmanager.h:136
 hrich700histmanager.h:137
 hrich700histmanager.h:138
 hrich700histmanager.h:139
 hrich700histmanager.h:140
 hrich700histmanager.h:141
 hrich700histmanager.h:142
 hrich700histmanager.h:143
 hrich700histmanager.h:144
 hrich700histmanager.h:145
 hrich700histmanager.h:146
 hrich700histmanager.h:147
 hrich700histmanager.h:148
 hrich700histmanager.h:149
 hrich700histmanager.h:150
 hrich700histmanager.h:151
 hrich700histmanager.h:152
 hrich700histmanager.h:153
 hrich700histmanager.h:154
 hrich700histmanager.h:155
 hrich700histmanager.h:156
 hrich700histmanager.h:157
 hrich700histmanager.h:158
 hrich700histmanager.h:159
 hrich700histmanager.h:160
 hrich700histmanager.h:161
 hrich700histmanager.h:162
 hrich700histmanager.h:163
 hrich700histmanager.h:164