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