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 |
32 | ClassImp(AliPHOSEMCAGeometry) |
2f2c3b32 |
33 | |
34 | //____________________________________________________________________________ |
3663622c |
35 | AliPHOSEMCAGeometry::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 | |