ROOT logo
ROOT » HIST » HIST » TH2

class TH2: public TH1


 Service class for 2-Dim histogram classes

  TH2C a 2-D histogram with one byte per cell (char)
  TH2S a 2-D histogram with two bytes per cell (short integer)
  TH2I a 2-D histogram with four bytes per cell (32 bits integer)
  TH2F a 2-D histogram with four bytes per cell (float)
  TH2D a 2-D histogram with eight bytes per cell (double)

Function Members (Methods)

public:
TH2(const TH2&)
virtual~TH2()
voidTObject::AbstractMethod(const char* method) const
virtual Bool_tTH1::Add(const TH1* h1, Double_t c1 = 1)
virtual Bool_tTH1::Add(TF1* h1, Double_t c1 = 1, Option_t* option = "")
virtual Bool_tTH1::Add(const TH1* h, const TH1* h2, Double_t c1 = 1, Double_t c2 = 1)MENU
virtual voidTH1::AddBinContent(Int_t bin)
virtual voidTH1::AddBinContent(Int_t bin, Double_t w)
static voidTH1::AddDirectory(Bool_t add = kTRUE)
static Bool_tTH1::AddDirectoryStatus()
virtual Double_tTH1::AndersonDarlingTest(const TH1* h2, Option_t* option = "") const
virtual Double_tTH1::AndersonDarlingTest(const TH1* h2, Double_t& advalue) const
virtual voidTObject::AppendPad(Option_t* option = "")
virtual voidTH1::Browse(TBrowser* b)
virtual Int_tBufferEmpty(Int_t action = 0)
virtual Double_tTH1::Chi2Test(const TH1* h2, Option_t* option = "UU", Double_t* res = 0) const
virtual Double_tTH1::Chi2TestX(const TH1* h2, Double_t& chi2, Int_t& ndf, Int_t& igood, Option_t* option = "UU", Double_t* res = 0) const
virtual Double_tTH1::Chisquare(TF1* f1, Option_t* option = "") const
static TClass*Class()
virtual const char*TObject::ClassName() const
virtual voidTNamed::Clear(Option_t* option = "")
virtual TObject*TNamed::Clone(const char* newname = "") const
virtual Int_tTNamed::Compare(const TObject* obj) const
virtual Double_tTH1::ComputeIntegral(Bool_t onlyPositive = false)
virtual voidCopy(TObject& hnew) const
virtual voidTObject::Delete(Option_t* option = "")MENU
virtual voidTH1::DirectoryAutoAdd(TDirectory*)
Int_tTAttLine::DistancetoLine(Int_t px, Int_t py, Double_t xp1, Double_t yp1, Double_t xp2, Double_t yp2)
virtual Int_tTH1::DistancetoPrimitive(Int_t px, Int_t py)
virtual Bool_tTH1::Divide(const TH1* h1)
virtual Bool_tTH1::Divide(TF1* f1, Double_t c1 = 1)
virtual Bool_tTH1::Divide(const TH1* h1, const TH1* h2, Double_t c1 = 1, Double_t c2 = 1, Option_t* option = "")MENU
virtual voidTH1::Draw(Option_t* option = "")
virtual voidTObject::DrawClass() constMENU
virtual TObject*TObject::DrawClone(Option_t* option = "") constMENU
virtual TH1*TH1::DrawCopy(Option_t* option = "") const
virtual TH1*TH1::DrawNormalized(Option_t* option = "", Double_t norm = 1) const
virtual voidTH1::DrawPanel()MENU
virtual voidTObject::Dump() constMENU
virtual voidTObject::Error(const char* method, const char* msgfmt) const
virtual voidTH1::Eval(TF1* f1, Option_t* option = "")
virtual voidTObject::Execute(const char* method, const char* params, Int_t* error = 0)
virtual voidTObject::Execute(TMethod* method, TObjArray* params, Int_t* error = 0)
virtual voidTH1::ExecuteEvent(Int_t event, Int_t px, Int_t py)
virtual voidTObject::Fatal(const char* method, const char* msgfmt) const
virtual TH1*TH1::FFT(TH1* h_output, Option_t* option)
virtual Int_tFill(Double_t x, Double_t y)
virtual Int_tFill(Double_t x, Double_t y, Double_t w)
virtual Int_tFill(Double_t x, const char* namey, Double_t w)
virtual Int_tFill(const char* namex, Double_t y, Double_t w)
virtual Int_tFill(const char* namex, const char* namey, Double_t w)
virtual voidTNamed::FillBuffer(char*& buffer)
virtual voidFillN(Int_t, const Double_t*, const Double_t*, Int_t)
virtual voidFillN(Int_t ntimes, const Double_t* x, const Double_t* y, const Double_t* w, Int_t stride = 1)
virtual voidFillRandom(const char* fname, Int_t ntimes = 5000)
virtual voidFillRandom(TH1* h, Int_t ntimes = 5000)
virtual Int_tTH1::FindBin(Double_t x, Double_t y = 0, Double_t z = 0)
virtual Int_tFindFirstBinAbove(Double_t threshold = 0, Int_t axis = 1) const
virtual Int_tTH1::FindFixBin(Double_t x, Double_t y = 0, Double_t z = 0) const
virtual Int_tFindLastBinAbove(Double_t threshold = 0, Int_t axis = 1) const
virtual TObject*TH1::FindObject(const char* name) const
virtual TObject*TH1::FindObject(const TObject* obj) const
virtual TFitResultPtrTH1::Fit(const char* formula, Option_t* option = "", Option_t* goption = "", Double_t xmin = 0, Double_t xmax = 0)MENU
virtual TFitResultPtrTH1::Fit(TF1* f1, Option_t* option = "", Option_t* goption = "", Double_t xmin = 0, Double_t xmax = 0)
static Int_tTH1::FitOptionsMake(Option_t* option, Foption_t& Foption)
virtual voidTH1::FitPanel()MENU
virtual voidFitSlicesX(TF1* f1 = 0, Int_t firstybin = 0, Int_t lastybin = -1, Int_t cut = 0, Option_t* option = "QNR", TObjArray* arr = 0)MENU
virtual voidFitSlicesY(TF1* f1 = 0, Int_t firstxbin = 0, Int_t lastxbin = -1, Int_t cut = 0, Option_t* option = "QNR", TObjArray* arr = 0)MENU
TH1*TH1::GetAsymmetry(TH1* h2, Double_t c2 = 1, Double_t dc2 = 0)
virtual Color_tTH1::GetAxisColor(Option_t* axis = "X") const
virtual Float_tTH1::GetBarOffset() const
virtual Float_tTH1::GetBarWidth() const
virtual Int_tTH1::GetBin(Int_t binx, Int_t biny = 0, Int_t binz = 0) const
virtual Double_tTH1::GetBinCenter(Int_t bin) const
virtual Double_tTH1::GetBinContent(Int_t bin) const
virtual Double_tTH1::GetBinContent(Int_t binx, Int_t biny) const
virtual Double_tTH1::GetBinContent(Int_t binx, Int_t biny, Int_t binz) const
virtual Double_tTH1::GetBinError(Int_t bin) const
virtual Double_tTH1::GetBinError(Int_t binx, Int_t biny) const
virtual Double_tTH1::GetBinError(Int_t binx, Int_t biny, Int_t binz) const
virtual Double_tGetBinErrorLow(Int_t binx, Int_t biny)
virtual TH1::EBinErrorOptTH1::GetBinErrorOption() const
virtual Double_tGetBinErrorUp(Int_t binx, Int_t biny)
virtual Double_tTH1::GetBinLowEdge(Int_t bin) const
virtual Double_tTH1::GetBinWidth(Int_t bin) const
virtual Double_tTH1::GetBinWithContent(Double_t c, Int_t& binx, Int_t firstx = 0, Int_t lastx = 0, Double_t maxdiff = 0) const
virtual Double_tGetBinWithContent2(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
virtual voidTH1::GetBinXYZ(Int_t binglobal, Int_t& binx, Int_t& biny, Int_t& binz) const
const Double_t*TH1::GetBuffer() const
Int_tTH1::GetBufferLength() const
Int_tTH1::GetBufferSize() const
virtual Double_tTH1::GetCellContent(Int_t binx, Int_t biny) const
virtual Double_tTH1::GetCellError(Int_t binx, Int_t biny) const
virtual voidTH1::GetCenter(Double_t* center) const
virtual Int_tTH1::GetContour(Double_t* levels = 0)
virtual Double_tTH1::GetContourLevel(Int_t level) const
virtual Double_tTH1::GetContourLevelPad(Int_t level) const
virtual Double_tGetCorrelationFactor(Int_t axis1 = 1, Int_t axis2 = 2) const
virtual Double_tGetCovariance(Int_t axis1 = 1, Int_t axis2 = 2) const
TH1*TH1::GetCumulative(Bool_t forward = kTRUE, const char* suffix = "_cumulative") const
static Int_tTH1::GetDefaultBufferSize()
static Bool_tTH1::GetDefaultSumw2()
virtual Int_tTH1::GetDimension() const
TDirectory*TH1::GetDirectory() const
virtual Option_t*TObject::GetDrawOption() const
static Long_tTObject::GetDtorOnly()
virtual Double_tTH1::GetEffectiveEntries() const
virtual Double_tTH1::GetEntries() const
virtual Color_tTAttFill::GetFillColor() const
virtual Style_tTAttFill::GetFillStyle() const
virtual TF1*TH1::GetFunction(const char* name) const
virtual const char*TObject::GetIconName() const
virtual Double_t*TH1::GetIntegral()
virtual Double_tTH1::GetKurtosis(Int_t axis = 1) const
virtual Color_tTH1::GetLabelColor(Option_t* axis = "X") const
virtual Style_tTH1::GetLabelFont(Option_t* axis = "X") const
virtual Float_tTH1::GetLabelOffset(Option_t* axis = "X") const
virtual Float_tTH1::GetLabelSize(Option_t* axis = "X") const
virtual Color_tTAttLine::GetLineColor() const
virtual Style_tTAttLine::GetLineStyle() const
virtual Width_tTAttLine::GetLineWidth() const
TList*TH1::GetListOfFunctions() const
virtual voidTH1::GetLowEdge(Double_t* edge) const
virtual Color_tTAttMarker::GetMarkerColor() const
virtual Size_tTAttMarker::GetMarkerSize() const
virtual Style_tTAttMarker::GetMarkerStyle() const
virtual Double_tTH1::GetMaximum(Double_t maxval = FLT_MAX) const
virtual Int_tTH1::GetMaximumBin() const
virtual Int_tTH1::GetMaximumBin(Int_t& locmax, Int_t& locmay, Int_t& locmaz) const
virtual Double_tTH1::GetMaximumStored() const
virtual Double_tTH1::GetMean(Int_t axis = 1) const
virtual Double_tTH1::GetMeanError(Int_t axis = 1) const
virtual Double_tTH1::GetMinimum(Double_t minval = -FLT_MAX) const
virtual Int_tTH1::GetMinimumBin() const
virtual Int_tTH1::GetMinimumBin(Int_t& locmix, Int_t& locmiy, Int_t& locmiz) const
virtual Double_tTH1::GetMinimumStored() const
virtual const char*TNamed::GetName() const
virtual Int_tTH1::GetNbinsX() const
virtual Int_tTH1::GetNbinsY() const
virtual Int_tTH1::GetNbinsZ() const
virtual Int_tTH1::GetNdivisions(Option_t* axis = "X") const
virtual Double_tTH1::GetNormFactor() const
virtual char*TH1::GetObjectInfo(Int_t px, Int_t py) const
static Bool_tTObject::GetObjectStat()
virtual Option_t*TH1::GetOption() const
TVirtualHistPainter*TH1::GetPainter(Option_t* option = "")
virtual Int_tTH1::GetQuantiles(Int_t nprobSum, Double_t* q, const Double_t* probSum = 0)
virtual Double_tTH1::GetRandom() const
virtual voidGetRandom2(Double_t& x, Double_t& y)
virtual Double_tTH1::GetRMS(Int_t axis = 1) const
virtual Double_tTH1::GetRMSError(Int_t axis = 1) const
virtual Double_tTH1::GetSkewness(Int_t axis = 1) const
virtual voidGetStats(Double_t* stats) const
Double_tTH1::GetStdDev(Int_t axis = 1) const
Double_tTH1::GetStdDevError(Int_t axis = 1) const
virtual Double_tTH1::GetSumOfWeights() const
virtual TArrayD*TH1::GetSumw2()
virtual const TArrayD*TH1::GetSumw2() const
virtual Int_tTH1::GetSumw2N() const
virtual Float_tTH1::GetTickLength(Option_t* axis = "X") const
virtual const char*TNamed::GetTitle() const
virtual Style_tTH1::GetTitleFont(Option_t* axis = "X") const
virtual Float_tTH1::GetTitleOffset(Option_t* axis = "X") const
virtual Float_tTH1::GetTitleSize(Option_t* axis = "X") const
virtual UInt_tTObject::GetUniqueID() const
TAxis*TH1::GetXaxis() const
TAxis*TH1::GetYaxis() const
TAxis*TH1::GetZaxis() const
virtual Bool_tTObject::HandleTimer(TTimer* timer)
virtual ULong_tTNamed::Hash() const
virtual voidTObject::Info(const char* method, const char* msgfmt) const
virtual Bool_tTObject::InheritsFrom(const char* classname) const
virtual Bool_tTObject::InheritsFrom(const TClass* cl) const
virtual voidTObject::Inspect() constMENU
virtual Double_tIntegral(Option_t* option = "") const
virtual Double_tIntegral(Int_t binx1, Int_t binx2, Int_t biny1, Int_t biny2, Option_t* option = "") const
virtual Double_tIntegral(Int_t, Int_t, Int_t, Int_t, Int_t, Int_t, Option_t* = "") const
virtual Double_tIntegralAndError(Int_t binx1, Int_t binx2, Int_t biny1, Int_t biny2, Double_t& err, Option_t* option = "") const
virtual Double_tInterpolate(Double_t x)
virtual Double_tInterpolate(Double_t x, Double_t y)
virtual Double_tInterpolate(Double_t x, Double_t y, Double_t z)
voidTObject::InvertBit(UInt_t f)
virtual TClass*IsA() const
Bool_tTH1::IsBinOverflow(Int_t bin) const
Bool_tTH1::IsBinUnderflow(Int_t bin) const
virtual Bool_tTObject::IsEqual(const TObject* obj) const
virtual Bool_tTObject::IsFolder() const
Bool_tTObject::IsOnHeap() const
virtual Bool_tTNamed::IsSortable() const
virtual Bool_tTAttFill::IsTransparent() const
Bool_tTObject::IsZombie() const
virtual Double_tKolmogorovTest(const TH1* h2, Option_t* option = "") const
virtual voidTH1::LabelsDeflate(Option_t* axis = "X")
virtual voidTH1::LabelsInflate(Option_t* axis = "X")
virtual voidTH1::LabelsOption(Option_t* option = "h", Option_t* axis = "X")
virtual voidTNamed::ls(Option_t* option = "") const
voidTObject::MayNotUse(const char* method) const
virtual Long64_tMerge(TCollection* list)
virtual voidTAttLine::Modify()
virtual Bool_tTH1::Multiply(const TH1* h1)
virtual Bool_tTH1::Multiply(TF1* h1, Double_t c1 = 1)
virtual Bool_tTH1::Multiply(const TH1* h1, const TH1* h2, Double_t c1 = 1, Double_t c2 = 1, Option_t* option = "")MENU
virtual Bool_tTObject::Notify()
voidTObject::Obsolete(const char* method, const char* asOfVers, const char* removedFromVers) const
static voidTObject::operator delete(void* ptr)
static voidTObject::operator delete(void* ptr, void* vp)
static voidTObject::operator delete[](void* ptr)
static voidTObject::operator delete[](void* ptr, void* vp)
void*TObject::operator new(size_t sz)
void*TObject::operator new(size_t sz, void* vp)
void*TObject::operator new[](size_t sz)
void*TObject::operator new[](size_t sz, void* vp)
TNamed&TNamed::operator=(const TNamed& rhs)
virtual voidTH1::Paint(Option_t* option = "")
virtual voidTObject::Pop()
virtual voidTH1::Print(Option_t* option = "") const
TProfile*ProfileX(const char* name = "_pfx", Int_t firstybin = 1, Int_t lastybin = -1, Option_t* option = "") constMENU
TProfile*ProfileY(const char* name = "_pfy", Int_t firstxbin = 1, Int_t lastxbin = -1, Option_t* option = "") constMENU
TH1D*ProjectionX(const char* name = "_px", Int_t firstybin = 0, Int_t lastybin = -1, Option_t* option = "") constMENU
TH1D*ProjectionY(const char* name = "_py", Int_t firstxbin = 0, Int_t lastxbin = -1, Option_t* option = "") constMENU
virtual voidPutStats(Double_t* stats)
virtual Int_tTObject::Read(const char* name)
virtual TH1*TH1::Rebin(Int_t ngroup = 2, const char* newname = "", const Double_t* xbins = 0)MENU
virtual TH2*Rebin2D(Int_t nxgroup = 2, Int_t nygroup = 2, const char* newname = "")
virtual voidTH1::RebinAxis(Double_t x, TAxis* axis)
virtual TH2*RebinX(Int_t ngroup = 2, const char* newname = "")
virtual TH2*RebinY(Int_t ngroup = 2, const char* newname = "")
virtual voidTH1::Rebuild(Option_t* option = "")
virtual voidTH1::RecursiveRemove(TObject* obj)
virtual voidReset(Option_t* option = "")
virtual voidTAttFill::ResetAttFill(Option_t* option = "")
virtual voidTAttLine::ResetAttLine(Option_t* option = "")
virtual voidTAttMarker::ResetAttMarker(Option_t* toption = "")
voidTObject::ResetBit(UInt_t f)
virtual voidTH1::ResetStats()
virtual voidTObject::SaveAs(const char* filename = "", Option_t* option = "") constMENU
virtual voidTAttFill::SaveFillAttributes(ostream& out, const char* name, Int_t coldef = 1, Int_t stydef = 1001)
virtual voidTAttLine::SaveLineAttributes(ostream& out, const char* name, Int_t coldef = 1, Int_t stydef = 1, Int_t widdef = 1)
virtual voidTAttMarker::SaveMarkerAttributes(ostream& out, const char* name, Int_t coldef = 1, Int_t stydef = 1, Int_t sizdef = 1)
virtual voidTH1::SavePrimitive(ostream& out, Option_t* option = "")
virtual voidTH1::Scale(Double_t c1 = 1, Option_t* option = "")
virtual voidTH1::SetAxisColor(Color_t color = 1, Option_t* axis = "X")
virtual voidTH1::SetAxisRange(Double_t xmin, Double_t xmax, Option_t* axis = "X")
virtual voidTH1::SetBarOffset(Float_t offset = 0.25)
virtual voidTH1::SetBarWidth(Float_t width = 0.5)
virtual voidTH1::SetBinContent(Int_t bin, Double_t content)
virtual voidTH1::SetBinContent(Int_t binx, Int_t biny, Double_t content)
virtual voidTH1::SetBinContent(Int_t binx, Int_t biny, Int_t binz, Double_t content)
virtual voidTH1::SetBinError(Int_t bin, Double_t error)
virtual voidTH1::SetBinError(Int_t binx, Int_t biny, Double_t error)
virtual voidTH1::SetBinError(Int_t binx, Int_t biny, Int_t binz, Double_t error)
virtual voidTH1::SetBinErrorOption(TH1::EBinErrorOpt type)
virtual voidTH1::SetBins(Int_t nx, const Double_t* xBins)
virtual voidTH1::SetBins(Int_t nx, Double_t xmin, Double_t xmax)
virtual voidTH1::SetBins(Int_t nx, const Double_t* xBins, Int_t ny, const Double_t* yBins)
virtual voidTH1::SetBins(Int_t nx, Double_t xmin, Double_t xmax, Int_t ny, Double_t ymin, Double_t ymax)
virtual voidTH1::SetBins(Int_t nx, const Double_t* xBins, Int_t ny, const Double_t* yBins, Int_t nz, const Double_t* zBins)
virtual voidTH1::SetBins(Int_t nx, Double_t xmin, Double_t xmax, Int_t ny, Double_t ymin, Double_t ymax, Int_t nz, Double_t zmin, Double_t zmax)
virtual voidTH1::SetBinsLength(Int_t = -1)
voidTObject::SetBit(UInt_t f)
voidTObject::SetBit(UInt_t f, Bool_t set)
virtual voidTH1::SetBuffer(Int_t buffersize, Option_t* option = "")
virtual voidTH1::SetCellContent(Int_t binx, Int_t biny, Double_t content)
virtual voidTH1::SetCellError(Int_t binx, Int_t biny, Double_t content)
virtual voidTH1::SetContent(const Double_t* content)
virtual voidTH1::SetContour(Int_t nlevels, const Double_t* levels = 0)
virtual voidTH1::SetContourLevel(Int_t level, Double_t value)
static voidTH1::SetDefaultBufferSize(Int_t buffersize = 1000)
static voidTH1::SetDefaultSumw2(Bool_t sumw2 = kTRUE)
virtual voidTH1::SetDirectory(TDirectory* dir)
virtual voidTObject::SetDrawOption(Option_t* option = "")MENU
static voidTObject::SetDtorOnly(void* obj)
virtual voidTH1::SetEntries(Double_t n)
virtual voidTH1::SetError(const Double_t* error)
virtual voidTAttFill::SetFillAttributes()MENU
virtual voidTAttFill::SetFillColor(Color_t fcolor)
virtual voidTAttFill::SetFillColorAlpha(Color_t fcolor, Float_t falpha)
virtual voidTAttFill::SetFillStyle(Style_t fstyle)
virtual voidTH1::SetLabelColor(Color_t color = 1, Option_t* axis = "X")
virtual voidTH1::SetLabelFont(Style_t font = 62, Option_t* axis = "X")
virtual voidTH1::SetLabelOffset(Float_t offset = 0.005, Option_t* axis = "X")
virtual voidTH1::SetLabelSize(Float_t size = 0.02, Option_t* axis = "X")
virtual voidTAttLine::SetLineAttributes()MENU
virtual voidTAttLine::SetLineColor(Color_t lcolor)
virtual voidTAttLine::SetLineColorAlpha(Color_t lcolor, Float_t lalpha)
virtual voidTAttLine::SetLineStyle(Style_t lstyle)
virtual voidTAttLine::SetLineWidth(Width_t lwidth)
virtual voidTAttMarker::SetMarkerAttributes()MENU
virtual voidTAttMarker::SetMarkerColor(Color_t mcolor = 1)
virtual voidTAttMarker::SetMarkerColorAlpha(Color_t mcolor, Float_t malpha)
virtual voidTAttMarker::SetMarkerSize(Size_t msize = 1)
virtual voidTAttMarker::SetMarkerStyle(Style_t mstyle = 1)
virtual voidTH1::SetMaximum(Double_t maximum = -1111)MENU
virtual voidTH1::SetMinimum(Double_t minimum = -1111)MENU
virtual voidTH1::SetName(const char* name)MENU
virtual voidTH1::SetNameTitle(const char* name, const char* title)
virtual voidTH1::SetNdivisions(Int_t n = 510, Option_t* axis = "X")
virtual voidTH1::SetNormFactor(Double_t factor = 1)
static voidTObject::SetObjectStat(Bool_t stat)
virtual voidTH1::SetOption(Option_t* option = " ")
virtual voidSetShowProjectionX(Int_t nbins = 1)MENU
virtual voidSetShowProjectionY(Int_t nbins = 1)MENU
virtual voidTH1::SetStats(Bool_t stats = kTRUE)MENU
virtual voidTH1::SetTickLength(Float_t length = 0.02, Option_t* axis = "X")
virtual voidTH1::SetTitle(const char* title)MENU
virtual voidTH1::SetTitleFont(Style_t font = 62, Option_t* axis = "X")
virtual voidTH1::SetTitleOffset(Float_t offset = 1, Option_t* axis = "X")
virtual voidTH1::SetTitleSize(Float_t size = 0.02, Option_t* axis = "X")
virtual voidTObject::SetUniqueID(UInt_t uid)
virtual voidTH1::SetXTitle(const char* title)
virtual voidTH1::SetYTitle(const char* title)
virtual voidTH1::SetZTitle(const char* title)
virtual TH1*ShowBackground(Int_t niter = 20, Option_t* option = "same")
virtual voidShowMembers(TMemberInspector&)
virtual Int_tShowPeaks(Double_t sigma = 2, Option_t* option = "", Double_t threshold = 0.05)MENU
virtual Int_tTNamed::Sizeof() const
virtual voidSmooth(Int_t ntimes = 1, Option_t* option = "")MENU
static voidTH1::SmoothArray(Int_t NN, Double_t* XX, Int_t ntimes = 1)
static voidTH1::StatOverflows(Bool_t flag = kTRUE)
virtual voidStreamer(TBuffer&)
voidStreamerNVirtual(TBuffer& ClassDef_StreamerNVirtual_b)
virtual voidTH1::Sumw2(Bool_t flag = kTRUE)
virtual voidTObject::SysError(const char* method, const char* msgfmt) const
Bool_tTObject::TestBit(UInt_t f) const
Int_tTObject::TestBits(UInt_t f) const
static TH1*TH1::TransformHisto(TVirtualFFT* fft, TH1* h_output, Option_t* option)
virtual voidTH1::UseCurrentStyle()
virtual voidTObject::Warning(const char* method, const char* msgfmt) const
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0)
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) const
protected:
TH2()
TH2(const char* name, const char* title, Int_t nbinsx, const Double_t* xbins, Int_t nbinsy, const Double_t* ybins)
TH2(const char* name, const char* title, Int_t nbinsx, const Float_t* xbins, Int_t nbinsy, const Float_t* ybins)
TH2(const char* name, const char* title, Int_t nbinsx, const Double_t* xbins, Int_t nbinsy, Double_t ylow, Double_t yup)
TH2(const char* name, const char* title, Int_t nbinsx, Double_t xlow, Double_t xup, Int_t nbinsy, const Double_t* ybins)
TH2(const char* name, const char* title, Int_t nbinsx, Double_t xlow, Double_t xup, Int_t nbinsy, Double_t ylow, Double_t yup)
virtual Int_tBufferFill(Double_t, Double_t)
virtual Int_tBufferFill(Double_t x, Double_t y, Double_t w)
static boolTH1::CheckAxisLimits(const TAxis* a1, const TAxis* a2)
static boolTH1::CheckBinLabels(const TAxis* a1, const TAxis* a2)
static boolTH1::CheckBinLimits(const TAxis* a1, const TAxis* a2)
static boolTH1::CheckConsistency(const TH1* h1, const TH1* h2)
static boolTH1::CheckConsistentSubAxes(const TAxis* a1, Int_t firstBin1, Int_t lastBin1, const TAxis* a2, Int_t firstBin2 = 0, Int_t lastBin2 = 0)
static boolTH1::CheckEqualAxes(const TAxis* a1, const TAxis* a2)
virtual voidTObject::DoError(int level, const char* location, const char* fmt, va_list va) const
virtual voidTH1::DoFillN(Int_t ntimes, const Double_t* x, const Double_t* w, Int_t stride = 1)
virtual voidDoFitSlices(bool onX, TF1* f1, Int_t firstbin, Int_t lastbin, Int_t cut, Option_t* option, TObjArray* arr)
virtual Double_tTH1::DoIntegral(Int_t ix1, Int_t ix2, Int_t iy1, Int_t iy2, Int_t iz1, Int_t iz2, Double_t& err, Option_t* opt, Bool_t doerr = kFALSE) const
virtual TProfile*DoProfile(bool onX, const char* name, Int_t firstbin, Int_t lastbin, Option_t* option) const
virtual TH1D*DoProjection(bool onX, const char* name, Int_t firstbin, Int_t lastbin, Option_t* option) const
virtual Int_tFill(Double_t)
virtual Int_tFill(const char*, Double_t)
virtual Bool_tTH1::FindNewAxisLimits(const TAxis* axis, const Double_t point, Double_t& newMin, Double_t& newMax)
voidTObject::MakeZombie()
static Bool_tTH1::RecomputeAxisLimits(TAxis& destAxis, const TAxis& anAxis)
static Bool_tTH1::SameLimitsAndNBins(const TAxis& axis1, const TAxis& axis2)
virtual voidTH1::SavePrimitiveHelp(ostream& out, const char* hname, Option_t* option = "")

