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