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