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 **************************************************************************/
20 ///////////////////////////////////////////////////////////////////////////////
22 // TRD geometry with holes //
24 ///////////////////////////////////////////////////////////////////////////////
26 #include "AliTRDgeometryHole.h"
28 ClassImp(AliTRDgeometryHole)
30 //_____________________________________________________________________________
31 AliTRDgeometryHole::AliTRDgeometryHole():AliTRDgeometry()
34 // AliTRDgeometryHole default constructor
41 //_____________________________________________________________________________
42 AliTRDgeometryHole::~AliTRDgeometryHole()
47 //_____________________________________________________________________________
48 void AliTRDgeometryHole::Init()
51 // Initializes the geometry parameter
56 // The length of the inner chambers
57 for (iplan = 0; iplan < kNplan; iplan++)
58 fClengthI[iplan] = 110.0;
60 // The length of the middle chambers
61 fClengthM1[0] = 123.5;
62 fClengthM1[1] = 131.0;
63 fClengthM1[2] = 138.5;
64 fClengthM1[3] = 146.0;
65 fClengthM1[4] = 153.0;
66 fClengthM1[5] = 160.5;
68 fClengthM2[0] = 123.5 - 7.0;
69 fClengthM2[1] = 131.0 - 7.0;
70 fClengthM2[2] = 138.5 - 7.0;
71 fClengthM2[3] = 146.0 - 7.0;
72 fClengthM2[4] = 153.0 - 7.0;
73 fClengthM2[5] = 160.4 - 7.0;
75 // The length of the outer chambers
76 fClengthO1[0] = 123.5;
77 fClengthO1[1] = 131.0;
78 fClengthO1[2] = 134.5;
79 fClengthO1[3] = 142.0;
80 fClengthO1[4] = 142.0;
81 fClengthO1[5] = 134.5;
83 fClengthO2[0] = 123.5;
84 fClengthO2[1] = 131.0;
85 fClengthO2[2] = 134.5;
86 fClengthO2[3] = 142.0;
87 fClengthO2[4] = 142.0;
88 fClengthO2[5] = 134.5;
91 fClengthO3[1] = 101.5;
92 fClengthO3[2] = 112.5;
93 fClengthO3[3] = 127.5;
94 fClengthO3[4] = 134.5;
95 fClengthO3[5] = 134.5;
97 // The maximum number of pads
98 // and the position of pad 0,0,0
100 // chambers seen from the top:
101 // +----------------------------+
107 // +----------------------------+ +------>
109 // chambers seen from the side: ^
110 // +----------------------------+ time|
113 // +----------------------------+ +------>
117 // The pad row (z-direction)
118 for (iplan = 0; iplan < kNplan; iplan++) {
120 for (Int_t isect = 0; isect < kNsect; isect++) {
121 Float_t clengthI = fClengthI[iplan];
122 Float_t clengthM = fClengthM1[iplan];
123 Float_t clengthO = fClengthO1[iplan];
130 clengthM = fClengthM2[iplan];
131 clengthO = fClengthO2[iplan];
136 clengthO = fClengthO3[iplan];
139 fRowMax[iplan][0][isect] = 1 + TMath::Nint((clengthO - 2. * kCcthick)
140 / fRowPadSize - 0.5);
141 fRowMax[iplan][1][isect] = 1 + TMath::Nint((clengthM - 2. * kCcthick)
142 / fRowPadSize - 0.5);
143 fRowMax[iplan][2][isect] = 1 + TMath::Nint((clengthI - 2. * kCcthick)
144 / fRowPadSize - 0.5);
145 fRowMax[iplan][3][isect] = 1 + TMath::Nint((clengthM - 2. * kCcthick)
146 / fRowPadSize - 0.5);
147 fRowMax[iplan][4][isect] = 1 + TMath::Nint((clengthO - 2. * kCcthick)
148 / fRowPadSize - 0.5);
149 fRow0[iplan][0][isect] = -clengthI/2. - clengthM - clengthO + kCcthick;
150 fRow0[iplan][1][isect] = -clengthI/2. - clengthM + kCcthick;
151 fRow0[iplan][2][isect] = -clengthI/2. + kCcthick;
152 fRow0[iplan][3][isect] = clengthI/2. + kCcthick;
153 fRow0[iplan][4][isect] = clengthI/2. + clengthM + kCcthick;
160 //_____________________________________________________________________________
161 void AliTRDgeometryHole::CreateGeometry(Int_t *idtmed)
164 // Create the TRD geometry with hole
169 const Int_t npar_trd = 4;
170 const Int_t npar_cha = 3;
172 Float_t par_trd[npar_trd];
173 Float_t par_cha[npar_cha];
175 Float_t xpos, ypos, zpos;
177 AliTRDgeometry::CreateGeometry(idtmed);
179 // The TRD mother volume for one sector (Air) (dimensions identical to BTR1)
180 par_trd[0] = kSwidth1/2.;
181 par_trd[1] = kSwidth2/2.;
182 par_trd[2] = kSlenTR1/2.;
183 par_trd[3] = kSheight/2.;
184 gMC->Gsvolu("TRD1","TRD1",idtmed[1302-1],par_trd,npar_trd);
186 // The TRD mother volume for one sector (Air) (dimensions identical to BTR2)
187 par_trd[0] = kSwidth1/2.;
188 par_trd[1] = kSwidth2/2.;
189 par_trd[2] = kSlenTR2/2.;
190 par_trd[3] = kSheight/2.;
191 gMC->Gsvolu("TRD2","TRD1",idtmed[1302-1],par_trd,npar_trd);
193 // The TRD mother volume for one sector (Air) (dimensions identical to BTR3)
194 par_trd[0] = kSwidth1/2.;
195 par_trd[1] = kSwidth2/2.;
196 par_trd[2] = kSlenTR3/2.;
197 par_trd[3] = kSheight/2.;
198 gMC->Gsvolu("TRD3","TRD1",idtmed[1302-1],par_trd,npar_trd);
200 // Position the chambers in the TRD mother volume
201 for (iplan = 1; iplan <= kNplan; iplan++) {
203 // The inner chambers ---------------------------------------------------------------
205 // the aluminum frame
206 par_cha[0] = fCwidth[iplan-1]/2.;
207 par_cha[1] = fClengthI[iplan-1]/2.;
208 par_cha[2] = kCaframe/2.;
211 zpos = kCheight - kCaframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
212 gMC->Gsposp("UAFI",iplan ,"TRD1",xpos,ypos,zpos,0,"MANY",par_cha,npar_cha);
214 // the inner part of the aluminum frame
215 par_cha[0] = fCwidth[iplan-1]/2. - kCathick;
216 par_cha[1] = fClengthI[iplan-1]/2. - kCathick;
217 par_cha[2] = kCaframe/2.;
220 zpos = kCheight - kCaframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
221 gMC->Gsposp("UAII",iplan ,"TRD1",xpos,ypos,zpos,0,"ONLY",par_cha,npar_cha);
224 par_cha[0] = fCwidth[iplan-1]/2.;
225 par_cha[1] = fClengthI[iplan-1]/2.;
226 par_cha[2] = kCcframe/2.;
229 zpos = kCcframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
230 gMC->Gsposp("UCFI",iplan ,"TRD1",xpos,ypos,zpos,0,"MANY",par_cha,npar_cha);
232 // the inner part of the carbon frame
233 par_cha[0] = fCwidth[iplan-1]/2. - kCcthick;
234 par_cha[1] = fClengthI[iplan-1]/2. - kCcthick;
235 par_cha[2] = kCcframe/2.;
238 zpos = kCcframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
239 gMC->Gsposp("UCII",iplan ,"TRD1",xpos,ypos,zpos,0,"ONLY",par_cha,npar_cha);
241 // The middle chambers --------------------------------------------------------------
243 // the aluminum frame
244 par_cha[0] = fCwidth[iplan-1]/2.;
245 par_cha[1] = fClengthM1[iplan-1]/2.;
246 par_cha[2] = kCaframe/2.;
248 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1]/2.;
249 zpos = kCheight - kCaframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
250 gMC->Gsposp("UAFM",iplan ,"TRD1",xpos, ypos,zpos,0,"MANY",par_cha,npar_cha);
251 gMC->Gsposp("UAFM",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"MANY",par_cha,npar_cha);
252 par_cha[0] = fCwidth[iplan-1]/2.;
253 par_cha[1] = fClengthM2[iplan-1]/2.;
254 par_cha[2] = kCaframe/2.;
256 ypos = fClengthM2[iplan-1]/2. - kSlenTR2/2.;
257 zpos = kCheight - kCaframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
258 gMC->Gsposp("UAFM",iplan+2*kNplan,"TRD2",xpos, ypos,zpos,0,"MANY",par_cha,npar_cha);
260 // the inner part of the aluminum frame
261 par_cha[0] = fCwidth[iplan-1]/2. - kCathick;
262 par_cha[1] = fClengthM1[iplan-1]/2. - kCathick;
263 par_cha[2] = kCaframe/2.;
265 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1]/2.;
266 zpos = kCheight - kCaframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
267 gMC->Gsposp("UAIM",iplan ,"TRD1",xpos, ypos,zpos,0,"ONLY",par_cha,npar_cha);
268 gMC->Gsposp("UAIM",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"ONLY",par_cha,npar_cha);
269 par_cha[0] = fCwidth[iplan-1]/2. - kCathick;
270 par_cha[1] = fClengthM2[iplan-1]/2. - kCathick;
271 par_cha[2] = kCaframe/2.;
273 ypos = fClengthM2[iplan-1]/2. - kSlenTR2/2.;
274 zpos = kCheight - kCaframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
275 gMC->Gsposp("UAIM",iplan+2*kNplan,"TRD2",xpos, ypos,zpos,0,"ONLY",par_cha,npar_cha);
278 par_cha[0] = fCwidth[iplan-1]/2.;
279 par_cha[1] = fClengthM1[iplan-1]/2.;
280 par_cha[2] = kCcframe/2.;
282 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1]/2.;
283 zpos = kCcframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
284 gMC->Gsposp("UCFM",iplan ,"TRD1",xpos, ypos,zpos,0,"MANY",par_cha,npar_cha);
285 gMC->Gsposp("UCFM",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"MANY",par_cha,npar_cha);
286 par_cha[0] = fCwidth[iplan-1]/2.;
287 par_cha[1] = fClengthM2[iplan-1]/2.;
288 par_cha[2] = kCcframe/2.;
290 ypos = fClengthM2[iplan-1]/2. - kSlenTR2/2.;
291 zpos = kCcframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
292 gMC->Gsposp("UCFM",iplan+2*kNplan,"TRD2",xpos, ypos,zpos,0,"MANY",par_cha,npar_cha);
294 // the inner part of the carbon frame
295 par_cha[0] = fCwidth[iplan-1]/2. - kCcthick;
296 par_cha[1] = fClengthM1[iplan-1]/2. - kCcthick;
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("UCIM",iplan ,"TRD1",xpos, ypos,zpos,0,"ONLY",par_cha,npar_cha);
302 gMC->Gsposp("UCIM",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"ONLY",par_cha,npar_cha);
303 par_cha[0] = fCwidth[iplan-1]/2. - kCcthick;
304 par_cha[1] = fClengthM2[iplan-1]/2. - kCcthick;
305 par_cha[2] = kCcframe/2.;
307 ypos = fClengthM2[iplan-1]/2. - kSlenTR2/2.;
308 zpos = kCcframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
309 gMC->Gsposp("UCIM",iplan+2*kNplan,"TRD2",xpos, ypos,zpos,0,"ONLY",par_cha,npar_cha);
311 // The outer chambers ---------------------------------------------------------------
313 // the aluminum frame
314 par_cha[0] = fCwidth[iplan-1]/2.;
315 par_cha[1] = fClengthO1[iplan-1]/2.;
316 par_cha[2] = kCaframe/2.;
318 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO1[iplan-1]/2.;
319 zpos = kCheight - kCaframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
320 gMC->Gsposp("UAFO",iplan ,"TRD1",xpos, ypos,zpos,0,"MANY",par_cha,npar_cha);
321 gMC->Gsposp("UAFO",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"MANY",par_cha,npar_cha);
322 par_cha[0] = fCwidth[iplan-1]/2.;
323 par_cha[1] = fClengthO2[iplan-1]/2.;
324 par_cha[2] = kCaframe/2.;
326 ypos = fClengthM2[iplan-1] + fClengthO2[iplan-1]/2. - kSlenTR2/2.;
327 zpos = kCheight - kCaframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
328 gMC->Gsposp("UAFO",iplan+2*kNplan,"TRD2",xpos, ypos,zpos,0,"MANY",par_cha,npar_cha);
329 par_cha[0] = fCwidth[iplan-1]/2.;
330 par_cha[1] = fClengthO3[iplan-1]/2.;
331 par_cha[2] = kCaframe/2.;
333 ypos = fClengthO3[iplan-1]/2. - kSlenTR3/2.;
334 zpos = kCheight - kCaframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
335 gMC->Gsposp("UAFO",iplan+4*kNplan,"TRD3",xpos, ypos,zpos,0,"MANY",par_cha,npar_cha);
337 // the inner part of the aluminum frame
338 par_cha[0] = fCwidth[iplan-1]/2. - kCathick;
339 par_cha[1] = fClengthO1[iplan-1]/2. - kCathick;
340 par_cha[2] = kCaframe/2.;
342 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO1[iplan-1]/2.;
343 zpos = kCheight - kCaframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
344 gMC->Gsposp("UAIO",iplan ,"TRD1",xpos, ypos,zpos,0,"ONLY",par_cha,npar_cha);
345 gMC->Gsposp("UAIO",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"ONLY",par_cha,npar_cha);
346 par_cha[0] = fCwidth[iplan-1]/2. - kCathick;
347 par_cha[1] = fClengthO2[iplan-1]/2. - kCathick;
348 par_cha[2] = kCaframe/2.;
350 ypos = fClengthM2[iplan-1] + fClengthO2[iplan-1]/2. - kSlenTR2/2.;
351 zpos = kCheight - kCaframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
352 gMC->Gsposp("UAIO",iplan+2*kNplan,"TRD2",xpos, ypos,zpos,0,"ONLY",par_cha,npar_cha);
353 par_cha[0] = fCwidth[iplan-1]/2. - kCathick;
354 par_cha[1] = fClengthO3[iplan-1]/2. - kCathick;
355 par_cha[2] = kCaframe/2.;
357 ypos = fClengthO3[iplan-1]/2. - kSlenTR3/2.;
358 zpos = kCheight - kCaframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
359 gMC->Gsposp("UAIO",iplan+4*kNplan,"TRD3",xpos, ypos,zpos,0,"ONLY",par_cha,npar_cha);
362 par_cha[0] = fCwidth[iplan-1]/2.;
363 par_cha[1] = fClengthO1[iplan-1]/2.;
364 par_cha[2] = kCcframe/2.;
366 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO1[iplan-1]/2.;
367 zpos = kCcframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
368 gMC->Gsposp("UCFO",iplan, "TRD1",xpos, ypos,zpos,0,"MANY",par_cha,npar_cha);
369 gMC->Gsposp("UCFO",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"MANY",par_cha,npar_cha);
370 par_cha[0] = fCwidth[iplan-1]/2.;
371 par_cha[1] = fClengthO2[iplan-1]/2.;
372 par_cha[2] = kCcframe/2.;
374 ypos = fClengthM2[iplan-1] + fClengthO2[iplan-1]/2. - kSlenTR2/2.;
375 zpos = kCcframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
376 gMC->Gsposp("UCFO",iplan+2*kNplan,"TRD2",xpos, ypos,zpos,0,"MANY",par_cha,npar_cha);
377 par_cha[0] = fCwidth[iplan-1]/2.;
378 par_cha[1] = fClengthO3[iplan-1]/2.;
379 par_cha[2] = kCcframe/2.;
381 ypos = fClengthO3[iplan-1]/2. - kSlenTR3/2.;
382 zpos = kCcframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
383 gMC->Gsposp("UCFO",iplan+4*kNplan,"TRD3",xpos, ypos,zpos,0,"MANY",par_cha,npar_cha);
385 // the inner part of the carbon frame
386 par_cha[0] = fCwidth[iplan-1]/2. - kCcthick;
387 par_cha[1] = fClengthO1[iplan-1]/2. - kCcthick;
388 par_cha[2] = kCcframe/2.;
390 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO1[iplan-1]/2.;
391 zpos = kCcframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
392 gMC->Gsposp("UCIO",iplan ,"TRD1",xpos, ypos,zpos,0,"ONLY",par_cha,npar_cha);
393 gMC->Gsposp("UCIO",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"ONLY",par_cha,npar_cha);
394 par_cha[0] = fCwidth[iplan-1]/2. - kCcthick;
395 par_cha[1] = fClengthO2[iplan-1]/2. - kCcthick;
396 par_cha[2] = kCcframe/2.;
398 ypos = fClengthM2[iplan-1] + fClengthO2[iplan-1]/2. - kSlenTR2/2.;
399 zpos = kCcframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
400 gMC->Gsposp("UCIO",iplan+2*kNplan,"TRD2",xpos, ypos,zpos,0,"ONLY",par_cha,npar_cha);
401 par_cha[0] = fCwidth[iplan-1]/2. - kCcthick;
402 par_cha[1] = fClengthO3[iplan-1]/2. - kCcthick;
403 par_cha[2] = kCcframe/2.;
405 ypos = fClengthO3[iplan-1]/2. - kSlenTR3/2.;
406 zpos = kCcframe/2. - kSheight/2. + (iplan-1) * (kCheight + kCspace);
407 gMC->Gsposp("UCIO",iplan+4*kNplan,"TRD3",xpos, ypos,zpos,0,"ONLY",par_cha,npar_cha);
414 gMC->Gspos("TRD1",1,"BTR1",xpos,ypos,zpos,0,"ONLY");
415 gMC->Gspos("TRD2",1,"BTR2",xpos,ypos,zpos,0,"ONLY");
416 gMC->Gspos("TRD3",1,"BTR3",xpos,ypos,zpos,0,"ONLY");