25 class TH2PolyBin:
public TObject{
29 TH2PolyBin(TObject *poly, Int_t bin_number);
30 virtual ~TH2PolyBin();
32 void ClearContent(){fContent = 0;}
33 void Fill(Double_t w) {fContent = fContent+w; SetChanged(
true);}
35 Double_t GetContent()
const{
return fContent;}
36 Bool_t GetChanged()
const{
return fChanged;}
37 Int_t GetBinNumber()
const {
return fNumber;}
38 TObject *GetPolygon()
const {
return fPoly;}
43 Bool_t IsInside(Double_t x, Double_t y)
const;
44 void SetChanged(Bool_t flag){fChanged = flag;}
45 void SetContent(Double_t content){fContent = content; SetChanged(
true);}
58 ClassDef(TH2PolyBin,1)
66 class TH2Poly :
public TH2 {
70 TH2Poly(
const char *name,
const char *title, Double_t xlow, Double_t xup, Double_t ylow, Double_t yup);
71 TH2Poly(
const char *name,
const char *title, Int_t nX, Double_t xlow, Double_t xup, Int_t nY, Double_t ylow, Double_t yup);
74 virtual TH2PolyBin *CreateBin(TObject *poly);
75 virtual Int_t AddBin(TObject *poly);
76 Int_t AddBin(Int_t n,
const Double_t *x,
const Double_t *y);
77 Int_t AddBin(Double_t x1, Double_t y1, Double_t x2, Double_t y2);
78 virtual Bool_t Add(
const TH1 *h1, Double_t c1);
79 virtual Bool_t Add(
const TH1 *h1,
const TH1 *h2, Double_t c1=1, Double_t c2=1);
80 virtual Bool_t Add(TF1 *h1, Double_t c1=1, Option_t *option=
"");
81 void ClearBinContents();
82 TObject *Clone(
const char* newname =
"")
const;
83 void ChangePartition(Int_t n, Int_t m);
86 using TH2::Interpolate;
87 virtual Bool_t Divide(TF1 *, Double_t);
88 virtual Bool_t Multiply(TF1 *, Double_t);
89 virtual Double_t ComputeIntegral(Bool_t);
90 virtual TH1 * FFT(TH1*, Option_t * );
91 virtual TH1 * GetAsymmetry(TH1* , Double_t, Double_t);
92 virtual Double_t Interpolate(Double_t, Double_t);
93 virtual Int_t Fill(Double_t x,Double_t y);
94 virtual Int_t Fill(Double_t x,Double_t y, Double_t w);
95 virtual Int_t Fill(
const char* name, Double_t w);
96 void FillN(Int_t ntimes,
const Double_t* x,
const Double_t* y,
const Double_t* w, Int_t stride = 1);
97 Int_t FindBin(Double_t x, Double_t y, Double_t z = 0);
98 TList *GetBins(){
return fBins;}
99 virtual Double_t GetBinContent(Int_t bin)
const;
100 Bool_t GetBinContentChanged()
const{
return fBinContentChanged;}
101 virtual Double_t GetBinError(Int_t bin)
const;
102 const char *GetBinName(Int_t bin)
const;
103 const char *GetBinTitle(Int_t bin)
const;
104 Bool_t GetFloat(){
return fFloat;}
105 Double_t GetMaximum()
const;
106 Double_t GetMaximum(Double_t maxval)
const;
107 Double_t GetMinimum()
const;
108 Double_t GetMinimum(Double_t minval)
const;
109 Bool_t GetNewBinAdded()
const{
return fNewBinAdded;}
110 Int_t GetNumberOfBins()
const{
return fNcells-kNOverflow;}
111 void Honeycomb(Double_t xstart, Double_t ystart, Double_t a, Int_t k, Int_t s);
112 Double_t Integral(Option_t* option =
"")
const;
113 Long64_t Merge(TCollection *);
114 virtual void Reset(Option_t *option);
115 virtual void Scale(Double_t c1 = 1, Option_t* option =
"");
116 void SavePrimitive(std::ostream& out, Option_t* option =
"");
117 virtual void SetBinContent(Int_t bin, Double_t content);
118 virtual void SetBinError(Int_t bin, Double_t error);
119 void SetBinContentChanged(Bool_t flag){fBinContentChanged = flag;}
120 void SetFloat(Bool_t flag =
true);
121 void SetNewBinAdded(Bool_t flag){fNewBinAdded = flag;}
122 Bool_t IsInsideBin(Int_t binnr, Double_t x, Double_t y);
123 virtual void GetStats(Double_t *stats)
const;
130 Int_t Fill(Double_t){
return -1;}
131 Int_t Fill(Double_t ,
const char *, Double_t){
return -1;}
132 Int_t Fill(
const char *, Double_t , Double_t ){
return -1;}
133 Int_t Fill(
const char *,
const char *, Double_t ){
return -1;}
134 void FillN(Int_t,
const Double_t*,
const Double_t*, Int_t){
return;}
136 Double_t Integral(Int_t, Int_t,
const Option_t*)
const{
return 0;}
137 Double_t Integral(Int_t, Int_t, Int_t, Int_t,
const Option_t*)
const{
return 0;}
138 Double_t Integral(Int_t, Int_t, Int_t, Int_t, Int_t, Int_t,
const Option_t*)
const{
return 0;}
140 virtual Double_t GetBinContent(Int_t, Int_t)
const {
return 0;}
141 virtual Double_t GetBinContent(Int_t, Int_t, Int_t)
const {
return 0;}
143 virtual Double_t GetBinError(Int_t , Int_t)
const {
return 0;}
144 virtual Double_t GetBinError(Int_t , Int_t , Int_t)
const {
return 0;}
146 virtual void SetBinContent(Int_t, Int_t, Double_t){}
147 virtual void SetBinContent(Int_t, Int_t, Int_t, Double_t){}
148 virtual void SetBinError(Int_t, Int_t, Double_t) {}
149 virtual void SetBinError(Int_t, Int_t, Int_t, Double_t) {}
156 Double_t fOverflow[kNOverflow];
161 Double_t fStepX, fStepY;
163 Bool_t *fCompletelyInside;
166 Bool_t fBinContentChanged;
169 void AddBinToPartition(TH2PolyBin *bin);
170 void Initialize(Double_t xlow, Double_t xup, Double_t ylow, Double_t yup, Int_t n, Int_t m);
171 Bool_t IsIntersecting(TH2PolyBin *bin, Double_t xclipl, Double_t xclipr, Double_t yclipb, Double_t yclipt);
172 Bool_t IsIntersectingPolygon(Int_t bn, Double_t *x, Double_t *y, Double_t xclipl, Double_t xclipr, Double_t yclipb, Double_t yclipt);
174 virtual Double_t RetrieveBinContent(Int_t bin)
const {
175 return (bin>=kNOverflow) ? GetBinContent(bin-kNOverflow+1) : GetBinContent(-bin-1);
177 virtual void UpdateBinContent(Int_t bin, Double_t content) {
178 return (bin>=kNOverflow) ? SetBinContent(bin-kNOverflow+1,content) : SetBinContent(-bin-1,content);