5d9cfc0a4e0bc628de7d3fa4812357d75ca404a9
[u/mrichter/AliRoot.git] / ITS / AliITSv3.cxx
1 ///////////////////////////////////////////////////////////////////////////////
2 //                                                                           //
3 //  Inner Traking System version 3                                           //
4 //                                                                           //
5 //Begin_Html
6 /*
7 <img src="picts/AliITSv3Class.gif">
8 </pre>
9 <br clear=left>
10 <font size=+2 color=red>
11 <p>The responsible person for this module is
12 <a href="mailto:roberto.barbera@ct.infn.it">Roberto Barbera</a>.
13 </font>
14 <pre>
15 */
16 //End_Html
17 //                                                                           //
18 ///////////////////////////////////////////////////////////////////////////////
19  
20 #include <TMath.h>
21 #include <TRandom.h>
22 #include <TVector.h>
23 #include "AliITSv3.h"
24 #include "AliRun.h"
25
26 #include "AliMC.h"
27 #include "AliConst.h"
28
29 ClassImp(AliITSv3)
30  
31 //_____________________________________________________________________________
32 AliITSv3::AliITSv3() : AliITS() 
33 {
34   //
35   // Default constructor for ITS
36   //
37   fMinorVersion=1;
38 }
39  
40 //_____________________________________________________________________________
41 AliITSv3::AliITSv3(const char *name, const char *title)
42   : AliITS(name, title)
43 {
44   //
45   // Standard constructor for ITS
46   // 
47   fMinorVersion=1;
48 }
49  
50 //_____________________________________________________________________________
51 void AliITSv3::CreateGeometry()
52 {
53   //
54   // Create ITS geometry for version 3
55   //
56   //Begin_Html
57   /*
58     <img src="picts/AliITSv3Tree.gif">
59   */
60   //End_Html
61   //Begin_Html
62   /*
63     <img src="picts/AliITSv3.gif">
64   */
65   //End_Html
66
67   AliMC* pMC = AliMC::GetMC();
68   
69   const Float_t xx[14] = { 0.,0.,-14.002,-6.288,-25.212,-16.292,-35.713,-26.401,
70                            -45.34,-36.772,-18.74,-12.814,-14.358,0. };
71   const Float_t yy[14] = { 0.,27.056,31.408,
72                            25.019,27.768,22.664,22.42,18.727,15.479,13.68,-9.984,-6.175,-3.775,0. };
73   const Float_t xbeg[13] = { 0.,-.352,-12.055,-8.755,-23.035,-19.085,-33.362,
74                              -28.859,-42.774,-36.644,-18.352,-13.085,-13.426 };
75   const Float_t ybeg[13] = { .386,27.165,29.795,
76                              25.377,26.48,22.632,21.487,18.305,14.94,13.509,-9.735,-5.755,-3.53 };
77   const Float_t xend[13] = { 0.,-11.588,-8.208,-22.709,-18.738,-33.184,-28.719,
78                              -42.756,-37.027,-19.002,-13.235,-13.837,-.373 };
79   const Float_t yend[13] = { 26.688,30.658,26.609,
80                              27.405,23.935,22.452,19.646,15.922,13.733,-9.639,-6.446,-4.585,-.098 };
81   const Float_t xarc[13] = { -.5,-13.248,-13.505,-18.622,-37.171,-42.671,-28.977,
82                              -33.178,-19.094,-22.781,-8.655,-11.736,-.5 };
83   const Float_t yarc[13] = { .5,-4.093,-5.911,
84                              -9.2,13.162,15.543,19.109,22.066,23.446,27.024,26.184,30.294,26.802 };
85   const Float_t rarc[13] = { .5,.7,.5,.5,.7,.5,.7,.5,.7,.5,.7,.5,.5 };
86   const Float_t rr    = 4.064516;
87   const Float_t tteta = 63.;
88   const Float_t pphi  = -35.;
89   const Float_t gteta = 87.78;
90   const Double_t degrad = kPI/180.;
91   const Double_t raddeg = 180./kPI;
92   const Double_t twopi = 2*kPI;
93   
94   Double_t biga, bigb;
95   Float_t dcei[3], dela[3], dchi[3], dpcb[3], darc[5], dfra[10], dcer[3], dkap[3], dpla[3],
96     xccc, yccc, aphi, dcop[3], dtra[3], dsil[3], atheta1011, dbus[3], dtub[3], dwat[3],
97     depx[3], dits[3], atheta1314, atheta1213, atheta1112, dsup[3], xtra[8], ytra[8], ztra[8], dsrv[3];
98   Double_t biga1, bigb1;
99   Float_t runo, xpos, ypos, zpos, rtwo, aphi1, aphi2, dtra1[3], dtra2[3], dtra3[3],
100     dtra4[3], dbox1[3], dbox2[3];
101   Int_t jbox1, jbox2;
102   Float_t xtra1[6], ytra1[6], ztra1[6];
103   Int_t i;
104   Float_t xpos1, ypos1;
105   Int_t j;
106   Float_t angle, dcone[5], dtube[3], dpgon[10];
107   Float_t rzero, xzero, yzero;
108   Double_t coeffa, coeffb, coeffc;
109   Int_t idrotm[5250];
110   Float_t atheta, offset;
111   Float_t offset1, offset2, dgh[15];
112   Float_t xcc, ycc, sep, atheta12, atheta23, atheta34, atheta45, atheta56, 
113     atheta67, atheta78, atheta89, xxm, dal1[3], dal2[3];
114   //Float_t yos;
115   Float_t r1, r2, r3;
116   Double_t xcc1, ycc1, xcc2, ycc2;
117   Float_t atheta910;
118   const char natra[][5] = 
119   { "TR01","TR02","TR03","TR04","TR05","TR06","TR07","TR08"};
120   const char natra1[][5] =
121   {"TR11","TR12","TR13","TR14","TR15","TR16","TR17","TR18",
122    "TR19","TR20","TR21","TR22","TR23","TR24","TR25","TR26"};
123   const char natra2[][5] = 
124   {"TR31","TR32","TR33","TR34","TR35","TR36"};
125   const char natra3[][5] = 
126   {"TR41","TR42","TR43","TR44","TR45","TR46"};
127   const char natra4[][5] = 
128   {"TR51","TR52","TR53","TR54","TR55","TR56","TR57","TR58",
129    "TR59","TR60","TR61","TR62","TR63","TR64","TR65","TR66"};
130   
131   Int_t *idtmed = fIdtmed->GetArray()-199;
132   
133   // --- Define a ghost volume containing the whole ITS and fill it with air
134   //     or vacuum 
135   
136   dgh[0] = 0;
137   dgh[1] = 360;
138   dgh[2] = 4;
139   dgh[3] = -70;
140   dgh[4] = 49.999;
141   dgh[5] = 49.999;
142   dgh[6] = -25;
143   dgh[7] = 3;
144   dgh[8] = 49.999;
145   dgh[9] = 25;
146   dgh[10] = 3;
147   dgh[11] = 49.999;
148   dgh[12] = 70;
149   dgh[13] = 49.999;
150   dgh[14] = 49.999;
151   pMC->Gsvolu("ITSV", "PCON", idtmed[275], dgh, 15);
152   
153   // --- Place the ghost volume in its mother volume (ALIC) and make it 
154   //     invisible 
155   
156   pMC->Gspos("ITSV", 1, "ALIC", 0., 0., 0., 0, "ONLY");
157   pMC->Gsatt("ITSV", "SEEN", 0);
158   
159   //************************************************************************
160   //*                                                                      *
161   //*                               P I X E L S                            *
162   //*                               ===========                            *
163   //*                                                                      *
164   //************************************************************************
165   
166   //        GOTO 2345             ! skip ITS layer no. 1 and 2 
167   
168   // --- Define a ghost volume containing the Silicon Pixel Detectors 
169   //     (layer #1 and #2) and fill it with air or vacuum 
170   
171   xxm    = (49.999-3)/(70-25);
172   dgh[0] = 0.;
173   dgh[1] = 360;
174   dgh[2] = 4;
175   dgh[3] = -25.-(9.-3.01)/xxm;
176   dgh[4] = 9;
177   dgh[5] = 9;
178   dgh[6] = -25;
179   dgh[7] = 3.01;
180   dgh[8] = 9;
181   dgh[9] = 25;
182   dgh[10] = 3.01;
183   dgh[11] = 9;
184   dgh[12] = 25+(9-3.01)/xxm;
185   dgh[13] = 9;
186   dgh[14] = 9;
187   pMC->Gsvolu("IT12", "PCON", idtmed[275], dgh, 15);
188   
189   // --- Place the ghost volume in its mother volume (ITSV) and make it 
190   //     invisible 
191   
192   pMC->Gspos("IT12", 1, "ITSV", 0., 0., 0., 0, "ONLY");
193   pMC->Gsatt("IT12", "SEEN", 0);
194   
195   // --- Define a ghost volume containing a single element of layer #1 
196   //     and fill it with air or vacuum 
197   
198   dbox1[0] = 0.005+0.01+0.0075;
199   dbox1[1] = .79;
200   dbox1[2] = 12.67;
201   pMC->Gsvolu("IPV1", "BOX ", idtmed[203], dbox1, 3);
202   
203   //--- Divide each element of layer #1 in three ladders along the beam direction
204   
205   pMC->Gsdvn("IPB1", "IPV1", 3, 3);
206   
207   // --- Make the ghost volumes invisible 
208   
209   pMC->Gsatt("IPV1", "SEEN", 0);
210   pMC->Gsatt("IPB1", "SEEN", 0);
211   
212   // --- Define a volume containing the chip of pixels (silicon, layer #1) 
213   
214   dchi[0] = .005;
215   dchi[1] = .79;
216   dchi[2] = dbox1[2] / 3.;
217   pMC->Gsvolu("ICH1", "BOX ", idtmed[200], dchi, 3);
218   
219   // --- Define a volume containing the bus of pixels (silicon, layer #1) 
220   
221   dbus[0] = .01;
222   dbus[1] = .64;
223   dbus[2] = 4.19;
224   pMC->Gsvolu("IBU1", "BOX ", idtmed[201], dbus, 3);
225   
226   // --- Define a volume containing the sensitive part of pixels 
227   //     (silicon, layer #1) 
228   
229   dits[0] = .0075;
230   dits[1] = .64;
231   dits[2] = 4.19;
232   pMC->Gsvolu("ITS1", "BOX ", idtmed[199], dits, 3);
233   
234   // --- Place the chip into its mother (IPB1) 
235   
236   xpos = dbox1[0] - dchi[0];
237   ypos = 0.;
238   zpos = 0.;
239   pMC->Gspos("ICH1", 1, "IPB1", xpos, ypos, zpos, 0, "ONLY");
240   
241   // --- Place the sensitive volume into its mother (IPB1) 
242   
243   xpos = dbox1[0] - dchi[0] * 2. - dits[0];
244   ypos = dchi[1] - dits[1];
245   zpos = -(dchi[2] - dits[2]);
246   pMC->Gspos("ITS1", 1, "IPB1", xpos, ypos, zpos, 0, "ONLY");
247   
248   // --- Place the bus into its mother (IPB1) 
249   
250   xpos = dbox1[0] - dchi[0] * 2. - dits[0] * 2. - dbus[0];
251   ypos = dchi[1] - dbus[1];
252   zpos = -(dchi[2] - dbus[2]);
253   pMC->Gspos("IBU1", 1, "IPB1", xpos, ypos, zpos, 0, "ONLY");
254
255   // --- Define a ghost volume containing a single element of layer #2 
256   //     and fill it with air or vacuum 
257   
258   dbox2[0] = 0.005+0.01+0.0075;
259   dbox2[1] = .79;
260   dbox2[2] = 16.91;
261   pMC->Gsvolu("IPV2", "BOX ", idtmed[203], dbox2, 3);
262   
263   //--- Divide each element of layer #2 in four ladders along the beam direction
264   
265   pMC->Gsdvn("IPB2", "IPV2", 4, 3);
266   
267   // --- Make the ghost volumes invisible 
268   
269   pMC->Gsatt("IPV2", "SEEN", 0);
270   pMC->Gsatt("IPB2", "SEEN", 0);
271   
272   // --- Define a volume containing the chip of pixels (silicon, layer #2) 
273   
274   dchi[0] = .005;
275   dchi[1] = .79;
276   dchi[2] = dbox2[2] / 4.;
277   pMC->Gsvolu("ICH2", "BOX ", idtmed[200], dchi, 3);
278   
279   // --- Define a volume containing the bus of pixels (silicon, layer #2) 
280   
281   dbus[0] = .01;
282   dbus[1] = .64;
283   dbus[2] = 4.19;
284   pMC->Gsvolu("IBU2", "BOX ", idtmed[201], dbus, 3);
285   
286   // --- Define a volume containing the sensitive part of pixels 
287   //     (silicon, layer #2) 
288   
289   dits[0] = .0075;
290   dits[1] = .64;
291   dits[2] = 4.19;
292   pMC->Gsvolu("ITS2", "BOX ", idtmed[199], dits, 3);
293   
294   // --- Place the chip into its mother (IPB2) 
295   
296   xpos = dbox1[0] - dbus[0] * 2. - dits[0] * 2. - dchi[0];
297   ypos = 0.;
298   zpos = 0.;
299   pMC->Gspos("ICH2", 1, "IPB2", xpos, ypos, zpos, 0, "ONLY");
300   
301   // --- Place the sensitive volume into its mother (IPB2) 
302   
303   xpos = dbox1[0] - dbus[0] * 2. - dits[0];
304   ypos = -(dchi[1] - dits[1]);
305   zpos = -(dchi[2] - dits[2]);
306   pMC->Gspos("ITS2", 1, "IPB2", xpos, ypos, zpos, 0, "ONLY");
307   
308   // --- Place the bus into its mother (IPB2) 
309   
310   xpos = dbox1[0] - dbus[0];
311   ypos = -(dchi[1] - dbus[1]);
312   zpos = -(dchi[2] - dbus[2]);
313   pMC->Gspos("IBU2", 1, "IPB2", xpos, ypos, zpos, 0, "ONLY");
314   
315   // --- Define a generic segment of an element of the mechanical support 
316   
317   dsup[0] = 0.;
318   dsup[1] = 0.;
319   dsup[2] = 0.;
320   pMC->Gsvolu("SPIX", "BOX ", idtmed[202], dsup, 0);
321   
322   // --- Define a generic arc of an element of the mechanical support 
323   
324   darc[0] = 0.;
325   darc[1] = 0.;
326   darc[2] = 0.;
327   pMC->Gsvolu("SARC", "TUBS", idtmed[202], darc, 0);
328   
329   // --- Define the mechanical supports of layers #1 and #2 and place the 
330   //     elements of the layers in it 
331   
332   jbox1 = 0;
333   // counter over the number of elements of layer #1 ( 
334   jbox2 = 0;
335   
336   // counter over the number of elements of layer #2 ( 
337   for (i = 1; i <= 10; ++i) {
338     
339     // --- Place part # 1-2 (see sketch) 
340     
341     // number of carbon fiber supports (see sketch) 
342     offset1 = -35.;
343     dsup[0] = .01;
344     dsup[1] = TMath::Sqrt((xend[0] - xbeg[0]) * (xend[0] - xbeg[0]) + (yend[0] - ybeg[0]) * (yend[0] - ybeg[0])) / 20.;
345     dsup[2] = 25.;
346     xcc     = (xx[0] + xx[1]) / 20.;
347     ycc     = (yy[0] + yy[1]) / 20.;
348     xccc    = (xbeg[0] + xend[0]) / 20.;
349     yccc    = (ybeg[0] + yend[0]) / 20.;
350     if (xx[0] == xx[1]) {
351       offset2 = 0.;
352     } else {
353       r1 = yy[1] - yy[0];
354       r2 = xx[1] - xx[0];
355       offset2 = TMath::ATan2(r1, r2) * raddeg - 90.;
356     }
357     aphi  = (pphi + (i-1) * 36.) * degrad;
358     xzero = rr * TMath::Cos((tteta + (i-1) * 36.) * degrad);
359     yzero = rr * TMath::Sin((tteta + (i-1) * 36.) * degrad);
360     xpos1 = xccc * TMath::Cos(aphi) - yccc * TMath::Sin(aphi) + xzero;
361     ypos1 = xccc * TMath::Sin(aphi) + yccc * TMath::Cos(aphi) + yzero;
362     xpos  = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
363     ypos  = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
364     zpos  = 0.;
365     atheta12 = (i-1) * 36. + offset1 + offset2 - gteta;
366     AliMatrix(idrotm[(i-1) * 13 + 1100], 90., atheta12, 90., atheta12 + 90., 0., 0.);
367     pMC->Gsposp("SPIX", (i-1) * 13 + 1, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1100], "ONLY", dsup, 3);
368     
369     // --- Place part # 2-3 (see sketch) 
370     
371     offset1 = -35.;
372     dsup[0] = .01;
373     dsup[1] = TMath::Sqrt((xend[1] - xbeg[1]) * (xend[1] - xbeg[1]) + (yend[1] - ybeg[1]) * (yend[1] - ybeg[1])) / 20.;
374     dsup[2] = 25.;
375     xcc     = (xx[1] + xx[2]) / 20.;
376     ycc     = (yy[1] + yy[2]) / 20.;
377     xccc    = (xbeg[1] + xend[1]) / 20.;
378     yccc    = (ybeg[1] + yend[1]) / 20.;
379     if (xx[1] == xx[2]) {
380       offset2 = 0.;
381     } else {
382       r1 = yy[2] - yy[1];
383       r2 = xx[2] - xx[1];
384       offset2 = TMath::ATan2(r1, r2) * raddeg - 90.;
385     }
386     aphi  = (pphi + (i-1) * 36.) * degrad;
387     xzero = rr * TMath::Cos((tteta + (i-1) * 36.) * degrad);
388     yzero = rr * TMath::Sin((tteta + (i-1) * 36.) * degrad);
389     xpos1 = xccc * TMath::Cos(aphi) - yccc * TMath::Sin(aphi) + xzero;
390     ypos1 = xccc * TMath::Sin(aphi) + yccc * TMath::Cos(aphi) + yzero;
391     xpos  = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
392     ypos  = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
393     zpos  = 0.;
394     atheta23 = (i-1) * 36. + offset1 + offset2 - gteta;
395     AliMatrix(idrotm[(i-1) * 13 + 1101], 90., atheta23, 90., atheta23 + 90., 0., 0.);
396     pMC->Gsposp("SPIX", (i-1) * 13 + 2, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1101], "ONLY", dsup, 3);
397     
398     // --- Place an element of layer #2 
399     
400     biga   = (yy[2] - yy[1]) / (xx[2] - xx[1]);
401     bigb   = (xx[2] * yy[1] - xx[1] * yy[2]) / (xx[2] - xx[1]) / 10.;
402     coeffa = biga * biga + 1.;
403     coeffb = biga * bigb - biga * ycc - xcc;
404     coeffc = xcc * xcc + ycc * ycc - ycc * 2. * bigb + bigb * bigb - 0.08964*0.08964;
405     xcc1   = (-coeffb + TMath::Sqrt(coeffb * coeffb - coeffa * coeffc)) / coeffa;
406     ycc1   = biga * xcc1 + bigb;
407     biga1  = -1. / biga;
408     bigb1  = xcc1 / biga + ycc1;
409     coeffa = biga1 * biga1 + 1.;
410     coeffb = biga1 * bigb1 - biga1 * ycc1 - xcc1;
411     coeffc = xcc1 * xcc1 + ycc1 * ycc1 - ycc1 * 2. * bigb1 + bigb1 * bigb1 - (dsup[0] + dbox2[0]) * (dsup[0] + dbox2[0]);
412     xcc2   = (-coeffb + TMath::Sqrt(coeffb * coeffb - coeffa * coeffc)) / coeffa;
413     ycc2   = biga1 * xcc2 + bigb1;
414     xpos1  = xcc2 * TMath::Cos(aphi) - ycc2 * TMath::Sin(aphi) + xzero;
415     ypos1  = xcc2 * TMath::Sin(aphi) + ycc2 * TMath::Cos(aphi) + yzero;
416     xpos   = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
417     ypos   = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
418     zpos  = 0.;
419     ++jbox2;
420     pMC->Gspos("IPV2", jbox2, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1101], "ONLY");
421     
422     // --- Place part # 3-4 (see sketch) 
423     
424     offset1 = -35.;
425     dsup[0] = .01;
426     dsup[1] = TMath::Sqrt((xend[2] - xbeg[2]) * (xend[2] - xbeg[2]) + (yend[2] - ybeg[2]) * (yend[2] - ybeg[2])) / 20.;
427     dsup[2] = 25.;
428     xcc     = (xx[1] + xx[2]) / 20.;
429     ycc     = (yy[1] + yy[2]) / 20.;
430     xccc    = (xbeg[2] + xend[2]) / 20.;
431     yccc    = (ybeg[2] + yend[2]) / 20.;
432     if (xx[2] == xx[3]) {
433       offset2 = 0.;
434     } else {
435       r1 = yy[3] - yy[2];
436       r2 = xx[3] - xx[2];
437       offset2 = TMath::ATan2(r1, r2) * raddeg - 90.;
438     }
439     aphi  = (pphi + (i-1) * 36.) * degrad;
440     xzero = rr * TMath::Cos((tteta + (i-1) * 36.) * degrad);
441     yzero = rr * TMath::Sin((tteta + (i-1) * 36.) * degrad);
442     xpos1 = xccc * TMath::Cos(aphi) - yccc * TMath::Sin(aphi) + xzero;
443     ypos1 = xccc * TMath::Sin(aphi) + yccc * TMath::Cos(aphi) + yzero;
444     xpos  = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
445     ypos  = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
446     zpos  = 0.;
447     atheta34 = (i-1) * 36. + offset1 + offset2 - gteta;
448     AliMatrix(idrotm[(i-1) * 13 + 1102], 90., atheta34, 90., atheta34 + 90., 0., 0.);
449     pMC->Gsposp("SPIX", (i-1) * 13 + 3, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1102], "ONLY", dsup, 3);
450     
451     // --- Place part # 4-5 (see sketch) 
452     
453     offset1 = -35.;
454     dsup[0] = .01;
455     dsup[1] = TMath::Sqrt((xend[3] - xbeg[3]) * (xend[3] - xbeg[3]) + (yend[3] - ybeg[3]) * (yend[3] - ybeg[3])) / 20.;
456     dsup[2] = 25.;
457     xcc     = (xx[3] + xx[4]) / 20.;
458     ycc     = (yy[3] + yy[4]) / 20.;
459     xccc    = (xbeg[3] + xend[3]) / 20.;
460     yccc    = (ybeg[3] + yend[3]) / 20.;
461     if (xx[3] == xx[4]) {
462       offset2 = 0.;
463     } else {
464       r1 = yy[4] - yy[3];
465       r2 = xx[4] - xx[3];
466       offset2 = TMath::ATan2(r1, r2) * raddeg - 90.;
467     }
468     aphi  = (pphi + (i-1) * 36.) * degrad;
469     xzero = rr * TMath::Cos((tteta + (i-1) * 36.) * degrad);
470     yzero = rr * TMath::Sin((tteta + (i-1) * 36.) * degrad);
471     xpos1 = xccc * TMath::Cos(aphi) - yccc * TMath::Sin(aphi) + xzero;
472     ypos1 = xccc * TMath::Sin(aphi) + yccc * TMath::Cos(aphi) + yzero;
473     xpos  = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
474     ypos  = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
475     zpos  = 0.;
476     atheta45 = (i-1) * 36. + offset1 + offset2 - gteta;
477     AliMatrix(idrotm[(i-1) * 13 + 1103], 90., atheta45, 90., atheta45 + 90., 0., 0.);
478     pMC->Gsposp("SPIX", (i-1) * 13 + 4, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1103], "ONLY", dsup, 3);
479     
480     // --- Place an element of layer #2 
481     
482     biga   = (yy[4] - yy[3]) / (xx[4] - xx[3]);
483     bigb   = (xx[4] * yy[3] - xx[3] * yy[4]) / (xx[4] - xx[3]) / 10.;
484     coeffa = biga * biga + 1.;
485     coeffb = biga * bigb - biga * ycc - xcc;
486     coeffc = xcc * xcc + ycc * ycc - ycc * 2. * bigb + bigb * bigb - .014285030400000001;
487     xcc1   = (-coeffb - TMath::Sqrt(coeffb * coeffb - coeffa * coeffc)) / coeffa;
488     ycc1   = biga * xcc1 + bigb;
489     biga1  = -1. / biga;
490     bigb1  = xcc1 / biga + ycc1;
491     coeffa = biga1 * biga1 + 1.;
492     coeffb = biga1 * bigb1 - biga1 * ycc1 - xcc1;
493     coeffc = xcc1 * xcc1 + ycc1 * ycc1 - ycc1 * 2. * bigb1 + bigb1 * bigb1 - (dsup[0] + dbox2[0]) * (dsup[0] + dbox2[0]);
494     xcc2   = (-coeffb + TMath::Sqrt(coeffb * coeffb - coeffa * coeffc)) / coeffa;
495     ycc2   = biga1 * xcc2 + bigb1;
496     xpos1  = xcc2 * TMath::Cos(aphi) - ycc2 * TMath::Sin(aphi) + xzero;
497     ypos1  = xcc2 * TMath::Sin(aphi) + ycc2 * TMath::Cos(aphi) + yzero;
498     xpos   = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
499     ypos   = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
500     zpos   = 0.;
501     ++jbox2;
502     pMC->Gspos("IPV2", jbox2, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1103], "ONLY");
503     
504     // --- Place part # 5-6 (see sketch) 
505     
506     offset1 = -35.;
507     dsup[0] = .01;
508     dsup[1] = TMath::Sqrt((xend[4] - xbeg[4]) * (xend[4] - xbeg[4]) + (yend[4] - ybeg[4]) * (yend[4] - ybeg[4])) / 20.;
509     dsup[2] = 25.;
510     xcc     = (xx[4] + xx[5]) / 20.;
511     ycc     = (yy[4] + yy[5]) / 20.;
512     xccc    = (xbeg[4] + xend[4]) / 20.;
513     yccc    = (ybeg[4] + yend[4]) / 20.;
514     if (xx[4] == xx[5]) {
515       offset2 = 0.;
516     } else {
517       r1 = yy[5] - yy[4];
518       r2 = xx[5] - xx[4];
519       offset2 = TMath::ATan2(r1, r2) * raddeg - 90.;
520     }
521     aphi  = (pphi + (i-1) * 36.) * degrad;
522     xzero = rr * TMath::Cos((tteta + (i-1) * 36.) * degrad);
523     yzero = rr * TMath::Sin((tteta + (i-1) * 36.) * degrad);
524     xpos1 = xccc * TMath::Cos(aphi) - yccc * TMath::Sin(aphi) + xzero;
525     ypos1 = xccc * TMath::Sin(aphi) + yccc * TMath::Cos(aphi) + yzero;
526     xpos  = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
527     ypos  = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
528     zpos  = 0.;
529     atheta56 = (i-1) * 36. + offset1 + offset2 - gteta;
530     AliMatrix(idrotm[(i-1) * 13 + 1104], 90., atheta56, 90., atheta56 + 90., 0., 0.);
531     pMC->Gsposp("SPIX", (i-1) * 13 + 5, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1104], "ONLY", dsup, 3);
532     
533     // --- Place part # 6-7 (see sketch) 
534     
535     offset1 = -35.;
536     dsup[0] = .01;
537     dsup[1] = TMath::Sqrt((xend[5] - xbeg[5]) * (xend[5] - xbeg[5]) + (yend[5] - ybeg[5]) * (yend[5] - ybeg[5])) / 20.;
538     dsup[2] = 25.;
539     xcc     = (xx[5] + xx[6]) / 20.;
540     ycc     = (yy[5] + yy[6]) / 20.;
541     xccc    = (xbeg[5] + xend[5]) / 20.;
542     yccc    = (ybeg[5] + yend[5]) / 20.;
543     if (xx[5] == xx[6]) {
544       offset2 = 0.;
545     } else {
546       r1 = yy[6] - yy[5];
547       r2 = xx[6] - xx[5];
548       offset2 = TMath::ATan2(r1, r2) * raddeg - 90.;
549     }
550     aphi  = (pphi + (i-1) * 36.) * degrad;
551     xzero = rr * TMath::Cos((tteta + (i-1) * 36.) * degrad);
552     yzero = rr * TMath::Sin((tteta + (i-1) * 36.) * degrad);
553     xpos1 = xccc * TMath::Cos(aphi) - yccc * TMath::Sin(aphi) + xzero;
554     ypos1 = xccc * TMath::Sin(aphi) + yccc * TMath::Cos(aphi) + yzero;
555     xpos  = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
556     ypos  = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
557     zpos  = 0.;
558     atheta67 = (i-1) * 36. + offset1 + offset2 - gteta;
559     AliMatrix(idrotm[(i-1) * 13 + 1105], 90., atheta67, 90., atheta67 + 90., 0., 0.);
560     pMC->Gsposp("SPIX", (i-1) * 13 + 6, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1105], "ONLY", dsup, 3);
561     
562     // --- Place an element of layer #2 
563     
564     biga   = (yy[6] - yy[5]) / (xx[6] - xx[5]);
565     bigb   = (xx[6] * yy[5] - xx[5] * yy[6]) / (xx[6] - xx[5]) / 10.;
566     coeffa = biga * biga + 1.;
567     coeffb = biga * bigb - biga * ycc - xcc;
568     coeffc = xcc * xcc + ycc * ycc - ycc * 2. * bigb + bigb * bigb - .014285030400000001;
569     xcc1   = (-coeffb - TMath::Sqrt(coeffb * coeffb - coeffa * coeffc)) / coeffa;
570     ycc1   = biga * xcc1 + bigb;
571     biga1  = -1. / biga;
572     bigb1  = xcc1 / biga + ycc1;
573     coeffa = biga1 * biga1 + 1.;
574     coeffb = biga1 * bigb1 - biga1 * ycc1 - xcc1;
575     coeffc = xcc1 * xcc1 + ycc1 * ycc1 - ycc1 * 2. * bigb1 + bigb1 * bigb1 - (dsup[0] + dbox2[0]) * (dsup[0] + dbox2[0]);
576     xcc2   = (-coeffb - TMath::Sqrt(coeffb * coeffb - coeffa * coeffc)) / coeffa;
577     ycc2   = biga1 * xcc2 + bigb1;
578     xpos1  = xcc2 * TMath::Cos(aphi) - ycc2 * TMath::Sin(aphi) + xzero;
579     ypos1  = xcc2 * TMath::Sin(aphi) + ycc2 * TMath::Cos(aphi) + yzero;
580     xpos   = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
581     ypos   = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
582     zpos   = 0.;
583     ++jbox2;
584     pMC->Gspos("IPV2", jbox2, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1105], "ONLY");
585     
586     // --- Place part # 7-8 (see sketch) 
587     
588     offset1 = -35.;
589     dsup[0] = .01;
590     dsup[1] = TMath::Sqrt((xend[6] - xbeg[6]) * (xend[6] - xbeg[6]) + (yend[6] - ybeg[6]) * (yend[6] - ybeg[6])) / 20.;
591     dsup[2] = 25.;
592     xcc     = (xx[6] + xx[7]) / 20.;
593     ycc     = (yy[6] + yy[7]) / 20.;
594     xccc    = (xbeg[6] + xend[6]) / 20.;
595     yccc    = (ybeg[6] + yend[6]) / 20.;
596     if (xx[6] == xx[7]) {
597       offset2 = 0.;
598     } else {
599       r1 = yy[7] - yy[6];
600       r2 = xx[7] - xx[6];
601       offset2 = TMath::ATan2(r1, r2) * raddeg - 90.;
602     }
603     aphi  = (pphi + (i-1) * 36.) * degrad;
604     xzero = rr * TMath::Cos((tteta + (i-1) * 36.) * degrad);
605     yzero = rr * TMath::Sin((tteta + (i-1) * 36.) * degrad);
606     xpos1 = xccc * TMath::Cos(aphi) - yccc * TMath::Sin(aphi) + xzero;
607     ypos1 = xccc * TMath::Sin(aphi) + yccc * TMath::Cos(aphi) + yzero;
608     xpos  = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
609     ypos  = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
610     zpos  = 0.;
611     atheta78 = (i-1) * 36. + offset1 + offset2 - gteta;
612     AliMatrix(idrotm[(i-1) * 13 + 1106], 90., atheta78, 90., atheta78 + 90., 0., 0.);
613     pMC->Gsposp("SPIX", (i-1) * 13 + 7, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1106], "ONLY", dsup, 3);
614     
615     // --- Place part # 8-9 (see sketch) 
616     
617     offset1 = -35.;
618     dsup[0] = .01;
619     dsup[1] = TMath::Sqrt((xend[7] - xbeg[7]) * (xend[7] - xbeg[7]) + (yend[7] - ybeg[7]) * (yend[7] - ybeg[7])) / 20.;
620     dsup[2] = 25.;
621     xcc     = (xx[7] + xx[8]) / 20.;
622     ycc     = (yy[7] + yy[8]) / 20.;
623     xccc    = (xbeg[7] + xend[7]) / 20.;
624     yccc    = (ybeg[7] + yend[7]) / 20.;
625     if (xx[1] == xx[2]) {
626       offset2 = 0.;
627     } else {
628       r1 = yy[8] - yy[7];
629       r2 = xx[8] - xx[7];
630       offset2 = TMath::ATan2(r1, r2) * raddeg - 90.;
631     }
632     aphi  = (pphi + (i-1) * 36.) * degrad;
633     xzero = rr * TMath::Cos((tteta + (i-1) * 36.) * degrad);
634     yzero = rr * TMath::Sin((tteta + (i-1) * 36.) * degrad);
635     xpos1 = xccc * TMath::Cos(aphi) - yccc * TMath::Sin(aphi) + xzero;
636     ypos1 = xccc * TMath::Sin(aphi) + yccc * TMath::Cos(aphi) + yzero;
637     xpos  = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
638     ypos  = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
639     zpos  = 0.;
640     atheta89 = (i-1) * 36. + offset1 + offset2 - gteta;
641     AliMatrix(idrotm[(i-1) * 13 + 1107], 90., atheta89, 90., atheta89 + 90., 0., 0.);
642     pMC->Gsposp("SPIX", (i-1) * 13 + 8, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1107], "ONLY", dsup, 3);
643     
644     // --- Place an element of layer #2 
645     
646     biga   = (yy[8] - yy[7]) / (xx[8] - xx[7]);
647     bigb   = (xx[8] * yy[7] - xx[7] * yy[8]) / (xx[8] - xx[7]) / 10.;
648     coeffa = biga * biga + 1.;
649     coeffb = biga * bigb - biga * ycc - xcc;
650     coeffc = xcc * xcc + ycc * ycc - ycc * 2. * bigb + bigb * bigb - .014285030400000001;
651     xcc1   = (-coeffb - TMath::Sqrt(coeffb * coeffb - coeffa * coeffc)) / coeffa;
652     ycc1   = biga * xcc1 + bigb;
653     biga1  = -1. / biga;
654     bigb1  = xcc1 / biga + ycc1;
655     coeffa = biga1 * biga1 + 1.;
656     coeffb = biga1 * bigb1 - biga1 * ycc1 - xcc1;
657     coeffc = xcc1 * xcc1 + ycc1 * ycc1 - ycc1 * 2. * bigb1 + bigb1 * bigb1 - (dsup[0] + dbox2[0]) * (dsup[0] + dbox2[0]);
658     xcc2   = (-coeffb - TMath::Sqrt(coeffb * coeffb - coeffa * coeffc)) / coeffa;
659     ycc2   = biga1 * xcc2 + bigb1;
660     xpos1  = xcc2 * TMath::Cos(aphi) - ycc2 * TMath::Sin(aphi) + xzero;
661     ypos1  = xcc2 * TMath::Sin(aphi) + ycc2 * TMath::Cos(aphi) + yzero;
662     xpos   = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
663     ypos   = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
664     zpos   = 0.;
665     ++jbox2;
666     pMC->Gspos("IPV2", jbox2, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1107], "ONLY");
667     
668     // --- Place part # 9-10 (see sketch) 
669     
670     offset1 = -35.;
671     dsup[0] = .01;
672     dsup[1] = TMath::Sqrt((xend[8] - xbeg[8]) * (xend[8] - xbeg[8]) + (yend[8] - ybeg[8]) * (yend[8] - ybeg[8])) / 20.;
673     dsup[2] = 25.;
674     xcc     = (xx[8] + xx[9]) / 20.;
675     ycc     = (yy[8] + yy[9]) / 20.;
676     xccc    = (xbeg[8] + xend[8]) / 20.;
677     yccc    = (ybeg[8] + yend[8]) / 20.;
678     if (xx[8] == xx[9]) {
679       offset2 = 0.;
680     } else {
681       r1 = yy[9] - yy[8];
682       r2 = xx[9] - xx[8];
683       offset2 = TMath::ATan2(r1, r2) * raddeg - 90.;
684     }
685     aphi  = (pphi + (i-1) * 36.) * degrad;
686     xzero = rr * TMath::Cos((tteta + (i-1) * 36.) * degrad);
687     yzero = rr * TMath::Sin((tteta + (i-1) * 36.) * degrad);
688     xpos1 = xccc * TMath::Cos(aphi) - yccc * TMath::Sin(aphi) + xzero;
689     ypos1 = xccc * TMath::Sin(aphi) + yccc * TMath::Cos(aphi) + yzero;
690     xpos  = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
691     ypos  = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
692     zpos  = 0.;
693     atheta910 = (i-1) * 36. + offset1 + offset2 - gteta;
694     AliMatrix(idrotm[(i-1) * 13 + 1108], 90., atheta910, 90., atheta910 + 90., 0., 0.);
695     pMC->Gsposp("SPIX", (i-1) * 13 + 9, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1108], "ONLY", dsup, 3);
696     
697     // --- Place part # 10-11 (see sketch) 
698     
699     offset1 = -35.;
700     dsup[0] = .01;
701     dsup[1] = TMath::Sqrt((xend[9] - xbeg[9]) * (xend[9] - xbeg[9]) + (yend[9] - ybeg[9]) * (yend[9] - ybeg[9])) / 20.;
702     dsup[2] = 25.;
703     xcc     = (xx[9] + xx[10]) / 20.;
704     ycc     = (yy[9] + yy[10]) / 20.;
705     xccc    = (xbeg[9] + xend[9]) / 20.;
706     yccc    = (ybeg[9] + yend[9]) / 20.;
707     if (xx[9] == xx[10]) {
708       offset2 = 0.;
709     } else {
710       r1 = yy[10] - yy[9];
711       r2 = xx[10] - xx[9];
712       offset2 = TMath::ATan2(r1, r2) * raddeg - 90.;
713     }
714     aphi  = (pphi + (i-1) * 36.) * degrad;
715     xzero = rr * TMath::Cos((tteta + (i-1) * 36.) * degrad);
716     yzero = rr * TMath::Sin((tteta + (i-1) * 36.) * degrad);
717     xpos1 = xccc * TMath::Cos(aphi) - yccc * TMath::Sin(aphi) + xzero;
718     ypos1 = xccc * TMath::Sin(aphi) + yccc * TMath::Cos(aphi) + yzero;
719     xpos  = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
720     ypos  = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
721     zpos  = 0.;
722     atheta1011 = (i-1) * 36. + offset1 + offset2 - gteta;
723     AliMatrix(idrotm[(i-1) * 13 + 1109], 90., atheta1011, 90.,atheta1011 + 90., 0., 0.);
724     pMC->Gsposp("SPIX", (i-1) * 13 + 10, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1109], "ONLY", dsup, 3);
725     
726     // --- Place part # 13-14 (see sketch) 
727     
728     offset1 = -35.;
729     dsup[0] = .01;
730     dsup[1] = TMath::Sqrt((xend[12] - xbeg[12]) * (xend[12] - xbeg[12]) + (yend[12] - ybeg[12]) * (yend[12] - ybeg[12])) / 20.;
731     dsup[2] = 25.;
732     xcc     = (xx[12] + xx[13]) / 20.;
733     ycc     = (yy[12] + yy[13]) / 20.;
734     xccc    = (xbeg[12] + xend[12]) / 20.;
735     yccc    = (ybeg[12] + yend[12]) / 20.;
736     if (xx[12] == xx[13]) {
737       offset2 = 0.;
738     } else {
739       r1 = yy[12] - yy[13];
740       r2 = xx[12] - xx[13];
741       offset2 = TMath::ATan2(r1, r2) * raddeg - 90.;
742     }
743     aphi  = (pphi + (i-1) * 36.) * degrad;
744     xzero = rr * TMath::Cos((tteta + (i-1) * 36.) * degrad);
745     yzero = rr * TMath::Sin((tteta + (i-1) * 36.) * degrad);
746     xpos1 = xccc * TMath::Cos(aphi) - yccc * TMath::Sin(aphi) + xzero;
747     ypos1 = xccc * TMath::Sin(aphi) + yccc * TMath::Cos(aphi) + yzero;
748     xpos  = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
749     ypos  = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
750     zpos  = 0.;
751     atheta1314 = (i-1) * 36. + offset1 + offset2 - gteta;
752     AliMatrix(idrotm[(i-1) * 13 + 1112], 90., atheta1314, 90.,atheta1314 + 90., 0., 0.);
753     pMC->Gsposp("SPIX", (i-1) * 13 + 13, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1112], "ONLY", dsup, 3);
754     
755     // --- Place an element of layer #1 
756     
757     biga   = (yy[13] - yy[12]) / (xx[13] - xx[12]);
758     bigb   = (xx[13] * yy[12] - xx[12] * yy[13]) / (xx[13] - xx[12]) / 10.;
759     coeffa = biga * biga + 1.;
760     coeffb = biga * bigb - biga * ycc - xcc;
761     coeffc = xcc * xcc + ycc * ycc - ycc * 2. * bigb + bigb * bigb - .050216328100000006;
762     xcc1   = (-coeffb + TMath::Sqrt(coeffb * coeffb - coeffa * coeffc)) / coeffa;
763     ycc1   = biga * xcc1 + bigb;
764     biga1  = -1. / biga;
765     bigb1  = xcc1 / biga + ycc1;
766     coeffa = biga1 * biga1 + 1.;
767     coeffb = biga1 * bigb1 - biga1 * ycc1 - xcc1;
768     coeffc = xcc1 * xcc1 + ycc1 * ycc1 - ycc1 * 2. * bigb1 + bigb1 * bigb1 - (dsup[0] + dbox1[0]) * (dsup[0] + dbox1[0]);
769     xcc2   = (-coeffb + TMath::Sqrt(coeffb * coeffb - coeffa * coeffc)) / coeffa;
770     ycc2   = biga1 * xcc2 + bigb1;
771     xpos1  = xcc2 * TMath::Cos(aphi) - ycc2 * TMath::Sin(aphi) + xzero;
772     ypos1  = xcc2 * TMath::Sin(aphi) + ycc2 * TMath::Cos(aphi) + yzero;
773     xpos   = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
774     ypos   = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
775     zpos   = 0.;
776     ++jbox1;
777     pMC->Gspos("IPV1", jbox1, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1112], "ONLY");
778     
779     // --- Place part # 12-13 (see sketch) 
780     
781     offset1 = -35.;
782     dsup[0] = .01;
783     dsup[1] = TMath::Sqrt((xend[11] - xbeg[11]) * (xend[11] - xbeg[11]) + (yend[11] - ybeg[11]) * (yend[11] - ybeg[11])) / 20.;
784     dsup[2] = 25.;
785     xcc     = (xx[11] + xx[12]) / 20.;
786     ycc     = (yy[11] + yy[12]) / 20.;
787     xccc    = (xbeg[11] + xend[11]) / 20.;
788     yccc    = (ybeg[11] + yend[11]) / 20.;
789     if (xx[11] == xx[12]) {
790       offset2 = 0.;
791     } else {
792       r1 = yy[12] - yy[11];
793       r2 = xx[12] - xx[11];
794       offset2 = TMath::ATan2(r1, r2) * raddeg - 90.;
795     }
796     aphi  = (pphi + (i-1) * 36.) * degrad;
797     xzero = rr * TMath::Cos((tteta + (i-1) * 36.) * degrad);
798     yzero = rr * TMath::Sin((tteta + (i-1) * 36.) * degrad);
799     xpos1 = xccc * TMath::Cos(aphi) - yccc * TMath::Sin(aphi) + xzero;
800     ypos1 = xccc * TMath::Sin(aphi) + yccc * TMath::Cos(aphi) + yzero;
801     xpos  = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
802     ypos  = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
803     zpos  = 0.;
804     atheta1213 = (i-1) * 36. + offset1 + offset2 - gteta;
805     AliMatrix(idrotm[(i-1) * 13 + 1111], 90., atheta1213, 90.,atheta1213 + 90., 0., 0.);
806     pMC->Gsposp("SPIX", (i-1) * 13 + 12, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1111], "ONLY", dsup, 3);
807     
808     // --- Place part # 11-12 (see sketch) 
809     
810     offset1 = -35.;
811     dsup[0] = .01;
812     dsup[1] = TMath::Sqrt((xend[10] - xbeg[10]) * (xend[10] - xbeg[10]) + (yend[10] - ybeg[10]) * (yend[10] - ybeg[10])) / 20.;
813     dsup[2] = 25.;
814     xcc     = (xx[10] + xx[11]) / 20.;
815     ycc     = (yy[10] + yy[11]) / 20.;
816     xccc    = (xbeg[10] + xend[10]) / 20.;
817     yccc    = (ybeg[10] + yend[10]) / 20.;
818     if (xx[10] == xx[11]) {
819       offset2 = 0.;
820     } else {
821       r1 = yy[11] - yy[10];
822       r2 = xx[11] - xx[10];
823       offset2 = TMath::ATan2(r1, r2) * raddeg - 90.;
824     }
825     aphi  = (pphi + (i-1) * 36.) * degrad;
826     xzero = rr * TMath::Cos((tteta + (i-1) * 36.) * degrad);
827     yzero = rr * TMath::Sin((tteta + (i-1) * 36.) * degrad);
828     xpos1 = xccc * TMath::Cos(aphi) - yccc * TMath::Sin(aphi) + xzero;
829     ypos1 = xccc * TMath::Sin(aphi) + yccc * TMath::Cos(aphi) + yzero;
830     xpos  = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
831     ypos  = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
832     zpos  = 0.;
833     atheta1112 = (i-1) * 36. + offset1 + offset2 - gteta;
834     AliMatrix(idrotm[(i-1) * 13 + 1110], 270., atheta1112, 90., atheta1112 + 270., 0., 0.);
835     pMC->Gsposp("SPIX", (i-1) * 13 + 11, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1110], "ONLY", dsup, 3);
836
837     // --- Place an element of layer #1 
838     
839     biga   = (yy[11] - yy[10]) / (xx[11] - xx[10]);
840     bigb   = (xx[11] * yy[10] - xx[10] * yy[11]) / (xx[11] - xx[10]) / 10.;
841     coeffa = biga * biga + 1.;
842     coeffb = biga * bigb - biga * ycc - xcc;
843     coeffc = xcc * xcc + ycc * ycc - ycc * 2. * bigb + bigb * bigb - .0035712576000000002;
844     xcc1   = (-coeffb + TMath::Sqrt(coeffb * coeffb - coeffa * coeffc)) / coeffa;
845     ycc1   = biga * xcc1 + bigb;
846     biga1  = -1. / biga;
847     bigb1  = xcc1 / biga + ycc1;
848     coeffa = biga1 * biga1 + 1.;
849     coeffb = biga1 * bigb1 - biga1 * ycc1 - xcc1;
850     coeffc = xcc1 * xcc1 + ycc1 * ycc1 - ycc1 * 2. * bigb1 + bigb1 * bigb1 - (dsup[0] + dbox1[0]) * (dsup[0] + dbox1[0]);
851     xcc2   = (-coeffb + TMath::Sqrt(coeffb * coeffb - coeffa * coeffc)) / coeffa;
852     ycc2   = biga1 * xcc2 + bigb1;
853     xpos1  = xcc2 * TMath::Cos(aphi) - ycc2 * TMath::Sin(aphi) + xzero;
854     ypos1  = xcc2 * TMath::Sin(aphi) + ycc2 * TMath::Cos(aphi) + yzero;
855     xpos   = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
856     ypos   = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
857     zpos   = 0.;
858     ++jbox1;
859     pMC->Gspos("IPV1", jbox1, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1110], "ONLY");
860     
861     // --- Place arc # 13 (between part 1-2 and part 2-3) (see sketch) 
862     
863     darc[0] = rarc[12] / 10. - .02;
864     darc[1] = rarc[12] / 10.;
865     darc[2] = 25.;
866     darc[3] = atheta12 - (i-1) * 36.;
867     darc[4] = atheta23 - (i-1) * 36.;
868     xcc     = xarc[12] / 10.;
869     ycc     = yarc[12] / 10.;
870     aphi    = (pphi + (i-1) * 36.) * degrad;
871     xzero   = rr * TMath::Cos((tteta + (i-1) * 36.) * degrad);
872     yzero   = rr * TMath::Sin((tteta + (i-1) * 36.) * degrad);
873     xpos1   = xcc * TMath::Cos(aphi) - ycc * TMath::Sin(aphi) + xzero;
874     ypos1   = xcc * TMath::Sin(aphi) + ycc * TMath::Cos(aphi) + yzero;
875     xpos    = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
876     ypos    = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
877     zpos    = 0.;
878     pMC->Gsposp("SARC", (i-1) * 13 + 13, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1112], "ONLY", darc, 5);
879     
880     // --- Place arc # 12 (between part 2-3 and part 3-4) (see sketch) 
881     
882     darc[0] = rarc[11] / 10. - .02;
883     darc[1] = rarc[11] / 10.;
884     darc[2] = 25.;
885     darc[3] = atheta23 + 90. - (i-1) * 36.;
886     darc[4] = atheta34 + 90. - (i-1) * 36.;
887     xcc     = xarc[11] / 10.;
888     ycc     = yarc[11] / 10.;
889     aphi    = (pphi + (i-1) * 36.) * degrad;
890     xzero   = rr * TMath::Cos((tteta + (i-1) * 36.) * degrad);
891     yzero   = rr * TMath::Sin((tteta + (i-1) * 36.) * degrad);
892     xpos1   = xcc * TMath::Cos(aphi) - ycc * TMath::Sin(aphi) + xzero;
893     ypos1   = xcc * TMath::Sin(aphi) + ycc * TMath::Cos(aphi) + yzero;
894     xpos    = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
895     ypos    = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
896     zpos    = 0.;
897     pMC->Gsposp("SARC", (i-1) * 13 + 12, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1111], "ONLY", darc, 5);
898     
899     // --- Place arc # 11 (between part 3-4 and part 4-5) (see sketch) 
900     
901     darc[0] = rarc[10] / 10. - .02;
902     darc[1] = rarc[10] / 10.;
903     darc[2] = 25.;
904     darc[3] = atheta45 + 180. - (i-1) * 36.;
905     darc[4] = atheta34 + 180. - (i-1) * 36.;
906     xcc     = xarc[10] / 10.;
907     ycc     = yarc[10] / 10.;
908     aphi    = (pphi + (i-1) * 36.) * degrad;
909     xzero   = rr * TMath::Cos((tteta + (i-1) * 36.) * degrad);
910     yzero   = rr * TMath::Sin((tteta + (i-1) * 36.) * degrad);
911     xpos1   = xcc * TMath::Cos(aphi) - ycc * TMath::Sin(aphi) + xzero;
912     ypos1   = xcc * TMath::Sin(aphi) + ycc * TMath::Cos(aphi) + yzero;
913     xpos    = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
914     ypos    = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
915     zpos    = 0.;
916     pMC->Gsposp("SARC", (i-1) * 13 + 11, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1110], "ONLY", darc, 5);
917     
918     // --- Place arc # 10 (between part 4-5 and part 5-6) (see sketch) 
919     
920     darc[0] = rarc[9] / 10. - .02;
921     darc[1] = rarc[9] / 10.;
922     darc[2] = 25.;
923     darc[3] = atheta45 - 90. - (i-1) * 36.;
924     darc[4] = atheta56 - 90. - (i-1) * 36.;
925     xcc     = xarc[9] / 10.;
926     ycc     = yarc[9] / 10.;
927     aphi    = (pphi + (i-1) * 36.) * degrad;
928     xzero   = rr * TMath::Cos((tteta + (i-1) * 36.) * degrad);
929     yzero   = rr * TMath::Sin((tteta + (i-1) * 36.) * degrad);
930     xpos1   = xcc * TMath::Cos(aphi) - ycc * TMath::Sin(aphi) + xzero;
931     ypos1   = xcc * TMath::Sin(aphi) + ycc * TMath::Cos(aphi) + yzero;
932     xpos    = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
933     ypos    = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
934     zpos    = 0.;
935     pMC->Gsposp("SARC", (i-1) * 13 + 10, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1109], "ONLY", darc, 5);
936     
937     // --- Place arc # 9 (between part 5-6 and part) (see sketch) 
938     
939     darc[0] = rarc[8] / 10. - .02;
940     darc[1] = rarc[8] / 10.;
941     darc[2] = 25.;
942     darc[3] = atheta67 + 45. - (i-1) * 36.;
943     darc[4] = atheta56 + 45. - (i-1) * 36.;
944     xcc     = xarc[8] / 10.;
945     ycc     = yarc[8] / 10.;
946     aphi    = (pphi + (i-1) * 36.) * degrad;
947     xzero   = rr * TMath::Cos((tteta + (i-1) * 36.) * degrad);
948     yzero   = rr * TMath::Sin((tteta + (i-1) * 36.) * degrad);
949     xpos1   = xcc * TMath::Cos(aphi) - ycc * TMath::Sin(aphi) + xzero;
950     ypos1   = xcc * TMath::Sin(aphi) + ycc * TMath::Cos(aphi) + yzero;
951     xpos    = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
952     ypos    = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
953     zpos    = 0.;
954     pMC->Gsposp("SARC", (i-1) * 13 + 9, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1108], "ONLY", darc, 5);
955     
956     // --- Place arc # 8 (between part 6-7 and part 7-8) (see sketch) 
957     
958     darc[0] = rarc[7] / 10. - .02;
959     darc[1] = rarc[7] / 10.;
960     darc[2] = 25.;
961     darc[3] = atheta67 - (i-1) * 36.;
962     darc[4] = atheta78 - (i-1) * 36.;
963     xcc     = xarc[7] / 10.;
964     ycc     = yarc[7] / 10.;
965     aphi    = (pphi + (i-1) * 36.) * degrad;
966     xzero   = rr * TMath::Cos((tteta + (i-1) * 36.) * degrad);
967     yzero   = rr * TMath::Sin((tteta + (i-1) * 36.) * degrad);
968     xpos1   = xcc * TMath::Cos(aphi) - ycc * TMath::Sin(aphi) + xzero;
969     ypos1   = xcc * TMath::Sin(aphi) + ycc * TMath::Cos(aphi) + yzero;
970     xpos    = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
971     ypos    = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
972     zpos    = 0.;
973     pMC->Gsposp("SARC", (i-1) * 13 + 8, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1107], "ONLY", darc, 5);
974     
975     // --- Place arc # 7 (between part 7-8 and part 8-9) (see sketch) 
976     
977     darc[0] = rarc[6] / 10. - .02;
978     darc[1] = rarc[6] / 10.;
979     darc[2] = 25.;
980     darc[3] = atheta89 + 45. - (i-1) * 36.;
981     darc[4] = atheta78 + 45. - (i-1) * 36.;
982     xcc     = xarc[6] / 10.;
983     ycc     = yarc[6] / 10.;
984     aphi    = (pphi + (i-1) * 36.) * degrad;
985     xzero   = rr * TMath::Cos((tteta + (i-1) * 36.) * degrad);
986     yzero   = rr * TMath::Sin((tteta + (i-1) * 36.) * degrad);
987     xpos1   = xcc * TMath::Cos(aphi) - ycc * TMath::Sin(aphi) + xzero;
988     ypos1   = xcc * TMath::Sin(aphi) + ycc * TMath::Cos(aphi) + yzero;
989     xpos    = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
990     ypos    = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
991     zpos    = 0.;
992     pMC->Gsposp("SARC", (i-1) * 13 + 7, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1106], "ONLY", darc, 5);
993     
994     // --- Place arc # 6 (between part 8-9 and part 9-10) (see sketch) 
995     
996     darc[0] = rarc[5] / 10. - .02;
997     darc[1] = rarc[5] / 10.;
998     darc[2] = 25.;
999     darc[3] = atheta89 + 45. - (i-1) * 36.;
1000     darc[4] = atheta910 + 45. - (i-1) * 36.;
1001     xcc     = xarc[5] / 10.;
1002     ycc     = yarc[5] / 10.;
1003     aphi    = (pphi + (i-1) * 36.) * degrad;
1004     xzero   = rr * TMath::Cos((tteta + (i-1) * 36.) * degrad);
1005     yzero   = rr * TMath::Sin((tteta + (i-1) * 36.) * degrad);
1006     xpos1   = xcc * TMath::Cos(aphi) - ycc * TMath::Sin(aphi) + xzero;
1007     ypos1   = xcc * TMath::Sin(aphi) + ycc * TMath::Cos(aphi) + yzero;
1008     xpos    = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
1009     ypos    = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
1010     zpos    = 0.;
1011     pMC->Gsposp("SARC", (i-1) * 13 + 6, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1105], "ONLY", darc, 5);
1012     
1013     // --- Place arc # 5 (between part 9-10 and part 10-11) 
1014     //     (see sketch) 
1015     
1016     darc[0] = rarc[4] / 10. - .02;
1017     darc[1] = rarc[4] / 10.;
1018     darc[2] = 25.;
1019     darc[3] = atheta1011 + 45. - (i-1) * 36.;
1020     darc[4] = atheta910 + 45. - (i-1) * 36.;
1021     xcc     = xarc[4] / 10.;
1022     ycc     = yarc[4] / 10.;
1023     aphi    = (pphi + (i-1) * 36.) * degrad;
1024     xzero   = rr * TMath::Cos((tteta + (i-1) * 36.) * degrad);
1025     yzero   = rr * TMath::Sin((tteta + (i-1) * 36.) * degrad);
1026     xpos1   = xcc * TMath::Cos(aphi) - ycc * TMath::Sin(aphi) + xzero;
1027     ypos1   = xcc * TMath::Sin(aphi) + ycc * TMath::Cos(aphi) + yzero;
1028     xpos    = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
1029     ypos    = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
1030     zpos    = 0.;
1031     pMC->Gsposp("SARC", (i-1) * 13 + 5, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1104], "ONLY", darc, 5);
1032     
1033     // --- Place arc # 4 (between part 10-11 and part 11-12) 
1034     //     (see sketch) 
1035     
1036     darc[0] = rarc[3] / 10. - .02;
1037     darc[1] = rarc[3] / 10.;
1038     darc[2] = 25.;
1039     darc[3] = atheta1112 - 45. - (i-1) * 36.;
1040     darc[4] = atheta1011 - 225. - (i-1) * 36.;
1041     xcc     = xarc[3] / 10.;
1042     ycc     = yarc[3] / 10.;
1043     aphi    = (pphi + (i-1) * 36.) * degrad;
1044     xzero   = rr * TMath::Cos((tteta + (i-1) * 36.) * degrad);
1045     yzero   = rr * TMath::Sin((tteta + (i-1) * 36.) * degrad);
1046     xpos1   = xcc * TMath::Cos(aphi) - ycc * TMath::Sin(aphi) + xzero;
1047     ypos1   = xcc * TMath::Sin(aphi) + ycc * TMath::Cos(aphi) + yzero;
1048     xpos    = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
1049     ypos    = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
1050     zpos    = 0.;
1051     pMC->Gsposp("SARC", (i-1) * 13 + 4, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1103], "ONLY", darc, 5);
1052     
1053     // --- Place arc # 3 (between part 11-12 and part 12-13) 
1054     //     (see sketch) 
1055     
1056     darc[0] = rarc[2] / 10. - .02;
1057     darc[1] = rarc[2] / 10.;
1058     darc[2] = 25.;
1059     darc[3] = atheta1112 - 90. - (i-1) * 36.;
1060     darc[4] = atheta1213 - 90. - (i-1) * 36.;
1061     xcc     = xarc[2] / 10.;
1062     ycc     = yarc[2] / 10.;
1063     aphi    = (pphi + (i-1) * 36.) * degrad;
1064     xzero   = rr * TMath::Cos((tteta + (i-1) * 36.) * degrad);
1065     yzero   = rr * TMath::Sin((tteta + (i-1) * 36.) * degrad);
1066     xpos1   = xcc * TMath::Cos(aphi) - ycc * TMath::Sin(aphi) + xzero;
1067     ypos1   = xcc * TMath::Sin(aphi) + ycc * TMath::Cos(aphi) + yzero;
1068     xpos    = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
1069     ypos    = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
1070     zpos    = 0.;
1071     pMC->Gsposp("SARC", (i-1) * 13 + 3, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1102], "ONLY", darc, 5);
1072     
1073     // --- Place arc # 2 (between part 12-13 and part 13-14) 
1074     //     (see sketch) 
1075     
1076     darc[0] = rarc[1] / 10. - .02;
1077     darc[1] = rarc[1] / 10.;
1078     darc[2] = 25.;
1079     darc[3] = atheta1213 + 135. - (i-1) * 36.;
1080     darc[4] = atheta1314 + 165. - (i-1) * 36.;
1081     xcc     = xarc[1] / 10.;
1082     ycc     = yarc[1] / 10.;
1083     aphi    = (pphi + (i-1) * 36.) * degrad;
1084     xzero   = rr * TMath::Cos((tteta + (i-1) * 36.) * degrad);
1085     yzero   = rr * TMath::Sin((tteta + (i-1) * 36.) * degrad);
1086     xpos1   = xcc * TMath::Cos(aphi) - ycc * TMath::Sin(aphi) + xzero;
1087     ypos1   = xcc * TMath::Sin(aphi) + ycc * TMath::Cos(aphi) + yzero;
1088     xpos    = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
1089     ypos    = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
1090     zpos    = 0.;
1091     pMC->Gsposp("SARC", (i-1) * 13 + 2, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1101], "ONLY", darc, 5);
1092     
1093     // --- Place arc # 1 (between part 13-14 and part 1-2) 
1094     //     (see sketch) 
1095     
1096     darc[0] = rarc[0] / 10. - .02;
1097     darc[1] = rarc[0] / 10.;
1098     darc[2] = 25.;
1099     darc[3] = atheta12 + 45. - (i-1) * 36.;
1100     darc[4] = atheta1314 - (i-1) * 36.;
1101     xcc     = xarc[0] / 10.;
1102     ycc     = yarc[0] / 10.;
1103     aphi    = (pphi + (i-1) * 36.) * degrad;
1104     xzero   = rr * TMath::Cos((tteta + (i-1) * 36.) * degrad);
1105     yzero   = rr * TMath::Sin((tteta + (i-1) * 36.) * degrad);
1106     xpos1   = xcc * TMath::Cos(aphi) - ycc * TMath::Sin(aphi) + xzero;
1107     ypos1   = xcc * TMath::Sin(aphi) + ycc * TMath::Cos(aphi) + yzero;
1108     xpos    = xpos1 * TMath::Cos(gteta * degrad) + ypos1 * TMath::Sin(gteta *degrad);
1109     ypos    = -xpos1 * TMath::Sin(gteta * degrad) + ypos1 * TMath::Cos(gteta * degrad);
1110     zpos    = 0.;
1111     pMC->Gsposp("SARC", (i-1) * 13 + 1, "IT12", xpos, ypos, zpos, idrotm[(i-1) * 13 + 1100], "ONLY", darc, 5);
1112     
1113   }
1114   //************************************************************************
1115   //*                                                                      *
1116   //*                               D R I F T S                            *
1117   //*                               ===========                            *
1118   //*                                                                      *
1119   //************************************************************************
1120   
1121   // --- Define a ghost volume containing the Silicon Drift Detectors 
1122   //     (layer #3 and #4) and fill it with air or vacuum 
1123   
1124   xxm    = (49.999-3.)/(70.-25.);
1125   dgh[0] = 0;
1126   dgh[1] = 360;
1127   dgh[2] = 4;
1128   dgh[3] = -25.-(9.-3.01)/xxm-(9.01-9.)/xxm-(27.-9.01)/xxm;
1129   dgh[4] = 27.;
1130   dgh[5] = 27.;
1131   dgh[6] = -25.-(9.-3.01)/xxm-(9.01-9.)/xxm;
1132   dgh[7] = 9.01;
1133   dgh[8] = 27.;
1134   dgh[9] = 25.+(9.-3.01)/xxm+(9.01-9.)/xxm;
1135   dgh[10] = 9.01;
1136   dgh[11] = 27.;
1137   dgh[12] = 25.+(9.-3.01)/xxm+(9.01-9.)/xxm+(27.-9.01)/xxm;
1138   dgh[13] = 27.;
1139   dgh[14] = 27.;
1140   pMC->Gsvolu("IT34", "PCON", idtmed[275], dgh, 15);
1141   
1142   // --- Place the ghost volume in its mother volume (ITSV) and make it 
1143   //     invisible 
1144   
1145   pMC->Gspos("IT34", 1, "ITSV", 0., 0., 0., 0, "ONLY");
1146   pMC->Gsatt("IT34", "SEEN", 0);
1147   
1148   // --- Layer #3 
1149   
1150   //        GOTO 3456           ! skip ITS layer no. 3 
1151   
1152   //--- Define a ghost volume containing a single ladder of layer #3 (with the
1153   //     smaller lenght of ribs) and fill it with air or vacuum 
1154   
1155   dbox1[0] = 0.5+(0.0172+0.03+0.0252+0.04+0.003);
1156   dbox1[1] = 3.85;
1157   // the widest element is the sensitive element 
1158   dbox1[2] = (8.7*5.-2.*1.+2.*0.1)/2.+2.*7.5;
1159   // 7.5 cm is the lenght 
1160   pMC->Gsvolu("IDV1", "BOX ", idtmed[228], dbox1, 3);
1161   
1162   // --- Make the ghost volume invisible 
1163   
1164   pMC->Gsatt("IDV1", "SEEN", 0);
1165   
1166   // --- Define a volume containing the sensitive part of drifts 
1167   //     (silicon, layer #3) 
1168   
1169   dits[0] = .0172;
1170   // see material budget report by G. Feofilov 
1171   dits[1] = 3.85;
1172   dits[2] = 4.35;
1173   pMC->Gsvolu("ITS3", "BOX ", idtmed[224], dits, 3);
1174   
1175   //--- Define the part of the (smaller) rib between two sensitive parts made of
1176   //     carbon (layer #3) 
1177   
1178   dsup[0] = .5 - dits[0];
1179   dsup[1] = .01;
1180   dsup[2] = (8.7*5.-2.*1.+2.*0.1)/2.+2.*7.5;
1181   // 7.5 cm is the lenght 
1182   pMC->Gsvolu("IR11", "BOX ", idtmed[227], dsup, 3);
1183   
1184   //--- Define the first part of the (smaller) rib between two sensitive parts
1185   //     made of aluminum (layer #3) 
1186   
1187   dal1[0] = .5 - dits[0];
1188   dal1[1] = 0.00096/2.;
1189   dal1[2] = (8.7*5.-2.*1.+2.*0.1)/2.+2.*7.5;
1190   // 7.5 cm is the lenght 
1191   pMC->Gsvolu("IR12", "BOX ", idtmed[230], dal1, 3);
1192   
1193   //--- Define the part of the (smaller) rib between two sensitive parts made of
1194   //     kapton (layer #3) 
1195   
1196   dkap[0] = .5 - dits[0];
1197   dkap[1] = .01585;
1198   dkap[2] = (8.7*5.-2.*1.+2.*0.1)/2.+2.*7.5;
1199   // 7.5 cm is the lenght 
1200   pMC->Gsvolu("IR13", "BOX ", idtmed[236], dkap, 3);
1201   
1202   //--- Define the second part of the (smaller) rib between two sensitive parts
1203   //     made of aluminum (layer #3) 
1204   
1205   dal2[0] = .5 - dits[0];
1206   dal2[1] = 0.0027/2.;
1207   dal2[2] = (8.7*5.-2.*1.+2.*0.1)/2.+2.*7.5;
1208   // 7.5 cm is the lenght 
1209   pMC->Gsvolu("IR14", "BOX ", idtmed[230], dal2, 3);
1210   
1211   // --- Define the part of the (smaller) rib between two sensitive parts 
1212   //     made of silicon (the electronics) (layer #3) 
1213   
1214   dchi[0] = .5 - dits[0];
1215   dchi[1] = 0.0071/2.;
1216   dchi[2] = (8.7*5.-2.*1.+2.*0.1)/2.+2.*7.5;
1217   // 7.5 cm is the lenght 
1218   pMC->Gsvolu("IR15", "BOX ", idtmed[225], dal2, 3);
1219   
1220   // --- Define the part of the (smaller) rib between two sensitive parts 
1221   //     made of water (the cooler) (layer #3) 
1222   
1223   dwat[0] = .5 - dits[0];
1224   dwat[1] = 0.0093/2.;
1225   dwat[2] = (8.7*5.-2.*1.+2.*0.1)/2.+2.*7.5;
1226   // 7.5 cm is the lenght 
1227   pMC->Gsvolu("IR16", "BOX ", idtmed[231], dwat, 3);
1228   
1229   //--- Define the third part of the (smaller) rib between two sensitive parts
1230   //     made of aluminum (the cooling tubes) (layer #3) 
1231   
1232   dtub[0] = .5 - dits[0];
1233   dtub[1] = 0.00134/2.;
1234   dtub[2] = (8.7*5.-2.*1.+2.*0.1)/2.+2.*7.5;
1235   // 7.5 cm is the lenght 
1236   pMC->Gsvolu("IR17", "BOX ", idtmed[230], dtub, 3);
1237   
1238   // --- Define the part of the end-ladder stuff made of PCB (layer #3) 
1239   
1240   dpcb[0] = .03;
1241   // twice the foreseen thickness 
1242   dpcb[1] = 3.5;
1243   dpcb[2] = 7.5;
1244   pMC->Gsvolu("IEL1", "BOX ", idtmed[233], dpcb, 3);
1245   
1246   // --- Define the part of the end-ladder stuff made of copper (layer #3) 
1247   
1248   dcop[0] = .0252;
1249   // twice the foreseen thickness 
1250   dcop[1] = 3.5;
1251   dcop[2] = 7.5;
1252   pMC->Gsvolu("IEL2", "BOX ", idtmed[234], dcop, 3);
1253   
1254   // --- Define the part of the end-ladder stuff made of ceramics (layer #3)
1255   
1256   dcer[0] = .04;
1257   // twice the foreseen thickness 
1258   dcer[1] = 3.5;
1259   dcer[2] = 7.5;
1260   pMC->Gsvolu("IEL3", "BOX ", idtmed[235], dcer, 3);
1261   
1262   // --- Define the part of the end-ladder stuff made of silicon (layer #3) 
1263   
1264   dsil[0] = .003;
1265   // twice the foreseen thickness 
1266   dsil[1] = 3.5;
1267   dsil[2] = 7.5;
1268   pMC->Gsvolu("IEL4", "BOX ", idtmed[226], dsil, 3);
1269   
1270   //--- Place the sensitive part of the drifts (smaller ribs) into its mother
1271   //     (IDV1) 
1272   
1273   ypos = 0.;
1274   for (j = 1; j <= 5; ++j) {
1275     // odd elements are up and even elements are down 
1276     if (j == 1) {
1277       xpos = dbox1[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0] * 2. - dsil[0] * 2. - dits[0];
1278       zpos = 0. - dits[2] + 1. - dits[2] * 2. - .1 - dits[2];
1279     } else if (j == 2) {
1280       xpos = -dbox1[0] + dits[0];
1281       zpos = 0. - dits[2] + 1. - dits[2];
1282     } else if (j == 3) {
1283       xpos = dbox1[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0] * 2. - dsil[0] * 2. - dits[0];
1284       zpos = 0.;
1285     } else if (j == 4) {
1286       xpos = -dbox1[0] + dits[0];
1287       zpos = dits[2] + 0. - 1. + dits[2];
1288     } else if (j == 5) {
1289       xpos = dbox1[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0] * 2. - dsil[0] * 2. - dits[0];
1290       zpos = dits[2] + 0. - 1. + dits[2] * 2. + .1 + dits[2];
1291     }
1292     pMC->Gspos("ITS3", j, "IDV1", xpos, ypos, zpos, 0, "ONLY");
1293   }
1294   
1295   // --- Place the smaller ribs into their mother (IDV1) 
1296   
1297   // --- Right ribs (just a matter of convention) 
1298   
1299   xpos = .5 - dbox1[0] + dits[0];
1300   zpos = 0.;
1301   
1302   // --- Carbon 
1303   
1304   ypos = 2.81;
1305   pMC->Gspos("IR11", 1, "IDV1", xpos, ypos, zpos, 0, "ONLY");
1306   
1307   // --- Aluminum #1 
1308   
1309   ypos = dsup[1] + 2.81 + dal1[1];
1310   pMC->Gspos("IR12", 1, "IDV1", xpos, ypos, zpos, 0, "ONLY");
1311   
1312   // --- Kapton 
1313   
1314   ypos = dsup[1] + 2.81 + dal1[1] * 2. + dkap[1];
1315   pMC->Gspos("IR13", 1, "IDV1", xpos, ypos, zpos, 0, "ONLY");
1316   
1317   // --- Aluminum #2 
1318
1319   ypos = dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 2. + dal2[1];
1320   pMC->Gspos("IR14", 1, "IDV1", xpos, ypos, zpos, 0, "ONLY");
1321   
1322   // --- Silicon (chip) 
1323   
1324   ypos = dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 2. + dal2[1] * 2. + dchi[1];
1325   pMC->Gspos("IR15", 1, "IDV1", xpos, ypos, zpos, 0, "ONLY");
1326   
1327   // --- Water 
1328   
1329   ypos = dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 2. + dal2[1] * 2. + dchi[1] * 2. + dwat[1];
1330   pMC->Gspos("IR16", 1, "IDV1", xpos, ypos, zpos, 0, "ONLY");
1331   
1332   // --- Aluminum #3 
1333   
1334   ypos = dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 2. + dal2[1] * 2. + dchi[1] * 2. + dwat[1] * 2. 
1335     + dtub[1];
1336   pMC->Gspos("IR17", 1, "IDV1", xpos, ypos, zpos, 0, "ONLY");
1337   
1338   // --- Right ribs (just a matter of convention) 
1339   
1340   // --- Carbon 
1341   
1342   ypos = -2.81;
1343   pMC->Gspos("IR11", 2, "IDV1", xpos, ypos, zpos, 0, "ONLY");
1344   
1345   // --- Aluminum #1 
1346   
1347   ypos = -(dsup[1] + 2.81 + dal1[1]);
1348   pMC->Gspos("IR12", 2, "IDV1", xpos, ypos, zpos, 0, "ONLY");
1349   
1350   // --- Kapton 
1351   
1352   ypos = -(dsup[1] + 2.81 + dal1[1] * 2. + dkap[1]);
1353   pMC->Gspos("IR13", 2, "IDV1", xpos, ypos, zpos, 0, "ONLY");
1354   
1355   // --- Aluminum #2 
1356   
1357   ypos = -(dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 2. + dal2[1]);
1358   pMC->Gspos("IR14", 2, "IDV1", xpos, ypos, zpos, 0, "ONLY");
1359   
1360   // --- Silicon (chip) 
1361   
1362   ypos = -(dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 2. + dal2[1] * 2. + dchi[1]);
1363   pMC->Gspos("IR15", 2, "IDV1", xpos, ypos, zpos, 0, "ONLY");
1364   
1365   // --- Water 
1366   
1367   ypos = -(dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 2. + dal2[1] * 2. + dchi[1] * 2. + dwat[1]);
1368   pMC->Gspos("IR16", 2, "IDV1", xpos, ypos, zpos, 0, "ONLY");
1369   
1370   // --- Aluminum #3 
1371   
1372   ypos = -(dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 
1373            2. + dal2[1] * 2. + dchi[1] * 2. + dwat[1] * 2. + dtub[1]);
1374   pMC->Gspos("IR17", 2, "IDV1", xpos, ypos, zpos, 0, "ONLY");
1375   
1376   // --- Place the end-ladder stuff into its mother (IDV1) 
1377   
1378   
1379   // --- Negative-Z end-ladder 
1380   
1381   ypos = 0.;
1382   zpos = -(8.7*5.-2.*1.+2.*0.1)/2.-7.5;
1383   
1384   // --- PCB 
1385   
1386   xpos = dbox1[0] - dpcb[0];
1387   pMC->Gspos("IEL1", 1, "IDV1", xpos, ypos, zpos, 0, "ONLY");
1388   
1389   // --- Copper 
1390   
1391   xpos = dbox1[0] - dpcb[0] * 2. - dcop[0];
1392   pMC->Gspos("IEL2", 1, "IDV1", xpos, ypos, zpos, 0, "ONLY");
1393   
1394   // --- Ceramics 
1395   
1396   xpos = dbox1[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0];
1397   pMC->Gspos("IEL3", 1, "IDV1", xpos, ypos, zpos, 0, "ONLY");
1398   
1399   // --- Silicon (bus) 
1400   
1401   xpos = dbox1[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0] * 2. - dsil[0];
1402   pMC->Gspos("IEL4", 1, "IDV1", xpos, ypos, zpos, 0, "ONLY");
1403   
1404   // --- Positive-Z end-ladder 
1405   
1406   ypos = 0.;
1407   zpos = (8.7*5.-2.*1.+2.*0.1)/2.+7.5;
1408   
1409   // --- PCB 
1410   
1411   xpos = dbox1[0] - dpcb[0];
1412   pMC->Gspos("IEL1", 2, "IDV1", xpos, ypos, zpos, 0, "ONLY");
1413   
1414   // --- Copper 
1415
1416   xpos = dbox1[0] - dpcb[0] * 2. - dcop[0];
1417   pMC->Gspos("IEL2", 2, "IDV1", xpos, ypos, zpos, 0, "ONLY");
1418   
1419   // --- Ceramics 
1420   
1421   xpos = dbox1[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0];
1422   pMC->Gspos("IEL3", 2, "IDV1", xpos, ypos, zpos, 0, "ONLY");
1423   
1424   // --- Silicon (bus) 
1425   
1426   xpos = dbox1[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0] * 2. - dsil[0];
1427   pMC->Gspos("IEL4", 2, "IDV1", xpos, ypos, zpos, 0, "ONLY");
1428   
1429   //--- Define a ghost volume containing a single ladder of layer #3 (with the
1430   //     larger lenght of ribs) and fill it with air or vacuum 
1431   
1432   dbox2[0] = 0.65+(0.0172+0.03+0.0252+0.04+0.003);
1433   dbox2[1] = 3.85;
1434   // the widest element is the sensitive element 
1435   dbox2[2] = (8.7*5.-2.*1.+2.*0.1)/2.+2.*7.5;
1436   // 7.5 cm is the lenght 
1437   pMC->Gsvolu("IDV2", "BOX ", idtmed[228], dbox2, 3);
1438   
1439   // --- Make the ghost volume invisible 
1440   
1441   pMC->Gsatt("IDV2", "SEEN", 0);
1442   
1443   //--- Define the part of the (larger) rib between two sensitive parts madeof
1444   //     carbon (layer #3) 
1445   
1446   dsup[0] = .65 - dits[0];
1447   dsup[1] = .01;
1448   dsup[2] = (8.7*5.-2.*1.+2.*0.1)/2.+2.*7.5;
1449   // 7.5 cm is the lenght 
1450   pMC->Gsvolu("IR21", "BOX ", idtmed[227], dsup, 3);
1451   
1452   //--- Define the first part of the (larger) rib between two sensitive parts
1453   //     made of aluminum (layer #3) 
1454   
1455   dal1[0] = .65 - dits[0];
1456   dal1[1] = 0.00096/2.;
1457   dal1[2] = (8.7*5.-2.*1.+2.*0.1)/2.+2.*7.5;
1458   // 7.5 cm is the lenght 
1459   pMC->Gsvolu("IR22", "BOX ", idtmed[230], dal1, 3);
1460   
1461   //--- Define the part of the (larger) rib between two sensitive parts madeof
1462   //     kapton (layer #3) 
1463   
1464   dkap[0] = .65 - dits[0];
1465   dkap[1] = 0.0317/2.;
1466   dkap[2] = (8.7*5.-2.*1.+2.*0.1)/2.+2.*7.5;
1467   // 7.5 cm is the lenght 
1468   pMC->Gsvolu("IR23", "BOX ", idtmed[236], dkap, 3);
1469   
1470   //--- Define the second part of the (larger) rib between two sensitive parts
1471   //     made of aluminum (layer #3) 
1472   
1473   dal2[0] = .65 - dits[0];
1474   dal2[1] = 0.0027/2.;
1475   dal2[2] = (8.7*5.-2.*1.+2.*0.1)/2.+2.*7.5;
1476   // 7.5 cm is the lenght 
1477   pMC->Gsvolu("IR24", "BOX ", idtmed[230], dal2, 3);
1478   
1479   // --- Define the part of the (larger) rib between two sensitive parts 
1480   //     made of silicon (the electronics) (layer #3) 
1481
1482   dchi[0] = .65 - dits[0];
1483   dchi[1] = 0.0071/2.;
1484   dchi[2] = (8.7*5.-2.*1.+2.*0.1)/2.+2.*7.5;
1485   // 7.5 cm is the lenght 
1486   pMC->Gsvolu("IR25", "BOX ", idtmed[225], dal2, 3);
1487   
1488   // --- Define the part of the (larger) rib between two sensitive parts 
1489   //     made of water (the cooler) (layer #3) 
1490   
1491   dwat[0] = .65 - dits[0];
1492   dwat[1] = 0.0093/2.;
1493   dwat[2] = (8.7*5.-2.*1.+2.*0.1)/2.+2.*7.5;
1494   // 7.5 cm is the lenght 
1495   pMC->Gsvolu("IR26", "BOX ", idtmed[231], dwat, 3);
1496   
1497   //--- Define the third part of the (larger) rib between two sensitive parts
1498   //     made of aluminum (the cooling tubes) (layer #3) 
1499   
1500   dtub[0] = .65 - dits[0];
1501   dtub[1] = 0.00134/2.;
1502   dtub[2] = (8.7*5.-2.*1.+2.*0.1)/2.+2.*7.5;
1503   // 7.5 cm is the lenght 
1504   pMC->Gsvolu("IR27", "BOX ", idtmed[230], dtub, 3);
1505   
1506   //--- Place the sensitive part of the drifts (smaller ribs) into its mother
1507   //     (IDV2) 
1508   
1509   ypos = 0.;
1510   for (j = 1; j <= 5; ++j) {
1511     // odd element are up and even elements are down 
1512     if (j == 1) {
1513       xpos = dbox2[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0] * 2. - dsil[0] * 2. - dits[0];
1514       zpos = 0. - dits[2] + 1. - dits[2] * 2. - .1 - dits[2];
1515     } else if (j == 2) {
1516       xpos = -dbox2[0] + dits[0];
1517       zpos = 0. - dits[2] + 1. - dits[2];
1518     } else if (j == 3) {
1519       xpos = dbox2[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0] * 2. - dsil[0] * 2. - dits[0];
1520       zpos = 0.;
1521     } else if (j == 4) {
1522       xpos = -dbox2[0] + dits[0];
1523       zpos = dits[2] + 0. - 1. + dits[2];
1524     } else if (j == 5) {
1525       xpos = dbox2[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0] * 2. - dsil[0] * 2. - dits[0];
1526       zpos = dits[2] + 0. - 1. + dits[2] * 2. + .1 + dits[2];
1527     }
1528     pMC->Gspos("ITS3", j, "IDV2", xpos, ypos, zpos, 0, "ONLY");
1529   }
1530   
1531   // --- Place the larger ribs into their mother (IDV2) 
1532   
1533   
1534   // --- Right ribs (just a matter of convention) 
1535   
1536   xpos = .65 - dbox2[0] + dits[0];
1537   zpos = 0.;
1538   
1539   // --- Carbon 
1540   
1541   ypos = 2.81;
1542   pMC->Gspos("IR21", 1, "IDV2", xpos, ypos, zpos, 0, "ONLY");
1543   
1544   // --- Aluminum #1 
1545   
1546   ypos = dsup[1] + 2.81 + dal1[1];
1547   pMC->Gspos("IR22", 1, "IDV2", xpos, ypos, zpos, 0, "ONLY");
1548   
1549   // --- Kapton 
1550   
1551   ypos = dsup[1] + 2.81 + dal1[1] * 2. + dkap[1];
1552   pMC->Gspos("IR23", 1, "IDV2", xpos, ypos, zpos, 0, "ONLY");
1553   
1554   // --- Aluminum #2 
1555   
1556   ypos = dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 2. + dal2[1];
1557   pMC->Gspos("IR24", 1, "IDV2", xpos, ypos, zpos, 0, "ONLY");
1558   
1559   // --- Silicon (chip) 
1560   
1561   ypos = dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 2. + dal2[1] * 2. + dchi[1];
1562   pMC->Gspos("IR25", 1, "IDV2", xpos, ypos, zpos, 0, "ONLY");
1563   
1564   // --- Water 
1565   
1566   ypos = dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 2. + dal2[1] * 2. + dchi[1] * 2. + dwat[1];
1567   pMC->Gspos("IR26", 1, "IDV2", xpos, ypos, zpos, 0, "ONLY");
1568   
1569   // --- Aluminum #3 
1570   
1571   ypos = dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 2. + dal2[1] * 2. + dchi[1] * 2. + dwat[1] * 2. + dtub[1];
1572   pMC->Gspos("IR27", 1, "IDV2", xpos, ypos, zpos, 0, "ONLY");
1573   
1574   // --- Right ribs (just a matter of convention) 
1575   
1576   // --- Carbon 
1577   
1578   ypos = -2.81;
1579   pMC->Gspos("IR21", 2, "IDV2", xpos, ypos, zpos, 0, "ONLY");
1580   
1581   // --- Aluminum #1 
1582   
1583   ypos = -(dsup[1] + 2.81 + dal1[1]);
1584   pMC->Gspos("IR22", 2, "IDV2", xpos, ypos, zpos, 0, "ONLY");
1585   
1586   // --- Kapton 
1587   
1588   ypos = -(dsup[1] + 2.81 + dal1[1] * 2. + dkap[1]);
1589   pMC->Gspos("IR23", 2, "IDV2", xpos, ypos, zpos, 0, "ONLY");
1590   
1591   // --- Aluminum #2 
1592   
1593   ypos = -(dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 2. + dal2[1]);
1594   pMC->Gspos("IR24", 2, "IDV2", xpos, ypos, zpos, 0, "ONLY");
1595   
1596   // --- Silicon (chip) 
1597   
1598   ypos = -(dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 2. + dal2[1] * 2. + dchi[1]);
1599   pMC->Gspos("IR25", 2, "IDV2", xpos, ypos, zpos, 0, "ONLY");
1600   
1601   // --- Water 
1602   
1603   ypos = -(dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 2. + dal2[1] * 2. + dchi[1] * 2. + dwat[1]);
1604   pMC->Gspos("IR26", 2, "IDV2", xpos, ypos, zpos, 0, "ONLY");
1605   
1606   // --- Aluminum #3 
1607   
1608   ypos = -(dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 2. + dal2[1] * 2. + dchi[1] * 2. + dwat[1] * 2. + dtub[1]);
1609   pMC->Gspos("IR27", 2, "IDV2", xpos, ypos, zpos, 0, "ONLY");
1610   
1611   // --- Place the end-ladder stuff into its mother (IDV1) 
1612   
1613   
1614   // --- Negative-Z end-ladder 
1615   
1616   ypos = 0.;
1617   zpos = -(8.7*5.-2.*1.+2.*0.1)/2.-7.5;
1618   
1619   // --- PCB 
1620   
1621   xpos = dbox2[0] - dpcb[0];
1622   pMC->Gspos("IEL1", 3, "IDV2", xpos, ypos, zpos, 0, "ONLY");
1623   
1624   // --- Copper 
1625   
1626   xpos = dbox2[0] - dpcb[0] * 2. - dcop[0];
1627   pMC->Gspos("IEL2", 3, "IDV2", xpos, ypos, zpos, 0, "ONLY");
1628   
1629   // --- Ceramics 
1630   
1631   xpos = dbox2[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0];
1632   pMC->Gspos("IEL3", 3, "IDV2", xpos, ypos, zpos, 0, "ONLY");
1633   
1634   // --- Silicon (bus) 
1635   
1636   xpos = dbox2[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0] * 2. - dsil[0];
1637   pMC->Gspos("IEL4", 3, "IDV1", xpos, ypos, zpos, 0, "ONLY");
1638   
1639   // --- Positive-Z end-ladder 
1640   
1641   //yos  = 0.;
1642   zpos = (8.7*5.-2.*1.+2.*0.1)/2.+7.5;
1643   
1644   // --- PCB 
1645   
1646   xpos = dbox2[0] - dpcb[0];
1647   pMC->Gspos("IEL1", 4, "IDV2", xpos, ypos, zpos, 0, "ONLY");
1648   
1649   // --- Copper 
1650   
1651   xpos = dbox2[0] - dpcb[0] * 2. - dcop[0];
1652   pMC->Gspos("IEL2", 4, "IDV2", xpos, ypos, zpos, 0, "ONLY");
1653   
1654   // --- Ceramics 
1655   
1656   xpos = dbox2[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0];
1657   pMC->Gspos("IEL3", 4, "IDV2", xpos, ypos, zpos, 0, "ONLY");
1658   
1659   // --- Silicon (bus) 
1660   
1661   xpos = dbox2[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0] * 2. - dsil[0];
1662   pMC->Gspos("IEL4", 4, "IDV2", xpos, ypos, zpos, 0, "ONLY");
1663   
1664   //--- Place the ghost volumes containing the drift ladders of layer #3 in their
1665   //     mother volume (IT34) 
1666   //     Odd elements have large ribs and even elements have small ribs 
1667   
1668   for (i = 1; i <= 12; ++i) {
1669     atheta = (i-1) * 30.;
1670     AliMatrix(idrotm[i+1299], 90., atheta, 90., atheta + 90., 0.,0.);
1671     if (i % 2 == 0) {
1672       rzero = 14.;
1673       xpos = rzero * TMath::Cos((i-1) * twopi / 12.);
1674       ypos = rzero * TMath::Sin((i-1) * twopi / 12.);
1675       zpos = 0.;
1676       pMC->Gspos("IDV1", i, "IT34", xpos, ypos, zpos, idrotm[i+1299], "ONLY");
1677     } else {
1678       rzero = 13.85;
1679       xpos = rzero * TMath::Cos((i-1) * twopi / 12.);
1680       ypos = rzero * TMath::Sin((i-1) * twopi / 12.);
1681       zpos = 0.;
1682       pMC->Gspos("IDV2", i, "IT34", xpos, ypos, zpos, idrotm[i+1299], "ONLY");
1683     }
1684   }
1685   
1686   
1687   // --- Layer #4 
1688   
1689   //        GOTO 4567           ! skip ITS layer no. 4 
1690   
1691   //--- Define a ghost volume containing a single ladder of layer #4 (with the
1692   //     smaller lenght of ribs) and fill it with air or vacuum 
1693   
1694   dbox1[0] = 0.5+(0.0172+0.03+0.0252+0.04+0.003);
1695   dbox1[1] = 3.5;
1696   // the widest element is the end-ladder stuff 
1697   dbox1[2] = (8.7*7.-2.*0.7-2.*1.3)/2.+2.*7.5;
1698   // 7.5 cm is the lenght 
1699   pMC->Gsvolu("IDV3", "BOX ", idtmed[228], dbox1, 3);
1700   
1701   // --- Make the ghost volume invisible 
1702   
1703   pMC->Gsatt("IDV3", "SEEN", 0);
1704   
1705   // --- Define a volume containing the sensitive part of drifts 
1706   //     (silicon, layer #4) 
1707   
1708   dits[0] = .0172;
1709   // see material budget report by G. Feofilov 
1710   dits[1] = 3.125;
1711   dits[2] = 4.35;
1712   pMC->Gsvolu("ITS4", "BOX ", idtmed[224], dits, 3);
1713   
1714   //--- Define the part of the (smaller) rib between two sensitive parts made of
1715   //     carbon (layer #4) 
1716   
1717   dsup[0] = .5 - dits[0];
1718   dsup[1] = .01;
1719   dsup[2] = (8.7*7.-2.*0.7-2.*1.3)/2.+2.*7.5;
1720   // 7.5 cm is the lengh 
1721   pMC->Gsvolu("IR31", "BOX ", idtmed[227], dsup, 3);
1722   
1723   //--- Define the first part of the (smaller) rib between two sensitive parts
1724   //     made of aluminum (layer #4) 
1725   
1726   dal1[0] = .5 - dits[0];
1727   dal1[1] = 0.00096/2.;
1728   dal1[2] = (8.7*7.-2.*0.7-2.*1.3)/2.+2.*7.5;
1729   // 7.5 cm is the lengh 
1730   pMC->Gsvolu("IR32", "BOX ", idtmed[230], dal1, 3);
1731   
1732   //--- Define the part of the (smaller) rib between two sensitive parts made of
1733   //     kapton (layer #4) 
1734   
1735   dkap[0] = .5 - dits[0];
1736   dkap[1] = 0.0317/2.;
1737   dkap[2] = (8.7*7.-2.*0.7-2.*1.3)/2.+2.*7.5;
1738   // 7.5 cm is the lengh 
1739   pMC->Gsvolu("IR33", "BOX ", idtmed[236], dkap, 3);
1740   
1741   //--- Define the second part of the (smaller) rib between two sensitive parts
1742   //     made of aluminum (layer #4) 
1743   
1744   dal2[0] = .5 - dits[0];
1745   dal2[1] = 0.0027/2.;
1746   dal2[2] = (8.7*7.-2.*0.7-2.*1.3)/2.+2.*7.5;
1747   // 7.5 cm is the lengh 
1748   pMC->Gsvolu("IR34", "BOX ", idtmed[230], dal2, 3);
1749   
1750   // --- Define the part of the (smaller) rib between two sensitive parts 
1751   //     made of silicon (the electronics) (layer #4) 
1752   
1753   dchi[0] = .5 - dits[0];
1754   dchi[1] = 0.0071/2.;
1755   dchi[2] = (8.7*7.-2.*0.7-2.*1.3)/2.+2.*7.5;
1756   // 7.5 cm is the lengh 
1757   pMC->Gsvolu("IR35", "BOX ", idtmed[225], dal2, 3);
1758   
1759   // --- Define the part of the (smaller) rib between two sensitive parts 
1760   //     made of water (the cooler) (layer #4) 
1761   
1762   dwat[0] = .5 - dits[0];
1763   dwat[1] = 0.0093/2.;
1764   dwat[2] = (8.7*7.-2.*0.7-2.*1.3)/2.+2.*7.5;
1765   // 7.5 cm is the lenght 
1766   pMC->Gsvolu("IR36", "BOX ", idtmed[231], dwat, 3);
1767   
1768   //--- Define the third part of the (smaller) rib between two sensitive parts
1769   //     made of aluminum (the cooling tubes) (layer #4) 
1770   
1771   dtub[0] = .5 - dits[0];
1772   dtub[1] = 0.00134/2.;
1773   dtub[2] = (8.7*7.-2.*0.7-2.*1.3)/2.+2.*7.5;
1774   // 7.5 cm is the lengh 
1775   pMC->Gsvolu("IR37", "BOX ", idtmed[230], dtub, 3);
1776   
1777   // --- Define the part of the end-ladder stuff made of PCB (layer #4) 
1778   
1779   dpcb[0] = .03;
1780   // twice the foreseen thickness 
1781   dpcb[1] = 3.5;
1782   dpcb[2] = 7.5;
1783   pMC->Gsvolu("IEL5", "BOX ", idtmed[233], dpcb, 3);
1784   
1785   // --- Define the part of the end-ladder stuff made of copper (layer #4) 
1786   
1787   dcop[0] = .0252;
1788   // twice the foreseen thickness 
1789   dcop[1] = 3.5;
1790   dcop[2] = 7.5;
1791   pMC->Gsvolu("IEL6", "BOX ", idtmed[234], dcop, 3);
1792   
1793   // --- Define the part of the end-ladder stuff made of ceramics (layer #4)
1794   
1795   dcer[0] = .04;
1796   // twice the foreseen thickness 
1797   dcer[1] = 3.5;
1798   dcer[2] = 7.5;
1799   pMC->Gsvolu("IEL7", "BOX ", idtmed[235], dcer, 3);
1800   
1801   // --- Define the part of the end-ladder stuff made of silicon (layer #4) 
1802   
1803   dsil[0] = .003;
1804   // twice the foreseen thickness 
1805   dsil[1] = 3.5;
1806   dsil[2] = 7.5;
1807   pMC->Gsvolu("IEL8", "BOX ", idtmed[226], dsil, 3);
1808   
1809   //--- Place the sensitive part of the drifts (smaller ribs) into its mother
1810   //     (IDV3) 
1811   
1812   ypos = 0.;
1813   for (j = 1; j <= 7; ++j) {
1814     // odd elements are down and even elements are up 
1815     if (j == 1) {
1816       xpos = dbox1[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0] * 2. - dsil[0] * 2. - dits[0];
1817       zpos = 0. - dits[2] + .7 - dits[2] * 2. + 0. - dits[2] * 2. + 1.3 - dits[2];
1818     } else if (j == 2) {
1819       xpos = -dbox1[0] + dits[0];
1820       zpos = 0. - dits[2] + .7 - dits[2] * 2. + 0. - dits[2];
1821     } else if (j == 3) {
1822       xpos = dbox1[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0] * 2. - dsil[0] * 2. - dits[0];
1823       zpos = 0. - dits[2] + .7 - dits[2];
1824     } else if (j == 4) {
1825       xpos = -dbox1[0] + dits[0];
1826       zpos = 0.;
1827     } else if (j == 5) {
1828       xpos = dbox1[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0] * 2. - dsil[0] * 2. - dits[0];
1829       zpos = dits[2] + 0. - .7 + dits[2];
1830     } else if (j == 6) {
1831       xpos = -dbox1[0] + dits[0];
1832       zpos = dits[2] + 0. - .7 + dits[2] * 2. + 0. + dits[2];
1833     } else if (j == 7) {
1834       xpos = dbox1[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0] * 2. - dsil[0] * 2. - dits[0];
1835       zpos = dits[2] + 0. - .7 + dits[2] * 2. + 0. + dits[2] * 2. - 1.3 + dits[2];
1836     }
1837     pMC->Gspos("ITS4", j, "IDV3", xpos, ypos, zpos, 0, "ONLY");
1838   }
1839   
1840   // --- Place the smaller ribs into their mother (IDV3) 
1841   
1842   // --- Right ribs (just a matter of convention) 
1843   
1844   xpos = .5 - dbox1[0] + dits[0];
1845   zpos = 0.;
1846   
1847   // --- Carbon 
1848   
1849   ypos = 2.81;
1850   pMC->Gspos("IR31", 1, "IDV3", xpos, ypos, zpos, 0, "ONLY");
1851   
1852   // --- Aluminum #1 
1853   
1854   ypos = dsup[1] + 2.81 + dal1[1];
1855   pMC->Gspos("IR32", 1, "IDV3", xpos, ypos, zpos, 0, "ONLY");
1856   
1857   // --- Kapton 
1858
1859   ypos = dsup[1] + 2.81 + dal1[1] * 2. + dkap[1];
1860   pMC->Gspos("IR33", 1, "IDV3", xpos, ypos, zpos, 0, "ONLY");
1861   
1862   // --- Aluminum #2 
1863   
1864   ypos = dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 2. + dal2[1];
1865   pMC->Gspos("IR34", 1, "IDV3", xpos, ypos, zpos, 0, "ONLY");
1866   
1867   // --- Silicon (chip) 
1868   
1869   ypos = dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 2. + dal2[1] * 2. + dchi[1];
1870   pMC->Gspos("IR35", 1, "IDV3", xpos, ypos, zpos, 0, "ONLY");
1871   
1872   // --- Water 
1873   
1874   ypos = dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 2. + dal2[1] * 2. + dchi[1] * 2. + dwat[1];
1875   pMC->Gspos("IR36", 1, "IDV3", xpos, ypos, zpos, 0, "ONLY");
1876   
1877   // --- Aluminum #3 
1878   
1879   ypos = dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 2. + dal2[1] * 2. + dchi[1] * 2. + dwat[1] * 2. 
1880     + dtub[1];
1881   pMC->Gspos("IR37", 1, "IDV3", xpos, ypos, zpos, 0, "ONLY");
1882   
1883   // --- Right ribs (just a matter of convention) 
1884   
1885   // --- Carbon 
1886   
1887   ypos = -2.81;
1888   pMC->Gspos("IR31", 2, "IDV3", xpos, ypos, zpos, 0, "ONLY");
1889   
1890   // --- Aluminum #1 
1891   
1892   ypos = -(dsup[1] + 2.81 + dal1[1]);
1893   pMC->Gspos("IR32", 2, "IDV3", xpos, ypos, zpos, 0, "ONLY");
1894   
1895   // --- Kapton 
1896   
1897   ypos = -(dsup[1] + 2.81 + dal1[1] * 2. + dkap[1]);
1898   pMC->Gspos("IR33", 2, "IDV3", xpos, ypos, zpos, 0, "ONLY");
1899   
1900   // --- Aluminum #2 
1901   
1902   ypos = -(dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 
1903            2. + dal2[1]);
1904   pMC->Gspos("IR34", 2, "IDV3", xpos, ypos, zpos, 0, "ONLY");
1905   
1906   // --- Silicon (chip) 
1907   
1908   ypos = -(dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 
1909            2. + dal2[1] * 2. + dchi[1]);
1910   pMC->Gspos("IR35", 2, "IDV3", xpos, ypos, zpos, 0, "ONLY");
1911   
1912   // --- Water 
1913   
1914   ypos = -(dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 
1915            2. + dal2[1] * 2. + dchi[1] * 2. + dwat[1]);
1916   pMC->Gspos("IR36", 2, "IDV3", xpos, ypos, zpos, 0, "ONLY");
1917   
1918   // --- Aluminum #3 
1919   
1920   ypos = -(dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 
1921            2. + dal2[1] * 2. + dchi[1] * 2. + dwat[1] * 
1922            2. + dtub[1]);
1923   pMC->Gspos("IR37", 2, "IDV3", xpos, ypos, zpos, 0, "ONLY");
1924   
1925   // --- Place the end-ladder stuff into its mother (IDV1) 
1926   
1927   
1928   // --- Negative-Z end-ladder 
1929   
1930   ypos = 0.;
1931   zpos = -(8.7*7.-2.*0.7-2.*1.3)/2.-7.5;
1932   
1933   // --- PCB 
1934   
1935   xpos = dbox1[0] - dpcb[0];
1936   pMC->Gspos("IEL5", 1, "IDV3", xpos, ypos, zpos, 0, "ONLY");
1937   
1938   // --- Copper 
1939   
1940   xpos = dbox1[0] - dpcb[0] * 2. - dcop[0];
1941   pMC->Gspos("IEL6", 1, "IDV3", xpos, ypos, zpos, 0, "ONLY");
1942   
1943   // --- Ceramics 
1944   
1945   xpos = dbox1[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0];
1946   pMC->Gspos("IEL7", 1, "IDV3", xpos, ypos, zpos, 0, "ONLY");
1947   
1948   // --- Silicon (bus) 
1949   
1950   xpos = dbox1[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0] * 2. - dsil[0];
1951   pMC->Gspos("IEL8", 1, "IDV3", xpos, ypos, zpos, 0, "ONLY");
1952   
1953   // --- Positive-Z end-ladder 
1954   
1955   ypos = 0.;
1956   zpos = (8.7*7.-2.*0.7-2.*1.3)/2.-7.5;
1957   
1958   // --- PCB 
1959   
1960   xpos = dbox1[0] - dpcb[0];
1961   pMC->Gspos("IEL5", 2, "IDV3", xpos, ypos, zpos, 0, "ONLY");
1962   
1963   // --- Copper 
1964   
1965   xpos = dbox1[0] - dpcb[0] * 2. - dcop[0];
1966   pMC->Gspos("IEL6", 2, "IDV3", xpos, ypos, zpos, 0, "ONLY");
1967   
1968   // --- Ceramics 
1969   
1970   xpos = dbox1[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0];
1971   pMC->Gspos("IEL7", 2, "IDV3", xpos, ypos, zpos, 0, "ONLY");
1972   
1973   // --- Silicon (bus) 
1974   
1975   xpos = dbox1[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0] * 2. - dsil[0];
1976   pMC->Gspos("IEL8", 2, "IDV3", xpos, ypos, zpos, 0, "ONLY");
1977   
1978   //--- Define a ghost volume containing a single ladder of layer #4 (with the
1979   //     larger lenght of ribs) and fill it with air or vacuum 
1980   
1981   dbox2[0] = 0.65+(0.0172+0.03+0.0252+0.04+0.003);
1982   dbox2[1] = 3.5;
1983   // the widest element is the end-ladder stuff 
1984   dbox2[2] = (8.7*7.-2.*0.7-2.*1.3)/2.+2.*7.5;
1985   // 7.5 cm is the lenght 
1986   pMC->Gsvolu("IDV4", "BOX ", idtmed[228], dbox2, 3);
1987   
1988   // --- Make the ghost volume invisible 
1989   
1990   pMC->Gsatt("IDV4", "SEEN", 0);
1991   
1992   //--- Define the part of the (larger) rib between two sensitive parts madeof
1993   //     carbon (layer #4) 
1994   
1995   dsup[0] = .65 - dits[0];
1996   dsup[1] = .01;
1997   dsup[2] = (8.7*7.-2.*0.7-2.*1.3)/2.+2.*7.5;
1998   // 7.5 cm is the lengh 
1999   pMC->Gsvolu("IR41", "BOX ", idtmed[227], dsup, 3);
2000   
2001   //--- Define the first part of the (larger) rib between two sensitive parts
2002   //     made of aluminum (layer #4) 
2003   
2004   dal1[0] = .65 - dits[0];
2005   dal1[1] = 0.00096/2.;
2006   dal1[2] = (8.7*7.-2.*0.7-2.*1.3)/2.+2.*7.5;
2007   // 7.5 cm is the lengh 
2008   pMC->Gsvolu("IR42", "BOX ", idtmed[230], dal1, 3);
2009   
2010   //--- Define the part of the (larger) rib between two sensitive parts madeof
2011   //     kapton (layer #4) 
2012   
2013   dkap[0] = .65 - dits[0];
2014   dkap[1] = 0.0317/2.;
2015   dkap[2] = (8.7*7.-2.*0.7-2.*1.3)/2.+2.*7.5;
2016   // 7.5 cm is the lengh 
2017   pMC->Gsvolu("IR43", "BOX ", idtmed[236], dkap, 3);
2018   
2019   //--- Define the second part of the (larger) rib between two sensitive parts
2020   //     made of aluminum (layer #4) 
2021   
2022   dal2[0] = .65 - dits[0];
2023   dal2[1] = 0.0027/2.;
2024   dal2[2] = (8.7*7.-2.*0.7-2.*1.3)/2.+2.*7.5;
2025   // 7.5 cm is the lengh 
2026   pMC->Gsvolu("IR44", "BOX ", idtmed[230], dal2, 3);
2027   
2028   // --- Define the part of the (larger) rib between two sensitive parts 
2029   //     made of silicon (the electronics) (layer #4) 
2030   
2031   dchi[0] = .65 - dits[0];
2032   dchi[1] = 0.0071/2.;
2033   dchi[2] = (8.7*7.-2.*0.7-2.*1.3)/2.+2.*7.5;
2034   // 7.5 cm is the lengh 
2035   pMC->Gsvolu("IR45", "BOX ", idtmed[225], dal2, 3);
2036   
2037   // --- Define the part of the (larger) rib between two sensitive parts 
2038   //     made of water (the cooler) (layer #4) 
2039   
2040   dwat[0] = .65 - dits[0];
2041   dwat[1] = 0.0093/2.;
2042   dwat[2] = (8.7*7.-2.*0.7-2.*1.3)/2.+2.*7.5;
2043   // 7.5 cm is the lengh 
2044   pMC->Gsvolu("IR46", "BOX ", idtmed[231], dwat, 3);
2045   
2046   //--- Define the third part of the (larger) rib between two sensitive parts
2047   //     made of aluminum (the cooling tubes) (layer #4) 
2048   
2049   dtub[0] = .65 - dits[0];
2050   dtub[1] = 0.00134/2.;
2051   dtub[2] = (8.7*7.-2.*0.7-2.*1.3)/2.+2.*7.5;
2052   // 7.5 cm is the lengh 
2053   pMC->Gsvolu("IR47", "BOX ", idtmed[230], dtub, 3);
2054   
2055   //--- Place the sensitive part of the drifts (smaller ribs) into its mother
2056   //     (IDV4) 
2057   
2058   ypos = 0.;
2059   for (j = 1; j <= 7; ++j) {
2060     // odd elements are down and even elements are up 
2061     if (j == 1) {
2062       xpos = dbox2[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0] * 2. - dsil[0] * 2. - dits[0];
2063       zpos = 0. - dits[2] + .7 - dits[2] * 2. + 0. - dits[2] * 2. + 1.3 - dits[2];
2064     } else if (j == 2) {
2065       xpos = -dbox2[0] + dits[0];
2066       zpos = 0. - dits[2] + .7 - dits[2] * 2. + 0. - dits[2];
2067     } else if (j == 3) {
2068       xpos = dbox2[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0] * 2. - dsil[0] * 2. - dits[0];
2069       zpos = 0. - dits[2] + .7 - dits[2];
2070     } else if (j == 4) {
2071       xpos = -dbox2[0] + dits[0];
2072       zpos = 0.;
2073     } else if (j == 5) {
2074       xpos = dbox2[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0] * 2. - dsil[0] * 2. - dits[0];
2075       zpos = dits[2] + 0. - .7 + dits[2];
2076     } else if (j == 6) {
2077       xpos = -dbox2[0] + dits[0];
2078       zpos = dits[2] + 0. - .7 + dits[2] * 2. + 0. + dits[2];
2079     } else if (j == 7) {
2080       xpos = dbox2[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0] * 2. - dsil[0] * 2. - dits[0];
2081       zpos = dits[2] + 0. - .7 + dits[2] * 2. + 0. + dits[2] * 2. - 1.3 + dits[2];
2082     }
2083     pMC->Gspos("ITS4", j, "IDV4", xpos, ypos, zpos, 0, "ONLY");
2084   }
2085   
2086   // --- Place the larger ribs into their mother (IDV4) 
2087   
2088   
2089   // --- Right ribs (just a matter of convention) 
2090   
2091   xpos = .65 - dbox2[0] + dits[0];
2092   zpos = 0.;
2093   
2094   // --- Carbon 
2095   
2096   ypos = 2.81;
2097   pMC->Gspos("IR41", 1, "IDV4", xpos, ypos, zpos, 0, "ONLY");
2098   
2099   // --- Aluminum #1 
2100   
2101   ypos = dsup[1] + 2.81 + dal1[1];
2102   pMC->Gspos("IR42", 1, "IDV4", xpos, ypos, zpos, 0, "ONLY");
2103   
2104   // --- Kapton 
2105   
2106   ypos = dsup[1] + 2.81 + dal1[1] * 2. + dkap[1];
2107   pMC->Gspos("IR43", 1, "IDV4", xpos, ypos, zpos, 0, "ONLY");
2108   
2109   // --- Aluminum #2 
2110   
2111   ypos = dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 2. + dal2[1];
2112   pMC->Gspos("IR44", 1, "IDV4", xpos, ypos, zpos, 0, "ONLY");
2113   
2114   // --- Silicon (chip) 
2115   
2116   ypos = dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 2. + dal2[1] * 2. + dchi[1];
2117   pMC->Gspos("IR45", 1, "IDV4", xpos, ypos, zpos, 0, "ONLY");
2118   
2119   // --- Water 
2120   
2121   ypos = dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 2. + dal2[1] * 2. + dchi[1] * 2. + dwat[1];
2122   pMC->Gspos("IR46", 1, "IDV4", xpos, ypos, zpos, 0, "ONLY");
2123   
2124   // --- Aluminum #3 
2125   
2126   ypos = dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 2. + dal2[1] * 2. + dchi[1] * 2. + dwat[1] * 2. 
2127     + dtub[1];
2128   pMC->Gspos("IR47", 1, "IDV4", xpos, ypos, zpos, 0, "ONLY");
2129   
2130   // --- Right ribs (just a matter of convention) 
2131   
2132   // --- Carbon 
2133   
2134   ypos = -2.81;
2135   pMC->Gspos("IR41", 2, "IDV4", xpos, ypos, zpos, 0, "ONLY");
2136   
2137   // --- Aluminum #1 
2138   
2139   ypos = -(dsup[1] + 2.81 + dal1[1]);
2140   pMC->Gspos("IR42", 2, "IDV4", xpos, ypos, zpos, 0, "ONLY");
2141   
2142   // --- Kapton 
2143   
2144   ypos = -(dsup[1] + 2.81 + dal1[1] * 2. + dkap[1]);
2145   pMC->Gspos("IR43", 2, "IDV4", xpos, ypos, zpos, 0, "ONLY");
2146   
2147   // --- Aluminum #2 
2148   
2149   ypos = -(dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 
2150            2. + dal2[1]);
2151   pMC->Gspos("IR44", 2, "IDV4", xpos, ypos, zpos, 0, "ONLY");
2152   
2153   // --- Silicon (chip) 
2154   
2155   ypos = -(dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 
2156            2. + dal2[1] * 2. + dchi[1]);
2157   pMC->Gspos("IR45", 2, "IDV4", xpos, ypos, zpos, 0, "ONLY");
2158   
2159   // --- Water 
2160   
2161   ypos = -(dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 
2162            2. + dal2[1] * 2. + dchi[1] * 2. + dwat[1]);
2163   pMC->Gspos("IR46", 2, "IDV4", xpos, ypos, zpos, 0, "ONLY");
2164   
2165   // --- Aluminum #3 
2166   
2167   ypos = -(dsup[1] + 2.81 + dal1[1] * 2. + dkap[1] * 
2168            2. + dal2[1] * 2. + dchi[1] * 2. + dwat[1] * 2. + dtub[1]);
2169   pMC->Gspos("IR47", 2, "IDV4", xpos, ypos, zpos, 0, "ONLY");
2170   
2171   // --- Place the end-ladder stuff into its mother (IDV1) 
2172   
2173   
2174   // --- Negative-Z end-ladder 
2175   
2176   ypos = 0.;
2177   zpos = -(8.7*7.-2.*0.7-2.*1.3)/2.-7.5;
2178   
2179   // --- PCB 
2180   
2181   xpos = dbox2[0] - dpcb[0];
2182   pMC->Gspos("IEL5", 3, "IDV4", xpos, ypos, zpos, 0, "ONLY");
2183   
2184   // --- Copper 
2185   
2186   xpos = dbox2[0] - dpcb[0] * 2. - dcop[0];
2187   pMC->Gspos("IEL6", 3, "IDV4", xpos, ypos, zpos, 0, "ONLY");
2188   
2189   // --- Ceramics 
2190   
2191   xpos = dbox2[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0];
2192   pMC->Gspos("IEL7", 3, "IDV4", xpos, ypos, zpos, 0, "ONLY");
2193   
2194   // --- Silicon (bus) 
2195   
2196   xpos = dbox2[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0] * 2. - dsil[0];
2197   pMC->Gspos("IEL8", 3, "IDV4", xpos, ypos, zpos, 0, "ONLY");
2198   
2199   // --- Positive-Z end-ladder 
2200   
2201   //yos  = 0.;
2202   zpos = (8.7*7.-2.*0.7-2.*1.3)/2.-7.5;
2203   
2204   // --- PCB 
2205   
2206   xpos = dbox2[0] - dpcb[0];
2207   pMC->Gspos("IEL5", 4, "IDV4", xpos, ypos, zpos, 0, "ONLY");
2208   
2209   // --- Copper 
2210   
2211   xpos = dbox2[0] - dpcb[0] * 2. - dcop[0];
2212   pMC->Gspos("IEL6", 4, "IDV4", xpos, ypos, zpos, 0, "ONLY");
2213   
2214   // --- Ceramics 
2215   
2216   xpos = dbox2[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0];
2217   pMC->Gspos("IEL7", 4, "IDV4", xpos, ypos, zpos, 0, "ONLY");
2218   
2219   // --- Silicon (bus) 
2220   
2221   xpos = dbox2[0] - dpcb[0] * 2. - dcop[0] * 2. - dcer[0] * 2. - dsil[0];
2222   pMC->Gspos("IEL8", 4, "IDV4", xpos, ypos, zpos, 0, "ONLY");
2223   
2224   //--- Place the ghost volumes containing the drift ladders of layer #4 in their
2225   //     mother volume (IT34) 
2226   //     Odd elements have large ribs and even elements have small ribs 
2227   
2228   for (i = 1; i <= 24; ++i) {
2229     atheta = (i-1) * 15.;
2230     AliMatrix(idrotm[i+1399], 90., atheta, 90., atheta + 90., 0.,0.);
2231     if (i % 2 == 0) {
2232       rzero = 23.5;
2233       xpos = rzero * TMath::Cos((i-1) * twopi / 24.);
2234       ypos = rzero * TMath::Sin((i-1) * twopi / 24.);
2235       zpos = 0.;
2236       pMC->Gspos("IDV3", i, "IT34", xpos, ypos, zpos, idrotm[i+1399], "ONLY");
2237     } else {
2238       rzero = (24.0+22.8)/2.;
2239       xpos = rzero * TMath::Cos((i-1) * twopi / 24.);
2240       ypos = rzero * TMath::Sin((i-1) * twopi / 24.);
2241       zpos = 0.;
2242       pMC->Gspos("IDV4", i, "IT34", xpos, ypos, zpos, idrotm[i+1399], "ONLY");
2243     }
2244   }
2245   
2246   //************************************************************************
2247   //*                                                                      *
2248   //*                               S T R I P S                            *
2249   //*                               ===========                            *
2250   //*                                                                      *
2251   //************************************************************************
2252   
2253   // --- Define SSD with the 35+39 lay-out 
2254   
2255   if (fMinorVersion < 3) {
2256     
2257     //--- Define ghost volume containing the Strip Detectors and fill it with air
2258     //     or vacuum 
2259     
2260     xxm    = (49.999-3.)/(70.-25.);
2261     dgh[0] = 0.;
2262     dgh[1] = 360.;
2263     dgh[2] = 4.;
2264     dgh[3] = -25.-(9.-3.01)/xxm-(9.01-9.)/xxm-(27.-9.01)/xxm-
2265       (37.-27)/xxm-(49.998-37.)/xxm;
2266     dgh[4] = 49.998;
2267     dgh[5] = 49.998;
2268     dgh[6] = -25.-(9.-3.01)/xxm-(9.01-9.)/xxm-(27.-9.01)/xxm-
2269       (37.-27)/xxm;
2270     dgh[7] = 37.;
2271     dgh[8] = 49.998;
2272     dgh[9] = 25.+(9.-3.01)/xxm+(9.01-9.)/xxm+(27.-9.01)/xxm+
2273       (37.-27)/xxm;
2274     dgh[10] = 37.;
2275     dgh[11] = 49.998;
2276     dgh[12] = 25.+(9.-3.01)/xxm+(9.01-9.)/xxm+(27.-9.01)/xxm+
2277       (37.-27)/xxm+(49.998-37.)/xxm;
2278     dgh[13] = 49.998;
2279     dgh[14] = 49.998;
2280     pMC->Gsvolu("IT56", "PCON", idtmed[275], dgh, 15);
2281     pMC->Gspos("IT56", 1, "ITSV", 0., 0., 0., 0, "ONLY");
2282     pMC->Gsatt("IT56", "SEEN", 0);
2283     
2284     // --- Layer #5 
2285     
2286     //        GOTO 5678           ! skip ITS layer no. 5 
2287     
2288     //--- Define a ghost volume containing a single ladder of layer #5 andfill
2289     //     it with air or vacuum 
2290     
2291     dbox1[0] = (0.0600+2.*0.0150)/2.;
2292     dbox1[1] = 3.75;
2293     dbox1[2] = 90.22/2.;
2294     pMC->Gsvolu("ISV1", "BOX ", idtmed[253], dbox1, 3);
2295     
2296     // --- Make the ghost volume invisible 
2297     
2298     pMC->Gsatt("ISV1", "SEEN", 0);
2299     
2300     // --- Define a ghost volume containing the electronics and cooling of
2301     //     a single ladder of layer #5 and fill it with air or vacuum 
2302     
2303     dsrv[0] = (TMath::Sqrt(3.) / 2. * 4.2 + .47 + .05) / 2.;
2304     dsrv[1] = 3.75;
2305     dsrv[2] = 90.22/2.;
2306     pMC->Gsvolu("SSV1", "BOX ", idtmed[253], dsrv, 3);
2307     
2308     // --- Make the ghost volume invisible 
2309     
2310     pMC->Gsatt("SSV1", "SEEN", 0);
2311     
2312     // --- Define a ghost volume containing the end-ladder stuff of 
2313     //     a single ladder of layer #5 and fill it with air or vacuum 
2314     
2315     dela[0] = 2.;
2316     dela[1] = 3.5;
2317     dela[2] = 4.;
2318     pMC->Gsvolu("ELL5", "BOX ", idtmed[253], dela, 3);
2319     
2320     // --- Make the ghost volume invisible 
2321     
2322     pMC->Gsatt("ELL5", "SEEN", 0);
2323     
2324     // --- Define a volume containing the sensitive part of the strips 
2325     //     (silicon, layer #5) 
2326     
2327     dits[0] = .015;
2328     dits[1] = 3.75;
2329     dits[2] = 2.1;
2330     pMC->Gsvolu("ITS5", "BOX ", idtmed[249], dits, 3);
2331     
2332     // --- Define a volume containing the electronics of the strips 
2333     //     (silicon, layer #5) 
2334     
2335     dchi[0] = .02;
2336     dchi[1] = 3.4;
2337     dchi[2] = .525;
2338     pMC->Gsvolu("SCH5", "BOX ", idtmed[250], dchi, 3);
2339     
2340     // --- Define the cooling tubes (aluminum, layer #5) 
2341     
2342     dtub[0] = .09;
2343     dtub[1] = dtub[0] + .01;
2344     dtub[2] = 90.22/2.;
2345     pMC->Gsvolu("STB5", "TUBE", idtmed[255], dtub, 3);
2346     
2347     // --- Define the cooling fluid (water or freon, layer #5) 
2348     
2349     dwat[0] = 0.;
2350     dwat[1] = .09;
2351     dwat[2] = 90.22/2.;
2352     pMC->Gsvolu("SWT5", "TUBE", idtmed[256], dwat, 3);
2353     //        CALL GSVOLU('SWT5','TUBE',IDTMED(258),DWAT,3,IOUT)   ! freon
2354     
2355     //--- Define the (triangular) element of the heat bridge (carbon, layer #5)
2356     
2357     // water 
2358     dfra[0] = 120.;
2359     dfra[1] = 360.;
2360     dfra[2] = 3.;
2361     dfra[3] = 2.;
2362     dfra[4] = -.015;
2363     dfra[5] = TMath::Sqrt(3.) * 4.2 / 6.;
2364     dfra[6] = dfra[5] + .03;
2365     dfra[7] = .015;
2366     dfra[8] = dfra[5];
2367     dfra[9] = dfra[6];
2368     pMC->Gsvolu("SFR5", "PGON", idtmed[252], dfra, 10);
2369     
2370     // --- Define the element connecting the triangles of the heat bridge 
2371     //     (carbon, layer #5) 
2372     
2373     dcei[0] = 0.;
2374     dcei[1] = .03;
2375     dcei[2] = 90.22/2.;
2376     pMC->Gsvolu("SCE5", "TUBE", idtmed[252], dcei, 3);
2377     
2378     // --- Define the part of the end-ladder stuff made of plastic (G10FR4) 
2379     //     (layer #5) 
2380     
2381     dpla[0] = (10./(8.*7.))/2.;
2382     dpla[1] = 3.5;
2383     dpla[2] = 4.;
2384     pMC->Gsvolu("EPL5", "BOX ", idtmed[262], dpla, 3);
2385     
2386     // --- Define the part of the end-ladder stuff made of copper (layer #5) 
2387     
2388     dcop[0] = (2./(8.*7.))/2.;
2389     dcop[1] = 3.5;
2390     dcop[2] = 4.;
2391     pMC->Gsvolu("ECU5", "BOX ", idtmed[259], dcop, 3);
2392     
2393     // --- Define the part of the end-ladder stuff made of epoxy (layer #5) 
2394     
2395     depx[0] = (30./(8.*7.))/2.;
2396     depx[1] = 3.5;
2397     depx[2] = 4.;
2398     pMC->Gsvolu("EPX5", "BOX ", idtmed[262], depx, 3);
2399     
2400     // --- Define the part of the end-ladder stuff made of silicon (bus) 
2401     //     (layer #5) 
2402     
2403     dsil[0] = (20./(8.*7.))/2.;
2404     dsil[1] = 3.5;
2405     dsil[2] = 4.;
2406     pMC->Gsvolu("ESI5", "BOX ", idtmed[251], dsil, 3);
2407     
2408     // --- Place the end-ladder stuff into its mother (ELL5) 
2409     
2410     sep = (4. - (dpla[0] + dcop[0] + depx[0] + dsil[0]) * 2.) / 3.;
2411     ypos = 0.;
2412     zpos = 0.;
2413     
2414     // --- Plastic 
2415     
2416     xpos = -dela[0] + dpla[0];
2417     pMC->Gspos("EPL5", 1, "ELL5", xpos, ypos, zpos, 0, "ONLY");
2418     
2419     // --- Copper 
2420     
2421     xpos = -dela[0] + dpla[0] * 2. + sep + dcop[0];
2422     pMC->Gspos("ECU5", 1, "ELL5", xpos, ypos, zpos, 0, "ONLY");
2423     
2424     // --- Epoxy 
2425     
2426     xpos = -dela[0] + dpla[0] * 2. + sep + dcop[0] * 2. + sep + depx[0];
2427     pMC->Gspos("EPX5", 1, "ELL5", xpos, ypos, zpos, 0, "ONLY");
2428     
2429     // --- Silicon (bus) 
2430     
2431     xpos = -dela[0] + dpla[0] * 2. + sep + dcop[0] * 2. + sep + depx[0] * 2. + sep + dsil[0];
2432     pMC->Gspos("ESI5", 1, "ELL5", xpos, ypos, zpos, 0, "ONLY");
2433     
2434     // --- Place the sensitive part of the strips into its mother (ISV1) 
2435     
2436     ypos = 0.;
2437     for (j = 1; j <= 23; ++j) {
2438       if (j % 2 == 0) xpos = dbox1[0] - dits[0];
2439       else            xpos = -dbox1[0] + dits[0];
2440       zpos = ((j - 1) - 11.) * 3.91;
2441       pMC->Gspos("ITS5", j, "ISV1", xpos, ypos, zpos, 0, "ONLY");
2442     }
2443     
2444     // --- Place the electronics of the strips into its mother (SSV1) 
2445     
2446     ypos = 0.;
2447     for (j = 1; j <= 23; ++j) {
2448       if (j % 2 == 0) xpos = -dsrv[0] + .28;
2449       else            xpos = -dsrv[0] + .28 - dits[0] * 2. - .03;
2450       zpos = ((j - 1) - 11.) * 3.91 + .85;
2451       pMC->Gspos("SCH5", j, "SSV1", xpos, ypos, zpos, 0, "ONLY");
2452     }
2453     
2454     //--- Place the cooling tubes and the cooling fluid into their mother (SSV1)
2455     
2456     xpos = -dsrv[0] + .41;
2457     zpos = 0.;
2458     
2459     // --- Left tube (just a matter of convention) 
2460     
2461     ypos = -2.25-0.1;
2462     pMC->Gspos("STB5", 1, "SSV1", xpos, ypos, zpos, 0, "ONLY");
2463     pMC->Gspos("SWT5", 1, "SSV1", xpos, ypos, zpos, 0, "ONLY");
2464     
2465     // --- Right tube (just a matter of convention) 
2466     
2467     ypos = 2.25+0.1;
2468     pMC->Gspos("STB5", 2, "SSV1", xpos, ypos, zpos, 0, "ONLY");
2469     pMC->Gspos("SWT5", 2, "SSV1", xpos, ypos, zpos, 0, "ONLY");
2470     
2471     // --- Place the heat bridge elements into their mother (SSV1) 
2472     
2473     xpos = -dsrv[0] + .47 + TMath::Sqrt(3.) / 6. * 4.2;
2474     ypos = 0.;
2475     for (j = 1; j <= 24; ++j) {
2476       zpos = ((j - 1) - 11.) * 3.91 - -4.2/2.;
2477       pMC->Gspos("SFR5", j, "SSV1", xpos, ypos, zpos, 0, "ONLY");
2478     }
2479     
2480     // --- Place the elements connecting the triangles of the heat bridge 
2481     //     into their mother (SSV1) 
2482     
2483     zpos = 0.;
2484     
2485     // --- Left element (just a matter of convention) 
2486     
2487     xpos = -dsrv[0] + .47;
2488     ypos = -(2.1+0.015);
2489     pMC->Gspos("SCE5", 1, "SSV1", xpos, ypos, zpos, 0, "ONLY");
2490     
2491     // --- Right element 
2492     
2493     xpos = -dsrv[0] + .47;
2494     ypos = 2.1+0.015;
2495     pMC->Gspos("SCE5", 2, "SSV1", xpos, ypos, zpos, 0, "ONLY");
2496     
2497     // --- Top element 
2498     
2499     xpos = -dsrv[0] + .47 + TMath::Sqrt(3.) / 2. * 4.2 + .015;
2500     ypos = 0.;
2501     pMC->Gspos("SCE5", 3, "SSV1", xpos, ypos, zpos, 0, "ONLY");
2502     
2503     // --- Place the ghost volumes containing the strip ladders (ISV1), 
2504     //    electronics/cooling (SSV1) and end-ladder stuff (ELL5) of layer #5 in
2505     //     their mother volume (IT56) 
2506     
2507     offset1 = TMath::ATan2(.9, 40.);
2508     offset2 = 5.2;
2509     rzero   = dbox1[0] + 40.;
2510     runo    = dbox1[0] * 2. + 40. + dsrv[0];
2511     rtwo    = dbox1[0] * 2. + 40. + dela[0];
2512     for (i = 1; i <= 35; ++i) {
2513       atheta = (i-1) * twopi * raddeg / 35. + offset2;
2514       AliMatrix(idrotm[i+1499], 90., atheta, 90., atheta + 90., 0., 0.);
2515       
2516       // --- Strip ladders 
2517       
2518       xpos = rzero * TMath::Cos((i-1) * twopi / 35. + offset1);
2519       ypos = rzero * TMath::Sin((i-1) * twopi / 35. + offset1);
2520       zpos = 0.;
2521       pMC->Gspos("ISV1", i, "IT56", xpos, ypos, zpos, idrotm[i+1499], "ONLY");
2522       
2523       // --- Electronics/cooling 
2524       
2525       xpos = runo * TMath::Cos((i-1) * twopi / 35. + offset1);
2526       ypos = runo * TMath::Sin((i-1) * twopi / 35. + offset1);
2527       zpos = 0.;
2528       pMC->Gspos("SSV1", i, "IT56", xpos, ypos, zpos, idrotm[i+1499], "ONLY");
2529       
2530       // --- End-ladders (nagative-Z and positive-Z) 
2531       
2532       xpos = rtwo * TMath::Cos((i-1) * twopi / 35. + offset1);
2533       ypos = rtwo * TMath::Sin((i-1) * twopi / 35. + offset1);
2534       zpos = -(dbox1[2] + dela[2] + 6.);
2535       pMC->Gspos("ELL5", i, "IT56", xpos, ypos, zpos, idrotm[i+1499], "ONLY");
2536       zpos = dbox1[2] + dela[2] + 6.;
2537       pMC->Gspos("ELL5", i + 35, "IT56", xpos, ypos, zpos, idrotm[i+1499], "ONLY");
2538     }
2539     
2540     
2541     // --- Layer #6 
2542     
2543     //        GOTO 5778           ! skip ITS layer no. 6 
2544     
2545     //--- Define a ghost volume containing a single ladder of layer #6 andfill
2546     //     it with air or vacuum 
2547     
2548     dbox2[0] = (0.0600+2.*0.0150)/2.;
2549     dbox2[1] = 3.75;
2550     dbox2[2] = 101.95/2.;
2551     pMC->Gsvolu("ISV2", "BOX ", idtmed[253], dbox2, 3);
2552     
2553     // --- Make the ghost volume invisible 
2554     
2555     pMC->Gsatt("ISV2", "SEEN", 0);
2556     
2557     // --- Define a ghost volume containing the electronics and cooling of
2558     //     a single ladder of layer #6 and fill it with air or vacuum 
2559     
2560     dsrv[0] = (TMath::Sqrt(3.) / 2. * 4.2 + .47 + .05) / 2.;
2561     dsrv[1] = 3.75;
2562     dsrv[2] = 101.95/2.;
2563     pMC->Gsvolu("SSV2", "BOX ", idtmed[253], dsrv, 3);
2564     
2565     // --- Make the ghost volume invisible 
2566     
2567     pMC->Gsatt("SSV2", "SEEN", 0);
2568     
2569     // --- Define a ghost volume containing the end-ladder stuff of 
2570     //     a single ladder of layer #6 and fill it with air or vacuum 
2571     
2572     dela[0] = 2.;
2573     dela[1] = 3.5;
2574     dela[2] = 4.;
2575     pMC->Gsvolu("ELL6", "BOX ", idtmed[253], dela, 3);
2576     
2577     // --- Make the ghost volume invisible 
2578     
2579     pMC->Gsatt("ELL6", "SEEN", 0);
2580     
2581     // --- Define a volume containing the sensitive part of the strips 
2582     //     (silicon, layer #6) 
2583     
2584     dits[0] = .015;
2585     dits[1] = 3.75;
2586     dits[2] = 2.1;
2587     pMC->Gsvolu("ITS6", "BOX ", idtmed[249], dits, 3);
2588     
2589     // --- Define a volume containing the electronics of the strips 
2590     //     (silicon, layer #6) 
2591     
2592     dchi[0] = .02;
2593     dchi[1] = 3.4;
2594     dchi[2] = .525;
2595     pMC->Gsvolu("SCH6", "BOX ", idtmed[250], dchi, 3);
2596     
2597     // --- Define the cooling tubes (aluminum, layer #6) 
2598     
2599     dtub[0] = .09;
2600     dtub[1] = dtub[0] + .01;
2601     dtub[2] = 101.95/2.;
2602     pMC->Gsvolu("STB6", "TUBE", idtmed[255], dtub, 3);
2603     
2604     // --- Define the cooling fluid (water or freon, layer #6) 
2605     
2606     dwat[0] = 0.;
2607     dwat[1] = .09;
2608     dwat[2] = 101.95/2.;
2609     pMC->Gsvolu("SWT6", "TUBE", idtmed[256], dwat, 3);
2610     //        CALL GSVOLU('SWT6','TUBE',IDTMED(258),DWAT,3,IOUT)   ! freon
2611     
2612     //--- Define the (triangular) element of the heat bridge (carbon, layer #6)
2613     
2614     // water 
2615     dfra[0] = 120.;
2616     dfra[1] = 360.;
2617     dfra[2] = 3.;
2618     dfra[3] = 2.;
2619     dfra[4] = -.015;
2620     dfra[5] = TMath::Sqrt(3.) * 4.2 / 6.;
2621     dfra[6] = dfra[5] + .03;
2622     dfra[7] = .015;
2623     dfra[8] = dfra[5];
2624     dfra[9] = dfra[6];
2625     pMC->Gsvolu("SFR6", "PGON", idtmed[252], dfra, 10);
2626     
2627     // --- Define the element connecting the triangles of the heat bridge 
2628     //     (carbon, layer #6) 
2629     
2630     dcei[0] = 0.;
2631     dcei[1] = .03;
2632     dcei[2] = 101.95/2.;
2633     pMC->Gsvolu("SCE6", "TUBE", idtmed[252], dcei, 3);
2634     
2635     // --- Define the part of the end-ladder stuff made of plastic (G10FR4) 
2636     //     (layer #6) 
2637     
2638     dpla[0] = (10./(8.*7.))/2.;
2639     dpla[1] = 3.5;
2640     dpla[2] = 4.;
2641     pMC->Gsvolu("EPL6", "BOX ", idtmed[262], dpla, 3);
2642     
2643     // --- Define the part of the end-ladder stuff made of copper (layer #6) 
2644     
2645     dcop[0] = (2./(8.*7.))/2.;
2646     dcop[1] = 3.5;
2647     dcop[2] = 4.;
2648     pMC->Gsvolu("ECU6", "BOX ", idtmed[259], dcop, 3);
2649     
2650     // --- Define the part of the end-ladder stuff made of epoxy (layer #6) 
2651     
2652     depx[0] = (30./(8.*7.))/2.;
2653     depx[1] = 3.5;
2654     depx[2] = 4.;
2655     pMC->Gsvolu("EPX6", "BOX ", idtmed[262], depx, 3);
2656     
2657     // --- Define the part of the end-ladder stuff made of silicon (bus) 
2658     //     (layer #6) 
2659     
2660     dsil[0] = (20./(8.*7.))/2.;
2661     dsil[1] = 3.5;
2662     dsil[2] = 4.;
2663     pMC->Gsvolu("ESI6", "BOX ", idtmed[251], dsil, 3);
2664     
2665     // --- Place the end-ladder stuff into its mother (ELL5) 
2666     
2667     sep  = (4. - (dpla[0] + dcop[0] + depx[0] + dsil[0]) * 2.) / 3.;
2668     ypos = 0.;
2669     zpos = 0.;
2670     
2671     // --- Plastic 
2672     
2673     xpos = -dela[0] + dpla[0];
2674     pMC->Gspos("EPL6", 1, "ELL6", xpos, ypos, zpos, 0, "ONLY");
2675     
2676     // --- Copper 
2677     
2678     xpos = -dela[0] + dpla[0] * 2. + sep + dcop[0];
2679     pMC->Gspos("ECU6", 1, "ELL6", xpos, ypos, zpos, 0, "ONLY");
2680     
2681     // --- Epoxy 
2682     
2683     xpos = -dela[0] + dpla[0] * 2. + sep + dcop[0] * 2. + sep + depx[0];
2684     pMC->Gspos("EPX6", 1, "ELL6", xpos, ypos, zpos, 0, "ONLY");
2685     
2686     // --- Silicon (bus) 
2687     
2688     xpos = -dela[0] + dpla[0] * 2. + sep + dcop[0] * 2. + sep + depx[0] * 2. + sep + dsil[0];
2689     pMC->Gspos("ESI6", 1, "ELL6", xpos, ypos, zpos, 0, "ONLY");
2690     
2691     // --- Place the sensitive part of the strips into its mother (ISV2) 
2692     
2693     ypos = 0.;
2694     for (j = 1; j <= 26; ++j) {
2695       if (j % 2 == 0) xpos = dbox2[0] - dits[0];
2696       else            xpos = -dbox2[0] + dits[0];
2697       zpos = ((j - 1) - 12.) * 3.91 - 1.96;
2698       pMC->Gspos("ITS6", j, "ISV2", xpos, ypos, zpos, 0, "ONLY");
2699     }
2700     
2701     // --- Place the electronics of the strips into its mother (SSV2) 
2702     
2703     ypos = 0.;
2704     for (j = 1; j <= 26; ++j) {
2705       if (j % 2 == 0) xpos = -dsrv[0] + .28;
2706       else            xpos = -dsrv[0] + .28 - dits[0] * 2. - .03;
2707       zpos = ((j - 1) - 12.) * 3.91 - 1.96 + .85;
2708       pMC->Gspos("SCH5", j, "SSV2", xpos, ypos, zpos, 0, "ONLY");
2709     }
2710
2711     //--- Place the cooling tubes and the cooling fluid into their mother (SSV1)
2712     
2713     xpos = -dsrv[0] + .41;
2714     zpos = 0.;
2715     
2716     // --- Left tube (just a matter of convention) 
2717     
2718     ypos = -2.25-0.1;
2719     pMC->Gspos("STB6", 1, "SSV2", xpos, ypos, zpos, 0, "ONLY");
2720     pMC->Gspos("SWT6", 1, "SSV2", xpos, ypos, zpos, 0, "ONLY");
2721     
2722     // --- Right tube (just a matter of convention) 
2723     
2724     ypos = 2.25+0.;
2725     pMC->Gspos("STB6", 2, "SSV2", xpos, ypos, zpos, 0, "ONLY");
2726     pMC->Gspos("SWT6", 2, "SSV2", xpos, ypos, zpos, 0, "ONLY");
2727     
2728     // --- Place the heat bridge elements into their mother (SSV2) 
2729     
2730     xpos = -dsrv[0] + .47 + TMath::Sqrt(3.) / 6. * 4.2;
2731     ypos = 0.;
2732     for (j = 1; j <= 27; ++j) {
2733       zpos = ((j - 1) - 12.) * 3.91 - 1.96 - 4.2/2.;
2734       pMC->Gspos("SFR6", j, "SSV2", xpos, ypos, zpos, 0, "ONLY");
2735     }
2736     
2737     // --- Place the elements connecting the triangles of the heat bridge 
2738     //     into their mother (SSV2) 
2739     
2740     zpos = 0.;
2741     
2742     // --- Left element (just a matter of convention) 
2743     
2744     xpos = -dsrv[0] + .47;
2745     ypos = -(2.1+0.015);
2746     pMC->Gspos("SCE6", 1, "SSV2", xpos, ypos, zpos, 0, "ONLY");
2747     
2748     // --- Right element 
2749     
2750     xpos = -dsrv[0] + .47;
2751     ypos = 2.1+0.015;
2752     pMC->Gspos("SCE6", 2, "SSV2", xpos, ypos, zpos, 0, "ONLY");
2753     
2754     // --- Top element 
2755     
2756     xpos = -dsrv[0] + .47 + TMath::Sqrt(3.) / 2. * 4.2 + .015;
2757     ypos = 0.;
2758     pMC->Gspos("SCE6", 3, "SSV2", xpos, ypos, zpos, 0, "ONLY");
2759     
2760     // --- Place the ghost volumes containing the strip ladders (ISV2), 
2761     //    electronics/cooling (SSV2) and end-ladder stuff (ELL6) of layer #6 in
2762     //     their mother volume (IT56) 
2763     
2764     offset1 = TMath::ATan2(1., 45.);
2765     offset2 = 5.2;
2766     rzero   = dbox2[0] + 45.;
2767     runo    = dbox2[0] * 2. + 45. + dsrv[0];
2768     rtwo    = dbox2[0] * 2. + 45. + dela[0];
2769     for (i = 1; i <= 39; ++i) {
2770       atheta = (i-1) * twopi * raddeg / 39. + offset2;
2771       AliMatrix(idrotm[i+1599], 90., atheta, 90., atheta + 90., 0., 0.);
2772       
2773       // --- Strip ladders 
2774       
2775       xpos = rzero * TMath::Cos((i-1) * twopi / 39. + offset1);
2776       ypos = rzero * TMath::Sin((i-1) * twopi / 39. + offset1);
2777       zpos = 0.;
2778       pMC->Gspos("ISV2", i, "IT56", xpos, ypos, zpos, idrotm[i+1599], "ONLY");
2779       
2780       // --- Electronics/cooling 
2781       
2782       xpos = runo * TMath::Cos((i-1) * twopi / 39. + offset1);
2783       ypos = runo * TMath::Sin((i-1) * twopi / 39. + offset1);
2784       zpos = 0.;
2785       pMC->Gspos("SSV2", i, "IT56", xpos, ypos, zpos, idrotm[i+1599], "ONLY");
2786       
2787       // --- End-ladders (nagative-Z and positive-Z) 
2788       
2789       xpos = rtwo * TMath::Cos((i-1) * twopi / 39. + offset1);
2790       ypos = rtwo * TMath::Sin((i-1) * twopi / 39. + offset1);
2791       zpos = -(dbox2[2] + dela[2] + 6.);
2792       pMC->Gspos("ELL6", i, "IT56", xpos, ypos, zpos, idrotm[i+1599], "ONLY");
2793       zpos = dbox2[2] + dela[2] + 6.;
2794       pMC->Gspos("ELL6", i + 39, "IT56", xpos, ypos, zpos, idrotm[i+1599], "ONLY");
2795     }
2796     //#ifdef NEVER
2797   }
2798   
2799   // --- Define SSD with the 32+36 lay-out 
2800   
2801   if (fMinorVersion >2 && fMinorVersion < 6) {
2802     
2803     //--- Define ghost volume containing the Strip Detectors and fill it with air
2804     //     or vacuum 
2805     
2806     xxm    = (49.999-3.)/(70.-25.);
2807     dgh[0] = 0.;
2808     dgh[1] = 360.;
2809     dgh[2] = 4.;
2810     dgh[3] = -25. - (9.-3.01) / xxm - (9.01-9.) / xxm - 
2811       (27.-9.01) / xxm - (36.-27.) / xxm - (49.998-36.) / xxm;
2812     dgh[4] = 49.998;
2813     dgh[5] = 49.998;
2814     dgh[6] = -25. - (9.-3.01) / xxm - 
2815       (9.01-9.) / xxm - (27.-9.01) / xxm - (36.-27.) / xxm;
2816     dgh[7] = 36.;
2817     dgh[8] = 49.998;
2818     dgh[9] = (9.-3.01) / xxm + 25. + 
2819       (9.01-9.) / xxm + (27.-9.01) / xxm + (36.-27.) / xxm;
2820     dgh[10] = 36.;
2821     dgh[11] = 49.998;
2822     dgh[12] = (9.-3.01) / xxm + 25. + (9.01-9.) / xxm + 
2823       (27.-9.01) / xxm + (36.-27.) / xxm + (49.998-36.) / xxm;
2824     dgh[13] = 49.998;
2825     dgh[14] = 49.998;
2826     pMC->Gsvolu("IT56", "PCON", idtmed[275], dgh, 15);
2827     pMC->Gspos("IT56", 1, "ITSV", 0., 0., 0., 0, "ONLY");
2828     pMC->Gsatt("IT56", "SEEN", 0);
2829     
2830     // --- Layer #5 
2831     
2832     //        GOTO 6678           ! skip ITS layer no. 5 
2833     
2834     //--- Define a ghost volume containing a single ladder of layer #5 andfill
2835     //     it with air or vacuum 
2836     
2837     dbox1[0] = (0.0600+2.*0.0150)/2.;
2838     dbox1[1] = 3.75;
2839     dbox1[2] = 86.31/2.;
2840     pMC->Gsvolu("ISV1", "BOX ", idtmed[253], dbox1, 3);
2841     
2842     // --- Make the ghost volume invisible 
2843     
2844     pMC->Gsatt("ISV1", "SEEN", 0);
2845     
2846     // --- Define a ghost volume containing the electronics and cooling of
2847     //     a single ladder of layer #5 and fill it with air or vacuum 
2848     
2849     dsrv[0] = (TMath::Sqrt(3.) / 2. * 4.2 + .47 + .05) / 2.;
2850     dsrv[1] = 3.75;
2851     dsrv[2] = 86.31/2.;
2852     pMC->Gsvolu("SSV1", "BOX ", idtmed[253], dsrv, 3);
2853     
2854     // --- Make the ghost volume invisible 
2855     
2856     pMC->Gsatt("SSV1", "SEEN", 0);
2857     
2858     // --- Define a ghost volume containing the end-ladder stuff of 
2859     //     a single ladder of layer #5 and fill it with air or vacuum 
2860     
2861     dela[0] = 2.;
2862     dela[1] = 3.5;
2863     dela[2] = 4.;
2864     pMC->Gsvolu("ELL5", "BOX ", idtmed[253], dela, 3);
2865     
2866     // --- Make the ghost volume invisible 
2867     
2868     pMC->Gsatt("ELL5", "SEEN", 0);
2869     
2870     // --- Define a volume containing the sensitive part of the strips 
2871     //     (silicon, layer #5) 
2872     
2873     dits[0] = .015;
2874     dits[1] = 3.75;
2875     dits[2] = 2.1;
2876     pMC->Gsvolu("ITS5", "BOX ", idtmed[249], dits, 3);
2877     
2878     // --- Define a volume containing the electronics of the strips 
2879     //     (silicon, layer #5) 
2880     
2881     dchi[0] = .02;
2882     dchi[1] = 3.4;
2883     dchi[2] = .525;
2884     pMC->Gsvolu("SCH5", "BOX ", idtmed[250], dchi, 3);
2885     
2886     // --- Define the cooling tubes (aluminum, layer #5) 
2887     
2888     dtub[0] = .09;
2889     dtub[1] = dtub[0] + .01;
2890     dtub[2] = 86.31/2.;
2891     pMC->Gsvolu("STB5", "TUBE", idtmed[255], dtub, 3);
2892     
2893     // --- Define the cooling fluid (water or freon, layer #5) 
2894     
2895     dwat[0] = 0.;
2896     dwat[1] = .09;
2897     dwat[2] = 86.31/2.;
2898     pMC->Gsvolu("SWT5", "TUBE", idtmed[256], dwat, 3);
2899     //        CALL GSVOLU('SWT5','TUBE',IDTMED(258),DWAT,3,IOUT)   ! freon
2900     
2901     //--- Define the (triangular) element of the heat bridge (carbon, layer #5)
2902     
2903     // water 
2904     dfra[0] = 120.;
2905     dfra[1] = 360.;
2906     dfra[2] = 3.;
2907     dfra[3] = 2.;
2908     dfra[4] = -.015;
2909     dfra[5] = TMath::Sqrt(3.) * 4.2 / 6.;
2910     dfra[6] = dfra[5] + .03;
2911     dfra[7] = .015;
2912     dfra[8] = dfra[5];
2913     dfra[9] = dfra[6];
2914     pMC->Gsvolu("SFR5", "PGON", idtmed[252], dfra, 10);
2915     
2916     // --- Define the element connecting the triangles of the heat bridge 
2917     //     (carbon, layer #5) 
2918     
2919     dcei[0] = 0.;
2920     dcei[1] = .03;
2921     dcei[2] = 86.31/2.;
2922     pMC->Gsvolu("SCE5", "TUBE", idtmed[252], dcei, 3);
2923     
2924     // --- Define the part of the end-ladder stuff made of plastic (G10FR4) 
2925     //     (layer #5) 
2926     
2927     dpla[0] = (10./(8.*7.))/2;
2928     dpla[1] = 3.5;
2929     dpla[2] = 4.;
2930     pMC->Gsvolu("EPL5", "BOX ", idtmed[262], dpla, 3);
2931     
2932     // --- Define the part of the end-ladder stuff made of copper (layer #5) 
2933     
2934     dcop[0] = (2./(8.*7.))/2;
2935     dcop[1] = 3.5;
2936     dcop[2] = 4.;
2937     pMC->Gsvolu("ECU5", "BOX ", idtmed[259], dcop, 3);
2938     
2939     // --- Define the part of the end-ladder stuff made of epoxy (layer #5) 
2940     
2941     depx[0] = (30./(8.*7.))/2.;
2942     depx[1] = 3.5;
2943     depx[2] = 4.;
2944     pMC->Gsvolu("EPX5", "BOX ", idtmed[262], depx, 3);
2945     
2946     // --- Define the part of the end-ladder stuff made of silicon (bus) 
2947     //     (layer #5) 
2948     
2949     dsil[0] = (20./(8.*7.))/2.;
2950     dsil[1] = 3.5;
2951     dsil[2] = 4.;
2952     pMC->Gsvolu("ESI5", "BOX ", idtmed[251], dsil, 3);
2953     
2954     // --- Place the end-ladder stuff into its mother (ELL5) 
2955     
2956     sep  = (4. - (dpla[0] + dcop[0] + depx[0] + dsil[0]) * 2.) / 3.;
2957     ypos = 0.;
2958     zpos = 0.;
2959     
2960     // --- Plastic 
2961     
2962     xpos = -dela[0] + dpla[0];
2963     pMC->Gspos("EPL5", 1, "ELL5", xpos, ypos, zpos, 0, "ONLY");
2964     
2965     // --- Copper 
2966     
2967     xpos = -dela[0] + dpla[0] * 2. + sep + dcop[0];
2968     pMC->Gspos("ECU5", 1, "ELL5", xpos, ypos, zpos, 0, "ONLY");
2969     
2970     // --- Epoxy 
2971     
2972     xpos = -dela[0] + dpla[0] * 2. + sep + dcop[0] * 2. + sep + depx[0];
2973     pMC->Gspos("EPX5", 1, "ELL5", xpos, ypos, zpos, 0, "ONLY");
2974     
2975     // --- Silicon (bus) 
2976     
2977     xpos = -dela[0] + dpla[0] * 2. + sep + dcop[0] * 2. + sep + depx[0] * 2. + sep + dsil[0];
2978     pMC->Gspos("ESI5", 1, "ELL5", xpos, ypos, zpos, 0, "ONLY");
2979     
2980     // --- Place the sensitive part of the strips into its mother (ISV1) 
2981     
2982     ypos = 0.;
2983     for (j = 1; j <= 22; ++j) {
2984       if (j % 2 == 0) xpos = dbox1[0] - dits[0];
2985       else            xpos = -dbox1[0] + dits[0];
2986       zpos = ((j - 1) - 10.) * 3.91 - 1.96;
2987       pMC->Gspos("ITS5", j, "ISV1", xpos, ypos, zpos, 0, "ONLY");
2988     }
2989     
2990     // --- Place the electronics of the strips into its mother (SSV1) 
2991     
2992     ypos = 0.;
2993     for (j = 1; j <= 22; ++j) {
2994       if (j % 2 == 0) xpos = -dsrv[0] + .28;
2995       else            xpos = -dsrv[0] + .28 - dits[0] * 2. - .03;
2996       zpos = ((j - 1) - 10.) * 3.91 - 1.96 + .85;
2997       pMC->Gspos("SCH5", j, "SSV1", xpos, ypos, zpos, 0, "ONLY");
2998     }
2999     
3000     //--- Place the cooling tubes and the cooling fluid into their mother (SSV1)
3001     
3002     xpos = -dsrv[0] + .41;
3003     zpos = 0.;
3004     
3005     // --- Left tube (just a matter of convention) 
3006     
3007     ypos = -(2.25+0.1);
3008     pMC->Gspos("STB5", 1, "SSV1", xpos, ypos, zpos, 0, "ONLY");
3009     pMC->Gspos("SWT5", 1, "SSV1", xpos, ypos, zpos, 0, "ONLY");
3010     
3011     // --- Right tube (just a matter of convention) 
3012     
3013     ypos = (2.25+0.1);
3014     pMC->Gspos("STB5", 2, "SSV1", xpos, ypos, zpos, 0, "ONLY");
3015     pMC->Gspos("SWT5", 2, "SSV1", xpos, ypos, zpos, 0, "ONLY");
3016     
3017     // --- Place the heat bridge elements into their mother (SSV1) 
3018     
3019     xpos = -dsrv[0] + .47 + TMath::Sqrt(3.) / 6. * 4.2;
3020     ypos = 0.;
3021     for (j = 1; j <= 23; ++j) {
3022       zpos = ((j - 1) - 10.) * 3.91 - 1.96 - 4.2/2.;
3023       pMC->Gspos("SFR5", j, "SSV1", xpos, ypos, zpos, 0, "ONLY");
3024     }
3025     
3026     // --- Place the elements connecting the triangles of the heat bridge 
3027     //     into their mother (SSV1) 
3028     
3029     zpos = 0.;
3030     
3031     // --- Left element (just a matter of convention) 
3032     
3033     xpos = -dsrv[0] + .47;
3034     ypos = -(2.1+0.015);
3035     pMC->Gspos("SCE5", 1, "SSV1", xpos, ypos, zpos, 0, "ONLY");
3036     
3037     // --- Right element 
3038     
3039     xpos = -dsrv[0] + .47;
3040     ypos = (2.1+0.015);
3041     pMC->Gspos("SCE5", 2, "SSV1", xpos, ypos, zpos, 0, "ONLY");
3042     
3043     // --- Top element 
3044     
3045     xpos = -dsrv[0] + .47 + TMath::Sqrt(3.) / 2. * 4.2 + .015;
3046     ypos = 0.;
3047     pMC->Gspos("SCE5", 3, "SSV1", xpos, ypos, zpos, 0, "ONLY");
3048     
3049     // --- Place the ghost volumes containing the strip ladders (ISV1), 
3050     //    electronics/cooling (SSV1) and end-ladder stuff (ELL5) of layer #5 in
3051     //     their mother volume (IT56) 
3052     
3053     offset1 = TMath::ATan2(.8, 36.6);
3054     offset2 = 5.2;
3055     rzero   = dbox1[0] + 36.6;
3056     runo    = dbox1[0] * 2. + 36.6 + dsrv[0];
3057     rtwo    = dbox1[0] * 2. + 36.6 + dela[0];
3058     for (i = 1; i <= 32; ++i) {
3059       atheta = (i-1) * twopi * raddeg / 32. + offset2;
3060       AliMatrix(idrotm[i+1499], 90., atheta, 90., atheta + 90., 0., 0.);
3061       
3062       // --- Strip ladders 
3063       
3064       xpos = rzero * TMath::Cos((i-1) * twopi / 32. + offset1);
3065       ypos = rzero * TMath::Sin((i-1) * twopi / 32. + offset1);
3066       zpos = 0.;
3067       pMC->Gspos("ISV1", i, "IT56", xpos, ypos, zpos, idrotm[i+1499], "ONLY");
3068       
3069       // --- Electronics/cooling 
3070       
3071       xpos = runo * TMath::Cos((i-1) * twopi / 32. + offset1);
3072       ypos = runo * TMath::Sin((i-1) * twopi / 32. + offset1);
3073       zpos = 0.;
3074       pMC->Gspos("SSV1", i, "IT56", xpos, ypos, zpos, idrotm[i+1499], "ONLY");
3075       
3076       // --- End-ladders (nagative-Z and positive-Z) 
3077       
3078       xpos = rtwo * TMath::Cos((i-1) * twopi / 32. + offset1);
3079       ypos = rtwo * TMath::Sin((i-1) * twopi / 32. + offset1);
3080       zpos = -(dbox1[2] + dela[2] + 6.);
3081       pMC->Gspos("ELL5", i, "IT56", xpos, ypos, zpos, idrotm[i+1499], "ONLY");
3082       zpos = dbox1[2] + dela[2] + 6.;
3083       pMC->Gspos("ELL5", i + 35, "IT56", xpos, ypos, zpos, idrotm[i+1499], "ONLY");
3084     }
3085     
3086     
3087     // --- Layer #6 
3088     
3089     //        GOTO 6778           ! skip ITS layer no. 6 
3090     
3091     //--- Define a ghost volume containing a single ladder of layer #6 andfill
3092     //     it with air or vacuum 
3093     
3094     dbox2[0] = (0.0600+2.*0.0150)/2.;
3095     dbox2[1] = 3.75;
3096     dbox2[2] = 94.13/2.;
3097     pMC->Gsvolu("ISV2", "BOX ", idtmed[253], dbox2, 3);
3098     
3099     // --- Make the ghost volume invisible 
3100     
3101     pMC->Gsatt("ISV2", "SEEN", 0);
3102     
3103     // --- Define a ghost volume containing the electronics and cooling of
3104     //     a single ladder of layer #6 and fill it with air or vacuum 
3105     
3106     dsrv[0] = (TMath::Sqrt(3.) / 2. * 4.2 + .47 + .05) / 2.;
3107     dsrv[1] = 3.75;
3108     dsrv[2] = 94.13/2.;
3109     pMC->Gsvolu("SSV2", "BOX ", idtmed[253], dsrv, 3);
3110     
3111     // --- Make the ghost volume invisible 
3112     
3113     pMC->Gsatt("SSV2", "SEEN", 0);
3114     
3115     // --- Define a ghost volume containing the end-ladder stuff of 
3116     //     a single ladder of layer #6 and fill it with air or vacuum 
3117     
3118     dela[0] = 2.;
3119     dela[1] = 3.5;
3120     dela[2] = 4.;
3121     pMC->Gsvolu("ELL6", "BOX ", idtmed[253], dela, 3);
3122     
3123     // --- Make the ghost volume invisible 
3124     
3125     pMC->Gsatt("ELL6", "SEEN", 0);
3126     
3127     // --- Define a volume containing the sensitive part of the strips 
3128     //     (silicon, layer #6) 
3129     
3130     dits[0] = .015;
3131     dits[1] = 3.75;
3132     dits[2] = 2.1;
3133     pMC->Gsvolu("ITS6", "BOX ", idtmed[249], dits, 3);
3134     
3135     // --- Define a volume containing the electronics of the strips 
3136     //     (silicon, layer #6) 
3137     
3138     dchi[0] = .02;
3139     dchi[1] = 3.4;
3140     dchi[2] = .525;
3141     pMC->Gsvolu("SCH6", "BOX ", idtmed[250], dchi, 3);
3142     
3143     // --- Define the cooling tubes (aluminum, layer #6) 
3144     
3145     dtub[0] = .09;
3146     dtub[1] = dtub[0] + .01;
3147     dtub[2] = 94.13/2.;
3148     pMC->Gsvolu("STB6", "TUBE", idtmed[255], dtub, 3);
3149     
3150     // --- Define the cooling fluid (water or freon, layer #6) 
3151     
3152     dwat[0] = 0.;
3153     dwat[1] = .09;
3154     dwat[2] = 94.13/2.;
3155     pMC->Gsvolu("SWT6", "TUBE", idtmed[256], dwat, 3);
3156     //        CALL GSVOLU('SWT6','TUBE',IDTMED(258),DWAT,3,IOUT)   ! freon
3157     
3158     //--- Define the (triangular) element of the heat bridge (carbon, layer #6)
3159     
3160     // water 
3161     dfra[0] = 120.;
3162     dfra[1] = 360.;
3163     dfra[2] = 3.;
3164     dfra[3] = 2.;
3165     dfra[4] = -.015;
3166     dfra[5] = TMath::Sqrt(3.) * 4.2 / 6.;
3167     dfra[6] = dfra[5] + .03;
3168     dfra[7] = .015;
3169     dfra[8] = dfra[5];
3170     dfra[9] = dfra[6];
3171     pMC->Gsvolu("SFR6", "PGON", idtmed[252], dfra, 10);
3172     
3173     // --- Define the element connecting the triangles of the heat bridge 
3174     //     (carbon, layer #6) 
3175     
3176     dcei[0] = 0.;
3177     dcei[1] = .03;
3178     dcei[2] = 94.13/2.;
3179     pMC->Gsvolu("SCE6", "TUBE", idtmed[252], dcei, 3);
3180     
3181     // --- Define the part of the end-ladder stuff made of plastic (G10FR4) 
3182     //     (layer #6) 
3183     
3184     dpla[0] = (10./(8.*7.))/2;
3185     dpla[1] = 3.5;
3186     dpla[2] = 4.;
3187     pMC->Gsvolu("EPL6", "BOX ", idtmed[262], dpla, 3);
3188     
3189     // --- Define the part of the end-ladder stuff made of copper (layer #6) 
3190     
3191     dcop[0] = (2./(8.*7.))/2;
3192     dcop[1] = 3.5;
3193     dcop[2] = 4.;
3194     pMC->Gsvolu("ECU6", "BOX ", idtmed[259], dcop, 3);
3195     
3196     // --- Define the part of the end-ladder stuff made of epoxy (layer #6) 
3197     
3198     depx[0] = (30./(8.*7.))/2.;
3199     depx[1] = 3.5;
3200     depx[2] = 4.;
3201     pMC->Gsvolu("EPX6", "BOX ", idtmed[262], depx, 3);
3202     
3203     // --- Define the part of the end-ladder stuff made of silicon (bus) 
3204     //     (layer #6) 
3205     
3206     dsil[0] = (20./(8.*7.))/2.;
3207     dsil[1] = 3.5;
3208     dsil[2] = 4.;
3209     pMC->Gsvolu("ESI6", "BOX ", idtmed[251], dsil, 3);
3210     
3211     // --- Place the end-ladder stuff into its mother (ELL5) 
3212     
3213     sep  = (4. - (dpla[0] + dcop[0] + depx[0] + dsil[0]) * 2.) / 3.;
3214     ypos = 0.;
3215     zpos = 0.;
3216     
3217     // --- Plastic 
3218     
3219     xpos = -dela[0] + dpla[0];
3220     pMC->Gspos("EPL6", 1, "ELL6", xpos, ypos, zpos, 0, "ONLY");
3221     
3222     // --- Copper 
3223     
3224     xpos = -dela[0] + dpla[0] * 2. + sep + dcop[0];
3225     pMC->Gspos("ECU6", 1, "ELL6", xpos, ypos, zpos, 0, "ONLY");
3226     
3227     // --- Epoxy 
3228     
3229     xpos = -dela[0] + dpla[0] * 2. + sep + dcop[0] * 2. + sep + depx[0];
3230     pMC->Gspos("EPX6", 1, "ELL6", xpos, ypos, zpos, 0, "ONLY");
3231     
3232     // --- Silicon (bus) 
3233     
3234     xpos = -dela[0] + dpla[0] * 2. + sep + dcop[0] * 2. + sep + depx[0] * 2. + sep + dsil[0];
3235     pMC->Gspos("ESI6", 1, "ELL6", xpos, ypos, zpos, 0, "ONLY");
3236     
3237     // --- Place the sensitive part of the strips into its mother (ISV2) 
3238     
3239     ypos = 0.;
3240     for (j = 1; j <= 24; ++j) {
3241       if (j % 2 == 0) xpos = -dbox2[0] + dits[0];
3242       else            xpos = dbox2[0] - dits[0];
3243       zpos = ((j - 1) - 11.) * 3.91 - 1.96;
3244       pMC->Gspos("ITS6", j, "ISV2", xpos, ypos, zpos, 0, "ONLY");
3245     }
3246     
3247     // --- Place the electronics of the strips into its mother (SSV2) 
3248     
3249     ypos = 0.;
3250     for (j = 1; j <= 24; ++j) {
3251       if (j % 2 == 0) xpos = -dsrv[0] + .28 - dits[0] * 2. - .03;
3252       else            xpos = -dsrv[0] + .28;
3253       zpos = ((j - 1) - 11.) * 3.91 - 1.96 + .85;
3254       pMC->Gspos("SCH5", j, "SSV1", xpos, ypos, zpos, 0, "ONLY");
3255     }
3256     
3257     //--- Place the cooling tubes and the cooling fluid into their mother (SSV2)
3258     
3259     xpos = -dsrv[0] + .41;
3260     zpos = 0.;
3261     
3262     // --- Left tube (just a matter of convention) 
3263     
3264     ypos = -(2.25+0.1);
3265     pMC->Gspos("STB6", 1, "SSV2", xpos, ypos, zpos, 0, "ONLY");
3266     pMC->Gspos("SWT6", 1, "SSV2", xpos, ypos, zpos, 0, "ONLY");
3267     
3268     // --- Right tube (just a matter of convention) 
3269     
3270     ypos = (2.25+0.1);
3271     pMC->Gspos("STB6", 2, "SSV2", xpos, ypos, zpos, 0, "ONLY");
3272     pMC->Gspos("SWT6", 2, "SSV2", xpos, ypos, zpos, 0, "ONLY");
3273     
3274     // --- Place the heat bridge elements into their mother (SSV2) 
3275     
3276     xpos = -dsrv[0] + .47 + TMath::Sqrt(3.) / 6. * 4.2;
3277     ypos = 0.;
3278     for (j = 1; j <= 25; ++j) {
3279       zpos = ((j - 1) - 11.) * 3.91 - 1.96 - 4.2/2.;
3280       pMC->Gspos("SFR6", j, "SSV2", xpos, ypos, zpos, 0, "ONLY");
3281     }
3282     
3283     // --- Place the elements connecting the triangles of the heat bridge 
3284     //     into their mother (SSV2) 
3285     
3286     zpos = 0.;
3287     
3288     // --- Left element (just a matter of convention) 
3289     
3290     xpos = -dsrv[0] + .47;
3291     ypos = -(2.1+0.015);
3292     pMC->Gspos("SCE6", 1, "SSV2", xpos, ypos, zpos, 0, "ONLY");
3293     
3294     // --- Right element 
3295     
3296     xpos = -dsrv[0] + .47;
3297     ypos = (2.1+0.015);
3298     pMC->Gspos("SCE6", 2, "SSV2", xpos, ypos, zpos, 0, "ONLY");
3299     
3300     // --- Top element 
3301     
3302     xpos = -dsrv[0] + .47 + TMath::Sqrt(3.) / 2. * 4.2 + .015;
3303     ypos = 0.;
3304     pMC->Gspos("SCE6", 3, "SSV2", xpos, ypos, zpos, 0, "ONLY");
3305     
3306     // --- Place the ghost volumes containing the strip ladders (ISV2), 
3307     //    electronics/cooling (SSV2) and end-ladder stuff (ELL6) of layer #6 in
3308     //     their mother volume (IT56) 
3309     
3310     offset1 = TMath::ATan2(.9, 41.2);
3311     offset2 = 5.2;
3312     rzero   = dbox2[0] + 41.2;
3313     runo    = dbox2[0] * 2. + 41.2 + dsrv[0];
3314     rtwo    = dbox2[0] * 2. + 41.2 + dela[0];
3315     for (i = 1; i <= 36; ++i) {
3316       atheta = (i-1) * twopi * raddeg / 36. + offset2;
3317       AliMatrix(idrotm[i+1599], 90., atheta, 90., atheta + 90., 0., 0.);
3318       
3319       // --- Strip ladders 
3320       
3321       xpos = rzero * TMath::Cos((i-1) * twopi / 36. + offset1);
3322       ypos = rzero * TMath::Sin((i-1) * twopi / 36. + offset1);
3323       zpos = 0.;
3324       pMC->Gspos("ISV2", i, "IT56", xpos, ypos, zpos, idrotm[i+1599], "ONLY");
3325       
3326       // --- Electronics/cooling 
3327       
3328       xpos = runo * TMath::Cos((i-1) * twopi / 36. + offset1);
3329       ypos = runo * TMath::Sin((i-1) * twopi / 36. + offset1);
3330       zpos = 0.;
3331       pMC->Gspos("SSV2", i, "IT56", xpos, ypos, zpos, idrotm[i+1599], "ONLY");
3332       
3333       // --- End-ladders (nagative-Z and positive-Z) 
3334       
3335       xpos = rtwo * TMath::Cos((i-1) * twopi / 36. + offset1);
3336       ypos = rtwo * TMath::Sin((i-1) * twopi / 36. + offset1);
3337       zpos = -(dbox2[2] + dela[2] + 6.);
3338       pMC->Gspos("ELL6", i, "IT56", xpos, ypos, zpos, idrotm[i+1599], "ONLY");
3339       zpos = dbox2[2] + dela[2] + 6.;
3340       pMC->Gspos("ELL6", i + 39, "IT56", xpos, ypos, zpos, idrotm[i+1599], "ONLY");
3341     }
3342     
3343     
3344   }
3345   
3346   //************************************************************************
3347   //*                                                                      *
3348   //*             E N D - C A P S     A N D     F R A M E S                *
3349   //*             =========================================                *
3350   //*                                                                      *
3351   //************************************************************************
3352   
3353   // --- Define a dummy cylinder for multiple scattering tests 
3354   
3355   //     GOTO 7890             ! skip dummy cylinder for multiple scatteringtests
3356   
3357   //      DITS(1)=49. 
3358   //      DITS(2)=DITS(1)+0.1 
3359   //      DITS(3)=60.3 
3360   //      CALL GSVOLU('ITST','TUBE',IDTMED(255),DITS,3,IOUT) 
3361   //      CALL GSPOS('ITST',1,'ITSV',0.,0.,0.,0,'ONLY') 
3362   // 7890  CONTINUE 
3363   
3364   // --- The 0.74% X0 outer wall (C) of the gas vessel at r=50cm --- 
3365   
3366   //      GOTO 8901                                    ! skip outer wall 
3367   
3368   if (fMinorVersion == 0 || fMinorVersion == 3) {
3369     
3370     dits[0] = 49.9;
3371     dits[1] = dits[0] + .06926;
3372     dits[2] = dpcb[2] * 2. + 62.7 - 10.5;
3373     // old value 60.3 
3374     pMC->Gsvolu("ITSG", "TUBE", idtmed[274], dits, 3);
3375     pMC->Gspos("ITSG", 1, "ITSV", 0., 0., 0., 0, "ONLY");
3376   } else {
3377     goto L8901;
3378   }
3379  L8901:
3380   // --- The frame between the end-caps (octagonal lay-out) --- 
3381   
3382   //     GOTO 9012                                    ! skip octagonal frame
3383   
3384   if (fMinorVersion == 1) {
3385     
3386     rzero    = 34.;
3387     dtra[0]  = .92;
3388     dtra[1]  = 1.;
3389     dtra[2]  = dpcb[2] * 2. + 50.5 - 10.5;
3390     dtra1[0] = .92;
3391     dtra1[1] = 1.;
3392     dtra1[2] = TMath::Sqrt(dtra[2] * dtra[2] + (55.4*55.4-50.5*50.5))/2.;
3393     angle    = 45.;
3394     offset   = angle / 2.;
3395     for (i = 0; i < 8; ++i) {
3396       xtra[i] = rzero * TMath::Cos(i * angle * degrad);
3397       ytra[i] = rzero * TMath::Sin(i * angle * degrad);
3398       ztra[i] = 0.;
3399       pMC->Gsvolu(natra[i], "TUBE", idtmed[274], dtra, 3);
3400       pMC->Gspos(natra[i], 1, "ITSV", xtra[i], ytra[i], ztra[i], 0, "ONLY");
3401     }
3402     
3403     atheta = 22.5;
3404     aphi1  = TMath::ACos(dtra[2] / TMath::Sqrt(dtra[2] * dtra[2] + (50.5 / cos(28.*degrad) * (50.5 / cos(28.*degrad))- 50.5*50.5))) * raddeg;
3405     aphi2  = 180. - aphi1;
3406     xpos   = (xtra[0] + xtra[1]) / 2.;
3407     ypos   = (ytra[0] + ytra[1]) / 2.;
3408     zpos   = dtra[2] / 2.;
3409     pMC->Gsvolu(natra1[0], "TUBE", idtmed[274], dtra1, 3);
3410     r2     = atheta + 90.;
3411     r3     = atheta + 90.;
3412     AliMatrix(idrotm[5100], 90., atheta, aphi1 + 90., r2, aphi1, r3);
3413     pMC->Gspos(natra1[0], 1, "ITSV", xpos, ypos, zpos, idrotm[5100], "ONLY");
3414     zpos   = -dtra[2] / 2.;
3415     pMC->Gsvolu(natra1[1], "TUBE", idtmed[274], dtra1, 3);
3416     r2     = atheta + 90.;
3417     r3     = atheta + 90.;
3418     AliMatrix(idrotm[5101], 90., atheta, aphi2 + 90., r2, aphi2, r3);
3419     pMC->Gspos(natra1[1], 1, "ITSV", xpos, ypos, zpos, idrotm[5101], "ONLY");
3420     
3421     atheta = 67.5;
3422     aphi2  = TMath::ACos(dtra[2] / TMath::Sqrt(dtra[2] * dtra[2] + (50.5 / cos(28.*degrad) * (50.5 / cos(28.*degrad))- 50.5*50.5))) * raddeg;
3423     aphi1  = 180. - aphi2;
3424     xpos   = (xtra[1] + xtra[2]) / 2.;
3425     ypos   = (ytra[1] + ytra[2]) / 2.;
3426     zpos   = dtra[2] / 2.;
3427     pMC->Gsvolu(natra1[2], "TUBE", idtmed[274], dtra1, 3);
3428     r2     = atheta + 90.;
3429     r3     = atheta + 90.;
3430     AliMatrix(idrotm[5102], 90., atheta, aphi1 + 90., r2, aphi1, r3);
3431     pMC->Gspos(natra1[2], 1, "ITSV", xpos, ypos, zpos, idrotm[5102], "ONLY");
3432     zpos   = -dtra[2] / 2.;
3433     pMC->Gsvolu(natra1[3], "TUBE", idtmed[274], dtra1, 3);
3434     r2     = atheta + 90.;
3435     r3     = atheta + 90.;
3436     AliMatrix(idrotm[5103], 90., atheta, aphi2 + 90., r2, aphi2, r3);
3437     pMC->Gspos(natra1[3], 1, "ITSV", xpos, ypos, zpos, idrotm[5103], "ONLY");
3438     
3439     atheta = 112.5;
3440     aphi1  = TMath::ACos(dtra[2] / TMath::Sqrt(dtra[2] * dtra[2] + (50.5 / cos(28.*degrad) * (50.5 / cos(28.*degrad))- 50.5*50.5))) * raddeg;
3441     aphi2  = 180. - aphi1;
3442     xpos   = (xtra[2] + xtra[3]) / 2.;
3443     ypos   = (ytra[2] + ytra[3]) / 2.;
3444     zpos   = dtra[2] / 2.;
3445     pMC->Gsvolu(natra1[4], "TUBE", idtmed[274], dtra1, 3);
3446     r2     = atheta + 90.;
3447     r3     = atheta + 90.;
3448     AliMatrix(idrotm[5104], 90., atheta, aphi1 + 90., r2, aphi1, r3);
3449     pMC->Gspos(natra1[4], 1, "ITSV", xpos, ypos, zpos, idrotm[5104], "ONLY");
3450     zpos   = -dtra[2] / 2.;
3451     pMC->Gsvolu(natra1[5], "TUBE", idtmed[274], dtra1, 3);
3452     r2     = atheta + 90.;
3453     r3     = atheta + 90.;
3454     AliMatrix(idrotm[5105], 90., atheta, aphi2 + 90., r2, aphi2, r3);
3455     pMC->Gspos(natra1[5], 1, "ITSV", xpos, ypos, zpos, idrotm[5105], "ONLY");
3456     
3457     atheta = 157.5;
3458     aphi2  = TMath::ACos(dtra[2] / TMath::Sqrt(dtra[2] * dtra[2] + (50.5 / cos(28.*degrad) * (50.5 / cos(28.*degrad))- 50.5*50.5))) * raddeg;
3459     aphi1  = 180. - aphi2;
3460     xpos   = (xtra[3] + xtra[4]) / 2.;
3461     ypos   = (ytra[3] + ytra[4]) / 2.;
3462     zpos   = dtra[2] / 2.;
3463     pMC->Gsvolu(natra1[6], "TUBE", idtmed[274], dtra1, 3);
3464     r2     = atheta + 90.;
3465     r3     = atheta + 90.;
3466     AliMatrix(idrotm[5106], 90., atheta, aphi1 + 90., r2, aphi1, r3);
3467     pMC->Gspos(natra1[6], 1, "ITSV", xpos, ypos, zpos, idrotm[5106], "ONLY");
3468     zpos   = -dtra[2] / 2.;
3469     pMC->Gsvolu(natra1[7], "TUBE", idtmed[274], dtra1, 3);
3470     r2     = atheta + 90.;
3471     r3     = atheta + 90.;
3472     AliMatrix(idrotm[5107], 90., atheta, aphi2 + 90., r2, aphi2, r3);
3473     pMC->Gspos(natra1[7], 1, "ITSV", xpos, ypos, zpos, idrotm[5107], "ONLY");
3474     
3475     atheta = 22.5;
3476     aphi2  = TMath::ACos(dtra[2] / TMath::Sqrt(dtra[2] * dtra[2] + (50.5 / cos(28.*degrad) * (50.5 / cos(28.*degrad))- 50.5*50.5))) * raddeg;
3477     aphi1  = 180. - aphi2;
3478     xpos   = (xtra[4] + xtra[5]) / 2.;
3479     ypos   = (ytra[4] + ytra[5]) / 2.;
3480     zpos   = dtra[2] / 2.;
3481     pMC->Gsvolu(natra1[8], "TUBE", idtmed[274], dtra1, 3);
3482     r2     = atheta + 90.;
3483     r3     = atheta + 90.;
3484     AliMatrix(idrotm[5108], 90., atheta, aphi1 + 90., r2, aphi1, r3);
3485     pMC->Gspos(natra1[8], 1, "ITSV", xpos, ypos, zpos, idrotm[5108], "ONLY");
3486     zpos   = -dtra[2] / 2.;
3487     pMC->Gsvolu(natra1[9], "TUBE", idtmed[274], dtra1, 3);
3488     r2     = atheta + 90.;
3489     r3     = atheta + 90.;
3490     AliMatrix(idrotm[5109], 90., atheta, aphi2 + 90., r2, aphi2, r3);
3491     pMC->Gspos(natra1[9], 1, "ITSV", xpos, ypos, zpos, idrotm[5109], "ONLY");
3492     
3493     atheta = 67.5;
3494     aphi1  = TMath::ACos(dtra[2] / TMath::Sqrt(dtra[2] * dtra[2] + (50.5 / cos(28.*degrad) * (50.5 / cos(28.*degrad))- 50.5*50.5))) * raddeg;
3495     aphi2  = 180. - aphi1;
3496     xpos   = (xtra[5] + xtra[6]) / 2.;
3497     ypos   = (ytra[5] + ytra[6]) / 2.;
3498     zpos   = dtra[2] / 2.;
3499     pMC->Gsvolu(natra1[10], "TUBE", idtmed[274], dtra1, 3);
3500     r2     = atheta + 90.;
3501     r3     = atheta + 90.;
3502     AliMatrix(idrotm[5110], 90., atheta, aphi1 + 90., r2, aphi1, r3);
3503     pMC->Gspos(natra1[10], 1, "ITSV", xpos, ypos, zpos, idrotm[5110], "ONLY");
3504     zpos   = -dtra[2] / 2.;
3505     pMC->Gsvolu(natra1[11], "TUBE", idtmed[274], dtra1, 3);
3506     r2     = atheta + 90.;
3507     r3     = atheta + 90.;
3508     AliMatrix(idrotm[5111], 90., atheta, aphi2 + 90., r2, aphi2, r3);
3509     pMC->Gspos(natra1[11], 1, "ITSV", xpos, ypos, zpos, idrotm[5111], "ONLY");
3510     
3511     atheta = 112.5;
3512     aphi2  = TMath::ACos(dtra[2] / TMath::Sqrt(dtra[2] * dtra[2] + (50.5 / cos(28.*degrad) * (50.5 / cos(28.*degrad))- 50.5*50.5))) * raddeg;
3513     aphi1  = 180. - aphi2;
3514     xpos   = (xtra[6] + xtra[7]) / 2.;
3515     ypos   = (ytra[6] + ytra[7]) / 2.;
3516     zpos   = dtra[2] / 2.;
3517     pMC->Gsvolu(natra1[12], "TUBE", idtmed[274], dtra1, 3);
3518     r2     = atheta + 90.;
3519     r3     = atheta + 90.;
3520     AliMatrix(idrotm[5112], 90., atheta, aphi1 + 90., r2, aphi1, r3);
3521     pMC->Gspos(natra1[12], 1, "ITSV", xpos, ypos, zpos, idrotm[5112], "ONLY");
3522     zpos   = -dtra[2] / 2.;
3523     pMC->Gsvolu(natra1[13], "TUBE", idtmed[274], dtra1, 3);
3524     r2     = atheta + 90.;
3525     r3     = atheta + 90.;
3526     AliMatrix(idrotm[5113], 90., atheta, aphi2 + 90., r2, aphi2, r3);
3527     pMC->Gspos(natra1[13], 1, "ITSV", xpos, ypos, zpos, idrotm[5113], "ONLY");
3528     
3529     atheta = 157.5;
3530     aphi1  = TMath::ACos(dtra[2] / TMath::Sqrt(dtra[2] * dtra[2] + (50.5 / cos(28.*degrad) * (50.5 / cos(28.*degrad))- 50.5*50.5))) * raddeg;
3531     aphi2  = 180. - aphi1;
3532     xpos   = (xtra[7] + xtra[0]) / 2.;
3533     ypos   = (ytra[7] + ytra[0]) / 2.;
3534     zpos   = dtra[2] / 2.;
3535     pMC->Gsvolu(natra1[14], "TUBE", idtmed[274], dtra1, 3);
3536     r2     = atheta + 90.;
3537     r3     = atheta + 90.;
3538     AliMatrix(idrotm[5114], 90., atheta, aphi1 + 90., r2, aphi1, r3);
3539     pMC->Gspos(natra1[14], 1, "ITSV", xpos, ypos, zpos, idrotm[5114], "ONLY");
3540     zpos   = -dtra[2] / 2.;
3541     pMC->Gsvolu(natra1[15], "TUBE", idtmed[274], dtra1, 3);
3542     r2     = atheta + 90.;
3543     r3     = atheta + 90.;
3544     AliMatrix(idrotm[5115], 90., atheta, aphi2 + 90., r2, aphi2, r3);
3545     pMC->Gspos(natra1[15], 1, "ITSV", xpos, ypos, zpos, idrotm[5115], "ONLY");
3546     
3547     
3548   } else if (fMinorVersion == 4) {
3549     
3550     
3551     rzero    = 34.;
3552     dtra[0]  = .92;
3553     dtra[1]  = 1.;
3554     dtra[2]  = dpcb[2] * 2. + 50.5 - 10.5;
3555     dtra1[0] = .92;
3556     dtra1[1] = 1.;
3557     dtra1[2] = TMath::Sqrt(dtra[2] * dtra[2] + (55.4*55.4-50.5*50.5))/2.;
3558     angle    = 45.;
3559     offset   = angle / 2.;
3560     for (i = 0; i < 8; ++i) {
3561       xtra[i] = rzero * TMath::Cos(i * angle * degrad);
3562       ytra[i] = rzero * TMath::Sin(i * angle * degrad);
3563       ztra[i] = 0.;
3564       pMC->Gsvolu(natra[i], "TUBE", idtmed[274], dtra, 3);
3565       pMC->Gspos(natra[i], 1, "ITSV", xtra[i], ytra[i], ztra[i], 0, "ONLY");
3566     }
3567     
3568     atheta = 22.5;
3569     aphi1  = TMath::ACos(dtra[2] / TMath::Sqrt(dtra[2] * dtra[2] + (50.5 / cos(28.*degrad) * (50.5 / cos(28.*degrad))- 50.5*50.5))) * raddeg;
3570     aphi2  = 180. - aphi1;
3571     xpos   = (xtra[0] + xtra[1]) / 2.;
3572     ypos   = (ytra[0] + ytra[1]) / 2.;
3573     zpos   = dtra[2] / 2.;
3574     pMC->Gsvolu(natra1[0], "TUBE", idtmed[274], dtra1, 3);
3575     r2     = atheta + 90.;
3576     r3     = atheta + 90.;
3577     AliMatrix(idrotm[5100], 90., atheta, aphi1 + 90., r2, aphi1, r3);
3578     pMC->Gspos(natra1[0], 1, "ITSV", xpos, ypos, zpos, idrotm[5100], "ONLY");
3579     zpos   = -dtra[2] / 2.;
3580     pMC->Gsvolu(natra1[1], "TUBE", idtmed[274], dtra1, 3);
3581     r2     = atheta + 90.;
3582     r3     = atheta + 90.;
3583     AliMatrix(idrotm[5101], 90., atheta, aphi2 + 90., r2, aphi2, r3);
3584     pMC->Gspos(natra1[1], 1, "ITSV", xpos, ypos, zpos, idrotm[5101], "ONLY");
3585     
3586     atheta = 67.5;
3587     aphi2  = TMath::ACos(dtra[2] / TMath::Sqrt(dtra[2] * dtra[2] + (50.5 / cos(28.*degrad) * (50.5 / cos(28.*degrad))- 50.5*50.5))) * raddeg;
3588     aphi1  = 180. - aphi2;
3589     xpos   = (xtra[1] + xtra[2]) / 2.;
3590     ypos   = (ytra[1] + ytra[2]) / 2.;
3591     zpos   = dtra[2] / 2.;
3592     pMC->Gsvolu(natra1[2], "TUBE", idtmed[274], dtra1, 3);
3593     r2     = atheta + 90.;
3594     r3     = atheta + 90.;
3595     AliMatrix(idrotm[5102], 90., atheta, aphi1 + 90., r2, aphi1, r3);
3596     pMC->Gspos(natra1[2], 1, "ITSV", xpos, ypos, zpos, idrotm[5102], "ONLY");
3597     zpos = -dtra[2] / 2.;
3598     pMC->Gsvolu(natra1[3], "TUBE", idtmed[274], dtra1, 3);
3599     r2 = atheta + 90.;
3600     r3 = atheta + 90.;
3601     AliMatrix(idrotm[5103], 90., atheta, aphi2 + 90., r2, aphi2, r3);
3602     pMC->Gspos(natra1[3], 1, "ITSV", xpos, ypos, zpos, idrotm[5103], "ONLY");
3603     
3604     atheta = 112.5;
3605     aphi1 = TMath::ACos(dtra[2] / TMath::Sqrt(dtra[2] * dtra[2] + (50.5 / cos(28.*degrad) * (50.5 / cos(28.*degrad))- 50.5*50.5))) * raddeg;
3606     aphi2 = 180. - aphi1;
3607     xpos  = (xtra[2] + xtra[3]) / 2.;
3608     ypos  = (ytra[2] + ytra[3]) / 2.;
3609     zpos  = dtra[2] / 2.;
3610     pMC->Gsvolu(natra1[4], "TUBE", idtmed[274], dtra1, 3);
3611     r2    = atheta + 90.;
3612     r3    = atheta + 90.;
3613     AliMatrix(idrotm[5104], 90., atheta, aphi1 + 90., r2, aphi1, r3);
3614     pMC->Gspos(natra1[4], 1, "ITSV", xpos, ypos, zpos, idrotm[5104], "ONLY");
3615     zpos  = -dtra[2] / 2.;
3616     pMC->Gsvolu(natra1[5], "TUBE", idtmed[274], dtra1, 3);
3617     r2    = atheta + 90.;
3618     r3    = atheta + 90.;
3619     AliMatrix(idrotm[5105], 90., atheta, aphi2 + 90., r2, aphi2, r3);
3620     pMC->Gspos(natra1[5], 1, "ITSV", xpos, ypos, zpos, idrotm[5105], "ONLY");
3621     
3622     atheta = 157.5;
3623     aphi2 = TMath::ACos(dtra[2] / TMath::Sqrt(dtra[2] * dtra[2] + (50.5 / cos(28.*degrad) * (50.5 / cos(28.*degrad))- 50.5*50.5))) * raddeg;
3624     aphi1 = 180. - aphi2;
3625     xpos  = (xtra[3] + xtra[4]) / 2.;
3626     ypos  = (ytra[3] + ytra[4]) / 2.;
3627     zpos  = dtra[2] / 2.;
3628     pMC->Gsvolu(natra1[6], "TUBE", idtmed[274], dtra1, 3);
3629     r2    = atheta + 90.;
3630     r3    = atheta + 90.;
3631     AliMatrix(idrotm[5106], 90., atheta, aphi1 + 90., r2, aphi1, r3);
3632     pMC->Gspos(natra1[6], 1, "ITSV", xpos, ypos, zpos, idrotm[5106], "ONLY");
3633     zpos  = -dtra[2] / 2.;
3634     pMC->Gsvolu(natra1[7], "TUBE", idtmed[274], dtra1, 3);
3635     r2    = atheta + 90.;
3636     r3    = atheta + 90.;
3637     AliMatrix(idrotm[5107], 90., atheta, aphi2 + 90., r2, aphi2, r3);
3638     pMC->Gspos(natra1[7], 1, "ITSV", xpos, ypos, zpos, idrotm[5107], "ONLY");
3639     
3640     atheta = 22.5;
3641     aphi2 = TMath::ACos(dtra[2] / TMath::Sqrt(dtra[2] * dtra[2] + (50.5 / cos(28.*degrad) * (50.5 / cos(28.*degrad))- 50.5*50.5))) * raddeg;
3642     aphi1 = 180. - aphi2;
3643     xpos  = (xtra[4] + xtra[5]) / 2.;
3644     ypos  = (ytra[4] + ytra[5]) / 2.;
3645     zpos  = dtra[2] / 2.;
3646     pMC->Gsvolu(natra1[8], "TUBE", idtmed[274], dtra1, 3);
3647     r2    = atheta + 90.;
3648     r3    = atheta + 90.;
3649     AliMatrix(idrotm[5108], 90., atheta, aphi1 + 90., r2, aphi1, r3);
3650     pMC->Gspos(natra1[8], 1, "ITSV", xpos, ypos, zpos, idrotm[5108], "ONLY");
3651     zpos  = -dtra[2] / 2.;
3652     pMC->Gsvolu(natra1[9], "TUBE", idtmed[274], dtra1, 3);
3653     r2    = atheta + 90.;
3654     r3    = atheta + 90.;
3655     AliMatrix(idrotm[5109], 90., atheta, aphi2 + 90., r2, aphi2, r3);
3656     pMC->Gspos(natra1[9], 1, "ITSV", xpos, ypos, zpos, idrotm[5109], "ONLY");
3657     
3658     atheta = 67.5;
3659     aphi1 = TMath::ACos(dtra[2] / TMath::Sqrt(dtra[2] * dtra[2] + (50.5 / cos(28.*degrad) * (50.5 / cos(28.*degrad))- 50.5*50.5))) * raddeg;
3660     aphi2 = 180. - aphi1;
3661     xpos = (xtra[5] + xtra[6]) / 2.;
3662     ypos = (ytra[5] + ytra[6]) / 2.;
3663     zpos = dtra[2] / 2.;
3664     pMC->Gsvolu(natra1[10], "TUBE", idtmed[274], dtra1, 3);
3665     r2   = atheta + 90.;
3666     r3   = atheta + 90.;
3667     AliMatrix(idrotm[5110], 90., atheta, aphi1 + 90., r2, aphi1, r3);
3668     pMC->Gspos(natra1[10], 1, "ITSV", xpos, ypos, zpos, idrotm[5110], "ONLY");
3669     zpos = -dtra[2] / 2.;
3670     pMC->Gsvolu(natra1[11], "TUBE", idtmed[274], dtra1, 3);
3671     r2   = atheta + 90.;
3672     r3   = atheta + 90.;
3673     AliMatrix(idrotm[5111], 90., atheta, aphi2 + 90., r2, aphi2, r3);
3674     pMC->Gspos(natra1[11], 1, "ITSV", xpos, ypos, zpos, idrotm[5111], "ONLY");
3675     
3676     atheta = 112.5;
3677     aphi2 = TMath::ACos(dtra[2] / TMath::Sqrt(dtra[2] * dtra[2] + (50.5 / cos(28.*degrad) * (50.5 / cos(28.*degrad))- 50.5*50.5))) * raddeg;
3678     aphi1 = 180. - aphi2;
3679     xpos  = (xtra[6] + xtra[7]) / 2.;
3680     ypos  = (ytra[6] + ytra[7]) / 2.;
3681     zpos  = dtra[2] / 2.;
3682     pMC->Gsvolu(natra1[12], "TUBE", idtmed[274], dtra1, 3);
3683     r2    = atheta + 90.;
3684     r3    = atheta + 90.;
3685     AliMatrix(idrotm[5112], 90., atheta, aphi1 + 90., r2, aphi1, r3);
3686     pMC->Gspos(natra1[12], 1, "ITSV", xpos, ypos, zpos, idrotm[5112], "ONLY");
3687     zpos  = -dtra[2] / 2.;
3688     pMC->Gsvolu(natra1[13], "TUBE", idtmed[274], dtra1, 3);
3689     r2    = atheta + 90.;
3690     r3    = atheta + 90.;
3691     AliMatrix(idrotm[5113], 90., atheta, aphi2 + 90., r2, aphi2, r3);
3692     pMC->Gspos(natra1[13], 1, "ITSV", xpos, ypos, zpos, idrotm[5113], "ONLY");
3693     
3694     atheta = 157.5;
3695     aphi1 = TMath::ACos(dtra[2] / TMath::Sqrt(dtra[2] * dtra[2] + (50.5 / cos(28.*degrad) * (50.5 / cos(28.*degrad))- 50.5*50.5))) * raddeg;
3696     aphi2 = 180. - aphi1;
3697     xpos  = (xtra[7] + xtra[0]) / 2.;
3698     ypos  = (ytra[7] + ytra[0]) / 2.;
3699     zpos  = dtra[2] / 2.;
3700     pMC->Gsvolu(natra1[14], "TUBE", idtmed[274], dtra1, 3);
3701     r2    = atheta + 90.;
3702     r3    = atheta + 90.;
3703     AliMatrix(idrotm[5114], 90., atheta, aphi1 + 90., r2, aphi1, r3);
3704     pMC->Gspos(natra1[14], 1, "ITSV", xpos, ypos, zpos, idrotm[5114], "ONLY");
3705     zpos  = -dtra[2] / 2.;
3706     pMC->Gsvolu(natra1[15], "TUBE", idtmed[274], dtra1, 3);
3707     r2    = atheta + 90.;
3708     r3    = atheta + 90.;
3709     AliMatrix(idrotm[5115], 90., atheta, aphi2 + 90., r2, aphi2, r3);
3710     pMC->Gspos(natra1[15], 1, "ITSV", xpos, ypos, zpos, idrotm[5115], "ONLY");
3711   } else {
3712     goto L9012;
3713   }
3714   
3715  L9012:
3716   // --- The frame between the end-caps (hexagonal lay-out) --- 
3717   
3718   //     GOTO 9123                                    ! skip hexagonal frame
3719   
3720   if (fMinorVersion == 2) {
3721     
3722     rzero    = 33.5;
3723     dtra2[0] = .92;
3724     dtra2[1] = 1.;
3725     dtra2[2] = dpcb[2] * 2. + 50. - 10.5;
3726     dtra3[0] = .92;
3727     dtra3[1] = 1.;
3728     dtra3[2] = 16.75;
3729     dtra4[0] = .92;
3730     dtra4[1] = 1.;
3731     dtra4[2] = TMath::Sqrt(dtra2[2] * dtra2[2] + (59.9*59.9-50.*50.)) / 2.;
3732     angle = 60.;
3733     offset = angle / 2.;
3734     for (i = 0; i < 6; ++i) {
3735       xtra1[i] = rzero * TMath::Cos((i * angle + offset) *degrad);
3736       ytra1[i] = rzero * TMath::Sin((i * angle + offset) *degrad);
3737       ztra1[i] = 0.;
3738       pMC->Gsvolu(natra2[i], "TUBE", idtmed[274], dtra2, 3);
3739       pMC->Gspos(natra2[i], 1, "ITSV", xtra1[i], ytra1[i], ztra1[i], 0, "ONLY");
3740     }
3741     
3742     atheta = 60.;
3743     aphi = 90.;
3744     xpos = (xtra1[0] + xtra1[1]) / 2.;
3745     ypos = (ytra1[0] + ytra1[1]) / 2.;
3746     zpos = 0.;
3747     pMC->Gsvolu(natra3[0], "TUBE", idtmed[274], dtra3, 3);
3748     r2   = atheta + 90.;
3749     r3   = atheta + 90.;
3750     AliMatrix(idrotm[5200], 90., atheta, aphi + 90., r2, aphi, r3);
3751     pMC->Gspos(natra3[0], 1, "ITSV", xpos, ypos, zpos, idrotm[5200], "ONLY");
3752     
3753     atheta = 120.;
3754     aphi = 90.;
3755     xpos = (xtra1[1] + xtra1[2]) / 2.;
3756     ypos = (ytra1[1] + ytra1[2]) / 2.;
3757     zpos = 0.;
3758     pMC->Gsvolu(natra3[1], "TUBE", idtmed[274], dtra3, 3);
3759     r2   = atheta + 90.;
3760     r3   = atheta + 90.;
3761     AliMatrix(idrotm[5201], 90., atheta, aphi + 90., r2, aphi, r3);
3762     pMC->Gspos(natra3[1], 1, "ITSV", xpos, ypos, zpos, idrotm[5201], "ONLY");
3763     
3764     atheta = 180.;
3765     aphi = 90.;
3766     xpos = (xtra1[2] + xtra1[3]) / 2.;
3767     ypos = (ytra1[2] + ytra1[3]) / 2.;
3768     zpos = 0.;
3769     pMC->Gsvolu(natra3[2], "TUBE", idtmed[274], dtra3, 3);
3770     r2   = atheta + 90.;
3771     r3   = atheta + 90.;
3772     AliMatrix(idrotm[5202], 90., atheta, aphi + 90., r2, aphi, r3);
3773     pMC->Gspos(natra3[2], 1, "ITSV", xpos, ypos, zpos, idrotm[5202], "ONLY");
3774     
3775     atheta = 60.;
3776     aphi = 90.;
3777     xpos = (xtra1[3] + xtra1[4]) / 2.;
3778     ypos = (ytra1[3] + ytra1[4]) / 2.;
3779     zpos = 0.;
3780     pMC->Gsvolu(natra3[3], "TUBE", idtmed[274], dtra3, 3);
3781     r2 = atheta + 90.;
3782     r3 = atheta + 90.;
3783     AliMatrix(idrotm[5203], 90., atheta, aphi + 90., r2, aphi, r3);
3784     pMC->Gspos(natra3[3], 1, "ITSV", xpos, ypos, zpos, idrotm[5203], "ONLY");
3785     
3786     atheta = 120.;
3787     aphi = 90.;
3788     xpos = (xtra1[4] + xtra1[5]) / 2.;
3789     ypos = (ytra1[4] + ytra1[5]) / 2.;
3790     zpos = 0.;
3791     pMC->Gsvolu(natra3[4], "TUBE", idtmed[274], dtra3, 3);
3792     r2   = atheta + 90.;
3793     r3   = atheta + 90.;
3794     AliMatrix(idrotm[5204], 90., atheta, aphi + 90., r2, aphi, r3);
3795     pMC->Gspos(natra3[4], 1, "ITSV", xpos, ypos, zpos, idrotm[5204], "ONLY");
3796     
3797     atheta = 180.;
3798     aphi = 90.;
3799     xpos = (xtra1[5] + xtra1[0]) / 2.;
3800     ypos = (ytra1[5] + ytra1[0]) / 2.;
3801     zpos = 0.;
3802     pMC->Gsvolu(natra3[5], "TUBE", idtmed[274], dtra3, 3);
3803     r2   = atheta + 90.;
3804     r3   = atheta + 90.;
3805     AliMatrix(idrotm[5205], 90., atheta, aphi + 90., r2, aphi, r3);
3806     pMC->Gspos(natra3[5], 1, "ITSV", xpos, ypos, zpos, idrotm[5205], "ONLY");
3807     
3808     atheta = 60.;
3809     aphi2 = TMath::ACos(dtra2[2] / TMath::Sqrt(dtra2[2] * dtra2[2] + (50. / cos(34.*degrad) * (50. / cos(34.*degrad))- 50.*50.))) * raddeg;
3810     aphi1 = 180. - aphi2;
3811     xpos  = (xtra1[0] + xtra1[1]) / 2.;
3812     ypos  = (ytra1[0] + ytra1[1]) / 2.;
3813     zpos  = dtra2[2] / 2.;
3814     pMC->Gsvolu(natra4[0], "TUBE", idtmed[274], dtra4, 3);
3815     r2    = atheta + 90.;
3816     r3    = atheta + 90.;
3817     AliMatrix(idrotm[5210], 90., atheta, aphi1 + 90., r2, aphi1, r3);
3818     pMC->Gspos(natra4[0], 1, "ITSV", xpos, ypos, zpos, idrotm[5210], "ONLY");
3819     zpos = -dtra2[2] / 2.;
3820     pMC->Gsvolu(natra4[1], "TUBE", idtmed[274], dtra4, 3);
3821     r2 = atheta + 90.;
3822     r3 = atheta + 90.;
3823     AliMatrix(idrotm[5211], 90., atheta, aphi2 + 90., r2, aphi2, r3);
3824     pMC->Gspos(natra4[1], 1, "ITSV", xpos, ypos, zpos, idrotm[5211], "ONLY");
3825     
3826     atheta = 120.;
3827     aphi1 = TMath::ACos(dtra2[2] / TMath::Sqrt(dtra2[2] * dtra2[2] + (50. / cos(34.*degrad) * (50. / cos(34.*degrad))- 50.*50.))) * raddeg;
3828     aphi2 = 180. - aphi1;
3829     xpos = (xtra1[1] + xtra1[2]) / 2.;
3830     ypos = (ytra1[1] + ytra1[2]) / 2.;
3831     zpos = dtra2[2] / 2.;
3832     pMC->Gsvolu(natra4[2], "TUBE", idtmed[274], dtra4, 3);
3833     r2   = atheta + 90.;
3834     r3   = atheta + 90.;
3835     AliMatrix(idrotm[5212], 90., atheta, aphi1 + 90., r2, aphi1, r3);
3836     pMC->Gspos(natra4[2], 1, "ITSV", xpos, ypos, zpos, idrotm[5212], "ONLY");
3837     zpos = -dtra2[2] / 2.;
3838     pMC->Gsvolu(natra4[3], "TUBE", idtmed[274], dtra4, 3);
3839     r2   = atheta + 90.;
3840     r3   = atheta + 90.;
3841     AliMatrix(idrotm[5213], 90., atheta, aphi2 + 90., r2, aphi2, r3);
3842     pMC->Gspos(natra4[3], 1, "ITSV", xpos, ypos, zpos, idrotm[5213], "ONLY");
3843     
3844     atheta = 180.;
3845     aphi2 = TMath::ACos(dtra2[2] / TMath::Sqrt(dtra2[2] * dtra2[2] + (50. / cos(34.*degrad) * (50. / cos(34.*degrad))- 50.*50.))) * raddeg;
3846     aphi1 = 180. - aphi2;
3847     xpos  = (xtra1[2] + xtra1[3]) / 2.;
3848     ypos  = (ytra1[2] + ytra1[3]) / 2.;
3849     zpos  = dtra2[2] / 2.;
3850     pMC->Gsvolu(natra4[4], "TUBE", idtmed[274], dtra4, 3);
3851     r2   = atheta + 90.;
3852     r3   = atheta + 90.;
3853     AliMatrix(idrotm[5214], 90., atheta, aphi1 + 90., r2, aphi1, r3);
3854     pMC->Gspos(natra4[4], 1, "ITSV", xpos, ypos, zpos, idrotm[5214], "ONLY");
3855     zpos = -dtra2[2] / 2.;
3856     pMC->Gsvolu(natra4[5], "TUBE", idtmed[274], dtra4, 3);
3857     r2   = atheta + 90.;
3858     r3   = atheta + 90.;
3859     AliMatrix(idrotm[5215], 90., atheta, aphi2 + 90., r2, aphi2, r3);
3860     pMC->Gspos(natra4[5], 1, "ITSV", xpos, ypos, zpos, idrotm[5215], "ONLY");
3861     atheta = 180.;
3862     aphi1 = TMath::ACos(dtra2[2] / TMath::Sqrt(dtra2[2] * dtra2[2] + (50. / cos(34.*degrad) * (50. / cos(34.*degrad)) 
3863                                                                       - 50.*50.))) * raddeg;
3864     aphi2 = 180. - aphi1;
3865     xpos = (xtra1[2] + xtra1[3]) / 2.;
3866     ypos = (ytra1[2] + ytra1[3]) / 2.;
3867     zpos = dtra2[2] / 2.;
3868     pMC->Gsvolu(natra4[6], "TUBE", idtmed[274], dtra4, 3);
3869     r2   = atheta + 90.;
3870     r3   = atheta + 90.;
3871     AliMatrix(idrotm[5216], 90., atheta, aphi1 + 90., r2, aphi1, r3);
3872     pMC->Gspos(natra4[6], 1, "ITSV", xpos, ypos, zpos, idrotm[5216], "ONLY");
3873     zpos = -dtra2[2] / 2.;
3874     pMC->Gsvolu(natra4[7], "TUBE", idtmed[274], dtra4, 3);
3875     r2   = atheta + 90.;
3876     r3   = atheta + 90.;
3877     AliMatrix(idrotm[5217], 90., atheta, aphi2 + 90., r2, aphi2, r3);
3878     pMC->Gspos(natra4[7], 1, "ITSV", xpos, ypos, zpos, idrotm[5217], "ONLY");
3879     
3880     atheta = 60.;
3881     aphi2 = TMath::ACos(dtra2[2] / TMath::Sqrt(dtra2[2] * dtra2[2] + (50. / cos(34.*degrad) * (50. / cos(34.*degrad))- 50.*50.))) * raddeg;
3882     aphi1 = 180. - aphi2;
3883     xpos = (xtra1[3] + xtra1[4]) / 2.;
3884     ypos = (ytra1[3] + ytra1[4]) / 2.;
3885     zpos = dtra2[2] / 2.;
3886     pMC->Gsvolu(natra4[8], "TUBE", idtmed[274], dtra4, 3);
3887     r2 = atheta + 90.;
3888     r3 = atheta + 90.;
3889     AliMatrix(idrotm[5218], 90., atheta, aphi1 + 90., r2, aphi1, r3);
3890     pMC->Gspos(natra4[8], 1, "ITSV", xpos, ypos, zpos, idrotm[5218], "ONLY");
3891     zpos = -dtra2[2] / 2.;
3892     pMC->Gsvolu(natra4[9], "TUBE", idtmed[274], dtra4, 3);
3893     r2 = atheta + 90.;
3894     r3 = atheta + 90.;
3895     AliMatrix(idrotm[5219], 90., atheta, aphi2 + 90., r2, aphi2, r3);
3896     pMC->Gspos(natra4[9], 1, "ITSV", xpos, ypos, zpos, idrotm[5219], "ONLY");
3897     
3898     atheta = 120.;
3899     aphi1 = TMath::ACos(dtra2[2] / TMath::Sqrt(dtra2[2] * dtra2[2] + (50. / cos(34.*degrad) * (50. / cos(34.*degrad))- 50.*50.))) * raddeg;
3900     aphi2 = 180. - aphi1;
3901     xpos  = (xtra1[4] + xtra1[5]) / 2.;
3902     ypos  = (ytra1[4] + ytra1[5]) / 2.;
3903     zpos  = dtra2[2] / 2.;
3904     pMC->Gsvolu(natra4[10], "TUBE", idtmed[274], dtra4, 3);
3905     r2    = atheta + 90.;
3906     r3    = atheta + 90.;
3907     AliMatrix(idrotm[5220], 90., atheta, aphi1 + 90., r2, aphi1, r3);
3908     pMC->Gspos(natra4[10], 1, "ITSV", xpos, ypos, zpos, idrotm[5220], "ONLY");
3909     zpos  = -dtra2[2] / 2.;
3910     pMC->Gsvolu(natra4[11], "TUBE", idtmed[274], dtra4, 3);
3911     r2    = atheta + 90.;
3912     r3    = atheta + 90.;
3913     AliMatrix(idrotm[5221], 90., atheta, aphi2 + 90., r2, aphi2, r3);
3914     pMC->Gspos(natra4[11], 1, "ITSV", xpos, ypos, zpos, idrotm[5221], "ONLY");
3915     
3916     atheta = 180.;
3917     aphi2  = TMath::ACos(dtra2[2] / TMath::Sqrt(dtra2[2] * dtra2[2] + (50. / cos(34.*degrad) * (50. / cos(34.*degrad))- 50.*50.))) * raddeg;
3918     aphi1  = 180. - aphi2;
3919     xpos   = (xtra1[5] + xtra1[0]) / 2.;
3920     ypos   = (ytra1[5] + ytra1[0]) / 2.;
3921     zpos   = dtra2[2] / 2.;
3922     pMC->Gsvolu(natra4[12], "TUBE", idtmed[274], dtra4, 3);
3923     r2     = atheta + 90.;
3924     r3     = atheta + 90.;
3925     AliMatrix(idrotm[5222], 90., atheta, aphi1 + 90., r2, aphi1, r3);
3926     pMC->Gspos(natra4[12], 1, "ITSV", xpos, ypos, zpos, idrotm[5222], "ONLY");
3927     zpos = -dtra2[2] / 2.;
3928     pMC->Gsvolu(natra4[13], "TUBE", idtmed[274], dtra4, 3);
3929     r2 = atheta + 90.;
3930     r3 = atheta + 90.;
3931     AliMatrix(idrotm[5223], 90., atheta, aphi2 + 90., r2, aphi2, r3);
3932     pMC->Gspos(natra4[13], 1, "ITSV", xpos, ypos, zpos, idrotm[5223], "ONLY");
3933     atheta = 180.;
3934     aphi1 = TMath::ACos(dtra2[2] / TMath::Sqrt(dtra2[2] * dtra2[2] + (50. / cos(34.*degrad) * (50. / cos(34.*degrad))- 50.*50.))) * raddeg;
3935     aphi2 = 180. - aphi1;
3936     xpos  = (xtra1[5] + xtra1[0]) / 2.;
3937     ypos  = (ytra1[5] + ytra1[0]) / 2.;
3938     zpos  = dtra2[2] / 2.;
3939     pMC->Gsvolu(natra4[14], "TUBE", idtmed[274], dtra4, 3);
3940     r2   = atheta + 90.;
3941     r3   = atheta + 90.;
3942     AliMatrix(idrotm[5224], 90., atheta, aphi1 + 90., r2, aphi1, r3);
3943     pMC->Gspos(natra4[14], 1, "ITSV", xpos, ypos, zpos, idrotm[5224], "ONLY");
3944     zpos = -dtra2[2] / 2.;
3945     pMC->Gsvolu(natra4[15], "TUBE", idtmed[274], dtra4, 3);
3946     r2   = atheta + 90.;
3947     r3   = atheta + 90.;
3948     AliMatrix(idrotm[5225], 90., atheta, aphi2 + 90., r2, aphi2, r3);
3949     pMC->Gspos(natra4[15], 1, "ITSV", xpos, ypos, zpos, idrotm[5225], "ONLY");
3950     
3951     
3952   } else if (fMinorVersion == 5) {
3953     
3954     
3955     rzero    = 33.5;
3956     dtra2[0] = .92;
3957     dtra2[1] = 1.;
3958     dtra2[2] = dpcb[2] * 2. + 50. - 10.5;
3959     dtra3[0] = .92;
3960     dtra3[1] = 1.;
3961     dtra3[2] = 16.75;
3962     dtra4[0] = .92;
3963     dtra4[1] = 1.;
3964     dtra4[2] = TMath::Sqrt(dtra2[2] * dtra2[2] + (59.9*59.9-50.*50.)) / 2.;
3965     angle  = 60.;
3966     offset = angle / 2.;
3967     for (i = 0; i < 6; ++i) {
3968       xtra1[i] = rzero * TMath::Cos((i * angle + offset) *degrad);
3969       ytra1[i] = rzero * TMath::Sin((i * angle + offset) *degrad);
3970       ztra1[i] = 0.;
3971       pMC->Gsvolu(natra2[i], "TUBE", idtmed[274], dtra2, 3);
3972       pMC->Gspos(natra2[i], 1, "ITSV", xtra1[i], ytra1[i], ztra1[i], 0, "ONLY");
3973     }
3974     
3975     atheta = 60.;
3976     aphi = 90.;
3977     xpos = (xtra1[0] + xtra1[1]) / 2.;
3978     ypos = (ytra1[0] + ytra1[1]) / 2.;
3979     zpos = 0.;
3980     pMC->Gsvolu(natra3[0], "TUBE", idtmed[274], dtra3, 3);
3981     r2   = atheta + 90.;
3982     r3   = atheta + 90.;
3983     AliMatrix(idrotm[5200], 90., atheta, aphi + 90., r2, aphi, r3);
3984     pMC->Gspos(natra3[0], 1, "ITSV", xpos, ypos, zpos, idrotm[5200], "ONLY");
3985     
3986     atheta = 120.;
3987     aphi = 90.;
3988     xpos = (xtra1[1] + xtra1[2]) / 2.;
3989     ypos = (ytra1[1] + ytra1[2]) / 2.;
3990     zpos = 0.;
3991     pMC->Gsvolu(natra3[1], "TUBE", idtmed[274], dtra3, 3);
3992     r2   = atheta + 90.;
3993     r3   = atheta + 90.;
3994     AliMatrix(idrotm[5201], 90., atheta, aphi + 90., r2, aphi, r3);
3995     pMC->Gspos(natra3[1], 1, "ITSV", xpos, ypos, zpos, idrotm[5201], "ONLY");
3996     
3997     atheta = 180.;
3998     aphi = 90.;
3999     xpos = (xtra1[2] + xtra1[3]) / 2.;
4000     ypos = (ytra1[2] + ytra1[3]) / 2.;
4001     zpos = 0.;
4002     pMC->Gsvolu(natra3[2], "TUBE", idtmed[274], dtra3, 3);
4003     r2   = atheta + 90.;
4004     r3   = atheta + 90.;
4005     AliMatrix(idrotm[5202], 90., atheta, aphi + 90., r2, aphi, r3);
4006     pMC->Gspos(natra3[2], 1, "ITSV", xpos, ypos, zpos, idrotm[5202], "ONLY");
4007     
4008     atheta = 60.;
4009     aphi   = 90.;
4010     xpos   = (xtra1[3] + xtra1[4]) / 2.;
4011     ypos   = (ytra1[3] + ytra1[4]) / 2.;
4012     zpos   = 0.;
4013     pMC->Gsvolu(natra3[3], "TUBE", idtmed[274], dtra3, 3);
4014     r2 = atheta + 90.;
4015     r3 = atheta + 90.;
4016     AliMatrix(idrotm[5203], 90., atheta, aphi + 90., r2, aphi, r3);
4017     pMC->Gspos(natra3[3], 1, "ITSV", xpos, ypos, zpos, idrotm[5203], "ONLY");
4018     
4019     atheta = 120.;
4020     aphi = 90.;
4021     xpos = (xtra1[4] + xtra1[5]) / 2.;
4022     ypos = (ytra1[4] + ytra1[5]) / 2.;
4023     zpos = 0.;
4024     pMC->Gsvolu(natra3[4], "TUBE", idtmed[274], dtra3, 3);
4025     r2   = atheta + 90.;
4026     r3   = atheta + 90.;
4027     AliMatrix(idrotm[5204], 90., atheta, aphi + 90., r2, aphi, r3);
4028     pMC->Gspos(natra3[4], 1, "ITSV", xpos, ypos, zpos, idrotm[5204], "ONLY");
4029     
4030     atheta = 180.;
4031     aphi   = 90.;
4032     xpos   = (xtra1[5] + xtra1[0]) / 2.;
4033     ypos   = (ytra1[5] + ytra1[0]) / 2.;
4034     zpos   = 0.;
4035     pMC->Gsvolu(natra3[5], "TUBE", idtmed[274], dtra3, 3);
4036     r2 = atheta + 90.;
4037     r3 = atheta + 90.;
4038     AliMatrix(idrotm[5205], 90., atheta, aphi + 90., r2, aphi, r3);
4039     pMC->Gspos(natra3[5], 1, "ITSV", xpos,&n