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