Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TAxis.h
Go to the documentation of this file.
1 // @(#)root/hist:$Id$
2 // Author: Rene Brun 12/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_TAxis
13 #define ROOT_TAxis
14 
15 
16 //////////////////////////////////////////////////////////////////////////
17 // //
18 // TAxis //
19 // //
20 // Axis class. //
21 // //
22 //////////////////////////////////////////////////////////////////////////
23 
24 #include "TNamed.h"
25 #include "TAttAxis.h"
26 #include "TArrayD.h"
27 
28 class THashList;
29 
30 class TAxis : public TNamed, public TAttAxis {
31 
32 private:
33  Int_t fNbins; //Number of bins
34  Double_t fXmin; //low edge of first bin
35  Double_t fXmax; //upper edge of last bin
36  TArrayD fXbins; //Bin edges array in X
37  Int_t fFirst; //first bin to display
38  Int_t fLast; //last bin to display
39  UShort_t fBits2; //second bit status word
40  Bool_t fTimeDisplay; //on/off displaying time values instead of numerics
41  TString fTimeFormat; //Date&time format, ex: 09/12/99 12:34:00
42  TObject *fParent; //!Object owning this axis
43  THashList *fLabels; //List of labels
44  TList *fModLabs; //List of modified labels
45 
46  // TAxis extra status bits (stored in fBits2)
47  enum {
48  kAlphanumeric = BIT(0), // axis is alphanumeric
49  kCanExtend = BIT(1), // axis can be extended
50  kNotAlpha = BIT(2) // axis is forced to be not alphanumeric
51  };
52 
53  Bool_t HasBinWithoutLabel() const;
54 
55 public:
56  // TAxis status bits
57  enum EStatusBits {
58  kDecimals = BIT(7),
59  kTickPlus = BIT(9),
60  kTickMinus = BIT(10),
61  kAxisRange = BIT(11),
62  kCenterTitle = BIT(12),
63  kCenterLabels = BIT(14), //bit 13 is used by TObject
64  kRotateTitle = BIT(15),
65  kPalette = BIT(16),
66  kNoExponent = BIT(17),
67  kLabelsHori = BIT(18),
68  kLabelsVert = BIT(19),
69  kLabelsDown = BIT(20),
70  kLabelsUp = BIT(21),
71  kIsInteger = BIT(22),
72  kMoreLogLabels = BIT(23)
73  };
74 
75  TAxis();
76  TAxis(Int_t nbins, Double_t xmin, Double_t xmax);
77  TAxis(Int_t nbins, const Double_t *xbins);
78  TAxis(const TAxis &axis);
79  virtual ~TAxis();
80  TAxis& operator=(const TAxis&);
81 
82  Bool_t CanExtend() const { return (fBits2 & kCanExtend); }
83  Bool_t CanBeAlphanumeric() { return !(fBits2 & kNotAlpha); }
84  Bool_t IsAlphanumeric() { return fBits2 & kAlphanumeric; }
85  void SetAlphanumeric(Bool_t alphanumeric = kTRUE);
86  void SetCanExtend(Bool_t canExtend) { fBits2 = canExtend ? (fBits2 | kCanExtend) : (fBits2 & ~kCanExtend); }
87  void SetNoAlphanumeric(Bool_t noalpha = kTRUE) {
88  fBits2 = noalpha ? (fBits2 | kNotAlpha) : (fBits2 & ~kNotAlpha);
89  if (IsAlphanumeric() ) {
90  SetCanExtend(kFALSE);
91  SetAlphanumeric(kFALSE);
92  }
93  }
94  void CenterLabels(Bool_t center=kTRUE);
95  void CenterTitle(Bool_t center=kTRUE);
96  const char *ChooseTimeFormat(Double_t axislength=0);
97  virtual void Copy(TObject &axis) const;
98  virtual void Delete(Option_t * /*option*/ ="") { }
99  virtual Int_t DistancetoPrimitive(Int_t px, Int_t py);
100  virtual TObject *DrawClone(Option_t * /*option*/ ="") const {return 0;}
101  virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py);
102  virtual Int_t FindBin(Double_t x);
103  virtual Int_t FindBin(Double_t x) const { return FindFixBin(x); }
104  virtual Int_t FindBin(const char *label);
105  virtual Int_t FindFixBin(Double_t x) const;
106  virtual Int_t FindFixBin(const char *label) const;
107  virtual Double_t GetBinCenter(Int_t bin) const;
108  virtual Double_t GetBinCenterLog(Int_t bin) const;
109  const char *GetBinLabel(Int_t bin) const;
110  virtual Double_t GetBinLowEdge(Int_t bin) const;
111  virtual Double_t GetBinUpEdge(Int_t bin) const;
112  virtual Double_t GetBinWidth(Int_t bin) const;
113  virtual void GetCenter(Double_t *center) const;
114  Bool_t GetCenterLabels() const { return TestBit(kCenterLabels); }
115  Bool_t GetCenterTitle() const { return TestBit(kCenterTitle); }
116  Bool_t GetDecimals() const { return TestBit(kDecimals); }
117  THashList *GetLabels() const { return fLabels; }
118  TList *GetModifiedLabels() const { return fModLabs; }
119  virtual void GetLowEdge(Double_t *edge) const;
120  Bool_t GetMoreLogLabels() const { return TestBit(kMoreLogLabels); }
121  Int_t GetNbins() const { return fNbins; }
122  Bool_t GetNoExponent() const { return TestBit(kNoExponent); }
123  virtual TObject *GetParent() const {return fParent;}
124  Bool_t GetRotateTitle() const { return TestBit(kRotateTitle); }
125  virtual const char *GetTicks() const;
126  virtual Bool_t GetTimeDisplay() const {return fTimeDisplay;}
127  virtual const char *GetTimeFormat() const {return fTimeFormat.Data();}
128  virtual const char *GetTimeFormatOnly() const;
129  const char *GetTitle() const {return fTitle.Data();}
130  const TArrayD *GetXbins() const {return &fXbins;}
131  Int_t GetFirst() const;
132  Int_t GetLast() const;
133  Double_t GetXmin() const {return fXmin;}
134  Double_t GetXmax() const {return fXmax;}
135  virtual void ImportAttributes(const TAxis *axis);
136  Bool_t IsVariableBinSize() const {
137  // true if axis has variable bin sizes, false otherwise
138  return (fXbins.GetSize() != 0);
139  }
140  virtual void LabelsOption(Option_t *option="h"); // *MENU*
141  void RotateTitle(Bool_t rotate=kTRUE); // *TOGGLE* *GETTER=GetRotateTitle
142  virtual void SaveAttributes(std::ostream &out, const char *name, const char *subname);
143  virtual void Set(Int_t nbins, Double_t xmin, Double_t xmax);
144  virtual void Set(Int_t nbins, const Float_t *xbins);
145  virtual void Set(Int_t nbins, const Double_t *xbins);
146  virtual void SetBinLabel(Int_t bin, const char *label);
147  void SetDecimals(Bool_t dot = kTRUE); // *TOGGLE* *GETTER=GetDecimals
148  virtual void SetDefaults();
149  virtual void SetDrawOption(Option_t * /*option*/ ="") { }
150  void ChangeLabel(Int_t labNum=0, Double_t labAngle = -1.,
151  Double_t labSize = -1., Int_t labAlign = -1,
152  Int_t labColor = -1 , Int_t labFont = -1,
153  TString labText = ""); // *MENU*
154  virtual void SetLimits(Double_t xmin, Double_t xmax) { /* set axis limits */ fXmin = xmin; fXmax = xmax; } // *MENU*
155  void SetMoreLogLabels(Bool_t more=kTRUE); // *TOGGLE* *GETTER=GetMoreLogLabels
156  void SetNoExponent(Bool_t noExponent=kTRUE); // *TOGGLE* *GETTER=GetNoExponent
157  virtual void SetParent(TObject *obj) {fParent = obj;}
158  virtual void SetRange(Int_t first=0, Int_t last=0); // *MENU*
159  virtual void SetRangeUser(Double_t ufirst, Double_t ulast); // *MENU*
160  virtual void SetTicks(Option_t *option="+"); // *MENU*
161  virtual void SetTimeDisplay(Int_t value) {fTimeDisplay = (value != 0);} // *TOGGLE*
162  virtual void SetTimeFormat(const char *format=""); // *MENU*
163  virtual void SetTimeOffset(Double_t toffset, Option_t *option="local");
164  virtual void UnZoom(); // *MENU*
165  virtual void ZoomOut(Double_t factor=0, Double_t offset=0); // *MENU*
166 
167  ClassDef(TAxis,10) //Axis class
168 };
169 
170 ////////////////////////////////////////////////////////////////////////////////
171 /// Center axis labels. If center = kTRUE axis labels will be centered
172 /// (hori axes only) on the bin center default is to center on the primary tick marks
173 /// This option does not make sense if there are more bins than tick marks
174 
175 inline void TAxis::CenterLabels(Bool_t center)
176 {
177  SetBit(kCenterLabels, center);
178 }
179 
180 ////////////////////////////////////////////////////////////////////////////////
181 /// Center axis title. If center = kTRUE axis title will be centered
182 /// default is right adjusted
183 
184 inline void TAxis::CenterTitle(Bool_t center)
185 {
186  SetBit(kCenterTitle, center);
187 }
188 
189 ////////////////////////////////////////////////////////////////////////////////
190 /// Rotate title by 180 degrees. By default the title is drawn right adjusted.
191 /// If rotate is TRUE, the title is left adjusted at the end of the axis and rotated by 180 degrees
192 
193 inline void TAxis::RotateTitle(Bool_t rotate)
194 {
195  SetBit(kRotateTitle, rotate);
196 }
197 
198 ////////////////////////////////////////////////////////////////////////////////
199 /// Sets the decimals flag
200 /// By default, blank characters are stripped, and then the label is correctly aligned.
201 /// If the dot is the last character of the string, it is also stripped, unless this option is specified.
202 
203 inline void TAxis::SetDecimals(Bool_t dot) {
204  SetBit(kDecimals, dot);
205 }
206 
207 ////////////////////////////////////////////////////////////////////////////////
208 /// Set the kMoreLogLabels bit flag
209 /// When this option is selected more labels are drawn when in log scale and there is a small number
210 /// of decades (<3).
211 /// The flag (in fBits) is passed to the drawing function TGaxis::PaintAxis
212 
213 inline void TAxis::SetMoreLogLabels(Bool_t more)
214 {
215  SetBit(kMoreLogLabels, more);
216 }
217 
218 ////////////////////////////////////////////////////////////////////////////////
219 /// Set the NoExponent flag
220 /// By default, an exponent of the form 10^N is used when the label value are either all very small or very large.
221 /// The flag (in fBits) is passed to the drawing function TGaxis::PaintAxis
222 
223 inline void TAxis::SetNoExponent(Bool_t noExponent)
224 {
225  SetBit(kNoExponent, noExponent);
226 }
227 
228 
229 #endif
230