Data Members

protected:
Short_tTH1::fBarOffset(1000*offset) for bar charts or legos
Short_tTH1::fBarWidth(1000*width) for bar charts or legos
TH1::EBinErrorOptTH1::fBinStatErrOptoption for bin statistical errors
Double_t*TH1::fBuffer[fBufferSize] entry buffer
Int_tTH1::fBufferSizefBuffer size
TArrayDTH1::fContourArray to display contour levels
Int_tTH1::fDimension!Histogram dimension (1, 2 or 3 dim)
TDirectory*TH1::fDirectory!Pointer to directory holding this histogram
Double_tTH1::fEntriesNumber of entries
Color_tTAttFill::fFillColorfill area color
Style_tTAttFill::fFillStylefill area style
TList*TH1::fFunctions->Pointer to list of functions (fits and user)
Double_t*TH1::fIntegral!Integral of bins used by GetRandom
Color_tTAttLine::fLineColorline color
Style_tTAttLine::fLineStyleline style
Width_tTAttLine::fLineWidthline width
Color_tTAttMarker::fMarkerColorMarker color index
Size_tTAttMarker::fMarkerSizeMarker size
Style_tTAttMarker::fMarkerStyleMarker style
Double_tTH1::fMaximumMaximum value for plotting
Double_tTH1::fMinimumMinimum value for plotting
TStringTNamed::fNameobject identifier
Int_tTH1::fNcellsnumber of bins(1D), cells (2D) +U/Overflows
Double_tTH1::fNormFactorNormalization factor
TStringTH1::fOptionhistogram options
TVirtualHistPainter*TH1::fPainter!pointer to histogram painter
Double_tfScalefactorScale factor
TArrayDTH1::fSumw2Array of sum of squares of weights
TStringTNamed::fTitleobject title
Double_tTH1::fTsumwTotal Sum of weights
Double_tTH1::fTsumw2Total Sum of squares of weights
Double_tTH1::fTsumwxTotal Sum of weight*X
Double_tTH1::fTsumwx2Total Sum of weight*X*X
Double_tfTsumwxyTotal Sum of weight*X*Y
Double_tfTsumwyTotal Sum of weight*Y
Double_tfTsumwy2Total Sum of weight*Y*Y
TAxisTH1::fXaxisX axis descriptor
TAxisTH1::fYaxisY axis descriptor
TAxisTH1::fZaxisZ axis descriptor
static Bool_tTH1::fgAddDirectory!flag to add histograms to the directory
static Int_tTH1::fgBufferSize!default buffer size for automatic histograms
static Bool_tTH1::fgDefaultSumw2!flag to call TH1::Sumw2 automatically at histogram creation time
static Bool_tTH1::fgStatOverflows!flag to use under/overflows in statistics

