source: trunk/MagicSoft/Mars/mhbase/MBinning.h@ 7128

Last change on this file since 7128 was 6958, checked in by tbretz, 20 years ago
*** empty log message ***
File size: 3.2 KB
Line 
1#ifndef MARS_MBinning
2#define MARS_MBinning
3
4#ifndef MARS_MParContainer
5#include "MParContainer.h"
6#endif
7
8#ifndef ROOT_TArrayD
9#include <TArrayD.h>
10#endif
11
12class TH1;
13class TAxis;
14
15class MParList;
16
17class MBinning : public MParContainer
18{
19public:
20 static const TString gsDefName;
21 static const TString gsDefTitle;
22
23private:
24
25 TArrayD fEdges;
26
27 Byte_t fType;
28
29 void StreamPrimitive(ofstream &out) const;
30
31 enum {
32 kIsDefault,
33 kIsLinear,
34 kIsLogarithmic,
35 kIsCosinic,
36 kIsUserArray
37 };
38
39public:
40 MBinning(const char *name=NULL, const char *title=NULL);
41 MBinning(Int_t nbins, Axis_t lo, Axis_t hi, const char *name=0, const char *opt="", const char *title=NULL);
42 MBinning(const MBinning &bins, const char *name=NULL, const char *title=NULL);
43 MBinning(const TH1 &h, const Char_t axis='x', const char *name=0, const char *title=0);
44 MBinning(const TAxis &a, const char *name=0, const char *title=0);
45
46 void Copy(TObject &named) const
47 {
48 MBinning &bins = (MBinning&)named;
49 bins.SetEdges(*this);
50 }
51
52 void SetEdges(const TArrayD &arr)
53 {
54 fEdges = arr;
55 fType = kIsUserArray;
56 }
57
58 Bool_t SetEdges(const MParList &list, const char *name=0);
59 Bool_t SetEdgesRaw(const char *txt);
60 //Bool_t SetEdges(const char *txt);
61 void SetEdges(const TAxis &axe);
62 void SetEdges(const MBinning &bins) { SetEdges(bins.fEdges); fType = bins.fType; fTitle = bins.fTitle; }
63 void SetEdges(const TH1 &h, const Char_t axis='x');
64 void SetEdges(const Int_t nbins, const Axis_t lo, Axis_t up);
65 void SetEdges(const Int_t nbins, const Axis_t lo, Axis_t up, const char *opt);
66 void SetEdgesLog(const Int_t nbins, const Axis_t lo, Axis_t up);
67 void SetEdgesCos(const Int_t nbins, const Axis_t lo, Axis_t up);
68
69 Int_t FindLoEdge(Double_t val) const
70 {
71 if (val<GetEdgeLo() || val>=GetEdgeHi())
72 return -1;
73
74 for (int i=1; i<fEdges.GetSize(); i++)
75 {
76 if (fEdges[i] >= val)
77 return i-1;
78 }
79 return -1;
80 }
81 Int_t FindHiEdge(Double_t val) const
82 {
83 const Int_t i = FindLoEdge(val);
84 return i<0 ? -1 : i+1;
85 }
86
87 Double_t GetEdgeLo() const { return fEdges[0]; }
88 Double_t GetEdgeHi() const { return fEdges[fEdges.GetSize()-1]; }
89
90 Int_t GetNumEdges() const { return fEdges.GetSize(); }
91 Int_t GetNumBins() const { return fEdges.GetSize()-1; }
92
93 Double_t *GetEdges() const { return (Double_t*)fEdges.GetArray(); }
94 const TArrayD &GetEdgesD() const { return fEdges; }
95
96 void AddEdge(Axis_t up);
97 void RemoveFirstEdge();
98 void RemoveLastEdge();
99
100 Bool_t IsLinear() const { return fType==kIsLinear; }
101 Bool_t IsLogarithmic() const { return fType==kIsLogarithmic; }
102 Bool_t IsCosinic() const { return fType==kIsCosinic; }
103 Bool_t IsDefault() const { return fType==kIsDefault; }
104 Bool_t IsUserArray() const { return fType==kIsUserArray; }
105
106 Bool_t HasTitle() const { return gsDefTitle!=fTitle; }
107
108 void Apply(TH1 &) const;
109
110 void Print(Option_t *o="") const; //*MENU*
111
112 Int_t ReadEnv(const TEnv &env, TString prefix, Bool_t print=kFALSE);
113
114 ClassDef(MBinning, 1) //Container to store the binning of a histogram
115};
116
117#endif
Note: See TracBrowser for help on using the repository browser.