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