Class Charts

Inheritance Inherited Members Includes Libraries
Class Charts

Function documentation

TH2()
 Constructor.
TH2(const char* name, const char* title, Int_t nbinsx, Double_t xlow, Double_t xup, Int_t nbinsy, Double_t ylow, Double_t yup)
 see comments in the TH1 base class constructors
TH2(const char* name, const char* title, Int_t nbinsx, const Double_t* xbins, Int_t nbinsy, Double_t ylow, Double_t yup)
 see comments in the TH1 base class constructors
TH2(const char* name, const char* title, Int_t nbinsx, Double_t xlow, Double_t xup, Int_t nbinsy, const Double_t* ybins)
 see comments in the TH1 base class constructors
TH2(const char* name, const char* title, Int_t nbinsx, const Double_t* xbins, Int_t nbinsy, const Double_t* ybins)
 see comments in the TH1 base class constructors
TH2(const char* name, const char* title, Int_t nbinsx, const Float_t* xbins, Int_t nbinsy, const Float_t* ybins)
 see comments in the TH1 base class constructors
TH2(const TH2& )
 Copy constructor.
 The list of functions is not copied. (Use Clone if needed)
~TH2()
 Destructor.
Int_t BufferEmpty(Int_t action = 0)
 Fill histogram with all entries in the buffer.
 action = -1 histogram is reset and refilled from the buffer (called by THistPainter::Paint)
 action =  0 histogram is filled from the buffer
 action =  1 histogram is filled and buffer is deleted
             The buffer is automatically deleted when the number of entries
             in the buffer is greater than the number of entries in the histogram
