]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/Alieve/ITSModule.cxx
Fix effc++ warnings.
[u/mrichter/AliRoot.git] / EVE / Alieve / ITSModule.cxx
CommitLineData
5a5a1232 1#include "ITSModule.h"
2
3#include <AliITSdigitSPD.h>
4#include <AliITSdigitSDD.h>
5#include <AliITSdigitSSD.h>
6
7#include <TStyle.h>
8
9using namespace Reve;
10using namespace Alieve;
11using namespace std;
12
13Short_t ITSModule::fgSDDThreshold = 5;
14Short_t ITSModule::fgSDDMaxVal = 80;
15Short_t ITSModule::fgSSDThreshold = 2;
16Short_t ITSModule::fgSSDMaxVal = 100;
17
18ClassImp(ITSModule)
19
20/**************************************************************************/
21
27db2029 22ITSModule::ITSModule(const Text_t* n, const Text_t* t, Color_t col) :
23 Reve::RenderElement(fFrameColor),
24 QuadSet(n, t),
265ecb21 25 fInfo(0),
26 fID(-1), fDetID(-1),
27 fLayer(-1), fLadder(-1), fDet(-1),
28 fDx(0), fDz(0), fDy(0),
27db2029 29 fFrameColor(col)
30{}
5a5a1232 31
32ITSModule::ITSModule(Int_t id, ITSDigitsInfo* info, Color_t col) :
27db2029 33 Reve::RenderElement(fFrameColor),
34 QuadSet(Form("ITS module %d", id)),
35 fInfo (0),
265ecb21 36 fID(-1), fDetID(-1),
37 fLayer(-1), fLadder(-1), fDet(-1),
38 fDx(0), fDz(0), fDy(0),
092578a7 39 fFrameColor(col)
5a5a1232 40{
27db2029 41 SetDigitsInfo(info);
5a5a1232 42 SetID(id);
43}
44
45ITSModule::~ITSModule()
46{
47 if(fInfo) fInfo->DecRefCount();
48}
49
50/**************************************************************************/
51
52void ITSModule::SetMainColor(Color_t col)
53{
54 Reve::RenderElement::SetMainColor(col);
55 if(!fQuads.empty()) {
56 fQuads.front().ColorFromIdx(col);
57 }
58}
59
60/**************************************************************************/
61
27db2029 62void ITSModule::SetDigitsInfo(ITSDigitsInfo* info)
63{
64 if(fInfo) fInfo->DecRefCount();
65 fInfo = info;
66 if(fInfo) fInfo->IncRefCount();
67}
68
5a5a1232 69void ITSModule::SetID(Int_t id)
70{
71 static const Exc_t eH("ITSModule::SetID ");
72
73 if(fInfo == 0)
74 throw(eH + "ITSDigitsInfo not set.");
75
76 if (id < fInfo->fGeom->GetStartSPD() || id > fInfo->fGeom->GetLastSSD())
77 throw(eH + Form("%d is not valid. ID range from %d to %d", id,
78 fInfo->fGeom->GetStartSPD(), fInfo->fGeom->GetLastSSD()));
79
80 fID = id;
81 InitModule();
82}
83
84/**************************************************************************/
85
86void ITSModule::InitModule()
87{
88 fInfo->fGeom->GetModuleId(fID,fLayer,fLadder,fDet);
89 SetName(Form("ITSModule %d", fID));
90
91 if (fID <= fInfo->fGeom->GetLastSPD()) {
92 fDetID = 0;
93 fDx = fInfo->fSegSPD->Dx()*0.00005;
94 fDz = 3.48;
95 fDy = fInfo->fSegSPD->Dy()*0.00005;
96 }
97 else if (fID <= fInfo->fGeom->GetLastSDD()) {
98 fDetID = 1;
99 fDx = fInfo->fSegSDD->Dx()*0.0001;
100 fDz = fInfo->fSegSDD->Dz()*0.00005;
101 fDy = fInfo->fSegSDD->Dy()*0.00005;
102 }
103 else {
104 fDetID = 2;
105 fInfo->fSegSSD->SetLayer(fLayer);
106 fDx = fInfo->fSegSSD->Dx()*0.00005;
107 fDz = fInfo->fSegSSD->Dz()*0.00005;
108 fDy = fInfo->fSegSSD->Dy()*0.00005;
109 }
110
111 LoadQuads();
112 ComputeBBox();
113 SetTrans();
114}
115
116void ITSModule::LoadQuads()
117{
118 // printf("its module load quads \n");
119 Float_t x = fDx;
120 Float_t z = fDz;
915dabe1 121 Bool_t aboveThreshold = false;
5a5a1232 122
123 // Module frame in xy plane
092578a7 124 fQuads.push_back(Reve::Quad(fFrameColor));
5a5a1232 125 Float_t dy = -0.;
126 Float_t* p = fQuads.back().vertices;
127 p[0] = -x; p[1] = dy; p[2] = -z;
128 p[3] = -x; p[4] = dy; p[5] = z;
129 p[6] = x; p[7] = dy; p[8] = z;
130 p[9] = x; p[10] = dy; p[11] = -z;
131
132 // Digits
133 TClonesArray *digits;
134 Int_t ndigits;
135 Float_t dpx,dpz;
136 Int_t i,j;
137 digits = fInfo->GetDigits(fID, fDetID );
138 ndigits = digits->GetEntriesFast();
139 Int_t n_col = gStyle->GetNumberOfColors();
140
141 switch(fDetID) {
142
143 case 0: { // SPD
915dabe1 144 aboveThreshold = true;
5a5a1232 145 AliITSsegmentationSPD* seg = fInfo->fSegSPD;
146 AliITSdigitSPD *d=0;
147
148 for (Int_t k=0; k<ndigits; k++) {
149 d=(AliITSdigitSPD*)digits->UncheckedAt(k);
150 j = d->GetCoord1();
151 i = d->GetCoord2();
152 x = -seg->Dx()/2 + seg->Dpx(0) *i;
153 x *= 0.0001;
154 fInfo->GetSPDLocalZ(j,z);
155 dpx = seg->Dpx(i)*0.0001;
156 dpz = seg->Dpz(j)*0.0001;
157
158 fQuads.push_back(Reve::Quad(7));
159 Float_t* p = fQuads.back().vertices;
160 p[0] = x; p[1] = 0.; p[2] = z;
161 p[3] = x; p[4] = 0.; p[5] = z + dpz;
162 p[6] = x + dpx; p[7] = 0.; p[8] = z + dpz;
163 p[9] = x + dpx; p[10] =0.; p[11] = z;
164 }
165 break;
166 }
167
168 case 1: { // SDD
169 AliITSsegmentationSDD* seg = fInfo->fSegSDD;
170 AliITSdigitSDD *d=0;
171 x = 2*fDx;
172 z = 2*fDz;
173 for (Int_t k=0; k<ndigits; k++) {
174 d=(AliITSdigitSDD*)digits->UncheckedAt(k);
175
176 if (d->GetSignal() > fgSDDThreshold) {
177 j = d->GetCoord1();
178 i = d->GetCoord2();
915dabe1 179 aboveThreshold = true;
5a5a1232 180 seg->DetToLocal(i,j,x,z);
181 dpx = seg->Dpx(i)*0.0001;
182 dpz = seg->Dpz(j)*0.0001;
183
184 Int_t ci = gStyle->GetColorPalette
185 (TMath::Min(n_col - 1,
186 (n_col*(d->GetSignal() - fgSDDThreshold))/(fgSDDMaxVal - fgSDDThreshold)));
187 fQuads.push_back(Reve::Quad(ci, p));
188 Float_t* p = fQuads.back().vertices;
189 p[0] = x; p[1] = 0.; p[2] = z;
190 p[3] = x; p[4] = 0.; p[5] = z + dpz;
191 p[6] = x + dpx; p[7] = 0.; p[8] = z + dpz;
192 p[9] = x + dpx; p[10] =0.; p[11] = z;
193 }
194 }
195 break;
196 }
197
198 case 2: { // SSD
199 AliITSsegmentationSSD* seg = fInfo->fSegSSD;
200 AliITSdigitSSD *d=0;
201 Float_t ap,an,a;
202 seg->Angles(ap,an);
203 for (Int_t k=0; k<ndigits; k++) {
204 d=(AliITSdigitSSD*)digits->UncheckedAt(k);
205 if(d->GetSignal() > fgSSDThreshold){
915dabe1 206 aboveThreshold = true;
5a5a1232 207 j = d->GetCoord1();
208 i = d->GetCoord2();
209 seg->DetToLocal(i,j,x,z);
210
211 if( d->GetCoord1() == 1) {
212 a = ap;
213 }
214 else {
215 a = -an;
216 }
217 fQuads.push_back(Reve::Quad());
218 Int_t ci = gStyle->GetColorPalette
219 (TMath::Min(n_col - 1,
220 (n_col*(d->GetSignal() - fgSSDThreshold))/(fgSSDMaxVal - fgSSDThreshold)));
221
222 fQuads.back().ColorFromIdx(ci);
223 Float_t* p = fQuads.back().vertices;
224
225 p[0] = x-TMath::Tan(a)*fDz; p[1] = 0; p[2] = -fDz;
226 p[3] = x+TMath::Tan(a)*fDz; p[4] = 0; p[5] = fDz ;
227 p[6] = x+TMath::Tan(a)*fDz; p[7] = 0; p[8] = fDz ;
228 p[9] = x-TMath::Tan(a)*fDz; p[10] = 0; p[11] = -fDz;
229 // printf("%3d -> %3d -> %8x\n", d->GetSignal(), ci, fQuads.back().color);
230 }
231 }
232 break;
233 }
234
235 }
236}
237
238/**************************************************************************/
239
240void ITSModule::SetTrans()
241{
242 Double_t pos[3];
243 Double_t rot[9];
244 fInfo->fGeom->GetTrans(fID,pos);
245 fInfo->fGeom->GetRotMatrix(fID,rot);
246 Double_t *s, *d;
247
248 // column major ii
249 s = &rot[0]; d = &fMatrix[0];
250 d[0] = s[0]; d[1] = s[3]; d[2] = s[6]; d[3] = 0;
251 s = &rot[1]; d = &fMatrix[4];
252 d[0] = s[0]; d[1] = s[3]; d[2] = s[6]; d[3] = 0;
253 s = &rot[2]; d = &fMatrix[8];
254 d[0] = s[0]; d[1] = s[3]; d[2] = s[6]; d[3] = 0;
255 s = &pos[0]; d = &fMatrix[12];
256 d[0] = s[0]; d[1] = s[1]; d[2] = s[2]; d[3] = 1;
257
258 fTrans = true;
259}
260
261/**************************************************************************/
262
263void ITSModule::Print(Option_t* ) const
264{
265 printf("ID %d, layer %d, ladder %d, det %d \n", fID, fLayer, fLadder, fDetID);
266}