12 #ifndef ROOT_TEveCaloLegoGL
13 #define ROOT_TEveCaloLegoGL
26 class TEveCaloLegoGL :
public TGLObject
28 friend class TEveCaloLegoOverlay;
37 Float_t fX0, fX1, fY0, fY1;
39 Cell2D_t(Int_t
id, Float_t sumVal, Int_t maxSlice)
44 fX0 = fX1 = fY0 = fY1 = 0;
47 void SetGeom(Float_t x0, Float_t x1, Float_t y0, Float_t y1)
53 Float_t MinSize() {
return TMath::Min(fX1- fX0, fY1 - fY0); }
54 Float_t X() {
return 0.5*(fX0 + fX1); }
55 Float_t Y() {
return 0.5*(fY0 + fY1); }
58 typedef std::vector<Cell2D_t> vCell2D_t;
59 typedef std::vector<Cell2D_t>::iterator vCell2D_i;
61 typedef std::map<Int_t, UInt_t> SliceDLMap_t;
62 typedef std::map<Int_t, UInt_t>::iterator SliceDLMap_i;
65 mutable Color_t fGridColor;
66 mutable Color_t fFontColor;
68 mutable TAxis *fEtaAxis;
69 mutable TAxis *fPhiAxis;
70 mutable TAxis *fZAxis;
71 mutable TEveVector fXAxisTitlePos;
72 mutable TEveVector fYAxisTitlePos;
73 mutable TEveVector fZAxisTitlePos;
74 mutable TEveVector fBackPlaneXConst[2];
75 mutable TEveVector fBackPlaneYConst[2];
77 mutable TGLAxisPainter fAxisPainter;
81 mutable Bool_t fDLCacheOK;
82 mutable vCell2D_t fCells2D;
84 mutable TEveCaloData::RebinData_t fRebinData;
85 mutable Float_t fMaxVal;
86 mutable Float_t fValToPixel;
87 mutable Int_t fCurrentPixelsPerBin;
89 mutable SliceDLMap_t fDLMap;
90 mutable Bool_t fCells3D;
92 mutable Int_t fBinStep;
94 TEveCaloLegoGL(
const TEveCaloLegoGL&);
95 TEveCaloLegoGL& operator=(
const TEveCaloLegoGL&);
98 void GetScaleForMatrix(Float_t& sx, Float_t& sy, Float_t& sz)
const;
99 Int_t GetGridStep(TGLRnrCtx &rnrCtx)
const;
100 void RebinAxis(TAxis *orig, TAxis *curr)
const;
102 void SetAxis3DTitlePos(TGLRnrCtx &rnrCtx, Float_t x0, Float_t x1, Float_t y0, Float_t y1)
const;
103 void DrawAxis3D(TGLRnrCtx &rnrCtx)
const;
104 void DrawAxis2D(TGLRnrCtx &rnrCtx)
const;
105 void DrawHistBase(TGLRnrCtx &rnrCtx)
const;
108 void DrawSelectedCells(TGLRnrCtx & rnrCtx, TEveCaloData::vCellId_t cells)
const;
111 void PrepareCell2DData(TEveCaloData::vCellId_t& cellList, vCell2D_t& cells2D)
const;
112 void PrepareCell2DDataRebin(TEveCaloData::RebinData_t& rebinData, vCell2D_t& cells2D)
const;
113 void DrawCells2D(TGLRnrCtx & rnrCtx, vCell2D_t& cells2D)
const;
116 void DrawCells3D(TGLRnrCtx & rnrCtx)
const;
117 void MakeQuad(Float_t x, Float_t y, Float_t z, Float_t xw, Float_t yw, Float_t zh)
const;
118 void Make3DDisplayList(TEveCaloData::vCellId_t& cellList, SliceDLMap_t& map, Bool_t select)
const;
119 void Make3DDisplayListRebin(TEveCaloData::RebinData_t& rebinData, SliceDLMap_t& map, Bool_t select)
const;
121 void WrapTwoPi(Float_t &min, Float_t &max)
const;
125 virtual ~TEveCaloLegoGL();
127 virtual Bool_t SetModel(TObject* obj,
const Option_t* opt = 0);
129 virtual void SetBBox();
131 virtual void DLCacheDrop();
132 virtual void DLCachePurge();
134 virtual void DirectDraw(TGLRnrCtx & rnrCtx)
const;
135 virtual void DrawHighlight(TGLRnrCtx& rnrCtx,
const TGLPhysicalShape* ps, Int_t lvl=-1)
const;
137 virtual Bool_t SupportsSecondarySelect()
const {
return kTRUE; }
138 virtual Bool_t AlwaysSecondarySelect()
const {
return kTRUE; }
139 virtual void ProcessSelection(TGLRnrCtx & rnrCtx, TGLSelectRecord & rec);
141 ClassDef(TEveCaloLegoGL, 0);
145 inline void TEveCaloLegoGL::WrapTwoPi(Float_t &min, Float_t &max)
const
147 if (fM->GetData()->GetWrapTwoPi())
149 if (fM->GetPhiMax()>TMath::Pi() && max<=fM->GetPhiMin())
151 min += TMath::TwoPi();
152 max += TMath::TwoPi();
154 else if (fM->GetPhiMin()<-TMath::Pi() && min>=fM->GetPhiMax())
156 min -= TMath::TwoPi();
157 max -= TMath::TwoPi();