Int_t BufferFill(Double_t x, Double_t y, Double_t w)
 accumulate arguments in buffer. When buffer is full, empty the buffer
 fBuffer[0] = number of entries in buffer
 fBuffer[1] = w of first entry
 fBuffer[2] = x of first entry
 fBuffer[3] = y of first entry
void Copy(TObject& hnew) const
 Copy.
Int_t Fill(Double_t )
 Invalid Fill method
Int_t Fill(Double_t x, Double_t y)
-*Increment cell defined by x,y by 1
*-*                  ==================================
-
*-* if x or/and y is less than the low-edge of the corresponding axis first bin,
*-*   the Underflow cell is incremented.
*-* if x or/and y is greater than the upper edge of corresponding axis last bin,
*-*   the Overflow cell is incremented.
-
*-* If the storage of the sum of squares of weights has been triggered,
*-* via the function Sumw2, then the sum of the squares of weights is incremented
*-* by 1 in the cell corresponding to x,y.
-
-
Int_t Fill(Double_t x, Double_t y, Double_t w)
-*-*-*-*-*Increment cell defined by x,y by a weight w
*-*                  ===========================================
-
*-* if x or/and y is less than the low-edge of the corresponding axis first bin,
*-*   the Underflow cell is incremented.
*-* if x or/and y is greater than the upper edge of corresponding axis last bin,
*-*   the Overflow cell is incremented.
-
*-* If the storage of the sum of squares of weights has been triggered,
*-* via the function Sumw2, then the sum of the squares of weights is incremented
*-* by w^2 in the cell corresponding to x,y.
-
-
Int_t Fill(const char* namex, const char* namey, Double_t w)
 Increment cell defined by namex,namey by a weight w

 if x or/and y is less than the low-edge of the corresponding axis first bin,
   the Underflow cell is incremented.
 if x or/and y is greater than the upper edge of corresponding axis last bin,
   the Overflow cell is incremented.

 If the storage of the sum of squares of weights has been triggered,
 via the function Sumw2, then the sum of the squares of weights is incremented
 by w^2 in the cell corresponding to x,y.

