remove makefile
[u/mrichter/AliRoot.git] / ITS / AliITSv11GeometrySDD.cxx
<
CommitLineData
db486a6e 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. *
108bd0fe 14 *********************************s*****************************************/
db486a6e 15
b7943f00 16
db486a6e 17//*************************************************************************
effd7456 18//
db486a6e 19// SDD geometry, based on ROOT geometrical modeler
20//
effd7456 21//
22// This geometry has no dependence with aliroot, you can run it with root
23// only, provided that the AliITSv11GeomCable classes are also compiled
24//
b7943f00 25// Ludovic Gaudichet gaudichet@to.infn.it
db486a6e 26//*************************************************************************
27
28
73dfc864 29// $Id$
30
db486a6e 31
32// General Root includes
db486a6e 33#include <TMath.h>
34
35// Root Geometry includes
36#include <TGeoManager.h>
37#include <TGeoVolume.h>
db486a6e 38#include <TGeoCone.h>
39#include <TGeoTube.h>
108bd0fe 40#include <TGeoTrd1.h>
db486a6e 41#include <TGeoArb8.h>
42#include <TGeoCompositeShape.h>
43#include <TGeoMatrix.h>
c789ee28 44#include <TGeoNode.h>
db486a6e 45
b7943f00 46#include "AliITSgeom.h"
47#include "AliITSgeomSDD.h"
db486a6e 48#include "AliITSv11GeometrySDD.h"
b7943f00 49#include "AliITSv11GeomCableFlat.h"
50#include "AliITSv11GeomCableRound.h"
b7943f00 51
108bd0fe 52const char* AliITSv11GeometrySDD::fgSDDsensitiveVolName3 = "ITSsddSensitivL3";
53const char* AliITSv11GeometrySDD::fgSDDsensitiveVolName4 = "ITSsddSensitivL4";
b7943f00 54const Double_t AliITSv11GeometrySDD::fgkSegmentLength = 37.2*2*fgkmm;
55const Double_t AliITSv11GeometrySDD::fgkLadderWidth = 50.0*fgkmm;
56const Double_t AliITSv11GeometrySDD::fgkLadderHeight = 30.0*fgkmm;
57const Double_t AliITSv11GeometrySDD::fgkLadderSegBoxDW = 3.5*fgkmm;
58const Double_t AliITSv11GeometrySDD::fgkLadderSegBoxDH = 3.*fgkmm;
59
60const Double_t AliITSv11GeometrySDD::fgkLadderBeamRadius = 0.6*fgkmm;
61const Double_t AliITSv11GeometrySDD::fgkLadderLa = 3.*fgkmm;
fa4639a3 62const Double_t AliITSv11GeometrySDD::fgkLadderHa = 0.721979*fgkmm;
b7943f00 63const Double_t AliITSv11GeometrySDD::fgkLadderLb = 3.7*fgkmm;
fa4639a3 64const Double_t AliITSv11GeometrySDD::fgkLadderHb = 0.890428*fgkmm;
b7943f00 65const Double_t AliITSv11GeometrySDD::fgkLadderl = 0.25*fgkmm;
66
67const Double_t AliITSv11GeometrySDD::fgkBottomBeamAngle = 56.5;
68const Double_t AliITSv11GeometrySDD::fgkBeamSidePhi = 65;
69
70const Double_t AliITSv11GeometrySDD::fgkLadWaferSep = 2*fgkmm;
fa4639a3 71const Double_t AliITSv11GeometrySDD::fgkPinSuppWidth = 2.5*fgkmm;
72const Double_t AliITSv11GeometrySDD::fgkPinSuppHeight = 2.*fgkmm;
b7943f00 73const Double_t AliITSv11GeometrySDD::fgkPinSuppRmax = 2.5/2.*fgkmm;
74const Double_t AliITSv11GeometrySDD::fgkPinR = 1.5/2.*fgkmm;
75const Double_t AliITSv11GeometrySDD::fgkPinSuppLength = 5.*fgkmm;
76const Double_t AliITSv11GeometrySDD::fgkPinSuppThickness = 0.5*fgkmm;
77const Double_t AliITSv11GeometrySDD::fgkPinSuppConeAngle = 4;
78const Double_t AliITSv11GeometrySDD::fgkPinDXminOnSensor = (39./2.)*fgkmm;
79const Double_t AliITSv11GeometrySDD::fgkPinPinDDXOnSensor = 3*fgkmm;
80const Double_t AliITSv11GeometrySDD::fgkPinDYOnSensor = (52.5/2.)*fgkmm;
db486a6e 81
b7943f00 82// parameters from ALR-0752/3
83const Double_t AliITSv11GeometrySDD::fgkCoolPipeSuppHeight = 3.2*fgkmm;
84const Double_t AliITSv11GeometrySDD::fgkCoolPipeSuppMaxLength = 14*fgkmm;
85const Double_t AliITSv11GeometrySDD::fgkCoolPipeSuppWidthExt = 0.4*fgkmm;
86const Double_t AliITSv11GeometrySDD::fgkCoolPipeSuppWidthIn = 0.65*fgkmm;
87const Double_t AliITSv11GeometrySDD::fgkCoolPipeSuppHoleDiam = 2*fgkmm;
88const Double_t AliITSv11GeometrySDD::fgkCoolPipeSuppFulWidth = 5.15*fgkmm;
89const Double_t AliITSv11GeometrySDD::fgkCoolPipeSuppTongW = 0.8*fgkmm;
90const Double_t AliITSv11GeometrySDD::fgkCoolPipeSuppAngle = 22.5;
91const Double_t AliITSv11GeometrySDD::fgkCoolPipeSuppSlitL = 4.9*fgkmm;
92const Double_t AliITSv11GeometrySDD::fgkCoolPipeSuppAxeDist = 3.05*fgkmm;
93const Double_t AliITSv11GeometrySDD::fgkCoolPipeInnerDiam = 1.84*fgkmm;
94const Double_t AliITSv11GeometrySDD::fgkCoolPipeOuterDiam = 2.*fgkmm;
95
96const Double_t AliITSv11GeometrySDD::fgkBTBthick = 0.25 *fgkmm;
97const Double_t AliITSv11GeometrySDD::fgkBTBlength = 55. *fgkmm;
98const Double_t AliITSv11GeometrySDD::fgkBTBwidth = 18*fgkmm;
99const Double_t AliITSv11GeometrySDD::fgkBTBaxisAtoBottom = 4*fgkmm;
100const Double_t AliITSv11GeometrySDD::fgkBTBaxisAtoBase = 1.2*fgkmm;
101const Double_t AliITSv11GeometrySDD::fgkRadiusAminBTB = 1. *fgkmm;
102const Double_t AliITSv11GeometrySDD::fgkRadiusBminBTB = 0.53 *fgkmm;
103const Double_t AliITSv11GeometrySDD::fgkBTBHoleLength = 15 *fgkmm;
104const Double_t AliITSv11GeometrySDD::fgkBTBHolewidth = 6 *fgkmm;
105const Double_t AliITSv11GeometrySDD::fgkBTBHoleRefX = 10 *fgkmm;
106const Double_t AliITSv11GeometrySDD::fgkBTBHoleRefY = 6.5 *fgkmm;
107
108const Double_t AliITSv11GeometrySDD::fgkLay3Rmin = 145.*fgkmm; // not min! Rmin virtual tube
109const Double_t AliITSv11GeometrySDD::fgkLay3Rmax = 205.*fgkmm; // not min! Rmax virtual tube
110const Double_t AliITSv11GeometrySDD::fgkLay3Length = (524.+0.)*fgkmm; // ladder+supporting rings (length of the virtual tube)
111const Double_t AliITSv11GeometrySDD::fgkLay3LadderLength = 524.*fgkmm;
112const Double_t AliITSv11GeometrySDD::fgkLay3DetShortRadius = 146.0*fgkmm;
113const Double_t AliITSv11GeometrySDD::fgkLay3DetLongRadius = 152.0*fgkmm;
114const Double_t AliITSv11GeometrySDD::fgkLay3LaddTopCornerEnd = 15.6*fgkmm;
115const Int_t AliITSv11GeometrySDD::fgkLay3Ndet = 6;
116const Int_t AliITSv11GeometrySDD::fgkLay3Nladd = 14;
117const Double_t AliITSv11GeometrySDD::fgkLay3CoolPipeSuppH = 7.5*fgkmm;
118
119const Double_t AliITSv11GeometrySDD::fgkLay4Rmin = 220.*fgkmm; // not min! Rmin virtual tube
120const Double_t AliITSv11GeometrySDD::fgkLay4Rmax = 290.*fgkmm; // not min! Rmax virtual tube
121const Double_t AliITSv11GeometrySDD::fgkLay4Length = (671.+0.)*fgkmm; // ladder+supporting rings (length of the virtual tube)
122const Double_t AliITSv11GeometrySDD::fgkLay4LadderLength = 671.*fgkmm;
123const Double_t AliITSv11GeometrySDD::fgkLay4DetShortRadius = 235.0*fgkmm;
124const Double_t AliITSv11GeometrySDD::fgkLay4DetLongRadius = 240.5*fgkmm;
125const Double_t AliITSv11GeometrySDD::fgkLay4LaddTopCornerEnd = 15.6*fgkmm;
126const Int_t AliITSv11GeometrySDD::fgkLay4Ndet = 8;
127const Int_t AliITSv11GeometrySDD::fgkLay4Nladd = 22;
128const Double_t AliITSv11GeometrySDD::fgkLay4CoolPipeSuppH = 7.5*fgkmm;
129
130//hybrid
131const Double_t AliITSv11GeometrySDD::fgkHybridAngle = 46; // approx !!!
132// Origine taken at the hybrid corner :
133const Double_t AliITSv11GeometrySDD::fgkHybridLength = 65*fgkmm;
134const Double_t AliITSv11GeometrySDD::fgkHybridWidth = 41*fgkmm;
135const Double_t AliITSv11GeometrySDD::fgkHybRndHoleRad = 1.05*fgkmm;
136const Double_t AliITSv11GeometrySDD::fgkHybRndHoleZ = 2.5*fgkmm;
137const Double_t AliITSv11GeometrySDD::fgkHybRndHoleX = fgkHybridWidth-23.599*fgkmm;
138
139const Double_t AliITSv11GeometrySDD::fgkHybFLlowHoleDZ = 9.698*fgkmm;
140const Double_t AliITSv11GeometrySDD::fgkHybFLlowHolePasDX = 10.754*fgkmm;
141const Double_t AliITSv11GeometrySDD::fgkHybFLlowHoleAmbDX = 9.122*fgkmm;
142 // center of ships to the border
143const Double_t AliITSv11GeometrySDD::fgkHybFLlowChipZ4 = fgkHybridLength-(4.654 )*fgkmm-fgkHybFLlowHoleDZ/2;
144const Double_t AliITSv11GeometrySDD::fgkHybFLlowChipZ3 = fgkHybridLength-(4.654+15. )*fgkmm-fgkHybFLlowHoleDZ/2;
145const Double_t AliITSv11GeometrySDD::fgkHybFLlowChipZ2 = fgkHybridLength-(4.654+15.*2)*fgkmm-fgkHybFLlowHoleDZ/2;
146const Double_t AliITSv11GeometrySDD::fgkHybFLlowChipZ1 = fgkHybridLength-(4.654+15.*3)*fgkmm-fgkHybFLlowHoleDZ/2;
147const Double_t AliITSv11GeometrySDD::fgkHybFLlowPasX = fgkHybridWidth-32.775*fgkmm;
148const Double_t AliITSv11GeometrySDD::fgkHybFLlowAmbX = fgkHybridWidth-20.791*fgkmm;
149const Double_t AliITSv11GeometrySDD::fgkHybChipsDZ = 9.221*fgkmm;
150const Double_t AliITSv11GeometrySDD::fgkHybPascalDX = 10.245*fgkmm;
151const Double_t AliITSv11GeometrySDD::fgkHybAmbraDX = 8.51*fgkmm;
152const Double_t AliITSv11GeometrySDD::fgkHybFLUpperWidth = 15.012*fgkmm;
153const Double_t AliITSv11GeometrySDD::fgkHybFLUpperLength = 59.878*fgkmm;
154const Double_t AliITSv11GeometrySDD::fgkHybFLUpperAlDZ = 11.183*fgkmm;
155const Double_t AliITSv11GeometrySDD::fgkHybFLUpperAldx = 2.307*fgkmm;
531d6cdc 156
157const Double_t AliITSv11GeometrySDD::fgkmu = 1*fgkmicron; // 1*fgkmicron; // can be increase for checking thin objects
b7943f00 158const Double_t AliITSv11GeometrySDD::fgkHybridThBridgeThick = 0.25*fgkmm; // ???
159const Double_t AliITSv11GeometrySDD::fgkHybAlThick = 30*fgkmu;
160const Double_t AliITSv11GeometrySDD::fgkHybUpThick = 20*fgkmu;
161const Double_t AliITSv11GeometrySDD::fgkHybGlueScrnThick = 50*fgkmu; // ??? ?????
162const Double_t AliITSv11GeometrySDD::fgkHybGlueLowThick = 90*fgkmu;
163const Double_t AliITSv11GeometrySDD::fgkHybGlueUpThick = 90*fgkmu; // sur ?????
164const Double_t AliITSv11GeometrySDD::fgkHybAlCCThick = 12*fgkmu;
165const Double_t AliITSv11GeometrySDD::fgkHybUpCCThick = 12*fgkmu;
166const Double_t AliITSv11GeometrySDD::fgkHybChipThick = 150*fgkmu;
167const Double_t AliITSv11GeometrySDD::fgkHybGlueAgThick = 50*fgkmu; // ??? ????
168const Double_t AliITSv11GeometrySDD::fgkHybUnderNiThick = 20*fgkmu; // ??? ????
169const Int_t AliITSv11GeometrySDD::fgkNHybSMD = 25;
170const Double_t AliITSv11GeometrySDD::fgkHybSMDposX[fgkNHybSMD] =
171 {2.92*fgkmm,6.5*fgkmm,10.13*fgkmm,13.59*fgkmm,21.40*fgkmm,
172 2.92*fgkmm,6.5*fgkmm,10.13*fgkmm,13.59*fgkmm,19.91*fgkmm,
173 2.92*fgkmm,6.5*fgkmm,10.13*fgkmm,13.59*fgkmm,17.09*fgkmm,21.40*fgkmm,
174 2.92*fgkmm,6.5*fgkmm,10.13*fgkmm,13.59*fgkmm,19.91*fgkmm,
175 1.63*fgkmm,5.22*fgkmm,13.59*fgkmm,21.40*fgkmm};
176const Double_t AliITSv11GeometrySDD::fgkHybSMDposZ[fgkNHybSMD] =
177 { 2.3 *fgkmm, 2.3 *fgkmm, 2.3 *fgkmm, 2.3 *fgkmm, 2.3 *fgkmm,
178 17.315*fgkmm,17.315*fgkmm,17.315*fgkmm,17.315*fgkmm,17.315*fgkmm,
179 32.31*fgkmm,32.31*fgkmm,32.31*fgkmm,32.31*fgkmm,32.31*fgkmm,32.31*fgkmm,
180 47.38*fgkmm,47.38*fgkmm,47.38*fgkmm,47.38*fgkmm,47.38*fgkmm,
181 62.68*fgkmm,62.06*fgkmm,62.06*fgkmm,62.06*fgkmm};
182const Double_t AliITSv11GeometrySDD::fgkHybSMDmiddleW = 0.954*fgkmm;
183const Double_t AliITSv11GeometrySDD::fgkHybSMDmiddleL = 0.47 *fgkmm;
184const Double_t AliITSv11GeometrySDD::fgkHybSMDendW = 1.132*fgkmm;
185const Double_t AliITSv11GeometrySDD::fgkHybSMDendL = 0.925*fgkmm;
186const Double_t AliITSv11GeometrySDD::fgkHybSMDheight = 400.*fgkmu; // ??? ????!!!!!!!
187
188const Double_t AliITSv11GeometrySDD::fgkWaferThickness = 300.*fgkmu;
189const Double_t AliITSv11GeometrySDD::fgkWaferWidth = 72.5 *fgkmm;
190const Double_t AliITSv11GeometrySDD::fgkWaferLength = 87.6 *fgkmm;
191const Double_t AliITSv11GeometrySDD::fgkWaferThickSens = 299.8*fgkmu;
192const Double_t AliITSv11GeometrySDD::fgkWaferWidthSens = 70.17*fgkmm;
193const Double_t AliITSv11GeometrySDD::fgkWaferLengthSens = 74.97*fgkmm;
194
195const Double_t AliITSv11GeometrySDD::fgkDigitCablWidth = 18.4*fgkmm;
196const Double_t AliITSv11GeometrySDD::fgkDigitCablAlThick = (30+30*8./10.)*fgkmicron; // will probably change
197const Double_t AliITSv11GeometrySDD::fgkDigitCablPolyThick = (20+12)*fgkmicron; // will probably change
198
199const Double_t AliITSv11GeometrySDD::fgkWaHVcableAlThick = 30*2./10.*fgkmu; // will probably change // Al ratio is random !!!
200const Double_t AliITSv11GeometrySDD::fgkWaHVcablePolyThick = 175*fgkmu; // will probably change
201const Double_t AliITSv11GeometrySDD::fgkWaHVcableLength = 67.08*fgkmm;
108bd0fe 202const Double_t AliITSv11GeometrySDD::fgkWaHVcableWitdh = 17.4*fgkmm; // check !!!
203const Double_t AliITSv11GeometrySDD::fgkWaHVcableDW = 5.24*fgkmm; //5.24*fgkmm;// check !!!
b7943f00 204
205const Double_t AliITSv11GeometrySDD::fgkSensorGlassLX = 5. *fgkmm;
206const Double_t AliITSv11GeometrySDD::fgkSensorGlassLZ = 5. *fgkmm;
207const Double_t AliITSv11GeometrySDD::fgkSensorGlassLY = 150. *fgkmu;
208const Double_t AliITSv11GeometrySDD::fgkGlassDXOnSensor = 26.28*fgkmm; // check !!!
209const Double_t AliITSv11GeometrySDD::fgkGlassDZOnSensor = 22.50*fgkmm; // check !!!
210
211const Double_t AliITSv11GeometrySDD::fgkTransitHVAlThick = 30*2./10.*fgkmu; // check // will probably change //Al ratio is random
212const Double_t AliITSv11GeometrySDD::fgkTransitHVPolyThick = 100*fgkmu; // check // will probably change
213const Double_t AliITSv11GeometrySDD::fgkTransitHVHeadLX = 71.46*fgkmm; // check !!!
214const Double_t AliITSv11GeometrySDD::fgkTransitHVHeadLZ = 21.3*fgkmm;
215const Double_t AliITSv11GeometrySDD::fgkTransitHVBondingLZ = 3.6*fgkmm;
216const Double_t AliITSv11GeometrySDD::fgkTransitHVtailLength = 27*fgkmm; // ???, not yet fixed ...
217const Double_t AliITSv11GeometrySDD::fgkTransitHVtailWidth = 26*fgkmm;
108bd0fe 218const Double_t AliITSv11GeometrySDD::fgkTransitHVtailXpos = 8*fgkmm; //8*fgkmm // ???, a mesurer !!!
b7943f00 219const Double_t AliITSv11GeometrySDD::fgkTransitHVsideLZ = 10.34*fgkmm;
220const Double_t AliITSv11GeometrySDD::fgkTransitHVsideLeftZ = 4.11*fgkmm;
221const Double_t AliITSv11GeometrySDD::fgkTransitHVsideRightZ = 3.5*fgkmm; // ???, a mesurer !!!
222
223const Double_t AliITSv11GeometrySDD::fgkLongHVcablePolyThick= (20+30+125+30+20+30+125+30+20)*fgkmu; // check // will probably change
224const Double_t AliITSv11GeometrySDD::fgkLongHVcableAlThick = (30+30*2/10+30)*fgkmu; // check // will probably change
225const Double_t AliITSv11GeometrySDD::fgkLongHVcableSeparation = 600*fgkmicron;
c789ee28 226
108bd0fe 227const Double_t AliITSv11GeometrySDD::fgkRubyDX = 14.*fgkmm;
228const Double_t AliITSv11GeometrySDD::fgkRubyZladd3 = 250*fgkmm;
229const Double_t AliITSv11GeometrySDD::fgkRubyZladd4 = 325*fgkmm;
230
231// the stesalite ladder foot at its end
effd7456 232const Double_t AliITSv11GeometrySDD::fgkLadFootX = 60.*fgkmm;
233const Double_t AliITSv11GeometrySDD::fgkLadFootZ = 20.*fgkmm;
234const Double_t AliITSv11GeometrySDD::fgkLadFootY = 8.*fgkmm;
108bd0fe 235const Double_t AliITSv11GeometrySDD::fgkLadFootMiddleY = 4.5*fgkmm;
effd7456 236const Double_t AliITSv11GeometrySDD::fgkLadBox1X = 23.*fgkmm;
237const Double_t AliITSv11GeometrySDD::fgkLadFingerPrintX = 6.*fgkmm;
238const Double_t AliITSv11GeometrySDD::fgkLadFingerPrintY = 1.*fgkmm;
108bd0fe 239const Double_t AliITSv11GeometrySDD::fgkLadFingerPrintBorder = 4.*fgkmm;
240const Double_t AliITSv11GeometrySDD::fgkRubyCageHoleZ = 8.*fgkmm;
241const Double_t AliITSv11GeometrySDD::fgkRubyCageHoleX = 9.*fgkmm;
242const Double_t AliITSv11GeometrySDD::fgkRubyCageHoleY = 6.5*fgkmm;
243const Double_t AliITSv11GeometrySDD::fgkRubyCageAxisShift = 0.5*fgkmm;
244const Double_t AliITSv11GeometrySDD::fgkScrewM4diam = 4.*fgkmm;
245
246const Double_t AliITSv11GeometrySDD::fgkRubyScrewShiftToCenterY = 0.1;
73dfc864 247const Double_t AliITSv11GeometrySDD::fgkRubyHoleDiam = 0.5;
108bd0fe 248
73dfc864 249// the U cooling pipe and its heat exchanger in end-ladder cards system
108bd0fe 250const Double_t AliITSv11GeometrySDD::fgkEndLadPipeUlengthLay3 = 138*fgkmm;
251const Double_t AliITSv11GeometrySDD::fgkEndLadPipeUlengthLay4 = 150*fgkmm;
252const Double_t AliITSv11GeometrySDD::fgkEndLadPipeUwidth = 59*fgkmm;
253const Double_t AliITSv11GeometrySDD::fgkEndLadPipeRadius = 5*fgkmm;
254const Double_t AliITSv11GeometrySDD::fgkEndLadPipeInnerDiam = 2.8*fgkmm;
255const Double_t AliITSv11GeometrySDD::fgkEndLadPipeOuterDiam = 3.*fgkmm;
256//--- The al body of the cooling syst.of the heat exchanger :
73dfc864 257const Double_t AliITSv11GeometrySDD::fgkEndLadPipeArmZLay3 = 112.*fgkmm; //
258const Double_t AliITSv11GeometrySDD::fgkEndLadPipeArmZLay4 = 125.*fgkmm; //
259const Double_t AliITSv11GeometrySDD::fgkEndLadPipeArmX = 4.75*fgkmm; // the arms of the U cooling tube
260const Double_t AliITSv11GeometrySDD::fgkEndLadPipeArmY = 6.8*fgkmm;
261const Double_t AliITSv11GeometrySDD::fgkEndLadPipeArmBoxDY = 1.03*fgkmm; // shift in Y of the arms from the axis
262const Double_t AliITSv11GeometrySDD::fgkEndLadPipeArmBoxDX = 0.125*fgkmm; // shift in X of the arms from the axis
263const Double_t AliITSv11GeometrySDD::fgkEndLadPipeArmZpos = 8.9*fgkmm; //
108bd0fe 264
265// LV card :
73dfc864 266const Double_t AliITSv11GeometrySDD::fgkLVcardX = 26.525*fgkmm;
267const Double_t AliITSv11GeometrySDD::fgkLVcardY = 44.95*fgkmm;
268const Double_t AliITSv11GeometrySDD::fgkLVcardZ = 1.*fgkmm; // all except Cu layer //???
269const Double_t AliITSv11GeometrySDD::fgkLVcardCuZ = 0.1*fgkmm; //???
effd7456 270
271const Double_t AliITSv11GeometrySDD::fgkLVChip0X = 16.525*fgkmm;
272const Double_t AliITSv11GeometrySDD::fgkLVChip0Y = 10.8*fgkmm;
273const Double_t AliITSv11GeometrySDD::fgkLVChip0Z = 3.5*fgkmm; // all except si layer //???
274const Double_t AliITSv11GeometrySDD::fgkLVChip0SiZ = 0.2*fgkmm; //???????????????????????????????????????????????????
275const Double_t AliITSv11GeometrySDD::fgkLVChip0PosX = 13.*fgkmm; //19.95*fgkmm; ???
276const Double_t AliITSv11GeometrySDD::fgkLVChip0PosY = 10.3*fgkmm;
277
278const Double_t AliITSv11GeometrySDD::fgkLVChip1X = 6.00*fgkmm;
279const Double_t AliITSv11GeometrySDD::fgkLVChip1Y = 6.00*fgkmm;
280const Double_t AliITSv11GeometrySDD::fgkLVChip1Z = 1*fgkmm; // ???
281const Double_t AliITSv11GeometrySDD::fgkLVChip1SiZ = 0.2*fgkmm; // ???
282const Double_t AliITSv11GeometrySDD::fgkLVChip1PosX = 18.*fgkmm;
283const Double_t AliITSv11GeometrySDD::fgkLVChip1PosY = 27.6*fgkmm;
284
285const Double_t AliITSv11GeometrySDD::fgkLVChip2X = 6.00*fgkmm;
286const Double_t AliITSv11GeometrySDD::fgkLVChip2Y = 6.00*fgkmm;
287const Double_t AliITSv11GeometrySDD::fgkLVChip2Z = 1*fgkmm; // ???
288const Double_t AliITSv11GeometrySDD::fgkLVChip2SiZ = 0.2*fgkmm; //???
289const Double_t AliITSv11GeometrySDD::fgkLVChip2PosX = 18.0*fgkmm;
290const Double_t AliITSv11GeometrySDD::fgkLVChip2PosY = 39.0*fgkmm;
291
292const Double_t AliITSv11GeometrySDD::fgkLVChip3X = 4.01*fgkmm;
293const Double_t AliITSv11GeometrySDD::fgkLVChip3Y = 4.01*fgkmm;
294const Double_t AliITSv11GeometrySDD::fgkLVChip3Z = 1*fgkmm; // ???
295const Double_t AliITSv11GeometrySDD::fgkLVChip3SiZ = 0.2*fgkmm;
296const Double_t AliITSv11GeometrySDD::fgkLVChip3PosX = 20.7*fgkmm;
297const Double_t AliITSv11GeometrySDD::fgkLVChip3PosY = 21.4*fgkmm;
298
73dfc864 299const Double_t AliITSv11GeometrySDD::fgkLVcoolX1 = 17.25*fgkmm;
300const Double_t AliITSv11GeometrySDD::fgkLVcoolY1 = 8.7*fgkmm;
301const Double_t AliITSv11GeometrySDD::fgkLVcoolZ1 = 1.*fgkmm;
effd7456 302
73dfc864 303const Double_t AliITSv11GeometrySDD::fgkLVcoolX2 = 3.5*fgkmm;
304const Double_t AliITSv11GeometrySDD::fgkLVcoolY2 = 8.7*fgkmm;
305const Double_t AliITSv11GeometrySDD::fgkLVcoolZ2 = 2.3*fgkmm;
effd7456 306
73dfc864 307const Double_t AliITSv11GeometrySDD::fgkLVcoolX3 = 4.75*fgkmm;
308const Double_t AliITSv11GeometrySDD::fgkLVcoolY3 = 3.1*fgkmm; //+0.1=glue
108bd0fe 309const Double_t AliITSv11GeometrySDD::fgkLVcoolPosY = 6.5*fgkmm;
310
311// HV card :
312const Double_t AliITSv11GeometrySDD::fgkHVCardCeramX = 54.01*fgkmm;
313const Double_t AliITSv11GeometrySDD::fgkHVCardCeramY = 40.89*fgkmm;
314const Double_t AliITSv11GeometrySDD::fgkHVCardCeramZ = 0.7*fgkmm; // ???
315
316const Double_t AliITSv11GeometrySDD::fgkHVCardCapa1X = 6.8*fgkmm;
317const Double_t AliITSv11GeometrySDD::fgkHVCardCapa1Z = 1.*fgkmm; // ???
318const Double_t AliITSv11GeometrySDD::fgkHVCardCapa1Ymid = 4.1*fgkmm;
319const Double_t AliITSv11GeometrySDD::fgkHVCardCapa1Yend = 0.95*fgkmm; // doesn't take into account the soldering
320const Double_t AliITSv11GeometrySDD::fgkHVCardCapa1PosX = 13.1*fgkmm;
321const Double_t AliITSv11GeometrySDD::fgkHVCardCapa1PosY = 14.5*fgkmm;
322
323const Double_t AliITSv11GeometrySDD::fgkHVCardCapa2X = 6.8*fgkmm;
324const Double_t AliITSv11GeometrySDD::fgkHVCardCapa2Z = 1.*fgkmm; // ???
325const Double_t AliITSv11GeometrySDD::fgkHVCardCapa2Ymid = 2.9*fgkmm;
326const Double_t AliITSv11GeometrySDD::fgkHVCardCapa2Yend = 0.95*fgkmm;
327const Double_t AliITSv11GeometrySDD::fgkHVCardCapa2PosX = -12.6*fgkmm;
328const Double_t AliITSv11GeometrySDD::fgkHVCardCapa2PosY = 16.54*fgkmm;
329
330const Double_t AliITSv11GeometrySDD::fgkHVCardCapa3Xmid = 3.0*fgkmm;
331const Double_t AliITSv11GeometrySDD::fgkHVCardCapa3Xend = 0.91*fgkmm;
332const Double_t AliITSv11GeometrySDD::fgkHVCardCapa3Z = 2.*fgkmm; // ???
333const Double_t AliITSv11GeometrySDD::fgkHVCardCapa3Y = 3.43*fgkmm;
334
335const Double_t AliITSv11GeometrySDD::fgkHVCardCapa3PosX1 = 14.6*fgkmm;
336const Double_t AliITSv11GeometrySDD::fgkHVCardCapa3PosX2 = 7.2*fgkmm;
337const Double_t AliITSv11GeometrySDD::fgkHVCardCapa3PosX3 = 2.52*fgkmm;
338const Double_t AliITSv11GeometrySDD::fgkHVCardCapa3PosX4 = -4.96*fgkmm;
339const Double_t AliITSv11GeometrySDD::fgkHVCardCapa3PosX5 = -13.82*fgkmm;
340const Double_t AliITSv11GeometrySDD::fgkHVCardCapa3PosY1 = 6.27*fgkmm;
341const Double_t AliITSv11GeometrySDD::fgkHVCardCapa3PosY2 = 0.7*fgkmm;
342const Double_t AliITSv11GeometrySDD::fgkHVCardCapa3PosY3 = 9.1*fgkmm;
343
344const Double_t AliITSv11GeometrySDD::fgkHVCardCool1X = 14.*fgkmm;
345const Double_t AliITSv11GeometrySDD::fgkHVCardCool1Y = 9.5*fgkmm;
346const Double_t AliITSv11GeometrySDD::fgkHVCardCool1Z = 2.*fgkmm;
347const Double_t AliITSv11GeometrySDD::fgkHVCardCool2X = 14.25*fgkmm;
348const Double_t AliITSv11GeometrySDD::fgkHVCardCool2Y = 3.5*fgkmm;
349const Double_t AliITSv11GeometrySDD::fgkHVCardCool2Z = 4.5*fgkmm;
350const Double_t AliITSv11GeometrySDD::fgkHVCardCool3X = 4.5*fgkmm;
351const Double_t AliITSv11GeometrySDD::fgkHVCardCool3Y = 3.5*fgkmm;
352const Double_t AliITSv11GeometrySDD::fgkHVCardCool3Z = 7.2*fgkmm;
353const Double_t AliITSv11GeometrySDD::fgkHVCardCoolDY = 6.*fgkmm;
354
73dfc864 355const Double_t AliITSv11GeometrySDD::fgkCarlosSuppX1 = 19.5*fgkmm;
356const Double_t AliITSv11GeometrySDD::fgkCarlosSuppY1 = 2*fgkmm;
357const Double_t AliITSv11GeometrySDD::fgkCarlosSuppX2 = 35.*fgkmm;
358const Double_t AliITSv11GeometrySDD::fgkCarlosSuppY2 = 3.9*fgkmm;
359const Double_t AliITSv11GeometrySDD::fgkCarlosSuppZ = 17.*fgkmm;
360const Double_t AliITSv11GeometrySDD::fgkCarlosSuppAngle = 45;
361const Double_t AliITSv11GeometrySDD::fgkCarlosSuppX3 = 4.5*fgkmm;
362const Double_t AliITSv11GeometrySDD::fgkCarlosSuppY3 = 3.*fgkmm;
363const Double_t AliITSv11GeometrySDD::fgkCarlosSuppZ3 = 12.*fgkmm;
108bd0fe 364const Double_t AliITSv11GeometrySDD::fgkCarlosSuppTopLen = 8.65*fgkmm;
365
73dfc864 366// screws fixing boards to the end-ladder on the U tube
367const Double_t AliITSv11GeometrySDD::fgkLittleScrewHeadR = 1.85*fgkmm;
368const Double_t AliITSv11GeometrySDD::fgkLittleScrewHeadH = 1.5*fgkmm;
369const Double_t AliITSv11GeometrySDD::fgkLittleScrewR = 0.7*fgkmm;
370const Double_t AliITSv11GeometrySDD::fgkShiftLittleScrewLV = 3*fgkmm; // ???
371const Double_t AliITSv11GeometrySDD::fgkLittleLVScrewHeadR = 1.2*fgkmm; // ???
372
373// CARLOS board
374const Double_t AliITSv11GeometrySDD::fgkCarlosCardX1 = (25.50+28.50)*fgkmm; // length (first part of Carlos card)
375const Double_t AliITSv11GeometrySDD::fgkCarlosCardY1 = 1.6*fgkmm; // thickness
376const Double_t AliITSv11GeometrySDD::fgkCarlosCardZ1 = 40.8*fgkmm; // width
377const Double_t AliITSv11GeometrySDD::fgkCarlosCardCuY = 0.1*fgkmm; // thickness of Cu layer (strips)
378const Double_t AliITSv11GeometrySDD::fgkCarlosCardX2 = 25.50*fgkmm; // length (2nd part of Carlos card)
379const Double_t AliITSv11GeometrySDD::fgkCarlosCardZ2 = 8.20*fgkmm; // width
380
381const Double_t AliITSv11GeometrySDD::fgkCarlosCardChipSiThick = 0.1*fgkmm; // ??? idem for all chips ???
382const Double_t AliITSv11GeometrySDD::fgkCarlosCardShift = 9*fgkmm; // ??? shift in z w.r.t. heat bridge
383
384// size and position of various chips on carlos end-ladder board
385const Double_t AliITSv11GeometrySDD::fgkCarlosU1X = 13*fgkmm;
386const Double_t AliITSv11GeometrySDD::fgkCarlosU1Y = 1.68*fgkmm;
387const Double_t AliITSv11GeometrySDD::fgkCarlosU1Z = 13*fgkmm;
388const Double_t AliITSv11GeometrySDD::fgkCarlosU1posX = 18.4*fgkmm;
389const Double_t AliITSv11GeometrySDD::fgkCarlosU1posZ = -7.2*fgkmm;
390
391const Double_t AliITSv11GeometrySDD::fgkCarlosU2X = 13.75*fgkmm;
392const Double_t AliITSv11GeometrySDD::fgkCarlosU2Y = 1.60*fgkmm;
393const Double_t AliITSv11GeometrySDD::fgkCarlosU2Z = 13.85*fgkmm;
394const Double_t AliITSv11GeometrySDD::fgkCarlosU2posX = -0.375*fgkmm;
395const Double_t AliITSv11GeometrySDD::fgkCarlosU2posZ = -9.725*fgkmm;
396
397const Double_t AliITSv11GeometrySDD::fgkCarlosU3X = 5*fgkmm;
398const Double_t AliITSv11GeometrySDD::fgkCarlosU3Y = 1.*fgkmm;
399const Double_t AliITSv11GeometrySDD::fgkCarlosU3Z = 5*fgkmm;
400const Double_t AliITSv11GeometrySDD::fgkCarlosU3posX = 6.4*fgkmm;
401const Double_t AliITSv11GeometrySDD::fgkCarlosU3posZ = 9.9*fgkmm;
402
403// U4 like U3
404const Double_t AliITSv11GeometrySDD::fgkCarlosU4posX = -12*fgkmm;
405const Double_t AliITSv11GeometrySDD::fgkCarlosU4posZ = 3.6*fgkmm;
406
407const Double_t AliITSv11GeometrySDD::fgkCarlosU17X = 16*fgkmm;
408const Double_t AliITSv11GeometrySDD::fgkCarlosU17Y = 3.5*fgkmm;
409const Double_t AliITSv11GeometrySDD::fgkCarlosU17Z = 10.9*fgkmm;
410const Double_t AliITSv11GeometrySDD::fgkCarlosU17posX = -17.84*fgkmm;
411const Double_t AliITSv11GeometrySDD::fgkCarlosU17posZ = -10.95*fgkmm;
412
413const Double_t AliITSv11GeometrySDD::fgkCarlosU35X = 4*fgkmm;
414const Double_t AliITSv11GeometrySDD::fgkCarlosU35Y = 1.*fgkmm;
415const Double_t AliITSv11GeometrySDD::fgkCarlosU35Z = 4*fgkmm;
416const Double_t AliITSv11GeometrySDD::fgkCarlosU35posX = -21.6*fgkmm;
417const Double_t AliITSv11GeometrySDD::fgkCarlosU35posZ = 2.3*fgkmm;
418
419const Double_t AliITSv11GeometrySDD::fgkCarlosU36X = 6*fgkmm;
420const Double_t AliITSv11GeometrySDD::fgkCarlosU36Y = 1.*fgkmm;
421const Double_t AliITSv11GeometrySDD::fgkCarlosU36Z = 6*fgkmm;
422const Double_t AliITSv11GeometrySDD::fgkCarlosU36posX = -21.6*fgkmm;
423const Double_t AliITSv11GeometrySDD::fgkCarlosU36posZ = 9.6*fgkmm;
424
425const Double_t AliITSv11GeometrySDD::fgkCarlosQZ1X = 8*fgkmm;
426const Double_t AliITSv11GeometrySDD::fgkCarlosQZ1Y = 1.7*fgkmm; // look thicker than design number (0.7) ! ???
427const Double_t AliITSv11GeometrySDD::fgkCarlosQZ1Z = 3.7*fgkmm;
428const Double_t AliITSv11GeometrySDD::fgkCarlosQZ1posX = -12*fgkmm;
429const Double_t AliITSv11GeometrySDD::fgkCarlosQZ1posZ = 10.6*fgkmm;
430
431// distance from the heat bridge center to the card center :
432const Double_t AliITSv11GeometrySDD::fgkCarlosCard2HeatBridge = fgkCarlosSuppY2/2+fgkCarlosCardY1/2+fgkCarlosU1Y+0.1*fgkmm;
433
434// some pieces at the end of the carbon fiber ladder
435 const Double_t AliITSv11GeometrySDD::fgkCoolPipeLay3Len = 467.*fgkmm; // ???
436 const Double_t AliITSv11GeometrySDD::fgkCoolPipeLay4Len = 616.*fgkmm; // ???
437 const Double_t AliITSv11GeometrySDD::fgkHVguideX1 = 42.5*fgkmm;
438 const Double_t AliITSv11GeometrySDD::fgkHVguideY1 = 7.*fgkmm;
439 const Double_t AliITSv11GeometrySDD::fgkHVguideZ1 = 10.*fgkmm;
440 const Double_t AliITSv11GeometrySDD::fgkHVguideZ2 = 6.*fgkmm;
441 const Double_t AliITSv11GeometrySDD::fgkHVguideDX = -8.5*fgkmm;
442 const Double_t AliITSv11GeometrySDD::fgkHVguideSuppFullZ = 37.5*fgkmm;
443
444// Cooling connector between phynox and plastic cooling water tubes
445const Double_t AliITSv11GeometrySDD::fgkConnectorCoolTubeRmin = 1 *fgkmm;
446const Double_t AliITSv11GeometrySDD::fgkConnectorCoolTubeR1 = 2.5*fgkmm; // ???
447const Double_t AliITSv11GeometrySDD::fgkConnectorCoolTubeL1 = 3.*fgkmm; // ???
448const Double_t AliITSv11GeometrySDD::fgkConnectorCoolTubeR2 = 3.5*fgkmm; // ???
449const Double_t AliITSv11GeometrySDD::fgkConnectorCoolTubeL2 = 2.*fgkmm; // ???
450const Double_t AliITSv11GeometrySDD::fgkConnectorCoolTubeR3 = 3.*fgkmm; // ???
451const Double_t AliITSv11GeometrySDD::fgkConnectorCoolTubeL3 = 5 *fgkmm; // ???
108bd0fe 452
c789ee28 453
b7943f00 454ClassImp(AliITSv11GeometrySDD)
c789ee28 455
b7943f00 456//________________________________________________________________________
33ddec7d 457AliITSv11GeometrySDD::AliITSv11GeometrySDD():
458 AliITSv11Geometry(),
459 fPinSupport(0),
460 fCoolPipeSupportL(0),
461 fCoolPipeSupportR(0),
108bd0fe 462 fSDDsensor3(0),
463 fSDDsensor4(0),
33ddec7d 464 fBaseThermalBridge(0),
465 fHybrid(0),
73dfc864 466 fCardLVR(0),
467 fCardLVL(0),
468 fCardHV(0),
469 fCardCarlos(0),
470 fRaccordoL(0),
33ddec7d 471 fDigitCableLay3A(0),
472 fDigitCableLay3B(0),
473 fDigitCableLay4A(0),
474 fDigitCableLay4B(0),
475 fMotherVol(0),
476 fAddHybrids(kTRUE),
477 fAddSensors(kTRUE),
478 fAddHVcables(kTRUE),
479 fAddCables(kTRUE),
480 fAddCoolingSyst(kTRUE),
481 fCoolingOn(kTRUE),
482 fAddOnlyLadder3min(-1),
483 fAddOnlyLadder3max(-1),
484 fAddOnlyLadder4min(-1),
485 fAddOnlyLadder4max(-1),
108bd0fe 486 fColorCarbonFiber(4),
487 fColorRyton(5),
488 fColorPhynox(7),
489 fColorSilicon(3),
490 fColorAl(7),
491 fColorPolyhamide(5),
33ddec7d 492 fColorGlass(2),
108bd0fe 493 fColorSMD(12),
494 fColorSMDweld(17),
495 fColorStesalite(20),
33ddec7d 496 fLay3LadderUnderSegDH(0),
497 fLay4LadderUnderSegDH(0),
498 fLay3LaddShortRadius(0),
499 fLay3LaddLongRadius(0),
500 fLay4LaddShortRadius(0),
501 fLay4LaddLongRadius(0)
c789ee28 502{
b7943f00 503 //
504 // Standard constructor
505 //
b7943f00 506 SetParameters();
531d6cdc 507}
c789ee28 508
108bd0fe 509
b7943f00 510//________________________________________________________________________
511AliITSv11GeometrySDD::AliITSv11GeometrySDD(Int_t debug) :
33ddec7d 512 AliITSv11Geometry(debug),
513 fPinSupport(0),
514 fCoolPipeSupportL(0),
515 fCoolPipeSupportR(0),
108bd0fe 516 fSDDsensor3(0),
517 fSDDsensor4(0),
33ddec7d 518 fBaseThermalBridge(0),
519 fHybrid(0),
73dfc864 520 fCardLVR(0),
521 fCardLVL(0),
522 fCardHV(0),
523 fCardCarlos(0),
524 fRaccordoL(0),
33ddec7d 525 fDigitCableLay3A(0),
526 fDigitCableLay3B(0),
527 fDigitCableLay4A(0),
528 fDigitCableLay4B(0),
529 fMotherVol(0),
530 fAddHybrids(kTRUE),
531 fAddSensors(kTRUE),
532 fAddHVcables(kTRUE),
533 fAddCables(kTRUE),
534 fAddCoolingSyst(kTRUE),
b7943f00 535 fCoolingOn(kTRUE),
33ddec7d 536 fAddOnlyLadder3min(-1),
537 fAddOnlyLadder3max(-1),
538 fAddOnlyLadder4min(-1),
539 fAddOnlyLadder4max(-1),
108bd0fe 540 fColorCarbonFiber(4),
541 fColorRyton(5),
542 fColorPhynox(7),
543 fColorSilicon(3),
544 fColorAl(7),
545 fColorPolyhamide(5),
33ddec7d 546 fColorGlass(2),
108bd0fe 547 fColorSMD(12),
548 fColorSMDweld(17),
549 fColorStesalite(20),
33ddec7d 550 fLay3LadderUnderSegDH(0),
551 fLay4LadderUnderSegDH(0),
552 fLay3LaddShortRadius(0),
553 fLay3LaddLongRadius(0),
554 fLay4LaddShortRadius(0),
555 fLay4LaddLongRadius(0)
c789ee28 556{
b7943f00 557 //
558 // Constructor setting debugging level
559 //
b7943f00 560 SetParameters();
531d6cdc 561}
c789ee28 562
c789ee28 563//________________________________________________________________________
b7943f00 564AliITSv11GeometrySDD::AliITSv11GeometrySDD(const AliITSv11GeometrySDD &s) :
108bd0fe 565 AliITSv11Geometry(s.GetDebug()),
33ddec7d 566 fPinSupport(s.fPinSupport),
567 fCoolPipeSupportL(s.fCoolPipeSupportL),
568 fCoolPipeSupportR(s.fCoolPipeSupportR),
108bd0fe 569 fSDDsensor3(s.fSDDsensor3),
570 fSDDsensor4(s.fSDDsensor4),
33ddec7d 571 fBaseThermalBridge(s.fBaseThermalBridge),
572 fHybrid(s.fHybrid),
73dfc864 573 fCardLVR(s.fCardLVR),
574 fCardLVL(s.fCardLVL),
575 fCardHV(s.fCardHV),
576 fCardCarlos(s.fCardCarlos),
577 fRaccordoL(s.fRaccordoL),
33ddec7d 578 fDigitCableLay3A(s.fDigitCableLay3A),
579 fDigitCableLay3B(s.fDigitCableLay3B),
580 fDigitCableLay4A(s.fDigitCableLay4A),
581 fDigitCableLay4B(s.fDigitCableLay4B),
582 fMotherVol(s.fMotherVol),
583 fAddHybrids(s.fAddHybrids),
584 fAddSensors(s.fAddSensors),
585 fAddHVcables(s.fAddHVcables),
586 fAddCables(s.fAddCables),
587 fAddCoolingSyst(s.fAddCoolingSyst),
588 fCoolingOn(s.fCoolingOn),
589 fAddOnlyLadder3min(s.fAddOnlyLadder3min),
590 fAddOnlyLadder3max(s.fAddOnlyLadder3max),
591 fAddOnlyLadder4min(s.fAddOnlyLadder4min),
108bd0fe 592 fAddOnlyLadder4max(s.fAddOnlyLadder4max),
33ddec7d 593 fColorCarbonFiber(s.fColorCarbonFiber),
594 fColorRyton(s.fColorRyton),
595 fColorPhynox(s.fColorPhynox),
596 fColorSilicon(s.fColorSilicon),
597 fColorAl(s.fColorAl),
598 fColorPolyhamide(s.fColorPolyhamide),
599 fColorGlass(s.fColorGlass),
600 fColorSMD(s.fColorSMD),
601 fColorSMDweld(s.fColorSMDweld),
108bd0fe 602 fColorStesalite(s.fColorStesalite),
33ddec7d 603 fLay3LadderUnderSegDH(s.fLay3LadderUnderSegDH),
604 fLay4LadderUnderSegDH(s.fLay4LadderUnderSegDH),
605 fLay3LaddShortRadius(s.fLay3LaddShortRadius),
606 fLay3LaddLongRadius(s.fLay3LaddLongRadius),
607 fLay4LaddShortRadius(s.fLay4LaddShortRadius),
608 fLay4LaddLongRadius(s.fLay4LaddLongRadius)
b7943f00 609{
33ddec7d 610 // Copy Constructor
611 // do only a "shallow copy" ...
b7943f00 612 SetParameters();
613}
c789ee28 614
b7943f00 615//________________________________________________________________________
616AliITSv11GeometrySDD& AliITSv11GeometrySDD::
617operator=(const AliITSv11GeometrySDD &s) {
618 // Assignment operator
619 if(&s == this) return *this;
620 fMotherVol = s.fMotherVol;
621 fAddHybrids = s.fAddHybrids;
622 fAddSensors = s.fAddSensors;
623 fAddHVcables = s.fAddHVcables;
624 fAddCables = s.fAddCables;
625 fAddCoolingSyst = s.fAddCoolingSyst;
626 fCoolingOn = s.fCoolingOn;
627 fAddOnlyLadder3min = s.fAddOnlyLadder3min;
628 fAddOnlyLadder3max = s.fAddOnlyLadder3max;
629 fAddOnlyLadder4min = s.fAddOnlyLadder4min;
630 fAddOnlyLadder4max = s.fAddOnlyLadder4max;
631 return *this;
632}
db486a6e 633
c789ee28 634//________________________________________________________________________
b7943f00 635AliITSv11GeometrySDD::~AliITSv11GeometrySDD() {
636 // Look like a destructor
637 // Smell like a destructor
638 // And actually is the destructor
639 if (fDigitCableLay3A) delete [] fDigitCableLay3A;
640 if (fDigitCableLay3B) delete [] fDigitCableLay3B;
641 if (fDigitCableLay4A) delete [] fDigitCableLay4A;
642 if (fDigitCableLay4B) delete [] fDigitCableLay4B;
531d6cdc 643}
c789ee28 644
c789ee28 645//________________________________________________________________________
b7943f00 646void AliITSv11GeometrySDD::SetParameters() {
647 //
648 // Define display colors and the non constant geometry parameters
649 //
650
b7943f00 651 Double_t detLadderDist = 8*fgkmm;
652
653 fLay3LadderUnderSegDH = detLadderDist - (fgkWaHVcableAlThick+fgkWaHVcablePolyThick);
654 fLay4LadderUnderSegDH = detLadderDist - (fgkWaHVcableAlThick+fgkWaHVcablePolyThick);
655
656 // radius from the center to the CF ladder :
657 fLay3LaddShortRadius = (fgkLay3DetShortRadius
658 + fgkLadWaferSep+2*fgkWaferThickness
659 + detLadderDist);
660 fLay3LaddLongRadius = (fgkLay3DetLongRadius
661 + fgkLadWaferSep+2*fgkWaferThickness
662 + detLadderDist);
663 fLay4LaddShortRadius = (fgkLay4DetShortRadius
664 + fgkLadWaferSep+2*fgkWaferThickness
665 + detLadderDist);
666 fLay4LaddLongRadius = (fgkLay4DetLongRadius
667 + fgkLadWaferSep+2*fgkWaferThickness
668 + detLadderDist);
c789ee28 669
670 fLay3sensorZPos[0]= ( 35.8+72.4+75.8 )*fgkmm;
671 fLay3sensorZPos[1]= ( 35.8+72.4 )*fgkmm;
672 fLay3sensorZPos[2]= ( 35.8 )*fgkmm;
673 fLay3sensorZPos[3]= ( -37.9 )*fgkmm;
674 fLay3sensorZPos[4]= ( -37.9-74.9 )*fgkmm;
675 fLay3sensorZPos[5]= ( -37.9-74.9-71.1 )*fgkmm;
676
677 fLay4sensorZPos[0] = ( 38.5+73.2+75.4+71.6 )*fgkmm;
678 fLay4sensorZPos[1] = ( 38.5+73.2+75.4 )*fgkmm;
679 fLay4sensorZPos[2] = ( 38.5+73.2 )*fgkmm;
680 fLay4sensorZPos[3] = ( 38.5 )*fgkmm;
681 fLay4sensorZPos[4] = ( -35.6 )*fgkmm;
682 fLay4sensorZPos[5] = ( -35.6-74.8 )*fgkmm;
683 fLay4sensorZPos[6] = ( -35.6-74.8-72.4 )*fgkmm;
684 fLay4sensorZPos[7] = ( -35.6-74.8-72.4-76. )*fgkmm;
531d6cdc 685}
686
c789ee28 687
c789ee28 688//________________________________________________________________________
b7943f00 689TGeoMedium* AliITSv11GeometrySDD::GetMedium(const char* mediumName) {
690 //
691 // Called to get a medium, checks that it exists.
692 // If not, prints an error and returns 0
693 //
c789ee28 694
531d6cdc 695 char ch[30];
696 sprintf(ch, "ITS_%s",mediumName);
697 TGeoMedium* medium = gGeoManager->GetMedium(ch);
b7943f00 698 if (! medium)
699 printf("Error(AliITSv11GeometrySDD)::medium %s not found !\n", mediumName);
b7943f00 700 return medium;
531d6cdc 701}
702
c789ee28 703
b7943f00 704//________________________________________________________________________
fa4639a3 705Int_t AliITSv11GeometrySDD::GetLay3NLadders() const{
706 // Get the actual number of ladder in layer 3
707 if ( (fAddOnlyLadder3min<0) ||
708 (fAddOnlyLadder3min >= fgkLay3Nladd) ||
709 (fAddOnlyLadder3max<0) ||
710 (fAddOnlyLadder3max >= fgkLay3Nladd) )
711 return fgkLay3Nladd;
712 else return (fAddOnlyLadder3max-fAddOnlyLadder3min+1);
713}
714
531d6cdc 715
fa4639a3 716//________________________________________________________________________
717Int_t AliITSv11GeometrySDD::GetLay4NLadders() const{
718 // Get the actual number of ladder in layer 4
719 if ( (fAddOnlyLadder4min<0) ||
720 (fAddOnlyLadder4min >= fgkLay4Nladd) ||
721 (fAddOnlyLadder4max<0) ||
722 (fAddOnlyLadder4max >= fgkLay4Nladd) )
723 return fgkLay4Nladd;
724 else return (fAddOnlyLadder4max-fAddOnlyLadder4min+1);
725}
726
531d6cdc 727
fa4639a3 728//________________________________________________________________________
b7943f00 729void AliITSv11GeometrySDD::CreateBasicObjects() {
730 //
731 // Create basics objets which will be assembled together
732 // in Layer3 and Layer4 functions
733 //
734
531d6cdc 735
fa4639a3 736 fDigitCableLay3A = new AliITSv11GeomCableFlat[fgkLay3Ndet];
737 fDigitCableLay3B = new AliITSv11GeomCableFlat[fgkLay3Ndet];
738 fDigitCableLay4A = new AliITSv11GeomCableFlat[fgkLay4Ndet];
739 fDigitCableLay4B = new AliITSv11GeomCableFlat[fgkLay4Ndet];
740
b7943f00 741 fPinSupport = CreatePinSupport();
742 fCoolPipeSupportL = CreateCoolPipeSupportL();
743 fCoolPipeSupportR = CreateCoolPipeSupportR();
108bd0fe 744 CreateSDDsensor();
b7943f00 745 fBaseThermalBridge = CreateBaseThermalBridge();
746 fHybrid = CreateHybrid(0);
747
108bd0fe 748 TGeoMedium *carbonFiberLadderStruct = GetMedium("SDD C AL (M55J)$"); //ITSsddCarbonM55J
73dfc864 749 TGeoMedium *polyhamideSDD = GetMedium("SDDKAPTON (POLYCH2)$");//ITSsddKAPTON_POLYCH2
750 TGeoMedium *alSDD = GetMedium("AL$"); //ITSal
751 TGeoMedium *stainless = GetMedium("INOX$"); // for screws, what is the material ???????????
752 TGeoMedium *coolerMediumSDD = GetMedium("WATER$");
753 TGeoMedium *raccordMedium = GetMedium("inox/alum$"); // ??? material of raccordo ???
b7943f00 754
755 //********************************************************************
756 // pieces of the carbon fiber structure
757 //********************************************************************
758 Double_t dy = fgkLadderSegBoxDH/2;
759 Double_t triangleHeight = fgkLadderHeight - fgkLadderBeamRadius;
760 Double_t halfTheta = TMath::ATan( 0.5*fgkLadderWidth/triangleHeight );
761 Double_t alpha = TMath::Pi()*3./4. - halfTheta/2.;
762 Double_t beta = (TMath::Pi() - 2.*halfTheta)/4.;
763 Double_t dYTranslation = (fgkLadderHeight/2.
764 -0.5*fgkLadderWidth*TMath::Tan(beta)
765 -fgkLadderBeamRadius);
766 Double_t distCenterSideDown = 0.5*fgkLadderWidth/TMath::Cos(beta);
767
768 //--- the top V of the Carbon Fiber Ladder (segment)
769 TGeoArb8 *cfLaddTop1 = CreateLadderSide( fgkSegmentLength/2., halfTheta,
770 -1, fgkLadderLa, fgkLadderHa, fgkLadderl);
771 TGeoVolume *cfLaddTopVol1 = new TGeoVolume("ITSsddCFladdTopCornerVol1",
772 cfLaddTop1,carbonFiberLadderStruct);
773 TGeoArb8 *cfLaddTop2 = CreateLadderSide( fgkSegmentLength/2., halfTheta,
774 1, fgkLadderLa, fgkLadderHa, fgkLadderl);
775 TGeoVolume *cfLaddTopVol2 = new TGeoVolume("ITSsddCFladdTopCornerVol2",
776 cfLaddTop2, carbonFiberLadderStruct);
777 cfLaddTopVol1->SetLineColor(fColorCarbonFiber);
778 cfLaddTopVol2->SetLineColor(fColorCarbonFiber);
779 TGeoTranslation *trTop1 = new TGeoTranslation(0, fgkLadderHeight/2-dy, 0);
780
781 //--- the 2 side V
782 TGeoArb8 *cfLaddSide1 = CreateLadderSide( fgkSegmentLength/2., beta, -1,
783 fgkLadderLb, fgkLadderHb, fgkLadderl);
784 TGeoVolume *cfLaddSideVol1 = new TGeoVolume( "ITSsddCFladdSideCornerVol1",
785 cfLaddSide1,carbonFiberLadderStruct);
786 TGeoArb8 *cfLaddSide2 = CreateLadderSide( fgkSegmentLength/2., beta, 1,
787 fgkLadderLb, fgkLadderHb, fgkLadderl);
788 TGeoVolume *cfLaddSideVol2 = new TGeoVolume( "ITSsddCFladdSideCornerVol2",
789 cfLaddSide2,carbonFiberLadderStruct);
790 cfLaddSideVol1->SetLineColor(fColorCarbonFiber);
791 cfLaddSideVol2->SetLineColor(fColorCarbonFiber);
792 TGeoCombiTrans *ctSideR = CreateCombiTrans("", distCenterSideDown, 0,
793 alpha*TMath::RadToDeg());
794 AddTranslationToCombiTrans(ctSideR, 0, -dYTranslation-dy, 0);
795 TGeoCombiTrans *ctSideL = CreateCombiTrans("", distCenterSideDown,0,
796 -alpha*TMath::RadToDeg());
797 AddTranslationToCombiTrans(ctSideL, 0, -dYTranslation-dy, 0);
798
799 //--- The beams
800 // Beams on the sides
801 Double_t beamPhiPrime = TMath::ASin(1./TMath::Sqrt( (1+TMath::Sin(2*beta)*
802 TMath::Sin(2*beta)/(TanD(fgkBeamSidePhi)*TanD(fgkBeamSidePhi))) ));
803 //cout<<"Phi prime = "<<beamPhiPrime*TMath::RadToDeg()<<endl;
804 Double_t beamLength = TMath::Sqrt( fgkLadderHeight*fgkLadderHeight/
805 ( TMath::Sin(beamPhiPrime)*TMath::Sin(beamPhiPrime))
806 + fgkLadderWidth*fgkLadderWidth/4.)-fgkLadderLa/2-fgkLadderLb/2;
807 TGeoTubeSeg *sideBeamS = new TGeoTubeSeg(0, fgkLadderBeamRadius,beamLength/2.,
808 0, 180);
809 TGeoVolume *sideBeam = new TGeoVolume("ITSsddCFSideBeamVol", sideBeamS,
810 carbonFiberLadderStruct);
811 sideBeam->SetLineColor(fColorCarbonFiber);
812
813 //Euler rotation : about Z, then new X, then new Z
531d6cdc 814 TGeoRotation *beamRot1 = new TGeoRotation("", 90-2.*beta*TMath::RadToDeg(),
815 -beamPhiPrime*TMath::RadToDeg(),-90);
816 TGeoRotation *beamRot2 = new TGeoRotation("", 90-2.*beta*TMath::RadToDeg(),
817 beamPhiPrime*TMath::RadToDeg(), -90);
818 TGeoRotation *beamRot3 = new TGeoRotation("", 90+2.*beta*TMath::RadToDeg(),
819 beamPhiPrime*TMath::RadToDeg(), -90);
820 TGeoRotation *beamRot4 = new TGeoRotation("", 90+2.*beta*TMath::RadToDeg(),
821 -beamPhiPrime*TMath::RadToDeg(),-90);
b7943f00 822
823 TGeoCombiTrans *beamTransf[8];
824 beamTransf[0] = new TGeoCombiTrans( 0.5*triangleHeight*
825 TMath::Tan(halfTheta),
826 fgkLadderBeamRadius/2. - dy,
531d6cdc 827 -3*fgkSegmentLength/8, beamRot1);
73dfc864 828
829 beamTransf[1] = new TGeoCombiTrans( 0.5*triangleHeight*
830 TMath::Tan(halfTheta),
831 fgkLadderBeamRadius/2. - dy,
832 -3*fgkSegmentLength/8, beamRot1);
b7943f00 833 AddTranslationToCombiTrans(beamTransf[1], 0, 0, fgkSegmentLength/2);
834
835 beamTransf[2] = new TGeoCombiTrans(0.5*triangleHeight*
836 TMath::Tan(halfTheta),
837 fgkLadderBeamRadius/2. - dy,
531d6cdc 838 -fgkSegmentLength/8, beamRot2);
73dfc864 839
840 beamTransf[3] = new TGeoCombiTrans(0.5*triangleHeight*
841 TMath::Tan(halfTheta),
842 fgkLadderBeamRadius/2. - dy,
843 -fgkSegmentLength/8, beamRot2);
b7943f00 844 AddTranslationToCombiTrans(beamTransf[3], 0, 0, fgkSegmentLength/2);
845
846 beamTransf[4] = new TGeoCombiTrans(-0.5*triangleHeight*
847 TMath::Tan(halfTheta),
848 fgkLadderBeamRadius/2. - dy,
531d6cdc 849 -3*fgkSegmentLength/8, beamRot3);
73dfc864 850
851 beamTransf[5] = new TGeoCombiTrans(-0.5*triangleHeight*
852 TMath::Tan(halfTheta),
853 fgkLadderBeamRadius/2. - dy,
854 -3*fgkSegmentLength/8, beamRot3);
b7943f00 855 AddTranslationToCombiTrans(beamTransf[5], 0, 0, fgkSegmentLength/2);
856
857 beamTransf[6] = new TGeoCombiTrans(-0.5*triangleHeight*
531d6cdc 858 TMath::Tan(halfTheta),fgkLadderBeamRadius/2.-dy, -fgkSegmentLength/8,beamRot4);
b7943f00 859 beamTransf[7] = new TGeoCombiTrans(-0.5*triangleHeight*
531d6cdc 860 TMath::Tan(halfTheta),fgkLadderBeamRadius/2.-dy,3*fgkSegmentLength/8,beamRot4);
b7943f00 861
862 //--- Beams of the bottom
863 TGeoTubeSeg *bottomBeam1 = new TGeoTubeSeg(0, fgkLadderBeamRadius,
864 fgkLadderWidth/2.-fgkLadderLb/3, 0, 180);
865 TGeoVolume *bottomBeam1Vol = new TGeoVolume("ITSsddBottomBeam1Vol",
866 bottomBeam1, carbonFiberLadderStruct);
867 bottomBeam1Vol->SetLineColor(fColorCarbonFiber);
868 TGeoTubeSeg *bottomBeam2 = new TGeoTubeSeg(0, fgkLadderBeamRadius,
869 fgkLadderWidth/2.-fgkLadderLb/3, 0, 90);
870 TGeoVolume *bottomBeam2Vol = new TGeoVolume("ITSsddBottomBeam2Vol",
871 bottomBeam2, carbonFiberLadderStruct);
872 bottomBeam2Vol->SetLineColor(fColorCarbonFiber);
873 TGeoTubeSeg *bottomBeam3 = new TGeoTubeSeg(0, fgkLadderBeamRadius,
874 0.5*fgkLadderWidth/SinD(fgkBottomBeamAngle)
875 - fgkLadderLb/3, 0, 180);
876 TGeoVolume *bottomBeam3Vol = new TGeoVolume("ITSsddBottomBeam3Vol",
877 bottomBeam3, carbonFiberLadderStruct);
878 bottomBeam3Vol->SetLineColor(fColorCarbonFiber);
879 //bottomBeam3Vol->SetLineColor(2);
531d6cdc 880 TGeoRotation *bottomBeamRot1 = new TGeoRotation("", 90, 90, 90);
881 TGeoRotation *bottomBeamRot2 = new TGeoRotation("",-90, 90, -90);
b7943f00 882
b7943f00 883 TGeoCombiTrans *bottomBeamTransf1 = new TGeoCombiTrans
531d6cdc 884 (0,-(fgkLadderHeight/2-fgkLadderBeamRadius)-dy,0, bottomBeamRot1);
b7943f00 885 TGeoCombiTrans *bottomBeamTransf2 = new TGeoCombiTrans(0,
886 -(fgkLadderHeight/2-fgkLadderBeamRadius)-dy,
531d6cdc 887 -fgkSegmentLength/2, bottomBeamRot1);
b7943f00 888 TGeoCombiTrans *bottomBeamTransf3 = new TGeoCombiTrans(0,
889 -(fgkLadderHeight/2 - fgkLadderBeamRadius)
531d6cdc 890 - dy, fgkSegmentLength/2, bottomBeamRot2);
b7943f00 891 // be careful for beams #3: when "reading" from -z to +z and
892 // from the bottom of the ladder, it should draw a Lambda, and not a V
531d6cdc 893 TGeoRotation *bottomBeamRot4 = new TGeoRotation("", -90, fgkBottomBeamAngle, -90);
894 TGeoRotation *bottomBeamRot5 = new TGeoRotation("" ,-90,-fgkBottomBeamAngle, -90);
b7943f00 895 TGeoCombiTrans *bottomBeamTransf4 = new TGeoCombiTrans
531d6cdc 896 (0,-(fgkLadderHeight/2-fgkLadderBeamRadius)-dy,-fgkSegmentLength/4,bottomBeamRot4);
b7943f00 897 TGeoCombiTrans *bottomBeamTransf5 = new TGeoCombiTrans
531d6cdc 898 (0,-(fgkLadderHeight/2-fgkLadderBeamRadius)-dy,fgkSegmentLength/4, bottomBeamRot5);
b7943f00 899
900 fLaddSegCommonVol[0] = cfLaddTopVol1; fLaddSegCommonTr[0] = trTop1;
901 fLaddSegCommonVol[1] = cfLaddTopVol2; fLaddSegCommonTr[1] = trTop1;
902 fLaddSegCommonVol[2] = cfLaddSideVol1; fLaddSegCommonTr[2] = ctSideR;
903 fLaddSegCommonVol[3] = cfLaddSideVol1; fLaddSegCommonTr[3] = ctSideL;
904 fLaddSegCommonVol[4] = cfLaddSideVol2; fLaddSegCommonTr[4] = ctSideR;
905 fLaddSegCommonVol[5] = cfLaddSideVol2; fLaddSegCommonTr[5] = ctSideL;
906 fLaddSegCommonVol[6] = sideBeam; fLaddSegCommonTr[6] = beamTransf[0];
907 fLaddSegCommonVol[7] = sideBeam; fLaddSegCommonTr[7] = beamTransf[1];
908 fLaddSegCommonVol[8] = sideBeam; fLaddSegCommonTr[8] = beamTransf[2];
909 fLaddSegCommonVol[9] = sideBeam; fLaddSegCommonTr[9] = beamTransf[3];
910 fLaddSegCommonVol[10]= sideBeam; fLaddSegCommonTr[10]= beamTransf[4];
911 fLaddSegCommonVol[11]= sideBeam; fLaddSegCommonTr[11]= beamTransf[5];
912 fLaddSegCommonVol[12]= sideBeam; fLaddSegCommonTr[12]= beamTransf[6];
913 fLaddSegCommonVol[13]= sideBeam; fLaddSegCommonTr[13]= beamTransf[7];
914 fLaddSegCommonVol[14]= bottomBeam1Vol; fLaddSegCommonTr[14]= bottomBeamTransf1;
915 fLaddSegCommonVol[15]= bottomBeam2Vol; fLaddSegCommonTr[15]= bottomBeamTransf2;
916 fLaddSegCommonVol[16]= bottomBeam2Vol; fLaddSegCommonTr[16]= bottomBeamTransf3;
917 fLaddSegCommonVol[17]= bottomBeam3Vol; fLaddSegCommonTr[17]= bottomBeamTransf4;
918 fLaddSegCommonVol[18]= bottomBeam3Vol; fLaddSegCommonTr[18]= bottomBeamTransf5;
c789ee28 919
b7943f00 920
921 //********************************************************************
922 // cables
923 //********************************************************************
924 char cableName[30];
925 for (Int_t i=0; i<fgkLay3Ndet; i++) {
926 sprintf(cableName, "digitCableLay3A_%i",i);
927 fDigitCableLay3A[i].SetName(cableName);
928 fDigitCableLay3A[i].SetWidth(fgkDigitCablWidth);
929 fDigitCableLay3A[i].SetThickness(fgkDigitCablPolyThick+fgkDigitCablAlThick);
930 fDigitCableLay3A[i].SetNLayers(2);
931 fDigitCableLay3A[i].SetLayer( 0, fgkDigitCablPolyThick, polyhamideSDD,
932 fColorPolyhamide);
933 fDigitCableLay3A[i].SetLayer(1, fgkDigitCablAlThick, alSDD, fColorAl);
934 sprintf(cableName, "digitCableLay3B_%i",i);
935 fDigitCableLay3B[i].SetName(cableName);
936 fDigitCableLay3B[i].SetWidth(fgkDigitCablWidth);
937 fDigitCableLay3B[i].SetThickness(fgkDigitCablPolyThick+fgkDigitCablAlThick);
938 fDigitCableLay3B[i].SetNLayers(2);
939 fDigitCableLay3B[i].SetLayer( 0, fgkDigitCablPolyThick, polyhamideSDD,
940 fColorPolyhamide);
941 fDigitCableLay3B[i].SetLayer(1, fgkDigitCablAlThick, alSDD, fColorAl);
942 };
943 for (Int_t i=0; i<fgkLay4Ndet; i++) {
944 sprintf(cableName, "digitCableLay4A_%i",i);
945 fDigitCableLay4A[i].SetName(cableName);
946 fDigitCableLay4A[i].SetWidth(fgkDigitCablWidth);
947 fDigitCableLay4A[i].SetThickness(fgkDigitCablPolyThick+fgkDigitCablAlThick);
948 fDigitCableLay4A[i].SetNLayers(2);
949 fDigitCableLay4A[i].SetLayer( 0, fgkDigitCablPolyThick, polyhamideSDD,
950 fColorPolyhamide);
951 fDigitCableLay4A[i].SetLayer(1, fgkDigitCablAlThick, alSDD, fColorAl);
952 sprintf(cableName, "digitCableLay4B_%i",i);
953 fDigitCableLay4B[i].SetName(cableName);
954 fDigitCableLay4B[i].SetWidth(fgkDigitCablWidth);
955 fDigitCableLay4B[i].SetThickness(fgkDigitCablPolyThick+fgkDigitCablAlThick);
956 fDigitCableLay4B[i].SetNLayers(2);
957 fDigitCableLay4B[i].SetLayer( 0, fgkDigitCablPolyThick, polyhamideSDD,
958 fColorPolyhamide);
959 fDigitCableLay4B[i].SetLayer(1, fgkDigitCablAlThick, alSDD, fColorAl);
960 };
961 // Well, those digit cables could also include the analog cables
962 // which have the same width and the same path, at least in the ladder.
963 // It will gain some computing ressources (less volumes) and some
964 // coding efforts ... !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
965 // The only thing to do is to change the names and put the correct total
966 // thicknesses
73dfc864 967
968 // some transformations and volumes used in several places
969 fCommonTr[0] = new TGeoRotation("CarlosSuppRotN",
970 0, -fgkCarlosSuppAngle, 0);
971
972 TGeoTube *littleScrewHead = new TGeoTube("littleScrewHead", 0, fgkLittleScrewHeadR,
973 fgkLittleScrewHeadH/2);
974 fCommonVol[0] = new TGeoVolume("vLittleScrewHead",
975 littleScrewHead, stainless);
976 fCommonVol[0]->SetLineColor(kGray);
977
978 fLadderFoot = CreateLadderFoot();
979 CreateLVCard();
980 fCardHV = CreateHVCard(0);
981 fCardCarlos = CreateCarlosCard(0);
982
983 //==================
984 // link beteen phynox and plastic cooling tubes
985 //==================
986
987 fRaccordoL = new TGeoVolumeAssembly("RaccordoL");
988 Double_t fullRacLen = fgkConnectorCoolTubeL1+fgkConnectorCoolTubeL2+fgkConnectorCoolTubeL3;
989 TGeoTube *waterRac = new TGeoTube("waterRac", 0, fgkConnectorCoolTubeRmin, fullRacLen/2);
990 TGeoVolume * vwaterRac = new TGeoVolume("vwaterRac", waterRac, coolerMediumSDD);
991 vwaterRac->SetLineColor(kBlue);
992
993 TGeoTube *tube1Rac = new TGeoTube("tube1Rac", fgkConnectorCoolTubeRmin,
994 fgkConnectorCoolTubeR1, fgkConnectorCoolTubeL1/2);
995 TGeoTube *tube2Rac = new TGeoTube("tube2Rac", fgkConnectorCoolTubeRmin,
996 fgkConnectorCoolTubeR2, fgkConnectorCoolTubeL2/2);
997 TGeoTube *tube3Rac = new TGeoTube("tube3Rac", fgkConnectorCoolTubeRmin,
998 fgkConnectorCoolTubeR3, fgkConnectorCoolTubeL3/2);
999 TGeoVolume * vtube1Rac = new TGeoVolume("vtube1Rac", tube1Rac, raccordMedium);
1000 TGeoVolume * vtube2Rac = new TGeoVolume("vtube2Rac", tube2Rac, raccordMedium);
1001 TGeoVolume * vtube3Rac = new TGeoVolume("vtube3Rac", tube3Rac, raccordMedium);
1002 vtube1Rac->SetLineColor(kGray);
1003 vtube2Rac->SetLineColor(kGray);
1004 vtube3Rac->SetLineColor(kGray);
1005
1006 TGeoTranslation *trTube1Rac = new TGeoTranslation("trTube1Rac",0,0,
1007 -fullRacLen/2+fgkConnectorCoolTubeL1/2);
1008 TGeoTranslation *trTube2Rac = new TGeoTranslation("trTube2Rac",0,0,
1009 (-fullRacLen/2+fgkConnectorCoolTubeL1+fgkConnectorCoolTubeL2/2));
1010 TGeoTranslation *trTube3Rac = new TGeoTranslation("trTube3Rac",0,0,
1011 (-fullRacLen/2+fgkConnectorCoolTubeL1+
1012 fgkConnectorCoolTubeL2+fgkConnectorCoolTubeL3/2));
1013 fRaccordoL->AddNode(vwaterRac, 1,0);
1014 fRaccordoL->AddNode(vtube1Rac, 1,trTube1Rac);
1015 fRaccordoL->AddNode(vtube2Rac, 1,trTube2Rac);
1016 fRaccordoL->AddNode(vtube3Rac, 1,trTube3Rac);
531d6cdc 1017}
c789ee28 1018
c789ee28 1019
b7943f00 1020//________________________________________________________________________
1021void AliITSv11GeometrySDD::CheckOverlaps(Double_t precision){
1022 //
1023 // a debugging function for checking some possible overlaps
1024 //
108bd0fe 1025 if (fSDDsensor3) fSDDsensor3->CheckOverlaps(precision);
1026 if (fSDDsensor4) fSDDsensor4->CheckOverlaps(precision);
b7943f00 1027 if (fHybrid) fHybrid->CheckOverlaps(precision);
531d6cdc 1028}
c789ee28 1029
1030
db486a6e 1031//________________________________________________________________________
1032TGeoCombiTrans *AliITSv11GeometrySDD::
108bd0fe 1033CreateCombiTrans(const char *name, Double_t dy, Double_t dz, Double_t dphi,
1034 Bool_t planeSym) {
db486a6e 1035 //
1036 // return the TGeoCombiTrans which make a translation in y and z
1037 // and a rotation in phi in the global coord system
108bd0fe 1038 // If planeSym = true, the rotation places the object symetrically
1039 // (with respect to the transverse plane) to its position in the
1040 // case planeSym = false
db486a6e 1041 //
1042
1043 TGeoTranslation t1(dy*CosD(90.+dphi),dy*SinD(90.+dphi), dz);
1044 TGeoRotation r1("",0.,0.,dphi);
108bd0fe 1045 TGeoRotation r2("",90, 180, -90-dphi);
db486a6e 1046
1047 TGeoCombiTrans *combiTrans1 = new TGeoCombiTrans(name);
1048 combiTrans1->SetTranslation(t1);
108bd0fe 1049 if (planeSym) combiTrans1->SetRotation(r1);
1050 else combiTrans1->SetRotation(r2);
db486a6e 1051 return combiTrans1;
531d6cdc 1052}
c789ee28 1053
1054
db486a6e 1055//________________________________________________________________________
c789ee28 1056void AliITSv11GeometrySDD::AddTranslationToCombiTrans(TGeoCombiTrans* ct,
db486a6e 1057 Double_t dx,
1058 Double_t dy,
b7943f00 1059 Double_t dz) const{
1060 // Add a dx,dy,dz translation to the initial TGeoCombiTrans
1061 const Double_t *vect = ct->GetTranslation();
1062 Double_t newVect[3] = {vect[0]+dx, vect[1]+dy, vect[2]+dz};
1063 ct->SetTranslation(newVect);
531d6cdc 1064}
c789ee28 1065
1066
1067//________________________________________________________________________
1068void AliITSv11GeometrySDD::ShowOnePiece(TGeoVolume *moth) {
1069// for code developpment and debugging purposes
1070
108bd0fe 1071 if (! fSDDsensor3) CreateBasicObjects();
531d6cdc 1072
1073 // moth->AddNode(fPinSupport, 1, 0);
1074 // moth->AddNode(fCoolPipeSupportL, 1, 0);
73dfc864 1075 // moth->AddNode(fSDDsensor3, 1, 0);
1076 // moth->AddNode(fSDDsensor4, 1, 0);
531d6cdc 1077 // moth->AddNode(fBaseThermalBridge, 1, 0);
1078 // moth->AddNode(fHybrid,100,0);
73dfc864 1079 // moth->AddNode(fLadderFoot,1,0);
1080 //moth->AddNode(fCardLVL,1,0);
1081 //moth->AddNode(fCardLVR,1,0);
b7943f00 1082
73dfc864 1083// TGeoVolume* seg = CreateLadderSegment( 3, 0);
531d6cdc 1084// moth->AddNode(seg, 1, 0);
b7943f00 1085
108bd0fe 1086// TGeoVolumeAssembly *lay3Ladder = CreateLadder(3);
531d6cdc 1087// moth->AddNode(lay3Ladder, 1, 0);
1088
108bd0fe 1089// TGeoVolumeAssembly *lay3Detectors = CreateDetectorsAssembly(3);
531d6cdc 1090// moth->AddNode(lay3Detectors, 1, 0);
1091
73dfc864 1092// TGeoVolumeAssembly *lay3Detectors = CreateDetectorsAssembly(3);
1093// moth->AddNode(lay3Detectors, 1, 0);
108bd0fe 1094
1095
73dfc864 1096 TGeoVolumeAssembly *endLadder = CreateEndLadder( 4 );
1097 moth->AddNode(endLadder, 1, 0);
108bd0fe 1098
1099// TGeoVolumeAssembly *highVCard = CreateHVCard( 4 );
1100// moth->AddNode(highVCard, 1, 0);
1101
73dfc864 1102// TGeoVolumeAssembly *supportRing = CreateSupportRing( 4 );
1103// moth->AddNode(supportRing, 1, 0);
1104
108bd0fe 1105// TGeoVolumeAssembly *endLadderCards = CreateEndLadderCards( 4 );
1106// moth->AddNode(endLadderCards, 1, 0);
1107
73dfc864 1108// TGeoVolumeAssembly *carlosCard = CreateCarlosCard( 4 );
1109// moth->AddNode(carlosCard, 1, 0);
531d6cdc 1110}
c789ee28 1111
1112
db486a6e 1113//________________________________________________________________________
b7943f00 1114void AliITSv11GeometrySDD::Layer3(TGeoVolume *moth) {
1115 //
1116 // Insert the layer 3 in the mother volume. This is a virtual volume
1117 // containing ladders of layer 3 and the supporting rings
1118 //
1119
1120 if (! moth) {
1121 printf("Error::AliITSv11GeometrySDD: Can't insert layer3, mother is null!\n");
1122 return;
1123 };
1124
108bd0fe 1125 TGeoMedium *airSDD = GetMedium("SDD AIR$");
b7943f00 1126
1127 fMotherVol = moth;
108bd0fe 1128 if (! fSDDsensor3) CreateBasicObjects();
b7943f00 1129
108bd0fe 1130 //====================================
1131 // First we create the central barrel
1132 //====================================
1133
1134 TGeoVolumeAssembly *lay3Ladder = CreateLadder(3);
1135 TGeoVolumeAssembly *lay3Detectors = CreateDetectorsAssembly(3);
1136 //TGeoVolume *lay3Detectors = CreateDetectors(3);
b7943f00 1137 TGeoTube *virtualLayer3Shape = new TGeoTube("ITSsddLayer3Shape",
1138 fgkLay3Rmin,fgkLay3Rmax,fgkLay3Length*0.5);
1139 TGeoVolume *virtualLayer3 = new TGeoVolume("ITSsddLayer3",
1140 virtualLayer3Shape, airSDD);
1141
1142 Double_t dPhi = 360./fgkLay3Nladd;
1143 Double_t detectorsThick = fgkLadWaferSep + 2*fgkWaferThickness;
1144 // Placing virtual ladder and detectors volumes following
1145 // ladder ordering convention
1146 char rotName[30];
1147 Int_t iLaddMin = 0;
1148 Int_t iLaddMax = fgkLay3Nladd;
1149 if ((fAddOnlyLadder3min>=0)&&(fAddOnlyLadder3max<fgkLay3Nladd)) {
1150 iLaddMin = fAddOnlyLadder3min;
1151 iLaddMax = fAddOnlyLadder3max+1;
1152 };
1153
1154 for (Int_t iLadd = iLaddMin; iLadd < iLaddMax; iLadd++) {
1155
108bd0fe 1156 Double_t ladderPhi = -3*dPhi+iLadd*dPhi;
b7943f00 1157 sprintf(rotName, "ITSsddLay3Ladd%i",iLadd);
1158 Double_t minRadiusLadBox = fLay3LaddShortRadius-fLay3LadderUnderSegDH;
1159 if (iLadd%2 != 0)
1160 minRadiusLadBox = fLay3LaddLongRadius-fLay3LadderUnderSegDH;
1161 minRadiusLadBox += ((TGeoBBox*)lay3Ladder->GetShape())->GetDY();
73dfc864 1162 TGeoCombiTrans *ctLadd;
1163 //=============================================================
1164 //
1165 // Special modification for ladder 2 of layer 3:
1166 // It has been inverted (pi rotation around y axis)
1167 //
1168 //=============================================================
1169 if (iLadd != 2)
1170 ctLadd = CreateCombiTrans(rotName,minRadiusLadBox,
1171 0, ladderPhi, kTRUE);
1172 else
1173 ctLadd = CreateCombiTrans(rotName,minRadiusLadBox,
1174 0, ladderPhi, kFALSE);
b7943f00 1175 virtualLayer3->AddNode(lay3Ladder, iLadd, ctLadd);
1176 ///////////////////////////////////////////////////
1177 sprintf(rotName, "ITSsddLay3DetBox%i",iLadd);
1178 Double_t minRadiusDetBox = fgkLay3DetShortRadius;
1179 if (iLadd%2 != 0) minRadiusDetBox = fgkLay3DetLongRadius;
1180 minRadiusDetBox += detectorsThick/2;
73dfc864 1181 TGeoCombiTrans *ctDet;
1182 if (iLadd != 2)
1183 ctDet = CreateCombiTrans(rotName, minRadiusDetBox,
1184 0, ladderPhi, kTRUE);
1185 else
1186 ctDet = CreateCombiTrans(rotName, minRadiusDetBox,
1187 0, ladderPhi, kFALSE);
1188
b7943f00 1189 virtualLayer3->AddNode(lay3Detectors, iLadd, ctDet);
1190 ///////////////////////////////////////////////////
1191 }
1192
108bd0fe 1193 //====================================
1194 // Then the forward rapidity pieces
1195 // (cooling, Carlos, LV, HV ...)
1196 //====================================
1197
1198 Double_t fgkForwardLay3Length = 200*fgkmm; // this has to be tune !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1199 Double_t fgkForwardLay3Rmin = fgkLay3Rmin-10*fgkmm;
1200 Double_t fgkForwardLay3Rmax = fgkLay3Rmax;
1201
1202 TGeoVolumeAssembly* lay3EndLadder = CreateEndLadderCards(3);
1203 TGeoTube *virtualForward3Shape = new TGeoTube("virtualForward3Shape",
1204 fgkForwardLay3Rmin, fgkForwardLay3Rmax,
1205 fgkForwardLay3Length/2.);
1206 TGeoVolume *virtualForward3Pos = new TGeoVolume("ITSsddForward3Pos",
1207 virtualForward3Shape, airSDD);
1208 TGeoVolume *virtualForward3Neg = new TGeoVolume("ITSsddForward3Neg",
1209 virtualForward3Shape, airSDD);
1210 TGeoTranslation *virtualForward3TrPos = new TGeoTranslation("virtualForward3TrPos",0,0,
1211 fgkLay3Length/2+fgkForwardLay3Length/2);
1212 TGeoTranslation *virtualForward3TrNeg = new TGeoTranslation("virtualForward3TrNeg",0,0,
1213 -fgkLay3Length/2-fgkForwardLay3Length/2);
1214
1215 for (Int_t iLadd = iLaddMin; iLadd < iLaddMax; iLadd++) {
1216
1217 Double_t ladderPhi = -3*dPhi+iLadd*dPhi;
1218 Double_t minRadiusDetBox = fgkLay3DetShortRadius;
1219 if (iLadd%2 != 0) minRadiusDetBox = fgkLay3DetLongRadius;
1220 minRadiusDetBox += detectorsThick/2;
1221
1222 sprintf(rotName, "ITSsddLay3EndLadd%i",iLadd);
1223
1224 TGeoCombiTrans *ctEndLaddPos = CreateCombiTrans(rotName, minRadiusDetBox-0.1,
1225 -fgkForwardLay3Length/2, ladderPhi, kTRUE);
1226 TGeoCombiTrans *ctEndLaddNeg = CreateCombiTrans(rotName, minRadiusDetBox-0.1,
1227 fgkForwardLay3Length/2, ladderPhi, kFALSE);
1228
1229 virtualForward3Pos->AddNode(lay3EndLadder, iLadd*2, ctEndLaddPos);
1230 virtualForward3Neg->AddNode(lay3EndLadder, iLadd*2, ctEndLaddNeg);
1231 }
1232
108bd0fe 1233 if(GetDebug(1)) {
1234 virtualLayer3->CheckOverlaps(0.01);
1235 virtualForward3Pos->CheckOverlaps(0.01);
1236 virtualForward3Neg->CheckOverlaps(0.01);
1237 }
1238
b7943f00 1239 virtualLayer3->SetVisibility(kFALSE);
108bd0fe 1240 virtualForward3Pos->SetVisibility(kFALSE);
1241 virtualForward3Neg->SetVisibility(kFALSE);
1242
b7943f00 1243 moth->AddNode(virtualLayer3, 1, 0);
108bd0fe 1244 moth->AddNode(virtualForward3Pos, 1, virtualForward3TrPos);
1245 moth->AddNode(virtualForward3Neg, 1, virtualForward3TrNeg);
531d6cdc 1246}
c789ee28 1247
1248
db486a6e 1249//________________________________________________________________________
b7943f00 1250void AliITSv11GeometrySDD::Layer4(TGeoVolume *moth) {
1251 //
1252 // Insert the layer 4 in the mother volume. This is a virtual volume
1253 // containing ladders of layer 4 and the supporting rings
1254 //
1255
1256 if (! moth) {
1257 printf("Error::AliITSv11GeometrySDD: Can't insert layer4, mother is null!\n");
1258 return;
1259 };
1260
1261 fMotherVol = moth;
1262
108bd0fe 1263 if (! fSDDsensor3) CreateBasicObjects();
b7943f00 1264
1265 TGeoTube *virtualLayer4Shape =new TGeoTube("ITSsddLayer4Shape",
1266 fgkLay4Rmin,fgkLay4Rmax,fgkLay4Length*0.5);
108bd0fe 1267 TGeoMedium *airSDD = GetMedium("SDD AIR$");
b7943f00 1268 TGeoVolume *virtualLayer4 = new TGeoVolume("ITSsddLayer4",
1269 virtualLayer4Shape, airSDD);
108bd0fe 1270
1271 //====================================
1272 // First we create the central barrel
1273 //====================================
1274
1275 TGeoVolumeAssembly *lay4Ladder = CreateLadder(4);
1276 //TGeoVolume *lay4Detectors = CreateDetectors(4);
1277 TGeoVolumeAssembly *lay4Detectors = CreateDetectorsAssembly(4);
1278
b7943f00 1279 Double_t dPhi = 360./fgkLay4Nladd;
1280 Double_t detBoxThickness = fgkLadWaferSep + 2*fgkWaferThickness;
108bd0fe 1281
b7943f00 1282 // placing virtual ladder and detectors volumes following ladder
1283 // ordering convention
1284 char rotName[20];
1285 Int_t iLaddMin = 0;
1286 Int_t iLaddMax = fgkLay4Nladd;
1287 if ((fAddOnlyLadder4min >= 0)&&(fAddOnlyLadder4max < fgkLay4Nladd)) {
1288 iLaddMin = fAddOnlyLadder4min;
1289 iLaddMax = fAddOnlyLadder4max+1;
1290 }
1291 for (Int_t iLadd = iLaddMin; iLadd < iLaddMax; iLadd++) {
108bd0fe 1292
1293 Double_t ladderPhi = -5*dPhi + iLadd*dPhi;
b7943f00 1294 sprintf(rotName, "ITSsddLay4Ladd%i",iLadd);
1295 Double_t minRadiusLadBox = fLay4LaddShortRadius-fLay4LadderUnderSegDH;
1296 if (iLadd%2 != 0)
1297 minRadiusLadBox = fLay4LaddLongRadius-fLay4LadderUnderSegDH;
1298 minRadiusLadBox += ((TGeoBBox*)lay4Ladder->GetShape())->GetDY();
1299 TGeoCombiTrans *ctLadd = CreateCombiTrans(rotName, minRadiusLadBox,
108bd0fe 1300 0, ladderPhi, kTRUE);
b7943f00 1301 virtualLayer4->AddNode(lay4Ladder, iLadd, ctLadd);
108bd0fe 1302 ///////////////////////////////////////////////////
b7943f00 1303 sprintf(rotName, "ITSsddLay4DetBox%i",iLadd);
1304 Double_t minRadiusDetBox = fgkLay4DetShortRadius;
1305 if (iLadd%2 != 0)
1306 minRadiusDetBox = fgkLay4DetLongRadius;
1307 minRadiusDetBox += detBoxThickness/2;
1308 TGeoCombiTrans *ctDet = CreateCombiTrans(rotName, minRadiusDetBox,
108bd0fe 1309 0, ladderPhi, kTRUE);
b7943f00 1310 virtualLayer4->AddNode(lay4Detectors, iLadd, ctDet);
108bd0fe 1311 ///////////////////////////////////////////////////
1312 }
1313
1314 //====================================
1315 // Then the pieces at forward rapidity
1316 // (cooling, Carlos, LV, HV ...)
1317 //====================================
1318
1319 Double_t fgkForwardLay4Length = 200*fgkmm; // this has to be tuned !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1320 Double_t fgkForwardLay4Rmin = fgkLay4Rmin-10*fgkmm;
1321 Double_t fgkForwardLay4Rmax = fgkLay4Rmax;
1322
1323 TGeoVolumeAssembly* lay4EndLadder = CreateEndLadderCards(4);
1324 TGeoTube *virtualForward4Shape = new TGeoTube("virtualForward3Shape",
1325 fgkForwardLay4Rmin, fgkForwardLay4Rmax,
1326 fgkForwardLay4Length/2.);
1327 TGeoVolume *virtualForward4Pos = new TGeoVolume("ITSsddForward4Pos",
1328 virtualForward4Shape, airSDD);
1329 TGeoVolume *virtualForward4Neg = new TGeoVolume("ITSsddForward4Neg",
1330 virtualForward4Shape, airSDD);
1331 TGeoTranslation *virtualForward4TrPos = new TGeoTranslation("virtualForward4TrPos",0,0,
1332 fgkLay4Length/2+fgkForwardLay4Length/2);
1333 TGeoTranslation *virtualForward4TrNeg = new TGeoTranslation("virtualForward4TrNeg",0,0,
1334 -fgkLay4Length/2-fgkForwardLay4Length/2);
1335
1336 for (Int_t iLadd = iLaddMin; iLadd < iLaddMax; iLadd++) {
1337
1338 Double_t ladderPhi = -5*dPhi + iLadd*dPhi;
1339 Double_t minRadiusDetBox = fgkLay4DetShortRadius;
1340 if (iLadd%2 != 0)
1341 minRadiusDetBox = fgkLay4DetLongRadius;
1342 minRadiusDetBox += detBoxThickness/2;
1343
1344 sprintf(rotName, "ITSsddLay4EndLadd%i",iLadd);
1345
1346 TGeoCombiTrans *ctEndLaddPos = CreateCombiTrans(rotName, minRadiusDetBox-0.1,
1347 -fgkForwardLay4Length/2, ladderPhi, kTRUE);
1348 TGeoCombiTrans *ctEndLaddNeg = CreateCombiTrans(rotName, minRadiusDetBox-0.1,
1349 fgkForwardLay4Length/2, ladderPhi, kFALSE);
1350 virtualForward4Pos->AddNode(lay4EndLadder, iLadd*2, ctEndLaddPos);
1351 virtualForward4Neg->AddNode(lay4EndLadder, iLadd*2+1, ctEndLaddNeg);
b7943f00 1352 }
1353
1354 if(GetDebug(1)) virtualLayer4->CheckOverlaps(0.01);
108bd0fe 1355
b7943f00 1356 virtualLayer4->SetVisibility(kFALSE);
108bd0fe 1357 virtualForward4Pos->SetVisibility(kFALSE);
1358 virtualForward4Neg->SetVisibility(kFALSE);
1359
b7943f00 1360 moth->AddNode(virtualLayer4,1,0);
108bd0fe 1361 moth->AddNode(virtualForward4Pos, 1, virtualForward4TrPos);
1362 moth->AddNode(virtualForward4Neg, 1, virtualForward4TrNeg);
531d6cdc 1363}
b7943f00 1364
1365
1366//________________________________________________________________________
108bd0fe 1367TGeoVolumeAssembly *AliITSv11GeometrySDD::CreateLadder(Int_t iLay) {
b7943f00 1368 //
73dfc864 1369 // return an assembly volume containing the CF ladder
b7943f00 1370 //
1371
1372 Int_t nDetectors = fgkLay3Ndet;
1373 Double_t ladderLength = fgkLay3LadderLength;
1374 Double_t underSegDH = fLay3LadderUnderSegDH;
1375 Double_t *sensorZPos = fLay3sensorZPos;
1376 AliITSv11GeomCableFlat *digitCableA = fDigitCableLay3A;
1377 AliITSv11GeomCableFlat *digitCableB = fDigitCableLay3B;
1378
1379 if (iLay==3) {}
1380 else if (iLay==4) {
1381 nDetectors = fgkLay4Ndet;
1382 ladderLength = fgkLay4LadderLength;
1383 digitCableA = fDigitCableLay4A;
1384 digitCableB = fDigitCableLay4B;
1385 underSegDH = fLay4LadderUnderSegDH;
1386 sensorZPos = fLay4sensorZPos;
1387 }
1388 else {
1389 printf("AliITSv11GeometrySDD::CreateLadder : error=wrong layer\n");
1390 };
1391 Double_t ladderBoxDH = fgkLadderHeight+fgkLadderSegBoxDH+underSegDH;
108bd0fe 1392 TGeoVolumeAssembly *virtualLadder = new TGeoVolumeAssembly("ITSsddLadder");
b7943f00 1393
1394 // placing virtual ladder segment following detector ordering convention
1395 //=======================================================================
1396 char transName[30];
1397
1398 // adding segment this way to create cable points in the correct order ...
1399 for (Int_t iSegment = nDetectors/2-1; iSegment >= 0; iSegment-- ) {
1400
73dfc864 1401 //TGeoVolumeAssembly *laddSegment = CreateLadderSegment(iLay, iSegment);
1402 TGeoVolume *laddSegment = CreateLadderSegment(iLay, iSegment);
b7943f00 1403 sprintf(transName, "ITSsddLay%iLaddSeg%i", iLay, iSegment);
1404 Double_t segmentPos = fgkSegmentLength*(nDetectors/2-1-iSegment)
1405 + fgkSegmentLength/2;
1406 TGeoTranslation *segTr = new TGeoTranslation(transName, 0,
1407 underSegDH/2,segmentPos);
1408 ////
1409 virtualLadder->AddNode(laddSegment, iSegment, segTr);
1410 };
1411 for (Int_t iSegment = nDetectors/2; iSegment < nDetectors; iSegment++ ) {
1412
73dfc864 1413 TGeoVolume *laddSegment = CreateLadderSegment(iLay, iSegment);
1414 //TGeoVolumeAssembly *laddSegment = CreateLadderSegment(iLay, iSegment);
b7943f00 1415 sprintf(transName, "ITSsddLay%iLaddSeg%i", iLay, iSegment);
1416 Double_t segmentPos = fgkSegmentLength*(nDetectors/2-1-iSegment)
1417 + fgkSegmentLength/2;
1418 TGeoTranslation *segTr = new TGeoTranslation(transName, 0,
1419 underSegDH/2,segmentPos);
1420 ////
1421 virtualLadder->AddNode(laddSegment, iSegment, segTr);
1422 };
1423
1424 // putting virtual volume corresponding to the end of ladder
1425 //=======================================================================
108bd0fe 1426 TGeoVolumeAssembly *endLadder = CreateEndLadder( iLay );
b7943f00 1427 Double_t endLength = (ladderLength - nDetectors*fgkSegmentLength)/2.;
1428 TGeoTranslation *endTrZPos = new TGeoTranslation("ITSsddEndTrZPos",0,0,
1429 fgkSegmentLength*(nDetectors/2)+endLength/2.);
1430 // Euler rotation : about Z, then new X, then new Z
1431 TGeoRotation *endZNegRot = new TGeoRotation("",90, 180, -90);
1432 TGeoCombiTrans *endTrZNeg = new TGeoCombiTrans(0,0,
1433 -fgkSegmentLength*(nDetectors/2)-endLength/2.,endZNegRot);
1434 virtualLadder->AddNode(endLadder, 1, endTrZPos);
1435 virtualLadder->AddNode(endLadder, 2, endTrZNeg);
1436
1437 // creating and inserting cable segments
1438 // (check points are placed while creating segments)
1439 //=======================================================================
1440 if (fAddCables)
1441 for (Int_t iSegment = 0; iSegment < nDetectors; iSegment++ ) {
1442
1443 digitCableA[iSegment].SetInitialNode(virtualLadder);
1444 digitCableB[iSegment].SetInitialNode(virtualLadder);
1445
1446 for (Int_t iPt=1; iPt<digitCableA[iSegment].GetNCheckPoints(); iPt++ ) {
1447 Double_t rotation = 0;
73dfc864 1448 if (iPt>1) {
1449 rotation = 90-fgkHybridAngle;
1450 digitCableA[iSegment].CreateAndInsertCableSegment(iPt, rotation);
1451 } else
1452 digitCableA[iSegment].CreateAndInsertBoxCableSegment(iPt);
1453
b7943f00 1454 };
1455
1456 for (Int_t iPt=1; iPt<digitCableB[iSegment].GetNCheckPoints(); iPt++ ) {
1457 Double_t rotation = 0;
73dfc864 1458 if (iPt>1) {
1459 rotation = fgkHybridAngle-90;
1460 digitCableB[iSegment].CreateAndInsertCableSegment(iPt, rotation);
1461 } else
1462 digitCableB[iSegment].CreateAndInsertBoxCableSegment(iPt);
b7943f00 1463 };
1464 };
1465
1466 // HV cable
1467 //=======================================================================
fa4639a3 1468 if (fAddHVcables) {
108bd0fe 1469 TGeoMedium *polyhamideSDD = GetMedium("SDDKAPTON (POLYCH2)$"); //ITSsddKAPTON_POLYCH2
1470 TGeoMedium *alSDD = GetMedium("AL$"); //ITSal
b7943f00 1471
1472 AliITSv11GeomCableFlat cableHV[fgkLay4Ndet]; // temp !!!
1473 char cableHVname[30];
1474 for (Int_t iSegment = 0; iSegment<nDetectors; iSegment++) {
1475 sprintf(cableHVname,"ITSsddHVcable%i", iSegment);
1476 cableHV[iSegment].SetName(cableHVname);
1477 cableHV[iSegment].SetThickness(fgkLongHVcablePolyThick+fgkLongHVcableAlThick);
1478 cableHV[iSegment].SetWidth(fgkTransitHVtailWidth);
1479 cableHV[iSegment].SetNLayers(2);
1480 cableHV[iSegment].SetLayer(0, fgkLongHVcablePolyThick, polyhamideSDD,
1481 fColorPolyhamide);
1482 cableHV[iSegment].SetLayer(1, fgkLongHVcableAlThick, alSDD, fColorAl);
1483 cableHV[iSegment].SetInitialNode(virtualLadder);
1484 };
1485 Double_t x1[3], x2[3], x3[3],
1486 vY[3] = {0,1,0}, vZ[3] = {0,0,1}, vYZ[3]={0,1,1};
1487
fa4639a3 1488 x1[0] = -fgkTransitHVtailXpos;
1489 x2[0] = -fgkTransitHVtailXpos;
1490 x3[0] = -fgkTransitHVtailXpos;
b7943f00 1491 for (Int_t iSegment = nDetectors/2-1; iSegment >= 0; iSegment-- ) {
1492 Double_t cableSeparation = TMath::Abs(iSegment - (nDetectors/2-1))
1493 *fgkLongHVcableSeparation;
73dfc864 1494 // adjust where HV long cable starts in Y
1495 // useful if you want to let some space for alignment
1496 x1[1] = - ladderBoxDH/2 + 2*fgkmm;
b7943f00 1497 x2[1] = - ladderBoxDH/2 + underSegDH - cableSeparation
1498 - (fgkLongHVcablePolyThick+fgkLongHVcableAlThick)/2;
1499 x3[1] = x2[1];
1500 x1[2] = sensorZPos[iSegment]+fgkTransitHVtailLength-5*fgkmm;
1501 x2[2] = x1[2]+5*fgkmm;
1502 x3[2] = ladderLength/2-endLength;
1503 cableHV[iSegment].AddCheckPoint( virtualLadder, 0, x1, vY );
73dfc864 1504 cableHV[iSegment].AddCheckPoint( virtualLadder, 1, x2, vZ ); // vYZ
b7943f00 1505 cableHV[iSegment].AddCheckPoint( virtualLadder, 2, x3, vZ );
1506
73dfc864 1507 //cableHV[iSegment].CreateAndInsertCableSegment(1,0);
1508 cableHV[iSegment].CreateAndInsertCableCylSegment(1, -45+180);
1509 //cableHV[iSegment].CreateAndInsertCableSegment(2,0);
1510 cableHV[iSegment].CreateAndInsertBoxCableSegment(2,0);
b7943f00 1511 };
1512
1513 vYZ[2] = -1;
fa4639a3 1514 x1[0] = fgkTransitHVtailXpos;
1515 x2[0] = fgkTransitHVtailXpos;
1516 x3[0] = fgkTransitHVtailXpos;
1517
b7943f00 1518 for (Int_t iSegment = nDetectors/2; iSegment < nDetectors; iSegment++ ) {
1519 Double_t cableSeparation = TMath::Abs(iSegment - (nDetectors/2-1))
1520 *fgkLongHVcableSeparation;
73dfc864 1521 x1[1] = - ladderBoxDH/2 + 2*fgkmm; // adjust where HV long cable starts in Y
b7943f00 1522 x2[1] = - ladderBoxDH/2 + underSegDH - cableSeparation
1523 - (fgkLongHVcablePolyThick+fgkLongHVcableAlThick)/2;
1524 x3[1] = x2[1];
1525 x1[2] = sensorZPos[iSegment]-fgkTransitHVtailLength+5*fgkmm;
1526 x2[2] = x1[2]-5*fgkmm;
1527 x3[2] = -ladderLength/2+endLength;
1528 cableHV[iSegment].AddCheckPoint( virtualLadder, 0, x1, vY );
73dfc864 1529 cableHV[iSegment].AddCheckPoint( virtualLadder, 1, x2, vZ ); // vYZ
b7943f00 1530 cableHV[iSegment].AddCheckPoint( virtualLadder, 2, x3, vZ );
1531
73dfc864 1532 cableHV[iSegment].CreateAndInsertCableCylSegment(1, -45);
1533 cableHV[iSegment].CreateAndInsertBoxCableSegment(2,0);
b7943f00 1534 };
fa4639a3 1535 };
c789ee28 1536
b7943f00 1537 //**********************************
1538 if(GetDebug(1)) virtualLadder->CheckOverlaps(0.01);
b7943f00 1539 return virtualLadder;
531d6cdc 1540}
c789ee28 1541
1542
db486a6e 1543//________________________________________________________________________
b7943f00 1544TGeoArb8 *AliITSv11GeometrySDD::CreateLadderSide(Double_t dz, Double_t angle,
1545 Double_t xSign, Double_t L, Double_t H, Double_t l) {
db486a6e 1546 // Create one half of the V shape corner of CF ladder
1547
1548 TGeoArb8 *cfLaddSide = new TGeoArb8(dz);
c789ee28 1549 cfLaddSide->SetVertex( 0, 0, 0);
1550 cfLaddSide->SetVertex( 1, 0, -H);
1551 cfLaddSide->SetVertex( 2, xSign*(L*TMath::Sin(angle)-l*TMath::Cos(angle)),
1552 -L*TMath::Cos(angle)-l*TMath::Sin(angle));
1553 cfLaddSide->SetVertex( 3, xSign*L*TMath::Sin(angle), -L*TMath::Cos(angle));
1554 cfLaddSide->SetVertex( 4, 0, 0);
1555 cfLaddSide->SetVertex( 5, 0, -H);
1556 cfLaddSide->SetVertex( 6, xSign*(L*TMath::Sin(angle)-l*TMath::Cos(angle)),
1557 -L*TMath::Cos(angle)-l*TMath::Sin(angle));
1558 cfLaddSide->SetVertex(7, xSign*L*TMath::Sin(angle), -L*TMath::Cos(angle));
db486a6e 1559 return cfLaddSide;
531d6cdc 1560}
c789ee28 1561
1562
db486a6e 1563//________________________________________________________________________
b7943f00 1564TGeoVolume* AliITSv11GeometrySDD::CreateHybrid(Int_t iLRSide) {
1565 //
1566 // return a box containing the front-end hybrid
1567 //
1568
1569 Double_t roundHoleX = -fgkHybridWidth/2+fgkHybRndHoleX;
1570
1571 Double_t screenTotalThick = fgkHybGlueScrnThick+fgkHybUpThick+fgkHybAlThick;
1572 Double_t lowFLTotalThick = fgkHybGlueLowThick+fgkHybUpThick+fgkHybAlThick;
1573// Double_t upFLTotalThick = fgkHybGlueUpThick +fgkHybUpThick+fgkHybAlThick;
1574 Double_t chipsCCTotThick = fgkHybUnderNiThick+fgkHybGlueAgThick
1575 +fgkHybChipThick+2*(fgkHybUpCCThick+fgkHybAlCCThick);
1576 Double_t ccUpLayerTotThick = fgkHybUpCCThick+fgkHybAlCCThick+fgkHybUpCCThick;
1577// Double_t volumeThick = (fgkHybridThBridgeThick+screenTotalThick+lowFLTotalThick
1578// + upFLTotalThick + ccUpLayerTotThick);
1579 Double_t volumeThick = (fgkHybridThBridgeThick+screenTotalThick+lowFLTotalThick
1580 +fgkHybSMDheight);
1581 Double_t lowLayerYmin = -volumeThick/2+fgkHybridThBridgeThick
1582 +screenTotalThick;
1583 Double_t flUpThick = fgkHybGlueUpThick+fgkHybUpThick;
1584
1585 //**************************************************** media :
108bd0fe 1586 TGeoMedium *airSDD = GetMedium("SDD AIR$");
1587 TGeoMedium *carbonFiberLadderStruct = GetMedium("SDDKAPTON (POLYCH2)$"); //ITSsddCarbonM55J
1588 TGeoMedium *alSDD = GetMedium("AL$"); //ITSal
1589 TGeoMedium *alSDD80p100 = GetMedium("AL$"); // to code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1590 TGeoMedium *alSDD50p100 = GetMedium("AL$"); // to code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1591 TGeoMedium *polyhamideSDD = GetMedium("SDDKAPTON (POLYCH2)$"); //ITSsddKAPTON_POLYCH2
1592 TGeoMedium *niSDD = GetMedium("COPPER$"); // to code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1593 TGeoMedium *glueAG = GetMedium("SDDKAPTON (POLYCH2)$"); // to code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1594 TGeoMedium *siliconSDD = GetMedium("SDD SI CHIP$"); //ITSsddSiChip
1595 TGeoMedium *medSMD = GetMedium("SDD X7R capacitors$"); // SDDX7Rcapacitors TO CHECK !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1596 TGeoMedium *medSMDweld = GetMedium("SDD X7R capacitors$"); // SDDX7Rcapacitors TO CHECK !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
b7943f00 1597
1598 //**************************************************** main volume :
1599 TGeoBBox *hybridBox = new TGeoBBox("",fgkHybridWidth/2, volumeThick/2,
1600 (fgkHybridLength)/2);
1601 TGeoVolume *hybrid = new TGeoVolume("ITSsddHybridVol", hybridBox,
1602 airSDD);
1603
1604 TGeoBBox *sThermalBridge = new TGeoBBox( "", fgkHybridWidth/2,
1605 fgkHybridThBridgeThick/2,
1606 fgkHybridLength/2);
c789ee28 1607
b7943f00 1608 //**************************************************** Thermal bridge :
c789ee28 1609 TGeoVolume *vThermalBridge = new TGeoVolume("ITSsddHybridThBridge",
1610 sThermalBridge,
1611 carbonFiberLadderStruct);
1612 vThermalBridge->SetLineColor(fColorCarbonFiber);
b7943f00 1613 TGeoTranslation *thBridgeTr = new TGeoTranslation(0, -volumeThick/2
1614 +fgkHybridThBridgeThick/2, 0);
1615 hybrid->AddNode(vThermalBridge, 1, thBridgeTr);
1616
1617 //**************************************************** Screen layer :
1618 TGeoBBox *sAlScreenLayer = new TGeoBBox("sAlScreenLayer", fgkHybridWidth/2,
1619 fgkHybAlThick/2, fgkHybridLength/2);
1620 //here the upedex and glue layers are both assumed to be polyimide
1621 TGeoBBox *sUpGlueScreenLayer = new TGeoBBox("sUpGlueScreenLayer",
1622 fgkHybridWidth/2,
1623 (fgkHybUpThick+fgkHybGlueScrnThick)/2,
1624 fgkHybridLength/2);
1625 TGeoTube *sRoundHole = new TGeoTube("sRoundHole", 0, fgkHybRndHoleRad,
1626 (screenTotalThick+lowFLTotalThick)/2);
1627
1628 TGeoTranslation *upGlueScreenTr = new TGeoTranslation("upGlueScreenTr",0,
1629 -volumeThick/2+fgkHybridThBridgeThick+(fgkHybUpThick+fgkHybGlueScrnThick)/2,0);
1630
1631 TGeoTranslation *alScreenTr = new TGeoTranslation("AlScreenTr", 0,
1632 -volumeThick/2+fgkHybridThBridgeThick+fgkHybUpThick+fgkHybGlueScrnThick
1633 +fgkHybAlThick/2, 0);
1634
1635 TGeoTranslation hybHolePos1Tr(roundHoleX,
1636 -volumeThick/2+fgkHybridThBridgeThick+(screenTotalThick+lowFLTotalThick)/2,
1637 -fgkHybridLength/2+fgkHybRndHoleZ);
1638 TGeoTranslation hybHolePos2Tr(roundHoleX,
1639 -volumeThick/2+fgkHybridThBridgeThick+(screenTotalThick+lowFLTotalThick)/2,
1640 fgkHybridLength/2-fgkHybRndHoleZ);
531d6cdc 1641
1642 TGeoRotation *rotHole = new TGeoRotation("", 0, 90, 0);
1643 TGeoCombiTrans *hybHolePos1 = new TGeoCombiTrans(hybHolePos1Tr, *rotHole);
b7943f00 1644 hybHolePos1->SetName("hybHolePos1");
531d6cdc 1645 TGeoCombiTrans *hybHolePos2 = new TGeoCombiTrans(hybHolePos2Tr, *rotHole);
b7943f00 1646 hybHolePos2->SetName("hybHolePos2");
1647
1648 upGlueScreenTr->RegisterYourself();
1649 alScreenTr->RegisterYourself();
1650 hybHolePos1->RegisterYourself();
1651 hybHolePos2->RegisterYourself();
531d6cdc 1652 delete rotHole;
b7943f00 1653
1654 TGeoCompositeShape *sScreenAl = new TGeoCompositeShape(
1655 "sAlScreenLayer:AlScreenTr-(sRoundHole:hybHolePos1"
1656 "+sRoundHole:hybHolePos2)");
1657 TGeoVolume *vScreenAl = new TGeoVolume("vScreenAl",sScreenAl, alSDD);
1658 vScreenAl->SetLineColor(fColorAl);
1659 TGeoCompositeShape *sScreenUpGlue = new TGeoCompositeShape(
1660 "sUpGlueScreenLayer:upGlueScreenTr-(sRoundHole:hybHolePos1"
1661 "+sRoundHole:hybHolePos2)");
1662 TGeoVolume *vScreenUpGlue = new TGeoVolume("vScreenUpGlue",
1663 sScreenUpGlue,polyhamideSDD);
1664 vScreenUpGlue->SetLineColor(fColorPolyhamide);
1665
1666 hybrid->AddNode(vScreenUpGlue, 1, 0);
1667 hybrid->AddNode(vScreenAl, 1, 0);
1668
1669 //**************************************************** FL low layer :
1670 Double_t sideWidth1 = fgkHybFLlowChipZ1 - fgkHybFLlowHoleDZ/2;
1671 Double_t sideWidth2 = fgkHybridLength - fgkHybFLlowChipZ4 - fgkHybFLlowHoleDZ/2;
1672
1673 //here the upedex and glue layers are both assumed to be polyimide
1674 TGeoBBox *sUpGlueBar1 = new TGeoBBox("sUpGlueBar1", fgkHybridWidth/2,
1675 (fgkHybGlueLowThick+fgkHybUpThick)/2,
1676 sideWidth1/2);
1677 TGeoBBox *sAlBar1 = new TGeoBBox("sAlBar1", fgkHybridWidth/2,
1678 fgkHybAlThick/2, sideWidth1/2);
1679
1680 TGeoTranslation *upGlueBarTr1 = new TGeoTranslation("upGlueBarTr1", 0,
1681 lowLayerYmin+(fgkHybGlueLowThick+fgkHybUpThick)/2,
1682 -(fgkHybridLength-sideWidth1)/2);
1683 TGeoTranslation *alBarTr1 = new TGeoTranslation("alBarTr1", 0,
1684 lowLayerYmin+fgkHybGlueLowThick+fgkHybUpThick+fgkHybAlThick/2,
1685 -(fgkHybridLength-sideWidth1)/2);
1686 upGlueBarTr1->RegisterYourself();
1687 alBarTr1->RegisterYourself();
1688
1689 TGeoCompositeShape *sLowUpGlueBar1 = new TGeoCompositeShape(
1690 "sUpGlueBar1:upGlueBarTr1-sRoundHole:hybHolePos1");
1691 TGeoCompositeShape *sLowAlBar1 = new TGeoCompositeShape(
1692 "sAlBar1:alBarTr1-sRoundHole:hybHolePos1");
1693 TGeoVolume *vLowUpGlueBar1 = new TGeoVolume("vLowUpGlueBar1",
1694 sLowUpGlueBar1, polyhamideSDD);
1695 TGeoVolume *vLowAlBar1 = new TGeoVolume("vLowAlBar1",
1696 sLowAlBar1, alSDD);
1697 vLowUpGlueBar1->SetLineColor(fColorPolyhamide);
1698 vLowAlBar1->SetLineColor(fColorAl);
1699 hybrid->AddNode(vLowUpGlueBar1,1,0);
1700 hybrid->AddNode(vLowAlBar1,1,0);
1701
1702 //---
1703 //here the upedex and glue layers are both assumed to be polyimide
1704 TGeoBBox *sUpGlueBar2 = new TGeoBBox("sUpGlueBar2", fgkHybridWidth/2,
1705 (fgkHybGlueLowThick+fgkHybUpThick)/2,
1706 sideWidth2/2);
1707 TGeoBBox *sAlBar2 = new TGeoBBox("sAlBar2", fgkHybridWidth/2,
1708 fgkHybAlThick/2, sideWidth2/2);
1709
1710 TGeoTranslation *upGlueBarTr2 = new TGeoTranslation("upGlueBarTr2", 0,
1711 lowLayerYmin+(fgkHybGlueLowThick+fgkHybUpThick)/2,
1712 (fgkHybridLength-sideWidth2)/2);
1713 TGeoTranslation *alBarTr2 = new TGeoTranslation("alBarTr2", 0,
1714 lowLayerYmin+fgkHybGlueLowThick+fgkHybUpThick+fgkHybAlThick/2,
1715 (fgkHybridLength-sideWidth2)/2);
1716 upGlueBarTr2->RegisterYourself();
1717 alBarTr2->RegisterYourself();
1718
1719 TGeoCompositeShape *sLowUpGlueBar2 = new TGeoCompositeShape(
1720 "sUpGlueBar2:upGlueBarTr2-sRoundHole:hybHolePos2");
1721 TGeoCompositeShape *sLowAlBar2 = new TGeoCompositeShape(
1722 "sAlBar2:alBarTr2-sRoundHole:hybHolePos2");
1723 TGeoVolume *vLowUpGlueBar2 = new TGeoVolume("vLowUpGlueBar2",sLowUpGlueBar2,
1724 polyhamideSDD);
1725 TGeoVolume *vLowAlBar2 = new TGeoVolume("vLowAlBar2",sLowAlBar2,
1726 alSDD);
1727 vLowUpGlueBar2->SetLineColor(fColorPolyhamide);
1728 vLowAlBar2->SetLineColor(fColorAl);
1729 hybrid->AddNode(vLowUpGlueBar2, 1, 0);
1730 hybrid->AddNode(vLowAlBar2, 1, 0);
1731
108bd0fe 1732 if(GetDebug(3)) { // Remove compiler warning.
b7943f00 1733 sAlScreenLayer->InspectShape();
1734 sUpGlueScreenLayer->InspectShape();
1735 sRoundHole->InspectShape();
1736 sUpGlueBar1->InspectShape();
1737 sUpGlueBar2->InspectShape();
1738 sAlBar1->InspectShape();
1739 sAlBar2->InspectShape();
1740 };
1741 //---
1742 //using class AliITSv11GeomCableFlat to add 2-layer segments ...
1743 Double_t piece1width = fgkHybFLlowPasX-fgkHybFLlowHolePasDX/2;
1744 AliITSv11GeomCableFlat lowFLpiece("lowFLpiece1",piece1width,
1745 lowFLTotalThick);
1746 lowFLpiece.SetNLayers(2);
1747 lowFLpiece.SetLayer(0, fgkHybGlueLowThick+fgkHybUpThick, polyhamideSDD,
1748 fColorPolyhamide);
1749 lowFLpiece.SetLayer(1, fgkHybAlThick, alSDD80p100, fColorAl);
1750 // alSDD at 80% : mostly to take into account strips of piece 3
1751
1752 Double_t x1[3] = { -fgkHybridWidth/2 + piece1width/2,
1753 lowLayerYmin + lowFLTotalThick/2,
1754 -fgkHybridLength/2 + sideWidth1 };
1755 Double_t x2[3] ={ x1[0], x1[1], fgkHybridLength/2 - sideWidth2 };
1756 Double_t vZ[3] = {0,0,1};
1757 lowFLpiece.AddCheckPoint( hybrid, 0, x2, vZ );
1758 lowFLpiece.AddCheckPoint( hybrid, 1, x1, vZ );
1759 lowFLpiece.SetInitialNode(hybrid);
108bd0fe 1760 lowFLpiece.CreateAndInsertBoxCableSegment(1);
b7943f00 1761 lowFLpiece.ResetPoints();
1762
1763 Double_t piece2width = fgkHybFLlowAmbX-fgkHybFLlowPasX
1764 -fgkHybFLlowHolePasDX/2-fgkHybFLlowHoleAmbDX/2;
1765
1766 lowFLpiece.SetWidth(piece2width);
1767 lowFLpiece.SetName("lowFLpiece2");
1768 x1[0] = piece2width/2+fgkHybFLlowPasX+fgkHybFLlowHolePasDX/2-fgkHybridWidth/2;
1769 x2[0] = x1[0];
1770 lowFLpiece.AddCheckPoint( hybrid, 0, x2, vZ );
1771 lowFLpiece.AddCheckPoint( hybrid, 1, x1, vZ );
108bd0fe 1772 lowFLpiece.CreateAndInsertBoxCableSegment(1);
b7943f00 1773 lowFLpiece.ResetPoints();
1774
1775 Double_t piece3width = fgkHybridWidth - fgkHybFLlowAmbX
1776 - fgkHybFLlowHoleAmbDX/2;
1777
1778 lowFLpiece.SetWidth(piece3width);
1779 lowFLpiece.SetName("lowFLpiece3");
1780 x1[0] = fgkHybridWidth/2-piece3width/2;
1781 x2[0] = x1[0];
1782 lowFLpiece.AddCheckPoint( hybrid, 0, x2, vZ );
1783 lowFLpiece.AddCheckPoint( hybrid, 1, x1, vZ );
108bd0fe 1784 lowFLpiece.CreateAndInsertBoxCableSegment(1);
b7943f00 1785
1786 Double_t zChips[4] = {fgkHybFLlowChipZ1,fgkHybFLlowChipZ2,
1787 fgkHybFLlowChipZ3,fgkHybFLlowChipZ4};
1788 Double_t vX[3] = {1,0,0};
1789 for (Int_t i=0; i<3; i++) {
1790 char ch[20];
1791 sprintf(ch, "lowFLpieceA%i", i+4);
1792 lowFLpiece.SetName(ch);
1793 lowFLpiece.SetWidth(zChips[i+1]-zChips[i]-fgkHybFLlowHoleDZ);
1794
1795 lowFLpiece.SetLayer(1, fgkHybAlThick, alSDD, fColorAl);
1796 x1[0] = -fgkHybridWidth/2 + piece1width;
1797 x2[0] = x1[0] + fgkHybFLlowHolePasDX;
1798 Double_t zPiece = (zChips[i+1]+zChips[i])/2 - fgkHybridLength/2;
1799 x1[2] = zPiece; x2[2] = zPiece;
1800 lowFLpiece.AddCheckPoint( hybrid, 0, x2, vX );
1801 lowFLpiece.AddCheckPoint( hybrid, 1, x1, vX );
108bd0fe 1802 lowFLpiece.CreateAndInsertBoxCableSegment(1,90);
b7943f00 1803 lowFLpiece.ResetPoints();
1804
1805 sprintf(ch, "lowFLpieceB%i", i+4);
1806 lowFLpiece.SetName(ch);
1807 x1[0] = fgkHybridWidth/2 - piece3width;
1808 x2[0] = x1[0] - fgkHybFLlowHoleAmbDX;
1809 lowFLpiece.AddCheckPoint( hybrid, 0, x1, vX );
1810 lowFLpiece.AddCheckPoint( hybrid, 1, x2, vX );
108bd0fe 1811 lowFLpiece.CreateAndInsertBoxCableSegment(1,90);
b7943f00 1812 };
1813
1814 //**************************************************** chips+CC:
1815 AliITSv11GeomCableFlat chip("", fgkHybChipsDZ, chipsCCTotThick);
1816 chip.SetInitialNode(hybrid);
1817 chip.SetNLayers(5);
1818 chip.SetLayer(0, fgkHybUnderNiThick, niSDD, 2);
1819 chip.SetLayer(1, fgkHybGlueAgThick, glueAG, 4);
1820 chip.SetLayer(2, fgkHybChipThick, siliconSDD, fColorSilicon);
1821 chip.SetLayer(3, fgkHybUpCCThick+fgkHybUpCCThick, polyhamideSDD,
1822 fColorPolyhamide);
1823 chip.SetLayer(4, fgkHybAlCCThick+fgkHybAlCCThick, alSDD80p100, fColorAl);
1824 // Here the tho CC (low+up) are merged
1825 // In fact, the last layer has a smaller surface of Al -> I put 80%
1826
1827 x1[1] = lowLayerYmin + chipsCCTotThick/2;
1828 x2[1] = x1[1];
1829 char ch[20];
1830
1831 for (Int_t i=0; i<4; i++) {
1832 sprintf(ch, "pascalCC%i", i);
1833 chip.SetName(ch);
1834 x1[0] = fgkHybFLlowPasX - fgkHybridWidth/2 - fgkHybPascalDX/2;
1835 x2[0] = x1[0] + fgkHybPascalDX;
1836 x1[2] = zChips[i] - fgkHybridLength/2;
1837 x2[2] = x1[2];
1838 chip.AddCheckPoint( hybrid, 0, x1, vX );
1839 chip.AddCheckPoint( hybrid, 1, x2, vX );
108bd0fe 1840 chip.CreateAndInsertBoxCableSegment(1,-90);
b7943f00 1841 chip.ResetPoints();
1842
1843 sprintf(ch, "ambraCC%i", i);
1844 chip.SetName(ch);
1845 x1[0] = fgkHybFLlowAmbX - fgkHybridWidth/2 - fgkHybAmbraDX/2;
1846 x2[0] = x1[0] + fgkHybAmbraDX;
1847 chip.AddCheckPoint( hybrid, 0, x1, vX );
1848 chip.AddCheckPoint( hybrid, 1, x2, vX );
108bd0fe 1849 chip.CreateAndInsertBoxCableSegment(1,-90);
b7943f00 1850 chip.ResetPoints();
1851 };
c789ee28 1852
b7943f00 1853 //**************************************************** CC outside chips:
73dfc864 1854 // I don't think there is a second aluminium layer here ...
b7943f00 1855 for (Int_t i = 0; i<4; i++) {
1856 char ch[20];
1857 sprintf(ch, "ccLayerA%i", i);
1858
1859 AliITSv11GeomCableFlat ccLayer1(ch, 6.6*fgkmm, ccUpLayerTotThick);
1860 ccLayer1.SetInitialNode(hybrid);
1861 ccLayer1.SetNLayers(2);
1862 ccLayer1.SetLayer(0, 2*fgkHybUpCCThick, polyhamideSDD, fColorPolyhamide);
1863 ccLayer1.SetLayer(1, fgkHybAlCCThick, alSDD50p100, fColorAl);
1864 // Al at ~50%
1865
1866 x1[0] = -fgkHybridWidth/2;
1867 x2[0] = fgkHybFLlowPasX - fgkHybridWidth/2 - fgkHybPascalDX/2;
1868 x1[1] = lowLayerYmin + fgkHybUnderNiThick + fgkHybGlueAgThick
1869 + fgkHybChipThick + ccUpLayerTotThick/2;
1870 x2[1] = x1[1];
1871 x1[2] = zChips[i] - fgkHybridLength/2;
1872 x2[2] = x1[2];
1873 ccLayer1.AddCheckPoint( hybrid, 0, x1, vX );
1874 ccLayer1.AddCheckPoint( hybrid, 1, x2, vX );
108bd0fe 1875 ccLayer1.CreateAndInsertBoxCableSegment(1,-90);
b7943f00 1876
1877 sprintf(ch, "ccLayerB%i", i);
1878 AliITSv11GeomCableFlat ccLayer2(ch, fgkHybChipsDZ, ccUpLayerTotThick);
1879 ccLayer2.SetInitialNode(hybrid);
1880 ccLayer2.SetNLayers(2);
1881 ccLayer2.SetLayer(0, 2*fgkHybUpCCThick, polyhamideSDD, fColorPolyhamide);
1882 ccLayer2.SetLayer(1, fgkHybAlCCThick, alSDD50p100, fColorAl);
1883 // Al at ~50%
1884
1885 x1[0] = -fgkHybridWidth/2 + fgkHybFLlowPasX + fgkHybPascalDX/2;
1886 x2[0] = -fgkHybridWidth/2 + fgkHybFLlowAmbX - fgkHybAmbraDX/2;
1887 ccLayer2.AddCheckPoint( hybrid, 0, x1, vX );
1888 ccLayer2.AddCheckPoint( hybrid, 1, x2, vX );
108bd0fe 1889 ccLayer2.CreateAndInsertBoxCableSegment(1,-90);
b7943f00 1890 ccLayer2.ResetPoints();
1891 sprintf(ch, "ccLayerC%i", i);
1892 ccLayer2.SetName(ch);
1893 x1[0] = -fgkHybridWidth/2 + fgkHybFLlowAmbX + fgkHybAmbraDX/2;
1894 x2[0] = fgkHybridWidth/2 - fgkHybFLUpperWidth + 3*fgkmm;
1895 x1[1] = lowLayerYmin + lowFLTotalThick + flUpThick + fgkHybAlThick
1896 + ccUpLayerTotThick/2;
1897 x2[1] = x1[1];
1898
1899 ccLayer2.AddCheckPoint( hybrid, 0, x1, vX );
1900 ccLayer2.AddCheckPoint( hybrid, 1, x2, vX );
108bd0fe 1901 ccLayer2.CreateAndInsertBoxCableSegment(1,-90);
b7943f00 1902 };
c789ee28 1903
b7943f00 1904 //**************************************************** FL UP:
1905 // (last Al layer will be a special triangular shape)
1906 TGeoBBox *sFLupPolyhamide = new TGeoBBox("sFLupPolyhamide",
1907 fgkHybFLUpperWidth/2, flUpThick/2,
1908 fgkHybFLUpperLength/2);
1909 TGeoVolume *vFLupPolyhamide = new TGeoVolume("vFLupPolyhamide",
1910 sFLupPolyhamide, polyhamideSDD);
1911 vFLupPolyhamide->SetLineColor(fColorPolyhamide);
1912 TGeoTranslation *trFLupPolyhamide =
1913 new TGeoTranslation(fgkHybridWidth/2-fgkHybFLUpperWidth/2,
1914 lowLayerYmin+lowFLTotalThick+flUpThick/2,0);
1915
1916 hybrid->AddNode(vFLupPolyhamide, 1, trFLupPolyhamide);
1917
1918 TGeoArb8 *aluStrip = new TGeoArb8(fgkHybAlThick/2);
1919 aluStrip->SetVertex( 0,-fgkHybFLUpperAlDZ/2, fgkHybFLUpperWidth);
1920 aluStrip->SetVertex( 1, fgkHybFLUpperAlDZ/2, fgkHybFLUpperWidth);
1921 aluStrip->SetVertex( 2, fgkHybFLUpperAlDZ/2, fgkHybFLUpperWidth-fgkHybFLUpperAldx);
1922 aluStrip->SetVertex( 3,-fgkHybFLUpperAlDZ/2, 0);
1923 aluStrip->SetVertex( 4,-fgkHybFLUpperAlDZ/2, fgkHybFLUpperWidth);
1924 aluStrip->SetVertex( 5, fgkHybFLUpperAlDZ/2, fgkHybFLUpperWidth);
1925 aluStrip->SetVertex( 6, fgkHybFLUpperAlDZ/2, fgkHybFLUpperWidth-fgkHybFLUpperAldx);
1926 aluStrip->SetVertex( 7,-fgkHybFLUpperAlDZ/2, 0);
1927 TGeoVolume *vAluStrip = new TGeoVolume("vAluStrip",aluStrip, alSDD50p100);
1928 // Al at ~50%
1929
1930 vAluStrip->SetLineColor(fColorAl);
531d6cdc 1931 //TGeoRotation rotAluStrip("rotAluStrip",0, -90, 90);
1932 TGeoRotation *rotAluStrip = new TGeoRotation("rotAluStrip",0, -90, 90);
1933
b7943f00 1934 Double_t yRotAluStrip = lowLayerYmin+lowFLTotalThick
1935 +flUpThick+fgkHybAlThick/2;
1936 TGeoCombiTrans *aluStripTr1 = new TGeoCombiTrans(
1937 fgkHybridWidth/2,yRotAluStrip,
531d6cdc 1938 fgkHybridLength/2-fgkHybFLlowChipZ1+1*fgkmm, rotAluStrip);
b7943f00 1939 TGeoCombiTrans *aluStripTr2 = new TGeoCombiTrans(*aluStripTr1);
1940 AddTranslationToCombiTrans(aluStripTr2,0,0,
1941 fgkHybFLlowChipZ1-fgkHybFLlowChipZ2);
1942 TGeoCombiTrans *aluStripTr3 = new TGeoCombiTrans(*aluStripTr2);
1943 AddTranslationToCombiTrans(aluStripTr3,0,0,
1944 fgkHybFLlowChipZ2-fgkHybFLlowChipZ3);
1945 TGeoCombiTrans *aluStripTr4 = new TGeoCombiTrans(*aluStripTr3);
1946 AddTranslationToCombiTrans(aluStripTr4,0,0,
1947 fgkHybFLlowChipZ3-fgkHybFLlowChipZ4);
1948
1949 hybrid->AddNode(vAluStrip, 1, aluStripTr1);
1950 hybrid->AddNode(vAluStrip, 2, aluStripTr2);
1951 hybrid->AddNode(vAluStrip, 3, aluStripTr3);
1952 hybrid->AddNode(vAluStrip, 4, aluStripTr4);
b7943f00 1953 //**************************************************** SMD:
1954 TGeoBBox *hybSMD = new TGeoBBox("ITSsddSMDshape",
1955 fgkHybSMDmiddleL/2+fgkHybSMDendL,
1956 fgkHybSMDheight/2,fgkHybSMDendW/2);
1957 TGeoVolume *vHybSMD = new TGeoVolume("ITSsddSMD",hybSMD,airSDD);
1958
1959 TGeoBBox *hybSMDmiddle = new TGeoBBox("ITSsddSMDmiddleShape",
1960 fgkHybSMDmiddleL/2,fgkHybSMDheight/2,
1961 fgkHybSMDmiddleW/2);
1962 TGeoVolume *vHybSMDmiddle = new TGeoVolume("ITSsddSMDmiddle",
1963 hybSMDmiddle,medSMD);
1964 vHybSMDmiddle->SetLineColor(fColorSMD);
1965 TGeoBBox *hybSMDend = new TGeoBBox("ITSsddSMDendShape",
1966 fgkHybSMDendL/2,fgkHybSMDheight/2,fgkHybSMDendW/2);
1967 TGeoVolume *vHybSMDend = new TGeoVolume("ITSsddSMDend",
1968 hybSMDend,medSMDweld);
1969 vHybSMDend->SetLineColor(fColorSMDweld);
1970 TGeoTranslation *vHybSMDendTr1 = new TGeoTranslation("",
1971 (fgkHybSMDmiddleL+fgkHybSMDendL)/2,0,0);
1972 TGeoTranslation *vHybSMDendTr2 = new TGeoTranslation("",
1973 -(fgkHybSMDmiddleL+fgkHybSMDendL)/2,0,0);
1974 vHybSMD->AddNode(vHybSMDmiddle,1,0);
1975 vHybSMD->AddNode(vHybSMDend,1,vHybSMDendTr1);
1976 vHybSMD->AddNode(vHybSMDend,2,vHybSMDendTr2);
1977 for (Int_t i=0; i<fgkNHybSMD; i++) {
1978 TGeoTranslation *vHybSMDtr = new TGeoTranslation("",
1979 -fgkHybridWidth/2+fgkHybSMDposX[i],
1980 lowLayerYmin+lowFLTotalThick+fgkHybSMDheight/2,
1981 -fgkHybridLength/2+fgkHybSMDposZ[i]);
1982 hybrid->AddNode(vHybSMD, i+1, vHybSMDtr);
1983 };
1984
b7943f00 1985 if (iLRSide == 0) {
1986 };
1987
1988 if(GetDebug(1)) hybrid->CheckOverlaps(0.01);
1989 hybrid->SetVisibility(kFALSE);
1990 return hybrid;
531d6cdc 1991}
c789ee28 1992
db486a6e 1993//________________________________________________________________________
73dfc864 1994TGeoVolume* AliITSv11GeometrySDD::CreateLadderSegment(Int_t iLay, Int_t iSeg) {
b7943f00 1995 //
73dfc864 1996 // Return a TGeoVolume* containing a segment of a ladder.
b7943f00 1997 //
1998
108bd0fe 1999 TGeoMedium *phynoxSDD = GetMedium("inox/alum$"); // phynoxSDD To code ??? !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2000 TGeoMedium *coolerMediumSDD = GetMedium("WATER$");
73dfc864 2001 TGeoMedium *airSDD = GetMedium("SDD AIR$");
b7943f00 2002
2003 Double_t tDY = fgkLadderSegBoxDH/2; //space left on top of the ladder
2004 Double_t segmentLength = fgkSegmentLength;
2005 Double_t spaceBetweenCables = 500*fgkmicron;
2006
2007 //*****************************************
2008 // Set parameters according to (iLay,iSeg):
2009 //*****************************************
2010 Int_t nDetectors = fgkLay3Ndet;
2011 Double_t coolPipeSuppH = fgkLay3CoolPipeSuppH;
2012 Double_t sensorCenterZPos = fLay3sensorZPos[iSeg]-
2013 (fgkSegmentLength*fgkLay3Ndet/2. -
2014 fgkSegmentLength/2-(iSeg)*fgkSegmentLength);
2015 // sensorCenterZPos = z in segment local coord syst.
2016
2017 AliITSv11GeomCableFlat *digitCableA = fDigitCableLay3A;
2018 AliITSv11GeomCableFlat *digitCableB = fDigitCableLay3B;
2019
2020 if (iLay==3) {
2021 } else if (iLay==4) {
2022 nDetectors = fgkLay4Ndet;
2023 coolPipeSuppH = fgkLay4CoolPipeSuppH;
2024 sensorCenterZPos = fLay4sensorZPos[iSeg]-
2025 (fgkSegmentLength*fgkLay4Ndet/2. -
2026 fgkSegmentLength/2-(iSeg)*fgkSegmentLength);
2027 digitCableA = fDigitCableLay4A;
2028 digitCableB = fDigitCableLay4B;
2029 } else
2030 printf("AliITSv11GeometrySDD::CreateLadderSegment Wrong layer index !");
2031
2032
2033 Double_t cableSideSign = -1;
2034 if (iSeg<nDetectors/2) cableSideSign = 1;
2035 Double_t spaceForCables = spaceBetweenCables*
2036 (nDetectors-TMath::Abs(nDetectors-2*iSeg-1)-1)/2
2037 +0.1*fgkmicron;
2038 // gives [0-1-2-2-1-0]*spaceBetweenCables
2039 // or [0-1-2-3-3-2-1-0]*spaceBetweenCables
2040 Int_t iUpdateCableMin;
2041 Int_t iUpdateCableMax;
2042 if (cableSideSign==-1) {
2043 iUpdateCableMin = nDetectors/2;
2044 iUpdateCableMax = iSeg-1;
2045 } else {
2046 iUpdateCableMin = iSeg+1;
2047 iUpdateCableMax = nDetectors/2-1;
2048 };
2049
2050 if(GetDebug(1)){
2051 cout << "Segment ("<< iLay <<',' << iSeg
2052 << ") : sensor z shift in local segment coord.="
2053 << sensorCenterZPos << endl;
2054 };
2055
2056 //****************************
2057 // The segment volume
2058 //****************************
108bd0fe 2059
73dfc864 2060 // Use of TGeoVolumeAssembly increases the calculation time of overlaps and very
2061 // likely slows down the transport of particles through the geometry
2062
2063 //TGeoVolumeAssembly *virtualSeg = new TGeoVolumeAssembly("ITSsddSegment");
2064
2065 TGeoBBox *segBox = new TGeoBBox("ITSsddSegBox",
2066 fgkLadderWidth/2+fgkPinSuppWidth+fgkLadderSegBoxDW,
2067 fgkLadderHeight/2+fgkLadderSegBoxDH/2,
2068 segmentLength/2);
2069
2070 TGeoVolume *virtualSeg = new TGeoVolume("ITSsddSegment",
2071 segBox, airSDD);
2072 virtualSeg->SetVisibility(kFALSE);
b7943f00 2073
2074 //******************************
2075 // Carbon fiber structure :
2076 //******************************
2077
2078 virtualSeg->AddNode(fLaddSegCommonVol[0], 1, fLaddSegCommonTr[0]);
2079 Int_t volumeIndex = 1;
2080 for (Int_t i = 1; i<fgkNladdSegCommonVol;i++ ) {
2081 if (fLaddSegCommonVol[i]==fLaddSegCommonVol[i-1])
2082 volumeIndex++;
2083 else
2084 volumeIndex = 1;
2085 virtualSeg->AddNode(fLaddSegCommonVol[i], volumeIndex,
2086 fLaddSegCommonTr[i]);
2087 };
2088
2089 //**********************************
2090 // Pine support of the sensors :
2091 //**********************************
531d6cdc 2092 TGeoRotation *rotPS1 = new TGeoRotation("",0,-90,90);
2093 TGeoRotation *rotPS2 = new TGeoRotation("",0,-90,-90);
2094
73dfc864 2095 // The use of the following constructor type allow to use rotPS1 and rotPS2
2096 // (and not copy them) therefore we gain some memory
b7943f00 2097 TGeoCombiTrans *transPS1 = new TGeoCombiTrans( fgkPinDYOnSensor,
2098 - fgkLadderHeight/2.-tDY
2099 + fgkPinSuppHeight/2.,
531d6cdc 2100 sensorCenterZPos+fgkPinDXminOnSensor,rotPS1);
73dfc864 2101
2102 TGeoCombiTrans *transPS2 = new TGeoCombiTrans( fgkPinDYOnSensor,
2103 - fgkLadderHeight/2.-tDY
2104 + fgkPinSuppHeight/2.,
2105 sensorCenterZPos+fgkPinDXminOnSensor,rotPS1);
b7943f00 2106 AddTranslationToCombiTrans(transPS2, 0, 0, fgkPinPinDDXOnSensor);
73dfc864 2107
2108 TGeoCombiTrans *transPS3 = new TGeoCombiTrans( fgkPinDYOnSensor,
2109 - fgkLadderHeight/2.-tDY
2110 + fgkPinSuppHeight/2.,
2111 sensorCenterZPos+fgkPinDXminOnSensor,rotPS1);
b7943f00 2112 AddTranslationToCombiTrans(transPS3, 0, 0, -2*fgkPinDXminOnSensor);
73dfc864 2113
2114 TGeoCombiTrans *transPS4 = new TGeoCombiTrans( fgkPinDYOnSensor,
2115 - fgkLadderHeight/2.-tDY
2116 + fgkPinSuppHeight/2.,
2117 sensorCenterZPos+fgkPinDXminOnSensor,rotPS1);
2118 AddTranslationToCombiTrans(transPS4, 0, 0, -2*fgkPinDXminOnSensor-fgkPinPinDDXOnSensor);
b7943f00 2119
2120 TGeoCombiTrans *transPS5 = new TGeoCombiTrans( -fgkPinDYOnSensor,
2121 - fgkLadderHeight/2. - tDY
2122 + fgkPinSuppHeight/2.,
531d6cdc 2123 sensorCenterZPos+fgkPinDXminOnSensor,rotPS2);
73dfc864 2124
2125 TGeoCombiTrans *transPS6 = new TGeoCombiTrans( -fgkPinDYOnSensor,
2126 - fgkLadderHeight/2. - tDY
2127 + fgkPinSuppHeight/2.,
2128 sensorCenterZPos+fgkPinDXminOnSensor,rotPS2);
b7943f00 2129 AddTranslationToCombiTrans(transPS6, 0, 0, fgkPinPinDDXOnSensor);
73dfc864 2130
2131 TGeoCombiTrans *transPS7 = new TGeoCombiTrans( -fgkPinDYOnSensor,
2132 - fgkLadderHeight/2. - tDY
2133 + fgkPinSuppHeight/2.,
2134 sensorCenterZPos+fgkPinDXminOnSensor,rotPS2);
b7943f00 2135 AddTranslationToCombiTrans(transPS7, 0, 0, -2*fgkPinDXminOnSensor);
73dfc864 2136
2137 TGeoCombiTrans *transPS8 = new TGeoCombiTrans( -fgkPinDYOnSensor,
2138 - fgkLadderHeight/2. - tDY
2139 + fgkPinSuppHeight/2.,
2140 sensorCenterZPos+fgkPinDXminOnSensor,rotPS2);
2141 AddTranslationToCombiTrans(transPS8, 0, 0, -2*fgkPinDXminOnSensor-fgkPinPinDDXOnSensor);
b7943f00 2142
2143 virtualSeg->AddNode(fPinSupport, 1, transPS1);
2144 virtualSeg->AddNode(fPinSupport, 2, transPS2);
2145 virtualSeg->AddNode(fPinSupport, 3, transPS3);
2146 virtualSeg->AddNode(fPinSupport, 4, transPS4);
2147 virtualSeg->AddNode(fPinSupport, 5, transPS5);
2148 virtualSeg->AddNode(fPinSupport, 6, transPS6);
2149 virtualSeg->AddNode(fPinSupport, 7, transPS7);
2150 virtualSeg->AddNode(fPinSupport, 8, transPS8);
2151
2152 //******************************
2153 // Cooling pipe supports :
2154 //******************************
2155 Double_t triangleHeight = fgkLadderHeight - fgkLadderBeamRadius;
2156 Double_t halfTheta = TMath::ATan( 0.5*fgkLadderWidth/triangleHeight );
2157 Double_t triangleCPaxeDist = fgkCoolPipeSuppAxeDist-fgkCoolPipeSuppWidthExt-
2158 fgkCoolPipeSuppWidthIn+fgkLadderBeamRadius;
2159
2160 Double_t coolPipeSuppL = TMath::Tan(halfTheta)*
2161 (triangleHeight+triangleCPaxeDist/
2162 TMath::Sin(halfTheta)-coolPipeSuppH);
2163 if (fAddCoolingSyst) {
531d6cdc 2164 TGeoRotation *rotCPS2 = new TGeoRotation("", -halfTheta*TMath::RadToDeg(), -90, 90);
2165 TGeoRotation *rotCPS1 = new TGeoRotation("", halfTheta*TMath::RadToDeg(), -90, -90);
b7943f00 2166 TGeoCombiTrans *transCPS1 = new TGeoCombiTrans(coolPipeSuppL,
fa4639a3 2167 -fgkLadderHeight/2. - tDY
b7943f00 2168 +coolPipeSuppH+fgkLadderBeamRadius,
531d6cdc 2169 -segmentLength/2., rotCPS1);
73dfc864 2170
2171 TGeoCombiTrans *transCPS3 = new TGeoCombiTrans(coolPipeSuppL,
2172 -fgkLadderHeight/2. - tDY
2173 +coolPipeSuppH+fgkLadderBeamRadius,
2174 -segmentLength/2., rotCPS1);
b7943f00 2175 AddTranslationToCombiTrans(transCPS3, 0, 0, segmentLength);
2176
2177 TGeoCombiTrans *transCPS2 = new TGeoCombiTrans(-coolPipeSuppL,
fa4639a3 2178 -fgkLadderHeight/2.- tDY
b7943f00 2179 +coolPipeSuppH+fgkLadderBeamRadius,
531d6cdc 2180 segmentLength/2., rotCPS2);
73dfc864 2181
2182 TGeoCombiTrans *transCPS4 = new TGeoCombiTrans(-coolPipeSuppL,
2183 -fgkLadderHeight/2.- tDY
2184 +coolPipeSuppH+fgkLadderBeamRadius,
2185 segmentLength/2., rotCPS2);
b7943f00 2186 AddTranslationToCombiTrans(transCPS4, 0, 0, -segmentLength);
2187
2188 virtualSeg->AddNode(fCoolPipeSupportL, 1, transCPS1);
2189 virtualSeg->AddNode(fCoolPipeSupportL, 2, transCPS2);
2190 virtualSeg->AddNode(fCoolPipeSupportR, 1, transCPS3);
2191 virtualSeg->AddNode(fCoolPipeSupportR, 2, transCPS4);
2192 };
2193
2194 //************************
2195 // Cooling pipes :
2196 //************************
2197 TGeoTranslation *pipeTr1 = new TGeoTranslation(coolPipeSuppL,
2198 -fgkLadderHeight/2. - tDY +
2199 fgkLadderBeamRadius+coolPipeSuppH, 0);
2200 TGeoTranslation *pipeTr2 = new TGeoTranslation(-coolPipeSuppL,
2201 -fgkLadderHeight/2.- tDY +
2202 fgkLadderBeamRadius+coolPipeSuppH, 0);
2203
2204 if (fAddCoolingSyst) {
108bd0fe 2205 TGeoTube *coolingPipeShape = new TGeoTube( fgkCoolPipeInnerDiam/2,
2206 fgkCoolPipeOuterDiam/2,
2207 segmentLength/2);
2208 TGeoTube *coolerShape = new TGeoTube( 0, fgkCoolPipeInnerDiam/2,
2209 segmentLength/2);
2210
2211 TGeoVolume *coolingPipe = new TGeoVolume("ITSsddCoolingPipe",
2212 coolingPipeShape, phynoxSDD );
2213 coolingPipe->SetLineColor(fColorPhynox);
2214 TGeoVolume *cooler = new TGeoVolume("ITSsddCoolingLiquid",coolerShape,
2215 coolerMediumSDD );
2216
2217
2218 virtualSeg->AddNode(coolingPipe, 1, pipeTr1);
2219 virtualSeg->AddNode(coolingPipe, 2, pipeTr2);
2220 if (fCoolingOn) {
2221 virtualSeg->AddNode(cooler, 1, pipeTr1);
2222 virtualSeg->AddNode(cooler, 2, pipeTr2);
2223 };
b7943f00 2224 };
c789ee28 2225
b7943f00 2226 //**********************************
2227 // Bases of hybrid thermal bridges
2228 //**********************************
2229 Double_t shiftHyb = 1.05; // shift between thermal Bridge base and thermal bridge
2230 // approx !!! not clear on 0752/14-A
2231 if (fAddCoolingSyst) {
73dfc864 2232 TGeoRotation rotHybrid1("", 0, 0, -90 - fgkHybridAngle);
2233 TGeoRotation rotHybrid2("", 0 ,180, 90 - fgkHybridAngle);
2234 TGeoCombiTrans *baseTr1 = new TGeoCombiTrans(*pipeTr2, rotHybrid1);
2235 TGeoCombiTrans *baseTr2 = new TGeoCombiTrans(*pipeTr1, rotHybrid2);
b7943f00 2236
2237 virtualSeg->AddNode(fBaseThermalBridge, 1, baseTr1);
2238 virtualSeg->AddNode(fBaseThermalBridge, 2, baseTr2);
2239 };
2240
2241 //*************************
2242 // the 2 hybrids :
2243 //*************************
2244 Double_t hybDy = ((TGeoBBox*)fHybrid->GetShape())->GetDY();
2245 Double_t distAxeToHybridCenter = fgkBTBaxisAtoBase+hybDy;
2246
2247 Double_t hybrVolX = ( distAxeToHybridCenter*CosD(fgkHybridAngle)
2248 - shiftHyb*SinD(fgkHybridAngle) );
2249 Double_t hybrVolY = ( distAxeToHybridCenter*SinD(fgkHybridAngle)
2250 + shiftHyb*CosD(fgkHybridAngle) );
2251 if (fAddHybrids) {
2252 TGeoRotation rotHybrid3("", 0, 0, 90. - fgkHybridAngle);
2253 TGeoRotation rotHybrid4("", 0 ,180, -90. - fgkHybridAngle);
2254 TGeoCombiTrans *hybTr1 = new TGeoCombiTrans(*pipeTr2, rotHybrid3);
2255 TGeoCombiTrans *hybTr2 = new TGeoCombiTrans(*pipeTr1, rotHybrid4);
2256 AddTranslationToCombiTrans( hybTr1, -hybrVolX, hybrVolY, 0);
2257 AddTranslationToCombiTrans( hybTr2, hybrVolX, hybrVolY, 0);
2258
2259 virtualSeg->AddNode(fHybrid, 1, hybTr1);
2260 virtualSeg->AddNode(fHybrid, 2, hybTr2);
2261 };
2262
2263 //***********
2264 // cables
2265 //***********
2266 if (fAddCables) {
2267 // Starting from this segment
2268 Double_t hybDz = ((TGeoBBox*)fHybrid->GetShape())->GetDZ();
2269 Double_t hybDx = ((TGeoBBox*)fHybrid->GetShape())->GetDX();
2270 Double_t posDigitCableAlongHyb = shiftHyb+ hybDx
2271 - digitCableA->GetWidth()/2;
2272 Double_t distAxeToDigitCableCenter = distAxeToHybridCenter+hybDy
2273 - digitCableA->GetThickness()/2;
2274
2275 Double_t digitCableX = ( coolPipeSuppL
2276 + distAxeToDigitCableCenter*CosD(fgkHybridAngle)
2277 - posDigitCableAlongHyb*SinD(fgkHybridAngle) );
2278 Double_t digitCableY = ( - fgkLadderHeight/2.-TMath::Abs(tDY)
2279 + fgkLadderBeamRadius+coolPipeSuppH
2280 + distAxeToDigitCableCenter*SinD(fgkHybridAngle)
2281 + posDigitCableAlongHyb*CosD(fgkHybridAngle) );
2282
2283
2284 Double_t digitCableCenterA0[3]={ -cableSideSign*digitCableX,
2285 digitCableY, cableSideSign*hybDz };
2286 Double_t digitCableCenterA1[3] = {
2287 -cableSideSign*(digitCableX+spaceForCables*CosD(fgkHybridAngle)),
2288 digitCableY+spaceForCables*SinD(fgkHybridAngle),
2289 cableSideSign*segmentLength/2 };
2290
2291 Double_t digitCableCenterB0[3]={ cableSideSign*digitCableX,
2292 digitCableY,cableSideSign*hybDz};
2293 Double_t digitCableCenterB1[3]={
2294 cableSideSign*(digitCableX+spaceForCables*CosD(fgkHybridAngle)),
2295 digitCableY+spaceForCables*SinD(fgkHybridAngle),
2296 cableSideSign*segmentLength/2 };
2297
2298 Double_t vZ[3] = {0,0,1};
2299 digitCableA[iSeg].AddCheckPoint( virtualSeg, 0, digitCableCenterA0, vZ);
2300 digitCableA[iSeg].AddCheckPoint( virtualSeg, 1, digitCableCenterA1, vZ);
2301 digitCableB[iSeg].AddCheckPoint( virtualSeg, 0, digitCableCenterB0, vZ);
2302 digitCableB[iSeg].AddCheckPoint( virtualSeg, 1, digitCableCenterB1, vZ);
2303
2304 // Updating the other cables
2305 for (Int_t iCable=iUpdateCableMin; iCable<=iUpdateCableMax; iCable++) {
2306
2307 Int_t iPoint = TMath::Abs(iCable-iSeg)+1;
2308 Double_t coord[3];
2309 digitCableA[iCable].GetPoint( 1, coord);
2310 digitCableA[iCable].AddCheckPoint( virtualSeg, iPoint, coord, vZ);
2311 digitCableB[iCable].GetPoint( 1, coord);
2312 digitCableB[iCable].AddCheckPoint( virtualSeg, iPoint, coord, vZ);
2313 };
2314 };
2315
2316 //**********************************
2317 if(GetDebug(1)) virtualSeg->CheckOverlaps(0.01);
b7943f00 2318 return virtualSeg;
531d6cdc 2319}
db486a6e 2320
c789ee28 2321
2322//________________________________________________________________________
2323TGeoVolume* AliITSv11GeometrySDD::CreatePinSupport() {
2324//
2325// Create a pine support
2326// axis of rotation is the cone axis, center in its middle
2327//
b7943f00 2328 TGeoCone *cone = new TGeoCone("ITSsddPinSuppCone",fgkPinSuppHeight/2.,
2329 0,fgkPinSuppRmax,0,fgkPinSuppRmax-
2330 fgkPinSuppHeight*TanD(fgkPinSuppConeAngle) );
2331 TGeoBBox *tong = new TGeoBBox("ITSsddPinSuppTong",fgkPinSuppRmax,
2332 fgkPinSuppLength/2.,fgkPinSuppThickness/2.);
2333 TGeoTube *hole = new TGeoTube("ITSsddPinSuppHole",0,fgkPinR,
2334 fgkPinSuppHeight/2.);
c789ee28 2335 if(GetDebug(3)){// Remove compiler warning.
db486a6e 2336 cone->InspectShape();
2337 tong->InspectShape();
2338 hole->InspectShape();
c789ee28 2339 };
db486a6e 2340
2341 TGeoTranslation *tongTrans = new TGeoTranslation("ITSsddPinSuppTongTr",0,
b7943f00 2342 fgkPinSuppLength/2.,-fgkPinSuppHeight/2.+fgkPinSuppThickness/2.);
db486a6e 2343 tongTrans->RegisterYourself();
2344 TGeoCompositeShape *pinSupportShape = new TGeoCompositeShape(
b7943f00 2345 "ITSsddPinSupportShape","(ITSsddPinSuppCone+"
db486a6e 2346 "ITSsddPinSuppTong:ITSsddPinSuppTongTr)-ITSsddPinSuppHole");
2347
b7943f00 2348
108bd0fe 2349 TGeoMedium *rytonSDD = GetMedium("SDD C AL (M55J)$"); //medium = ryton ? To code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
b7943f00 2350 TGeoVolume *pinSupport = new TGeoVolume("ITSsddPinSupport",pinSupportShape,
db486a6e 2351 rytonSDD);
c789ee28 2352 pinSupport->SetLineColor(fColorRyton);
db486a6e 2353 return pinSupport;
c789ee28 2354 // include the pin itself !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
531d6cdc 2355}
c789ee28 2356
b7943f00 2357
db486a6e 2358//________________________________________________________________________
c789ee28 2359TGeoVolume* AliITSv11GeometrySDD::CreateCoolPipeSupportL() {
2360//
2361// Create half of the cooling pipe support (ALR-0752/3)
2362//
2363
b7943f00 2364 Double_t diffX = fgkCoolPipeSuppHeight*TanD(fgkCoolPipeSuppAngle);
c789ee28 2365
b7943f00 2366 TGeoArb8 *side1 = new TGeoArb8(fgkCoolPipeSuppHeight/2.);
2367 side1->SetVertex( 0, 0, -fgkCoolPipeSuppWidthExt/2.);
2368 side1->SetVertex( 1, fgkCoolPipeSuppMaxLength/2.-diffX,
2369 -fgkCoolPipeSuppWidthExt/2.);
2370 side1->SetVertex( 2, fgkCoolPipeSuppMaxLength/2.-diffX,
2371 fgkCoolPipeSuppWidthExt/2.);
2372 side1->SetVertex( 3, 0, fgkCoolPipeSuppWidthExt/2.);
2373 side1->SetVertex( 4, 0, -fgkCoolPipeSuppWidthExt/2.);
2374 side1->SetVertex( 5, fgkCoolPipeSuppMaxLength/2.,
2375 -fgkCoolPipeSuppWidthExt/2.);
2376 side1->SetVertex( 6, fgkCoolPipeSuppMaxLength/2.,
2377 fgkCoolPipeSuppWidthExt/2.);
2378 side1->SetVertex( 7, 0, fgkCoolPipeSuppWidthExt/2.);
c789ee28 2379 side1->SetName("ITSsddCPSside1");
2380
2381 TGeoTranslation *side1Tr = new TGeoTranslation("ITSsddCPStr1",0,
b7943f00 2382 - fgkCoolPipeSuppAxeDist
2383 + fgkCoolPipeSuppWidthExt/2., 0);
c789ee28 2384 side1Tr->RegisterYourself();
2385 TGeoTranslation *side2Tr = new TGeoTranslation("ITSsddCPStr2",0,
b7943f00 2386 - fgkCoolPipeSuppAxeDist
2387 + fgkCoolPipeSuppWidthExt*3/2.
2388 + fgkCoolPipeSuppWidthIn,0);
c789ee28 2389 side2Tr->RegisterYourself();
2390
2391 TGeoBBox *middle = new TGeoBBox("ITSsddCPSmiddle",
b7943f00 2392 (fgkCoolPipeSuppMaxLength/2.-fgkCoolPipeSuppSlitL)/2.,
2393 fgkCoolPipeSuppWidthIn/2., fgkCoolPipeSuppHeight/2.);
c789ee28 2394 TGeoTranslation *middleTr =
2395 new TGeoTranslation("ITSsddCPStr3",
b7943f00 2396 (fgkCoolPipeSuppMaxLength/2.-fgkCoolPipeSuppSlitL)/2.,
2397 -fgkCoolPipeSuppAxeDist+fgkCoolPipeSuppWidthExt
2398 +fgkCoolPipeSuppWidthIn/2., 0);
c789ee28 2399 middleTr->RegisterYourself();
2400
2401 TGeoBBox *axeBox = new TGeoBBox("ITSsddCPSaxeBox",
b7943f00 2402 fgkCoolPipeSuppTongW/4.,
2403 (fgkCoolPipeSuppFulWidth
2404 - 2*fgkCoolPipeSuppWidthExt
2405 - fgkCoolPipeSuppWidthIn)/2,
2406 fgkCoolPipeSuppHeight/2.);
c789ee28 2407
2408 TGeoTranslation *axeBoxTr = new TGeoTranslation("ITSsddCPSAxBoxTr",
b7943f00 2409 fgkCoolPipeSuppTongW/4.,
2410 - fgkCoolPipeSuppAxeDist
2411 + fgkCoolPipeSuppFulWidth
c789ee28 2412 - axeBox->GetDY(), 0);
2413 axeBoxTr->RegisterYourself();
2414
b7943f00 2415 TGeoTube *axe = new TGeoTube("ITSsddCPSaxe",0,fgkCoolPipeSuppHoleDiam/2.,
2416 fgkCoolPipeSuppTongW/4.);
c789ee28 2417
531d6cdc 2418 TGeoRotation *axeRot = new TGeoRotation("ITSsddCPSaxeRot",90,90,0);
c789ee28 2419 TGeoCombiTrans *axeTrans = new TGeoCombiTrans("ITSsddCPSaxeTr",
531d6cdc 2420 fgkCoolPipeSuppTongW/4.,0,0,axeRot);
c789ee28 2421 axeTrans->RegisterYourself();
531d6cdc 2422 //delete axeRot; // make the code crash, no idea of why !!!
c789ee28 2423
2424 if(GetDebug(3)){
2425 middle->InspectShape();
2426 axe->InspectShape();
2427 };
2428
108bd0fe 2429 TGeoMedium *rytonSDD = GetMedium("SDD C AL (M55J)$"); //medium = ryton ? !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
c789ee28 2430
2431 TGeoCompositeShape *coolPipeSuppShape = new TGeoCompositeShape(
2432 "ITSsddCoolPipeSuppShapeL",
2433 "ITSsddCPSmiddle:ITSsddCPStr3"
2434 "+ITSsddCPSside1:ITSsddCPStr1"
2435 "+ITSsddCPSside1:ITSsddCPStr2"
2436 "+ITSsddCPSaxeBox:ITSsddCPSAxBoxTr"
2437 "-ITSsddCPSaxe:ITSsddCPSaxeTr");
2438 TGeoVolume *coolPipeSupp = new TGeoVolume("ITSsddCoolPipeSupportL",
2439 coolPipeSuppShape, rytonSDD);
2440
2441 coolPipeSupp->SetLineColor(fColorRyton);
531d6cdc 2442
c789ee28 2443 return coolPipeSupp;
531d6cdc 2444}
2445
c789ee28 2446
2447//________________________________________________________________________
2448TGeoVolume* AliITSv11GeometrySDD::CreateCoolPipeSupportR() {
2449//
2450//Create half of the cooling pipe support (ALR-0752/3)
2451//
2452
b7943f00 2453 Double_t diffX = fgkCoolPipeSuppHeight*TanD(fgkCoolPipeSuppAngle);
c789ee28 2454
b7943f00 2455 TGeoArb8 *side1 = new TGeoArb8(fgkCoolPipeSuppHeight/2.);
2456 side1->SetVertex( 0, 0, -fgkCoolPipeSuppWidthExt/2.);
2457 side1->SetVertex( 1, -(fgkCoolPipeSuppMaxLength/2.-diffX),
2458 -fgkCoolPipeSuppWidthExt/2.);
2459 side1->SetVertex( 2, -(fgkCoolPipeSuppMaxLength/2.-diffX),
2460 fgkCoolPipeSuppWidthExt/2.);
2461 side1->SetVertex( 3, 0, fgkCoolPipeSuppWidthExt/2.);
2462 side1->SetVertex( 4, 0, -fgkCoolPipeSuppWidthExt/2.);
2463 side1->SetVertex( 5, -fgkCoolPipeSuppMaxLength/2.,
2464 -fgkCoolPipeSuppWidthExt/2.);
2465 side1->SetVertex( 6, -fgkCoolPipeSuppMaxLength/2.,
2466 fgkCoolPipeSuppWidthExt/2.);
2467 side1->SetVertex( 7, 0, fgkCoolPipeSuppWidthExt/2.);
c789ee28 2468 side1->SetName("ITSsddCPSside1R");
2469
2470 TGeoTranslation *side1Tr = new TGeoTranslation("ITSsddCPStr1R",0,
b7943f00 2471 - fgkCoolPipeSuppAxeDist
2472 + fgkCoolPipeSuppWidthExt/2., 0);
c789ee28 2473 side1Tr->RegisterYourself();
2474 TGeoTranslation *side2Tr = new TGeoTranslation("ITSsddCPStr2R",0,
b7943f00 2475 - fgkCoolPipeSuppAxeDist
2476 + fgkCoolPipeSuppWidthExt*3/2.
2477 + fgkCoolPipeSuppWidthIn, 0);
c789ee28 2478 side2Tr->RegisterYourself();
2479
2480 TGeoBBox *middle = new TGeoBBox("ITSsddCPSmiddleR",
b7943f00 2481 (fgkCoolPipeSuppMaxLength/2.
2482 - fgkCoolPipeSuppSlitL)/2.,
2483 fgkCoolPipeSuppWidthIn/2.,
2484 fgkCoolPipeSuppHeight/2.);
c789ee28 2485 TGeoTranslation *middleTr =
2486 new TGeoTranslation("ITSsddCPStr3R",
b7943f00 2487 -( fgkCoolPipeSuppMaxLength/2.
2488 -fgkCoolPipeSuppSlitL)/2.,
2489 -fgkCoolPipeSuppAxeDist + fgkCoolPipeSuppWidthExt
2490 + fgkCoolPipeSuppWidthIn/2.,0);
c789ee28 2491 middleTr->RegisterYourself();
2492
2493 TGeoBBox *axeBox = new TGeoBBox("ITSsddCPSaxeBoxR",
b7943f00 2494 fgkCoolPipeSuppTongW/4.,
2495 (fgkCoolPipeSuppFulWidth
2496 - 2*fgkCoolPipeSuppWidthExt
2497 - fgkCoolPipeSuppWidthIn)/2,
2498 fgkCoolPipeSuppHeight/2.);
c789ee28 2499
2500 TGeoTranslation *axeBoxTr = new TGeoTranslation("ITSsddCPSAxBoxTrR",
b7943f00 2501 - fgkCoolPipeSuppTongW/4.,
2502 - fgkCoolPipeSuppAxeDist
2503 + fgkCoolPipeSuppFulWidth
c789ee28 2504 - axeBox->GetDY(),0);
2505 axeBoxTr->RegisterYourself();
2506
b7943f00 2507 TGeoTube *axe = new TGeoTube("ITSsddCPSaxeR",0,fgkCoolPipeSuppHoleDiam/2.,
2508 fgkCoolPipeSuppTongW/4.);
531d6cdc 2509
2510 TGeoRotation *axeRot = new TGeoRotation("ITSsddCPSaxeRotR",90,90,0);
c789ee28 2511 TGeoCombiTrans *axeTrans = new TGeoCombiTrans("ITSsddCPSaxeTrR",
531d6cdc 2512 -fgkCoolPipeSuppTongW/4.,0,0,axeRot);
c789ee28 2513 axeTrans->RegisterYourself();
531d6cdc 2514 //delete axeRot;
c789ee28 2515
2516 if(GetDebug(3)){
2517 middle->InspectShape();
2518 axe->InspectShape();
2519 };
2520
2521 TGeoCompositeShape *coolPipeSuppShape = new TGeoCompositeShape(
2522 "ITSsddCoolPipeSuppShapeR",
2523 "ITSsddCPSmiddleR:ITSsddCPStr3R"
2524 "+ITSsddCPSside1R:ITSsddCPStr1R"
2525 "+ITSsddCPSside1R:ITSsddCPStr2R"
2526 "+ITSsddCPSaxeBoxR:ITSsddCPSAxBoxTrR"
2527 "-ITSsddCPSaxeR:ITSsddCPSaxeTrR");
b7943f00 2528
108bd0fe 2529 TGeoMedium *rytonSDD = GetMedium("SDD C AL (M55J)$"); //medium = ryton ? To code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
c789ee28 2530 TGeoVolume *coolPipeSupp = new TGeoVolume( "ITSsddCoolPipeSupportR",
2531 coolPipeSuppShape, rytonSDD);
2532 coolPipeSupp->SetLineColor(fColorRyton);
2533
2534 return coolPipeSupp;
531d6cdc 2535}
c789ee28 2536
2537//________________________________________________________________________
2538TGeoVolume* AliITSv11GeometrySDD::CreateBaseThermalBridge() {
108bd0fe 2539 //
2540 // based on ALR 0752/8
2541 //
c789ee28 2542
b7943f00 2543 Double_t dy = fgkBTBaxisAtoBase - fgkRadiusBminBTB - fgkBTBthick;
c789ee28 2544
b7943f00 2545 Double_t base1width = fgkBTBwidth - fgkBTBaxisAtoBottom - fgkRadiusBminBTB
2546 - (fgkRadiusAminBTB+fgkBTBthick);
c789ee28 2547 TGeoBBox *base1 = new TGeoBBox( "ITSsddBTBbase1", base1width/2.,
b7943f00 2548 fgkBTBthick/2., fgkBTBlength/2.);
c789ee28 2549 TGeoTranslation *base1Tr = new TGeoTranslation("ITSsddBTBtr1",
b7943f00 2550 fgkBTBaxisAtoBottom-fgkBTBwidth+base1width/2.,
2551 -(fgkBTBaxisAtoBase-fgkBTBthick/2.), 0);
c789ee28 2552 base1Tr->RegisterYourself();
2553
b7943f00 2554 Double_t base2width = fgkBTBaxisAtoBottom - fgkRadiusAminBTB - fgkBTBthick
2555 - fgkRadiusBminBTB;
c789ee28 2556 TGeoBBox *base2 = new TGeoBBox( "ITSsddBTBbase2", base2width/2.,
b7943f00 2557 fgkBTBthick/2., fgkBTBlength/2.);
c789ee28 2558 TGeoTranslation *base2Tr = new TGeoTranslation("ITSsddBTBtr2",
b7943f00 2559 fgkBTBaxisAtoBottom - base2width/2.,
2560 -(fgkBTBaxisAtoBase-fgkBTBthick/2.), 0);
c789ee28 2561 base2Tr->RegisterYourself();
2562
2563 TGeoBBox *side = new TGeoBBox( "ITSsddBTBside",
b7943f00 2564 fgkBTBthick/2., dy/2., fgkBTBlength/2.);
c789ee28 2565 TGeoTranslation *sideTr1 = new TGeoTranslation("ITSsddBTBsideTr1",
b7943f00 2566 -fgkRadiusAminBTB-fgkBTBthick/2., -dy/2., 0);
c789ee28 2567 TGeoTranslation *sideTr2 = new TGeoTranslation("ITSsddBTBsideTr2",
b7943f00 2568 fgkRadiusAminBTB+fgkBTBthick/2., -dy/2., 0);
c789ee28 2569 sideTr1->RegisterYourself();
2570 sideTr2->RegisterYourself();
2571
b7943f00 2572 TGeoBBox *hole = new TGeoBBox( "ITSsddBTBhole", fgkBTBHolewidth/2.,
2573 fgkBTBthick/2., fgkBTBHoleLength/2.);
c789ee28 2574 TGeoTranslation *holeTr1 = new TGeoTranslation("ITSsddBTBholeTr1",
b7943f00 2575 - fgkBTBHoleRefX + fgkBTBHolewidth/2.,
2576 - (fgkBTBaxisAtoBase-fgkBTBthick/2.),
2577 fgkBTBHoleRefY+(fgkBTBHoleLength-fgkBTBlength)/2.);
c789ee28 2578 TGeoTranslation *holeTr2 = new TGeoTranslation("ITSsddBTBholeTr2",
b7943f00 2579 - fgkBTBHoleRefX + fgkBTBHolewidth/2.,
2580 - (fgkBTBaxisAtoBase-fgkBTBthick/2.),
2581 - fgkBTBHoleRefY-(fgkBTBHoleLength-fgkBTBlength)/2.);
c789ee28 2582 holeTr1->RegisterYourself();
2583 holeTr2->RegisterYourself();
2584
b7943f00 2585 Double_t radiusAmaxBTB = fgkRadiusAminBTB + fgkBTBthick;
c789ee28 2586 TGeoTubeSeg *mainAxis = new TGeoTubeSeg( "ITSsddBTBmainAxis",
b7943f00 2587 fgkRadiusAminBTB, radiusAmaxBTB,
2588 fgkBTBlength/2., 0., 180.);
c789ee28 2589 TGeoTubeSeg *round1 = new TGeoTubeSeg( "ITSsddBTBround1",
b7943f00 2590 fgkRadiusBminBTB, fgkRadiusBminBTB+fgkBTBthick,
2591 fgkBTBlength/2., 270., 360.);
c789ee28 2592 TGeoTranslation *roundTr1 = new TGeoTranslation("ITSsddBTBround1Tr",
b7943f00 2593 -(fgkRadiusAminBTB+fgkBTBthick+fgkRadiusBminBTB),
c789ee28 2594 -dy, 0);
2595 roundTr1->RegisterYourself();
2596
2597 TGeoTubeSeg *round2 = new TGeoTubeSeg( "ITSsddBTBround2",
b7943f00 2598 fgkRadiusBminBTB, fgkRadiusBminBTB+fgkBTBthick,
2599 fgkBTBlength/2., 180., 270.);
c789ee28 2600 TGeoTranslation *roundTr2 = new TGeoTranslation("ITSsddBTBround2Tr",
b7943f00 2601 (fgkRadiusAminBTB+fgkBTBthick+fgkRadiusBminBTB),
c789ee28 2602 -dy, 0);
2603 roundTr2->RegisterYourself();
2604
2605 TGeoCompositeShape *sBaseThermalBridge = new TGeoCompositeShape(
2606 "ITSsddBaseThermalBridgeShape",
2607 "ITSsddBTBbase1:ITSsddBTBtr1"
2608 "+ ITSsddBTBbase2:ITSsddBTBtr2"
2609 "+ ITSsddBTBround1:ITSsddBTBround1Tr"
2610 "+ ITSsddBTBround2:ITSsddBTBround2Tr"
2611 "+ ITSsddBTBside:ITSsddBTBsideTr1"
2612 "+ ITSsddBTBside:ITSsddBTBsideTr2"
2613 "- ITSsddBTBhole:ITSsddBTBholeTr1"
2614 "- ITSsddBTBhole:ITSsddBTBholeTr2"
2615 "+ ITSsddBTBmainAxis");
2616
2617 if(GetDebug(3)){// Remove compiler warning.
2618 base1->InspectShape();
2619 base2->InspectShape();
2620 side->InspectShape();
2621 hole->InspectShape();
2622 mainAxis->InspectShape();
2623 round1->InspectShape();
2624 round2->InspectShape();
2625 };
2626
108bd0fe 2627 TGeoMedium *carbonFiberLadderStruct = GetMedium("SDD C AL (M55J)$");
c789ee28 2628 TGeoVolume *vBaseThermalBridge = new TGeoVolume( "ITSsddBaseThermalBridge",
2629 sBaseThermalBridge,
2630 carbonFiberLadderStruct);
2631
2632 vBaseThermalBridge->SetLineColor(fColorCarbonFiber);
2633 return vBaseThermalBridge;
531d6cdc 2634}
c789ee28 2635
2636
c789ee28 2637//________________________________________________________________________
108bd0fe 2638TGeoVolumeAssembly* AliITSv11GeometrySDD::CreateEndLadder(Int_t iLay) {
b7943f00 2639 //
108bd0fe 2640 // Return an assembly containing a end of a CF ladder.
b7943f00 2641 //
2642
108bd0fe 2643 TGeoMedium *carbonFiberLadderStruct = GetMedium("SDD C AL (M55J)$"); // ITSsddCarbonM55J
73dfc864 2644 TGeoMedium *stesalite = GetMedium("EPOXY$"); /// To code ??? !!!!!!!!!!!!!!!!
2645 TGeoMedium *phynoxSDD = GetMedium("inox/alum$"); // phynoxSDD To code ??? !!!!!!!!!!!
108bd0fe 2646 TGeoMedium *coolerMediumSDD = GetMedium("WATER$");
b7943f00 2647
2648 Double_t length = (fgkLay3LadderLength-fgkLay3Ndet*fgkSegmentLength)/2.;
2649 Double_t coolPipeSuppH = fgkLay3CoolPipeSuppH;
2650 Double_t underSegDH = fLay3LadderUnderSegDH;
108bd0fe 2651 Double_t footDZ = fgkRubyZladd3 - fgkLay3Ndet*fgkSegmentLength/2 - length/2;
2652 // footDZ is also where to place the ruby's center in local Z
2653 Double_t coolPipeEndLen = (fgkCoolPipeLay3Len-fgkSegmentLength*fgkLay3Ndet)/2;
2654
b7943f00 2655 if (iLay==3) {
2656 } else if (iLay==4) {
108bd0fe 2657 length = (fgkLay4LadderLength-fgkLay4Ndet*fgkSegmentLength)/2.;
2658 coolPipeSuppH = fgkLay4CoolPipeSuppH;
2659 underSegDH = fLay4LadderUnderSegDH;
2660 footDZ = fgkRubyZladd4 - fgkLay4Ndet*fgkSegmentLength/2 - length/2;
2661 coolPipeEndLen = (fgkCoolPipeLay4Len-fgkSegmentLength*fgkLay4Ndet)/2;
b7943f00 2662 } else {
2663 printf("error in AliITSv11GeometrySDD::CreateEndLadder: Wrong layer");
2664 return 0;
2665 };
c789ee28 2666
b7943f00 2667 Double_t tDY = (- fgkLadderSegBoxDH/2 //space left on top of the ladder
2668 + underSegDH/2); //space under ladder segment
2669 // here tDY is not the same as for the segment because the end ladder
2670 // does not have a space under it, inside the general ladder volume.
2671 Double_t segmentLength = fgkSegmentLength;
2672 Double_t topCornerLength = fgkSegmentLength/2.-fgkLay4LaddTopCornerEnd;
2673
108bd0fe 2674 TGeoVolumeAssembly *virtualEnd = new TGeoVolumeAssembly("ITSsddEnd");
b7943f00 2675
2676 //**********************************
2677 // coding real matter :
2678 //**********************************
2679 Double_t triangleHeight = fgkLadderHeight - fgkLadderBeamRadius;
2680 Double_t halfTheta = TMath::ATan( 0.5*fgkLadderWidth/triangleHeight );
2681 Double_t beta = (TMath::Pi()-2.*halfTheta)/4.;
2682 Double_t alpha = TMath::Pi()*3./4. - halfTheta/2.;
2683
2684 //--- The 3 V shape corners of the Carbon Fiber Ladder
2685 //--- the top V
2686 TGeoArb8 *cfLaddTop1 = CreateLadderSide(topCornerLength/2., halfTheta, -1,
2687 fgkLadderLa, fgkLadderHa, fgkLadderl);
2688 TGeoVolume *cfLaddTopVol1 = new TGeoVolume("ITSsddCFladdTopCornerVol1",
2689 cfLaddTop1,carbonFiberLadderStruct);
2690 cfLaddTopVol1->SetLineColor(fColorCarbonFiber);
2691 TGeoArb8 *cfLaddTop2 = CreateLadderSide( topCornerLength/2., halfTheta, 1,
2692 fgkLadderLa, fgkLadderHa, fgkLadderl);
2693 TGeoVolume *cfLaddTopVol2 = new TGeoVolume("ITSsddCFladdTopCornerV2",
2694 cfLaddTop2,carbonFiberLadderStruct);
2695 cfLaddTopVol2->SetLineColor(fColorCarbonFiber);
2696 TGeoTranslation *trTop1 = new TGeoTranslation(0, fgkLadderHeight/2+tDY,
2697 -(length-topCornerLength)/2.);
2698 virtualEnd->AddNode(cfLaddTopVol1, 1, trTop1);
2699 virtualEnd->AddNode(cfLaddTopVol2, 1, trTop1);
2700
2701 //--- the 2 side V
2702 TGeoArb8 *cfLaddSide1 = CreateLadderSide( length/2., beta, -1,
2703 fgkLadderLb, fgkLadderHb, fgkLadderl);
2704 TGeoVolume *cfLaddSideVol1 = new TGeoVolume("ITSsddCFladdSideCornerV1",
2705 cfLaddSide1,carbonFiberLadderStruct);
2706 cfLaddSideVol1->SetLineColor(fColorCarbonFiber);
2707 TGeoArb8 *cfLaddSide2 = CreateLadderSide( length/2., beta, 1,
2708 fgkLadderLb, fgkLadderHb, fgkLadderl);
2709 TGeoVolume *cfLaddSideVol2 = new TGeoVolume("ITSsddCFladdSideCornerV2",
2710 cfLaddSide2,carbonFiberLadderStruct);
2711 cfLaddSideVol2->SetLineColor(fColorCarbonFiber);
2712 Double_t dYTranslation = ( fgkLadderHeight/2. - 0.5*fgkLadderWidth*
2713 TMath::Tan(beta) - fgkLadderBeamRadius );
2714
2715 // because center of the triangle doesn't correspond to virtual vol. center
2716 Double_t distCenterSideDown = 0.5*fgkLadderWidth/TMath::Cos(beta);
2717 TGeoCombiTrans *ctSideR = CreateCombiTrans("", distCenterSideDown, 0,
2718 alpha*TMath::RadToDeg());
2719 AddTranslationToCombiTrans(ctSideR, 0, -dYTranslation+tDY, 0);
2720 TGeoCombiTrans *ctSideL = CreateCombiTrans("", distCenterSideDown, 0,
2721 -alpha*TMath::RadToDeg());
2722 AddTranslationToCombiTrans(ctSideL, 0, -dYTranslation+tDY, 0);
2723 virtualEnd->AddNode(cfLaddSideVol1, 1, ctSideR);
2724 virtualEnd->AddNode(cfLaddSideVol2, 1, ctSideR);
2725 virtualEnd->AddNode(cfLaddSideVol1, 2, ctSideL);
2726 virtualEnd->AddNode(cfLaddSideVol2, 2, ctSideL);
2727
2728 //--- The beams
2729 // Beams on the sides
2730 Double_t beamPhiPrime = TMath::ASin(1./TMath::Sqrt( (1+TMath::Sin(2*beta)*
2731 TMath::Sin(2*beta)/(TanD(fgkBeamSidePhi)*TanD(fgkBeamSidePhi))) ));
2732
2733 //Euler rotation : about Z, then new X, then new Z
531d6cdc 2734 TGeoRotation *beamRot1 = new TGeoRotation("", 90-2.*beta*TMath::RadToDeg(),
b7943f00 2735 -beamPhiPrime*TMath::RadToDeg(), -90);
531d6cdc 2736 TGeoRotation *beamRot2 = new TGeoRotation("", 90-2.*beta*TMath::RadToDeg(),
b7943f00 2737 beamPhiPrime*TMath::RadToDeg(), -90);
531d6cdc 2738 TGeoRotation *beamRot3 = new TGeoRotation("", 90+2.*beta*TMath::RadToDeg(),
b7943f00 2739 beamPhiPrime*TMath::RadToDeg(), -90);
531d6cdc 2740 TGeoRotation *beamRot4 = new TGeoRotation("", 90+2.*beta*TMath::RadToDeg(),
b7943f00 2741 -beamPhiPrime*TMath::RadToDeg(), -90);
2742 TGeoCombiTrans *beamTransf1 = new TGeoCombiTrans(0.5*triangleHeight*
2743 TMath::Tan(halfTheta),
2744 fgkLadderBeamRadius/2. + tDY,
531d6cdc 2745 -length/2 + segmentLength/8, beamRot1);
b7943f00 2746 TGeoCombiTrans *beamTransf3 = new TGeoCombiTrans( 0.5*triangleHeight*
2747 TMath::Tan(halfTheta),
2748 fgkLadderBeamRadius/2.+tDY,
531d6cdc 2749 -length/2 + 3*segmentLength/8, beamRot2);
b7943f00 2750 TGeoCombiTrans *beamTransf5 = new TGeoCombiTrans(-0.5*triangleHeight*
2751 TMath::Tan(halfTheta),
2752 fgkLadderBeamRadius/2.+tDY,
531d6cdc 2753 -length/2 + segmentLength/8, beamRot3);
b7943f00 2754 TGeoCombiTrans *beamTransf7 = new TGeoCombiTrans(-0.5*triangleHeight*
2755 TMath::Tan(halfTheta),
2756 fgkLadderBeamRadius/2. + tDY,
531d6cdc 2757 -length/2+3*segmentLength/8, beamRot4);
b7943f00 2758
2759 virtualEnd->AddNode(fLaddSegCommonVol[6], 1, beamTransf1);
2760 virtualEnd->AddNode(fLaddSegCommonVol[6], 2, beamTransf3);
2761 virtualEnd->AddNode(fLaddSegCommonVol[6], 3, beamTransf5);
2762 virtualEnd->AddNode(fLaddSegCommonVol[6], 4, beamTransf7);
2763
2764 //--- Beams of the bottom
108bd0fe 2765 TGeoRotation *bottomBeamRot1 = new TGeoRotation("",90, 90, 90);
2766
2767 /* Not there actually
b7943f00 2768 TGeoTubeSeg *bottomBeam1 = new TGeoTubeSeg(0, fgkLadderBeamRadius,
2769 fgkLadderWidth/2.-fgkLadderLb/3, 0, 180);
2770 TGeoVolume *bottomBeam1Vol = new TGeoVolume("ITSsddBottomBeam1Vol",
2771 bottomBeam1, carbonFiberLadderStruct);
2772 bottomBeam1Vol->SetLineColor(fColorCarbonFiber);
2773
b7943f00 2774 TGeoCombiTrans *bottomBeamTransf1 = new TGeoCombiTrans(0,
2775 -(fgkLadderHeight/2-fgkLadderBeamRadius)+tDY,
531d6cdc 2776 -length/2+fgkSegmentLength/2, bottomBeamRot1);
b7943f00 2777 virtualEnd->AddNode(bottomBeam1Vol, 1, bottomBeamTransf1);
108bd0fe 2778*/
b7943f00 2779 TGeoTubeSeg *bottomBeam2 = new TGeoTubeSeg(0, fgkLadderBeamRadius,
2780 fgkLadderWidth/2.-fgkLadderLb/3, 0, 90);
2781 TGeoVolume *bottomBeam2Vol = new TGeoVolume("ITSsddBottomBeam2Vol",
2782 bottomBeam2, carbonFiberLadderStruct);
2783 bottomBeam2Vol->SetLineColor(fColorCarbonFiber);
2784 TGeoCombiTrans *bottomBeamTransf2 = new TGeoCombiTrans(0,
531d6cdc 2785 -(fgkLadderHeight/2-fgkLadderBeamRadius)+tDY,-length/2,bottomBeamRot1);
b7943f00 2786 virtualEnd->AddNode(bottomBeam2Vol, 1, bottomBeamTransf2);
2787
2788 //**********************************
2789 //the cooling pipe supports
2790 Double_t triangleCPaxeDist = fgkCoolPipeSuppAxeDist-fgkCoolPipeSuppWidthExt-
fa4639a3 2791 fgkCoolPipeSuppWidthIn+fgkLadderBeamRadius;
b7943f00 2792
2793 Double_t coolPipeSuppL = TMath::Tan(halfTheta)*
fa4639a3 2794 (triangleHeight+triangleCPaxeDist/
2795 TMath::Sin(halfTheta)-coolPipeSuppH);
b7943f00 2796
2797 if (fAddCoolingSyst) {
108bd0fe 2798 TGeoRotation *rotCPS2 = new TGeoRotation("",-halfTheta*TMath::RadToDeg(),-90, 90);
2799 TGeoRotation *rotCPS1 = new TGeoRotation("", halfTheta*TMath::RadToDeg(),-90,-90);
2800 TGeoCombiTrans *transCPS1 = new TGeoCombiTrans(coolPipeSuppL,
2801 -fgkLadderHeight/2.+ tDY +
2802 coolPipeSuppH+fgkLadderBeamRadius,
2803 -length/2., rotCPS1);
2804 TGeoCombiTrans *transCPS4 = new TGeoCombiTrans(-coolPipeSuppL,
2805 -fgkLadderHeight/2.+ tDY +
2806 coolPipeSuppH+fgkLadderBeamRadius,
2807 -length/2., rotCPS2);
2808
2809 virtualEnd->AddNode(fCoolPipeSupportL, 1, transCPS1);
2810 virtualEnd->AddNode(fCoolPipeSupportR, 1, transCPS4);
b7943f00 2811 };
2812
2813 //**********************************
108bd0fe 2814 //--- The stesalite foot of the ladder
2815
73dfc864 2816 Double_t footDY = -(fgkLadderHeight/2-fgkLadderBeamRadius)+tDY
2817 - fgkLadFootY/2+fgkLadFingerPrintY;
2818
2819 TGeoTranslation *footTr = new TGeoTranslation("SDDfootTr",0,footDY,footDZ);
2820 virtualEnd->AddNode(fLadderFoot, 1, footTr);
2821
2822 //=====================================
2823 //--- cooling pipe
2824
2825 if (fAddCoolingSyst) {
2826
2827 TGeoTranslation *pipeTr1 = new TGeoTranslation(coolPipeSuppL,
2828 -fgkLadderHeight/2.+ tDY +
2829 coolPipeSuppH + fgkLadderBeamRadius,
2830 -length/2.+coolPipeEndLen/2.);
2831 TGeoTranslation *pipeTr2 = new TGeoTranslation(-coolPipeSuppL,
2832 -fgkLadderHeight/2. + tDY +
2833 fgkLadderBeamRadius + coolPipeSuppH,
2834 -length/2.+coolPipeEndLen/2.);
2835
2836 TGeoTube *coolingPipeShape = new TGeoTube( fgkCoolPipeInnerDiam/2,
2837 fgkCoolPipeOuterDiam/2,
2838 coolPipeEndLen/2);
2839 TGeoTube *coolerShape = new TGeoTube( 0, fgkCoolPipeInnerDiam/2,
2840 coolPipeEndLen/2);
2841
2842 TGeoVolume *coolingPipe = new TGeoVolume("ITSsddCoolingPipeEnd",
2843 coolingPipeShape, phynoxSDD );
2844 coolingPipe->SetLineColor(fColorPhynox);
2845 TGeoVolume *cooler = new TGeoVolume("ITSsddCoolingEndLiquid",coolerShape,
2846 coolerMediumSDD );
2847
2848 virtualEnd->AddNode(coolingPipe, 1, pipeTr1);
2849 virtualEnd->AddNode(coolingPipe, 2, pipeTr2);
2850 if (fCoolingOn) {
2851 virtualEnd->AddNode(cooler, 1, pipeTr1);
2852 virtualEnd->AddNode(cooler, 2, pipeTr2);
2853 };
2854 };
2855
2856 //=====================================
2857 //--- HV cable guide
2858
2859
2860 TGeoBBox* guideHVbox = new TGeoBBox("guideHVbox",fgkHVguideX1/2,
2861 fgkHVguideY1/2,fgkHVguideZ1/2);
2862 TGeoVolume *guideHV = new TGeoVolume("guideHV",guideHVbox,stesalite); // material ?
2863
2864 TGeoTranslation* guideHVtr = new TGeoTranslation(fgkHVguideDX,
2865 -(fgkLadderHeight/2-fgkLadderBeamRadius)+tDY-fgkHVguideY1/2,
2866 footDZ+fgkLadFootZ/2+fgkHVguideZ1/2-(fgkHVguideSuppFullZ-fgkHVguideZ2));
2867 virtualEnd->AddNode(guideHV, 1, guideHVtr);
2868
2869 //=====================================
2870 //--- raccordo
2871 Double_t raccordFullLen = fgkConnectorCoolTubeL1+fgkConnectorCoolTubeL2+fgkConnectorCoolTubeL3;
2872 TGeoTranslation *trRaccordo1 = new TGeoTranslation("trRaccordo1",-coolPipeSuppL,
2873 -fgkLadderHeight/2.+ tDY +
2874 coolPipeSuppH+fgkLadderBeamRadius,
2875 -length/2.+coolPipeEndLen+raccordFullLen/2);
2876 TGeoTranslation *trRaccordo2 = new TGeoTranslation("trRaccordo2", coolPipeSuppL,
2877 -fgkLadderHeight/2.+ tDY +
2878 coolPipeSuppH+fgkLadderBeamRadius,
2879 -length/2.+coolPipeEndLen+raccordFullLen/2);
2880
2881 virtualEnd->AddNode(fRaccordoL, 1, trRaccordo1);
2882 virtualEnd->AddNode(fRaccordoL, 2, trRaccordo2);
2883
2884 if(GetDebug(1)) virtualEnd->CheckOverlaps(0.01);
2885
2886 return virtualEnd;
2887}
2888
2889//________________________________________________________________________
2890TGeoVolumeAssembly* AliITSv11GeometrySDD::CreateLadderFoot() {
2891
2892 //--- The stesalite foot of the ladder
108bd0fe 2893 // Are missing :
2894 // The 2 screw holes on the left part
2895 // the small holes at each corner of the ruby cage (diam 2mm)
2896 // the really small level difference of 0.3mm on the bottom
2897
73dfc864 2898
2899 TGeoMedium *stesalite = GetMedium("EPOXY$"); /// To code ??? !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2900
2901 TGeoVolumeAssembly *virtualFoot = new TGeoVolumeAssembly("ITSsddFoot");
108bd0fe 2902
2903 Double_t epsilon = 2e-10;
effd7456 2904 TGeoBBox *ladFootBox1 = new TGeoBBox("ladFootBox1",fgkLadBox1X/2, fgkLadFootY/2,
2905 fgkLadFootZ/2);
108bd0fe 2906 TGeoTranslation *ladFootBox1Tr = new TGeoTranslation("ladFootBox1Tr",
effd7456 2907 fgkLadFootX/2-fgkLadBox1X/2,0,0);
2908 TGeoBBox *ladFingerPrint = new TGeoBBox("ladFingerPrint",fgkLadFingerPrintX/2,
2909 fgkLadFingerPrintY/2+epsilon, fgkLadFootZ/2+epsilon);
108bd0fe 2910
2911 TGeoTranslation *ladFingerPrintTr = new TGeoTranslation("ladFingerPrintTr",
effd7456 2912 fgkLadFootX/2-fgkLadFingerPrintBorder-fgkLadFingerPrintX/2,
2913 fgkLadFootY/2-fgkLadFingerPrintY/2+epsilon,
108bd0fe 2914 0);
2915
2916 TGeoBBox *rubyCageHole = new TGeoBBox("rubyCageHole",fgkRubyCageHoleX/2,
2917 fgkRubyCageHoleY/2+epsilon, fgkRubyCageHoleZ/2);
2918
2919 TGeoTranslation *rubyCageHoleTr = new TGeoTranslation("rubyCageHoleTr",
effd7456 2920 fgkLadFootX/2-(fgkLadFootX/2-fgkRubyDX)+fgkRubyCageAxisShift,
2921 fgkLadFootY/2-fgkRubyCageHoleY/2,0);
108bd0fe 2922
effd7456 2923 double rubyScrewHoleLen = fgkLadFootX/2-fgkRubyDX;
108bd0fe 2924 TGeoTube *rubyScrewHole = new TGeoTube("rubyScrewHole", 0,fgkScrewM4diam/2,
2925 rubyScrewHoleLen/2);
2926
2927 TGeoRotation *rot9090 = new TGeoRotation("",90,90,0);
2928 TGeoCombiTrans *rubyScrewHoleTr = new TGeoCombiTrans("rubyScrewHoleTr",
effd7456 2929 fgkLadFootX/2-rubyScrewHoleLen/2,
108bd0fe 2930 -fgkRubyScrewShiftToCenterY, 0, rot9090);
2931
effd7456 2932 Double_t rubyHoleLen = fgkLadFootY-fgkRubyCageHoleY;
108bd0fe 2933 TGeoTube *rubyHole = new TGeoTube("rubyHole", 0,fgkRubyHoleDiam/2,
2934 rubyHoleLen/2);
2935
2936 TGeoRotation *rot90 = new TGeoRotation("",0,90,0);
2937 TGeoCombiTrans *rubyHoleTr = new TGeoCombiTrans("rubyHoleTr", fgkRubyDX,
effd7456 2938 -(fgkLadFootY-rubyHoleLen)/2, 0, rot90);
108bd0fe 2939
2940 ladFootBox1Tr->RegisterYourself();
2941 ladFingerPrintTr->RegisterYourself();
2942 rubyCageHoleTr->RegisterYourself();
2943 rubyScrewHoleTr->RegisterYourself();
2944 rubyHoleTr->RegisterYourself();
2945
2946 TGeoCompositeShape *footRightPart = new TGeoCompositeShape(
2947 "ladFootBox1:ladFootBox1Tr-(ladFingerPrint:ladFingerPrintTr"
2948 "+rubyCageHole:rubyCageHoleTr+rubyScrewHole:rubyScrewHoleTr"
2949 "+rubyHole:rubyHoleTr)");
2950 TGeoVolume *vFootRightPart = new TGeoVolume("vFootRightPart",
2951 footRightPart,stesalite);
2952 vFootRightPart->SetLineColor(fColorStesalite);
2953
73dfc864 2954 virtualFoot->AddNode(vFootRightPart, 1, 0);
108bd0fe 2955
2956
2957 //--- This was the right part of the foot, now let's do the middle
2958 //--- and the right parts
2959
effd7456 2960 Double_t middleX = fgkLadFootX-fgkLadBox1X-fgkLadFingerPrintX-fgkLadFingerPrintBorder;
108bd0fe 2961 TGeoBBox *footMiddle = new TGeoBBox("footMiddle", middleX/2, fgkLadFootMiddleY/2,
effd7456 2962 fgkLadFootZ/2);
108bd0fe 2963 TGeoTranslation *middleXTr = new TGeoTranslation("middleXTr",
effd7456 2964 fgkLadFootX/2-fgkLadBox1X-middleX/2,
73dfc864 2965 fgkLadFootY/2-fgkLadFootMiddleY/2, 0);
108bd0fe 2966
2967 TGeoVolume *vFootMiddle = new TGeoVolume("vFootMiddle", footMiddle,stesalite);
2968 vFootMiddle->SetLineColor(fColorStesalite);
73dfc864 2969 virtualFoot->AddNode(vFootMiddle, 1, middleXTr);
108bd0fe 2970
2971 //--
effd7456 2972 TGeoBBox *footLeftLadFinger = new TGeoBBox("footLeftLadFinger", fgkLadFingerPrintX/2,
2973 (fgkLadFootY-fgkLadFingerPrintY)/2,
2974 fgkLadFootZ/2);
108bd0fe 2975 TGeoTranslation *footLeftLadFingerTr = new TGeoTranslation("footLeftLadFingerTr",
effd7456 2976 -fgkLadFootX/2+fgkLadFingerPrintBorder+fgkLadFingerPrintX/2,
73dfc864 2977 -fgkLadFingerPrintY/2, 0);
108bd0fe 2978 TGeoVolume *vFootLeftLadFinger = new TGeoVolume("vFootLeftLadFinger",footLeftLadFinger,
2979 stesalite);
2980 vFootLeftLadFinger->SetLineColor(fColorStesalite);
73dfc864 2981 virtualFoot->AddNode(vFootLeftLadFinger, 1, footLeftLadFingerTr);
108bd0fe 2982
2983 //--
2984 TGeoBBox *footLeft = new TGeoBBox("footLeft", fgkLadFingerPrintBorder/2,
effd7456 2985 fgkLadFootY/2,
2986 fgkLadFootZ/2);
108bd0fe 2987 TGeoTranslation *footLeftTr = new TGeoTranslation("footLeftTr",
effd7456 2988 -fgkLadFootX/2+fgkLadFingerPrintBorder/2,
73dfc864 2989 0, 0);
108bd0fe 2990 TGeoVolume *vFootLeft = new TGeoVolume("vFootLeft",footLeft,stesalite);
2991 vFootLeft->SetLineColor(fColorStesalite);
73dfc864 2992 virtualFoot->AddNode(vFootLeft, 1, footLeftTr);
108bd0fe 2993
73dfc864 2994 if(GetDebug(3)){ // Remove compiler warning.
2995 ladFingerPrint->InspectShape();
2996 ladFootBox1->InspectShape();
2997 rubyCageHole->InspectShape();
2998 rubyScrewHole->InspectShape();
2999 rubyHole->InspectShape();
3000 }
108bd0fe 3001
73dfc864 3002 return virtualFoot;
3003}
108bd0fe 3004
73dfc864 3005//________________________________________________________________________
3006TGeoVolumeAssembly* AliITSv11GeometrySDD::CreateCarlosCard(Int_t iLay) {
3007 //
3008 // return an assembly containing the CARLOS end-ladder board
3009 // and the heat bridge
3010 //
108bd0fe 3011
73dfc864 3012 (void) iLay;
3013 TGeoMedium *glassFiber = GetMedium("SDD SI CHIP$");// glassFiber TO CODE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3014 TGeoMedium *siliconChip = GetMedium("SDD SI CHIP$");// ITSsddSiChip
3015 TGeoMedium *plastiChip = GetMedium("SDDKAPTON (POLYCH2)$"); // ITSsddKAPTON_POLYCH2
3016 TGeoMedium *copper = GetMedium("COPPER$");
3017 TGeoMedium *alCu12SDD = GetMedium("INOX$"); // ITSsddAlCu12, to code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3018 TGeoMedium *stainless = GetMedium("INOX$"); // for screws, what is the material ???????????
108bd0fe 3019
73dfc864 3020 //=========================================
3021 // cooling support of the Carlos card (HeatBridge):
3022 TGeoVolumeAssembly *assemblySupCarlos = new TGeoVolumeAssembly("assemblySupCarlos");
108bd0fe 3023
73dfc864 3024 TGeoBBox *supCarlosBoard1 = new TGeoBBox("",fgkCarlosSuppX1/2,fgkCarlosSuppY1/2,
3025 fgkCarlosSuppZ/2);
3026 TGeoBBox *supCarlosBoard2 = new TGeoBBox("",fgkCarlosSuppX2/2,fgkCarlosSuppY2/2,
3027 fgkCarlosSuppZ/2);
3028 TGeoVolume *vSupCarlosBoard1 = new TGeoVolume("vSupCarlosBoard1",
3029 supCarlosBoard1, alCu12SDD);
3030 TGeoVolume *vSupCarlosBoard2 = new TGeoVolume("vSupCarlosBoard2",
3031 supCarlosBoard2, alCu12SDD);
3032 vSupCarlosBoard1->SetLineColor(4);
3033 vSupCarlosBoard2->SetLineColor(4);
108bd0fe 3034
3035
73dfc864 3036 Double_t shiftGlob = -fgkCarlosSuppZ/2+fgkCarlosSuppTopLen;
3037 // shift of the main planes in the direction of their width
3038 // the center is fixed at the center of the 2 small fixing arms on each sides.
3039 //shiftGlob=0.5;
108bd0fe 3040
73dfc864 3041 shiftGlob+= 0.5*fgkCarlosSuppY3/cos((90-fgkCarlosSuppAngle)*TMath::DegToRad());
3042 shiftGlob-= 0.5*fgkCarlosSuppY2*tan((90-fgkCarlosSuppAngle)*TMath::DegToRad());
3043 Double_t shiftGlobY = shiftGlob*sin(fgkCarlosSuppAngle*TMath::DegToRad());
3044 Double_t shiftGlobZ = shiftGlob*cos(fgkCarlosSuppAngle*TMath::DegToRad());
108bd0fe 3045
73dfc864 3046 TGeoTranslation *carlosSupTr1 = new TGeoTranslation( -fgkCarlosSuppX2/2,
3047 (-fgkCarlosSuppY1+fgkCarlosSuppY2)/2+shiftGlobY,
3048 +shiftGlobZ);
108bd0fe 3049
73dfc864 3050 TGeoTranslation *carlosSupTr2 = new TGeoTranslation( fgkCarlosSuppX1/2,
3051 shiftGlobY,
3052 shiftGlobZ);
108bd0fe 3053
73dfc864 3054 assemblySupCarlos->AddNode(vSupCarlosBoard1, 0, carlosSupTr1);
3055 assemblySupCarlos->AddNode(vSupCarlosBoard2, 0, carlosSupTr2);
3056
3057 //=========================================
3058 // fixing arm of the cooling support :
3059 TGeoBBox *supCarlosBoard3 = new TGeoBBox("",fgkCarlosSuppX3/2,fgkCarlosSuppY3/2,
3060 fgkCarlosSuppZ3/2);
3061 TGeoVolume *vSupCarlosBoard3 = new TGeoVolume("vSupCarlosBoard3",
3062 supCarlosBoard3, alCu12SDD);
3063 vSupCarlosBoard3->SetLineColor(4);
c789ee28 3064
73dfc864 3065 // screw inside :
3066 TGeoTube *littleScrew = new TGeoTube("littleScrew", 0, fgkLittleScrewR,
3067 fgkCarlosSuppY3/2);
3068 TGeoVolume *vLittleScrew = new TGeoVolume("vLittleScrew",
3069 littleScrew, stainless);
3070 TGeoRotation *rotScrew = new TGeoRotation("",0,90,0);
3071 TGeoCombiTrans *cbScrew1 = new TGeoCombiTrans(0, 0, fgkCarlosSuppZ3/2 -
3072 fgkLittleScrewHeadR-0.07, rotScrew);
3073 TGeoCombiTrans *cbScrew2 = new TGeoCombiTrans(0, 0, -fgkCarlosSuppZ3/2 +
3074 fgkLittleScrewHeadR+0.07, rotScrew);
3075 vSupCarlosBoard3->AddNode(vLittleScrew,1, cbScrew1);
3076 vSupCarlosBoard3->AddNode(vLittleScrew,2, cbScrew2);
3077
3078 TGeoRotation *carlosSupRot = new TGeoRotation("carlosSuppInvertAngle",
3079 0, fgkCarlosSuppAngle, 0);
3080 TGeoCombiTrans *carlosSupTr3 = new TGeoCombiTrans((fgkCarlosSuppX1+
3081 fgkCarlosSuppX2+fgkCarlosSuppX3)/2,0,0, carlosSupRot);
3082 TGeoCombiTrans *carlosSupTr4 = new TGeoCombiTrans(-(fgkCarlosSuppX1+
3083 fgkCarlosSuppX2+fgkCarlosSuppX3)/2,0,0, carlosSupRot);
3084 assemblySupCarlos->AddNode(vSupCarlosBoard3, 0, carlosSupTr3);
3085 assemblySupCarlos->AddNode(vSupCarlosBoard3, 1, carlosSupTr4);
effd7456 3086
108bd0fe 3087
73dfc864 3088 //=========================================
3089 // screws fixing the board on the U tube
3090 Double_t aaa = fgkCarlosSuppY3; // ???
3091 //Double_t aaa = fgkCarlosSuppY3/2 + fgkLittleScrewHeadH/2;
3092 Double_t bbb = fgkCarlosSuppZ3/2 - fgkLittleScrewHeadR;
3093 Double_t screw1y = ( aaa*cos(TMath::DegToRad()*fgkCarlosSuppAngle) -
3094 bbb*sin(TMath::DegToRad()*fgkCarlosSuppAngle) );
3095 Double_t screw1z = ( aaa*sin(TMath::DegToRad()*fgkCarlosSuppAngle) +
3096 bbb*cos(TMath::DegToRad()*fgkCarlosSuppAngle) )-0.07;
3097
3098 TGeoRotation *CarlosSuppRot = (TGeoRotation *)fCommonTr[0];
3099
3100 TGeoCombiTrans* lScrewTr1 = new TGeoCombiTrans((fgkCarlosSuppX1+
3101 fgkCarlosSuppX2+fgkCarlosSuppX3)/2,
3102 screw1y,screw1z, CarlosSuppRot);
3103
3104 TGeoCombiTrans* lScrewTr2 = new TGeoCombiTrans((fgkCarlosSuppX1+
3105 fgkCarlosSuppX2+fgkCarlosSuppX3)/2,
3106 screw1z,screw1y, CarlosSuppRot);
3107
3108 TGeoCombiTrans *lScrewTr3 = new TGeoCombiTrans(-(fgkCarlosSuppX1+
3109 fgkCarlosSuppX2+fgkCarlosSuppX3)/2,
3110 screw1y,screw1z, CarlosSuppRot);
3111
3112 TGeoCombiTrans *lScrewTr4 = new TGeoCombiTrans(-(fgkCarlosSuppX1+
3113 fgkCarlosSuppX2+fgkCarlosSuppX3)/2,
3114 screw1z,screw1y, CarlosSuppRot);
3115
3116 assemblySupCarlos->AddNode(fCommonVol[0], 1, lScrewTr1);
3117 assemblySupCarlos->AddNode(fCommonVol[0], 2, lScrewTr2);
3118 assemblySupCarlos->AddNode(fCommonVol[0], 3, lScrewTr3);
3119 assemblySupCarlos->AddNode(fCommonVol[0], 4, lScrewTr4);
3120
3121 //=========================================
3122 // board
3123 Double_t p1[3], p2[3], vX[3] = {1,0,0};
3124 AliITSv11GeomCableFlat card1("cardCarlos1", fgkCarlosCardZ1, fgkCarlosCardY1); // name, width, thickness
3125 card1.SetNLayers(2);
3126 card1.SetLayer(0, fgkCarlosCardCuY, copper, kOrange); // index, thickness, material, color
3127 card1.SetLayer(1, fgkCarlosCardY1-fgkCarlosCardCuY, glassFiber, 30);
3128 card1.SetInitialNode( (TGeoVolume *) assemblySupCarlos);
3129 p1[0] = -fgkCarlosCardX1/2;
3130 p1[1] = shiftGlobY - fgkCarlosCard2HeatBridge;
3131 p1[2] = fgkCarlosCardShift;
3132 p2[0] = fgkCarlosCardX1/2;
3133 p2[1] = shiftGlobY - fgkCarlosCard2HeatBridge;
3134 p2[2] = fgkCarlosCardShift;
3135 card1.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 0, p1, vX);
3136 card1.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 1, p2, vX);
3137 card1.CreateAndInsertBoxCableSegment(1,90);
3138
3139 AliITSv11GeomCableFlat card2("cardCarlos2", fgkCarlosCardZ2, fgkCarlosCardY1); // name, width, thickness
3140 card2.SetNLayers(2);
3141 card2.SetLayer(0, fgkCarlosCardCuY, copper, kOrange); // index, thickness, material, color
3142 card2.SetLayer(1, fgkCarlosCardY1-fgkCarlosCardCuY, glassFiber, 30);
3143 card2.SetInitialNode( (TGeoVolume *) assemblySupCarlos);
3144
3145 p1[0] = -fgkCarlosCardX1/2;
3146 p1[1] = shiftGlobY - fgkCarlosCard2HeatBridge;
3147 p1[2] = fgkCarlosCardShift + fgkCarlosCardZ1/2 + fgkCarlosCardZ2/2;
3148
3149 p2[0] = -fgkCarlosCardX1/2 + fgkCarlosCardX2;
3150 p2[1] = shiftGlobY - fgkCarlosCard2HeatBridge;
3151 p2[2] = fgkCarlosCardShift + fgkCarlosCardZ1/2 + fgkCarlosCardZ2/2;
3152 card2.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 0, p1, vX);
3153 card2.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 1, p2, vX);
3154 card2.CreateAndInsertBoxCableSegment(1,90);
3155
3156 //=========================================
3157 // some chips on the board
3158
3159 AliITSv11GeomCableFlat u1("carlosCardU1", fgkCarlosU1Z, fgkCarlosU1Y); // name, width, thickness
3160 u1.SetNLayers(2);
3161 u1.SetLayer(0, fgkCarlosCardChipSiThick, siliconChip, kGreen); // index, thickness, material, color
3162 u1.SetLayer(1, fgkCarlosU1Y - fgkCarlosCardChipSiThick, plastiChip, kGray+3);
3163 u1.SetInitialNode( (TGeoVolume *) assemblySupCarlos);
3164
3165 p1[0] = fgkCarlosU1posX - fgkCarlosU1X/2;
3166 p1[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU1Y/2;
3167 p1[2] = fgkCarlosCardShift + fgkCarlosU1posZ;
3168
3169 p2[0] = fgkCarlosU1posX + fgkCarlosU1X/2;
3170 p2[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU1Y/2;
3171 p2[2] = fgkCarlosCardShift + fgkCarlosU1posZ;
3172 u1.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 0, p1, vX);
3173 u1.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 1, p2, vX);
3174 u1.CreateAndInsertBoxCableSegment(1,90);
3175
3176 //---
3177 AliITSv11GeomCableFlat u2("carlosCardU2", fgkCarlosU2Z, fgkCarlosU2Y); // name, width, thickness
3178 u2.SetNLayers(2);
3179 u2.SetLayer(0, fgkCarlosCardChipSiThick, siliconChip, kGreen); // index, thickness, material, color
3180 u2.SetLayer(1, fgkCarlosU2Y - fgkCarlosCardChipSiThick, plastiChip, kGray+3);
3181 u2.SetInitialNode( (TGeoVolume *) assemblySupCarlos);
3182
3183 p1[0] = fgkCarlosU2posX - fgkCarlosU2X/2;
3184 p1[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU2Y/2;
3185 p1[2] = fgkCarlosCardShift + fgkCarlosU2posZ;
3186
3187 p2[0] = fgkCarlosU2posX + fgkCarlosU2X/2;
3188 p2[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU2Y/2;
3189 p2[2] = fgkCarlosCardShift + fgkCarlosU2posZ;
3190 u2.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 0, p1, vX);
3191 u2.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 1, p2, vX);
3192 u2.CreateAndInsertBoxCableSegment(1,90);
3193
3194 //---
3195 AliITSv11GeomCableFlat u3("carlosCardU3", fgkCarlosU3Z, fgkCarlosU3Y); // name, width, thickness
3196 u3.SetNLayers(2);
3197 u3.SetLayer(0, fgkCarlosCardChipSiThick, siliconChip, kGreen); // index, thickness, material, color
3198 u3.SetLayer(1, fgkCarlosU3Y - fgkCarlosCardChipSiThick, plastiChip, kGray+3);
3199 u3.SetInitialNode( (TGeoVolume *) assemblySupCarlos);
3200
3201 Double_t u3Y = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU3Y/2;
3202 p1[0] = fgkCarlosU3posX - fgkCarlosU3X/2;
3203 p1[1] = u3Y;
3204 p1[2] = fgkCarlosCardShift + fgkCarlosU3posZ;
3205
3206 p2[0] = fgkCarlosU3posX + fgkCarlosU3X/2;
3207 p2[1] = u3Y;
3208 p2[2] = fgkCarlosCardShift + fgkCarlosU3posZ;
3209 u3.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 0, p1, vX);
3210 u3.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 1, p2, vX);
3211 TGeoVolume *u3Vol = u3.CreateAndInsertBoxCableSegment(1,90);
3212
3213 //--- U4 is like U3 (?)
3214 TGeoCombiTrans *u4Trans = new TGeoCombiTrans;
3215 u4Trans->RotateX(90);
3216 u4Trans->SetTranslation(fgkCarlosU4posX, u3Y,
3217 fgkCarlosCardShift + fgkCarlosU4posZ);
3218 assemblySupCarlos->AddNode(u3Vol, 2, u4Trans);
3219
3220 //---
3221 AliITSv11GeomCableFlat u17("carlosCardU17", fgkCarlosU17Z, fgkCarlosU17Y); // name, width, thickness
3222 u17.SetNLayers(2);
3223 u17.SetLayer(0, fgkCarlosCardChipSiThick, siliconChip, kGreen); // index, thickness, material, color
3224 u17.SetLayer(1, fgkCarlosU17Y - fgkCarlosCardChipSiThick, plastiChip, kGray+3);
3225 u17.SetInitialNode( (TGeoVolume *) assemblySupCarlos);
3226
3227 p1[0] = fgkCarlosU17posX - fgkCarlosU17X/2;
3228 p1[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU17Y/2;
3229 p1[2] = fgkCarlosCardShift + fgkCarlosU17posZ;
3230
3231 p2[0] = fgkCarlosU17posX + fgkCarlosU17X/2;
3232 p2[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU17Y/2;
3233 p2[2] = fgkCarlosCardShift + fgkCarlosU17posZ;
3234 u17.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 0, p1, vX);
3235 u17.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 1, p2, vX);
3236 u17.CreateAndInsertBoxCableSegment(1,90);
3237
3238 //---
3239 AliITSv11GeomCableFlat u35("carlosCardU35", fgkCarlosU35Z, fgkCarlosU35Y); // name, width, thickness
3240 u35.SetNLayers(2);
3241 u35.SetLayer(0, fgkCarlosCardChipSiThick, siliconChip, kGreen); // index, thickness, material, color
3242 u35.SetLayer(1, fgkCarlosU35Y - fgkCarlosCardChipSiThick, plastiChip, kGray+3);
3243