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