]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/EveDet/AliEveMUONChamberGL.cxx
update for the new location of TRD performance train
[u/mrichter/AliRoot.git] / EVE / EveDet / AliEveMUONChamberGL.cxx
CommitLineData
d810d0de 1// $Id$
fafff680 2// Main authors: Matevz Tadel & Alja Mrak-Tadel & Bogdan Vulpescu: 2006, 2007
d810d0de 3
4/**************************************************************************
5 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
51346b82 7 * full copyright notice. *
d810d0de 8 **************************************************************************/
37b09b91 9
d810d0de 10#include "AliEveMUONChamberGL.h"
3626c858 11
cb4245bb 12#include <EveDet/AliEveMUONChamber.h>
13#include <EveDet/AliEveMUONChamberData.h>
3626c858 14
19208112 15#include <TGLRnrCtx.h>
16#include <TGLIncludes.h>
d810d0de 17
3626c858 18
57ffa5fb 19//______________________________________________________________________________
d810d0de 20// AliEveMUONChamberGL
3626c858 21//
22
d810d0de 23ClassImp(AliEveMUONChamberGL)
3626c858 24
57ffa5fb 25//______________________________________________________________________________
d810d0de 26AliEveMUONChamberGL::AliEveMUONChamberGL() :
3626c858 27 TGLObject(),
28 fChamber(0),
c76ea574 29 fQS1(), fQS2(),
3626c858 30 fRTS(0)
31{
32 //
33 // constructor
34 //
35
36}
37
57ffa5fb 38//______________________________________________________________________________
d810d0de 39AliEveMUONChamberGL::~AliEveMUONChamberGL()
3626c858 40{
41 //
42 // destructor
43 //
44
45}
46
57ffa5fb 47//______________________________________________________________________________
d810d0de 48Bool_t AliEveMUONChamberGL::SetModel(TObject* obj, const Option_t* /*opt*/)
3626c858 49{
50 //
51 // ...
52 //
53
d810d0de 54 if(SetModelCheckClass(obj, AliEveMUONChamber::Class())) {
51346b82 55
d810d0de 56 fChamber = (AliEveMUONChamber*) fExternalObj;
84aff7a4 57 fQS1.SetModel(&fChamber->fQuadSet1);
58 fQS2.SetModel(&fChamber->fQuadSet2);
3626c858 59 return kTRUE;
60
61 }
62
63 return kFALSE;
64
65}
66
57ffa5fb 67//______________________________________________________________________________
d810d0de 68void AliEveMUONChamberGL::SetBBox()
3626c858 69{
70 //
71 // ...
72 //
73
d810d0de 74 SetAxisAlignedBBox(((AliEveMUONChamber*)fExternalObj)->AssertBBox());
3626c858 75
76}
77
57ffa5fb 78//______________________________________________________________________________
d810d0de 79void AliEveMUONChamberGL::DirectDraw(TGLRnrCtx& rnrCtx) const
3626c858 80{
81 //
82 // Actual GL drawing.
83 //
84
85 glDisable(GL_LIGHTING);
86
87 //Double_t width = 10;
88 //glOrtho(-width,+width,-width,+width,-width,+width);
89
90 if(fRTS < fChamber->fRTS) {
91 fChamber->UpdateQuads();
92 fRTS = fChamber->fRTS;
93 }
51346b82 94
3626c858 95 Bool_t hasData = (fChamber->GetChamberData() != 0);
51346b82 96
3626c858 97 if(hasData) {
98
84aff7a4 99 DrawQuads(rnrCtx);
eadce74d 100 DrawPoints();
51346b82 101
3626c858 102 }
103
104 DrawChamberFrame();
105
106}
107
57ffa5fb 108//______________________________________________________________________________
d810d0de 109void AliEveMUONChamberGL::DrawQuads(TGLRnrCtx& rnrCtx) const
3626c858 110{
111 //
112 // draw the digits as GL_QUADS
113 //
114
115 glPushAttrib(GL_ENABLE_BIT | GL_POLYGON_BIT);
116
117 glDisable(GL_LIGHTING);
3626c858 118 glDisable(GL_CULL_FACE);
119
120 //Float_t c[4]; glGetFloatv(GL_CURRENT_COLOR, c);
121
122 glPolygonMode(GL_FRONT, GL_FILL);
123 glPolygonMode(GL_BACK, GL_LINE);
124
84aff7a4 125 fQS1.DirectDraw(rnrCtx);
3626c858 126
127 glPolygonMode(GL_FRONT, GL_LINE);
128 glPolygonMode(GL_BACK, GL_FILL);
129
84aff7a4 130 fQS2.DirectDraw(rnrCtx);
3626c858 131
132 glPopAttrib();
133
134}
135
57ffa5fb 136//______________________________________________________________________________
d810d0de 137void AliEveMUONChamberGL::DrawPoints() const
eadce74d 138{
139 //
140 // draw the clusters as GL_QUADS
141 //
142
143 Float_t x, y, z;
144
145 glDisable(GL_LIGHTING);
146 glLineWidth(1.0);
147
a15e6d7d 148 TGLUtil::Color3f(1.0,1.0,1.0);
51346b82 149
eadce74d 150 glBegin(GL_LINES);
51346b82 151
eadce74d 152 // clusters
153
154 Int_t clsSize = fChamber->fClusterSize;
155
156 if (clsSize > 1) {
157
158 for (Int_t i = 0; i < fChamber->fPointSet1.GetN(); i++) {
51346b82 159
eadce74d 160 fChamber->fPointSet1.GetPoint(i,x,y,z);
161
162 glVertex3f(x-clsSize,y+clsSize,z);
163 glVertex3f(x+clsSize,y-clsSize,z);
51346b82 164
eadce74d 165 glVertex3f(x-clsSize,y-clsSize,z);
166 glVertex3f(x+clsSize,y+clsSize,z);
51346b82 167
eadce74d 168 }
51346b82 169
eadce74d 170 }
171
172 // hits
173
174 Int_t hitSize = fChamber->fHitSize;
175
176 if (hitSize > 1) {
177
178 for (Int_t i = 0; i < fChamber->fPointSet2.GetN(); i++) {
51346b82 179
eadce74d 180 fChamber->fPointSet2.GetPoint(i,x,y,z);
51346b82 181
eadce74d 182 glVertex3f(x-hitSize,y,z);
183 glVertex3f(x+hitSize,y,z);
51346b82 184
eadce74d 185 glVertex3f(x,y-hitSize,z);
186 glVertex3f(x,y+hitSize,z);
51346b82 187
eadce74d 188 }
51346b82 189
eadce74d 190 }
191
192 glEnd();
51346b82 193
eadce74d 194}
195
57ffa5fb 196//______________________________________________________________________________
d810d0de 197void AliEveMUONChamberGL::DrawChamberFrame() const
3626c858 198{
199 //
200 // draw the chamber frame as GL_LINE_LOOP
51346b82 201 //
3626c858 202
d810d0de 203 AliEveMUONChamberData* chamberData = fChamber->GetChamberData();
3626c858 204 Int_t nDetElem = chamberData->GetNDetElem();
205 Float_t *frameCoord;
206 Float_t xOrig, yOrig, xRad, yRad, x, y, z;
207
a15e6d7d 208 TGLUtil::Color4ub(255, 0, 0, 255);
51346b82 209
3626c858 210 for (Int_t id = 0; id < nDetElem; id++) {
211
212 frameCoord = chamberData->GetFrameCoord(id);
213
214 if (fChamber->GetID() < 4) {
215
216 xOrig = frameCoord[0];
217 yOrig = frameCoord[1];
218 xRad = frameCoord[2];
219 yRad = frameCoord[3];
220 z = frameCoord[4];
51346b82 221
fafff680 222 if (fChamber->GetID() < 2) {
223 xRad += TMath::Sign(15.0,(Double_t)xRad);
224 yRad += TMath::Sign(15.0,(Double_t)yRad);
225 } else {
226 xRad += TMath::Sign( 5.0,(Double_t)xRad);
227 yRad += TMath::Sign( 5.0,(Double_t)yRad);
228 }
3626c858 229
230 glBegin(GL_LINE_LOOP);
231
232 glVertex3f(xOrig,yOrig,z);
51346b82 233
3626c858 234 Int_t nstep = 100;
235 Float_t dstep = TMath::Pi()/2.0 / (Float_t)nstep;
236 Float_t d;
237 for (Int_t istep = 0; istep < nstep; istep++) {
238
239 d = istep * dstep;
240 x = xOrig + xRad * TMath::Cos(d);
241 y = yOrig + yRad * TMath::Sin(d);
242
243 glVertex3f(x,y,z);
244
245 }
51346b82 246
3626c858 247 glVertex3f(xOrig,yOrig,z);
248
249 glEnd();
250
251 } else {
252
253 glBegin(GL_LINE_LOOP);
254 glVertex3f(frameCoord[0],frameCoord[1],frameCoord[4]);
255 glVertex3f(frameCoord[0],frameCoord[3],frameCoord[4]);
256 glVertex3f(frameCoord[2],frameCoord[3],frameCoord[4]);
257 glVertex3f(frameCoord[2],frameCoord[1],frameCoord[4]);
258 glVertex3f(frameCoord[0],frameCoord[1],frameCoord[4]);
259 glEnd();
260
261 }
262
263 }
264
265}