]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - TRD/AliTRDgeometryFull.cxx
two errors that the HP-UX compiler could not correct
[u/mrichter/AliRoot.git] / TRD / AliTRDgeometryFull.cxx
... / ...
CommitLineData
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$
18Revision 1.1.4.6 2000/10/15 23:40:01 cblume
19Remove AliTRDconst
20
21Revision 1.1.4.5 2000/10/06 16:49:46 cblume
22Made Getters const
23
24Revision 1.1.4.4 2000/10/04 16:34:58 cblume
25Replace include files by forward declarations
26
27Revision 1.1.4.3 2000/09/22 14:43:41 cblume
28Allow the pad/timebin-dimensions to be changed after initialization
29
30Revision 1.4 2000/10/02 21:28:19 fca
31Removal of useless dependecies via forward declarations
32
33Revision 1.3 2000/06/08 18:32:58 cblume
34Make code compliant to coding conventions
35
36Revision 1.2 2000/05/08 16:17:27 cblume
37Merge TRD-develop
38
39Revision 1.1.4.2 2000/05/08 14:46:44 cblume
40Include options SetPHOShole() and SetRICHhole()
41
42Revision 1.1.4.1 2000/04/27 12:46:04 cblume
43Corrected bug in full geometry
44
45Revision 1.1 2000/02/28 19:01:15 cblume
46Add new TRD classes
47
48*/
49
50///////////////////////////////////////////////////////////////////////////////
51// //
52// TRD geometry for the spaceframe without holes //
53// //
54///////////////////////////////////////////////////////////////////////////////
55
56#include "AliMC.h"
57
58#include "AliTRDgeometryFull.h"
59
60ClassImp(AliTRDgeometryFull)
61
62//_____________________________________________________________________________
63AliTRDgeometryFull::AliTRDgeometryFull():AliTRDgeometry()
64{
65 //
66 // AliTRDgeometryFull default constructor
67 //
68
69 Init();
70
71}
72
73//_____________________________________________________________________________
74AliTRDgeometryFull::~AliTRDgeometryFull()
75{
76 //
77 // AliTRDgeometryFull destructor
78 //
79
80}
81
82//_____________________________________________________________________________
83void AliTRDgeometryFull::Init()
84{
85 //
86 // Initializes the geometry parameter
87 //
88
89 Int_t iplan;
90
91 fPHOShole = kFALSE;
92 fRICHhole = kFALSE;
93
94 // The length of the inner chambers
95 for (iplan = 0; iplan < fgkNplan; iplan++)
96 fClengthI[iplan] = 110.0;
97
98 // The length of the middle chambers
99 fClengthM1[0] = 123.5;
100 fClengthM1[1] = 131.0;
101 fClengthM1[2] = 138.5;
102 fClengthM1[3] = 146.0;
103 fClengthM1[4] = 153.0;
104 fClengthM1[5] = 160.5;
105
106 fClengthM2[0] = 123.5 - 7.0;
107 fClengthM2[1] = 131.0 - 7.0;
108 fClengthM2[2] = 138.5 - 7.0;
109 fClengthM2[3] = 146.0 - 7.0;
110 fClengthM2[4] = 153.0 - 7.0;
111 fClengthM2[5] = 160.4 - 7.0;
112
113 // The length of the outer chambers
114 fClengthO1[0] = 123.5;
115 fClengthO1[1] = 131.0;
116 fClengthO1[2] = 134.5;
117 fClengthO1[3] = 142.0;
118 fClengthO1[4] = 142.0;
119 fClengthO1[5] = 134.5;
120
121 fClengthO2[0] = 123.5;
122 fClengthO2[1] = 131.0;
123 fClengthO2[2] = 134.5;
124 fClengthO2[3] = 142.0;
125 fClengthO2[4] = 142.0;
126 fClengthO2[5] = 134.5;
127
128 fClengthO3[0] = 86.5;
129 fClengthO3[1] = 101.5;
130 fClengthO3[2] = 112.5;
131 fClengthO3[3] = 127.5;
132 fClengthO3[4] = 134.5;
133 fClengthO3[5] = 134.5;
134
135 // The maximum number of pads
136 // and the position of pad 0,0,0
137 //
138 // chambers seen from the top:
139 // +----------------------------+
140 // | |
141 // | | ^
142 // | | rphi|
143 // | | |
144 // |0 | |
145 // +----------------------------+ +------>
146 // z
147 // chambers seen from the side: ^
148 // +----------------------------+ time|
149 // | | |
150 // |0 | |
151 // +----------------------------+ +------>
152 // z
153 //
154
155 // The pad row (z-direction)
156 SetRowPadSize(4.5);
157
158}
159
160//_____________________________________________________________________________
161void AliTRDgeometryFull::SetRowPadSize(Float_t size)
162{
163 //
164 // Redefines the pad size in row direction
165 //
166
167 fRowPadSize = size;
168
169 for (Int_t iplan = 0; iplan < fgkNplan; iplan++) {
170
171 for (Int_t isect = 0; isect < fgkNsect; isect++) {
172 Float_t clengthI = fClengthI[iplan];
173 Float_t clengthM = fClengthM1[iplan];
174 Float_t clengthO = fClengthO1[iplan];
175 switch (isect) {
176 case 12:
177 case 13:
178 case 14:
179 case 15:
180 case 16:
181 clengthM = fClengthM2[iplan];
182 clengthO = fClengthO2[iplan];
183 break;
184 case 4:
185 case 5:
186 case 6:
187 clengthO = fClengthO3[iplan];
188 break;
189 };
190 fRowMax[iplan][0][isect] = 1 + TMath::Nint((clengthO - 2. * fgkCcthick)
191 / fRowPadSize - 0.5);
192 fRowMax[iplan][1][isect] = 1 + TMath::Nint((clengthM - 2. * fgkCcthick)
193 / fRowPadSize - 0.5);
194 fRowMax[iplan][2][isect] = 1 + TMath::Nint((clengthI - 2. * fgkCcthick)
195 / fRowPadSize - 0.5);
196 fRowMax[iplan][3][isect] = 1 + TMath::Nint((clengthM - 2. * fgkCcthick)
197 / fRowPadSize - 0.5);
198 fRowMax[iplan][4][isect] = 1 + TMath::Nint((clengthO - 2. * fgkCcthick)
199 / fRowPadSize - 0.5);
200 fRow0[iplan][0][isect] = -clengthI/2. - clengthM - clengthO + fgkCcthick;
201 fRow0[iplan][1][isect] = -clengthI/2. - clengthM + fgkCcthick;
202 fRow0[iplan][2][isect] = -clengthI/2. + fgkCcthick;
203 fRow0[iplan][3][isect] = clengthI/2. + fgkCcthick;
204 fRow0[iplan][4][isect] = clengthI/2. + clengthM + fgkCcthick;
205 }
206
207 }
208
209}
210
211//_____________________________________________________________________________
212void AliTRDgeometryFull::CreateGeometry(Int_t *idtmed)
213{
214 //
215 // Create the TRD geometry without hole
216 //
217
218 Int_t iplan;
219
220 const Int_t kNparTrd = 4;
221 const Int_t kNparCha = 3;
222 const Int_t kNplan = fgkNplan;
223
224 Float_t parTrd[kNparTrd];
225 Float_t parCha[kNparCha];
226
227 Float_t xpos, ypos, zpos;
228
229 AliTRDgeometry::CreateGeometry(idtmed);
230
231 // The TRD mother volume for one sector (Air), full length in z-direction
232 parTrd[0] = fgkSwidth1/2.;
233 parTrd[1] = fgkSwidth2/2.;
234 parTrd[2] = fgkSlenTR1/2.;
235 parTrd[3] = fgkSheight/2.;
236 gMC->Gsvolu("TRD1","TRD1",idtmed[1302-1],parTrd,kNparTrd);
237
238 // The TRD mother volume for one sector (Air), leaving hole for PHOS
239 if (fPHOShole) {
240 gMC->Gsvolu("TRD2","TRD1",idtmed[1302-1],parTrd,kNparTrd);
241 }
242
243 // The TRD mother volume for one sector (Air), leaving hole for RICH
244 if (fRICHhole) {
245 gMC->Gsvolu("TRD3","TRD1",idtmed[1302-1],parTrd,kNparTrd);
246 }
247
248 // Position the chambers in the TRD mother volume
249 for (iplan = 1; iplan <= kNplan; iplan++) {
250
251 Float_t y1 = fClengthM1[iplan-1] - fClengthM2[iplan-1];
252 Float_t y2 = fClengthO1[iplan-1] - fClengthO3[iplan-1];
253
254 // The inner chambers ---------------------------------------------------------------
255
256 // the aluminum frame
257 parCha[0] = fCwidth[iplan-1]/2.;
258 parCha[1] = fClengthI[iplan-1]/2.;
259 parCha[2] = fgkCaframe/2.;
260 xpos = 0.;
261 ypos = 0.;
262 zpos = fgkCheight - fgkCaframe/2. - fgkSheight/2. + (iplan-1) * (fgkCheight + fgkCspace);
263 gMC->Gsposp("UAFI",iplan ,"TRD1",xpos,ypos,zpos,0,"MANY",parCha,kNparCha);
264
265 // the inner part of the aluminum frame
266 parCha[0] = fCwidth[iplan-1]/2. - fgkCathick;
267 parCha[1] = fClengthI[iplan-1]/2. - fgkCathick;
268 parCha[2] = fgkCaframe/2.;
269 xpos = 0.;
270 ypos = 0.;
271 zpos = fgkCheight - fgkCaframe/2. - fgkSheight/2. + (iplan-1) * (fgkCheight + fgkCspace);
272 gMC->Gsposp("UAII",iplan ,"TRD1",xpos,ypos,zpos,0,"ONLY",parCha,kNparCha);
273
274 // the carbon frame
275 parCha[0] = fCwidth[iplan-1]/2.;
276 parCha[1] = fClengthI[iplan-1]/2.;
277 parCha[2] = fgkCcframe/2.;
278 xpos = 0.;
279 ypos = 0.;
280 zpos = fgkCcframe/2. - fgkSheight/2. + (iplan-1) * (fgkCheight + fgkCspace);
281 gMC->Gsposp("UCFI",iplan ,"TRD1",xpos,ypos,zpos,0,"MANY",parCha,kNparCha);
282
283 // the inner part of the carbon frame
284 parCha[0] = fCwidth[iplan-1]/2. - fgkCcthick;
285 parCha[1] = fClengthI[iplan-1]/2. - fgkCcthick;
286 parCha[2] = fgkCcframe/2.;
287 xpos = 0.;
288 ypos = 0.;
289 zpos = fgkCcframe/2. - fgkSheight/2. + (iplan-1) * (fgkCheight + fgkCspace);
290 gMC->Gsposp("UCII",iplan ,"TRD1",xpos,ypos,zpos,0,"ONLY",parCha,kNparCha);
291
292 // The middle chambers --------------------------------------------------------------
293
294 // the aluminum frame
295 parCha[0] = fCwidth[iplan-1]/2.;
296 parCha[1] = fClengthM1[iplan-1]/2.;
297 parCha[2] = fgkCaframe/2.;
298 xpos = 0.;
299 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1]/2.;
300 zpos = fgkCheight - fgkCaframe/2. - fgkSheight/2. + (iplan-1) * (fgkCheight + fgkCspace);
301 gMC->Gsposp("UAFM",iplan ,"TRD1",xpos, ypos,zpos,0,"MANY",parCha,kNparCha);
302 gMC->Gsposp("UAFM",iplan+ fgkNplan,"TRD1",xpos,-ypos,zpos,0,"MANY",parCha,kNparCha);
303 if (fPHOShole) {
304 parCha[0] = fCwidth[iplan-1]/2.;
305 parCha[1] = fClengthM2[iplan-1]/2.;
306 parCha[2] = fgkCaframe/2.;
307 xpos = 0.;
308 ypos = fClengthI[iplan-1]/2. + fClengthM2[iplan-1]/2. + y1;
309 zpos = fgkCheight - fgkCaframe/2. - fgkSheight/2. + (iplan-1) * (fgkCheight + fgkCspace);
310 gMC->Gsposp("UAFM",iplan+2*kNplan,"TRD2",xpos, ypos,zpos,0,"MANY",parCha,kNparCha);
311 gMC->Gsposp("UAFM",iplan+3*kNplan,"TRD2",xpos,-ypos,zpos,0,"MANY",parCha,kNparCha);
312 }
313
314 // the inner part of the aluminum frame
315 parCha[0] = fCwidth[iplan-1]/2. - fgkCathick;
316 parCha[1] = fClengthM1[iplan-1]/2. - fgkCathick;
317 parCha[2] = fgkCaframe/2.;
318 xpos = 0.;
319 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1]/2.;
320 zpos = fgkCheight - fgkCaframe/2. - fgkSheight/2. + (iplan-1) * (fgkCheight + fgkCspace);
321 gMC->Gsposp("UAIM",iplan ,"TRD1",xpos, ypos,zpos,0,"ONLY",parCha,kNparCha);
322 gMC->Gsposp("UAIM",iplan+ fgkNplan,"TRD1",xpos,-ypos,zpos,0,"ONLY",parCha,kNparCha);
323 if (fPHOShole) {
324 parCha[0] = fCwidth[iplan-1]/2. - fgkCathick;
325 parCha[1] = fClengthM2[iplan-1]/2. - fgkCathick;
326 parCha[2] = fgkCaframe/2.;
327 xpos = 0.;
328 ypos = fClengthI[iplan-1]/2. + fClengthM2[iplan-1]/2. + y1;
329 zpos = fgkCheight - fgkCaframe/2. - fgkSheight/2. + (iplan-1) * (fgkCheight + fgkCspace);
330 gMC->Gsposp("UAIM",iplan+2*kNplan,"TRD2",xpos, ypos,zpos,0,"ONLY",parCha,kNparCha);
331 gMC->Gsposp("UAIM",iplan+3*kNplan,"TRD2",xpos,-ypos,zpos,0,"ONLY",parCha,kNparCha);
332 }
333
334 // the carbon frame
335 parCha[0] = fCwidth[iplan-1]/2.;
336 parCha[1] = fClengthM1[iplan-1]/2.;
337 parCha[2] = fgkCcframe/2.;
338 xpos = 0.;
339 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1]/2.;
340 zpos = fgkCcframe/2. - fgkSheight/2. + (iplan-1) * (fgkCheight + fgkCspace);
341 gMC->Gsposp("UCFM",iplan ,"TRD1",xpos, ypos,zpos,0,"MANY",parCha,kNparCha);
342 gMC->Gsposp("UCFM",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"MANY",parCha,kNparCha);
343 if (fPHOShole) {
344 parCha[0] = fCwidth[iplan-1]/2.;
345 parCha[1] = fClengthM2[iplan-1]/2.;
346 parCha[2] = fgkCcframe/2.;
347 xpos = 0.;
348 ypos = fClengthI[iplan-1]/2. + fClengthM2[iplan-1]/2. + y1;
349 zpos = fgkCcframe/2. - fgkSheight/2. + (iplan-1) * (fgkCheight + fgkCspace);
350 gMC->Gsposp("UCFM",iplan+2*kNplan,"TRD2",xpos, ypos,zpos,0,"MANY",parCha,kNparCha);
351 gMC->Gsposp("UCFM",iplan+3*kNplan,"TRD2",xpos,-ypos,zpos,0,"MANY",parCha,kNparCha);
352 }
353
354 // the inner part of the carbon frame
355 parCha[0] = fCwidth[iplan-1]/2. - fgkCcthick;
356 parCha[1] = fClengthM1[iplan-1]/2. - fgkCcthick;
357 parCha[2] = fgkCcframe/2.;
358 xpos = 0.;
359 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1]/2.;
360 zpos = fgkCcframe/2. - fgkSheight/2. + (iplan-1) * (fgkCheight + fgkCspace);
361 gMC->Gsposp("UCIM",iplan ,"TRD1",xpos, ypos,zpos,0,"ONLY",parCha,kNparCha);
362 gMC->Gsposp("UCIM",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"ONLY",parCha,kNparCha);
363 if (fPHOShole) {
364 parCha[0] = fCwidth[iplan-1]/2. - fgkCcthick;
365 parCha[1] = fClengthM2[iplan-1]/2. - fgkCcthick;
366 parCha[2] = fgkCcframe/2.;
367 xpos = 0.;
368 ypos = fClengthI[iplan-1]/2. + fClengthM2[iplan-1]/2. + y1;
369 zpos = fgkCcframe/2. - fgkSheight/2. + (iplan-1) * (fgkCheight + fgkCspace);
370 gMC->Gsposp("UCIM",iplan+2*kNplan,"TRD2",xpos, ypos,zpos,0,"ONLY",parCha,kNparCha);
371 gMC->Gsposp("UCIM",iplan+3*kNplan,"TRD2",xpos,-ypos,zpos,0,"ONLY",parCha,kNparCha);
372 }
373
374 // The outer chambers ---------------------------------------------------------------
375
376 // the aluminum frame
377 parCha[0] = fCwidth[iplan-1]/2.;
378 parCha[1] = fClengthO1[iplan-1]/2.;
379 parCha[2] = fgkCaframe/2.;
380 xpos = 0.;
381 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO1[iplan-1]/2.;
382 zpos = fgkCheight - fgkCaframe/2. - fgkSheight/2. + (iplan-1) * (fgkCheight + fgkCspace);
383 gMC->Gsposp("UAFO",iplan ,"TRD1",xpos, ypos,zpos,0,"MANY",parCha,kNparCha);
384 gMC->Gsposp("UAFO",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"MANY",parCha,kNparCha);
385 if (fPHOShole) {
386 parCha[0] = fCwidth[iplan-1]/2.;
387 parCha[1] = fClengthO2[iplan-1]/2.;
388 parCha[2] = fgkCaframe/2.;
389 xpos = 0.;
390 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO2[iplan-1]/2.;
391 zpos = fgkCheight - fgkCaframe/2. - fgkSheight/2. + (iplan-1) * (fgkCheight + fgkCspace);
392 gMC->Gsposp("UAFO",iplan+2*kNplan,"TRD2",xpos, ypos,zpos,0,"MANY",parCha,kNparCha);
393 gMC->Gsposp("UAFO",iplan+3*kNplan,"TRD2",xpos,-ypos,zpos,0,"MANY",parCha,kNparCha);
394 }
395 if (fRICHhole) {
396 parCha[0] = fCwidth[iplan-1]/2.;
397 parCha[1] = fClengthO3[iplan-1]/2.;
398 parCha[2] = fgkCaframe/2.;
399 xpos = 0.;
400 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO3[iplan-1]/2. + y2;
401 zpos = fgkCheight - fgkCaframe/2. - fgkSheight/2. + (iplan-1) * (fgkCheight + fgkCspace);
402 gMC->Gsposp("UAFO",iplan+4*kNplan,"TRD3",xpos, ypos,zpos,0,"MANY",parCha,kNparCha);
403 gMC->Gsposp("UAFO",iplan+5*kNplan,"TRD3",xpos,-ypos,zpos,0,"MANY",parCha,kNparCha);
404 }
405
406 // the inner part of the aluminum frame
407 parCha[0] = fCwidth[iplan-1]/2. - fgkCathick;
408 parCha[1] = fClengthO1[iplan-1]/2. - fgkCathick;
409 parCha[2] = fgkCaframe/2.;
410 xpos = 0.;
411 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO1[iplan-1]/2.;
412 zpos = fgkCheight - fgkCaframe/2. - fgkSheight/2. + (iplan-1) * (fgkCheight + fgkCspace);
413 gMC->Gsposp("UAIO",iplan ,"TRD1",xpos, ypos,zpos,0,"ONLY",parCha,kNparCha);
414 gMC->Gsposp("UAIO",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"ONLY",parCha,kNparCha);
415 if (fPHOShole) {
416 parCha[0] = fCwidth[iplan-1]/2. - fgkCathick;
417 parCha[1] = fClengthO2[iplan-1]/2. - fgkCathick;
418 parCha[2] = fgkCaframe/2.;
419 xpos = 0.;
420 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO2[iplan-1]/2.;
421 zpos = fgkCheight - fgkCaframe/2. - fgkSheight/2. + (iplan-1) * (fgkCheight + fgkCspace);
422 gMC->Gsposp("UAIO",iplan+2*kNplan,"TRD2",xpos, ypos,zpos,0,"ONLY",parCha,kNparCha);
423 gMC->Gsposp("UAIO",iplan+3*kNplan,"TRD2",xpos,-ypos,zpos,0,"ONLY",parCha,kNparCha);
424 }
425 if (fRICHhole) {
426 parCha[0] = fCwidth[iplan-1]/2. - fgkCathick;
427 parCha[1] = fClengthO3[iplan-1]/2. - fgkCathick;
428 parCha[2] = fgkCaframe/2.;
429 xpos = 0.;
430 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO3[iplan-1]/2. + y2;
431 zpos = fgkCheight - fgkCaframe/2. - fgkSheight/2. + (iplan-1) * (fgkCheight + fgkCspace);
432 gMC->Gsposp("UAIO",iplan+4*kNplan,"TRD3",xpos, ypos,zpos,0,"ONLY",parCha,kNparCha);
433 gMC->Gsposp("UAIO",iplan+5*kNplan,"TRD3",xpos,-ypos,zpos,0,"ONLY",parCha,kNparCha);
434 }
435
436 // the carbon frame
437 parCha[0] = fCwidth[iplan-1]/2.;
438 parCha[1] = fClengthO1[iplan-1]/2.;
439 parCha[2] = fgkCcframe/2.;
440 xpos = 0.;
441 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO1[iplan-1]/2.;
442 zpos = fgkCcframe/2. - fgkSheight/2. + (iplan-1) * (fgkCheight + fgkCspace);
443 gMC->Gsposp("UCFO",iplan, "TRD1",xpos, ypos,zpos,0,"MANY",parCha,kNparCha);
444 gMC->Gsposp("UCFO",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"MANY",parCha,kNparCha);
445 if (fPHOShole) {
446 parCha[0] = fCwidth[iplan-1]/2.;
447 parCha[1] = fClengthO2[iplan-1]/2.;
448 parCha[2] = fgkCcframe/2.;
449 xpos = 0.;
450 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO2[iplan-1]/2.;
451 zpos = fgkCcframe/2. - fgkSheight/2. + (iplan-1) * (fgkCheight + fgkCspace);
452 gMC->Gsposp("UCFO",iplan+2*kNplan,"TRD2",xpos, ypos,zpos,0,"MANY",parCha,kNparCha);
453 gMC->Gsposp("UCFO",iplan+3*kNplan,"TRD2",xpos,-ypos,zpos,0,"MANY",parCha,kNparCha);
454 }
455 if (fRICHhole) {
456 parCha[0] = fCwidth[iplan-1]/2.;
457 parCha[1] = fClengthO3[iplan-1]/2.;
458 parCha[2] = fgkCcframe/2.;
459 xpos = 0.;
460 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO3[iplan-1]/2. + y2;
461 zpos = fgkCcframe/2. - fgkSheight/2. + (iplan-1) * (fgkCheight + fgkCspace);
462 gMC->Gsposp("UCFO",iplan+4*kNplan,"TRD3",xpos, ypos,zpos,0,"MANY",parCha,kNparCha);
463 gMC->Gsposp("UCFO",iplan+5*kNplan,"TRD3",xpos,-ypos,zpos,0,"MANY",parCha,kNparCha);
464 }
465
466 // the inner part of the carbon frame
467 parCha[0] = fCwidth[iplan-1]/2. - fgkCcthick;
468 parCha[1] = fClengthO1[iplan-1]/2. - fgkCcthick;
469 parCha[2] = fgkCcframe/2.;
470 xpos = 0.;
471 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO1[iplan-1]/2.;
472 zpos = fgkCcframe/2. - fgkSheight/2. + (iplan-1) * (fgkCheight + fgkCspace);
473 gMC->Gsposp("UCIO",iplan ,"TRD1",xpos, ypos,zpos,0,"ONLY",parCha,kNparCha);
474 gMC->Gsposp("UCIO",iplan+ kNplan,"TRD1",xpos,-ypos,zpos,0,"ONLY",parCha,kNparCha);
475 if (fPHOShole) {
476 parCha[0] = fCwidth[iplan-1]/2. - fgkCcthick;
477 parCha[1] = fClengthO2[iplan-1]/2. - fgkCcthick;
478 parCha[2] = fgkCcframe/2.;
479 xpos = 0.;
480 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO2[iplan-1]/2.;
481 zpos = fgkCcframe/2. - fgkSheight/2. + (iplan-1) * (fgkCheight + fgkCspace);
482 gMC->Gsposp("UCIO",iplan+2*kNplan,"TRD2",xpos, ypos,zpos,0,"ONLY",parCha,kNparCha);
483 gMC->Gsposp("UCIO",iplan+3*kNplan,"TRD2",xpos,-ypos,zpos,0,"ONLY",parCha,kNparCha);
484 }
485 if (fRICHhole) {
486 parCha[0] = fCwidth[iplan-1]/2. - fgkCcthick;
487 parCha[1] = fClengthO3[iplan-1]/2. - fgkCcthick;
488 parCha[2] = fgkCcframe/2.;
489 xpos = 0.;
490 ypos = fClengthI[iplan-1]/2. + fClengthM1[iplan-1] + fClengthO3[iplan-1]/2. + y2;
491 zpos = fgkCcframe/2. - fgkSheight/2. + (iplan-1) * (fgkCheight + fgkCspace);
492 gMC->Gsposp("UCIO",iplan+4*kNplan,"TRD3",xpos, ypos,zpos,0,"ONLY",parCha,kNparCha);
493 gMC->Gsposp("UCIO",iplan+5*kNplan,"TRD3",xpos,-ypos,zpos,0,"ONLY",parCha,kNparCha);
494 }
495
496 }
497
498 xpos = 0.;
499 ypos = 0.;
500 zpos = 0.;
501 gMC->Gspos("TRD1",1,"BTR1",xpos,ypos,zpos,0,"ONLY");
502 if (fPHOShole)
503 gMC->Gspos("TRD2",2,"BTR2",xpos,ypos,zpos,0,"ONLY");
504 else
505 gMC->Gspos("TRD1",2,"BTR2",xpos,ypos,zpos,0,"ONLY");
506 if (fRICHhole)
507 gMC->Gspos("TRD3",3,"BTR3",xpos,ypos,zpos,0,"ONLY");
508 else
509 gMC->Gspos("TRD1",3,"BTR3",xpos,ypos,zpos,0,"ONLY");
510
511}