]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TRD/AliTRDgeometryDetail.cxx
New classes added
[u/mrichter/AliRoot.git] / TRD / AliTRDgeometryDetail.cxx
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$
18 Revision 1.1  2001/11/06 17:19:41  cblume
19 Add detailed geometry and simple simulator
20
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
33 ClassImp(AliTRDgeometryDetail)
34
35 //_____________________________________________________________________________
36 AliTRDgeometryDetail::AliTRDgeometryDetail():AliTRDgeometryFull()
37 {
38   //
39   // AliTRDgeometryDetail default constructor
40   //
41
42   Init();
43
44 }
45
46 //_____________________________________________________________________________
47 AliTRDgeometryDetail::~AliTRDgeometryDetail()
48 {
49   //
50   // AliTRDgeometryDetail destructor
51   //
52
53 }
54
55 //_____________________________________________________________________________
56 void AliTRDgeometryDetail::Init()
57 {
58   //
59   // Initializes the geometry parameter
60   //
61
62   AliTRDgeometryFull::Init();
63
64 }
65
66 //_____________________________________________________________________________
67 void 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);
206     gMC->Gsposp("UAFI",iplan         ,"TRD1",xpos,ypos,zpos,0,"MANY",parCha,kNparCha);
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);
226     gMC->Gsposp("UCFI",iplan         ,"TRD1",xpos,ypos,zpos,0,"MANY",parCha,kNparCha);
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);
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);
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);
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);
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);
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);
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);
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);
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 //_____________________________________________________________________________
355 void 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 //_____________________________________________________________________________
458 void 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 //_____________________________________________________________________________
515 void 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 //_____________________________________________________________________________
546 void 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 }