]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ITS/AliITSv11GeometrySDD.cxx
add ITS to TRD prolongation monitoring
[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. *
40e2e5ea 14 **************************************************************************/
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
112d72a8 33#include <Riostream.h>
db486a6e 34#include <TMath.h>
35
36// Root Geometry includes
37#include <TGeoManager.h>
38#include <TGeoVolume.h>
db486a6e 39#include <TGeoCone.h>
40#include <TGeoTube.h>
108bd0fe 41#include <TGeoTrd1.h>
db486a6e 42#include <TGeoArb8.h>
9c8369f9 43#include <TGeoXtru.h>
db486a6e 44#include <TGeoCompositeShape.h>
45#include <TGeoMatrix.h>
c789ee28 46#include <TGeoNode.h>
bf210566 47#include <TGeoPcon.h>
d485d5bf 48#include <TGeoTorus.h>
db486a6e 49
db486a6e 50#include "AliITSv11GeometrySDD.h"
b7943f00 51#include "AliITSv11GeomCableFlat.h"
52#include "AliITSv11GeomCableRound.h"
b7943f00 53
cfe39822 54const char* AliITSv11GeometrySDD::fgkSDDsensitiveVolName3 = "ITSsddSensitivL3";
55const char* AliITSv11GeometrySDD::fgkSDDsensitiveVolName4 = "ITSsddSensitivL4";
9c8369f9 56const Double_t AliITSv11GeometrySDD::fgkSegmentLength = 37.21*2*fgkmm;
b7943f00 57const Double_t AliITSv11GeometrySDD::fgkLadderWidth = 50.0*fgkmm;
58const Double_t AliITSv11GeometrySDD::fgkLadderHeight = 30.0*fgkmm;
9c8369f9 59const Double_t AliITSv11GeometrySDD::fgkLadderSegBoxDW = 7.5*fgkmm;
60const Double_t AliITSv11GeometrySDD::fgkLadderSegBoxDH = 7.1*fgkmm;
b7943f00 61
62const Double_t AliITSv11GeometrySDD::fgkLadderBeamRadius = 0.6*fgkmm;
63const Double_t AliITSv11GeometrySDD::fgkLadderLa = 3.*fgkmm;
fa4639a3 64const Double_t AliITSv11GeometrySDD::fgkLadderHa = 0.721979*fgkmm;
b7943f00 65const Double_t AliITSv11GeometrySDD::fgkLadderLb = 3.7*fgkmm;
fa4639a3 66const Double_t AliITSv11GeometrySDD::fgkLadderHb = 0.890428*fgkmm;
b7943f00 67const Double_t AliITSv11GeometrySDD::fgkLadderl = 0.25*fgkmm;
68
69const Double_t AliITSv11GeometrySDD::fgkBottomBeamAngle = 56.5;
70const Double_t AliITSv11GeometrySDD::fgkBeamSidePhi = 65;
71
72const Double_t AliITSv11GeometrySDD::fgkLadWaferSep = 2*fgkmm;
fa4639a3 73const Double_t AliITSv11GeometrySDD::fgkPinSuppWidth = 2.5*fgkmm;
74const Double_t AliITSv11GeometrySDD::fgkPinSuppHeight = 2.*fgkmm;
b7943f00 75const Double_t AliITSv11GeometrySDD::fgkPinSuppRmax = 2.5/2.*fgkmm;
76const Double_t AliITSv11GeometrySDD::fgkPinR = 1.5/2.*fgkmm;
77const Double_t AliITSv11GeometrySDD::fgkPinSuppLength = 5.*fgkmm;
78const Double_t AliITSv11GeometrySDD::fgkPinSuppThickness = 0.5*fgkmm;
79const Double_t AliITSv11GeometrySDD::fgkPinSuppConeAngle = 4;
80const Double_t AliITSv11GeometrySDD::fgkPinDXminOnSensor = (39./2.)*fgkmm;
81const Double_t AliITSv11GeometrySDD::fgkPinPinDDXOnSensor = 3*fgkmm;
82const Double_t AliITSv11GeometrySDD::fgkPinDYOnSensor = (52.5/2.)*fgkmm;
db486a6e 83
b7943f00 84// parameters from ALR-0752/3
85const Double_t AliITSv11GeometrySDD::fgkCoolPipeSuppHeight = 3.2*fgkmm;
86const Double_t AliITSv11GeometrySDD::fgkCoolPipeSuppMaxLength = 14*fgkmm;
87const Double_t AliITSv11GeometrySDD::fgkCoolPipeSuppWidthExt = 0.4*fgkmm;
88const Double_t AliITSv11GeometrySDD::fgkCoolPipeSuppWidthIn = 0.65*fgkmm;
89const Double_t AliITSv11GeometrySDD::fgkCoolPipeSuppHoleDiam = 2*fgkmm;
90const Double_t AliITSv11GeometrySDD::fgkCoolPipeSuppFulWidth = 5.15*fgkmm;
91const Double_t AliITSv11GeometrySDD::fgkCoolPipeSuppTongW = 0.8*fgkmm;
92const Double_t AliITSv11GeometrySDD::fgkCoolPipeSuppAngle = 22.5;
93const Double_t AliITSv11GeometrySDD::fgkCoolPipeSuppSlitL = 4.9*fgkmm;
94const Double_t AliITSv11GeometrySDD::fgkCoolPipeSuppAxeDist = 3.05*fgkmm;
95const Double_t AliITSv11GeometrySDD::fgkCoolPipeInnerDiam = 1.84*fgkmm;
96const Double_t AliITSv11GeometrySDD::fgkCoolPipeOuterDiam = 2.*fgkmm;
97
98const Double_t AliITSv11GeometrySDD::fgkBTBthick = 0.25 *fgkmm;
99const Double_t AliITSv11GeometrySDD::fgkBTBlength = 55. *fgkmm;
100const Double_t AliITSv11GeometrySDD::fgkBTBwidth = 18*fgkmm;
101const Double_t AliITSv11GeometrySDD::fgkBTBaxisAtoBottom = 4*fgkmm;
4f7d5a2a 102const Double_t AliITSv11GeometrySDD::fgkBTBaxisAtoBase = 2.2*fgkmm;
b7943f00 103const Double_t AliITSv11GeometrySDD::fgkRadiusAminBTB = 1. *fgkmm;
104const Double_t AliITSv11GeometrySDD::fgkRadiusBminBTB = 0.53 *fgkmm;
105const Double_t AliITSv11GeometrySDD::fgkBTBHoleLength = 15 *fgkmm;
106const Double_t AliITSv11GeometrySDD::fgkBTBHolewidth = 6 *fgkmm;
107const Double_t AliITSv11GeometrySDD::fgkBTBHoleRefX = 10 *fgkmm;
108const Double_t AliITSv11GeometrySDD::fgkBTBHoleRefY = 6.5 *fgkmm;
109
1c5895a3 110const Double_t AliITSv11GeometrySDD::fgkLay3Rmin = 129.*fgkmm;
9c8369f9 111const Double_t AliITSv11GeometrySDD::fgkLay3Rmax = 205.*fgkmm;
b7943f00 112const Double_t AliITSv11GeometrySDD::fgkLay3Length = (524.+0.)*fgkmm; // ladder+supporting rings (length of the virtual tube)
113const Double_t AliITSv11GeometrySDD::fgkLay3LadderLength = 524.*fgkmm;
114const Double_t AliITSv11GeometrySDD::fgkLay3DetShortRadius = 146.0*fgkmm;
115const Double_t AliITSv11GeometrySDD::fgkLay3DetLongRadius = 152.0*fgkmm;
116const Double_t AliITSv11GeometrySDD::fgkLay3LaddTopCornerEnd = 15.6*fgkmm;
117const Int_t AliITSv11GeometrySDD::fgkLay3Ndet = 6;
118const Int_t AliITSv11GeometrySDD::fgkLay3Nladd = 14;
119const Double_t AliITSv11GeometrySDD::fgkLay3CoolPipeSuppH = 7.5*fgkmm;
120
1c5895a3 121const Double_t AliITSv11GeometrySDD::fgkLay4Rmin = 220.*fgkmm;
9c8369f9 122const Double_t AliITSv11GeometrySDD::fgkLay4Rmax = 291.*fgkmm;
b7943f00 123const Double_t AliITSv11GeometrySDD::fgkLay4Length = (671.+0.)*fgkmm; // ladder+supporting rings (length of the virtual tube)
124const Double_t AliITSv11GeometrySDD::fgkLay4LadderLength = 671.*fgkmm;
125const Double_t AliITSv11GeometrySDD::fgkLay4DetShortRadius = 235.0*fgkmm;
126const Double_t AliITSv11GeometrySDD::fgkLay4DetLongRadius = 240.5*fgkmm;
127const Double_t AliITSv11GeometrySDD::fgkLay4LaddTopCornerEnd = 15.6*fgkmm;
128const Int_t AliITSv11GeometrySDD::fgkLay4Ndet = 8;
129const Int_t AliITSv11GeometrySDD::fgkLay4Nladd = 22;
130const Double_t AliITSv11GeometrySDD::fgkLay4CoolPipeSuppH = 7.5*fgkmm;
131
bf210566 132const Double_t AliITSv11GeometrySDD::fgkEndLaddCardsShortRadiusLay3 = fgkLay3DetShortRadius;
133const Double_t AliITSv11GeometrySDD::fgkEndLaddCardsShortRadiusLay4 = fgkLay4DetShortRadius;
134const Double_t AliITSv11GeometrySDD::fgkDistEndLaddCardsLadd = 0.*fgkmm;
135
b7943f00 136//hybrid
4f7d5a2a 137const Double_t AliITSv11GeometrySDD::fgkHybridAngle = 48.5; // approx !!!
b7943f00 138// Origine taken at the hybrid corner :
139const Double_t AliITSv11GeometrySDD::fgkHybridLength = 65*fgkmm;
140const Double_t AliITSv11GeometrySDD::fgkHybridWidth = 41*fgkmm;
141const Double_t AliITSv11GeometrySDD::fgkHybRndHoleRad = 1.05*fgkmm;
142const Double_t AliITSv11GeometrySDD::fgkHybRndHoleZ = 2.5*fgkmm;
143const Double_t AliITSv11GeometrySDD::fgkHybRndHoleX = fgkHybridWidth-23.599*fgkmm;
144
145const Double_t AliITSv11GeometrySDD::fgkHybFLlowHoleDZ = 9.698*fgkmm;
146const Double_t AliITSv11GeometrySDD::fgkHybFLlowHolePasDX = 10.754*fgkmm;
147const Double_t AliITSv11GeometrySDD::fgkHybFLlowHoleAmbDX = 9.122*fgkmm;
148 // center of ships to the border
149const Double_t AliITSv11GeometrySDD::fgkHybFLlowChipZ4 = fgkHybridLength-(4.654 )*fgkmm-fgkHybFLlowHoleDZ/2;
150const Double_t AliITSv11GeometrySDD::fgkHybFLlowChipZ3 = fgkHybridLength-(4.654+15. )*fgkmm-fgkHybFLlowHoleDZ/2;
151const Double_t AliITSv11GeometrySDD::fgkHybFLlowChipZ2 = fgkHybridLength-(4.654+15.*2)*fgkmm-fgkHybFLlowHoleDZ/2;
152const Double_t AliITSv11GeometrySDD::fgkHybFLlowChipZ1 = fgkHybridLength-(4.654+15.*3)*fgkmm-fgkHybFLlowHoleDZ/2;
153const Double_t AliITSv11GeometrySDD::fgkHybFLlowPasX = fgkHybridWidth-32.775*fgkmm;
154const Double_t AliITSv11GeometrySDD::fgkHybFLlowAmbX = fgkHybridWidth-20.791*fgkmm;
155const Double_t AliITSv11GeometrySDD::fgkHybChipsDZ = 9.221*fgkmm;
156const Double_t AliITSv11GeometrySDD::fgkHybPascalDX = 10.245*fgkmm;
157const Double_t AliITSv11GeometrySDD::fgkHybAmbraDX = 8.51*fgkmm;
158const Double_t AliITSv11GeometrySDD::fgkHybFLUpperWidth = 15.012*fgkmm;
159const Double_t AliITSv11GeometrySDD::fgkHybFLUpperLength = 59.878*fgkmm;
160const Double_t AliITSv11GeometrySDD::fgkHybFLUpperAlDZ = 11.183*fgkmm;
161const Double_t AliITSv11GeometrySDD::fgkHybFLUpperAldx = 2.307*fgkmm;
531d6cdc 162
4f7d5a2a 163const Double_t AliITSv11GeometrySDD::fgkHybCC2SensorLen = 9.500*fgkmm;
9c8369f9 164const Double_t AliITSv11GeometrySDD::fgkHybCC2SensorWid = 1.490*fgkcm; //???
4f7d5a2a 165const Double_t AliITSv11GeometrySDD::fgkHybCC2SensorAng = 15.0;
9c8369f9 166
531d6cdc 167const Double_t AliITSv11GeometrySDD::fgkmu = 1*fgkmicron; // 1*fgkmicron; // can be increase for checking thin objects
b7943f00 168const Double_t AliITSv11GeometrySDD::fgkHybridThBridgeThick = 0.25*fgkmm; // ???
169const Double_t AliITSv11GeometrySDD::fgkHybAlThick = 30*fgkmu;
170const Double_t AliITSv11GeometrySDD::fgkHybUpThick = 20*fgkmu;
171const Double_t AliITSv11GeometrySDD::fgkHybGlueScrnThick = 50*fgkmu; // ??? ?????
172const Double_t AliITSv11GeometrySDD::fgkHybGlueLowThick = 90*fgkmu;
173const Double_t AliITSv11GeometrySDD::fgkHybGlueUpThick = 90*fgkmu; // sur ?????
174const Double_t AliITSv11GeometrySDD::fgkHybAlCCThick = 12*fgkmu;
175const Double_t AliITSv11GeometrySDD::fgkHybUpCCThick = 12*fgkmu;
176const Double_t AliITSv11GeometrySDD::fgkHybChipThick = 150*fgkmu;
177const Double_t AliITSv11GeometrySDD::fgkHybGlueAgThick = 50*fgkmu; // ??? ????
178const Double_t AliITSv11GeometrySDD::fgkHybUnderNiThick = 20*fgkmu; // ??? ????
179const Int_t AliITSv11GeometrySDD::fgkNHybSMD = 25;
180const Double_t AliITSv11GeometrySDD::fgkHybSMDposX[fgkNHybSMD] =
181 {2.92*fgkmm,6.5*fgkmm,10.13*fgkmm,13.59*fgkmm,21.40*fgkmm,
182 2.92*fgkmm,6.5*fgkmm,10.13*fgkmm,13.59*fgkmm,19.91*fgkmm,
183 2.92*fgkmm,6.5*fgkmm,10.13*fgkmm,13.59*fgkmm,17.09*fgkmm,21.40*fgkmm,
184 2.92*fgkmm,6.5*fgkmm,10.13*fgkmm,13.59*fgkmm,19.91*fgkmm,
185 1.63*fgkmm,5.22*fgkmm,13.59*fgkmm,21.40*fgkmm};
186const Double_t AliITSv11GeometrySDD::fgkHybSMDposZ[fgkNHybSMD] =
187 { 2.3 *fgkmm, 2.3 *fgkmm, 2.3 *fgkmm, 2.3 *fgkmm, 2.3 *fgkmm,
188 17.315*fgkmm,17.315*fgkmm,17.315*fgkmm,17.315*fgkmm,17.315*fgkmm,
189 32.31*fgkmm,32.31*fgkmm,32.31*fgkmm,32.31*fgkmm,32.31*fgkmm,32.31*fgkmm,
190 47.38*fgkmm,47.38*fgkmm,47.38*fgkmm,47.38*fgkmm,47.38*fgkmm,
191 62.68*fgkmm,62.06*fgkmm,62.06*fgkmm,62.06*fgkmm};
192const Double_t AliITSv11GeometrySDD::fgkHybSMDmiddleW = 0.954*fgkmm;
193const Double_t AliITSv11GeometrySDD::fgkHybSMDmiddleL = 0.47 *fgkmm;
194const Double_t AliITSv11GeometrySDD::fgkHybSMDendW = 1.132*fgkmm;
195const Double_t AliITSv11GeometrySDD::fgkHybSMDendL = 0.925*fgkmm;
196const Double_t AliITSv11GeometrySDD::fgkHybSMDheight = 400.*fgkmu; // ??? ????!!!!!!!
197
198const Double_t AliITSv11GeometrySDD::fgkWaferThickness = 300.*fgkmu;
199const Double_t AliITSv11GeometrySDD::fgkWaferWidth = 72.5 *fgkmm;
200const Double_t AliITSv11GeometrySDD::fgkWaferLength = 87.6 *fgkmm;
201const Double_t AliITSv11GeometrySDD::fgkWaferThickSens = 299.8*fgkmu;
202const Double_t AliITSv11GeometrySDD::fgkWaferWidthSens = 70.17*fgkmm;
03d34d83 203// 256 anodes times 294 microns of pitch
204const Double_t AliITSv11GeometrySDD::fgkWaferLengthSens = 256*294*fgkmicron;
b7943f00 205
206const Double_t AliITSv11GeometrySDD::fgkDigitCablWidth = 18.4*fgkmm;
207const Double_t AliITSv11GeometrySDD::fgkDigitCablAlThick = (30+30*8./10.)*fgkmicron; // will probably change
208const Double_t AliITSv11GeometrySDD::fgkDigitCablPolyThick = (20+12)*fgkmicron; // will probably change
209
210const Double_t AliITSv11GeometrySDD::fgkWaHVcableAlThick = 30*2./10.*fgkmu; // will probably change // Al ratio is random !!!
211const Double_t AliITSv11GeometrySDD::fgkWaHVcablePolyThick = 175*fgkmu; // will probably change
212const Double_t AliITSv11GeometrySDD::fgkWaHVcableLength = 67.08*fgkmm;
108bd0fe 213const Double_t AliITSv11GeometrySDD::fgkWaHVcableWitdh = 17.4*fgkmm; // check !!!
214const Double_t AliITSv11GeometrySDD::fgkWaHVcableDW = 5.24*fgkmm; //5.24*fgkmm;// check !!!
b7943f00 215
216const Double_t AliITSv11GeometrySDD::fgkSensorGlassLX = 5. *fgkmm;
217const Double_t AliITSv11GeometrySDD::fgkSensorGlassLZ = 5. *fgkmm;
218const Double_t AliITSv11GeometrySDD::fgkSensorGlassLY = 150. *fgkmu;
219const Double_t AliITSv11GeometrySDD::fgkGlassDXOnSensor = 26.28*fgkmm; // check !!!
220const Double_t AliITSv11GeometrySDD::fgkGlassDZOnSensor = 22.50*fgkmm; // check !!!
221
222const Double_t AliITSv11GeometrySDD::fgkTransitHVAlThick = 30*2./10.*fgkmu; // check // will probably change //Al ratio is random
223const Double_t AliITSv11GeometrySDD::fgkTransitHVPolyThick = 100*fgkmu; // check // will probably change
224const Double_t AliITSv11GeometrySDD::fgkTransitHVHeadLX = 71.46*fgkmm; // check !!!
225const Double_t AliITSv11GeometrySDD::fgkTransitHVHeadLZ = 21.3*fgkmm;
226const Double_t AliITSv11GeometrySDD::fgkTransitHVBondingLZ = 3.6*fgkmm;
227const Double_t AliITSv11GeometrySDD::fgkTransitHVtailLength = 27*fgkmm; // ???, not yet fixed ...
228const Double_t AliITSv11GeometrySDD::fgkTransitHVtailWidth = 26*fgkmm;
108bd0fe 229const Double_t AliITSv11GeometrySDD::fgkTransitHVtailXpos = 8*fgkmm; //8*fgkmm // ???, a mesurer !!!
b7943f00 230const Double_t AliITSv11GeometrySDD::fgkTransitHVsideLZ = 10.34*fgkmm;
231const Double_t AliITSv11GeometrySDD::fgkTransitHVsideLeftZ = 4.11*fgkmm;
232const Double_t AliITSv11GeometrySDD::fgkTransitHVsideRightZ = 3.5*fgkmm; // ???, a mesurer !!!
233
234const Double_t AliITSv11GeometrySDD::fgkLongHVcablePolyThick= (20+30+125+30+20+30+125+30+20)*fgkmu; // check // will probably change
235const Double_t AliITSv11GeometrySDD::fgkLongHVcableAlThick = (30+30*2/10+30)*fgkmu; // check // will probably change
236const Double_t AliITSv11GeometrySDD::fgkLongHVcableSeparation = 600*fgkmicron;
c789ee28 237
108bd0fe 238const Double_t AliITSv11GeometrySDD::fgkRubyDX = 14.*fgkmm;
239const Double_t AliITSv11GeometrySDD::fgkRubyZladd3 = 250*fgkmm;
240const Double_t AliITSv11GeometrySDD::fgkRubyZladd4 = 325*fgkmm;
241
242// the stesalite ladder foot at its end
effd7456 243const Double_t AliITSv11GeometrySDD::fgkLadFootX = 60.*fgkmm;
244const Double_t AliITSv11GeometrySDD::fgkLadFootZ = 20.*fgkmm;
245const Double_t AliITSv11GeometrySDD::fgkLadFootY = 8.*fgkmm;
108bd0fe 246const Double_t AliITSv11GeometrySDD::fgkLadFootMiddleY = 4.5*fgkmm;
effd7456 247const Double_t AliITSv11GeometrySDD::fgkLadBox1X = 23.*fgkmm;
248const Double_t AliITSv11GeometrySDD::fgkLadFingerPrintX = 6.*fgkmm;
249const Double_t AliITSv11GeometrySDD::fgkLadFingerPrintY = 1.*fgkmm;
108bd0fe 250const Double_t AliITSv11GeometrySDD::fgkLadFingerPrintBorder = 4.*fgkmm;
251const Double_t AliITSv11GeometrySDD::fgkRubyCageHoleZ = 8.*fgkmm;
252const Double_t AliITSv11GeometrySDD::fgkRubyCageHoleX = 9.*fgkmm;
253const Double_t AliITSv11GeometrySDD::fgkRubyCageHoleY = 6.5*fgkmm;
254const Double_t AliITSv11GeometrySDD::fgkRubyCageAxisShift = 0.5*fgkmm;
255const Double_t AliITSv11GeometrySDD::fgkScrewM4diam = 4.*fgkmm;
256
257const Double_t AliITSv11GeometrySDD::fgkRubyScrewShiftToCenterY = 0.1;
73dfc864 258const Double_t AliITSv11GeometrySDD::fgkRubyHoleDiam = 0.5;
108bd0fe 259
73dfc864 260// the U cooling pipe and its heat exchanger in end-ladder cards system
108bd0fe 261const Double_t AliITSv11GeometrySDD::fgkEndLadPipeUlengthLay3 = 138*fgkmm;
262const Double_t AliITSv11GeometrySDD::fgkEndLadPipeUlengthLay4 = 150*fgkmm;
263const Double_t AliITSv11GeometrySDD::fgkEndLadPipeUwidth = 59*fgkmm;
264const Double_t AliITSv11GeometrySDD::fgkEndLadPipeRadius = 5*fgkmm;
265const Double_t AliITSv11GeometrySDD::fgkEndLadPipeInnerDiam = 2.8*fgkmm;
266const Double_t AliITSv11GeometrySDD::fgkEndLadPipeOuterDiam = 3.*fgkmm;
267//--- The al body of the cooling syst.of the heat exchanger :
73dfc864 268const Double_t AliITSv11GeometrySDD::fgkEndLadPipeArmZLay3 = 112.*fgkmm; //
269const Double_t AliITSv11GeometrySDD::fgkEndLadPipeArmZLay4 = 125.*fgkmm; //
bf210566 270const Double_t AliITSv11GeometrySDD::fgkEndLadPipeArmX = 4.75*fgkmm; // the arms of the U cooling tube
73dfc864 271const Double_t AliITSv11GeometrySDD::fgkEndLadPipeArmY = 6.8*fgkmm;
272const Double_t AliITSv11GeometrySDD::fgkEndLadPipeArmBoxDY = 1.03*fgkmm; // shift in Y of the arms from the axis
bf210566 273const Double_t AliITSv11GeometrySDD::fgkEndLadPipeArmBoxDX = 0.125*fgkmm;// shift in X of the arms from the axis
274const Double_t AliITSv11GeometrySDD::fgkEndLadPipeArmZpos = 8.9*fgkmm; //
108bd0fe 275
276// LV card :
73dfc864 277const Double_t AliITSv11GeometrySDD::fgkLVcardX = 26.525*fgkmm;
278const Double_t AliITSv11GeometrySDD::fgkLVcardY = 44.95*fgkmm;
279const Double_t AliITSv11GeometrySDD::fgkLVcardZ = 1.*fgkmm; // all except Cu layer //???
280const Double_t AliITSv11GeometrySDD::fgkLVcardCuZ = 0.1*fgkmm; //???
effd7456 281
282const Double_t AliITSv11GeometrySDD::fgkLVChip0X = 16.525*fgkmm;
283const Double_t AliITSv11GeometrySDD::fgkLVChip0Y = 10.8*fgkmm;
284const Double_t AliITSv11GeometrySDD::fgkLVChip0Z = 3.5*fgkmm; // all except si layer //???
285const Double_t AliITSv11GeometrySDD::fgkLVChip0SiZ = 0.2*fgkmm; //???????????????????????????????????????????????????
286const Double_t AliITSv11GeometrySDD::fgkLVChip0PosX = 13.*fgkmm; //19.95*fgkmm; ???
287const Double_t AliITSv11GeometrySDD::fgkLVChip0PosY = 10.3*fgkmm;
288
289const Double_t AliITSv11GeometrySDD::fgkLVChip1X = 6.00*fgkmm;
290const Double_t AliITSv11GeometrySDD::fgkLVChip1Y = 6.00*fgkmm;
291const Double_t AliITSv11GeometrySDD::fgkLVChip1Z = 1*fgkmm; // ???
292const Double_t AliITSv11GeometrySDD::fgkLVChip1SiZ = 0.2*fgkmm; // ???
293const Double_t AliITSv11GeometrySDD::fgkLVChip1PosX = 18.*fgkmm;
294const Double_t AliITSv11GeometrySDD::fgkLVChip1PosY = 27.6*fgkmm;
295
296const Double_t AliITSv11GeometrySDD::fgkLVChip2X = 6.00*fgkmm;
297const Double_t AliITSv11GeometrySDD::fgkLVChip2Y = 6.00*fgkmm;
298const Double_t AliITSv11GeometrySDD::fgkLVChip2Z = 1*fgkmm; // ???
299const Double_t AliITSv11GeometrySDD::fgkLVChip2SiZ = 0.2*fgkmm; //???
300const Double_t AliITSv11GeometrySDD::fgkLVChip2PosX = 18.0*fgkmm;
301const Double_t AliITSv11GeometrySDD::fgkLVChip2PosY = 39.0*fgkmm;
302
303const Double_t AliITSv11GeometrySDD::fgkLVChip3X = 4.01*fgkmm;
304const Double_t AliITSv11GeometrySDD::fgkLVChip3Y = 4.01*fgkmm;
305const Double_t AliITSv11GeometrySDD::fgkLVChip3Z = 1*fgkmm; // ???
306const Double_t AliITSv11GeometrySDD::fgkLVChip3SiZ = 0.2*fgkmm;
307const Double_t AliITSv11GeometrySDD::fgkLVChip3PosX = 20.7*fgkmm;
308const Double_t AliITSv11GeometrySDD::fgkLVChip3PosY = 21.4*fgkmm;
309
73dfc864 310const Double_t AliITSv11GeometrySDD::fgkLVcoolX1 = 17.25*fgkmm;
311const Double_t AliITSv11GeometrySDD::fgkLVcoolY1 = 8.7*fgkmm;
312const Double_t AliITSv11GeometrySDD::fgkLVcoolZ1 = 1.*fgkmm;
effd7456 313
73dfc864 314const Double_t AliITSv11GeometrySDD::fgkLVcoolX2 = 3.5*fgkmm;
315const Double_t AliITSv11GeometrySDD::fgkLVcoolY2 = 8.7*fgkmm;
316const Double_t AliITSv11GeometrySDD::fgkLVcoolZ2 = 2.3*fgkmm;
effd7456 317
73dfc864 318const Double_t AliITSv11GeometrySDD::fgkLVcoolX3 = 4.75*fgkmm;
319const Double_t AliITSv11GeometrySDD::fgkLVcoolY3 = 3.1*fgkmm; //+0.1=glue
108bd0fe 320const Double_t AliITSv11GeometrySDD::fgkLVcoolPosY = 6.5*fgkmm;
321
322// HV card :
323const Double_t AliITSv11GeometrySDD::fgkHVCardCeramX = 54.01*fgkmm;
324const Double_t AliITSv11GeometrySDD::fgkHVCardCeramY = 40.89*fgkmm;
325const Double_t AliITSv11GeometrySDD::fgkHVCardCeramZ = 0.7*fgkmm; // ???
326
327const Double_t AliITSv11GeometrySDD::fgkHVCardCapa1X = 6.8*fgkmm;
328const Double_t AliITSv11GeometrySDD::fgkHVCardCapa1Z = 1.*fgkmm; // ???
329const Double_t AliITSv11GeometrySDD::fgkHVCardCapa1Ymid = 4.1*fgkmm;
330const Double_t AliITSv11GeometrySDD::fgkHVCardCapa1Yend = 0.95*fgkmm; // doesn't take into account the soldering
331const Double_t AliITSv11GeometrySDD::fgkHVCardCapa1PosX = 13.1*fgkmm;
332const Double_t AliITSv11GeometrySDD::fgkHVCardCapa1PosY = 14.5*fgkmm;
333
334const Double_t AliITSv11GeometrySDD::fgkHVCardCapa2X = 6.8*fgkmm;
335const Double_t AliITSv11GeometrySDD::fgkHVCardCapa2Z = 1.*fgkmm; // ???
336const Double_t AliITSv11GeometrySDD::fgkHVCardCapa2Ymid = 2.9*fgkmm;
337const Double_t AliITSv11GeometrySDD::fgkHVCardCapa2Yend = 0.95*fgkmm;
338const Double_t AliITSv11GeometrySDD::fgkHVCardCapa2PosX = -12.6*fgkmm;
339const Double_t AliITSv11GeometrySDD::fgkHVCardCapa2PosY = 16.54*fgkmm;
340
341const Double_t AliITSv11GeometrySDD::fgkHVCardCapa3Xmid = 3.0*fgkmm;
342const Double_t AliITSv11GeometrySDD::fgkHVCardCapa3Xend = 0.91*fgkmm;
343const Double_t AliITSv11GeometrySDD::fgkHVCardCapa3Z = 2.*fgkmm; // ???
344const Double_t AliITSv11GeometrySDD::fgkHVCardCapa3Y = 3.43*fgkmm;
345
346const Double_t AliITSv11GeometrySDD::fgkHVCardCapa3PosX1 = 14.6*fgkmm;
347const Double_t AliITSv11GeometrySDD::fgkHVCardCapa3PosX2 = 7.2*fgkmm;
348const Double_t AliITSv11GeometrySDD::fgkHVCardCapa3PosX3 = 2.52*fgkmm;
349const Double_t AliITSv11GeometrySDD::fgkHVCardCapa3PosX4 = -4.96*fgkmm;
350const Double_t AliITSv11GeometrySDD::fgkHVCardCapa3PosX5 = -13.82*fgkmm;
351const Double_t AliITSv11GeometrySDD::fgkHVCardCapa3PosY1 = 6.27*fgkmm;
352const Double_t AliITSv11GeometrySDD::fgkHVCardCapa3PosY2 = 0.7*fgkmm;
353const Double_t AliITSv11GeometrySDD::fgkHVCardCapa3PosY3 = 9.1*fgkmm;
354
355const Double_t AliITSv11GeometrySDD::fgkHVCardCool1X = 14.*fgkmm;
356const Double_t AliITSv11GeometrySDD::fgkHVCardCool1Y = 9.5*fgkmm;
357const Double_t AliITSv11GeometrySDD::fgkHVCardCool1Z = 2.*fgkmm;
358const Double_t AliITSv11GeometrySDD::fgkHVCardCool2X = 14.25*fgkmm;
359const Double_t AliITSv11GeometrySDD::fgkHVCardCool2Y = 3.5*fgkmm;
360const Double_t AliITSv11GeometrySDD::fgkHVCardCool2Z = 4.5*fgkmm;
361const Double_t AliITSv11GeometrySDD::fgkHVCardCool3X = 4.5*fgkmm;
362const Double_t AliITSv11GeometrySDD::fgkHVCardCool3Y = 3.5*fgkmm;
363const Double_t AliITSv11GeometrySDD::fgkHVCardCool3Z = 7.2*fgkmm;
364const Double_t AliITSv11GeometrySDD::fgkHVCardCoolDY = 6.*fgkmm;
365
73dfc864 366const Double_t AliITSv11GeometrySDD::fgkCarlosSuppX1 = 19.5*fgkmm;
367const Double_t AliITSv11GeometrySDD::fgkCarlosSuppY1 = 2*fgkmm;
368const Double_t AliITSv11GeometrySDD::fgkCarlosSuppX2 = 35.*fgkmm;
369const Double_t AliITSv11GeometrySDD::fgkCarlosSuppY2 = 3.9*fgkmm;
370const Double_t AliITSv11GeometrySDD::fgkCarlosSuppZ = 17.*fgkmm;
371const Double_t AliITSv11GeometrySDD::fgkCarlosSuppAngle = 45;
372const Double_t AliITSv11GeometrySDD::fgkCarlosSuppX3 = 4.5*fgkmm;
373const Double_t AliITSv11GeometrySDD::fgkCarlosSuppY3 = 3.*fgkmm;
374const Double_t AliITSv11GeometrySDD::fgkCarlosSuppZ3 = 12.*fgkmm;
108bd0fe 375const Double_t AliITSv11GeometrySDD::fgkCarlosSuppTopLen = 8.65*fgkmm;
376
73dfc864 377// screws fixing boards to the end-ladder on the U tube
378const Double_t AliITSv11GeometrySDD::fgkLittleScrewHeadR = 1.85*fgkmm;
379const Double_t AliITSv11GeometrySDD::fgkLittleScrewHeadH = 1.5*fgkmm;
380const Double_t AliITSv11GeometrySDD::fgkLittleScrewR = 0.7*fgkmm;
381const Double_t AliITSv11GeometrySDD::fgkShiftLittleScrewLV = 3*fgkmm; // ???
382const Double_t AliITSv11GeometrySDD::fgkLittleLVScrewHeadR = 1.2*fgkmm; // ???
383
384// CARLOS board
385const Double_t AliITSv11GeometrySDD::fgkCarlosCardX1 = (25.50+28.50)*fgkmm; // length (first part of Carlos card)
386const Double_t AliITSv11GeometrySDD::fgkCarlosCardY1 = 1.6*fgkmm; // thickness
387const Double_t AliITSv11GeometrySDD::fgkCarlosCardZ1 = 40.8*fgkmm; // width
388const Double_t AliITSv11GeometrySDD::fgkCarlosCardCuY = 0.1*fgkmm; // thickness of Cu layer (strips)
389const Double_t AliITSv11GeometrySDD::fgkCarlosCardX2 = 25.50*fgkmm; // length (2nd part of Carlos card)
390const Double_t AliITSv11GeometrySDD::fgkCarlosCardZ2 = 8.20*fgkmm; // width
391
392const Double_t AliITSv11GeometrySDD::fgkCarlosCardChipSiThick = 0.1*fgkmm; // ??? idem for all chips ???
393const Double_t AliITSv11GeometrySDD::fgkCarlosCardShift = 9*fgkmm; // ??? shift in z w.r.t. heat bridge
394
395// size and position of various chips on carlos end-ladder board
396const Double_t AliITSv11GeometrySDD::fgkCarlosU1X = 13*fgkmm;
397const Double_t AliITSv11GeometrySDD::fgkCarlosU1Y = 1.68*fgkmm;
398const Double_t AliITSv11GeometrySDD::fgkCarlosU1Z = 13*fgkmm;
399const Double_t AliITSv11GeometrySDD::fgkCarlosU1posX = 18.4*fgkmm;
400const Double_t AliITSv11GeometrySDD::fgkCarlosU1posZ = -7.2*fgkmm;
401
402const Double_t AliITSv11GeometrySDD::fgkCarlosU2X = 13.75*fgkmm;
403const Double_t AliITSv11GeometrySDD::fgkCarlosU2Y = 1.60*fgkmm;
404const Double_t AliITSv11GeometrySDD::fgkCarlosU2Z = 13.85*fgkmm;
405const Double_t AliITSv11GeometrySDD::fgkCarlosU2posX = -0.375*fgkmm;
406const Double_t AliITSv11GeometrySDD::fgkCarlosU2posZ = -9.725*fgkmm;
407
408const Double_t AliITSv11GeometrySDD::fgkCarlosU3X = 5*fgkmm;
409const Double_t AliITSv11GeometrySDD::fgkCarlosU3Y = 1.*fgkmm;
410const Double_t AliITSv11GeometrySDD::fgkCarlosU3Z = 5*fgkmm;
411const Double_t AliITSv11GeometrySDD::fgkCarlosU3posX = 6.4*fgkmm;
412const Double_t AliITSv11GeometrySDD::fgkCarlosU3posZ = 9.9*fgkmm;
413
414// U4 like U3
415const Double_t AliITSv11GeometrySDD::fgkCarlosU4posX = -12*fgkmm;
416const Double_t AliITSv11GeometrySDD::fgkCarlosU4posZ = 3.6*fgkmm;
417
418const Double_t AliITSv11GeometrySDD::fgkCarlosU17X = 16*fgkmm;
419const Double_t AliITSv11GeometrySDD::fgkCarlosU17Y = 3.5*fgkmm;
420const Double_t AliITSv11GeometrySDD::fgkCarlosU17Z = 10.9*fgkmm;
421const Double_t AliITSv11GeometrySDD::fgkCarlosU17posX = -17.84*fgkmm;
422const Double_t AliITSv11GeometrySDD::fgkCarlosU17posZ = -10.95*fgkmm;
423
424const Double_t AliITSv11GeometrySDD::fgkCarlosU35X = 4*fgkmm;
425const Double_t AliITSv11GeometrySDD::fgkCarlosU35Y = 1.*fgkmm;
426const Double_t AliITSv11GeometrySDD::fgkCarlosU35Z = 4*fgkmm;
427const Double_t AliITSv11GeometrySDD::fgkCarlosU35posX = -21.6*fgkmm;
428const Double_t AliITSv11GeometrySDD::fgkCarlosU35posZ = 2.3*fgkmm;
429
430const Double_t AliITSv11GeometrySDD::fgkCarlosU36X = 6*fgkmm;
431const Double_t AliITSv11GeometrySDD::fgkCarlosU36Y = 1.*fgkmm;
432const Double_t AliITSv11GeometrySDD::fgkCarlosU36Z = 6*fgkmm;
433const Double_t AliITSv11GeometrySDD::fgkCarlosU36posX = -21.6*fgkmm;
434const Double_t AliITSv11GeometrySDD::fgkCarlosU36posZ = 9.6*fgkmm;
435
436const Double_t AliITSv11GeometrySDD::fgkCarlosQZ1X = 8*fgkmm;
437const Double_t AliITSv11GeometrySDD::fgkCarlosQZ1Y = 1.7*fgkmm; // look thicker than design number (0.7) ! ???
438const Double_t AliITSv11GeometrySDD::fgkCarlosQZ1Z = 3.7*fgkmm;
439const Double_t AliITSv11GeometrySDD::fgkCarlosQZ1posX = -12*fgkmm;
440const Double_t AliITSv11GeometrySDD::fgkCarlosQZ1posZ = 10.6*fgkmm;
441
442// distance from the heat bridge center to the card center :
443const Double_t AliITSv11GeometrySDD::fgkCarlosCard2HeatBridge = fgkCarlosSuppY2/2+fgkCarlosCardY1/2+fgkCarlosU1Y+0.1*fgkmm;
444
445// some pieces at the end of the carbon fiber ladder
446 const Double_t AliITSv11GeometrySDD::fgkCoolPipeLay3Len = 467.*fgkmm; // ???
447 const Double_t AliITSv11GeometrySDD::fgkCoolPipeLay4Len = 616.*fgkmm; // ???
448 const Double_t AliITSv11GeometrySDD::fgkHVguideX1 = 42.5*fgkmm;
449 const Double_t AliITSv11GeometrySDD::fgkHVguideY1 = 7.*fgkmm;
450 const Double_t AliITSv11GeometrySDD::fgkHVguideZ1 = 10.*fgkmm;
451 const Double_t AliITSv11GeometrySDD::fgkHVguideZ2 = 6.*fgkmm;
452 const Double_t AliITSv11GeometrySDD::fgkHVguideDX = -8.5*fgkmm;
453 const Double_t AliITSv11GeometrySDD::fgkHVguideSuppFullZ = 37.5*fgkmm;
454
455// Cooling connector between phynox and plastic cooling water tubes
456const Double_t AliITSv11GeometrySDD::fgkConnectorCoolTubeRmin = 1 *fgkmm;
457const Double_t AliITSv11GeometrySDD::fgkConnectorCoolTubeR1 = 2.5*fgkmm; // ???
458const Double_t AliITSv11GeometrySDD::fgkConnectorCoolTubeL1 = 3.*fgkmm; // ???
459const Double_t AliITSv11GeometrySDD::fgkConnectorCoolTubeR2 = 3.5*fgkmm; // ???
460const Double_t AliITSv11GeometrySDD::fgkConnectorCoolTubeL2 = 2.*fgkmm; // ???
461const Double_t AliITSv11GeometrySDD::fgkConnectorCoolTubeR3 = 3.*fgkmm; // ???
462const Double_t AliITSv11GeometrySDD::fgkConnectorCoolTubeL3 = 5 *fgkmm; // ???
108bd0fe 463
c789ee28 464
e118532f 465// parameters for coding SDD cables on SDD and SSD cones
466const Double_t AliITSv11GeometrySDD::fgkSectionCuPerMod = 3*2*0.006 + 3*2*0.0005 + 2*0.002;
467// copper : LV + signal + HV(HV ???)
468const Double_t AliITSv11GeometrySDD::fgkSectionPlastPerMod = (TMath::Pi()*(3*0.36*0.36/4 + 3*0.21*0.21/4 + 2*0.115*0.115/4)
469 - fgkSectionCuPerMod);
470
471const Double_t AliITSv11GeometrySDD::fgkSectionGlassPerMod = 3*0.006; // ???
c890eba4 472const Double_t AliITSv11GeometrySDD::fgkSectionCoolPolyuEL = 0.4672;
473const Double_t AliITSv11GeometrySDD::fgkSectionCoolWaterEL = 0.3496;
d485d5bf 474const Double_t AliITSv11GeometrySDD::fgkEndLadderEarthCableR = 0.5*fgkmm;
e118532f 475// (sections are given in cm square)
476const Double_t AliITSv11GeometrySDD::fgkCableBendRatio = 1.3; // ??? this factor account for the bending of cables
9c8369f9 477const Double_t AliITSv11GeometrySDD::fgkHybridAlFoilThick = 0.1*fgkmm; // Thickness of Al foil on hybrid side - TO BE CHECKED
478const Double_t AliITSv11GeometrySDD::fgkHybridAlFoilWide = 4.2*fgkmm; // Width of Al foil on hybrid side - from digitCableA
479const Double_t AliITSv11GeometrySDD::fgkHybridAlFoilSide = 2.0*fgkmm; // Side length of Al foil on hybrid side
e118532f 480
481const Double_t AliITSv11GeometrySDD::fgkConeSDDr1 = 11.87574*fgkcm;
482const Double_t AliITSv11GeometrySDD::fgkConeSDDr2 = 26.07574*fgkcm;
483const Double_t AliITSv11GeometrySDD::fgkConeSDDz1 = 3.36066*fgkcm + 186.0*fgkmm + 0.5*790.0*fgkmm - 19.18934*fgkcm - 1.6;
484const Double_t AliITSv11GeometrySDD::fgkConeSDDz2 = 17.56066*fgkcm + 186.0*fgkmm + 0.5*790.0*fgkmm - 19.18934*fgkcm - 1.6;
485// These last parameters come from cone's code and define the slope
486// and position of the SDD cone end. For some unknown reason, this doesn't
487// allow to stick on the SDD cone. This has to be checked when a correct
488// version of the cone is available ... For now 'm applying some approximative
489// corrections
490
491const Double_t AliITSv11GeometrySDD::fgkSDDCableR1 = 16*fgkcm; // ??? // part 1 of "cable cone"
492const Double_t AliITSv11GeometrySDD::fgkSDDCableR2 = 23*fgkcm; // ??? // part 1/2 of "cable cone"
493const Double_t AliITSv11GeometrySDD::fgkSDDCableR3 = 26*fgkcm; // ??? // part 2 of "cable cone"
494
495const Double_t AliITSv11GeometrySDD::fgkSDDCableDZint = 3.5*fgkcm;
496const Double_t AliITSv11GeometrySDD::fgkSDDCableR5 = 37*fgkcm; // third part of "cable cone"
497const Double_t AliITSv11GeometrySDD::fgkSDDCableZ5 = 65*fgkcm; // third part of "cable cone"
498
499
500
501
502
503
504
b7943f00 505ClassImp(AliITSv11GeometrySDD)
c789ee28 506
b7943f00 507//________________________________________________________________________
33ddec7d 508AliITSv11GeometrySDD::AliITSv11GeometrySDD():
509 AliITSv11Geometry(),
510 fPinSupport(0),
511 fCoolPipeSupportL(0),
512 fCoolPipeSupportR(0),
108bd0fe 513 fSDDsensor3(0),
514 fSDDsensor4(0),
33ddec7d 515 fBaseThermalBridge(0),
516 fHybrid(0),
c103592b 517 fLadderFoot(0),
73dfc864 518 fCardLVR(0),
519 fCardLVL(0),
520 fCardHV(0),
521 fCardCarlos(0),
522 fRaccordoL(0),
33ddec7d 523 fDigitCableLay3A(0),
524 fDigitCableLay3B(0),
525 fDigitCableLay4A(0),
526 fDigitCableLay4B(0),
527 fMotherVol(0),
528 fAddHybrids(kTRUE),
529 fAddSensors(kTRUE),
530 fAddHVcables(kTRUE),
531 fAddCables(kTRUE),
532 fAddCoolingSyst(kTRUE),
533 fCoolingOn(kTRUE),
534 fAddOnlyLadder3min(-1),
535 fAddOnlyLadder3max(-1),
536 fAddOnlyLadder4min(-1),
537 fAddOnlyLadder4max(-1),
108bd0fe 538 fColorCarbonFiber(4),
539 fColorRyton(5),
540 fColorPhynox(7),
541 fColorSilicon(3),
542 fColorAl(7),
543 fColorPolyhamide(5),
33ddec7d 544 fColorGlass(2),
108bd0fe 545 fColorSMD(12),
546 fColorSMDweld(17),
547 fColorStesalite(20),
33ddec7d 548 fLay3LadderUnderSegDH(0),
549 fLay4LadderUnderSegDH(0),
550 fLay3LaddShortRadius(0),
551 fLay3LaddLongRadius(0),
552 fLay4LaddShortRadius(0),
553 fLay4LaddLongRadius(0)
c789ee28 554{
b7943f00 555 //
556 // Standard constructor
557 //
d8aa7e17 558 fCommonVol[0] = NULL;
559 fCommonVol[1] = NULL;
560 fCommonTr[0] = NULL;
561 fCommonTr[1] = NULL;
562 for (Int_t i=0; i<fgkNladdSegCommonVol; i++){
563 fLaddSegCommonVol[i] = NULL;
564 fLaddSegCommonTr[i] = NULL;
565 }
b7943f00 566 SetParameters();
531d6cdc 567}
c789ee28 568
108bd0fe 569
b7943f00 570//________________________________________________________________________
571AliITSv11GeometrySDD::AliITSv11GeometrySDD(Int_t debug) :
33ddec7d 572 AliITSv11Geometry(debug),
573 fPinSupport(0),
574 fCoolPipeSupportL(0),
575 fCoolPipeSupportR(0),
108bd0fe 576 fSDDsensor3(0),
577 fSDDsensor4(0),
33ddec7d 578 fBaseThermalBridge(0),
579 fHybrid(0),
c103592b 580 fLadderFoot(0),
73dfc864 581 fCardLVR(0),
582 fCardLVL(0),
583 fCardHV(0),
584 fCardCarlos(0),
585 fRaccordoL(0),
33ddec7d 586 fDigitCableLay3A(0),
587 fDigitCableLay3B(0),
588 fDigitCableLay4A(0),
589 fDigitCableLay4B(0),
590 fMotherVol(0),
591 fAddHybrids(kTRUE),
592 fAddSensors(kTRUE),
593 fAddHVcables(kTRUE),
594 fAddCables(kTRUE),
595 fAddCoolingSyst(kTRUE),
b7943f00 596 fCoolingOn(kTRUE),
33ddec7d 597 fAddOnlyLadder3min(-1),
598 fAddOnlyLadder3max(-1),
599 fAddOnlyLadder4min(-1),
600 fAddOnlyLadder4max(-1),
108bd0fe 601 fColorCarbonFiber(4),
602 fColorRyton(5),
603 fColorPhynox(7),
604 fColorSilicon(3),
605 fColorAl(7),
606 fColorPolyhamide(5),
33ddec7d 607 fColorGlass(2),
108bd0fe 608 fColorSMD(12),
609 fColorSMDweld(17),
610 fColorStesalite(20),
33ddec7d 611 fLay3LadderUnderSegDH(0),
612 fLay4LadderUnderSegDH(0),
613 fLay3LaddShortRadius(0),
614 fLay3LaddLongRadius(0),
615 fLay4LaddShortRadius(0),
616 fLay4LaddLongRadius(0)
c789ee28 617{
b7943f00 618 //
619 // Constructor setting debugging level
620 //
d8aa7e17 621 fCommonVol[0] = NULL;
622 fCommonVol[1] = NULL;
623 fCommonTr[0] = NULL;
624 fCommonTr[1] = NULL;
625 for (Int_t i=0; i<fgkNladdSegCommonVol; i++){
626 fLaddSegCommonVol[i] = NULL;
627 fLaddSegCommonTr[i] = NULL;
628 }
b7943f00 629 SetParameters();
531d6cdc 630}
c789ee28 631
c789ee28 632//________________________________________________________________________
b7943f00 633AliITSv11GeometrySDD::AliITSv11GeometrySDD(const AliITSv11GeometrySDD &s) :
108bd0fe 634 AliITSv11Geometry(s.GetDebug()),
33ddec7d 635 fPinSupport(s.fPinSupport),
636 fCoolPipeSupportL(s.fCoolPipeSupportL),
637 fCoolPipeSupportR(s.fCoolPipeSupportR),
108bd0fe 638 fSDDsensor3(s.fSDDsensor3),
639 fSDDsensor4(s.fSDDsensor4),
33ddec7d 640 fBaseThermalBridge(s.fBaseThermalBridge),
641 fHybrid(s.fHybrid),
c103592b 642 fLadderFoot(s.fLadderFoot),
73dfc864 643 fCardLVR(s.fCardLVR),
644 fCardLVL(s.fCardLVL),
645 fCardHV(s.fCardHV),
646 fCardCarlos(s.fCardCarlos),
647 fRaccordoL(s.fRaccordoL),
33ddec7d 648 fDigitCableLay3A(s.fDigitCableLay3A),
649 fDigitCableLay3B(s.fDigitCableLay3B),
650 fDigitCableLay4A(s.fDigitCableLay4A),
651 fDigitCableLay4B(s.fDigitCableLay4B),
652 fMotherVol(s.fMotherVol),
653 fAddHybrids(s.fAddHybrids),
654 fAddSensors(s.fAddSensors),
655 fAddHVcables(s.fAddHVcables),
656 fAddCables(s.fAddCables),
657 fAddCoolingSyst(s.fAddCoolingSyst),
658 fCoolingOn(s.fCoolingOn),
659 fAddOnlyLadder3min(s.fAddOnlyLadder3min),
660 fAddOnlyLadder3max(s.fAddOnlyLadder3max),
661 fAddOnlyLadder4min(s.fAddOnlyLadder4min),
108bd0fe 662 fAddOnlyLadder4max(s.fAddOnlyLadder4max),
33ddec7d 663 fColorCarbonFiber(s.fColorCarbonFiber),
664 fColorRyton(s.fColorRyton),
665 fColorPhynox(s.fColorPhynox),
666 fColorSilicon(s.fColorSilicon),
667 fColorAl(s.fColorAl),
668 fColorPolyhamide(s.fColorPolyhamide),
669 fColorGlass(s.fColorGlass),
670 fColorSMD(s.fColorSMD),
671 fColorSMDweld(s.fColorSMDweld),
108bd0fe 672 fColorStesalite(s.fColorStesalite),
33ddec7d 673 fLay3LadderUnderSegDH(s.fLay3LadderUnderSegDH),
674 fLay4LadderUnderSegDH(s.fLay4LadderUnderSegDH),
675 fLay3LaddShortRadius(s.fLay3LaddShortRadius),
676 fLay3LaddLongRadius(s.fLay3LaddLongRadius),
677 fLay4LaddShortRadius(s.fLay4LaddShortRadius),
678 fLay4LaddLongRadius(s.fLay4LaddLongRadius)
b7943f00 679{
33ddec7d 680 // Copy Constructor
681 // do only a "shallow copy" ...
d8aa7e17 682 fCommonVol[0] = s.fCommonVol[0];
683 fCommonVol[1] = s.fCommonVol[1];
684 fCommonTr[0] = s.fCommonTr[0];
685 fCommonTr[1] = s.fCommonTr[1];
686 for (Int_t i=0; i<fgkNladdSegCommonVol; i++){
687 fLaddSegCommonVol[i] = s.fLaddSegCommonVol[i];
688 fLaddSegCommonTr[i] = s.fLaddSegCommonTr[i];
689 }
b7943f00 690 SetParameters();
691}
c789ee28 692
b7943f00 693//________________________________________________________________________
694AliITSv11GeometrySDD& AliITSv11GeometrySDD::
695operator=(const AliITSv11GeometrySDD &s) {
696 // Assignment operator
697 if(&s == this) return *this;
698 fMotherVol = s.fMotherVol;
699 fAddHybrids = s.fAddHybrids;
700 fAddSensors = s.fAddSensors;
701 fAddHVcables = s.fAddHVcables;
702 fAddCables = s.fAddCables;
703 fAddCoolingSyst = s.fAddCoolingSyst;
704 fCoolingOn = s.fCoolingOn;
705 fAddOnlyLadder3min = s.fAddOnlyLadder3min;
706 fAddOnlyLadder3max = s.fAddOnlyLadder3max;
707 fAddOnlyLadder4min = s.fAddOnlyLadder4min;
708 fAddOnlyLadder4max = s.fAddOnlyLadder4max;
709 return *this;
710}
db486a6e 711
c789ee28 712//________________________________________________________________________
b7943f00 713AliITSv11GeometrySDD::~AliITSv11GeometrySDD() {
714 // Look like a destructor
715 // Smell like a destructor
716 // And actually is the destructor
717 if (fDigitCableLay3A) delete [] fDigitCableLay3A;
718 if (fDigitCableLay3B) delete [] fDigitCableLay3B;
719 if (fDigitCableLay4A) delete [] fDigitCableLay4A;
720 if (fDigitCableLay4B) delete [] fDigitCableLay4B;
531d6cdc 721}
c789ee28 722
c789ee28 723//________________________________________________________________________
b7943f00 724void AliITSv11GeometrySDD::SetParameters() {
725 //
726 // Define display colors and the non constant geometry parameters
727 //
728
4249b2ee 729 Double_t detLadderDist = 8.4*fgkmm;
b7943f00 730
731 fLay3LadderUnderSegDH = detLadderDist - (fgkWaHVcableAlThick+fgkWaHVcablePolyThick);
732 fLay4LadderUnderSegDH = detLadderDist - (fgkWaHVcableAlThick+fgkWaHVcablePolyThick);
733
734 // radius from the center to the CF ladder :
735 fLay3LaddShortRadius = (fgkLay3DetShortRadius
736 + fgkLadWaferSep+2*fgkWaferThickness
737 + detLadderDist);
738 fLay3LaddLongRadius = (fgkLay3DetLongRadius
739 + fgkLadWaferSep+2*fgkWaferThickness
740 + detLadderDist);
741 fLay4LaddShortRadius = (fgkLay4DetShortRadius
742 + fgkLadWaferSep+2*fgkWaferThickness
743 + detLadderDist);
744 fLay4LaddLongRadius = (fgkLay4DetLongRadius
745 + fgkLadWaferSep+2*fgkWaferThickness
746 + detLadderDist);
c789ee28 747
748 fLay3sensorZPos[0]= ( 35.8+72.4+75.8 )*fgkmm;
749 fLay3sensorZPos[1]= ( 35.8+72.4 )*fgkmm;
750 fLay3sensorZPos[2]= ( 35.8 )*fgkmm;
751 fLay3sensorZPos[3]= ( -37.9 )*fgkmm;
752 fLay3sensorZPos[4]= ( -37.9-74.9 )*fgkmm;
753 fLay3sensorZPos[5]= ( -37.9-74.9-71.1 )*fgkmm;
754
755 fLay4sensorZPos[0] = ( 38.5+73.2+75.4+71.6 )*fgkmm;
756 fLay4sensorZPos[1] = ( 38.5+73.2+75.4 )*fgkmm;
757 fLay4sensorZPos[2] = ( 38.5+73.2 )*fgkmm;
758 fLay4sensorZPos[3] = ( 38.5 )*fgkmm;
759 fLay4sensorZPos[4] = ( -35.6 )*fgkmm;
760 fLay4sensorZPos[5] = ( -35.6-74.8 )*fgkmm;
761 fLay4sensorZPos[6] = ( -35.6-74.8-72.4 )*fgkmm;
762 fLay4sensorZPos[7] = ( -35.6-74.8-72.4-76. )*fgkmm;
531d6cdc 763}
764
c789ee28 765
c789ee28 766//________________________________________________________________________
b7943f00 767TGeoMedium* AliITSv11GeometrySDD::GetMedium(const char* mediumName) {
768 //
769 // Called to get a medium, checks that it exists.
770 // If not, prints an error and returns 0
771 //
c789ee28 772
531d6cdc 773 char ch[30];
6932f314 774 snprintf(ch, 30, "ITS_%s",mediumName);
531d6cdc 775 TGeoMedium* medium = gGeoManager->GetMedium(ch);
b7943f00 776 if (! medium)
777 printf("Error(AliITSv11GeometrySDD)::medium %s not found !\n", mediumName);
b7943f00 778 return medium;
531d6cdc 779}
780
c789ee28 781
fa4639a3 782//________________________________________________________________________
783Int_t AliITSv11GeometrySDD::GetLay3NLadders() const{
784 // Get the actual number of ladder in layer 3
785 if ( (fAddOnlyLadder3min<0) ||
786 (fAddOnlyLadder3min >= fgkLay3Nladd) ||
787 (fAddOnlyLadder3max<0) ||
788 (fAddOnlyLadder3max >= fgkLay3Nladd) )
789 return fgkLay3Nladd;
790 else return (fAddOnlyLadder3max-fAddOnlyLadder3min+1);
791}
792
531d6cdc 793
fa4639a3 794//________________________________________________________________________
795Int_t AliITSv11GeometrySDD::GetLay4NLadders() const{
796 // Get the actual number of ladder in layer 4
797 if ( (fAddOnlyLadder4min<0) ||
798 (fAddOnlyLadder4min >= fgkLay4Nladd) ||
799 (fAddOnlyLadder4max<0) ||
800 (fAddOnlyLadder4max >= fgkLay4Nladd) )
801 return fgkLay4Nladd;
802 else return (fAddOnlyLadder4max-fAddOnlyLadder4min+1);
803}
804
531d6cdc 805
b7943f00 806//________________________________________________________________________
807void AliITSv11GeometrySDD::CreateBasicObjects() {
808 //
809 // Create basics objets which will be assembled together
810 // in Layer3 and Layer4 functions
811 //
812
531d6cdc 813
fa4639a3 814 fDigitCableLay3A = new AliITSv11GeomCableFlat[fgkLay3Ndet];
815 fDigitCableLay3B = new AliITSv11GeomCableFlat[fgkLay3Ndet];
816 fDigitCableLay4A = new AliITSv11GeomCableFlat[fgkLay4Ndet];
817 fDigitCableLay4B = new AliITSv11GeomCableFlat[fgkLay4Ndet];
818
b7943f00 819 fPinSupport = CreatePinSupport();
820 fCoolPipeSupportL = CreateCoolPipeSupportL();
821 fCoolPipeSupportR = CreateCoolPipeSupportR();
108bd0fe 822 CreateSDDsensor();
b7943f00 823 fBaseThermalBridge = CreateBaseThermalBridge();
824 fHybrid = CreateHybrid(0);
825
108bd0fe 826 TGeoMedium *carbonFiberLadderStruct = GetMedium("SDD C AL (M55J)$"); //ITSsddCarbonM55J
73dfc864 827 TGeoMedium *polyhamideSDD = GetMedium("SDDKAPTON (POLYCH2)$");//ITSsddKAPTON_POLYCH2
828 TGeoMedium *alSDD = GetMedium("AL$"); //ITSal
9c8369f9 829 TGeoMedium *stainless = GetMedium("AISI304L$"); // for screws
73dfc864 830 TGeoMedium *coolerMediumSDD = GetMedium("WATER$");
9c8369f9 831 TGeoMedium *raccordMedium = GetMedium("INOX$"); // same as AISI 316-L
b7943f00 832
833 //********************************************************************
834 // pieces of the carbon fiber structure
835 //********************************************************************
836 Double_t dy = fgkLadderSegBoxDH/2;
837 Double_t triangleHeight = fgkLadderHeight - fgkLadderBeamRadius;
838 Double_t halfTheta = TMath::ATan( 0.5*fgkLadderWidth/triangleHeight );
839 Double_t alpha = TMath::Pi()*3./4. - halfTheta/2.;
840 Double_t beta = (TMath::Pi() - 2.*halfTheta)/4.;
841 Double_t dYTranslation = (fgkLadderHeight/2.
842 -0.5*fgkLadderWidth*TMath::Tan(beta)
843 -fgkLadderBeamRadius);
844 Double_t distCenterSideDown = 0.5*fgkLadderWidth/TMath::Cos(beta);
845
846 //--- the top V of the Carbon Fiber Ladder (segment)
8f20b5e4 847 TGeoArb8 *cfLaddTop1 = CreateLadderSide( "CFladdTopCornerVol1shape",
848 fgkSegmentLength/2., halfTheta,
b7943f00 849 -1, fgkLadderLa, fgkLadderHa, fgkLadderl);
850 TGeoVolume *cfLaddTopVol1 = new TGeoVolume("ITSsddCFladdTopCornerVol1",
851 cfLaddTop1,carbonFiberLadderStruct);
8f20b5e4 852 TGeoArb8 *cfLaddTop2 = CreateLadderSide( "CFladdTopCornerVol2shape",
853 fgkSegmentLength/2., halfTheta,
b7943f00 854 1, fgkLadderLa, fgkLadderHa, fgkLadderl);
855 TGeoVolume *cfLaddTopVol2 = new TGeoVolume("ITSsddCFladdTopCornerVol2",
856 cfLaddTop2, carbonFiberLadderStruct);
857 cfLaddTopVol1->SetLineColor(fColorCarbonFiber);
858 cfLaddTopVol2->SetLineColor(fColorCarbonFiber);
859 TGeoTranslation *trTop1 = new TGeoTranslation(0, fgkLadderHeight/2-dy, 0);
860
861 //--- the 2 side V
8f20b5e4 862 TGeoArb8 *cfLaddSide1 = CreateLadderSide( "CFladdSideCornerVol1shape",
863 fgkSegmentLength/2., beta, -1,
b7943f00 864 fgkLadderLb, fgkLadderHb, fgkLadderl);
865 TGeoVolume *cfLaddSideVol1 = new TGeoVolume( "ITSsddCFladdSideCornerVol1",
866 cfLaddSide1,carbonFiberLadderStruct);
8f20b5e4 867 TGeoArb8 *cfLaddSide2 = CreateLadderSide( "CFladdSideCornerVol2shape",
868 fgkSegmentLength/2., beta, 1,
b7943f00 869 fgkLadderLb, fgkLadderHb, fgkLadderl);
870 TGeoVolume *cfLaddSideVol2 = new TGeoVolume( "ITSsddCFladdSideCornerVol2",
871 cfLaddSide2,carbonFiberLadderStruct);
872 cfLaddSideVol1->SetLineColor(fColorCarbonFiber);
873 cfLaddSideVol2->SetLineColor(fColorCarbonFiber);
874 TGeoCombiTrans *ctSideR = CreateCombiTrans("", distCenterSideDown, 0,
875 alpha*TMath::RadToDeg());
876 AddTranslationToCombiTrans(ctSideR, 0, -dYTranslation-dy, 0);
877 TGeoCombiTrans *ctSideL = CreateCombiTrans("", distCenterSideDown,0,
878 -alpha*TMath::RadToDeg());
879 AddTranslationToCombiTrans(ctSideL, 0, -dYTranslation-dy, 0);
880
881 //--- The beams
882 // Beams on the sides
883 Double_t beamPhiPrime = TMath::ASin(1./TMath::Sqrt( (1+TMath::Sin(2*beta)*
884 TMath::Sin(2*beta)/(TanD(fgkBeamSidePhi)*TanD(fgkBeamSidePhi))) ));
885 //cout<<"Phi prime = "<<beamPhiPrime*TMath::RadToDeg()<<endl;
886 Double_t beamLength = TMath::Sqrt( fgkLadderHeight*fgkLadderHeight/
887 ( TMath::Sin(beamPhiPrime)*TMath::Sin(beamPhiPrime))
888 + fgkLadderWidth*fgkLadderWidth/4.)-fgkLadderLa/2-fgkLadderLb/2;
889 TGeoTubeSeg *sideBeamS = new TGeoTubeSeg(0, fgkLadderBeamRadius,beamLength/2.,
890 0, 180);
891 TGeoVolume *sideBeam = new TGeoVolume("ITSsddCFSideBeamVol", sideBeamS,
892 carbonFiberLadderStruct);
893 sideBeam->SetLineColor(fColorCarbonFiber);
894
895 //Euler rotation : about Z, then new X, then new Z
531d6cdc 896 TGeoRotation *beamRot1 = new TGeoRotation("", 90-2.*beta*TMath::RadToDeg(),
897 -beamPhiPrime*TMath::RadToDeg(),-90);
898 TGeoRotation *beamRot2 = new TGeoRotation("", 90-2.*beta*TMath::RadToDeg(),
899 beamPhiPrime*TMath::RadToDeg(), -90);
900 TGeoRotation *beamRot3 = new TGeoRotation("", 90+2.*beta*TMath::RadToDeg(),
901 beamPhiPrime*TMath::RadToDeg(), -90);
902 TGeoRotation *beamRot4 = new TGeoRotation("", 90+2.*beta*TMath::RadToDeg(),
903 -beamPhiPrime*TMath::RadToDeg(),-90);
b7943f00 904
905 TGeoCombiTrans *beamTransf[8];
906 beamTransf[0] = new TGeoCombiTrans( 0.5*triangleHeight*
907 TMath::Tan(halfTheta),
908 fgkLadderBeamRadius/2. - dy,
531d6cdc 909 -3*fgkSegmentLength/8, beamRot1);
73dfc864 910
911 beamTransf[1] = new TGeoCombiTrans( 0.5*triangleHeight*
912 TMath::Tan(halfTheta),
913 fgkLadderBeamRadius/2. - dy,
914 -3*fgkSegmentLength/8, beamRot1);
b7943f00 915 AddTranslationToCombiTrans(beamTransf[1], 0, 0, fgkSegmentLength/2);
916
917 beamTransf[2] = new TGeoCombiTrans(0.5*triangleHeight*
918 TMath::Tan(halfTheta),
919 fgkLadderBeamRadius/2. - dy,
531d6cdc 920 -fgkSegmentLength/8, beamRot2);
73dfc864 921
922 beamTransf[3] = new TGeoCombiTrans(0.5*triangleHeight*
923 TMath::Tan(halfTheta),
924 fgkLadderBeamRadius/2. - dy,
925 -fgkSegmentLength/8, beamRot2);
b7943f00 926 AddTranslationToCombiTrans(beamTransf[3], 0, 0, fgkSegmentLength/2);
927
928 beamTransf[4] = new TGeoCombiTrans(-0.5*triangleHeight*
929 TMath::Tan(halfTheta),
930 fgkLadderBeamRadius/2. - dy,
531d6cdc 931 -3*fgkSegmentLength/8, beamRot3);
73dfc864 932
933 beamTransf[5] = new TGeoCombiTrans(-0.5*triangleHeight*
934 TMath::Tan(halfTheta),
935 fgkLadderBeamRadius/2. - dy,
936 -3*fgkSegmentLength/8, beamRot3);
b7943f00 937 AddTranslationToCombiTrans(beamTransf[5], 0, 0, fgkSegmentLength/2);
938
939 beamTransf[6] = new TGeoCombiTrans(-0.5*triangleHeight*
531d6cdc 940 TMath::Tan(halfTheta),fgkLadderBeamRadius/2.-dy, -fgkSegmentLength/8,beamRot4);
b7943f00 941 beamTransf[7] = new TGeoCombiTrans(-0.5*triangleHeight*
531d6cdc 942 TMath::Tan(halfTheta),fgkLadderBeamRadius/2.-dy,3*fgkSegmentLength/8,beamRot4);
b7943f00 943
944 //--- Beams of the bottom
945 TGeoTubeSeg *bottomBeam1 = new TGeoTubeSeg(0, fgkLadderBeamRadius,
946 fgkLadderWidth/2.-fgkLadderLb/3, 0, 180);
947 TGeoVolume *bottomBeam1Vol = new TGeoVolume("ITSsddBottomBeam1Vol",
948 bottomBeam1, carbonFiberLadderStruct);
949 bottomBeam1Vol->SetLineColor(fColorCarbonFiber);
950 TGeoTubeSeg *bottomBeam2 = new TGeoTubeSeg(0, fgkLadderBeamRadius,
951 fgkLadderWidth/2.-fgkLadderLb/3, 0, 90);
952 TGeoVolume *bottomBeam2Vol = new TGeoVolume("ITSsddBottomBeam2Vol",
953 bottomBeam2, carbonFiberLadderStruct);
954 bottomBeam2Vol->SetLineColor(fColorCarbonFiber);
955 TGeoTubeSeg *bottomBeam3 = new TGeoTubeSeg(0, fgkLadderBeamRadius,
956 0.5*fgkLadderWidth/SinD(fgkBottomBeamAngle)
957 - fgkLadderLb/3, 0, 180);
958 TGeoVolume *bottomBeam3Vol = new TGeoVolume("ITSsddBottomBeam3Vol",
959 bottomBeam3, carbonFiberLadderStruct);
960 bottomBeam3Vol->SetLineColor(fColorCarbonFiber);
961 //bottomBeam3Vol->SetLineColor(2);
531d6cdc 962 TGeoRotation *bottomBeamRot1 = new TGeoRotation("", 90, 90, 90);
963 TGeoRotation *bottomBeamRot2 = new TGeoRotation("",-90, 90, -90);
b7943f00 964
b7943f00 965 TGeoCombiTrans *bottomBeamTransf1 = new TGeoCombiTrans
531d6cdc 966 (0,-(fgkLadderHeight/2-fgkLadderBeamRadius)-dy,0, bottomBeamRot1);
b7943f00 967 TGeoCombiTrans *bottomBeamTransf2 = new TGeoCombiTrans(0,
968 -(fgkLadderHeight/2-fgkLadderBeamRadius)-dy,
531d6cdc 969 -fgkSegmentLength/2, bottomBeamRot1);
b7943f00 970 TGeoCombiTrans *bottomBeamTransf3 = new TGeoCombiTrans(0,
971 -(fgkLadderHeight/2 - fgkLadderBeamRadius)
531d6cdc 972 - dy, fgkSegmentLength/2, bottomBeamRot2);
b7943f00 973 // be careful for beams #3: when "reading" from -z to +z and
974 // from the bottom of the ladder, it should draw a Lambda, and not a V
531d6cdc 975 TGeoRotation *bottomBeamRot4 = new TGeoRotation("", -90, fgkBottomBeamAngle, -90);
976 TGeoRotation *bottomBeamRot5 = new TGeoRotation("" ,-90,-fgkBottomBeamAngle, -90);
b7943f00 977 TGeoCombiTrans *bottomBeamTransf4 = new TGeoCombiTrans
531d6cdc 978 (0,-(fgkLadderHeight/2-fgkLadderBeamRadius)-dy,-fgkSegmentLength/4,bottomBeamRot4);
b7943f00 979 TGeoCombiTrans *bottomBeamTransf5 = new TGeoCombiTrans
531d6cdc 980 (0,-(fgkLadderHeight/2-fgkLadderBeamRadius)-dy,fgkSegmentLength/4, bottomBeamRot5);
b7943f00 981
982 fLaddSegCommonVol[0] = cfLaddTopVol1; fLaddSegCommonTr[0] = trTop1;
983 fLaddSegCommonVol[1] = cfLaddTopVol2; fLaddSegCommonTr[1] = trTop1;
984 fLaddSegCommonVol[2] = cfLaddSideVol1; fLaddSegCommonTr[2] = ctSideR;
985 fLaddSegCommonVol[3] = cfLaddSideVol1; fLaddSegCommonTr[3] = ctSideL;
986 fLaddSegCommonVol[4] = cfLaddSideVol2; fLaddSegCommonTr[4] = ctSideR;
987 fLaddSegCommonVol[5] = cfLaddSideVol2; fLaddSegCommonTr[5] = ctSideL;
988 fLaddSegCommonVol[6] = sideBeam; fLaddSegCommonTr[6] = beamTransf[0];
989 fLaddSegCommonVol[7] = sideBeam; fLaddSegCommonTr[7] = beamTransf[1];
990 fLaddSegCommonVol[8] = sideBeam; fLaddSegCommonTr[8] = beamTransf[2];
991 fLaddSegCommonVol[9] = sideBeam; fLaddSegCommonTr[9] = beamTransf[3];
992 fLaddSegCommonVol[10]= sideBeam; fLaddSegCommonTr[10]= beamTransf[4];
993 fLaddSegCommonVol[11]= sideBeam; fLaddSegCommonTr[11]= beamTransf[5];
994 fLaddSegCommonVol[12]= sideBeam; fLaddSegCommonTr[12]= beamTransf[6];
995 fLaddSegCommonVol[13]= sideBeam; fLaddSegCommonTr[13]= beamTransf[7];
996 fLaddSegCommonVol[14]= bottomBeam1Vol; fLaddSegCommonTr[14]= bottomBeamTransf1;
997 fLaddSegCommonVol[15]= bottomBeam2Vol; fLaddSegCommonTr[15]= bottomBeamTransf2;
998 fLaddSegCommonVol[16]= bottomBeam2Vol; fLaddSegCommonTr[16]= bottomBeamTransf3;
999 fLaddSegCommonVol[17]= bottomBeam3Vol; fLaddSegCommonTr[17]= bottomBeamTransf4;
1000 fLaddSegCommonVol[18]= bottomBeam3Vol; fLaddSegCommonTr[18]= bottomBeamTransf5;
c789ee28 1001
b7943f00 1002
1003 //********************************************************************
1004 // cables
1005 //********************************************************************
1006 char cableName[30];
1007 for (Int_t i=0; i<fgkLay3Ndet; i++) {
6932f314 1008 snprintf(cableName, 30, "digitCableLay3A_%i",i);
b7943f00 1009 fDigitCableLay3A[i].SetName(cableName);
1010 fDigitCableLay3A[i].SetWidth(fgkDigitCablWidth);
1011 fDigitCableLay3A[i].SetThickness(fgkDigitCablPolyThick+fgkDigitCablAlThick);
1012 fDigitCableLay3A[i].SetNLayers(2);
1013 fDigitCableLay3A[i].SetLayer( 0, fgkDigitCablPolyThick, polyhamideSDD,
1014 fColorPolyhamide);
1015 fDigitCableLay3A[i].SetLayer(1, fgkDigitCablAlThick, alSDD, fColorAl);
6932f314 1016 snprintf(cableName, 30, "digitCableLay3B_%i",i);
b7943f00 1017 fDigitCableLay3B[i].SetName(cableName);
1018 fDigitCableLay3B[i].SetWidth(fgkDigitCablWidth);
1019 fDigitCableLay3B[i].SetThickness(fgkDigitCablPolyThick+fgkDigitCablAlThick);
1020 fDigitCableLay3B[i].SetNLayers(2);
1021 fDigitCableLay3B[i].SetLayer( 0, fgkDigitCablPolyThick, polyhamideSDD,
1022 fColorPolyhamide);
1023 fDigitCableLay3B[i].SetLayer(1, fgkDigitCablAlThick, alSDD, fColorAl);
1024 };
1025 for (Int_t i=0; i<fgkLay4Ndet; i++) {
6932f314 1026 snprintf(cableName, 30, "digitCableLay4A_%i",i);
b7943f00 1027 fDigitCableLay4A[i].SetName(cableName);
1028 fDigitCableLay4A[i].SetWidth(fgkDigitCablWidth);
1029 fDigitCableLay4A[i].SetThickness(fgkDigitCablPolyThick+fgkDigitCablAlThick);
1030 fDigitCableLay4A[i].SetNLayers(2);
1031 fDigitCableLay4A[i].SetLayer( 0, fgkDigitCablPolyThick, polyhamideSDD,
1032 fColorPolyhamide);
1033 fDigitCableLay4A[i].SetLayer(1, fgkDigitCablAlThick, alSDD, fColorAl);
6932f314 1034 snprintf(cableName, 30, "digitCableLay4B_%i",i);
b7943f00 1035 fDigitCableLay4B[i].SetName(cableName);
1036 fDigitCableLay4B[i].SetWidth(fgkDigitCablWidth);
1037 fDigitCableLay4B[i].SetThickness(fgkDigitCablPolyThick+fgkDigitCablAlThick);
1038 fDigitCableLay4B[i].SetNLayers(2);
1039 fDigitCableLay4B[i].SetLayer( 0, fgkDigitCablPolyThick, polyhamideSDD,
1040 fColorPolyhamide);
1041 fDigitCableLay4B[i].SetLayer(1, fgkDigitCablAlThick, alSDD, fColorAl);
1042 };
1043 // Well, those digit cables could also include the analog cables
1044 // which have the same width and the same path, at least in the ladder.
1045 // It will gain some computing ressources (less volumes) and some
1046 // coding efforts ... !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1047 // The only thing to do is to change the names and put the correct total
1048 // thicknesses
73dfc864 1049
1050 // some transformations and volumes used in several places
1051 fCommonTr[0] = new TGeoRotation("CarlosSuppRotN",
1052 0, -fgkCarlosSuppAngle, 0);
1053
1054 TGeoTube *littleScrewHead = new TGeoTube("littleScrewHead", 0, fgkLittleScrewHeadR,
1055 fgkLittleScrewHeadH/2);
1056 fCommonVol[0] = new TGeoVolume("vLittleScrewHead",
1057 littleScrewHead, stainless);
1058 fCommonVol[0]->SetLineColor(kGray);
1059
1060 fLadderFoot = CreateLadderFoot();
1061 CreateLVCard();
1062 fCardHV = CreateHVCard(0);
1063 fCardCarlos = CreateCarlosCard(0);
1064
1065 //==================
1066 // link beteen phynox and plastic cooling tubes
1067 //==================
1068
1069 fRaccordoL = new TGeoVolumeAssembly("RaccordoL");
1070 Double_t fullRacLen = fgkConnectorCoolTubeL1+fgkConnectorCoolTubeL2+fgkConnectorCoolTubeL3;
1071 TGeoTube *waterRac = new TGeoTube("waterRac", 0, fgkConnectorCoolTubeRmin, fullRacLen/2);
1072 TGeoVolume * vwaterRac = new TGeoVolume("vwaterRac", waterRac, coolerMediumSDD);
1073 vwaterRac->SetLineColor(kBlue);
1074
1075 TGeoTube *tube1Rac = new TGeoTube("tube1Rac", fgkConnectorCoolTubeRmin,
1076 fgkConnectorCoolTubeR1, fgkConnectorCoolTubeL1/2);
1077 TGeoTube *tube2Rac = new TGeoTube("tube2Rac", fgkConnectorCoolTubeRmin,
1078 fgkConnectorCoolTubeR2, fgkConnectorCoolTubeL2/2);
1079 TGeoTube *tube3Rac = new TGeoTube("tube3Rac", fgkConnectorCoolTubeRmin,
1080 fgkConnectorCoolTubeR3, fgkConnectorCoolTubeL3/2);
1081 TGeoVolume * vtube1Rac = new TGeoVolume("vtube1Rac", tube1Rac, raccordMedium);
1082 TGeoVolume * vtube2Rac = new TGeoVolume("vtube2Rac", tube2Rac, raccordMedium);
1083 TGeoVolume * vtube3Rac = new TGeoVolume("vtube3Rac", tube3Rac, raccordMedium);
1084 vtube1Rac->SetLineColor(kGray);
1085 vtube2Rac->SetLineColor(kGray);
1086 vtube3Rac->SetLineColor(kGray);
1087
1088 TGeoTranslation *trTube1Rac = new TGeoTranslation("trTube1Rac",0,0,
1089 -fullRacLen/2+fgkConnectorCoolTubeL1/2);
1090 TGeoTranslation *trTube2Rac = new TGeoTranslation("trTube2Rac",0,0,
1091 (-fullRacLen/2+fgkConnectorCoolTubeL1+fgkConnectorCoolTubeL2/2));
1092 TGeoTranslation *trTube3Rac = new TGeoTranslation("trTube3Rac",0,0,
1093 (-fullRacLen/2+fgkConnectorCoolTubeL1+
1094 fgkConnectorCoolTubeL2+fgkConnectorCoolTubeL3/2));
1095 fRaccordoL->AddNode(vwaterRac, 1,0);
1096 fRaccordoL->AddNode(vtube1Rac, 1,trTube1Rac);
1097 fRaccordoL->AddNode(vtube2Rac, 1,trTube2Rac);
1098 fRaccordoL->AddNode(vtube3Rac, 1,trTube3Rac);
531d6cdc 1099}
c789ee28 1100
c789ee28 1101
b7943f00 1102//________________________________________________________________________
1103void AliITSv11GeometrySDD::CheckOverlaps(Double_t precision){
1104 //
1105 // a debugging function for checking some possible overlaps
1106 //
108bd0fe 1107 if (fSDDsensor3) fSDDsensor3->CheckOverlaps(precision);
1108 if (fSDDsensor4) fSDDsensor4->CheckOverlaps(precision);
b7943f00 1109 if (fHybrid) fHybrid->CheckOverlaps(precision);
531d6cdc 1110}
c789ee28 1111
1112
db486a6e 1113//________________________________________________________________________
1114TGeoCombiTrans *AliITSv11GeometrySDD::
108bd0fe 1115CreateCombiTrans(const char *name, Double_t dy, Double_t dz, Double_t dphi,
1116 Bool_t planeSym) {
db486a6e 1117 //
1118 // return the TGeoCombiTrans which make a translation in y and z
1119 // and a rotation in phi in the global coord system
108bd0fe 1120 // If planeSym = true, the rotation places the object symetrically
1121 // (with respect to the transverse plane) to its position in the
1122 // case planeSym = false
db486a6e 1123 //
1124
1125 TGeoTranslation t1(dy*CosD(90.+dphi),dy*SinD(90.+dphi), dz);
1126 TGeoRotation r1("",0.,0.,dphi);
108bd0fe 1127 TGeoRotation r2("",90, 180, -90-dphi);
db486a6e 1128
1129 TGeoCombiTrans *combiTrans1 = new TGeoCombiTrans(name);
1130 combiTrans1->SetTranslation(t1);
108bd0fe 1131 if (planeSym) combiTrans1->SetRotation(r1);
1132 else combiTrans1->SetRotation(r2);
db486a6e 1133 return combiTrans1;
531d6cdc 1134}
c789ee28 1135
1136
db486a6e 1137//________________________________________________________________________
c789ee28 1138void AliITSv11GeometrySDD::AddTranslationToCombiTrans(TGeoCombiTrans* ct,
db486a6e 1139 Double_t dx,
1140 Double_t dy,
b7943f00 1141 Double_t dz) const{
1142 // Add a dx,dy,dz translation to the initial TGeoCombiTrans
1143 const Double_t *vect = ct->GetTranslation();
1144 Double_t newVect[3] = {vect[0]+dx, vect[1]+dy, vect[2]+dz};
1145 ct->SetTranslation(newVect);
531d6cdc 1146}
c789ee28 1147
1148
1149//________________________________________________________________________
1150void AliITSv11GeometrySDD::ShowOnePiece(TGeoVolume *moth) {
1151// for code developpment and debugging purposes
1152
108bd0fe 1153 if (! fSDDsensor3) CreateBasicObjects();
531d6cdc 1154
1155 // moth->AddNode(fPinSupport, 1, 0);
1156 // moth->AddNode(fCoolPipeSupportL, 1, 0);
73dfc864 1157 // moth->AddNode(fSDDsensor3, 1, 0);
1158 // moth->AddNode(fSDDsensor4, 1, 0);
531d6cdc 1159 // moth->AddNode(fBaseThermalBridge, 1, 0);
1160 // moth->AddNode(fHybrid,100,0);
73dfc864 1161 // moth->AddNode(fLadderFoot,1,0);
1162 //moth->AddNode(fCardLVL,1,0);
1163 //moth->AddNode(fCardLVR,1,0);
b7943f00 1164
e118532f 1165 TGeoVolume* seg = CreateLadderSegment( 3, 0);
1166 moth->AddNode(seg, 1, 0);
b7943f00 1167
108bd0fe 1168// TGeoVolumeAssembly *lay3Ladder = CreateLadder(3);
531d6cdc 1169// moth->AddNode(lay3Ladder, 1, 0);
1170
108bd0fe 1171// TGeoVolumeAssembly *lay3Detectors = CreateDetectorsAssembly(3);
531d6cdc 1172// moth->AddNode(lay3Detectors, 1, 0);
1173
73dfc864 1174// TGeoVolumeAssembly *lay3Detectors = CreateDetectorsAssembly(3);
1175// moth->AddNode(lay3Detectors, 1, 0);
108bd0fe 1176
1177
bf210566 1178// TGeoVolumeAssembly *endLadder = CreateEndLadder( 4 );
1179// moth->AddNode(endLadder, 1, 0);
108bd0fe 1180
1181// TGeoVolumeAssembly *highVCard = CreateHVCard( 4 );
1182// moth->AddNode(highVCard, 1, 0);
1183
73dfc864 1184// TGeoVolumeAssembly *supportRing = CreateSupportRing( 4 );
1185// moth->AddNode(supportRing, 1, 0);
1186
e118532f 1187// TGeoVolume *endLadderCards = CreateEndLadderCardsV( 4 );
108bd0fe 1188// moth->AddNode(endLadderCards, 1, 0);
1189
73dfc864 1190// TGeoVolumeAssembly *carlosCard = CreateCarlosCard( 4 );
1191// moth->AddNode(carlosCard, 1, 0);
bf210566 1192
1193
1194
1195 /*
1196 //==================================
1197 //--- test of flat cable curvature
1198 //==================================
1199
1200 double angle = 90;
1201 AliITSv11GeomCableFlat cable("test", 3, 0.3);
1202 cable.SetNLayers(1);
1203 cable.SetNLayers(2);
1204 cable.SetLayer(0, 0.2, coolerMediumSDD, 2);
1205 cable.SetLayer(1, 0.1, coolerMediumSDD, 3);
1206 cable.SetInitialNode(endLadderCards);
1207
1208 Double_t p1[3], p2[3], vX[3] = {1,0,0},vY[3] = {0,5,0};
1209
1210 p1[0] = -3;
1211 p1[1] = 1;
1212 p1[2] = 10;
1213
1214 p2[0] = 0;
1215 p2[1] = 1;
1216 p2[2] = 10;
1217 cable.AddCheckPoint(endLadderCards, 0, p1, vX);
1218 cable.AddCheckPoint(endLadderCards, 1, p2, vX);
1219 cable.CreateAndInsertBoxCableSegment(1,angle);
1220
1221 Double_t p3[3], p4[3];
1222
1223 p3[0] = 2;
1224 p3[1] = 3;
1225 p3[2] = 10;
1226 cable.AddCheckPoint(endLadderCards, 2, p3, vY);
1227 cable.CreateAndInsertCableCylSegment(2,angle);
1228
1229 p4[0] = 2;
1230 p4[1] = 6;
1231 p4[2] = 10;
1232 cable.AddCheckPoint(endLadderCards, 3, p4, vY);
1233 cable.CreateAndInsertCableSegment(3,angle);
1234 */
531d6cdc 1235}
c789ee28 1236
1237
db486a6e 1238//________________________________________________________________________
b7943f00 1239void AliITSv11GeometrySDD::Layer3(TGeoVolume *moth) {
1240 //
1241 // Insert the layer 3 in the mother volume. This is a virtual volume
1242 // containing ladders of layer 3 and the supporting rings
1243 //
1244
1245 if (! moth) {
1246 printf("Error::AliITSv11GeometrySDD: Can't insert layer3, mother is null!\n");
1247 return;
1248 };
1249
108bd0fe 1250 TGeoMedium *airSDD = GetMedium("SDD AIR$");
b7943f00 1251
1252 fMotherVol = moth;
108bd0fe 1253 if (! fSDDsensor3) CreateBasicObjects();
b7943f00 1254
108bd0fe 1255 //====================================
1256 // First we create the central barrel
1257 //====================================
1258
1259 TGeoVolumeAssembly *lay3Ladder = CreateLadder(3);
1260 TGeoVolumeAssembly *lay3Detectors = CreateDetectorsAssembly(3);
6801b453 1261 TGeoVolumeAssembly *lay3Ladd2Det = CreateDetectorsAssemblyLadd2();
108bd0fe 1262 //TGeoVolume *lay3Detectors = CreateDetectors(3);
b7943f00 1263 TGeoTube *virtualLayer3Shape = new TGeoTube("ITSsddLayer3Shape",
1264 fgkLay3Rmin,fgkLay3Rmax,fgkLay3Length*0.5);
1265 TGeoVolume *virtualLayer3 = new TGeoVolume("ITSsddLayer3",
1266 virtualLayer3Shape, airSDD);
1267
1268 Double_t dPhi = 360./fgkLay3Nladd;
1269 Double_t detectorsThick = fgkLadWaferSep + 2*fgkWaferThickness;
1270 // Placing virtual ladder and detectors volumes following
1271 // ladder ordering convention
1272 char rotName[30];
1273 Int_t iLaddMin = 0;
1274 Int_t iLaddMax = fgkLay3Nladd;
1275 if ((fAddOnlyLadder3min>=0)&&(fAddOnlyLadder3max<fgkLay3Nladd)) {
1276 iLaddMin = fAddOnlyLadder3min;
1277 iLaddMax = fAddOnlyLadder3max+1;
1278 };
1279
1280 for (Int_t iLadd = iLaddMin; iLadd < iLaddMax; iLadd++) {
1281
108bd0fe 1282 Double_t ladderPhi = -3*dPhi+iLadd*dPhi;
6932f314 1283 snprintf(rotName, 30, "ITSsddLay3Ladd%i",iLadd);
b7943f00 1284 Double_t minRadiusLadBox = fLay3LaddShortRadius-fLay3LadderUnderSegDH;
1285 if (iLadd%2 != 0)
1286 minRadiusLadBox = fLay3LaddLongRadius-fLay3LadderUnderSegDH;
1287 minRadiusLadBox += ((TGeoBBox*)lay3Ladder->GetShape())->GetDY();
73dfc864 1288 TGeoCombiTrans *ctLadd;
1289 //=============================================================
1290 //
1291 // Special modification for ladder 2 of layer 3:
1292 // It has been inverted (pi rotation around y axis)
1293 //
1294 //=============================================================
1295 if (iLadd != 2)
1296 ctLadd = CreateCombiTrans(rotName,minRadiusLadBox,
1297 0, ladderPhi, kTRUE);
1298 else
1299 ctLadd = CreateCombiTrans(rotName,minRadiusLadBox,
1300 0, ladderPhi, kFALSE);
b7943f00 1301 virtualLayer3->AddNode(lay3Ladder, iLadd, ctLadd);
1302 ///////////////////////////////////////////////////
6932f314 1303 snprintf(rotName, 30, "ITSsddLay3DetBox%i",iLadd);
b7943f00 1304 Double_t minRadiusDetBox = fgkLay3DetShortRadius;
1305 if (iLadd%2 != 0) minRadiusDetBox = fgkLay3DetLongRadius;
1306 minRadiusDetBox += detectorsThick/2;
73dfc864 1307 TGeoCombiTrans *ctDet;
6801b453 1308 ctDet = CreateCombiTrans(rotName, minRadiusDetBox,
1309 0, ladderPhi, kTRUE);
1310
73dfc864 1311 if (iLadd != 2)
6801b453 1312 virtualLayer3->AddNode(lay3Detectors, iLadd, ctDet);
73dfc864 1313 else
6801b453 1314 virtualLayer3->AddNode(lay3Ladd2Det , iLadd, ctDet);
73dfc864 1315
b7943f00 1316 ///////////////////////////////////////////////////
1317 }
1318
bf210566 1319 /*
108bd0fe 1320 //====================================
1321 // Then the forward rapidity pieces
1322 // (cooling, Carlos, LV, HV ...)
1323 //====================================
1324
bf210566 1325 Double_t fgkForwardLay3Length = fgkEndLadPipeUlengthLay3+10*fgkmm; // this has to be tune
1326 Double_t fgkForwardLay3Rmin = fgkLay3Rmin-7*fgkmm;
1327 Double_t fgkForwardLay3Rmax = fgkLay3Rmax-5*fgkmm;
108bd0fe 1328
1329 TGeoVolumeAssembly* lay3EndLadder = CreateEndLadderCards(3);
1330 TGeoTube *virtualForward3Shape = new TGeoTube("virtualForward3Shape",
1331 fgkForwardLay3Rmin, fgkForwardLay3Rmax,
1332 fgkForwardLay3Length/2.);
bf210566 1333
1334// TGeoPcon *virtualForward3Shape = new TGeoPcon("virtualForward3Shape",0,360,2);
1335// // virtualForward3Shape->DefineSection(Int_t snum, Double_t z, Double_t rmin, Double_t rmax);
1336// virtualForward3Shape->DefineSection(0, Double_t z, Double_t rmin, Double_t rmax);
1337
1338
108bd0fe 1339 TGeoVolume *virtualForward3Pos = new TGeoVolume("ITSsddForward3Pos",
1340 virtualForward3Shape, airSDD);
1341 TGeoVolume *virtualForward3Neg = new TGeoVolume("ITSsddForward3Neg",
1342 virtualForward3Shape, airSDD);
bf210566 1343// TGeoVolume *virtualForward3Neg = new TGeoVolumeAssembly("ITSsddForward3Neg");
1344// TGeoVolume *virtualForward3Pos = new TGeoVolumeAssembly("ITSsddForward3Pos");
1345
108bd0fe 1346 TGeoTranslation *virtualForward3TrPos = new TGeoTranslation("virtualForward3TrPos",0,0,
1347 fgkLay3Length/2+fgkForwardLay3Length/2);
1348 TGeoTranslation *virtualForward3TrNeg = new TGeoTranslation("virtualForward3TrNeg",0,0,
1349 -fgkLay3Length/2-fgkForwardLay3Length/2);
1350
1351 for (Int_t iLadd = iLaddMin; iLadd < iLaddMax; iLadd++) {
1352
1353 Double_t ladderPhi = -3*dPhi+iLadd*dPhi;
1354 Double_t minRadiusDetBox = fgkLay3DetShortRadius;
1355 if (iLadd%2 != 0) minRadiusDetBox = fgkLay3DetLongRadius;
1356 minRadiusDetBox += detectorsThick/2;
1357
1358 sprintf(rotName, "ITSsddLay3EndLadd%i",iLadd);
1359
1360 TGeoCombiTrans *ctEndLaddPos = CreateCombiTrans(rotName, minRadiusDetBox-0.1,
1361 -fgkForwardLay3Length/2, ladderPhi, kTRUE);
1362 TGeoCombiTrans *ctEndLaddNeg = CreateCombiTrans(rotName, minRadiusDetBox-0.1,
1363 fgkForwardLay3Length/2, ladderPhi, kFALSE);
1364
1365 virtualForward3Pos->AddNode(lay3EndLadder, iLadd*2, ctEndLaddPos);
1366 virtualForward3Neg->AddNode(lay3EndLadder, iLadd*2, ctEndLaddNeg);
1367 }
1368
bf210566 1369 */
1370
1371
108bd0fe 1372 if(GetDebug(1)) {
1373 virtualLayer3->CheckOverlaps(0.01);
bf210566 1374 //virtualForward3Pos->CheckOverlaps(0.01);
1375 //virtualForward3Neg->CheckOverlaps(0.01);
108bd0fe 1376 }
1377
b7943f00 1378 virtualLayer3->SetVisibility(kFALSE);
bf210566 1379 //virtualForward3Pos->SetVisibility(kFALSE);
1380 //virtualForward3Neg->SetVisibility(kFALSE);
1381
108bd0fe 1382
b7943f00 1383 moth->AddNode(virtualLayer3, 1, 0);
bf210566 1384 //moth->AddNode(virtualForward3Pos, 1, virtualForward3TrPos);
1385 //moth->AddNode(virtualForward3Neg, 1, virtualForward3TrNeg);
531d6cdc 1386}
c789ee28 1387
1388
bf210566 1389// //________________________________________________________________________
1390// void AliITSv11GeometrySDD::ForwardLayer3(TGeoVolume *moth) {
1391// //
1392// // Insert the forward pieces of layer 3 in the mother volume.
1393// // (cooling, Carlos, LV, HV ...)
1394// //
1395
1396// if (! moth) {
1397// printf("Error::AliITSv11GeometrySDD: Can't insert layer3, mother is null!\n");
1398// return;
1399// };
1400
1401// TGeoMedium *airSDD = GetMedium("SDD AIR$");
1402
1403// if (! fSDDsensor3) CreateBasicObjects();
1404
1405// Double_t dPhi = 360./fgkLay3Nladd;
1406// Double_t detectorsThick = fgkLadWaferSep + 2*fgkWaferThickness;
1407// Int_t iLaddMin = 0;
1408// Int_t iLaddMax = fgkLay3Nladd;
1409// if ((fAddOnlyLadder3min>=0)&&(fAddOnlyLadder3max<fgkLay3Nladd)) {
1410// iLaddMin = fAddOnlyLadder3min;
1411// iLaddMax = fAddOnlyLadder3max+1;
1412// };
1413// char rotName[30];
1414
1415
1416// //=================
1417
1418// Double_t fgkForwardLay3Length = fgkEndLadPipeUlengthLay3+10*fgkmm; // this has to be tune
1419// Double_t fgkForwardLay3Rmin = fgkLay3Rmin-7*fgkmm;
1420// Double_t fgkForwardLay3Rmax = fgkLay3Rmax-5*fgkmm;
1421
1422// TGeoVolumeAssembly* lay3EndLadder = CreateEndLadderCards(3);
1423// TGeoTube *virtualForward3Shape = new TGeoTube("virtualForward3Shape",
1424// fgkForwardLay3Rmin, fgkForwardLay3Rmax,
1425// fgkForwardLay3Length/2.);
1426
1427// // TGeoPcon *virtualForward3Shape = new TGeoPcon("virtualForward3Shape",0,360,2);
1428// // // virtualForward3Shape->DefineSection(Int_t snum, Double_t z, Double_t rmin, Double_t rmax);
1429// // virtualForward3Shape->DefineSection(0, Double_t z, Double_t rmin, Double_t rmax);
1430
1431
1432// TGeoVolume *virtualForward3Pos = new TGeoVolume("ITSsddForward3Pos",
1433// virtualForward3Shape, airSDD);
1434// TGeoVolume *virtualForward3Neg = new TGeoVolume("ITSsddForward3Neg",
1435// virtualForward3Shape, airSDD);
1436// // TGeoVolume *virtualForward3Neg = new TGeoVolumeAssembly("ITSsddForward3Neg");
1437// // TGeoVolume *virtualForward3Pos = new TGeoVolumeAssembly("ITSsddForward3Pos");
1438
1439// TGeoTranslation *virtualForward3TrPos = new TGeoTranslation("virtualForward3TrPos",0,0,
1440// fgkLay3Length/2+fgkForwardLay3Length/2);
1441// TGeoTranslation *virtualForward3TrNeg = new TGeoTranslation("virtualForward3TrNeg",0,0,
1442// -fgkLay3Length/2-fgkForwardLay3Length/2);
1443
1444// for (Int_t iLadd = iLaddMin; iLadd < iLaddMax; iLadd++) {
1445
1446// Double_t ladderPhi = -3*dPhi+iLadd*dPhi;
1447// Double_t minRadiusDetBox = fgkLay3DetShortRadius;
1448// if (iLadd%2 != 0) minRadiusDetBox = fgkLay3DetLongRadius;
1449// minRadiusDetBox += detectorsThick/2;
1450
1451// sprintf(rotName, "ITSsddLay3EndLadd%i",iLadd);
1452
1453// TGeoCombiTrans *ctEndLaddPos = CreateCombiTrans(rotName, minRadiusDetBox-0.1,
1454// -fgkForwardLay3Length/2, ladderPhi, kTRUE);
1455// TGeoCombiTrans *ctEndLaddNeg = CreateCombiTrans(rotName, minRadiusDetBox-0.1,
1456// fgkForwardLay3Length/2, ladderPhi, kFALSE);
1457
1458// virtualForward3Pos->AddNode(lay3EndLadder, iLadd*2, ctEndLaddPos);
1459// virtualForward3Neg->AddNode(lay3EndLadder, iLadd*2, ctEndLaddNeg);
1460// }
1461
1462// if(GetDebug(1)) {
1463// virtualForward3Pos->CheckOverlaps(0.01);
1464// virtualForward3Neg->CheckOverlaps(0.01);
1465// }
1466
1467// virtualForward3Pos->SetVisibility(kFALSE);
1468// virtualForward3Neg->SetVisibility(kFALSE);
1469
1470// moth->AddNode(virtualForward3Pos, 1, virtualForward3TrPos);
1471// moth->AddNode(virtualForward3Neg, 1, virtualForward3TrNeg);
1472// }
1473
1474
1475
1476//________________________________________________________________________
1477void AliITSv11GeometrySDD::ForwardLayer3(TGeoVolume *moth) {
1478 //
1479 // Insert the end-ladder of layer 3 in the mother volume.
1480 // (cooling, Carlos, LV, HV ...)
1481 //
1482
1483 if (! moth) {
1484 printf("Error::AliITSv11GeometrySDD: Can't insert layer3, mother is null!\n");
1485 return;
1486 };
1487
1488 if (! fSDDsensor3) CreateBasicObjects();
1489
1490 Int_t iLaddMin = 0;
1491 Int_t iLaddMax = fgkLay3Nladd;
1492 if ((fAddOnlyLadder3min>=0)&&(fAddOnlyLadder3max<fgkLay3Nladd)) {
1493 iLaddMin = fAddOnlyLadder3min;
1494 iLaddMax = fAddOnlyLadder3max+1;
1495 };
1496
1497 TGeoVolume *virtualForward3Neg = new TGeoVolumeAssembly("ITSsddForward3Neg");
1498 TGeoVolume *virtualForward3Pos = new TGeoVolumeAssembly("ITSsddForward3Pos");
1499
1500 char rotName[30];
1501 Double_t dPhi = 360./fgkLay3Nladd;
1502 TGeoVolume* lay3EndLadder = CreateEndLadderCardsV(3);
1503
1504 for (Int_t iLadd = iLaddMin; iLadd < iLaddMax; iLadd++) {
1505
1506 Double_t ladderPhi = -3*dPhi+iLadd*dPhi;
1507 Double_t dR = 0;
1508 if (iLadd%2 != 0) dR = fgkLay3DetLongRadius-fgkLay3DetShortRadius;
1509
6932f314 1510 snprintf(rotName, 30, "ITSsddLay3EndLadd%i",iLadd);
bf210566 1511
1512 TGeoCombiTrans *ctEndLaddPos = CreateCombiTrans(rotName, dR,
1513 fgkLay3Length/2, ladderPhi, kTRUE);
1514 TGeoCombiTrans *ctEndLaddNeg = CreateCombiTrans(rotName, dR,
1515 -fgkLay3Length/2, ladderPhi, kFALSE);
1516
1517 virtualForward3Pos->AddNode(lay3EndLadder, iLadd*2, ctEndLaddPos);
1518 virtualForward3Neg->AddNode(lay3EndLadder, iLadd*2, ctEndLaddNeg);
1519 }
1520
1521 if(GetDebug(1)) {
1522 virtualForward3Pos->CheckOverlaps(0.01);
1523 virtualForward3Neg->CheckOverlaps(0.01);
1524 }
1525
40e2e5ea 1526 // 180deg Y rotation to compensate the cancellation of ITSD volume
1527 // (idortm[199] in AliITSv11Hybrid : z---> -z; x ---> -x; y ---> y)
1528 TGeoRotation *y180 = new TGeoRotation();
1529 y180->SetAngles( 90.,180., 90., 90.,180., 0.);
1530 moth->AddNode(virtualForward3Pos, 1, y180);
1531 moth->AddNode(virtualForward3Neg, 1, y180);
bf210566 1532}
1533
db486a6e 1534//________________________________________________________________________
b7943f00 1535void AliITSv11GeometrySDD::Layer4(TGeoVolume *moth) {
1536 //
1537 // Insert the layer 4 in the mother volume. This is a virtual volume
1538 // containing ladders of layer 4 and the supporting rings
1539 //
1540
1541 if (! moth) {
1542 printf("Error::AliITSv11GeometrySDD: Can't insert layer4, mother is null!\n");
1543 return;
1544 };
1545
1546 fMotherVol = moth;
1547
108bd0fe 1548 if (! fSDDsensor3) CreateBasicObjects();
b7943f00 1549
1550 TGeoTube *virtualLayer4Shape =new TGeoTube("ITSsddLayer4Shape",
1551 fgkLay4Rmin,fgkLay4Rmax,fgkLay4Length*0.5);
108bd0fe 1552 TGeoMedium *airSDD = GetMedium("SDD AIR$");
b7943f00 1553 TGeoVolume *virtualLayer4 = new TGeoVolume("ITSsddLayer4",
1554 virtualLayer4Shape, airSDD);
108bd0fe 1555
1556 //====================================
1557 // First we create the central barrel
1558 //====================================
1559
1560 TGeoVolumeAssembly *lay4Ladder = CreateLadder(4);
1561 //TGeoVolume *lay4Detectors = CreateDetectors(4);
1562 TGeoVolumeAssembly *lay4Detectors = CreateDetectorsAssembly(4);
1563
b7943f00 1564 Double_t dPhi = 360./fgkLay4Nladd;
1565 Double_t detBoxThickness = fgkLadWaferSep + 2*fgkWaferThickness;
108bd0fe 1566
b7943f00 1567 // placing virtual ladder and detectors volumes following ladder
1568 // ordering convention
6932f314 1569 char rotName[30];
b7943f00 1570 Int_t iLaddMin = 0;
1571 Int_t iLaddMax = fgkLay4Nladd;
1572 if ((fAddOnlyLadder4min >= 0)&&(fAddOnlyLadder4max < fgkLay4Nladd)) {
1573 iLaddMin = fAddOnlyLadder4min;
1574 iLaddMax = fAddOnlyLadder4max+1;
1575 }
1576 for (Int_t iLadd = iLaddMin; iLadd < iLaddMax; iLadd++) {
108bd0fe 1577
1578 Double_t ladderPhi = -5*dPhi + iLadd*dPhi;
6932f314 1579 snprintf(rotName, 30, "ITSsddLay4Ladd%i",iLadd);
b7943f00 1580 Double_t minRadiusLadBox = fLay4LaddShortRadius-fLay4LadderUnderSegDH;
1581 if (iLadd%2 != 0)
1582 minRadiusLadBox = fLay4LaddLongRadius-fLay4LadderUnderSegDH;
1583 minRadiusLadBox += ((TGeoBBox*)lay4Ladder->GetShape())->GetDY();
1584 TGeoCombiTrans *ctLadd = CreateCombiTrans(rotName, minRadiusLadBox,
108bd0fe 1585 0, ladderPhi, kTRUE);
b7943f00 1586 virtualLayer4->AddNode(lay4Ladder, iLadd, ctLadd);
108bd0fe 1587 ///////////////////////////////////////////////////
6932f314 1588 snprintf(rotName, 30, "ITSsddLay4DetBox%i",iLadd);
b7943f00 1589 Double_t minRadiusDetBox = fgkLay4DetShortRadius;
1590 if (iLadd%2 != 0)
1591 minRadiusDetBox = fgkLay4DetLongRadius;
1592 minRadiusDetBox += detBoxThickness/2;
1593 TGeoCombiTrans *ctDet = CreateCombiTrans(rotName, minRadiusDetBox,
108bd0fe 1594 0, ladderPhi, kTRUE);
b7943f00 1595 virtualLayer4->AddNode(lay4Detectors, iLadd, ctDet);
108bd0fe 1596 ///////////////////////////////////////////////////
1597 }
1598
bf210566 1599 /*
108bd0fe 1600 //====================================
1601 // Then the pieces at forward rapidity
1602 // (cooling, Carlos, LV, HV ...)
1603 //====================================
1604
bf210566 1605 Double_t fgkForwardLay4Length = fgkEndLadPipeUlengthLay4+10*fgkmm; // this has to be tuned
1606 Double_t fgkForwardLay4Rmin = fgkLay4Rmin-9*fgkmm;
1607 Double_t fgkForwardLay4Rmax = fgkLay4Rmax-5*fgkmm;
108bd0fe 1608
1609 TGeoVolumeAssembly* lay4EndLadder = CreateEndLadderCards(4);
1610 TGeoTube *virtualForward4Shape = new TGeoTube("virtualForward3Shape",
1611 fgkForwardLay4Rmin, fgkForwardLay4Rmax,
1612 fgkForwardLay4Length/2.);
1613 TGeoVolume *virtualForward4Pos = new TGeoVolume("ITSsddForward4Pos",
1614 virtualForward4Shape, airSDD);
1615 TGeoVolume *virtualForward4Neg = new TGeoVolume("ITSsddForward4Neg",
1616 virtualForward4Shape, airSDD);
bf210566 1617// TGeoVolume *virtualForward4Pos = new TGeoVolumeAssembly("ITSsddForward4Pos");
1618// TGeoVolume *virtualForward4Neg = new TGeoVolumeAssembly("ITSsddForward4Neg");
1619
108bd0fe 1620 TGeoTranslation *virtualForward4TrPos = new TGeoTranslation("virtualForward4TrPos",0,0,
1621 fgkLay4Length/2+fgkForwardLay4Length/2);
1622 TGeoTranslation *virtualForward4TrNeg = new TGeoTranslation("virtualForward4TrNeg",0,0,
1623 -fgkLay4Length/2-fgkForwardLay4Length/2);
1624
1625 for (Int_t iLadd = iLaddMin; iLadd < iLaddMax; iLadd++) {
1626
1627 Double_t ladderPhi = -5*dPhi + iLadd*dPhi;
1628 Double_t minRadiusDetBox = fgkLay4DetShortRadius;
1629 if (iLadd%2 != 0)
1630 minRadiusDetBox = fgkLay4DetLongRadius;
1631 minRadiusDetBox += detBoxThickness/2;
1632
1633 sprintf(rotName, "ITSsddLay4EndLadd%i",iLadd);
1634
1635 TGeoCombiTrans *ctEndLaddPos = CreateCombiTrans(rotName, minRadiusDetBox-0.1,
1636 -fgkForwardLay4Length/2, ladderPhi, kTRUE);
1637 TGeoCombiTrans *ctEndLaddNeg = CreateCombiTrans(rotName, minRadiusDetBox-0.1,
1638 fgkForwardLay4Length/2, ladderPhi, kFALSE);
1639 virtualForward4Pos->AddNode(lay4EndLadder, iLadd*2, ctEndLaddPos);
1640 virtualForward4Neg->AddNode(lay4EndLadder, iLadd*2+1, ctEndLaddNeg);
b7943f00 1641 }
bf210566 1642 */
b7943f00 1643
1644 if(GetDebug(1)) virtualLayer4->CheckOverlaps(0.01);
108bd0fe 1645
b7943f00 1646 virtualLayer4->SetVisibility(kFALSE);
bf210566 1647 //virtualForward4Pos->SetVisibility(kFALSE);
1648 //virtualForward4Neg->SetVisibility(kFALSE);
108bd0fe 1649
b7943f00 1650 moth->AddNode(virtualLayer4,1,0);
bf210566 1651 //moth->AddNode(virtualForward4Pos, 1, virtualForward4TrPos);
1652 //moth->AddNode(virtualForward4Neg, 1, virtualForward4TrNeg);
1653}
1654
1655
1656// //________________________________________________________________________
1657// void AliITSv11GeometrySDD::ForwardLayer4(TGeoVolume *moth) {
1658// //
1659// // Insert the layer 4 in the mother volume. This is a virtual volume
1660// // containing ladders of layer 4 and the supporting rings
1661// // (cooling, Carlos, LV, HV ...)
1662// //
1663
1664// if (! moth) {
1665// printf("Error::AliITSv11GeometrySDD: Can't insert layer4, mother is null!\n");
1666// return;
1667// };
1668
1669// TGeoMedium *airSDD = GetMedium("SDD AIR$");
1670
1671// if (! fSDDsensor3) CreateBasicObjects();
1672
1673// Double_t dPhi = 360./fgkLay4Nladd;
1674// Double_t detBoxThickness = fgkLadWaferSep + 2*fgkWaferThickness;
1675
1676// // placing virtual ladder and detectors volumes following ladder
1677// // ordering convention
1678// char rotName[20];
1679// Int_t iLaddMin = 0;
1680// Int_t iLaddMax = fgkLay4Nladd;
1681// if ((fAddOnlyLadder4min >= 0)&&(fAddOnlyLadder4max < fgkLay4Nladd)) {
1682// iLaddMin = fAddOnlyLadder4min;
1683// iLaddMax = fAddOnlyLadder4max+1;
1684// }
1685
1686// //=================
1687// Double_t fgkForwardLay4Length = fgkEndLadPipeUlengthLay4+10*fgkmm; // this has to be tuned
1688// Double_t fgkForwardLay4Rmin = fgkLay4Rmin-9*fgkmm;
1689// Double_t fgkForwardLay4Rmax = fgkLay4Rmax-5*fgkmm;
1690
1691// TGeoVolumeAssembly* lay4EndLadder = CreateEndLadderCards(4);
1692// TGeoTube *virtualForward4Shape = new TGeoTube("virtualForward3Shape",
1693// fgkForwardLay4Rmin, fgkForwardLay4Rmax,
1694// fgkForwardLay4Length/2.);
1695// TGeoVolume *virtualForward4Pos = new TGeoVolume("ITSsddForward4Pos",
1696// virtualForward4Shape, airSDD);
1697// TGeoVolume *virtualForward4Neg = new TGeoVolume("ITSsddForward4Neg",
1698// virtualForward4Shape, airSDD);
1699// // TGeoVolume *virtualForward4Pos = new TGeoVolumeAssembly("ITSsddForward4Pos");
1700// // TGeoVolume *virtualForward4Neg = new TGeoVolumeAssembly("ITSsddForward4Neg");
1701
1702// TGeoTranslation *virtualForward4TrPos = new TGeoTranslation("virtualForward4TrPos",0,0,
1703// fgkLay4Length/2+fgkForwardLay4Length/2);
1704// TGeoTranslation *virtualForward4TrNeg = new TGeoTranslation("virtualForward4TrNeg",0,0,
1705// -fgkLay4Length/2-fgkForwardLay4Length/2);
1706
1707// for (Int_t iLadd = iLaddMin; iLadd < iLaddMax; iLadd++) {
1708
1709// Double_t ladderPhi = -5*dPhi + iLadd*dPhi;
1710// Double_t minRadiusDetBox = fgkLay4DetShortRadius;
1711// if (iLadd%2 != 0)
1712// minRadiusDetBox = fgkLay4DetLongRadius;
1713// minRadiusDetBox += detBoxThickness/2;
1714
1715// sprintf(rotName, "ITSsddLay4EndLadd%i",iLadd);
1716
1717// TGeoCombiTrans *ctEndLaddPos = CreateCombiTrans(rotName, minRadiusDetBox-0.1,
1718// -fgkForwardLay4Length/2, ladderPhi, kTRUE);
1719// TGeoCombiTrans *ctEndLaddNeg = CreateCombiTrans(rotName, minRadiusDetBox-0.1,
1720// fgkForwardLay4Length/2, ladderPhi, kFALSE);
1721// virtualForward4Pos->AddNode(lay4EndLadder, iLadd*2, ctEndLaddPos);
1722// virtualForward4Neg->AddNode(lay4EndLadder, iLadd*2+1, ctEndLaddNeg);
1723// }
1724
1725// virtualForward4Pos->SetVisibility(kFALSE);
1726// virtualForward4Neg->SetVisibility(kFALSE);
1727
1728// moth->AddNode(virtualForward4Pos, 1, virtualForward4TrPos);
1729// moth->AddNode(virtualForward4Neg, 1, virtualForward4TrNeg);
1730// }
1731
1732
1733//________________________________________________________________________
1734void AliITSv11GeometrySDD::ForwardLayer4(TGeoVolume *moth) {
1735 //
1736 // Insert the end-ladder of layer 4 in the mother volume.
1737 // (cooling, Carlos, LV, HV ...)
1738 //
1739
1740 if (! moth) {
1741 printf("Error::AliITSv11GeometrySDD: Can't insert layer4, mother is null!\n");
1742 return;
1743 };
1744
1745 if (! fSDDsensor3) CreateBasicObjects();
1746
1747 // placing virtual ladder and detectors volumes following ladder
1748 // ordering convention
1749 Int_t iLaddMin = 0;
1750 Int_t iLaddMax = fgkLay4Nladd;
1751 if ((fAddOnlyLadder4min >= 0)&&(fAddOnlyLadder4max < fgkLay4Nladd)) {
1752 iLaddMin = fAddOnlyLadder4min;
1753 iLaddMax = fAddOnlyLadder4max+1;
1754 }
1755
1756 TGeoVolume *virtualForward4Pos = new TGeoVolumeAssembly("ITSsddForward4Pos");
1757 TGeoVolume *virtualForward4Neg = new TGeoVolumeAssembly("ITSsddForward4Neg");
1758
1759 char rotName[30];
1760 Double_t dPhi = 360./fgkLay4Nladd;
1761 TGeoVolume* lay4EndLadder = CreateEndLadderCardsV(4);
1762
1763 for (Int_t iLadd = iLaddMin; iLadd < iLaddMax; iLadd++) {
1764
1765 Double_t ladderPhi = -5*dPhi + iLadd*dPhi;
1766 Double_t dR = 0;
1767 if (iLadd%2 != 0)
1768 dR = fgkLay4DetLongRadius-fgkLay4DetShortRadius;
1769
6932f314 1770 snprintf(rotName, 30, "ITSsddLay4EndLadd%i",iLadd);
bf210566 1771
1772 TGeoCombiTrans *ctEndLaddPos = CreateCombiTrans(rotName, dR,
1773 fgkLay4Length/2, ladderPhi, kTRUE);
1774 TGeoCombiTrans *ctEndLaddNeg = CreateCombiTrans(rotName, dR,
1775 -fgkLay4Length/2, ladderPhi, kFALSE);
1776 virtualForward4Pos->AddNode(lay4EndLadder, iLadd*2, ctEndLaddPos);
1777 virtualForward4Neg->AddNode(lay4EndLadder, iLadd*2, ctEndLaddNeg);
1778 }
1779
40e2e5ea 1780 // 180deg Y rotation to compensate the cancellation of ITSD volume
1781 // (idortm[199] in AliITSv11Hybrid : z---> -z; x ---> -x; y ---> y)
1782 TGeoRotation *y180 = new TGeoRotation();
1783 y180->SetAngles( 90.,180., 90., 90.,180., 0.);
1784 moth->AddNode(virtualForward4Pos, 1, y180);
1785 moth->AddNode(virtualForward4Neg, 1, y180);
531d6cdc 1786}
b7943f00 1787
1788
1789//________________________________________________________________________
108bd0fe 1790TGeoVolumeAssembly *AliITSv11GeometrySDD::CreateLadder(Int_t iLay) {
b7943f00 1791 //
73dfc864 1792 // return an assembly volume containing the CF ladder
b7943f00 1793 //
1794
1795 Int_t nDetectors = fgkLay3Ndet;
1796 Double_t ladderLength = fgkLay3LadderLength;
1797 Double_t underSegDH = fLay3LadderUnderSegDH;
1798 Double_t *sensorZPos = fLay3sensorZPos;
1799 AliITSv11GeomCableFlat *digitCableA = fDigitCableLay3A;
1800 AliITSv11GeomCableFlat *digitCableB = fDigitCableLay3B;
1801
1802 if (iLay==3) {}
1803 else if (iLay==4) {
1804 nDetectors = fgkLay4Ndet;
1805 ladderLength = fgkLay4LadderLength;
1806 digitCableA = fDigitCableLay4A;
1807 digitCableB = fDigitCableLay4B;
1808 underSegDH = fLay4LadderUnderSegDH;
1809 sensorZPos = fLay4sensorZPos;
1810 }
1811 else {
1812 printf("AliITSv11GeometrySDD::CreateLadder : error=wrong layer\n");
1813 };
1814 Double_t ladderBoxDH = fgkLadderHeight+fgkLadderSegBoxDH+underSegDH;
108bd0fe 1815 TGeoVolumeAssembly *virtualLadder = new TGeoVolumeAssembly("ITSsddLadder");
b7943f00 1816
1817 // placing virtual ladder segment following detector ordering convention
1818 //=======================================================================
1819 char transName[30];
1820
1821 // adding segment this way to create cable points in the correct order ...
1822 for (Int_t iSegment = nDetectors/2-1; iSegment >= 0; iSegment-- ) {
1823
73dfc864 1824 //TGeoVolumeAssembly *laddSegment = CreateLadderSegment(iLay, iSegment);
1825 TGeoVolume *laddSegment = CreateLadderSegment(iLay, iSegment);
6932f314 1826 snprintf(transName, 30, "ITSsddLay%iLaddSeg%i", iLay, iSegment);
b7943f00 1827 Double_t segmentPos = fgkSegmentLength*(nDetectors/2-1-iSegment)
1828 + fgkSegmentLength/2;
1829 TGeoTranslation *segTr = new TGeoTranslation(transName, 0,
1830 underSegDH/2,segmentPos);
1831 ////
1832 virtualLadder->AddNode(laddSegment, iSegment, segTr);
1833 };
1834 for (Int_t iSegment = nDetectors/2; iSegment < nDetectors; iSegment++ ) {
1835
73dfc864 1836 TGeoVolume *laddSegment = CreateLadderSegment(iLay, iSegment);
1837 //TGeoVolumeAssembly *laddSegment = CreateLadderSegment(iLay, iSegment);
6932f314 1838 snprintf(transName, 30, "ITSsddLay%iLaddSeg%i", iLay, iSegment);
b7943f00 1839 Double_t segmentPos = fgkSegmentLength*(nDetectors/2-1-iSegment)
1840 + fgkSegmentLength/2;
1841 TGeoTranslation *segTr = new TGeoTranslation(transName, 0,
1842 underSegDH/2,segmentPos);
1843 ////
1844 virtualLadder->AddNode(laddSegment, iSegment, segTr);
1845 };
1846
1847 // putting virtual volume corresponding to the end of ladder
1848 //=======================================================================
108bd0fe 1849 TGeoVolumeAssembly *endLadder = CreateEndLadder( iLay );
b7943f00 1850 Double_t endLength = (ladderLength - nDetectors*fgkSegmentLength)/2.;
1851 TGeoTranslation *endTrZPos = new TGeoTranslation("ITSsddEndTrZPos",0,0,
1852 fgkSegmentLength*(nDetectors/2)+endLength/2.);
1853 // Euler rotation : about Z, then new X, then new Z
1854 TGeoRotation *endZNegRot = new TGeoRotation("",90, 180, -90);
1855 TGeoCombiTrans *endTrZNeg = new TGeoCombiTrans(0,0,
1856 -fgkSegmentLength*(nDetectors/2)-endLength/2.,endZNegRot);
1857 virtualLadder->AddNode(endLadder, 1, endTrZPos);
1858 virtualLadder->AddNode(endLadder, 2, endTrZNeg);
1859
1860 // creating and inserting cable segments
1861 // (check points are placed while creating segments)
1862 //=======================================================================
1863 if (fAddCables)
1864 for (Int_t iSegment = 0; iSegment < nDetectors; iSegment++ ) {
1865
1866 digitCableA[iSegment].SetInitialNode(virtualLadder);
1867 digitCableB[iSegment].SetInitialNode(virtualLadder);
1868
1869 for (Int_t iPt=1; iPt<digitCableA[iSegment].GetNCheckPoints(); iPt++ ) {
1870 Double_t rotation = 0;
73dfc864 1871 if (iPt>1) {
1872 rotation = 90-fgkHybridAngle;
1873 digitCableA[iSegment].CreateAndInsertCableSegment(iPt, rotation);
1874 } else
bf210566 1875 digitCableA[iSegment].CreateAndInsertCableSegment(iPt);
73dfc864 1876
b7943f00 1877 };
1878
1879 for (Int_t iPt=1; iPt<digitCableB[iSegment].GetNCheckPoints(); iPt++ ) {
1880 Double_t rotation = 0;
73dfc864 1881 if (iPt>1) {
1882 rotation = fgkHybridAngle-90;
1883 digitCableB[iSegment].CreateAndInsertCableSegment(iPt, rotation);
1884 } else
bf210566 1885 digitCableB[iSegment].CreateAndInsertCableSegment(iPt);
b7943f00 1886 };
1887 };
1888
1889 // HV cable
1890 //=======================================================================
fa4639a3 1891 if (fAddHVcables) {
108bd0fe 1892 TGeoMedium *polyhamideSDD = GetMedium("SDDKAPTON (POLYCH2)$"); //ITSsddKAPTON_POLYCH2
1893 TGeoMedium *alSDD = GetMedium("AL$"); //ITSal
b7943f00 1894
1895 AliITSv11GeomCableFlat cableHV[fgkLay4Ndet]; // temp !!!
1896 char cableHVname[30];
1897 for (Int_t iSegment = 0; iSegment<nDetectors; iSegment++) {
6932f314 1898 snprintf(cableHVname,30,"ITSsddHVcable%i", iSegment);
b7943f00 1899 cableHV[iSegment].SetName(cableHVname);
1900 cableHV[iSegment].SetThickness(fgkLongHVcablePolyThick+fgkLongHVcableAlThick);
1901 cableHV[iSegment].SetWidth(fgkTransitHVtailWidth);
1902 cableHV[iSegment].SetNLayers(2);
1903 cableHV[iSegment].SetLayer(0, fgkLongHVcablePolyThick, polyhamideSDD,
1904 fColorPolyhamide);
1905 cableHV[iSegment].SetLayer(1, fgkLongHVcableAlThick, alSDD, fColorAl);
1906 cableHV[iSegment].SetInitialNode(virtualLadder);
1907 };
1908 Double_t x1[3], x2[3], x3[3],
1909 vY[3] = {0,1,0}, vZ[3] = {0,0,1}, vYZ[3]={0,1,1};
1910
fa4639a3 1911 x1[0] = -fgkTransitHVtailXpos;
1912 x2[0] = -fgkTransitHVtailXpos;
1913 x3[0] = -fgkTransitHVtailXpos;
b7943f00 1914 for (Int_t iSegment = nDetectors/2-1; iSegment >= 0; iSegment-- ) {
1915 Double_t cableSeparation = TMath::Abs(iSegment - (nDetectors/2-1))
1916 *fgkLongHVcableSeparation;
73dfc864 1917 // adjust where HV long cable starts in Y
1918 // useful if you want to let some space for alignment
1919 x1[1] = - ladderBoxDH/2 + 2*fgkmm;
b7943f00 1920 x2[1] = - ladderBoxDH/2 + underSegDH - cableSeparation
1921 - (fgkLongHVcablePolyThick+fgkLongHVcableAlThick)/2;
1922 x3[1] = x2[1];
1923 x1[2] = sensorZPos[iSegment]+fgkTransitHVtailLength-5*fgkmm;
1924 x2[2] = x1[2]+5*fgkmm;
1925 x3[2] = ladderLength/2-endLength;
1926 cableHV[iSegment].AddCheckPoint( virtualLadder, 0, x1, vY );
73dfc864 1927 cableHV[iSegment].AddCheckPoint( virtualLadder, 1, x2, vZ ); // vYZ
b7943f00 1928 cableHV[iSegment].AddCheckPoint( virtualLadder, 2, x3, vZ );
1929
73dfc864 1930 //cableHV[iSegment].CreateAndInsertCableSegment(1,0);
1931 cableHV[iSegment].CreateAndInsertCableCylSegment(1, -45+180);
1932 //cableHV[iSegment].CreateAndInsertCableSegment(2,0);
1933 cableHV[iSegment].CreateAndInsertBoxCableSegment(2,0);
b7943f00 1934 };
1935
1936 vYZ[2] = -1;
fa4639a3 1937 x1[0] = fgkTransitHVtailXpos;
1938 x2[0] = fgkTransitHVtailXpos;
1939 x3[0] = fgkTransitHVtailXpos;
1940
b7943f00 1941 for (Int_t iSegment = nDetectors/2; iSegment < nDetectors; iSegment++ ) {
1942 Double_t cableSeparation = TMath::Abs(iSegment - (nDetectors/2-1))
1943 *fgkLongHVcableSeparation;
73dfc864 1944 x1[1] = - ladderBoxDH/2 + 2*fgkmm; // adjust where HV long cable starts in Y
b7943f00 1945 x2[1] = - ladderBoxDH/2 + underSegDH - cableSeparation
1946 - (fgkLongHVcablePolyThick+fgkLongHVcableAlThick)/2;
1947 x3[1] = x2[1];
1948 x1[2] = sensorZPos[iSegment]-fgkTransitHVtailLength+5*fgkmm;
1949 x2[2] = x1[2]-5*fgkmm;
1950 x3[2] = -ladderLength/2+endLength;
1951 cableHV[iSegment].AddCheckPoint( virtualLadder, 0, x1, vY );
73dfc864 1952 cableHV[iSegment].AddCheckPoint( virtualLadder, 1, x2, vZ ); // vYZ
b7943f00 1953 cableHV[iSegment].AddCheckPoint( virtualLadder, 2, x3, vZ );
1954
73dfc864 1955 cableHV[iSegment].CreateAndInsertCableCylSegment(1, -45);
1956 cableHV[iSegment].CreateAndInsertBoxCableSegment(2,0);
b7943f00 1957 };
fa4639a3 1958 };
c789ee28 1959
b7943f00 1960 //**********************************
1961 if(GetDebug(1)) virtualLadder->CheckOverlaps(0.01);
b7943f00 1962 return virtualLadder;
531d6cdc 1963}
c789ee28 1964
1965
db486a6e 1966//________________________________________________________________________
8f20b5e4 1967TGeoArb8 *AliITSv11GeometrySDD::CreateLadderSide(const char *name,
1968 Double_t dz, Double_t angle, Double_t xSign,
1969 Double_t L, Double_t H, Double_t l) {
db486a6e 1970 // Create one half of the V shape corner of CF ladder
1971
1972 TGeoArb8 *cfLaddSide = new TGeoArb8(dz);
8f20b5e4 1973 cfLaddSide->SetName(name);
1974
1975 // Points must be in clockwise order
1976 cfLaddSide->SetVertex(0, 0, 0);
1977 cfLaddSide->SetVertex(2, xSign*(L*TMath::Sin(angle)-l*TMath::Cos(angle)),
1978 -L*TMath::Cos(angle)-l*TMath::Sin(angle));
1979 cfLaddSide->SetVertex(4, 0, 0);
1980 cfLaddSide->SetVertex(6, xSign*(L*TMath::Sin(angle)-l*TMath::Cos(angle)),
1981 -L*TMath::Cos(angle)-l*TMath::Sin(angle));
1982 if (xSign < 0) {
1983 cfLaddSide->SetVertex(1, 0, -H);
1984 cfLaddSide->SetVertex(3, xSign*L*TMath::Sin(angle), -L*TMath::Cos(angle));
1985 cfLaddSide->SetVertex(5, 0, -H);
1986 cfLaddSide->SetVertex(7, xSign*L*TMath::Sin(angle), -L*TMath::Cos(angle));
1987 } else {
1988 cfLaddSide->SetVertex(1, xSign*L*TMath::Sin(angle), -L*TMath::Cos(angle));
1989 cfLaddSide->SetVertex(3, 0, -H);
1990 cfLaddSide->SetVertex(5, xSign*L*TMath::Sin(angle), -L*TMath::Cos(angle));
1991 cfLaddSide->SetVertex(7, 0, -H);
1992 }
db486a6e 1993 return cfLaddSide;
531d6cdc 1994}
c789ee28 1995
1996
db486a6e 1997//________________________________________________________________________
b7943f00 1998TGeoVolume* AliITSv11GeometrySDD::CreateHybrid(Int_t iLRSide) {
1999 //
2000 // return a box containing the front-end hybrid
2001 //
2002
2003 Double_t roundHoleX = -fgkHybridWidth/2+fgkHybRndHoleX;
2004
2005 Double_t screenTotalThick = fgkHybGlueScrnThick+fgkHybUpThick+fgkHybAlThick;
2006 Double_t lowFLTotalThick = fgkHybGlueLowThick+fgkHybUpThick+fgkHybAlThick;
2007// Double_t upFLTotalThick = fgkHybGlueUpThick +fgkHybUpThick+fgkHybAlThick;
2008 Double_t chipsCCTotThick = fgkHybUnderNiThick+fgkHybGlueAgThick
2009 +fgkHybChipThick+2*(fgkHybUpCCThick+fgkHybAlCCThick);
2010 Double_t ccUpLayerTotThick = fgkHybUpCCThick+fgkHybAlCCThick+fgkHybUpCCThick;
2011// Double_t volumeThick = (fgkHybridThBridgeThick+screenTotalThick+lowFLTotalThick
2012// + upFLTotalThick + ccUpLayerTotThick);
2013 Double_t volumeThick = (fgkHybridThBridgeThick+screenTotalThick+lowFLTotalThick
2014 +fgkHybSMDheight);
2015 Double_t lowLayerYmin = -volumeThick/2+fgkHybridThBridgeThick
2016 +screenTotalThick;
2017 Double_t flUpThick = fgkHybGlueUpThick+fgkHybUpThick;
2018
2019 //**************************************************** media :
108bd0fe 2020 TGeoMedium *airSDD = GetMedium("SDD AIR$");
2021 TGeoMedium *carbonFiberLadderStruct = GetMedium("SDDKAPTON (POLYCH2)$"); //ITSsddCarbonM55J
2022 TGeoMedium *alSDD = GetMedium("AL$"); //ITSal
2023 TGeoMedium *alSDD80p100 = GetMedium("AL$"); // to code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2024 TGeoMedium *alSDD50p100 = GetMedium("AL$"); // to code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2025 TGeoMedium *polyhamideSDD = GetMedium("SDDKAPTON (POLYCH2)$"); //ITSsddKAPTON_POLYCH2
9c8369f9 2026 TGeoMedium *niSDD = GetMedium("NICKEL$");
108bd0fe 2027 TGeoMedium *glueAG = GetMedium("SDDKAPTON (POLYCH2)$"); // to code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2028 TGeoMedium *siliconSDD = GetMedium("SDD SI CHIP$"); //ITSsddSiChip
9c8369f9 2029 TGeoMedium *medSMD = GetMedium("SDD X7R capacitors$"); // SDDX7Rcapacitors
2030 TGeoMedium *medSMDweld = GetMedium("SDD X7R weld$");
b7943f00 2031
2032 //**************************************************** main volume :
9c8369f9 2033// TGeoBBox *hybridBox = new TGeoBBox("",fgkHybridWidth/2, volumeThick/2,
2034// (fgkHybridLength)/2);
2035 Double_t xhybr[6],yhybr[6];
2036 xhybr[0] = -fgkHybridWidth/2;
2037 yhybr[0] = -volumeThick/2;
2038 xhybr[1] = fgkHybridWidth/2;
2039 yhybr[1] = -volumeThick/2;
2040 xhybr[2] = fgkHybridWidth/2;
2041 yhybr[2] = volumeThick/2;
2042 xhybr[3] = -fgkHybridWidth/2;
2043 yhybr[3] = volumeThick/2;
2044 xhybr[4] = xhybr[3] - 1.05*fgkHybCC2SensorLen*SinD(fgkHybCC2SensorAng);
2045 yhybr[4] = yhybr[3] - 1.05*fgkHybCC2SensorLen*CosD(fgkHybCC2SensorAng);
2046 xhybr[5] = xhybr[4];
2047 yhybr[5] = yhybr[4] - volumeThick;
2048
2049 TGeoXtru *hybridBox = new TGeoXtru(2);
2050 hybridBox->DefinePolygon(6, xhybr, yhybr);
2051 hybridBox->DefineSection(0,-fgkHybridLength/2);
2052 hybridBox->DefineSection(1, fgkHybridLength/2);
2053
b7943f00 2054 TGeoVolume *hybrid = new TGeoVolume("ITSsddHybridVol", hybridBox,
2055 airSDD);
2056
2057 TGeoBBox *sThermalBridge = new TGeoBBox( "", fgkHybridWidth/2,
2058 fgkHybridThBridgeThick/2,
2059 fgkHybridLength/2);
c789ee28 2060
b7943f00 2061 //**************************************************** Thermal bridge :
c789ee28 2062 TGeoVolume *vThermalBridge = new TGeoVolume("ITSsddHybridThBridge",
2063 sThermalBridge,
2064 carbonFiberLadderStruct);
2065 vThermalBridge->SetLineColor(fColorCarbonFiber);
b7943f00 2066 TGeoTranslation *thBridgeTr = new TGeoTranslation(0, -volumeThick/2
2067 +fgkHybridThBridgeThick/2, 0);
2068 hybrid->AddNode(vThermalBridge, 1, thBridgeTr);
2069
2070 //**************************************************** Screen layer :
2071 TGeoBBox *sAlScreenLayer = new TGeoBBox("sAlScreenLayer", fgkHybridWidth/2,
2072 fgkHybAlThick/2, fgkHybridLength/2);
2073 //here the upedex and glue layers are both assumed to be polyimide
2074 TGeoBBox *sUpGlueScreenLayer = new TGeoBBox("sUpGlueScreenLayer",
2075 fgkHybridWidth/2,
2076 (fgkHybUpThick+fgkHybGlueScrnThick)/2,
2077 fgkHybridLength/2);
2078 TGeoTube *sRoundHole = new TGeoTube("sRoundHole", 0, fgkHybRndHoleRad,
2079 (screenTotalThick+lowFLTotalThick)/2);
2080
2081 TGeoTranslation *upGlueScreenTr = new TGeoTranslation("upGlueScreenTr",0,
2082 -volumeThick/2+fgkHybridThBridgeThick+(fgkHybUpThick+fgkHybGlueScrnThick)/2,0);
2083
2084 TGeoTranslation *alScreenTr = new TGeoTranslation("AlScreenTr", 0,
2085 -volumeThick/2+fgkHybridThBridgeThick+fgkHybUpThick+fgkHybGlueScrnThick
2086 +fgkHybAlThick/2, 0);
2087
2088 TGeoTranslation hybHolePos1Tr(roundHoleX,
2089 -volumeThick/2+fgkHybridThBridgeThick+(screenTotalThick+lowFLTotalThick)/2,
2090 -fgkHybridLength/2+fgkHybRndHoleZ);
2091 TGeoTranslation hybHolePos2Tr(roundHoleX,
2092 -volumeThick/2+fgkHybridThBridgeThick+(screenTotalThick+lowFLTotalThick)/2,
2093 fgkHybridLength/2-fgkHybRndHoleZ);
531d6cdc 2094
2095 TGeoRotation *rotHole = new TGeoRotation("", 0, 90, 0);
2096 TGeoCombiTrans *hybHolePos1 = new TGeoCombiTrans(hybHolePos1Tr, *rotHole);
b7943f00 2097 hybHolePos1->SetName("hybHolePos1");
531d6cdc 2098 TGeoCombiTrans *hybHolePos2 = new TGeoCombiTrans(hybHolePos2Tr, *rotHole);
b7943f00 2099 hybHolePos2->SetName("hybHolePos2");
2100
2101 upGlueScreenTr->RegisterYourself();
2102 alScreenTr->RegisterYourself();
2103 hybHolePos1->RegisterYourself();
2104 hybHolePos2->RegisterYourself();
531d6cdc 2105 delete rotHole;
b7943f00 2106
2107 TGeoCompositeShape *sScreenAl = new TGeoCompositeShape(
2108 "sAlScreenLayer:AlScreenTr-(sRoundHole:hybHolePos1"
2109 "+sRoundHole:hybHolePos2)");
2110 TGeoVolume *vScreenAl = new TGeoVolume("vScreenAl",sScreenAl, alSDD);
2111 vScreenAl->SetLineColor(fColorAl);
2112 TGeoCompositeShape *sScreenUpGlue = new TGeoCompositeShape(
2113 "sUpGlueScreenLayer:upGlueScreenTr-(sRoundHole:hybHolePos1"
2114 "+sRoundHole:hybHolePos2)");
2115 TGeoVolume *vScreenUpGlue = new TGeoVolume("vScreenUpGlue",
2116 sScreenUpGlue,polyhamideSDD);
2117 vScreenUpGlue->SetLineColor(fColorPolyhamide);
2118
2119 hybrid->AddNode(vScreenUpGlue, 1, 0);
2120 hybrid->AddNode(vScreenAl, 1, 0);
2121
2122 //**************************************************** FL low layer :
2123 Double_t sideWidth1 = fgkHybFLlowChipZ1 - fgkHybFLlowHoleDZ/2;
2124 Double_t sideWidth2 = fgkHybridLength - fgkHybFLlowChipZ4 - fgkHybFLlowHoleDZ/2;
2125
2126 //here the upedex and glue layers are both assumed to be polyimide
2127 TGeoBBox *sUpGlueBar1 = new TGeoBBox("sUpGlueBar1", fgkHybridWidth/2,
2128 (fgkHybGlueLowThick+fgkHybUpThick)/2,
2129 sideWidth1/2);
2130 TGeoBBox *sAlBar1 = new TGeoBBox("sAlBar1", fgkHybridWidth/2,
2131 fgkHybAlThick/2, sideWidth1/2);
2132
2133 TGeoTranslation *upGlueBarTr1 = new TGeoTranslation("upGlueBarTr1", 0,
2134 lowLayerYmin+(fgkHybGlueLowThick+fgkHybUpThick)/2,
2135 -(fgkHybridLength-sideWidth1)/2);
2136 TGeoTranslation *alBarTr1 = new TGeoTranslation("alBarTr1", 0,
2137 lowLayerYmin+fgkHybGlueLowThick+fgkHybUpThick+fgkHybAlThick/2,
2138 -(fgkHybridLength-sideWidth1)/2);
2139 upGlueBarTr1->RegisterYourself();
2140 alBarTr1->RegisterYourself();
2141
2142 TGeoCompositeShape *sLowUpGlueBar1 = new TGeoCompositeShape(
2143 "sUpGlueBar1:upGlueBarTr1-sRoundHole:hybHolePos1");
2144 TGeoCompositeShape *sLowAlBar1 = new TGeoCompositeShape(
2145 "sAlBar1:alBarTr1-sRoundHole:hybHolePos1");
2146 TGeoVolume *vLowUpGlueBar1 = new TGeoVolume("vLowUpGlueBar1",
2147 sLowUpGlueBar1, polyhamideSDD);
2148 TGeoVolume *vLowAlBar1 = new TGeoVolume("vLowAlBar1",
2149 sLowAlBar1, alSDD);
2150 vLowUpGlueBar1->SetLineColor(fColorPolyhamide);
2151 vLowAlBar1->SetLineColor(fColorAl);
2152 hybrid->AddNode(vLowUpGlueBar1,1,0);
2153 hybrid->AddNode(vLowAlBar1,1,0);
2154
2155 //---
2156 //here the upedex and glue layers are both assumed to be polyimide
2157 TGeoBBox *sUpGlueBar2 = new TGeoBBox("sUpGlueBar2", fgkHybridWidth/2,
2158 (fgkHybGlueLowThick+fgkHybUpThick)/2,
2159 sideWidth2/2);
2160 TGeoBBox *sAlBar2 = new TGeoBBox("sAlBar2", fgkHybridWidth/2,
2161 fgkHybAlThick/2, sideWidth2/2);
2162
9c8369f9 2163 TGeoTranslation *upGlueBarTr2 = new TGeoTranslation("upGlueBarTr2", 0,
b7943f00 2164 lowLayerYmin+(fgkHybGlueLowThick+fgkHybUpThick)/2,
2165 (fgkHybridLength-sideWidth2)/2);
2166 TGeoTranslation *alBarTr2 = new TGeoTranslation("alBarTr2", 0,
2167 lowLayerYmin+fgkHybGlueLowThick+fgkHybUpThick+fgkHybAlThick/2,
2168 (fgkHybridLength-sideWidth2)/2);
2169 upGlueBarTr2->RegisterYourself();
2170 alBarTr2->RegisterYourself();
2171
2172 TGeoCompositeShape *sLowUpGlueBar2 = new TGeoCompositeShape(
2173 "sUpGlueBar2:upGlueBarTr2-sRoundHole:hybHolePos2");
2174 TGeoCompositeShape *sLowAlBar2 = new TGeoCompositeShape(
2175 "sAlBar2:alBarTr2-sRoundHole:hybHolePos2");
2176 TGeoVolume *vLowUpGlueBar2 = new TGeoVolume("vLowUpGlueBar2",sLowUpGlueBar2,
2177 polyhamideSDD);
2178 TGeoVolume *vLowAlBar2 = new TGeoVolume("vLowAlBar2",sLowAlBar2,
2179 alSDD);
2180 vLowUpGlueBar2->SetLineColor(fColorPolyhamide);
2181 vLowAlBar2->SetLineColor(fColorAl);
2182 hybrid->AddNode(vLowUpGlueBar2, 1, 0);
2183 hybrid->AddNode(vLowAlBar2, 1, 0);
2184
108bd0fe 2185 if(GetDebug(3)) { // Remove compiler warning.
b7943f00 2186 sAlScreenLayer->InspectShape();
2187 sUpGlueScreenLayer->InspectShape();
2188 sRoundHole->InspectShape();
2189 sUpGlueBar1->InspectShape();
2190 sUpGlueBar2->InspectShape();
2191 sAlBar1->InspectShape();
2192 sAlBar2->InspectShape();
2193 };
2194 //---
2195 //using class AliITSv11GeomCableFlat to add 2-layer segments ...
2196 Double_t piece1width = fgkHybFLlowPasX-fgkHybFLlowHolePasDX/2;
2197 AliITSv11GeomCableFlat lowFLpiece("lowFLpiece1",piece1width,
2198 lowFLTotalThick);
2199 lowFLpiece.SetNLayers(2);
2200 lowFLpiece.SetLayer(0, fgkHybGlueLowThick+fgkHybUpThick, polyhamideSDD,
2201 fColorPolyhamide);
2202 lowFLpiece.SetLayer(1, fgkHybAlThick, alSDD80p100, fColorAl);
2203 // alSDD at 80% : mostly to take into account strips of piece 3
2204
2205 Double_t x1[3] = { -fgkHybridWidth/2 + piece1width/2,
2206 lowLayerYmin + lowFLTotalThick/2,
2207 -fgkHybridLength/2 + sideWidth1 };
2208 Double_t x2[3] ={ x1[0], x1[1], fgkHybridLength/2 - sideWidth2 };
2209 Double_t vZ[3] = {0,0,1};
2210 lowFLpiece.AddCheckPoint( hybrid, 0, x2, vZ );
2211 lowFLpiece.AddCheckPoint( hybrid, 1, x1, vZ );
2212 lowFLpiece.SetInitialNode(hybrid);
108bd0fe 2213 lowFLpiece.CreateAndInsertBoxCableSegment(1);
b7943f00 2214 lowFLpiece.ResetPoints();
2215
2216 Double_t piece2width = fgkHybFLlowAmbX-fgkHybFLlowPasX
2217 -fgkHybFLlowHolePasDX/2-fgkHybFLlowHoleAmbDX/2;
2218
2219 lowFLpiece.SetWidth(piece2width);
2220 lowFLpiece.SetName("lowFLpiece2");
2221 x1[0] = piece2width/2+fgkHybFLlowPasX+fgkHybFLlowHolePasDX/2-fgkHybridWidth/2;
2222 x2[0] = x1[0];
2223 lowFLpiece.AddCheckPoint( hybrid, 0, x2, vZ );
2224 lowFLpiece.AddCheckPoint( hybrid, 1, x1, vZ );
108bd0fe 2225 lowFLpiece.CreateAndInsertBoxCableSegment(1);
b7943f00 2226 lowFLpiece.ResetPoints();
2227
2228 Double_t piece3width = fgkHybridWidth - fgkHybFLlowAmbX
2229 - fgkHybFLlowHoleAmbDX/2;
2230
2231 lowFLpiece.SetWidth(piece3width);
2232 lowFLpiece.SetName("lowFLpiece3");
2233 x1[0] = fgkHybridWidth/2-piece3width/2;
2234 x2[0] = x1[0];
2235 lowFLpiece.AddCheckPoint( hybrid, 0, x2, vZ );
2236 lowFLpiece.AddCheckPoint( hybrid, 1, x1, vZ );
108bd0fe 2237 lowFLpiece.CreateAndInsertBoxCableSegment(1);
b7943f00 2238
2239 Double_t zChips[4] = {fgkHybFLlowChipZ1,fgkHybFLlowChipZ2,
2240 fgkHybFLlowChipZ3,fgkHybFLlowChipZ4};
2241 Double_t vX[3] = {1,0,0};
2242 for (Int_t i=0; i<3; i++) {
2243 char ch[20];
6932f314 2244 snprintf(ch, 20, "lowFLpieceA%i", i+4);
b7943f00 2245 lowFLpiece.SetName(ch);
2246 lowFLpiece.SetWidth(zChips[i+1]-zChips[i]-fgkHybFLlowHoleDZ);
2247
2248 lowFLpiece.SetLayer(1, fgkHybAlThick, alSDD, fColorAl);
2249 x1[0] = -fgkHybridWidth/2 + piece1width;
2250 x2[0] = x1[0] + fgkHybFLlowHolePasDX;
2251 Double_t zPiece = (zChips[i+1]+zChips[i])/2 - fgkHybridLength/2;
2252 x1[2] = zPiece; x2[2] = zPiece;
2253 lowFLpiece.AddCheckPoint( hybrid, 0, x2, vX );
2254 lowFLpiece.AddCheckPoint( hybrid, 1, x1, vX );
108bd0fe 2255 lowFLpiece.CreateAndInsertBoxCableSegment(1,90);
b7943f00 2256 lowFLpiece.ResetPoints();
2257
6932f314 2258 snprintf(ch, 20, "lowFLpieceB%i", i+4);
b7943f00 2259 lowFLpiece.SetName(ch);
2260 x1[0] = fgkHybridWidth/2 - piece3width;
2261 x2[0] = x1[0] - fgkHybFLlowHoleAmbDX;
2262 lowFLpiece.AddCheckPoint( hybrid, 0, x1, vX );
2263 lowFLpiece.AddCheckPoint( hybrid, 1, x2, vX );
108bd0fe 2264 lowFLpiece.CreateAndInsertBoxCableSegment(1,90);
b7943f00 2265 };
2266
2267 //**************************************************** chips+CC:
2268 AliITSv11GeomCableFlat chip("", fgkHybChipsDZ, chipsCCTotThick);
2269 chip.SetInitialNode(hybrid);
2270 chip.SetNLayers(5);
2271 chip.SetLayer(0, fgkHybUnderNiThick, niSDD, 2);
2272 chip.SetLayer(1, fgkHybGlueAgThick, glueAG, 4);
2273 chip.SetLayer(2, fgkHybChipThick, siliconSDD, fColorSilicon);
2274 chip.SetLayer(3, fgkHybUpCCThick+fgkHybUpCCThick, polyhamideSDD,
2275 fColorPolyhamide);
2276 chip.SetLayer(4, fgkHybAlCCThick+fgkHybAlCCThick, alSDD80p100, fColorAl);
2277 // Here the tho CC (low+up) are merged
2278 // In fact, the last layer has a smaller surface of Al -> I put 80%
2279
2280 x1[1] = lowLayerYmin + chipsCCTotThick/2;
2281 x2[1] = x1[1];
2282 char ch[20];
2283
2284 for (Int_t i=0; i<4; i++) {
6932f314 2285 snprintf(ch, 20, "pascalCC%i", i);
b7943f00 2286 chip.SetName(ch);
2287 x1[0] = fgkHybFLlowPasX - fgkHybridWidth/2 - fgkHybPascalDX/2;
2288 x2[0] = x1[0] + fgkHybPascalDX;
2289 x1[2] = zChips[i] - fgkHybridLength/2;
2290 x2[2] = x1[2];
2291 chip.AddCheckPoint( hybrid, 0, x1, vX );
2292 chip.AddCheckPoint( hybrid, 1, x2, vX );
108bd0fe 2293 chip.CreateAndInsertBoxCableSegment(1,-90);
b7943f00 2294 chip.ResetPoints();
2295
6932f314 2296 snprintf(ch, 20, "ambraCC%i", i);
b7943f00 2297 chip.SetName(ch);
2298 x1[0] = fgkHybFLlowAmbX - fgkHybridWidth/2 - fgkHybAmbraDX/2;
2299 x2[0] = x1[0] + fgkHybAmbraDX;
2300 chip.AddCheckPoint( hybrid, 0, x1, vX );
2301 chip.AddCheckPoint( hybrid, 1, x2, vX );
108bd0fe 2302 chip.CreateAndInsertBoxCableSegment(1,-90);
b7943f00 2303 chip.ResetPoints();
2304 };
c789ee28 2305
b7943f00 2306 //**************************************************** CC outside chips:
73dfc864 2307 // I don't think there is a second aluminium layer here ...
b7943f00 2308 for (Int_t i = 0; i<4; i++) {
6932f314 2309 snprintf(ch, 20, "ccLayerA%i", i);
b7943f00 2310
2311 AliITSv11GeomCableFlat ccLayer1(ch, 6.6*fgkmm, ccUpLayerTotThick);
2312 ccLayer1.SetInitialNode(hybrid);
2313 ccLayer1.SetNLayers(2);
2314 ccLayer1.SetLayer(0, 2*fgkHybUpCCThick, polyhamideSDD, fColorPolyhamide);
2315 ccLayer1.SetLayer(1, fgkHybAlCCThick, alSDD50p100, fColorAl);
2316 // Al at ~50%
2317
2318 x1[0] = -fgkHybridWidth/2;
2319 x2[0] = fgkHybFLlowPasX - fgkHybridWidth/2 - fgkHybPascalDX/2;
2320 x1[1] = lowLayerYmin + fgkHybUnderNiThick + fgkHybGlueAgThick
2321 + fgkHybChipThick + ccUpLayerTotThick/2;
2322 x2[1] = x1[1];
2323 x1[2] = zChips[i] - fgkHybridLength/2;
2324 x2[2] = x1[2];
2325 ccLayer1.AddCheckPoint( hybrid, 0, x1, vX );
2326 ccLayer1.AddCheckPoint( hybrid, 1, x2, vX );
108bd0fe 2327 ccLayer1.CreateAndInsertBoxCableSegment(1,-90);
b7943f00 2328
6932f314 2329 snprintf(ch, 20, "ccLayerB%i", i);
b7943f00 2330 AliITSv11GeomCableFlat ccLayer2(ch, fgkHybChipsDZ, ccUpLayerTotThick);
2331 ccLayer2.SetInitialNode(hybrid);
2332 ccLayer2.SetNLayers(2);
2333 ccLayer2.SetLayer(0, 2*fgkHybUpCCThick, polyhamideSDD, fColorPolyhamide);
2334 ccLayer2.SetLayer(1, fgkHybAlCCThick, alSDD50p100, fColorAl);
2335 // Al at ~50%
2336
2337 x1[0] = -fgkHybridWidth/2 + fgkHybFLlowPasX + fgkHybPascalDX/2;
2338 x2[0] = -fgkHybridWidth/2 + fgkHybFLlowAmbX - fgkHybAmbraDX/2;
2339 ccLayer2.AddCheckPoint( hybrid, 0, x1, vX );
2340 ccLayer2.AddCheckPoint( hybrid, 1, x2, vX );
108bd0fe 2341 ccLayer2.CreateAndInsertBoxCableSegment(1,-90);
b7943f00 2342 ccLayer2.ResetPoints();
6932f314 2343 snprintf(ch, 20, "ccLayerC%i", i);
b7943f00 2344 ccLayer2.SetName(ch);
2345 x1[0] = -fgkHybridWidth/2 + fgkHybFLlowAmbX + fgkHybAmbraDX/2;
2346 x2[0] = fgkHybridWidth/2 - fgkHybFLUpperWidth + 3*fgkmm;
2347 x1[1] = lowLayerYmin + lowFLTotalThick + flUpThick + fgkHybAlThick
2348 + ccUpLayerTotThick/2;
2349 x2[1] = x1[1];
2350
2351 ccLayer2.AddCheckPoint( hybrid, 0, x1, vX );
2352 ccLayer2.AddCheckPoint( hybrid, 1, x2, vX );
108bd0fe 2353 ccLayer2.CreateAndInsertBoxCableSegment(1,-90);
9c8369f9 2354
2355 //**************************************************** CC to sensors:
2356 // (alas, we cannot use GeomCableFlat here because section is not constant)
4249b2ee 2357 Double_t xcc[8],ycc[8];
9c8369f9 2358 xcc[0] = -0.5*ccLayer1.GetWidth();
2359 ycc[0] = 0;
2360 xcc[1] = 0.5*ccLayer1.GetWidth();
2361 ycc[1] = 0;
2362 xcc[2] = xcc[1];
4249b2ee 2363 ycc[2] = -fgkHybCC2SensorLen*0.8;
2364 xcc[3] = xcc[2] + 0.1*fgkHybCC2SensorWid;
9c8369f9 2365 ycc[3] = ycc[2];
2366 xcc[4] = xcc[3];
4249b2ee 2367 ycc[4] = -fgkHybCC2SensorLen;
2368 xcc[5] = xcc[4] - fgkHybCC2SensorWid;
2369 ycc[5] = ycc[4];
2370 xcc[6] = xcc[5];
2371 ycc[6] = 0.8*ycc[5];
2372 xcc[7] = xcc[0];
2373 ycc[7] = 0.2*ycc[5];
9c8369f9 2374
2375 TGeoXtru* ccToSensPoliSh = new TGeoXtru(2);
4249b2ee 2376 ccToSensPoliSh->DefinePolygon(8, xcc, ycc);
9c8369f9 2377 ccToSensPoliSh->DefineSection(0, 0.);
2378 ccToSensPoliSh->DefineSection(1, ccLayer1.GetThickness());
2379
6932f314 2380 snprintf(ch, 20, "ccToSens%i", i);
9c8369f9 2381 TGeoVolume* ccToSensPoliVol = new TGeoVolume(ch, ccToSensPoliSh, polyhamideSDD);
2382 ccToSensPoliVol->SetLineColor(fColorPolyhamide);
2383
2384 TGeoXtru* ccToSensAlSh = new TGeoXtru(2);
5d9d4033 2385 xcc[6] += 0.001;
2386 ycc[7] -= 0.001;
4249b2ee 2387 ccToSensAlSh->DefinePolygon(8, xcc, ycc);
9c8369f9 2388 ccToSensAlSh->DefineSection(0, 0.);
2389 ccToSensAlSh->DefineSection(1, fgkHybAlCCThick);
2390
6932f314 2391 snprintf(ch, 20, "ccToSensAl%i", i);
9c8369f9 2392 TGeoVolume* ccToSensAlVol = new TGeoVolume(ch, ccToSensAlSh, alSDD50p100);
2393 ccToSensAlVol->SetLineColor(fColorAl);
2394
2395 ccToSensPoliVol->AddNode(ccToSensAlVol, 1, 0);
2396
2397 Double_t coord[3];
2398 ccLayer1.GetPoint(0,coord);
2399 hybrid->AddNode(ccToSensPoliVol, i+1,
2400 new TGeoCombiTrans(coord[0], coord[1], coord[2],
2401 new TGeoRotation("",-90-fgkHybCC2SensorAng, 90, 90)));
b7943f00 2402 };
c789ee28 2403
b7943f00 2404 //**************************************************** FL UP:
2405 // (last Al layer will be a special triangular shape)
2406 TGeoBBox *sFLupPolyhamide = new TGeoBBox("sFLupPolyhamide",
2407 fgkHybFLUpperWidth/2, flUpThick/2,
2408 fgkHybFLUpperLength/2);
2409 TGeoVolume *vFLupPolyhamide = new TGeoVolume("vFLupPolyhamide",
2410 sFLupPolyhamide, polyhamideSDD);
2411 vFLupPolyhamide->SetLineColor(fColorPolyhamide);
2412 TGeoTranslation *trFLupPolyhamide =
2413 new TGeoTranslation(fgkHybridWidth/2-fgkHybFLUpperWidth/2,
2414 lowLayerYmin+lowFLTotalThick+flUpThick/2,0);
2415
2416 hybrid->AddNode(vFLupPolyhamide, 1, trFLupPolyhamide);
2417
2418 TGeoArb8 *aluStrip = new TGeoArb8(fgkHybAlThick/2);
2419 aluStrip->SetVertex( 0,-fgkHybFLUpperAlDZ/2, fgkHybFLUpperWidth);
2420 aluStrip->SetVertex( 1, fgkHybFLUpperAlDZ/2, fgkHybFLUpperWidth);
2421 aluStrip->SetVertex( 2, fgkHybFLUpperAlDZ/2, fgkHybFLUpperWidth-fgkHybFLUpperAldx);
2422 aluStrip->SetVertex( 3,-fgkHybFLUpperAlDZ/2, 0);
2423 aluStrip->SetVertex( 4,-fgkHybFLUpperAlDZ/2, fgkHybFLUpperWidth);
2424 aluStrip->SetVertex( 5, fgkHybFLUpperAlDZ/2, fgkHybFLUpperWidth);
2425 aluStrip->SetVertex( 6, fgkHybFLUpperAlDZ/2, fgkHybFLUpperWidth-fgkHybFLUpperAldx);
2426 aluStrip->SetVertex( 7,-fgkHybFLUpperAlDZ/2, 0);
2427 TGeoVolume *vAluStrip = new TGeoVolume("vAluStrip",aluStrip, alSDD50p100);
2428 // Al at ~50%
2429
2430 vAluStrip->SetLineColor(fColorAl);
531d6cdc 2431 //TGeoRotation rotAluStrip("rotAluStrip",0, -90, 90);
2432 TGeoRotation *rotAluStrip = new TGeoRotation("rotAluStrip",0, -90, 90);
2433
b7943f00 2434 Double_t yRotAluStrip = lowLayerYmin+lowFLTotalThick
2435 +flUpThick+fgkHybAlThick/2;
2436 TGeoCombiTrans *aluStripTr1 = new TGeoCombiTrans(
2437 fgkHybridWidth/2,yRotAluStrip,
531d6cdc 2438 fgkHybridLength/2-fgkHybFLlowChipZ1+1*fgkmm, rotAluStrip);
b7943f00 2439 TGeoCombiTrans *aluStripTr2 = new TGeoCombiTrans(*aluStripTr1);
2440 AddTranslationToCombiTrans(aluStripTr2,0,0,
2441 fgkHybFLlowChipZ1-fgkHybFLlowChipZ2);
2442 TGeoCombiTrans *aluStripTr3 = new TGeoCombiTrans(*aluStripTr2);
2443 AddTranslationToCombiTrans(aluStripTr3,0,0,
2444 fgkHybFLlowChipZ2-fgkHybFLlowChipZ3);
2445 TGeoCombiTrans *aluStripTr4 = new TGeoCombiTrans(*aluStripTr3);
2446 AddTranslationToCombiTrans(aluStripTr4,0,0,
2447 fgkHybFLlowChipZ3-fgkHybFLlowChipZ4);
2448
2449 hybrid->AddNode(vAluStrip, 1, aluStripTr1);
2450 hybrid->AddNode(vAluStrip, 2, aluStripTr2);
2451 hybrid->AddNode(vAluStrip, 3, aluStripTr3);
2452 hybrid->AddNode(vAluStrip, 4, aluStripTr4);
b7943f00 2453 //**************************************************** SMD:
2454 TGeoBBox *hybSMD = new TGeoBBox("ITSsddSMDshape",
2455 fgkHybSMDmiddleL/2+fgkHybSMDendL,
2456 fgkHybSMDheight/2,fgkHybSMDendW/2);
2457 TGeoVolume *vHybSMD = new TGeoVolume("ITSsddSMD",hybSMD,airSDD);
2458
2459 TGeoBBox *hybSMDmiddle = new TGeoBBox("ITSsddSMDmiddleShape",
2460 fgkHybSMDmiddleL/2,fgkHybSMDheight/2,
2461 fgkHybSMDmiddleW/2);
2462 TGeoVolume *vHybSMDmiddle = new TGeoVolume("ITSsddSMDmiddle",
2463 hybSMDmiddle,medSMD);
2464 vHybSMDmiddle->SetLineColor(fColorSMD);
2465 TGeoBBox *hybSMDend = new TGeoBBox("ITSsddSMDendShape",
2466 fgkHybSMDendL/2,fgkHybSMDheight/2,fgkHybSMDendW/2);
2467 TGeoVolume *vHybSMDend = new TGeoVolume("ITSsddSMDend",
2468 hybSMDend,medSMDweld);
2469 vHybSMDend->SetLineColor(fColorSMDweld);
2470 TGeoTranslation *vHybSMDendTr1 = new TGeoTranslation("",
2471 (fgkHybSMDmiddleL+fgkHybSMDendL)/2,0,0);
2472 TGeoTranslation *vHybSMDendTr2 = new TGeoTranslation("",
2473 -(fgkHybSMDmiddleL+fgkHybSMDendL)/2,0,0);
2474 vHybSMD->AddNode(vHybSMDmiddle,1,0);
2475 vHybSMD->AddNode(vHybSMDend,1,vHybSMDendTr1);
2476 vHybSMD->AddNode(vHybSMDend,2,vHybSMDendTr2);
2477 for (Int_t i=0; i<fgkNHybSMD; i++) {
2478 TGeoTranslation *vHybSMDtr = new TGeoTranslation("",
2479 -fgkHybridWidth/2+fgkHybSMDposX[i],
2480 lowLayerYmin+lowFLTotalThick+fgkHybSMDheight/2,
2481 -fgkHybridLength/2+fgkHybSMDposZ[i]);
2482 hybrid->AddNode(vHybSMD, i+1, vHybSMDtr);
2483 };
2484
b7943f00 2485 if (iLRSide == 0) {
2486 };
2487
2488 if(GetDebug(1)) hybrid->CheckOverlaps(0.01);
2489 hybrid->SetVisibility(kFALSE);
2490 return hybrid;
531d6cdc 2491}
c789ee28 2492
db486a6e 2493//________________________________________________________________________
73dfc864 2494TGeoVolume* AliITSv11GeometrySDD::CreateLadderSegment(Int_t iLay, Int_t iSeg) {
b7943f00 2495 //
73dfc864 2496 // Return a TGeoVolume* containing a segment of a ladder.
b7943f00 2497 //
2498
e118532f 2499 TGeoMedium *phynoxSDD = GetMedium("INOX$");
108bd0fe 2500 TGeoMedium *coolerMediumSDD = GetMedium("WATER$");
73dfc864 2501 TGeoMedium *airSDD = GetMedium("SDD AIR$");
9c8369f9 2502 TGeoMedium *alSDD = GetMedium("AL$");
b7943f00 2503
2504 Double_t tDY = fgkLadderSegBoxDH/2; //space left on top of the ladder
2505 Double_t segmentLength = fgkSegmentLength;
2506 Double_t spaceBetweenCables = 500*fgkmicron;
2507
2508 //*****************************************
2509 // Set parameters according to (iLay,iSeg):
2510 //*****************************************
2511 Int_t nDetectors = fgkLay3Ndet;
2512 Double_t coolPipeSuppH = fgkLay3CoolPipeSuppH;
2513 Double_t sensorCenterZPos = fLay3sensorZPos[iSeg]-
2514 (fgkSegmentLength*fgkLay3Ndet/2. -
2515 fgkSegmentLength/2-(iSeg)*fgkSegmentLength);
2516 // sensorCenterZPos = z in segment local coord syst.
2517
2518 AliITSv11GeomCableFlat *digitCableA = fDigitCableLay3A;
2519 AliITSv11GeomCableFlat *digitCableB = fDigitCableLay3B;
2520
2521 if (iLay==3) {
2522 } else if (iLay==4) {
2523 nDetectors = fgkLay4Ndet;
2524 coolPipeSuppH = fgkLay4CoolPipeSuppH;
2525 sensorCenterZPos = fLay4sensorZPos[iSeg]-
2526 (fgkSegmentLength*fgkLay4Ndet/2. -
2527 fgkSegmentLength/2-(iSeg)*fgkSegmentLength);
2528 digitCableA = fDigitCableLay4A;
2529 digitCableB = fDigitCableLay4B;
2530 } else
2531 printf("AliITSv11GeometrySDD::CreateLadderSegment Wrong layer index !");
2532
2533
2534 Double_t cableSideSign = -1;
2535 if (iSeg<nDetectors/2) cableSideSign = 1;
2536 Double_t spaceForCables = spaceBetweenCables*
2537 (nDetectors-TMath::Abs(nDetectors-2*iSeg-1)-1)/2
2538 +0.1*fgkmicron;
2539 // gives [0-1-2-2-1-0]*spaceBetweenCables
2540 // or [0-1-2-3-3-2-1-0]*spaceBetweenCables
2541 Int_t iUpdateCableMin;
2542 Int_t iUpdateCableMax;
2543 if (cableSideSign==-1) {
2544 iUpdateCableMin = nDetectors/2;
2545 iUpdateCableMax = iSeg-1;
2546 } else {
2547 iUpdateCableMin = iSeg+1;
2548 iUpdateCableMax = nDetectors/2-1;
2549 };
2550
2551 if(GetDebug(1)){
2552 cout << "Segment ("<< iLay <<',' << iSeg
2553 << ") : sensor z shift in local segment coord.="
2554 << sensorCenterZPos << endl;
2555 };
2556
2557 //****************************
2558 // The segment volume
2559 //****************************
108bd0fe 2560
73dfc864 2561 // Use of TGeoVolumeAssembly increases the calculation time of overlaps and very
2562 // likely slows down the transport of particles through the geometry
2563
2564 //TGeoVolumeAssembly *virtualSeg = new TGeoVolumeAssembly("ITSsddSegment");
2565
9c8369f9 2566// TGeoBBox *segBox = new TGeoBBox("ITSsddSegBox",
2567// fgkLadderWidth/2+fgkPinSuppWidth+fgkLadderSegBoxDW,
2568// fgkLadderHeight/2+fgkLadderSegBoxDH/2,
2569// segmentLength/2);
2570 // A shaped Xtru instead of a simple BBox to avoid overlaps and extrusions
2571 TGeoXtru *segBox = new TGeoXtru(2);
2572 segBox->SetName("ITSsddSegBox");
2573
4249b2ee 2574 Double_t xseg[12],yseg[12];
2575 xseg[ 0] = -(fgkLadderWidth/2+fgkPinSuppWidth+fgkLadderSegBoxDW);
2576 yseg[ 0] = fgkLadderHeight/2+fgkLadderSegBoxDH/2;
2577 xseg[ 1] = xseg[0];
2578 yseg[ 1] = -yseg[0];
2579 xseg[ 2] = 0.87*xseg[1];
2580 yseg[ 2] = yseg[1];
4f7d5a2a 2581 xseg[ 3] = 0.77*xseg[1];
2582 yseg[ 3] = -yseg[0] - 0.62*fgkHybCC2SensorLen;
2583 xseg[ 4] = 0.72*xseg[1];
4249b2ee 2584 yseg[ 4] = yseg[3];
2585 xseg[ 5] = 0.83*xseg[1];
2586 yseg[ 5] = yseg[1];
2587
2588 for (Int_t j=0; j<6; j++) {
2589 xseg[6+j] = -xseg[5-j];
2590 yseg[6+j] = yseg[5-j];
2591 }
2592
2593 segBox->DefinePolygon(12, xseg, yseg);
9c8369f9 2594 segBox->DefineSection(0,-segmentLength/2);
2595 segBox->DefineSection(1, segmentLength/2);
2596
73dfc864 2597 TGeoVolume *virtualSeg = new TGeoVolume("ITSsddSegment",
2598 segBox, airSDD);
2599 virtualSeg->SetVisibility(kFALSE);
b7943f00 2600
2601 //******************************
2602 // Carbon fiber structure :
2603 //******************************
2604
2605 virtualSeg->AddNode(fLaddSegCommonVol[0], 1, fLaddSegCommonTr[0]);
2606 Int_t volumeIndex = 1;
2607 for (Int_t i = 1; i<fgkNladdSegCommonVol;i++ ) {
2608 if (fLaddSegCommonVol[i]==fLaddSegCommonVol[i-1])
2609 volumeIndex++;
2610 else
2611 volumeIndex = 1;
2612 virtualSeg->AddNode(fLaddSegCommonVol[i], volumeIndex,
2613 fLaddSegCommonTr[i]);
2614 };
2615
2616 //**********************************
2617 // Pine support of the sensors :
2618 //**********************************
531d6cdc 2619 TGeoRotation *rotPS1 = new TGeoRotation("",0,-90,90);
2620 TGeoRotation *rotPS2 = new TGeoRotation("",0,-90,-90);
2621
73dfc864 2622 // The use of the following constructor type allow to use rotPS1 and rotPS2
2623 // (and not copy them) therefore we gain some memory
b7943f00 2624 TGeoCombiTrans *transPS1 = new TGeoCombiTrans( fgkPinDYOnSensor,
2625 - fgkLadderHeight/2.-tDY
2626 + fgkPinSuppHeight/2.,
531d6cdc 2627 sensorCenterZPos+fgkPinDXminOnSensor,rotPS1);
73dfc864 2628
2629 TGeoCombiTrans *transPS2 = new TGeoCombiTrans( fgkPinDYOnSensor,
2630 - fgkLadderHeight/2.-tDY
2631 + fgkPinSuppHeight/2.,
2632 sensorCenterZPos+fgkPinDXminOnSensor,rotPS1);
b7943f00 2633 AddTranslationToCombiTrans(transPS2, 0, 0, fgkPinPinDDXOnSensor);
73dfc864 2634
2635 TGeoCombiTrans *transPS3 = new TGeoCombiTrans( fgkPinDYOnSensor,
2636 - fgkLadderHeight/2.-tDY
2637 + fgkPinSuppHeight/2.,
2638 sensorCenterZPos+fgkPinDXminOnSensor,rotPS1);
b7943f00 2639 AddTranslationToCombiTrans(transPS3, 0, 0, -2*fgkPinDXminOnSensor);
73dfc864 2640
2641 TGeoCombiTrans *transPS4 = new TGeoCombiTrans( fgkPinDYOnSensor,
2642 - fgkLadderHeight/2.-tDY
2643 + fgkPinSuppHeight/2.,
2644 sensorCenterZPos+fgkPinDXminOnSensor,rotPS1);
2645 AddTranslationToCombiTrans(transPS4, 0, 0, -2*fgkPinDXminOnSensor-fgkPinPinDDXOnSensor);
b7943f00 2646
2647 TGeoCombiTrans *transPS5 = new TGeoCombiTrans( -fgkPinDYOnSensor,
2648 - fgkLadderHeight/2. - tDY
2649 + fgkPinSuppHeight/2.,
531d6cdc 2650 sensorCenterZPos+fgkPinDXminOnSensor,rotPS2);
73dfc864 2651
2652 TGeoCombiTrans *transPS6 = new TGeoCombiTrans( -fgkPinDYOnSensor,
2653 - fgkLadderHeight/2. - tDY
2654 + fgkPinSuppHeight/2.,
2655 sensorCenterZPos+fgkPinDXminOnSensor,rotPS2);
b7943f00 2656 AddTranslationToCombiTrans(transPS6, 0, 0, fgkPinPinDDXOnSensor);
73dfc864 2657
2658 TGeoCombiTrans *transPS7 = new TGeoCombiTrans( -fgkPinDYOnSensor,
2659 - fgkLadderHeight/2. - tDY
2660 + fgkPinSuppHeight/2.,
2661 sensorCenterZPos+fgkPinDXminOnSensor,rotPS2);
b7943f00 2662 AddTranslationToCombiTrans(transPS7, 0, 0, -2*fgkPinDXminOnSensor);
73dfc864 2663
2664 TGeoCombiTrans *transPS8 = new TGeoCombiTrans( -fgkPinDYOnSensor,
2665 - fgkLadderHeight/2. - tDY
2666 + fgkPinSuppHeight/2.,
2667 sensorCenterZPos+fgkPinDXminOnSensor,rotPS2);
2668 AddTranslationToCombiTrans(transPS8, 0, 0, -2*fgkPinDXminOnSensor-fgkPinPinDDXOnSensor);
b7943f00 2669
2670 virtualSeg->AddNode(fPinSupport, 1, transPS1);
2671 virtualSeg->AddNode(fPinSupport, 2, transPS2);
2672 virtualSeg->AddNode(fPinSupport, 3, transPS3);
2673 virtualSeg->AddNode(fPinSupport, 4, transPS4);
2674 virtualSeg->AddNode(fPinSupport, 5, transPS5);
2675 virtualSeg->AddNode(fPinSupport, 6, transPS6);
2676 virtualSeg->AddNode(fPinSupport, 7, transPS7);
2677 virtualSeg->AddNode(fPinSupport, 8, transPS8);
e118532f 2678
9c8369f9 2679 TGeoMedium *pinMed = GetMedium("RYTON$");
e118532f 2680 Double_t fgkPinHeight = 4.5*fgkmm;
2681 TGeoTube *pineS = new TGeoTube("ITSsddPin",0,fgkPinR,
2682 fgkPinHeight/2.);
2683 TGeoVolume *pineV = new TGeoVolume("ITSsddPinVol", pineS, pinMed);
2684
2685 TGeoCombiTrans *transPS2b = new TGeoCombiTrans( fgkPinDYOnSensor,
2686 - fgkLadderHeight/2.-tDY
2687 + fgkPinHeight/2.,
2688 sensorCenterZPos+fgkPinDXminOnSensor,rotPS1);
2689 AddTranslationToCombiTrans(transPS2b, 0, 0, fgkPinPinDDXOnSensor);
2690 virtualSeg->AddNode(pineV, 1, transPS2b);
2691
2692 TGeoCombiTrans *transPS6b = new TGeoCombiTrans( -fgkPinDYOnSensor,
2693 - fgkLadderHeight/2. - tDY
2694 + fgkPinHeight/2.,
2695 sensorCenterZPos+fgkPinDXminOnSensor,rotPS2);
2696 AddTranslationToCombiTrans(transPS6b, 0, 0, fgkPinPinDDXOnSensor);
2697 virtualSeg->AddNode(pineV, 2, transPS6b);
2698
2699
2700 TGeoCombiTrans *transPS4b = new TGeoCombiTrans( fgkPinDYOnSensor,
2701 - fgkLadderHeight/2.-tDY
2702 + fgkPinHeight/2.,
2703 sensorCenterZPos+fgkPinDXminOnSensor,rotPS1);
2704 AddTranslationToCombiTrans(transPS4b, 0, 0, -2*fgkPinDXminOnSensor-fgkPinPinDDXOnSensor);
2705 virtualSeg->AddNode(pineV, 3, transPS4b);
2706
2707 TGeoCombiTrans *transPS8b = new TGeoCombiTrans( -fgkPinDYOnSensor,
2708 - fgkLadderHeight/2. - tDY
2709 + fgkPinHeight/2.,
2710 sensorCenterZPos+fgkPinDXminOnSensor,rotPS2);
2711 AddTranslationToCombiTrans(transPS8b, 0, 0, -2*fgkPinDXminOnSensor-fgkPinPinDDXOnSensor);
2712 virtualSeg->AddNode(pineV, 4, transPS8b);
2713
2714
b7943f00 2715 //******************************
2716 // Cooling pipe supports :
2717 //******************************
2718 Double_t triangleHeight = fgkLadderHeight - fgkLadderBeamRadius;
2719 Double_t halfTheta = TMath::ATan( 0.5*fgkLadderWidth/triangleHeight );
2720 Double_t triangleCPaxeDist = fgkCoolPipeSuppAxeDist-fgkCoolPipeSuppWidthExt-
2721 fgkCoolPipeSuppWidthIn+fgkLadderBeamRadius;
2722
2723 Double_t coolPipeSuppL = TMath::Tan(halfTheta)*
2724 (triangleHeight+triangleCPaxeDist/
2725 TMath::Sin(halfTheta)-coolPipeSuppH);
2726 if (fAddCoolingSyst) {
531d6cdc 2727 TGeoRotation *rotCPS2 = new TGeoRotation("", -halfTheta*TMath::RadToDeg(), -90, 90);
2728 TGeoRotation *rotCPS1 = new TGeoRotation("", halfTheta*TMath::RadToDeg(), -90, -90);
b7943f00 2729 TGeoCombiTrans *transCPS1 = new TGeoCombiTrans(coolPipeSuppL,
fa4639a3 2730 -fgkLadderHeight/2. - tDY
b7943f00 2731 +coolPipeSuppH+fgkLadderBeamRadius,
531d6cdc 2732 -segmentLength/2., rotCPS1);
73dfc864 2733
2734 TGeoCombiTrans *transCPS3 = new TGeoCombiTrans(coolPipeSuppL,
2735 -fgkLadderHeight/2. - tDY
2736 +coolPipeSuppH+fgkLadderBeamRadius,
2737 -segmentLength/2., rotCPS1);
b7943f00 2738 AddTranslationToCombiTrans(transCPS3, 0, 0, segmentLength);
2739
2740 TGeoCombiTrans *transCPS2 = new TGeoCombiTrans(-coolPipeSuppL,
fa4639a3 2741 -fgkLadderHeight/2.- tDY
b7943f00 2742 +coolPipeSuppH+fgkLadderBeamRadius,
531d6cdc 2743 segmentLength/2., rotCPS2);
73dfc864 2744
2745 TGeoCombiTrans *transCPS4 = new TGeoCombiTrans(-coolPipeSuppL,
2746 -fgkLadderHeight/2.- tDY
2747 +coolPipeSuppH+fgkLadderBeamRadius,
2748 segmentLength/2., rotCPS2);
b7943f00 2749 AddTranslationToCombiTrans(transCPS4, 0, 0, -segmentLength);
2750
2751 virtualSeg->AddNode(fCoolPipeSupportL, 1, transCPS1);
2752 virtualSeg->AddNode(fCoolPipeSupportL, 2, transCPS2);
2753 virtualSeg->AddNode(fCoolPipeSupportR, 1, transCPS3);
2754 virtualSeg->AddNode(fCoolPipeSupportR, 2, transCPS4);
2755 };
2756
2757 //************************
2758 // Cooling pipes :
2759 //************************
2760 TGeoTranslation *pipeTr1 = new TGeoTranslation(coolPipeSuppL,
2761 -fgkLadderHeight/2. - tDY +
2762 fgkLadderBeamRadius+coolPipeSuppH, 0);
2763 TGeoTranslation *pipeTr2 = new TGeoTranslation(-coolPipeSuppL,
2764 -fgkLadderHeight/2.- tDY +
2765 fgkLadderBeamRadius+coolPipeSuppH, 0);
2766
2767 if (fAddCoolingSyst) {
108bd0fe 2768 TGeoTube *coolingPipeShape = new TGeoTube( fgkCoolPipeInnerDiam/2,
2769 fgkCoolPipeOuterDiam/2,
2770 segmentLength/2);
2771 TGeoTube *coolerShape = new TGeoTube( 0, fgkCoolPipeInnerDiam/2,
2772 segmentLength/2);
2773
2774 TGeoVolume *coolingPipe = new TGeoVolume("ITSsddCoolingPipe",
2775 coolingPipeShape, phynoxSDD );
2776 coolingPipe->SetLineColor(fColorPhynox);
2777 TGeoVolume *cooler = new TGeoVolume("ITSsddCoolingLiquid",coolerShape,
2778 coolerMediumSDD );
2779
2780
2781 virtualSeg->AddNode(coolingPipe, 1, pipeTr1);
2782 virtualSeg->AddNode(coolingPipe, 2, pipeTr2);
2783 if (fCoolingOn) {
2784 virtualSeg->AddNode(cooler, 1, pipeTr1);
2785 virtualSeg->AddNode(cooler, 2, pipeTr2);
2786 };
b7943f00 2787 };
c789ee28 2788
b7943f00 2789 //**********************************
2790 // Bases of hybrid thermal bridges
2791 //**********************************
2792 Double_t shiftHyb = 1.05; // shift between thermal Bridge base and thermal bridge
2793 // approx !!! not clear on 0752/14-A
2794 if (fAddCoolingSyst) {
73dfc864 2795 TGeoRotation rotHybrid1("", 0, 0, -90 - fgkHybridAngle);
2796 TGeoRotation rotHybrid2("", 0 ,180, 90 - fgkHybridAngle);
2797 TGeoCombiTrans *baseTr1 = new TGeoCombiTrans(*pipeTr2, rotHybrid1);
2798 TGeoCombiTrans *baseTr2 = new TGeoCombiTrans(*pipeTr1, rotHybrid2);
b7943f00 2799
2800 virtualSeg->AddNode(fBaseThermalBridge, 1, baseTr1);
2801 virtualSeg->AddNode(fBaseThermalBridge, 2, baseTr2);
2802 };
2803
2804 //*************************
2805 // the 2 hybrids :
2806 //*************************
4249b2ee 2807 Double_t hybDy = ((TGeoXtru*)fHybrid->GetShape())->GetY(2);
b7943f00 2808 Double_t distAxeToHybridCenter = fgkBTBaxisAtoBase+hybDy;
2809
2810 Double_t hybrVolX = ( distAxeToHybridCenter*CosD(fgkHybridAngle)
2811 - shiftHyb*SinD(fgkHybridAngle) );
2812 Double_t hybrVolY = ( distAxeToHybridCenter*SinD(fgkHybridAngle)
2813 + shiftHyb*CosD(fgkHybridAngle) );
2814 if (fAddHybrids) {
2815 TGeoRotation rotHybrid3("", 0, 0, 90. - fgkHybridAngle);
2816 TGeoRotation rotHybrid4("", 0 ,180, -90. - fgkHybridAngle);
2817 TGeoCombiTrans *hybTr1 = new TGeoCombiTrans(*pipeTr2, rotHybrid3);
2818 TGeoCombiTrans *hybTr2 = new TGeoCombiTrans(*pipeTr1, rotHybrid4);
2819 AddTranslationToCombiTrans( hybTr1, -hybrVolX, hybrVolY, 0);
2820 AddTranslationToCombiTrans( hybTr2, hybrVolX, hybrVolY, 0);
2821
2822 virtualSeg->AddNode(fHybrid, 1, hybTr1);
2823 virtualSeg->AddNode(fHybrid, 2, hybTr2);
2824 };
2825
2826 //***********
2827 // cables
2828 //***********
2829 if (fAddCables) {
2830 // Starting from this segment
9c8369f9 2831 Double_t hybDz = ((TGeoXtru*)fHybrid->GetShape())->GetZ(1);
2832 Double_t hybDx = ((TGeoXtru*)fHybrid->GetShape())->GetX(1);
b7943f00 2833 Double_t posDigitCableAlongHyb = shiftHyb+ hybDx
2834 - digitCableA->GetWidth()/2;
2835 Double_t distAxeToDigitCableCenter = distAxeToHybridCenter+hybDy
2836 - digitCableA->GetThickness()/2;
2837
2838 Double_t digitCableX = ( coolPipeSuppL
2839 + distAxeToDigitCableCenter*CosD(fgkHybridAngle)
2840 - posDigitCableAlongHyb*SinD(fgkHybridAngle) );
2841 Double_t digitCableY = ( - fgkLadderHeight/2.-TMath::Abs(tDY)
2842 + fgkLadderBeamRadius+coolPipeSuppH
2843 + distAxeToDigitCableCenter*SinD(fgkHybridAngle)
2844 + posDigitCableAlongHyb*CosD(fgkHybridAngle) );
2845
2846
2847 Double_t digitCableCenterA0[3]={ -cableSideSign*digitCableX,
2848 digitCableY, cableSideSign*hybDz };
2849 Double_t digitCableCenterA1[3] = {
2850 -cableSideSign*(digitCableX+spaceForCables*CosD(fgkHybridAngle)),
2851 digitCableY+spaceForCables*SinD(fgkHybridAngle),
2852 cableSideSign*segmentLength/2 };
2853
2854 Double_t digitCableCenterB0[3]={ cableSideSign*digitCableX,
2855 digitCableY,cableSideSign*hybDz};
2856 Double_t digitCableCenterB1[3]={
2857 cableSideSign*(digitCableX+spaceForCables*CosD(fgkHybridAngle)),
2858 digitCableY+spaceForCables*SinD(fgkHybridAngle),
2859 cableSideSign*segmentLength/2 };
2860
2861 Double_t vZ[3] = {0,0,1};
2862 digitCableA[iSeg].AddCheckPoint( virtualSeg, 0, digitCableCenterA0, vZ);
2863 digitCableA[iSeg].AddCheckPoint( virtualSeg, 1, digitCableCenterA1, vZ);
2864 digitCableB[iSeg].AddCheckPoint( virtualSeg, 0, digitCableCenterB0, vZ);
2865 digitCableB[iSeg].AddCheckPoint( virtualSeg, 1, digitCableCenterB1, vZ);
2866
2867 // Updating the other cables
2868 for (Int_t iCable=iUpdateCableMin; iCable<=iUpdateCableMax; iCable++) {
2869
2870 Int_t iPoint = TMath::Abs(iCable-iSeg)+1;
2871 Double_t coord[3];
2872 digitCableA[iCable].GetPoint( 1, coord);
2873 digitCableA[iCable].AddCheckPoint( virtualSeg, iPoint, coord, vZ);
2874 digitCableB[iCable].GetPoint( 1, coord);
2875 digitCableB[iCable].AddCheckPoint( virtualSeg, iPoint, coord, vZ);
2876 };
9c8369f9 2877
2878 // Now the small Al foil on the same hybrid side
2879 Double_t xfoil[5],yfoil[5];
2880 hybDx *= 0.95;
2881 xfoil[0] = -fgkHybridAlFoilWide/2;
2882 yfoil[0] = hybDx;
2883 xfoil[1] = fgkHybridAlFoilWide/2;
2884 yfoil[1] = yfoil[0];
2885 xfoil[2] = xfoil[1];
2886 yfoil[2] = -hybDx + (fgkHybridAlFoilWide - fgkHybridAlFoilSide);
2887 xfoil[3] = xfoil[0] + fgkHybridAlFoilSide;
2888 yfoil[3] = -hybDx;
2889 xfoil[4] = xfoil[0];
2890 yfoil[4] = yfoil[3];
2891
2892 TGeoXtru* alFoilSh = new TGeoXtru(2);
2893 alFoilSh->DefinePolygon(5, xfoil, yfoil);
2894 alFoilSh->DefineSection(0,-fgkHybridAlFoilThick/2);
2895 alFoilSh->DefineSection(1, fgkHybridAlFoilThick/2);
2896
2897 TGeoVolume* alFoilVol = new TGeoVolume("ITSsddAlFoilHybSide", alFoilSh, alSDD);
2898 alFoilVol->SetLineColor(fColorAl);
2899
2900 Double_t zFoilTrans = cableSideSign*(hybDz + alFoilSh->GetX(1));
2901 TGeoRotation rotFoil3;
2902 TGeoRotation rotFoil4;
2903 if (cableSideSign > 0) {
2904 rotFoil3 = TGeoRotation("", 90-fgkHybridAngle, -90, -90);
2905 rotFoil4 = TGeoRotation("",-90+fgkHybridAngle, 90, 90);
2906 } else {
2907 rotFoil3 = TGeoRotation("", 90-fgkHybridAngle, 90, -90);
2908 rotFoil4 = TGeoRotation("",-90+fgkHybridAngle, -90, 90);
2909 }
2910 TGeoCombiTrans *foiTr1 = new TGeoCombiTrans(*pipeTr2, rotFoil3);
2911 TGeoCombiTrans *foiTr2 = new TGeoCombiTrans(*pipeTr1, rotFoil4);
2912 AddTranslationToCombiTrans( foiTr1, -hybrVolX, hybrVolY, zFoilTrans);
2913 AddTranslationToCombiTrans( foiTr2, hybrVolX, hybrVolY, zFoilTrans);
2914
2915 virtualSeg->AddNode(alFoilVol, 1, foiTr1);
2916 virtualSeg->AddNode(alFoilVol, 2, foiTr2);
b7943f00 2917 };
2918
2919 //**********************************
2920 if(GetDebug(1)) virtualSeg->CheckOverlaps(0.01);
b7943f00 2921 return virtualSeg;
531d6cdc 2922}
db486a6e 2923
c789ee28 2924
2925//________________________________________________________________________
2926TGeoVolume* AliITSv11GeometrySDD::CreatePinSupport() {
2927//
e118532f 2928// Create a pine support and its pine
c789ee28 2929// axis of rotation is the cone axis, center in its middle
2930//
9c8369f9 2931 TGeoMedium *rytonSDD = GetMedium("RYTON$");
e118532f 2932
b7943f00 2933 TGeoCone *cone = new TGeoCone("ITSsddPinSuppCone",fgkPinSuppHeight/2.,
2934 0,fgkPinSuppRmax,0,fgkPinSuppRmax-
2935 fgkPinSuppHeight*TanD(fgkPinSuppConeAngle) );
2936 TGeoBBox *tong = new TGeoBBox("ITSsddPinSuppTong",fgkPinSuppRmax,
2937 fgkPinSuppLength/2.,fgkPinSuppThickness/2.);
2938 TGeoTube *hole = new TGeoTube("ITSsddPinSuppHole",0,fgkPinR,
e118532f 2939 fgkPinSuppHeight/2.+0.00001);
2940 // 0.00001 is for seing the actual hole (avoid viewer artefact)
2941
c789ee28 2942 if(GetDebug(3)){// Remove compiler warning.
db486a6e 2943 cone->InspectShape();
2944 tong->InspectShape();
2945 hole->InspectShape();
c789ee28 2946 };
db486a6e 2947
2948 TGeoTranslation *tongTrans = new TGeoTranslation("ITSsddPinSuppTongTr",0,
b7943f00 2949 fgkPinSuppLength/2.,-fgkPinSuppHeight/2.+fgkPinSuppThickness/2.);
db486a6e 2950 tongTrans->RegisterYourself();
2951 TGeoCompositeShape *pinSupportShape = new TGeoCompositeShape(
b7943f00 2952 "ITSsddPinSupportShape","(ITSsddPinSuppCone+"
e118532f 2953 "ITSsddPinSuppTong:ITSsddPinSuppTongTr)-ITSsddPinSuppHole");
db486a6e 2954
e118532f 2955 TGeoVolume *pinSupport = new TGeoVolume("ITSsddPinSupport", pinSupportShape,
db486a6e 2956 rytonSDD);
c789ee28 2957 pinSupport->SetLineColor(fColorRyton);
e118532f 2958
db486a6e 2959 return pinSupport;
531d6cdc 2960}
c789ee28 2961
b7943f00 2962
db486a6e 2963//________________________________________________________________________
c789ee28 2964TGeoVolume* AliITSv11GeometrySDD::CreateCoolPipeSupportL() {
2965//
2966// Create half of the cooling pipe support (ALR-0752/3)
2967//
2968
b7943f00 2969 Double_t diffX = fgkCoolPipeSuppHeight*TanD(fgkCoolPipeSuppAngle);
c789ee28 2970
b7943f00 2971 TGeoArb8 *side1 = new TGeoArb8(fgkCoolPipeSuppHeight/2.);
8f20b5e4 2972 side1->SetName("ITSsddCPSside1");
b7943f00 2973 side1->SetVertex( 0, 0, -fgkCoolPipeSuppWidthExt/2.);
8f20b5e4 2974 side1->SetVertex( 1, 0, fgkCoolPipeSuppWidthExt/2.);
b7943f00 2975 side1->SetVertex( 2, fgkCoolPipeSuppMaxLength/2.-diffX,
2976 fgkCoolPipeSuppWidthExt/2.);
8f20b5e4 2977 side1->SetVertex( 3, fgkCoolPipeSuppMaxLength/2.-diffX,
b7943f00 2978 -fgkCoolPipeSuppWidthExt/2.);
8f20b5e4 2979 side1->SetVertex( 4, 0, -fgkCoolPipeSuppWidthExt/2.);
2980 side1->SetVertex( 5, 0, fgkCoolPipeSuppWidthExt/2.);
b7943f00 2981 side1->SetVertex( 6, fgkCoolPipeSuppMaxLength/2.,
2982 fgkCoolPipeSuppWidthExt/2.);
8f20b5e4 2983 side1->SetVertex( 7, fgkCoolPipeSuppMaxLength/2.,
2984 -fgkCoolPipeSuppWidthExt/2.);
c789ee28 2985
2986 TGeoTranslation *side1Tr = new TGeoTranslation("ITSsddCPStr1",0,
b7943f00 2987 - fgkCoolPipeSuppAxeDist
2988 + fgkCoolPipeSuppWidthExt/2., 0);
c789ee28 2989 side1Tr->RegisterYourself();
2990 TGeoTranslation *side2Tr = new TGeoTranslation("ITSsddCPStr2",0,
b7943f00 2991 - fgkCoolPipeSuppAxeDist
2992 + fgkCoolPipeSuppWidthExt*3/2.
2993 + fgkCoolPipeSuppWidthIn,0);
c789ee28 2994 side2Tr->RegisterYourself();
2995
2996 TGeoBBox *middle = new TGeoBBox("ITSsddCPSmiddle",
b7943f00 2997 (fgkCoolPipeSuppMaxLength/2.-fgkCoolPipeSuppSlitL)/2.,
2998 fgkCoolPipeSuppWidthIn/2., fgkCoolPipeSuppHeight/2.);
c789ee28 2999 TGeoTranslation *middleTr =
3000 new TGeoTranslation("ITSsddCPStr3",
b7943f00 3001 (fgkCoolPipeSuppMaxLength/2.-fgkCoolPipeSuppSlitL)/2.,
3002 -fgkCoolPipeSuppAxeDist+fgkCoolPipeSuppWidthExt
3003 +fgkCoolPipeSuppWidthIn/2., 0);
c789ee28 3004 middleTr->RegisterYourself();
3005
3006 TGeoBBox *axeBox = new TGeoBBox("ITSsddCPSaxeBox",
b7943f00 3007 fgkCoolPipeSuppTongW/4.,
3008 (fgkCoolPipeSuppFulWidth
3009 - 2*fgkCoolPipeSuppWidthExt
3010 - fgkCoolPipeSuppWidthIn)/2,
3011 fgkCoolPipeSuppHeight/2.);
c789ee28 3012
3013 TGeoTranslation *axeBoxTr = new TGeoTranslation("ITSsddCPSAxBoxTr",
b7943f00 3014 fgkCoolPipeSuppTongW/4.,
3015 - fgkCoolPipeSuppAxeDist
3016 + fgkCoolPipeSuppFulWidth
c789ee28 3017 - axeBox->GetDY(), 0);
3018 axeBoxTr->RegisterYourself();
3019
b7943f00 3020 TGeoTube *axe = new TGeoTube("ITSsddCPSaxe",0,fgkCoolPipeSuppHoleDiam/2.,
3021 fgkCoolPipeSuppTongW/4.);
c789ee28 3022
531d6cdc 3023 TGeoRotation *axeRot = new TGeoRotation("ITSsddCPSaxeRot",90,90,0);
c789ee28 3024 TGeoCombiTrans *axeTrans = new TGeoCombiTrans("ITSsddCPSaxeTr",
531d6cdc 3025 fgkCoolPipeSuppTongW/4.,0,0,axeRot);
c789ee28 3026 axeTrans->RegisterYourself();
531d6cdc 3027 //delete axeRot; // make the code crash, no idea of why !!!
c789ee28 3028
3029 if(GetDebug(3)){
3030 middle->InspectShape();
3031 axe->InspectShape();
3032 };
3033
9c8369f9 3034 TGeoMedium *rytonSDD = GetMedium("RYTON$");
c789ee28 3035
3036 TGeoCompositeShape *coolPipeSuppShape = new TGeoCompositeShape(
3037 "ITSsddCoolPipeSuppShapeL",
3038 "ITSsddCPSmiddle:ITSsddCPStr3"
3039 "+ITSsddCPSside1:ITSsddCPStr1"
3040 "+ITSsddCPSside1:ITSsddCPStr2"
3041 "+ITSsddCPSaxeBox:ITSsddCPSAxBoxTr"
3042 "-ITSsddCPSaxe:ITSsddCPSaxeTr");
3043 TGeoVolume *coolPipeSupp = new TGeoVolume("ITSsddCoolPipeSupportL",
3044 coolPipeSuppShape, rytonSDD);
3045
3046 coolPipeSupp->SetLineColor(fColorRyton);
531d6cdc 3047
c789ee28 3048 return coolPipeSupp;
531d6cdc 3049}
3050
c789ee28 3051
3052//________________________________________________________________________
3053TGeoVolume* AliITSv11GeometrySDD::CreateCoolPipeSupportR() {
3054//
3055//Create half of the cooling pipe support (ALR-0752/3)
3056//
3057
b7943f00 3058 Double_t diffX = fgkCoolPipeSuppHeight*TanD(fgkCoolPipeSuppAngle);
c789ee28 3059
b7943f00 3060 TGeoArb8 *side1 = new TGeoArb8(fgkCoolPipeSuppHeight/2.);
8f20b5e4 3061 side1->SetName("ITSsddCPSside1R");
b7943f00 3062 side1->SetVertex( 0, 0, -fgkCoolPipeSuppWidthExt/2.);
3063 side1->SetVertex( 1, -(fgkCoolPipeSuppMaxLength/2.-diffX),
3064 -fgkCoolPipeSuppWidthExt/2.);
3065 side1->SetVertex( 2, -(fgkCoolPipeSuppMaxLength/2.-diffX),
3066 fgkCoolPipeSuppWidthExt/2.);
3067 side1->SetVertex( 3, 0, fgkCoolPipeSuppWidthExt/2.);
3068 side1->SetVertex( 4, 0, -fgkCoolPipeSuppWidthExt/2.);
3069 side1->SetVertex( 5, -fgkCoolPipeSuppMaxLength/2.,
3070 -fgkCoolPipeSuppWidthExt/2.);
3071 side1->SetVertex( 6, -fgkCoolPipeSuppMaxLength/2.,
3072 fgkCoolPipeSuppWidthExt/2.);
3073 side1->SetVertex( 7, 0, fgkCoolPipeSuppWidthExt/2.);
c789ee28 3074
3075 TGeoTranslation *side1Tr = new TGeoTranslation("ITSsddCPStr1R",0,
b7943f00 3076 - fgkCoolPipeSuppAxeDist
3077 + fgkCoolPipeSuppWidthExt/2., 0);
c789ee28 3078 side1Tr->RegisterYourself();
3079 TGeoTranslation *side2Tr = new TGeoTranslation("ITSsddCPStr2R",0,
b7943f00 3080 - fgkCoolPipeSuppAxeDist
3081 + fgkCoolPipeSuppWidthExt*3/2.
3082 + fgkCoolPipeSuppWidthIn, 0);
c789ee28 3083 side2Tr->RegisterYourself();
3084
3085 TGeoBBox *middle = new TGeoBBox("ITSsddCPSmiddleR",
b7943f00 3086 (fgkCoolPipeSuppMaxLength/2.
3087 - fgkCoolPipeSuppSlitL)/2.,
3088 fgkCoolPipeSuppWidthIn/2.,
3089 fgkCoolPipeSuppHeight/2.);
c789ee28 3090 TGeoTranslation *middleTr =
3091 new TGeoTranslation("ITSsddCPStr3R",
b7943f00 3092 -( fgkCoolPipeSuppMaxLength/2.
3093 -fgkCoolPipeSuppSlitL)/2.,
3094 -fgkCoolPipeSuppAxeDist + fgkCoolPipeSuppWidthExt
3095 + fgkCoolPipeSuppWidthIn/2.,0);
c789ee28 3096 middleTr->RegisterYourself();
3097
3098 TGeoBBox *axeBox = new TGeoBBox("ITSsddCPSaxeBoxR",
b7943f00 3099 fgkCoolPipeSuppTongW/4.,
3100 (fgkCoolPipeSuppFulWidth
3101 - 2*fgkCoolPipeSuppWidthExt
3102 - fgkCoolPipeSuppWidthIn)/2,
3103 fgkCoolPipeSuppHeight/2.);
c789ee28 3104
3105 TGeoTranslation *axeBoxTr = new TGeoTranslation("ITSsddCPSAxBoxTrR",
b7943f00 3106 - fgkCoolPipeSuppTongW/4.,
3107 - fgkCoolPipeSuppAxeDist
3108 + fgkCoolPipeSuppFulWidth
c789ee28 3109 - axeBox->GetDY(),0);
3110 axeBoxTr->RegisterYourself();
3111
b7943f00 3112 TGeoTube *axe = new TGeoTube("ITSsddCPSaxeR",0,fgkCoolPipeSuppHoleDiam/2.,
3113 fgkCoolPipeSuppTongW/4.);
531d6cdc 3114
3115 TGeoRotation *axeRot = new TGeoRotation("ITSsddCPSaxeRotR",90,90,0);
c789ee28 3116 TGeoCombiTrans *axeTrans = new TGeoCombiTrans("ITSsddCPSaxeTrR",
531d6cdc 3117 -fgkCoolPipeSuppTongW/4.,0,0,axeRot);
c789ee28 3118 axeTrans->RegisterYourself();
531d6cdc 3119 //delete axeRot;
c789ee28 3120
3121 if(GetDebug(3)){
3122 middle->InspectShape();
3123 axe->InspectShape();
3124 };
3125
3126 TGeoCompositeShape *coolPipeSuppShape = new TGeoCompositeShape(
3127 "ITSsddCoolPipeSuppShapeR",
3128 "ITSsddCPSmiddleR:ITSsddCPStr3R"
3129 "+ITSsddCPSside1R:ITSsddCPStr1R"
3130 "+ITSsddCPSside1R:ITSsddCPStr2R"
3131 "+ITSsddCPSaxeBoxR:ITSsddCPSAxBoxTrR"
3132 "-ITSsddCPSaxeR:ITSsddCPSaxeTrR");
b7943f00 3133
9c8369f9 3134 TGeoMedium *rytonSDD = GetMedium("RYTON$");
c789ee28 3135 TGeoVolume *coolPipeSupp = new TGeoVolume( "ITSsddCoolPipeSupportR",
3136 coolPipeSuppShape, rytonSDD);
3137 coolPipeSupp->SetLineColor(fColorRyton);
3138
3139 return coolPipeSupp;
531d6cdc 3140}
c789ee28 3141
3142//________________________________________________________________________
3143TGeoVolume* AliITSv11GeometrySDD::CreateBaseThermalBridge() {
108bd0fe 3144 //
3145 // based on ALR 0752/8
3146 //
c789ee28 3147
b7943f00 3148 Double_t dy = fgkBTBaxisAtoBase - fgkRadiusBminBTB - fgkBTBthick;
c789ee28 3149
b7943f00 3150 Double_t base1width = fgkBTBwidth - fgkBTBaxisAtoBottom - fgkRadiusBminBTB
3151 - (fgkRadiusAminBTB+fgkBTBthick);
c789ee28 3152 TGeoBBox *base1 = new TGeoBBox( "ITSsddBTBbase1", base1width/2.,
b7943f00 3153 fgkBTBthick/2., fgkBTBlength/2.);
c789ee28 3154 TGeoTranslation *base1Tr = new TGeoTranslation("ITSsddBTBtr1",
b7943f00 3155 fgkBTBaxisAtoBottom-fgkBTBwidth+base1width/2.,
3156 -(fgkBTBaxisAtoBase-fgkBTBthick/2.), 0);
c789ee28 3157 base1Tr->RegisterYourself();
3158
b7943f00 3159 Double_t base2width = fgkBTBaxisAtoBottom - fgkRadiusAminBTB - fgkBTBthick
3160 - fgkRadiusBminBTB;
c789ee28 3161 TGeoBBox *base2 = new TGeoBBox( "ITSsddBTBbase2", base2width/2.,
b7943f00 3162 fgkBTBthick/2., fgkBTBlength/2.);
c789ee28 3163 TGeoTranslation *base2Tr = new TGeoTranslation("ITSsddBTBtr2",
b7943f00 3164 fgkBTBaxisAtoBottom - base2width/2.,
3165 -(fgkBTBaxisAtoBase-fgkBTBthick/2.), 0);
c789ee28 3166 base2Tr->RegisterYourself();
3167
3168 TGeoBBox *side = new TGeoBBox( "ITSsddBTBside",
b7943f00 3169 fgkBTBthick/2., dy/2., fgkBTBlength/2.);
c789ee28 3170 TGeoTranslation *sideTr1 = new TGeoTranslation("ITSsddBTBsideTr1",
b7943f00 3171 -fgkRadiusAminBTB-fgkBTBthick/2., -dy/2., 0);
c789ee28 3172 TGeoTranslation *sideTr2 = new TGeoTranslation("ITSsddBTBsideTr2",
b7943f00 3173 fgkRadiusAminBTB+fgkBTBthick/2., -dy/2., 0);
c789ee28 3174 sideTr1->RegisterYourself();
3175 sideTr2->RegisterYourself();
3176
b7943f00 3177 TGeoBBox *hole = new TGeoBBox( "ITSsddBTBhole", fgkBTBHolewidth/2.,
3178 fgkBTBthick/2., fgkBTBHoleLength/2.);
c789ee28 3179 TGeoTranslation *holeTr1 = new TGeoTranslation("ITSsddBTBholeTr1",
b7943f00 3180 - fgkBTBHoleRefX + fgkBTBHolewidth/2.,
3181 - (fgkBTBaxisAtoBase-fgkBTBthick/2.),
3182 fgkBTBHoleRefY+(fgkBTBHoleLength-fgkBTBlength)/2.);
c789ee28 3183 TGeoTranslation *holeTr2 = new TGeoTranslation("ITSsddBTBholeTr2",
b7943f00 3184 - fgkBTBHoleRefX + fgkBTBHolewidth/2.,
3185 - (fgkBTBaxisAtoBase-fgkBTBthick/2.),
3186 - fgkBTBHoleRefY-(fgkBTBHoleLength-fgkBTBlength)/2.);
c789ee28 3187 holeTr1->RegisterYourself();
3188 holeTr2->RegisterYourself();
3189
b7943f00 3190 Double_t radiusAmaxBTB = fgkRadiusAminBTB + fgkBTBthick;
c789ee28 3191 TGeoTubeSeg *mainAxis = new TGeoTubeSeg( "ITSsddBTBmainAxis",
b7943f00 3192 fgkRadiusAminBTB, radiusAmaxBTB,
3193 fgkBTBlength/2., 0., 180.);
c789ee28 3194 TGeoTubeSeg *round1 = new TGeoTubeSeg( "ITSsddBTBround1",
b7943f00 3195 fgkRadiusBminBTB, fgkRadiusBminBTB+fgkBTBthick,
3196 fgkBTBlength/2., 270., 360.);
c789ee28 3197 TGeoTranslation *roundTr1 = new TGeoTranslation("ITSsddBTBround1Tr",
b7943f00 3198 -(fgkRadiusAminBTB+fgkBTBthick+fgkRadiusBminBTB),
c789ee28 3199 -dy, 0);
3200 roundTr1->RegisterYourself();
3201
3202 TGeoTubeSeg *round2 = new TGeoTubeSeg( "ITSsddBTBround2",
b7943f00 3203 fgkRadiusBminBTB, fgkRadiusBminBTB+fgkBTBthick,
3204 fgkBTBlength/2., 180., 270.);
c789ee28 3205 TGeoTranslation *roundTr2 = new TGeoTranslation("ITSsddBTBround2Tr",
b7943f00 3206 (fgkRadiusAminBTB+fgkBTBthick+fgkRadiusBminBTB),
c789ee28 3207 -dy, 0);
3208 roundTr2->RegisterYourself();
3209
3210 TGeoCompositeShape *sBaseThermalBridge = new TGeoCompositeShape(
3211 "ITSsddBaseThermalBridgeShape",
3212 "ITSsddBTBbase1:ITSsddBTBtr1"
3213 "+ ITSsddBTBbase2:ITSsddBTBtr2"
3214 "+ ITSsddBTBround1:ITSsddBTBround1Tr"
3215 "+ ITSsddBTBround2:ITSsddBTBround2Tr"
3216 "+ ITSsddBTBside:ITSsddBTBsideTr1"
3217 "+ ITSsddBTBside:ITSsddBTBsideTr2"
3218 "- ITSsddBTBhole:ITSsddBTBholeTr1"
3219 "- ITSsddBTBhole:ITSsddBTBholeTr2"
3220 "+ ITSsddBTBmainAxis");
3221
3222 if(GetDebug(3)){// Remove compiler warning.
3223 base1->InspectShape();
3224 base2->InspectShape();
3225 side->InspectShape();
3226 hole->InspectShape();
3227 mainAxis->InspectShape();
3228 round1->InspectShape();
3229 round2->InspectShape();
3230 };
3231
108bd0fe 3232 TGeoMedium *carbonFiberLadderStruct = GetMedium("SDD C AL (M55J)$");
c789ee28 3233 TGeoVolume *vBaseThermalBridge = new TGeoVolume( "ITSsddBaseThermalBridge",
3234 sBaseThermalBridge,
3235 carbonFiberLadderStruct);
3236
3237 vBaseThermalBridge->SetLineColor(fColorCarbonFiber);
3238 return vBaseThermalBridge;
531d6cdc 3239}
c789ee28 3240
3241
c789ee28 3242//________________________________________________________________________
108bd0fe 3243TGeoVolumeAssembly* AliITSv11GeometrySDD::CreateEndLadder(Int_t iLay) {
b7943f00 3244 //
108bd0fe 3245 // Return an assembly containing a end of a CF ladder.
b7943f00 3246 //
3247
108bd0fe 3248 TGeoMedium *carbonFiberLadderStruct = GetMedium("SDD C AL (M55J)$"); // ITSsddCarbonM55J
e118532f 3249 TGeoMedium *stesalite = GetMedium("G10FR4$");
3250 TGeoMedium *phynoxSDD = GetMedium("INOX$");
108bd0fe 3251 TGeoMedium *coolerMediumSDD = GetMedium("WATER$");
b7943f00 3252
3253 Double_t length = (fgkLay3LadderLength-fgkLay3Ndet*fgkSegmentLength)/2.;
3254 Double_t coolPipeSuppH = fgkLay3CoolPipeSuppH;
3255 Double_t underSegDH = fLay3LadderUnderSegDH;
108bd0fe 3256 Double_t footDZ = fgkRubyZladd3 - fgkLay3Ndet*fgkSegmentLength/2 - length/2;
3257 // footDZ is also where to place the ruby's center in local Z
3258 Double_t coolPipeEndLen = (fgkCoolPipeLay3Len-fgkSegmentLength*fgkLay3Ndet)/2;
3259
b7943f00 3260 if (iLay==3) {
3261 } else if (iLay==4) {
108bd0fe 3262 length = (fgkLay4LadderLength-fgkLay4Ndet*fgkSegmentLength)/2.;
3263 coolPipeSuppH = fgkLay4CoolPipeSuppH;
3264 underSegDH = fLay4LadderUnderSegDH;
3265 footDZ = fgkRubyZladd4 - fgkLay4Ndet*fgkSegmentLength/2 - length/2;
3266 coolPipeEndLen = (fgkCoolPipeLay4Len-fgkSegmentLength*fgkLay4Ndet)/2;
b7943f00 3267 } else {
3268 printf("error in AliITSv11GeometrySDD::CreateEndLadder: Wrong layer");
3269 return 0;
3270 };
c789ee28 3271
b7943f00 3272 Double_t tDY = (- fgkLadderSegBoxDH/2 //space left on top of the ladder
3273 + underSegDH/2); //space under ladder segment
3274 // here tDY is not the same as for the segment because the end ladder
3275 // does not have a space under it, inside the general ladder volume.
3276 Double_t segmentLength = fgkSegmentLength;
3277 Double_t topCornerLength = fgkSegmentLength/2.-fgkLay4LaddTopCornerEnd;
3278
108bd0fe 3279 TGeoVolumeAssembly *virtualEnd = new TGeoVolumeAssembly("ITSsddEnd");
b7943f00 3280
3281 //**********************************
3282 // coding real matter :
3283 //**********************************
3284 Double_t triangleHeight = fgkLadderHeight - fgkLadderBeamRadius;
3285 Double_t halfTheta = TMath::ATan( 0.5*fgkLadderWidth/triangleHeight );
3286 Double_t beta = (TMath::Pi()-2.*halfTheta)/4.;
3287 Double_t alpha = TMath::Pi()*3./4. - halfTheta/2.;
3288
3289 //--- The 3 V shape corners of the Carbon Fiber Ladder
3290 //--- the top V
8f20b5e4 3291 TGeoArb8 *cfLaddTop1 = CreateLadderSide("CFladdTopCornerV1shape",
3292 topCornerLength/2., halfTheta, -1,
b7943f00 3293 fgkLadderLa, fgkLadderHa, fgkLadderl);
8f20b5e4 3294 TGeoVolume *cfLaddTopVol1 = new TGeoVolume("ITSsddCFladdTopCornerV1",
b7943f00 3295 cfLaddTop1,carbonFiberLadderStruct);
3296 cfLaddTopVol1->SetLineColor(fColorCarbonFiber);
8f20b5e4 3297 TGeoArb8 *cfLaddTop2 = CreateLadderSide( "CFladdTopCornerV2shape",
3298 topCornerLength/2., halfTheta, 1,
b7943f00 3299 fgkLadderLa, fgkLadderHa, fgkLadderl);
3300 TGeoVolume *cfLaddTopVol2 = new TGeoVolume("ITSsddCFladdTopCornerV2",
3301 cfLaddTop2,carbonFiberLadderStruct);
3302 cfLaddTopVol2->SetLineColor(fColorCarbonFiber);
3303 TGeoTranslation *trTop1 = new TGeoTranslation(0, fgkLadderHeight/2+tDY,
3304 -(length-topCornerLength)/2.);
3305 virtualEnd->AddNode(cfLaddTopVol1, 1, trTop1);
3306 virtualEnd->AddNode(cfLaddTopVol2, 1, trTop1);
3307
3308 //--- the 2 side V
8f20b5e4 3309 TGeoArb8 *cfLaddSide1 = CreateLadderSide( "CFladdSideCornerV1shape",
3310 length/2., beta, -1,
b7943f00 3311 fgkLadderLb, fgkLadderHb, fgkLadderl);
3312 TGeoVolume *cfLaddSideVol1 = new TGeoVolume("ITSsddCFladdSideCornerV1",
3313 cfLaddSide1,carbonFiberLadderStruct);
3314 cfLaddSideVol1->SetLineColor(fColorCarbonFiber);
8f20b5e4 3315 TGeoArb8 *cfLaddSide2 = CreateLadderSide( "CFladdSideCornerV2shape",
3316 length/2., beta, 1,
b7943f00 3317 fgkLadderLb, fgkLadderHb, fgkLadderl);
3318 TGeoVolume *cfLaddSideVol2 = new TGeoVolume("ITSsddCFladdSideCornerV2",
3319 cfLaddSide2,carbonFiberLadderStruct);
3320 cfLaddSideVol2->SetLineColor(fColorCarbonFiber);
3321 Double_t dYTranslation = ( fgkLadderHeight/2. - 0.5*fgkLadderWidth*
3322 TMath::Tan(beta) - fgkLadderBeamRadius );
3323
3324 // because center of the triangle doesn't correspond to virtual vol. center
3325 Double_t distCenterSideDown = 0.5*fgkLadderWidth/TMath::Cos(beta);
3326 TGeoCombiTrans *ctSideR = CreateCombiTrans("", distCenterSideDown, 0,
3327 alpha*TMath::RadToDeg());
3328 AddTranslationToCombiTrans(ctSideR, 0, -dYTranslation+tDY, 0);
3329 TGeoCombiTrans *ctSideL = CreateCombiTrans("", distCenterSideDown, 0,
3330 -alpha*TMath::RadToDeg());
3331 AddTranslationToCombiTrans(ctSideL, 0, -dYTranslation+tDY, 0);
3332 virtualEnd->AddNode(cfLaddSideVol1, 1, ctSideR);
3333 virtualEnd->AddNode(cfLaddSideVol2, 1, ctSideR);
3334 virtualEnd->AddNode(cfLaddSideVol1, 2, ctSideL);
3335 virtualEnd->AddNode(cfLaddSideVol2, 2, ctSideL);
3336
3337 //--- The beams
3338 // Beams on the sides
3339 Double_t beamPhiPrime = TMath::ASin(1./TMath::Sqrt( (1+TMath::Sin(2*beta)*
3340 TMath::Sin(2*beta)/(TanD(fgkBeamSidePhi)*TanD(fgkBeamSidePhi))) ));
3341
3342 //Euler rotation : about Z, then new X, then new Z
531d6cdc 3343 TGeoRotation *beamRot1 = new TGeoRotation("", 90-2.*beta*TMath::RadToDeg(),
b7943f00 3344 -beamPhiPrime*TMath::RadToDeg(), -90);
531d6cdc 3345 TGeoRotation *beamRot2 = new TGeoRotation("", 90-2.*beta*TMath::RadToDeg(),
b7943f00 3346 beamPhiPrime*TMath::RadToDeg(), -90);
531d6cdc 3347 TGeoRotation *beamRot3 = new TGeoRotation("", 90+2.*beta*TMath::RadToDeg(),
b7943f00 3348 beamPhiPrime*TMath::RadToDeg(), -90);
531d6cdc 3349 TGeoRotation *beamRot4 = new TGeoRotation("", 90+2.*beta*TMath::RadToDeg(),
b7943f00 3350 -beamPhiPrime*TMath::RadToDeg(), -90);
3351 TGeoCombiTrans *beamTransf1 = new TGeoCombiTrans(0.5*triangleHeight*
3352 TMath::Tan(halfTheta),
3353 fgkLadderBeamRadius/2. + tDY,
531d6cdc 3354 -length/2 + segmentLength/8, beamRot1);
b7943f00 3355 TGeoCombiTrans *beamTransf3 = new TGeoCombiTrans( 0.5*triangleHeight*
3356 TMath::Tan(halfTheta),
3357 fgkLadderBeamRadius/2.+tDY,
531d6cdc 3358 -length/2 + 3*segmentLength/8, beamRot2);
b7943f00 3359 TGeoCombiTrans *beamTransf5 = new TGeoCombiTrans(-0.5*triangleHeight*
3360 TMath::Tan(halfTheta),
3361 fgkLadderBeamRadius/2.+tDY,
531d6cdc 3362 -length/2 + segmentLength/8, beamRot3);
b7943f00 3363 TGeoCombiTrans *beamTransf7 = new TGeoCombiTrans(-0.5*triangleHeight*
3364 TMath::Tan(halfTheta),
3365 fgkLadderBeamRadius/2. + tDY,
531d6cdc 3366 -length/2+3*segmentLength/8, beamRot4);
b7943f00 3367
3368 virtualEnd->AddNode(fLaddSegCommonVol[6], 1, beamTransf1);
3369 virtualEnd->AddNode(fLaddSegCommonVol[6], 2, beamTransf3);
3370 virtualEnd->AddNode(fLaddSegCommonVol[6], 3, beamTransf5);
3371 virtualEnd->AddNode(fLaddSegCommonVol[6], 4, beamTransf7);
3372
3373 //--- Beams of the bottom
108bd0fe 3374 TGeoRotation *bottomBeamRot1 = new TGeoRotation("",90, 90, 90);
3375
3376 /* Not there actually
b7943f00 3377 TGeoTubeSeg *bottomBeam1 = new TGeoTubeSeg(0, fgkLadderBeamRadius,
3378 fgkLadderWidth/2.-fgkLadderLb/3, 0, 180);
3379 TGeoVolume *bottomBeam1Vol = new TGeoVolume("ITSsddBottomBeam1Vol",
3380 bottomBeam1, carbonFiberLadderStruct);
3381 bottomBeam1Vol->SetLineColor(fColorCarbonFiber);
3382
b7943f00 3383 TGeoCombiTrans *bottomBeamTransf1 = new TGeoCombiTrans(0,
3384 -(fgkLadderHeight/2-fgkLadderBeamRadius)+tDY,
531d6cdc 3385 -length/2+fgkSegmentLength/2, bottomBeamRot1);
b7943f00 3386 virtualEnd->AddNode(bottomBeam1Vol, 1, bottomBeamTransf1);
108bd0fe 3387*/
b7943f00 3388 TGeoTubeSeg *bottomBeam2 = new TGeoTubeSeg(0, fgkLadderBeamRadius,
3389 fgkLadderWidth/2.-fgkLadderLb/3, 0, 90);
3390 TGeoVolume *bottomBeam2Vol = new TGeoVolume("ITSsddBottomBeam2Vol",
3391 bottomBeam2, carbonFiberLadderStruct);
3392 bottomBeam2Vol->SetLineColor(fColorCarbonFiber);
3393 TGeoCombiTrans *bottomBeamTransf2 = new TGeoCombiTrans(0,
531d6cdc 3394 -(fgkLadderHeight/2-fgkLadderBeamRadius)+tDY,-length/2,bottomBeamRot1);
b7943f00 3395 virtualEnd->AddNode(bottomBeam2Vol, 1, bottomBeamTransf2);
3396
3397 //**********************************
3398 //the cooling pipe supports
3399 Double_t triangleCPaxeDist = fgkCoolPipeSuppAxeDist-fgkCoolPipeSuppWidthExt-
fa4639a3 3400 fgkCoolPipeSuppWidthIn+fgkLadderBeamRadius;
b7943f00 3401
3402 Double_t coolPipeSuppL = TMath::Tan(halfTheta)*
fa4639a3 3403 (triangleHeight+triangleCPaxeDist/
3404 TMath::Sin(halfTheta)-coolPipeSuppH);
b7943f00 3405
3406 if (fAddCoolingSyst) {
108bd0fe 3407 TGeoRotation *rotCPS2 = new TGeoRotation("",-halfTheta*TMath::RadToDeg(),-90, 90);
3408 TGeoRotation *rotCPS1 = new TGeoRotation("", halfTheta*TMath::RadToDeg(),-90,-90);
3409 TGeoCombiTrans *transCPS1 = new TGeoCombiTrans(coolPipeSuppL,
3410 -fgkLadderHeight/2.+ tDY +
3411 coolPipeSuppH+fgkLadderBeamRadius,
3412 -length/2., rotCPS1);
3413 TGeoCombiTrans *transCPS4 = new TGeoCombiTrans(-coolPipeSuppL,
3414 -fgkLadderHeight/2.+ tDY +
3415 coolPipeSuppH+fgkLadderBeamRadius,
3416 -length/2., rotCPS2);
3417
3418 virtualEnd->AddNode(fCoolPipeSupportL, 1, transCPS1);
3419 virtualEnd->AddNode(fCoolPipeSupportR, 1, transCPS4);
b7943f00 3420 };
3421
3422 //**********************************
108bd0fe 3423 //--- The stesalite foot of the ladder
3424
73dfc864 3425 Double_t footDY = -(fgkLadderHeight/2-fgkLadderBeamRadius)+tDY
3426 - fgkLadFootY/2+fgkLadFingerPrintY;
3427
3428 TGeoTranslation *footTr = new TGeoTranslation("SDDfootTr",0,footDY,footDZ);
3429 virtualEnd->AddNode(fLadderFoot, 1, footTr);
3430
3431 //=====================================
3432 //--- cooling pipe
3433
3434 if (fAddCoolingSyst) {
3435
3436 TGeoTranslation *pipeTr1 = new TGeoTranslation(coolPipeSuppL,
3437 -fgkLadderHeight/2.+ tDY +
3438 coolPipeSuppH + fgkLadderBeamRadius,
3439 -length/2.+coolPipeEndLen/2.);
3440 TGeoTranslation *pipeTr2 = new TGeoTranslation(-coolPipeSuppL,
3441 -fgkLadderHeight/2. + tDY +
3442 fgkLadderBeamRadius + coolPipeSuppH,
3443 -length/2.+coolPipeEndLen/2.);
3444
3445 TGeoTube *coolingPipeShape = new TGeoTube( fgkCoolPipeInnerDiam/2,
3446 fgkCoolPipeOuterDiam/2,
3447 coolPipeEndLen/2);
3448 TGeoTube *coolerShape = new TGeoTube( 0, fgkCoolPipeInnerDiam/2,
3449 coolPipeEndLen/2);
3450
3451 TGeoVolume *coolingPipe = new TGeoVolume("ITSsddCoolingPipeEnd",
3452 coolingPipeShape, phynoxSDD );
3453 coolingPipe->SetLineColor(fColorPhynox);
3454 TGeoVolume *cooler = new TGeoVolume("ITSsddCoolingEndLiquid",coolerShape,
3455 coolerMediumSDD );
3456
3457 virtualEnd->AddNode(coolingPipe, 1, pipeTr1);
3458 virtualEnd->AddNode(coolingPipe, 2, pipeTr2);
3459 if (fCoolingOn) {
3460 virtualEnd->AddNode(cooler, 1, pipeTr1);
3461 virtualEnd->AddNode(cooler, 2, pipeTr2);
3462 };
3463 };
3464
3465 //=====================================
3466 //--- HV cable guide
3467
3468
3469 TGeoBBox* guideHVbox = new TGeoBBox("guideHVbox",fgkHVguideX1/2,
3470 fgkHVguideY1/2,fgkHVguideZ1/2);
e118532f 3471 TGeoVolume *guideHV = new TGeoVolume("guideHV",guideHVbox,stesalite);
73dfc864 3472
3473 TGeoTranslation* guideHVtr = new TGeoTranslation(fgkHVguideDX,
3474 -(fgkLadderHeight/2-fgkLadderBeamRadius)+tDY-fgkHVguideY1/2,
3475 footDZ+fgkLadFootZ/2+fgkHVguideZ1/2-(fgkHVguideSuppFullZ-fgkHVguideZ2));
3476 virtualEnd->AddNode(guideHV, 1, guideHVtr);
3477
3478 //=====================================
3479 //--- raccordo
3480 Double_t raccordFullLen = fgkConnectorCoolTubeL1+fgkConnectorCoolTubeL2+fgkConnectorCoolTubeL3;
3481 TGeoTranslation *trRaccordo1 = new TGeoTranslation("trRaccordo1",-coolPipeSuppL,
3482 -fgkLadderHeight/2.+ tDY +
3483 coolPipeSuppH+fgkLadderBeamRadius,
3484 -length/2.+coolPipeEndLen+raccordFullLen/2);
3485 TGeoTranslation *trRaccordo2 = new TGeoTranslation("trRaccordo2", coolPipeSuppL,
3486 -fgkLadderHeight/2.+ tDY +
3487 coolPipeSuppH+fgkLadderBeamRadius,
3488 -length/2.+coolPipeEndLen+raccordFullLen/2);
3489
3490 virtualEnd->AddNode(fRaccordoL, 1, trRaccordo1);
3491 virtualEnd->AddNode(fRaccordoL, 2, trRaccordo2);
3492
3493 if(GetDebug(1)) virtualEnd->CheckOverlaps(0.01);
3494
3495 return virtualEnd;
3496}
3497
3498//________________________________________________________________________
3499TGeoVolumeAssembly* AliITSv11GeometrySDD::CreateLadderFoot() {
3500
3501 //--- The stesalite foot of the ladder
108bd0fe 3502 // Are missing :
3503 // The 2 screw holes on the left part
3504 // the small holes at each corner of the ruby cage (diam 2mm)
3505 // the really small level difference of 0.3mm on the bottom
3506
73dfc864 3507
e118532f 3508 TGeoMedium *stesalite = GetMedium("G10FR4$");
73dfc864 3509
3510 TGeoVolumeAssembly *virtualFoot = new TGeoVolumeAssembly("ITSsddFoot");
108bd0fe 3511
3512 Double_t epsilon = 2e-10;
effd7456 3513 TGeoBBox *ladFootBox1 = new TGeoBBox("ladFootBox1",fgkLadBox1X/2, fgkLadFootY/2,
3514 fgkLadFootZ/2);
108bd0fe 3515 TGeoTranslation *ladFootBox1Tr = new TGeoTranslation("ladFootBox1Tr",
effd7456 3516 fgkLadFootX/2-fgkLadBox1X/2,0,0);
3517 TGeoBBox *ladFingerPrint = new TGeoBBox("ladFingerPrint",fgkLadFingerPrintX/2,
3518 fgkLadFingerPrintY/2+epsilon, fgkLadFootZ/2+epsilon);
108bd0fe 3519
3520 TGeoTranslation *ladFingerPrintTr = new TGeoTranslation("ladFingerPrintTr",
effd7456 3521 fgkLadFootX/2-fgkLadFingerPrintBorder-fgkLadFingerPrintX/2,
3522 fgkLadFootY/2-fgkLadFingerPrintY/2+epsilon,
108bd0fe 3523 0);
3524
3525 TGeoBBox *rubyCageHole = new TGeoBBox("rubyCageHole",fgkRubyCageHoleX/2,
3526 fgkRubyCageHoleY/2+epsilon, fgkRubyCageHoleZ/2);
3527
3528 TGeoTranslation *rubyCageHoleTr = new TGeoTranslation("rubyCageHoleTr",
effd7456 3529 fgkLadFootX/2-(fgkLadFootX/2-fgkRubyDX)+fgkRubyCageAxisShift,
3530 fgkLadFootY/2-fgkRubyCageHoleY/2,0);
108bd0fe 3531
effd7456 3532 double rubyScrewHoleLen = fgkLadFootX/2-fgkRubyDX;
108bd0fe 3533 TGeoTube *rubyScrewHole = new TGeoTube("rubyScrewHole", 0,fgkScrewM4diam/2,
3534 rubyScrewHoleLen/2);
3535
3536 TGeoRotation *rot9090 = new TGeoRotation("",90,90,0);
3537 TGeoCombiTrans *rubyScrewHoleTr = new TGeoCombiTrans("rubyScrewHoleTr",
effd7456 3538 fgkLadFootX/2-rubyScrewHoleLen/2,
108bd0fe 3539 -fgkRubyScrewShiftToCenterY, 0, rot9090);
3540
effd7456 3541 Double_t rubyHoleLen = fgkLadFootY-fgkRubyCageHoleY;
108bd0fe 3542 TGeoTube *rubyHole = new TGeoTube("rubyHole", 0,fgkRubyHoleDiam/2,
3543 rubyHoleLen/2);
3544
3545 TGeoRotation *rot90 = new TGeoRotation("",0,90,0);
3546 TGeoCombiTrans *rubyHoleTr = new TGeoCombiTrans("rubyHoleTr", fgkRubyDX,
effd7456 3547 -(fgkLadFootY-rubyHoleLen)/2, 0, rot90);
108bd0fe 3548
3549 ladFootBox1Tr->RegisterYourself();
3550 ladFingerPrintTr->RegisterYourself();
3551 rubyCageHoleTr->RegisterYourself();
3552 rubyScrewHoleTr->RegisterYourself();
3553 rubyHoleTr->RegisterYourself();
3554
3555 TGeoCompositeShape *footRightPart = new TGeoCompositeShape(
3556 "ladFootBox1:ladFootBox1Tr-(ladFingerPrint:ladFingerPrintTr"
3557 "+rubyCageHole:rubyCageHoleTr+rubyScrewHole:rubyScrewHoleTr"
3558 "+rubyHole:rubyHoleTr)");
3559 TGeoVolume *vFootRightPart = new TGeoVolume("vFootRightPart",
3560 footRightPart,stesalite);
3561 vFootRightPart->SetLineColor(fColorStesalite);
3562
73dfc864 3563 virtualFoot->AddNode(vFootRightPart, 1, 0);
108bd0fe 3564
3565
3566 //--- This was the right part of the foot, now let's do the middle
3567 //--- and the right parts
3568
effd7456 3569 Double_t middleX = fgkLadFootX-fgkLadBox1X-fgkLadFingerPrintX-fgkLadFingerPrintBorder;
108bd0fe 3570 TGeoBBox *footMiddle = new TGeoBBox("footMiddle", middleX/2, fgkLadFootMiddleY/2,
effd7456 3571 fgkLadFootZ/2);
108bd0fe 3572 TGeoTranslation *middleXTr = new TGeoTranslation("middleXTr",
effd7456 3573 fgkLadFootX/2-fgkLadBox1X-middleX/2,
73dfc864 3574 fgkLadFootY/2-fgkLadFootMiddleY/2, 0);
108bd0fe 3575
3576 TGeoVolume *vFootMiddle = new TGeoVolume("vFootMiddle", footMiddle,stesalite);
3577 vFootMiddle->SetLineColor(fColorStesalite);
73dfc864 3578 virtualFoot->AddNode(vFootMiddle, 1, middleXTr);
108bd0fe 3579
3580 //--
effd7456 3581 TGeoBBox *footLeftLadFinger = new TGeoBBox("footLeftLadFinger", fgkLadFingerPrintX/2,
3582 (fgkLadFootY-fgkLadFingerPrintY)/2,
3583 fgkLadFootZ/2);
108bd0fe 3584 TGeoTranslation *footLeftLadFingerTr = new TGeoTranslation("footLeftLadFingerTr",
effd7456 3585 -fgkLadFootX/2+fgkLadFingerPrintBorder+fgkLadFingerPrintX/2,
73dfc864 3586 -fgkLadFingerPrintY/2, 0);
108bd0fe 3587 TGeoVolume *vFootLeftLadFinger = new TGeoVolume("vFootLeftLadFinger",footLeftLadFinger,
3588 stesalite);
3589 vFootLeftLadFinger->SetLineColor(fColorStesalite);
73dfc864 3590 virtualFoot->AddNode(vFootLeftLadFinger, 1, footLeftLadFingerTr);
108bd0fe 3591
3592 //--
3593 TGeoBBox *footLeft = new TGeoBBox("footLeft", fgkLadFingerPrintBorder/2,
effd7456 3594 fgkLadFootY/2,
3595 fgkLadFootZ/2);
108bd0fe 3596 TGeoTranslation *footLeftTr = new TGeoTranslation("footLeftTr",
effd7456 3597 -fgkLadFootX/2+fgkLadFingerPrintBorder/2,
73dfc864 3598 0, 0);
108bd0fe 3599 TGeoVolume *vFootLeft = new TGeoVolume("vFootLeft",footLeft,stesalite);
3600 vFootLeft->SetLineColor(fColorStesalite);
73dfc864 3601 virtualFoot->AddNode(vFootLeft, 1, footLeftTr);
108bd0fe 3602
73dfc864 3603 if(GetDebug(3)){ // Remove compiler warning.
3604 ladFingerPrint->InspectShape();
3605 ladFootBox1->InspectShape();
3606 rubyCageHole->InspectShape();
3607 rubyScrewHole->InspectShape();
3608 rubyHole->InspectShape();
3609 }
108bd0fe 3610
73dfc864 3611 return virtualFoot;
3612}
108bd0fe 3613
73dfc864 3614//________________________________________________________________________
3615TGeoVolumeAssembly* AliITSv11GeometrySDD::CreateCarlosCard(Int_t iLay) {
3616 //
3617 // return an assembly containing the CARLOS end-ladder board
3618 // and the heat bridge
3619 //
108bd0fe 3620
73dfc864 3621 (void) iLay;
9c8369f9 3622 TGeoMedium *glassFiber = GetMedium("GLASS FIBER$");// glassFiber
73dfc864 3623 TGeoMedium *siliconChip = GetMedium("SDD SI CHIP$");// ITSsddSiChip
3624 TGeoMedium *plastiChip = GetMedium("SDDKAPTON (POLYCH2)$"); // ITSsddKAPTON_POLYCH2
3625 TGeoMedium *copper = GetMedium("COPPER$");
d8826f33 3626 TGeoMedium *alCu12SDD = GetMedium("ALCU12$"); // ITSsddAlCu12
9c8369f9 3627 TGeoMedium *stainless = GetMedium("AISI304L$"); // for screws
108bd0fe 3628
73dfc864 3629 //=========================================
3630 // cooling support of the Carlos card (HeatBridge):
3631 TGeoVolumeAssembly *assemblySupCarlos = new TGeoVolumeAssembly("assemblySupCarlos");
108bd0fe 3632
73dfc864 3633 TGeoBBox *supCarlosBoard1 = new TGeoBBox("",fgkCarlosSuppX1/2,fgkCarlosSuppY1/2,
3634 fgkCarlosSuppZ/2);
3635 TGeoBBox *supCarlosBoard2 = new TGeoBBox("",fgkCarlosSuppX2/2,fgkCarlosSuppY2/2,
3636 fgkCarlosSuppZ/2);
3637 TGeoVolume *vSupCarlosBoard1 = new TGeoVolume("vSupCarlosBoard1",
3638 supCarlosBoard1, alCu12SDD);
3639 TGeoVolume *vSupCarlosBoard2 = new TGeoVolume("vSupCarlosBoard2",
3640 supCarlosBoard2, alCu12SDD);
3641 vSupCarlosBoard1->SetLineColor(4);
3642 vSupCarlosBoard2->SetLineColor(4);
108bd0fe 3643
3644
73dfc864 3645 Double_t shiftGlob = -fgkCarlosSuppZ/2+fgkCarlosSuppTopLen;
3646 // shift of the main planes in the direction of their width
3647 // the center is fixed at the center of the 2 small fixing arms on each sides.
3648 //shiftGlob=0.5;
108bd0fe 3649
73dfc864 3650 shiftGlob+= 0.5*fgkCarlosSuppY3/cos((90-fgkCarlosSuppAngle)*TMath::DegToRad());
3651 shiftGlob-= 0.5*fgkCarlosSuppY2*tan((90-fgkCarlosSuppAngle)*TMath::DegToRad());
3652 Double_t shiftGlobY = shiftGlob*sin(fgkCarlosSuppAngle*TMath::DegToRad());
3653 Double_t shiftGlobZ = shiftGlob*cos(fgkCarlosSuppAngle*TMath::DegToRad());
108bd0fe 3654
73dfc864 3655 TGeoTranslation *carlosSupTr1 = new TGeoTranslation( -fgkCarlosSuppX2/2,
3656 (-fgkCarlosSuppY1+fgkCarlosSuppY2)/2+shiftGlobY,
3657 +shiftGlobZ);
108bd0fe 3658
73dfc864 3659 TGeoTranslation *carlosSupTr2 = new TGeoTranslation( fgkCarlosSuppX1/2,
3660 shiftGlobY,
3661 shiftGlobZ);
108bd0fe 3662
73dfc864 3663 assemblySupCarlos->AddNode(vSupCarlosBoard1, 0, carlosSupTr1);
3664 assemblySupCarlos->AddNode(vSupCarlosBoard2, 0, carlosSupTr2);
3665
3666 //=========================================
3667 // fixing arm of the cooling support :
3668 TGeoBBox *supCarlosBoard3 = new TGeoBBox("",fgkCarlosSuppX3/2,fgkCarlosSuppY3/2,
3669 fgkCarlosSuppZ3/2);
3670 TGeoVolume *vSupCarlosBoard3 = new TGeoVolume("vSupCarlosBoard3",
3671 supCarlosBoard3, alCu12SDD);
3672 vSupCarlosBoard3->SetLineColor(4);
c789ee28 3673
73dfc864 3674 // screw inside :
3675 TGeoTube *littleScrew = new TGeoTube("littleScrew", 0, fgkLittleScrewR,
3676 fgkCarlosSuppY3/2);
3677 TGeoVolume *vLittleScrew = new TGeoVolume("vLittleScrew",
3678 littleScrew, stainless);
3679 TGeoRotation *rotScrew = new TGeoRotation("",0,90,0);
3680 TGeoCombiTrans *cbScrew1 = new TGeoCombiTrans(0, 0, fgkCarlosSuppZ3/2 -
3681 fgkLittleScrewHeadR-0.07, rotScrew);
3682 TGeoCombiTrans *cbScrew2 = new TGeoCombiTrans(0, 0, -fgkCarlosSuppZ3/2 +
3683 fgkLittleScrewHeadR+0.07, rotScrew);
3684 vSupCarlosBoard3->AddNode(vLittleScrew,1, cbScrew1);
3685 vSupCarlosBoard3->AddNode(vLittleScrew,2, cbScrew2);
3686
3687 TGeoRotation *carlosSupRot = new TGeoRotation("carlosSuppInvertAngle",
3688 0, fgkCarlosSuppAngle, 0);
3689 TGeoCombiTrans *carlosSupTr3 = new TGeoCombiTrans((fgkCarlosSuppX1+
3690 fgkCarlosSuppX2+fgkCarlosSuppX3)/2,0,0, carlosSupRot);
3691 TGeoCombiTrans *carlosSupTr4 = new TGeoCombiTrans(-(fgkCarlosSuppX1+
3692 fgkCarlosSuppX2+fgkCarlosSuppX3)/2,0,0, carlosSupRot);
3693 assemblySupCarlos->AddNode(vSupCarlosBoard3, 0, carlosSupTr3);
3694 assemblySupCarlos->AddNode(vSupCarlosBoard3, 1, carlosSupTr4);
effd7456 3695
108bd0fe 3696
73dfc864 3697 //=========================================
3698 // screws fixing the board on the U tube
3699 Double_t aaa = fgkCarlosSuppY3; // ???
3700 //Double_t aaa = fgkCarlosSuppY3/2 + fgkLittleScrewHeadH/2;
3701 Double_t bbb = fgkCarlosSuppZ3/2 - fgkLittleScrewHeadR;
3702 Double_t screw1y = ( aaa*cos(TMath::DegToRad()*fgkCarlosSuppAngle) -
3703 bbb*sin(TMath::DegToRad()*fgkCarlosSuppAngle) );
3704 Double_t screw1z = ( aaa*sin(TMath::DegToRad()*fgkCarlosSuppAngle) +
3705 bbb*cos(TMath::DegToRad()*fgkCarlosSuppAngle) )-0.07;
3706
cfe39822 3707 TGeoRotation *carlosSuppRot = (TGeoRotation *)fCommonTr[0];
73dfc864 3708
3709 TGeoCombiTrans* lScrewTr1 = new TGeoCombiTrans((fgkCarlosSuppX1+
3710 fgkCarlosSuppX2+fgkCarlosSuppX3)/2,
cfe39822 3711 screw1y,screw1z, carlosSuppRot);
73dfc864 3712
3713 TGeoCombiTrans* lScrewTr2 = new TGeoCombiTrans((fgkCarlosSuppX1+
3714 fgkCarlosSuppX2+fgkCarlosSuppX3)/2,
cfe39822 3715 screw1z,screw1y, carlosSuppRot);
73dfc864 3716
3717 TGeoCombiTrans *lScrewTr3 = new TGeoCombiTrans(-(fgkCarlosSuppX1+
3718 fgkCarlosSuppX2+fgkCarlosSuppX3)/2,
cfe39822 3719 screw1y,screw1z, carlosSuppRot);
73dfc864 3720
3721 TGeoCombiTrans *lScrewTr4 = new TGeoCombiTrans(-(fgkCarlosSuppX1+
3722 fgkCarlosSuppX2+fgkCarlosSuppX3)/2,
cfe39822 3723 screw1z,screw1y, carlosSuppRot);
73dfc864 3724
3725 assemblySupCarlos->AddNode(fCommonVol[0], 1, lScrewTr1);
3726 assemblySupCarlos->AddNode(fCommonVol[0], 2, lScrewTr2);
3727 assemblySupCarlos->AddNode(fCommonVol[0], 3, lScrewTr3);
3728 assemblySupCarlos->AddNode(fCommonVol[0], 4, lScrewTr4);
3729
3730 //=========================================
3731 // board
3732 Double_t p1[3], p2[3], vX[3] = {1,0,0};
3733 AliITSv11GeomCableFlat card1("cardCarlos1", fgkCarlosCardZ1, fgkCarlosCardY1); // name, width, thickness
3734 card1.SetNLayers(2);
3735 card1.SetLayer(0, fgkCarlosCardCuY, copper, kOrange); // index, thickness, material, color
3736 card1.SetLayer(1, fgkCarlosCardY1-fgkCarlosCardCuY, glassFiber, 30);
3737 card1.SetInitialNode( (TGeoVolume *) assemblySupCarlos);
3738 p1[0] = -fgkCarlosCardX1/2;
3739 p1[1] = shiftGlobY - fgkCarlosCard2HeatBridge;
3740 p1[2] = fgkCarlosCardShift;
3741 p2[0] = fgkCarlosCardX1/2;
3742 p2[1] = shiftGlobY - fgkCarlosCard2HeatBridge;
3743 p2[2] = fgkCarlosCardShift;
3744 card1.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 0, p1, vX);
3745 card1.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 1, p2, vX);
3746 card1.CreateAndInsertBoxCableSegment(1,90);
3747
3748 AliITSv11GeomCableFlat card2("cardCarlos2", fgkCarlosCardZ2, fgkCarlosCardY1); // name, width, thickness
3749 card2.SetNLayers(2);
3750 card2.SetLayer(0, fgkCarlosCardCuY, copper, kOrange); // index, thickness, material, color
3751 card2.SetLayer(1, fgkCarlosCardY1-fgkCarlosCardCuY, glassFiber, 30);
3752 card2.SetInitialNode( (TGeoVolume *) assemblySupCarlos);
3753
3754 p1[0] = -fgkCarlosCardX1/2;
3755 p1[1] = shiftGlobY - fgkCarlosCard2HeatBridge;
3756 p1[2] = fgkCarlosCardShift + fgkCarlosCardZ1/2 + fgkCarlosCardZ2/2;
3757
3758 p2[0] = -fgkCarlosCardX1/2 + fgkCarlosCardX2;
3759 p2[1] = shiftGlobY - fgkCarlosCard2HeatBridge;
3760 p2[2] = fgkCarlosCardShift + fgkCarlosCardZ1/2 + fgkCarlosCardZ2/2;
3761 card2.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 0, p1, vX);
3762 card2.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 1, p2, vX);
3763 card2.CreateAndInsertBoxCableSegment(1,90);
3764
3765 //=========================================
3766 // some chips on the board
3767
3768 AliITSv11GeomCableFlat u1("carlosCardU1", fgkCarlosU1Z, fgkCarlosU1Y); // name, width, thickness
3769 u1.SetNLayers(2);
3770 u1.SetLayer(0, fgkCarlosCardChipSiThick, siliconChip, kGreen); // index, thickness, material, color
3771 u1.SetLayer(1, fgkCarlosU1Y - fgkCarlosCardChipSiThick, plastiChip, kGray+3);
3772 u1.SetInitialNode( (TGeoVolume *) assemblySupCarlos);
3773
3774 p1[0] = fgkCarlosU1posX - fgkCarlosU1X/2;
3775 p1[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU1Y/2;
3776 p1[2] = fgkCarlosCardShift + fgkCarlosU1posZ;
3777
3778 p2[0] = fgkCarlosU1posX + fgkCarlosU1X/2;
3779 p2[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU1Y/2;
3780 p2[2] = fgkCarlosCardShift + fgkCarlosU1posZ;
3781 u1.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 0, p1, vX);
3782 u1.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 1, p2, vX);
3783 u1.CreateAndInsertBoxCableSegment(1,90);
3784
3785 //---
3786 AliITSv11GeomCableFlat u2("carlosCardU2", fgkCarlosU2Z, fgkCarlosU2Y); // name, width, thickness
3787 u2.SetNLayers(2);
3788 u2.SetLayer(0, fgkCarlosCardChipSiThick, siliconChip, kGreen); // index, thickness, material, color
3789 u2.SetLayer(1, fgkCarlosU2Y - fgkCarlosCardChipSiThick, plastiChip, kGray+3);
3790 u2.SetInitialNode( (TGeoVolume *) assemblySupCarlos);
3791
3792 p1[0] = fgkCarlosU2posX - fgkCarlosU2X/2;
3793 p1[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU2Y/2;
3794 p1[2] = fgkCarlosCardShift + fgkCarlosU2posZ;
3795
3796 p2[0] = fgkCarlosU2posX + fgkCarlosU2X/2;
3797 p2[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU2Y/2;
3798 p2[2] = fgkCarlosCardShift + fgkCarlosU2posZ;
3799 u2.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 0, p1, vX);
3800 u2.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 1, p2, vX);
3801 u2.CreateAndInsertBoxCableSegment(1,90);
3802
3803 //---
3804 AliITSv11GeomCableFlat u3("carlosCardU3", fgkCarlosU3Z, fgkCarlosU3Y); // name, width, thickness
3805 u3.SetNLayers(2);
3806 u3.SetLayer(0, fgkCarlosCardChipSiThick, siliconChip, kGreen); // index, thickness, material, color
3807 u3.SetLayer(1, fgkCarlosU3Y - fgkCarlosCardChipSiThick, plastiChip, kGray+3);
3808 u3.SetInitialNode( (TGeoVolume *) assemblySupCarlos);
3809
3810 Double_t u3Y = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU3Y/2;
3811 p1[0] = fgkCarlosU3posX - fgkCarlosU3X/2;
3812 p1[1] = u3Y;
3813 p1[2] = fgkCarlosCardShift + fgkCarlosU3posZ;
3814
3815 p2[0] = fgkCarlosU3posX + fgkCarlosU3X/2;
3816 p2[1] = u3Y;
3817 p2[2] = fgkCarlosCardShift + fgkCarlosU3posZ;
3818 u3.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 0, p1, vX);
3819 u3.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 1, p2, vX);
3820 TGeoVolume *u3Vol = u3.CreateAndInsertBoxCableSegment(1,90);
3821
3822 //--- U4 is like U3 (?)
3823 TGeoCombiTrans *u4Trans = new TGeoCombiTrans;
3824 u4Trans->RotateX(90);
3825 u4Trans->SetTranslation(fgkCarlosU4posX, u3Y,
3826 fgkCarlosCardShift + fgkCarlosU4posZ);
3827 assemblySupCarlos->AddNode(u3Vol, 2, u4Trans);
3828
3829 //---
3830 AliITSv11GeomCableFlat u17("carlosCardU17", fgkCarlosU17Z, fgkCarlosU17Y); // name, width, thickness
3831 u17.SetNLayers(2);
3832 u17.SetLayer(0, fgkCarlosCardChipSiThick, siliconChip, kGreen); // index, thickness, material, color
3833 u17.SetLayer(1, fgkCarlosU17Y - fgkCarlosCardChipSiThick, plastiChip, kGray+3);
3834 u17.SetInitialNode( (TGeoVolume *) assemblySupCarlos);
3835
3836 p1[0] = fgkCarlosU17posX - fgkCarlosU17X/2;
3837 p1[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU17Y/2;
3838 p1[2] = fgkCarlosCardShift + fgkCarlosU17posZ;
3839
3840 p2[0] = fgkCarlosU17posX + fgkCarlosU17X/2;
3841 p2[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU17Y/2;
3842 p2[2] = fgkCarlosCardShift + fgkCarlosU17posZ;
3843 u17.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 0, p1, vX);
3844 u17.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 1, p2, vX);
3845 u17.CreateAndInsertBoxCableSegment(1,90);
3846
3847 //---
3848 AliITSv11GeomCableFlat u35("carlosCardU35", fgkCarlosU35Z, fgkCarlosU35Y); // name, width, thickness
3849 u35.SetNLayers(2);
3850 u35.SetLayer(0, fgkCarlosCardChipSiThick, siliconChip, kGreen); // index, thickness, material, color
3851 u35.SetLayer(1, fgkCarlosU35Y - fgkCarlosCardChipSiThick, plastiChip, kGray+3);
3852 u35.SetInitialNode( (TGeoVolume *) assemblySupCarlos);
3853
3854 p1[0] = fgkCarlosU35posX - fgkCarlosU35X/2;
3855 p1[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU35Y/2;
3856 p1[2] = fgkCarlosCardShift + fgkCarlosU35posZ;
3857
3858 p2[0] = fgkCarlosU35posX + fgkCarlosU35X/2;
3859 p2[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU35Y/2;
3860 p2[2] = fgkCarlosCardShift + fgkCarlosU35posZ;
3861 u35.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 0, p1, vX);
3862 u35.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 1, p2, vX);
3863 u35.CreateAndInsertBoxCableSegment(1,90);
3864
3865 //---
3866 AliITSv11GeomCableFlat u36("carlosCardU36", fgkCarlosU36Z, fgkCarlosU36Y); // name, width, thickness
3867 u36.SetNLayers(2);
3868 u36.SetLayer(0, fgkCarlosCardChipSiThick, siliconChip, kGreen); // index, thickness, material, color
3869 u36.SetLayer(1, fgkCarlosU36Y - fgkCarlosCardChipSiThick, plastiChip, kGray+3);
3870 u36.SetInitialNode( (TGeoVolume *) assemblySupCarlos);
3871
3872 p1[0] = fgkCarlosU36posX - fgkCarlosU36X/2;
3873 p1[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU36Y/2;
3874 p1[2] = fgkCarlosCardShift + fgkCarlosU36posZ;
3875
3876 p2[0] = fgkCarlosU36posX + fgkCarlosU36X/2;
3877 p2[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU36Y/2;
3878 p2[2] = fgkCarlosCardShift + fgkCarlosU36posZ;
3879 u36.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 0, p1, vX);
3880 u36.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 1, p2, vX);
3881 u36.CreateAndInsertBoxCableSegment(1,90);
3882
3883 //--- QZ1
3884 AliITSv11GeomCableFlat qz1("carlosCardQZ1", fgkCarlosQZ1Z, fgkCarlosQZ1Y); // name, width, thickness
3885 qz1.SetNLayers(2);
3886 qz1.SetLayer(0, fgkCarlosCardChipSiThick, siliconChip, kGreen); // index, thickness, material, color
3887 qz1.SetLayer(1, fgkCarlosQZ1Y - fgkCarlosCardChipSiThick, plastiChip, kGray+3);
3888 qz1.SetInitialNode( (TGeoVolume *) assemblySupCarlos);
3889
3890 p1[0] = fgkCarlosQZ1posX - fgkCarlosQZ1X/2;
3891 p1[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosQZ1Y/2;
3892 p1[2] = fgkCarlosCardShift + fgkCarlosQZ1posZ;
3893
3894 p2[0] = fgkCarlosQZ1posX + fgkCarlosQZ1X/2;
3895 p2[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosQZ1Y/2;
3896 p2[2] = fgkCarlosCardShift + fgkCarlosQZ1posZ;
3897 qz1.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 0, p1, vX);
3898 qz1.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 1, p2, vX);
3899 qz1.CreateAndInsertBoxCableSegment(1,90);
3900
3901 return assemblySupCarlos;
108bd0fe 3902}
c789ee28 3903
db486a6e 3904//________________________________________________________________________
73dfc864 3905Int_t AliITSv11GeometrySDD::CreateLVCard() {
108bd0fe 3906 //
73dfc864 3907 // Creates the assemblies containing the LV cards (left and right)
b7943f00 3908 //
108bd0fe 3909
9c8369f9 3910 TGeoMedium *glassFiber = GetMedium("GLASS FIBER$");// glassFiber
108bd0fe 3911 TGeoMedium *siliconChip = GetMedium("SDD SI CHIP$");// ITSsddSiChip
3912 TGeoMedium *plastiChip = GetMedium("SDDKAPTON (POLYCH2)$"); // ITSsddKAPTON_POLYCH2
3913 TGeoMedium *copper = GetMedium("COPPER$");
d8826f33 3914 TGeoMedium *alCu12SDD = GetMedium("ALCU12$"); // ITSsddAlCu12
9c8369f9 3915 TGeoMedium *stainless = GetMedium("AISI304L$"); // for screws
108bd0fe 3916
73dfc864 3917 fCardLVL = new TGeoVolumeAssembly("ITSsddLVCardLeft");
3918 fCardLVR = new TGeoVolumeAssembly("ITSsddLVCardRight");
108bd0fe 3919
73dfc864 3920 // we are going to use flat cable class to create multilayer box,
3921 // then we can use the pointers to created volumes to place them elsewhere
108bd0fe 3922 Double_t p1[3], p2[3], vX[3] = {1,0,0};
3923
effd7456 3924 Double_t carLVfullThick = fgkLVcardZ+fgkLVcardCuZ;
3925 AliITSv11GeomCableFlat cardLV("cardLV", fgkLVcardY, carLVfullThick); // name, width, thickness
108bd0fe 3926 cardLV.SetNLayers(2);
effd7456 3927 cardLV.SetLayer(0, fgkLVcardCuZ, copper, 30); // index, thickness, material, color
3928 cardLV.SetLayer(1, fgkLVcardZ, glassFiber, 30);
73dfc864 3929 cardLV.SetInitialNode( (TGeoVolume *) fCardLVL);
108bd0fe 3930 p1[0] = 0;
effd7456 3931 p1[1] = fgkLVcardY/2;
108bd0fe 3932 p1[2] = 0;
73dfc864 3933 p2[0] = fgkLVcardX;
effd7456 3934 p2[1] = fgkLVcardY/2;
108bd0fe 3935 p2[2] = 0;
73dfc864 3936 cardLV.AddCheckPoint( (TGeoVolume *) fCardLVL, 0, p1, vX);
3937 cardLV.AddCheckPoint( (TGeoVolume *) fCardLVL, 1, p2, vX);
3938 TGeoVolume* boxVol = cardLV.CreateAndInsertBoxCableSegment(1);
3939 TGeoRotation *rotAdd = new TGeoRotation("",90,0,0);
3940 TGeoCombiTrans *trCard = new TGeoCombiTrans(-fgkLVcardX/2,fgkLVcardY/2,0,rotAdd);
3941 fCardLVR->AddNode(boxVol, 1, trCard);
108bd0fe 3942
effd7456 3943 Double_t chip0fullThick = fgkLVChip0Z + fgkLVChip0SiZ;
3944 AliITSv11GeomCableFlat chipO("chipO", fgkLVChip0Y, chip0fullThick); // name, width, thickness
108bd0fe 3945 chipO.SetNLayers(2);
effd7456 3946 chipO.SetLayer(0, fgkLVChip0SiZ, siliconChip, 8); // index, thickness, material, color
3947 chipO.SetLayer(1, fgkLVChip0Z, plastiChip, 12);
73dfc864 3948 chipO.SetInitialNode( (TGeoVolume *) fCardLVL);
3949 p1[0] = (fgkLVChip0PosX - fgkLVChip0X/2);
effd7456 3950 p1[1] = fgkLVChip0PosY;
108bd0fe 3951 p1[2] = carLVfullThick/2 + chip0fullThick/2;
73dfc864 3952
3953 p2[0] = (fgkLVChip0PosX + fgkLVChip0X/2);
effd7456 3954 p2[1] = fgkLVChip0PosY;
108bd0fe 3955 p2[2] = carLVfullThick/2 + chip0fullThick/2;
73dfc864 3956 chipO.AddCheckPoint( (TGeoVolume *) fCardLVL, 0, p1, vX);
3957 chipO.AddCheckPoint( (TGeoVolume *) fCardLVL, 1, p2, vX);
3958 boxVol = chipO.CreateAndInsertBoxCableSegment(1);
3959 trCard = new TGeoCombiTrans( -fgkLVChip0PosX,
3960 fgkLVChip0PosY,
3961 carLVfullThick/2+chip0fullThick/2, rotAdd);
3962 fCardLVR->AddNode(boxVol, 1, trCard);
3963
3964 // put also this chip on the other side of the card
3965 trCard = new TGeoCombiTrans( fgkLVChip0PosX,
3966 fgkLVChip0PosY,
3967 -carLVfullThick/2-chip0fullThick/2, rotAdd);
3968 fCardLVL->AddNode(boxVol, 2, trCard);
3969 trCard = new TGeoCombiTrans( -fgkLVChip0PosX,
3970 fgkLVChip0PosY,
3971 -carLVfullThick/2-chip0fullThick/2, rotAdd);
3972 fCardLVR->AddNode(boxVol, 2, trCard);
108bd0fe 3973
effd7456 3974 Double_t chip1fullThick = fgkLVChip1Z + fgkLVChip1SiZ;
3975 AliITSv11GeomCableFlat chip1("chip1", fgkLVChip1Y, chip1fullThick);
108bd0fe 3976 chip1.SetNLayers(2);
effd7456 3977 chip1.SetLayer(0, fgkLVChip1SiZ, siliconChip, 8);
3978 chip1.SetLayer(1, fgkLVChip1Z, plastiChip, 12);
73dfc864 3979 chip1.SetInitialNode( (TGeoVolume *) fCardLVL);
3980 p1[0] = (fgkLVChip1PosX-fgkLVChip1X/2);
effd7456 3981 p1[1] = fgkLVChip1PosY;
108bd0fe 3982 p1[2] = carLVfullThick/2 + chip1fullThick/2;
3983
73dfc864 3984 p2[0] = (fgkLVChip1PosX+fgkLVChip1X/2);
effd7456 3985 p2[1] = fgkLVChip1PosY;
108bd0fe 3986 p2[2] = carLVfullThick/2 + chip1fullThick/2;
73dfc864 3987 chip1.AddCheckPoint( (TGeoVolume *) fCardLVL, 0, p1, vX);
3988 chip1.AddCheckPoint( (TGeoVolume *) fCardLVL, 1, p2, vX);
3989 boxVol = chip1.CreateAndInsertBoxCableSegment(1);
3990 trCard = new TGeoCombiTrans( -fgkLVChip1PosX,
3991 fgkLVChip1PosY,
3992 carLVfullThick/2 + chip1fullThick/2, rotAdd);
3993 fCardLVR->AddNode(boxVol, 1, trCard);
108bd0fe 3994
effd7456 3995 Double_t chip2fullThick = fgkLVChip2Z + fgkLVChip2SiZ;
3996 AliITSv11GeomCableFlat chip2("chip2", fgkLVChip2Y, chip2fullThick);
108bd0fe 3997 chip2.SetNLayers(2);
effd7456 3998 chip2.SetLayer(0, fgkLVChip2SiZ, siliconChip, 8);
3999 chip2.SetLayer(1, fgkLVChip2Z, plastiChip, 12);
73dfc864 4000 chip2.SetInitialNode( (TGeoVolume *) fCardLVL);
4001 p1[0] = (fgkLVChip2PosX-fgkLVChip2X/2);
effd7456 4002 p1[1] = fgkLVChip2PosY;
108bd0fe 4003 p1[2] = carLVfullThick/2 + chip2fullThick/2;
73dfc864 4004 p2[0] = (fgkLVChip2PosX+fgkLVChip2X/2);
effd7456 4005 p2[1] = fgkLVChip2PosY;
108bd0fe 4006 p2[2] = carLVfullThick/2 + chip2fullThick/2;
73dfc864 4007 chip2.AddCheckPoint( (TGeoVolume *) fCardLVL, 0, p1, vX);
4008 chip2.AddCheckPoint( (TGeoVolume *) fCardLVL, 1, p2, vX);
4009 boxVol = chip2.CreateAndInsertBoxCableSegment(1);
4010 trCard = new TGeoCombiTrans( -fgkLVChip2PosX,
4011 fgkLVChip2PosY,
4012 carLVfullThick/2 + chip2fullThick/2, rotAdd);
4013 fCardLVR->AddNode(boxVol, 1, trCard);
108bd0fe 4014
effd7456 4015 Double_t chip3fullThick = fgkLVChip3Z + fgkLVChip3SiZ;
4016 AliITSv11GeomCableFlat chip3("chip3", fgkLVChip3Y, chip3fullThick);
108bd0fe 4017 chip3.SetNLayers(2);
effd7456 4018 chip3.SetLayer(0, fgkLVChip3Z, plastiChip, 12);
4019 chip3.SetLayer(1, fgkLVChip3SiZ, siliconChip, 8);
73dfc864 4020 chip3.SetInitialNode( (TGeoVolume *) fCardLVL);
4021 p1[0] = (fgkLVChip3PosX-fgkLVChip3X/2);
effd7456 4022 p1[1] = fgkLVChip3PosY;
108bd0fe 4023 p1[2] = -carLVfullThick/2 - chip3fullThick/2;
73dfc864 4024 p2[0] = (fgkLVChip3PosX+fgkLVChip3X/2);
effd7456 4025 p2[1] = fgkLVChip3PosY;
108bd0fe 4026 p2[2] = -carLVfullThick/2 - chip3fullThick/2;
73dfc864 4027 chip3.AddCheckPoint( (TGeoVolume *) fCardLVL, 0, p1, vX);
4028 chip3.AddCheckPoint( (TGeoVolume *) fCardLVL, 1, p2, vX);
4029 boxVol = chip3.CreateAndInsertBoxCableSegment(1);
4030 trCard = new TGeoCombiTrans( -fgkLVChip3PosX,
4031 fgkLVChip3PosY,
4032 -carLVfullThick/2 - chip3fullThick/2, rotAdd);
4033 fCardLVR->AddNode(boxVol, 1, trCard);
108bd0fe 4034
4035 // the Al pieces for heat exchange :
108bd0fe 4036 TGeoBBox *alLVcooling1 = new TGeoBBox("alLVcooling1" ,
effd7456 4037 fgkLVcoolX1/2, fgkLVcoolY1/2, fgkLVcoolZ1/2);
108bd0fe 4038
4039 TGeoTranslation *alLVcooling1Tr = new TGeoTranslation("alLVcooling1Tr",
73dfc864 4040 (fgkLVcoolX1/2+fgkLVcoolX2),
effd7456 4041 fgkLVcoolPosY+fgkLVcoolY1/2,
4042 carLVfullThick/2+chip0fullThick+fgkLVcoolZ1/2);
108bd0fe 4043 TGeoTranslation *alLVcooling1TrB = new TGeoTranslation("alLVcooling1TrB",
73dfc864 4044 (fgkLVcoolX1/2+fgkLVcoolX2),
effd7456 4045 fgkLVcoolPosY+fgkLVcoolY1/2,
4046 -(carLVfullThick/2+chip0fullThick+fgkLVcoolZ1/2));
108bd0fe 4047
4048 TGeoVolume *vAlLVcooling1 = new TGeoVolume("vAlLVcooling1",alLVcooling1,
4049 alCu12SDD);
4050 vAlLVcooling1->SetLineColor(2);
4051
4052 //--
4053 TGeoBBox * alLVcooling2 = new TGeoBBox("lLVcooling2" ,
effd7456 4054 fgkLVcoolX2/2, fgkLVcoolY2/2, fgkLVcoolZ2/2);
108bd0fe 4055 TGeoTranslation *alLVcooling2Tr = new TGeoTranslation("alLVcooling2Tr",
73dfc864 4056 (fgkLVcoolX2/2),
effd7456 4057 fgkLVcoolPosY+fgkLVcoolY1/2,
4058 carLVfullThick/2+chip0fullThick+fgkLVcoolZ1-fgkLVcoolZ2/2);
108bd0fe 4059 TGeoTranslation *alLVcooling2TrB = new TGeoTranslation("alLVcooling2TrB",
73dfc864 4060 (fgkLVcoolX2/2),
effd7456 4061 fgkLVcoolPosY+fgkLVcoolY1/2,
4062 -(carLVfullThick/2+chip0fullThick+fgkLVcoolZ1-fgkLVcoolZ2/2));
108bd0fe 4063
4064 TGeoVolume *vAlLVcooling2 = new TGeoVolume("vAlLVcooling2",alLVcooling2,
4065 alCu12SDD);
4066 vAlLVcooling2->SetLineColor(2);
4067
4068 //--
effd7456 4069 Double_t alLVcoolZ3 = (fgkLVcardCuZ+fgkLVcardZ+2.*(fgkLVChip0SiZ+fgkLVChip0Z)
4070 +fgkLVcoolZ1*2.);
108bd0fe 4071 TGeoBBox * alLVcooling3 = new TGeoBBox("lLVcooling3" ,
effd7456 4072 fgkLVcoolX3/2, fgkLVcoolY3/2, alLVcoolZ3/2);
108bd0fe 4073 TGeoTranslation *alLVcooling3Tr = new TGeoTranslation("alLVcooling3Tr",
73dfc864 4074 (-fgkLVcoolX3/2),
effd7456 4075 fgkLVcoolPosY+fgkLVcoolY1-fgkLVcoolY3/2,
108bd0fe 4076 0);
108bd0fe 4077 TGeoVolume *vAlLVcooling3 = new TGeoVolume("vAlLVcooling3",alLVcooling3,alCu12SDD);
4078 vAlLVcooling3->SetLineColor(2);
4079
73dfc864 4080 //=== screw fixing th LV card to the U cooling tube :
4081 TGeoTube *littleScrew = new TGeoTube("littleScrewLV", 0, fgkLittleScrewR,
4082 fgkLVcoolY3/2);
4083 TGeoVolume *vLittleScrew = new TGeoVolume("vLittleScrewLV",
4084 littleScrew, stainless);
4085 TGeoRotation *rotScrew = new TGeoRotation("",0,90,0);
4086
4087 TGeoCombiTrans *cbScrew = new TGeoCombiTrans(0,0,fgkShiftLittleScrewLV,
4088 rotScrew);
4089 vAlLVcooling3->AddNode(vLittleScrew, 1, cbScrew);
4090
4091 TGeoTube *littleScrewHead = new TGeoTube("littleScrewLVhead",
4092 0, fgkLittleLVScrewHeadR,
4093 fgkLittleScrewHeadH/2);
4094 TGeoVolume *vLittleScrewHead = new TGeoVolume("vLittleScrewLVhead",
4095 littleScrewHead, stainless);
4096 vLittleScrewHead->SetLineColor(kGray);
4097 TGeoCombiTrans *cbScrewHeadL = new TGeoCombiTrans( -fgkLVcoolX3/2,
4098 fgkLVcoolPosY+fgkLVcoolY1 + fgkLittleScrewHeadH/2,
4099 fgkShiftLittleScrewLV,
4100 rotScrew);
4101 fCardLVL->AddNode(vLittleScrewHead, 1, cbScrewHeadL);
4102
4103 TGeoCombiTrans *cbScrewHeadR = new TGeoCombiTrans( fgkLVcoolX3/2,
4104 fgkLVcoolPosY+fgkLVcoolY1 + fgkLittleScrewHeadH/2,
4105 fgkShiftLittleScrewLV,
4106 rotScrew);
4107 fCardLVR->AddNode(vLittleScrewHead, 1, cbScrewHeadR);
4108
4109 // adding the cooling pieces to the left card
4110 fCardLVL->AddNode(vAlLVcooling1, 1,alLVcooling1Tr);
4111 fCardLVL->AddNode(vAlLVcooling1, 2,alLVcooling1TrB);
4112 fCardLVL->AddNode(vAlLVcooling2, 1,alLVcooling2Tr);
4113 fCardLVL->AddNode(vAlLVcooling2, 2,alLVcooling2TrB);
4114 fCardLVL->AddNode(vAlLVcooling3, 1,alLVcooling3Tr);
4115
4116 TGeoTranslation *alLVcooling1TrR = new TGeoTranslation("alLVcooling1TrR",
4117 -(fgkLVcoolX1/2+fgkLVcoolX2),
4118 fgkLVcoolPosY+fgkLVcoolY1/2,
4119 carLVfullThick/2+chip0fullThick+fgkLVcoolZ1/2);
4120 TGeoTranslation *alLVcooling1TrBR = new TGeoTranslation("alLVcooling1TrBR",
4121 -(fgkLVcoolX1/2+fgkLVcoolX2),
4122 fgkLVcoolPosY+fgkLVcoolY1/2,
4123 -(carLVfullThick/2+chip0fullThick+fgkLVcoolZ1/2));
4124 TGeoTranslation *alLVcooling2TrR = new TGeoTranslation("alLVcooling2TrR",
4125 -(fgkLVcoolX2/2),
4126 fgkLVcoolPosY+fgkLVcoolY1/2,
4127 carLVfullThick/2+chip0fullThick+fgkLVcoolZ1-fgkLVcoolZ2/2);
4128 TGeoTranslation *alLVcooling2TrBR = new TGeoTranslation("alLVcooling2TrBR",
4129 -(fgkLVcoolX2/2),
4130 fgkLVcoolPosY+fgkLVcoolY1/2,
4131 -(carLVfullThick/2+chip0fullThick+fgkLVcoolZ1-fgkLVcoolZ2/2));
108bd0fe 4132
73dfc864 4133 TGeoTranslation *alLVcooling3TrR = new TGeoTranslation("alLVcooling3TrR",
4134 fgkLVcoolX3/2,
4135 fgkLVcoolPosY+fgkLVcoolY1-fgkLVcoolY3/2,
4136 0);
4137 // and to the right card
4138 fCardLVR->AddNode(vAlLVcooling1, 1,alLVcooling1TrR);
4139 fCardLVR->AddNode(vAlLVcooling1, 2,alLVcooling1TrBR);
4140 fCardLVR->AddNode(vAlLVcooling2, 1,alLVcooling2TrR);
4141 fCardLVR->AddNode(vAlLVcooling2, 2,alLVcooling2TrBR);
4142 fCardLVR->AddNode(vAlLVcooling3, 1,alLVcooling3TrR);
4143
4144 return kTRUE;
108bd0fe 4145}
4146
108bd0fe 4147//________________________________________________________________________
4148TGeoVolumeAssembly* AliITSv11GeometrySDD::CreateHVCard(Int_t iLay){
4149 //
4150 // return an assembly containing the HV card
b7943f00 4151 //
108bd0fe 4152 iLay = iLay;
4153
4154 TGeoMedium *ceramic = GetMedium("CERAMICS$"); // ceramicHVcard
9c8369f9 4155 TGeoMedium *medSMDcapaMiddle = GetMedium("SDD X7R capacitors$"); // check if different
4156 TGeoMedium *medSMDcapaEnd = GetMedium("SDD X7R capacitors$"); // check if different
108bd0fe 4157 TGeoMedium *stainless = GetMedium("INOX$"); // ITSspdStainlesSteal ???????????
4158 TGeoMedium *plastic = GetMedium("SDDKAPTON (POLYCH2)$"); // ITS_ITSsddKAPTON_POLYCH2 ???????????
d8826f33 4159 TGeoMedium *alCu12SDD = GetMedium("ALCU12$"); // ITSsddAlCu12
108bd0fe 4160
4161 TGeoVolumeAssembly *highVCard = new TGeoVolumeAssembly("ITSsddHVCard");
4162
4163 //====================================
4164 //--- the card itself
4165 TGeoBBox *ceramicCard = new TGeoBBox("ceramCard", fgkHVCardCeramX/2,
4166 fgkHVCardCeramY/2, fgkHVCardCeramZ/2);
4167 TGeoVolume *vCeramicCard = new TGeoVolume("vCeramCard", ceramicCard, ceramic);
4168 vCeramicCard->SetLineColor(38);// or 9 blue slightly dark
4169
4170 highVCard->AddNode(vCeramicCard, 1, 0);
4171
4172
4173 //====================================
4174 //--- capacitors
4175
4176 // capa1
4177 TGeoBBox *capa1Middle = new TGeoBBox("cardHVCapa1Middle", fgkHVCardCapa1X/2,
4178 fgkHVCardCapa1Ymid/2, fgkHVCardCapa1Z/2);
4179 TGeoVolume *vCapa1Middle = new TGeoVolume("vCardHVCapa1Middle",capa1Middle,
4180 medSMDcapaMiddle);
4181
4182 TGeoBBox *capa1End = new TGeoBBox("cardHVCapa1End", fgkHVCardCapa1X/2,
4183 fgkHVCardCapa1Yend/2, fgkHVCardCapa1Z/2);
4184 TGeoVolume *vCapa1End = new TGeoVolume("vCardHVCapa1End",capa1End,
4185 medSMDcapaEnd);
4186 vCapa1End->SetLineColor(18);// grey silver
4187 TGeoTranslation *capa1EndTr1 = new TGeoTranslation("cardHVcapa1EndTr1", 0,
4188 (fgkHVCardCapa1Ymid+fgkHVCardCapa1Yend)/2,0);
4189 TGeoTranslation *capa1EndTr2 = new TGeoTranslation("cardHVcapa1EndTr2", 0,
4190 -(fgkHVCardCapa1Ymid+fgkHVCardCapa1Yend)/2,0);
4191
4192 TGeoTranslation *capa1PosTr = new TGeoTranslation("cardHVcapa1PosTr",
4193 fgkHVCardCapa1PosX, fgkHVCardCapa1PosY,
4194 -fgkHVCardCeramZ/2-fgkHVCardCapa1Z/2);
4195
108bd0fe 4196 TGeoVolumeAssembly *capa1 = new TGeoVolumeAssembly("cardHVCapa1");
4197 capa1->AddNode(vCapa1Middle, 1,0);
4198 capa1->AddNode(vCapa1End, 1, capa1EndTr1);
4199 capa1->AddNode(vCapa1End, 2, capa1EndTr2);
4200
4201 highVCard->AddNode(capa1, 1, capa1PosTr);
4202
4203 // capa2
4204 TGeoBBox *capa2Middle = new TGeoBBox("cardHVCapa2Middle", fgkHVCardCapa2X/2,
4205 fgkHVCardCapa2Ymid/2, fgkHVCardCapa2Z/2);
4206 TGeoVolume *vCapa2Middle = new TGeoVolume("vCardHVCapa2Middle",capa2Middle,
4207 medSMDcapaMiddle);
4208
4209 TGeoBBox *capa2End = new TGeoBBox("cardHVCapa2End", fgkHVCardCapa2X/2,
4210 fgkHVCardCapa2Yend/2, fgkHVCardCapa2Z/2);
4211 TGeoVolume *vCapa2End = new TGeoVolume("vCardHVCapa2End",capa2End,
4212 medSMDcapaEnd);
4213 vCapa2End->SetLineColor(18);// grey silver
4214 TGeoTranslation *capa2EndTr1 = new TGeoTranslation("cardHVcapa2EndTr1", 0,
4215 (fgkHVCardCapa2Ymid+fgkHVCardCapa2Yend)/2,0);
4216 TGeoTranslation *capa2EndTr2 = new TGeoTranslation("cardHVcapa2EndTr2", 0,
4217 -(fgkHVCardCapa2Ymid+fgkHVCardCapa2Yend)/2,0);
4218
4219 TGeoTranslation *capa2PosTr = new TGeoTranslation("cardHVcapa2PosTr",
4220 fgkHVCardCapa2PosX, fgkHVCardCapa2PosY,
4221 -fgkHVCardCeramZ/2-fgkHVCardCapa2Z/2);
4222
4223 TGeoVolumeAssembly *capa2 = new TGeoVolumeAssembly("cardHVCapa2");
4224 capa2->AddNode(vCapa2Middle, 1,0);
4225 capa2->AddNode(vCapa2End, 1, capa2EndTr1);
4226 capa2->AddNode(vCapa2End, 2, capa2EndTr2);
4227
4228 highVCard->AddNode(capa2, 1, capa2PosTr);
4229
4230 // capa3
4231 TGeoBBox *capa3Middle = new TGeoBBox("cardHVCapa3Middle", fgkHVCardCapa3Xmid/2,
4232 fgkHVCardCapa3Y/2, fgkHVCardCapa3Z/2);
4233 TGeoVolume *vCapa3Middle = new TGeoVolume("vCardHVCapa3Middle",capa3Middle,
4234 medSMDcapaMiddle);
4235
4236 TGeoBBox *capa3End = new TGeoBBox("cardHVCapa3End", fgkHVCardCapa3Xend/2,
4237 fgkHVCardCapa3Y/2, fgkHVCardCapa3Z/2);
4238 TGeoVolume *vCapa3End = new TGeoVolume("vCardHVCapa3End",capa3End,
4239 medSMDcapaEnd);
4240 vCapa3End->SetLineColor(18);// grey silver
4241
4242 TGeoTranslation *capa3EndTr1 = new TGeoTranslation("cardHVcapa3EndTr1",
4243 (fgkHVCardCapa3Xmid+fgkHVCardCapa3Xend)/2, 0, 0);
4244 TGeoTranslation *capa3EndTr2 = new TGeoTranslation("cardHVcapa2EndTr2",
4245 -(fgkHVCardCapa3Xmid+fgkHVCardCapa3Xend)/2, 0, 0);
4246
4247 TGeoVolumeAssembly *capa3 = new TGeoVolumeAssembly("cardHVCapa3");
4248 capa3->AddNode(vCapa3Middle, 1,0);
4249 capa3->AddNode(vCapa3End, 1, capa3EndTr1);
4250 capa3->AddNode(vCapa3End, 2, capa3EndTr2);
4251
4252 TGeoTranslation *capa3PosTr1 = new TGeoTranslation("cardHVcapa3PosTr1",
4253 fgkHVCardCapa3PosX1, fgkHVCardCapa3PosY1,
4254 -fgkHVCardCeramZ/2-fgkHVCardCapa3Z/2);
4255
4256 TGeoTranslation *capa3PosTr2 = new TGeoTranslation("cardHVcapa3PosTr2",
4257 fgkHVCardCapa3PosX2, fgkHVCardCapa3PosY1,
4258 -fgkHVCardCeramZ/2-fgkHVCardCapa3Z/2);
4259
4260 TGeoTranslation *capa3PosTr3 = new TGeoTranslation("cardHVcapa3PosTr3",
4261 fgkHVCardCapa3PosX3, fgkHVCardCapa3PosY2,
4262 -fgkHVCardCeramZ/2-fgkHVCardCapa3Z/2);
4263
4264 TGeoTranslation *capa3PosTr4 = new TGeoTranslation("cardHVcapa3PosTr4",
4265 fgkHVCardCapa3PosX4, fgkHVCardCapa3PosY2,
4266 -fgkHVCardCeramZ/2-fgkHVCardCapa3Z/2);
4267
4268 TGeoTranslation *capa3PosTr5 = new TGeoTranslation("cardHVcapa3PosTr5",
4269 fgkHVCardCapa3PosX5, fgkHVCardCapa3PosY3,
4270 -fgkHVCardCeramZ/2-fgkHVCardCapa3Z/2);
4271
4272 highVCard->AddNode(capa3, 1, capa3PosTr1);
4273 highVCard->AddNode(capa3, 2, capa3PosTr2);
4274 highVCard->AddNode(capa3, 3, capa3PosTr3);
4275 highVCard->AddNode(capa3, 4, capa3PosTr4);
4276 highVCard->AddNode(capa3, 5, capa3PosTr5);
4277
4278 //====================================
4279 //--- connexions to LV card
4280
4281 Double_t fgkConnexLVHVdiam1 = 0.8*fgkmm;
4282 Double_t fgkConnexLVHVdiam2 = 2*fgkmm;
4283 Double_t fgkConnexLVHVlen = 6.2*fgkmm;
4284 Double_t fgkConnexLVHVx = 3*fgkmm;
4285 Double_t fgkConnexLVHVy1 = 8*fgkmm;
4286 Double_t fgkConnexLVHVdy = 2.5*fgkmm;
4287
4288 TGeoTube *connexLVHVmetal = new TGeoTube("connexLVHVmetal",0,
4289 fgkConnexLVHVdiam1/2,fgkConnexLVHVlen/2);
4290 TGeoTube *connexLVHVplastic = new TGeoTube("connexLVHVplastic",
4291 fgkConnexLVHVdiam1/2,
4292 fgkConnexLVHVdiam2/2,
4293 fgkConnexLVHVlen/2);
4294 TGeoVolume *vConnexLVHVmetal = new TGeoVolume("ITSsddConnexLVHVmetal",
4295 connexLVHVmetal, stainless);
4296 TGeoVolume *vConnexLVHVplast = new TGeoVolume("ITSsddConnexLVHVplast",
4297 connexLVHVplastic, plastic);
4298 vConnexLVHVmetal->SetLineColor(10);// white
4299 vConnexLVHVplast->SetLineColor(12); // dark grey
4300
4301 TGeoVolumeAssembly *connexion = new TGeoVolumeAssembly("ITSsddConnexLVHV");
4302 connexion->AddNode(vConnexLVHVmetal, 1, 0);
4303 connexion->AddNode(vConnexLVHVplast, 1, 0);
4304
4305 TGeoTranslation *trConnexion1 = new TGeoTranslation(-fgkConnexLVHVx,fgkConnexLVHVy1,
4306 -fgkHVCardCeramZ/2-fgkConnexLVHVlen/2 );
4307 TGeoTranslation *trConnexion2 = new TGeoTranslation( fgkConnexLVHVx,fgkConnexLVHVy1,
4308 -fgkHVCardCeramZ/2-fgkConnexLVHVlen/2 );
4309
4310 TGeoTranslation *trConnexion3 = new TGeoTranslation(-fgkConnexLVHVx,
4311 fgkConnexLVHVy1+fgkConnexLVHVdy,
4312 -fgkHVCardCeramZ/2-fgkConnexLVHVlen/2 );
4313 TGeoTranslation *trConnexion4 = new TGeoTranslation( fgkConnexLVHVx,
4314 fgkConnexLVHVy1+fgkConnexLVHVdy,
4315 -fgkHVCardCeramZ/2-fgkConnexLVHVlen/2 );
4316
4317 TGeoTranslation *trConnexion5 = new TGeoTranslation(-fgkConnexLVHVx,
4318 fgkConnexLVHVy1+2*fgkConnexLVHVdy,
4319 -fgkHVCardCeramZ/2-fgkConnexLVHVlen/2 );
4320 TGeoTranslation *trConnexion6 = new TGeoTranslation( fgkConnexLVHVx,
4321 fgkConnexLVHVy1+2*fgkConnexLVHVdy,
4322 -fgkHVCardCeramZ/2-fgkConnexLVHVlen/2 );
4323
4324 TGeoTranslation *trConnexion7 = new TGeoTranslation(-fgkConnexLVHVx,
4325 fgkConnexLVHVy1+3*fgkConnexLVHVdy,
4326 -fgkHVCardCeramZ/2-fgkConnexLVHVlen/2 );
4327 TGeoTranslation *trConnexion8 = new TGeoTranslation( fgkConnexLVHVx,
4328 fgkConnexLVHVy1+3*fgkConnexLVHVdy,
4329 -fgkHVCardCeramZ/2-fgkConnexLVHVlen/2 );
4330
4331 highVCard->AddNode(connexion, 1, trConnexion1);
4332 highVCard->AddNode(connexion, 2, trConnexion2);
4333 highVCard->AddNode(connexion, 3, trConnexion3);
4334 highVCard->AddNode(connexion, 4, trConnexion4);
4335 highVCard->AddNode(connexion, 5, trConnexion5);
4336 highVCard->AddNode(connexion, 6, trConnexion6);
4337 highVCard->AddNode(connexion, 7, trConnexion7);
4338 highVCard->AddNode(connexion, 8, trConnexion8);
4339
4340 //====================================
4341 //--- cooling pieces
4342
4343 TGeoBBox *cardHVcool1 = new TGeoBBox("cardHVcool1",fgkHVCardCool1X/2,
4344 fgkHVCardCool1Y/2, fgkHVCardCool1Z/2);
4345
4346
4347 TGeoBBox *cardHVcool2 = new TGeoBBox("cardHVcool2",fgkHVCardCool2X/2,
4348 fgkHVCardCool2Y/2, fgkHVCardCool2Z/2);
4349
4350 TGeoBBox *cardHVcool3 = new TGeoBBox("cardHVcool3",fgkHVCardCool3X/2,
4351 fgkHVCardCool3Y/2, fgkHVCardCool3Z/2);
4352
4353 TGeoVolume *vCardHVcool1 = new TGeoVolume("vCardHVcool1",cardHVcool1,
4354 alCu12SDD);
4355 TGeoVolume *vCardHVcool2 = new TGeoVolume("vCardHVcool2",cardHVcool2,
4356 alCu12SDD);
4357 TGeoVolume *vCardHVcool3 = new TGeoVolume("vCardHVcool3",cardHVcool3,
4358 alCu12SDD);
73dfc864 4359 // This last volume contains the screw used for fixing
108bd0fe 4360 // the card to the cooling tube ...
73dfc864 4361 TGeoTube *littleScrewHV = new TGeoTube("littleScrewHV", 0, fgkLittleScrewR,
4362 fgkHVCardCool3Y/2);
4363 TGeoVolume *vLittleScrewHV = new TGeoVolume("vLittleScrewHV",
4364 littleScrewHV, stainless);
108bd0fe 4365
73dfc864 4366 TGeoRotation *rotScrewHead = new TGeoRotation("",0,90,0);
4367 vCardHVcool3->AddNode(vLittleScrewHV, 1,rotScrewHead);
108bd0fe 4368
4369 vCardHVcool1->SetLineColor(2); //red
4370 vCardHVcool2->SetLineColor(2); //red
4371 vCardHVcool3->SetLineColor(2); //red
4372
4373 TGeoTranslation *cool1Tr1 = new TGeoTranslation("cardHVcool1Tr1",
4374 fgkHVCardCeramX/2-fgkHVCardCool1X/2,
4375 -fgkHVCardCoolDY+fgkHVCardCool1Y/2,
4376 fgkHVCardCeramZ/2+fgkHVCardCool1Z/2);
4377 TGeoTranslation *cool1Tr2 = new TGeoTranslation("cardHVcool1Tr2",
4378 -fgkHVCardCeramX/2+fgkHVCardCool1X/2,
4379 -fgkHVCardCoolDY+fgkHVCardCool1Y/2,
4380 fgkHVCardCeramZ/2+fgkHVCardCool1Z/2);
4381
4382 highVCard->AddNode(vCardHVcool1, 1, cool1Tr1);
4383 highVCard->AddNode(vCardHVcool1, 2, cool1Tr2);
4384
4385 TGeoTranslation *cool2Tr1 = new TGeoTranslation("cardHVcool2Tr1",
4386 fgkHVCardCeramX/2-fgkHVCardCool1X+fgkHVCardCool2X/2,
4387 -fgkHVCardCoolDY-fgkHVCardCool2Y/2,
4388 fgkHVCardCeramZ/2+fgkHVCardCool2Z/2);
4389
4390 TGeoTranslation *cool2Tr2 = new TGeoTranslation("cardHVcool2Tr2",
4391 -fgkHVCardCeramX/2+fgkHVCardCool1X-fgkHVCardCool2X/2,
4392 -fgkHVCardCoolDY-fgkHVCardCool2Y/2,
4393 fgkHVCardCeramZ/2+fgkHVCardCool2Z/2);
4394
4395 highVCard->AddNode(vCardHVcool2, 1, cool2Tr1);
4396 highVCard->AddNode(vCardHVcool2, 2, cool2Tr2);
4397
4398 TGeoTranslation *cool3Tr1 = new TGeoTranslation("cardHVcool2Tr1",
4399 fgkHVCardCeramX/2-fgkHVCardCool1X+fgkHVCardCool2X+fgkHVCardCool3X/2,
4400 -fgkHVCardCoolDY-fgkHVCardCool3Y/2,
4401 fgkHVCardCeramZ/2+fgkHVCardCool2Z-fgkHVCardCool3Z/2);
4402
4403 TGeoTranslation *cool3Tr2 = new TGeoTranslation("cardHVcool2Tr2",
4404 -fgkHVCardCeramX/2+fgkHVCardCool1X-fgkHVCardCool2X-fgkHVCardCool3X/2,
4405 -fgkHVCardCoolDY-fgkHVCardCool3Y/2,
4406 fgkHVCardCeramZ/2+fgkHVCardCool2Z-fgkHVCardCool3Z/2);
4407
4408 highVCard->AddNode(vCardHVcool3, 1, cool3Tr1);
4409 highVCard->AddNode(vCardHVcool3, 2, cool3Tr2);
4410
73dfc864 4411 //====================================
4412 //--- screws
4413 TGeoCombiTrans *cbScrewHead1 = new TGeoCombiTrans("cardHVscrewHeadTr1",
4414 fgkHVCardCeramX/2-fgkHVCardCool1X+fgkHVCardCool2X+fgkHVCardCool3X/2,
4415 -fgkHVCardCoolDY+fgkLittleScrewHeadH/2,
4416 fgkHVCardCeramZ/2+fgkHVCardCool2Z-fgkHVCardCool3Z/2,
4417 rotScrewHead);
4418 TGeoCombiTrans *cbScrewHead2 = new TGeoCombiTrans("cardHVscrewHeadTr2",
4419 -fgkHVCardCeramX/2+fgkHVCardCool1X-fgkHVCardCool2X-fgkHVCardCool3X/2,
4420 -fgkHVCardCoolDY+fgkLittleScrewHeadH/2,
4421 fgkHVCardCeramZ/2+fgkHVCardCool2Z-fgkHVCardCool3Z/2,
4422 rotScrewHead);
4423
4424 highVCard->AddNode(fCommonVol[0], 1, cbScrewHead1);
4425 highVCard->AddNode(fCommonVol[0], 2, cbScrewHead2);
4426
108bd0fe 4427 return highVCard;
4428}
4429
4430
4431//________________________________________________________________________
4432TGeoVolumeAssembly* AliITSv11GeometrySDD::CreateEndLadderCards(Int_t iLay) {
4433//
4434// return an assembly containing the LV, HV and Carlos cards of one ladder
4435// and their cooling system
4436//
4437
d8826f33 4438 TGeoMedium *alCu12SDD = GetMedium("ALCU12$"); // ITSsddAlCu12
e118532f 4439 TGeoMedium *phynoxSDD = GetMedium("INOX$");
108bd0fe 4440 TGeoMedium *coolerMediumSDD = GetMedium("WATER$");
4441
4442 TGeoVolumeAssembly *endLadderCards = new TGeoVolumeAssembly("endLadderCards");
4443
73dfc864 4444 //=*********************************
108bd0fe 4445 //--- The rounded pipe for the end ladder card coooling
4446
4447 Double_t endLadPipeUlength = fgkEndLadPipeUlengthLay3;
4448 Double_t endLadPipeArmZ = fgkEndLadPipeArmZLay3;
4449 Int_t nCards = 3;
4450
4451 if (iLay==4) {
4452 endLadPipeUlength = fgkEndLadPipeUlengthLay4;
4453 endLadPipeArmZ = fgkEndLadPipeArmZLay4;
4454 nCards = 4;
4455 }
4456
4457 AliITSv11GeomCableRound endLadderPipe("endLadderPipe", fgkEndLadPipeOuterDiam/2);
4458 endLadderPipe.SetNLayers(2);
4459 endLadderPipe.SetLayer(0, fgkEndLadPipeInnerDiam/2, coolerMediumSDD, 4);
4460 endLadderPipe.SetLayer(1, (fgkEndLadPipeOuterDiam-fgkEndLadPipeInnerDiam)/2, phynoxSDD, fColorPhynox);
4461
4462 Double_t coolUzPos = fgkEndLadPipeOuterDiam/2+2.*fgkmm; //it is the x coord of the axis
4463 // of the U colling pipe in its center
4464
4465 Double_t coordA[3] = { fgkEndLadPipeUwidth/2, 0, endLadPipeUlength+coolUzPos};
4466 Double_t vectA[3] = {0,0,1};
4467
4468 Double_t coordB[3] = { fgkEndLadPipeUwidth/2,0, fgkEndLadPipeRadius+coolUzPos};
4469 Double_t vectB[3] = {0,0,1};
4470
4471 Double_t coordC[3] = { fgkEndLadPipeUwidth/2-fgkEndLadPipeRadius, 0, coolUzPos};
4472 Double_t vectC[3] = {1,0,0};
4473
4474 Double_t coordD[3] = {-fgkEndLadPipeUwidth/2+fgkEndLadPipeRadius, 0, coolUzPos};
4475 Double_t vectD[3] = {-1,0,0};
4476
4477 Double_t coordE[3] = {-fgkEndLadPipeUwidth/2, 0, fgkEndLadPipeRadius+coolUzPos};
4478 Double_t vectE[3] = {0,0,-1};
4479
4480 Double_t coordF[3] = {-fgkEndLadPipeUwidth/2,0, endLadPipeUlength+coolUzPos};
4481 Double_t vectF[3] = {0,0,-1};
4482
4483 endLadderPipe.AddCheckPoint( (TGeoVolume *) endLadderCards, 0, coordA, vectA);
4484 endLadderPipe.AddCheckPoint( (TGeoVolume *) endLadderCards, 1, coordB, vectB);
4485 endLadderPipe.AddCheckPoint( (TGeoVolume *) endLadderCards, 2, coordC, vectC);
4486 endLadderPipe.AddCheckPoint( (TGeoVolume *) endLadderCards, 3, coordD, vectD);
4487 endLadderPipe.AddCheckPoint( (TGeoVolume *) endLadderCards, 4, coordE, vectE);
4488 endLadderPipe.AddCheckPoint( (TGeoVolume *) endLadderCards, 5, coordF, vectF);
4489
4490 endLadderPipe.SetInitialNode((TGeoVolume *) endLadderCards); //Set the root node
73dfc864 4491 //endLadderPipe.CreateAndInsertCableSegment( 1);
4492 endLadderPipe.CreateAndInsertTubeSegment( 1);
108bd0fe 4493 //endLadderPipe.CreateAndInsertCableSegment( 2);
4494 endLadderPipe.CreateAndInsertTorusSegment( 2);
73dfc864 4495 //endLadderPipe.CreateAndInsertCableSegment( 3);
4496 endLadderPipe.CreateAndInsertTubeSegment( 3);
108bd0fe 4497 //endLadderPipe.CreateAndInsertCableSegment( 4);
4498 endLadderPipe.CreateAndInsertTorusSegment( 4);
73dfc864 4499 //endLadderPipe.CreateAndInsertCableSegment( 5);
4500 endLadderPipe.CreateAndInsertTubeSegment( 5);
108bd0fe 4501
4502 TGeoBBox *endLadPipeArmBox = new TGeoBBox("endLadPipeArmBox",fgkEndLadPipeArmX/2,
4503 fgkEndLadPipeArmY/2, endLadPipeArmZ/2);
4504 TGeoTube *endLadPipeArmTube = new TGeoTube("endLadPipeArmTube", 0,
4505 fgkEndLadPipeOuterDiam/2, endLadPipeArmZ/2);
4506
4507 TGeoTranslation *endLadPipeArmBoxDY1 = new TGeoTranslation("endLadPipeArmBoxDY1",
4508 - fgkEndLadPipeArmBoxDX,
4509 fgkEndLadPipeArmBoxDY,0);
4510 TGeoTranslation *endLadPipeArmBoxDY2 = new TGeoTranslation("endLadPipeArmBoxDY2",
4511 fgkEndLadPipeArmBoxDX,
4512 fgkEndLadPipeArmBoxDY,0);
4513 endLadPipeArmBoxDY1->RegisterYourself();
4514 endLadPipeArmBoxDY2->RegisterYourself();
4515
4516 if(GetDebug(3)) { // Remove compiler warning.
4517 endLadPipeArmBox->InspectShape();
4518 endLadPipeArmTube->InspectShape();
4519 }
4520
4521 TGeoCompositeShape *endLadPipeArm1 = new TGeoCompositeShape("ITSsddEndLadPipeArm1",
4522 "endLadPipeArmBox:endLadPipeArmBoxDY1"
4523 "- endLadPipeArmTube");
4524 TGeoCompositeShape *endLadPipeArm2 = new TGeoCompositeShape("ITSsddEndLadPipeArm2",
4525 "endLadPipeArmBox:endLadPipeArmBoxDY2"
4526 "- endLadPipeArmTube");
b7943f00 4527
108bd0fe 4528 TGeoVolume *vEndLadPipeArm1 = new TGeoVolume("ITSsddVolEndLadPipeArm1",
4529 endLadPipeArm1, alCu12SDD);
4530 TGeoVolume *vEndLadPipeArm2 = new TGeoVolume("ITSsddVolEndLadPipeArm2",
4531 endLadPipeArm2, alCu12SDD);
4532 vEndLadPipeArm1->SetLineColor(2);
4533 vEndLadPipeArm2->SetLineColor(2);
4534
4535 Double_t armZ = (coolUzPos-fgkEndLadPipeOuterDiam/2+endLadPipeArmZ/2
4536 +fgkEndLadPipeArmZpos);
4537
4538 TGeoTranslation *trEndLadPipeArm1 = new TGeoTranslation("trEndLadPipeArm1",
4539 -fgkEndLadPipeUwidth/2,0,armZ);
4540 TGeoTranslation *trEndLadPipeArm2 = new TGeoTranslation("trEndLadPipeArm2",
4541 fgkEndLadPipeUwidth/2,0,armZ);
4542
4543 endLadderCards->AddNode(vEndLadPipeArm1, 1, trEndLadPipeArm1);
4544 endLadderCards->AddNode(vEndLadPipeArm2, 1, trEndLadPipeArm2);
4545
73dfc864 4546 //=*********************************
108bd0fe 4547 //--- LV cards
73dfc864 4548 TGeoVolumeAssembly *cardLVassemblyR = fCardLVR;
4549 TGeoVolumeAssembly *cardLVassemblyL = fCardLVL;
108bd0fe 4550
4551 Double_t spaceBetweenCards = 0.2*fgkmm;
4552
4553 Double_t cardLVxShift = (fgkEndLadPipeUwidth/2-fgkEndLadPipeArmX/2
4554 +fgkEndLadPipeArmBoxDX);
effd7456 4555 Double_t cardLVyShift = (-fgkLVcoolPosY-fgkLVcoolY1+fgkLVcoolY3
108bd0fe 4556 +fgkEndLadPipeArmY/2+fgkEndLadPipeArmBoxDY);
4557
effd7456 4558 Double_t alLVcoolZ3 = (fgkLVcardCuZ+fgkLVcardZ+2.*(fgkLVChip0SiZ+fgkLVChip0Z)
4559 +fgkLVcoolZ1*2.);
108bd0fe 4560
effd7456 4561 Double_t firstLVCardZ = fgkEndLadPipeArmZpos-fgkEndLadPipeOuterDiam/2.+alLVcoolZ3/2
108bd0fe 4562 +coolUzPos+1.25*fgkmm;
4563 // Position in z of the first LVB with respect to the start of the cooling
4564 // rectangular arm, coming (from inside of the ladder)
4565 // The cards are added one after the other
4566
4567 for (Int_t iCard=0; iCard<nCards; iCard++) {
4568
4569 Double_t cardLVzShift = firstLVCardZ +
effd7456 4570 Double_t(iCard)*(alLVcoolZ3 + 2.*spaceBetweenCards+fgkHVCardCool3Z);
108bd0fe 4571
4572 TGeoTranslation *trCardLVassemblyR = new TGeoTranslation(cardLVxShift,
4573 cardLVyShift, cardLVzShift);
4574 TGeoTranslation *trCardLVassemblyL = new TGeoTranslation(-cardLVxShift,
4575 cardLVyShift, cardLVzShift);
4576
4577 endLadderCards->AddNode(cardLVassemblyR, iCard+1, trCardLVassemblyR);
4578 endLadderCards->AddNode(cardLVassemblyL, iCard+1, trCardLVassemblyL);
4579 }
4580
73dfc864 4581 //=*********************************
108bd0fe 4582 //--- HV cards
73dfc864 4583 TGeoVolumeAssembly *cardHV = fCardHV;
108bd0fe 4584
4585 Double_t coolHVdy = (fgkHVCardCoolDY + fgkHVCardCool3Y
4586 + fgkEndLadPipeArmY/2 + fgkEndLadPipeArmBoxDY);
4587
4588 Double_t coolHVCenterShift = (fgkHVCardCool3Z/2-fgkHVCardCool2Z
4589 -(fgkHVCardCeramZ)/2);
4590
4591 for (Int_t iCard=0; iCard<nCards; iCard++) {
4592
4593 Double_t fact = iCard*2.+1.;
effd7456 4594 Double_t coolHVdz = (firstLVCardZ + alLVcoolZ3*fact/2 + spaceBetweenCards*fact
108bd0fe 4595 + fgkHVCardCool3Z*fact/2. + coolHVCenterShift);
4596 TGeoTranslation *trCardHV = new TGeoTranslation(0,coolHVdy, coolHVdz);
4597 endLadderCards->AddNode(cardHV, iCard+1, trCardHV);
4598 }
4599
73dfc864 4600 //=*********************************
4601 //--- Carlos card
108bd0fe 4602
73dfc864 4603 TGeoVolumeAssembly *assemblySupCarlos = fCardCarlos;
4604// TGeoRotation *carlosSupRot1 = new TGeoRotation("carlosSuppAngle",
4605// 0, -fgkCarlosSuppAngle, 0);
108bd0fe 4606
4607 Double_t spaceBetweenCarlsoCards = 0.1*fgkmm;
effd7456 4608 Double_t firstCarlosCardZ = (firstLVCardZ - alLVcoolZ3/2 + alLVcoolZ3*4 +
108bd0fe 4609 fgkHVCardCool3Z*4 + spaceBetweenCards*7 + 2*fgkmm);
4610 // position in z of the first Carlos board, coming from inside of the ladder
4611
4612 Double_t coolCarlosDy = (fgkCarlosSuppY3/2 + fgkEndLadPipeArmY/2 +
4613 fgkEndLadPipeArmBoxDY);
4614
4615 for (Int_t iCard=0; iCard<nCards; iCard++) {
4616
73dfc864 4617 Double_t carloszPos = ( firstCarlosCardZ + fgkCarlosSuppZ3/2 +
4618 iCard*(fgkCarlosSuppZ3+spaceBetweenCarlsoCards) );
4619 TGeoCombiTrans *carlosPos = new TGeoCombiTrans(0,coolCarlosDy,carloszPos,
4620 (TGeoRotation*) fCommonTr[0]);
4621
108bd0fe 4622 endLadderCards->AddNode(assemblySupCarlos, iCard, carlosPos);
4623 }
4624
bf210566 4625 return endLadderCards;
4626}
108bd0fe 4627
4628
bf210566 4629//________________________________________________________________________
4630TGeoVolume* AliITSv11GeometrySDD::CreateEndLadderCardsV(Int_t iLay) {
4631//
4632// return an Pcon containing the LV, HV and Carlos cards of one ladder
4633// and their cooling system
e118532f 4634// This is the code actually used for the end ladder cards
bf210566 4635//
4636
d8826f33 4637 TGeoMedium *alCu12SDD = GetMedium("ALCU12$"); // ITSsddAlCu12
e118532f 4638 TGeoMedium *phynoxSDD = GetMedium("INOX$");
bf210566 4639 TGeoMedium *coolerMediumSDD = GetMedium("WATER$");
e118532f 4640 TGeoMedium *copper = GetMedium("COPPER$");
4641 TGeoMedium *plastic = GetMedium("SDDKAPTON (POLYCH2)$"); // ???
bf210566 4642 TGeoMedium *airSDD = GetMedium("SDD AIR$");
c890eba4 4643 TGeoMedium *opticalFiber = GetMedium("SDD OPTICFIB$");
4644 TGeoMedium *polyurethane = GetMedium("POLYURETHANE$");
bf210566 4645
4646 Double_t endLadPipeUlength = fgkEndLadPipeUlengthLay3;
4647 Double_t endLadPipeArmZ = fgkEndLadPipeArmZLay3;
4648 Int_t nCards = 3;
4649 Double_t rREF = fgkEndLaddCardsShortRadiusLay3;
c890eba4 4650 Double_t deltaZcables = 0;
bf210566 4651 // reference radius corresponding to local y=0
4652
4653 if (iLay==4) {
4654 endLadPipeUlength = fgkEndLadPipeUlengthLay4;
4655 endLadPipeArmZ = fgkEndLadPipeArmZLay4;
4656 nCards = 4;
4657 rREF = fgkEndLaddCardsShortRadiusLay4;
c890eba4 4658 deltaZcables = 2.8*fgkmm;
bf210566 4659 }
4660
4661 Double_t cardLVxShift = (fgkEndLadPipeUwidth/2-fgkEndLadPipeArmX/2
4662 +fgkEndLadPipeArmBoxDX);
4663 Double_t cardLVyShift = (-fgkLVcoolPosY-fgkLVcoolY1+fgkLVcoolY3
4664 +fgkEndLadPipeArmY/2+fgkEndLadPipeArmBoxDY);
4665
4666 Double_t rMin = rREF + cardLVyShift;
4667 // (The LV card is defining rMin because it is the lower object)
108bd0fe 4668
e118532f 4669 Double_t thickTotCable = 0.5;
4670
108bd0fe 4671 //==================================
bf210566 4672 //--- The Pcon container
4673
4674 // minimum angle of the Pcon :
4675 Double_t tanDPhi = ((fgkEndLadPipeUwidth/2+fgkEndLadPipeArmX/2) /
4676 (rREF-fgkEndLadPipeArmY/2) );
4677 Double_t dphi = 2*TMath::ATan(tanDPhi)*TMath::RadToDeg();
4678 Double_t phi0 = 90-dphi/2;
4679 Double_t coolUzPos = fgkEndLadPipeOuterDiam/2 + fgkDistEndLaddCardsLadd; // it is the z coord of the axis
4680 // of the U colling pipe in its center
4681 Double_t zMax = endLadPipeUlength+coolUzPos;
4682 Double_t rMax = rMin + fgkLVcardY;
4683 rMax = TMath::Sqrt(rMax*rMax + cardLVxShift*cardLVxShift);
e118532f 4684 Double_t cablesRadius = rMax-0.5;
bf210566 4685
e118532f 4686 TGeoPcon *containerShape = new TGeoPcon("EndLadderCcontainerShape", phi0, dphi, 10);
bf210566 4687 //DefineSection(Int_t snum, Double_t z, Double_t rmin, Double_t rmax);
e118532f 4688 // hard coded numbers are fine tuning to avoid overlaps with other volume in the old geometry
4689 containerShape->DefineSection(0, fgkDistEndLaddCardsLadd, rREF-fgkEndLadPipeOuterDiam/2-0.2, rMax);
4690 containerShape->DefineSection(1, fgkDistEndLaddCardsLadd+1.4, rREF-fgkEndLadPipeOuterDiam/2-0.2, rMax);
4691 containerShape->DefineSection(2, fgkDistEndLaddCardsLadd+1.4, rMin, rMax);
4692 containerShape->DefineSection(3, endLadPipeArmZ+2*fgkEndLadPipeRadius, rMin, rMax);
4693 containerShape->DefineSection(4, endLadPipeArmZ+2*fgkEndLadPipeRadius, rREF-1.*fgkmm, rMax);
4694 containerShape->DefineSection(5, zMax, rREF-1.*fgkmm, rMax);
4695 // the following is quite dirty but works for the moment ...
4696 containerShape->DefineSection(6, zMax, rREF+fgkCarlosCardZ1/2, rMax);
4697 containerShape->DefineSection(7, zMax+1, cablesRadius-thickTotCable/2, rMax);
4698
4699 // The next parameters define the shape of the Pcon at its end and where cables
4700 // are escaping...
4701 Double_t cableSectionR1 = cablesRadius-thickTotCable/2;
4702 Double_t cableSectionR2 = rMax;
c890eba4 4703 Double_t cableSectionZ1 = zMax + 23.6*fgkmm + 3.0*fgkcm + deltaZcables;
4704 Double_t cableSectionZ2 = zMax + 23.6*fgkmm + 4.0*fgkcm + deltaZcables;
4705 // Those numbers are to be fixed to stick the maximum to the SDD cone
4706 // (hardcoded numbers are ugly, but it's easier to find where to stop)
e118532f 4707
4708 containerShape->DefineSection(8, cableSectionZ1, cableSectionR1, rMax);
4709 containerShape->DefineSection(9, cableSectionZ2, cableSectionR2, rMax);
bf210566 4710
4711 TGeoVolume *endLadderCards = new TGeoVolume("endLadderCards",containerShape,airSDD);
e118532f 4712 //endLadderCards->SetVisibility(kFALSE);
108bd0fe 4713
bf210566 4714 //=*********************************
4715 //--- The rounded pipe for the end ladder card cooling
108bd0fe 4716
bf210566 4717 AliITSv11GeomCableRound endLadderPipe("endLadderPipe", fgkEndLadPipeOuterDiam/2);
4718 endLadderPipe.SetNLayers(2);
4719 endLadderPipe.SetLayer(0, fgkEndLadPipeInnerDiam/2, coolerMediumSDD, 4);
4720 endLadderPipe.SetLayer(1, (fgkEndLadPipeOuterDiam-fgkEndLadPipeInnerDiam)/2, phynoxSDD, fColorPhynox);
108bd0fe 4721
bf210566 4722 Double_t coordA[3] = { fgkEndLadPipeUwidth/2, rREF, endLadPipeUlength+coolUzPos};
4723 Double_t vectA[3] = {0,0,1};
108bd0fe 4724
bf210566 4725 Double_t coordB[3] = { fgkEndLadPipeUwidth/2,rREF, fgkEndLadPipeRadius+coolUzPos};
4726 Double_t vectB[3] = {0,0,1};
108bd0fe 4727
bf210566 4728 Double_t coordC[3] = { fgkEndLadPipeUwidth/2-fgkEndLadPipeRadius, rREF, coolUzPos};
4729 Double_t vectC[3] = {1,0,0};
108bd0fe 4730
bf210566 4731 Double_t coordD[3] = {-fgkEndLadPipeUwidth/2+fgkEndLadPipeRadius, rREF, coolUzPos};
4732 Double_t vectD[3] = {-1,0,0};
108bd0fe 4733
bf210566 4734 Double_t coordE[3] = {-fgkEndLadPipeUwidth/2, rREF, fgkEndLadPipeRadius+coolUzPos};
4735 Double_t vectE[3] = {0,0,-1};
4736
4737 Double_t coordF[3] = {-fgkEndLadPipeUwidth/2,rREF, endLadPipeUlength+coolUzPos};
4738 Double_t vectF[3] = {0,0,-1};
4739
4740 endLadderPipe.AddCheckPoint( (TGeoVolume *) endLadderCards, 0, coordA, vectA);
4741 endLadderPipe.AddCheckPoint( (TGeoVolume *) endLadderCards, 1, coordB, vectB);
4742 endLadderPipe.AddCheckPoint( (TGeoVolume *) endLadderCards, 2, coordC, vectC);
4743 endLadderPipe.AddCheckPoint( (TGeoVolume *) endLadderCards, 3, coordD, vectD);
4744 endLadderPipe.AddCheckPoint( (TGeoVolume *) endLadderCards, 4, coordE, vectE);
4745 endLadderPipe.AddCheckPoint( (TGeoVolume *) endLadderCards, 5, coordF, vectF);
4746
4747 endLadderPipe.SetInitialNode((TGeoVolume *) endLadderCards); //Set the root node
4748 //endLadderPipe.CreateAndInsertCableSegment( 1);
4749 endLadderPipe.CreateAndInsertTubeSegment( 1);
4750 //endLadderPipe.CreateAndInsertCableSegment( 2);
4751 endLadderPipe.CreateAndInsertTorusSegment( 2);
4752 //endLadderPipe.CreateAndInsertCableSegment( 3);
4753 endLadderPipe.CreateAndInsertTubeSegment( 3);
4754 //endLadderPipe.CreateAndInsertCableSegment( 4);
4755 endLadderPipe.CreateAndInsertTorusSegment( 4);
4756 //endLadderPipe.CreateAndInsertCableSegment( 5);
4757 endLadderPipe.CreateAndInsertTubeSegment( 5);
4758
4759 TGeoBBox *endLadPipeArmBox = new TGeoBBox("endLadPipeArmBox",fgkEndLadPipeArmX/2,
4760 fgkEndLadPipeArmY/2, endLadPipeArmZ/2);
4761 TGeoTube *endLadPipeArmTube = new TGeoTube("endLadPipeArmTube", 0,
4762 fgkEndLadPipeOuterDiam/2, endLadPipeArmZ/2);
4763
4764 TGeoTranslation *endLadPipeArmBoxDY1 = new TGeoTranslation("endLadPipeArmBoxDY1",
4765 - fgkEndLadPipeArmBoxDX,
4766 fgkEndLadPipeArmBoxDY,0);
4767 TGeoTranslation *endLadPipeArmBoxDY2 = new TGeoTranslation("endLadPipeArmBoxDY2",
4768 fgkEndLadPipeArmBoxDX,
4769 fgkEndLadPipeArmBoxDY,0);
4770 endLadPipeArmBoxDY1->RegisterYourself();
4771 endLadPipeArmBoxDY2->RegisterYourself();
4772
4773 if(GetDebug(3)) { // Remove compiler warning.
4774 endLadPipeArmBox->InspectShape();
4775 endLadPipeArmTube->InspectShape();
4776 }
4777
4778 TGeoCompositeShape *endLadPipeArm1 = new TGeoCompositeShape("ITSsddEndLadPipeArm1",
4779 "endLadPipeArmBox:endLadPipeArmBoxDY1"
4780 "- endLadPipeArmTube");
4781 TGeoCompositeShape *endLadPipeArm2 = new TGeoCompositeShape("ITSsddEndLadPipeArm2",
4782 "endLadPipeArmBox:endLadPipeArmBoxDY2"
4783 "- endLadPipeArmTube");
4784
4785 TGeoVolume *vEndLadPipeArm1 = new TGeoVolume("ITSsddVolEndLadPipeArm1",
4786 endLadPipeArm1, alCu12SDD);
4787 TGeoVolume *vEndLadPipeArm2 = new TGeoVolume("ITSsddVolEndLadPipeArm2",
4788 endLadPipeArm2, alCu12SDD);
4789 vEndLadPipeArm1->SetLineColor(2);
4790 vEndLadPipeArm2->SetLineColor(2);
4791
4792 Double_t armZ = (coolUzPos-fgkEndLadPipeOuterDiam/2+endLadPipeArmZ/2
4793 +fgkEndLadPipeArmZpos);
4794
4795 TGeoTranslation *trEndLadPipeArm1 = new TGeoTranslation("trEndLadPipeArm1",
4796 -fgkEndLadPipeUwidth/2,rREF,armZ);
4797 TGeoTranslation *trEndLadPipeArm2 = new TGeoTranslation("trEndLadPipeArm2",
4798 fgkEndLadPipeUwidth/2,rREF,armZ);
4799
4800 endLadderCards->AddNode(vEndLadPipeArm1, 1, trEndLadPipeArm1);
4801 endLadderCards->AddNode(vEndLadPipeArm2, 1, trEndLadPipeArm2);
4802
4803 //=*********************************
4804 //--- LV cards
4805 TGeoVolumeAssembly *cardLVassemblyR = fCardLVR;
4806 TGeoVolumeAssembly *cardLVassemblyL = fCardLVL;
4807
4808 Double_t spaceBetweenCards = 0.2*fgkmm;
4809
4810
4811 Double_t alLVcoolZ3 = (fgkLVcardCuZ+fgkLVcardZ+2.*(fgkLVChip0SiZ+fgkLVChip0Z)
4812 +fgkLVcoolZ1*2.);
4813
4814 Double_t firstLVCardZ = fgkEndLadPipeArmZpos-fgkEndLadPipeOuterDiam/2.+alLVcoolZ3/2
4815 +coolUzPos+1.25*fgkmm;
4816 // Position in z of the first LVB with respect to the start of the cooling
4817 // rectangular arm, coming (from inside of the ladder)
4818 // The cards are added one after the other
4819
4820 for (Int_t iCard=0; iCard<nCards; iCard++) {
4821
4822 Double_t cardLVzShift = firstLVCardZ +
4823 Double_t(iCard)*(alLVcoolZ3 + 2.*spaceBetweenCards+fgkHVCardCool3Z);
4824
4825 TGeoTranslation *trCardLVassemblyR = new TGeoTranslation(cardLVxShift,
4826 cardLVyShift+rREF, cardLVzShift);
4827 TGeoTranslation *trCardLVassemblyL = new TGeoTranslation(-cardLVxShift,
4828 cardLVyShift+rREF, cardLVzShift);
4829
4830 endLadderCards->AddNode(cardLVassemblyR, iCard+1, trCardLVassemblyR);
4831 endLadderCards->AddNode(cardLVassemblyL, iCard+1, trCardLVassemblyL);
4832 }
4833
4834 //=*********************************
4835 //--- HV cards
4836 TGeoVolumeAssembly *cardHV = fCardHV;
4837
4838 Double_t coolHVdy = (fgkHVCardCoolDY + fgkHVCardCool3Y
4839 + fgkEndLadPipeArmY/2 + fgkEndLadPipeArmBoxDY);
4840 // shift of the HV card in local y w.r.t the local y=0 (center of cooling tube)
4841
4842 Double_t coolHVCenterShift = (fgkHVCardCool3Z/2-fgkHVCardCool2Z
4843 -(fgkHVCardCeramZ)/2);
4844
4845 for (Int_t iCard=0; iCard<nCards; iCard++) {
4846
4847 Double_t fact = iCard*2.+1.;
4848 Double_t coolHVdz = (firstLVCardZ + alLVcoolZ3*fact/2 + spaceBetweenCards*fact
4849 + fgkHVCardCool3Z*fact/2. + coolHVCenterShift);
4850 TGeoTranslation *trCardHV = new TGeoTranslation(0,coolHVdy+rREF, coolHVdz);
4851 endLadderCards->AddNode(cardHV, iCard+1, trCardHV);
4852 }
4853
4854 //=*********************************
4855 //--- Carlos card
4856
4857 TGeoVolumeAssembly *assemblySupCarlos = fCardCarlos;
4858// TGeoRotation *carlosSupRot1 = new TGeoRotation("carlosSuppAngle",
4859// 0, -fgkCarlosSuppAngle, 0);
4860
4861 Double_t spaceBetweenCarlsoCards = 0.1*fgkmm;
4862 Double_t firstCarlosCardZ = (firstLVCardZ - alLVcoolZ3/2 + alLVcoolZ3*4 +
4863 fgkHVCardCool3Z*4 + spaceBetweenCards*7 + 2*fgkmm);
4864 // position in z of the first Carlos board, coming from inside of the ladder
4865
4866 Double_t coolCarlosDy = (fgkCarlosSuppY3/2 + fgkEndLadPipeArmY/2 +
4867 fgkEndLadPipeArmBoxDY);
4868
4869 for (Int_t iCard=0; iCard<nCards; iCard++) {
4870
4871 Double_t carloszPos = ( firstCarlosCardZ + fgkCarlosSuppZ3/2 +
4872 iCard*(fgkCarlosSuppZ3+spaceBetweenCarlsoCards) );
4873 TGeoCombiTrans *carlosPos = new TGeoCombiTrans(0,coolCarlosDy+rREF,carloszPos,
4874 (TGeoRotation*) fCommonTr[0]);
4875
4876 endLadderCards->AddNode(assemblySupCarlos, iCard, carlosPos);
4877 }
108bd0fe 4878
e118532f 4879
4880 //=*********************************
4881 //--- Cables
4882
4883
4884 Double_t sectionV = (fgkSectionCuPerMod+fgkSectionPlastPerMod
d485d5bf 4885 + fgkSectionGlassPerMod)*nCards
4886 + fgkSectionCoolPolyuEL + fgkSectionCoolWaterEL;
e118532f 4887 // We fix thickness, then width is calculated accordingly
c890eba4 4888 Double_t width = sectionV/thickTotCable;
e118532f 4889 Double_t thickCu = thickTotCable*fgkSectionCuPerMod
d485d5bf 4890 / (fgkSectionCuPerMod+fgkSectionPlastPerMod+fgkSectionGlassPerMod+fgkSectionCoolPolyuEL+fgkSectionCoolWaterEL);
e118532f 4891 Double_t thickPlast = thickTotCable*fgkSectionPlastPerMod
d485d5bf 4892 / (fgkSectionCuPerMod+fgkSectionPlastPerMod+fgkSectionGlassPerMod+fgkSectionCoolPolyuEL+fgkSectionCoolWaterEL);
4893 Double_t thickGlass = thickTotCable*fgkSectionGlassPerMod
4894 / (fgkSectionCuPerMod+fgkSectionPlastPerMod+fgkSectionGlassPerMod+fgkSectionCoolPolyuEL+fgkSectionCoolWaterEL);
e118532f 4895
d485d5bf 4896 Double_t thickCoolPolyu = thickTotCable*fgkSectionCoolPolyuEL
4897 / (fgkSectionCuPerMod+fgkSectionPlastPerMod+fgkSectionGlassPerMod+fgkSectionCoolPolyuEL+fgkSectionCoolWaterEL);
4898 Double_t thickCoolWater = thickTotCable*fgkSectionCoolWaterEL
4899 / (fgkSectionCuPerMod+fgkSectionPlastPerMod+fgkSectionGlassPerMod+fgkSectionCoolPolyuEL+fgkSectionCoolWaterEL);
c890eba4 4900
d485d5bf 4901 AliITSv11GeomCableFlat cable("SDDcableEndLadder",width,thickTotCable);
c890eba4 4902 cable.SetNLayers(5);
e118532f 4903 cable.SetLayer(0, thickCu, copper, kRed);
4904 cable.SetLayer(1, thickPlast, plastic, kYellow);
4905 cable.SetLayer(2, thickGlass, opticalFiber, kGreen);
c890eba4 4906 cable.SetLayer(3, thickCoolPolyu, polyurethane, kGray);
4907 cable.SetLayer(4, thickCoolWater, coolerMediumSDD, kBlue);
e118532f 4908
4909 Double_t zVect[3]={0,0,1};
4910 Double_t xMinCable = firstCarlosCardZ+nCards*(fgkCarlosSuppZ3
4911 +spaceBetweenCarlsoCards)/2 + 2.9;
4912 // the 2.9cm is for taking into account carlos card angle...
4913
4914 Double_t zEndCable = GetConeZ(cablesRadius-thickTotCable/2, cableSectionR1,
4915 cableSectionR2,cableSectionZ1,cableSectionZ2);
4916
4917 Double_t pos1[3] = {0, cablesRadius, xMinCable};
4918 Double_t pos2[3] = {0, cablesRadius, zEndCable};
4919 cable.AddCheckPoint( endLadderCards, 0, pos1, zVect );
4920 cable.AddCheckPoint( endLadderCards, 1, pos2, zVect );
4921 cable.SetInitialNode(endLadderCards);
4922 cable.CreateAndInsertCableSegment(1);
4923
d485d5bf 4924 // The earth cable
4925 TGeoTorus *earthShape = new TGeoTorus(rMax-fgkEndLadderEarthCableR,
4926 0., fgkEndLadderEarthCableR,
4927 phi0, dphi); // same as containerShape
4928
4929 TGeoVolume *earthCable = new TGeoVolume("SDDcableEndLadderEarthCable",
4930 earthShape, copper);
4931
4932 endLadderCards->AddNode(earthCable, 1,
4933 new TGeoTranslation(0, 0, fgkDistEndLaddCardsLadd+1));
4934
108bd0fe 4935 return endLadderCards;
4936}
4937
4938//________________________________________________________________________
4939TGeoVolumeAssembly* AliITSv11GeometrySDD::CreateSupportRing(Int_t iLay) {
4940//
4941// return an assembly of the support rings, attaching the ladders to the cone
4942//
4943
4944
4945 iLay = iLay;
4946
4947 TGeoMedium *stainless = GetMedium("INOX$"); // To code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4948 TGeoVolumeAssembly *supportRing = new TGeoVolumeAssembly("supportRing");
4949
4950
4951 //**********************************
4952 // ruby cage
4953
4954 Double_t fgkRubyCageX = 9*fgkmm;
4955 Double_t fgkRubyCageY = 5.5*fgkmm;
4956 Double_t fgkRubyCageZ = 8*fgkmm;
4957 Double_t fgkRubyCageInternSide = 5.*fgkmm; //side of the internal square
4958 Double_t fgkRubyCageHoleDX = 2.*fgkmm;
4959 Double_t fgkRubyCageVIntern = 5.42*fgkmm;
4960 Double_t fgkRubyCageScrewHoleR = 4.5/2*fgkmm;
4961 Double_t fgkRubyCageScrewHoleY = 1.5*fgkmm;
4962
4963 TGeoBBox *rubyCageBox = new TGeoBBox("rubyCageBox",fgkRubyCageX/2,fgkRubyCageY/2,
4964 fgkRubyCageZ/2);
4965
4966 Double_t epsilon = 1e-10; //dummy epsilon to force the gl viewer to show holes
4967
4968 // pieces common to both square and V cages
4969 TGeoBBox *rubyCageInternBox = new TGeoBBox("rubyCageInternBox",fgkRubyCageInternSide/2,
4970 fgkRubyCageY/2+epsilon, fgkRubyCageInternSide/2);
4971
effd7456 4972 TGeoTube *screwHole = new TGeoTube("screwHole", 0, fgkRubyCageScrewHoleR,
108bd0fe 4973 fgkRubyCageHoleDX/2+epsilon);
4974
4975 TGeoRotation *rotV = new TGeoRotation("", 90,90,-90);
4976 TGeoCombiTrans *trScrewHole = new TGeoCombiTrans("trScrewHole",
4977 fgkRubyCageX/2-fgkRubyCageHoleDX/2,
4978 -fgkRubyCageY/2+fgkRubyCageScrewHoleY,0,rotV);
4979 trScrewHole->RegisterYourself();
4980
4981 TGeoBBox *screwHoleFoot = new TGeoBBox("screwHoleFoot",fgkRubyCageHoleDX/2+epsilon,
4982 fgkRubyCageScrewHoleY/2+epsilon, fgkRubyCageScrewHoleR);
4983 TGeoTranslation *trScrewHoleFoot = new TGeoTranslation("trScrewHoleFoot",
4984 fgkRubyCageX/2-fgkRubyCageHoleDX/2,
4985 -fgkRubyCageY/2+fgkRubyCageScrewHoleY/2, 0);
4986 trScrewHoleFoot->RegisterYourself();
4987
4988
4989 // pieces which differ
4990 Double_t rubyCageVInternBoxX = fgkRubyCageVIntern - fgkRubyCageInternSide/2;
4991
4992 TGeoBBox *rubyCageVInternBox = new TGeoBBox("rubyCageVInternBox",rubyCageVInternBoxX/2,
4993 fgkRubyCageY/2+epsilon, fgkRubyCageInternSide/2);
4994
4995 TGeoTranslation *trRubyCageVInternBox = new TGeoTranslation("trRubyCageVInternB",
4996 fgkRubyCageX/2-fgkRubyCageHoleDX-rubyCageVInternBoxX/2,0,0);
4997 trRubyCageVInternBox->RegisterYourself();
4998
4999 TGeoTrd1 *rubyCageVInternTriangl = new TGeoTrd1("rubyCageVInternTriangl", 0,
5000 fgkRubyCageInternSide/2, fgkRubyCageY/2+epsilon,
5001 fgkRubyCageInternSide/4);
5002
5003 TGeoCombiTrans *trRubyCageVInternTriangl = new TGeoCombiTrans("trRubyCageVInternTriangl",
5004 fgkRubyCageX/2-fgkRubyCageHoleDX-rubyCageVInternBoxX-fgkRubyCageInternSide/4
5005 +epsilon,0,0, rotV );
5006 trRubyCageVInternTriangl->RegisterYourself();
5007
5008 //---
5009 TGeoCompositeShape *rubyCageSquare = new TGeoCompositeShape("rubyCageSquare",
5010 "rubyCageBox-(rubyCageInternBox"
5011 "+screwHole:trScrewHole+screwHoleFoot:trScrewHoleFoot)");
5012
5013 TGeoVolume *vRubyCageSquare = new TGeoVolume("vRubyCageSquare",
5014 rubyCageSquare, stainless);
5015 vRubyCageSquare->SetLineColor(10);
5016
5017 TGeoCompositeShape *rubyCageV = new TGeoCompositeShape("rubyCageV",
5018 "rubyCageBox-(rubyCageVInternBox:trRubyCageVInternB"
5019 "+rubyCageVInternTriangl:trRubyCageVInternTriangl"
5020 "+screwHole:trScrewHole+screwHoleFoot:trScrewHoleFoot)");
5021 TGeoVolume *vRubyCageV = new TGeoVolume("vRubyCageV", rubyCageV, stainless);
5022 vRubyCageV->SetLineColor(10);
5023
5024 if(GetDebug(3)) { // Remove compiler warning.
5025 rubyCageBox->InspectShape();
5026 rubyCageInternBox->InspectShape();
effd7456 5027 screwHole->InspectShape();
108bd0fe 5028 screwHoleFoot->InspectShape();
5029 rubyCageVInternBox->InspectShape();
5030 rubyCageVInternTriangl->InspectShape();
5031 }
5032
5033 supportRing->AddNode(vRubyCageSquare, 0, 0);
5034 //supportRing->AddNode(vRubyCageV, 0, 0);
5035 return supportRing;
5036}
5037
5038
5039
5040//________________________________________________________________________
5041void AliITSv11GeometrySDD::CreateSDDsensor() {
5042//
5043// return a box containing the SDD sensor
5044//
5045
5046 TGeoMedium *airSDD = GetMedium("SDD AIR$");
5047 TGeoMedium *siliconSDD = GetMedium("SDD SI insensitive$"); // ITSsddSi
5048 TGeoMedium *siliconSDDsens = GetMedium("SI$"); // ITSsddSi
5049 TGeoMedium *alSDD = GetMedium("AL$"); // ITSal
5050 TGeoMedium *polyhamideSDD = GetMedium("SDDKAPTON (POLYCH2)$"); // ITSsddKAPTON_POLYCH2
d8826f33 5051 TGeoMedium *glassSDD = GetMedium("STDGLASS$"); // StdGlass
b7943f00 5052
5053
5054 Double_t rWraping = fgkWaferThickness/2+fgkWaHVcableAlThick+fgkWaHVcablePolyThick;
5055 Double_t witdhCableBox = (fgkWaHVcableWitdh - TMath::Pi()*rWraping)/2;
108bd0fe 5056 // width : in the beam direction !
b7943f00 5057
5058 Double_t sensoxBoxLength = ( fgkWaferLength +
5059 2*(rWraping+witdhCableBox-fgkWaHVcableDW) );
5060 // Makes life easier to include the space for the WA HV cable on both sides
5061 Double_t sensoxBoxThick = fgkWaferThickness +
5062 2*(fgkWaHVcableAlThick+fgkWaHVcablePolyThick);
5063
108bd0fe 5064// cout << "fgkWaferLength=" << fgkWaferLength << " sensoxBoxLength="<< sensoxBoxLength <<endl;
5065// cout << "fgkWaferThickness=" << fgkWaferThickness << " sensoxBoxThick=" << sensoxBoxThick << endl;
5066
b7943f00 5067 TGeoBBox *box = new TGeoBBox("ITSsddSensorBox",
5068 fgkWaferWidth/2, sensoxBoxThick/2, sensoxBoxLength/2);
108bd0fe 5069
5070 fSDDsensor3 = new TGeoVolume("ITSsddSensor3", box, airSDD);
5071 fSDDsensor4 = new TGeoVolume("ITSsddSensor4", box, airSDD);
5072
b7943f00 5073
5074 //****************************
5075 // silicon wafer
5076 //****************************
5077 if (fAddSensors) {
108bd0fe 5078 // we need 2 different sensor objects, because they have to have different names
5079 // This is required for the step manager
5080
c789ee28 5081 TGeoBBox *waferShape = new TGeoBBox("ITSsddWaferShape",
108bd0fe 5082 fgkWaferWidth/2, fgkWaferThickness/2, fgkWaferLength/2);
5083
5084
5085 TGeoVolume *wafer3 = new TGeoVolume("ITSsddWafer3", waferShape, siliconSDD);
5086 wafer3->SetLineColor(fColorSilicon);
5087 TGeoBBox *sensBox3 = new TGeoBBox("ITSsddSensorSensBox3",
5088 fgkWaferWidthSens/2, fgkWaferThickSens/2, fgkWaferLengthSens/2);
cfe39822 5089 TGeoVolume *sensVol3 = new TGeoVolume(fgkSDDsensitiveVolName3,sensBox3, siliconSDDsens);
108bd0fe 5090 sensVol3->SetLineColor(fColorSilicon+5);
5091 wafer3->AddNode(sensVol3, 1, 0);
5092 fSDDsensor3->AddNode(wafer3, 1, 0);
5093
5094 TGeoVolume *wafer4 = new TGeoVolume("ITSsddWafer4", waferShape, siliconSDD);
5095 wafer4->SetLineColor(fColorSilicon);
5096 TGeoBBox *sensBox4 = new TGeoBBox("ITSsddSensorSensBox4",
5097 fgkWaferWidthSens/2, fgkWaferThickSens/2, fgkWaferLengthSens/2);
cfe39822 5098 TGeoVolume *sensVol4 = new TGeoVolume(fgkSDDsensitiveVolName4,sensBox4, siliconSDDsens);
108bd0fe 5099 sensVol4->SetLineColor(fColorSilicon+5);
5100 wafer4->AddNode(sensVol4, 1, 0);
5101 fSDDsensor4->AddNode(wafer4, 1, 0);
b7943f00 5102 };
5103
5104 //****************************
5105 // glass
5106 //****************************
5107 TGeoBBox *glass = new TGeoBBox("ITSsddGlassBox", fgkSensorGlassLX/2,
5108 fgkSensorGlassLY/2, fgkSensorGlassLZ/2);
5109 TGeoVolume *vGlass = new TGeoVolume("ITSsddGlass",glass, glassSDD);
5110 vGlass->SetLineColor(fColorGlass);
5111 TGeoTranslation *glassTr1 = new TGeoTranslation("",fgkGlassDXOnSensor,
5112 fgkWaferThickness/2+fgkSensorGlassLY/2,
5113 fgkGlassDZOnSensor);
5114 TGeoTranslation *glassTr2 = new TGeoTranslation("",-fgkGlassDXOnSensor,
5115 fgkWaferThickness/2+fgkSensorGlassLY/2,
5116 fgkGlassDZOnSensor);
5117 TGeoTranslation *glassTr3 = new TGeoTranslation("",fgkGlassDXOnSensor,
5118 fgkWaferThickness/2+fgkSensorGlassLY/2,
5119 -fgkGlassDZOnSensor);
5120 TGeoTranslation *glassTr4 = new TGeoTranslation("",-fgkGlassDXOnSensor,
5121 fgkWaferThickness/2+fgkSensorGlassLY/2,
5122 -fgkGlassDZOnSensor);
108bd0fe 5123 fSDDsensor3->AddNode(vGlass, 1, glassTr1);
5124 fSDDsensor3->AddNode(vGlass, 2, glassTr2);
5125 fSDDsensor3->AddNode(vGlass, 3, glassTr3);
5126 fSDDsensor3->AddNode(vGlass, 4, glassTr4);
5127
5128 fSDDsensor4->AddNode(vGlass, 1, glassTr1);
5129 fSDDsensor4->AddNode(vGlass, 2, glassTr2);
5130 fSDDsensor4->AddNode(vGlass, 3, glassTr3);
5131 fSDDsensor4->AddNode(vGlass, 4, glassTr4);
b7943f00 5132
5133 //****************************
5134 // Wrap-around cable
5135 //****************************
5136 if (fAddHVcables) {
5137 AliITSv11GeomCableFlat waHVCable("ITSsddWaHVCableU",witdhCableBox,
5138 fgkWaHVcableAlThick+fgkWaHVcablePolyThick);
5139 waHVCable.SetNLayers(2);
5140 waHVCable.SetLayer(0, fgkWaHVcablePolyThick,polyhamideSDD,fColorPolyhamide);
5141 waHVCable.SetLayer(1, fgkWaHVcableAlThick, alSDD, fColorAl);
108bd0fe 5142 waHVCable.SetInitialNode(fSDDsensor3);
b7943f00 5143
5144 Double_t x1[3], x2[3], vX[3] = {1,0,0};
5145 x1[0] = -fgkWaHVcableLength/2;
5146 x2[0] = -x1[0];
5147 x1[1] = (fgkWaferThickness + waHVCable.GetThickness())/2;
5148 x2[1] = x1[1];
5149 x1[2] = fgkWaferLength/2+waHVCable.GetWidth()/2-fgkWaHVcableDW;
5150 x2[2] = x1[2];
5151
108bd0fe 5152 waHVCable.AddCheckPoint(fSDDsensor3, 0, x1, vX);
5153 waHVCable.AddCheckPoint(fSDDsensor3, 1, x2, vX);
5154 TGeoCombiTrans *ctSegment = 0;
5155 TGeoVolume* segment = waHVCable.CreateAndInsertBoxCableSegment(1,-90, &ctSegment);
5156 fSDDsensor4->AddNode(segment, 1, ctSegment);
5157
b7943f00 5158 x1[1] = -x1[1];
5159 x2[1] = x1[1];
5160 waHVCable.SetName("ITSsddWaHVCableD");
5161 waHVCable.ResetPoints();
108bd0fe 5162 waHVCable.AddCheckPoint(fSDDsensor3, 0, x1, vX);
5163 waHVCable.AddCheckPoint(fSDDsensor3, 1, x2, vX);
5164 segment = waHVCable.CreateAndInsertBoxCableSegment(1, 90, &ctSegment);
5165 fSDDsensor4->AddNode(segment, 1, ctSegment);
b7943f00 5166
5167 AliITSv11GeomCableRound waHVCableFold("ITSsddWaHVCableFold",
5168 rWraping);
5169 waHVCableFold.SetPhi(180,360);
5170 waHVCableFold.SetNLayers(2);
5171 waHVCableFold.SetLayer(0, fgkWaferThickness/2+fgkWaHVcablePolyThick,
5172 polyhamideSDD, fColorPolyhamide);
5173 waHVCableFold.SetLayer(1, fgkWaHVcableAlThick, alSDD, fColorAl);
108bd0fe 5174 waHVCableFold.SetInitialNode(fSDDsensor3);
b7943f00 5175 x1[1] = 0;
5176 x2[1] = 0;
5177 x1[2] = fgkWaferLength/2-fgkWaHVcableDW+witdhCableBox;
5178 x2[2] = x1[2];
108bd0fe 5179 waHVCableFold.AddCheckPoint(fSDDsensor3, 0, x1, vX);
5180 waHVCableFold.AddCheckPoint(fSDDsensor3, 1, x2, vX);
5181 segment = waHVCableFold.CreateAndInsertCableSegment(1, &ctSegment);
5182 fSDDsensor4->AddNode(segment, 1, ctSegment);
5183
b7943f00 5184
5185 //****************************
5186 // transition cable
5187 //****************************
5188 Double_t headRadius = (fgkTransitHVHeadLX*fgkTransitHVHeadLX/4.+
5189 fgkTransitHVHeadLZ*fgkTransitHVHeadLZ)
5190 /(2.*fgkTransitHVHeadLZ);
5191 Double_t theta = TMath::ATan2(fgkTransitHVHeadLX/2,
5192 headRadius-fgkTransitHVHeadLZ)
5193 *TMath::RadToDeg();
5194
5195 TGeoTubeSeg *headPoly = new TGeoTubeSeg(0,headRadius,
5196 fgkTransitHVPolyThick/2,
5197 90-theta,90+theta);
5198 headPoly->SetName("headPoly");
5199 TGeoTranslation *headPolyTr = new TGeoTranslation(0,0,
5200 -fgkTransitHVPolyThick/2);
5201 headPolyTr->SetName("headPolyTr");
5202 headPolyTr->RegisterYourself();
5203
5204 TGeoTubeSeg *headAl = new TGeoTubeSeg(0,headRadius,
5205 fgkTransitHVAlThick/2,
5206 90-theta,90+theta);
5207 headAl->SetName("headAl");
5208 TGeoTranslation *headAlTr = new TGeoTranslation(0,0,
5209 -fgkTransitHVPolyThick
5210 -fgkTransitHVAlThick/2);
5211 headAlTr->SetName("headAlTr");
5212 headAlTr->RegisterYourself();
5213
5214 TGeoBBox *cache = new TGeoBBox(fgkTransitHVHeadLX/2,
5215 (headRadius-fgkTransitHVHeadLZ)/2,
5216 (fgkTransitHVPolyThick+fgkTransitHVAlThick)/2);
5217 cache->SetName("cache");
5218
5219 TGeoTranslation *headCacheTr = new TGeoTranslation(0,
5220 (headRadius-fgkTransitHVHeadLZ)/2,
5221 -(fgkTransitHVPolyThick
5222 +fgkTransitHVAlThick)/2);
5223 headCacheTr->SetName("cacheTr");
5224 headCacheTr->RegisterYourself();
5225
5226 TGeoCompositeShape *headPolyComp = new TGeoCompositeShape(
5227 "headPoly:headPolyTr-cache:cacheTr");
5228 TGeoVolume *vHeadPolyComp = new TGeoVolume(
5229 "ITSsddHVtransitHeadPoly",headPolyComp, polyhamideSDD);
5230 vHeadPolyComp->SetLineColor(fColorPolyhamide);
5231 TGeoCompositeShape *headAlComp = new TGeoCompositeShape(
5232 "headAl:headAlTr-cache:cacheTr");
5233 TGeoVolume *vHeadAlComp = new TGeoVolume(
5234 "ITSsddHVtransitHeadAl",headAlComp, alSDD);
5235 vHeadAlComp->SetLineColor(fColorAl);
5236
5237
531d6cdc 5238// TGeoRotation rotHead("",0,90,0);
5239// TGeoCombiTrans *rotHeadTr = new TGeoCombiTrans(0,fgkWaferThickness/2,
5240// -headRadius+fgkTransitHVHeadLZ+fgkTransitHVBondingLZ/2,
5241// &rotHead);
5242 TGeoRotation *rotHead = new TGeoRotation("",0,90,0);
b7943f00 5243 TGeoCombiTrans *rotHeadTr = new TGeoCombiTrans(0,fgkWaferThickness/2,
5244 -headRadius+fgkTransitHVHeadLZ+fgkTransitHVBondingLZ/2,
531d6cdc 5245 rotHead);
5246
108bd0fe 5247 fSDDsensor3->AddNode(vHeadPolyComp,1,rotHeadTr);
5248 fSDDsensor3->AddNode(vHeadAlComp,1,rotHeadTr);
5249 fSDDsensor4->AddNode(vHeadPolyComp,1,rotHeadTr);
5250 fSDDsensor4->AddNode(vHeadAlComp,1,rotHeadTr);
b7943f00 5251
5252 //---
5253 AliITSv11GeomCableFlat transitHVCable("ITSsddHVtransitCenter",
5254 fgkTransitHVBondingLZ,
5255 fgkTransitHVPolyThick+fgkTransitHVAlThick);
5256 transitHVCable.SetNLayers(2);
5257 transitHVCable.SetLayer(0, fgkTransitHVPolyThick,polyhamideSDD,
5258 fColorPolyhamide);
5259 transitHVCable.SetLayer(1, fgkTransitHVAlThick, alSDD, fColorAl);
108bd0fe 5260 transitHVCable.SetInitialNode(fSDDsensor3);
b7943f00 5261
5262 x1[0] = -fgkTransitHVHeadLX/2;
5263 x2[0] = -x1[0];
5264 x1[1] = (fgkWaferThickness+fgkTransitHVPolyThick+fgkTransitHVAlThick)/2;
5265 x2[1] = x1[1];
5266 x1[2] = 0;
5267 x2[2] = 0;
108bd0fe 5268 transitHVCable.AddCheckPoint(fSDDsensor3, 0, x1, vX);
5269 transitHVCable.AddCheckPoint(fSDDsensor3, 1, x2, vX);
73dfc864 5270 segment = transitHVCable.CreateAndInsertBoxCableSegment(1,-90,&ctSegment);
5271 fSDDsensor4->AddNode(segment, 1, ctSegment);
5272
b7943f00 5273 transitHVCable.ResetPoints();
5274 transitHVCable.SetName("ITSsddHVtransitTail");
5275 transitHVCable.SetWidth(fgkTransitHVtailWidth);
5276 x1[0] = fgkTransitHVtailXpos;
5277 x2[0] = fgkTransitHVtailXpos;
5278 x1[2] = -fgkTransitHVBondingLZ/2;
5279 x2[2] = -fgkTransitHVBondingLZ/2-fgkTransitHVtailLength;
5280 Double_t vZ[3] = {0,0,1};
108bd0fe 5281 transitHVCable.AddCheckPoint(fSDDsensor3, 0, x1, vZ);
5282 transitHVCable.AddCheckPoint(fSDDsensor3, 1, x2, vZ);
5283 segment = transitHVCable.CreateAndInsertBoxCableSegment(1,0, &ctSegment);
5284 fSDDsensor4->AddNode(segment, 1, ctSegment);
b7943f00 5285
5286 //---
5287 TGeoArb8 *sideLeft = new TGeoArb8( fgkTransitHVPolyThick/2 );
5288 sideLeft->SetVertex(0, fgkTransitHVtailXpos+fgkTransitHVtailWidth/2,0);
5289 sideLeft->SetVertex(1, fgkTransitHVtailXpos+fgkTransitHVtailWidth/2,
5290 fgkTransitHVsideLZ);
5291 sideLeft->SetVertex(2, fgkTransitHVHeadLX/2, fgkTransitHVsideLeftZ);
5292 sideLeft->SetVertex(3, fgkTransitHVHeadLX/2, 0);
5293 sideLeft->SetVertex(4, fgkTransitHVtailXpos+fgkTransitHVtailWidth/2,0);
5294 sideLeft->SetVertex(5, fgkTransitHVtailXpos+fgkTransitHVtailWidth/2,
5295 fgkTransitHVsideLZ);
5296 sideLeft->SetVertex(6, fgkTransitHVHeadLX/2, fgkTransitHVsideLeftZ);
5297 sideLeft->SetVertex(7, fgkTransitHVHeadLX/2, 0);
5298
5299 TGeoArb8 *sideLeftAl = new TGeoArb8( fgkTransitHVAlThick/2 );
5300 sideLeftAl->SetVertex(0, fgkTransitHVtailXpos+fgkTransitHVtailWidth/2,0);
5301 sideLeftAl->SetVertex(1, fgkTransitHVtailXpos+fgkTransitHVtailWidth/2,
5302 fgkTransitHVsideLZ);
5303 sideLeftAl->SetVertex(2, fgkTransitHVHeadLX/2, fgkTransitHVsideLeftZ);
5304 sideLeftAl->SetVertex(3, fgkTransitHVHeadLX/2, 0);
5305 sideLeftAl->SetVertex(4, fgkTransitHVtailXpos+fgkTransitHVtailWidth/2,0);
5306 sideLeftAl->SetVertex(5, fgkTransitHVtailXpos+fgkTransitHVtailWidth/2,
5307 fgkTransitHVsideLZ);
5308 sideLeftAl->SetVertex(6, fgkTransitHVHeadLX/2, fgkTransitHVsideLeftZ);
5309 sideLeftAl->SetVertex(7, fgkTransitHVHeadLX/2, 0);
5310
73dfc864 5311 // sideRight is not there actually
5312// TGeoArb8 *sideRight = new TGeoArb8( fgkTransitHVPolyThick/2 );
5313// sideRight->SetVertex(0, fgkTransitHVtailXpos-fgkTransitHVtailWidth/2,0);
5314// sideRight->SetVertex(1, fgkTransitHVtailXpos-fgkTransitHVtailWidth/2,
5315// fgkTransitHVsideLZ);
5316// sideRight->SetVertex(2, -fgkTransitHVHeadLX/2, fgkTransitHVsideRightZ);
5317// sideRight->SetVertex(3, -fgkTransitHVHeadLX/2, 0);
5318// sideRight->SetVertex(4, fgkTransitHVtailXpos-fgkTransitHVtailWidth/2,0);
5319// sideRight->SetVertex(5, fgkTransitHVtailXpos-fgkTransitHVtailWidth/2,
5320// fgkTransitHVsideLZ);
5321// sideRight->SetVertex(6, -fgkTransitHVHeadLX/2, fgkTransitHVsideRightZ);
5322// sideRight->SetVertex(7, -fgkTransitHVHeadLX/2, 0);
b7943f00 5323
531d6cdc 5324// TGeoRotation rotSide("",0,-90,0);
5325// TGeoCombiTrans *sideRightTr = new TGeoCombiTrans(0,
5326// (fgkWaferThickness+fgkTransitHVPolyThick)/2,
5327// -fgkTransitHVBondingLZ/2,&rotSide);
5328// TGeoCombiTrans *sideLeftTr = new TGeoCombiTrans(0,
5329// (fgkWaferThickness+fgkTransitHVPolyThick)/2,
5330// -fgkTransitHVBondingLZ/2, &rotSide);
5331// TGeoCombiTrans *sideLeftAlTr = new TGeoCombiTrans(0,
5332// fgkTransitHVPolyThick+(fgkWaferThickness+fgkTransitHVAlThick)/2,
5333// -fgkTransitHVBondingLZ/2, &rotSide);
5334 TGeoRotation *rotSide = new TGeoRotation("",0,-90,0);
73dfc864 5335// TGeoCombiTrans *sideRightTr = new TGeoCombiTrans(0,
5336// (fgkWaferThickness+fgkTransitHVPolyThick)/2,
5337// -fgkTransitHVBondingLZ/2,rotSide);
b7943f00 5338 TGeoCombiTrans *sideLeftTr = new TGeoCombiTrans(0,
5339 (fgkWaferThickness+fgkTransitHVPolyThick)/2,
531d6cdc 5340 -fgkTransitHVBondingLZ/2, rotSide);
b7943f00 5341 TGeoCombiTrans *sideLeftAlTr = new TGeoCombiTrans(0,
5342 fgkTransitHVPolyThick+(fgkWaferThickness+fgkTransitHVAlThick)/2,
531d6cdc 5343 -fgkTransitHVBondingLZ/2, rotSide);
5344
b7943f00 5345 TGeoVolume *vSideLeft = new TGeoVolume("ITSsddHVtransitSideLeft",
5346 sideLeft,polyhamideSDD);
5347 vSideLeft->SetLineColor(fColorPolyhamide);
5348 TGeoVolume *vSideLeftAl = new TGeoVolume("ITSsddHVtransitSideLeftAl",
5349 sideLeftAl,alSDD);
5350 vSideLeftAl->SetLineColor(fColorAl);
73dfc864 5351
5352// TGeoVolume *vSideRight = new TGeoVolume("ITSsddHVtransitSideRight",
5353// sideRight,polyhamideSDD);
5354// vSideRight->SetLineColor(fColorPolyhamide);
b7943f00 5355
108bd0fe 5356 fSDDsensor3->AddNode(vSideLeft, 1, sideLeftTr);
5357 fSDDsensor3->AddNode(vSideLeftAl, 1, sideLeftAlTr);
73dfc864 5358// fSDDsensor3->AddNode(vSideRight, 1, sideRightTr);
108bd0fe 5359
5360 fSDDsensor4->AddNode(vSideLeft, 1, sideLeftTr);
5361 fSDDsensor4->AddNode(vSideLeftAl, 1, sideLeftAlTr);
73dfc864 5362// fSDDsensor4->AddNode(vSideRight, 1, sideRightTr);
b7943f00 5363 };
db486a6e 5364
b7943f00 5365 //****************************
108bd0fe 5366 if(GetDebug(1)) {
5367 fSDDsensor3->CheckOverlaps(0.01);
5368 fSDDsensor4->CheckOverlaps(0.01);
5369 }
c789ee28 5370
108bd0fe 5371 fSDDsensor3->SetVisibility(kFALSE);
5372 fSDDsensor4->SetVisibility(kFALSE);
5373}
c789ee28 5374
108bd0fe 5375/*
db486a6e 5376//________________________________________________________________________
b7943f00 5377TGeoVolume *AliITSv11GeometrySDD::CreateDetectors(Int_t iLay) {
5378 //
5379 // return a box volume containing the detectors
5380 //
5381
108bd0fe 5382 TGeoMedium *airSDD = GetMedium("SDD AIR$");
c789ee28 5383
b7943f00 5384 Int_t nDetectors = fgkLay3Ndet;
5385 Double_t ladderLength = fgkLay3LadderLength;
5386 Double_t *sensorZPos = fLay3sensorZPos;
5387
5388 if (iLay==3) {}
5389 else if (iLay==4) {
5390 nDetectors = fgkLay4Ndet;
5391 ladderLength = fgkLay4LadderLength;
5392 sensorZPos = fLay4sensorZPos;
5393 } else {
fa4639a3 5394 printf("AliITSv11GeometrySDD::CreateDetectors: Error : Wrong layer");
b7943f00 5395 };
5396
5397 char name[30];
5398 Double_t volThickness = ( fgkLadWaferSep + 2*fgkWaferThickness +
5399 2*(fgkWaHVcableAlThick+fgkWaHVcablePolyThick));
5400
5401 sprintf(name,"ITSsddDetBox%i",iLay);
5402 TGeoBBox *detBox = new TGeoBBox(name, fgkWaferWidth/2, volThickness/2,
5403 ladderLength*((nDetectors-0.5)/nDetectors)/2);
5404 TGeoVolume *virtualDet = new TGeoVolume("ITSsddLadd",detBox, airSDD);
5405
5406 for (Int_t i=0; i<nDetectors; i++) {
5407 Double_t localZ = sensorZPos[i];
5408 Double_t localY = fgkLadWaferSep/2+fgkWaferThickness/2;
5409 if (iLay==3) if (i%2!=0) localY = -localY;
5410 if (iLay==4) if (i%2==0) localY = -localY;
5411 sprintf(name, "ITSsddLay%iSensorPos%i",iLay, i);
fa4639a3 5412
5413 if (i >= nDetectors/2) {
5414 TGeoTranslation *sensorPos = new TGeoTranslation(0,localY,localZ);
5415 sensorPos->SetName(name);
5416 virtualDet->AddNode(fSDDsensor, i, sensorPos);
5417 }
5418 else {
531d6cdc 5419 TGeoRotation *rotSensor = new TGeoRotation("",0, 180, 180);
fa4639a3 5420 TGeoCombiTrans *sensorPos = new TGeoCombiTrans(0,localY,
531d6cdc 5421 localZ, rotSensor);
fa4639a3 5422 sensorPos->SetName(name);
5423 virtualDet->AddNode(fSDDsensor, i, sensorPos);
5424 };
db486a6e 5425 }
b7943f00 5426
5427 if(GetDebug(1)) virtualDet->CheckOverlaps(0.01);
fa4639a3 5428 virtualDet->SetVisibility(kFALSE);
db486a6e 5429 return virtualDet;
531d6cdc 5430}
108bd0fe 5431*/
5432
5433//________________________________________________________________________
5434TGeoVolumeAssembly *AliITSv11GeometrySDD::CreateDetectorsAssembly(Int_t iLay) {
5435//
5436// return a box volume containing the detectors
5437//
5438
5439 Int_t nDetectors = fgkLay3Ndet;
5440 Double_t ladderLength = fgkLay3LadderLength;
5441 Double_t *sensorZPos = fLay3sensorZPos;
5442 TGeoVolume *sensorSDD = fSDDsensor3;
5443
5444 if (iLay==3) {}
5445 else if (iLay==4) {
5446 nDetectors = fgkLay4Ndet;
5447 ladderLength = fgkLay4LadderLength;
5448 sensorZPos = fLay4sensorZPos;
5449 sensorSDD = fSDDsensor4;
5450 } else {
5451 printf("AliITSv11GeometrySDD::CreateDetectorsAssembly: Error:Wrong layer");
5452 };
5453
5454 char name[30];
6932f314 5455 snprintf(name,30,"ITSsddDetBox%i",iLay);
108bd0fe 5456
5457 TGeoVolumeAssembly *virtualDet = new TGeoVolumeAssembly("ITSsddLadd");
5458
5459 for (Int_t i=0; i<nDetectors; i++) {
5460 Double_t localZ = sensorZPos[i];
5461 Double_t localY = fgkLadWaferSep/2+fgkWaferThickness/2;
5462 if (iLay==3) if (i%2!=0) localY = -localY;
5463 if (iLay==4) if (i%2==0) localY = -localY;
6932f314 5464 snprintf(name, 30, "ITSsddLay%iSensorPos%i",iLay, i);
73dfc864 5465
108bd0fe 5466 if (i >= nDetectors/2) {
5467 TGeoTranslation *sensorPos = new TGeoTranslation(0,localY,localZ);
5468 sensorPos->SetName(name);
6801b453 5469 virtualDet->AddNode(sensorSDD, i, sensorPos);
5470 }
5471 else {
5472 TGeoRotation *rotSensor = new TGeoRotation("",0, 180, 180);
5473 TGeoCombiTrans *sensorPos = new TGeoCombiTrans(0,localY,
5474 localZ, rotSensor);
5475 sensorPos->SetName(name);
5476 virtualDet->AddNode(sensorSDD, i, sensorPos);
5477 };
5478 }
5479
5480 if(GetDebug(1)) virtualDet->CheckOverlaps(0.01);
5481 return virtualDet;
5482}
5483
5484
5485//________________________________________________________________________
5486TGeoVolumeAssembly *AliITSv11GeometrySDD::CreateDetectorsAssemblyLadd2() {
5487//
5488// return a box volume containing the detectors
5489// Special case for Layer 3 Ladder 2 which is rotated (cannot simply
5490// rotate the standard volume, because the module numbering would be wrong)
5491// M.Sitta 25 Nov 2009
5492//
5493
5494 Int_t nDetectors = fgkLay3Ndet;
5495 Double_t *sensorZPos = fLay3sensorZPos;
5496 TGeoVolume *sensorSDD = fSDDsensor3;
5497
5498 char name[30];
6932f314 5499 snprintf(name,30,"ITSsddDetBoxLadd2");
6801b453 5500
5501 TGeoVolumeAssembly *virtualDet = new TGeoVolumeAssembly("ITSsddLadd");
5502
5503 for (Int_t i=0; i<nDetectors; i++) {
5504 Double_t localZ = (-1.)*sensorZPos[nDetectors-1-i];
5505 Double_t localY = fgkLadWaferSep/2+fgkWaferThickness/2;
5506 if (i%2==0) localY = -localY;
6932f314 5507 snprintf(name, 30, "ITSsddLayLadd2SensorPos%i", i);
6801b453 5508
5509 if (i >= nDetectors/2) {
5510 TGeoTranslation *sensorPos = new TGeoTranslation(0,localY,localZ);
5511 sensorPos->SetName(name);
108bd0fe 5512 virtualDet->AddNode(sensorSDD, i, sensorPos);
5513 }
5514 else {
5515 TGeoRotation *rotSensor = new TGeoRotation("",0, 180, 180);
5516 TGeoCombiTrans *sensorPos = new TGeoCombiTrans(0,localY,
5517 localZ, rotSensor);
5518 sensorPos->SetName(name);
5519 virtualDet->AddNode(sensorSDD, i, sensorPos);
5520 };
5521 }
5522
5523 if(GetDebug(1)) virtualDet->CheckOverlaps(0.01);
5524 return virtualDet;
5525}
c789ee28 5526
b7943f00 5527
fa4639a3 5528//________________________________________________________________________
b7943f00 5529Int_t AliITSv11GeometrySDD::
5530GetCurrentLayLaddDet(Int_t &lay, Int_t &ladd, Int_t&det) const {
108bd0fe 5531//
5532// Function which gives the layer, ladder and det.
5533// index of the current volume. To be used in
5534// AliITS::StepManager()
b7943f00 5535 //
c789ee28 5536
b7943f00 5537 if (gGeoManager->GetLevel()<3) return kFALSE;
5538 // Get the det index :
5539 TGeoNode *node = gGeoManager->GetMother(2);
5540 if (!node) return kFALSE;
5541 det = node->GetNumber()+1;
c789ee28 5542
b7943f00 5543 // Get the ladder index :
5544 node = gGeoManager->GetMother(3);
5545 if (!node) return kFALSE;
5546 ladd = node->GetNumber()+1;
5547
5548 // Get the layer index :
5549 if (node->GetNdaughters()==fgkLay3Ndet)
112d72a8 5550 lay = 3;
fa4639a3 5551 else lay = 4;
b7943f00 5552
5553 return kTRUE;
531d6cdc 5554}
e118532f 5555
5556
5557//________________________________________________________________________
5558TGeoPcon* AliITSv11GeometrySDD::CreateConeConstSection(Double_t r1max, Double_t z1,
5559 Double_t r2max, Double_t z2,
5560 Double_t section, Int_t nDiv)
5561{
5562 // Creates a cone along z where the section is approximately constant
5563 // with z. This is for simulation of cables, because a cone with a constant
5564 // radius difference would show a quantity of matter increasing with z...
5565 // The max radius of the created Pcon is evolving linearly, the min radius
5566 // is calculated at several steps (nDiv).
5567 // z2 > z1 (required by the Pcon)
5568
5569 TGeoPcon *myPcon = new TGeoPcon(0, 360, 1+nDiv);
5570
5571 Double_t dr = (r2max-r1max)/nDiv;
5572 Double_t dz = (z2-z1)/nDiv;
5573 Double_t r1minI, r2minI, r1maxI, r2maxI;
5574 Double_t z1I, z2I;
5575
5576 Double_t lZ = TMath::Sqrt((r2max-r1max)*(r2max-r1max) + (z2-z1)*(z2-z1));
5577 Double_t cosAlpha = (z2-z1)/lZ;
5578
5579 r1minI = TMath::Sqrt(r1max*r1max-section/(TMath::Pi()*cosAlpha));
5580 myPcon->DefineSection(0, z1, r1minI, r1max);
5581
5582 for (Int_t i=0; i<nDiv; i++) {
5583
5584 z1I = z1 + i*dz;
5585 z2I = z1I + dz;
5586 r1maxI = r1max + i*dr;
5587 r2maxI = r1maxI + dr;
5588
5589 r2minI = TMath::Sqrt(r2maxI*r2maxI-section/(TMath::Pi()*cosAlpha));
5590 myPcon->DefineSection(i+1, z2I, r2minI, r2maxI);
5591 }
5592 return myPcon;
5593}
5594
5595
5596//________________________________________________________________________
5597Double_t AliITSv11GeometrySDD::GetConeZ(Double_t r, Double_t refR1, Double_t refR2,
43aefea7 5598 Double_t refZ1, Double_t refZ2) const {
e118532f 5599 // just a helping function
5600 return refZ1+(refZ2-refZ1)*(r-refR1)/(refR2-refR1);
5601}
5602
5603//________________________________________________________________________
5604Int_t AliITSv11GeometrySDD::CreateAndInsetConeCablePart(TGeoVolume *mother, Double_t angle,
5605 Int_t nLay3, Int_t nLay4,
5606 Double_t r1, Double_t z1,
5607 Double_t r2, Double_t z2) {
5608
5609 // Create some cables portions from SDD modules grouped
5610 // and attached at the border of the SSD cone
5611
5612 TGeoMedium *copper = GetMedium("COPPER$");
cc8a4c78 5613 TGeoMedium *plastic = GetMedium("SDDKAPTON (POLYCH2)$");
5614 TGeoMedium *opticalFiber = GetMedium("SDD OPTICFIB$");
e118532f 5615
5616 char titleCable[30];
6932f314 5617 snprintf(titleCable,30,"cableSDDport%i",(Int_t)angle);
e118532f 5618
5619 //---
5620 Double_t section = (fgkSectionCuPerMod+fgkSectionPlastPerMod+fgkSectionGlassPerMod)*(nLay3+nLay4);
5621 Double_t thickness = 1.; // let's fix the thickness, then calculate the width
5622 Double_t width = section/thickness;
5623 Double_t thickCu = thickness*fgkSectionCuPerMod/(fgkSectionCuPerMod+fgkSectionPlastPerMod
5624 +fgkSectionGlassPerMod);
5625
5626 Double_t thickPlast = thickness*fgkSectionPlastPerMod/(fgkSectionCuPerMod+fgkSectionPlastPerMod
5627 +fgkSectionGlassPerMod);
5628
5629 Double_t thickGlass = thickness*fgkSectionGlassPerMod/(fgkSectionCuPerMod+fgkSectionPlastPerMod
5630 +fgkSectionGlassPerMod);
5631
5632 Double_t hypothenus = TMath::Sqrt( (r2-r1)*(r2-r1) + (z2-z1)*(z2-z1) );
5633 Double_t cosAlpha = (z2-z1)/hypothenus;
5634 Double_t radius1Cable = TMath::Sqrt(r1*r1 - width*width/4) - 0.5*thickness/cosAlpha;
5635 Double_t radius2Cable = TMath::Sqrt(r2*r2 - width*width/4) - 0.5*thickness/cosAlpha;
5636 angle *= TMath::DegToRad();
5637 Double_t x1 = radius1Cable*TMath::Cos(angle), y1 = radius1Cable*TMath::Sin(angle);
5638 Double_t x2 = radius2Cable*TMath::Cos(angle), y2 = radius2Cable*TMath::Sin(angle);
5639 Double_t pos1[3] = {x1,y1,z1};
5640 Double_t pos2[3] = {x2,y2,z2};
5641 Double_t zVect[3] = {0,0,1};
5642
5643 AliITSv11GeomCableFlat cable(titleCable,width,thickness);
5644 cable.SetNLayers(3);
5645 cable.SetLayer(0, thickPlast, plastic, kYellow);
5646 cable.SetLayer(1, thickCu, copper, kRed);
5647 cable.SetLayer(2, thickGlass, opticalFiber, kGreen);
5648
5649 cable.AddCheckPoint( mother, 0, pos1, zVect );
5650 cable.AddCheckPoint( mother, 1, pos2, zVect );
5651 cable.SetInitialNode(mother);
5652 cable.CreateAndInsertCableSegment(1);
5653
5654 return kTRUE;
5655}
5656
5657
5658
5659//________________________________________________________________________
cc8a4c78 5660void AliITSv11GeometrySDD::SDDCables(TGeoVolume *moth)
5661{
5662//
5663// Creates and inserts the SDD cables running on SDD and SSD cones
5664//
5665// Input:
5666// moth : the TGeoVolume owing the volume structure
5667// Output:
5668//
5669// Created: ??? Ludovic Gaudichet
5670// Updated: 15 Mar 2008 Mario Sitta
40e2e5ea 5671// Updated: 14 Apr 2008 Mario Sitta Overlap fixes
fd5b6398 5672// Updated: 09 May 2008 Mario Sitta SSD overlap fixes
cc8a4c78 5673//
e118532f 5674
cc8a4c78 5675 TGeoMedium *copper = GetMedium("COPPER$");
5676 TGeoMedium *plastic = GetMedium("SDDKAPTON (POLYCH2)$");
5677 TGeoMedium *opticalFiber = GetMedium("SDD OPTICFIB$");
5678 TGeoMedium *airSDD = GetMedium("SDD AIR$");
e118532f 5679
5680
5681 //==================================
5682 //
5683 //==================================
5684
5685 Double_t nModLay3 = fgkLay3Nladd*fgkLay3Ndet;
5686 Double_t nModLay4 = fgkLay4Nladd*fgkLay4Ndet;
5687
5688 Double_t sectionLay3Cu = fgkCableBendRatio*fgkSectionCuPerMod*nModLay3/2;
5689 Double_t sectionLay3Plastic = fgkCableBendRatio*fgkSectionPlastPerMod*nModLay3/2;
5690 Double_t sectionLay3Glass = fgkCableBendRatio*fgkSectionGlassPerMod*nModLay3/2;
5691
5692 Double_t sectionLay4Cu = fgkCableBendRatio*fgkSectionCuPerMod*nModLay4/2;
5693 Double_t sectionLay4Plastic = fgkCableBendRatio*fgkSectionPlastPerMod*nModLay4/2;
5694 Double_t sectionLay4Glass = fgkCableBendRatio*fgkSectionGlassPerMod*nModLay4/2;
5695
cc8a4c78 5696 // Do not use hardcoded numbers, get them from real shapes - M.S. 15/03/08
5697 TGeoVolume *sddCone = gGeoManager->GetVolume("SDDCarbonFiberCone");
5698 TGeoPcon *sddConeShape = (TGeoPcon*)sddCone->GetShape();
5699
5700 TGeoVolume *sddCylinder = gGeoManager->GetVolume("SDDCarbonFiberCylinder");
5701 TGeoTube *sddCylinderShape = (TGeoTube*)sddCylinder->GetShape();
5702
5703 // (were fgkConeSDDr1, fgkConeSDDr2, fgkConeSDDz1, fgkConeSDDz2 hardcoded)
5704 Double_t coneSDDr1 = sddConeShape->GetRmin(5);
5705 Double_t coneSDDr2 = sddConeShape->GetRmin(3);
5706
5707 Double_t coneSDDz1 = sddConeShape->GetZ(9) - sddConeShape->GetZ(5) +
5708 sddCylinderShape->GetDz();
5709 Double_t coneSDDz2 = sddConeShape->GetZ(9) - sddConeShape->GetZ(3) +
5710 sddCylinderShape->GetDz();
5711
5712 // Calculate z1, z2 thanks to R1 and R2
5713 Double_t sddCableZ1 = GetConeZ(fgkSDDCableR1, coneSDDr1, coneSDDr2,
5714 coneSDDz1, coneSDDz2);
5715 Double_t sddCableZ2 = GetConeZ(fgkSDDCableR2, coneSDDr1, coneSDDr2,
5716 coneSDDz1, coneSDDz2);
5717 Double_t sddCableZ3 = GetConeZ(fgkSDDCableR3, coneSDDr1, coneSDDr2,
5718 coneSDDz1, coneSDDz2);
e118532f 5719
5720 TGeoRotation *rotCableSDD = new TGeoRotation("rotCableSDD",0,180,0);
5721
5722 //==================================
5723 // first set of cones : cables from layer 3
5724 //==================================
5725
5726 TGeoPcon* pcon1all = CreateConeConstSection(fgkSDDCableR1, sddCableZ1,
5727 fgkSDDCableR2, sddCableZ2,
5728 sectionLay3Plastic+sectionLay3Cu+sectionLay3Glass, 1);
5729
5730 TGeoPcon* pcon1container = new TGeoPcon(0,360,2);
cc8a4c78 5731 pcon1container->DefineSection(0, sddCableZ1, pcon1all->GetRmin(0),
5732 pcon1all->GetRmax(0));
5733
e118532f 5734 Double_t drMax = pcon1all->GetRmax(0)- pcon1all->GetRmin(0);
cc8a4c78 5735 pcon1container->DefineSection(1, sddCableZ2, pcon1all->GetRmax(1)-drMax,
5736 pcon1all->GetRmax(1));
cc8a4c78 5737
5738 TGeoVolume *vpcon1container = new TGeoVolume("vpcon1container",
5739 pcon1container, airSDD);
e118532f 5740 vpcon1container->SetVisibility(kFALSE);
5741
5742 TGeoPcon* pcon1plast = CreateConeConstSection(fgkSDDCableR1, sddCableZ1,
5743 fgkSDDCableR2, sddCableZ2,
5744 sectionLay3Plastic, 3);
cc8a4c78 5745
5746 TGeoVolume *vpcon1plast = new TGeoVolume("ITScablesSDDpcon1Plast",
5747 pcon1plast, plastic);
e118532f 5748 vpcon1plast->SetLineColor(kYellow);
5749 vpcon1container->AddNode(vpcon1plast, 0);
5750
5751 Double_t dr1a = fgkSDDCableR1 - pcon1plast->GetRmin(0);
5752 TGeoPcon* pcon1Cu = CreateConeConstSection(fgkSDDCableR1 - dr1a, sddCableZ1,
5753 fgkSDDCableR2 - dr1a, sddCableZ2,
5754 sectionLay3Cu, 3);
cc8a4c78 5755
5756 TGeoVolume *vpcon1Cu = new TGeoVolume("ITScablesSDDpcon1Cu",
5757 pcon1Cu, copper);
e118532f 5758 vpcon1Cu->SetLineColor(kRed);
5759 vpcon1container->AddNode(vpcon1Cu, 0);
e118532f 5760
e118532f 5761 Double_t dr1b = pcon1Cu->GetRmax(0) - pcon1Cu->GetRmin(0);
5762 TGeoPcon* pcon1glass = CreateConeConstSection(fgkSDDCableR1-dr1a-dr1b, sddCableZ1,
5763 fgkSDDCableR2-dr1a-dr1b, sddCableZ2,
5764 sectionLay3Glass, 3);
cc8a4c78 5765
5766 TGeoVolume *vpcon1glass = new TGeoVolume("ITScablesSDDpcon1glass",
5767 pcon1glass, opticalFiber);
e118532f 5768 vpcon1glass->SetLineColor(kGreen);
5769 vpcon1container->AddNode(vpcon1glass, 0);
5770
cc8a4c78 5771 moth->AddNode(vpcon1container, 1);
5772 moth->AddNode(vpcon1container, 2, rotCableSDD);
e118532f 5773
5774 //==================================
5775 // 2nd set of cones : cables from layer 3 and layer 4
5776 //==================================
5777
5778 TGeoPcon* pcon2all = CreateConeConstSection(fgkSDDCableR2, sddCableZ2,
5779 fgkSDDCableR3, sddCableZ3,
cc8a4c78 5780 sectionLay3Plastic+sectionLay4Plastic+
5781 sectionLay3Cu+sectionLay4Cu+
5782 sectionLay3Glass+sectionLay4Glass, 1);
5783
e118532f 5784 TGeoPcon* pcon2container = new TGeoPcon(0,360,2);
cc8a4c78 5785 pcon2container->DefineSection(0, sddCableZ2, pcon2all->GetRmin(0),
5786 pcon2all->GetRmax(0));
5787
e118532f 5788 drMax = pcon2all->GetRmax(0)- pcon2all->GetRmin(0);
cc8a4c78 5789 pcon2container->DefineSection(1, sddCableZ3, pcon2all->GetRmax(1)-drMax,
5790 pcon2all->GetRmax(1));
5791
cc8a4c78 5792
5793 TGeoVolume *vpcon2container = new TGeoVolume("vpcon2container",
5794 pcon2container, airSDD);
e118532f 5795 vpcon2container->SetVisibility(kFALSE);
5796
5797 TGeoPcon* pcon2plast = CreateConeConstSection(fgkSDDCableR2, sddCableZ2,
5798 fgkSDDCableR3, sddCableZ3,
cc8a4c78 5799 sectionLay3Plastic+
5800 sectionLay4Plastic, 3);
5801
5802 TGeoVolume *vpcon2plast = new TGeoVolume("ITScablesSDDpcon2Plast",
5803 pcon2plast, plastic);
e118532f 5804 vpcon2plast->SetLineColor(kYellow);
5805 vpcon2container->AddNode(vpcon2plast, 0);
5806
5807 Double_t dr2a = fgkSDDCableR2 - pcon2plast->GetRmin(0);
5808 TGeoPcon* pcon2Cu = CreateConeConstSection(fgkSDDCableR2 - dr2a, sddCableZ2,
5809 fgkSDDCableR3 - dr2a, sddCableZ3,
5810 sectionLay3Cu+sectionLay4Cu, 3);
cc8a4c78 5811
5812 TGeoVolume *vpcon2Cu = new TGeoVolume("ITScablesSDDpcon2Cu",
5813 pcon2Cu, copper);
e118532f 5814 vpcon2Cu->SetLineColor(kRed);
5815 vpcon2container->AddNode(vpcon2Cu, 0);
5816
e118532f 5817 Double_t dr2b = pcon2Cu->GetRmax(0) - pcon2Cu->GetRmin(0);
5818 TGeoPcon* pcon2glass = CreateConeConstSection(fgkSDDCableR2-dr2a-dr2b, sddCableZ2,
5819 fgkSDDCableR3-dr2a-dr2b, sddCableZ3,
cc8a4c78 5820 sectionLay3Glass+
5821 sectionLay4Glass, 3);
5822
5823 TGeoVolume *vpcon2glass = new TGeoVolume("ITScablesSDDpcon2glass",
5824 pcon2glass, opticalFiber);
e118532f 5825 vpcon2glass->SetLineColor(kGreen);
5826 vpcon2container->AddNode(vpcon2glass, 0);
5827
cc8a4c78 5828 moth->AddNode(vpcon2container, 1);
5829 moth->AddNode(vpcon2container, 2, rotCableSDD);
e118532f 5830
5831 //==================================
5832 // intermediate cylinder
5833 //==================================
5834
cc8a4c78 5835 // (was fgkSDDCableDZint hardcoded)
5836 Double_t sddCableDZint = (sddConeShape->GetZ(9) - sddConeShape->GetZ(0) +
5837 sddCylinderShape->GetDz()) - sddCableZ3;
5838
5839 TGeoTube *interCyl = new TGeoTube("sddCableInterCyl",
5840 pcon2container->GetRmin(1),
e118532f 5841 pcon2container->GetRmax(1),
cc8a4c78 5842 sddCableDZint/2);
5843
5844 TGeoVolume *vInterCyl = new TGeoVolume("vSddCableInterCyl",
5845 interCyl, airSDD);
e118532f 5846 vInterCyl->SetVisibility(kFALSE);
5847
e118532f 5848 Double_t rmaxCylPlast = pcon2container->GetRmax(1);
5849 Double_t rminCylPlast = TMath::Sqrt(rmaxCylPlast*rmaxCylPlast -
cc8a4c78 5850 (sectionLay3Plastic+sectionLay4Plastic)/TMath::Pi() );
e118532f 5851
5852 TGeoTube *interCylPlast = new TGeoTube("sddCableInterCylPlast", rminCylPlast,
cc8a4c78 5853 rmaxCylPlast, sddCableDZint/2);
5854
5855 TGeoVolume *vInterCylPlast = new TGeoVolume("vSddCableInterCylPlast",
5856 interCylPlast, plastic);
e118532f 5857 vInterCylPlast->SetLineColor(kYellow);
5858 vInterCyl->AddNode(vInterCylPlast, 0);
5859
e118532f 5860 Double_t rmaxCylCu = pcon2Cu->GetRmax(3);
5861 Double_t rminCylCu = TMath::Sqrt(rmaxCylCu*rmaxCylCu -
cc8a4c78 5862 (sectionLay3Cu+sectionLay4Cu)/TMath::Pi() );
5863
e118532f 5864 TGeoTube *interCylCu = new TGeoTube("sddCableInterCylCu", rminCylCu,
cc8a4c78 5865 rmaxCylCu, sddCableDZint/2);
5866
5867 TGeoVolume *vInterCylCu = new TGeoVolume("vSddCableInterCylCu",
5868 interCylCu, copper);
e118532f 5869 vInterCylCu->SetLineColor(kRed);
5870 vInterCyl->AddNode(vInterCylCu, 0);
5871
e118532f 5872 Double_t rmaxCylGlass = pcon2glass->GetRmax(3);
5873 Double_t rminCylGlass = TMath::Sqrt(rmaxCylGlass*rmaxCylGlass -
cc8a4c78 5874 (sectionLay3Glass+sectionLay4Glass)/TMath::Pi() );
5875
e118532f 5876 TGeoTube *interCylGlass = new TGeoTube("sddCableInterCylGlass", rminCylGlass,
cc8a4c78 5877 rmaxCylGlass, sddCableDZint/2);
5878
5879 TGeoVolume *vInterCylGlass = new TGeoVolume("vSddCableInterCylGlass",
5880 interCylGlass,opticalFiber);
e118532f 5881 vInterCylGlass->SetLineColor(kGreen);
5882 vInterCyl->AddNode(vInterCylGlass, 0);
5883
cc8a4c78 5884 moth->AddNode(vInterCyl, 1, new TGeoTranslation(0, 0,
5885 sddCableZ3+sddCableDZint/2));
5886 moth->AddNode(vInterCyl, 2, new TGeoTranslation(0, 0,
5887 -sddCableZ3-sddCableDZint/2));
e118532f 5888
5889 //==================================
5890 // cable cone on the SSD cone
5891 //==================================
5892
5893 Double_t sddCableR4 = rmaxCylPlast;
cc8a4c78 5894 Double_t sddCableZ4 = sddCableZ3 + sddCableDZint;
e118532f 5895
5896 TGeoPcon* pcon3all = CreateConeConstSection(sddCableR4, sddCableZ4,
5897 fgkSDDCableR5, fgkSDDCableZ5,
cc8a4c78 5898 sectionLay3Plastic+
5899 sectionLay4Plastic+
e118532f 5900 sectionLay3Cu+sectionLay4Cu+
5901 sectionLay3Glass+sectionLay4Glass, 1);
5902
5903 TGeoPcon* pcon3container = new TGeoPcon(0,360,2);
cc8a4c78 5904 pcon3container->DefineSection(0, sddCableZ4, pcon3all->GetRmin(0),
5905 pcon3all->GetRmax(0));
5906
e118532f 5907 drMax = pcon3all->GetRmax(0) - pcon3all->GetRmin(0);
cc8a4c78 5908 pcon3container->DefineSection(1, fgkSDDCableZ5, pcon3all->GetRmax(1)-drMax,
5909 pcon3all->GetRmax(1));
5910
cc8a4c78 5911
5912 TGeoVolume *vpcon3container = new TGeoVolume("vpcon3container",
5913 pcon3container, airSDD);
e118532f 5914 vpcon3container->SetVisibility(kFALSE);
5915
5916 TGeoPcon* pcon3plast = CreateConeConstSection(sddCableR4, sddCableZ4,
5917 fgkSDDCableR5, fgkSDDCableZ5,
cc8a4c78 5918 sectionLay3Plastic+
5919 sectionLay4Plastic, 3);
5920
5921 TGeoVolume *vpcon3plast = new TGeoVolume("ITScablesSDDpcon3Plast",
5922 pcon3plast, plastic);
e118532f 5923 vpcon3plast->SetLineColor(kYellow);
5924 vpcon3container->AddNode(vpcon3plast, 0);
5925
5926 Double_t dr3a = sddCableR4 - pcon3plast->GetRmin(0);
5927 TGeoPcon* pcon3Cu = CreateConeConstSection(sddCableR4 - dr3a, sddCableZ4,
5928 fgkSDDCableR5 - dr3a, fgkSDDCableZ5,
5929 sectionLay3Cu+sectionLay4Cu, 3);
cc8a4c78 5930
5931 TGeoVolume *vpcon3Cu = new TGeoVolume("ITScablesSDDpcon3Cu",
5932 pcon3Cu, copper);
e118532f 5933 vpcon3Cu->SetLineColor(kRed);
5934 vpcon3container->AddNode(vpcon3Cu, 0);
5935
e118532f 5936 Double_t dr3b = pcon3Cu->GetRmax(0) - pcon3Cu->GetRmin(0);
5937 TGeoPcon* pcon3glass = CreateConeConstSection(sddCableR4-dr3a-dr3b, sddCableZ4,
5938 fgkSDDCableR5-dr3a-dr3b, fgkSDDCableZ5,
5939 sectionLay3Glass+sectionLay4Glass, 3);
cc8a4c78 5940
5941 TGeoVolume *vpcon3glass = new TGeoVolume("ITScablesSDDpcon3glass",
5942 pcon3glass,opticalFiber);
e118532f 5943 vpcon3glass->SetLineColor(kGreen);
5944 vpcon3container->AddNode(vpcon3glass, 0);
5945
cc8a4c78 5946 moth->AddNode(vpcon3container, 1);
5947 moth->AddNode(vpcon3container, 2, rotCableSDD);
e118532f 5948
5949 //==================================
5950 // cables that are grouped at the end of SSD cones
5951 //==================================
5952
ccda95a0 5953// Double_t fgkSDDCableR6 = fgkSDDCableR5+9;
5954// Double_t fgkSDDCableZ6 = fgkSDDCableZ5+8.8;
5955 Double_t fgkSDDCableR6 = fgkSDDCableR5+8;
5956 Double_t fgkSDDCableZ6 = fgkSDDCableZ5+8;
e118532f 5957
5958 TGeoVolumeAssembly *endConeSDDCable = new TGeoVolumeAssembly("endConeSDDCable");
5959
fd5b6398 5960 // Add some hardcoded shifts to avoid overlaps with SSD pathc panels
ccda95a0 5961 CreateAndInsetConeCablePart(endConeSDDCable, 20, 1*3,2*4, fgkSDDCableR5,
5962 fgkSDDCableZ5,fgkSDDCableR6-2.6,fgkSDDCableZ6-2.6);
e118532f 5963
ccda95a0 5964 CreateAndInsetConeCablePart(endConeSDDCable, 50, 1*3,1*4, fgkSDDCableR5,
5965 fgkSDDCableZ5,fgkSDDCableR6,fgkSDDCableZ6);
e118532f 5966
5967 CreateAndInsetConeCablePart(endConeSDDCable, 85, 2*3,1*4, fgkSDDCableR5,
5968 fgkSDDCableZ5,fgkSDDCableR6,fgkSDDCableZ6);
5969
5970 CreateAndInsetConeCablePart(endConeSDDCable, 95, 0*3,1*4, fgkSDDCableR5,
5971 fgkSDDCableZ5,fgkSDDCableR6,fgkSDDCableZ6);
5972
ccda95a0 5973 CreateAndInsetConeCablePart(endConeSDDCable, 105, 2*3,3*4, fgkSDDCableR5,
5974 fgkSDDCableZ5,fgkSDDCableR6-2.6,fgkSDDCableZ6-2.6);
e118532f 5975
ccda95a0 5976 CreateAndInsetConeCablePart(endConeSDDCable, 129, 0*3,3*4, fgkSDDCableR5,
5977 fgkSDDCableZ5,fgkSDDCableR6,fgkSDDCableZ6);
e118532f 5978
ccda95a0 5979 CreateAndInsetConeCablePart(endConeSDDCable, 176, 0*3,1*4, fgkSDDCableR5,
e118532f 5980 fgkSDDCableZ5,fgkSDDCableR6,fgkSDDCableZ6);
5981
5982 CreateAndInsetConeCablePart(endConeSDDCable, 190, 2*3,0*4, fgkSDDCableR5,
5983 fgkSDDCableZ5,fgkSDDCableR6,fgkSDDCableZ6);
5984
ccda95a0 5985 CreateAndInsetConeCablePart(endConeSDDCable, 210, 1*3,2*4, fgkSDDCableR5,
5986 fgkSDDCableZ5,fgkSDDCableR6-2.6,fgkSDDCableZ6-2.6);
e118532f 5987
ccda95a0 5988 CreateAndInsetConeCablePart(endConeSDDCable, 230, 1*3,2*4, fgkSDDCableR5,
e118532f 5989 fgkSDDCableZ5,fgkSDDCableR6,fgkSDDCableZ6);
5990
ccda95a0 5991 CreateAndInsetConeCablePart(endConeSDDCable, 277, 2*3,2*4, fgkSDDCableR5,
e118532f 5992 fgkSDDCableZ5,fgkSDDCableR6,fgkSDDCableZ6);
5993
ccda95a0 5994 CreateAndInsetConeCablePart(endConeSDDCable, 306, 1*3,1*4, fgkSDDCableR5,
5995 fgkSDDCableZ5,fgkSDDCableR6,fgkSDDCableZ6);
e118532f 5996
fd5b6398 5997 CreateAndInsetConeCablePart(endConeSDDCable, 353, 1*3,3*4, fgkSDDCableR5,
e118532f 5998 fgkSDDCableZ5,fgkSDDCableR6,fgkSDDCableZ6);
5999
cc8a4c78 6000 moth->AddNode(endConeSDDCable, 1, 0);
e118532f 6001
6002 TGeoRotation* reflect = new TGeoRotation("reflectEndConeSDDCable");
6003 reflect->ReflectZ(kTRUE);
cc8a4c78 6004 moth->AddNode(endConeSDDCable, 2, reflect);
6005
6006
6007 return;
e118532f 6008}