1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
18 Revision 1.1 2001/11/06 17:19:41 cblume
19 Add detailed geometry and simple simulator
23 ///////////////////////////////////////////////////////////////////////////////
25 // TRD geometry for the spaceframe without holes //
27 ///////////////////////////////////////////////////////////////////////////////
31 #include "AliTRDgeometryDetail.h"
33 ClassImp(AliTRDgeometryDetail)
35 //_____________________________________________________________________________
36 AliTRDgeometryDetail::AliTRDgeometryDetail():AliTRDgeometryFull()
39 // AliTRDgeometryDetail default constructor
46 //_____________________________________________________________________________
47 AliTRDgeometryDetail::~AliTRDgeometryDetail()
50 // AliTRDgeometryDetail destructor
55 //_____________________________________________________________________________
56 void AliTRDgeometryDetail::Init()
59 // Initializes the geometry parameter
62 AliTRDgeometryFull::Init();
66 //_____________________________________________________________________________
67 void AliTRDgeometryDetail::CreateGeometry(Int_t *idtmed)
70 // Create the detailed TRD geometry without hole
75 const Int_t kNparTrd = 4;
76 const Int_t kNparCha = 3;
77 const Int_t kNplan = fgkNplan;
80 Float_t parTrd[kNparTrd];
81 Float_t parCha[kNparCha];
83 Float_t xpos, ypos, zpos;
85 // The aluminum frames - readout + electronics (Al)
87 gMC->Gsvolu("UAFI","BOX ",idtmed[1301-1],parDum,0);
88 // The middle chambers
89 gMC->Gsvolu("UAFM","BOX ",idtmed[1301-1],parDum,0);
91 gMC->Gsvolu("UAFO","BOX ",idtmed[1301-1],parDum,0);
93 // The inner part of the aluminum frames (Air)
95 gMC->Gsvolu("UAII","BOX ",idtmed[1302-1],parDum,0);
96 // The middle chambers
97 gMC->Gsvolu("UAIM","BOX ",idtmed[1302-1],parDum,0);
99 gMC->Gsvolu("UAIO","BOX ",idtmed[1302-1],parDum,0);
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);
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);
117 // The material layers inside the chambers
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);
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);
140 // Create the readout volumina
141 CreateReadout(idtmed);
143 // Create the volumina for the cooling
144 CreateCooling(idtmed);
146 // Position the layers in the chambers
150 // Rohacell layer (radiator)
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)
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)
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)
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)
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)
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");
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);
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;
193 // Position the chambers in the TRD mother volume
194 for (iplan = 1; iplan <= kNplan; iplan++) {
196 // The inner chambers ---------------------------------------------------------------
198 // the aluminum frame
199 parCha[0] = fCwidth[iplan-1]/2.;
200 parCha[1] = fClengthI[iplan-1]/2.;
201 parCha[2] = caframe/2.;
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);
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.;
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);
219 parCha[0] = fCwidth[iplan-1]/2.;
220 parCha[1] = fClengthI[iplan-1]/2.;
221 parCha[2] = fgkCcframe/2.;
224 zpos = fgkCcframe/2. - fgkSheight/2.
225 + (iplan-1) * (fgkCheight + fgkCspace);
226 gMC->Gsposp("UCFI",iplan ,"TRD1",xpos,ypos,zpos,0,"MANY",parCha,kNparCha);
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.;
234 zpos = fgkCcframe/2. - fgkSheight/2.
235 + (iplan-1) * (fgkCheight + fgkCspace);
236 gMC->Gsposp("UCII",iplan ,"TRD1",xpos,ypos,zpos,0,"ONLY",parCha,kNparCha);
238 PositionReadout(iplan-1,2);
239 PositionCooling(iplan-1,2);
241 // The middle chambers --------------------------------------------------------------
243 // the aluminum frame
244 parCha[0] = fCwidth[iplan-1]/2.;
245 parCha[1] = fClengthM1[iplan-1]/2.;
246 parCha[2] = caframe/2.;
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);
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.;
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);
266 parCha[0] = fCwidth[iplan-1]/2.;
267 parCha[1] = fClengthM1[iplan-1]/2.;
268 parCha[2] = fgkCcframe/2.;
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);
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.;
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);
287 PositionReadout(iplan-1,1);
288 PositionReadout(iplan-1,3);
289 PositionCooling(iplan-1,1);
290 PositionCooling(iplan-1,3);
292 // The outer chambers ---------------------------------------------------------------
294 // the aluminum frame
295 parCha[0] = fCwidth[iplan-1]/2.;
296 parCha[1] = fClengthO1[iplan-1]/2.;
297 parCha[2] = caframe/2.;
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);
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.;
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);
317 parCha[0] = fCwidth[iplan-1]/2.;
318 parCha[1] = fClengthO1[iplan-1]/2.;
319 parCha[2] = fgkCcframe/2.;
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);
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.;
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);
338 PositionReadout(iplan-1,0);
339 PositionReadout(iplan-1,4);
340 PositionCooling(iplan-1,0);
341 PositionCooling(iplan-1,4);
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");
354 //_____________________________________________________________________________
355 void AliTRDgeometryDetail::CreateReadout(Int_t *idtmed)
358 // Create the volumina of the readout electronics
361 const Int_t kNparBox = 3;
363 Float_t parBox[kNparBox];
368 // The mother volume for the MCMs + connectors (air)
372 gMC->Gsvolu("UMCM","BOX",idtmed[1302-1],parBox,kNparBox);
374 // The MCM carrier G10 layer
378 gMC->Gsvolu("UMC1","BOX",idtmed[1319-1],parBox,kNparBox);
379 // The MCM carrier Cu layer
382 parBox[2] = 0.0034/2.;
383 gMC->Gsvolu("UMC2","BOX",idtmed[1318-1],parBox,kNparBox);
384 // The MCM carrier Sn layer
387 parBox[2] = 0.004/2.;
388 gMC->Gsvolu("UMC3","BOX",idtmed[1317-1],parBox,kNparBox);
389 // The MCM carrier Al layer
393 gMC->Gsvolu("UMC4","BOX",idtmed[1316-1],parBox,kNparBox);
395 // The epoxy of chip no.1
396 parBox[0] = 0.548/2.;
397 parBox[1] = 0.548/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.;
404 gMC->Gsvolu("UCS1","BOX",idtmed[1320-1],parBox,kNparBox);
406 // The epoxy of chip no.2
407 parBox[0] = 1.549/2.;
408 parBox[1] = 1.549/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.;
415 gMC->Gsvolu("UCS2","BOX",idtmed[1320-1],parBox,kNparBox);
417 // The PE of the connector
421 gMC->Gsvolu("UCN1","BOX",idtmed[1322-1],parBox,kNparBox);
422 // The Cu of the connector
425 parBox[2] = 0.005/2.;
426 gMC->Gsvolu("UCN2","BOX",idtmed[1323-1],parBox,kNparBox);
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.;
440 gMC->Gspos("UCE1",1,"UMCM",xpos,ypos,zpos,0,"ONLY");
442 gMC->Gspos("UCE2",1,"UMCM",xpos,ypos,zpos,0,"ONLY");
443 zpos += 0.1/2. + 0.03/2.;
445 gMC->Gspos("UCS1",1,"UMCM",xpos,ypos,zpos,0,"ONLY");
447 gMC->Gspos("UCS2",1,"UMCM",xpos,ypos,zpos,0,"ONLY");
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");
457 //_____________________________________________________________________________
458 void AliTRDgeometryDetail::PositionReadout(Int_t ipla, Int_t icha)
461 // Position the volumina inside the readout mother volume
464 const Float_t kcaframeOff = 0.5;
466 Int_t nMCMrow = GetRowMax(ipla,icha,0);
469 Float_t xSize = GetChamberWidth(ipla) / ((Float_t) nMCMcol);
471 Float_t x0 = - GetChamberWidth(ipla) /2. + fgkCcthick;
475 ySize = GetChamberLengthO(ipla) / ((Float_t) nMCMrow);
476 y0 = fClengthI[ipla]/2. + fClengthM1[ipla] + fClengthO1[ipla]/2.
477 - GetChamberLengthO(ipla) / 2. + fgkCcthick;
480 ySize = GetChamberLengthM(ipla) / ((Float_t) nMCMrow);
481 y0 = fClengthI[ipla]/2. + fClengthM1[ipla]/2.
482 - GetChamberLengthM(ipla) / 2. + fgkCcthick;
485 ySize = GetChamberLengthI(ipla) / ((Float_t) nMCMrow);
486 y0 = - GetChamberLengthI(ipla) / 2. + fgkCcthick;
489 ySize = GetChamberLengthM(ipla) / ((Float_t) nMCMrow);
490 y0 = - fClengthI[ipla]/2. - fClengthM1[ipla]/2.
491 - GetChamberLengthM(ipla) / 2. + fgkCcthick;
494 ySize = GetChamberLengthO(ipla) / ((Float_t) nMCMrow);
495 y0 = - fClengthI[ipla]/2. - fClengthM1[ipla] - fClengthO1[ipla]/2.
496 - GetChamberLengthO(ipla) / 2. + fgkCcthick;
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++) {
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");
514 //_____________________________________________________________________________
515 void AliTRDgeometryDetail::CreateCooling(Int_t *idtmed)
518 // Create the volumina of the cooling
521 const Int_t kNparBox = 3;
523 Float_t parBox[kNparBox];
525 // The aluminum pipe for the cooling
529 gMC->Gsvolu("UCOA","BOX",idtmed[1324-1],parBox,0);
535 gMC->Gsvolu("UCOW","BOX",idtmed[1314-1],parBox,kNparBox);
537 // Water inside he cooling pipe
541 gMC->Gspos("UCOW",1,"UCOA",xpos,ypos,zpos,0,"ONLY");
545 //_____________________________________________________________________________
546 void AliTRDgeometryDetail::PositionCooling(Int_t ipla, Int_t icha)
549 // Position the volumina of the cooling
552 const Int_t kNpar = 3;
554 const Float_t kcaframeOff = 0.5;
561 Int_t iCopy = GetDetector(ipla,icha,0) * 100;
562 Int_t nMCMrow = GetRowMax(ipla,icha,0);
568 xSize = GetChamberLengthO(ipla) / ((Float_t) nMCMrow);
569 x0 = fClengthI[ipla]/2. + fClengthM1[ipla] + fClengthO1[ipla]/2.
570 - GetChamberLengthO(ipla) / 2. + fgkCcthick;
573 xSize = GetChamberLengthM(ipla) / ((Float_t) nMCMrow);
574 x0 = fClengthI[ipla]/2. + fClengthM1[ipla]/2.
575 - GetChamberLengthM(ipla) / 2. + fgkCcthick;
578 xSize = GetChamberLengthI(ipla) / ((Float_t) nMCMrow);
579 x0 = - GetChamberLengthI(ipla) / 2. + fgkCcthick;
582 xSize = GetChamberLengthM(ipla) / ((Float_t) nMCMrow);
583 x0 = - fClengthI[ipla]/2. - fClengthM1[ipla]/2.
584 - GetChamberLengthM(ipla) / 2. + fgkCcthick;
587 xSize = GetChamberLengthO(ipla) / ((Float_t) nMCMrow);
588 x0 = - fClengthI[ipla]/2. - fClengthM1[ipla] - fClengthO1[ipla]/2.
589 - GetChamberLengthO(ipla) / 2. + fgkCcthick;
593 // Position the cooling pipes
594 for (Int_t iMCMrow = 0; iMCMrow < nMCMrow; iMCMrow++) {
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;
603 gMC->Gsposp("UCOA",iCopy+iMCMrow,"TRD1",xpos,ypos,zpos,0,"ONLY",par,kNpar);