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