Int_t Fill(const char* namex, Double_t y, Double_t w)
 Increment cell defined by namex,y by a weight w

 if x or/and y is less than the low-edge of the corresponding axis first bin,
   the Underflow cell is incremented.
 if x or/and y is greater than the upper edge of corresponding axis last bin,
   the Overflow cell is incremented.

 If the storage of the sum of squares of weights has been triggered,
 via the function Sumw2, then the sum of the squares of weights is incremented
 by w^2 in the cell corresponding to x,y.

Int_t Fill(Double_t x, const char* namey, Double_t w)
 Increment cell defined by x,namey by a weight w

 if x or/and y is less than the low-edge of the corresponding axis first bin,
   the Underflow cell is incremented.
 if x or/and y is greater than the upper edge of corresponding axis last bin,
   the Overflow cell is incremented.

 If the storage of the sum of squares of weights has been triggered,
 via the function Sumw2, then the sum of the squares of weights is incremented
 by w^2 in the cell corresponding to x,y.

void FillN(Int_t ntimes, const Double_t* x, const Double_t* y, const Double_t* w, Int_t stride = 1)
-*-*-*Fill a 2-D histogram with an array of values and weights
*-*          ========================================================
-
*-* ntimes:  number of entries in arrays x and w (array size must be ntimes*stride)
*-* x:       array of x values to be histogrammed
*-* y:       array of y values to be histogrammed
*-* w:       array of weights
*-* stride:  step size through arrays x, y and w
-
*-* If the storage of the sum of squares of weights has been triggered,
*-* via the function Sumw2, then the sum of the squares of weights is incremented
*-* by w[i]^2 in the cell corresponding to x[i],y[i].
*-* if w is NULL each entry is assumed a weight=1
-
*-* NB: function only valid for a TH2x object
-
-
void FillRandom(const char* fname, Int_t ntimes = 5000)
-*-*-*Fill histogram following distribution in function fname
*-*          =======================================================
-
*-*   The distribution contained in the function fname (TF2) is integrated
*-*   over the channel contents.
*-*   It is normalized to 1.
*-*   Getting one random number implies:
*-*     - Generating a random number between 0 and 1 (say r1)
*-*     - Look in which bin in the normalized integral r1 corresponds to
*-*     - Fill histogram channel
*-*   ntimes random numbers are generated
-
*-*  One can also call TF2::GetRandom2 to get a random variate from a function.
-
*
void FillRandom(TH1* h, Int_t ntimes = 5000)
-*-*-*Fill histogram following distribution in histogram h
*-*          ====================================================
-
*-*   The distribution contained in the histogram h (TH2) is integrated
*-*   over the channel contents.
*-*   It is normalized to 1.
*-*   Getting one random number implies:
*-*     - Generating a random number between 0 and 1 (say r1)
*-*     - Look in which bin in the normalized integral r1 corresponds to
*-*     - Fill histogram channel
*-*   ntimes random numbers are generated
-
*
Int_t FindFirstBinAbove(Double_t threshold = 0, Int_t axis = 1) const
find first bin with content > threshold for axis (1=x, 2=y, 3=z)
if no bins with content > threshold is found the function returns -1.
Int_t FindLastBinAbove(Double_t threshold = 0, Int_t axis = 1) const
find last bin with content > threshold for axis (1=x, 2=y, 3=z)
if no bins with content > threshold is found the function returns -1.
void DoFitSlices(bool onX, TF1* f1, Int_t firstbin, Int_t lastbin, Int_t cut, Option_t* option, TObjArray* arr)
void FitSlicesX(TF1* f1 = 0, Int_t firstybin = 0, Int_t lastybin = -1, Int_t cut = 0, Option_t* option = "QNR", TObjArray* arr = 0)
 Project slices along X in case of a 2-D histogram, then fit each slice
 with function f1 and make a histogram for each fit parameter
 Only bins along Y between firstybin and lastybin are considered.
 By default (firstybin == 0, lastybin == -1), all bins in y including
 over- and underflows are taken into account.
 If f1=0, a gaussian is assumed
 Before invoking this function, one can set a subrange to be fitted along X
 via f1->SetRange(xmin,xmax)
 The argument option (default="QNR") can be used to change the fit options.
     "Q"  means Quiet mode
     "N"  means do not show the result of the fit
     "R"  means fit the function in the specified function range
     "G2" merge 2 consecutive bins along X
     "G3" merge 3 consecutive bins along X
     "G4" merge 4 consecutive bins along X
     "G5" merge 5 consecutive bins along X
     "S"  sliding merge: merge n consecutive bins along X accordingly to what Gn is given.
          It makes sense when used together with a Gn option

 The generated histograms are returned by adding them to arr, if arr is not NULL.
 arr's SetOwner() is called, to signal that it is the user's respponsability to
 delete the histograms, possibly by deleting the arrary.
    TObjArray aSlices;
    h2->FitSlicesX(func, 0, -1, 0, "QNR", &aSlices);
 will already delete the histograms once aSlice goes out of scope. aSlices will
 contain the histogram for the i-th parameter of the fit function at aSlices[i];
 aSlices[n] (n being the number of parameters) contains the chi2 distribution of
 the fits.

 If arr is NULL, the generated histograms are added to the list of objects
 in the current directory. It is the user's responsability to delete
 these histograms.

  Example: Assume a 2-d histogram h2
   Root > h2->FitSlicesX(); produces 4 TH1D histograms
          with h2_0 containing parameter 0(Constant) for a Gaus fit
                    of each bin in Y projected along X
          with h2_1 containing parameter 1(Mean) for a gaus fit
          with h2_2 containing parameter 2(RMS)  for a gaus fit
          with h2_chi2 containing the chisquare/number of degrees of freedom for a gaus fit

   Root > h2->FitSlicesX(0,15,22,10);
          same as above, but only for bins 15 to 22 along Y
          and only for bins in Y for which the corresponding projection
          along X has more than cut bins filled.

  NOTE: To access the generated histograms in the current directory, do eg:
     TH1D *h2_1 = (TH1D*)gDirectory->Get("h2_1");
