1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
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)
25 // Modified : Dmitri Peressounko (RRC "Kurchatov Institute")
28 // --- AliRoot header files ---
30 #include "AliPHOSEMCAGeometry.h"
32 ClassImp(AliPHOSEMCAGeometry) ;
34 //____________________________________________________________________________
35 AliPHOSEMCAGeometry::AliPHOSEMCAGeometry()
39 // Initializes the EMC parameters
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
44 //Distance from IP to surface of the crystals
45 fIPtoCrystalSurface = 460.0 ;
50 fCrystalHalfSize[0] = 2.2 /2 ; //Half-Sizes of crystall
51 fCrystalHalfSize[1] = 18.0 /2 ;
52 fCrystalHalfSize[2] = 2.2 /2 ;
56 //fPinDiodeSize[0] = 1.71 ; //Values of ame PIN diode
57 //fPinDiodeSize[1] = 0.0280 ; // OHO 0.0280 is the depth of active layer
58 //fPinDiodeSize[2] = 1.61 ;
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
64 fPreampHalfSize[0] = 1.5 / 2 ; // Preamplifier
65 fPreampHalfSize[1] = 0.5 / 2 ;
66 fPreampHalfSize[2] = 1.5 / 2 ;
70 fNCellsInStrip = 8 ; //Number of crystals in strip
71 fNStripX = 8 ; //Number of strips acros beam
72 fNStripZ = 56 ; //Number of strips along beam
74 fStripWallWidthOut = 0.01 ; // Side to another strip
75 fStripWallWidthIn = 0.02 ; // Side betveen crystals in one strip
77 fTyvecThickness = 0.01 ; //Thickness of the tyvec
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
82 //---Now calculate thechnical sizes for GEANT implementation
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 ; //
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] ; //
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 ;
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 ;
103 fStripHalfSize[0]= fSupportPlateHalfSize[0] ;
104 fStripHalfSize[1]= ( 2*fSupportPlateHalfSize[1] + 2*fAirCellHalfSize[1] )/2;
105 fStripHalfSize[2]= fSupportPlateHalfSize[2] ;
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
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 ;
116 // ------- Air gap between inner thermoinsulation and passive coller ---------
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
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 ;
126 // ------- Passive Cooler ------------------------
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
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 ;
136 // ------- Outer thermoinsulation and Al cover -------------------------------
138 fAlCoverThickness = 0.1 ; //Thickness of the Al cover of the module
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
145 fAlFrontCoverX = 6.0 ; //Width of Al strip around fiberglass window: across
146 fAlFrontCoverZ = 6.0 ; //and along the beam
149 // Calculate distance from IP to upper cover
150 fIPtoOuterCoverDistance = fIPtoCrystalSurface - fAirGapLed - fInnerThermoWidthY - fAirGapWidthY -
151 fCoolerWidthY - fOuterThermoWidthY - fAlCoverThickness ;
153 Float_t tanA = fOuterThermoWidthXUp / (2.*fIPtoOuterCoverDistance) ;
154 // tan(a) where A = angle between IP to center and IP to side across beam
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
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
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 ;
175 fFiberGlassHalfSize[0] = fAlCoverParams[0] - fAlFrontCoverX ;
176 fFiberGlassHalfSize[1] = fAlCoverParams[2] - fAlFrontCoverZ ; //Note, here other ref. system
177 fFiberGlassHalfSize[2] = fAlCoverThickness / 2 ;
180 //============Now warm section======================
182 fWarmAlCoverWidthX = 2 * fAlCoverParams[1] ; //Across beam
183 fWarmAlCoverWidthY = 159.0 ; //along beam
186 fTSupport1Thickness = 3.5 ;
187 fTSupport2Thickness = 5.0 ;
188 fTSupport1Width = 10.6 ;
189 fTSupport2Width = 3.1 ;
190 fNTSupports = fNStripX + 1 ;
191 fTSupportDist = 7.48 ;
194 fAirSpaceFeeX = 148.6 ; //Across beam
195 fAirSpaceFeeY = 135.0 ; //along beam
196 fAirSpaceFeeZ = 19.0 ; //out of beam
199 fWarmBottomThickness = 4.0 ;
200 fWarmUpperThickness = 4.0 ;
203 fFrameThickness = 5.0 ;
204 fFrameHeight = 15.0 ;
207 fFiberGlassSup1X = 6.0 ;
208 fFiberGlassSup1Y = 4.0 + fWarmUpperThickness ;
210 fFiberGlassSup2X = 3.0 ;
211 fFiberGlassSup2Y = fFrameHeight ;
213 //Now calculate Half-sizes
215 fWarmAlCoverWidthZ = fAirSpaceFeeZ + fWarmBottomThickness + fWarmUpperThickness +
216 fTSupport1Thickness + fTSupport2Thickness ;
219 fWarmAlCoverHalfSize[0] = fWarmAlCoverWidthX / 2 ;
220 fWarmAlCoverHalfSize[1] = fWarmAlCoverWidthY / 2 ;
221 fWarmAlCoverHalfSize[2] = fWarmAlCoverWidthZ / 2 ;
224 fWarmThermoHalfSize[0] = fWarmAlCoverHalfSize[0] - fAlCoverThickness ;
225 fWarmThermoHalfSize[1] = fWarmAlCoverHalfSize[1] - fAlCoverThickness ;
226 fWarmThermoHalfSize[2] = fWarmAlCoverHalfSize[2] - fAlCoverThickness /2 ;
230 fTSupport1HalfSize[0] = fTSupport1Width /2 ; //Across beam
231 fTSupport1HalfSize[1] = (fAirSpaceFeeY + 2*fFiberGlassSup1X) /2 ; //along beam
232 fTSupport1HalfSize[2] = fTSupport1Thickness /2; //out of beam
234 fTSupport2HalfSize[0] = fTSupport2Width /2; //Across beam
235 fTSupport2HalfSize[1] = fTSupport1HalfSize[1] ; //along beam
236 fTSupport2HalfSize[2] = fTSupport2Thickness /2; //out of beam
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
243 fTCables2HalfSize[0] = fTCables1HalfSize[0] ; //Across beam
244 fTCables2HalfSize[1] = fTSupport2HalfSize[1] ; //along beam
245 fTCables2HalfSize[2] = fTSupport2HalfSize[2] ; //out of beam
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 ;
252 fFrameXPosition[0] = 0 ;
253 fFrameXPosition[1] = fAirSpaceFeeY /2 + fFiberGlassSup2X + fFrameXHalfSize[1] ;
254 fFrameXPosition[2] = fWarmThermoHalfSize[2] - fFrameHeight/ 2 - fWarmBottomThickness ;
256 fFrameZHalfSize[0] = fFrameThickness /2 ;
257 fFrameZHalfSize[1] = (fAirSpaceFeeY + 2 * fFiberGlassSup2X) /2 ;
258 fFrameZHalfSize[2] = fFrameHeight /2 ;
260 fFrameZPosition[0] = fAirSpaceFeeX /2 + fFiberGlassSup2X + fFrameZHalfSize[0] ;
261 fFrameZPosition[1] = 0 ;
262 fFrameZPosition[2] = fWarmThermoHalfSize[2] - fFrameHeight/ 2 - fWarmBottomThickness ;
264 //Fiberglass support define 4 fiber glass supports 2 along Z and 2 along X
266 fFGupXHalfSize[0] = fFrameXHalfSize[0] ;
267 fFGupXHalfSize[1] = fFiberGlassSup1X /2 ;
268 fFGupXHalfSize[2] = fFiberGlassSup1Y /2;
270 fFGupXPosition[0] = 0 ;
271 fFGupXPosition[1] = fAirSpaceFeeY /2 + fFGupXHalfSize[1] ;
272 fFGupXPosition[2] = fWarmThermoHalfSize[2] - fFrameHeight - fWarmBottomThickness - fFGupXHalfSize[2] ;
274 fFGupZHalfSize[0] = fFiberGlassSup1X /2 ;
275 fFGupZHalfSize[1] = fAirSpaceFeeY /2 ;
276 fFGupZHalfSize[2] = fFiberGlassSup1Y /2;
278 fFGupZPosition[0] = fAirSpaceFeeX /2 + fFGupZHalfSize[0] ;
279 fFGupZPosition[1] = 0 ;
280 fFGupZPosition[2] = fWarmThermoHalfSize[2] - fFrameHeight - fWarmBottomThickness - fFGupXHalfSize[2] ;
282 fFGlowXHalfSize[0] = fFrameXHalfSize[0] - 2*fFrameZHalfSize[0] ;
283 fFGlowXHalfSize[1] = fFiberGlassSup2X /2 ;
284 fFGlowXHalfSize[2] = fFrameXHalfSize[2] ;
286 fFGlowXPosition[0] = 0 ;
287 fFGlowXPosition[1] = fAirSpaceFeeY /2 + fFGlowXHalfSize[1] ;
288 fFGlowXPosition[2] = fWarmThermoHalfSize[2] - fWarmBottomThickness - fFGlowXHalfSize[2] ;
290 fFGlowZHalfSize[0] = fFiberGlassSup2X /2 ;
291 fFGlowZHalfSize[1] = fAirSpaceFeeY /2 ;
292 fFGlowZHalfSize[2] = fFrameZHalfSize[2] ;
294 fFGlowZPosition[0] = fAirSpaceFeeX /2 + fFGlowZHalfSize[0] ;
295 fFGlowZPosition[1] = 0 ;
296 fFGlowZPosition[2] = fWarmThermoHalfSize[2] - fWarmBottomThickness - fFGlowXHalfSize[2] ;
299 // --- Air Gap for FEE ----
301 fFEEAirHalfSize[0] = fAirSpaceFeeX /2 ;
302 fFEEAirHalfSize[1] = fAirSpaceFeeY /2;
303 fFEEAirHalfSize[2] = fAirSpaceFeeZ /2;
305 fFEEAirPosition[0] = 0 ;
306 fFEEAirPosition[1] = 0 ;
307 fFEEAirPosition[2] = fWarmThermoHalfSize[2] - fWarmBottomThickness - fFEEAirHalfSize[2] ;
309 // --- Calculate the oveol dimentions of the EMC module
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
317 fNPhi = fNStripX * fNCellsInStrip ; //Number of crystalls across beam
318 fNZ = fNStripZ ; //number of crystals along beam
321 //____________________________________________________________________________