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.9 2002/11/21 22:38:47 alibrary
19 Removing AliMC and AliMCProcess
21 Revision 1.8 2002/10/31 17:45:35 cblume
24 Revision 1.7 2002/02/11 14:21:16 cblume
25 Update of the geometry. Get rid of MANY
27 Revision 1.6 2001/05/11 07:56:12 hristov
28 Consistent declarations needed on Alpha
30 Revision 1.5 2001/02/14 18:22:26 cblume
31 Change in the geometry of the padplane
33 Revision 1.4 2000/11/01 14:53:21 cblume
34 Merge with TRD-develop
36 Revision 1.1.4.4 2000/10/15 23:40:01 cblume
39 Revision 1.1.4.3 2000/10/06 16:49:46 cblume
42 Revision 1.1.4.2 2000/10/04 16:34:58 cblume
43 Replace include files by forward declarations
45 Revision 1.1.4.1 2000/09/22 14:43:41 cblume
46 Allow the pad/timebin-dimensions to be changed after initialization
48 Revision 1.3 2000/10/02 21:28:19 fca
49 Removal of useless dependecies via forward declarations
51 Revision 1.2 2000/06/08 18:32:58 cblume
52 Make code compliant to coding conventions
54 Revision 1.1 2000/02/28 19:01:42 cblume
59 ///////////////////////////////////////////////////////////////////////////////
61 // TRD geometry with holes //
63 ///////////////////////////////////////////////////////////////////////////////
65 #include "TVirtualMC.h"
67 #include "AliTRDgeometryHole.h"
69 ClassImp(AliTRDgeometryHole)
71 //_____________________________________________________________________________
72 AliTRDgeometryHole::AliTRDgeometryHole():AliTRDgeometry()
75 // AliTRDgeometryHole default constructor
82 //_____________________________________________________________________________
83 AliTRDgeometryHole::~AliTRDgeometryHole()
86 // AliTRDgeometryHole destructor
91 //_____________________________________________________________________________
92 void AliTRDgeometryHole::Init()
95 // Initializes the geometry parameter
101 // The outer lengths of the chambers for the sectors with holes for the PHOS
102 Float_t lengthPH[kNplan][kNcham] = { { 0.0, 0.0, 0.0, 117.0, 124.0 }
103 , { 0.0, 0.0, 0.0, 124.0, 131.0 }
104 , { 0.0, 0.0, 0.0, 131.0, 138.0 }
105 , { 0.0, 0.0, 0.0, 138.0, 145.0 }
106 , { 0.0, 0.0, 0.0, 140.0, 147.0 }
107 , { 0.0, 0.0, 0.0, 140.0, 147.0 } };
109 // The outer lengths of the chambers for the sectors with holes for the RICH
110 Float_t lengthRH[kNplan][kNcham] = { { 0.0, 0.0, 0.0, 0.0, 87.5 }
111 , { 0.0, 0.0, 0.0, 0.0, 101.5 }
112 , { 0.0, 0.0, 0.0, 0.0, 115.5 }
113 , { 0.0, 0.0, 0.0, 0.0, 129.5 }
114 , { 0.0, 0.0, 0.0, 0.0, 133.5 }
115 , { 0.0, 0.0, 0.0, 0.0, 133.5 } };
117 for (icham = 0; icham < kNcham; icham++) {
118 for (iplan = 0; iplan < kNplan; iplan++) {
119 fClengthPH[iplan][icham] = lengthPH[iplan][icham];
120 fClengthRH[iplan][icham] = lengthRH[iplan][icham];
126 //_____________________________________________________________________________
127 void AliTRDgeometryHole::CreateGeometry(Int_t *idtmed)
130 // Create the TRD geometry with holes
132 // Names of the TRD volumina (xx = detector number):
134 // Lower part of the readout chambers (gas volume + radiator)
136 // UAxx Aluminum frames (Al)
137 // UBxx G10 frames (C)
138 // UCxx Inner volumes (Air)
140 // Upper part of the readout chambers (readout plane + fee)
142 // UDxx G10 frames (C)
143 // UExx Inner volumes of the G10 (Air)
144 // UFxx Aluminum frames (Al)
145 // UGxx Inner volumes of the Al (Air)
147 // Inner material layers
149 // UHxx Radiator (Rohacell)
150 // UIxx Entrance window (Mylar)
151 // UJxx Drift volume (Xe/CO2)
152 // UKxx Amplification volume (Xe/CO2)
153 // ULxx Pad plane (Cu)
154 // UMxx Support structure (Rohacell)
155 // UNxx FEE + signal lines (Cu)
156 // UOxx Cooling device (Al)
157 // UPxx Cooling device (Water)
160 const Int_t kNdet = kNplan * kNcham;
162 const Int_t kNparTrd = 4;
163 const Int_t kNparCha = 3;
165 Float_t xpos, ypos, zpos;
167 Float_t parTrd[kNparTrd];
168 Float_t parCha[kNparCha];
173 AliTRDgeometry::CreateGeometry(idtmed);
175 // The TRD mother volume for one sector (Air), full length in z-direction
176 parTrd[0] = fgkSwidth1/2.;
177 parTrd[1] = fgkSwidth2/2.;
178 parTrd[2] = fgkSlenTR1/2.;
179 parTrd[3] = fgkSheight/2.;
180 gMC->Gsvolu("UTR1","TRD1",idtmed[1302-1],parTrd,kNparTrd);
182 // The TRD mother volume for one sector (Air), leaving hole for PHOS
183 parTrd[0] = fgkSwidth1/2.;
184 parTrd[1] = fgkSwidth2/2.;
185 parTrd[2] = fgkSlenTR2/2.;
186 parTrd[3] = fgkSheight/2.;
187 gMC->Gsvolu("UTR2","TRD1",idtmed[1302-1],parTrd,kNparTrd);
189 // The TRD mother volume for one sector (Air), leaving hole for RICH
190 parTrd[0] = fgkSwidth1/2.;
191 parTrd[1] = fgkSwidth2/2.;
192 parTrd[2] = fgkSlenTR3/2.;
193 parTrd[3] = fgkSheight/2.;
194 gMC->Gsvolu("UTR3","TRD1",idtmed[1302-1],parTrd,kNparTrd);
196 for (Int_t icham = 0; icham < kNcham; icham++) {
197 for (Int_t iplan = 0; iplan < kNplan; iplan++) {
199 Int_t iDet = GetDetectorSec(iplan,icham);
201 // The lower part of the readout chambers (gas volume + radiator)
202 // The aluminum frames
203 sprintf(cTagV,"UA%02d",iDet);
204 parCha[0] = fCwidth[iplan]/2.;
205 parCha[1] = fClength[iplan][icham]/2. - fgkHspace/2.;
206 parCha[2] = fgkCraH/2. + fgkCdrH/2.;
207 gMC->Gsvolu(cTagV,"BOX ",idtmed[1301-1],parCha,kNparCha);
209 sprintf(cTagV,"UB%02d",iDet);
210 parCha[0] = fCwidth[iplan]/2. - fgkCalT;
213 gMC->Gsvolu(cTagV,"BOX ",idtmed[1307-1],parCha,kNparCha);
214 // The inner part (air)
215 sprintf(cTagV,"UC%02d",iDet);
216 parCha[0] = fCwidth[iplan]/2. - fgkCalT - fgkCclsT;
217 parCha[1] = fClength[iplan][icham]/2. - fgkHspace/2.- fgkCclfT;
219 gMC->Gsvolu(cTagV,"BOX ",idtmed[1302-1],parCha,kNparCha);
220 if (fClengthPH[iplan][icham] > 0.0) {
221 // The aluminum frames
222 sprintf(cTagV,"UA%02d",iDet+kNdet);
223 parCha[0] = fCwidth[iplan]/2.;
224 parCha[1] = fClengthPH[iplan][icham]/2. - fgkHspace/2.;
225 parCha[2] = fgkCraH/2. + fgkCdrH/2.;
226 gMC->Gsvolu(cTagV,"BOX ",idtmed[1301-1],parCha,kNparCha);
228 sprintf(cTagV,"UB%02d",iDet+kNdet);
229 parCha[0] = fCwidth[iplan]/2. - fgkCalT;
232 gMC->Gsvolu(cTagV,"BOX ",idtmed[1307-1],parCha,kNparCha);
233 // The inner part (air)
234 sprintf(cTagV,"UC%02d",iDet+kNdet);
235 parCha[0] = fCwidth[iplan]/2. - fgkCalT - fgkCclsT;
236 parCha[1] = fClengthPH[iplan][icham]/2. - fgkHspace/2.- fgkCclfT;
238 gMC->Gsvolu(cTagV,"BOX ",idtmed[1302-1],parCha,kNparCha);
240 if (fClengthRH[iplan][icham] > 0.0) {
241 // The aluminum frames
242 sprintf(cTagV,"UA%02d",iDet+2*kNdet);
243 parCha[0] = fCwidth[iplan]/2.;
244 parCha[1] = fClengthRH[iplan][icham]/2. - fgkHspace/2.;
245 parCha[2] = fgkCraH/2. + fgkCdrH/2.;
246 gMC->Gsvolu(cTagV,"BOX ",idtmed[1301-1],parCha,kNparCha);
248 sprintf(cTagV,"UB%02d",iDet+2*kNdet);
249 parCha[0] = fCwidth[iplan]/2. - fgkCalT;
252 gMC->Gsvolu(cTagV,"BOX ",idtmed[1307-1],parCha,kNparCha);
253 // The inner part (air)
254 sprintf(cTagV,"UC%02d",iDet+2*kNdet);
255 parCha[0] = fCwidth[iplan]/2. - fgkCalT - fgkCclsT;
256 parCha[1] = fClengthRH[iplan][icham]/2. - fgkHspace/2.- fgkCclfT;
258 gMC->Gsvolu(cTagV,"BOX ",idtmed[1302-1],parCha,kNparCha);
261 // The upper part of the readout chambers (readout plane + fee)
263 sprintf(cTagV,"UD%02d",iDet);
264 parCha[0] = fCwidth[iplan]/2. + fgkCroW;
265 parCha[1] = fClength[iplan][icham]/2. - fgkHspace/2.;
266 parCha[2] = fgkCamH/2.;
267 gMC->Gsvolu(cTagV,"BOX ",idtmed[1307-1],parCha,kNparCha);
268 // The inner part of the G10 frame (air)
269 sprintf(cTagV,"UE%02d",iDet);
270 parCha[0] = fCwidth[iplan]/2. + fgkCroW - fgkCcuT;
271 parCha[1] = fClength[iplan][icham]/2. - fgkHspace/2.- fgkCcuT;
273 gMC->Gsvolu(cTagV,"BOX ",idtmed[1302-1],parCha,kNparCha);
274 // The aluminum frames
275 sprintf(cTagV,"UF%02d",iDet);
276 parCha[0] = fCwidth[iplan]/2. + fgkCroW;
277 parCha[1] = fClength[iplan][icham]/2. - fgkHspace/2.;
278 parCha[2] = fgkCroH/2.;
279 gMC->Gsvolu(cTagV,"BOX ",idtmed[1301-1],parCha,kNparCha);
280 // The inner part of the aluminum frames
281 sprintf(cTagV,"UG%02d",iDet);
282 parCha[0] = fCwidth[iplan]/2. + fgkCroW - fgkCauT;
283 parCha[1] = fClength[iplan][icham]/2. - fgkHspace/2.- fgkCauT;
285 gMC->Gsvolu(cTagV,"BOX ",idtmed[1302-1],parCha,kNparCha);
286 if (fClengthPH[iplan][icham] > 0.0) {
287 sprintf(cTagV,"UD%02d",iDet+kNdet);
288 parCha[0] = fCwidth[iplan]/2. + fgkCroW;
289 parCha[1] = fClengthPH[iplan][icham]/2. - fgkHspace/2.;
290 parCha[2] = fgkCamH/2.;
291 gMC->Gsvolu(cTagV,"BOX ",idtmed[1307-1],parCha,kNparCha);
292 // The inner part of the G10 frame (air)
293 sprintf(cTagV,"UE%02d",iDet+kNdet);
294 parCha[0] = fCwidth[iplan]/2. + fgkCroW - fgkCcuT;
295 parCha[1] = fClengthPH[iplan][icham]/2. - fgkHspace/2.- fgkCcuT;
297 gMC->Gsvolu(cTagV,"BOX ",idtmed[1302-1],parCha,kNparCha);
298 // The aluminum frames
299 sprintf(cTagV,"UF%02d",iDet+kNdet);
300 parCha[0] = fCwidth[iplan]/2. + fgkCroW;
301 parCha[1] = fClengthPH[iplan][icham]/2. - fgkHspace/2.;
302 parCha[2] = fgkCroH/2.;
303 gMC->Gsvolu(cTagV,"BOX ",idtmed[1301-1],parCha,kNparCha);
304 // The inner part of the aluminum frames
305 sprintf(cTagV,"UG%02d",iDet+kNdet);
306 parCha[0] = fCwidth[iplan]/2. + fgkCroW - fgkCauT;
307 parCha[1] = fClengthPH[iplan][icham]/2. - fgkHspace/2.- fgkCauT;
309 gMC->Gsvolu(cTagV,"BOX ",idtmed[1302-1],parCha,kNparCha);
311 if (fClengthRH[iplan][icham] > 0.0) {
312 sprintf(cTagV,"UD%02d",iDet+2*kNdet);
313 parCha[0] = fCwidth[iplan]/2. + fgkCroW;
314 parCha[1] = fClengthRH[iplan][icham]/2. - fgkHspace/2.;
315 parCha[2] = fgkCamH/2.;
316 gMC->Gsvolu(cTagV,"BOX ",idtmed[1307-1],parCha,kNparCha);
317 // The inner part of the G10 frame (air)
318 sprintf(cTagV,"UE%02d",iDet+2*kNdet);
319 parCha[0] = fCwidth[iplan]/2. + fgkCroW - fgkCcuT;
320 parCha[1] = fClengthRH[iplan][icham]/2. - fgkHspace/2.- fgkCcuT;
322 gMC->Gsvolu(cTagV,"BOX ",idtmed[1302-1],parCha,kNparCha);
323 // The aluminum frames
324 sprintf(cTagV,"UF%02d",iDet+2*kNdet);
325 parCha[0] = fCwidth[iplan]/2. + fgkCroW;
326 parCha[1] = fClengthRH[iplan][icham]/2. - fgkHspace/2.;
327 parCha[2] = fgkCroH/2.;
328 gMC->Gsvolu(cTagV,"BOX ",idtmed[1301-1],parCha,kNparCha);
329 // The inner part of the aluminum frames
330 sprintf(cTagV,"UG%02d",iDet+2*kNdet);
331 parCha[0] = fCwidth[iplan]/2. + fgkCroW - fgkCauT;
332 parCha[1] = fClengthRH[iplan][icham]/2. - fgkHspace/2.- fgkCauT;
334 gMC->Gsvolu(cTagV,"BOX ",idtmed[1302-1],parCha,kNparCha);
337 // The material layers inside the chambers
340 // Rohacell layer (radiator)
341 parCha[2] = fgkRaThick/2;
342 sprintf(cTagV,"UH%02d",iDet);
343 gMC->Gsvolu(cTagV,"BOX ",idtmed[1315-1],parCha,kNparCha);
344 // Mylar layer (entrance window + HV cathode)
345 parCha[2] = fgkMyThick/2;
346 sprintf(cTagV,"UI%02d",iDet);
347 gMC->Gsvolu(cTagV,"BOX ",idtmed[1308-1],parCha,kNparCha);
348 // Xe/Isobutane layer (drift volume)
349 parCha[2] = fgkDrThick/2.;
350 sprintf(cTagV,"UJ%02d",iDet);
351 gMC->Gsvolu(cTagV,"BOX ",idtmed[1309-1],parCha,kNparCha);
352 // Xe/Isobutane layer (amplification volume)
353 parCha[2] = fgkAmThick/2.;
354 sprintf(cTagV,"UK%02d",iDet);
355 gMC->Gsvolu(cTagV,"BOX ",idtmed[1309-1],parCha,kNparCha);
356 // Cu layer (pad plane)
357 parCha[2] = fgkCuThick/2;
358 sprintf(cTagV,"UL%02d",iDet);
359 gMC->Gsvolu(cTagV,"BOX ",idtmed[1305-1],parCha,kNparCha);
360 // G10 layer (support structure / honeycomb)
361 parCha[2] = fgkSuThick/2;
362 sprintf(cTagV,"UM%02d",iDet);
363 gMC->Gsvolu(cTagV,"BOX ",idtmed[1313-1],parCha,kNparCha);
364 // Cu layer (FEE + signal lines)
365 parCha[2] = fgkFeThick/2;
366 sprintf(cTagV,"UN%02d",iDet);
367 gMC->Gsvolu(cTagV,"BOX ",idtmed[1305-1],parCha,kNparCha);
368 // Al layer (cooling devices)
369 parCha[2] = fgkCoThick/2;
370 sprintf(cTagV,"UO%02d",iDet);
371 gMC->Gsvolu(cTagV,"BOX ",idtmed[1301-1],parCha,kNparCha);
372 // Water layer (cooling)
373 parCha[2] = fgkWaThick/2;
374 sprintf(cTagV,"UP%02d",iDet);
375 gMC->Gsvolu(cTagV,"BOX ",idtmed[1314-1],parCha,kNparCha);
376 if (fClengthPH[iplan][icham] > 0.0) {
377 // Rohacell layer (radiator)
378 parCha[2] = fgkRaThick/2;
379 sprintf(cTagV,"UH%02d",iDet+kNdet);
380 gMC->Gsvolu(cTagV,"BOX ",idtmed[1315-1],parCha,kNparCha);
381 // Mylar layer (entrance window + HV cathode)
382 parCha[2] = fgkMyThick/2;
383 sprintf(cTagV,"UI%02d",iDet+kNdet);
384 gMC->Gsvolu(cTagV,"BOX ",idtmed[1308-1],parCha,kNparCha);
385 // Xe/Isobutane layer (drift volume)
386 parCha[2] = fgkDrThick/2.;
387 sprintf(cTagV,"UJ%02d",iDet+kNdet);
388 gMC->Gsvolu(cTagV,"BOX ",idtmed[1309-1],parCha,kNparCha);
389 // Xe/Isobutane layer (amplification volume)
390 parCha[2] = fgkAmThick/2.;
391 sprintf(cTagV,"UK%02d",iDet+kNdet);
392 gMC->Gsvolu(cTagV,"BOX ",idtmed[1309-1],parCha,kNparCha);
393 // Cu layer (pad plane)
394 parCha[2] = fgkCuThick/2;
395 sprintf(cTagV,"UL%02d",iDet+kNdet);
396 gMC->Gsvolu(cTagV,"BOX ",idtmed[1305-1],parCha,kNparCha);
397 // G10 layer (support structure / honeycomb)
398 parCha[2] = fgkSuThick/2;
399 sprintf(cTagV,"UM%02d",iDet+kNdet);
400 gMC->Gsvolu(cTagV,"BOX ",idtmed[1313-1],parCha,kNparCha);
401 // Cu layer (FEE + signal lines)
402 parCha[2] = fgkFeThick/2;
403 sprintf(cTagV,"UN%02d",iDet+kNdet);
404 gMC->Gsvolu(cTagV,"BOX ",idtmed[1305-1],parCha,kNparCha);
405 // Al layer (cooling devices)
406 parCha[2] = fgkCoThick/2;
407 sprintf(cTagV,"UO%02d",iDet+kNdet);
408 gMC->Gsvolu(cTagV,"BOX ",idtmed[1301-1],parCha,kNparCha);
409 // Water layer (cooling)
410 parCha[2] = fgkWaThick/2;
411 sprintf(cTagV,"UP%02d",iDet+kNdet);
412 gMC->Gsvolu(cTagV,"BOX ",idtmed[1314-1],parCha,kNparCha);
414 if (fClengthRH[iplan][icham] > 0.0) {
415 // Rohacell layer (radiator)
416 parCha[2] = fgkRaThick/2;
417 sprintf(cTagV,"UH%02d",iDet+2*kNdet);
418 gMC->Gsvolu(cTagV,"BOX ",idtmed[1315-1],parCha,kNparCha);
419 // Mylar layer (entrance window + HV cathode)
420 parCha[2] = fgkMyThick/2;
421 sprintf(cTagV,"UI%02d",iDet+2*kNdet);
422 gMC->Gsvolu(cTagV,"BOX ",idtmed[1308-1],parCha,kNparCha);
423 // Xe/Isobutane layer (drift volume)
424 parCha[2] = fgkDrThick/2.;
425 sprintf(cTagV,"UJ%02d",iDet+2*kNdet);
426 gMC->Gsvolu(cTagV,"BOX ",idtmed[1309-1],parCha,kNparCha);
427 // Xe/Isobutane layer (amplification volume)
428 parCha[2] = fgkAmThick/2.;
429 sprintf(cTagV,"UK%02d",iDet+2*kNdet);
430 gMC->Gsvolu(cTagV,"BOX ",idtmed[1309-1],parCha,kNparCha);
431 // Cu layer (pad plane)
432 parCha[2] = fgkCuThick/2;
433 sprintf(cTagV,"UL%02d",iDet+2*kNdet);
434 gMC->Gsvolu(cTagV,"BOX ",idtmed[1305-1],parCha,kNparCha);
435 // G10 layer (support structure / honeycomb)
436 parCha[2] = fgkSuThick/2;
437 sprintf(cTagV,"UM%02d",iDet+2*kNdet);
438 gMC->Gsvolu(cTagV,"BOX ",idtmed[1313-1],parCha,kNparCha);
439 // Cu layer (FEE + signal lines)
440 parCha[2] = fgkFeThick/2;
441 sprintf(cTagV,"UN%02d",iDet+2*kNdet);
442 gMC->Gsvolu(cTagV,"BOX ",idtmed[1305-1],parCha,kNparCha);
443 // Al layer (cooling devices)
444 parCha[2] = fgkCoThick/2.;
445 sprintf(cTagV,"UO%02d",iDet+2*kNdet);
446 gMC->Gsvolu(cTagV,"BOX ",idtmed[1301-1],parCha,kNparCha);
447 // Water layer (cooling)
448 parCha[2] = fgkWaThick/2;
449 sprintf(cTagV,"UP%02d",iDet+2*kNdet);
450 gMC->Gsvolu(cTagV,"BOX ",idtmed[1314-1],parCha,kNparCha);
453 // Position the layers in the chambers
457 // Rohacell layer (radiator)
459 sprintf(cTagV,"UH%02d",iDet);
460 sprintf(cTagM,"UC%02d",iDet);
461 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
462 // Mylar layer (entrance window + HV cathode)
464 sprintf(cTagV,"UI%02d",iDet);
465 sprintf(cTagM,"UC%02d",iDet);
466 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
467 // Xe/Isobutane layer (drift volume)
469 sprintf(cTagV,"UJ%02d",iDet);
470 sprintf(cTagM,"UC%02d",iDet);
471 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
473 // Xe/Isobutane layer (amplification volume)
475 sprintf(cTagV,"UK%02d",iDet);
476 sprintf(cTagM,"UE%02d",iDet);
477 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
479 // Cu layer (pad plane)
481 sprintf(cTagV,"UL%02d",iDet);
482 sprintf(cTagM,"UG%02d",iDet);
483 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
484 // G10 layer (support structure)
486 sprintf(cTagV,"UM%02d",iDet);
487 sprintf(cTagM,"UG%02d",iDet);
488 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
489 // Cu layer (FEE + signal lines)
491 sprintf(cTagV,"UN%02d",iDet);
492 sprintf(cTagM,"UG%02d",iDet);
493 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
494 // Al layer (cooling devices)
496 sprintf(cTagV,"UO%02d",iDet);
497 sprintf(cTagM,"UG%02d",iDet);
498 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
499 // Water layer (cooling)
501 sprintf(cTagV,"UP%02d",iDet);
502 sprintf(cTagM,"UG%02d",iDet);
503 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
504 if (fClengthPH[iplan][icham] > 0.0) {
506 // Rohacell layer (radiator)
508 sprintf(cTagV,"UH%02d",iDet+kNdet);
509 sprintf(cTagM,"UC%02d",iDet+kNdet);
510 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
511 // Mylar layer (entrance window + HV cathode)
513 sprintf(cTagV,"UI%02d",iDet+kNdet);
514 sprintf(cTagM,"UC%02d",iDet+kNdet);
515 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
516 // Xe/Isobutane layer (drift volume)
518 sprintf(cTagV,"UJ%02d",iDet+kNdet);
519 sprintf(cTagM,"UC%02d",iDet+kNdet);
520 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
522 // Xe/Isobutane layer (amplification volume)
524 sprintf(cTagV,"UK%02d",iDet+kNdet);
525 sprintf(cTagM,"UE%02d",iDet+kNdet);
526 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
528 // Cu layer (pad plane)
530 sprintf(cTagV,"UL%02d",iDet+kNdet);
531 sprintf(cTagM,"UG%02d",iDet+kNdet);
532 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
533 // G10 layer (support structure)
535 sprintf(cTagV,"UM%02d",iDet+kNdet);
536 sprintf(cTagM,"UG%02d",iDet+kNdet);
537 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
538 // Cu layer (FEE + signal lines)
540 sprintf(cTagV,"UN%02d",iDet+kNdet);
541 sprintf(cTagM,"UG%02d",iDet+kNdet);
542 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
543 // Al layer (cooling devices)
545 sprintf(cTagV,"UO%02d",iDet+kNdet);
546 sprintf(cTagM,"UG%02d",iDet+kNdet);
547 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
548 // Water layer (cooling)
550 sprintf(cTagV,"UP%02d",iDet+kNdet);
551 sprintf(cTagM,"UG%02d",iDet+kNdet);
552 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
554 if (fClengthRH[iplan][icham] > 0.0) {
556 // Rohacell layer (radiator)
558 sprintf(cTagV,"UH%02d",iDet+2*kNdet);
559 sprintf(cTagM,"UC%02d",iDet+2*kNdet);
560 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
561 // Mylar layer (entrance window + HV cathode)
563 sprintf(cTagV,"UI%02d",iDet+2*kNdet);
564 sprintf(cTagM,"UC%02d",iDet+2*kNdet);
565 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
566 // Xe/Isobutane layer (drift volume)
568 sprintf(cTagV,"UJ%02d",iDet+2*kNdet);
569 sprintf(cTagM,"UC%02d",iDet+2*kNdet);
570 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
572 // Xe/Isobutane layer (amplification volume)
574 sprintf(cTagV,"UK%02d",iDet+2*kNdet);
575 sprintf(cTagM,"UE%02d",iDet+2*kNdet);
576 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
578 // Cu layer (pad plane)
580 sprintf(cTagV,"UL%02d",iDet+2*kNdet);
581 sprintf(cTagM,"UG%02d",iDet+2*kNdet);
582 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
583 // G10 layer (support structure)
585 sprintf(cTagV,"UM%02d",iDet+2*kNdet);
586 sprintf(cTagM,"UG%02d",iDet+2*kNdet);
587 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
588 // Cu layer (FEE + signal lines)
590 sprintf(cTagV,"UN%02d",iDet+2*kNdet);
591 sprintf(cTagM,"UG%02d",iDet+2*kNdet);
592 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
593 // Al layer (cooling devices)
595 sprintf(cTagV,"UO%02d",iDet+2*kNdet);
596 sprintf(cTagM,"UG%02d",iDet+2*kNdet);
597 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
598 // Water layer (cooling)
600 sprintf(cTagV,"UP%02d",iDet+2*kNdet);
601 sprintf(cTagM,"UG%02d",iDet+2*kNdet);
602 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
605 // Position the inner volumes of the chambers in the frames
609 // The inside of the lower G10 frame
610 sprintf(cTagV,"UC%02d",iDet);
611 sprintf(cTagM,"UB%02d",iDet);
612 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
613 // The lower G10 frame inside the aluminum frame
614 sprintf(cTagV,"UB%02d",iDet);
615 sprintf(cTagM,"UA%02d",iDet);
616 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
617 // The inside of the upper G10 frame
618 sprintf(cTagV,"UE%02d",iDet);
619 sprintf(cTagM,"UD%02d",iDet);
620 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
621 // The inside of the upper aluminum frame
622 sprintf(cTagV,"UG%02d",iDet);
623 sprintf(cTagM,"UF%02d",iDet);
624 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
625 if (fClengthPH[iplan][icham] > 0.0) {
626 // The inside of the lower G10 frame
627 sprintf(cTagV,"UC%02d",iDet+kNdet);
628 sprintf(cTagM,"UB%02d",iDet+kNdet);
629 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
630 // The lower G10 frame inside the aluminum frame
631 sprintf(cTagV,"UB%02d",iDet+kNdet);
632 sprintf(cTagM,"UA%02d",iDet+kNdet);
633 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
634 // The inside of the upper G10 frame
635 sprintf(cTagV,"UE%02d",iDet+kNdet);
636 sprintf(cTagM,"UD%02d",iDet+kNdet);
637 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
638 // The inside of the upper aluminum frame
639 sprintf(cTagV,"UG%02d",iDet+kNdet);
640 sprintf(cTagM,"UF%02d",iDet+kNdet);
641 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
643 if (fClengthRH[iplan][icham] > 0.0) {
644 // The inside of the lower G10 frame
645 sprintf(cTagV,"UC%02d",iDet+2*kNdet);
646 sprintf(cTagM,"UB%02d",iDet+2*kNdet);
647 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
648 // The lower G10 frame inside the aluminum frame
649 sprintf(cTagV,"UB%02d",iDet+2*kNdet);
650 sprintf(cTagM,"UA%02d",iDet+2*kNdet);
651 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
652 // The inside of the upper G10 frame
653 sprintf(cTagV,"UE%02d",iDet+2*kNdet);
654 sprintf(cTagM,"UD%02d",iDet+2*kNdet);
655 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
656 // The inside of the upper aluminum frame
657 sprintf(cTagV,"UG%02d",iDet+2*kNdet);
658 sprintf(cTagM,"UF%02d",iDet+2*kNdet);
659 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
662 // Position the frames of the chambers in the TRD mother volume
664 ypos = - fClength[iplan][0] - fClength[iplan][1] - fClength[iplan][2]/2.;
665 for (Int_t ic = 0; ic < icham; ic++) {
666 ypos += fClength[iplan][ic];
668 ypos += fClength[iplan][icham]/2.;
669 zpos = fgkCraH/2. + fgkCdrH/2. - fgkSheight/2. + iplan * (fgkCH + fgkVspace);
670 // The lower aluminum frame, radiator + drift region
671 sprintf(cTagV,"UA%02d",iDet);
672 gMC->Gspos(cTagV,1,"UTR1",xpos,ypos,zpos,0,"ONLY");
673 // The upper G10 frame, amplification region
674 sprintf(cTagV,"UD%02d",iDet);
675 zpos += fgkCamH/2. + fgkCraH/2. + fgkCdrH/2.;
676 gMC->Gspos(cTagV,1,"UTR1",xpos,ypos,zpos,0,"ONLY");
677 // The upper aluminum frame
678 sprintf(cTagV,"UF%02d",iDet);
679 zpos += fgkCroH/2. + fgkCamH/2.;
680 gMC->Gspos(cTagV,1,"UTR1",xpos,ypos,zpos,0,"ONLY");
681 if (fClengthPH[iplan][icham] > 0.0) {
683 ypos = - fgkSlenTR2/2.;
684 for (Int_t ic = 0; ic < icham; ic++) {
685 ypos += fClengthPH[iplan][ic];
687 ypos += fClengthPH[iplan][icham]/2.;
688 zpos = fgkCraH/2. + fgkCdrH/2. - fgkSheight/2. + iplan * (fgkCH + fgkVspace);
689 // The lower aluminum frame, radiator + drift region
690 sprintf(cTagV,"UA%02d",iDet+kNdet);
691 gMC->Gspos(cTagV,1,"UTR2",xpos,ypos,zpos,0,"ONLY");
692 // The upper G10 frame, amplification region
693 sprintf(cTagV,"UD%02d",iDet+kNdet);
694 zpos += fgkCamH/2. + fgkCraH/2. + fgkCdrH/2.;
695 gMC->Gspos(cTagV,1,"UTR2",xpos,ypos,zpos,0,"ONLY");
696 // The upper aluminum frame
697 sprintf(cTagV,"UF%02d",iDet+kNdet);
698 zpos += fgkCroH/2. + fgkCamH/2.;
699 gMC->Gspos(cTagV,1,"UTR2",xpos,ypos,zpos,0,"ONLY");
701 if (fClengthRH[iplan][icham] > 0.0) {
703 ypos = - fgkSlenTR3/2.;
704 for (Int_t ic = 0; ic < icham; ic++) {
705 ypos += fClengthRH[iplan][ic];
707 ypos += fClengthRH[iplan][icham]/2.;
708 zpos = fgkCraH/2. + fgkCdrH/2. - fgkSheight/2. + iplan * (fgkCH + fgkVspace);
709 // The lower aluminum frame, radiator + drift region
710 sprintf(cTagV,"UA%02d",iDet+2*kNdet);
711 gMC->Gspos(cTagV,1,"UTR3",xpos,ypos,zpos,0,"ONLY");
712 // The upper G10 frame, amplification region
713 sprintf(cTagV,"UD%02d",iDet+2*kNdet);
714 zpos += fgkCamH/2. + fgkCraH/2. + fgkCdrH/2.;
715 gMC->Gspos(cTagV,1,"UTR3",xpos,ypos,zpos,0,"ONLY");
716 // The upper aluminum frame
717 sprintf(cTagV,"UF%02d",iDet+2*kNdet);
718 zpos += fgkCroH/2. + fgkCamH/2.;
719 gMC->Gspos(cTagV,1,"UTR3",xpos,ypos,zpos,0,"ONLY");
728 gMC->Gspos("UTR1",1,"BTR1",xpos,ypos,zpos,0,"ONLY");
729 gMC->Gspos("UTR2",2,"BTR2",xpos,ypos,zpos,0,"ONLY");
730 gMC->Gspos("UTR3",3,"BTR3",xpos,ypos,zpos,0,"ONLY");
734 //_____________________________________________________________________________
735 void AliTRDgeometryHole::SetOldGeometry()
738 // Use the old chamber lengths
744 AliTRDgeometry::SetOldGeometry();
746 // The outer lengths of the chambers for the sectors with holes for the PHOS
747 Float_t lengthPH[kNplan][kNcham] = { { 0.0, 0.0, 0.0, 116.5, 123.5 }
748 , { 0.0, 0.0, 0.0, 124.0, 131.0 }
749 , { 0.0, 0.0, 0.0, 131.5, 134.5 }
750 , { 0.0, 0.0, 0.0, 139.0, 142.0 }
751 , { 0.0, 0.0, 0.0, 146.0, 142.0 }
752 , { 0.0, 0.0, 0.0, 153.5, 134.5 } };
754 // The outer lengths of the chambers for the sectors with holes for the RICH
755 Float_t lengthRH[kNplan][kNcham] = { { 0.0, 0.0, 0.0, 0.0, 86.5 }
756 , { 0.0, 0.0, 0.0, 0.0, 101.5 }
757 , { 0.0, 0.0, 0.0, 0.0, 112.5 }
758 , { 0.0, 0.0, 0.0, 0.0, 127.5 }
759 , { 0.0, 0.0, 0.0, 0.0, 134.5 }
760 , { 0.0, 0.0, 0.0, 0.0, 134.5 } };
762 for (icham = 0; icham < kNcham; icham++) {
763 for (iplan = 0; iplan < kNplan; iplan++) {
764 fClengthPH[iplan][icham] = lengthPH[iplan][icham];
765 fClengthRH[iplan][icham] = lengthRH[iplan][icham];