void FitSlicesY(TF1* f1 = 0, Int_t firstxbin = 0, Int_t lastxbin = -1, Int_t cut = 0, Option_t* option = "QNR", TObjArray* arr = 0)
 Project slices along Y in case of a 2-D histogram, then fit each slice
 with function f1 and make a histogram for each fit parameter
 Only bins along X between firstxbin and lastxbin are considered.
 By default (firstxbin == 0, lastxbin == -1), all bins in x including
 over- and underflows are taken into account.
 If f1=0, a gaussian is assumed
 Before invoking this function, one can set a subrange to be fitted along Y
 via f1->SetRange(ymin,ymax)
 The argument option (default="QNR") can be used to change the fit options.
     "Q"  means Quiet mode
     "N"  means do not show the result of the fit
     "R"  means fit the function in the specified function range
     "G2" merge 2 consecutive bins along Y
     "G3" merge 3 consecutive bins along Y
     "G4" merge 4 consecutive bins along Y
     "G5" merge 5 consecutive bins along Y
     "S"  sliding merge: merge n consecutive bins along Y accordingly to what Gn is given.
          It makes sense when used together with a Gn option

 The generated histograms are returned by adding them to arr, if arr is not NULL.
 arr's SetOwner() is called, to signal that it is the user's respponsability to
 delete the histograms, possibly by deleting the arrary.
    TObjArray aSlices;
    h2->FitSlicesY(func, 0, -1, 0, "QNR", &aSlices);
 will already delete the histograms once aSlice goes out of scope. aSlices will
 contain the histogram for the i-th parameter of the fit function at aSlices[i];
 aSlices[n] (n being the number of parameters) contains the chi2 distribution of
 the fits.

 If arr is NULL, the generated histograms are added to the list of objects
 in the current directory. It is the user's responsability to delete
 these histograms.

  Example: Assume a 2-d histogram h2
   Root > h2->FitSlicesY(); produces 4 TH1D histograms
          with h2_0 containing parameter 0(Constant) for a Gaus fit
                    of each bin in X projected along Y
          with h2_1 containing parameter 1(Mean) for a gaus fit
          with h2_2 containing parameter 2(RMS)  for a gaus fit
          with h2_chi2 containing the chisquare/number of degrees of freedom for a gaus fit

   Root > h2->FitSlicesY(0,15,22,10);
          same as above, but only for bins 15 to 22 along X
          and only for bins in X for which the corresponding projection
          along Y has more than cut bins filled.

  NOTE: To access the generated histograms in the current directory, do eg:
     TH1D *h2_1 = (TH1D*)gDirectory->Get("h2_1");

 A complete example of this function is given in 
tutorial:fitslicesy.C
 with the following output:

