]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TRD/AliTRDgeometryHole.cxx
Using TMath::Abs instead of fabs
[u/mrichter/AliRoot.git] / TRD / AliTRDgeometryHole.cxx
CommitLineData
f7336fa3 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
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 **************************************************************************/
15
88cb7938 16/* $Id$ */
f7336fa3 17
18///////////////////////////////////////////////////////////////////////////////
19// //
20// TRD geometry with holes //
21// //
22///////////////////////////////////////////////////////////////////////////////
23
88cb7938 24#include <TVirtualMC.h>
793ff80c 25#include "AliTRDgeometryHole.h"
26
f7336fa3 27ClassImp(AliTRDgeometryHole)
28
29//_____________________________________________________________________________
30AliTRDgeometryHole::AliTRDgeometryHole():AliTRDgeometry()
31{
32 //
33 // AliTRDgeometryHole default constructor
34 //
35
36 Init();
37
38}
39
40//_____________________________________________________________________________
41AliTRDgeometryHole::~AliTRDgeometryHole()
42{
8230f242 43 //
44 // AliTRDgeometryHole destructor
45 //
f7336fa3 46
47}
48
49//_____________________________________________________________________________
50void AliTRDgeometryHole::Init()
51{
52 //
53 // Initializes the geometry parameter
54 //
55
56 Int_t iplan;
0a770ac9 57 Int_t icham;
58
59 // The outer lengths of the chambers for the sectors with holes for the PHOS
8737e16f 60 Float_t lengthPH[kNplan][kNcham] = { { 0.0, 0.0, 0.0, 117.0, 124.0 }
0a770ac9 61 , { 0.0, 0.0, 0.0, 124.0, 131.0 }
8737e16f 62 , { 0.0, 0.0, 0.0, 131.0, 138.0 }
63 , { 0.0, 0.0, 0.0, 138.0, 145.0 }
64 , { 0.0, 0.0, 0.0, 140.0, 147.0 }
65 , { 0.0, 0.0, 0.0, 140.0, 147.0 } };
0a770ac9 66
67 // The outer lengths of the chambers for the sectors with holes for the RICH
8737e16f 68 Float_t lengthRH[kNplan][kNcham] = { { 0.0, 0.0, 0.0, 0.0, 87.5 }
0a770ac9 69 , { 0.0, 0.0, 0.0, 0.0, 101.5 }
8737e16f 70 , { 0.0, 0.0, 0.0, 0.0, 115.5 }
71 , { 0.0, 0.0, 0.0, 0.0, 129.5 }
72 , { 0.0, 0.0, 0.0, 0.0, 133.5 }
73 , { 0.0, 0.0, 0.0, 0.0, 133.5 } };
0a770ac9 74
75 for (icham = 0; icham < kNcham; icham++) {
76 for (iplan = 0; iplan < kNplan; iplan++) {
77 fClengthPH[iplan][icham] = lengthPH[iplan][icham];
78 fClengthRH[iplan][icham] = lengthRH[iplan][icham];
f7336fa3 79 }
f7336fa3 80 }
81
82}
83
84//_____________________________________________________________________________
0a770ac9 85void AliTRDgeometryHole::CreateGeometry(Int_t *idtmed)
71d9fa7b 86{
87 //
0a770ac9 88 // Create the TRD geometry with holes
71d9fa7b 89 //
0a770ac9 90 // Names of the TRD volumina (xx = detector number):
91 //
92 // Lower part of the readout chambers (gas volume + radiator)
93 //
94 // UAxx Aluminum frames (Al)
95 // UBxx G10 frames (C)
96 // UCxx Inner volumes (Air)
97 //
98 // Upper part of the readout chambers (readout plane + fee)
f7336fa3 99 //
0a770ac9 100 // UDxx G10 frames (C)
101 // UExx Inner volumes of the G10 (Air)
102 // UFxx Aluminum frames (Al)
103 // UGxx Inner volumes of the Al (Air)
104 //
105 // Inner material layers
106 //
107 // UHxx Radiator (Rohacell)
108 // UIxx Entrance window (Mylar)
109 // UJxx Drift volume (Xe/CO2)
110 // UKxx Amplification volume (Xe/CO2)
111 // ULxx Pad plane (Cu)
112 // UMxx Support structure (Rohacell)
113 // UNxx FEE + signal lines (Cu)
114 // UOxx Cooling device (Al)
115 // UPxx Cooling device (Water)
f7336fa3 116 //
117
0a770ac9 118 const Int_t kNdet = kNplan * kNcham;
f7336fa3 119
8230f242 120 const Int_t kNparTrd = 4;
121 const Int_t kNparCha = 3;
0a770ac9 122
123 Float_t xpos, ypos, zpos;
f7336fa3 124
8230f242 125 Float_t parTrd[kNparTrd];
126 Float_t parCha[kNparCha];
f7336fa3 127
0a770ac9 128 Char_t cTagV[5];
129 Char_t cTagM[5];
f7336fa3 130
131 AliTRDgeometry::CreateGeometry(idtmed);
132
0a770ac9 133 // The TRD mother volume for one sector (Air), full length in z-direction
793ff80c 134 parTrd[0] = fgkSwidth1/2.;
135 parTrd[1] = fgkSwidth2/2.;
136 parTrd[2] = fgkSlenTR1/2.;
137 parTrd[3] = fgkSheight/2.;
0a770ac9 138 gMC->Gsvolu("UTR1","TRD1",idtmed[1302-1],parTrd,kNparTrd);
139
140 // The TRD mother volume for one sector (Air), leaving hole for PHOS
793ff80c 141 parTrd[0] = fgkSwidth1/2.;
142 parTrd[1] = fgkSwidth2/2.;
143 parTrd[2] = fgkSlenTR2/2.;
144 parTrd[3] = fgkSheight/2.;
0a770ac9 145 gMC->Gsvolu("UTR2","TRD1",idtmed[1302-1],parTrd,kNparTrd);
f7336fa3 146
0a770ac9 147 // The TRD mother volume for one sector (Air), leaving hole for RICH
793ff80c 148 parTrd[0] = fgkSwidth1/2.;
149 parTrd[1] = fgkSwidth2/2.;
150 parTrd[2] = fgkSlenTR3/2.;
151 parTrd[3] = fgkSheight/2.;
0a770ac9 152 gMC->Gsvolu("UTR3","TRD1",idtmed[1302-1],parTrd,kNparTrd);
153
154 for (Int_t icham = 0; icham < kNcham; icham++) {
155 for (Int_t iplan = 0; iplan < kNplan; iplan++) {
156
157 Int_t iDet = GetDetectorSec(iplan,icham);
158
159 // The lower part of the readout chambers (gas volume + radiator)
160 // The aluminum frames
161 sprintf(cTagV,"UA%02d",iDet);
162 parCha[0] = fCwidth[iplan]/2.;
163 parCha[1] = fClength[iplan][icham]/2. - fgkHspace/2.;
164 parCha[2] = fgkCraH/2. + fgkCdrH/2.;
165 gMC->Gsvolu(cTagV,"BOX ",idtmed[1301-1],parCha,kNparCha);
166 // The G10 frames
167 sprintf(cTagV,"UB%02d",iDet);
168 parCha[0] = fCwidth[iplan]/2. - fgkCalT;
169 parCha[1] = -1.;
170 parCha[2] = -1.;
171 gMC->Gsvolu(cTagV,"BOX ",idtmed[1307-1],parCha,kNparCha);
172 // The inner part (air)
173 sprintf(cTagV,"UC%02d",iDet);
174 parCha[0] = fCwidth[iplan]/2. - fgkCalT - fgkCclsT;
175 parCha[1] = fClength[iplan][icham]/2. - fgkHspace/2.- fgkCclfT;
176 parCha[2] = -1.;
177 gMC->Gsvolu(cTagV,"BOX ",idtmed[1302-1],parCha,kNparCha);
178 if (fClengthPH[iplan][icham] > 0.0) {
179 // The aluminum frames
180 sprintf(cTagV,"UA%02d",iDet+kNdet);
181 parCha[0] = fCwidth[iplan]/2.;
182 parCha[1] = fClengthPH[iplan][icham]/2. - fgkHspace/2.;
183 parCha[2] = fgkCraH/2. + fgkCdrH/2.;
184 gMC->Gsvolu(cTagV,"BOX ",idtmed[1301-1],parCha,kNparCha);
185 // The G10 frames
186 sprintf(cTagV,"UB%02d",iDet+kNdet);
187 parCha[0] = fCwidth[iplan]/2. - fgkCalT;
188 parCha[1] = -1.;
189 parCha[2] = -1.;
190 gMC->Gsvolu(cTagV,"BOX ",idtmed[1307-1],parCha,kNparCha);
191 // The inner part (air)
192 sprintf(cTagV,"UC%02d",iDet+kNdet);
193 parCha[0] = fCwidth[iplan]/2. - fgkCalT - fgkCclsT;
194 parCha[1] = fClengthPH[iplan][icham]/2. - fgkHspace/2.- fgkCclfT;
195 parCha[2] = -1.;
196 gMC->Gsvolu(cTagV,"BOX ",idtmed[1302-1],parCha,kNparCha);
197 }
198 if (fClengthRH[iplan][icham] > 0.0) {
199 // The aluminum frames
200 sprintf(cTagV,"UA%02d",iDet+2*kNdet);
201 parCha[0] = fCwidth[iplan]/2.;
202 parCha[1] = fClengthRH[iplan][icham]/2. - fgkHspace/2.;
203 parCha[2] = fgkCraH/2. + fgkCdrH/2.;
204 gMC->Gsvolu(cTagV,"BOX ",idtmed[1301-1],parCha,kNparCha);
205 // The G10 frames
206 sprintf(cTagV,"UB%02d",iDet+2*kNdet);
207 parCha[0] = fCwidth[iplan]/2. - fgkCalT;
208 parCha[1] = -1.;
209 parCha[2] = -1.;
210 gMC->Gsvolu(cTagV,"BOX ",idtmed[1307-1],parCha,kNparCha);
211 // The inner part (air)
212 sprintf(cTagV,"UC%02d",iDet+2*kNdet);
213 parCha[0] = fCwidth[iplan]/2. - fgkCalT - fgkCclsT;
214 parCha[1] = fClengthRH[iplan][icham]/2. - fgkHspace/2.- fgkCclfT;
215 parCha[2] = -1.;
216 gMC->Gsvolu(cTagV,"BOX ",idtmed[1302-1],parCha,kNparCha);
217 }
218
219 // The upper part of the readout chambers (readout plane + fee)
220 // The G10 frames
221 sprintf(cTagV,"UD%02d",iDet);
222 parCha[0] = fCwidth[iplan]/2. + fgkCroW;
223 parCha[1] = fClength[iplan][icham]/2. - fgkHspace/2.;
224 parCha[2] = fgkCamH/2.;
225 gMC->Gsvolu(cTagV,"BOX ",idtmed[1307-1],parCha,kNparCha);
226 // The inner part of the G10 frame (air)
227 sprintf(cTagV,"UE%02d",iDet);
228 parCha[0] = fCwidth[iplan]/2. + fgkCroW - fgkCcuT;
229 parCha[1] = fClength[iplan][icham]/2. - fgkHspace/2.- fgkCcuT;
230 parCha[2] = -1.;
231 gMC->Gsvolu(cTagV,"BOX ",idtmed[1302-1],parCha,kNparCha);
232 // The aluminum frames
233 sprintf(cTagV,"UF%02d",iDet);
234 parCha[0] = fCwidth[iplan]/2. + fgkCroW;
235 parCha[1] = fClength[iplan][icham]/2. - fgkHspace/2.;
236 parCha[2] = fgkCroH/2.;
237 gMC->Gsvolu(cTagV,"BOX ",idtmed[1301-1],parCha,kNparCha);
238 // The inner part of the aluminum frames
239 sprintf(cTagV,"UG%02d",iDet);
240 parCha[0] = fCwidth[iplan]/2. + fgkCroW - fgkCauT;
241 parCha[1] = fClength[iplan][icham]/2. - fgkHspace/2.- fgkCauT;
242 parCha[2] = -1.;
243 gMC->Gsvolu(cTagV,"BOX ",idtmed[1302-1],parCha,kNparCha);
244 if (fClengthPH[iplan][icham] > 0.0) {
245 sprintf(cTagV,"UD%02d",iDet+kNdet);
246 parCha[0] = fCwidth[iplan]/2. + fgkCroW;
247 parCha[1] = fClengthPH[iplan][icham]/2. - fgkHspace/2.;
248 parCha[2] = fgkCamH/2.;
249 gMC->Gsvolu(cTagV,"BOX ",idtmed[1307-1],parCha,kNparCha);
250 // The inner part of the G10 frame (air)
251 sprintf(cTagV,"UE%02d",iDet+kNdet);
252 parCha[0] = fCwidth[iplan]/2. + fgkCroW - fgkCcuT;
253 parCha[1] = fClengthPH[iplan][icham]/2. - fgkHspace/2.- fgkCcuT;
254 parCha[2] = -1.;
255 gMC->Gsvolu(cTagV,"BOX ",idtmed[1302-1],parCha,kNparCha);
256 // The aluminum frames
257 sprintf(cTagV,"UF%02d",iDet+kNdet);
258 parCha[0] = fCwidth[iplan]/2. + fgkCroW;
259 parCha[1] = fClengthPH[iplan][icham]/2. - fgkHspace/2.;
260 parCha[2] = fgkCroH/2.;
261 gMC->Gsvolu(cTagV,"BOX ",idtmed[1301-1],parCha,kNparCha);
262 // The inner part of the aluminum frames
263 sprintf(cTagV,"UG%02d",iDet+kNdet);
264 parCha[0] = fCwidth[iplan]/2. + fgkCroW - fgkCauT;
265 parCha[1] = fClengthPH[iplan][icham]/2. - fgkHspace/2.- fgkCauT;
266 parCha[2] = -1.;
267 gMC->Gsvolu(cTagV,"BOX ",idtmed[1302-1],parCha,kNparCha);
268 }
269 if (fClengthRH[iplan][icham] > 0.0) {
270 sprintf(cTagV,"UD%02d",iDet+2*kNdet);
271 parCha[0] = fCwidth[iplan]/2. + fgkCroW;
272 parCha[1] = fClengthRH[iplan][icham]/2. - fgkHspace/2.;
273 parCha[2] = fgkCamH/2.;
274 gMC->Gsvolu(cTagV,"BOX ",idtmed[1307-1],parCha,kNparCha);
275 // The inner part of the G10 frame (air)
276 sprintf(cTagV,"UE%02d",iDet+2*kNdet);
277 parCha[0] = fCwidth[iplan]/2. + fgkCroW - fgkCcuT;
278 parCha[1] = fClengthRH[iplan][icham]/2. - fgkHspace/2.- fgkCcuT;
279 parCha[2] = -1.;
280 gMC->Gsvolu(cTagV,"BOX ",idtmed[1302-1],parCha,kNparCha);
281 // The aluminum frames
282 sprintf(cTagV,"UF%02d",iDet+2*kNdet);
283 parCha[0] = fCwidth[iplan]/2. + fgkCroW;
284 parCha[1] = fClengthRH[iplan][icham]/2. - fgkHspace/2.;
285 parCha[2] = fgkCroH/2.;
286 gMC->Gsvolu(cTagV,"BOX ",idtmed[1301-1],parCha,kNparCha);
287 // The inner part of the aluminum frames
288 sprintf(cTagV,"UG%02d",iDet+2*kNdet);
289 parCha[0] = fCwidth[iplan]/2. + fgkCroW - fgkCauT;
290 parCha[1] = fClengthRH[iplan][icham]/2. - fgkHspace/2.- fgkCauT;
291 parCha[2] = -1.;
292 gMC->Gsvolu(cTagV,"BOX ",idtmed[1302-1],parCha,kNparCha);
293 }
f7336fa3 294
0a770ac9 295 // The material layers inside the chambers
296 parCha[0] = -1.;
297 parCha[1] = -1.;
298 // Rohacell layer (radiator)
299 parCha[2] = fgkRaThick/2;
300 sprintf(cTagV,"UH%02d",iDet);
301 gMC->Gsvolu(cTagV,"BOX ",idtmed[1315-1],parCha,kNparCha);
302 // Mylar layer (entrance window + HV cathode)
303 parCha[2] = fgkMyThick/2;
304 sprintf(cTagV,"UI%02d",iDet);
305 gMC->Gsvolu(cTagV,"BOX ",idtmed[1308-1],parCha,kNparCha);
306 // Xe/Isobutane layer (drift volume)
307 parCha[2] = fgkDrThick/2.;
308 sprintf(cTagV,"UJ%02d",iDet);
309 gMC->Gsvolu(cTagV,"BOX ",idtmed[1309-1],parCha,kNparCha);
310 // Xe/Isobutane layer (amplification volume)
311 parCha[2] = fgkAmThick/2.;
312 sprintf(cTagV,"UK%02d",iDet);
313 gMC->Gsvolu(cTagV,"BOX ",idtmed[1309-1],parCha,kNparCha);
314 // Cu layer (pad plane)
315 parCha[2] = fgkCuThick/2;
316 sprintf(cTagV,"UL%02d",iDet);
317 gMC->Gsvolu(cTagV,"BOX ",idtmed[1305-1],parCha,kNparCha);
318 // G10 layer (support structure / honeycomb)
319 parCha[2] = fgkSuThick/2;
320 sprintf(cTagV,"UM%02d",iDet);
321 gMC->Gsvolu(cTagV,"BOX ",idtmed[1313-1],parCha,kNparCha);
322 // Cu layer (FEE + signal lines)
323 parCha[2] = fgkFeThick/2;
324 sprintf(cTagV,"UN%02d",iDet);
325 gMC->Gsvolu(cTagV,"BOX ",idtmed[1305-1],parCha,kNparCha);
326 // Al layer (cooling devices)
327 parCha[2] = fgkCoThick/2;
328 sprintf(cTagV,"UO%02d",iDet);
329 gMC->Gsvolu(cTagV,"BOX ",idtmed[1301-1],parCha,kNparCha);
330 // Water layer (cooling)
331 parCha[2] = fgkWaThick/2;
332 sprintf(cTagV,"UP%02d",iDet);
333 gMC->Gsvolu(cTagV,"BOX ",idtmed[1314-1],parCha,kNparCha);
334 if (fClengthPH[iplan][icham] > 0.0) {
335 // Rohacell layer (radiator)
336 parCha[2] = fgkRaThick/2;
337 sprintf(cTagV,"UH%02d",iDet+kNdet);
338 gMC->Gsvolu(cTagV,"BOX ",idtmed[1315-1],parCha,kNparCha);
339 // Mylar layer (entrance window + HV cathode)
340 parCha[2] = fgkMyThick/2;
341 sprintf(cTagV,"UI%02d",iDet+kNdet);
342 gMC->Gsvolu(cTagV,"BOX ",idtmed[1308-1],parCha,kNparCha);
343 // Xe/Isobutane layer (drift volume)
344 parCha[2] = fgkDrThick/2.;
345 sprintf(cTagV,"UJ%02d",iDet+kNdet);
346 gMC->Gsvolu(cTagV,"BOX ",idtmed[1309-1],parCha,kNparCha);
347 // Xe/Isobutane layer (amplification volume)
348 parCha[2] = fgkAmThick/2.;
349 sprintf(cTagV,"UK%02d",iDet+kNdet);
350 gMC->Gsvolu(cTagV,"BOX ",idtmed[1309-1],parCha,kNparCha);
351 // Cu layer (pad plane)
352 parCha[2] = fgkCuThick/2;
353 sprintf(cTagV,"UL%02d",iDet+kNdet);
354 gMC->Gsvolu(cTagV,"BOX ",idtmed[1305-1],parCha,kNparCha);
355 // G10 layer (support structure / honeycomb)
356 parCha[2] = fgkSuThick/2;
357 sprintf(cTagV,"UM%02d",iDet+kNdet);
358 gMC->Gsvolu(cTagV,"BOX ",idtmed[1313-1],parCha,kNparCha);
359 // Cu layer (FEE + signal lines)
360 parCha[2] = fgkFeThick/2;
361 sprintf(cTagV,"UN%02d",iDet+kNdet);
362 gMC->Gsvolu(cTagV,"BOX ",idtmed[1305-1],parCha,kNparCha);
363 // Al layer (cooling devices)
364 parCha[2] = fgkCoThick/2;
365 sprintf(cTagV,"UO%02d",iDet+kNdet);
366 gMC->Gsvolu(cTagV,"BOX ",idtmed[1301-1],parCha,kNparCha);
367 // Water layer (cooling)
368 parCha[2] = fgkWaThick/2;
369 sprintf(cTagV,"UP%02d",iDet+kNdet);
370 gMC->Gsvolu(cTagV,"BOX ",idtmed[1314-1],parCha,kNparCha);
371 }
372 if (fClengthRH[iplan][icham] > 0.0) {
373 // Rohacell layer (radiator)
374 parCha[2] = fgkRaThick/2;
375 sprintf(cTagV,"UH%02d",iDet+2*kNdet);
376 gMC->Gsvolu(cTagV,"BOX ",idtmed[1315-1],parCha,kNparCha);
377 // Mylar layer (entrance window + HV cathode)
378 parCha[2] = fgkMyThick/2;
379 sprintf(cTagV,"UI%02d",iDet+2*kNdet);
380 gMC->Gsvolu(cTagV,"BOX ",idtmed[1308-1],parCha,kNparCha);
381 // Xe/Isobutane layer (drift volume)
382 parCha[2] = fgkDrThick/2.;
383 sprintf(cTagV,"UJ%02d",iDet+2*kNdet);
384 gMC->Gsvolu(cTagV,"BOX ",idtmed[1309-1],parCha,kNparCha);
385 // Xe/Isobutane layer (amplification volume)
386 parCha[2] = fgkAmThick/2.;
387 sprintf(cTagV,"UK%02d",iDet+2*kNdet);
388 gMC->Gsvolu(cTagV,"BOX ",idtmed[1309-1],parCha,kNparCha);
389 // Cu layer (pad plane)
390 parCha[2] = fgkCuThick/2;
391 sprintf(cTagV,"UL%02d",iDet+2*kNdet);
392 gMC->Gsvolu(cTagV,"BOX ",idtmed[1305-1],parCha,kNparCha);
393 // G10 layer (support structure / honeycomb)
394 parCha[2] = fgkSuThick/2;
395 sprintf(cTagV,"UM%02d",iDet+2*kNdet);
396 gMC->Gsvolu(cTagV,"BOX ",idtmed[1313-1],parCha,kNparCha);
397 // Cu layer (FEE + signal lines)
398 parCha[2] = fgkFeThick/2;
399 sprintf(cTagV,"UN%02d",iDet+2*kNdet);
400 gMC->Gsvolu(cTagV,"BOX ",idtmed[1305-1],parCha,kNparCha);
401 // Al layer (cooling devices)
402 parCha[2] = fgkCoThick/2.;
403 sprintf(cTagV,"UO%02d",iDet+2*kNdet);
404 gMC->Gsvolu(cTagV,"BOX ",idtmed[1301-1],parCha,kNparCha);
405 // Water layer (cooling)
406 parCha[2] = fgkWaThick/2;
407 sprintf(cTagV,"UP%02d",iDet+2*kNdet);
408 gMC->Gsvolu(cTagV,"BOX ",idtmed[1314-1],parCha,kNparCha);
409 }
410
411 // Position the layers in the chambers
412 xpos = 0;
413 ypos = 0;
414 // Lower part
415 // Rohacell layer (radiator)
416 zpos = fgkRaZpos;
417 sprintf(cTagV,"UH%02d",iDet);
418 sprintf(cTagM,"UC%02d",iDet);
419 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
420 // Mylar layer (entrance window + HV cathode)
421 zpos = fgkMyZpos;
422 sprintf(cTagV,"UI%02d",iDet);
423 sprintf(cTagM,"UC%02d",iDet);
424 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
425 // Xe/Isobutane layer (drift volume)
426 zpos = fgkDrZpos;
427 sprintf(cTagV,"UJ%02d",iDet);
428 sprintf(cTagM,"UC%02d",iDet);
429 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
430 // Upper part
431 // Xe/Isobutane layer (amplification volume)
432 zpos = fgkAmZpos;
433 sprintf(cTagV,"UK%02d",iDet);
434 sprintf(cTagM,"UE%02d",iDet);
435 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
436 // Readout part
437 // Cu layer (pad plane)
438 zpos = fgkCuZpos;
439 sprintf(cTagV,"UL%02d",iDet);
440 sprintf(cTagM,"UG%02d",iDet);
441 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
442 // G10 layer (support structure)
443 zpos = fgkSuZpos;
444 sprintf(cTagV,"UM%02d",iDet);
445 sprintf(cTagM,"UG%02d",iDet);
446 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
447 // Cu layer (FEE + signal lines)
448 zpos = fgkFeZpos;
449 sprintf(cTagV,"UN%02d",iDet);
450 sprintf(cTagM,"UG%02d",iDet);
451 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
452 // Al layer (cooling devices)
453 zpos = fgkCoZpos;
454 sprintf(cTagV,"UO%02d",iDet);
455 sprintf(cTagM,"UG%02d",iDet);
456 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
457 // Water layer (cooling)
458 zpos = fgkWaZpos;
459 sprintf(cTagV,"UP%02d",iDet);
460 sprintf(cTagM,"UG%02d",iDet);
461 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
462 if (fClengthPH[iplan][icham] > 0.0) {
463 // Lower part
464 // Rohacell layer (radiator)
465 zpos = fgkRaZpos;
466 sprintf(cTagV,"UH%02d",iDet+kNdet);
467 sprintf(cTagM,"UC%02d",iDet+kNdet);
468 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
469 // Mylar layer (entrance window + HV cathode)
470 zpos = fgkMyZpos;
471 sprintf(cTagV,"UI%02d",iDet+kNdet);
472 sprintf(cTagM,"UC%02d",iDet+kNdet);
473 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
474 // Xe/Isobutane layer (drift volume)
475 zpos = fgkDrZpos;
476 sprintf(cTagV,"UJ%02d",iDet+kNdet);
477 sprintf(cTagM,"UC%02d",iDet+kNdet);
478 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
479 // Upper part
480 // Xe/Isobutane layer (amplification volume)
481 zpos = fgkAmZpos;
482 sprintf(cTagV,"UK%02d",iDet+kNdet);
483 sprintf(cTagM,"UE%02d",iDet+kNdet);
484 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
485 // Readout part
486 // Cu layer (pad plane)
487 zpos = fgkCuZpos;
488 sprintf(cTagV,"UL%02d",iDet+kNdet);
489 sprintf(cTagM,"UG%02d",iDet+kNdet);
490 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
491 // G10 layer (support structure)
492 zpos = fgkSuZpos;
493 sprintf(cTagV,"UM%02d",iDet+kNdet);
494 sprintf(cTagM,"UG%02d",iDet+kNdet);
495 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
496 // Cu layer (FEE + signal lines)
497 zpos = fgkFeZpos;
498 sprintf(cTagV,"UN%02d",iDet+kNdet);
499 sprintf(cTagM,"UG%02d",iDet+kNdet);
500 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
501 // Al layer (cooling devices)
502 zpos = fgkCoZpos;
503 sprintf(cTagV,"UO%02d",iDet+kNdet);
504 sprintf(cTagM,"UG%02d",iDet+kNdet);
505 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
506 // Water layer (cooling)
507 zpos = fgkWaZpos;
508 sprintf(cTagV,"UP%02d",iDet+kNdet);
509 sprintf(cTagM,"UG%02d",iDet+kNdet);
510 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
511 }
512 if (fClengthRH[iplan][icham] > 0.0) {
513 // Lower part
514 // Rohacell layer (radiator)
515 zpos = fgkRaZpos;
516 sprintf(cTagV,"UH%02d",iDet+2*kNdet);
517 sprintf(cTagM,"UC%02d",iDet+2*kNdet);
518 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
519 // Mylar layer (entrance window + HV cathode)
520 zpos = fgkMyZpos;
521 sprintf(cTagV,"UI%02d",iDet+2*kNdet);
522 sprintf(cTagM,"UC%02d",iDet+2*kNdet);
523 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
524 // Xe/Isobutane layer (drift volume)
525 zpos = fgkDrZpos;
526 sprintf(cTagV,"UJ%02d",iDet+2*kNdet);
527 sprintf(cTagM,"UC%02d",iDet+2*kNdet);
528 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
529 // Upper part
530 // Xe/Isobutane layer (amplification volume)
531 zpos = fgkAmZpos;
532 sprintf(cTagV,"UK%02d",iDet+2*kNdet);
533 sprintf(cTagM,"UE%02d",iDet+2*kNdet);
534 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
535 // Readout part
536 // Cu layer (pad plane)
537 zpos = fgkCuZpos;
538 sprintf(cTagV,"UL%02d",iDet+2*kNdet);
539 sprintf(cTagM,"UG%02d",iDet+2*kNdet);
540 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
541 // G10 layer (support structure)
542 zpos = fgkSuZpos;
543 sprintf(cTagV,"UM%02d",iDet+2*kNdet);
544 sprintf(cTagM,"UG%02d",iDet+2*kNdet);
545 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
546 // Cu layer (FEE + signal lines)
547 zpos = fgkFeZpos;
548 sprintf(cTagV,"UN%02d",iDet+2*kNdet);
549 sprintf(cTagM,"UG%02d",iDet+2*kNdet);
550 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
551 // Al layer (cooling devices)
552 zpos = fgkCoZpos;
553 sprintf(cTagV,"UO%02d",iDet+2*kNdet);
554 sprintf(cTagM,"UG%02d",iDet+2*kNdet);
555 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
556 // Water layer (cooling)
557 zpos = fgkWaZpos;
558 sprintf(cTagV,"UP%02d",iDet+2*kNdet);
559 sprintf(cTagM,"UG%02d",iDet+2*kNdet);
560 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
561 }
562
563 // Position the inner volumes of the chambers in the frames
564 xpos = 0.0;
565 ypos = 0.0;
566 zpos = 0.0;
567 // The inside of the lower G10 frame
568 sprintf(cTagV,"UC%02d",iDet);
569 sprintf(cTagM,"UB%02d",iDet);
570 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
571 // The lower G10 frame inside the aluminum frame
572 sprintf(cTagV,"UB%02d",iDet);
573 sprintf(cTagM,"UA%02d",iDet);
574 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
575 // The inside of the upper G10 frame
576 sprintf(cTagV,"UE%02d",iDet);
577 sprintf(cTagM,"UD%02d",iDet);
578 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
579 // The inside of the upper aluminum frame
580 sprintf(cTagV,"UG%02d",iDet);
581 sprintf(cTagM,"UF%02d",iDet);
582 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
583 if (fClengthPH[iplan][icham] > 0.0) {
584 // The inside of the lower G10 frame
585 sprintf(cTagV,"UC%02d",iDet+kNdet);
586 sprintf(cTagM,"UB%02d",iDet+kNdet);
587 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
588 // The lower G10 frame inside the aluminum frame
589 sprintf(cTagV,"UB%02d",iDet+kNdet);
590 sprintf(cTagM,"UA%02d",iDet+kNdet);
591 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
592 // The inside of the upper G10 frame
593 sprintf(cTagV,"UE%02d",iDet+kNdet);
594 sprintf(cTagM,"UD%02d",iDet+kNdet);
595 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
596 // The inside of the upper aluminum frame
597 sprintf(cTagV,"UG%02d",iDet+kNdet);
598 sprintf(cTagM,"UF%02d",iDet+kNdet);
599 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
600 }
601 if (fClengthRH[iplan][icham] > 0.0) {
602 // The inside of the lower G10 frame
603 sprintf(cTagV,"UC%02d",iDet+2*kNdet);
604 sprintf(cTagM,"UB%02d",iDet+2*kNdet);
605 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
606 // The lower G10 frame inside the aluminum frame
607 sprintf(cTagV,"UB%02d",iDet+2*kNdet);
608 sprintf(cTagM,"UA%02d",iDet+2*kNdet);
609 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
610 // The inside of the upper G10 frame
611 sprintf(cTagV,"UE%02d",iDet+2*kNdet);
612 sprintf(cTagM,"UD%02d",iDet+2*kNdet);
613 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
614 // The inside of the upper aluminum frame
615 sprintf(cTagV,"UG%02d",iDet+2*kNdet);
616 sprintf(cTagM,"UF%02d",iDet+2*kNdet);
617 gMC->Gspos(cTagV,1,cTagM,xpos,ypos,zpos,0,"ONLY");
618 }
619
620 // Position the frames of the chambers in the TRD mother volume
621 xpos = 0.;
622 ypos = - fClength[iplan][0] - fClength[iplan][1] - fClength[iplan][2]/2.;
623 for (Int_t ic = 0; ic < icham; ic++) {
624 ypos += fClength[iplan][ic];
625 }
626 ypos += fClength[iplan][icham]/2.;
627 zpos = fgkCraH/2. + fgkCdrH/2. - fgkSheight/2. + iplan * (fgkCH + fgkVspace);
628 // The lower aluminum frame, radiator + drift region
629 sprintf(cTagV,"UA%02d",iDet);
630 gMC->Gspos(cTagV,1,"UTR1",xpos,ypos,zpos,0,"ONLY");
631 // The upper G10 frame, amplification region
632 sprintf(cTagV,"UD%02d",iDet);
633 zpos += fgkCamH/2. + fgkCraH/2. + fgkCdrH/2.;
634 gMC->Gspos(cTagV,1,"UTR1",xpos,ypos,zpos,0,"ONLY");
635 // The upper aluminum frame
636 sprintf(cTagV,"UF%02d",iDet);
637 zpos += fgkCroH/2. + fgkCamH/2.;
638 gMC->Gspos(cTagV,1,"UTR1",xpos,ypos,zpos,0,"ONLY");
639 if (fClengthPH[iplan][icham] > 0.0) {
640 xpos = 0.;
641 ypos = - fgkSlenTR2/2.;
642 for (Int_t ic = 0; ic < icham; ic++) {
643 ypos += fClengthPH[iplan][ic];
644 }
645 ypos += fClengthPH[iplan][icham]/2.;
646 zpos = fgkCraH/2. + fgkCdrH/2. - fgkSheight/2. + iplan * (fgkCH + fgkVspace);
647 // The lower aluminum frame, radiator + drift region
648 sprintf(cTagV,"UA%02d",iDet+kNdet);
649 gMC->Gspos(cTagV,1,"UTR2",xpos,ypos,zpos,0,"ONLY");
650 // The upper G10 frame, amplification region
651 sprintf(cTagV,"UD%02d",iDet+kNdet);
652 zpos += fgkCamH/2. + fgkCraH/2. + fgkCdrH/2.;
653 gMC->Gspos(cTagV,1,"UTR2",xpos,ypos,zpos,0,"ONLY");
654 // The upper aluminum frame
655 sprintf(cTagV,"UF%02d",iDet+kNdet);
656 zpos += fgkCroH/2. + fgkCamH/2.;
657 gMC->Gspos(cTagV,1,"UTR2",xpos,ypos,zpos,0,"ONLY");
658 }
659 if (fClengthRH[iplan][icham] > 0.0) {
660 xpos = 0.;
661 ypos = - fgkSlenTR3/2.;
662 for (Int_t ic = 0; ic < icham; ic++) {
663 ypos += fClengthRH[iplan][ic];
664 }
665 ypos += fClengthRH[iplan][icham]/2.;
666 zpos = fgkCraH/2. + fgkCdrH/2. - fgkSheight/2. + iplan * (fgkCH + fgkVspace);
667 // The lower aluminum frame, radiator + drift region
668 sprintf(cTagV,"UA%02d",iDet+2*kNdet);
669 gMC->Gspos(cTagV,1,"UTR3",xpos,ypos,zpos,0,"ONLY");
670 // The upper G10 frame, amplification region
671 sprintf(cTagV,"UD%02d",iDet+2*kNdet);
672 zpos += fgkCamH/2. + fgkCraH/2. + fgkCdrH/2.;
673 gMC->Gspos(cTagV,1,"UTR3",xpos,ypos,zpos,0,"ONLY");
674 // The upper aluminum frame
675 sprintf(cTagV,"UF%02d",iDet+2*kNdet);
676 zpos += fgkCroH/2. + fgkCamH/2.;
677 gMC->Gspos(cTagV,1,"UTR3",xpos,ypos,zpos,0,"ONLY");
678 }
679
680 }
f7336fa3 681 }
682
0a770ac9 683 xpos = 0.;
684 ypos = 0.;
685 zpos = 0.;
686 gMC->Gspos("UTR1",1,"BTR1",xpos,ypos,zpos,0,"ONLY");
687 gMC->Gspos("UTR2",2,"BTR2",xpos,ypos,zpos,0,"ONLY");
688 gMC->Gspos("UTR3",3,"BTR3",xpos,ypos,zpos,0,"ONLY");
f7336fa3 689
690}
8737e16f 691
692//_____________________________________________________________________________
693void AliTRDgeometryHole::SetOldGeometry()
694{
695 //
696 // Use the old chamber lengths
697 //
698
699 Int_t icham;
700 Int_t iplan;
701
702 AliTRDgeometry::SetOldGeometry();
703
704 // The outer lengths of the chambers for the sectors with holes for the PHOS
705 Float_t lengthPH[kNplan][kNcham] = { { 0.0, 0.0, 0.0, 116.5, 123.5 }
706 , { 0.0, 0.0, 0.0, 124.0, 131.0 }
707 , { 0.0, 0.0, 0.0, 131.5, 134.5 }
708 , { 0.0, 0.0, 0.0, 139.0, 142.0 }
709 , { 0.0, 0.0, 0.0, 146.0, 142.0 }
710 , { 0.0, 0.0, 0.0, 153.5, 134.5 } };
711
712 // The outer lengths of the chambers for the sectors with holes for the RICH
713 Float_t lengthRH[kNplan][kNcham] = { { 0.0, 0.0, 0.0, 0.0, 86.5 }
714 , { 0.0, 0.0, 0.0, 0.0, 101.5 }
715 , { 0.0, 0.0, 0.0, 0.0, 112.5 }
716 , { 0.0, 0.0, 0.0, 0.0, 127.5 }
717 , { 0.0, 0.0, 0.0, 0.0, 134.5 }
718 , { 0.0, 0.0, 0.0, 0.0, 134.5 } };
719
720 for (icham = 0; icham < kNcham; icham++) {
721 for (iplan = 0; iplan < kNplan; iplan++) {
722 fClengthPH[iplan][icham] = lengthPH[iplan][icham];
723 fClengthRH[iplan][icham] = lengthRH[iplan][icham];
724 }
725 }
726
727}
728
729
730