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