/* */
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
 compute first cell (binx,biny) in the range [firstxbin,lastxbin][firstybin,lastybin] for which
 diff = abs(cell_content-c) <= maxdiff
 In case several cells in the specified range with diff=0 are found
 the first cell found is returned in binx,biny.
 In case several cells in the specified range satisfy diff <=maxdiff
 the cell with the smallest difference is returned in binx,biny.
 In all cases the function returns the smallest difference.

 NOTE1: if firstxbin < 0, firstxbin is set to 1
        if (lastxbin < firstxbin then lastxbin is set to the number of bins in X
          ie if firstxbin=1 and lastxbin=0 (default) the search is on all bins in X except
          for X's under- and overflow bins.
        if firstybin < 0, firstybin is set to 1
        if (lastybin < firstybin then lastybin is set to the number of bins in Y
          ie if firstybin=1 and lastybin=0 (default) the search is on all bins in Y except
          for Y's under- and overflow bins.
 NOTE2: if maxdiff=0 (default), the first cell with content=c is returned.
Double_t GetCorrelationFactor(Int_t axis1 = 1, Int_t axis2 = 2) const
-*-*-*Return correlation factor between axis1 and axis2
*-*            ====================================================
Double_t GetCovariance(Int_t axis1 = 1, Int_t axis2 = 2) const
-*-*-*Return covariance between axis1 and axis2
*-*            ====================================================
void GetRandom2(Double_t& x, Double_t& y)
 return 2 random numbers along axis x and y distributed according
 the cellcontents of a 2-dim histogram
 return a NaN if the histogram has a bin with negative content
void GetStats(Double_t* stats) const
 fill the array stats from the contents of this histogram
 The array stats must be correctly dimensionned in the calling program.
 stats[0] = sumw
 stats[1] = sumw2
 stats[2] = sumwx
 stats[3] = sumwx2
 stats[4] = sumwy
 stats[5] = sumwy2
 stats[6] = sumwxy

 If no axis-subranges are specified (via TAxis::SetRange), the array stats
 is simply a copy of the statistics quantities computed at filling time.
 If sub-ranges are specified, the function recomputes these quantities
 from the bin contents in the current axis ranges.

  Note that the mean value/RMS is computed using the bins in the currently
  defined ranges (see TAxis::SetRange). By default the ranges include
  all bins from 1 to nbins included, excluding underflows and overflows.
  To force the underflows and overflows in the computation, one must
  call the static function TH1::StatOverflows(kTRUE) before filling
  the histogram.
Double_t Integral(Option_t* option = "") const
Return integral of bin contents. Only bins in the bins range are considered.
 By default the integral is computed as the sum of bin contents in the range.
 if option "width" is specified, the integral is the sum of
 the bin contents multiplied by the bin width in x and in y.
Double_t Integral(Int_t binx1, Int_t binx2, Int_t biny1, Int_t biny2, Option_t* option = "") const
Return integral of bin contents in range [firstxbin,lastxbin],[firstybin,lastybin]
 for a 2-D histogram
 By default the integral is computed as the sum of bin contents in the range.
 if option "width" is specified, the integral is the sum of
 the bin contents multiplied by the bin width in x and in y.
Double_t IntegralAndError(Int_t binx1, Int_t binx2, Int_t biny1, Int_t biny2, Double_t& err, Option_t* option = "") const
Return integral of bin contents in range [firstxbin,lastxbin],[firstybin,lastybin]
 for a 2-D histogram. Calculates also the integral error using error propagation
 from the bin errors assumming that all the bins are uncorrelated.
 By default the integral is computed as the sum of bin contents in the range.
 if option "width" is specified, the integral is the sum of
 the bin contents multiplied by the bin width in x and in y.
Double_t Interpolate(Double_t x)
illegal for a TH2
Double_t Interpolate(Double_t x, Double_t y)
 Given a point P(x,y), Interpolate approximates the value via bilinear
 interpolation based on the four nearest bin centers
 see Wikipedia, Bilinear Interpolation
 Andy Mastbaum 10/8/2008
 vaguely based on R.Raja 6-Sep-2008
Double_t Interpolate(Double_t x, Double_t y, Double_t z)
illegal for a TH2
Double_t KolmogorovTest(const TH1* h2, Option_t* option = "") const
  Statistical test of compatibility in shape between
  THIS histogram and h2, using Kolmogorov test.
     Default: Ignore under- and overflow bins in comparison

     option is a character string to specify options
         "U" include Underflows in test
         "O" include Overflows
         "N" include comparison of normalizations
         "D" Put out a line of "Debug" printout
         "M" Return the Maximum Kolmogorov distance instead of prob

   The returned function value is the probability of test
       (much less than one means NOT compatible)

   The KS test uses the distance between the pseudo-CDF's obtained
   from the histogram. Since in 2D the order for generating the pseudo-CDF is
   arbitrary, two pairs of pseudo-CDF are used, one starting from the x axis the
   other from the y axis and the maximum distance is the average of the two maximum
   distances obtained.

  Code adapted by Rene Brun from original HBOOK routine HDIFF
Long64_t Merge(TCollection* list)
Add all histograms in the collection to this histogram.
This function computes the min/max for the axes,
compute a new number of bins, if necessary,
add bin contents, errors and statistics.
If overflows are present and limits are different the function will fail.
The function returns the total number of entries in the result histogram
if the merge is successfull, -1 otherwise.

IMPORTANT remark. The 2 axis x and y may have different number
of bins and different limits, BUT the largest bin width must be
a multiple of the smallest bin width and the upper limit must also
be a multiple of the bin width.
TH2 * RebinX(Int_t ngroup = 2, const char* newname = "")
 Rebin only the X axis
 see Rebin2D
TH2 * RebinY(Int_t ngroup = 2, const char* newname = "")
 Rebin only the Y axis
 see Rebin2D
TH2 * Rebin2D(Int_t nxgroup = 2, Int_t nygroup = 2, const char* newname = "")
   -*-*-*Rebin this histogram grouping nxgroup/nygroup bins along the xaxis/yaxis together*-*-*-*-

   if newname is not blank a new temporary histogram hnew is created.
   else the current histogram is modified (default)
   The parameter nxgroup/nygroup indicate how many bins along the xaxis/yaxis of this
   have to me merged into one bin of hnew
   If the original histogram has errors stored (via Sumw2), the resulting
   histograms has new errors correctly calculated.

   examples: if hpxpy is an existing TH2 histogram with 40 x 40 bins
     hpxpy->Rebin2D();  // merges two bins along the xaxis and yaxis in one in hpxpy
                        // Carefull: previous contents of hpxpy are lost
     hpxpy->RebinX(5);  //merges five bins along the xaxis in one in hpxpy
     TH2 *hnew = hpxpy->RebinY(5,"hnew"); // creates a new histogram hnew
                                          // merging 5 bins of h1 along the yaxis in one bin

   NOTE : If nxgroup/nygroup is not an exact divider of the number of bins,
          along the xaxis/yaxis the top limit(s) of the rebinned histogram
          is changed to the upper edge of the xbin=newxbins*nxgroup resp.
          ybin=newybins*nygroup and the corresponding bins are added to
          the overflow bin.
          Statistics will be recomputed from the new bin contents.
TProfile * DoProfile(bool onX, const char* name, Int_t firstbin, Int_t lastbin, Option_t* option) const
TProfile * ProfileX(const char* name = "_pfx", Int_t firstybin = 1, Int_t lastybin = -1, Option_t* option = "") const
 *-*-*-*-*Project a 2-D histogram into a profile histogram along X*-*-*-*-*-*
 *-*      ========================================================

   The projection is made from the channels along the Y axis
   ranging from firstybin to lastybin included.
   By default, bins 1 to ny are included
   When all bins are included, the number of entries in the projection
   is set to the number of entries of the 2-D histogram, otherwise
   the number of entries is incremented by 1 for all non empty cells.

   if option "d" is specified, the profile is drawn in the current pad.

   if option "o" original axis range of the target axes will be
   kept, but only bins inside the selected range will be filled.

   The option can also be used to specify the projected profile error type.
   Values which can be used are 's', 'i', or 'g'. See TProfile::BuildOptions for details

   Using a TCutG object, it is possible to select a sub-range of a 2-D histogram.
   One must create a graphical cut (mouse or C++) and specify the name
   of the cut between [] in the option.
   For example, with a TCutG named "cutg", one can call:
      myhist->ProfileX(" ",firstybin,lastybin,"[cutg]");
   To invert the cut, it is enough to put a "-" in front of its name:
      myhist->ProfileX(" ",firstybin,lastybin,"[-cutg]");
   It is possible to apply several cuts ("," means logical AND):
      myhist->ProfileX(" ",firstybin,lastybin,"[cutg1,cutg2]");

   NOTE that if a TProfile named "name" exists in the current directory or pad with
   a compatible axis the profile is reset and filled again with the projected contents of the TH2.
   In the case of axis incompatibility an error is reported and a NULL pointer is returned.

   NOTE that the X axis attributes of the TH2 are copied to the X axis of the profile.

   NOTE that the default under- / overflow behavior differs from what ProjectionX
   does! Profiles take the bin center into account, so here the under- and overflow
   bins are ignored by default.
TProfile * ProfileY(const char* name = "_pfy", Int_t firstxbin = 1, Int_t lastxbin = -1, Option_t* option = "") const
 *-*-*-*-*Project a 2-D histogram into a profile histogram along Y*-*-*-*-*-*
 *-*      ========================================================

   The projection is made from the channels along the X axis
   ranging from firstxbin to lastxbin included.
   By default, bins 1 to nx are included
   When all bins are included, the number of entries in the projection
   is set to the number of entries of the 2-D histogram, otherwise
   the number of entries is incremented by 1 for all non empty cells.

   if option "d" is specified, the profile is drawn in the current pad.

   if option "o" original axis range of the taget axes will be
   kept, but only bins inside the selected range will be filled.

   The option can also be used to specify the projected profile error type.
   Values which can be used are 's', 'i', or 'g'. See TProfile::BuildOptions for details
   Using a TCutG object, it is possible to select a sub-range of a 2-D histogram.

   One must create a graphical cut (mouse or C++) and specify the name
   of the cut between [] in the option.
   For example, with a TCutG named "cutg", one can call:
      myhist->ProfileY(" ",firstybin,lastybin,"[cutg]");
   To invert the cut, it is enough to put a "-" in front of its name:
      myhist->ProfileY(" ",firstybin,lastybin,"[-cutg]");
   It is possible to apply several cuts:
      myhist->ProfileY(" ",firstybin,lastybin,"[cutg1,cutg2]");

   NOTE that if a TProfile named "name" exists in the current directory or pad with
   a compatible axis the profile is reset and filled again with the projected contents of the TH2.
   In the case of axis incompatibility an error is reported and a NULL pointer is returned.

   NOTE that he Y axis attributes of the TH2 are copied to the X axis of the profile.

   NOTE that the default under- / overflow behavior differs from what ProjectionX
   does! Profiles take the bin center into account, so here the under- and overflow
   bins are ignored by default.
TH1D * DoProjection(bool onX, const char* name, Int_t firstbin, Int_t lastbin, Option_t* option) const
 internal (protected) method for performing projection on the X or Y axis
 called by ProjectionX or ProjectionY
TH1D * ProjectionX(const char* name = "_px", Int_t firstybin = 0, Int_t lastybin = -1, Option_t* option = "") const
Project a 2-D histogram into a 1-D histogram along X*-*-
*-*      ====================================================

   The projection is always of the type TH1D.
   The projection is made from the channels along the Y axis
   ranging from firstybin to lastybin included.
   By default, all bins including under- and overflow are included.
   The number of entries in the projection is estimated from the
   number of effective entries for all the cells included in the projection.

   To exclude the underflow bins in Y, use firstybin=1.
   To exclude the overflow bins in Y, use lastybin=nx.

   if option "e" is specified, the errors are computed.
   if option "d" is specified, the projection is drawn in the current pad.
   if option "o" original axis range of the taget axes will be
   kept, but only bins inside the selected range will be filled.

   Using a TCutG object, it is possible to select a sub-range of a 2-D histogram.
   One must create a graphical cut (mouse or C++) and specify the name
   of the cut between [] in the option.
   For example, with a TCutG named "cutg", one can call:
      myhist->ProjectionX(" ",firstybin,lastybin,"[cutg]");
   To invert the cut, it is enough to put a "-" in front of its name:
      myhist->ProjectionX(" ",firstybin,lastybin,"[-cutg]");
   It is possible to apply several cuts:
      myhist->ProjectionX(" ",firstybin,lastybin,"[cutg1,cutg2]");

   NOTE that if a TH1D named "name" exists in the current directory or pad
   the histogram is reset and filled again with the projected contents of the TH2.

   NOTE that the X axis attributes of the TH2 are copied to the X axis of the projection.

TH1D * ProjectionY(const char* name = "_py", Int_t firstxbin = 0, Int_t lastxbin = -1, Option_t* option = "") const
Project a 2-D histogram into a 1-D histogram along Y*-*-
*-*      ====================================================

   The projection is always of the type TH1D.
   The projection is made from the channels along the X axis
   ranging from firstxbin to lastxbin included.
   By default, all bins including under- and overflow are included.
   The number of entries in the projection is estimated from the
   number of effective entries for all the cells included in the projection

   To exclude the underflow bins in X, use firstxbin=1.
   To exclude the oveerflow bins in X, use lastxbin=nx.

   if option "e" is specified, the errors are computed.
   if option "d" is specified, the projection is drawn in the current pad.
   if option "o" original axis range of the taget axes will be
   kept, but only bins inside the selected range will be filled.

   Using a TCutG object, it is possible to select a sub-range of a 2-D histogram.
   One must create a graphical cut (mouse or C++) and specify the name
   of the cut between [] in the option.
   For example, with a TCutG named "cutg", one can call:
      myhist->ProjectionY(" ",firstxbin,lastxbin,"[cutg]");
   To invert the cut, it is enough to put a "-" in front of its name:
      myhist->ProjectionY(" ",firstxbin,lastxbin,"[-cutg]");
   It is possible to apply several cuts:
      myhist->ProjectionY(" ",firstxbin,lastxbin,"[cutg1,cutg2]");

   NOTE that if a TH1D named "name" exists in the current directory or pad and having
   a compatible axis, the histogram is reset and filled again with the projected contents of the TH2.
   In the case of axis incompatibility, an error is reported and a NULL pointer is returned.

   NOTE that the Y axis attributes of the TH2 are copied to the X axis of the projection.
void PutStats(Double_t* stats)
 Replace current statistics with the values in array stats
void Reset(Option_t* option = "")
Reset this histogram: contents, errors, etc
*-*            ===========================================
void SetShowProjectionX(Int_t nbins = 1)
 When the mouse is moved in a pad containing a 2-d view of this histogram
 a second canvas shows the projection along X corresponding to the
 mouse position along Y.
 To stop the generation of the projections, delete the canvas
 containing the projection.
void SetShowProjectionY(Int_t nbins = 1)
 When the mouse is moved in a pad containing a 2-d view of this histogram
 a second canvas shows the projection along Y corresponding to the
 mouse position along X.
 To stop the generation of the projections, delete the canvas
 containing the projection.
TH1 * ShowBackground(Int_t niter = 20, Option_t* option = "same")
   This function calculates the background spectrum in this histogram.
   The background is returned as a histogram.
   to be implemented (may be)
Int_t ShowPeaks(Double_t sigma = 2, Option_t* option = "", Double_t threshold = 0.05)
Interface to TSpectrum2::Search
the function finds peaks in this histogram where the width is > sigma
and the peak maximum greater than threshold*maximum bin content of this.
for more detauils see TSpectrum::Search.
note the difference in the default value for option compared to TSpectrum2::Search
option="" by default (instead of "goff")
void Smooth(Int_t ntimes = 1, Option_t* option = "")
 Smooth bin contents of this 2-d histogram using kernel algorithms
 similar to the ones used in the raster graphics community.
 Bin contents in the active range are replaced by their smooth values.
 If Errors are defined via Sumw2, they are also scaled and computed.
 However, note the resulting errors will be correlated between different-bins, so
 the errors should not be used blindly to perform any calculation involving several bins,
 like fitting the histogram.  One would need to compute also the bin by bin correlation matrix.

 3 kernels are proposed k5a, k5b and k3a.
 k5a and k5b act on 5x5 cells (i-2,i-1,i,i+1,i+2, and same for j)
 k5b is a bit more stronger in smoothing
 k3a acts only on 3x3 cells (i-1,i,i+1, and same for j).
 By default the kernel "k5a" is used. You can select the kernels "k5b" or "k3a"
 via the option argument.
 If TAxis::SetRange has been called on the x or/and y axis, only the bins
 in the specified range are smoothed.
 In the current implementation if the first argument is not used (default value=1).

 implementation by David McKee (dmckee@bama.ua.edu). Extended by Rene Brun
void Streamer(TBuffer& )
 Stream an object of class TH2.
Int_t BufferFill(Double_t x, Double_t y, Double_t w)
Int_t Fill(Double_t )
void FillN(Int_t , const Double_t* , const Double_t* , Int_t )
{;}
Double_t GetBinErrorLow(Int_t binx, Int_t biny)
{ return TH1::GetBinErrorLow( GetBin(binx, biny) ); }
Double_t GetBinErrorUp(Int_t binx, Int_t biny)
{ return TH1::GetBinErrorUp( GetBin(binx, biny) ); }
Double_t Integral(Option_t* option = "") const
virtual Double_t Integral(Int_t, Int_t, Option_t * ="") const {return 0;}