Coding conventions
[u/mrichter/AliRoot.git] / ITS / AliITSv11Hybrid.cxx
CommitLineData
108bd0fe 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
7ab0715c 16
17// $Id$
18
19
8f8273a4 20//========================================================================
21//
22// Geometry of the Inner Tracking System
23//
24// This geometry is a mix between the old geometry (originally coded
25// in AliITSvPPRasymmFMD) and the new TGeo geometry (v11).
26// The flags which indicate whether the old or the new part is used
27// is set in AliITSInitGeometry.cxx
28//
29// Ludovic Gaudichet (gaudichet@to.infn.it)
30//
31//========================================================================
32
33
012f0f4c 34
35// $Log$
7ab0715c 36// Revision 1.8 2007/10/21 18:59:10 masera
37// SPD new geometry added to Hybrid V11
38//
dbfc6ce6 39// Revision 1.7 2007/08/24 14:32:57 hristov
40// Introduction of SPD half-stave volumes, cleaning and new code (in relation to new SPD geometry) in AliITSv11Hybrid (Ludovic)
41//
8f8273a4 42// Revision 1.6 2007/07/27 08:12:39 morsch
43// Write all track references into the same branch.
44//
e6add757 45// Revision 1.5 2007/06/28 10:17:25 masera
46// Introduction of the new SSD geometry in simulation (AliITSv11Hybrid) and suppression of overlaps between old and new parts
47//
bf210566 48// Revision 1.4 2007/05/09 20:40:41 masera
49// Bug fix (V11Hybrid geometry)
50//
75473741 51// Revision 1.3 2007/05/08 16:57:42 masera
52// Updates concerning the geometry: versioning system, new V11hybrid version, bug fixes (B.Nilsend and L. Gaudichet
53//
108bd0fe 54
108bd0fe 55
56#include <TClonesArray.h>
57#include <TGeometry.h>
58#include <TLorentzVector.h>
59#include <TGeoMatrix.h>
60#include <TGeoPhysicalNode.h>
108bd0fe 61#include <TString.h>
62#include <TNode.h>
63#include <TTUBE.h>
64#include <TGeoManager.h>
65#include <TGeoVolume.h>
66#include <TVirtualMC.h>
67
68#include "AliITS.h"
69#include "AliITSDetTypeSim.h"
70#include "AliITSgeom.h"
71#include "AliITSgeomSDD.h"
72#include "AliITSgeomSPD.h"
73#include "AliITSgeomSSD.h"
74#include "AliITShit.h"
108bd0fe 75#include "AliITSCalibrationSDD.h"
108bd0fe 76#include "AliITSsegmentationSDD.h"
77#include "AliITSsegmentationSPD.h"
78#include "AliITSsegmentationSSD.h"
79#include "AliITSv11Hybrid.h"
80#include "AliLog.h"
81#include "AliMC.h"
82#include "AliMagF.h"
83#include "AliRun.h"
84#include "AliTrackReference.h"
85#include "AliITSInitGeometry.h"
8f8273a4 86#include "AliITSv11GeometrySPD.h"
108bd0fe 87#include "AliITSv11GeometrySDD.h"
bf210566 88#include "AliITSv11GeometrySSD.h"
108bd0fe 89
90
108bd0fe 91ClassImp(AliITSv11Hybrid)
92
93//______________________________________________________________________
94AliITSv11Hybrid::AliITSv11Hybrid():
95 AliITS(),
96 fGeomDetOut(kFALSE),
97 fGeomDetIn(kFALSE),
98 fByThick(kTRUE),
99 fMajorVersion(IsVersion()),
100 fMinorVersion(-1),
101 fDet1(0),
102 fDet2(0),
103 fChip1(0),
104 fChip2(0),
105 fRails(0),
106 fFluid(0),
107 fIDMother(0),
012f0f4c 108 fInitGeom((AliITSVersion_t)fMajorVersion,fMinorVersion),
8f8273a4 109 fSPDgeom(0),
bf210566 110 fSDDgeom(0),
111 fSSDgeom(0)
108bd0fe 112 {
012f0f4c 113 // Standard default constructor
108bd0fe 114 // Inputs:
115 // none.
116 // Outputs:
117 // none.
118 // Return:
119 // none.
108bd0fe 120}
8f8273a4 121
122//______________________________________________________________________
123AliITSv11Hybrid::AliITSv11Hybrid(const char *title)
124 : AliITS("ITS", title),
125 fGeomDetOut(kFALSE),
126 fGeomDetIn(kFALSE),
127 fByThick(kTRUE),
128 fMajorVersion(IsVersion()),
129 fMinorVersion(1),
130 fDet1(200.0),
131 fDet2(200.0),
132 fChip1(150.0),
133 fChip2(150.0),
134 fRails(0),
135 fFluid(1),
136 fIDMother(0),
137 fInitGeom((AliITSVersion_t)fMajorVersion,fMinorVersion),
138 fSPDgeom(0),
139 fSDDgeom(0),
140 fSSDgeom(0) {
141 // Standard constructor for the v11Hybrid geometry.
142 // Inputs:
143 // const char * title Arbitrary title
144 // Outputs:
145 // none.
146 // Return:
147 // none.
148 Int_t i;
149
150 fSPDgeom = new AliITSv11GeometrySPD();
151 fSDDgeom = new AliITSv11GeometrySDD(0);
152 fSSDgeom = new AliITSv11GeometrySSD();
153
154 fIdN = 6;
155 fIdName = new TString[fIdN];
156
157 if (AliITSInitGeometry::SPDIsTGeoNative()) {
dbfc6ce6 158 fIdName[0] = fSPDgeom->GetSenstiveVolumeName1();
159 fIdName[1] = fSPDgeom->GetSenstiveVolumeName2();
8f8273a4 160 } else {
161 fIdName[0] = "ITS1";
162 fIdName[1] = "ITS2";
163 }
164
165 if (AliITSInitGeometry::SDDIsTGeoNative()) {
166 fIdName[2] = fSDDgeom->GetSenstiveVolumeName3();
167 fIdName[3] = fSDDgeom->GetSenstiveVolumeName4();
168 } else {
169 fIdName[2] = "ITS3";
170 fIdName[3] = "ITS4";
171 }
172
173 if (AliITSInitGeometry::SSDIsTGeoNative()) {
174 fIdName[4] = fSSDgeom->GetSenstiveVolumeName5();
175 fIdName[5] = fSSDgeom->GetSenstiveVolumeName6();
176 } else {
177 fIdName[4] = "ITS5";
178 fIdName[5] = "ITS6";
179 }
180
181 fIdSens = new Int_t[fIdN];
182 for(i=0;i<fIdN;i++) fIdSens[i] = 0;
183 SetThicknessDet1();
184 SetThicknessDet2();
185 SetThicknessChip1();
186 SetThicknessChip2();
187 SetDensityServicesByThickness();
188
189 fEuclidGeometry="$ALICE_ROOT/ITS/ITSgeometry_vPPRasymm2.euc";
190 strncpy(fEuclidGeomDet,"$ALICE_ROOT/ITS/ITSgeometry_vPPRasymm2.det",60);
191 strncpy(fRead,fEuclidGeomDet,60);
192 strncpy(fWrite,fEuclidGeomDet,60);
193 strncpy(fRead,"$ALICE_ROOT/ITS/ITSgeometry_vPPRasymmFMD.det",60);
194}
195
108bd0fe 196//______________________________________________________________________
197AliITSv11Hybrid::AliITSv11Hybrid(const char *name, const char *title)
198 : AliITS("ITS", title),
199 fGeomDetOut(kFALSE),
200 fGeomDetIn(kFALSE),
201 fByThick(kTRUE),
202 fMajorVersion(IsVersion()),
8f8273a4 203 fMinorVersion(1),
204 fDet1(200.0),
205 fDet2(200.0),
206 fChip1(150.0),
207 fChip2(150.0),
108bd0fe 208 fRails(0),
8f8273a4 209 fFluid(1),
108bd0fe 210 fIDMother(0),
012f0f4c 211 fInitGeom((AliITSVersion_t)fMajorVersion,fMinorVersion),
8f8273a4 212 fSPDgeom(0),
bf210566 213 fSDDgeom(0),
214 fSSDgeom(0) {
012f0f4c 215 // Standard constructor for the v11Hybrid geometry.
108bd0fe 216 // Inputs:
217 // const char * name Ignored, set to "ITS"
218 // const char * title Arbitrary title
219 // Outputs:
220 // none.
221 // Return:
222 // none.
223 Int_t i;
bf210566 224
8f8273a4 225 fSPDgeom = new AliITSv11GeometrySPD();
bf210566 226 fSDDgeom = new AliITSv11GeometrySDD(0);
227 fSSDgeom = new AliITSv11GeometrySSD();
108bd0fe 228
229 fIdN = 6;
230 fIdName = new TString[fIdN];
8f8273a4 231
232 (void) name; // removes warning message
233
234 if (AliITSInitGeometry::SPDIsTGeoNative()) {
dbfc6ce6 235 fIdName[0] = fSPDgeom->GetSenstiveVolumeName1();
236 fIdName[1] = fSPDgeom->GetSenstiveVolumeName2();
8f8273a4 237 } else {
238 fIdName[0] = "ITS1";
239 fIdName[1] = "ITS2";
240 }
241
108bd0fe 242 if (AliITSInitGeometry::SDDIsTGeoNative()) {
243 fIdName[2] = fSDDgeom->GetSenstiveVolumeName3();
244 fIdName[3] = fSDDgeom->GetSenstiveVolumeName4();
245 } else {
246 fIdName[2] = "ITS3";
247 fIdName[3] = "ITS4";
248 }
bf210566 249
250 if (AliITSInitGeometry::SSDIsTGeoNative()) {
251 fIdName[4] = fSSDgeom->GetSenstiveVolumeName5();
252 fIdName[5] = fSSDgeom->GetSenstiveVolumeName6();
253 } else {
254 fIdName[4] = "ITS5";
255 fIdName[5] = "ITS6";
256 }
108bd0fe 257
108bd0fe 258 fIdSens = new Int_t[fIdN];
259 for(i=0;i<fIdN;i++) fIdSens[i] = 0;
260 SetThicknessDet1();
261 SetThicknessDet2();
262 SetThicknessChip1();
263 SetThicknessChip2();
264 SetDensityServicesByThickness();
265
266 fEuclidGeometry="$ALICE_ROOT/ITS/ITSgeometry_vPPRasymm2.euc";
267 strncpy(fEuclidGeomDet,"$ALICE_ROOT/ITS/ITSgeometry_vPPRasymm2.det",60);
268 strncpy(fRead,fEuclidGeomDet,60);
269 strncpy(fWrite,fEuclidGeomDet,60);
270 strncpy(fRead,"$ALICE_ROOT/ITS/ITSgeometry_vPPRasymmFMD.det",60);
108bd0fe 271}
8f8273a4 272
108bd0fe 273//______________________________________________________________________
274AliITSv11Hybrid::~AliITSv11Hybrid() {
275 // Standard destructor
276 // Inputs:
277 // none.
278 // Outputs:
279 // none.
280 // Return:
281 // none.
8f8273a4 282 delete fSPDgeom;
108bd0fe 283 delete fSDDgeom;
bf210566 284 delete fSSDgeom;
108bd0fe 285}
286
287//______________________________________________________________________
bf210566 288void AliITSv11Hybrid::SetT2Lmatrix(const char *name, Double_t yShift,
289 Bool_t yFlip, Bool_t yRot180)
108bd0fe 290 const {
291
292 //
293 // Creates the TGeo Local to Tracking transformation matrix
294 // and sends it to the corresponding TGeoPNEntry
295 //
296 // This function is used in AddAlignableVolumes()
297
298 TGeoPNEntry *alignableEntry = gGeoManager->GetAlignableEntry(name);
299 const char *path = alignableEntry->GetTitle();
300
301 if (!gGeoManager->cd(path))
302 AliFatal(Form("Volume path %s not valid!",path));
303 TGeoHMatrix* globMatrix = gGeoManager->GetCurrentMatrix();
304
305 Double_t *gtrans = globMatrix->GetTranslation(), rotMatrix[9];
306 memcpy(&rotMatrix[0], globMatrix->GetRotationMatrix(), 9*sizeof(Double_t));
bf210566 307 Double_t al = TMath::ATan2(rotMatrix[1],rotMatrix[0]);
333c948a 308 if (yRot180) {
bf210566 309 al = TMath::ATan2(rotMatrix[1],-rotMatrix[0]);
333c948a 310 }
108bd0fe 311
312 TGeoHMatrix *matLtoT = new TGeoHMatrix;
bf210566 313 matLtoT->SetDx( gtrans[0]*TMath::Cos(al)+gtrans[1]*TMath::Sin(al) ); // translation
108bd0fe 314 matLtoT->SetDy( yShift );
315 matLtoT->SetDz(-gtrans[2]);
316 rotMatrix[0]= 0; rotMatrix[1]= 1; rotMatrix[2]= 0; // + rotation
317 rotMatrix[3]= 1; rotMatrix[4]= 0; rotMatrix[5]= 0;
318 rotMatrix[6]= 0; rotMatrix[7]= 0; rotMatrix[8]=-1;
333c948a 319 if (yFlip) rotMatrix[3] = -1; // flipping in y (for SPD1)
320
321 if (yRot180) { // rotation of pi around the axis perpendicular to the wafer
322 matLtoT->SetDy( -yShift );
323 rotMatrix[3] = -1;
8f8273a4 324 if (yFlip) rotMatrix[3] = 1; // flipping in y (for SPD1)
333c948a 325 matLtoT->SetDz(gtrans[2]);
326 rotMatrix[8]=1;
327 }
108bd0fe 328
329 TGeoRotation rot;
330 rot.SetMatrix(rotMatrix);
331 matLtoT->MultiplyLeft(&rot);
332 TGeoHMatrix *matTtoL = new TGeoHMatrix(matLtoT->Inverse());
333 delete matLtoT;
334 alignableEntry->SetMatrix(matTtoL);
335}
bf210566 336
108bd0fe 337//______________________________________________________________________
338void AliITSv11Hybrid::AddAlignableVolumes() const
339{
340 //
341 // Creates entries for alignable volumes associating the symbolic volume
342 // name with the corresponding volume path.
343 //
344 // Records in the alignable entries the transformation matrices converting
345 // TGeo local coordinates (in the RS of alignable volumes) to the tracking
346 // system
347 // For this, this function has to run before the misalignment because we
348 // are using the ideal positions in the AliITSgeom object.
349
350 AliInfo("Add ITS alignable volumes");
351
352 if (!gGeoManager) {
353 AliFatal("TGeoManager doesn't exist !");
354 return;
355 }
356
357 if( !gGeoManager->SetAlignableEntry("ITS","ALIC_1/ITSV_1") )
358 AliFatal("Unable to set alignable entry!!");
359
108bd0fe 360 TString strSPD = "ITS/SPD";
361 TString strSDD = "ITS/SDD";
362 TString strSSD = "ITS/SSD";
363 TString strStave = "/Stave";
8f8273a4 364 TString strHalfStave = "/HalfStave";
108bd0fe 365 TString strLadder = "/Ladder";
366 TString strSector = "/Sector";
367 TString strSensor = "/Sensor";
368 TString strEntryName1;
369 TString strEntryName2;
370 TString strEntryName3;
8f8273a4 371 TString strEntryName4;
108bd0fe 372
8f8273a4 373 //===== SPD layers =====
374 if (AliITSInitGeometry::SPDIsTGeoNative()) { // new SPD geometry
375
376 TString str0 = "ALIC_1/ITSV_1/ITSSPDCarbonFiberSectorV_";
377 TString str1 = "/ITSSPDSensitiveVirtualvolumeM0_1/LAY1_STAVE_";
378 TString str1Bis = "/HALF-STAVE";
379 TString str1Tierce = "_1";
380 TString str2 = "/LAY1_LADDER_";
108bd0fe 381
382 TString sector;
383 TString stave;
8f8273a4 384 TString halfStave;
108bd0fe 385 TString module;
386
8f8273a4 387 for(Int_t cSect = 0; cSect<10; cSect++) {
108bd0fe 388
389 sector = str0;
8f8273a4 390 sector += cSect+1; // this is one full sector
108bd0fe 391 strEntryName1 = strSPD;
392 strEntryName1 += 0;
393 strEntryName1 += strSector;
8f8273a4 394 strEntryName1 += cSect;
108bd0fe 395 if(!gGeoManager->SetAlignableEntry(strEntryName1.Data(),sector.Data()))
396 AliFatal("Unable to set alignable entry!!");
397 //printf("%s == %s\n",strEntryName1.Data(),sector.Data());
398
8f8273a4 399 for(Int_t cStave=0; cStave<2; cStave++) {
108bd0fe 400
401 stave = sector;
402 stave += str1;
8f8273a4 403 stave += cStave;
108bd0fe 404 strEntryName2 = strEntryName1;
405 strEntryName2 += strStave;
8f8273a4 406 strEntryName2 += cStave;
407
408 for(Int_t cHS=0; cHS<2; cHS++) {
409
410 halfStave = stave;
411 halfStave += str1Bis;
412 halfStave += cHS;
413 halfStave += str1Tierce;
414 strEntryName3 = strEntryName2;
415 strEntryName3 += strHalfStave;
416 strEntryName3 += cHS;
108bd0fe 417
8f8273a4 418 if(!gGeoManager->SetAlignableEntry(strEntryName3.Data(),halfStave.Data()))
419 AliFatal(Form("Unable to set alignable entry!! %s :: %s",strEntryName3.Data(),halfStave.Data()));
420
421 for(Int_t cLad=0; cLad<2; cLad++) {
108bd0fe 422
8f8273a4 423 module = halfStave;
424 module += str2;
425 module += cLad+cHS*2;
426 strEntryName4 = strEntryName3;
427 strEntryName4 += strLadder;
428 strEntryName4 += cLad+cHS*2;
429 if(!gGeoManager->SetAlignableEntry(strEntryName4.Data(),module.Data()))
430 AliFatal("Unable to set alignable entry!!");
431
432 SetT2Lmatrix(strEntryName4.Data(), -0.0081, kTRUE, kTRUE);
dbfc6ce6 433 // -0.0081 is the shift between the centers of alignable and sensitive volumes
434 // It is directly extracted from the new SPD geometry
435
8f8273a4 436 }
437 }
438 }
439 }
440
441 str1 = "/ITSSPDSensitiveVirtualvolumeM0_1/LAY2_STAVE_";
442 str2 = "/LAY2_LADDER_";
443
444 for(Int_t cSect = 0; cSect<10; cSect++) {
445
446 sector = str0;
447 sector += cSect+1; // this is one full sector
448 strEntryName1 = strSPD;
449 strEntryName1 += 1;
450 strEntryName1 += strSector;
451 strEntryName1 += cSect;
452
453 for(Int_t cStave=0; cStave<4; cStave++) {
454
455 stave = sector;
456 stave += str1;
457 stave += cStave;
458 strEntryName2 = strEntryName1;
459 strEntryName2 += strStave;
460 strEntryName2 += cStave;
461
462 for(Int_t cHS=0; cHS<2; cHS++) {
463
464 halfStave = stave;
465 halfStave += str1Bis;
466 halfStave += cHS;
467 halfStave += str1Tierce;
108bd0fe 468 strEntryName3 = strEntryName2;
8f8273a4 469 strEntryName3 += strHalfStave;
470 strEntryName3 += cHS;
471
472 if(!gGeoManager->SetAlignableEntry(strEntryName3.Data(),halfStave.Data()))
108bd0fe 473 AliFatal("Unable to set alignable entry!!");
108bd0fe 474
8f8273a4 475 for(Int_t cLad=0; cLad<2; cLad++) {
476
477 module = halfStave;
478 module += str2;
479 module += cLad+cHS*2;
480 strEntryName4 = strEntryName3;
481 strEntryName4 += strLadder;
482 strEntryName4 += cLad+cHS*2;
483 if(!gGeoManager->SetAlignableEntry(strEntryName4.Data(),module.Data()))
484 AliFatal("Unable to set alignable entry!!");
485
486 SetT2Lmatrix(strEntryName4.Data(), -0.0081, kFALSE);
487 }
108bd0fe 488 }
489 }
490 }
108bd0fe 491
8f8273a4 492 } else { // else old SPD geometry
493
108bd0fe 494 TString str0 = "ALIC_1/ITSV_1/ITSD_1/IT12_1/I12B_";
8f8273a4 495 TString str1 = "/I10B_";
496 TString str1Bis = "/L1H-STAVE";
497 TString str1Tierce = "_1";
498 TString str2 = "/I107_";
108bd0fe 499
500 TString sector;
501 TString stave;
8f8273a4 502 TString halfStave;
108bd0fe 503 TString module;
504
8f8273a4 505 for(Int_t cSect = 0; cSect<10; cSect++) {
108bd0fe 506
507 sector = str0;
8f8273a4 508 sector += cSect+1; // this is one full sector
108bd0fe 509 strEntryName1 = strSPD;
8f8273a4 510 strEntryName1 += 0;
108bd0fe 511 strEntryName1 += strSector;
8f8273a4 512 strEntryName1 += cSect;
513 //printf("%s == %s\n",strEntryName1.Data(),sector.Data());
108bd0fe 514 if(!gGeoManager->SetAlignableEntry(strEntryName1.Data(),sector.Data()))
515 AliFatal("Unable to set alignable entry!!");
108bd0fe 516
8f8273a4 517 for(Int_t cStave = 0; cStave<2; cStave++) {
108bd0fe 518
519 stave = sector;
520 stave += str1;
8f8273a4 521 stave += cStave+1;
108bd0fe 522 strEntryName2 = strEntryName1;
523 strEntryName2 += strStave;
8f8273a4 524 strEntryName2 += cStave;
108bd0fe 525 //printf("%s == %s\n",strEntryName2.Data(),stave.Data()); // this is a stave
526
8f8273a4 527 for(Int_t cHS=0; cHS<2; cHS++) {
528
529 halfStave = stave;
530 halfStave += str1Bis;
531 halfStave += cHS;
532 halfStave += str1Tierce;
108bd0fe 533 strEntryName3 = strEntryName2;
8f8273a4 534 strEntryName3 += strHalfStave;
535 strEntryName3 += cHS;
536 //printf("%s == %s\n",strEntryName3.Data(),halfStave.Data()); // this is a half-stave
537 if(!gGeoManager->SetAlignableEntry(strEntryName3.Data(),halfStave.Data()))
538 AliFatal("Unable to set alignable entry!!");
108bd0fe 539
8f8273a4 540 for(Int_t cLadder = 0; cLadder<2; cLadder++) {
541
542 module = halfStave;
543 module += str2;
544 module += cLadder+cHS*2+1;
545 strEntryName4 = strEntryName3;
546 strEntryName4 += strLadder;
547 strEntryName4 += cLadder+cHS*2;
548 //printf("%s == %s\n",strEntryName4.Data(),module.Data());
549 if(!gGeoManager->SetAlignableEntry(strEntryName4.Data(),module.Data()))
550 AliFatal("Unable to set alignable entry!!");
551
552 SetT2Lmatrix(strEntryName4.Data(), -fChip1*0.0001/2., kTRUE);
553 }
554 }
555 }
556 }
557
558 str1Bis = "/L2H-STAVE";
559 str1 = "/I20B_";
560 str2 = "/I1D7_";
561
562 for(Int_t cSect = 0; cSect<10; cSect++) {
563
564 sector = str0;
565 sector += cSect+1; // this is one full sector
566 strEntryName1 = strSPD;
567 strEntryName1 += 1;
568 strEntryName1 += strSector;
569 strEntryName1 += cSect;
570 // if(!gGeoManager->SetAlignableEntry(strEntryName1.Data(),sector.Data()))
571 // AliFatal("Unable to set alignable entry!!");
572 // we don't need the previous lines because the whole sector is already define
573 // with first layer ...
574
575 for(Int_t cStave =0; cStave<4; cStave++) {
576
577 stave = sector;
578 stave += str1;
579 stave += cStave+1;
580 strEntryName2 = strEntryName1;
581 strEntryName2 += strStave;
582 strEntryName2 += cStave;
583
584 for(Int_t cHS=0; cHS<2; cHS++) {
585
586 halfStave = stave;
587 halfStave += str1Bis;
588 halfStave += cHS;
589 halfStave += str1Tierce;
590 strEntryName3 = strEntryName2;
591 strEntryName3 += strHalfStave;
592 strEntryName3 += cHS;
593 //printf("%s == %s\n",strEntryName3.Data(),halfStave.Data()); // this is a half-stave
594 if(!gGeoManager->SetAlignableEntry(strEntryName3.Data(),halfStave.Data()))
595 AliFatal("Unable to set alignable entry!!");
596
597 for(Int_t cLad =0; cLad<2; cLad++) {
598
599 module = halfStave;
600 module += str2;
601 module += cLad+cHS*2+1;
602 strEntryName4 = strEntryName3;
603 strEntryName4 += strLadder;
604 strEntryName4 += cLad+cHS*2;
605 //printf("%s == %s\n",strEntryName4.Data(),module.Data());
606 if(!gGeoManager->SetAlignableEntry(strEntryName4.Data(),module.Data()))
607 AliFatal("Unable to set alignable entry!!");
608
609 SetT2Lmatrix(strEntryName4.Data(), -fChip2*0.0001/2., kFALSE);
610 }
108bd0fe 611 }
612 }
613 }
614 }
615
616 //===== SDD layers =====
108bd0fe 617 if (AliITSInitGeometry::SDDIsTGeoNative()) { // new SDD geometry
618
619 TString str0 = "/ALIC_1/ITSV_1/ITSsddLayer3_1/ITSsddLadd_"; // SDD layer1
620 TString str1 = "/ITSsddSensor3_";
621 TString str2 = "/ITSsddWafer3_1";
622 TString ladder;
623 TString wafer;
624
625 for(Int_t c1 = 0; c1<14; c1++) {
626
627 ladder = str0;
628 ladder += c1; // the set of wafers from one ladder
629 strEntryName1 = strSDD;
630 strEntryName1 += 2;
631 strEntryName1 +=strLadder;
632 strEntryName1 += c1;
633 //printf("%s == %s\n",strEntryName1.Data(),ladder.Data());
634 if(!gGeoManager->SetAlignableEntry(strEntryName1.Data(),ladder.Data()))
635 AliFatal("Unable to set alignable entry!!");
636
637 for(Int_t c2 =0; c2<6; c2++) {
638
639 wafer = ladder;
640 wafer += str1;
641 wafer += c2;
642 wafer += str2; // one wafer
643 strEntryName2 = strEntryName1;
644 strEntryName2 += strSensor;
645 strEntryName2 += c2;
646 //printf("%s == %s\n",strEntryName2.Data(),wafer.Data());
647 if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),wafer.Data()))
648 AliFatal("Unable to set alignable entry!!");
649
bf210566 650 SetT2Lmatrix(strEntryName2.Data(), 0, kFALSE, c2>=3);
108bd0fe 651 }
652 }
653
654 str0 = "/ALIC_1/ITSV_1/ITSsddLayer4_1/ITSsddLadd_"; // SDD layer2
655 str1 = "/ITSsddSensor4_";
656 str2 = "/ITSsddWafer4_1";
657
658 for(Int_t c1 = 0; c1<22; c1++) {
659
660 ladder = str0;
661 ladder += c1; // the set of wafers from one ladder
662 strEntryName1 = strSDD;
663 strEntryName1 += 3;
664 strEntryName1 += strLadder;
665 strEntryName1 += c1;
666 //printf("%s == %s\n",strEntryName1.Data(),ladder.Data());
667 if(!gGeoManager->SetAlignableEntry(strEntryName1.Data(),ladder.Data()))
668 AliFatal("Unable to set alignable entry!!");
669
670 for(Int_t c2 =0; c2<8; c2++) {
671
672 wafer = ladder;
673 wafer += str1;
674 wafer += c2;
675 wafer += str2; // one wafer
676 strEntryName2 = strEntryName1;
677 strEntryName2 += strSensor;
678 strEntryName2 += c2;
679 //printf("%s == %s\n",strEntryName2.Data(),wafer.Data());
680 if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),wafer.Data()))
681 AliFatal("Unable to set alignable entry!!");
682
bf210566 683 SetT2Lmatrix(strEntryName2.Data(), 0, kFALSE, c2>=4);
108bd0fe 684 }
685 }
686
bf210566 687 } else { // else old SDD geometry
108bd0fe 688
689 TString str0 = "ALIC_1/ITSV_1/ITSD_1/IT34_1/I004_";
690 TString str1 = "/I302_";
691
692 TString ladder;
693 TString wafer;
694
695 for(Int_t c1 = 1; c1<=14; c1++){
696
697 ladder = str0;
698 ladder += c1; // the set of wafers from one ladder
699 strEntryName1 = strSDD;
700 strEntryName1 += 2;
701 strEntryName1 +=strLadder;
702 strEntryName1 += (c1-1);
703 if(!gGeoManager->SetAlignableEntry(strEntryName1.Data(),ladder.Data()))
704 AliFatal("Unable to set alignable entry!!");
705 //printf("%s == %s\n",strEntryName1.Data(),ladder.Data());
706
707 for(Int_t c2 =1; c2<=6; c2++){
708
709 wafer = ladder;
710 wafer += str1;
711 wafer += c2; // one wafer
712 strEntryName2 = strEntryName1;
713 strEntryName2 += strSensor;
714 strEntryName2 += (c2-1);
715 if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),wafer.Data()))
716 AliFatal("Unable to set alignable entry!!");
717 //printf("%s == %s\n",strEntryName2.Data(),wafer.Data());
718
bf210566 719 SetT2Lmatrix(strEntryName2.Data(), 0, kFALSE);
108bd0fe 720 }
721 }
722
723 str0 = "ALIC_1/ITSV_1/ITSD_1/IT34_1/I005_";
724 str1 = "/I402_";
725
726 for(Int_t c1 = 1; c1<=22; c1++){
727
728 ladder = str0;
729 ladder += c1; // the set of wafers from one ladder
730 strEntryName1 = strSDD;
731 strEntryName1 += 3;
732 strEntryName1 +=strLadder;
733 strEntryName1 += (c1-1);
734 if(!gGeoManager->SetAlignableEntry(strEntryName1.Data(),ladder.Data()))
735 AliFatal("Unable to set alignable entry!!");
736 //printf("%s == %s\n",strEntryName1.Data(),ladder.Data());
737
738 for(Int_t c2 =1; c2<=8; c2++){
739
740 wafer = ladder;
741 wafer += str1;
742 wafer += c2; // one wafer
743 strEntryName2 = strEntryName1;
744 strEntryName2 += strSensor;
745 strEntryName2 += (c2-1);
746 if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),wafer.Data()))
747 AliFatal("Unable to set alignable entry!!");
748 //printf("%s == %s\n",strEntryName2.Data(),wafer.Data());
749
bf210566 750 SetT2Lmatrix(strEntryName2.Data(), 0, kFALSE);
108bd0fe 751 }
752 }
108bd0fe 753 } // end SDD
754
8f8273a4 755 //===== SSD layers =====
bf210566 756 if (AliITSInitGeometry::SSDIsTGeoNative()) { // new SSD geometry
757
758 TString str0 = "/ALIC_1/ITSV_1/ITSssdLayer5_1/ITSssdLay5Ladd_"; // SSD layer1
759 TString str1 = "/ITSsddSensor5_";
760 TString str2 = "";
761 TString ladder;
762 TString wafer;
763
764 for(Int_t c1 = 0; c1<34; c1++) {
765
766 ladder = str0;
767 ladder += c1; // the set of wafers from one ladder
768 strEntryName1 = strSSD;
769 strEntryName1 += 4;
770 strEntryName1 += strLadder;
771 strEntryName1 += c1;
772 //printf("%s == %s\n",strEntryName1.Data(),ladder.Data());
773 if(!gGeoManager->SetAlignableEntry(strEntryName1.Data(),ladder.Data()))
774 AliFatal("Unable to set alignable entry!!");
775
776 for(Int_t c2 =0; c2<22; c2++) {
777
778 wafer = ladder;
779 wafer += str1;
780 wafer += c2;
781 //wafer += str2; // one wafer
782 strEntryName2 = strEntryName1;
783 strEntryName2 += strSensor;
784 strEntryName2 += c2;
785 //printf("%s == %s\n",strEntryName2.Data(),wafer.Data());
786 if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),wafer.Data()))
787 AliFatal("Unable to set alignable entry!!");
788
789 SetT2Lmatrix(strEntryName2.Data(), 0, kFALSE, kFALSE);
790 }
791 }
792
793 str0 = "/ALIC_1/ITSV_1/ITSssdLayer6_1/ITSssdLay6Ladd_"; // SSD layer2
794 str1 = "/ITSsddSensor6_";
795 str2 = "";
796
797 for(Int_t c1 = 0; c1<38; c1++) {
798
799 ladder = str0;
800 ladder += c1; // the set of wafers from one ladder
801 strEntryName1 = strSSD;
802 strEntryName1 += 5;
803 strEntryName1 += strLadder;
804 strEntryName1 += c1;
805 //printf("%s == %s\n",strEntryName1.Data(),ladder.Data());
806 if(!gGeoManager->SetAlignableEntry(strEntryName1.Data(),ladder.Data()))
807 AliFatal("Unable to set alignable entry!!");
808
809 for(Int_t c2 =0; c2<25; c2++) {
810
811 wafer = ladder;
812 wafer += str1;
813 wafer += c2;
814 //wafer += str2; // one wafer
815 strEntryName2 = strEntryName1;
816 strEntryName2 += strSensor;
817 strEntryName2 += c2;
818 //printf("%s == %s\n",strEntryName2.Data(),wafer.Data());
819 if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),wafer.Data()))
820 AliFatal("Unable to set alignable entry!!");
821
822 SetT2Lmatrix(strEntryName2.Data(), 0, kFALSE, kFALSE);
823 }
824 }
825
826 } else { // else old SSD geometry
108bd0fe 827 TString str0 = "ALIC_1/ITSV_1/ITSD_1/IT56_1/I565_";
828 TString str1 = "/I562_";
108bd0fe 829 TString ladder;
830 TString wafer;
831
832 for(Int_t c1 = 1; c1<=34; c1++){
bf210566 833
108bd0fe 834 ladder = str0;
835 ladder += c1; // the set of wafers from one ladder
836 strEntryName1 = strSSD;
837 strEntryName1 += 4;
838 strEntryName1 +=strLadder;
839 strEntryName1 += (c1-1);
840 if(!gGeoManager->SetAlignableEntry(strEntryName1.Data(),ladder.Data()))
841 AliFatal("Unable to set alignable entry!!");
842 //printf("%s == %s\n",strEntryName1.Data(),ladder.Data());
bf210566 843
108bd0fe 844 for(Int_t c2 = 1; c2<=22; c2++){
bf210566 845
108bd0fe 846 wafer = ladder;
847 wafer += str1;
848 wafer += c2; // one wafer
849 strEntryName2 = strEntryName1;
850 strEntryName2 += strSensor;
851 strEntryName2 += (c2-1);
852 if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),wafer.Data()))
853 AliFatal("Unable to set alignable entry!!");
854 //printf("%s == %s\n",strEntryName2.Data(),wafer.Data());
bf210566 855
856 SetT2Lmatrix(strEntryName2.Data(), 0, kFALSE);
108bd0fe 857 }
858 }
bf210566 859
bf210566 860 str0 = "ALIC_1/ITSV_1/ITSD_1/IT56_1/I569_";
861 str1 = "/I566_";
862
108bd0fe 863 for(Int_t c1 = 1; c1<=38; c1++){
bf210566 864
108bd0fe 865 ladder = str0;
866 ladder += c1; // the set of wafers from one ladder
867 strEntryName1 = strSSD;
868 strEntryName1 += 5;
869 strEntryName1 +=strLadder;
870 strEntryName1 += (c1-1);
871 if(!gGeoManager->SetAlignableEntry(strEntryName1.Data(),ladder.Data()))
872 AliFatal("Unable to set alignable entry!!");
873 //printf("%s == %s\n",strEntryName1.Data(),ladder.Data());
bf210566 874
108bd0fe 875 for(Int_t c2 = 1; c2<=25; c2++){
bf210566 876
108bd0fe 877 wafer = ladder;
878 wafer += str1;
879 wafer += c2; // one wafer
880 strEntryName2 = strEntryName1;
881 strEntryName2 += strSensor;
882 strEntryName2 += (c2-1);
883 if(!gGeoManager->SetAlignableEntry(strEntryName2.Data(),wafer.Data()))
884 AliFatal("Unable to set alignable entry!!");
885 //printf("%s == %s\n",strEntryName2.Data(),wafer.Data());
bf210566 886
887 SetT2Lmatrix(strEntryName2.Data(), 0, kFALSE);
108bd0fe 888 }
889 }
bf210566 890 } // end SSD geometry
108bd0fe 891}
bf210566 892
108bd0fe 893//______________________________________________________________________
894void AliITSv11Hybrid::BuildGeometry(){
895 // Geometry builder for the ITS version 10. Event Display geometry.
896 // Inputs:
897 // none.
898 // Outputs:
899 // none.
900 // Return:
901 // none.
902
903 TNode *node, *top;
904
905 const Int_t kColorITS=kYellow;
906 //
907 top = gAlice->GetGeometry()->GetNode("alice");
908
909
910 new TTUBE("S_layer1","Layer1 of ITS","void",
911 3.8095,3.8095+1.03*9.36/100.,14.35);
912 top->cd();
913 node = new TNode("Layer1","Layer1","S_layer1",0,0,0,"");
914 node->SetLineColor(kColorITS);
915 fNodes->Add(node);
916
917 new TTUBE("S_layer2","Layer2 of ITS","void",7.,7.+1.03*9.36/100.,14.35);
918 top->cd();
919 node = new TNode("Layer2","Layer2","S_layer2",0,0,0,"");
920 node->SetLineColor(kColorITS);
921 fNodes->Add(node);
922
923 new TTUBE("S_layer3","Layer3 of ITS","void",15.,15.+0.94*9.36/100.,25.1);
924 top->cd();
925 node = new TNode("Layer3","Layer3","S_layer3",0,0,0,"");
926 node->SetLineColor(kColorITS);
927 fNodes->Add(node);
928
929 new TTUBE("S_layer4","Layer4 of ITS","void",24.1,24.1+0.95*9.36/100.,32.1);
930 top->cd();
931 node = new TNode("Layer4","Layer4","S_layer4",0,0,0,"");
932 node->SetLineColor(kColorITS);
933 fNodes->Add(node);
934
935 new TTUBE("S_layer5","Layer5 of ITS","void",
936 38.5,38.5+0.91*9.36/100.,49.405);
937 top->cd();
938 node = new TNode("Layer5","Layer5","S_layer5",0,0,0,"");
939 node->SetLineColor(kColorITS);
940 fNodes->Add(node);
941
942 new TTUBE("S_layer6","Layer6 of ITS","void",
943 43.5765,43.5765+0.87*9.36/100.,55.27);
944 top->cd();
945 node = new TNode("Layer6","Layer6","S_layer6",0,0,0,"");
946 node->SetLineColor(kColorITS);
947 fNodes->Add(node);
948}
949
950//______________________________________________________________________
951void AliITSv11Hybrid::CreateGeometry() {
952
333c948a 953 // Create the geometry and insert it in ALIC
954 // It calls first the CreateOldGeometry() routine which add the
955 // pieces coming from the old v10 geometry. Then the pieces from
956 // the new geometry are inserting in the mother volume ITSV.
957
108bd0fe 958 TGeoManager *geoManager = gGeoManager;
959
960 CreateOldGeometry();
961 TGeoVolume *vITS = geoManager->GetVolume("ITSV");
962
bf210566 963 TGeoVolume *vIS02 = geoManager->GetVolume("IS02");
964
965
966
012f0f4c 967 const Char_t *cvsDate="$Date$";
968 const Char_t *cvsRevision="$Revision$";
7ab0715c 969 const Int_t kLength=100;
970 Char_t vstrng[kLength];
971 if(fInitGeom.WriteVersionString(vstrng,kLength,(AliITSVersion_t)IsVersion(),
012f0f4c 972 fMinorVersion,cvsDate,cvsRevision))
973 vITS->SetTitle(vstrng);
974
8f8273a4 975 if (AliITSInitGeometry::SPDIsTGeoNative()) {
976 fSPDgeom->SPDSector(vITS);
977 }
978
108bd0fe 979 if (AliITSInitGeometry::SDDIsTGeoNative()) {
980 fSDDgeom->Layer3(vITS);
981 fSDDgeom->Layer4(vITS);
bf210566 982 fSDDgeom->ForwardLayer3(vIS02);
983 fSDDgeom->ForwardLayer4(vIS02);
984 }
985 if (AliITSInitGeometry::SSDIsTGeoNative()) {
986 fSSDgeom->Layer5(vITS);
987 fSSDgeom->Layer6(vITS);
108bd0fe 988 }
989}
990
991//______________________________________________________________________
992void AliITSv11Hybrid::CreateOldGeometry(){
333c948a 993 // This routine defines and creates some pieces of the geometry
994 // of version 10 (AliITSvPPRasymmFMD)
108bd0fe 995
996 //Begin_Html
997 /*
998 <img src="picts/ITS/ITS_full_vPPRasymm.jpg">
999 </pre>
1000 <br clear=left>
1001 <font size=+2 color=red>
1002 <p>This shows the full ITS geometry.
1003 </font>
1004 <img src="picts/ITS/ITS_SPD_Barrel_vPPRasymm.jpg">
1005 </pre>
1006 < br clear=left>
1007 <font size=+2 color=red>
1008 <p>This shows the full SPD Barrel of the ITS geometry.
1009 </font>
1010 <img src="picts/ITS/ITS_SDD_Barrel_vPPRasymm.jpg">
1011 </pre>
1012 <br clear=left>
1013 <font size=+2 color=red>
1014 <p>This shows the full SDD Barrel of the ITS geometry.
1015 </font>
1016 <img src="picts/ITS/ITS_SSD_Barrel_vPPRasymm.jpg">
1017 </pre>
1018 <br clear=left>
1019 <font size=+2 color=red>
1020 <p>This shows the full SSD Barrel of the ITS geometry.
1021 </font>
1022 */
1023 //End_Html
1024 //INNER RADII OF THE SILICON LAYERS
1025 // Float_t rl[6] = { 3.8095,7.,15.,24.,38.1,43.5765 };
7ab0715c 1026 //THICKNESSES OF LAYERS (in % radiation kLength)
108bd0fe 1027 Float_t drl[6] = { 1.03,1.03,0.94,0.95,0.91,0.87 };
1028 //HALF LENGTHS OF LAYERS
1029 // Float_t dzl[6] = { 14.35,14.35,25.1,32.1,49.405,55.27 };
1030 //LENGTHS OF END-LADDER BOXES (ALL INCLUDED)
1031 // Float_t dzb[6] = { 12.4,12.4,13.5,15.,7.5,7.5 };
1032 //THICKNESSES OF END-LADDER BOXES (ALL INCLUDED)
1033 // Float_t drb[6] = { rl[1]-rl[0],0.2,5.,5.,4.,4. };
1034
1035
1036 Float_t dits[100], rlim, zmax;
1037 // Float_t zpos;
1038 // Float_t pcits[50]
1039 Float_t ztpc;
1040 Int_t idrotm[1999], i;
1041 Float_t dgh[100];
1042
1043 // Define some variables for SPD
1044
1045 Float_t dits1[3], di101[3], di107[3], di10b[3], di106[3];// for layer 1
1046 //Float_t di103[3], di10a[3], di102[3]; // for layer 1
1047 Float_t dits2[3], di1d1[3], di1d7[3], di20b[3], di1d6[3];// for layer 2
1048 //Float_t di1d3[3], di20a[3], di1d2[3]; // for layer 2
1049 Float_t di108[3];
1050 //Float_t di104[3]; // for both layers
1051
1052 Float_t ddet1=200.; // total detector thickness on layer 1 (micron)
1053 Float_t dchip1=200.; // total chip thickness on layer 1 (micron)
1054
1055 Float_t ddet2=200.; // total detector thickness on layer 2 (micron)
1056 Float_t dchip2=200.; // total chip thickness on layer 2 (micron)
1057
1058 Float_t dbus=300.; // total bus thickness on both layers (micron)
1059
1060 ddet1 = GetThicknessDet1();
1061 ddet2 = GetThicknessDet2();
1062 dchip1 = GetThicknessChip1();
1063 dchip2 = GetThicknessChip2();
1064
1065 if(ddet1 < 100. || ddet1 > 300.) {
1066 AliWarning("The detector thickness for layer 1 is outside ");
1067 AliWarning("the range of [100,300] microns. The default value of 200 microns ");
1068 AliWarning("will be used.");
1069 ddet1=200.;
1070 } // end if
1071
1072 if(ddet2 < 100. || ddet2 > 300.) {
1073 AliWarning("The detector thickness for layer 2 is outside ");
1074 AliWarning("the range of [100,300] microns. The default value of 200 microns ");
1075 AliWarning("will be used.");
1076 ddet2=200.;
1077 }// end if
1078
1079 if(dchip1 < 100. || dchip1 > 300.) {
1080 AliWarning("The chip thickness for layer 1 is outside");
1081 AliWarning("the range of [100,300] microns. The default value of 200 microns");
1082 AliWarning("will be used.");
1083 dchip1=200.;
1084 }// end if
1085
1086 if(dchip2 < 100. || dchip2 > 300.) {
1087 AliWarning("The chip thickness for layer 2 is outside");
1088 AliWarning("the range of [100,300] microns. The default value of 200 microns");
1089 AliWarning("will be used");
1090 dchip2=200.;
1091 }// end if
1092
1093 Int_t rails = 1; // flag for rails (1 --> rails in; 0 --> rails out)
1094
1095 Int_t fluid = 1; // flag for the cooling fluid (1 --> water; 0 --> freon)
1096 // This option is maintained for SDD and SSD only
1097 // For SPD the cooling liquid is C4F10
1098 rails = GetRails();
1099
1100 fluid = GetCoolingFluid();
1101
1102 if(rails != 0 && rails != 1) {
1103 AliWarning("The switch for rails is not set neither");
1104 AliWarning("to 0 (rails out) nor to 1 (rails in). The default value of");
1105 AliWarning("1 (rails in) will be used");
1106 rails=1;
1107 }// end if
1108
1109
1110 AliDebug(1,Form("Detector thickness on layer 1 is set to %f microns",ddet1));
1111 AliDebug(1,Form("Chip thickness on layer 1 is set to %f microns",dchip1));
1112 AliDebug(1,Form("Detector thickness on layer 2 is set to %f microns",ddet2));
1113 AliDebug(1,Form("Chip thickness on layer 2 is set to %f microns",dchip2));
1114 if(rails == 0 ) {
1115 AliDebug(1,"Rails are out.");
1116 } else {
1117 AliDebug(1,"Rails are in.");
1118 }// end if
1119
1120 ddet1 = ddet1*0.0001/2.; // conversion from tot length in um to half in cm
1121 ddet2 = ddet2*0.0001/2.; // conversion from tot length in um to half in cm
1122 dchip1 = dchip1*0.0001/2.;// conversion from tot length in um to half in cm
1123 dchip2 = dchip2*0.0001/2.;// conversion from tot length in um to half in cm
1124 dbus = dbus*0.0001/2.; // conversion from tot length in um to half in cm
1125
1126 Float_t deltax, deltay;
1127
1128 //Int_t thickness = fMinorVersion/10;
1129 //Int_t option = fMinorVersion - 10*thickness;
1130
1131
1132 // Define some variables for SDD
1133
1134 Float_t sin30, cos30;
1135
1136 // SDD electronics+services main volumes
1137 Float_t iI018dits[3], iI024dits[3], iI047dits[3], iI048dits[3];
1138
1139 // SDD detector ladder
1140
1141 Float_t iI302dits[3], iI402dits[3], iI004dits[3], iI005dits[3];
1142 Float_t ySDDsep = 0.20;
1143 Float_t ySDD;
1144 Int_t iSDD;
1145 Float_t zSDDlay3[6] = { 18.55, 10.95, 3.70, -3.70,-11.20,-18.35};
1146 Float_t zSDDlay4[8] = { 25.75, 18.60, 11.00, 3.70, -3.70,-11.20,
1147 -18.45,-26.05};
1148
1149 // ladder foot and end-ladder (frame and cooling)
1150 Float_t iI028dits[3], iI420dits[3], iI421dits[3], iI422dits[6], iI423dits[3];
1151 Float_t iI424dits[3], xI424, yI424;
1152 Float_t iI425dits[3];
1153 Int_t indI425;
1154 Float_t iI029dits[4], iI030dits[4], iI031dits[3], iI032dits[3];
1155
1156 // SDD ladder frame and cooling
1157 Float_t iSDDCoolPipe[3] = {1.7000, -0.5500, 0.0000};
1158 Float_t iI035dits[3], iI037dits[3], iI038dits[3];
1159 Float_t iI039dits[3], xI039, yI039;
1160 Float_t iI041dits[5];
1161
1162 // SDD hybrid, chips and capacitors
1163 Float_t iI050dits[3], xI050, yI050;
1164 Float_t iI052dits[3], xI052, yI052;
1165 Float_t iI042dits[3], xI042, yI042;
1166 Float_t xI042space = 0.17;
1167 Float_t iI043dits[3], xI043, yI043;
1168 Float_t xI043space = 0.17;
1169 Float_t zchip, zChipSpace;
1170 Float_t iI051dits[3], xI051, yI051, zI051, yI051space, xcap;
1171 Int_t ichip, icap;
1172
1173 // SDD microcables
1174 Float_t iI044dits[4], xI044, yI044, volI044;
1175 Float_t xHV, yHV, zHV, xLV, yLV, zLV;
1176 Char_t nameHV[5], nameLV[5];
1177
1178
1179 // Define media off-set
1180
1181 Int_t *idtmed = fIdtmed->GetArray()-199;
1182
1183
1184 // Rotation matrices
1185
1186 // SPD - option 'b' (this is the default)
1187
1188 //if (option == 2) {
1189 if (! AliITSInitGeometry::SPDIsTGeoNative()) {
1190 AliMatrix(idrotm[201],90.0,0.0,90.0,90.0,0.0,0.0);
1191 AliMatrix(idrotm[202],90.0,90.0,90.0,0.0,0.0,0.0);
1192 AliMatrix(idrotm[203],90.0,350.0,90.0,260.0,0.0,0.0);
1193 AliMatrix(idrotm[204],90.0,170.0,90.0,80.0,0.0,0.0);
1194 AliMatrix(idrotm[205],90.0,10.0,90.0,100.0,0.0,0.0);
1195 AliMatrix(idrotm[206],90.0,190.0,90.0,280.0,0.0,0.0);
1196 AliMatrix(idrotm[207],90.0,342.0,90.0,72.0,0.0,0.0);
1197 AliMatrix(idrotm[208],90.0,156.999893,90.0,246.999893,0.0,0.0);
1198 AliMatrix(idrotm[209],90.0,147.999802,90.0,237.999893,0.0,0.0);
1199 AliMatrix(idrotm[210],90.0,138.999802,90.0,228.999802,0.0,0.0);
1200 AliMatrix(idrotm[211],90.0,129.999802,90.0,219.999802,0.0,0.0);
1201 AliMatrix(idrotm[212],90.0,36.7896,90.0,126.789597,0.0,0.0);
1202 AliMatrix(idrotm[213],90.0,343.579712,90.0,73.579697,0.0,0.0);
1203 AliMatrix(idrotm[214],90.0,95.413696,90.0,185.413696,0.0,0.0);
1204 AliMatrix(idrotm[215],90.0,5.4141,90.0,95.414101,0.0,0.0);
1205 AliMatrix(idrotm[216],90.0,318.296906,90.0,48.296902,0.0,0.0);
1206 AliMatrix(idrotm[217],90.0,67.000099,90.0,157.000107,0.0,0.0);
1207 AliMatrix(idrotm[218],90.0,337.003998,90.0,67.003998,0.0,0.0);
1208 AliMatrix(idrotm[219],90.0,247.000305,90.0,337.000305,0.0,0.0);
1209 AliMatrix(idrotm[220],90.0,305.633514,90.0,35.633499,0.0,0.0);
1210
1211 AliMatrix(idrotm[221],90.0,58.000198,90.0,148.000198,0.0,0.0);
1212 AliMatrix(idrotm[222],90.0,327.997101,90.0,57.997101,0.0,0.0);
1213 AliMatrix(idrotm[223],90.0,237.994202,90.0,327.994202,0.0,0.0);
1214 AliMatrix(idrotm[224],90.0,296.627502,90.0,26.627399,0.0,0.0);
1215 AliMatrix(idrotm[225],90.0,48.994099,90.0,138.994095,0.0,0.0);
1216 AliMatrix(idrotm[226],90.0,318.990997,90.0,48.991001,0.0,0.0);
1217 AliMatrix(idrotm[227],90.0,228.988205,90.0,318.98819,0.0,0.0);
1218 AliMatrix(idrotm[228],90.0,287.621399,90.0,17.621401,0.0,0.0);
1219 AliMatrix(idrotm[229],90.0,39.988098,90.0,129.988098,0.0,0.0);
1220 AliMatrix(idrotm[230],90.0,309.984985,90.0,39.985001,0.0,0.0);
1221 AliMatrix(idrotm[231],90.0,327.2612,90.0,57.2612,0.0,0.0);
1222 AliMatrix(idrotm[232],90.0,237.261398,90.0,327.261414,0.0,0.0);
1223 AliMatrix(idrotm[233],90.0,252.000504,90.0,342.000488,0.0,0.0);
1224 AliMatrix(idrotm[234],90.0,71.9991,90.0,161.9991,0.0,0.0);
1225 AliMatrix(idrotm[235],90.0,270.0,90.0,0.0,0.0,0.0);
1226 AliMatrix(idrotm[236],90.0,180.013702,90.0,270.013702,0.0,0.0);
1227 AliMatrix(idrotm[237],90.0,90.0,90.0,180.0,0.0,0.0);
1228 AliMatrix(idrotm[238],90.0,180.0,90.0,270.0,0.0,0.0);
1229 AliMatrix(idrotm[239],90.0,162.0,90.0,252.0,0.0,0.0);
1230 AliMatrix(idrotm[240],90.0,310.0,90.0,40.0,0.0,0.0);
1231 AliMatrix(idrotm[241],90.0,319.0,90.0,49.0,0.0,0.0);
1232 AliMatrix(idrotm[242],90.0,328.0,90.0,58.0,0.0,0.0);
1233 AliMatrix(idrotm[243],90.0,337.0,90.0,67.0,0.0,0.0);
1234 AliMatrix(idrotm[244],90.0,216.0,90.0,306.0,0.0,0.0);
1235 AliMatrix(idrotm[245],90.0,36.0,90.0,126.0,0.0,0.0);
1236 AliMatrix(idrotm[246],90.0,108.0,90.0,198.0,0.0,0.0);
1237 AliMatrix(idrotm[247],90.0,144.0,90.0,234.0,0.0,0.0);
1238 AliMatrix(idrotm[248],90.0,288.0,90.0,18.0,0.0,0.0);
1239 AliMatrix(idrotm[249],90.0,324.0,90.0,54.0,0.0,0.0);
1240 AliMatrix(idrotm[1003],90.0,73.5,90.0,163.5,0.0,0.0);
1241 AliMatrix(idrotm[1011],90.0,342.0,90.0,72.0,0.0,0.0);
1242 AliMatrix(idrotm[1039],90.0,72.0,90.0,162.0,0.0,0.0);
1243 AliMatrix(idrotm[1043],90.0,66.91,90.0,156.91,0.0,0.0);
1244 AliMatrix(idrotm[1065],90.0,144.0,90.0,234.0,0.0,0.0);
1245 AliMatrix(idrotm[1078],90.0,180.0,90.0,270.0,0.0,0.0);
1246 AliMatrix(idrotm[1088],90.0,57.41,90.0,147.41,0.0,0.0);
1247 AliMatrix(idrotm[1089],90.0,333.0,90.0,63.0,0.0,0.0);
1248 AliMatrix(idrotm[1090],90.0,351.0,90.0,81.0,0.0,0.0);
1249 AliMatrix(idrotm[1091],90.0,216.0,90.0,306.0,0.0,0.0);
1250 AliMatrix(idrotm[1092],90.0,27.0,90.0,117.0,0.0,0.0);
1251 AliMatrix(idrotm[1093],90.0,18.0,90.0,108.0,0.0,0.0);
1252 AliMatrix(idrotm[1094],90.0,9.0,90.0,99.0,0.0,0.0);
1253 AliMatrix(idrotm[1104],90.0,252.0,90.0,342.0,0.0,0.0);
1254 AliMatrix(idrotm[1106],90.0,36.0,90.0,126.0,0.0,0.0);
1255 AliMatrix(idrotm[1107],90.0,108.0,90.0,198.0,0.0,0.0);
1256 AliMatrix(idrotm[1108],90.0,324.0,90.0,54.0,180.0,0.0);
1257 AliMatrix(idrotm[1109],90.0,0.0,90.0,90.0,180.0,0.0);
1258 AliMatrix(idrotm[1110],90.0,36.0,90.0,126.0,180.0,0.0);
1259 AliMatrix(idrotm[1111],90.0,72.0,90.0,162.0,180.0,0.0);
1260 AliMatrix(idrotm[1112],90.0,108.0,90.0,198.0,180.0,0.0);
1261 AliMatrix(idrotm[1113],90.0,144.0,90.0,234.0,180.0,0.0);
1262 AliMatrix(idrotm[1114],90.0,180.0,90.0,270.0,180.0,0.0);
1263 AliMatrix(idrotm[1115],90.0,216.0,90.0,306.0,180.0,0.0);
1264 AliMatrix(idrotm[1116],90.0,252.0,90.0,342.0,180.0,0.0);
1265 AliMatrix(idrotm[1117],90.0,288.0,90.0,18.0,0.0,0.0);
1266 AliMatrix(idrotm[1118],90.0,288.0,90.0,18.0,180.0,0.0);
1267 AliMatrix(idrotm[1130],90.0,324.0,90.0,54.0,0.0,0.0);
1268 }// end if option==2
1269
1270 // SDD
1271 if (! AliITSInitGeometry::SDDIsTGeoNative()) {
1272 AliMatrix(idrotm[301],0.0,0.0,90.0,90.0,90.0,180.0);
1273 AliMatrix(idrotm[302],0.0,0.0,90.0,90.0,90.0,0.0);
1274 AliMatrix(idrotm[303],180.0,0.0,90.0,90.0,90.0,0.0);
1275 AliMatrix(idrotm[304],180.0,0.0,90.0,90.0,90.0,180.0);
1276 AliMatrix(idrotm[305],90.0,347.14,90.0,77.14,0.0,0.0);
1277 AliMatrix(idrotm[306],90.0,321.43,90.0,51.43,0.0,0.0);
1278 AliMatrix(idrotm[307],90.0,295.71,90.0,25.71,0.0,0.0);
1279 AliMatrix(idrotm[308],90.0,244.29,90.0,334.29,0.0,0.0);
1280 AliMatrix(idrotm[309],90.0,218.57,90.0,308.57,0.0,0.0);
1281 AliMatrix(idrotm[310],90.0,167.14,90.0,257.14,0.0,0.0);
1282 AliMatrix(idrotm[311],90.0,141.43,90.0,231.43,0.0,0.0);
1283 AliMatrix(idrotm[312],90.0,0.0,0.0,0.0,90.0,270.0);
1284 AliMatrix(idrotm[313],90.0,115.71,90.0,205.71,0.0,0.0);
1285 AliMatrix(idrotm[314],90.0,335.45,90.0,65.45,0.0,0.0);
1286 AliMatrix(idrotm[315],90.0,319.09,90.0,49.09,0.0,0.0);
1287 AliMatrix(idrotm[316],90.0,302.73,90.0,32.73,0.0,0.0);
1288 AliMatrix(idrotm[317],90.0,286.36,90.0,16.36,0.0,0.0);
1289 AliMatrix(idrotm[318],90.0,270.0,90.0,360.0,0.0,0.0);
1290 AliMatrix(idrotm[319],90.0,253.64,90.0,343.64,0.0,0.0);
1291 AliMatrix(idrotm[320],90.0,237.27,90.0,327.27,0.0,0.0);
1292 AliMatrix(idrotm[321],90.0,12.86,90.0,102.86,0.0,0.0);
1293 AliMatrix(idrotm[322],90.0,220.91,90.0,310.91,0.0,0.0);
1294 AliMatrix(idrotm[323],90.0,204.55,90.0,294.55,0.0,0.0);
1295 AliMatrix(idrotm[324],90.0,188.18,90.0,278.18,0.0,0.0);
1296 AliMatrix(idrotm[325],90.0,171.82,90.0,261.82,0.0,0.0);
1297 AliMatrix(idrotm[326],90.0,155.45,90.0,245.45,0.0,0.0);
1298 AliMatrix(idrotm[327],90.0,139.09,90.0,229.09,0.0,0.0);
1299 AliMatrix(idrotm[328],90.0,122.73,90.0,212.73,0.0,0.0);
1300 AliMatrix(idrotm[329],90.0,106.36,90.0,196.36,0.0,0.0);
1301 AliMatrix(idrotm[330],90.0,73.64,90.0,163.64,0.0,0.0);
1302 AliMatrix(idrotm[331],90.0,40.91,90.0,130.91,0.0,0.0);
1303 AliMatrix(idrotm[332],90.0,24.55,90.0,114.55,0.0,0.0);
1304 AliMatrix(idrotm[333],90.0,38.57,90.0,128.57,0.0,0.0);
1305 AliMatrix(idrotm[334],90.0,351.82,90.0,81.82,0.0,0.0);
1306 AliMatrix(idrotm[335],90.0,8.18,90.0,98.18,0.0,0.0);
1307 AliMatrix(idrotm[336],90.0,64.29,90.0,154.29,0.0,0.0);
1308 AliMatrix(idrotm[337],111.0,300.0,21.0,300.0,90.0,30.0);
1309 AliMatrix(idrotm[338],69.0,240.0,159.0,240.0,90.0,150.0);
1310 AliMatrix(idrotm[339],111.0,240.0,21.0,240.0,90.0,150.0);
1311 AliMatrix(idrotm[340],69.0,300.0,159.0,300.0,90.0,30.0);
1312 AliMatrix(idrotm[341],128.0,0.0,38.0,0.0,90.0,270.0);
1313 AliMatrix(idrotm[342],90.0,240.0,180.0,0.0,90.0,330.);
1314 AliMatrix(idrotm[343],90.0,120.0,180.0,0.0,90.0,210.0);
1315 AliMatrix(idrotm[344],90.0,0.0,180.0,0.0,90.0,90.0);
1316 AliMatrix(idrotm[345],90.0,180.0,90.0,90.0,0.0,0.0);
1317 AliMatrix(idrotm[346],90.0,300.0,90.0,30.0,0.0,0.0);
1318 AliMatrix(idrotm[347],90.0,240.0,90.0,150.0,0.0,0.0);
1319 AliMatrix(idrotm[348],90.0,180.0,0.0,0.0,90.0,270.0);
1320 AliMatrix(idrotm[349],90.0,235.0,90.0,145.0,0.0,0.0);
1321 AliMatrix(idrotm[350],90.0,90.0,90.0,180.0,0.0,0.0);
1322 AliMatrix(idrotm[351],90.0,305.0,90.0,35.0,0.0,0.0);
1323 AliMatrix(idrotm[352],0.0,0.0,90.0,0.0,90.0,90.0);
1324 AliMatrix(idrotm[353],90.0,60.0,90.0,150.0,0.0,0.0);
1325 AliMatrix(idrotm[354],90.0,120.0,90.0,30.0,0.0,0.0);
1326 AliMatrix(idrotm[355],90.0,180.0,90.0,90.0,180.0,0.0);
1327 AliMatrix(idrotm[356],90.0,270.0,90.0,0.0,0.0,0.0);
1328 AliMatrix(idrotm[366],90.0,57.27,90.0,147.27,0.0,0.0);
1329 AliMatrix(idrotm[386],90.0,192.86,90.0,282.86,0.0,0.0);
1330 }
1331
1332 // SSD
1333 if (! AliITSInitGeometry::SSDIsTGeoNative()) {
1334 AliMatrix(idrotm[501],90.0,148.24,90.0,238.24,0.0,0.0);
1335 AliMatrix(idrotm[503],90.0,137.65,90.0,227.65,0.0,0.0);
1336 AliMatrix(idrotm[504],90.0,127.06,90.0,217.06,0.0,0.0);
1337 AliMatrix(idrotm[505],90.0,116.47,90.0,206.47,0.0,0.0);
1338 AliMatrix(idrotm[506],90.0,105.88,90.0,195.88,0.0,0.0);
1339 AliMatrix(idrotm[507],90.0,95.29,90.0,185.29,0.0,0.0);
1340 AliMatrix(idrotm[508],90.0,84.71,90.0,174.71,0.0,0.0);
1341 AliMatrix(idrotm[509],90.0,74.12,90.0,164.12,0.0,0.0);
1342 AliMatrix(idrotm[510],90.0,63.53,90.0,153.53,0.0,0.0);
1343 AliMatrix(idrotm[511],90.0,52.94,90.0,142.94,0.0,0.0);
1344 AliMatrix(idrotm[512],90.0,42.35,90.0,132.35,0.0,0.0);
1345 AliMatrix(idrotm[513],90.0,31.76,90.0,121.76,0.0,0.0);
1346 AliMatrix(idrotm[514],90.0,10.59,90.0,100.59,0.0,0.0);
1347 AliMatrix(idrotm[515],90.0,349.41,90.0,79.41,0.0,0.0);
1348 AliMatrix(idrotm[516],90.0,338.82,90.0,68.82,0.0,0.0);
1349 AliMatrix(idrotm[517],90.0,328.24,90.0,58.24,0.0,0.0);
1350 AliMatrix(idrotm[518],90.0,317.65,90.0,47.65,0.0,0.0);
1351 AliMatrix(idrotm[519],90.0,307.06,90.0,37.06,0.0,0.0);
1352 AliMatrix(idrotm[520],90.0,296.47,90.0,26.47,0.0,0.0);
1353 AliMatrix(idrotm[521],90.0,285.88,90.0,15.88,0.0,0.0);
1354 AliMatrix(idrotm[522],90.0,275.29,90.0,5.29,0.0,0.0);
1355 AliMatrix(idrotm[523],90.0,264.71,90.0,354.71,0.0,0.0);
1356 AliMatrix(idrotm[524],90.0,254.12,90.0,344.12,0.0,0.0);
1357 AliMatrix(idrotm[525],90.0,243.53,90.0,333.53,0.0,0.0);
1358 AliMatrix(idrotm[526],90.0,232.94,90.0,322.94,0.0,0.0);
1359 AliMatrix(idrotm[527],90.0,222.35,90.0,312.35,0.0,0.0);
1360 AliMatrix(idrotm[528],90.0,211.76,90.0,301.76,0.0,0.0);
1361 AliMatrix(idrotm[529],90.0,190.59,90.0,280.59,0.0,0.0);
1362 AliMatrix(idrotm[530],90.0,169.41,90.0,259.41,0.0,0.0);
1363 AliMatrix(idrotm[531],90.0,158.82,90.0,248.82,0.0,0.0);
1364 AliMatrix(idrotm[532],90.0,360.0,90.0,90.0,0.0,0.0);
1365 AliMatrix(idrotm[533],90.0,180.0,90.0,270.0,0.0,0.0);
1366 AliMatrix(idrotm[534],90.0,189.47,90.0,279.47,0.0,0.0);
1367 AliMatrix(idrotm[535],90.0,198.95,90.0,288.95,0.0,0.0);
1368 AliMatrix(idrotm[537],90.0,217.89,90.0,307.89,0.0,0.0);
1369 AliMatrix(idrotm[538],90.0,227.37,90.0,317.37,0.0,0.0);
1370 AliMatrix(idrotm[539],90.0,236.84,90.0,326.84,0.0,0.0);
1371 AliMatrix(idrotm[540],90.0,246.32,90.0,336.32,0.0,0.0);
1372 AliMatrix(idrotm[541],90.0,255.79,90.0,345.79,0.0,0.0);
1373 AliMatrix(idrotm[542],90.0,265.26,90.0,355.26,0.0,0.0);
1374 AliMatrix(idrotm[543],90.0,274.74,90.0,4.74,0.0,0.0);
1375 AliMatrix(idrotm[544],90.0,284.21,90.0,14.21,0.0,0.0);
1376 AliMatrix(idrotm[545],90.0,293.68,90.0,23.68,0.0,0.0);
1377 AliMatrix(idrotm[546],90.0,303.16,90.0,33.16,0.0,0.0);
1378 AliMatrix(idrotm[547],90.0,312.63,90.0,42.63,0.0,0.0);
1379 AliMatrix(idrotm[548],90.0,322.11,90.0,52.11,0.0,0.0);
1380 AliMatrix(idrotm[549],90.0,331.58,90.0,61.58,0.0,0.0);
1381 AliMatrix(idrotm[550],90.0,341.05,90.0,71.05,0.0,0.0);
1382 AliMatrix(idrotm[551],90.0,350.53,90.0,80.53,0.0,0.0);
1383 AliMatrix(idrotm[552],90.0,9.47,90.0,99.47,0.0,0.0);
1384 AliMatrix(idrotm[553],90.0,18.95,90.0,108.95,0.0,0.0);
1385 AliMatrix(idrotm[555],90.0,37.89,90.0,127.89,0.0,0.0);
1386 AliMatrix(idrotm[556],90.0,47.37,90.0,137.37,0.0,0.0);
1387 AliMatrix(idrotm[557],90.0,56.84,90.0,146.84,0.0,0.0);
1388 AliMatrix(idrotm[558],90.0,66.32,90.0,156.32,0.0,0.0);
1389 AliMatrix(idrotm[559],90.0,75.79,90.0,165.79,0.0,0.0);
1390 AliMatrix(idrotm[560],90.0,85.26,90.0,175.26,0.0,0.0);
1391 AliMatrix(idrotm[561],90.0,94.74,90.0,184.74,0.0,0.0);
1392 AliMatrix(idrotm[562],90.0,104.21,90.0,194.21,0.0,0.0);
1393 AliMatrix(idrotm[563],90.0,113.68,90.0,203.68,0.0,0.0);
1394 AliMatrix(idrotm[564],90.0,123.16,90.0,213.16,0.0,0.0);
1395 AliMatrix(idrotm[565],90.0,132.63,90.0,222.63,0.0,0.0);
1396 AliMatrix(idrotm[566],90.0,142.11,90.0,232.11,0.0,0.0);
1397 AliMatrix(idrotm[567],90.0,151.58,90.0,241.58,0.0,0.0);
1398 AliMatrix(idrotm[568],90.0,161.05,90.0,251.05,0.0,0.0);
1399 AliMatrix(idrotm[569],90.0,170.53,90.0,260.53,0.0,0.0);
1400 AliMatrix(idrotm[570],90.0,180.0,90.0,90.0,180.0,0.0);
1401 AliMatrix(idrotm[571],90.0,0.0,0.0,0.0,90.0,270.0);
1402 AliMatrix(idrotm[572],90.0,180.0,0.0,0.0,90.0,270.0);
1403 AliMatrix(idrotm[573],90.0,180.0,90.0,90.0,0.0,0.0);
1404 AliMatrix(idrotm[575],90.0,120.0,180.0,0.0,90.0,210.0);
1405 AliMatrix(idrotm[576],65.71,300.0,90.0,30.0,24.29,120.0);
1406 AliMatrix(idrotm[577],114.29,300.0,90.0,30.0,155.71,120.0);
1407 AliMatrix(idrotm[579],65.71,240.0,90.0,150.0,24.29,60.0);
1408 AliMatrix(idrotm[580],114.29,240.0,90.0,150.0,155.71,60.0);
1409 AliMatrix(idrotm[581],90.0,240.0,180.0,0.0,90.0,330.0);
1410 AliMatrix(idrotm[583],90.0,0.0,180.0,0.0,90.0,90.0);
1411 AliMatrix(idrotm[584],90.0,180.0,180.0,0.0,90.0,90.0);
1412 AliMatrix(idrotm[586],180.0,0.0,90.0,90.0,90.0,0.0);
1413 AliMatrix(idrotm[618],90.0,201.18,90.0,291.18,0.0,0.0);
1414 AliMatrix(idrotm[620],90.0,28.42,90.0,118.42,0.0,0.0);
1415 AliMatrix(idrotm[623],90.0,208.42,90.0,298.42,0.0,0.0);
1416 AliMatrix(idrotm[633],132.46,0.0,90.0,90.0,42.46,360.0);
1417 AliMatrix(idrotm[653],90.0,21.18,90.0,111.18,0.0,0.0);
1418 }
1419
1420 // SDD cone
1421 if (! AliITSInitGeometry::SDDconeIsTGeoNative()) {
1422 AliMatrix(idrotm[846],90.0,300.0,90.0,30.0,0.0,0.0);
1423 AliMatrix(idrotm[851],90.0,305.0,90.0,35.0,0.0,0.0);
1424 AliMatrix(idrotm[853],90.0,60.0,90.0,150.0,0.0,0.0);
1425 AliMatrix(idrotm[856],90.0,0.0,90.0,90.0,180.0,0.0);
1426 AliMatrix(idrotm[857],90.0,5.0,90.0,95.0,180.0,0.0);
1427 AliMatrix(idrotm[858],90.0,65.0,90.0,155.0,180.0,0.0);
1428 AliMatrix(idrotm[859],90.0,305.0,90.0,35.0,180.0,0.0);
1429 AliMatrix(idrotm[860],90.0,245.0,90.0,335.0,180.0,0.0);
1430 AliMatrix(idrotm[861],90.0,185.0,90.0,275.0,180.0,0.0);
1431 AliMatrix(idrotm[862],90.0,125.0,90.0,215.0,180.0,0.0);
1432 AliMatrix(idrotm[863],90.0,257.5,90.0,347.5,180.0,0.0);
1433 AliMatrix(idrotm[864],90.0,227.5,90.0,317.5,180.0,0.0);
1434 AliMatrix(idrotm[865],90.0,197.5,90.0,287.5,180.0,0.0);
1435 AliMatrix(idrotm[867],90.0,167.5,90.0,257.5,180.0,0.0);
1436 AliMatrix(idrotm[868],90.0,287.5,90.0,17.5,0.0,0.0);
1437 AliMatrix(idrotm[869],90.0,137.5,90.0,227.5,180.0,0.0);
1438 AliMatrix(idrotm[870],90.0,107.5,90.0,197.5,180.0,0.0);
1439 AliMatrix(idrotm[871],90.0,77.5,90.0,167.5,180.0,0.0);
1440 AliMatrix(idrotm[872],90.0,47.5,90.0,137.5,180.0,0.0);
1441 AliMatrix(idrotm[873],90.0,17.5,90.0,107.5,180.0,0.0);
1442 AliMatrix(idrotm[874],90.0,347.5,90.0,77.5,180.0,0.0);
1443 AliMatrix(idrotm[875],90.0,317.5,90.0,47.5,180.0,0.0);
1444 AliMatrix(idrotm[876],90.0,287.5,90.0,17.5,180.0,0.0);
1445 AliMatrix(idrotm[877],90.0,185.0,90.0,275.0,0.0,0.0);
1446 AliMatrix(idrotm[878],90.0,180.0,90.0,270.0,0.0,0.0);
1447 AliMatrix(idrotm[879],90.0,125.0,90.0,215.0,0.0,0.0);
1448 AliMatrix(idrotm[880],90.0,65.0,90.0,155.0,0.0,0.0);
1449 AliMatrix(idrotm[881],90.0,5.0,90.0,95.0,0.0,0.0);
1450 AliMatrix(idrotm[882],90.0,245.0,90.0,335.0,0.0,0.0);
1451 AliMatrix(idrotm[883],90.0,47.5,90.0,137.5,0.0,0.0);
1452 AliMatrix(idrotm[884],90.0,77.5,90.0,167.5,0.0,0.0);
1453 AliMatrix(idrotm[885],90.0,107.5,90.0,197.5,0.0,0.0);
1454 AliMatrix(idrotm[887],90.0,137.5,90.0,227.5,0.0,0.0);
1455 AliMatrix(idrotm[888],90.0,167.5,90.0,257.5,0.0,0.0);
1456 AliMatrix(idrotm[889],90.0,197.5,90.0,287.5,0.0,0.0);
1457 AliMatrix(idrotm[890],90.0,227.5,90.0,317.5,0.0,0.0);
1458 AliMatrix(idrotm[891],90.0,347.5,90.0,77.5,0.0,0.0);
1459 AliMatrix(idrotm[892],90.0,317.5,90.0,47.5,0.0,0.0);
1460 AliMatrix(idrotm[893],90.0,257.5,90.0,347.5,0.0,0.0);
1461 AliMatrix(idrotm[894],90.0,270.0,0.0,0.0,90.0,180.0);
1462 AliMatrix(idrotm[895],90.0,286.36,0.0,0.0,90.0,196.36);
1463 AliMatrix(idrotm[896],90.0,302.73,0.0,0.0,90.0,212.73);
1464 AliMatrix(idrotm[897],90.0,319.09,0.0,0.0,90.0,229.09);
1465 AliMatrix(idrotm[898],90.0,17.5,90.0,107.5,0.0,0.0);
1466 AliMatrix(idrotm[899],90.0,335.45,0.0,0.0,90.0,245.45);
1467 AliMatrix(idrotm[900],90.0,351.82,0.0,0.0,90.0,261.82);
1468 AliMatrix(idrotm[901],90.0,8.18,0.0,0.0,90.0,278.18);
1469 AliMatrix(idrotm[902],90.0,24.55,0.0,0.0,90.0,294.55);
1470 AliMatrix(idrotm[903],90.0,40.91,0.0,0.0,90.0,310.91);
1471 AliMatrix(idrotm[904],90.0,57.27,0.0,0.0,90.0,327.27);
1472 AliMatrix(idrotm[905],90.0,73.64,0.0,0.0,90.0,343.64);
1473 AliMatrix(idrotm[906],90.0,90.0,0.0,0.0,90.0,360.0);
1474 AliMatrix(idrotm[907],90.0,106.36,0.0,0.0,90.0,16.36);
1475 AliMatrix(idrotm[908],90.0,122.73,0.0,0.0,90.0,32.73);
1476 AliMatrix(idrotm[909],90.0,139.09,0.0,0.0,90.0,49.09);
1477 AliMatrix(idrotm[910],90.0,155.45,0.0,0.0,90.0,65.45);
1478 AliMatrix(idrotm[911],90.0,171.82,0.0,0.0,90.0,81.82);
1479 AliMatrix(idrotm[912],90.0,188.18,0.0,0.0,90.0,98.18);
1480 AliMatrix(idrotm[913],90.0,204.55,0.0,0.0,90.0,114.55);
1481 AliMatrix(idrotm[914],90.0,220.91,0.0,0.0,90.0,130.91);
1482 AliMatrix(idrotm[915],90.0,237.27,0.0,0.0,90.0,147.27);
1483 AliMatrix(idrotm[916],90.0,253.64,0.0,0.0,90.0,163.64);
1484 AliMatrix(idrotm[917],90.0,295.71,0.0,0.0,90.0,205.71);
1485 AliMatrix(idrotm[918],90.0,321.43,0.0,0.0,90.0,231.43);
1486 AliMatrix(idrotm[919],90.0,347.14,0.0,0.0,90.0,257.14);
1487 AliMatrix(idrotm[920],90.0,12.86,0.0,0.0,90.0,282.86);
1488 AliMatrix(idrotm[921],90.0,38.57,0.0,0.0,90.0,308.57);
1489 AliMatrix(idrotm[922],90.0,64.29,0.0,0.0,90.0,334.29);
1490 AliMatrix(idrotm[923],90.0,115.71,0.0,0.0,90.0,25.71);
1491 AliMatrix(idrotm[924],90.0,141.43,0.0,0.0,90.0,51.43);
1492 AliMatrix(idrotm[925],90.0,167.14,0.0,0.0,90.0,77.14);
1493 AliMatrix(idrotm[926],90.0,192.86,0.0,0.0,90.0,102.86);
1494 AliMatrix(idrotm[927],90.0,218.57,0.0,0.0,90.0,128.57);
1495 AliMatrix(idrotm[928],90.0,244.29,0.0,0.0,90.0,154.29);
1496 AliMatrix(idrotm[929],90.0,120.0,90.0,210.0,0.0,0.0);
1497 AliMatrix(idrotm[930],90.0,240.0,90.0,330.0,0.0,0.0);
1498 AliMatrix(idrotm[931],90.0,60.0,90.0,150.0,180.0,0.0);
1499 AliMatrix(idrotm[932],90.0,120.0,90.0,210.0,180.0,0.0);
1500 AliMatrix(idrotm[933],90.0,180.0,90.0,270.0,180.0,0.0);
1501 AliMatrix(idrotm[934],90.0,240.0,90.0,330.0,180.0,0.0);
1502 AliMatrix(idrotm[935],90.0,300.0,90.0,30.0,180.0,0.0);
1503 }
1504
1505 // SSD cone
1506 if (! AliITSInitGeometry::SSDconeIsTGeoNative()) {
1507 AliMatrix(idrotm[701],90.0,0.0,90.0,90.0,180.0,0.0);
1508 AliMatrix(idrotm[702],90.0,347.5,90.0,77.5,180.0,0.0);
1509 AliMatrix(idrotm[703],90.0,17.5,90.0,107.5,180.0,0.0);
1510 AliMatrix(idrotm[704],90.0,47.5,90.0,137.5,180.0,0.0);
1511 AliMatrix(idrotm[705],90.0,77.5,90.0,167.5,180.0,0.0);
1512 AliMatrix(idrotm[706],90.0,107.5,90.0,197.5,180.0,0.0);
1513 AliMatrix(idrotm[707],90.0,137.5,90.0,227.5,180.0,0.0);
1514 AliMatrix(idrotm[708],90.0,167.5,90.0,257.5,180.0,0.0);
1515 AliMatrix(idrotm[709],90.0,197.5,90.0,287.5,180.0,0.0);
1516 AliMatrix(idrotm[710],90.0,227.5,90.0,317.5,180.0,0.0);
1517 AliMatrix(idrotm[711],90.0,257.5,90.0,347.5,180.0,0.0);
1518 AliMatrix(idrotm[712],90.0,287.5,90.0,17.5,180.0,0.0);
1519 AliMatrix(idrotm[713],90.0,317.5,90.0,47.5,180.0,0.0);
1520 AliMatrix(idrotm[714],90.0,328.4,90.0,58.4,180.0,0.0);
1521 AliMatrix(idrotm[715],90.0,28.4,90.0,118.4,180.0,0.0);
1522 AliMatrix(idrotm[716],90.0,88.4,90.0,178.4,180.0,0.0);
1523 AliMatrix(idrotm[717],90.0,148.4,90.0,238.4,180.0,0.0);
1524 AliMatrix(idrotm[718],90.0,208.4,90.0,298.4,180.0,0.0);
1525 AliMatrix(idrotm[719],90.0,268.4,90.0,358.4,180.0,0.0);
1526 AliMatrix(idrotm[720],90.0,28.4,90.0,118.4,0.0,0.0);
1527 AliMatrix(idrotm[721],90.0,88.4,90.0,178.4,0.0,0.0);
1528 AliMatrix(idrotm[722],90.0,148.4,90.0,238.4,0.0,0.0);
1529 AliMatrix(idrotm[723],90.0,208.4,90.0,298.4,0.0,0.0);
1530 AliMatrix(idrotm[724],90.0,268.4,90.0,358.4,0.0,0.0);
1531 AliMatrix(idrotm[725],90.0,328.4,90.0,58.4,0.0,0.0);
1532 AliMatrix(idrotm[726],90.0,77.5,90.0,167.5,0.0,0.0);
1533 AliMatrix(idrotm[727],90.0,107.5,90.0,197.5,0.0,0.0);
1534 AliMatrix(idrotm[728],90.0,137.5,90.0,227.5,0.0,0.0);
1535 AliMatrix(idrotm[729],90.0,167.5,90.0,257.5,0.0,0.0);
1536 AliMatrix(idrotm[730],90.0,227.5,90.0,317.5,0.0,0.0);
1537 AliMatrix(idrotm[731],90.0,257.5,90.0,347.5,0.0,0.0);
1538 AliMatrix(idrotm[732],90.0,317.5,90.0,47.5,0.0,0.0);
1539 AliMatrix(idrotm[733],90.0,197.5,90.0,287.5,0.0,0.0);
1540 AliMatrix(idrotm[734],90.0,347.5,90.0,77.5,0.0,0.0);
1541 AliMatrix(idrotm[735],90.0,47.5,90.0,137.5,0.0,0.0);
1542 AliMatrix(idrotm[768],90.0,287.5,90.0,17.5,0.0,0.0);
1543 AliMatrix(idrotm[798],90.0,17.5,90.0,107.5,0.0,0.0);
1544 }
1545
1546 // Services
1547 AliMatrix(idrotm[200], 90., 0., 90., 90., 180., 0.);
1548
1549 // New reference frame: z---> -z; x ---> -x; y ---> y
1550 AliMatrix(idrotm[199], 90.,180., 90.,90., 180.,0.);
1551
1552 // CONVERT INTO CM (RL(SI)=9.36 CM)
1553 for (i = 0; i < 6; ++i) {
1554 drl[i] = drl[i] / 100. * 9.36;
1555 } // end for i
1556
1557 // FIELD CAGE HALF LENGTH
1558 rlim = 50.;
1559 zmax = 74.;
1560 ztpc = 284.;
1561 // --- Define ghost volume containing the whole ITS (including services)
1562 // and fill it with air
1563 dgh[0] = 0.;
1564 dgh[1] = 360.;
1565 dgh[2] = 16.;
1566 dgh[3] = -ztpc-5.-0.1;
1567 dgh[4] = 46;
1568 dgh[5] = 85.;
1569 dgh[6] = -ztpc;
1570 dgh[7] = 46;
1571 dgh[8] = 85.;
1572 dgh[9] = -ztpc;
1573 dgh[10] = 46;
1574 dgh[11] = rlim+7.5;
1575 dgh[12] = -97.5;
1576 dgh[13] = 46;
1577 dgh[14] = rlim+7.5;
1578 dgh[15] = -zmax;
1579 dgh[16] = 46;
1580 dgh[17] = rlim+7.5;
1581 dgh[18] = -48;
1582 dgh[19] = 6;
1583 dgh[20] = rlim+7.5;
1584 dgh[21] = -28.6;
1585 dgh[22] = 6;
1586 dgh[23] = rlim+7.5;
1587 dgh[24] = -27.6;
1588 dgh[25] = 3.295;
1589 dgh[26] = rlim+7.5;
1590 dgh[27] = 27.6;
1591 dgh[28] = 3.295;
1592 dgh[29] = rlim+7.5;
1593 dgh[30] = 28.6;
1594 dgh[31] = 6;
1595 dgh[32] = rlim+7.5;
1596 dgh[33] = 48;
1597 dgh[34] = 6;
1598 dgh[35] = rlim+7.5;
1599 dgh[36] = zmax;
1600 dgh[37] = 46;
1601 dgh[38] = rlim+7.5;
1602 dgh[39] = 97.5;
1603 dgh[40] = 46;
1604 dgh[41] = rlim+7.5;
1605 dgh[42] = ztpc;
1606 dgh[43] = 62;
1607 dgh[44] = 62+4.;
1608 dgh[45] = ztpc;
1609 dgh[46] = 62;
1610 dgh[47] = 85.;
1611 dgh[48] = ztpc+4.+0.1;
1612 dgh[49] = 62.0;//62.4;
1613 dgh[50] = 85.;
1614 gMC->Gsvolu("ITSV", "PCON", idtmed[205], dgh, 51);
1615
1616 // --- Place the ghost volume in its mother volume (ALIC) and make it
1617 // invisible
1618 // gMC->Gspos("ITSV", 1, "ALIC", 0., 0., 0., 0, "ONLY");
1619 //gMC->Gspos("ITSV", 1, "ALIC", 0., 0., 0., idrotm[199], "MANY");
1620 //gMC->Gsatt("ITSV", "SEEN", 0);
1621
1622 //gMC->Gspos("ITSV", 1, "ALIC", 0., 0., 0., 0, "MANY"); //=== LG
1623 gMC->Gspos("ITSV", 1, "ALIC", 0., 0., 0., 0, "ONLY"); //=== LG
1624
1625
1626 // --- Define ghost volume containing the six layers and fill it with air
1627
1628// dgh[0] = 0.;
1629// dgh[1] = 360.;
1630// dgh[2] = 8.;
1631// dgh[3] = -zmax;
1632// dgh[4] = 46.;
1633// dgh[5] = rlim;
1634// dgh[6] = -47.5;
1635// dgh[7] = 6.005;
1636// dgh[8] = rlim;
1637// dgh[9] = -28.5;
1638// dgh[10] = 6.005;
1639// dgh[11] = rlim;
1640// dgh[12] = -27.5;
1641// dgh[13] = 3.3;
1642// dgh[14] = rlim;
1643// dgh[15] = 27.5;
1644// dgh[16] = 3.3;
1645// dgh[17] = rlim;
1646// dgh[18] = 28.5;
1647// dgh[19] = 6.005;
1648// dgh[20] = rlim;
1649// dgh[21] = 47.5;
1650// dgh[22] = 6.005;
1651// dgh[23] = rlim;
1652// dgh[24] = zmax;
1653// dgh[25] = 46.;
1654// dgh[26] = rlim;
1655// gMC->Gsvolu("ITSD", "PCON", idtmed[205], dgh, 27);
1656
1657 // --- Place the ghost volume in its mother volume (ITSV) and make it
1658 // invisible
1659 //gMC->Gspos("ITSD", 1, "ITSV", 0., 0., 0., 0, "ONLY");
1660 //gMC->Gsatt("ITSD", "SEEN", 0);
1661
1662 //======================================================================
1663 // Let's make ITSD an assembly, because we can then add the new geometry
1664 // inside this volume without belonging to it.
1665 //
1666 // The 180° rotation (which was done for switching from the old
1667 // coordinate system to the new one) is applied on ITSD, not ITSV,
1668 // because ITSV will also contain the new geometry.
1669 // LG
1670 //======================================================================
1671
1672 //TGeoVolumeAssembly *dITS = new TGeoVolumeAssembly("ITSD");
1673 new TGeoVolumeAssembly("ITSD");
1674 gMC->Gspos("ITSD", 1, "ITSV", 0., 0., 0., idrotm[199], "ONLY");
1675
1676
1677 // --- Define SPD (option 'b') volumes ----------------------------
1678
1679 // SPD - option 'b'
1680 // (this is the default)
1681
1682 //if (option == 2) {
1683 if (! AliITSInitGeometry::SPDIsTGeoNative()) {
1684
1685 dits[0] = 3.7;
1686 dits[1] = 7.75;
1687 dits[2] = 26.1;
1688 gMC->Gsvolu("IT12", "TUBE", idtmed[254], dits, 3);
1689
1690 dits[0] = 3.7;
1691 dits[1] = 7.7;
1692 dits[2] = 24;
1693 dits[3] = 57;
1694 dits[4] = 100;
1695 gMC->Gsvolu("I12B", "TUBS", idtmed[254], dits, 5); // sector
1696
1697 di10b[0] = 0.843;
1698 di10b[1] = ddet1+dchip1+dbus+0.0025;
1699 di10b[2] = 19.344;
1700 gMC->Gsvolu("I10B", "BOX ", idtmed[254], di10b, 3); // mother volume
1701 // on layer 1
1702
1703 di20b[0] = 0.843;
1704 di20b[1] = ddet2+dchip2+dbus+0.0025;
1705 di20b[2] = 19.344;
1706 gMC->Gsvolu("I20B", "BOX ", idtmed[254], di20b, 3); // mother volume
1707 // layer 2
1708
1709 dits[0] = 1.3673;
1710 dits[1] = 0.01;
1711 dits[2] = 24;
1712 gMC->Gsvolu("I123", "BOX ", idtmed[253], dits, 3);
1713
1714 dits[0] = 0.06;
1715 dits[1] = 0.08;
1716 dits[2] = 24;
1717 dits[3] = -36.79;
1718 dits[4] = 21.834;
1719 gMC->Gsvolu("I121", "TUBS", idtmed[253], dits, 5);
1720
1721 dits[0] = 0.1253;
1722 dits[1] = 0.01;
1723 dits[2] = 24;
1724 gMC->Gsvolu("I122", "BOX ", idtmed[253], dits, 3);
1725
1726 dits[0] = 0.04;
1727 dits[1] = 0.06 ;
1728 dits[2] = 24;
1729 dits[3] = 126.79;
1730 dits[4] = 270;
1731 gMC->Gsvolu("I120", "TUBS", idtmed[253], dits, 5);
1732
1733 dits[0] = 0.1134;
1734 dits[1] = 0.01;
1735 dits[2] = 24;
1736 gMC->Gsvolu("I144", "BOX ", idtmed[253], dits, 3);
1737
1738 dits[0] = 0.25;
1739 dits[1] = 0.06;
1740 dits[2] = 24;
1741 gMC->Gsvolu("I113", "BOX ", idtmed[254], dits, 3);
1742
1743 dits[0] = 0.077;
1744 dits[1] = 0.01;
1745 dits[2] = 24;
1746 gMC->Gsvolu("I143", "BOX ", idtmed[253], dits, 3);
1747
1748 dits[0] = 0.04;
1749 dits[1] = 0.06;
1750 dits[2] = 24;
1751 dits[3] = 0;
1752 dits[4] = 90;
1753 gMC->Gsvolu("I142", "TUBS", idtmed[253], dits, 5);
1754
1755 dits[0] = 0.0695;
1756 dits[1] = 0.01;
1757 dits[2] = 24;
1758 gMC->Gsvolu("I141", "BOX ", idtmed[253], dits, 3);
1759
1760 dits[0] = 0.06;
1761 dits[1] = 0.08;
1762 dits[2] = 24;
1763 dits[3] = 0;
1764 dits[4] = 108;
1765 gMC->Gsvolu("I140", "TUBS", idtmed[253], dits, 5);
1766
1767 dits[0] = 0.1835;
1768 dits[1] = 0.01;
1769 dits[2] = 24;
1770 gMC->Gsvolu("I139", "BOX ", idtmed[253], dits, 3);
1771
1772 dits[0] = 0.1894 ;
1773 dits[1] = 0.01;
1774 dits[2] = 24;
1775 gMC->Gsvolu("I138", "BOX ", idtmed[253], dits, 3);
1776
1777 dits[0] = 0.04;
1778 dits[1] = 0.06;
1779 dits[2] = 24;
1780 dits[3] = 0;
1781 dits[4] = 75.261;
1782 gMC->Gsvolu("I137", "TUBS", idtmed[253], dits, 5);
1783
1784 dits[0] = 1.3401;
1785 dits[1] = 0.01;
1786 dits[2] = 24;
1787 gMC->Gsvolu("I136", "BOX ", idtmed[253], dits, 3);
1788
1789 dits[0] = 0.05;
1790 dits[1] = 0.07;
1791 dits[2] = 24;
1792 dits[3] = 0;
1793 dits[4] = 72.739;
1794 gMC->Gsvolu("I135", "TUBS", idtmed[253], dits, 5);
1795
1796 dits[0] = 0.1193;
1797 dits[1] = 0.01;
1798 dits[2] = 24;
1799 gMC->Gsvolu("I134", "BOX ", idtmed[253], dits, 3);
1800
1801 dits[0] = 0.163;
1802 dits[1] = 0.01;
1803 dits[2] = 24;
1804 gMC->Gsvolu("I133", "BOX ", idtmed[253], dits, 3);
1805
1806 dits[0] = 0.04;
1807 dits[1] = 0.06;
1808 dits[2] = 24;
1809 dits[3] = 0;
1810 dits[4] = 157.633;
1811 gMC->Gsvolu("I132", "TUBS", idtmed[253], dits, 5);
1812
1813 dits[0] = 0.2497;
1814 dits[1] = 0.01;
1815 dits[2] = 24;
1816 gMC->Gsvolu("I131", "BOX ", idtmed[253], dits, 3);
1817
1818 dits[0] = 0.06;
1819 dits[1] = 0.08;
1820 dits[2] = 24;
1821 dits[3] = 0;
1822 dits[4] = 148.633;
1823 gMC->Gsvolu("I130", "TUBS", idtmed[253], dits, 5);
1824
1825 dits[0] = 0.292;
1826 dits[1] = 0.01;
1827 dits[2] = 24;
1828 gMC->Gsvolu("I129", "BOX ", idtmed[253], dits, 3);
1829
1830 dits[0] = 0.163;
1831 dits[1] = 0.01;
1832 dits[2] = 24;
1833 gMC->Gsvolu("I128", "BOX ", idtmed[253], dits, 3);
1834
1835 dits[0] = 0.04;
1836 dits[1] = 0.06;
1837 dits[2] = 24;
1838 dits[3] = 0;
1839 dits[4] = 161.297;
1840 gMC->Gsvolu("I126", "TUBS", idtmed[253], dits, 5);
1841
1842 dits[0] = 0.2433;
1843 dits[1] = 0.01;
1844 dits[2] = 24;
1845 gMC->Gsvolu("I125", "BOX ", idtmed[253], dits, 3);
1846
1847 dits[0] = 0.06;
1848 dits[1] = 0.08;
1849 dits[2] = 24;
1850 dits[3] = 0;
1851 dits[4] = 42.883;
1852 gMC->Gsvolu("I124", "TUBS", idtmed[253], dits, 5);
1853
1854 dits[0] = 0.793;
1855 dits[1] = ddet1+dchip1+dbus+0.0025;
1856 dits[2] = 2.5;
1857 gMC->Gsvolu("I105", "BOX ", idtmed[290], dits, 3);
1858
1859 di107[0] = 0.793;
1860 di107[1] = ddet1+dchip1;
1861 di107[2] = 3.536;
1862 gMC->Gsvolu("I107", "BOX ", idtmed[254], di107, 3); // contains det and chip
1863 // layer 1
1864 dits[0] = 0.705;
1865 dits[1] = 0.01;
1866 dits[2] = 2.5;
1867 gMC->Gsvolu("I109", "BOX ", idtmed[275], dits, 3);
1868
1869 di108[0] = 0.705;
1870 di108[1] = dbus;
1871 di108[2] = 14.344;
1872 gMC->Gsvolu("I108", "BOX ", idtmed[275], di108, 3); // bus for both layers
1873
1874 di1d7[0] = 0.7975;
1875 di1d7[1] = ddet2+dchip2;
1876 di1d7[2] = 3.536;
1877 gMC->Gsvolu("I1D7", "BOX ", idtmed[254], di1d7, 3); // contains det and chip
1878 // layer 2
1879 dits[0] = 0.06;
1880 dits[1] = 0.08;
1881 dits[2] = 24;
1882 dits[3] = 0;
1883 dits[4] = 80;
1884 gMC->Gsvolu("I112", "TUBS", idtmed[253], dits, 5);
1885
1886 dits[0] = 0.04;
1887 dits[1] = 0.06;
1888 dits[2] = 24;
1889 dits[3] = 0;
1890 dits[4] = 80;
1891 gMC->Gsvolu("I111", "TUBS", idtmed[253], dits, 5);
1892
1893 dits[0] = 0.15;
1894 dits[1] = 0.0146;
1895 dits[2] = 24;
1896 gMC->Gsvolu("I118", "BOX ", idtmed[273], dits, 3);
1897
1898 dits[0] = 0.1315;
1899 dits[1] = 0.01;
1900 dits[2] = 24;
1901 gMC->Gsvolu("I110", "BOX ", idtmed[253], dits, 3);
1902
1903 dits[0] = 0.025;
1904 dits[1] = 0.035;
1905 dits[2] = 24;
1906 dits[3] = 0;
1907 dits[4] = 180;
1908 gMC->Gsvolu("I114", "TUBS", idtmed[264], dits, 5);
1909
1910 dits[0] = 0;
1911 dits[1] = 0.025;
1912 dits[2] = 24;
1913 dits[3] = 0;
1914 dits[4] = 180;
1915 gMC->Gsvolu("I115", "TUBS", idtmed[211], dits, 5); // set freon as cooling fluid
1916
1917
1918 dits[0] = 0.063;
1919 dits[1] = 0.035;
1920 dits[2] = 24;
1921 gMC->Gsvolu("I116", "BOX ", idtmed[264], dits, 3);
1922
1923 di106[0] = 0.7975;
1924 di106[1] = dchip1;
1925 di106[2] = 0.68;
1926 gMC->Gsvolu("I106", "BOX ", idtmed[201], di106, 3); // chip layer 1
1927
1928 di1d6[0] = 0.7975;
1929 di1d6[1] = dchip2;
1930 di1d6[2] = 0.68;
1931 gMC->Gsvolu("I1D6", "BOX ", idtmed[201], di1d6, 3); // chip layer 2
1932
1933 di101[0] = 0.705;
1934 di101[1] = ddet1;
1935 di101[2] = 3.536;
1936 gMC->Gsvolu("I101", "BOX ", idtmed[250], di101, 3); // contains detector
1937 // layer 1
1938 di1d1[0] = 0.705;
1939 di1d1[1] = ddet2;
1940 di1d1[2] = 3.536;
1941 gMC->Gsvolu("I1D1", "BOX ", idtmed[250], di1d1, 3); // contains detector
1942 // layer 2
1943
1944
1945 dits[0] = 0.063;
1946 dits[1] = 0.025;
1947 dits[2] = 24;
1948 gMC->Gsvolu("I117", "BOX ", idtmed[211], dits, 3); // set freon as cooling fluid
1949
1950
1951 dits1[0] = 0.64;
1952 dits1[1] = ddet1;
1953 dits1[2] = 3.48;
1954 gMC->Gsvolu("ITS1", "BOX ", idtmed[200], dits1, 3); // detector layer 1
1955
1956 dits2[0] = 0.64;
1957 dits2[1] = ddet2;
1958 dits2[2] = 3.48;
1959 gMC->Gsvolu("ITS2", "BOX ", idtmed[200], dits2, 3); // detector layer 2
1960
1961 dits[0] = 3.701;
1962 dits[1] = 7.699;
1963 dits[2] = 4;
1964 dits[3] = 57.1;
1965 dits[4] = 99.9;
1966 gMC->Gsvolu("I650", "TUBS", idtmed[254], dits, 5); // was I150 in old geom.
1967
1968 dits[0] = 3.7;
1969 dits[1] = 7.75;
1970 dits[2] = 0.05;
1971 gMC->Gsvolu("I651", "TUBE", idtmed[296], dits, 3); // services disk
1972
1973 dits[0] = 0;
1974 dits[1] = 0.5;
1975 dits[2] = 1.5;
1976 gMC->Gsvolu("I676", "TUBE", idtmed[274], dits, 3); // was I176 in old geom.
1977
1978 dits[0] = 0;
1979 dits[1] = 0.18;
1980 dits[2] = 0.8;
1981 gMC->Gsvolu("I673", "TUBE", idtmed[274], dits, 3); // was I173 in old geom.
1982
1983 dits[0] = 0;
1984 dits[1] = 0.18;
1985 dits[2] = 3;
1986 gMC->Gsvolu("I671", "TUBE", idtmed[274], dits, 3); // was I171 in old geom.
1987
1988 dits[0] = 0;
1989 dits[1] = 0.075;
1990 dits[2] = 0.8;
1991 gMC->Gsvolu("I669", "TUBE", idtmed[264], dits, 3); // was I169 in old geom.
1992
1993 dits[0] = 3.5;
1994 dits[1] = 5.6;
1995 dits[2] = 0.55;
1996 dits[3] = 0;
1997 dits[4] = 38;
1998 gMC->Gsvolu("I667", "TUBS", idtmed[263], dits, 5); // was I167 in old geom.
1999
2000 dits[0] = 6.6;
2001 dits[1] = 7.6;
2002 dits[2] = 0.5;
2003 dits[3] = 0;
2004 dits[4] = 9;
2005 gMC->Gsvolu("I666", "TUBS", idtmed[263], dits, 5); // was I166 in old geom.
2006
2007 dits[0] = 0.26;
2008 dits[1] = 0.32;
2009 dits[2] = 0.55;
2010 gMC->Gsvolu("I678", "TUBE", idtmed[263], dits, 3); // was I178 in old geom.
2011
2012 dits[0] = 0;
2013 dits[1] = 0.3;
2014 dits[2] = 1.5;
2015 gMC->Gsvolu("I677", "TUBE", idtmed[211], dits, 3); //set freon as cooling fluid
2016 // was I177 in old geom.
2017
2018 dits[0] = 0.07;
2019 dits[1] = 0.125;
2020 dits[2] = 0.3;
2021 gMC->Gsvolu("I675", "TUBE", idtmed[263], dits, 3); // was I175 in old geom.
2022
2023
2024 dits[0] = 0;
2025 dits[1] = 0.1;
2026 dits[2] = 0.8;
2027 gMC->Gsvolu("I674", "TUBE", idtmed[211], dits, 3); //set freon as cooling fluid
2028 // was I174 in old geom.
2029
2030
2031
2032 dits[0] = 0;
2033 dits[1] = 0.1;
2034 dits[2] = 3;
2035 gMC->Gsvolu("I672", "TUBE", idtmed[211], dits, 3); //set freon as cooling fluid
2036 // was I172 in old geom.
2037
2038
2039 dits[0] = 0;
2040 dits[1] = 0.0746;
2041 dits[2] = 0.8;
2042 gMC->Gsvolu("I670", "TUBE", idtmed[211], dits, 3); //set freon as cooling fluid
2043 // was I170 in old geom.
2044
2045 dits[0] = 3.7;
2046 dits[1] = 5.4;
2047 dits[2] = 0.35;
2048 dits[3] = 2;
2049 dits[4] = 36;
2050 gMC->Gsvolu("I668", "TUBS", idtmed[211], dits, 5); //set freon as cooling fluid
2051 // was I168 in old geom.
2052
2053 }
2054
2055 // --- Define SDD volumes ------------------------------------------
2056
108bd0fe 2057 cos30 = cos(30.*3.14159/180.);
2058 sin30 = sin(30.*3.14159/180.);
2059
2060 if (! AliITSInitGeometry::SDDIsTGeoNative()) {
2061
2062 Double_t maxRadius = 28.5;
2063 dits[0] = 0;
2064 dits[1] = 360;
2065 dits[2] = 6;
2066 dits[3] = -34.6;
2067 dits[4] = 23.49;
2068 dits[5] = maxRadius;
2069 dits[6] = -27.35;
2070 dits[7] = 23.49;
2071 dits[8] = maxRadius;
2072 dits[9] = -27.35;
2073 dits[10] = 14.59;
2074 dits[11] = maxRadius;
2075 dits[12] = 27.35;
2076 dits[13] = 14.59;
2077 dits[14] = maxRadius;
2078 dits[15] = 27.35;
2079 dits[16] = 23.49;
2080 dits[17] = maxRadius;
2081 dits[18] = 34.6;
2082 dits[19] = 23.49;
2083 dits[20] = maxRadius;
2084 gMC->Gsvolu("IT34", "PCON", idtmed[209], dits, 21);
2085
2086 // block of the SDD electronics and related ladder frame
2087 iI018dits[0] = 3.2;
2088 iI018dits[1] = 2;
2089 iI018dits[2] = 3.65;
2090 gMC->Gsvolu("I018", "BOX ", idtmed[209], iI018dits, 3);
2091
2092 // block of the SDD end ladder
2093 iI024dits[0] = 3.2;
2094 iI024dits[1] = 2;
2095 iI024dits[2] = 2.725;
2096 gMC->Gsvolu("I024", "BOX ", idtmed[209], iI024dits, 3);
2097
2098 // ladder frame of layer 3 - F.T. March,7-2001
2099 iI047dits[0] = iI018dits[0];
2100 iI047dits[1] = iI018dits[1];
2101 iI047dits[2] = 6*iI018dits[2] + 2*iI024dits[2];
2102 gMC->Gsvolu("I047", "BOX ", idtmed[209], iI047dits, 3);
2103
2104 // ladder frame of layer 4 - F.T. March,7-2001
2105 iI048dits[0] = iI018dits[0];
2106 iI048dits[1] = iI018dits[1];
2107 iI048dits[2] = 8*iI018dits[2] + 2*iI024dits[2];
2108 gMC->Gsvolu("I048", "BOX ", idtmed[209], iI048dits, 3);
2109
2110
2111 // global SDD volume (sensitive + insensitive)
2112 iI302dits[0] = 3.6250;
2113 iI302dits[1] = 0.0150;
2114 iI302dits[2] = 4.3794;
2115 gMC->Gsvolu("I302", "BOX ", idtmed[278], iI302dits, 3);
2116
2117 // Like for I302 - F.T. March,7-2001
2118 iI402dits[0] = 3.6250;
2119 iI402dits[1] = 0.0150;
2120 iI402dits[2] = 4.3794;
2121 gMC->Gsvolu("I402", "BOX ", idtmed[278], iI402dits, 3);
2122
2123 // SDD ladder of layer 3 - F.T. March,7-2001
2124 iI004dits[0] = iI302dits[0]+0.005;
2125 iI004dits[1] = 2*iI302dits[1]+ySDDsep/2.;
2126 iI004dits[2] = TMath::Abs(zSDDlay3[0]);
2127 if (iI004dits[2] < TMath::Abs(zSDDlay3[5])) {
2128 iI004dits[2] = TMath::Abs(zSDDlay3[5]);
2129 }
2130 iI004dits[2] = iI004dits[2] + iI302dits[2];
2131 gMC->Gsvolu("I004", "BOX ", idtmed[209], iI004dits, 3);
2132
2133 // SDD ladder of layer 4 - F.T. March,7-2001
2134 iI005dits[0] = iI402dits[0]+0.005;
2135 iI005dits[1] = 2*iI402dits[1]+ySDDsep/2.;
2136 iI005dits[2] = TMath::Abs(zSDDlay4[0]);
2137 if (iI005dits[2] < TMath::Abs(zSDDlay4[7])) {
2138 iI005dits[2] = TMath::Abs(zSDDlay4[7]);
2139 }
2140 iI005dits[2] = iI005dits[2] + iI402dits[2];
2141 gMC->Gsvolu("I005", "BOX ", idtmed[209], iI005dits, 3);
2142
2143
2144 // -- block of the SDD ladder foot and end ladder
2145
2146 // ladder foot mother volume
2147 iI028dits[0] = 3.0000;
2148 iI028dits[1] = 0.4000;
2149 iI028dits[2] = 0.9000;
2150 gMC->Gsvolu("I028", "BOX ", idtmed[224], iI028dits, 3);
2151
2152 // positioning-box #1 at SDD end-ladder - F.T. March,7-2001
2153 iI420dits[0] = 0.4500;
2154 iI420dits[1] = 0.4000;
2155 iI420dits[2] = 0.4500;
2156 gMC->Gsvolu("I420", "BOX ", idtmed[264], iI420dits, 3);
2157
2158 // positioning-box #2 at SDD end-ladder - F.T. March,7-2001
2159 iI421dits[0] = 0.;
2160 iI421dits[1] = 0.25;
2161 iI421dits[2] = iI420dits[1];
2162 gMC->Gsvolu("I421", "TUBE", idtmed[209], iI421dits, 3);
2163
2164 // reference ruby-sphere at SDD end-ladder - F.T. March,7-2001
2165 iI422dits[0] = 0.0000;
2166 iI422dits[1] = 0.2000;
2167 iI422dits[2] = 0.0000;
2168 iI422dits[3] = 180.00;
2169 iI422dits[4] = 0.0000;
2170 iI422dits[5] = 360.00;
2171 gMC->Gsvolu("I422", "SPHE", idtmed[277], iI422dits, 6);
2172
2173 // support for ruby-sphere (I422) - F.T. March,7-2001
2174 iI423dits[0] = 0.0000;
2175 iI423dits[1] = 0.1000;
2176 iI423dits[2] = (iI420dits[1]-iI422dits[1])/2.;
2177 gMC->Gsvolu("I423", "TUBE", idtmed[264], iI423dits, 3);
2178
2179 // passage for HV microcables - F.T. March,7-2001
2180 iI424dits[0] = 1.5000;
2181 iI424dits[1] = 0.1500;
2182 iI424dits[2] = iI421dits[2];
2183 gMC->Gsvolu("I424", "BOX ", idtmed[209], iI424dits, 3);
2184
2185 // HV microcables segment at the end ladder - F.T. March,7-2001
2186 iI425dits[0] = 1.350000;
2187 iI425dits[1] = 0.015250;
2188 iI425dits[2] = iI024dits[2];
2189 gMC->Gsvolu("I425", "BOX ", idtmed[279], iI425dits, 3);
2190
2191 // lower edge of SDD ladder frame at end-ladder - part 1
2192 dits[0] = 0.2;
2193 dits[1] = 0.1815;
2194 dits[2] = iI024dits[2];
2195 dits[3] = 0.015;
2196 gMC->Gsvolu("I025", "TRD1", idtmed[208], dits, 4);
2197
2198 // lower edge of SDD ladder frame at end-ladder - part 2
2199 dits[0] = 0.183;
2200 dits[1] = 0.165;
2201 dits[2] = iI024dits[2];
2202 dits[3] = 0.015;
2203 gMC->Gsvolu("I026", "TRD1", idtmed[208], dits, 4);
2204
2205 // new: for the 1st top rod of the structure
2206 // at the end-ladder - F.T. March,7-2001
2207 iI029dits[0] = 0.2;
2208 iI029dits[1] = 0.1815;
2209 iI029dits[2] = 1.0100;
2210 iI029dits[3] = 0.015;
2211 gMC->Gsvolu("I029", "TRD1", idtmed[208], iI029dits, 4);
2212
2213 // new: for the 2nd top rod of the structure
2214 // at the end-ladder - F.T. March,7-2001
2215 iI030dits[0] = 0.1830;
2216 iI030dits[1] = 0.1650;
2217 iI030dits[2] = 1.0100;
2218 iI030dits[3] = 0.0150;
2219 gMC->Gsvolu("I030", "TRD1", idtmed[208], iI030dits, 4);
2220
2221 // inox cooling tubes for the end ladder - F.T. March,7-2001
2222 iI031dits[0] = 0.093;
2223 iI031dits[1] = 0.1;
2224 iI031dits[2] = iI024dits[2];
2225 gMC->Gsvolu("I031", "TUBE", idtmed[264], iI031dits, 3);
2226
2227 if (fluid == 1) {
2228 // cooling water for the end ladder - F.T. March,7-2001
2229 iI032dits[0] = 0;
2230 iI032dits[1] = iI031dits[0];
2231 iI032dits[2] = iI024dits[2];
2232 gMC->Gsvolu("I032", "TUBE", idtmed[211], iI032dits, 3);
2233 } else {
2234 // cooling freon for the end ladder - R.B. March,21-2001
2235 iI032dits[0] = 0;
2236 iI032dits[1] = iI031dits[0];
2237 iI032dits[2] = iI024dits[2];
2238 gMC->Gsvolu("I032", "TUBE", idtmed[212], iI032dits, 3);
2239 }
2240
2241 // -- block of the SDD ladder frame holding the electronics
2242
2243 // edge of the ladder frame - part 1
2244 dits[0] = 0.2;
2245 dits[1] = 0.182;
2246 dits[2] = 3.65;
2247 dits[3] = 0.015;
2248 gMC->Gsvolu("I019", "TRD1", idtmed[208], dits, 4);
2249
2250 // edge of the ladder frame - part 2
2251 dits[0] = 0.183;
2252 dits[1] = 0.165;
2253 dits[2] = 3.65;
2254 dits[3] = 0.015;
2255 gMC->Gsvolu("I020", "TRD1", idtmed[208], dits, 4);
2256
2257 // inclined segments of the ladder frame
2258 dits[0] = 2.23;
2259 dits[1] = 2.1;
2260 dits[2] = 0.05;
2261 dits[3] = 0.03;
2262 gMC->Gsvolu("I021", "TRD1", idtmed[208], dits, 4);
2263
2264 // horiz.segments of the ladders, normal to ladder edges
2265 dits[0] = 2.1;
2266 dits[1] = 2;
2267 dits[2] = 0.06;
2268 dits[3] = 0.04;
2269 gMC->Gsvolu("I022", "TRD1", idtmed[208], dits, 4);
2270
2271 // horiz.segments of the ladders, at 45 deg. to ladder edges
2272 dits[0] = 2.615;
2273 dits[1] = 2.465;
2274 dits[2] = 0.06;
2275 dits[3] = 0.04;
2276 gMC->Gsvolu("I023", "TRD1", idtmed[208], dits, 4);
2277
2278 // supports of the ceramic pins holding the detectors
2279 dits[0] = 0.3;
2280 dits[1] = 0.05;
2281 dits[2] = 0.15;
2282 gMC->Gsvolu("I033", "BOX ", idtmed[208], dits, 3);
2283
2284 // ceramic pins holding the detectors
2285 dits[0] = 0;
2286 dits[1] = 0.05;
2287 dits[2] = 0.225;
2288 gMC->Gsvolu("I034", "TUBE", idtmed[277], dits, 3);
2289
2290 // holders of cooling tubes
2291 iI035dits[0] = 0.1;
2292 iI035dits[1] = 0.15;
2293 iI035dits[2] = 0.2;
2294 gMC->Gsvolu("I035", "TUBE", idtmed[208], iI035dits, 3);
2295
2296 // top holders of microcables
2297 dits[0] = 0.2;
2298 dits[1] = 0.01;
2299 dits[2] = 0.05;
2300 gMC->Gsvolu("I036", "BOX ", idtmed[208], dits, 3);
2301
2302 // inox cooling tubes - F.T. March,7-2001
2303 iI037dits[0] = 0.093;
2304 iI037dits[1] = 0.1;
2305 iI037dits[2] = iI018dits[2];
2306 gMC->Gsvolu("I037", "TUBE", idtmed[264], iI037dits, 3);
2307
2308 if (fluid == 1) {
2309 // cooling water - F.T. March,7-2001
2310 iI038dits[0] = 0;
2311 iI038dits[1] = iI037dits[0];
2312 iI038dits[2] = iI018dits[2];
2313 gMC->Gsvolu("I038", "TUBE", idtmed[211], iI038dits, 3);
2314 } else {
2315 // cooling freon - R.B. March,21-2001
2316 iI038dits[0] = 0;
2317 iI038dits[1] = iI037dits[0];
2318 iI038dits[2] = iI018dits[2];
2319 gMC->Gsvolu("I038", "TUBE", idtmed[212], iI038dits, 3);
2320 }
2321 // -- block of the SDD electronics (heat bridge, chips, hybrid, anode microcable)
2322
2323 // SDD heat bridge - F.T. March,7-2001
2324 iI039dits[0] = 1.1000;
2325 iI039dits[1] = 0.0087;
2326 iI039dits[2] = 3.2500;
2327 gMC->Gsvolu("I039", "BOX ", idtmed[268], iI039dits, 3);
2328
2329 // SDD clip part 1
2330 dits[0] = 0.25;
2331 dits[1] = 0.01;
2332 dits[2] = iI039dits[2];
2333 gMC->Gsvolu("I040", "BOX ", idtmed[268], dits, 3);
2334
2335 // SDD clip part 2
2336 iI041dits[0] = 0.1;
2337 iI041dits[1] = 0.12;
2338 iI041dits[2] = iI039dits[2];
2339 iI041dits[3] = 90;
2340 iI041dits[4] = 320;
2341 gMC->Gsvolu("I041", "TUBS", idtmed[268], iI041dits, 5);
2342
2343
2344 // SDD PASCAL - F.T. March,7-2001
2345 iI042dits[0] = 0.5000;
2346 iI042dits[1] = 0.0175;
2347 iI042dits[2] = 0.5000;
2348 gMC->Gsvolu("I042", "BOX ", idtmed[206], iI042dits, 3);
2349
2350 // SDD AMBRA - F.T. March,7-2001
2351 iI043dits[0] = 0.3500;
2352 iI043dits[1] = 0.0175;
2353 iI043dits[2] = 0.5000;
2354 gMC->Gsvolu("I043", "BOX ", idtmed[206], iI043dits, 3);
2355
2356 // SDD capacitors - F.T. March,7-2001
2357 iI051dits[0] = 0.1400;
2358 iI051dits[1] = 0.0350;
2359 iI051dits[2] = 0.0625;
2360 gMC->Gsvolu("I051", "BOX ", idtmed[276], iI051dits, 3);
2361
2362 // SDD hybrid circuit - F.T. March,7-2001
2363 iI052dits[0] = 1.725000;
2364 iI052dits[1] = 0.003743;
2365 iI052dits[2] = iI039dits[2];
2366 gMC->Gsvolu("I052", "BOX ", idtmed[281], iI052dits, 3);
2367
2368 // SDD anode microcable : changed - F.T. March,7-2001
2369 iI044dits[0] = iI018dits[2];
2370 iI044dits[1] = iI039dits[2];
2371 iI044dits[2] = 0.00084;
2372 iI044dits[3] = (15.189149/(iI044dits[0]+iI044dits[1]))/2;
2373 gMC->Gsvolu("I044", "TRD1", idtmed[282], iI044dits, 4);
2374 volI044 = ((2*iI044dits[0] + 2*iI044dits[1]) * 2*iI044dits[2])/2 * 2*iI044dits[3];
2375
2376 // SDD electronics box - F.T. March,7-2001
2377 iI050dits[1] = iI039dits[1]+iI052dits[1]+iI051dits[1]+iI044dits[2];
2378 iI050dits[0] = iI018dits[1]/cos(30.*3.14159/180.)-iI050dits[1]*sin(30.*3.14159/180.);
2379 iI050dits[2] = iI018dits[2];
2380 gMC->Gsvolu("I050", "BOX ", idtmed[209], iI050dits, 3);
2381
2382 // SDD sensitive volume
2383 dits[0] = 3.50850;
2384 dits[1] = 0.01499; // not 0.015 because it is included into I302 which is 0.015
2385 dits[2] = 3.76320;
2386 gMC->Gsvolu("ITS3", "BOX ", idtmed[200], dits, 3);
2387
2388 // Like for ITS3 - F.T. March,7-2001
2389 dits[0] = 3.50850;
2390 dits[1] = 0.01499; // not 0.015 because it is included into I402 which is 0.015
2391 dits[2] = 3.76320;
2392 gMC->Gsvolu("ITS4", "BOX ", idtmed[200], dits, 3);
2393 }
2394
2395 // --- Define SSD volumes ------------------------------------------
2396
2397 if (! AliITSInitGeometry::SSDIsTGeoNative()) {
2398 dits[0] = 0;
2399 dits[1] = 360;
2400 dits[2] = 6;
2401 dits[3] = -57.45;
2402 dits[4] = 43.6;
2403 dits[5] = 48;
2404 dits[6] = -49.15;
2405 dits[7] = 43.6;
2406 dits[8] = 48;
2407 dits[9] = -49.15;
2408 dits[10] = 36.9;
2409 dits[11] = 48;
2410 dits[12] = 50.55;
2411 dits[13] = 36.9;
2412 dits[14] = 48;
2413 dits[15] = 50.55;
2414 dits[16] = 43.6;
2415 dits[17] = 48;
2416 dits[18] = 57.45;
2417 dits[19] = 43.6;
2418 dits[20] = 48;
2419 //gMC->Gsvolu("IT56", "PCON", idtmed[220], dits, 21); // SSD air
2420 gMC->Gsvolu("IT56", "PCON", idtmed[204], dits, 21); // air
2421
2422 dits[0] = 3.4;
2423 dits[1] = 1.955;
2424 dits[2] = 56.5;
2425 gMC->Gsvolu("I570", "BOX ", idtmed[204], dits, 3);
2426
2427 dits[0] = 3.75;
2428 dits[1] = 0.045;
2429 dits[2] = 50.975;
2430 gMC->Gsvolu("I569", "BOX ", idtmed[204], dits, 3);
2431
2432 dits[0] = 3.4;
2433 dits[1] = 1.955;
2434 dits[2] = 47;
2435 gMC->Gsvolu("I571", "BOX ", idtmed[204], dits, 3);
2436
2437 dits[0] = 3.75;
2438 dits[1] = 0.045;
2439 dits[2] = 43.3;
2440 gMC->Gsvolu("I565", "BOX ", idtmed[204], dits, 3);
2441
2442 dits[0] = 3.4;
2443 dits[1] = 1.955;
2444 dits[2] = 3.15;
2445 gMC->Gsvolu("I553", "BOX ", idtmed[204], dits, 3);
2446
2447 dits[0] = 3.405;
2448 dits[1] = 1.955;
2449 dits[2] = 1.955;
2450 gMC->Gsvolu("I523", "BOX ", idtmed[204], dits, 3);
2451
2452 dits[0] = 3.75;
2453 dits[1] = 0.015;
2454 dits[2] = 2.1;
2455 gMC->Gsvolu("I566", "BOX ", idtmed[206], dits, 3);
2456
2457 dits[0] = 3.4;
2458 dits[1] = 1.955;
2459 dits[2] = 3.15;
2460 gMC->Gsvolu("I544", "BOX ", idtmed[204], dits, 3);
2461
2462 dits[0] = 3.41;
2463 dits[1] = 1.955;
2464 dits[2] = 1.955;
2465 gMC->Gsvolu("I516", "BOX ", idtmed[204], dits, 3);
2466
2467 dits[0] = 3.75;
2468 dits[1] = 0.015;
2469 dits[2] = 2.1;
2470 gMC->Gsvolu("I562", "BOX ", idtmed[206], dits, 3);
2471
2472 if (fluid == 1) {
2473 dits[0] = 0;
2474 dits[1] = 0.07;
2475 dits[2] = 3.15;
2476 gMC->Gsvolu("I559", "TUBE", idtmed[211], dits, 3); // set water as cooling fluid
2477 } else {
2478 dits[0] = 0;
2479 dits[1] = 0.07;
2480 dits[2] = 3.15;
2481 gMC->Gsvolu("I559", "TUBE", idtmed[212], dits, 3); // set freon as cooling fluid
2482 }
2483
2484 dits[0] = 0.07;
2485 dits[1] = 0.1;
2486 dits[2] = 3.15;
2487 gMC->Gsvolu("I560", "TUBE", idtmed[210], dits, 3);
2488
2489 dits[0] = 0.225;
2490 dits[1] = 0.195;
2491 dits[2] = 3.15;
2492 dits[3] = 0.025;
2493 gMC->Gsvolu("I558", "TRD1", idtmed[203], dits, 4);
2494
2495 dits[0] = 0.25;
2496 dits[1] = 0.22;
2497 dits[2] = 3.15;
2498 dits[3] = 0.025;
2499 gMC->Gsvolu("I557", "TRD1", idtmed[203], dits, 4);
2500
2501 dits[0] = 2.17;
2502 dits[1] = 0.035;
2503 dits[2] = 0.05;
2504 gMC->Gsvolu("I556", "BOX ", idtmed[203], dits, 3);
2505
2506 dits[0] = 2 ;
2507 dits[1] = 0.035;
2508 dits[2] = 0.05;
2509 gMC->Gsvolu("I554", "BOX ", idtmed[203], dits, 3);
2510
2511 dits[0] = 2.675;
2512 dits[1] = 0.035;
2513 dits[2] = 0.05;
2514 gMC->Gsvolu("I555", "BOX ", idtmed[203], dits, 3);
2515
2516 dits[0] = 0.3;
2517 dits[1] = 0.15;
2518 dits[2] = 0.15;
2519 gMC->Gsvolu("I561", "BOX ", idtmed[203], dits, 3);
2520
2521 dits[0] = 0.025;
2522 dits[1] = 0.025;
2523 dits[2] = 0.05;
2524 gMC->Gsvolu("I519", "BOX ", idtmed[214], dits, 3);
2525
2526 dits[0] = 0.304;
2527 dits[1] = 0.0275;
2528 dits[2] = 0.432;
2529 gMC->Gsvolu("I521", "BOX ", idtmed[206], dits, 3);
2530
2531 dits[0] = 0.16;
2532 dits[1] = 0.08;
2533 dits[2] = 0.08;
2534 gMC->Gsvolu("I520", "BOX ", idtmed[214], dits, 3);
2535
2536 dits[0] = 3.4;
2537 dits[1] = 0.015;
2538 dits[2] = 0.525;
2539 gMC->Gsvolu("I518", "BOX ", idtmed[203], dits, 3);
2540
2541 dits[0] = 0.15;
2542 dits[1] = 0.105;
2543 dits[2] = 0.29;
2544 dits[3] = 0.08;
2545 gMC->Gsvolu("I522", "TRD1", idtmed[203], dits, 4);
2546
2547 dits[0] = 0.07;
2548 dits[1] = 0.1;
2549 dits[2] = 1.955;
2550 gMC->Gsvolu("I542", "TUBE", idtmed[210], dits, 3);
2551
2552 if (fluid == 1) {
2553 dits[0] = 0;
2554 dits[1] = 0.07;
2555 dits[2] = 1.955;
2556 gMC->Gsvolu("I541", "TUBE", idtmed[211], dits, 3); // set water as cooling fluid
2557 } else {
2558 dits[0] = 0;
2559 dits[1] = 0.07;
2560 dits[2] = 1.955;
2561 gMC->Gsvolu("I541", "TUBE", idtmed[212], dits, 3); // set freon as cooling fluid
2562 }
2563
2564 dits[0] = 0.3;
2565 dits[1] = 0.15;
2566 dits[2] = 0.15;
2567 gMC->Gsvolu("I543", "BOX ", idtmed[203], dits, 3);
2568
2569 dits[0] = 0.25;
2570 dits[1] = 0.22;
2571 dits[2] = 1.955;
2572 dits[3] = 0.025;
2573 gMC->Gsvolu("I537", "TRD1", idtmed[203], dits, 4);
2574
2575 dits[0] = 0.225;
2576 dits[1] = 0.195;
2577 dits[2] = 1.955;
2578 dits[4] = 0.025;
2579 gMC->Gsvolu("I538", "TRD1", idtmed[203], dits, 4);
2580
2581 dits[0] = 2.17;
2582 dits[1] = 0.035;
2583 dits[2] = 0.05;
2584 gMC->Gsvolu("I536", "BOX ", idtmed[203], dits, 3);
2585
2586 dits[0] = 2.675;
2587 dits[1] = 0.035;
2588 dits[2] = 0.05;
2589 gMC->Gsvolu("I535", "BOX ", idtmed[203], dits, 3);
2590
2591 dits[0] = 2;
2592 dits[1] = 0.035;
2593 dits[2] = 0.05;
2594 gMC->Gsvolu("I534", "BOX ", idtmed[203], dits, 3);
2595
2596 dits[0] = 0;
2597 dits[1] = 0.05;
2598 dits[2] = 0.17;
2599 gMC->Gsvolu("I540", "TUBE", idtmed[203], dits, 3);
2600
2601 dits[0] = 0;
2602 dits[1] = 0.05;
2603 dits[2] = 0.205;
2604 gMC->Gsvolu("I539", "TUBE", idtmed[203], dits, 3);
2605
2606 dits[0] = 3.65;
2607 dits[1] = 0.015;
2608 dits[2] = 2;
2609 gMC->Gsvolu("ITS6", "BOX ", idtmed[200], dits, 3);
2610
2611 if (fluid == 1) {
2612 dits[0] = 0;
2613 dits[1] = 0.07;
2614 dits[2] = 3.15;
2615 gMC->Gsvolu("I550", "TUBE", idtmed[211], dits, 3); // set water as cooling fluid
2616 } else {
2617 dits[0] = 0;
2618 dits[1] = 0.07;
2619 dits[2] = 3.15;
2620 gMC->Gsvolu("I550", "TUBE", idtmed[212], dits, 3); // set freon as cooling fluid
2621 }
2622
2623 dits[0] = 0.07;
2624 dits[1] = 0.1;
2625 dits[2] = 3.15;
2626 gMC->Gsvolu("I551", "TUBE", idtmed[210], dits, 3);
2627
2628 dits[0] = 0.225;
2629 dits[1] = 0.195;
2630 dits[2] = 3.15;
2631 dits[3] = 0.025;
2632 gMC->Gsvolu("I549", "TRD1", idtmed[203], dits, 4);
2633
2634 dits[0] = 0.25;
2635 dits[1] = 0.22;
2636 dits[2] = 3.15;
2637 dits[3] = 0.025;
2638 gMC->Gsvolu("I548", "TRD1", idtmed[203], dits, 4);
2639
2640 dits[0] = 2.17;
2641 dits[1] = 0.035;
2642 dits[2] = 0.05;
2643 gMC->Gsvolu("I547", "BOX ", idtmed[203], dits, 3);
2644
2645 dits[0] = 2;
2646 dits[1] = 0.035;
2647 dits[2] = 0.05;
2648 gMC->Gsvolu("I545", "BOX ", idtmed[203], dits, 3);
2649
2650 dits[0] = 2.675;
2651 dits[1] = 0.035;
2652 dits[2] = 0.05;
2653 gMC->Gsvolu("I546", "BOX ", idtmed[203], dits, 3);
2654
2655 dits[0] = 0.3;
2656 dits[1] = 0.15;
2657 dits[2] = 0.15;
2658 gMC->Gsvolu("I552", "BOX ", idtmed[203], dits, 3);
2659
2660 dits[0] = 0.304;
2661 dits[1] = 0.0275;
2662 dits[2] = 0.4322;
2663 gMC->Gsvolu("I515", "BOX ", idtmed[206], dits, 3);
2664
2665 dits[0] = 0.025;
2666 dits[1] = 0.025;
2667 dits[2] = 0.05;
2668 gMC->Gsvolu("I513", "BOX ", idtmed[214], dits, 3);
2669
2670 dits[0] = 0.16;
2671 dits[1] = 0.08;
2672 dits[2] = 0.08;
2673 gMC->Gsvolu("I514", "BOX ", idtmed[214], dits, 3);
2674
2675 dits[0] = 3.4;
2676 dits[1] = 0.015;
2677 dits[2] = 0.525;
2678 gMC->Gsvolu("I512", "BOX ", idtmed[203], dits, 3);
2679
2680 dits[0] = 0.225;
2681 dits[1] = 0.195;
2682 dits[2] = 1.955;
2683 dits[3] = 0.025;
2684 gMC->Gsvolu("I528", "TRD1", idtmed[203], dits, 4);
2685
2686 dits[0] = 0.25;
2687 dits[1] = 0.22;
2688 dits[2] = 1.955;
2689 dits[3] = 0.025;
2690 gMC->Gsvolu("I527", "TRD1", idtmed[203], dits, 4);
2691
2692 dits[0] = 2.17;
2693 dits[1] = 0.035;
2694 dits[2] = 0.05;
2695 gMC->Gsvolu("I526", "BOX ", idtmed[203], dits, 3);
2696
2697 dits[0] = 2.675;
2698 dits[1] = 0.035;
2699 dits[2] = 0.05;
2700 gMC->Gsvolu("I525", "BOX ", idtmed[203], dits, 3);
2701
2702 dits[0] = 2;
2703 dits[1] = 0.035;
2704 dits[2] = 0.05;
2705 gMC->Gsvolu("I524", "BOX ", idtmed[203], dits, 3);
2706
2707 dits[0] = 0;
2708 dits[1] = 0.05;
2709 dits[2] = 0.205;
2710 gMC->Gsvolu("I529", "TUBE", idtmed[203], dits, 3);
2711
2712 dits[0] = 0;
2713 dits[1] = 0.05;
2714 dits[2] = 0.17;
2715 gMC->Gsvolu("I530", "TUBE", idtmed[203], dits, 3);
2716
2717 dits[0] = 0.15;
2718 dits[1] = 0.105;
2719 dits[2] = 0.29;
2720 dits[3] = 0.08;
2721 gMC->Gsvolu("I517", "TRD1", idtmed[203], dits, 4);
2722
2723 if (fluid == 1) {
2724 dits[0] = 0;
2725 dits[1] = 0.07;
2726 dits[2] = 1.955;
2727 gMC->Gsvolu("I531", "TUBE", idtmed[211], dits, 3); // set water as cooling fluid
2728 } else {
2729 dits[0] = 0;
2730 dits[1] = 0.07;
2731 dits[2] = 1.955;
2732 gMC->Gsvolu("I531", "TUBE", idtmed[212], dits, 3); // set freon as cooling fluid
2733 }
2734
2735 dits[0] = 0.07;
2736 dits[1] = 0.1;
2737 dits[2] = 1.955;
2738 gMC->Gsvolu("I532", "TUBE", idtmed[210], dits, 3);
2739
2740 dits[0] = 0.3;
2741 dits[1] = 0.15;
2742 dits[2] = 0.15;
2743 gMC->Gsvolu("I533", "BOX ", idtmed[203], dits, 3);
2744
2745 dits[0] = 3.65;
2746 dits[1] = 0.015;
2747 dits[2] = 2;
2748 gMC->Gsvolu("ITS5", "BOX ", idtmed[200], dits, 3);
2749 }
2750
2751
2752 // --- Define volumes of shield of SPD ----------------
2753
2754 if (! AliITSInitGeometry::SPDshieldIsTGeoNative()) {
2755 dits[0] = 8.37;
2756 dits[1] = 9.93;
2757 dits[2] = 25;
2758 gMC->Gsvolu("IC01", "TUBE", idtmed[289], dits, 3);
2759
2760 dits[0] = 8.3;
2761 dits[1] = 9.995;
2762 dits[2] = 17.5/2.;
2763 gMC->Gsvolu("IC02", "TUBE", idtmed[289], dits, 3);
2764 }
2765
2766 Double_t s1,s2,b1,b2;
2767
2768 if (! AliITSInitGeometry::SDDconeIsTGeoNative()) {
2769
2770 // --- Define volume of first cylinder between SPD and SDD --------------
2771 dits[0] = (21.-0.128)/2.;
2772 dits[1] = 21./2.;
2773 dits[2] = 39.4;
2774 gMC->Gsvolu("ICY1", "TUBE", idtmed[208], dits, 3);
2775
2776 // --- Define volume of second cylinder between SDD and SSD --------------
2777 dits[0] = (59.5-0.128)/2.;
2778 dits[1] = 59.5/2.;
2779 dits[2] = 56.2; // was 57
2780 gMC->Gsvolu("ICY2", "TUBE", idtmed[208], dits, 3);
2781
2782 // --- Define volumes of SDD cone ----------------------------------
2783
2784 dits[0] = 0;
2785 dits[1] = 360;
2786 dits[2] = 12;
bf210566 2787 //
108bd0fe 2788 dits[3] = -59.7;
2789 dits[4] = 27;
2790 dits[5] = 28.6;
bf210566 2791
108bd0fe 2792 dits[6] = -42.7;
2793 dits[7] = 10;
2794 dits[8] = 28.6;
bf210566 2795
2796 // dits[9] = -34.65;
2797 dits[9] = -33.55;
108bd0fe 2798 dits[10] = 10;
2799 dits[11] = 28.6;
bf210566 2800
2801 // dits[12] = -34.65;
2802 dits[12] = -33.55;
108bd0fe 2803 dits[13] = 10;
2804 dits[14] = 23.495;
bf210566 2805
2806 //dits[15] = -23.7;
2807 dits[15] = -26.2;
108bd0fe 2808 dits[16] = 10;
2809 dits[17] = 23.495;
bf210566 2810
2811 //dits[18] = -23.7;
2812 dits[18] = -26.2;
108bd0fe 2813 dits[19] = 10;
2814 dits[20] = 14.595;
bf210566 2815
2816 //dits[21] = 23.7;
2817 dits[21] = 26.2;
108bd0fe 2818 dits[22] = 10;
2819 dits[23] = 14.595;
bf210566 2820
2821 //dits[24] = 23.7;
2822 dits[24] = 26.2;
108bd0fe 2823 dits[25] = 10;
2824 dits[26] = 23.495;
bf210566 2825
2826// dits[27] = 34.65;
2827 dits[27] = 33.55;
108bd0fe 2828 dits[28] = 10;
2829 dits[29] = 23.495;
bf210566 2830
2831// dits[30] = 34.65;
2832 dits[30] = 33.55;
108bd0fe 2833 dits[31] = 10;
2834 dits[32] = 28.6;
bf210566 2835
108bd0fe 2836 dits[33] = 42.7;
2837 dits[34] = 10;
2838 dits[35] = 28.6;
bf210566 2839
108bd0fe 2840 dits[36] = 59.7;
2841 dits[37] = 27.2637;
bf210566 2842 dits[38] = 28.6;
2843
2844 if (! AliITSInitGeometry::SDDIsTGeoNative()) {
2845 dits[9] = -34.65;
2846 dits[12] = -34.65;
2847 dits[15] = -23.7;
2848 dits[18] = -23.7;
2849 dits[21] = 23.7;
2850 dits[24] = 23.7;
2851 dits[27] = 34.65;
2852 dits[30] = 34.65;
2853 }
108bd0fe 2854 gMC->Gsvolu("IS02", "PCON", idtmed[204], dits, 39);
2855
2856 dits[0] = 0;
2857 dits[1] = 360;
2858 dits[2] = 6;
2859 dits[3] = 38.65;
2860 dits[4] = 10.75;
2861 dits[5] = 12.25;
2862 dits[6] = 40.15;
2863 dits[7] = 10.75;
2864 dits[8] = 13.96;
2865 dits[9] = 40.15;
2866 dits[10] = 12.46;
2867 dits[11] = 13.96;
2868 dits[12] = 55.75;
2869 dits[13] = 27;
2870 dits[14] = 28.5;
2871 dits[15] = 55.75;
2872 dits[16] = 27;
2873 dits[17] = 28.5;
2874 dits[18] = 57.25;
2875 dits[19] = 27;
2876 dits[20] = 28.5;
2877// gMC->Gsvolu("I093", "PCON", idtmed[272], dits, 21); // SDD cone
2878 gMC->Gsvolu("I093", "PCON", idtmed[287], dits, 21); // SDD cone
2879
2880 // Redefined to make adding material for cables easier (FMD geometry)
2881 s1 = (dits[13]-dits[10])/(dits[12]-dits[9]); // Slope of conical section
2882 s2 = (dits[14]-dits[11])/(dits[12]-dits[9]); // Slope of conical section
2883 b1 = dits[13] - s1*dits[12]; // inside cone axis intersept
2884 b2 = dits[14] - s2*dits[12]; // outside cone axis intersept
2885 dits[0] = 0; //dits[0] = 0;
2886 dits[1] = 50; //dits[1] = 50;
2887 dits[2] = 4; //dits[2] = 3;
2888
2889 dits[4] = 14.0; //dits[4] = 14; // r inner
2890 dits[5] = dits[4]; //dits[5] = 18.75; // r outer
2891 dits[3] = (dits[4]-b2)/s2; //dits[3] = 39; // Z
2892
2893 dits[7] = dits[4]; //dits[7] = 14; // r inner
2894 dits[6] = (dits[7]-b1)/s1; //dits[6] = 46.7-3; // Z
2895 dits[8] = s2*dits[6]+b2; //dits[8] = 18.75; // r outer
2896
2897 dits[11] = 18.75; //dits[11] = 18.75; // r outer
2898 dits[9] = (dits[11]-b2)/s2; //dits[9] = 51.45-3; // Z
2899 dits[10] = s1*dits[9]+b1; //dits[10] = 18.75; // r inner
2900
2901 dits[13] = dits[11]; // r inner
2902 dits[14] = dits[11]; // r outer
2903 dits[12] = (dits[13]-b1)/s1; // Z
2904// gMC->Gsvolu("I099", "PCON", idtmed[204], dits, 12); // SDD 3 cone hole
2905 gMC->Gsvolu("I099", "PCON", idtmed[285], dits, 15); // SDD 3 cone hole
2906
2907 dits[0] = 0; //dits[0] = 0;
2908 dits[1] = 25; //dits[1] = 25;
2909 dits[2] = 4; //dits[2] = 3;
2910
2911 dits[4] = 23.4; //dits[4] = 23.4; // r inner
2912 dits[5] = dits[4]; //dits[5] = 26.4; // r outer
2913 dits[3] = (dits[4]-b2)/s2; //dits[3] = 49; // Z
2914
2915 dits[7] = dits[4]; //dits[7] = 23.4; // r inner
2916 dits[6] = (dits[7]-b1)/s1; //dits[6] = 56.1-3; // Z
2917 dits[8] = s2*dits[6]+b2; //dits[8] = 26.4; // r outer
2918
2919 dits[11] = 26.4; //dits[11] = 26.4; // r outer
2920 dits[9] = (dits[11]-b2)/s2; //dits[9] = 59.1-3; // Z
2921 dits[10] = s1*dits[9]+b1; //dits[10] = 26.4; // r inner
2922
2923 dits[13] = dits[11]; // r inner
2924 dits[14] = dits[11]; // r outer
2925 dits[12] = (dits[13]-b1)/s1; // Z
2926// gMC->Gsvolu("I200", "PCON", idtmed[204], dits, 12); // SDD 4 cone hole
2927 gMC->Gsvolu("I200", "PCON", idtmed[285], dits, 15); // SDD 4 cone hole
2928 //Begin_Html
2929 /*
2930 <img src="http://www.Physics.ohio-state.edu/~nilsen/ITS/ITS_FMD_PMD_Geom.eps">
2931 </pre>
2932 <br clear=left>
2933 <font size=+2 color=blue>
2934 <p>SDD Support cone with other forward detectors. Shown in
2935 brown are a posible cabling layout.
2936 </font>
2937 */
2938 //End_Html
2939 dits[0] = 10.0;
2940 dits[1] = 10.5;
2941 dits[2] = 0.25;
2942 gMC->Gsvolu("I090", "TUBE", idtmed[224], dits, 3); // SDD cylinder flange
2943
2944 dits[0] = 21.95;
2945 dits[1] = 22.95;
2946 dits[2] = 1;
2947 gMC->Gsvolu("I098", "TUBE", idtmed[283], dits, 3); // ladder support on layer 4
2948
2949 dits[0] = 13.1;
2950 dits[1] = 14.1;
2951 dits[2] = 1;
2952 gMC->Gsvolu("I097", "TUBE", idtmed[283], dits, 3); // ladder support on layer 3
2953
2954 dits[0] = 1;
2955 dits[1] = 1;
2956 dits[2] = 7.74;
2957 gMC->Gsvolu("I202", "BOX ", idtmed[272], dits, 3);
2958
bf210566 2959 if (AliITSInitGeometry::SDDIsTGeoNative())
2960 dits[0] = 0.9;
2961 else
2962 dits[0] = 1;
108bd0fe 2963 dits[1] = 1;
2964 dits[2] = 9.14;
2965 gMC->Gsvolu("I203", "BOX ", idtmed[272], dits, 3);
2966
2967 dits[0] = 21.95;
2968 dits[1] = 22.95;
2969 dits[2] = 1;
2970 gMC->Gsvolu("I095", "TUBE", idtmed[224], dits, 3);
2971
2972 dits[0] = 3;
2973 dits[1] = 2.7;
2974 dits[2] = 1;
2975 dits[3] = 0.63;
2976 gMC->Gsvolu("I096", "TRD1", idtmed[264], dits, 4);
2977
2978 dits[0] = 13.1;
2979 dits[1] = 14.1;
2980 dits[2] = 1;
2981 gMC->Gsvolu("I094", "TUBE", idtmed[224], dits, 3);
2982 }
2983
2984 if (! AliITSInitGeometry::SSDconeIsTGeoNative()) {
2985 // --- Define volumes of SSD cone ----------------------------------
2986
2987 dits[0] = 0;
2988 dits[1] = 360;
2989 dits[2] = 12;
bf210566 2990
108bd0fe 2991 dits[3] = -zmax;
bf210566 2992 dits[4] = 46;
2993 dits[5] = 49.25;
2994
108bd0fe 2995 dits[6] = -61.2;
2996 dits[7] = 28.7;
bf210566 2997 dits[8] = 49.25;
2998
108bd0fe 2999 dits[9] = -57.5;
3000 dits[10] = 28.7;
bf210566 3001 dits[11] = 49.25;
3002
108bd0fe 3003 dits[12] = -57.5;
3004 dits[13] = 28.7;
3005 dits[14] = 43.5;
bf210566 3006
3007 //dits[15] = -49.2;
3008 dits[15] = -53.4-0.75;
108bd0fe 3009 dits[16] = 28.7;
3010 dits[17] = 43.5;
bf210566 3011
3012 //dits[18] = -49.2;
3013 dits[18] = -53.4-0.75;
108bd0fe 3014 dits[19] = 28.7;
3015 dits[20] = 36.85;
bf210566 3016
3017 //dits[21] = 50.6;
3018 dits[21] = 53.4+0.75;
108bd0fe 3019 dits[22] = 28.7;
3020 dits[23] = 36.85;
bf210566 3021
3022 dits[24] = 53.4+0.75;
3023 //dits[24] = 50.6;
108bd0fe 3024 dits[25] = 28.7;
3025 dits[26] = 43.5;
bf210566 3026
108bd0fe 3027 dits[27] = 57.5;
3028 dits[28] = 28.7;
3029 dits[29] = 43.5;
bf210566 3030
108bd0fe 3031 dits[30] = 57.5;
3032 dits[31] = 28.7;
bf210566 3033 dits[32] = 49.25;
3034
108bd0fe 3035 dits[33] = 61.2;
3036 dits[34] = 28.7;
3037 dits[35] = 49.25;
3038 dits[36] = zmax;
3039 dits[37] = 46;
bf210566 3040 dits[38] = 49.25;
3041
3042 if (! AliITSInitGeometry::SSDIsTGeoNative()) {
3043 dits[15] = -49.2;
3044 dits[18] = -49.2;
3045 dits[21] = 50.6;
3046 dits[24] = 50.6;
3047 }
3048
108bd0fe 3049 gMC->Gsvolu("IS01", "PCON", idtmed[204], dits, 39); // SSD cone mother volume
3050
3051 dits[0] = 0;
3052 dits[1] = 360;
3053 dits[2] = 6;
3054 dits[3] = -zmax;
3055 dits[4] = 47.75;
3056 dits[5] = 49.25;
3057 dits[6] = -zmax+2.;
3058 dits[7] = 47.75;
3059 dits[8] = 49.25;
3060 dits[9] = -71.2819;
3061 dits[10] = 46.75;
3062 dits[11] = 49.0319;
3063 dits[12] = -57.25; // was 58.5
3064 dits[13] = 32.9681;
3065 dits[14] = 34.75;
3066 dits[15] = -57.25; // was 58.5
3067 dits[16] = 30;
3068 dits[17] = 34.75;
3069 dits[18] = -55.75; // was 57
3070 dits[19] = 30;
3071 dits[20] = 32.25; // was 31.5
3072// gMC->Gsvolu("I212", "PCON", idtmed[272], dits, 21); // SSD cone
3073 gMC->Gsvolu("I212", "PCON", idtmed[288], dits, 21); // SSD cone
3074
3075 s1 = (dits[10]-dits[13])/(dits[9]-dits[12]); // Slope of conical section
3076 s2 = (dits[11]-dits[14])/(dits[9]-dits[12]); // Slope of conical section
3077 b1 = dits[13] - s1*dits[12]; // inside cone axis intersept
3078 b2 = dits[14] - s2*dits[12]; // outside cone axis intersept
3079 dits[0] = 0;
3080 dits[1] = 25;
3081 dits[2] = 4; //dits[2] = 5;
3082
3083 dits[4] = 45.50; //dits[4] = 45.5; // r inner
3084 dits[5] = dits[4]; //dits[5] = 45.5; // r outer
3085 dits[3] = (dits[4] - b1)/s1; //dits[3] = -zmax+3; // z
3086
3087 dits[8] = dits[4]; //dits[8] = 45.5; // r outer
3088 dits[6] = (dits[8] - b2)/s2; //dits[6] = -69.7+3;; // z
3089 dits[7] = s1*dits[6] + b1; //dits[7] = 37; // r inner
3090
3091 dits[10] = 37.00; //dits[10] = 37; // r inner
3092 dits[9] = (dits[10]-b1)/s1; //dits[9] = -68.5+3;; // z
3093 dits[11] = s2*dits[9]+b2; //dits[11] = 45.5; // r outer
3094
3095 dits[13] = dits[10]; //dits[13] = 37; // r inner
3096 dits[14] = dits[13]; //dits[14] = 45.5; // r outer
3097 dits[12] = (dits[14] - b2)/s2; //dits[12] = -68.5+4.8;; // z
3098// gMC->Gsvolu("I215", "PCON", idtmed[204], dits, 18); // SSD cone hole
3099 gMC->Gsvolu("I215", "PCON", idtmed[286], dits, 15); // SSD cone hole
3100 //Begin_Html
3101 /*
3102 <img src="http://www.Physics.ohio-state.edu/~nilsen/ITS/ITS_FMD_PMD_Geom.eps">
3103 </pre>
3104 <br clear=left>
3105 <font size=+2 color=blue>
3106 <p>SSD Support cone with other forward detectors. Shown in
3107 brown are a posible cabling layout.
3108 </font>
3109 */
3110 //End_Html
3111
3112 dits[0] = 28.75;
3113 dits[1] = 29.75;
3114 dits[2] = 0.5;
3115 gMC->Gsvolu("I211", "TUBE", idtmed[224], dits, 3); // SSD cylinder flange
3116
3117 dits[0] = 35.8;
3118 dits[1] = 36.8;
3119 dits[2] = 1;
3120 gMC->Gsvolu("I217", "TUBE", idtmed[283], dits, 3); // ladder support on layer 5
3121
3122 dits[0] = 41.4;
3123 dits[1] = 42.4;
3124 dits[2] = 1;
3125 gMC->Gsvolu("I219", "TUBE", idtmed[283], dits, 3); // ladder support on layer 6
3126
3127 dits[0] = 42.05+5.;
3128 dits[1] = 42.55+5.;
3129 dits[2] = 1.25;
3130 gMC->Gsvolu("I214", "TUBE", idtmed[224], dits, 3); // layer 6 electronic support
3131 // this will change after PPR
3132 dits[0] = 37.05+5.;
3133 dits[1] = 37.55+5.;
3134 dits[2] = 1.25;
3135 gMC->Gsvolu("I213", "TUBE", idtmed[224], dits, 3); // layer 5 electronic support
3136 // this will change after PPR
3137
3138 dits[0] = 0;
3139 dits[1] = 3.2;
3140 dits[2] = 9;
3141 dits[3] = -14;
3142 dits[4] = 30.5;
3143 dits[5] = 33.5;
3144 dits[6] = -9.85;
3145 dits[7] = 30.5;
3146 dits[8] = 33.5;
3147 dits[9] = -9.85;
3148 dits[10] = 30.5;
3149 dits[11] = 43.45;
3150 dits[12] = -7.85;
3151 dits[13] = 30.5;
3152 dits[14] = 43.45;
3153 dits[15] = -7.85;
3154 dits[16] = 30.5;
3155 dits[17] = 36.5;
3156 dits[18] = -7;
3157 dits[19] = 30.5;
3158 dits[20] = 36.5;
3159 dits[21] = -4;
3160 dits[22] = 33.0173;
3161 dits[23] = 36.5;
3162 dits[24] = -4;
3163 dits[25] = 33.0173;
3164 dits[26] = 36.80;
3165 dits[27] = -2;
3166 dits[28] = 34.6955;
3167 dits[29] = 36.80;
3168 gMC->Gsvolu("I216", "PCON", idtmed[272], dits, 30); // supports (1-6) of the ladders
3169 }
3170
3171
3172 // --- Place SPD (option 'b') volumes into their mother volume IT12
3173
3174 // SPD - option 'b'
3175 // (this is the default)
3176
3177 //if (option == 2) {
3178 if (! AliITSInitGeometry::SPDIsTGeoNative()) {
3179
8f8273a4 3180 gMC->Gspos("I12B",1,"IT12",0.0,0.0,0.0,0,"ONLY");
3181 gMC->Gspos("I12B",8,"IT12",0.0,0.0,0.0,idrotm[233],"ONLY");
3182 gMC->Gspos("I12B",7,"IT12",0.0,0.0,0.0,idrotm[244],"ONLY");
3183 gMC->Gspos("I12B",6,"IT12",0.0,0.0,0.0,idrotm[236],"ONLY");
3184 gMC->Gspos("I12B",2,"IT12",0.0,0.0,0.0,idrotm[245],"ONLY");
3185 gMC->Gspos("I12B",3,"IT12",0.0,0.0,0.0,idrotm[234],"ONLY");
3186 gMC->Gspos("I12B",4,"IT12",0.0,0.0,0.0,idrotm[246],"ONLY");
3187 gMC->Gspos("I12B",5,"IT12",0.0,0.0,0.0,idrotm[247],"ONLY");
3188 gMC->Gspos("I12B",9,"IT12",0.0,0.0,0.0,idrotm[248],"ONLY");
3189 gMC->Gspos("I12B",10,"IT12",0.0,0.0,0.0,idrotm[249],"ONLY");
108bd0fe 3190 deltax=((ddet1-0.01/2.)+(dchip1-0.015/2.))*TMath::Cos(270.*TMath::Pi()/180.); // see definition of idrotm[238]
3191 deltay=((ddet1-0.01/2.)+(dchip1-0.015/2.))*TMath::Sin(270.*TMath::Pi()/180.); // see definition of idrotm[238]
3192 gMC->Gspos("I10B",2,"I12B",0.203+deltax,3.8206+deltay,0.0,idrotm[238],"ONLY");
3193 deltax=((ddet1-0.01/2.)+(dchip1-0.015/2.))*TMath::Cos(252.*TMath::Pi()/180.); // see definition of idrotm[239]
3194 deltay=((ddet1-0.01/2.)+(dchip1-0.015/2.))*TMath::Sin(252.*TMath::Pi()/180.); // see definition of idrotm[239]
3195 gMC->Gspos("I10B",1,"I12B",1.4531+deltax,3.8152+deltay,0.0,idrotm[239],"ONLY");
3196 deltax=((ddet2-0.01/2.)+(dchip2-0.015/2.))*TMath::Cos(40.*TMath::Pi()/180.); // see definition of idrotm[240]
3197 deltay=((ddet2-0.01/2.)+(dchip2-0.015/2.))*TMath::Sin(40.*TMath::Pi()/180.); // see definition of idrotm[240]
3198 gMC->Gspos("I20B",1,"I12B",3.0174+deltax,6.5143+deltay,0.0,idrotm[240],"ONLY");
3199 deltax=((ddet2-0.01/2.)+(dchip2-0.015/2.))*TMath::Cos(49.*TMath::Pi()/180.); // see definition of idrotm[241]
3200 deltay=((ddet2-0.01/2.)+(dchip2-0.015/2.))*TMath::Sin(49.*TMath::Pi()/180.); // see definition of idrotm[241]
3201 gMC->Gspos("I20B",2,"I12B",1.9612+deltax,6.9062+deltay,0.0,idrotm[241],"ONLY");
3202 deltax=((ddet2-0.01/2.)+(dchip2-0.015/2.))*TMath::Cos(58.*TMath::Pi()/180.); // see definition of idrotm[242]
3203 deltay=((ddet2-0.01/2.)+(dchip2-0.015/2.))*TMath::Sin(58.*TMath::Pi()/180.); // see definition of idrotm[242]
3204 gMC->Gspos("I20B",3,"I12B",0.8567+deltax,7.1279+deltay,0.0,idrotm[242],"ONLY");
3205 deltax=((ddet2-0.01/2.)+(dchip2-0.015/2.))*TMath::Cos(67.*TMath::Pi()/180.); // see definition of idrotm[243]
3206 deltay=((ddet2-0.01/2.)+(dchip2-0.015/2.))*TMath::Sin(67.*TMath::Pi()/180.); // see definition of idrotm[243]
3207 gMC->Gspos("I20B",4,"I12B",-0.2689+deltax,7.1742+deltay,0.0,idrotm[243],"ONLY");
3208 gMC->Gspos("I123",1,"I12B",-0.2978,5.5196,0.0,idrotm[214],"ONLY");
3209 gMC->Gspos("I121",1,"I12B",-0.2385,4.1518,0.0,idrotm[213],"ONLY");
3210 gMC->Gspos("I122",1,"I12B",-0.2968,4.0207,0.0,idrotm[212],"ONLY");
3211 gMC->Gspos("I120",1,"I12B",-0.3672,3.9056,0.0,0,"ONLY");
3212 gMC->Gspos("I144",1,"I12B",-0.2538,3.8556,0.0,0,"ONLY");
3213 gMC->Gspos("I113",3,"I12B",0.1095,3.9056,0.0,0,"ONLY");
3214 gMC->Gspos("I143",1,"I12B",0.4365,3.8556,0.0,idrotm[236],"ONLY");
3215 gMC->Gspos("I142",1,"I12B",0.5136,3.9056,0.0,idrotm[235],"ONLY");
3216 gMC->Gspos("I141",1,"I12B",0.5636,3.9752,0.0,idrotm[237],"ONLY");
3217 gMC->Gspos("I140",1,"I12B",0.6336,4.0447,0.0,idrotm[234],"ONLY");
3218 gMC->Gspos("I139",1,"I12B",0.8297,4.0545,0.0,idrotm[207],"ONLY");
3219 gMC->Gspos("I113",5,"I12B",1.2575,3.9681,0.0,idrotm[207],"ONLY");
3220 gMC->Gspos("I138",1,"I12B",1.66,3.7848,0.0,idrotm[207],"ONLY");
3221 gMC->Gspos("I137",1,"I12B",1.8556,3.7738,0.0,idrotm[233],"ONLY");
3222 gMC->Gspos("I136",1,"I12B",2.6224,4.874,0.0,idrotm[232],"ONLY");
3223 gMC->Gspos("I135",1,"I12B",3.2967,6.0337,0.0,idrotm[231],"ONLY");
3224 gMC->Gspos("I134",1,"I12B",3.266,6.1636,0.0,idrotm[230],"ONLY");
3225 gMC->Gspos("I113",1,"I12B",2.9903,6.4144,0.0,idrotm[211],"ONLY");
3226 gMC->Gspos("I133",3,"I12B",2.7631,6.7627,0.0,idrotm[230],"ONLY");
3227 gMC->Gspos("I132",3,"I12B",2.62,6.8555,0.0,idrotm[229],"ONLY");
3228 gMC->Gspos("I131",3,"I12B",2.648,6.6023,0.0,idrotm[228],"ONLY");
3229 gMC->Gspos("I130",3,"I12B",2.6569,6.3431,0.0,idrotm[227],"ONLY");
3230 gMC->Gspos("I129",3,"I12B",2.3906,6.4819,0.0,idrotm[226],"ONLY");
3231 gMC->Gspos("I113",2,"I12B",1.9488,6.7998,0.0,idrotm[210],"ONLY");
3232 gMC->Gspos("I133",2,"I12B",1.6699,7.1085,0.0,idrotm[226],"ONLY");
3233 gMC->Gspos("I132",2,"I12B",1.5142,7.1777,0.0,idrotm[225],"ONLY");
3234 gMC->Gspos("I131",2,"I12B",1.5814,6.932,0.0,idrotm[224],"ONLY");
3235 gMC->Gspos("I130",2,"I12B",1.6308,6.6774,0.0,idrotm[223],"ONLY");
3236 gMC->Gspos("I129",2,"I12B",1.346,6.7728,0.0,idrotm[222],"ONLY");
3237 gMC->Gspos("I113",6,"I12B",0.8599,7.0176,0.0,idrotm[209],"ONLY");
3238 gMC->Gspos("I133",1,"I12B",0.5362,7.2789,0.0,idrotm[222],"ONLY");
3239 gMC->Gspos("I132",1,"I12B",0.3715,7.3228,0.0,idrotm[221],"ONLY");
3240 gMC->Gspos("I131",1,"I12B",0.4763,7.0907,0.0,idrotm[220],"ONLY");
3241 gMC->Gspos("I130",1,"I12B",0.5649,6.8469,0.0,idrotm[219],"ONLY");
3242 gMC->Gspos("I129",1,"I12B",0.2688,6.8966,0.0,idrotm[218],"ONLY");
3243 gMC->Gspos("I113",4,"I12B",-0.2497,7.0624,0.0,idrotm[208],"ONLY");
3244 gMC->Gspos("I128",1,"I12B",-0.6103,7.2698,0.0,idrotm[218],"ONLY");
3245 gMC->Gspos("I126",1,"I12B",-0.7799,7.2874,0.0,idrotm[217],"ONLY");
3246 gMC->Gspos("I125",1,"I12B",-0.6315,7.0883,0.0,idrotm[216],"ONLY");
3247 gMC->Gspos("I124",1,"I12B",-0.4965,6.8742,0.0,idrotm[215],"ONLY");
3248 gMC->Gspos("I105",3,"I10B",-0.05,-0.01,-16.844,idrotm[201],"ONLY");
3249 gMC->Gspos("I105",4,"I10B",-0.05,-0.01,16.844,0,"ONLY");
8f8273a4 3250
3251 // Insertion of half-stave level in old SPD1
3252 gGeoManager->MakeVolumeAssembly("L1H-STAVE0");
3253 gGeoManager->MakeVolumeAssembly("L1H-STAVE1");
3254 gMC->Gspos("L1H-STAVE0",1,"I10B",0,0,0,0,"ONLY");
3255 gMC->Gspos("L1H-STAVE1",1,"I10B",0,0,0,0,"ONLY");
3256 gMC->Gspos("I107",1,"L1H-STAVE0",-0.0455,-di10b[1]+di107[1],10.708,0,"ONLY");
3257 gMC->Gspos("I107",2,"L1H-STAVE0",-0.0455,-di10b[1]+di107[1],3.536,0,"ONLY");
3258 gMC->Gspos("I107",3,"L1H-STAVE1",-0.0455,-di10b[1]+di107[1],-3.536,0,"ONLY");
3259 gMC->Gspos("I107",4,"L1H-STAVE1",-0.0455,-di10b[1]+di107[1],-10.708,0,"ONLY");
3260 // gMC->Gspos("I107",2,"I10B",-0.0455,-di10b[1]+di107[1],3.536,0,"ONLY");
3261 // gMC->Gspos("I107",1,"I10B",-0.0455,-di10b[1]+di107[1],10.708,0,"ONLY");
3262 // gMC->Gspos("I107",4,"I10B",-0.0455,-di10b[1]+di107[1],-10.708,0,"ONLY");
3263 // gMC->Gspos("I107",3,"I10B",-0.0455,-di10b[1]+di107[1],-3.536,0,"ONLY");
3264
3265 // Insertion of half-stave level in old SPD2
3266 gGeoManager->MakeVolumeAssembly("L2H-STAVE0");
3267 gGeoManager->MakeVolumeAssembly("L2H-STAVE1");
3268 gMC->Gspos("L2H-STAVE0",1,"I20B",0,0,0,0,"ONLY");
3269 gMC->Gspos("L2H-STAVE1",1,"I20B",0,0,0,0,"ONLY");
3270 gMC->Gspos("I1D7",1,"L2H-STAVE0",-0.0455,-di20b[1]+di1d7[1],10.708,0,"ONLY");
3271 gMC->Gspos("I1D7",2,"L2H-STAVE0",-0.0455,-di20b[1]+di1d7[1],3.536,0,"ONLY");
3272 gMC->Gspos("I1D7",3,"L2H-STAVE1",-0.0455,-di20b[1]+di1d7[1],-3.536,0,"ONLY");
3273 gMC->Gspos("I1D7",4,"L2H-STAVE1",-0.0455,-di20b[1]+di1d7[1],-10.708,0,"ONLY");
3274// gMC->Gspos("I1D7",2,"I20B",-0.0455,-di20b[1]+di1d7[1],3.536,0,"ONLY");
3275// gMC->Gspos("I1D7",1,"I20B",-0.0455,-di20b[1]+di1d7[1],10.708,0,"ONLY");
3276// gMC->Gspos("I1D7",4,"I20B",-0.0455,-di20b[1]+di1d7[1],-10.708,0,"ONLY");
3277// gMC->Gspos("I1D7",3,"I20B",-0.0455,-di20b[1]+di1d7[1],-3.536,0,"ONLY");
3278
108bd0fe 3279 gMC->Gspos("I109",1,"I10B",-0.138,0.015,-16.844,idrotm[201],"ONLY");
3280 gMC->Gspos("I109",2,"I10B",-0.138,0.015,16.844,0,"ONLY");
3281 gMC->Gspos("I108",1,"I10B",-0.138,-di10b[1]+2.*di107[1]+di108[1],0.0,0,"ONLY");
3282 gMC->Gspos("I105",1,"I20B",-0.05,-0.01,-16.844,idrotm[201],"ONLY");
3283 gMC->Gspos("I105",2,"I20B",-0.05,-0.01,16.844,0,"ONLY");
108bd0fe 3284 gMC->Gspos("I109",3,"I20B",-0.138,0.015,-16.844,idrotm[201],"ONLY");
3285 gMC->Gspos("I109",4,"I20B",-0.138,0.015,16.844,0,"ONLY");
3286 gMC->Gspos("I108",2,"I20B",-0.138,-di20b[1]+2.*di1d7[1]+di108[1],0.0,0,"ONLY");
3287 gMC->Gspos("I112",2,"I113",0.25,0.02,0.0,idrotm[206],"ONLY");
3288 gMC->Gspos("I111",2,"I113",0.1318,-0.0008,0.0,idrotm[205],"ONLY");
3289 gMC->Gspos("I118",1,"I113",0.0,-0.0454,0.0,0,"ONLY");
3290 gMC->Gspos("I110",1,"I113",0.0,0.0492,0.0,0,"ONLY");
3291 gMC->Gspos("I114",1,"I113",0.063,0.0042,0.0,idrotm[202],"ONLY");
3292 gMC->Gspos("I115",1,"I113",0.063,0.0042,0.0,idrotm[202],"ONLY");
3293 gMC->Gspos("I115",2,"I113",-0.063,0.0042,0.0,idrotm[237],"ONLY");
3294 gMC->Gspos("I114",2,"I113",-0.063,0.0042,0.0,idrotm[237],"ONLY");
3295 gMC->Gspos("I116",1,"I113",0.0,0.0042,0.0,0,"ONLY");
3296 gMC->Gspos("I111",1,"I113",-0.1318,-0.0008,0.0,idrotm[204],"ONLY");
3297 gMC->Gspos("I112",1,"I113",-0.25,0.02,0.0,idrotm[203],"ONLY");
3298 gMC->Gspos("I106",1,"I107",0.0,-ddet1,-1.4,0,"ONLY");
3299 gMC->Gspos("I106",2,"I107",0.0,-ddet1,0.0,0,"ONLY");
3300 gMC->Gspos("I106",3,"I107",0.0,-ddet1,1.4,0,"ONLY");
3301 gMC->Gspos("I106",4,"I107",0.0,-ddet1,2.8,0,"ONLY");
3302 gMC->Gspos("I106",5,"I107",0.0,-ddet1,-2.8,0,"ONLY");
3303 gMC->Gspos("I101",1,"I107",0.0,dchip1,0.0,0,"ONLY");
3304 gMC->Gspos("I1D6",1,"I1D7",0.0,-ddet2,-1.4,0,"ONLY");
3305 gMC->Gspos("I1D6",2,"I1D7",0.0,-ddet2,0.0,0,"ONLY");
3306 gMC->Gspos("I1D6",3,"I1D7",0.0,-ddet2,1.4,0,"ONLY");
3307 gMC->Gspos("I1D6",4,"I1D7",0.0,-ddet2,2.8,0,"ONLY");
3308 gMC->Gspos("I1D6",5,"I1D7",0.0,-ddet2,-2.8,0,"ONLY");
3309 gMC->Gspos("I1D1",1,"I1D7",0.0,dchip2,0.0,0,"ONLY");
3310 gMC->Gspos("I117",1,"I116",0.0,0.0,0.0,0,"ONLY");
3311 gMC->Gspos("ITS1",1,"I101",0.0,0.0,0.0,0,"ONLY");
3312 gMC->Gspos("ITS2",1,"I1D1",0.0,0.0,0.0,0,"ONLY");
3313 gMC->Gspos("I651",1,"IT12",0.0,0.0,26.05,0,"ONLY");
8f8273a4 3314 gMC->Gspos("I651",2,"IT12",0.0,0.0,-26.05,0,"ONLY");
3315
3316 gMC->Gspos("I650",16,"IT12",0.0,0.0,22.0,idrotm[1104],"ONLY");
3317 gMC->Gspos("I650",20,"IT12",0.0,0.0,22.0,idrotm[1130],"ONLY");
3318 gMC->Gspos("I650",18,"IT12",0.0,0.0,22.0,idrotm[1117],"ONLY");
3319 gMC->Gspos("I650",1,"IT12",0.0,0.0,22.0,0,"ONLY");
3320 gMC->Gspos("I650",4,"IT12",0.0,0.0,22.0,idrotm[1106],"ONLY");
3321 gMC->Gspos("I650",6,"IT12",0.0,0.0,22.0,idrotm[1039],"ONLY");
3322 gMC->Gspos("I650",8,"IT12",0.0,0.0,22.0,idrotm[1107],"ONLY");
3323 gMC->Gspos("I650",10,"IT12",0.0,0.0,22.0,idrotm[1065],"ONLY");
3324 gMC->Gspos("I650",12,"IT12",0.0,0.0,22.0,idrotm[1078],"ONLY");
3325 gMC->Gspos("I650",14,"IT12",0.0,0.0,22.0,idrotm[1091],"ONLY");
3326 gMC->Gspos("I650",19,"IT12",0.0,0.0,-22.0,idrotm[1108],"ONLY");
3327 gMC->Gspos("I650",2,"IT12",0.0,0.0,-22.0,idrotm[1109],"ONLY");
3328 gMC->Gspos("I650",3,"IT12",0.0,0.0,-22.0,idrotm[1110],"ONLY");
3329 gMC->Gspos("I650",5,"IT12",0.0,0.0,-22.0,idrotm[1111],"ONLY");
3330 gMC->Gspos("I650",7,"IT12",0.0,0.0,-22.0,idrotm[1112],"ONLY");
3331 gMC->Gspos("I650",9,"IT12",0.0,0.0,-22.0,idrotm[1113],"ONLY");
3332 gMC->Gspos("I650",11,"IT12",0.0,0.0,-22.0,idrotm[1114],"ONLY");
3333 gMC->Gspos("I650",13,"IT12",0.0,0.0,-22.0,idrotm[1115],"ONLY");
3334 gMC->Gspos("I650",15,"IT12",0.0,0.0,-22.0,idrotm[1116],"ONLY");
3335 gMC->Gspos("I650",17,"IT12",0.0,0.0,-22.0,idrotm[1118],"ONLY");
3336 gMC->Gspos("I666",1,"I650",0.0,0.0,0.25,idrotm[1003],"ONLY");
3337
108bd0fe 3338 gMC->Gspos("I667",1,"I650",0.1102,0.9945,0.45,idrotm[1088],"ONLY");
3339 gMC->Gspos("I669",3,"I650",0.1883,4.0372,-3.2,0,"ONLY");
3340 gMC->Gspos("I671",3,"I650",0.1883,4.0372,0.6,0,"ONLY");
3341 gMC->Gspos("I669",2,"I650",1.3343,4.0609,-3.2,0,"ONLY");
3342 gMC->Gspos("I671",2,"I650",1.3343,4.0609,0.6,0,"ONLY");
3343 gMC->Gspos("I669",6,"I650",2.9567,6.1959,-3.2,idrotm[1089],"ONLY");
3344 gMC->Gspos("I671",6,"I650",2.9567,6.1959,0.6,idrotm[1089],"ONLY");
3345 gMC->Gspos("I669",5,"I650",1.9511,6.5822,-3.2,idrotm[1011],"ONLY");
3346 gMC->Gspos("I671",5,"I650",1.9511,6.5822,0.6,idrotm[1011],"ONLY");
3347 gMC->Gspos("I669",4,"I650",0.8974,6.8064,-3.2,idrotm[1090],"ONLY");
3348 gMC->Gspos("I671",4,"I650",0.8974,6.8064,0.6,idrotm[1090],"ONLY");
3349 gMC->Gspos("I669",1,"I650",-0.1784,6.863,-3.2,0,"ONLY");
3350 gMC->Gspos("I671",1,"I650",-0.1784,6.863,0.6,0,"ONLY");
3351 gMC->Gspos("I673",1,"I650",0.2173,4.8037,1.8,0,"ONLY");
3352 gMC->Gspos("I673",6,"I650",1.5093,4.5605,1.8,0,"ONLY");
3353 gMC->Gspos("I673",4,"I650",-0.173,6.2531,1.8,idrotm[1092],"ONLY");
3354 gMC->Gspos("I673",3,"I650",0.8073,6.2032,1.8,idrotm[1093],"ONLY");
3355 gMC->Gspos("I673",2,"I650",1.7678,6.0005,1.8,idrotm[1094],"ONLY");
3356 gMC->Gspos("I673",5,"I650",2.6847,5.6501,1.8,0,"ONLY");
3357 gMC->Gspos("I676",2,"I650",1.7618,5.2269,2.5,0,"ONLY");
3358 gMC->Gspos("I676",1,"I650",0.4018,5.5869,2.5,0,"ONLY");
3359 gMC->Gspos("I668",1,"I667",0.0,0.0,0.0,0,"ONLY");
3360 gMC->Gspos("I670",1,"I669",0.0,0.0,0.0,0,"ONLY");
3361 gMC->Gspos("I672",1,"I671",0.0,0.0,0.0,0,"ONLY");
3362 gMC->Gspos("I674",1,"I673",0.0,0.0,0.0,0,"MANY");
3363 gMC->Gspos("I675",1,"I673",0.0,0.0,-0.5,0,"ONLY");
8f8273a4 3364 gMC->Gspos("I677",1,"I676",0.0,0.0,0.0,0,"ONLY");
108bd0fe 3365 gMC->Gspos("I678",1,"I676",0.0,0.0,-0.95,0,"ONLY");
3366 }
3367
3368 // --- Place SDD volumes into their mother volume IT34
3369
3370 // -- position SDD detectors of ladder 3 / layer 3
3371 if (! AliITSInitGeometry::SDDIsTGeoNative()) {
3372
3373 gMC->Gspos("ITS3", 1,"I302", 0.0, 0.0, 0.0, 0, "ONLY");
3374 ySDD = ySDDsep/2.+iI302dits[1];
3375 for (iSDD=0; iSDD<6; iSDD++) {
3376 gMC->Gspos("I302", iSDD+1, "I004", 0.0, ySDD, zSDDlay3[iSDD], 0, "ONLY");
3377 ySDD = -ySDD;
3378 }
3379
3380 gMC->Gspos("I004", 1,"IT34", -3.2777, 14.3607, 0.0, idrotm[321],"ONLY");
3381 gMC->Gspos("I004", 2,"IT34", -9.5581, 11.9855, 0.0, idrotm[333],"ONLY");
3382 gMC->Gspos("I004", 3,"IT34",-13.2713, 6.3911, 0.0, idrotm[336],"ONLY");
3383 gMC->Gspos("I004", 4,"IT34",-15.33, 0.0, 0.0, idrotm[350],"ONLY");
3384 gMC->Gspos("I004", 5,"IT34",-13.2713, -6.3911, 0.0, idrotm[313],"ONLY");
3385 gMC->Gspos("I004", 6,"IT34", -9.5581, -11.9855, 0.0, idrotm[311],"ONLY");
3386 gMC->Gspos("I004", 7,"IT34", -3.2777, -14.3607, 0.0, idrotm[310],"ONLY");
3387 gMC->Gspos("I004", 8,"IT34", 3.4112, -14.9456, 0.0, idrotm[386],"ONLY");
3388 gMC->Gspos("I004", 9,"IT34", 9.184, -11.5164, 0.0, idrotm[309],"ONLY");
3389 gMC->Gspos("I004",10,"IT34", 13.8119, -6.6514, 0.0, idrotm[308],"ONLY");
3390 gMC->Gspos("I004",11,"IT34", 14.73, 0.0, 0.0, idrotm[356],"ONLY");
3391 gMC->Gspos("I004",12,"IT34", 13.8119, 6.6514, 0.0, idrotm[307],"ONLY");
3392 gMC->Gspos("I004",13,"IT34", 9.184, 11.5164, 0.0, idrotm[306],"ONLY");
3393 gMC->Gspos("I004",14,"IT34", 3.4113, 14.9456, 0.0, idrotm[305],"ONLY");
3394
3395
3396 // -- position SDD detectors of ladder 4 / layer 4
3397
3398 gMC->Gspos("ITS4", 1,"I402", 0.0, 0.000, 0.0, 0,"ONLY");
3399 ySDD = -(ySDDsep/2.+iI402dits[1]);
3400 for (iSDD=0; iSDD<8; iSDD++) {
3401 gMC->Gspos("I402", iSDD+1, "I005", 0.0, ySDD, zSDDlay4[iSDD], 0, "ONLY");
3402 ySDD = -ySDD;
3403 }
3404
3405 gMC->Gspos("I005", 1,"IT34", -3.3629, 23.3895,-0.15, idrotm[335],"ONLY");
3406 gMC->Gspos("I005", 2,"IT34",-10.0447, 21.9949,-0.15, idrotm[332],"ONLY");
3407 gMC->Gspos("I005", 3,"IT34",-15.4744, 17.8584,-0.15, idrotm[331],"ONLY");
3408 gMC->Gspos("I005", 4,"IT34",-20.3415, 13.0727,-0.15, idrotm[366],"ONLY");
3409 gMC->Gspos("I005", 5,"IT34",-22.6728, 6.6573,-0.15, idrotm[330],"ONLY");
3410 gMC->Gspos("I005", 6,"IT34",-24.18, 0.0, -0.15, idrotm[350],"ONLY");
3411 gMC->Gspos("I005", 7,"IT34",-22.6728, -6.6573,-0.15, idrotm[329],"ONLY");
3412 gMC->Gspos("I005", 8,"IT34",-20.3415, -13.0727,-0.15, idrotm[328],"ONLY");
3413 gMC->Gspos("I005", 9,"IT34",-15.4744, -17.8584,-0.15, idrotm[327],"ONLY");
3414 gMC->Gspos("I005",10,"IT34",-10.0447, -21.9949,-0.15, idrotm[326],"ONLY");
3415 gMC->Gspos("I005",11,"IT34", -3.3629, -23.3895,-0.15, idrotm[325],"ONLY");
3416 gMC->Gspos("I005",12,"IT34", 3.4412, -23.9339,-0.15, idrotm[324],"ONLY");
3417 gMC->Gspos("I005",13,"IT34", 9.8163, -21.4946,-0.15, idrotm[323],"ONLY");
3418 gMC->Gspos("I005",14,"IT34", 15.8345, -18.274, -0.15, idrotm[322],"ONLY");
3419 gMC->Gspos("I005",15,"IT34", 19.8788, -12.7753,-0.15, idrotm[320],"ONLY");
3420 gMC->Gspos("I005",16,"IT34", 23.2005, -6.8123,-0.15, idrotm[319],"ONLY");
3421 gMC->Gspos("I005",17,"IT34", 23.63, 0.0, -0.15, idrotm[318],"ONLY");
3422 gMC->Gspos("I005",18,"IT34", 23.2005, 6.8123,-0.15, idrotm[317],"ONLY");
3423 gMC->Gspos("I005",19,"IT34", 19.8788, 12.7753,-0.15, idrotm[316],"ONLY");
3424 gMC->Gspos("I005",20,"IT34", 15.8345, 18.274, -0.15, idrotm[315],"ONLY");
3425 gMC->Gspos("I005",21,"IT34", 9.8163, 21.4946,-0.15, idrotm[314],"ONLY");
3426 gMC->Gspos("I005",22,"IT34", 3.4412, 23.9339,-0.15, idrotm[334],"ONLY");
3427
3428
3429 // -- build block of the SDD ladder frame holding the electronics
3430
3431 gMC->Gspos("I019", 1,"I018", -1.9, -1.735, 0.0, idrotm[344], "ONLY");
3432 gMC->Gspos("I019", 2,"I018", 1.987, -1.5843, 0.0, idrotm[343], "ONLY");
3433 gMC->Gspos("I019", 3,"I018", -0.087, 1.7066, 0.0, idrotm[342], "ONLY");
3434
3435 gMC->Gspos("I020", 1,"I018", -1.9782, -1.569, 0.0, idrotm[342], "ONLY");
3436 gMC->Gspos("I020", 2,"I018", 1.8824, -1.735, 0.0, idrotm[344], "ONLY");
3437 gMC->Gspos("I020", 3,"I018", 0.0958, 1.6913, 0.0, idrotm[343], "ONLY");
3438
3439 gMC->Gspos("I021", 1,"I018", 1.0761, 0.0835, 2.6008, idrotm[340], "ONLY");
3440 gMC->Gspos("I021", 2,"I018", -1.0761, 0.0835,-2.8008, idrotm[339], "ONLY");
3441 gMC->Gspos("I021", 3,"I018", -1.0761, 0.0835,-1.0492, idrotm[338], "ONLY");
3442 gMC->Gspos("I021", 4,"I018", 1.0761, 0.0835,-2.8008, idrotm[337], "ONLY");
3443 gMC->Gspos("I021", 5,"I018", 1.0761, 0.0835,-1.0492, idrotm[340], "ONLY");
3444 gMC->Gspos("I021", 6,"I018", -1.0761, 0.0835, 0.8492, idrotm[339], "ONLY");
3445 gMC->Gspos("I021", 7,"I018", -1.0761, 0.0835, 2.6008, idrotm[338], "ONLY");
3446 gMC->Gspos("I021", 8,"I018", 1.0761, 0.0835, 0.8492, idrotm[337], "ONLY");
3447
3448 gMC->Gspos("I022", 1,"I018", 0.0, -1.79, 3.55, idrotm[312], "ONLY");
3449 gMC->Gspos("I022", 2,"I018", 0.0, -1.79, -0.1, idrotm[312], "ONLY");
3450
3451 gMC->Gspos("I023", 1,"I018", 0.0, -1.79, 1.725, idrotm[341], "ONLY");
3452 gMC->Gspos("I023", 2,"I018", 0.0, -1.79, -1.925, idrotm[341], "ONLY");
3453
3454 gMC->Gspos("I033", 1,"I018", 1.8, -1.75, 1.35, 0, "MANY");
3455 gMC->Gspos("I033", 2,"I018", -1.8, -1.75, -2.65, idrotm[345], "MANY");
3456 gMC->Gspos("I033", 3,"I018", -1.8, -1.75, 1.35, idrotm[345], "MANY");
3457 gMC->Gspos("I033", 4,"I018", 1.8, -1.75, -2.65, 0, "MANY");
3458
3459 gMC->Gspos("I034", 1,"I018", 1.6, -1.775, 1.35, idrotm[312], "ONLY");
3460 gMC->Gspos("I034", 2,"I018", -1.6, -1.775, -2.65, idrotm[348], "ONLY");
3461 gMC->Gspos("I034", 3,"I018", -1.6, -1.775, 1.35, idrotm[348], "ONLY");
3462 gMC->Gspos("I034", 4,"I018", 1.6, -1.775, -2.65, idrotm[312], "ONLY");
3463
8f8273a4 3464 gMC->Gspos("I035", 1,"I018", 1.7, -0.55, iI018dits[2]-iI035dits[2], 0, "ONLY");
3465 gMC->Gspos("I035", 2,"I018", -1.7, -0.55, iI018dits[2]-iI035dits[2], 0, "ONLY");
108bd0fe 3466
3467 gMC->Gspos("I036", 1,"I018", 0.3087, 1.7191, 3.56, idrotm[346], "ONLY");
3468 gMC->Gspos("I036", 2,"I018", 0.3087, 1.7191,-0.11, idrotm[346], "ONLY");
3469 gMC->Gspos("I036", 3,"I018", -0.3087, 1.7191,-0.11, idrotm[347], "ONLY");
3470 gMC->Gspos("I036", 4,"I018", -0.3087, 1.7191, 3.56, idrotm[347], "ONLY");
3471
3472 gMC->Gspos("I037", 1,"I018", iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], 0 , "ONLY");
3473 gMC->Gspos("I037", 2,"I018", -iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], 0 , "ONLY");
3474
3475 gMC->Gspos("I038", 1,"I018", iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], 0 , "ONLY");
3476 gMC->Gspos("I038", 2,"I018", -iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], 0 , "ONLY");
3477
3478 gMC->Gspos("I040", 1,"I018", 1.9204, -0.7118, 0.0, idrotm[346],"ONLY");
3479 gMC->Gspos("I040", 2,"I018", -1.9204, -0.7118, 0.0, idrotm[347],"ONLY");
3480 gMC->Gspos("I041", 1,"I018", iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], idrotm[346], "ONLY");
3481 gMC->Gspos("I041", 2,"I018", -iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], idrotm[347], "ONLY");
3482
3483
3484 // -- build block of the SDD electronics (heat bridge, chips, hybrid, anode microcable)
3485
3486 xI050 = iSDDCoolPipe[0]+iSDDCoolPipe[1]*sin30+iI050dits[1]/cos30+iI041dits[1];
3487 yI050 = 0;
3488 xI039 = -iSDDCoolPipe[1]/cos30;
3489 yI039 = -iI050dits[1]+iI039dits[1];
3490 gMC->Gspos("I039", 1,"I050", xI039, yI039, 0.0, 0, "ONLY");
3491 xI042 = xI039+iI039dits[0]-xI042space-iI042dits[0];
3492 yI042 = yI039+iI039dits[1]+iI042dits[1];
3493 xI043 = xI039-iI039dits[0]+xI043space+iI043dits[0];
3494 yI043 = yI039+iI039dits[1]+iI043dits[1];
3495 zChipSpace = iI042dits[2];
3496 if (zChipSpace < iI043dits[2]) {
3497 zChipSpace = iI043dits[2];
3498 }
3499 zChipSpace = zChipSpace * 2;
3500 yI051space = (2*iI039dits[2] - 4*zChipSpace)/5;
3501 zchip = -iI039dits[2] + yI051space + zChipSpace/2.;
3502 for (ichip=0; ichip<4; ichip++) {
3503 gMC->Gspos("I042", ichip+1, "I050", xI042, yI042, zchip, 0, "ONLY");
3504 gMC->Gspos("I043", ichip+1, "I050", xI043, yI043, zchip, 0, "ONLY");
3505 zchip += zChipSpace + yI051space;
3506 }
3507 xcap = 2*iI039dits[0]/5.;
3508 yI051 = yI039+iI039dits[1]+iI051dits[1];
3509 zI051 = -iI039dits[2] + yI051space/3.;
3510 icap = 1;
3511 for (ichip=0; ichip<5; ichip++) {
3512 xI051 = xI039-iI039dits[0]+xcap;
3513 gMC->Gspos("I051", icap++,"I050", xI051, yI051, zI051, 0, "ONLY");
3514 zI051 += yI051space/3.;
3515 gMC->Gspos("I051", icap++,"I050", xI051, yI051, zI051, 0, "ONLY");
3516 xI051 += xcap;
3517 gMC->Gspos("I051", icap++,"I050", xI051, yI051, zI051, 0, "ONLY");
3518 xI051 += xcap;
3519 gMC->Gspos("I051", icap++,"I050", xI051, yI051, zI051, 0, "ONLY");
3520 xI051 += xcap;
3521 gMC->Gspos("I051", icap++,"I050", xI051, yI051, zI051, 0, "ONLY");
3522 zI051 -= yI051space/3.;
3523 if (ichip == 0) {
3524 gMC->Gspos("I051", icap++,"I050", xI051, yI051, zI051, 0, "ONLY");
3525 }
3526 zI051 += zChipSpace + yI051space;
3527 }
3528 xI052 = -iI050dits[0]+iI052dits[0];
3529 yI052 = yI051+iI051dits[1]+iI052dits[1];
3530 gMC->Gspos("I052", 1,"I050", xI052, yI052, 0.0, 0, "ONLY");
3531 xI044 = iI050dits[0]-iI044dits[3];
3532 yI044 = yI052+iI052dits[1]+iI044dits[2];
3533 gMC->Gspos("I044", 1,"I050", xI044, yI044, 0.0, idrotm[301], "ONLY");
3534 gMC->Gspos("I050", 1,"I018", xI050, yI050, 0.0, idrotm[346],"ONLY");
3535 gMC->Gspos("I050", 2,"I018", -xI050, yI050, 0.0, idrotm[347],"ONLY");
3536
3537
3538 // -- build block of the SDD ladder frame at the end ladders
3539
3540 gMC->Gspos("I021",12,"I024", 1.0761, 0.0836,-0.1242, idrotm[340], "ONLY");
3541 gMC->Gspos("I021",11,"I024", -1.0761, 0.0836,-0.1242, idrotm[338], "ONLY");
3542 gMC->Gspos("I021",13,"I024", -1.0761, 0.0836,-1.8758, idrotm[339], "ONLY");
3543 gMC->Gspos("I021",14,"I024", 1.0761, 0.0836,-1.8758, idrotm[337], "ONLY");
3544
3545 gMC->Gspos("I022", 3,"I024", 0.0, -1.7899, 0.825, idrotm[312], "ONLY");
3546
3547 gMC->Gspos("I023", 3,"I024", 0.0, -1.7899,-1.0, idrotm[341], "ONLY");
3548
3549 gMC->Gspos("I025", 1,"I024", -1.9, -1.7349, 0.0, idrotm[344], "ONLY");
3550 gMC->Gspos("I025", 2,"I024", 1.987, -1.5842, 0.0, idrotm[343], "ONLY");
3551
3552 gMC->Gspos("I026", 1,"I024", -1.9782, -1.5689, 0.0, idrotm[342], "ONLY");
3553 gMC->Gspos("I026", 2,"I024", 1.8824, -1.7349, 0.0, idrotm[344], "ONLY");
3554
3555 gMC->Gspos("I029", 1,"I024", -0.087, 1.7067, iI029dits[2]-iI024dits[2], idrotm[342], "ONLY");
3556
3557 gMC->Gspos("I030", 1,"I024", 0.0958, 1.6914, iI030dits[2]-iI024dits[2], idrotm[343], "ONLY");
3558
3559 gMC->Gspos("I031", 1,"I024", iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], 0 ,"ONLY");
3560 gMC->Gspos("I031", 2,"I024", -iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], 0 ,"ONLY");
3561
3562 gMC->Gspos("I032", 1,"I024", iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], 0 ,"ONLY");
3563 gMC->Gspos("I032", 2,"I024", -iSDDCoolPipe[0], iSDDCoolPipe[1], iSDDCoolPipe[2], 0 ,"ONLY");
3564
3565
3566 xI424 = iI028dits[0]/3.;
3567 yI424 = -iI028dits[1]+iI424dits[1];
3568 gMC->Gspos("I422", 1,"I421", 0.0, 0.0, 0.0, 0, "ONLY");
3569 gMC->Gspos("I423", 1,"I421", 0.0, 0.0, iI421dits[2]-iI423dits[2], 0, "ONLY");
3570 gMC->Gspos("I421", 1,"I420", 0.0, 0.0, 0.0, idrotm[312], "ONLY");
3571 gMC->Gspos("I420", 1,"I028", -iI028dits[0]/3., iI028dits[1]-iI420dits[1], 0.0, 0, "ONLY");
3572 gMC->Gspos("I424", 1,"I028", xI424, yI424, 0.0, 0, "ONLY");
8f8273a4 3573 gMC->Gspos("I028", 1,"I024", 0.0, iI028dits[1]-iI024dits[1], iI024dits[2]-iI028dits[2], 0, "ONLY");
108bd0fe 3574
3575
3576 // -- build the SDD ladder 3
3577
3578 indI425 = 1;
3579 gMC->Gspos("I024", 1,"I047", 0.0, 0.0, 24.625, 0, "ONLY");
3580 gMC->Gspos("I018", 1,"I047", 0.0, 0.0, 3.65, 0, "ONLY");
3581 gMC->Gspos("I018", 2,"I047", 0.0, 0.0, 10.95, 0, "ONLY");
3582