3 #include <AliITSdigitSPD.h>
4 #include <AliITSdigitSDD.h>
5 #include <AliITSdigitSSD.h>
10 using namespace Alieve;
13 Short_t ITSModule::fgSDDThreshold = 5;
14 Short_t ITSModule::fgSDDMaxVal = 80;
15 Short_t ITSModule::fgSSDThreshold = 2;
16 Short_t ITSModule::fgSSDMaxVal = 100;
20 /**************************************************************************/
22 ITSModule::ITSModule(const Text_t* n, const Text_t* t, Color_t col) :
23 Reve::RenderElement(fFrameColor),
27 fLayer(-1), fLadder(-1), fDet(-1),
28 fDx(0), fDz(0), fDy(0),
32 ITSModule::ITSModule(Int_t id, ITSDigitsInfo* info, Color_t col) :
33 Reve::RenderElement(fFrameColor),
34 OldQuadSet(Form("ITS module %d", id)),
37 fLayer(-1), fLadder(-1), fDet(-1),
38 fDx(0), fDz(0), fDy(0),
45 ITSModule::~ITSModule()
47 if(fInfo) fInfo->DecRefCount();
50 /**************************************************************************/
52 void ITSModule::SetMainColor(Color_t col)
54 Reve::RenderElement::SetMainColor(col);
56 fQuads.front().ColorFromIdx(col);
60 /**************************************************************************/
62 void ITSModule::SetDigitsInfo(ITSDigitsInfo* info)
64 if(fInfo) fInfo->DecRefCount();
66 if(fInfo) fInfo->IncRefCount();
69 void ITSModule::SetID(Int_t id)
71 static const Exc_t eH("ITSModule::SetID ");
74 throw(eH + "ITSDigitsInfo not set.");
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()));
84 /**************************************************************************/
86 void ITSModule::InitModule()
88 fInfo->fGeom->GetModuleId(fID,fLayer,fLadder,fDet);
89 TString strLadder = "Ladder";
90 TString strSensor = "Sensor";
92 Int_t id, nsector, nstave, nladder, rest;
94 if (fID <= fInfo->fGeom->GetLastSPD()) {
100 if (rest<4) nstave=0;
103 SetName(symname.Data());
105 fDx = fInfo->fSegSPD->Dx()*0.00005;
107 fDy = fInfo->fSegSPD->Dy()*0.00005;
113 if (rest<4) nstave=0;
116 SetName(symname.Data());
118 fDx = fInfo->fSegSPD->Dx()*0.00005;
120 fDy = fInfo->fSegSPD->Dy()*0.00005;
123 else if (fID <= fInfo->fGeom->GetLastSDD()) {
130 SetName(symname.Data());
132 fDx = fInfo->fSegSDD->Dx()*0.0001;
133 fDz = fInfo->fSegSDD->Dz()*0.00005;
134 fDy = fInfo->fSegSDD->Dy()*0.00005;
140 SetName(symname.Data());
142 fDx = fInfo->fSegSDD->Dx()*0.0001;
143 fDz = fInfo->fSegSDD->Dz()*0.00005;
144 fDy = fInfo->fSegSDD->Dy()*0.00005;
154 SetName(symname.Data());
156 fInfo->fSegSSD->SetLayer(fLayer);
157 fDx = fInfo->fSegSSD->Dx()*0.00005;
158 fDz = fInfo->fSegSSD->Dz()*0.00005;
159 fDy = fInfo->fSegSSD->Dy()*0.00005;
165 SetName(symname.Data());
167 fInfo->fSegSSD->SetLayer(fLayer);
168 fDx = fInfo->fSegSSD->Dx()*0.00005;
169 fDz = fInfo->fSegSSD->Dz()*0.00005;
170 fDy = fInfo->fSegSSD->Dy()*0.00005;
179 void ITSModule::LoadQuads()
181 // printf("its module load quads \n");
184 Bool_t aboveThreshold = false;
186 // Module frame in xy plane
187 fQuads.push_back(Reve::Quad(fFrameColor));
189 Float_t* p = fQuads.back().vertices;
190 p[0] = -x; p[1] = dy; p[2] = -z;
191 p[3] = -x; p[4] = dy; p[5] = z;
192 p[6] = x; p[7] = dy; p[8] = z;
193 p[9] = x; p[10] = dy; p[11] = -z;
196 TClonesArray *digits;
200 digits = fInfo->GetDigits(fID, fDetID );
201 ndigits = digits->GetEntriesFast();
202 Int_t n_col = gStyle->GetNumberOfColors();
207 aboveThreshold = true;
208 AliITSsegmentationSPD* seg = fInfo->fSegSPD;
211 for (Int_t k=0; k<ndigits; k++) {
212 d=(AliITSdigitSPD*)digits->UncheckedAt(k);
215 x = -seg->Dx()/2 + seg->Dpx(0) *i;
217 fInfo->GetSPDLocalZ(j,z);
218 dpx = seg->Dpx(i)*0.0001;
219 dpz = seg->Dpz(j)*0.0001;
221 fQuads.push_back(Reve::Quad(7));
222 Float_t* p = fQuads.back().vertices;
223 p[0] = x; p[1] = 0.; p[2] = z;
224 p[3] = x; p[4] = 0.; p[5] = z + dpz;
225 p[6] = x + dpx; p[7] = 0.; p[8] = z + dpz;
226 p[9] = x + dpx; p[10] =0.; p[11] = z;
232 AliITSsegmentationSDD* seg = fInfo->fSegSDD;
236 for (Int_t k=0; k<ndigits; k++) {
237 d=(AliITSdigitSDD*)digits->UncheckedAt(k);
239 if (d->GetSignal() > fgSDDThreshold) {
242 aboveThreshold = true;
243 seg->DetToLocal(i,j,x,z);
244 dpx = seg->Dpx(i)*0.0001;
245 dpz = seg->Dpz(j)*0.0001;
247 Int_t ci = gStyle->GetColorPalette
248 (TMath::Min(n_col - 1,
249 (n_col*(d->GetSignal() - fgSDDThreshold))/(fgSDDMaxVal - fgSDDThreshold)));
250 fQuads.push_back(Reve::Quad(ci, p));
251 Float_t* p = fQuads.back().vertices;
252 p[0] = x; p[1] = 0.; p[2] = z;
253 p[3] = x; p[4] = 0.; p[5] = z + dpz;
254 p[6] = x + dpx; p[7] = 0.; p[8] = z + dpz;
255 p[9] = x + dpx; p[10] =0.; p[11] = z;
262 AliITSsegmentationSSD* seg = fInfo->fSegSSD;
266 for (Int_t k=0; k<ndigits; k++) {
267 d=(AliITSdigitSSD*)digits->UncheckedAt(k);
268 if(d->GetSignal() > fgSSDThreshold){
269 aboveThreshold = true;
272 seg->DetToLocal(i,j,x,z);
274 if( d->GetCoord1() == 1) {
280 fQuads.push_back(Reve::Quad());
281 Int_t ci = gStyle->GetColorPalette
282 (TMath::Min(n_col - 1,
283 (n_col*(d->GetSignal() - fgSSDThreshold))/(fgSSDMaxVal - fgSSDThreshold)));
285 fQuads.back().ColorFromIdx(ci);
286 Float_t* p = fQuads.back().vertices;
288 p[0] = x-TMath::Tan(a)*fDz; p[1] = 0; p[2] = -fDz;
289 p[3] = x+TMath::Tan(a)*fDz; p[4] = 0; p[5] = fDz ;
290 p[6] = x+TMath::Tan(a)*fDz; p[7] = 0; p[8] = fDz ;
291 p[9] = x-TMath::Tan(a)*fDz; p[10] = 0; p[11] = -fDz;
292 // printf("%3d -> %3d -> %8x\n", d->GetSignal(), ci, fQuads.back().color);
301 /**************************************************************************/
303 void ITSModule::SetTrans()
307 fInfo->fGeom->GetTrans(fID,pos);
308 fInfo->fGeom->GetRotMatrix(fID,rot);
312 s = &rot[0]; d = &fMatrix[0];
313 d[0] = s[0]; d[1] = s[3]; d[2] = s[6]; d[3] = 0;
314 s = &rot[1]; d = &fMatrix[4];
315 d[0] = s[0]; d[1] = s[3]; d[2] = s[6]; d[3] = 0;
316 s = &rot[2]; d = &fMatrix[8];
317 d[0] = s[0]; d[1] = s[3]; d[2] = s[6]; d[3] = 0;
318 s = &pos[0]; d = &fMatrix[12];
319 d[0] = s[0]; d[1] = s[1]; d[2] = s[2]; d[3] = 1;
324 /**************************************************************************/
326 void ITSModule::Print(Option_t* ) const
328 printf("ID %d, layer %d, ladder %d, det %d \n", fID, fLayer, fLadder, fDetID);