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