ROOT logo
// $Id$
// Main authors: Matevz Tadel & Alja Mrak-Tadel & Bogdan Vulpescu: 2006, 2007

/**************************************************************************
 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
 * full copyright notice.                                                 *
 **************************************************************************/

#include "AliEveMUONChamberGL.h"

#include <EveDet/AliEveMUONChamber.h>
#include <EveDet/AliEveMUONChamberData.h>

#include <TGLRnrCtx.h>
#include <TGLIncludes.h>
#include <TMath.h>


//______________________________________________________________________________
// AliEveMUONChamberGL
//

ClassImp(AliEveMUONChamberGL)

//______________________________________________________________________________
AliEveMUONChamberGL::AliEveMUONChamberGL() :
  TGLObject(),
  fChamber(0),
  fQS1(), fQS2(),
  fRTS(0)
{
  //
  // constructor
  //

}

//______________________________________________________________________________
AliEveMUONChamberGL::~AliEveMUONChamberGL()
{
  //
  // destructor
  //

}

//______________________________________________________________________________
Bool_t AliEveMUONChamberGL::SetModel(TObject* obj, const Option_t* /*opt*/)
{
  //
  // ...
  //

  if(SetModelCheckClass(obj, AliEveMUONChamber::Class())) {

    fChamber = (AliEveMUONChamber*) fExternalObj;
    fQS1.SetModel(&fChamber->fQuadSet1);
    fQS2.SetModel(&fChamber->fQuadSet2);
    return kTRUE;

  }

  return kFALSE;

}

//______________________________________________________________________________
void AliEveMUONChamberGL::SetBBox()
{
  //
  // ...
  //

  SetAxisAlignedBBox(((AliEveMUONChamber*)fExternalObj)->AssertBBox());

}

//______________________________________________________________________________
void AliEveMUONChamberGL::DirectDraw(TGLRnrCtx& rnrCtx) const
{
  //
  // Actual GL drawing.
  //

  glDisable(GL_LIGHTING);

  //Double_t width = 10;
  //glOrtho(-width,+width,-width,+width,-width,+width);

  if(fRTS < fChamber->fRTS) {
    fChamber->UpdateQuads();
    fRTS = fChamber->fRTS;
  }

  Bool_t hasData = (fChamber->GetChamberData() != 0);

  if(hasData) {

    DrawQuads(rnrCtx);
    DrawPoints();

  }

  DrawChamberFrame();

}

//______________________________________________________________________________
void AliEveMUONChamberGL::DrawQuads(TGLRnrCtx& rnrCtx) const
{
  //
  // draw the digits as GL_QUADS
  //

  glPushAttrib(GL_ENABLE_BIT | GL_POLYGON_BIT);

  glDisable(GL_LIGHTING);
  glDisable(GL_CULL_FACE);

  //Float_t c[4]; glGetFloatv(GL_CURRENT_COLOR, c);

  glPolygonMode(GL_FRONT, GL_FILL);
  glPolygonMode(GL_BACK,  GL_LINE);

  fQS1.DirectDraw(rnrCtx);

  glPolygonMode(GL_FRONT, GL_LINE);
  glPolygonMode(GL_BACK,  GL_FILL);

  fQS2.DirectDraw(rnrCtx);

  glPopAttrib();

}

//______________________________________________________________________________
void AliEveMUONChamberGL::DrawPoints() const
{
  //
  // draw the clusters as GL_QUADS
  //

  Float_t x, y, z;

  glDisable(GL_LIGHTING);
  glLineWidth(1.0);

  TGLUtil::Color3f(1.0,1.0,1.0);

  glBegin(GL_LINES);

  // clusters

  Int_t clsSize = fChamber->fClusterSize;

  if (clsSize > 1) {

    for (Int_t i = 0; i < fChamber->fPointSet1.GetN(); i++) {

      fChamber->fPointSet1.GetPoint(i,x,y,z);

      glVertex3f(x-clsSize,y+clsSize,z);
      glVertex3f(x+clsSize,y-clsSize,z);

      glVertex3f(x-clsSize,y-clsSize,z);
      glVertex3f(x+clsSize,y+clsSize,z);

    }

  }

  // hits

  Int_t hitSize = fChamber->fHitSize;

  if (hitSize > 1) {

    for (Int_t i = 0; i < fChamber->fPointSet2.GetN(); i++) {

      fChamber->fPointSet2.GetPoint(i,x,y,z);

      glVertex3f(x-hitSize,y,z);
      glVertex3f(x+hitSize,y,z);

      glVertex3f(x,y-hitSize,z);
      glVertex3f(x,y+hitSize,z);

    }

  }

  glEnd();

}

