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