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