Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TGLTH3Composition.h
Go to the documentation of this file.
1 // @(#)root/gl:$Id$
2 // Author: Timur Pocheptsov 07/08/2009
3 
4 #ifndef ROOT_TGLTH3Composition
5 #define ROOT_TGLTH3Composition
6 
7 #include <utility>
8 #include <memory>
9 #include <vector>
10 
11 #include "TGLHistPainter.h"
12 #include "TGLPlotPainter.h"
13 #include "TGLQuadric.h"
14 #include "TH3.h"
15 
16 //
17 //Composition of TH3 objects. All TH3 must have the same axis range
18 //and the same number of bins. If this condition is violated,
19 //AddTH3 will throw.
20 //IMPORTANT: TGLTH3Composition does not own TH3 objects
21 //it contains.
22 //This class inherits TH3 - to re-use TH3 editor.
23 //I use TH3C to reduce memory usage.
24 //Slising is not implemeted yet.
25 //
26 
27 class TGLTH3Composition : public TH3C {
28  friend class TGLTH3CompositionPainter;
29 public:
30  TGLTH3Composition();//I need it only because of explicit private copy ctor.
31 
32  enum ETH3BinShape {
33  kBox,
34  kSphere
35  };
36 
37  void AddTH3(const TH3 *hist, ETH3BinShape shape = kBox);
38 
39  //These are functions for TPad and
40  //TPad's standard machinery (picking, painting).
41  Int_t DistancetoPrimitive(Int_t px, Int_t py);
42  void ExecuteEvent(Int_t event, Int_t px, Int_t py);
43  char *GetObjectInfo(Int_t px, Int_t py) const;
44  void Paint(Option_t *option);
45 
46 private:
47  void CheckRanges(const TH3 *hist);
48 
49  typedef std::pair<const TH3 *, ETH3BinShape> TH3Pair_t;
50 
51  std::vector<TH3Pair_t> fHists;
52  std::unique_ptr<TGLHistPainter> fPainter;
53 
54  TGLTH3Composition(const TGLTH3Composition &rhs);
55  TGLTH3Composition &operator = (const TGLTH3Composition &);
56 
57  ClassDef(TGLTH3Composition, 0)//Composition of TH3 objects.
58 };
59 
60 //
61 //TGLTH3CompositionPainter class.
62 //
63 class TGLTH3CompositionPainter: public TGLPlotPainter {
64 public:
65  TGLTH3CompositionPainter(TGLTH3Composition *data, TGLPlotCamera *camera,
66  TGLPlotCoordinates *coord);
67 
68  //TGLPlotPainter final-overriders.
69  char *GetPlotInfo(Int_t px, Int_t py);
70  Bool_t InitGeometry();
71  void StartPan(Int_t px, Int_t py);
72  void Pan(Int_t px, Int_t py);
73  void AddOption(const TString &option);
74  void ProcessEvent(Int_t event, Int_t px, Int_t py);
75 
76 private:
77  //TGLPlotPainter final-overriders.
78  void InitGL()const;
79  void DeInitGL()const;
80 
81  void DrawPlot()const;
82 
83  //Empty overriders.
84  void DrawSectionXOZ()const{}
85  void DrawSectionYOZ()const{}
86  void DrawSectionXOY()const{}
87 
88  void SetColor(Int_t color)const;
89 
90  TGLTH3Composition *fData;
91  std::pair<Double_t, Double_t> fMinMaxVal;
92 
93  mutable TGLQuadric fQuadric;
94 
95  TGLTH3CompositionPainter(const TGLTH3CompositionPainter &rhs);
96  TGLTH3CompositionPainter &operator = (const TGLTH3CompositionPainter &rhs);
97 
98  ClassDef(TGLTH3CompositionPainter, 0)//Painter to draw several TH3.
99 };
100 
101 
102 #endif