]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PHOS/AliPHOSEMCAGeometry.cxx
Use configuration script
[u/mrichter/AliRoot.git] / PHOS / AliPHOSEMCAGeometry.cxx
CommitLineData
2f2c3b32 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. *
14 **************************************************************************/
15
16/* $Id$ */
17
18//_________________________________________________________________________
19// Geometry class for PHOS : EMCA (Electromagnetic Calorimeter)
a3dfe79c 20// Its data members provide geometry parametrization of EMCA
21// which can be changed in the constructor only.
22// Author : Yves Schutz (SUBATECH)
23// Modified : Yuri Kharlov (IHEP, Protvino)
24// 13 September 2000
85218d13 25// Modified : Dmitri Peressounko (RRC "Kurchatov Institute")
26// 6 August 2001
a3dfe79c 27
2f2c3b32 28// --- AliRoot header files ---
29
30#include "AliPHOSEMCAGeometry.h"
31
925e6570 32ClassImp(AliPHOSEMCAGeometry)
2f2c3b32 33
34//____________________________________________________________________________
3663622c 35AliPHOSEMCAGeometry::AliPHOSEMCAGeometry():
36 fAirGapLed(0.f),
37 fStripWallWidthOut(0.f),
38 fStripWallWidthIn(0.f),
39 fTyvecThickness(0.f),
40 fInnerThermoWidthX(0.f),
41 fInnerThermoWidthY(0.f),
42 fInnerThermoWidthZ(0.f),
43 fAirGapWidthX(0.f),
44 fAirGapWidthY(0.f),
45 fAirGapWidthZ(0.f),
46 fCoolerWidthX(0.f),
47 fCoolerWidthY(0.f),
48 fCoolerWidthZ(0.f),
49 fAlCoverThickness(0.f),
50 fOuterThermoWidthXUp(0.f),
51 fOuterThermoWidthXLow(0.f),
52 fOuterThermoWidthY(0.f),
53 fOuterThermoWidthZ(0.f),
54 fAlFrontCoverX(0.f),
55 fAlFrontCoverZ(0.f),
56 fFiberGlassSup2X(0.f),
57 fFiberGlassSup1X(0.f),
58 fFrameHeight(0.f),
59 fFrameThickness(0.f),
60 fAirSpaceFeeX(0.f),
61 fAirSpaceFeeZ(0.f),
62 fAirSpaceFeeY(0.f),
63 fWarmUpperThickness(0.f),
64 fWarmBottomThickness(0.f),
65 fWarmAlCoverWidthX(0.f),
66 fWarmAlCoverWidthY(0.f),
67 fWarmAlCoverWidthZ(0.f),
68 fFiberGlassSup1Y(0.f),
69 fFiberGlassSup2Y(0.f),
70 fTSupportDist(0.f),
71 fTSupport1Thickness(0.f),
72 fTSupport2Thickness(0.f),
73 fTSupport1Width(0.f),
74 fTSupport2Width(0.f),
75 fIPtoOuterCoverDistance(0.f),
76 fIPtoCrystalSurface(0.f),
77 fSupportPlateThickness(0.f),
331c963c 78 fNCellsXInStrip(0),
79 fNCellsZInStrip(0),
3663622c 80 fNStripX(0),
81 fNStripZ(0),
82 fNTSupports(0),
83 fNPhi(0),
84 fNZ(0)
2f2c3b32 85{
86
85218d13 87
2f2c3b32 88 // Initializes the EMC parameters
85218d13 89 // Coordinate system chosen: x across beam, z along beam, y out of beam.
90 // Reference point for all volumes incide module is
91 // center of module in x,z on the upper surface of support beam
2f2c3b32 92
85218d13 93 //Distance from IP to surface of the crystals
94 fIPtoCrystalSurface = 460.0 ;
2f2c3b32 95
2f2c3b32 96
85218d13 97 //CRYSTAL
98
99 fCrystalHalfSize[0] = 2.2 /2 ; //Half-Sizes of crystall
100 fCrystalHalfSize[1] = 18.0 /2 ;
101 fCrystalHalfSize[2] = 2.2 /2 ;
102
103 //APD + preamplifier
2f2c3b32 104
50abc6f8 105 //fPinDiodeSize[0] = 1.71 ; //Values of ame PIN diode
9f418137 106 //fPinDiodeSize[1] = 0.0280 ; // OHO 0.0280 is the depth of active layer
50abc6f8 107 //fPinDiodeSize[2] = 1.61 ;
108
85218d13 109 fPinDiodeHalfSize[0] = 0.5000 /2 ; // APD 5 mm side
110 fPinDiodeHalfSize[1] = 0.0100 /2 ; // APD bulk thickness
111 fPinDiodeHalfSize[2] = 0.5000 /2 ; // APD 5 mm side
112
113 fPreampHalfSize[0] = 1.5 / 2 ; // Preamplifier
114 fPreampHalfSize[1] = 0.5 / 2 ;
115 fPreampHalfSize[2] = 1.5 / 2 ;
116
331c963c 117 //Strip unit (8x2 crystals)
85218d13 118
331c963c 119 fNCellsXInStrip = 8 ; //Number of crystals in strip unit along x-axis
120 fNCellsZInStrip = 2 ; //Number of crystals in strip unit along z-axis
121 fNStripX = 8 ; //Number of strip units across along x-axis
122 fNStripZ = 28 ; //Number of strips along z-axis
85218d13 123
331c963c 124 fStripWallWidthOut = 0.01 ; // Side to another strip
125 fStripWallWidthIn = 0.02 ; // Side betveen crystals in one strip
85218d13 126
978b14f4 127 fTyvecThickness = 0.0175 ; //Thickness of the tyvec
85218d13 128
129 fAirGapLed = 1.5 - 2 * fPreampHalfSize[1] - 2 * fPinDiodeHalfSize[1] ; // Air gap before crystalls for LED system
130 // Note, that Cell in Strip 1.5 longer then crystall
131
132 //---Now calculate thechnical sizes for GEANT implementation
133
134 fWrappedHalfSize[0] = (2*fTyvecThickness + 2*fCrystalHalfSize[0])/2 ; //This will be size of crystall
135 fWrappedHalfSize[1] = fCrystalHalfSize[1] ; //wrapped into tyvec
136 fWrappedHalfSize[2] = (2*fTyvecThickness + 2*fCrystalHalfSize[2])/2 ; //
137
07ca2d72 138 fAirCellHalfSize[0] = fWrappedHalfSize[0] + 0.01;
139 fAirCellHalfSize[1] = (fAirGapLed + 2*fPreampHalfSize[1] +
978b14f4 140 2*fPinDiodeHalfSize[1] + 2*fWrappedHalfSize[1])/2 ; //in strip
07ca2d72 141 fAirCellHalfSize[2] = fWrappedHalfSize[2] + 0.01;
978b14f4 142
143 // fSupportPlateHalfSize[0] = ( (fNCellsXInStrip-1)*fStripWallWidthIn + 2*fStripWallWidthOut +
144 // fNCellsXInStrip * (2*fTyvecThickness + 2*fCrystalHalfSize[0]) )/2 ;
145 fSupportPlateHalfSize[0] = 18.04 /2 ;
146 fSupportPlateHalfSize[1] = 6.0 /2 ;
147// fSupportPlateHalfSize[2] = ( (fNCellsZInStrip-1)*fStripWallWidthIn + 2*fStripWallWidthOut +
148// fNCellsZInStrip * (2*fTyvecThickness + 2*fCrystalHalfSize[2]) )/2;
149 fSupportPlateHalfSize[2] = 4.51 /2 ;
85218d13 150 fSupportPlateThickness = 0.3 ;
151 fSupportPlateInHalfSize[0] = fSupportPlateHalfSize[0] ; //Half-sizes of the air
152 fSupportPlateInHalfSize[1] = fSupportPlateHalfSize[1]-fSupportPlateThickness ; //box in the support plate
153 fSupportPlateInHalfSize[2] = fSupportPlateHalfSize[2]-fSupportPlateThickness/2 ;
154
155 fStripHalfSize[0]= fSupportPlateHalfSize[0] ;
07ca2d72 156 fStripHalfSize[1]= ( 2*fSupportPlateHalfSize[1] + 2*fAirCellHalfSize[1] )/2;
85218d13 157 fStripHalfSize[2]= fSupportPlateHalfSize[2] ;
158
159 // ------- Inner hermoinsulation ---------------
160 fInnerThermoWidthX = 2.0 ; // Width of the innerthermoinsulation across the beam
161 fInnerThermoWidthY = 2.0 ; // Width of the upper cover of innerthermoinsulation
162 fInnerThermoWidthZ = 2.0 ; // Width of the innerthermoinsulation along the beam
163
164 fInnerThermoHalfSize[0] = (2 * fStripHalfSize[0] * fNStripX + 2 * fInnerThermoWidthX ) /2 ;
165 fInnerThermoHalfSize[1] = (2 * fStripHalfSize[1] + fInnerThermoWidthY ) /2 ;
166 fInnerThermoHalfSize[2] = (2 * fStripHalfSize[2] * fNStripZ + 2 * fInnerThermoWidthZ ) /2 ;
167
168 // ------- Air gap between inner thermoinsulation and passive coller ---------
169
170 fAirGapWidthX = 0.2 ; // Width of the air gap across the beam
171 fAirGapWidthY = 0.2 ; // Width of the upper air gap
172 fAirGapWidthZ = 0.2 ; // Width of the air gap along the beam
173
174 fAirGapHalfSize[0] = (2 * fInnerThermoHalfSize[0] + 2 * fAirGapWidthX ) /2 ;
175 fAirGapHalfSize[1] = (2 * fInnerThermoHalfSize[1] + fAirGapWidthY ) /2 ;
176 fAirGapHalfSize[2] = (2 * fInnerThermoHalfSize[2] + 2 * fAirGapWidthZ ) /2 ;
2f2c3b32 177
85218d13 178 // ------- Passive Cooler ------------------------
179
180 fCoolerWidthX = 2.0 ; // Width of the passive coller across the beam
181 fCoolerWidthY = 0.3 ; // Width of the upper cover of cooler
182 fCoolerWidthZ = 2.0 ; // Width of the passive cooler along the beam
183
184 fCoolerHalfSize[0] = (2 * fAirGapHalfSize[0] + 2 * fCoolerWidthX ) /2 ;
185 fCoolerHalfSize[1] = (2 * fAirGapHalfSize[1] + fCoolerWidthY ) /2 ;
186 fCoolerHalfSize[2] = (2 * fAirGapHalfSize[2] + 2 * fCoolerWidthZ ) /2 ;
187
188 // ------- Outer thermoinsulation and Al cover -------------------------------
2f2c3b32 189
85218d13 190 fAlCoverThickness = 0.1 ; //Thickness of the Al cover of the module
191
192 fOuterThermoWidthXUp = 156.0 - fAlCoverThickness ;
193 //width of the upper surface of the PHOS module accross the beam
194 fOuterThermoWidthY = 6.0 ; // with of the upper cover of outer thermoinsulation
195 fOuterThermoWidthZ = 6.0 ; //width of the thermoinsulation along the beam
196
197 fAlFrontCoverX = 6.0 ; //Width of Al strip around fiberglass window: across
198 fAlFrontCoverZ = 6.0 ; //and along the beam
199
200
201 // Calculate distance from IP to upper cover
597e6309 202 fIPtoOuterCoverDistance = fIPtoCrystalSurface - fAirGapLed - fInnerThermoWidthY - fAirGapWidthY -
85218d13 203 fCoolerWidthY - fOuterThermoWidthY - fAlCoverThickness ;
204
205 Float_t tanA = fOuterThermoWidthXUp / (2.*fIPtoOuterCoverDistance) ;
206 // tan(a) where A = angle between IP to center and IP to side across beam
207
208 fOuterThermoWidthXLow = fOuterThermoWidthXUp +
209 2 * (2* fCoolerHalfSize[1] + fOuterThermoWidthY) * tanA
210 - fAlCoverThickness ;
211 //width of the lower surface of the COOL section accross the beam
212
213
214 fOuterThermoParams[0] = fOuterThermoWidthXUp / 2 ; // half-length along x at the z surface positioned at -DZ;
215 fOuterThermoParams[1] = fOuterThermoWidthXLow/ 2 ; // half-length along x at the z surface positioned at +DZ;
216 fOuterThermoParams[2] = ( 2 * fCoolerHalfSize[2] + 2 * fOuterThermoWidthZ ) / 2 ;
217 // `half-length along the y-axis' in out case this is z axis
218 fOuterThermoParams[3] = ( 2* fCoolerHalfSize[1] + fOuterThermoWidthY) /2 ;
219 // `half-length along the z-axis' in our case this is y axis
220
221 fAlCoverParams[0] = fOuterThermoParams[0] + fAlCoverThickness ;
222 fAlCoverParams[1] = fOuterThermoParams[1] + fAlCoverThickness ;
223 fAlCoverParams[2] = fOuterThermoParams[2] + fAlCoverThickness ;
224 fAlCoverParams[3] = fOuterThermoParams[3] + fAlCoverThickness /2 ;
225
226
227 fFiberGlassHalfSize[0] = fAlCoverParams[0] - fAlFrontCoverX ;
228 fFiberGlassHalfSize[1] = fAlCoverParams[2] - fAlFrontCoverZ ; //Note, here other ref. system
229 fFiberGlassHalfSize[2] = fAlCoverThickness / 2 ;
230
231
232 //============Now warm section======================
233 //Al Cover
234 fWarmAlCoverWidthX = 2 * fAlCoverParams[1] ; //Across beam
235 fWarmAlCoverWidthY = 159.0 ; //along beam
236
237 //T-support
238 fTSupport1Thickness = 3.5 ;
239 fTSupport2Thickness = 5.0 ;
240 fTSupport1Width = 10.6 ;
241 fTSupport2Width = 3.1 ;
242 fNTSupports = fNStripX + 1 ;
243 fTSupportDist = 7.48 ;
244
245 //Air space for FEE
246 fAirSpaceFeeX = 148.6 ; //Across beam
247 fAirSpaceFeeY = 135.0 ; //along beam
248 fAirSpaceFeeZ = 19.0 ; //out of beam
249
250 //thermoinsulation
251 fWarmBottomThickness = 4.0 ;
252 fWarmUpperThickness = 4.0 ;
253
254 //Frame
255 fFrameThickness = 5.0 ;
256 fFrameHeight = 15.0 ;
257
258 //Fiberglass support
259 fFiberGlassSup1X = 6.0 ;
4179a471 260 fFiberGlassSup1Y = 3.9 + fWarmUpperThickness ;
85218d13 261
262 fFiberGlassSup2X = 3.0 ;
263 fFiberGlassSup2Y = fFrameHeight ;
264
265 //Now calculate Half-sizes
266
267 fWarmAlCoverWidthZ = fAirSpaceFeeZ + fWarmBottomThickness + fWarmUpperThickness +
268 fTSupport1Thickness + fTSupport2Thickness ;
269
270
271 fWarmAlCoverHalfSize[0] = fWarmAlCoverWidthX / 2 ;
272 fWarmAlCoverHalfSize[1] = fWarmAlCoverWidthY / 2 ;
273 fWarmAlCoverHalfSize[2] = fWarmAlCoverWidthZ / 2 ;
274
2f2c3b32 275
85218d13 276 fWarmThermoHalfSize[0] = fWarmAlCoverHalfSize[0] - fAlCoverThickness ;
277 fWarmThermoHalfSize[1] = fWarmAlCoverHalfSize[1] - fAlCoverThickness ;
278 fWarmThermoHalfSize[2] = fWarmAlCoverHalfSize[2] - fAlCoverThickness /2 ;
279
280
281 //T-support
282 fTSupport1HalfSize[0] = fTSupport1Width /2 ; //Across beam
283 fTSupport1HalfSize[1] = (fAirSpaceFeeY + 2*fFiberGlassSup1X) /2 ; //along beam
284 fTSupport1HalfSize[2] = fTSupport1Thickness /2; //out of beam
285
286 fTSupport2HalfSize[0] = fTSupport2Width /2; //Across beam
287 fTSupport2HalfSize[1] = fTSupport1HalfSize[1] ; //along beam
288 fTSupport2HalfSize[2] = fTSupport2Thickness /2; //out of beam
289
290 //cables
291 fTCables1HalfSize[0] = (2*fTSupport1HalfSize[0]*fNTSupports + (fNTSupports-1)* fTSupportDist) / 2 ; //Across beam
292 fTCables1HalfSize[1] = fTSupport1HalfSize[1] ; //along beam
293 fTCables1HalfSize[2] = fTSupport1HalfSize[2] ; //out of beam
294
295 fTCables2HalfSize[0] = fTCables1HalfSize[0] ; //Across beam
296 fTCables2HalfSize[1] = fTSupport2HalfSize[1] ; //along beam
297 fTCables2HalfSize[2] = fTSupport2HalfSize[2] ; //out of beam
298
299 //frame: we define two frames along beam ...Z and across beam ...X
300 fFrameXHalfSize[0] = (fAirSpaceFeeX + 2 * fFiberGlassSup2X + 2* fFrameThickness) /2 ;
301 fFrameXHalfSize[1] = fFrameThickness /2 ;
302 fFrameXHalfSize[2] = fFrameHeight /2 ;
303
304 fFrameXPosition[0] = 0 ;
305 fFrameXPosition[1] = fAirSpaceFeeY /2 + fFiberGlassSup2X + fFrameXHalfSize[1] ;
306 fFrameXPosition[2] = fWarmThermoHalfSize[2] - fFrameHeight/ 2 - fWarmBottomThickness ;
307
308 fFrameZHalfSize[0] = fFrameThickness /2 ;
309 fFrameZHalfSize[1] = (fAirSpaceFeeY + 2 * fFiberGlassSup2X) /2 ;
310 fFrameZHalfSize[2] = fFrameHeight /2 ;
311
312 fFrameZPosition[0] = fAirSpaceFeeX /2 + fFiberGlassSup2X + fFrameZHalfSize[0] ;
313 fFrameZPosition[1] = 0 ;
314 fFrameZPosition[2] = fWarmThermoHalfSize[2] - fFrameHeight/ 2 - fWarmBottomThickness ;
315
316 //Fiberglass support define 4 fiber glass supports 2 along Z and 2 along X
2f2c3b32 317
85218d13 318 fFGupXHalfSize[0] = fFrameXHalfSize[0] ;
319 fFGupXHalfSize[1] = fFiberGlassSup1X /2 ;
320 fFGupXHalfSize[2] = fFiberGlassSup1Y /2;
321
322 fFGupXPosition[0] = 0 ;
323 fFGupXPosition[1] = fAirSpaceFeeY /2 + fFGupXHalfSize[1] ;
324 fFGupXPosition[2] = fWarmThermoHalfSize[2] - fFrameHeight - fWarmBottomThickness - fFGupXHalfSize[2] ;
325
326 fFGupZHalfSize[0] = fFiberGlassSup1X /2 ;
327 fFGupZHalfSize[1] = fAirSpaceFeeY /2 ;
328 fFGupZHalfSize[2] = fFiberGlassSup1Y /2;
329
330 fFGupZPosition[0] = fAirSpaceFeeX /2 + fFGupZHalfSize[0] ;
331 fFGupZPosition[1] = 0 ;
332 fFGupZPosition[2] = fWarmThermoHalfSize[2] - fFrameHeight - fWarmBottomThickness - fFGupXHalfSize[2] ;
333
334 fFGlowXHalfSize[0] = fFrameXHalfSize[0] - 2*fFrameZHalfSize[0] ;
335 fFGlowXHalfSize[1] = fFiberGlassSup2X /2 ;
336 fFGlowXHalfSize[2] = fFrameXHalfSize[2] ;
337
338 fFGlowXPosition[0] = 0 ;
339 fFGlowXPosition[1] = fAirSpaceFeeY /2 + fFGlowXHalfSize[1] ;
340 fFGlowXPosition[2] = fWarmThermoHalfSize[2] - fWarmBottomThickness - fFGlowXHalfSize[2] ;
341
342 fFGlowZHalfSize[0] = fFiberGlassSup2X /2 ;
343 fFGlowZHalfSize[1] = fAirSpaceFeeY /2 ;
344 fFGlowZHalfSize[2] = fFrameZHalfSize[2] ;
345
346 fFGlowZPosition[0] = fAirSpaceFeeX /2 + fFGlowZHalfSize[0] ;
347 fFGlowZPosition[1] = 0 ;
348 fFGlowZPosition[2] = fWarmThermoHalfSize[2] - fWarmBottomThickness - fFGlowXHalfSize[2] ;
349
350
351 // --- Air Gap for FEE ----
352
353 fFEEAirHalfSize[0] = fAirSpaceFeeX /2 ;
354 fFEEAirHalfSize[1] = fAirSpaceFeeY /2;
355 fFEEAirHalfSize[2] = fAirSpaceFeeZ /2;
356
357 fFEEAirPosition[0] = 0 ;
358 fFEEAirPosition[1] = 0 ;
359 fFEEAirPosition[2] = fWarmThermoHalfSize[2] - fWarmBottomThickness - fFEEAirHalfSize[2] ;
360
361 // --- Calculate the oveol dimentions of the EMC module
2f2c3b32 362
85218d13 363 fEMCParams[3] = fAlCoverParams[3] + fWarmAlCoverHalfSize[2] ; //Size out of beam
364 fEMCParams[0] = fAlCoverParams[0] ; //Upper size across the beam
365 fEMCParams[1] = (fAlCoverParams[1] - fAlCoverParams[0])*fEMCParams[3]/fAlCoverParams[3]
366 + fAlCoverParams[0] ; //Lower size across the beam
367 fEMCParams[2] = fWarmAlCoverHalfSize[1] ; // Size along the beam
368
331c963c 369 fNPhi = fNStripX * fNCellsXInStrip ; //number of crystals across the beam
370 fNZ = fNStripZ * fNCellsZInStrip ; //number of crystals along the beam
2f2c3b32 371}
85218d13 372