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_TH1 13 #define ROOT_TH1 14 15 16 ////////////////////////////////////////////////////////////////////////// 17 // // 18 // TH1 // 19 // // 20 // 1-Dim histogram base class. // 21 // // 22 ////////////////////////////////////////////////////////////////////////// 23 24 #ifndef ROOT_TAxis 25 #include "TAxis.h" 26 #endif 27 28 #ifndef ROOT_TAttLine 29 #include "TAttLine.h" 30 #endif 31 32 #ifndef ROOT_TAttFill 33 #include "TAttFill.h" 34 #endif 35 36 #ifndef ROOT_TAttMarker 37 #include "TAttMarker.h" 38 #endif 39 40 #ifndef ROOT_TArrayC 41 #include "TArrayC.h" 42 #endif 43 #ifndef ROOT_TArrayS 44 #include "TArrayS.h" 45 #endif 46 #ifndef ROOT_TArrayI 47 #include "TArrayI.h" 48 #endif 49 #ifndef ROOT_TArrayF 50 #include "TArrayF.h" 51 #endif 52 #ifndef ROOT_TArrayD 53 #include "TArrayD.h" 54 #endif 55 #include "Foption.h" 56 57 #ifndef ROOT_TVectorFfwd 58 #include "TVectorFfwd.h" 59 #endif 60 #ifndef ROOT_TVectorDfwd 61 #include "TVectorDfwd.h" 62 #endif 63 64 #include <float.h> 65 66 class TF1; 67 class TH1D; 68 class TBrowser; 69 class TDirectory; 70 class TList; 71 class TCollection; 72 class TVirtualFFT; 73 class TVirtualHistPainter; 74 75 #include "TFitResultPtr.h" 76 77 class TH1 : public TNamed, public TAttLine, public TAttFill, public TAttMarker { 78 79 public: 80 81 // enumeration specifying type of statistics for bin errors 82 enum EBinErrorOpt { 83 kNormal = 0, // errors with Normal (Wald) approximation: errorUp=errorLow= sqrt(N) 84 kPoisson = 1 , // errors from Poisson interval at 68.3% (1 sigma) 85 kPoisson2 = 2 // errors from Poisson interval at 95% CL (~ 2 sigma) 86 }; 87 88 protected: 89 Int_t fNcells; //number of bins(1D), cells (2D) +U/Overflows 90 TAxis fXaxis; //X axis descriptor 91 TAxis fYaxis; //Y axis descriptor 92 TAxis fZaxis; //Z axis descriptor 93 Short_t fBarOffset; //(1000*offset) for bar charts or legos 94 Short_t fBarWidth; //(1000*width) for bar charts or legos 95 Double_t fEntries; //Number of entries 96 Double_t fTsumw; //Total Sum of weights 97 Double_t fTsumw2; //Total Sum of squares of weights 98 Double_t fTsumwx; //Total Sum of weight*X 99 Double_t fTsumwx2; //Total Sum of weight*X*X 100 Double_t fMaximum; //Maximum value for plotting 101 Double_t fMinimum; //Minimum value for plotting 102 Double_t fNormFactor; //Normalization factor 103 TArrayD fContour; //Array to display contour levels 104 TArrayD fSumw2; //Array of sum of squares of weights 105 TString fOption; //histogram options 106 TList *fFunctions; //->Pointer to list of functions (fits and user) 107 Int_t fBufferSize; //fBuffer size 108 Double_t *fBuffer; //[fBufferSize] entry buffer 109 TDirectory *fDirectory; //!Pointer to directory holding this histogram 110 Int_t fDimension; //!Histogram dimension (1, 2 or 3 dim) 111 Double_t *fIntegral; //!Integral of bins used by GetRandom 112 TVirtualHistPainter *fPainter; //!pointer to histogram painter 113 EBinErrorOpt fBinStatErrOpt; //option for bin statistical errors 114 static Int_t fgBufferSize; //!default buffer size for automatic histograms 115 static Bool_t fgAddDirectory; //!flag to add histograms to the directory 116 static Bool_t fgStatOverflows; //!flag to use under/overflows in statistics 117 static Bool_t fgDefaultSumw2; //!flag to call TH1::Sumw2 automatically at histogram creation time 118 119 public: 120 static Int_t FitOptionsMake(Option_t *option, Foption_t &Foption); 121 122 private: 123 Int_t AxisChoice(Option_t *axis) const; 124 void Build(); 125 126 TH1& operator=(const TH1&); // Not implemented 127 128 129 protected: 130 TH1(); 131 TH1(const char *name,const char *title,Int_t nbinsx,Double_t xlow,Double_t xup); 132 TH1(const char *name,const char *title,Int_t nbinsx,const Float_t *xbins); 133 TH1(const char *name,const char *title,Int_t nbinsx,const Double_t *xbins); 134 virtual Int_t BufferFill(Double_t x, Double_t w); 135 virtual Bool_t FindNewAxisLimits(const TAxis* axis, const Double_t point, Double_t& newMin, Double_t &newMax); 136 virtual void SavePrimitiveHelp(ostream &out, const char *hname, Option_t *option = ""); 137 static Bool_t RecomputeAxisLimits(TAxis& destAxis, const TAxis& anAxis); 138 static Bool_t SameLimitsAndNBins(const TAxis& axis1, const TAxis& axis2); 139 140 virtual Double_t DoIntegral(Int_t ix1, Int_t ix2, Int_t iy1, Int_t iy2, Int_t iz1, Int_t iz2, Double_t & err, 141 Option_t * opt, Bool_t doerr = kFALSE) const; 142 143 virtual void DoFillN(Int_t ntimes, const Double_t *x, const Double_t *w, Int_t stride=1); 144 145 static bool CheckAxisLimits(const TAxis* a1, const TAxis* a2); 146 static bool CheckBinLimits(const TAxis* a1, const TAxis* a2); 147 static bool CheckBinLabels(const TAxis* a1, const TAxis* a2); 148 static bool CheckEqualAxes(const TAxis* a1, const TAxis* a2); 149 static bool CheckConsistentSubAxes(const TAxis *a1, Int_t firstBin1, Int_t lastBin1, const TAxis *a2, Int_t firstBin2=0, Int_t lastBin2=0); 150 static bool CheckConsistency(const TH1* h1, const TH1* h2); 151 152 public: 153 // TH1 status bits 154 enum { 155 kNoStats = BIT(9), // don't draw stats box 156 kUserContour = BIT(10), // user specified contour levels 157 kCanRebin = BIT(11), // can rebin axis 158 kLogX = BIT(15), // X-axis in log scale 159 kIsZoomed = BIT(16), // bit set when zooming on Y axis 160 kNoTitle = BIT(17), // don't draw the histogram title 161 kIsAverage = BIT(18) // Bin contents are average (used by Add) 162 }; 163 // size of statistics data (size of array used in GetStats()/ PutStats ) 164 // s[0] = sumw s[1] = sumw2 165 // s[2] = sumwx s[3] = sumwx2 166 // s[4] = sumwy s[5] = sumwy2 s[6] = sumwxy 167 // s[7] = sumwz s[8] = sumwz2 s[9] = sumwxz s[10] = sumwyz 168 // s[11] = sumwt s[12] = sumwt2 (11 and 12 used only by TProfile3D) 169 enum { 170 kNstat = 13 // size of statistics data (up to TProfile3D) 171 }; 172 173 174 175 TH1(const TH1&); 176 virtual ~TH1(); 177 178 virtual Bool_t Add(TF1 *h1, Double_t c1=1, Option_t *option=""); 179 virtual Bool_t Add(const TH1 *h1, Double_t c1=1); 180 virtual Bool_t Add(const TH1 *h, const TH1 *h2, Double_t c1=1, Double_t c2=1); // *MENU* 181 virtual void AddBinContent(Int_t bin); 182 virtual void AddBinContent(Int_t bin, Double_t w); 183 static void AddDirectory(Bool_t add=kTRUE); 184 static Bool_t AddDirectoryStatus(); 185 virtual void Browse(TBrowser *b); 186 virtual Double_t Chi2Test(const TH1* h2, Option_t *option = "UU", Double_t *res = 0) const; 187 virtual Double_t Chi2TestX(const TH1* h2, Double_t &chi2, Int_t &ndf, Int_t &igood,Option_t *option = "UU", Double_t *res = 0) const; 188 189 virtual Double_t Chisquare(TF1 * f1, Option_t *option = "") const; 190 virtual Double_t ComputeIntegral(Bool_t onlyPositive = false); 191 virtual void Copy(TObject &hnew) const; 192 virtual void DirectoryAutoAdd(TDirectory *); 193 virtual Int_t DistancetoPrimitive(Int_t px, Int_t py); 194 virtual Bool_t Divide(TF1 *f1, Double_t c1=1); 195 virtual Bool_t Divide(const TH1 *h1); 196 virtual Bool_t Divide(const TH1 *h1, const TH1 *h2, Double_t c1=1, Double_t c2=1, Option_t *option=""); // *MENU* 197 virtual void Draw(Option_t *option=""); 198 virtual TH1 *DrawCopy(Option_t *option="") const; 199 virtual TH1 *DrawNormalized(Option_t *option="", Double_t norm=1) const; 200 virtual void DrawPanel(); // *MENU* 201 virtual Int_t BufferEmpty(Int_t action=0); 202 virtual void Eval(TF1 *f1, Option_t *option=""); 203 virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py); 204 virtual TH1 *FFT(TH1* h_output, Option_t *option); 205 virtual Int_t Fill(Double_t x); 206 virtual Int_t Fill(Double_t x, Double_t w); 207 virtual Int_t Fill(const char *name, Double_t w); 208 virtual void FillN(Int_t ntimes, const Double_t *x, const Double_t *w, Int_t stride=1); 209 virtual void FillN(Int_t, const Double_t *, const Double_t *, const Double_t *, Int_t) {;} 210 virtual void FillRandom(const char *fname, Int_t ntimes=5000); 211 virtual void FillRandom(TH1 *h, Int_t ntimes=5000); 212 virtual Int_t FindBin(Double_t x, Double_t y=0, Double_t z=0); 213 virtual Int_t FindFixBin(Double_t x, Double_t y=0, Double_t z=0) const; 214 virtual Int_t FindFirstBinAbove(Double_t threshold=0, Int_t axis=1) const; 215 virtual Int_t FindLastBinAbove (Double_t threshold=0, Int_t axis=1) const; 216 virtual TObject *FindObject(const char *name) const; 217 virtual TObject *FindObject(const TObject *obj) const; 218 virtual TFitResultPtr Fit(const char *formula ,Option_t *option="" ,Option_t *goption="", Double_t xmin=0, Double_t xmax=0); // *MENU* 219 virtual TFitResultPtr Fit(TF1 *f1 ,Option_t *option="" ,Option_t *goption="", Double_t xmin=0, Double_t xmax=0); 220 virtual void FitPanel(); // *MENU* 221 TH1 *GetAsymmetry(TH1* h2, Double_t c2=1, Double_t dc2=0); 222 Int_t GetBufferLength() const {return fBuffer ? (Int_t)fBuffer[0] : 0;} 223 Int_t GetBufferSize () const {return fBufferSize;} 224 const Double_t *GetBuffer() const {return fBuffer;} 225 static Int_t GetDefaultBufferSize(); 226 virtual Double_t *GetIntegral(); 227 TH1 *GetCumulative(Bool_t forward = kTRUE, const char* suffix = "_cumulative") const; 228 229 TList *GetListOfFunctions() const { return fFunctions; } 230 231 virtual Int_t GetNdivisions(Option_t *axis="X") const; 232 virtual Color_t GetAxisColor(Option_t *axis="X") const; 233 virtual Color_t GetLabelColor(Option_t *axis="X") const; 234 virtual Style_t GetLabelFont(Option_t *axis="X") const; 235 virtual Float_t GetLabelOffset(Option_t *axis="X") const; 236 virtual Float_t GetLabelSize(Option_t *axis="X") const; 237 virtual Style_t GetTitleFont(Option_t *axis="X") const; 238 virtual Float_t GetTitleOffset(Option_t *axis="X") const; 239 virtual Float_t GetTitleSize(Option_t *axis="X") const; 240 virtual Float_t GetTickLength(Option_t *axis="X") const; 241 virtual Float_t GetBarOffset() const {return Float_t(0.001*Float_t(fBarOffset));} 242 virtual Float_t GetBarWidth() const {return Float_t(0.001*Float_t(fBarWidth));} 243 virtual Int_t GetContour(Double_t *levels=0); 244 virtual Double_t GetContourLevel(Int_t level) const; 245 virtual Double_t GetContourLevelPad(Int_t level) const; 246 247 virtual Int_t GetBin(Int_t binx, Int_t biny=0, Int_t binz=0) const; 248 virtual void GetBinXYZ(Int_t binglobal, Int_t &binx, Int_t &biny, Int_t &binz) const; 249 virtual Double_t GetBinCenter(Int_t bin) const; 250 virtual Double_t GetBinContent(Int_t bin) const; 251 virtual Double_t GetBinContent(Int_t binx, Int_t biny) const; 252 virtual Double_t GetBinContent(Int_t binx, Int_t biny, Int_t binz) const; 253 virtual Double_t GetBinError(Int_t bin) const; 254 virtual Double_t GetBinError(Int_t binx, Int_t biny) const; 255 virtual Double_t GetBinError(Int_t binx, Int_t biny, Int_t binz) const; 256 virtual Double_t GetBinErrorLow(Int_t bin) const; 257 virtual Double_t GetBinErrorUp(Int_t bin) const; 258 virtual EBinErrorOpt GetBinErrorOption() const { return fBinStatErrOpt; } 259 virtual Double_t GetBinLowEdge(Int_t bin) const; 260 virtual Double_t GetBinWidth(Int_t bin) const; 261 virtual Double_t GetBinWithContent(Double_t c, Int_t &binx, Int_t firstx=0, Int_t lastx=0,Double_t maxdiff=0) const; 262 virtual Double_t GetCellContent(Int_t binx, Int_t biny) const; 263 virtual Double_t GetCellError(Int_t binx, Int_t biny) const; 264 virtual void GetCenter(Double_t *center) const; 265 static Bool_t GetDefaultSumw2(); 266 TDirectory *GetDirectory() const {return fDirectory;} 267 virtual Double_t GetEntries() const; 268 virtual Double_t GetEffectiveEntries() const; 269 virtual TF1 *GetFunction(const char *name) const; 270 virtual Int_t GetDimension() const { return fDimension; } 271 virtual Double_t GetKurtosis(Int_t axis=1) const; 272 virtual void GetLowEdge(Double_t *edge) const; 273 virtual Double_t GetMaximum(Double_t maxval=FLT_MAX) const; 274 virtual Int_t GetMaximumBin() const; 275 virtual Int_t GetMaximumBin(Int_t &locmax, Int_t &locmay, Int_t &locmaz) const; 276 virtual Double_t GetMaximumStored() const {return fMaximum;} 277 virtual Double_t GetMinimum(Double_t minval=-FLT_MAX) const; 278 virtual Int_t GetMinimumBin() const; 279 virtual Int_t GetMinimumBin(Int_t &locmix, Int_t &locmiy, Int_t &locmiz) const; 280 virtual Double_t GetMinimumStored() const {return fMinimum;} 281 virtual Double_t GetMean(Int_t axis=1) const; 282 virtual Double_t GetMeanError(Int_t axis=1) const; 283 virtual Int_t GetNbinsX() const {return fXaxis.GetNbins();} 284 virtual Int_t GetNbinsY() const {return fYaxis.GetNbins();} 285 virtual Int_t GetNbinsZ() const {return fZaxis.GetNbins();} 286 virtual Double_t GetNormFactor() const {return fNormFactor;} 287 virtual char *GetObjectInfo(Int_t px, Int_t py) const; 288 Option_t *GetOption() const {return fOption.Data();} 289 290 TVirtualHistPainter *GetPainter(Option_t *option=""); 291 292 virtual Int_t GetQuantiles(Int_t nprobSum, Double_t *q, const Double_t *probSum=0); 293 virtual Double_t GetRandom() const; 294 virtual void GetStats(Double_t *stats) const; 295 Double_t GetStdDev(Int_t axis=1) const { return GetRMS(axis); } 296 Double_t GetStdDevError(Int_t axis=1) const { return GetRMSError(axis); } 297 virtual Double_t GetSumOfWeights() const; 298 virtual TArrayD *GetSumw2() {return &fSumw2;} 299 virtual const TArrayD *GetSumw2() const {return &fSumw2;} 300 virtual Int_t GetSumw2N() const {return fSumw2.fN;} 301 virtual Double_t GetRMS(Int_t axis=1) const; 302 virtual Double_t GetRMSError(Int_t axis=1) const; 303 virtual Double_t GetSkewness(Int_t axis=1) const; 304 TAxis *GetXaxis() const; 305 TAxis *GetYaxis() const; 306 TAxis *GetZaxis() const; 307 virtual Double_t Integral(Option_t *option="") const; 308 virtual Double_t Integral(Int_t binx1, Int_t binx2, Option_t *option="") const; 309 virtual Double_t IntegralAndError(Int_t binx1, Int_t binx2, Double_t & err, Option_t *option="") const; 310 virtual Double_t Interpolate(Double_t x); 311 virtual Double_t Interpolate(Double_t x, Double_t y); 312 virtual Double_t Interpolate(Double_t x, Double_t y, Double_t z); 313 Bool_t IsBinOverflow(Int_t bin) const; 314 Bool_t IsBinUnderflow(Int_t bin) const; 315 virtual Double_t AndersonDarlingTest(const TH1 *h2, Option_t *option="") const; 316 virtual Double_t AndersonDarlingTest(const TH1 *h2, Double_t &advalue) const; 317 virtual Double_t KolmogorovTest(const TH1 *h2, Option_t *option="") const; 318 virtual void LabelsDeflate(Option_t *axis="X"); 319 virtual void LabelsInflate(Option_t *axis="X"); 320 virtual void LabelsOption(Option_t *option="h", Option_t *axis="X"); 321 virtual Long64_t Merge(TCollection *list); 322 virtual Bool_t Multiply(TF1 *h1, Double_t c1=1); 323 virtual Bool_t Multiply(const TH1 *h1); 324 virtual Bool_t Multiply(const TH1 *h1, const TH1 *h2, Double_t c1=1, Double_t c2=1, Option_t *option=""); // *MENU* 325 virtual void Paint(Option_t *option=""); 326 virtual void Print(Option_t *option="") const; 327 virtual void PutStats(Double_t *stats); 328 virtual TH1 *Rebin(Int_t ngroup=2, const char*newname="", const Double_t *xbins=0); // *MENU* 329 virtual TH1 *RebinX(Int_t ngroup=2, const char*newname="") { return Rebin(ngroup,newname, (Double_t*) 0); } 330 virtual void RebinAxis(Double_t x, TAxis *axis); 331 virtual void Rebuild(Option_t *option=""); 332 virtual void RecursiveRemove(TObject *obj); 333 virtual void Reset(Option_t *option=""); 334 virtual void ResetStats(); 335 virtual void SavePrimitive(ostream &out, Option_t *option = ""); 336 virtual void Scale(Double_t c1=1, Option_t *option=""); 337 virtual void SetAxisColor(Color_t color=1, Option_t *axis="X"); 338 virtual void SetAxisRange(Double_t xmin, Double_t xmax, Option_t *axis="X"); 339 virtual void SetBarOffset(Float_t offset=0.25) {fBarOffset = Short_t(1000*offset);} 340 virtual void SetBarWidth(Float_t width=0.5) {fBarWidth = Short_t(1000*width);} 341 virtual void SetBinContent(Int_t bin, Double_t content); 342 virtual void SetBinContent(Int_t binx, Int_t biny, Double_t content); 343 virtual void SetBinContent(Int_t binx, Int_t biny, Int_t binz, Double_t content); 344 virtual void SetBinError(Int_t bin, Double_t error); 345 virtual void SetBinError(Int_t binx, Int_t biny, Double_t error); 346 virtual void SetBinError(Int_t binx, Int_t biny, Int_t binz, Double_t error); 347 virtual void SetBins(Int_t nx, Double_t xmin, Double_t xmax); 348 virtual void SetBins(Int_t nx, const Double_t *xBins); 349 virtual void SetBins(Int_t nx, Double_t xmin, Double_t xmax, Int_t ny, Double_t ymin, Double_t ymax); 350 virtual void SetBins(Int_t nx, const Double_t *xBins, Int_t ny, const Double_t *yBins); 351 virtual void SetBins(Int_t nx, Double_t xmin, Double_t xmax, Int_t ny, Double_t ymin, Double_t ymax, 352 Int_t nz, Double_t zmin, Double_t zmax); 353 virtual void SetBins(Int_t nx, const Double_t *xBins, Int_t ny, const Double_t * yBins, Int_t nz, 354 const Double_t *zBins); 355 virtual void SetBinsLength(Int_t = -1) { } //redefined in derived classes 356 virtual void SetBinErrorOption(EBinErrorOpt type) { fBinStatErrOpt = type; } 357 virtual void SetBuffer(Int_t buffersize, Option_t *option=""); 358 virtual void SetCellContent(Int_t binx, Int_t biny, Double_t content); 359 virtual void SetCellError(Int_t binx, Int_t biny, Double_t content); 360 virtual void SetContent(const Double_t *content); 361 virtual void SetContour(Int_t nlevels, const Double_t *levels=0); 362 virtual void SetContourLevel(Int_t level, Double_t value); 363 static void SetDefaultBufferSize(Int_t buffersize=1000); 364 static void SetDefaultSumw2(Bool_t sumw2=kTRUE); 365 virtual void SetDirectory(TDirectory *dir); 366 virtual void SetEntries(Double_t n) {fEntries = n;}; 367 virtual void SetError(const Double_t *error); 368 virtual void SetLabelColor(Color_t color=1, Option_t *axis="X"); 369 virtual void SetLabelFont(Style_t font=62, Option_t *axis="X"); 370 virtual void SetLabelOffset(Float_t offset=0.005, Option_t *axis="X"); 371 virtual void SetLabelSize(Float_t size=0.02, Option_t *axis="X"); 372 373 virtual void SetMaximum(Double_t maximum=-1111); // *MENU* 374 virtual void SetMinimum(Double_t minimum=-1111); // *MENU* 375 virtual void SetName(const char *name); // *MENU* 376 virtual void SetNameTitle(const char *name, const char *title); 377 virtual void SetNdivisions(Int_t n=510, Option_t *axis="X"); 378 virtual void SetNormFactor(Double_t factor=1) {fNormFactor = factor;} 379 virtual void SetStats(Bool_t stats=kTRUE); // *MENU* 380 virtual void SetOption(Option_t *option=" ") {fOption = option;} 381 virtual void SetTickLength(Float_t length=0.02, Option_t *axis="X"); 382 virtual void SetTitleFont(Style_t font=62, Option_t *axis="X"); 383 virtual void SetTitleOffset(Float_t offset=1, Option_t *axis="X"); 384 virtual void SetTitleSize(Float_t size=0.02, Option_t *axis="X"); 385 virtual void SetTitle(const char *title); // *MENU* 386 virtual void SetXTitle(const char *title) {fXaxis.SetTitle(title);} 387 virtual void SetYTitle(const char *title) {fYaxis.SetTitle(title);} 388 virtual void SetZTitle(const char *title) {fZaxis.SetTitle(title);} 389 virtual TH1 *ShowBackground(Int_t niter=20, Option_t *option="same"); // *MENU* 390 virtual Int_t ShowPeaks(Double_t sigma=2, Option_t *option="", Double_t threshold=0.05); // *MENU* 391 virtual void Smooth(Int_t ntimes=1, Option_t *option=""); // *MENU* 392 static void SmoothArray(Int_t NN, Double_t *XX, Int_t ntimes=1); 393 static void StatOverflows(Bool_t flag=kTRUE); 394 virtual void Sumw2(Bool_t flag = kTRUE); 395 void UseCurrentStyle(); 396 static TH1 *TransformHisto(TVirtualFFT *fft, TH1* h_output, Option_t *option); 397 398 ClassDef(TH1,7) //1-Dim histogram base class 399 }; 400 401 //________________________________________________________________________ 402 403 class TH1C : public TH1, public TArrayC { 404 405 public: 406 TH1C(); 407 TH1C(const char *name,const char *title,Int_t nbinsx,Double_t xlow,Double_t xup); 408 TH1C(const char *name,const char *title,Int_t nbinsx,const Float_t *xbins); 409 TH1C(const char *name,const char *title,Int_t nbinsx,const Double_t *xbins); 410 TH1C(const TH1C &h1c); 411 virtual ~TH1C(); 412 413 virtual void AddBinContent(Int_t bin); 414 virtual void AddBinContent(Int_t bin, Double_t w); 415 virtual void Copy(TObject &hnew) const; 416 virtual TH1 *DrawCopy(Option_t *option="") const; 417 virtual Double_t GetBinContent(Int_t bin) const; 418 virtual Double_t GetBinContent(Int_t bin, Int_t) const {return GetBinContent(bin);} 419 virtual Double_t GetBinContent(Int_t bin, Int_t, Int_t) const {return GetBinContent(bin);} 420 virtual void Reset(Option_t *option=""); 421 virtual void SetBinContent(Int_t bin, Double_t content); 422 virtual void SetBinContent(Int_t bin, Int_t, Double_t content) {SetBinContent(bin,content);} 423 virtual void SetBinContent(Int_t bin, Int_t, Int_t, Double_t content) {SetBinContent(bin,content);} 424 virtual void SetBinsLength(Int_t n=-1); 425 TH1C& operator=(const TH1C &h1); 426 friend TH1C operator*(Double_t c1, const TH1C &h1); 427 friend TH1C operator*(const TH1C &h1, Double_t c1); 428 friend TH1C operator+(const TH1C &h1, const TH1C &h2); 429 friend TH1C operator-(const TH1C &h1, const TH1C &h2); 430 friend TH1C operator*(const TH1C &h1, const TH1C &h2); 431 friend TH1C operator/(const TH1C &h1, const TH1C &h2); 432 433 ClassDef(TH1C,1) //1-Dim histograms (one char per channel) 434 }; 435 436 TH1C operator*(Double_t c1, const TH1C &h1); 437 inline 438 TH1C operator*(const TH1C &h1, Double_t c1) {return operator*(c1,h1);} 439 TH1C operator+(const TH1C &h1, const TH1C &h2); 440 TH1C operator-(const TH1C &h1, const TH1C &h2); 441 TH1C operator*(const TH1C &h1, const TH1C &h2); 442 TH1C operator/(const TH1C &h1, const TH1C &h2); 443 444 //________________________________________________________________________ 445 446 class TH1S : public TH1, public TArrayS { 447 448 public: 449 TH1S(); 450 TH1S(const char *name,const char *title,Int_t nbinsx,Double_t xlow,Double_t xup); 451 TH1S(const char *name,const char *title,Int_t nbinsx,const Float_t *xbins); 452 TH1S(const char *name,const char *title,Int_t nbinsx,const Double_t *xbins); 453 TH1S(const TH1S &h1s); 454 virtual ~TH1S(); 455 456 virtual void AddBinContent(Int_t bin); 457 virtual void AddBinContent(Int_t bin, Double_t w); 458 virtual void Copy(TObject &hnew) const; 459 virtual TH1 *DrawCopy(Option_t *option="") const; 460 virtual Double_t GetBinContent(Int_t bin) const; 461 virtual Double_t GetBinContent(Int_t bin, Int_t) const {return GetBinContent(bin);} 462 virtual Double_t GetBinContent(Int_t bin, Int_t, Int_t) const {return GetBinContent(bin);} 463 virtual void Reset(Option_t *option=""); 464 virtual void SetBinContent(Int_t bin, Double_t content); 465 virtual void SetBinContent(Int_t bin, Int_t, Double_t content) {SetBinContent(bin,content);} 466 virtual void SetBinContent(Int_t bin, Int_t, Int_t, Double_t content) {SetBinContent(bin,content);} 467 virtual void SetBinsLength(Int_t n=-1); 468 TH1S& operator=(const TH1S &h1); 469 friend TH1S operator*(Double_t c1, const TH1S &h1); 470 friend TH1S operator*(const TH1S &h1, Double_t c1); 471 friend TH1S operator+(const TH1S &h1, const TH1S &h2); 472 friend TH1S operator-(const TH1S &h1, const TH1S &h2); 473 friend TH1S operator*(const TH1S &h1, const TH1S &h2); 474 friend TH1S operator/(const TH1S &h1, const TH1S &h2); 475 476 ClassDef(TH1S,1) //1-Dim histograms (one short per channel) 477 }; 478 479 TH1S operator*(Double_t c1, const TH1S &h1); 480 inline 481 TH1S operator*(const TH1S &h1, Double_t c1) {return operator*(c1,h1);} 482 TH1S operator+(const TH1S &h1, const TH1S &h2); 483 TH1S operator-(const TH1S &h1, const TH1S &h2); 484 TH1S operator*(const TH1S &h1, const TH1S &h2); 485 TH1S operator/(const TH1S &h1, const TH1S &h2); 486 487 //________________________________________________________________________ 488 489 class TH1I: public TH1, public TArrayI { 490 491 public: 492 TH1I(); 493 TH1I(const char *name,const char *title,Int_t nbinsx,Double_t xlow,Double_t xup); 494 TH1I(const char *name,const char *title,Int_t nbinsx,const Float_t *xbins); 495 TH1I(const char *name,const char *title,Int_t nbinsx,const Double_t *xbins); 496 TH1I(const TH1I &h1i); 497 virtual ~TH1I(); 498 499 virtual void AddBinContent(Int_t bin); 500 virtual void AddBinContent(Int_t bin, Double_t w); 501 virtual void Copy(TObject &hnew) const; 502 virtual TH1 *DrawCopy(Option_t *option="") const; 503 virtual Double_t GetBinContent(Int_t bin) const; 504 virtual Double_t GetBinContent(Int_t bin, Int_t) const {return GetBinContent(bin);} 505 virtual Double_t GetBinContent(Int_t bin, Int_t, Int_t) const {return GetBinContent(bin);} 506 virtual void Reset(Option_t *option=""); 507 virtual void SetBinContent(Int_t bin, Double_t content); 508 virtual void SetBinContent(Int_t bin, Int_t, Double_t content) {SetBinContent(bin,content);} 509 virtual void SetBinContent(Int_t bin, Int_t, Int_t, Double_t content) {SetBinContent(bin,content);} 510 virtual void SetBinsLength(Int_t n=-1); 511 TH1I& operator=(const TH1I &h1); 512 friend TH1I operator*(Double_t c1, const TH1I &h1); 513 friend TH1I operator*(const TH1I &h1, Double_t c1); 514 friend TH1I operator+(const TH1I &h1, const TH1I &h2); 515 friend TH1I operator-(const TH1I &h1, const TH1I &h2); 516 friend TH1I operator*(const TH1I &h1, const TH1I &h2); 517 friend TH1I operator/(const TH1I &h1, const TH1I &h2); 518 519 ClassDef(TH1I,1) //1-Dim histograms (one 32 bits integer per channel) 520 }; 521 522 TH1I operator*(Double_t c1, const TH1I &h1); 523 inline 524 TH1I operator*(const TH1I &h1, Double_t c1) {return operator*(c1,h1);} 525 TH1I operator+(const TH1I &h1, const TH1I &h2); 526 TH1I operator-(const TH1I &h1, const TH1I &h2); 527 TH1I operator*(const TH1I &h1, const TH1I &h2); 528 TH1I operator/(const TH1I &h1, const TH1I &h2); 529 530 //________________________________________________________________________ 531 532 class TH1F : public TH1, public TArrayF { 533 534 public: 535 TH1F(); 536 TH1F(const char *name,const char *title,Int_t nbinsx,Double_t xlow,Double_t xup); 537 TH1F(const char *name,const char *title,Int_t nbinsx,const Float_t *xbins); 538 TH1F(const char *name,const char *title,Int_t nbinsx,const Double_t *xbins); 539 TH1F(const TVectorF &v); 540 TH1F(const TH1F &h1f); 541 virtual ~TH1F(); 542 543 virtual void AddBinContent(Int_t bin) {++fArray[bin];} 544 virtual void AddBinContent(Int_t bin, Double_t w) 545 {fArray[bin] += Float_t (w);} 546 virtual void Copy(TObject &hnew) const; 547 virtual TH1 *DrawCopy(Option_t *option="") const; 548 virtual Double_t GetBinContent(Int_t bin) const; 549 virtual Double_t GetBinContent(Int_t bin, Int_t) const {return GetBinContent(bin);} 550 virtual Double_t GetBinContent(Int_t bin, Int_t, Int_t) const {return GetBinContent(bin);} 551 virtual void Reset(Option_t *option=""); 552 virtual void SetBinContent(Int_t bin, Double_t content); 553 virtual void SetBinContent(Int_t bin, Int_t, Double_t content) {SetBinContent(bin,content);} 554 virtual void SetBinContent(Int_t bin, Int_t, Int_t, Double_t content) {SetBinContent(bin,content);} 555 virtual void SetBinsLength(Int_t n=-1); 556 TH1F& operator=(const TH1F &h1); 557 friend TH1F operator*(Double_t c1, const TH1F &h1); 558 friend TH1F operator*(const TH1F &h1, Double_t c1); 559 friend TH1F operator+(const TH1F &h1, const TH1F &h2); 560 friend TH1F operator-(const TH1F &h1, const TH1F &h2); 561 friend TH1F operator*(const TH1F &h1, const TH1F &h2); 562 friend TH1F operator/(const TH1F &h1, const TH1F &h2); 563 564 ClassDef(TH1F,1) //1-Dim histograms (one float per channel) 565 }; 566 567 TH1F operator*(Double_t c1, const TH1F &h1); 568 inline 569 TH1F operator*(const TH1F &h1, Double_t c1) {return operator*(c1,h1);} 570 TH1F operator+(const TH1F &h1, const TH1F &h2); 571 TH1F operator-(const TH1F &h1, const TH1F &h2); 572 TH1F operator*(const TH1F &h1, const TH1F &h2); 573 TH1F operator/(const TH1F &h1, const TH1F &h2); 574 575 //________________________________________________________________________ 576 577 class TH1D : public TH1, public TArrayD { 578 579 public: 580 TH1D(); 581 TH1D(const char *name,const char *title,Int_t nbinsx,Double_t xlow,Double_t xup); 582 TH1D(const char *name,const char *title,Int_t nbinsx,const Float_t *xbins); 583 TH1D(const char *name,const char *title,Int_t nbinsx,const Double_t *xbins); 584 TH1D(const TVectorD &v); 585 TH1D(const TH1D &h1d); 586 virtual ~TH1D(); 587 588 virtual void AddBinContent(Int_t bin) {++fArray[bin];} 589 virtual void AddBinContent(Int_t bin, Double_t w) 590 {fArray[bin] += Double_t (w);} 591 virtual void Copy(TObject &hnew) const; 592 virtual TH1 *DrawCopy(Option_t *option="") const; 593 virtual Double_t GetBinContent(Int_t bin) const; 594 virtual Double_t GetBinContent(Int_t bin, Int_t) const {return GetBinContent(bin);} 595 virtual Double_t GetBinContent(Int_t bin, Int_t, Int_t) const {return GetBinContent(bin);} 596 virtual void Reset(Option_t *option=""); 597 virtual void SetBinContent(Int_t bin, Double_t content); 598 virtual void SetBinContent(Int_t bin, Int_t, Double_t content) {SetBinContent(bin,content);} 599 virtual void SetBinContent(Int_t bin, Int_t, Int_t, Double_t content) {SetBinContent(bin,content);} 600 virtual void SetBinsLength(Int_t n=-1); 601 TH1D& operator=(const TH1D &h1); 602 friend TH1D operator*(Double_t c1, const TH1D &h1); 603 friend TH1D operator*(const TH1D &h1, Double_t c1); 604 friend TH1D operator+(const TH1D &h1, const TH1D &h2); 605 friend TH1D operator-(const TH1D &h1, const TH1D &h2); 606 friend TH1D operator*(const TH1D &h1, const TH1D &h2); 607 friend TH1D operator/(const TH1D &h1, const TH1D &h2); 608 609 ClassDef(TH1D,1) //1-Dim histograms (one double per channel) 610 }; 611 612 TH1D operator*(Double_t c1, const TH1D &h1); 613 inline 614 TH1D operator*(const TH1D &h1, Double_t c1) {return operator*(c1,h1);} 615 TH1D operator+(const TH1D &h1, const TH1D &h2); 616 TH1D operator-(const TH1D &h1, const TH1D &h2); 617 TH1D operator*(const TH1D &h1, const TH1D &h2); 618 TH1D operator/(const TH1D &h1, const TH1D &h2); 619 620 extern TH1 *R__H(Int_t hid); 621 extern TH1 *R__H(const char *hname); 622 623 #endif 624