1 // @(#)root/hist:$Id$ 2 // Author: Rene Brun 26/12/94 3 4 /************************************************************************* 5 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. * 6 * All rights reserved. * 7 * * 8 * For the licensing terms see $ROOTSYS/LICENSE. * 9 * For the list of contributors see $ROOTSYS/README/CREDITS. * 10 *************************************************************************/ 11 12 #ifndef ROOT_TH2 13 #define ROOT_TH2 14 15 16 ////////////////////////////////////////////////////////////////////////// 17 // // 18 // TH2 // 19 // // 20 // 2-Dim histogram base class. // 21 // // 22 ////////////////////////////////////////////////////////////////////////// 23 24 #ifndef ROOT_TH1 25 #include "TH1.h" 26 #endif 27 #ifndef ROOT_TMatrixFBasefwd 28 #include "TMatrixFBasefwd.h" 29 #endif 30 #ifndef ROOT_TMatrixDBasefwd 31 #include "TMatrixDBasefwd.h" 32 #endif 33 34 class TProfile; 35 36 class TH2 : public TH1 { 37 38 protected: 39 Double_t fScalefactor; //Scale factor 40 Double_t fTsumwy; //Total Sum of weight*Y 41 Double_t fTsumwy2; //Total Sum of weight*Y*Y 42 Double_t fTsumwxy; //Total Sum of weight*X*Y 43 44 TH2(); 45 TH2(const char *name,const char *title,Int_t nbinsx,Double_t xlow,Double_t xup 46 ,Int_t nbinsy,Double_t ylow,Double_t yup); 47 TH2(const char *name,const char *title,Int_t nbinsx,const Double_t *xbins 48 ,Int_t nbinsy,Double_t ylow,Double_t yup); 49 TH2(const char *name,const char *title,Int_t nbinsx,Double_t xlow,Double_t xup 50 ,Int_t nbinsy,const Double_t *ybins); 51 TH2(const char *name,const char *title,Int_t nbinsx,const Double_t *xbins 52 ,Int_t nbinsy,const Double_t *ybins); 53 TH2(const char *name,const char *title,Int_t nbinsx,const Float_t *xbins 54 ,Int_t nbinsy,const Float_t *ybins); 55 56 virtual Int_t BufferFill(Double_t x, Double_t y, Double_t w); 57 virtual TH1D *DoProjection(bool onX, const char *name, Int_t firstbin, Int_t lastbin, Option_t *option) const; 58 virtual TProfile *DoProfile(bool onX, const char *name, Int_t firstbin, Int_t lastbin, Option_t *option) const; 59 virtual void DoFitSlices(bool onX, TF1 *f1, Int_t firstbin, Int_t lastbin, Int_t cut, Option_t *option, TObjArray* arr); 60 61 Int_t BufferFill(Double_t, Double_t) {return -2;} //may not use 62 Int_t Fill(Double_t); //MayNotUse 63 Int_t Fill(const char*, Double_t) { return Fill(0);} //MayNotUse 64 65 public: 66 TH2(const TH2&); 67 virtual ~TH2(); 68 virtual Int_t BufferEmpty(Int_t action=0); 69 virtual void Copy(TObject &hnew) const; 70 virtual Int_t Fill(Double_t x, Double_t y); 71 virtual Int_t Fill(Double_t x, Double_t y, Double_t w); 72 virtual Int_t Fill(Double_t x, const char *namey, Double_t w); 73 virtual Int_t Fill(const char *namex, Double_t y, Double_t w); 74 virtual Int_t Fill(const char *namex, const char *namey, Double_t w); 75 virtual void FillN(Int_t, const Double_t *, const Double_t *, Int_t) {;} //MayNotUse 76 virtual void FillN(Int_t ntimes, const Double_t *x, const Double_t *y, const Double_t *w, Int_t stride=1); 77 virtual void FillRandom(const char *fname, Int_t ntimes=5000); 78 virtual void FillRandom(TH1 *h, Int_t ntimes=5000); 79 virtual Int_t FindFirstBinAbove(Double_t threshold=0, Int_t axis=1) const; 80 virtual Int_t FindLastBinAbove (Double_t threshold=0, Int_t axis=1) const; 81 virtual void FitSlicesX(TF1 *f1=0,Int_t firstybin=0, Int_t lastybin=-1, Int_t cut=0, Option_t *option="QNR", TObjArray* arr = 0); // *MENU* 82 virtual void FitSlicesY(TF1 *f1=0,Int_t firstxbin=0, Int_t lastxbin=-1, Int_t cut=0, Option_t *option="QNR", TObjArray* arr = 0); // *MENU* 83 virtual Double_t GetBinWithContent2(Double_t c, Int_t &binx, Int_t &biny, Int_t firstxbin=1, Int_t lastxbin=-1,Int_t firstybin=1, Int_t lastybin=-1, Double_t maxdiff=0) const; 84 using TH1::GetBinErrorLow; 85 using TH1::GetBinErrorUp; 86 virtual Double_t GetBinErrorLow(Int_t binx, Int_t biny) { return TH1::GetBinErrorLow( GetBin(binx, biny) ); } 87 virtual Double_t GetBinErrorUp(Int_t binx, Int_t biny) { return TH1::GetBinErrorUp( GetBin(binx, biny) ); } 88 virtual Double_t GetCorrelationFactor(Int_t axis1=1,Int_t axis2=2) const; 89 virtual Double_t GetCovariance(Int_t axis1=1,Int_t axis2=2) const; 90 virtual void GetRandom2(Double_t &x, Double_t &y); 91 virtual void GetStats(Double_t *stats) const; 92 virtual Double_t Integral(Option_t *option="") const; 93 //virtual Double_t Integral(Int_t, Int_t, Option_t * ="") const {return 0;} 94 using TH1::Integral; 95 virtual Double_t Integral(Int_t binx1, Int_t binx2, Int_t biny1, Int_t biny2, Option_t *option="") const; 96 virtual Double_t Integral(Int_t, Int_t, Int_t, Int_t, Int_t, Int_t, Option_t * ="") const {return 0;} 97 using TH1::IntegralAndError; 98 virtual Double_t IntegralAndError(Int_t binx1, Int_t binx2, Int_t biny1, Int_t biny2, Double_t & err, Option_t *option="") const; 99 virtual Double_t Interpolate(Double_t x); 100 virtual Double_t Interpolate(Double_t x, Double_t y); 101 virtual Double_t Interpolate(Double_t x, Double_t y, Double_t z); 102 virtual Double_t KolmogorovTest(const TH1 *h2, Option_t *option="") const; 103 virtual Long64_t Merge(TCollection *list); 104 virtual TH2 *RebinX(Int_t ngroup=2, const char *newname=""); 105 virtual TH2 *RebinY(Int_t ngroup=2, const char *newname=""); 106 virtual TH2 *Rebin2D(Int_t nxgroup=2, Int_t nygroup=2, const char *newname=""); 107 TProfile *ProfileX(const char *name="_pfx", Int_t firstybin=1, Int_t lastybin=-1, Option_t *option="") const; // *MENU* 108 TProfile *ProfileY(const char *name="_pfy", Int_t firstxbin=1, Int_t lastxbin=-1, Option_t *option="") const; // *MENU* 109 TH1D *ProjectionX(const char *name="_px", Int_t firstybin=0, Int_t lastybin=-1, Option_t *option="") const; // *MENU* 110 TH1D *ProjectionY(const char *name="_py", Int_t firstxbin=0, Int_t lastxbin=-1, Option_t *option="") const; // *MENU* 111 virtual void PutStats(Double_t *stats); 112 virtual void Reset(Option_t *option=""); 113 virtual void SetShowProjectionX(Int_t nbins=1); // *MENU* 114 virtual void SetShowProjectionY(Int_t nbins=1); // *MENU* 115 virtual TH1 *ShowBackground(Int_t niter=20, Option_t *option="same"); 116 virtual Int_t ShowPeaks(Double_t sigma=2, Option_t *option="", Double_t threshold=0.05); // *MENU* 117 virtual void Smooth(Int_t ntimes=1, Option_t *option=""); // *MENU* 118 119 ClassDef(TH2,4) //2-Dim histogram base class 120 }; 121 122 123 //______________________________________________________________________________ 124 125 class TH2C : public TH2, public TArrayC { 126 127 public: 128 TH2C(); 129 TH2C(const char *name,const char *title,Int_t nbinsx,Double_t xlow,Double_t xup 130 ,Int_t nbinsy,Double_t ylow,Double_t yup); 131 TH2C(const char *name,const char *title,Int_t nbinsx,const Double_t *xbins 132 ,Int_t nbinsy,Double_t ylow,Double_t yup); 133 TH2C(const char *name,const char *title,Int_t nbinsx,Double_t xlow,Double_t xup 134 ,Int_t nbinsy,const Double_t *ybins); 135 TH2C(const char *name,const char *title,Int_t nbinsx,const Double_t *xbins 136 ,Int_t nbinsy,const Double_t *ybins); 137 TH2C(const char *name,const char *title,Int_t nbinsx,const Float_t *xbins 138 ,Int_t nbinsy,const Float_t *ybins); 139 TH2C(const TH2C &h2c); 140 virtual ~TH2C(); 141 virtual void AddBinContent(Int_t bin); 142 virtual void AddBinContent(Int_t bin, Double_t w); 143 virtual void Copy(TObject &hnew) const; 144 virtual TH1 *DrawCopy(Option_t *option="") const; 145 virtual Double_t GetBinContent(Int_t bin) const; 146 virtual Double_t GetBinContent(Int_t binx, Int_t biny) const {return GetBinContent(GetBin(binx,biny));} 147 virtual Double_t GetBinContent(Int_t binx, Int_t biny, Int_t) const {return GetBinContent(GetBin(binx,biny));} 148 virtual void Reset(Option_t *option=""); 149 virtual void SetBinContent(Int_t bin, Double_t content); 150 virtual void SetBinContent(Int_t binx, Int_t biny, Double_t content) {SetBinContent(GetBin(binx,biny),content);} 151 virtual void SetBinContent(Int_t binx, Int_t biny, Int_t, Double_t content) {SetBinContent(GetBin(binx,biny),content);} 152 virtual void SetBinsLength(Int_t n=-1); 153 TH2C& operator=(const TH2C &h1); 154 friend TH2C operator*(Float_t c1, TH2C &h1); 155 friend TH2C operator*(TH2C &h1, Float_t c1) {return operator*(c1,h1);} 156 friend TH2C operator+(TH2C &h1, TH2C &h2); 157 friend TH2C operator-(TH2C &h1, TH2C &h2); 158 friend TH2C operator*(TH2C &h1, TH2C &h2); 159 friend TH2C operator/(TH2C &h1, TH2C &h2); 160 161 ClassDef(TH2C,3) //2-Dim histograms (one char per channel) 162 }; 163 164 165 //______________________________________________________________________________ 166 167 class TH2S : public TH2, public TArrayS { 168 169 public: 170 TH2S(); 171 TH2S(const char *name,const char *title,Int_t nbinsx,Double_t xlow,Double_t xup 172 ,Int_t nbinsy,Double_t ylow,Double_t yup); 173 TH2S(const char *name,const char *title,Int_t nbinsx,const Double_t *xbins 174 ,Int_t nbinsy,Double_t ylow,Double_t yup); 175 TH2S(const char *name,const char *title,Int_t nbinsx,Double_t xlow,Double_t xup 176 ,Int_t nbinsy,const Double_t *ybins); 177 TH2S(const char *name,const char *title,Int_t nbinsx,const Double_t *xbins 178 ,Int_t nbinsy,const Double_t *ybins); 179 TH2S(const char *name,const char *title,Int_t nbinsx,const Float_t *xbins 180 ,Int_t nbinsy,const Float_t *ybins); 181 TH2S(const TH2S &h2s); 182 virtual ~TH2S(); 183 virtual void AddBinContent(Int_t bin); 184 virtual void AddBinContent(Int_t bin, Double_t w); 185 virtual void Copy(TObject &hnew) const; 186 virtual TH1 *DrawCopy(Option_t *option="") const; 187 virtual Double_t GetBinContent(Int_t bin) const; 188 virtual Double_t GetBinContent(Int_t binx, Int_t biny) const {return GetBinContent(GetBin(binx,biny));} 189 virtual Double_t GetBinContent(Int_t binx, Int_t biny, Int_t) const {return GetBinContent(GetBin(binx,biny));} 190 virtual void Reset(Option_t *option=""); 191 virtual void SetBinContent(Int_t bin, Double_t content); 192 virtual void SetBinContent(Int_t binx, Int_t biny, Double_t content) {SetBinContent(GetBin(binx,biny),content);} 193 virtual void SetBinContent(Int_t binx, Int_t biny, Int_t, Double_t content) {SetBinContent(GetBin(binx,biny),content);} 194 virtual void SetBinsLength(Int_t n=-1); 195 TH2S& operator=(const TH2S &h1); 196 friend TH2S operator*(Float_t c1, TH2S &h1); 197 friend TH2S operator*(TH2S &h1, Float_t c1) {return operator*(c1,h1);} 198 friend TH2S operator+(TH2S &h1, TH2S &h2); 199 friend TH2S operator-(TH2S &h1, TH2S &h2); 200 friend TH2S operator*(TH2S &h1, TH2S &h2); 201 friend TH2S operator/(TH2S &h1, TH2S &h2); 202 203 ClassDef(TH2S,3) //2-Dim histograms (one short per channel) 204 }; 205 206 207 //______________________________________________________________________________ 208 209 class TH2I : public TH2, public TArrayI { 210 211 public: 212 TH2I(); 213 TH2I(const char *name,const char *title,Int_t nbinsx,Double_t xlow,Double_t xup 214 ,Int_t nbinsy,Double_t ylow,Double_t yup); 215 TH2I(const char *name,const char *title,Int_t nbinsx,const Double_t *xbins 216 ,Int_t nbinsy,Double_t ylow,Double_t yup); 217 TH2I(const char *name,const char *title,Int_t nbinsx,Double_t xlow,Double_t xup 218 ,Int_t nbinsy,const Double_t *ybins); 219 TH2I(const char *name,const char *title,Int_t nbinsx,const Double_t *xbins 220 ,Int_t nbinsy,const Double_t *ybins); 221 TH2I(const char *name,const char *title,Int_t nbinsx,const Float_t *xbins 222 ,Int_t nbinsy,const Float_t *ybins); 223 TH2I(const TH2I &h2i); 224 virtual ~TH2I(); 225 virtual void AddBinContent(Int_t bin); 226 virtual void AddBinContent(Int_t bin, Double_t w); 227 virtual void Copy(TObject &hnew) const; 228 virtual TH1 *DrawCopy(Option_t *option="") const; 229 virtual Double_t GetBinContent(Int_t bin) const; 230 virtual Double_t GetBinContent(Int_t binx, Int_t biny) const {return GetBinContent(GetBin(binx,biny));} 231 virtual Double_t GetBinContent(Int_t binx, Int_t biny, Int_t) const {return GetBinContent(GetBin(binx,biny));} 232 virtual void Reset(Option_t *option=""); 233 virtual void SetBinContent(Int_t bin, Double_t content); 234 virtual void SetBinContent(Int_t binx, Int_t biny, Double_t content) {SetBinContent(GetBin(binx,biny),content);} 235 virtual void SetBinContent(Int_t binx, Int_t biny, Int_t, Double_t content) {SetBinContent(GetBin(binx,biny),content);} 236 virtual void SetBinsLength(Int_t n=-1); 237 TH2I& operator=(const TH2I &h1); 238 friend TH2I operator*(Float_t c1, TH2I &h1); 239 friend TH2I operator*(TH2I &h1, Float_t c1) {return operator*(c1,h1);} 240 friend TH2I operator+(TH2I &h1, TH2I &h2); 241 friend TH2I operator-(TH2I &h1, TH2I &h2); 242 friend TH2I operator*(TH2I &h1, TH2I &h2); 243 friend TH2I operator/(TH2I &h1, TH2I &h2); 244 245 ClassDef(TH2I,3) //2-Dim histograms (one 32 bits integer per channel) 246 }; 247 248 249 //______________________________________________________________________________ 250 251 class TH2F : public TH2, public TArrayF { 252 253 public: 254 TH2F(); 255 TH2F(const char *name,const char *title,Int_t nbinsx,Double_t xlow,Double_t xup 256 ,Int_t nbinsy,Double_t ylow,Double_t yup); 257 TH2F(const char *name,const char *title,Int_t nbinsx,const Double_t *xbins 258 ,Int_t nbinsy,Double_t ylow,Double_t yup); 259 TH2F(const char *name,const char *title,Int_t nbinsx,Double_t xlow,Double_t xup 260 ,Int_t nbinsy,const Double_t *ybins); 261 TH2F(const char *name,const char *title,Int_t nbinsx,const Double_t *xbins 262 ,Int_t nbinsy,const Double_t *ybins); 263 TH2F(const char *name,const char *title,Int_t nbinsx,const Float_t *xbins 264 ,Int_t nbinsy,const Float_t *ybins); 265 TH2F(const TMatrixFBase &m); 266 TH2F(const TH2F &h2f); 267 virtual ~TH2F(); 268 virtual void AddBinContent(Int_t bin) {++fArray[bin];} 269 virtual void AddBinContent(Int_t bin, Double_t w) 270 {fArray[bin] += Float_t (w);} 271 virtual void Copy(TObject &hnew) const; 272 virtual TH1 *DrawCopy(Option_t *option="") const; 273 virtual Double_t GetBinContent(Int_t bin) const; 274 virtual Double_t GetBinContent(Int_t binx, Int_t biny) const {return GetBinContent(GetBin(binx,biny));} 275 virtual Double_t GetBinContent(Int_t binx, Int_t biny, Int_t) const {return GetBinContent(GetBin(binx,biny));} 276 virtual void Reset(Option_t *option=""); 277 virtual void SetBinContent(Int_t bin, Double_t content); 278 virtual void SetBinContent(Int_t binx, Int_t biny, Double_t content) {SetBinContent(GetBin(binx,biny),content);} 279 virtual void SetBinContent(Int_t binx, Int_t biny, Int_t, Double_t content) {SetBinContent(GetBin(binx,biny),content);} 280 virtual void SetBinsLength(Int_t n=-1); 281 TH2F& operator=(const TH2F &h1); 282 friend TH2F operator*(Float_t c1, TH2F &h1); 283 friend TH2F operator*(TH2F &h1, Float_t c1); 284 friend TH2F operator+(TH2F &h1, TH2F &h2); 285 friend TH2F operator-(TH2F &h1, TH2F &h2); 286 friend TH2F operator*(TH2F &h1, TH2F &h2); 287 friend TH2F operator/(TH2F &h1, TH2F &h2); 288 289 ClassDef(TH2F,3) //2-Dim histograms (one float per channel) 290 }; 291 292 293 //______________________________________________________________________________ 294 295 class TH2D : public TH2, public TArrayD { 296 297 public: 298 TH2D(); 299 TH2D(const char *name,const char *title,Int_t nbinsx,Double_t xlow,Double_t xup 300 ,Int_t nbinsy,Double_t ylow,Double_t yup); 301 TH2D(const char *name,const char *title,Int_t nbinsx,const Double_t *xbins 302 ,Int_t nbinsy,Double_t ylow,Double_t yup); 303 TH2D(const char *name,const char *title,Int_t nbinsx,Double_t xlow,Double_t xup 304 ,Int_t nbinsy,const Double_t *ybins); 305 TH2D(const char *name,const char *title,Int_t nbinsx,const Double_t *xbins 306 ,Int_t nbinsy,const Double_t *ybins); 307 TH2D(const char *name,const char *title,Int_t nbinsx,const Float_t *xbins 308 ,Int_t nbinsy,const Float_t *ybins); 309 TH2D(const TMatrixDBase &m); 310 TH2D(const TH2D &h2d); 311 virtual ~TH2D(); 312 virtual void AddBinContent(Int_t bin) {++fArray[bin];} 313 virtual void AddBinContent(Int_t bin, Double_t w) 314 {fArray[bin] += Double_t (w);} 315 virtual void Copy(TObject &hnew) const; 316 virtual TH1 *DrawCopy(Option_t *option="") const; 317 virtual Double_t GetBinContent(Int_t bin) const; 318 virtual Double_t GetBinContent(Int_t binx, Int_t biny) const {return GetBinContent(GetBin(binx,biny));} 319 virtual Double_t GetBinContent(Int_t binx, Int_t biny, Int_t) const {return GetBinContent(GetBin(binx,biny));} 320 virtual void Reset(Option_t *option=""); 321 virtual void SetBinContent(Int_t bin, Double_t content); 322 virtual void SetBinContent(Int_t binx, Int_t biny, Double_t content) {SetBinContent(GetBin(binx,biny),content);} 323 virtual void SetBinContent(Int_t binx, Int_t biny, Int_t, Double_t content) {SetBinContent(GetBin(binx,biny),content);} 324 virtual void SetBinsLength(Int_t n=-1); 325 TH2D& operator=(const TH2D &h1); 326 friend TH2D operator*(Float_t c1, TH2D &h1); 327 friend TH2D operator*(TH2D &h1, Float_t c1) {return operator*(c1,h1);} 328 friend TH2D operator+(TH2D &h1, TH2D &h2); 329 friend TH2D operator-(TH2D &h1, TH2D &h2); 330 friend TH2D operator*(TH2D &h1, TH2D &h2); 331 friend TH2D operator/(TH2D &h1, TH2D &h2); 332 333 ClassDef(TH2D,3) //2-Dim histograms (one double per channel) 334 }; 335 336 #endif 337 338