This commit was generated by cvs2svn to compensate for changes in r13732,
[u/mrichter/AliRoot.git] / EVE / Alieve / TPCSegment.cxx
1 #include "TPCSegment.h"
2
3
4 using namespace Reve;
5 using namespace Alieve;
6 using namespace std;
7
8 ClassImp(TPCSegment)
9
10 /**************************************************************************/
11
12 void TPCSegment::Init()
13 {
14   fID = 0;
15   fInfo = 0;
16
17   fTrans = false;
18
19   fRnrFrame = true;
20   fUseTexture = true;
21   fTreshold = 1;
22   fShowMax = true;
23
24   fMinTime   = 0;
25   fMaxTime   = 1;
26   fTreshold  = 5;
27   fMaxVal    = 80;
28 }
29
30 TPCSegment::~TPCSegment()
31 {
32   if(fInfo) fInfo->DecRefCount();
33 }
34
35 /**************************************************************************/
36
37 void TPCSegment::SetInfo(TPCDigitsInfo* info)
38 {
39   if(fInfo) fInfo->DecRefCount();
40   fInfo = info;
41   if(fInfo) fInfo->IncRefCount();
42 }
43
44 void TPCSegment::SetSegmentID(Int_t segment)
45 {
46   if(segment < 0 ) segment = 0;
47   if(segment > 36) segment = 36;
48   fID = segment;
49   SetName(Form("TPCSegment %d", fID));
50   ++fRTS;
51 }
52
53 /**************************************************************************/
54
55 void TPCSegment::ComputeBBox()
56 {
57   Float_t b = fInfo->fInnSeg.fRlow;
58   Float_t w = fInfo->fOut2Seg.fNMaxPads* fInfo->fOut2Seg.fPadWidth/2;
59   Float_t h = fInfo->fOut2Seg.fRlow +
60     fInfo->fOut2Seg.fNRows* fInfo->fOut2Seg.fPadLength - fInfo->fInnSeg.fRlow;
61
62   bbox_init();
63   fBBox[0] = -w;   fBBox[1] = w;
64   fBBox[2] =  b;   fBBox[3] = b + h;
65   fBBox[4] = -0.5; fBBox[5] = 0.5;   // Fake z-width to 1 cm.
66 }
67
68 /**************************************************************************/
69
70 void TPCSegment::SetTrans(Bool_t trans) 
71 {
72   fTrans = trans;
73   if(fTrans) {
74     for (Int_t k = 0; k< 16; k++)
75       fMatrix[k] = 0.;
76
77     Float_t z, s, c;
78     if(fID < 18) {
79       z =  fInfo->fParameter->GetZLength();
80     } else {
81       z = -fInfo->fParameter->GetZLength();
82     } 
83   
84     // column major ii
85     fMatrix[14] = z;
86     fMatrix[15] = 1;
87
88     c = TMath::Cos((fID + 0.5)*20*TMath::Pi()/180 - TMath::Pi()/2);
89     s = TMath::Sin((fID + 0.5)*20*TMath::Pi()/180 - TMath::Pi()/2);
90   
91     fMatrix[0] = -c;
92     fMatrix[1] = -s;
93     fMatrix[4] = -s;
94     fMatrix[5] =  c;
95     fMatrix[10] = -1;
96   }
97 }
98
99 /**************************************************************************/
100 void TPCSegment::Paint(Option_t* )
101 {
102   TBuffer3D buffer(TBuffer3DTypes::kGeneric);
103
104   // Section kCore
105   buffer.fID           = this;
106   buffer.fColor        = 1;
107   buffer.fTransparency = 0;
108   buffer.fLocalFrame   = fTrans; 
109
110   if (fTrans)
111     memcpy(buffer.fLocalMaster, fMatrix, 16*sizeof(Double_t));
112   buffer.SetSectionsValid(TBuffer3D::kCore);
113    
114   // We fill kCore on first pass and try with viewer
115   Int_t reqSections = gPad->GetViewer3D()->AddObject(buffer);
116   if (reqSections == TBuffer3D::kNone) {
117     // printf("TPCSegment::Paint viewer was happy with Core buff3d.\n");
118     return;
119   }
120   printf("TPCSegment::Paint only GL supported.\n");
121   return;
122   /*
123     if (reqSections & TBuffer3D::kRawSizes) {
124     Int_t nbPnts = fQuads.size()*4;
125     Int_t nbSegs = nbPnts;
126     if (!buffer.SetRawSizes(nbPnts, 3*nbPnts, nbSegs, 3*nbSegs, fQuads.size(), fQuads.size()*6)) {
127     return;
128     }
129     buffer.SetSectionsValid(TBuffer3D::kRawSizes); 
130     }
131
132     if ((reqSections & TBuffer3D::kRaw) && buffer.SectionsValid(TBuffer3D::kRawSizes)) {
133     // Points
134     Int_t pidx = 0;
135     for (std::vector<Quad>::iterator i=fQuads.begin(); i!=fQuads.end(); ++i) {
136     for (Int_t k = 0; k < 12; k++ ){
137     buffer.fPnts[pidx] = (*i).vertices[k]; 
138     pidx++;
139     }
140     }
141
142     // Segments
143     Int_t sidx = 0;
144     for (Int_t q = 0; q < fQuads.size(); ++q) {
145     for (Int_t s = 0; s < 4; ++s ) {
146     buffer.fSegs[3*sidx ] = 4; 
147     buffer.fSegs[3*sidx+1] = sidx;
148     if (s == 3)
149     buffer.fSegs[3*sidx+2] = q*4;
150     else
151     buffer.fSegs[3*sidx+2] = sidx + 1;
152     sidx ++;
153     }
154     }
155
156     // Polygons
157     for (Int_t q = 0; q < fQuads.size(); ++q) {
158     buffer.fPols[6*q] = fQuads[q].color;   
159     buffer.fPols[6*q +1] = 4;
160     buffer.fPols[6*q +2] = 4*q +0;
161     buffer.fPols[6*q +3] = 4*q +1;
162     buffer.fPols[6*q +4] = 4*q +2;
163     buffer.fPols[6*q +5] = 4*q +3;
164     }
165
166     buffer.SetSectionsValid(TBuffer3D::kRaw);
167     buffer.fColor = 5;
168     }
169    
170   */
171   // gPad->GetViewer3D()->AddObject(buffer);
172 }