TH3.h

Go to the documentation of this file.
00001 // @(#)root/hist:$Id: TH3.h 29899 2009-08-25 12:51:00Z moneta $
00002 // Author: Rene Brun   27/10/95
00003 
00004 /*************************************************************************
00005  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
00006  * All rights reserved.                                                  *
00007  *                                                                       *
00008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
00009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
00010  *************************************************************************/
00011 
00012 #ifndef ROOT_TH3
00013 #define ROOT_TH3
00014 
00015 
00016 //////////////////////////////////////////////////////////////////////////
00017 //                                                                      //
00018 // TH3                                                                  //
00019 //                                                                      //
00020 // 3-Dim histogram base class.                                          //
00021 //                                                                      //
00022 //////////////////////////////////////////////////////////////////////////
00023 
00024 #ifndef ROOT_TH1
00025 #include "TH1.h"
00026 #endif
00027 
00028 #ifndef ROOT_TAtt3D
00029 #include "TAtt3D.h"
00030 #endif
00031 
00032 class TH2D; 
00033 class TProfile2D;
00034 
00035 class TH3 : public TH1, public TAtt3D {
00036 
00037 protected:
00038    Double_t     fTsumwy;          //Total Sum of weight*Y
00039    Double_t     fTsumwy2;         //Total Sum of weight*Y*Y
00040    Double_t     fTsumwxy;         //Total Sum of weight*X*Y
00041    Double_t     fTsumwz;          //Total Sum of weight*Z
00042    Double_t     fTsumwz2;         //Total Sum of weight*Z*Z
00043    Double_t     fTsumwxz;         //Total Sum of weight*X*Z
00044    Double_t     fTsumwyz;         //Total Sum of weight*Y*Z
00045 
00046    TH3();
00047    TH3(const char *name,const char *title,Int_t nbinsx,Double_t xlow,Double_t xup
00048                                   ,Int_t nbinsy,Double_t ylow,Double_t yup
00049                                   ,Int_t nbinsz,Double_t zlow,Double_t zup);
00050    TH3(const char *name,const char *title,Int_t nbinsx,const Float_t *xbins
00051                                          ,Int_t nbinsy,const Float_t *ybins
00052                                          ,Int_t nbinsz,const Float_t *zbins);
00053    TH3(const char *name,const char *title,Int_t nbinsx,const Double_t *xbins
00054                                          ,Int_t nbinsy,const Double_t *ybins
00055                                          ,Int_t nbinsz,const Double_t *zbins);
00056    virtual Int_t    BufferFill(Double_t, Double_t) {return -2;} //may not use
00057    virtual Int_t    BufferFill(Double_t, Double_t, Double_t) {return -2;} //may not use
00058    virtual Int_t    BufferFill(Double_t x, Double_t y, Double_t z, Double_t w);
00059 
00060    void DoFillProfileProjection(TProfile2D * p2, const TAxis & a1, const TAxis & a2, const TAxis & a3, Int_t bin1, Int_t bin2, Int_t bin3, Int_t inBin, Bool_t useWeights) const;
00061 
00062 public:
00063    TH3(const TH3&);
00064    virtual ~TH3();
00065    virtual Int_t    BufferEmpty(Int_t action=0);
00066    virtual void     Copy(TObject &hnew) const;
00067            Int_t    Fill(Double_t) {return -1;}        //MayNotUse
00068            Int_t    Fill(Double_t,Double_t) {return -1;} //MayNotUse
00069            Int_t    Fill(const char*, Double_t) {return -1;} //MayNotUse
00070            Int_t    Fill(Double_t,const char*,Double_t) {return -1;} //MayNotUse
00071            Int_t    Fill(const char*,Double_t,Double_t) {return -1;} //MayNotUse
00072            Int_t    Fill(const char*,const char*,Double_t) {return -1;} //MayNotUse
00073    virtual Int_t    Fill(Double_t x, Double_t y, Double_t z);
00074    virtual Int_t    Fill(Double_t x, Double_t y, Double_t z, Double_t w);
00075 
00076    virtual Int_t    Fill(const char *namex, const char *namey, const char *namez, Double_t w);
00077    virtual Int_t    Fill(const char *namex, Double_t y, const char *namez, Double_t w);
00078    virtual Int_t    Fill(const char *namex, const char *namey, Double_t z, Double_t w);
00079    virtual Int_t    Fill(Double_t x, const char *namey, const char *namez, Double_t w);
00080    virtual Int_t    Fill(Double_t x, const char *namey, Double_t z, Double_t w);
00081    virtual Int_t    Fill(Double_t x, Double_t y, const char *namez, Double_t w);
00082 
00083    virtual void     FillRandom(const char *fname, Int_t ntimes=5000);
00084    virtual void     FillRandom(TH1 *h, Int_t ntimes=5000);
00085    virtual Int_t    FindFirstBinAbove(Double_t threshold=0, Int_t axis=1) const;
00086    virtual Int_t    FindLastBinAbove (Double_t threshold=0, Int_t axis=1) const;
00087    virtual void     FitSlicesZ(TF1 *f1=0,Int_t binminx=1, Int_t binmaxx=0,Int_t binminy=1, Int_t binmaxy=0,
00088                                         Int_t cut=0 ,Option_t *option="QNR"); // *MENU*
00089    virtual Double_t GetBinWithContent3(Double_t c, Int_t &binx, Int_t &biny, Int_t &binz, Int_t firstx=0, Int_t lastx=0,Int_t firsty=0, Int_t lasty=0, Int_t firstz=0, Int_t lastz=0, Double_t maxdiff=0) const;
00090    virtual Double_t GetCorrelationFactor(Int_t axis1=1,Int_t axis2=2) const;
00091    virtual Double_t GetCovariance(Int_t axis1=1,Int_t axis2=2) const;
00092    virtual void     GetRandom3(Double_t &x, Double_t &y, Double_t &z);
00093    virtual void     GetStats(Double_t *stats) const;
00094    virtual Double_t Integral(Option_t *option="") const;
00095    using TH1::Integral;
00096    virtual Double_t Integral(Int_t binx1, Int_t binx2, Int_t biny1, Int_t biny2, Int_t binz1, Int_t binz2, Option_t *option="") const;
00097    using TH1::IntegralAndError;
00098    virtual Double_t IntegralAndError(Int_t binx1, Int_t binx2, Int_t biny1, Int_t biny2, Int_t binz1, Int_t binz2, Double_t & err, Option_t *option="") const;
00099    virtual Double_t Interpolate(Double_t x);
00100    virtual Double_t Interpolate(Double_t x, Double_t y);
00101    virtual Double_t Interpolate(Double_t x, Double_t y, Double_t z);
00102    virtual Double_t KolmogorovTest(const TH1 *h2, Option_t *option="") const;
00103    virtual Long64_t Merge(TCollection *list);
00104          TH1D      *ProjectionX(const char *name="_px", Int_t firstybin=0, Int_t lastybin=-1, Int_t firstzbin=0,
00105                                 Int_t lastzbin=-1, Option_t *option="") const; // *MENU*
00106          TH1D      *ProjectionY(const char *name="_py", Int_t firstxbin=0, Int_t lastxbin=-1, Int_t firstzbin=0,
00107                                 Int_t lastzbin=-1, Option_t *option="") const; // *MENU*
00108          TH1D      *ProjectionZ(const char *name="_pz", Int_t firstxbin=0, Int_t lastxbin=-1, Int_t firstybin=0,
00109                                 Int_t lastybin=-1, Option_t *option="") const; // *MENU*
00110          TH1       *Project3D(Option_t *option="x") const; // *MENU*
00111    TProfile2D      *Project3DProfile(Option_t *option="xy") const; // *MENU*
00112    virtual void     PutStats(Double_t *stats);
00113    virtual void     Reset(Option_t *option="");
00114    virtual void     SetShowProjection(const char *option="xy",Int_t nbins=1);   // *MENU*
00115 
00116 protected:
00117    TH1D        *DoProject1D(const char* name, const char * title, TAxis* projX, 
00118                          bool computeErrors, bool originalRange,
00119                          bool useUF, bool useOF) const;
00120    TH2D        *DoProject2D(const char* name, const char * title, TAxis* projX, TAxis* projY, 
00121                         bool computeErrors, bool originalRange,
00122                          bool useUF, bool useOF) const;
00123    TProfile2D *DoProjectProfile2D(const char* name, const char * title, TAxis* projX, TAxis* projY, 
00124                                         bool originalRange, bool useUF, bool useOF) const;
00125    
00126    ClassDef(TH3,5)  //3-Dim histogram base class
00127 };
00128 
00129 //________________________________________________________________________
00130 
00131 class TH3C : public TH3, public TArrayC {
00132 public:
00133    TH3C();
00134    TH3C(const char *name,const char *title,Int_t nbinsx,Double_t xlow,Double_t xup
00135                                   ,Int_t nbinsy,Double_t ylow,Double_t yup
00136                                   ,Int_t nbinsz,Double_t zlow,Double_t zup);
00137    TH3C(const char *name,const char *title,Int_t nbinsx,const Float_t *xbins
00138                                           ,Int_t nbinsy,const Float_t *ybins
00139                                           ,Int_t nbinsz,const Float_t *zbins);
00140    TH3C(const char *name,const char *title,Int_t nbinsx,const Double_t *xbins
00141                                           ,Int_t nbinsy,const Double_t *ybins
00142                                           ,Int_t nbinsz,const Double_t *zbins);
00143    TH3C(const TH3C &h3c);
00144    virtual ~TH3C();
00145    virtual void      AddBinContent(Int_t bin);
00146    virtual void      AddBinContent(Int_t bin, Double_t w);
00147    virtual void      Copy(TObject &hnew) const;
00148    virtual TH1      *DrawCopy(Option_t *option="") const ;
00149    virtual Double_t  GetBinContent(Int_t bin) const;
00150    virtual Double_t  GetBinContent(Int_t bin, Int_t) const {return GetBinContent(bin);}
00151    virtual Double_t  GetBinContent(Int_t binx, Int_t biny, Int_t binz) const {return GetBinContent(GetBin(binx,biny,binz));}
00152    virtual void      Reset(Option_t *option="");
00153    virtual void      SetBinContent(Int_t bin, Double_t content);
00154    virtual void      SetBinContent(Int_t bin, Int_t, Double_t content) {SetBinContent(bin,content);}
00155    virtual void      SetBinContent(Int_t binx, Int_t biny, Int_t binz, Double_t content) {SetBinContent(GetBin(binx,biny,binz),content);}
00156    virtual void      SetBinsLength(Int_t n=-1);
00157            TH3C&     operator=(const TH3C &h1);
00158    friend  TH3C      operator*(Float_t c1, TH3C &h1);
00159    friend  TH3C      operator*(TH3C &h1, Float_t c1) {return operator*(c1,h1);}
00160    friend  TH3C      operator+(TH3C &h1, TH3C &h2);
00161    friend  TH3C      operator-(TH3C &h1, TH3C &h2);
00162    friend  TH3C      operator*(TH3C &h1, TH3C &h2);
00163    friend  TH3C      operator/(TH3C &h1, TH3C &h2);
00164 
00165    ClassDef(TH3C,3)  //3-Dim histograms (one char per channel)
00166 };
00167 
00168 //________________________________________________________________________
00169 
00170 class TH3S : public TH3, public TArrayS {
00171 public:
00172    TH3S();
00173    TH3S(const char *name,const char *title,Int_t nbinsx,Double_t xlow,Double_t xup
00174                                   ,Int_t nbinsy,Double_t ylow,Double_t yup
00175                                   ,Int_t nbinsz,Double_t zlow,Double_t zup);
00176    TH3S(const char *name,const char *title,Int_t nbinsx,const Float_t *xbins
00177                                           ,Int_t nbinsy,const Float_t *ybins
00178                                           ,Int_t nbinsz,const Float_t *zbins);
00179    TH3S(const char *name,const char *title,Int_t nbinsx,const Double_t *xbins
00180                                           ,Int_t nbinsy,const Double_t *ybins
00181                                           ,Int_t nbinsz,const Double_t *zbins);
00182    TH3S(const TH3S &h3s);
00183    virtual ~TH3S();
00184    virtual void      AddBinContent(Int_t bin);
00185    virtual void      AddBinContent(Int_t bin, Double_t w);
00186    virtual void      Copy(TObject &hnew) const;
00187    virtual TH1      *DrawCopy(Option_t *option="") const;
00188    virtual Double_t  GetBinContent(Int_t bin) const;
00189    virtual Double_t  GetBinContent(Int_t bin, Int_t) const {return GetBinContent(bin);}
00190    virtual Double_t  GetBinContent(Int_t binx, Int_t biny, Int_t binz) const {return GetBinContent(GetBin(binx,biny,binz));}
00191    virtual void      Reset(Option_t *option="");
00192    virtual void      SetBinContent(Int_t bin, Double_t content);
00193    virtual void      SetBinContent(Int_t bin, Int_t, Double_t content) {SetBinContent(bin,content);}
00194    virtual void      SetBinContent(Int_t binx, Int_t biny, Int_t binz, Double_t content) {SetBinContent(GetBin(binx,biny,binz),content);}
00195    virtual void      SetBinsLength(Int_t n=-1);
00196            TH3S&     operator=(const TH3S &h1);
00197    friend  TH3S      operator*(Float_t c1, TH3S &h1);
00198    friend  TH3S      operator*(TH3S &h1, Float_t c1) {return operator*(c1,h1);}
00199    friend  TH3S      operator+(TH3S &h1, TH3S &h2);
00200    friend  TH3S      operator-(TH3S &h1, TH3S &h2);
00201    friend  TH3S      operator*(TH3S &h1, TH3S &h2);
00202    friend  TH3S      operator/(TH3S &h1, TH3S &h2);
00203 
00204    ClassDef(TH3S,3)  //3-Dim histograms (one short per channel)
00205 };
00206 
00207 //________________________________________________________________________
00208 
00209 class TH3I : public TH3, public TArrayI {
00210 public:
00211    TH3I();
00212    TH3I(const char *name,const char *title,Int_t nbinsx,Double_t xlow,Double_t xup
00213                                   ,Int_t nbinsy,Double_t ylow,Double_t yup
00214                                   ,Int_t nbinsz,Double_t zlow,Double_t zup);
00215    TH3I(const char *name,const char *title,Int_t nbinsx,const Float_t *xbins
00216                                           ,Int_t nbinsy,const Float_t *ybins
00217                                           ,Int_t nbinsz,const Float_t *zbins);
00218    TH3I(const char *name,const char *title,Int_t nbinsx,const Double_t *xbins
00219                                           ,Int_t nbinsy,const Double_t *ybins
00220                                           ,Int_t nbinsz,const Double_t *zbins);
00221    TH3I(const TH3I &h3i);
00222    virtual ~TH3I();
00223    virtual void      AddBinContent(Int_t bin);
00224    virtual void      AddBinContent(Int_t bin, Double_t w);
00225    virtual void      Copy(TObject &hnew) const;
00226    virtual TH1      *DrawCopy(Option_t *option="") const;
00227    virtual Double_t  GetBinContent(Int_t bin) const;
00228    virtual Double_t  GetBinContent(Int_t bin, Int_t) const {return GetBinContent(bin);}
00229    virtual Double_t  GetBinContent(Int_t binx, Int_t biny, Int_t binz) const {return GetBinContent(GetBin(binx,biny,binz));}
00230    virtual void      Reset(Option_t *option="");
00231    virtual void      SetBinContent(Int_t bin, Double_t content);
00232    virtual void      SetBinContent(Int_t bin, Int_t, Double_t content) {SetBinContent(bin,content);}
00233    virtual void      SetBinContent(Int_t binx, Int_t biny, Int_t binz, Double_t content) {SetBinContent(GetBin(binx,biny,binz),content);}
00234    virtual void      SetBinsLength(Int_t n=-1);
00235            TH3I&     operator=(const TH3I &h1);
00236    friend  TH3I      operator*(Float_t c1, TH3I &h1);
00237    friend  TH3I      operator*(TH3I &h1, Float_t c1) {return operator*(c1,h1);}
00238    friend  TH3I      operator+(TH3I &h1, TH3I &h2);
00239    friend  TH3I      operator-(TH3I &h1, TH3I &h2);
00240    friend  TH3I      operator*(TH3I &h1, TH3I &h2);
00241    friend  TH3I      operator/(TH3I &h1, TH3I &h2);
00242 
00243    ClassDef(TH3I,3)  //3-Dim histograms (one 32 bits integer per channel)
00244 };
00245 
00246 
00247 //________________________________________________________________________
00248 
00249 class TH3F : public TH3, public TArrayF {
00250 public:
00251    TH3F();
00252    TH3F(const char *name,const char *title,Int_t nbinsx,Double_t xlow,Double_t xup
00253                                   ,Int_t nbinsy,Double_t ylow,Double_t yup
00254                                   ,Int_t nbinsz,Double_t zlow,Double_t zup);
00255    TH3F(const char *name,const char *title,Int_t nbinsx,const Float_t *xbins
00256                                           ,Int_t nbinsy,const Float_t *ybins
00257                                           ,Int_t nbinsz,const Float_t *zbins);
00258    TH3F(const char *name,const char *title,Int_t nbinsx,const Double_t *xbins
00259                                           ,Int_t nbinsy,const Double_t *ybins
00260                                           ,Int_t nbinsz,const Double_t *zbins);
00261    TH3F(const TH3F &h3f);
00262    virtual ~TH3F();
00263    virtual void      AddBinContent(Int_t bin) {++fArray[bin];}
00264    virtual void      AddBinContent(Int_t bin, Double_t w)
00265                                  {fArray[bin] += Float_t (w);}
00266    virtual void      Copy(TObject &hnew) const;
00267    virtual TH1      *DrawCopy(Option_t *option="") const;
00268    virtual Double_t  GetBinContent(Int_t bin) const;
00269    virtual Double_t  GetBinContent(Int_t bin, Int_t) const {return GetBinContent(bin);}
00270    virtual Double_t  GetBinContent(Int_t binx, Int_t biny, Int_t binz) const {return GetBinContent(GetBin(binx,biny,binz));}
00271    virtual void      Reset(Option_t *option="");
00272    virtual void      SetBinContent(Int_t bin, Double_t content);
00273    virtual void      SetBinContent(Int_t bin, Int_t, Double_t content) {SetBinContent(bin,content);}
00274    virtual void      SetBinContent(Int_t binx, Int_t biny, Int_t binz, Double_t content) {SetBinContent(GetBin(binx,biny,binz),content);}
00275    virtual void      SetBinsLength(Int_t n=-1);
00276            TH3F&     operator=(const TH3F &h1);
00277    friend  TH3F      operator*(Float_t c1, TH3F &h1);
00278    friend  TH3F      operator*(TH3F &h1, Float_t c1) {return operator*(c1,h1);}
00279    friend  TH3F      operator+(TH3F &h1, TH3F &h2);
00280    friend  TH3F      operator-(TH3F &h1, TH3F &h2);
00281    friend  TH3F      operator*(TH3F &h1, TH3F &h2);
00282    friend  TH3F      operator/(TH3F &h1, TH3F &h2);
00283 
00284    ClassDef(TH3F,3)  //3-Dim histograms (one float per channel)
00285 };
00286 
00287 //________________________________________________________________________
00288 
00289 class TH3D : public TH3, public TArrayD {
00290 public:
00291    TH3D();
00292    TH3D(const char *name,const char *title,Int_t nbinsx,Double_t xlow,Double_t xup
00293                                   ,Int_t nbinsy,Double_t ylow,Double_t yup
00294                                   ,Int_t nbinsz,Double_t zlow,Double_t zup);
00295    TH3D(const char *name,const char *title,Int_t nbinsx,const Float_t *xbins
00296                                           ,Int_t nbinsy,const Float_t *ybins
00297                                           ,Int_t nbinsz,const Float_t *zbins);
00298    TH3D(const char *name,const char *title,Int_t nbinsx,const Double_t *xbins
00299                                           ,Int_t nbinsy,const Double_t *ybins
00300                                           ,Int_t nbinsz,const Double_t *zbins);
00301    TH3D(const TH3D &h3d);
00302    virtual ~TH3D();
00303    virtual void      AddBinContent(Int_t bin) {++fArray[bin];}
00304    virtual void      AddBinContent(Int_t bin, Double_t w)
00305                                  {fArray[bin] += Double_t (w);}
00306    virtual void      Copy(TObject &hnew) const;
00307    virtual TH1      *DrawCopy(Option_t *option="") const;
00308    virtual Double_t  GetBinContent(Int_t bin) const;
00309    virtual Double_t  GetBinContent(Int_t bin, Int_t) const {return GetBinContent(bin);}
00310    virtual Double_t  GetBinContent(Int_t binx, Int_t biny, Int_t binz) const {return GetBinContent(GetBin(binx,biny,binz));}
00311    virtual void      Reset(Option_t *option="");
00312    virtual void      SetBinContent(Int_t bin, Double_t content);
00313    virtual void      SetBinContent(Int_t bin, Int_t, Double_t content) {SetBinContent(bin,content);}
00314    virtual void      SetBinContent(Int_t binx, Int_t biny, Int_t binz, Double_t content) {SetBinContent(GetBin(binx,biny,binz),content);}
00315    virtual void      SetBinsLength(Int_t n=-1);
00316            TH3D&     operator=(const TH3D &h1);
00317    friend  TH3D      operator*(Float_t c1, TH3D &h1);
00318    friend  TH3D      operator*(TH3D &h1, Float_t c1) {return operator*(c1,h1);}
00319    friend  TH3D      operator+(TH3D &h1, TH3D &h2);
00320    friend  TH3D      operator-(TH3D &h1, TH3D &h2);
00321    friend  TH3D      operator*(TH3D &h1, TH3D &h2);
00322    friend  TH3D      operator/(TH3D &h1, TH3D &h2);
00323 
00324    ClassDef(TH3D,3)  //3-Dim histograms (one double per channel)
00325 };
00326 
00327 #endif
00328 

Generated on Tue Jul 5 14:22:53 2011 for ROOT_528-00b_version by  doxygen 1.5.1