Using the right AliITSRecPoint constructor for the correct initialization of the...
[u/mrichter/AliRoot.git] / ITS / AliITSv11GeometrySDD.h
CommitLineData
db486a6e 1#ifndef ALIITSV11GEOMETRYSDD_H
2#define ALIITSV11GEOMETRYSDD_H
3
4/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
6
b7943f00 7//*************************************************************************
8// class AliITSv11GeometrySDD
9// Ludovic Gaudichet gaudichet@to.infn.it
10//*************************************************************************
db486a6e 11
12class TGeoVolume;
b7943f00 13class TGeoTranslation;
db486a6e 14class TGeoCombiTrans;
15class TGeoArb8;
c789ee28 16class TGeoNode;
b7943f00 17class TGeoMedium;
18class TGeoMatrix;
19class AliITSgeom;
20class AliITSv11GeomCableFlat;
db486a6e 21
b7943f00 22#include "AliITSv11Geometry.h"
db486a6e 23
c789ee28 24
db486a6e 25class AliITSv11GeometrySDD : public AliITSv11Geometry {
26
27 public:
28 AliITSv11GeometrySDD();
29 AliITSv11GeometrySDD(Int_t debug);
b7943f00 30 AliITSv11GeometrySDD(const AliITSv11GeometrySDD &source);
31 AliITSv11GeometrySDD& operator=(const AliITSv11GeometrySDD &source);
32 virtual ~AliITSv11GeometrySDD();
db486a6e 33
c789ee28 34 // Main functions
b7943f00 35 virtual void Layer3(TGeoVolume *moth);
36 virtual void Layer4(TGeoVolume *moth);
37 virtual Int_t ExportSensorGeometry(AliITSgeom *geom, Int_t iLaySDD,
38 Int_t startMod);
39 virtual Int_t GetCurrentLayLaddDet(Int_t &lay, Int_t &ladd, Int_t&det) const;
db486a6e 40
c789ee28 41 // Functions for coding, testing, debugging
b7943f00 42 void AddHybrids(bool b) {fAddHybrids = b;};
43 void AddSensors(bool b) {fAddSensors = b;};
44 void AddHVcables(bool b) {fAddHVcables = b;};
45 void AddCables(bool b) {fAddCables = b;};
46 void AddCoolingSyst(bool b) {fAddCoolingSyst= b;};
47
48 void CheckOverlaps(Double_t precision = 0.01);
49 void AddOnlyLay3Ladder(Int_t min,Int_t max){
50 fAddOnlyLadder3min = min; fAddOnlyLadder3max = max; };
51 void AddOnlyLay4Ladder(Int_t min,Int_t max) {
52 fAddOnlyLadder4min = min; fAddOnlyLadder4max = max;};
53 void ShowOnePiece(TGeoVolume *Moth);
54
55 virtual void SetParameters();
56 TGeoVolume* GetMotherVolume() const { return fMotherVol;};
57 const char* GetSenstiveVolumeMame() const {return fgSDDsensitiveVolName;};
fa4639a3 58 Int_t GetLay3NLadders() const;
59 Int_t GetLay4NLadders() const;
db486a6e 60
61 private:
62
b7943f00 63 // Create ladder virtual volumes and its detectors
64 virtual TGeoVolume* CreateLadder(Int_t iLay);
65 virtual TGeoVolume* CreateDetectors(Int_t iLay);
db486a6e 66 // Create virtual volumes inside a ladder volume
b7943f00 67 virtual TGeoVolume* CreateLadderSegment(Int_t iLay, Int_t iSeg);
68 virtual TGeoVolume* CreateEndLadder(Int_t iLay);
69 // Create some basic objects
70 virtual TGeoVolume* CreateHybrid(Int_t iLRSide);
71 virtual TGeoVolume* CreatePinSupport();
72 virtual TGeoVolume* CreateCoolPipeSupportL();
73 virtual TGeoVolume* CreateCoolPipeSupportR();
74 virtual TGeoVolume* CreateSDDsensor();
75 virtual TGeoVolume* CreateBaseThermalBridge();
76 void CreateBasicObjects();
77
78
79 // Check that the nedium exists
80 virtual TGeoMedium* GetMedium(const char* mediumName);
81
82 // Create a TGeoCombiTrans: general rotation in phi and (dy,dz) translation
c789ee28 83 TGeoCombiTrans* CreateCombiTrans( const char *name,
84 Double_t dy, Double_t dz, Double_t dphi);
db486a6e 85
86 // add (dx,dy,dz) translation to a initial TGeoCombiTrans
c789ee28 87 void AddTranslationToCombiTrans( TGeoCombiTrans* ct,
b7943f00 88 Double_t dx=0, Double_t dy=0, Double_t dz=0) const;
db486a6e 89
90 // Create one side of the CF corner of the CF structure
c789ee28 91 TGeoArb8* CreateLadderSide( Double_t dz, Double_t angle, Double_t xSign,
92 Double_t L, Double_t H, Double_t l);
db486a6e 93
b7943f00 94 //----------------------------
95 TGeoVolume* fPinSupport; //! pins glued to sensors
96 TGeoVolume* fCoolPipeSupportL; //! half of cooling pipe support
97 TGeoVolume* fCoolPipeSupportR; //! half of cooling pipe support
98 TGeoVolume* fSDDsensor; //! sensor and HV cables on it
99 TGeoVolume* fBaseThermalBridge; //! Base of hybrid thermal bridge
100 TGeoVolume* fHybrid; //! hybrid volume
101
102 static const Int_t fgkNladdSegCommonVol = 19; // Number of vol.
103 TGeoVolume* fLaddSegCommonVol[fgkNladdSegCommonVol];//! volumes in ladder
104 TGeoMatrix* fLaddSegCommonTr[fgkNladdSegCommonVol]; //! their transf.
105
106 AliITSv11GeomCableFlat *fDigitCableLay3A; // layer 3 cables, side A
107 AliITSv11GeomCableFlat *fDigitCableLay3B; // layer 3 cables, side A
108 AliITSv11GeomCableFlat *fDigitCableLay4A; // layer 4 cables, side B
109 AliITSv11GeomCableFlat *fDigitCableLay4B; // layer 4 cables, side B
110
111 TGeoVolume *fMotherVol; //! mother volume given in LayerX() funct.
112 bool fAddHybrids; // Insert hybrids ? (default TRUE)
113 bool fAddSensors; // Insert sensors ? (default TRUE)
114 bool fAddHVcables; // Insert HV cables ? (default TRUE)
115 bool fAddCables; // Insert cables ? (default TRUE)
116 bool fAddCoolingSyst; // Insert cooling system ? (default TRUE)
117 bool fCoolingOn; // Insert cooling fluid ? (default TRUE)
118 Int_t fAddOnlyLadder3min; // first ladder index
119 Int_t fAddOnlyLadder3max; // last ladder index
120 Int_t fAddOnlyLadder4min; // first ladder index
121 Int_t fAddOnlyLadder4max; // last ladder index
122 Int_t fColorCarbonFiber; // display colors
123 Int_t fColorRyton; // ===
124 Int_t fColorPhynox; // ===
125 Int_t fColorSilicon; // ===
126 Int_t fColorAl; // ===
127 Int_t fColorPolyhamide; // ===
128 Int_t fColorGlass; // ===
129 Int_t fColorSMD; // ===
130 Int_t fColorSMDweld; // ===
131
132 //-------------------------------------- parameters for the SDD geometry
133
134 static const char* fgSDDsensitiveVolName; // name of sensitive vol
135
136 static const Int_t fgkLay3Nladd; // 14
137 static const Int_t fgkLay3Ndet; // 6
138 static const Double_t fgkLay3Rmin; // min. radius of tube
139 static const Double_t fgkLay3Rmax; // max. radius of tube
140 static const Double_t fgkLay3Length; // length of layer 3 tube
141 static const Double_t fgkLay3LadderLength; // tot. length of ladder
142 static const Double_t fgkLay3DetShortRadius; // radius from beam axis
143 static const Double_t fgkLay3DetLongRadius; // radius from beam axis
144 static const Double_t fgkLay3LaddTopCornerEnd; // Ends of ladder 3
145 static const Double_t fgkLay3ZPlusEndLength; // ===
146
147 static const Int_t fgkLay4Nladd; // 22
148 static const Int_t fgkLay4Ndet; // 8
149 static const Double_t fgkLay4Rmin; // min. radius of tube
150 static const Double_t fgkLay4Rmax; // max. radius of tube
151 static const Double_t fgkLay4Length; // length of layer 4 tube
152 static const Double_t fgkLay4LadderLength; // tot. length of ladder
153 static const Double_t fgkLay4DetShortRadius; // radius from beam axis
154 static const Double_t fgkLay4DetLongRadius; // radius from beam axis
155 static const Double_t fgkLay4LaddTopCornerEnd; // Ends of ladder 3
156 static const Double_t fgkLay4ZPlusEndLength; // ===
157
158 static const Double_t fgkSegmentLength; // length of 1 ladder seg.
159 static const Double_t fgkLadderWidth; // carbon fiber structure
160 static const Double_t fgkLadderHeight; // including bottom beam
161 static const Double_t fgkLadderSegBoxDW; // To include hybrids in box
162 static const Double_t fgkLadderSegBoxDH; // To include hybrids in box
163
164 static const Double_t fgkLadderBeamRadius; // carbon fiber beam radius
165 static const Double_t fgkLadderLa; // parameters defining
166 static const Double_t fgkLadderHa; // the V side shape
167 static const Double_t fgkLadderLb; // of the carbon
168 static const Double_t fgkLadderHb; // fiber ladder
169 static const Double_t fgkLadderl; // ============
170
171 static const Double_t fgkBottomBeamAngle; // bottom beam angle
172 static const Double_t fgkBeamSidePhi; // side beam angle
173
174 static const Double_t fgkWaferThickness; // sensor thickness (Y)
175 static const Double_t fgkWaferWidth; // width (X)
176 static const Double_t fgkWaferLength; // length (Z)
177 static const Double_t fgkWaferThickSens; // sensitive volume thich
178 static const Double_t fgkWaferWidthSens; // sens. volume width
179 static const Double_t fgkWaferLengthSens; // sens. volume length
180
181 static const Double_t fgkSensorGlassLX; // dimensions of glass
182 static const Double_t fgkSensorGlassLZ; // (on which pins are
183 static const Double_t fgkSensorGlassLY; // glued)
184 static const Double_t fgkGlassDXOnSensor; // Position of glass
185 static const Double_t fgkGlassDZOnSensor; // on sensor
186
187 static const Double_t fgkLadWaferSep; // ladder-sensor dist.
188 static const Double_t fgkPinR; // pins radius
189 static const Double_t fgkPinSuppWidth; // ===
190 static const Double_t fgkPinSuppHeight; // ===
191 static const Double_t fgkPinSuppRmax; // Parameters for pin
192 static const Double_t fgkPinSuppLength; // supports on
193 static const Double_t fgkPinSuppThickness; // carbon fiber
194 static const Double_t fgkPinSuppConeAngle; // ladder
195 static const Double_t fgkPinDXminOnSensor; // ===
196 static const Double_t fgkPinPinDDXOnSensor; // ===
197 static const Double_t fgkPinDYOnSensor; // ===
198
199 static const Double_t fgkCoolPipeInnerDiam; // Water cooling
200 static const Double_t fgkCoolPipeOuterDiam; // pipe
201 static const Double_t fgkLay3CoolPipeSuppH; // Heights of water
202 static const Double_t fgkLay4CoolPipeSuppH; // pipes on ladders
203 static const Double_t fgkCoolPipeSuppHeight; // ===
204 static const Double_t fgkCoolPipeSuppMaxLength; // ===
205 static const Double_t fgkCoolPipeSuppWidthExt; // Parameters for
206 static const Double_t fgkCoolPipeSuppWidthIn; // cooling pipes
207 static const Double_t fgkCoolPipeSuppHoleDiam; // on carbon fiber
208 static const Double_t fgkCoolPipeSuppFulWidth; // ladder
209 static const Double_t fgkCoolPipeSuppTongW; // ===
210 static const Double_t fgkCoolPipeSuppAngle; // ===
211 static const Double_t fgkCoolPipeSuppSlitL; // ===
212 static const Double_t fgkCoolPipeSuppAxeDist; // ===
213
214 static const Double_t fgkBTBthick; // BTB for :
215 static const Double_t fgkBTBlength; // Base of Thermal Bridge
216 static const Double_t fgkBTBwidth; // =====================
217 static const Double_t fgkBTBaxisAtoBottom; // axis A is the same as
218 static const Double_t fgkBTBaxisAtoBase; // the cooling pipe axis
219 static const Double_t fgkRadiusAminBTB; // ===
220 static const Double_t fgkRadiusBminBTB; // ===
221 static const Double_t fgkBTBHoleLength; // ===
222 static const Double_t fgkBTBHolewidth; // ===
223 static const Double_t fgkBTBHoleRefX; // ===
224 static const Double_t fgkBTBHoleRefY; // ===
225
226 static const Double_t fgkHybridLength; // Hybrid parameters :
227 static const Double_t fgkHybridWidth; // ===
228 static const Double_t fgkHybridAngle; // Hybrid on ladder in phi
229
230 static const Double_t fgkHybRndHoleRad; // ===
231 static const Double_t fgkHybRndHoleZ; // ===
232 static const Double_t fgkHybRndHoleX; // ===
233
234 static const Double_t fgkHybFLlowHoleDZ; // FLlow : low flex
235 static const Double_t fgkHybFLlowHolePasDX; // ===
236 static const Double_t fgkHybFLlowHoleAmbDX; // ===
237 // (center of ships to the border)
238 static const Double_t fgkHybFLlowChipZ4; // Z1 to Z4 : position
239 static const Double_t fgkHybFLlowChipZ3; // in z of the chip
240 static const Double_t fgkHybFLlowChipZ2; // centers
241 static const Double_t fgkHybFLlowChipZ1; // ===
242 static const Double_t fgkHybFLlowPasX; // Pascal center X pos
243 static const Double_t fgkHybFLlowAmbX; // Ambra center X pos
244 static const Double_t fgkHybChipsDZ; // Z dimension of chips
245 static const Double_t fgkHybPascalDX; // X dimension of Pascal
246 static const Double_t fgkHybAmbraDX; // X dimension of Ambra
247 static const Double_t fgkHybFLUpperWidth; // bFLUpper : upper flex
248 static const Double_t fgkHybFLUpperLength; // ===
249 static const Double_t fgkHybFLUpperAlDZ; // ===
250 static const Double_t fgkHybFLUpperAldx; // ===
251
252 static const Double_t fgkHybridThBridgeThick; // Thicknesses :
253 static const Double_t fgkHybAlThick; // ===
254 static const Double_t fgkHybUpThick; // ===
255 static const Double_t fgkHybGlueScrnThick; // ===
256 static const Double_t fgkHybGlueLowThick; // ===
257 static const Double_t fgkHybGlueUpThick; // ===
258 static const Double_t fgkHybAlCCThick; // ===
259 static const Double_t fgkHybUpCCThick; // ===
260 static const Double_t fgkHybChipThick; // ===
261 static const Double_t fgkHybGlueAgThick; // ===
262 static const Double_t fgkHybUnderNiThick; // ===
263 static const Int_t fgkNHybSMD; // Number of SMD
264 static const Double_t fgkHybSMDposX[25]; // X pos. of SMD
265 static const Double_t fgkHybSMDposZ[25]; // Z pos. of SMD
266 static const Double_t fgkHybSMDmiddleW; // SMD width
267 static const Double_t fgkHybSMDmiddleL; // SMD length
268 static const Double_t fgkHybSMDendW; // end SMD witdh
269 static const Double_t fgkHybSMDendL; // end SMD length
270 static const Double_t fgkHybSMDheight; // SMD height
271
272 static const Double_t fgkDigitCablWidth; // Digital
273 static const Double_t fgkDigitCablAlThick; // cables
274 static const Double_t fgkDigitCablPolyThick; // ===
275
276 //HV cables
277 static const Double_t fgkWaHVcableAlThick; // Wrap-around
278 static const Double_t fgkWaHVcablePolyThick; // High Voltage
279 static const Double_t fgkWaHVcableLength; // cables
280 static const Double_t fgkWaHVcableWitdh; // (on sensor)
281 static const Double_t fgkWaHVcableDW; // ===
282
283 static const Double_t fgkTransitHVAlThick; // Transition
284 static const Double_t fgkTransitHVPolyThick; // High Voltage
285 static const Double_t fgkTransitHVHeadLX; // cables
286 static const Double_t fgkTransitHVHeadLZ; // (on sensor)
287 static const Double_t fgkTransitHVBondingLZ; // ===
288 static const Double_t fgkTransitHVtailLength; // ===
289 static const Double_t fgkTransitHVtailWidth; // ===
290 static const Double_t fgkTransitHVtailXpos; // ===
291 static const Double_t fgkTransitHVsideLZ; // ===
292 static const Double_t fgkTransitHVsideLeftZ; // ===
293 static const Double_t fgkTransitHVsideRightZ; // ===
294
295 static const Double_t fgkLongHVcablePolyThick; // Long High
296 static const Double_t fgkLongHVcableAlThick; // Voltage
297 static const Double_t fgkLongHVcableSeparation; // cables
298
299 static const Double_t fgkmu; // 1 micron, or more for debugging
300
301 // calculated parameters
302 Double_t fLay3LadderUnderSegDH; // To include HVcables in box
303 Double_t fLay4LadderUnderSegDH; // To include HVcables in box
304 Double_t fLay3LaddShortRadius; // ladder 3 to beam axis radius
305 Double_t fLay3LaddLongRadius; // ladder 3 to beam axis radius
306 Double_t fLay4LaddShortRadius; // ladder 4 to beam axis radius
307 Double_t fLay4LaddLongRadius; // ladder 4 to beam axis radius
308
309 // parameters that be modified
310 Double_t fLay3sensorZPos[6]; // Z pos of sensors in layer 3
311 Double_t fLay4sensorZPos[8]; // Z pos of sensors in layer 4
db486a6e 312
313 ClassDef(AliITSv11GeometrySDD,1) // ITS v11 SDD geometry
314};
315
316
db486a6e 317#endif