1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
18 Revision 1.1.4.2 2000/05/08 14:46:44 cblume
19 Include options SetPHOShole() and SetRICHhole()
21 Revision 1.1.4.1 2000/04/27 12:46:04 cblume
22 Corrected bug in full geometry
24 Revision 1.1 2000/02/28 19:01:15 cblume
29 ///////////////////////////////////////////////////////////////////////////////
31 // TRD geometry for the spaceframe without holes //
33 ///////////////////////////////////////////////////////////////////////////////
35 #include "AliTRDgeometryFull.h"
37 ClassImp(AliTRDgeometryFull)
39 //_____________________________________________________________________________
40 AliTRDgeometryFull::AliTRDgeometryFull():AliTRDgeometry()
43 // AliTRDgeometryFull default constructor
50 //_____________________________________________________________________________
51 AliTRDgeometryFull::~AliTRDgeometryFull()
56 //_____________________________________________________________________________
57 void AliTRDgeometryFull::Init()
60 // Initializes the geometry parameter
68 // The length of the inner chambers
69 for (iplan = 0; iplan < kNplan; iplan++)
70 fClengthI[iplan] = 110.0;
72 // The length of the middle chambers
73 fClengthM1[0] = 123.5;
74 fClengthM1[1] = 131.0;
75 fClengthM1[2] = 138.5;
76 fClengthM1[3] = 146.0;
77 fClengthM1[4] = 153.0;
78 fClengthM1[5] = 160.5;
80 fClengthM2[0] = 123.5 - 7.0;
81 fClengthM2[1] = 131.0 - 7.0;
82 fClengthM2[2] = 138.5 - 7.0;
83 fClengthM2[3] = 146.0 - 7.0;
84 fClengthM2[4] = 153.0 - 7.0;
85 fClengthM2[5] = 160.4 - 7.0;
87 // The length of the outer chambers
88 fClengthO1[0] = 123.5;
89 fClengthO1[1] = 131.0;
90 fClengthO1[2] = 134.5;
91 fClengthO1[3] = 142.0;
92 fClengthO1[4] = 142.0;
93 fClengthO1[5] = 134.5;
95 fClengthO2[0] = 123.5;
96 fClengthO2[1] = 131.0;
97 fClengthO2[2] = 134.5;
98 fClengthO2[3] = 142.0;
99 fClengthO2[4] = 142.0;
100 fClengthO2[5] = 134.5;
102 fClengthO3[0] = 86.5;
103 fClengthO3[1] = 101.5;
104 fClengthO3[2] = 112.5;
105 fClengthO3[3] = 127.5;
106 fClengthO3[4] = 134.5;
107 fClengthO3[5] = 134.5;
109 // The maximum number of pads
110 // and the position of pad 0,0,0
112 // chambers seen from the top:
113 // +----------------------------+
119 // +----------------------------+ +------>
121 // chambers seen from the side: ^
122 // +----------------------------+ time|
125 // +----------------------------+ +------>
129 // The pad row (z-direction)
130 for (iplan = 0; iplan < kNplan; iplan++) {
132 for (Int_t isect = 0; isect < kNsect; isect++) {
133 Float_t clengthI = fClengthI[iplan];
134 Float_t clengthM = fClengthM1[iplan];
135 Float_t clengthO = fClengthO1[iplan];
142 clengthM = fClengthM2[iplan];
143 clengthO = fClengthO2[iplan];
148 clengthO = fClengthO3[iplan];
151 fRowMax[iplan][0][isect] = 1 + TMath::Nint((clengthO - 2. * kCcthick)
152 / fRowPadSize - 0.5);
153 fRowMax[iplan][1][isect] = 1 + TMath::Nint((clengthM - 2. * kCcthick)
154 / fRowPadSize - 0.5);
155 fRowMax[iplan][2][isect] = 1 + TMath::Nint((clengthI - 2. * kCcthick)
156 / fRowPadSize - 0.5);
157 fRowMax[iplan][3][isect] = 1 + TMath::Nint((clengthM - 2. * kCcthick)
158 / fRowPadSize - 0.5);
159 fRowMax[iplan][4][isect] = 1 + TMath::Nint((clengthO - 2. * kCcthick)
160 / fRowPadSize - 0.5);
161 fRow0[iplan][0][isect] = -clengthI/2. - clengthM - clengthO + kCcthick;
162 fRow0[iplan][1][isect] = -clengthI/2. - clengthM + kCcthick;
163 fRow0[iplan][2][isect] = -clengthI/2. + kCcthick;
164 fRow0[iplan][3][isect] = clengthI/2. + kCcthick;
165 fRow0[iplan][4][isect] = clengthI/2. + clengthM + kCcthick;
172 //_____________________________________________________________________________
173 void AliTRDgeometryFull::CreateGeometry(Int_t *idtmed)
176 // Create the TRD geometry without hole
181 const Int_t npar_trd = 4;
182 const Int_t npar_cha = 3;
184 Float_t par_trd[npar_trd];
185 Float_t par_cha[npar_cha];
187 Float_t xpos, ypos, zpos;
189 AliTRDgeometry::CreateGeometry(idtmed);
191 // The TRD mother volume for one sector (Air), full length in z-direction
192 par_trd[0] = kSwidth1/2.;
193 par_trd[1] = kSwidth2/2.;
194 par_trd[2] = kSlenTR1/2.;
195 par_trd[3] = kSheight/2.;
196 gMC->Gsvolu("TRD1","TRD1",idtmed[1302-1],par_trd,npar_trd);
198 // The TRD mother volume for one sector (Air), leaving hole for PHOS
200 gMC->Gsvolu("TRD2","TRD1",idtmed[1302-1],par_trd,npar_trd);
203 // The TRD mother volume for one sector (Air), leaving hole for RICH
205 gMC->Gsvolu("TRD3","TRD1",idtmed[1302-1],par_trd,npar_trd);
208 // Position the chambers in the TRD mother volume
209 for (iplan = 1; iplan <= kNplan; iplan++) {
211 Float_t y1 = fClengthM1[iplan-1] - fClengthM2[iplan-1];
212 Float_t y2 = fClengthO1[iplan-1] - fClengthO3[iplan-1];
214 // The inner chambers ---------------------------------------------------------------
216 // the aluminum frame
217 par_cha[0] = fCwidth[iplan-1]/2.;
218 par_cha[1] = fClengthI[iplan-1]/2.;
219 par_cha[2] = kCaframe/2.;
222 zpos = kCheight - kCaframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
223 gMC->Gsposp("UAFI",iplan ,"TRD1",xpos,ypos,zpos,0,"MANY",par_cha,npar_cha);
225 // the inner part of the aluminum frame
226 par_cha[0] = fCwidth[iplan-1]/2. - kCathick;
227 par_cha[1] = fClengthI[iplan-1]/2. - kCathick;
228 par_cha[2] = kCaframe/2.;
231 zpos = kCheight - kCaframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
232 gMC->Gsposp("UAII",iplan ,"TRD1",xpos,ypos,zpos,0,"ONLY",par_cha,npar_cha);
235 par_cha[0] = fCwidth[iplan-1]/2.;
236 par_cha[1] = fClengthI[iplan-1]/2.;
237 par_cha[2] = kCcframe/2.;
240 zpos = kCcframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
241 gMC->Gsposp("UCFI",iplan ,"TRD1",xpos,ypos,zpos,0,"MANY",par_cha,npar_cha);
243 // the inner part of the carbon frame
244 par_cha[0] = fCwidth[iplan-1]/2. - kCcthick;
245 par_cha[1] = fClengthI[iplan-1]/2. - kCcthick;
246 par_cha[2] = kCcframe/2.;
249 zpos = kCcframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
250 gMC->Gsposp("UCII",iplan ,"TRD1",xpos,ypos,zpos,0,"ONLY",par_cha,npar_cha);
252 // The middle chambers --------------------------------------------------------------
254 // the aluminum frame
255 par_cha[0] = fCwidth[iplan-1]/2.;
256 par_cha[1] = fClengthM1[iplan-1]/2.;
257 par_cha[2] = kCaframe/2.;
259 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1]/2.;
260 zpos = kCheight - kCaframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
261 gMC->Gsposp("UAFM",iplan ,"TRD1",xpos, ypos,zpos,0,"MANY",par_cha,npar_cha);
262 gMC->Gsposp("UAFM",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"MANY",par_cha,npar_cha);
264 par_cha[0] = fCwidth[iplan-1]/2.;
265 par_cha[1] = fClengthM2[iplan-1]/2.;
266 par_cha[2] = kCaframe/2.;
268 ypos = fClengthI[iplan-1]/2. + fClengthM2[iplan-1]/2. + y1;
269 zpos = kCheight - kCaframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
270 gMC->Gsposp("UAFM",iplan+2*kNplan,"TRD2",xpos, ypos,zpos,0,"MANY",par_cha,npar_cha);
271 gMC->Gsposp("UAFM",iplan+3*kNplan,"TRD2",xpos,-ypos,zpos,0,"MANY",par_cha,npar_cha);
274 // the inner part of the aluminum frame
275 par_cha[0] = fCwidth[iplan-1]/2. - kCathick;
276 par_cha[1] = fClengthM1[iplan-1]/2. - kCathick;
277 par_cha[2] = kCaframe/2.;
279 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1]/2.;
280 zpos = kCheight - kCaframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
281 gMC->Gsposp("UAIM",iplan ,"TRD1",xpos, ypos,zpos,0,"ONLY",par_cha,npar_cha);
282 gMC->Gsposp("UAIM",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"ONLY",par_cha,npar_cha);
284 par_cha[0] = fCwidth[iplan-1]/2. - kCathick;
285 par_cha[1] = fClengthM2[iplan-1]/2. - kCathick;
286 par_cha[2] = kCaframe/2.;
288 ypos = fClengthI[iplan-1]/2. + fClengthM2[iplan-1]/2. + y1;
289 zpos = kCheight - kCaframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
290 gMC->Gsposp("UAIM",iplan+2*kNplan,"TRD2",xpos, ypos,zpos,0,"ONLY",par_cha,npar_cha);
291 gMC->Gsposp("UAIM",iplan+3*kNplan,"TRD2",xpos,-ypos,zpos,0,"ONLY",par_cha,npar_cha);
295 par_cha[0] = fCwidth[iplan-1]/2.;
296 par_cha[1] = fClengthM1[iplan-1]/2.;
297 par_cha[2] = kCcframe/2.;
299 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1]/2.;
300 zpos = kCcframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
301 gMC->Gsposp("UCFM",iplan ,"TRD1",xpos, ypos,zpos,0,"MANY",par_cha,npar_cha);
302 gMC->Gsposp("UCFM",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"MANY",par_cha,npar_cha);
304 par_cha[0] = fCwidth[iplan-1]/2.;
305 par_cha[1] = fClengthM2[iplan-1]/2.;
306 par_cha[2] = kCcframe/2.;
308 ypos = fClengthI[iplan-1]/2. + fClengthM2[iplan-1]/2. + y1;
309 zpos = kCcframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
310 gMC->Gsposp("UCFM",iplan+2*kNplan,"TRD2",xpos, ypos,zpos,0,"MANY",par_cha,npar_cha);
311 gMC->Gsposp("UCFM",iplan+3*kNplan,"TRD2",xpos,-ypos,zpos,0,"MANY",par_cha,npar_cha);
314 // the inner part of the carbon frame
315 par_cha[0] = fCwidth[iplan-1]/2. - kCcthick;
316 par_cha[1] = fClengthM1[iplan-1]/2. - kCcthick;
317 par_cha[2] = kCcframe/2.;
319 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1]/2.;
320 zpos = kCcframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
321 gMC->Gsposp("UCIM",iplan ,"TRD1",xpos, ypos,zpos,0,"ONLY",par_cha,npar_cha);
322 gMC->Gsposp("UCIM",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"ONLY",par_cha,npar_cha);
324 par_cha[0] = fCwidth[iplan-1]/2. - kCcthick;
325 par_cha[1] = fClengthM2[iplan-1]/2. - kCcthick;
326 par_cha[2] = kCcframe/2.;
328 ypos = fClengthI[iplan-1]/2. + fClengthM2[iplan-1]/2. + y1;
329 zpos = kCcframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
330 gMC->Gsposp("UCIM",iplan+2*kNplan,"TRD2",xpos, ypos,zpos,0,"ONLY",par_cha,npar_cha);
331 gMC->Gsposp("UCIM",iplan+3*kNplan,"TRD2",xpos,-ypos,zpos,0,"ONLY",par_cha,npar_cha);
334 // The outer chambers ---------------------------------------------------------------
336 // the aluminum frame
337 par_cha[0] = fCwidth[iplan-1]/2.;
338 par_cha[1] = fClengthO1[iplan-1]/2.;
339 par_cha[2] = kCaframe/2.;
341 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO1[iplan-1]/2.;
342 zpos = kCheight - kCaframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
343 gMC->Gsposp("UAFO",iplan ,"TRD1",xpos, ypos,zpos,0,"MANY",par_cha,npar_cha);
344 gMC->Gsposp("UAFO",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"MANY",par_cha,npar_cha);
346 par_cha[0] = fCwidth[iplan-1]/2.;
347 par_cha[1] = fClengthO2[iplan-1]/2.;
348 par_cha[2] = kCaframe/2.;
350 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO2[iplan-1]/2.;
351 zpos = kCheight - kCaframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
352 gMC->Gsposp("UAFO",iplan+2*kNplan,"TRD2",xpos, ypos,zpos,0,"MANY",par_cha,npar_cha);
353 gMC->Gsposp("UAFO",iplan+3*kNplan,"TRD2",xpos,-ypos,zpos,0,"MANY",par_cha,npar_cha);
356 par_cha[0] = fCwidth[iplan-1]/2.;
357 par_cha[1] = fClengthO3[iplan-1]/2.;
358 par_cha[2] = kCaframe/2.;
360 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO3[iplan-1]/2. + y2;
361 zpos = kCheight - kCaframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
362 gMC->Gsposp("UAFO",iplan+4*kNplan,"TRD3",xpos, ypos,zpos,0,"MANY",par_cha,npar_cha);
363 gMC->Gsposp("UAFO",iplan+5*kNplan,"TRD3",xpos,-ypos,zpos,0,"MANY",par_cha,npar_cha);
366 // the inner part of the aluminum frame
367 par_cha[0] = fCwidth[iplan-1]/2. - kCathick;
368 par_cha[1] = fClengthO1[iplan-1]/2. - kCathick;
369 par_cha[2] = kCaframe/2.;
371 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO1[iplan-1]/2.;
372 zpos = kCheight - kCaframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
373 gMC->Gsposp("UAIO",iplan ,"TRD1",xpos, ypos,zpos,0,"ONLY",par_cha,npar_cha);
374 gMC->Gsposp("UAIO",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"ONLY",par_cha,npar_cha);
376 par_cha[0] = fCwidth[iplan-1]/2. - kCathick;
377 par_cha[1] = fClengthO2[iplan-1]/2. - kCathick;
378 par_cha[2] = kCaframe/2.;
380 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO2[iplan-1]/2.;
381 zpos = kCheight - kCaframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
382 gMC->Gsposp("UAIO",iplan+2*kNplan,"TRD2",xpos, ypos,zpos,0,"ONLY",par_cha,npar_cha);
383 gMC->Gsposp("UAIO",iplan+3*kNplan,"TRD2",xpos,-ypos,zpos,0,"ONLY",par_cha,npar_cha);
386 par_cha[0] = fCwidth[iplan-1]/2. - kCathick;
387 par_cha[1] = fClengthO3[iplan-1]/2. - kCathick;
388 par_cha[2] = kCaframe/2.;
390 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO3[iplan-1]/2. + y2;
391 zpos = kCheight - kCaframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
392 gMC->Gsposp("UAIO",iplan+4*kNplan,"TRD3",xpos, ypos,zpos,0,"ONLY",par_cha,npar_cha);
393 gMC->Gsposp("UAIO",iplan+5*kNplan,"TRD3",xpos,-ypos,zpos,0,"ONLY",par_cha,npar_cha);
397 par_cha[0] = fCwidth[iplan-1]/2.;
398 par_cha[1] = fClengthO1[iplan-1]/2.;
399 par_cha[2] = kCcframe/2.;
401 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO1[iplan-1]/2.;
402 zpos = kCcframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
403 gMC->Gsposp("UCFO",iplan, "TRD1",xpos, ypos,zpos,0,"MANY",par_cha,npar_cha);
404 gMC->Gsposp("UCFO",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"MANY",par_cha,npar_cha);
406 par_cha[0] = fCwidth[iplan-1]/2.;
407 par_cha[1] = fClengthO2[iplan-1]/2.;
408 par_cha[2] = kCcframe/2.;
410 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO2[iplan-1]/2.;
411 zpos = kCcframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
412 gMC->Gsposp("UCFO",iplan+2*kNplan,"TRD2",xpos, ypos,zpos,0,"MANY",par_cha,npar_cha);
413 gMC->Gsposp("UCFO",iplan+3*kNplan,"TRD2",xpos,-ypos,zpos,0,"MANY",par_cha,npar_cha);
416 par_cha[0] = fCwidth[iplan-1]/2.;
417 par_cha[1] = fClengthO3[iplan-1]/2.;
418 par_cha[2] = kCcframe/2.;
420 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO3[iplan-1]/2. + y2;
421 zpos = kCcframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
422 gMC->Gsposp("UCFO",iplan+4*kNplan,"TRD3",xpos, ypos,zpos,0,"MANY",par_cha,npar_cha);
423 gMC->Gsposp("UCFO",iplan+5*kNplan,"TRD3",xpos,-ypos,zpos,0,"MANY",par_cha,npar_cha);
426 // the inner part of the carbon frame
427 par_cha[0] = fCwidth[iplan-1]/2. - kCcthick;
428 par_cha[1] = fClengthO1[iplan-1]/2. - kCcthick;
429 par_cha[2] = kCcframe/2.;
431 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO1[iplan-1]/2.;
432 zpos = kCcframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
433 gMC->Gsposp("UCIO",iplan ,"TRD1",xpos, ypos,zpos,0,"ONLY",par_cha,npar_cha);
434 gMC->Gsposp("UCIO",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"ONLY",par_cha,npar_cha);
436 par_cha[0] = fCwidth[iplan-1]/2. - kCcthick;
437 par_cha[1] = fClengthO2[iplan-1]/2. - kCcthick;
438 par_cha[2] = kCcframe/2.;
440 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO2[iplan-1]/2.;
441 zpos = kCcframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
442 gMC->Gsposp("UCIO",iplan+2*kNplan,"TRD2",xpos, ypos,zpos,0,"ONLY",par_cha,npar_cha);
443 gMC->Gsposp("UCIO",iplan+3*kNplan,"TRD2",xpos,-ypos,zpos,0,"ONLY",par_cha,npar_cha);
446 par_cha[0] = fCwidth[iplan-1]/2. - kCcthick;
447 par_cha[1] = fClengthO3[iplan-1]/2. - kCcthick;
448 par_cha[2] = kCcframe/2.;
450 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO3[iplan-1]/2. + y2;
451 zpos = kCcframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
452 gMC->Gsposp("UCIO",iplan+4*kNplan,"TRD3",xpos, ypos,zpos,0,"ONLY",par_cha,npar_cha);
453 gMC->Gsposp("UCIO",iplan+5*kNplan,"TRD3",xpos,-ypos,zpos,0,"ONLY",par_cha,npar_cha);
461 gMC->Gspos("TRD1",1,"BTR1",xpos,ypos,zpos,0,"ONLY");
463 gMC->Gspos("TRD2",2,"BTR2",xpos,ypos,zpos,0,"ONLY");
465 gMC->Gspos("TRD1",2,"BTR2",xpos,ypos,zpos,0,"ONLY");
467 gMC->Gspos("TRD3",3,"BTR3",xpos,ypos,zpos,0,"ONLY");
469 gMC->Gspos("TRD1",3,"BTR3",xpos,ypos,zpos,0,"ONLY");