//______________________________________________________________________________
void AliEveMUONChamberGL::DrawChamberFrame() const
{
  //
  // draw the chamber frame as GL_LINE_LOOP
  //

  AliEveMUONChamberData* chamberData = fChamber->GetChamberData();
  Int_t nDetElem = chamberData->GetNDetElem();
  Float_t *frameCoord;
  Float_t xOrig, yOrig, xRad, yRad, x, y, z;

  TGLUtil::Color4ub(255, 0, 0, 255);

  for (Int_t id = 0; id < nDetElem; id++) {

    frameCoord = chamberData->GetFrameCoord(id);

    if (fChamber->GetID() < 4) {

      xOrig = frameCoord[0];
      yOrig = frameCoord[1];
      xRad  = frameCoord[2];
      yRad  = frameCoord[3];
      z     = frameCoord[4];

      if (fChamber->GetID() < 2) {
	xRad += TMath::Sign(15.0,(Double_t)xRad);
	yRad += TMath::Sign(15.0,(Double_t)yRad);
      } else {
	xRad += TMath::Sign( 5.0,(Double_t)xRad);
	yRad += TMath::Sign( 5.0,(Double_t)yRad);
      }

      glBegin(GL_LINE_LOOP);

      glVertex3f(xOrig,yOrig,z);

      Int_t nstep = 100;
      Float_t dstep = TMath::Pi()/2.0 / (Float_t)nstep;
      Float_t d;
      for (Int_t istep = 0; istep < nstep; istep++) {

	d = istep * dstep;
	x = xOrig + xRad * TMath::Cos(d);
	y = yOrig + yRad * TMath::Sin(d);

	glVertex3f(x,y,z);

      }

      glVertex3f(xOrig,yOrig,z);

      glEnd();

    } else {

      glBegin(GL_LINE_LOOP);
      glVertex3f(frameCoord[0],frameCoord[1],frameCoord[4]);
      glVertex3f(frameCoord[0],frameCoord[3],frameCoord[4]);
      glVertex3f(frameCoord[2],frameCoord[3],frameCoord[4]);
      glVertex3f(frameCoord[2],frameCoord[1],frameCoord[4]);
      glVertex3f(frameCoord[0],frameCoord[1],frameCoord[4]);
      glEnd();

    }

  }

}
 AliEveMUONChamberGL.cxx:1
 AliEveMUONChamberGL.cxx:2
 AliEveMUONChamberGL.cxx:3
 AliEveMUONChamberGL.cxx:4
 AliEveMUONChamberGL.cxx:5
 AliEveMUONChamberGL.cxx:6
 AliEveMUONChamberGL.cxx:7
 AliEveMUONChamberGL.cxx:8
 AliEveMUONChamberGL.cxx:9
 AliEveMUONChamberGL.cxx:10
 AliEveMUONChamberGL.cxx:11
 AliEveMUONChamberGL.cxx:12
 AliEveMUONChamberGL.cxx:13
 AliEveMUONChamberGL.cxx:14
 AliEveMUONChamberGL.cxx:15
 AliEveMUONChamberGL.cxx:16
 AliEveMUONChamberGL.cxx:17
 AliEveMUONChamberGL.cxx:18
 AliEveMUONChamberGL.cxx:19
 AliEveMUONChamberGL.cxx:20
 AliEveMUONChamberGL.cxx:21
 AliEveMUONChamberGL.cxx:22
 AliEveMUONChamberGL.cxx:23
 AliEveMUONChamberGL.cxx:24
 AliEveMUONChamberGL.cxx:25
 AliEveMUONChamberGL.cxx:26
 AliEveMUONChamberGL.cxx:27
 AliEveMUONChamberGL.cxx:28
 AliEveMUONChamberGL.cxx:29
 AliEveMUONChamberGL.cxx:30
 AliEveMUONChamberGL.cxx:31
 AliEveMUONChamberGL.cxx:32
 AliEveMUONChamberGL.cxx:33
 AliEveMUONChamberGL.cxx:34
 AliEveMUONChamberGL.cxx:35
 AliEveMUONChamberGL.cxx:36
 AliEveMUONChamberGL.cxx:37
 AliEveMUONChamberGL.cxx:38
 AliEveMUONChamberGL.cxx:39
 AliEveMUONChamberGL.cxx:40
 AliEveMUONChamberGL.cxx:41
 AliEveMUONChamberGL.cxx:42
 AliEveMUONChamberGL.cxx:43
 AliEveMUONChamberGL.cxx:44
 AliEveMUONChamberGL.cxx:45
 AliEveMUONChamberGL.cxx:46
 AliEveMUONChamberGL.cxx:47
 AliEveMUONChamberGL.cxx:48
 AliEveMUONChamberGL.cxx:49
 AliEveMUONChamberGL.cxx:50
 AliEveMUONChamberGL.cxx:51
 AliEveMUONChamberGL.cxx:52
 AliEveMUONChamberGL.cxx:53
 AliEveMUONChamberGL.cxx:54
 AliEveMUONChamberGL.cxx:55
 AliEveMUONChamberGL.cxx:56
 AliEveMUONChamberGL.cxx:57
 AliEveMUONChamberGL.cxx:58
 AliEveMUONChamberGL.cxx:59
 AliEveMUONChamberGL.cxx:60
 AliEveMUONChamberGL.cxx:61
 AliEveMUONChamberGL.cxx:62
 AliEveMUONChamberGL.cxx:63
 AliEveMUONChamberGL.cxx:64
 AliEveMUONChamberGL.cxx:65
 AliEveMUONChamberGL.cxx:66
 AliEveMUONChamberGL.cxx:67
 AliEveMUONChamberGL.cxx:68
 AliEveMUONChamberGL.cxx:69
 AliEveMUONChamberGL.cxx:70
 AliEveMUONChamberGL.cxx:71
 AliEveMUONChamberGL.cxx:72
 AliEveMUONChamberGL.cxx:73
 AliEveMUONChamberGL.cxx:74
 AliEveMUONChamberGL.cxx:75
 AliEveMUONChamberGL.cxx:76
 AliEveMUONChamberGL.cxx:77
 AliEveMUONChamberGL.cxx:78
 AliEveMUONChamberGL.cxx:79
 AliEveMUONChamberGL.cxx:80
 AliEveMUONChamberGL.cxx:81
 AliEveMUONChamberGL.cxx:82
 AliEveMUONChamberGL.cxx:83
 AliEveMUONChamberGL.cxx:84
 AliEveMUONChamberGL.cxx:85
 AliEveMUONChamberGL.cxx:86
 AliEveMUONChamberGL.cxx:87
 AliEveMUONChamberGL.cxx:88
 AliEveMUONChamberGL.cxx:89
 AliEveMUONChamberGL.cxx:90
 AliEveMUONChamberGL.cxx:91
 AliEveMUONChamberGL.cxx:92
 AliEveMUONChamberGL.cxx:93
 AliEveMUONChamberGL.cxx:94
 AliEveMUONChamberGL.cxx:95
 AliEveMUONChamberGL.cxx:96
 AliEveMUONChamberGL.cxx:97
 AliEveMUONChamberGL.cxx:98
 AliEveMUONChamberGL.cxx:99
 AliEveMUONChamberGL.cxx:100
 AliEveMUONChamberGL.cxx:101
 AliEveMUONChamberGL.cxx:102
 AliEveMUONChamberGL.cxx:103
 AliEveMUONChamberGL.cxx:104
 AliEveMUONChamberGL.cxx:105
 AliEveMUONChamberGL.cxx:106
 AliEveMUONChamberGL.cxx:107
 AliEveMUONChamberGL.cxx:108
 AliEveMUONChamberGL.cxx:109
 AliEveMUONChamberGL.cxx:110
 AliEveMUONChamberGL.cxx:111
 AliEveMUONChamberGL.cxx:112
 AliEveMUONChamberGL.cxx:113
 AliEveMUONChamberGL.cxx:114
 AliEveMUONChamberGL.cxx:115
 AliEveMUONChamberGL.cxx:116
 AliEveMUONChamberGL.cxx:117
 AliEveMUONChamberGL.cxx:118
 AliEveMUONChamberGL.cxx:119
 AliEveMUONChamberGL.cxx:120
 AliEveMUONChamberGL.cxx:121
 AliEveMUONChamberGL.cxx:122
 AliEveMUONChamberGL.cxx:123
 AliEveMUONChamberGL.cxx:124
 AliEveMUONChamberGL.cxx:125
 AliEveMUONChamberGL.cxx:126
 AliEveMUONChamberGL.cxx:127
 AliEveMUONChamberGL.cxx:128
 AliEveMUONChamberGL.cxx:129
 AliEveMUONChamberGL.cxx:130
 AliEveMUONChamberGL.cxx:131
 AliEveMUONChamberGL.cxx:132
 AliEveMUONChamberGL.cxx:133
 AliEveMUONChamberGL.cxx:134
 AliEveMUONChamberGL.cxx:135
 AliEveMUONChamberGL.cxx:136
 AliEveMUONChamberGL.cxx:137
 AliEveMUONChamberGL.cxx:138
 AliEveMUONChamberGL.cxx:139
 AliEveMUONChamberGL.cxx:140
 AliEveMUONChamberGL.cxx:141
 AliEveMUONChamberGL.cxx:142
 AliEveMUONChamberGL.cxx:143
 AliEveMUONChamberGL.cxx:144
 AliEveMUONChamberGL.cxx:145
 AliEveMUONChamberGL.cxx:146
 AliEveMUONChamberGL.cxx:147
 AliEveMUONChamberGL.cxx:148
 AliEveMUONChamberGL.cxx:149
 AliEveMUONChamberGL.cxx:150
 AliEveMUONChamberGL.cxx:151
 AliEveMUONChamberGL.cxx:152
 AliEveMUONChamberGL.cxx:153
 AliEveMUONChamberGL.cxx:154
 AliEveMUONChamberGL.cxx:155
 AliEveMUONChamberGL.cxx:156
 AliEveMUONChamberGL.cxx:157
 AliEveMUONChamberGL.cxx:158
 AliEveMUONChamberGL.cxx:159
 AliEveMUONChamberGL.cxx:160
 AliEveMUONChamberGL.cxx:161
 AliEveMUONChamberGL.cxx:162
 AliEveMUONChamberGL.cxx:163
 AliEveMUONChamberGL.cxx:164
 AliEveMUONChamberGL.cxx:165
 AliEveMUONChamberGL.cxx:166
 AliEveMUONChamberGL.cxx:167
 AliEveMUONChamberGL.cxx:168
 AliEveMUONChamberGL.cxx:169
 AliEveMUONChamberGL.cxx:170
 AliEveMUONChamberGL.cxx:171
 AliEveMUONChamberGL.cxx:172
 AliEveMUONChamberGL.cxx:173
 AliEveMUONChamberGL.cxx:174
 AliEveMUONChamberGL.cxx:175
 AliEveMUONChamberGL.cxx:176
 AliEveMUONChamberGL.cxx:177
 AliEveMUONChamberGL.cxx:178
 AliEveMUONChamberGL.cxx:179
 AliEveMUONChamberGL.cxx:180
 AliEveMUONChamberGL.cxx:181
 AliEveMUONChamberGL.cxx:182
 AliEveMUONChamberGL.cxx:183
 AliEveMUONChamberGL.cxx:184
 AliEveMUONChamberGL.cxx:185
 AliEveMUONChamberGL.cxx:186
 AliEveMUONChamberGL.cxx:187
 AliEveMUONChamberGL.cxx:188
 AliEveMUONChamberGL.cxx:189
 AliEveMUONChamberGL.cxx:190
 AliEveMUONChamberGL.cxx:191
 AliEveMUONChamberGL.cxx:192
 AliEveMUONChamberGL.cxx:193
 AliEveMUONChamberGL.cxx:194
 AliEveMUONChamberGL.cxx:195
 AliEveMUONChamberGL.cxx:196
 AliEveMUONChamberGL.cxx:197
 AliEveMUONChamberGL.cxx:198
 AliEveMUONChamberGL.cxx:199
 AliEveMUONChamberGL.cxx:200
 AliEveMUONChamberGL.cxx:201
 AliEveMUONChamberGL.cxx:202
 AliEveMUONChamberGL.cxx:203
 AliEveMUONChamberGL.cxx:204
 AliEveMUONChamberGL.cxx:205
 AliEveMUONChamberGL.cxx:206
 AliEveMUONChamberGL.cxx:207
 AliEveMUONChamberGL.cxx:208
 AliEveMUONChamberGL.cxx:209
 AliEveMUONChamberGL.cxx:210
 AliEveMUONChamberGL.cxx:211
 AliEveMUONChamberGL.cxx:212
 AliEveMUONChamberGL.cxx:213
 AliEveMUONChamberGL.cxx:214
 AliEveMUONChamberGL.cxx:215
 AliEveMUONChamberGL.cxx:216
 AliEveMUONChamberGL.cxx:217
 AliEveMUONChamberGL.cxx:218
 AliEveMUONChamberGL.cxx:219
 AliEveMUONChamberGL.cxx:220
 AliEveMUONChamberGL.cxx:221
 AliEveMUONChamberGL.cxx:222
 AliEveMUONChamberGL.cxx:223
 AliEveMUONChamberGL.cxx:224
 AliEveMUONChamberGL.cxx:225
 AliEveMUONChamberGL.cxx:226
 AliEveMUONChamberGL.cxx:227
 AliEveMUONChamberGL.cxx:228
 AliEveMUONChamberGL.cxx:229
 AliEveMUONChamberGL.cxx:230
 AliEveMUONChamberGL.cxx:231
 AliEveMUONChamberGL.cxx:232
 AliEveMUONChamberGL.cxx:233
 AliEveMUONChamberGL.cxx:234
 AliEveMUONChamberGL.cxx:235
 AliEveMUONChamberGL.cxx:236
 AliEveMUONChamberGL.cxx:237
 AliEveMUONChamberGL.cxx:238
 AliEveMUONChamberGL.cxx:239
 AliEveMUONChamberGL.cxx:240
 AliEveMUONChamberGL.cxx:241
 AliEveMUONChamberGL.cxx:242
 AliEveMUONChamberGL.cxx:243
 AliEveMUONChamberGL.cxx:244
 AliEveMUONChamberGL.cxx:245
 AliEveMUONChamberGL.cxx:246
 AliEveMUONChamberGL.cxx:247
 AliEveMUONChamberGL.cxx:248
 AliEveMUONChamberGL.cxx:249
 AliEveMUONChamberGL.cxx:250
 AliEveMUONChamberGL.cxx:251
 AliEveMUONChamberGL.cxx:252
 AliEveMUONChamberGL.cxx:253
 AliEveMUONChamberGL.cxx:254
 AliEveMUONChamberGL.cxx:255
 AliEveMUONChamberGL.cxx:256
 AliEveMUONChamberGL.cxx:257
 AliEveMUONChamberGL.cxx:258
 AliEveMUONChamberGL.cxx:259
 AliEveMUONChamberGL.cxx:260
 AliEveMUONChamberGL.cxx:261
 AliEveMUONChamberGL.cxx:262
 AliEveMUONChamberGL.cxx:263
 AliEveMUONChamberGL.cxx:264
 AliEveMUONChamberGL.cxx:265
 AliEveMUONChamberGL.cxx:266