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 void ITSModule::Init()
29 /**************************************************************************/
31 ITSModule::ITSModule(Int_t id, ITSDigitsInfo* info, Color_t col) :
32 QuadSet(Form("ITS module %d", id)), Reve::RenderElement(fFrameColor),
41 ITSModule::~ITSModule()
43 if(fInfo) fInfo->DecRefCount();
46 /**************************************************************************/
48 void ITSModule::SetMainColor(Color_t col)
50 Reve::RenderElement::SetMainColor(col);
52 fQuads.front().ColorFromIdx(col);
56 /**************************************************************************/
58 void ITSModule::SetID(Int_t id)
60 static const Exc_t eH("ITSModule::SetID ");
63 throw(eH + "ITSDigitsInfo not set.");
65 if (id < fInfo->fGeom->GetStartSPD() || id > fInfo->fGeom->GetLastSSD())
66 throw(eH + Form("%d is not valid. ID range from %d to %d", id,
67 fInfo->fGeom->GetStartSPD(), fInfo->fGeom->GetLastSSD()));
73 /**************************************************************************/
75 void ITSModule::InitModule()
77 fInfo->fGeom->GetModuleId(fID,fLayer,fLadder,fDet);
78 SetName(Form("ITSModule %d", fID));
80 if (fID <= fInfo->fGeom->GetLastSPD()) {
82 fDx = fInfo->fSegSPD->Dx()*0.00005;
84 fDy = fInfo->fSegSPD->Dy()*0.00005;
86 else if (fID <= fInfo->fGeom->GetLastSDD()) {
88 fDx = fInfo->fSegSDD->Dx()*0.0001;
89 fDz = fInfo->fSegSDD->Dz()*0.00005;
90 fDy = fInfo->fSegSDD->Dy()*0.00005;
94 fInfo->fSegSSD->SetLayer(fLayer);
95 fDx = fInfo->fSegSSD->Dx()*0.00005;
96 fDz = fInfo->fSegSSD->Dz()*0.00005;
97 fDy = fInfo->fSegSSD->Dy()*0.00005;
105 void ITSModule::LoadQuads()
107 // printf("its module load quads \n");
110 Bool_t aboveThreshold = false;
112 // Module frame in xy plane
113 fQuads.push_back(Reve::Quad(fFrameColor));
115 Float_t* p = fQuads.back().vertices;
116 p[0] = -x; p[1] = dy; p[2] = -z;
117 p[3] = -x; p[4] = dy; p[5] = z;
118 p[6] = x; p[7] = dy; p[8] = z;
119 p[9] = x; p[10] = dy; p[11] = -z;
122 TClonesArray *digits;
126 digits = fInfo->GetDigits(fID, fDetID );
127 ndigits = digits->GetEntriesFast();
128 Int_t n_col = gStyle->GetNumberOfColors();
133 aboveThreshold = true;
134 AliITSsegmentationSPD* seg = fInfo->fSegSPD;
137 for (Int_t k=0; k<ndigits; k++) {
138 d=(AliITSdigitSPD*)digits->UncheckedAt(k);
141 x = -seg->Dx()/2 + seg->Dpx(0) *i;
143 fInfo->GetSPDLocalZ(j,z);
144 dpx = seg->Dpx(i)*0.0001;
145 dpz = seg->Dpz(j)*0.0001;
147 fQuads.push_back(Reve::Quad(7));
148 Float_t* p = fQuads.back().vertices;
149 p[0] = x; p[1] = 0.; p[2] = z;
150 p[3] = x; p[4] = 0.; p[5] = z + dpz;
151 p[6] = x + dpx; p[7] = 0.; p[8] = z + dpz;
152 p[9] = x + dpx; p[10] =0.; p[11] = z;
158 AliITSsegmentationSDD* seg = fInfo->fSegSDD;
162 for (Int_t k=0; k<ndigits; k++) {
163 d=(AliITSdigitSDD*)digits->UncheckedAt(k);
165 if (d->GetSignal() > fgSDDThreshold) {
168 aboveThreshold = true;
169 seg->DetToLocal(i,j,x,z);
170 dpx = seg->Dpx(i)*0.0001;
171 dpz = seg->Dpz(j)*0.0001;
173 Int_t ci = gStyle->GetColorPalette
174 (TMath::Min(n_col - 1,
175 (n_col*(d->GetSignal() - fgSDDThreshold))/(fgSDDMaxVal - fgSDDThreshold)));
176 fQuads.push_back(Reve::Quad(ci, p));
177 Float_t* p = fQuads.back().vertices;
178 p[0] = x; p[1] = 0.; p[2] = z;
179 p[3] = x; p[4] = 0.; p[5] = z + dpz;
180 p[6] = x + dpx; p[7] = 0.; p[8] = z + dpz;
181 p[9] = x + dpx; p[10] =0.; p[11] = z;
188 AliITSsegmentationSSD* seg = fInfo->fSegSSD;
192 for (Int_t k=0; k<ndigits; k++) {
193 d=(AliITSdigitSSD*)digits->UncheckedAt(k);
194 if(d->GetSignal() > fgSSDThreshold){
195 aboveThreshold = true;
198 seg->DetToLocal(i,j,x,z);
200 if( d->GetCoord1() == 1) {
206 fQuads.push_back(Reve::Quad());
207 Int_t ci = gStyle->GetColorPalette
208 (TMath::Min(n_col - 1,
209 (n_col*(d->GetSignal() - fgSSDThreshold))/(fgSSDMaxVal - fgSSDThreshold)));
211 fQuads.back().ColorFromIdx(ci);
212 Float_t* p = fQuads.back().vertices;
214 p[0] = x-TMath::Tan(a)*fDz; p[1] = 0; p[2] = -fDz;
215 p[3] = x+TMath::Tan(a)*fDz; p[4] = 0; p[5] = fDz ;
216 p[6] = x+TMath::Tan(a)*fDz; p[7] = 0; p[8] = fDz ;
217 p[9] = x-TMath::Tan(a)*fDz; p[10] = 0; p[11] = -fDz;
218 // printf("%3d -> %3d -> %8x\n", d->GetSignal(), ci, fQuads.back().color);
227 /**************************************************************************/
229 void ITSModule::SetTrans()
233 fInfo->fGeom->GetTrans(fID,pos);
234 fInfo->fGeom->GetRotMatrix(fID,rot);
238 s = &rot[0]; d = &fMatrix[0];
239 d[0] = s[0]; d[1] = s[3]; d[2] = s[6]; d[3] = 0;
240 s = &rot[1]; d = &fMatrix[4];
241 d[0] = s[0]; d[1] = s[3]; d[2] = s[6]; d[3] = 0;
242 s = &rot[2]; d = &fMatrix[8];
243 d[0] = s[0]; d[1] = s[3]; d[2] = s[6]; d[3] = 0;
244 s = &pos[0]; d = &fMatrix[12];
245 d[0] = s[0]; d[1] = s[1]; d[2] = s[2]; d[3] = 1;
250 /**************************************************************************/
252 void ITSModule::Print(Option_t* ) const
254 printf("ID %d, layer %d, ladder %d, det %d \n", fID, fLayer, fLadder, fDetID);