]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TRD/AliTRDgeometryDetail.cxx
Change to MANY for UCFI/M/O and UAFI/M/O
[u/mrichter/AliRoot.git] / TRD / AliTRDgeometryDetail.cxx
CommitLineData
16bf9884 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$
a0bc1a05 18Revision 1.1 2001/11/06 17:19:41 cblume
19Add detailed geometry and simple simulator
20
16bf9884 21*/
22
23///////////////////////////////////////////////////////////////////////////////
24// //
25// TRD geometry for the spaceframe without holes //
26// //
27///////////////////////////////////////////////////////////////////////////////
28
29#include "AliMC.h"
30
31#include "AliTRDgeometryDetail.h"
32
33ClassImp(AliTRDgeometryDetail)
34
35//_____________________________________________________________________________
36AliTRDgeometryDetail::AliTRDgeometryDetail():AliTRDgeometryFull()
37{
38 //
39 // AliTRDgeometryDetail default constructor
40 //
41
42 Init();
43
44}
45
46//_____________________________________________________________________________
47AliTRDgeometryDetail::~AliTRDgeometryDetail()
48{
49 //
50 // AliTRDgeometryDetail destructor
51 //
52
53}
54
55//_____________________________________________________________________________
56void AliTRDgeometryDetail::Init()
57{
58 //
59 // Initializes the geometry parameter
60 //
61
62 AliTRDgeometryFull::Init();
63
64}
65
66//_____________________________________________________________________________
67void AliTRDgeometryDetail::CreateGeometry(Int_t *idtmed)
68{
69 //
70 // Create the detailed TRD geometry without hole
71 //
72
73 Int_t iplan;
74
75 const Int_t kNparTrd = 4;
76 const Int_t kNparCha = 3;
77 const Int_t kNplan = fgkNplan;
78
79 Float_t parDum[3];
80 Float_t parTrd[kNparTrd];
81 Float_t parCha[kNparCha];
82
83 Float_t xpos, ypos, zpos;
84
85 // The aluminum frames - readout + electronics (Al)
86 // The inner chambers
87 gMC->Gsvolu("UAFI","BOX ",idtmed[1301-1],parDum,0);
88 // The middle chambers
89 gMC->Gsvolu("UAFM","BOX ",idtmed[1301-1],parDum,0);
90 // The outer chambers
91 gMC->Gsvolu("UAFO","BOX ",idtmed[1301-1],parDum,0);
92
93 // The inner part of the aluminum frames (Air)
94 // The inner chambers
95 gMC->Gsvolu("UAII","BOX ",idtmed[1302-1],parDum,0);
96 // The middle chambers
97 gMC->Gsvolu("UAIM","BOX ",idtmed[1302-1],parDum,0);
98 // The outer chambers
99 gMC->Gsvolu("UAIO","BOX ",idtmed[1302-1],parDum,0);
100
101 // The carbon frames - radiator + driftchamber (C)
102 // The inner chambers
103 gMC->Gsvolu("UCFI","BOX ",idtmed[1307-1],parDum,0);
104 // The middle chambers
105 gMC->Gsvolu("UCFM","BOX ",idtmed[1307-1],parDum,0);
106 // The outer chambers
107 gMC->Gsvolu("UCFO","BOX ",idtmed[1307-1],parDum,0);
108
109 // The inner part of the carbon frames (Air)
110 // The inner chambers
111 gMC->Gsvolu("UCII","BOX ",idtmed[1302-1],parDum,0);
112 // The middle chambers
113 gMC->Gsvolu("UCIM","BOX ",idtmed[1302-1],parDum,0);
114 // The outer chambers
115 gMC->Gsvolu("UCIO","BOX ",idtmed[1302-1],parDum,0);
116
117 // The material layers inside the chambers
118 parCha[0] = -1.;
119 parCha[1] = -1.;
120 // Rohacell layer (radiator)
121 parCha[2] = fgkRaThick/2;
122 gMC->Gsvolu("UL03","BOX ",idtmed[1315-1],parCha,kNparCha);
123 // Mylar layer (entrance window + HV cathode)
124 parCha[2] = fgkMyThick/2;
125 gMC->Gsvolu("UL04","BOX ",idtmed[1308-1],parCha,kNparCha);
126 // Xe/Isobutane layer (drift volume)
127 parCha[2] = fgkDrThick/2.;
128 gMC->Gsvolu("UL05","BOX ",idtmed[1309-1],parCha,kNparCha);
129 // Xe/Isobutane layer (amplification volume)
130 parCha[2] = fgkAmThick/2.;
131 gMC->Gsvolu("UL06","BOX ",idtmed[1309-1],parCha,kNparCha);
132
133 // Cu layer (pad plane)
134 parCha[2] = fgkCuThick/2;
135 gMC->Gsvolu("UL07","BOX ",idtmed[1305-1],parCha,kNparCha);
136 // G10 layer (support structure)
137 parCha[2] = fgkSuThick/2;
138 gMC->Gsvolu("UL08","BOX ",idtmed[1313-1],parCha,kNparCha);
139
140 // Create the readout volumina
141 CreateReadout(idtmed);
142
143 // Create the volumina for the cooling
144 CreateCooling(idtmed);
145
146 // Position the layers in the chambers
147 xpos = 0;
148 ypos = 0;
149
150 // Rohacell layer (radiator)
151 zpos = fgkRaZpos;
152 gMC->Gspos("UL03",1,"UCII",xpos,ypos,zpos,0,"ONLY");
153 gMC->Gspos("UL03",2,"UCIM",xpos,ypos,zpos,0,"ONLY");
154 gMC->Gspos("UL03",3,"UCIO",xpos,ypos,zpos,0,"ONLY");
155 // Mylar layer (entrance window + HV cathode)
156 zpos = fgkMyZpos;
157 gMC->Gspos("UL04",1,"UCII",xpos,ypos,zpos,0,"ONLY");
158 gMC->Gspos("UL04",2,"UCIM",xpos,ypos,zpos,0,"ONLY");
159 gMC->Gspos("UL04",3,"UCIO",xpos,ypos,zpos,0,"ONLY");
160 // Xe/Isobutane layer (drift volume)
161 zpos = fgkDrZpos;
162 gMC->Gspos("UL05",1,"UCII",xpos,ypos,zpos,0,"ONLY");
163 gMC->Gspos("UL05",2,"UCIM",xpos,ypos,zpos,0,"ONLY");
164 gMC->Gspos("UL05",3,"UCIO",xpos,ypos,zpos,0,"ONLY");
165 // Xe/Isobutane layer (amplification volume)
166 zpos = fgkAmZpos;
167 gMC->Gspos("UL06",1,"UCII",xpos,ypos,zpos,0,"ONLY");
168 gMC->Gspos("UL06",2,"UCIM",xpos,ypos,zpos,0,"ONLY");
169 gMC->Gspos("UL06",3,"UCIO",xpos,ypos,zpos,0,"ONLY");
170 // Cu layer (pad plane)
171 zpos = fgkCuZpos;
172 gMC->Gspos("UL07",1,"UAII",xpos,ypos,zpos,0,"ONLY");
173 gMC->Gspos("UL07",2,"UAIM",xpos,ypos,zpos,0,"ONLY");
174 gMC->Gspos("UL07",3,"UAIO",xpos,ypos,zpos,0,"ONLY");
175 // G10 layer (support structure)
176 zpos = fgkSuZpos;
177 gMC->Gspos("UL08",1,"UAII",xpos,ypos,zpos,0,"ONLY");
178 gMC->Gspos("UL08",2,"UAIM",xpos,ypos,zpos,0,"ONLY");
179 gMC->Gspos("UL08",3,"UAIO",xpos,ypos,zpos,0,"ONLY");
180
181 // The TRD mother volume for one sector (Air), full length in z-direction
182 parTrd[0] = fgkSwidth1/2.;
183 parTrd[1] = fgkSwidth2/2.;
184 parTrd[2] = fgkSlenTR1/2.;
185 parTrd[3] = fgkSheight/2.;
186 gMC->Gsvolu("TRD1","TRD1",idtmed[1302-1],parTrd,kNparTrd);
187
188 // Make the aluminum frame of the chamber 0.5cm shorter to acommodate
189 // the volumes for the detailed readout electronics
190 const Float_t kcaframeOff = 0.5;
191 Float_t caframe = fgkCaframe - kcaframeOff;
192
193 // Position the chambers in the TRD mother volume
194 for (iplan = 1; iplan <= kNplan; iplan++) {
195
196 // The inner chambers ---------------------------------------------------------------
197
198 // the aluminum frame
199 parCha[0] = fCwidth[iplan-1]/2.;
200 parCha[1] = fClengthI[iplan-1]/2.;
201 parCha[2] = caframe/2.;
202 xpos = 0.;
203 ypos = 0.;
204 zpos = fgkCheight - fgkSheight/2. - kcaframeOff - caframe/2.
205 + (iplan-1) * (fgkCheight + fgkCspace);
a0bc1a05 206 gMC->Gsposp("UAFI",iplan ,"TRD1",xpos,ypos,zpos,0,"MANY",parCha,kNparCha);
16bf9884 207
208 // the inner part of the aluminum frame
209 parCha[0] = fCwidth[iplan-1]/2. - fgkCathick;
210 parCha[1] = fClengthI[iplan-1]/2. - fgkCathick;
211 parCha[2] = caframe/2.;
212 xpos = 0.;
213 ypos = 0.;
214 zpos = fgkCheight - fgkSheight/2. - kcaframeOff - caframe/2.
215 + (iplan-1) * (fgkCheight + fgkCspace);
216 gMC->Gsposp("UAII",iplan ,"TRD1",xpos,ypos,zpos,0,"ONLY",parCha,kNparCha);
217
218 // the carbon frame
219 parCha[0] = fCwidth[iplan-1]/2.;
220 parCha[1] = fClengthI[iplan-1]/2.;
221 parCha[2] = fgkCcframe/2.;
222 xpos = 0.;
223 ypos = 0.;
224 zpos = fgkCcframe/2. - fgkSheight/2.
225 + (iplan-1) * (fgkCheight + fgkCspace);
a0bc1a05 226 gMC->Gsposp("UCFI",iplan ,"TRD1",xpos,ypos,zpos,0,"MANY",parCha,kNparCha);
16bf9884 227
228 // the inner part of the carbon frame
229 parCha[0] = fCwidth[iplan-1]/2. - fgkCcthick;
230 parCha[1] = fClengthI[iplan-1]/2. - fgkCcthick;
231 parCha[2] = fgkCcframe/2.;
232 xpos = 0.;
233 ypos = 0.;
234 zpos = fgkCcframe/2. - fgkSheight/2.
235 + (iplan-1) * (fgkCheight + fgkCspace);
236 gMC->Gsposp("UCII",iplan ,"TRD1",xpos,ypos,zpos,0,"ONLY",parCha,kNparCha);
237
238 PositionReadout(iplan-1,2);
239 PositionCooling(iplan-1,2);
240
241 // The middle chambers --------------------------------------------------------------
242
243 // the aluminum frame
244 parCha[0] = fCwidth[iplan-1]/2.;
245 parCha[1] = fClengthM1[iplan-1]/2.;
246 parCha[2] = caframe/2.;
247 xpos = 0.;
248 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1]/2.;
249 zpos = fgkCheight - fgkSheight/2. - kcaframeOff - caframe/2.
250 + (iplan-1) * (fgkCheight + fgkCspace);
a0bc1a05 251 gMC->Gsposp("UAFM",iplan ,"TRD1",xpos, ypos,zpos,0,"MANY",parCha,kNparCha);
252 gMC->Gsposp("UAFM",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"MANY",parCha,kNparCha);
16bf9884 253
254 // the inner part of the aluminum frame
255 parCha[0] = fCwidth[iplan-1]/2. - fgkCathick;
256 parCha[1] = fClengthM1[iplan-1]/2. - fgkCathick;
257 parCha[2] = caframe/2.;
258 xpos = 0.;
259 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1]/2.;
260 zpos = fgkCheight - fgkSheight/2. - kcaframeOff - caframe/2.
261 + (iplan-1) * (fgkCheight + fgkCspace);
262 gMC->Gsposp("UAIM",iplan ,"TRD1",xpos, ypos,zpos,0,"ONLY",parCha,kNparCha);
263 gMC->Gsposp("UAIM",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"ONLY",parCha,kNparCha);
264
265 // the carbon frame
266 parCha[0] = fCwidth[iplan-1]/2.;
267 parCha[1] = fClengthM1[iplan-1]/2.;
268 parCha[2] = fgkCcframe/2.;
269 xpos = 0.;
270 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1]/2.;
271 zpos = fgkCcframe/2. - fgkSheight/2.
272 + (iplan-1) * (fgkCheight + fgkCspace);
a0bc1a05 273 gMC->Gsposp("UCFM",iplan ,"TRD1",xpos, ypos,zpos,0,"MANY",parCha,kNparCha);
274 gMC->Gsposp("UCFM",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"MANY",parCha,kNparCha);
16bf9884 275
276 // the inner part of the carbon frame
277 parCha[0] = fCwidth[iplan-1]/2. - fgkCcthick;
278 parCha[1] = fClengthM1[iplan-1]/2. - fgkCcthick;
279 parCha[2] = fgkCcframe/2.;
280 xpos = 0.;
281 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1]/2.;
282 zpos = fgkCcframe/2. - fgkSheight/2.
283 + (iplan-1) * (fgkCheight + fgkCspace);
284 gMC->Gsposp("UCIM",iplan ,"TRD1",xpos, ypos,zpos,0,"ONLY",parCha,kNparCha);
285 gMC->Gsposp("UCIM",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"ONLY",parCha,kNparCha);
286
287 PositionReadout(iplan-1,1);
288 PositionReadout(iplan-1,3);
289 PositionCooling(iplan-1,1);
290 PositionCooling(iplan-1,3);
291
292 // The outer chambers ---------------------------------------------------------------
293
294 // the aluminum frame
295 parCha[0] = fCwidth[iplan-1]/2.;
296 parCha[1] = fClengthO1[iplan-1]/2.;
297 parCha[2] = caframe/2.;
298 xpos = 0.;
299 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO1[iplan-1]/2.;
300 zpos = fgkCheight - fgkSheight/2. - kcaframeOff - caframe/2.
301 + (iplan-1) * (fgkCheight + fgkCspace);
a0bc1a05 302 gMC->Gsposp("UAFO",iplan ,"TRD1",xpos, ypos,zpos,0,"MANY",parCha,kNparCha);
303 gMC->Gsposp("UAFO",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"MANY",parCha,kNparCha);
16bf9884 304
305 // the inner part of the aluminum frame
306 parCha[0] = fCwidth[iplan-1]/2. - fgkCathick;
307 parCha[1] = fClengthO1[iplan-1]/2. - fgkCathick;
308 parCha[2] = caframe/2.;
309 xpos = 0.;
310 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO1[iplan-1]/2.;
311 zpos = fgkCheight - fgkSheight/2. - kcaframeOff - caframe/2.
312 + (iplan-1) * (fgkCheight + fgkCspace);
313 gMC->Gsposp("UAIO",iplan ,"TRD1",xpos, ypos,zpos,0,"ONLY",parCha,kNparCha);
314 gMC->Gsposp("UAIO",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"ONLY",parCha,kNparCha);
315
316 // the carbon frame
317 parCha[0] = fCwidth[iplan-1]/2.;
318 parCha[1] = fClengthO1[iplan-1]/2.;
319 parCha[2] = fgkCcframe/2.;
320 xpos = 0.;
321 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO1[iplan-1]/2.;
322 zpos = fgkCcframe/2. - fgkSheight/2.
323 + (iplan-1) * (fgkCheight + fgkCspace);
a0bc1a05 324 gMC->Gsposp("UCFO",iplan, "TRD1",xpos, ypos,zpos,0,"MANY",parCha,kNparCha);
325 gMC->Gsposp("UCFO",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"MANY",parCha,kNparCha);
16bf9884 326
327 // the inner part of the carbon frame
328 parCha[0] = fCwidth[iplan-1]/2. - fgkCcthick;
329 parCha[1] = fClengthO1[iplan-1]/2. - fgkCcthick;
330 parCha[2] = fgkCcframe/2.;
331 xpos = 0.;
332 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO1[iplan-1]/2.;
333 zpos = fgkCcframe/2. - fgkSheight/2.
334 + (iplan-1) * (fgkCheight + fgkCspace);
335 gMC->Gsposp("UCIO",iplan ,"TRD1",xpos, ypos,zpos,0,"ONLY",parCha,kNparCha);
336 gMC->Gsposp("UCIO",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"ONLY",parCha,kNparCha);
337
338 PositionReadout(iplan-1,0);
339 PositionReadout(iplan-1,4);
340 PositionCooling(iplan-1,0);
341 PositionCooling(iplan-1,4);
342
343 }
344
345 xpos = 0.;
346 ypos = 0.;
347 zpos = 0.;
348 gMC->Gspos("TRD1",1,"BTR1",xpos,ypos,zpos,0,"ONLY");
349 gMC->Gspos("TRD1",2,"BTR2",xpos,ypos,zpos,0,"ONLY");
350 gMC->Gspos("TRD1",3,"BTR3",xpos,ypos,zpos,0,"ONLY");
351
352}
353
354//_____________________________________________________________________________
355void AliTRDgeometryDetail::CreateReadout(Int_t *idtmed)
356{
357 //
358 // Create the volumina of the readout electronics
359 //
360
361 const Int_t kNparBox = 3;
362
363 Float_t parBox[kNparBox];
364 Float_t xpos = 0.0;
365 Float_t ypos = 0.0;
366 Float_t zpos = 0.0;
367
368 // The mother volume for the MCMs + connectors (air)
369 parBox[0] = 3.0/2.;
370 parBox[1] = 3.4/2.;
371 parBox[2] = 0.5/2.;
372 gMC->Gsvolu("UMCM","BOX",idtmed[1302-1],parBox,kNparBox);
373
374 // The MCM carrier G10 layer
375 parBox[0] = 3.0/2.;
376 parBox[1] = 3.0/2.;
377 parBox[2] = 0.1/2.;
378 gMC->Gsvolu("UMC1","BOX",idtmed[1319-1],parBox,kNparBox);
379 // The MCM carrier Cu layer
380 parBox[0] = 3.0/2.;
381 parBox[1] = 3.0/2.;
382 parBox[2] = 0.0034/2.;
383 gMC->Gsvolu("UMC2","BOX",idtmed[1318-1],parBox,kNparBox);
384 // The MCM carrier Sn layer
385 parBox[0] = 3.0/2.;
386 parBox[1] = 3.0/2.;
387 parBox[2] = 0.004/2.;
388 gMC->Gsvolu("UMC3","BOX",idtmed[1317-1],parBox,kNparBox);
389 // The MCM carrier Al layer
390 parBox[0] = 3.0/2.;
391 parBox[1] = 3.0/2.;
392 parBox[2] = 0.05/2.;
393 gMC->Gsvolu("UMC4","BOX",idtmed[1316-1],parBox,kNparBox);
394
395 // The epoxy of chip no.1
396 parBox[0] = 0.548/2.;
397 parBox[1] = 0.548/2.;
398 parBox[2] = 0.1/2.;
399 gMC->Gsvolu("UCE1","BOX",idtmed[1321-1],parBox,kNparBox);
400 // The silicon of chip no.1
401 parBox[0] = 0.316/2.;
402 parBox[1] = 0.316/2.;
403 parBox[2] = 0.03/2.;
404 gMC->Gsvolu("UCS1","BOX",idtmed[1320-1],parBox,kNparBox);
405
406 // The epoxy of chip no.2
407 parBox[0] = 1.549/2.;
408 parBox[1] = 1.549/2.;
409 parBox[2] = 0.1/2.;
410 gMC->Gsvolu("UCE2","BOX",idtmed[1321-1],parBox,kNparBox);
411 // The silicon of chip no.2
412 parBox[0] = 0.894/2.;
413 parBox[1] = 0.894/2.;
414 parBox[2] = 0.03/2.;
415 gMC->Gsvolu("UCS2","BOX",idtmed[1320-1],parBox,kNparBox);
416
417 // The PE of the connector
418 parBox[0] = 2.25/2.;
419 parBox[1] = 0.4/2.;
420 parBox[2] = 0.3/2.;
421 gMC->Gsvolu("UCN1","BOX",idtmed[1322-1],parBox,kNparBox);
422 // The Cu of the connector
423 parBox[0] = 2.25/2.;
424 parBox[1] = 0.4/2.;
425 parBox[2] = 0.005/2.;
426 gMC->Gsvolu("UCN2","BOX",idtmed[1323-1],parBox,kNparBox);
427
428 xpos = 0.0;
429 ypos = -0.4/2.;
430 zpos = -0.25 + 0.1/2.;
431 gMC->Gspos("UMC1",1,"UMCM",xpos,ypos,zpos,0,"ONLY");
432 zpos += 0.1/2. + 0.0034/2.;
433 gMC->Gspos("UMC2",1,"UMCM",xpos,ypos,zpos,0,"ONLY");
434 zpos += 0.0034/2 + 0.004/2.;
435 gMC->Gspos("UMC3",1,"UMCM",xpos,ypos,zpos,0,"ONLY");
436 zpos += 0.004/2 + 0.05/2.;
437 gMC->Gspos("UMC4",1,"UMCM",xpos,ypos,zpos,0,"ONLY");
438 zpos += 0.05/2. + 0.1/2.;
439 xpos = 1.0;
440 gMC->Gspos("UCE1",1,"UMCM",xpos,ypos,zpos,0,"ONLY");
441 xpos = -0.5;
442 gMC->Gspos("UCE2",1,"UMCM",xpos,ypos,zpos,0,"ONLY");
443 zpos += 0.1/2. + 0.03/2.;
444 xpos = 1.0;
445 gMC->Gspos("UCS1",1,"UMCM",xpos,ypos,zpos,0,"ONLY");
446 xpos = -0.5;
447 gMC->Gspos("UCS2",1,"UMCM",xpos,ypos,zpos,0,"ONLY");
448 xpos = 0.0;
449 ypos = 3.4/2. - 0.4/2.;
450 zpos = -0.25 + 0.3/2.;
451 gMC->Gspos("UCN1",1,"UMCM",xpos,ypos,zpos,0,"ONLY");
452 zpos += 0.3/2. + 0.005/2.;
453 gMC->Gspos("UCN2",1,"UMCM",xpos,ypos,zpos,0,"ONLY");
454
455}
456
457//_____________________________________________________________________________
458void AliTRDgeometryDetail::PositionReadout(Int_t ipla, Int_t icha)
459{
460 //
461 // Position the volumina inside the readout mother volume
462 //
463
464 const Float_t kcaframeOff = 0.5;
465
466 Int_t nMCMrow = GetRowMax(ipla,icha,0);
467 Int_t nMCMcol = 6;
468
469 Float_t xSize = GetChamberWidth(ipla) / ((Float_t) nMCMcol);
470 Float_t ySize = 0.0;
471 Float_t x0 = - GetChamberWidth(ipla) /2. + fgkCcthick;
472 Float_t y0 = 0.0;
473 switch (icha) {
474 case 0:
475 ySize = GetChamberLengthO(ipla) / ((Float_t) nMCMrow);
476 y0 = fClengthI[ipla]/2. + fClengthM1[ipla] + fClengthO1[ipla]/2.
477 - GetChamberLengthO(ipla) / 2. + fgkCcthick;
478 break;
479 case 1:
480 ySize = GetChamberLengthM(ipla) / ((Float_t) nMCMrow);
481 y0 = fClengthI[ipla]/2. + fClengthM1[ipla]/2.
482 - GetChamberLengthM(ipla) / 2. + fgkCcthick;
483 break;
484 case 2:
485 ySize = GetChamberLengthI(ipla) / ((Float_t) nMCMrow);
486 y0 = - GetChamberLengthI(ipla) / 2. + fgkCcthick;
487 break;
488 case 3:
489 ySize = GetChamberLengthM(ipla) / ((Float_t) nMCMrow);
490 y0 = - fClengthI[ipla]/2. - fClengthM1[ipla]/2.
491 - GetChamberLengthM(ipla) / 2. + fgkCcthick;
492 break;
493 case 4:
494 ySize = GetChamberLengthO(ipla) / ((Float_t) nMCMrow);
495 y0 = - fClengthI[ipla]/2. - fClengthM1[ipla] - fClengthO1[ipla]/2.
496 - GetChamberLengthO(ipla) / 2. + fgkCcthick;
497 break;
498 };
499
500 Int_t iCopy = GetDetector(ipla,icha,0) * 1000;
501 for (Int_t iMCMrow = 0; iMCMrow < nMCMrow; iMCMrow++) {
502 for (Int_t iMCMcol = 0; iMCMcol < nMCMcol; iMCMcol++) {
503 iCopy++;
504 Float_t xpos = (0.5 + iMCMcol) * xSize + x0;
505 Float_t ypos = (0.5 + iMCMrow) * ySize + y0;
506 Float_t zpos = fgkCheight - fgkSheight/2. - kcaframeOff/2.
507 + ipla * (fgkCheight + fgkCspace);
508 gMC->Gspos("UMCM",iCopy,"TRD1",xpos,ypos,zpos,0,"ONLY");
509 }
510 }
511
512}
513
514//_____________________________________________________________________________
515void AliTRDgeometryDetail::CreateCooling(Int_t *idtmed)
516{
517 //
518 // Create the volumina of the cooling
519 //
520
521 const Int_t kNparBox = 3;
522
523 Float_t parBox[kNparBox];
524
525 // The aluminum pipe for the cooling
526 parBox[0] = 0.0;
527 parBox[1] = 0.0;
528 parBox[2] = 0.0;
529 gMC->Gsvolu("UCOA","BOX",idtmed[1324-1],parBox,0);
530
531 // The cooling water
532 parBox[0] = -1.;
533 parBox[1] = 0.2/2.;
534 parBox[2] = 0.2/2.;
535 gMC->Gsvolu("UCOW","BOX",idtmed[1314-1],parBox,kNparBox);
536
537 // Water inside he cooling pipe
538 Float_t xpos = 0.0;
539 Float_t ypos = 0.0;
540 Float_t zpos = 0.0;
541 gMC->Gspos("UCOW",1,"UCOA",xpos,ypos,zpos,0,"ONLY");
542
543}
544
545//_____________________________________________________________________________
546void AliTRDgeometryDetail::PositionCooling(Int_t ipla, Int_t icha)
547{
548 //
549 // Position the volumina of the cooling
550 //
551
552 const Int_t kNpar = 3;
553
554 const Float_t kcaframeOff = 0.5;
555
556 Float_t par[kNpar];
557 Float_t xpos = 0.0;
558 Float_t ypos = 0.0;
559 Float_t zpos = 0.0;
560
561 Int_t iCopy = GetDetector(ipla,icha,0) * 100;
562 Int_t nMCMrow = GetRowMax(ipla,icha,0);
563
564 Float_t xSize = 0.0;
565 Float_t x0 = 0.0;
566 switch (icha) {
567 case 0:
568 xSize = GetChamberLengthO(ipla) / ((Float_t) nMCMrow);
569 x0 = fClengthI[ipla]/2. + fClengthM1[ipla] + fClengthO1[ipla]/2.
570 - GetChamberLengthO(ipla) / 2. + fgkCcthick;
571 break;
572 case 1:
573 xSize = GetChamberLengthM(ipla) / ((Float_t) nMCMrow);
574 x0 = fClengthI[ipla]/2. + fClengthM1[ipla]/2.
575 - GetChamberLengthM(ipla) / 2. + fgkCcthick;
576 break;
577 case 2:
578 xSize = GetChamberLengthI(ipla) / ((Float_t) nMCMrow);
579 x0 = - GetChamberLengthI(ipla) / 2. + fgkCcthick;
580 break;
581 case 3:
582 xSize = GetChamberLengthM(ipla) / ((Float_t) nMCMrow);
583 x0 = - fClengthI[ipla]/2. - fClengthM1[ipla]/2.
584 - GetChamberLengthM(ipla) / 2. + fgkCcthick;
585 break;
586 case 4:
587 xSize = GetChamberLengthO(ipla) / ((Float_t) nMCMrow);
588 x0 = - fClengthI[ipla]/2. - fClengthM1[ipla] - fClengthO1[ipla]/2.
589 - GetChamberLengthO(ipla) / 2. + fgkCcthick;
590 break;
591 };
592
593 // Position the cooling pipes
594 for (Int_t iMCMrow = 0; iMCMrow < nMCMrow; iMCMrow++) {
595
596 xpos = 0.0;
597 ypos = (0.5 + iMCMrow) * xSize + x0 - 1.9;
598 zpos = fgkCheight - fgkSheight/2. - kcaframeOff/2.
599 + ipla * (fgkCheight + fgkCspace);
600 par[0] = GetChamberWidth(ipla) / 2. - fgkCcthick;
601 par[1] = 0.3/2.;
602 par[2] = 0.3/2.;
603 gMC->Gsposp("UCOA",iCopy+iMCMrow,"TRD1",xpos,ypos,zpos,0,"ONLY",par,kNpar);
604
605 }
606
607}