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