00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef ROOT_TH3
00013 #define ROOT_TH3
00014
00015
00016
00017
00018
00019
00020
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;
00039 Double_t fTsumwy2;
00040 Double_t fTsumwxy;
00041 Double_t fTsumwz;
00042 Double_t fTsumwz2;
00043 Double_t fTsumwxz;
00044 Double_t fTsumwyz;
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;}
00057 virtual Int_t BufferFill(Double_t, Double_t, Double_t) {return -2;}
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;}
00068 Int_t Fill(Double_t,Double_t) {return -1;}
00069 Int_t Fill(const char*, Double_t) {return -1;}
00070 Int_t Fill(Double_t,const char*,Double_t) {return -1;}
00071 Int_t Fill(const char*,Double_t,Double_t) {return -1;}
00072 Int_t Fill(const char*,const char*,Double_t) {return -1;}
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");
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;
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;
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;
00110 TH1 *Project3D(Option_t *option="x") const;
00111 TProfile2D *Project3DProfile(Option_t *option="xy") const;
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);
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)
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)
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)
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)
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)
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)
00325 };
00326
00327 #endif
00328