]>
Commit | Line | Data |
---|---|---|
4c039060 | 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 | /* | |
6e36c0f2 | 17 | $Log$ |
7f36f6bc | 18 | Revision 1.11 2000/06/12 15:35:44 jbarbosa |
19 | Cleaned up version. | |
20 | ||
237c933d | 21 | Revision 1.10 2000/06/09 14:59:25 jbarbosa |
22 | New default version. No setters needed, no hits. | |
23 | ||
c71fc6da | 24 | Revision 1.9 2000/05/31 08:19:38 jbarbosa |
25 | Fixed bug in StepManager | |
26 | ||
27d40190 | 27 | Revision 1.8 2000/05/26 17:30:08 jbarbosa |
28 | Cerenkov angle now stored within cerenkov data structure. | |
29 | ||
b15cdb56 | 30 | Revision 1.7 2000/05/18 10:31:36 jbarbosa |
31 | Fixed positioning of spacers inside freon. | |
32 | Fixed positioning of proximity gap | |
33 | inside methane. | |
34 | Fixed cut on neutral particles in the StepManager. | |
35 | ||
6d31e556 | 36 | Revision 1.6 2000/04/28 11:51:58 morsch |
37 | Dimensions of arrays hits and Ckov_data corrected. | |
38 | ||
8140b37e | 39 | Revision 1.5 2000/04/19 13:28:46 morsch |
40 | Major changes in geometry (parametrised), materials (updated) and | |
41 | step manager (diagnostics) (JB, AM) | |
42 | ||
4c039060 | 43 | */ |
44 | ||
6e36c0f2 | 45 | |
46 | ||
c71fc6da | 47 | ///////////////////////////////////////////////////////////// |
48 | // Manager and hits classes for set: RICH default version // | |
49 | ///////////////////////////////////////////////////////////// | |
ddae0931 | 50 | |
51 | #include <TTUBE.h> | |
52 | #include <TNode.h> | |
53 | #include <TRandom.h> | |
54 | ||
55 | #include "AliRICHv0.h" | |
237c933d | 56 | #include "AliRICHSegmentation.h" |
57 | #include "AliRICHResponse.h" | |
58 | #include "AliRICHSegmentationV0.h" | |
59 | #include "AliRICHResponseV0.h" | |
60 | #include "AliRICHGeometry.h" | |
ddae0931 | 61 | #include "AliRun.h" |
62 | #include "AliMC.h" | |
63 | #include "iostream.h" | |
64 | #include "AliCallf77.h" | |
65 | #include "AliConst.h" | |
6e36c0f2 | 66 | #include "AliPDG.h" |
ddae0931 | 67 | #include "TGeant3.h" |
68 | ||
69 | ClassImp(AliRICHv0) | |
70 | ||
71 | //___________________________________________ | |
72 | AliRICHv0::AliRICHv0() : AliRICH() | |
73 | { | |
237c933d | 74 | |
75 | // Default constructor | |
76 | ||
6e36c0f2 | 77 | //fChambers = 0; |
ddae0931 | 78 | } |
79 | ||
80 | //___________________________________________ | |
81 | AliRICHv0::AliRICHv0(const char *name, const char *title) | |
82 | : AliRICH(name,title) | |
83 | { | |
c71fc6da | 84 | // |
85 | // Version 0 | |
237c933d | 86 | // Default Segmentation, no hits |
87 | AliRICHSegmentationV0* segmentationV0 = new AliRICHSegmentationV0; | |
c71fc6da | 88 | // |
89 | // Segmentation parameters | |
237c933d | 90 | segmentationV0->SetPadSize(0.84,0.80); |
91 | segmentationV0->SetDAnod(0.84/2); | |
c71fc6da | 92 | // |
93 | // Geometry parameters | |
237c933d | 94 | AliRICHGeometry* geometry = new AliRICHGeometry; |
95 | geometry->SetGapThickness(8); | |
96 | geometry->SetProximityGapThickness(.4); | |
97 | geometry->SetQuartzLength(131); | |
98 | geometry->SetQuartzWidth(126.2); | |
99 | geometry->SetQuartzThickness(.5); | |
100 | geometry->SetOuterFreonLength(131); | |
101 | geometry->SetOuterFreonWidth(40.3); | |
102 | geometry->SetInnerFreonLength(131); | |
103 | geometry->SetInnerFreonWidth(40.3); | |
104 | geometry->SetFreonThickness(1); | |
c71fc6da | 105 | // |
106 | // Response parameters | |
237c933d | 107 | AliRICHResponseV0* responseV0 = new AliRICHResponseV0; |
108 | responseV0->SetSigmaIntegration(5.); | |
109 | responseV0->SetChargeSlope(40.); | |
110 | responseV0->SetChargeSpread(0.18, 0.18); | |
111 | responseV0->SetMaxAdc(1024); | |
112 | responseV0->SetAlphaFeedback(0.05); | |
113 | responseV0->SetEIonisation(26.e-9); | |
114 | responseV0->SetSqrtKx3(0.77459667); | |
115 | responseV0->SetKx2(0.962); | |
116 | responseV0->SetKx4(0.379); | |
117 | responseV0->SetSqrtKy3(0.77459667); | |
118 | responseV0->SetKy2(0.962); | |
119 | responseV0->SetKy4(0.379); | |
120 | responseV0->SetPitch(0.25); | |
c71fc6da | 121 | // |
122 | // | |
123 | // AliRICH *RICH = (AliRICH *) gAlice->GetDetector("RICH"); | |
124 | ||
237c933d | 125 | fCkovNumber=0; |
126 | fFreonProd=0; | |
7f36f6bc | 127 | Int_t i=0; |
c71fc6da | 128 | |
237c933d | 129 | fChambers = new TObjArray(kNCH); |
7f36f6bc | 130 | for (i=0; i<kNCH; i++) { |
c71fc6da | 131 | |
132 | (*fChambers)[i] = new AliRICHChamber(); | |
133 | ||
134 | } | |
135 | ||
7f36f6bc | 136 | for (i=0; i<kNCH; i++) { |
237c933d | 137 | SetGeometryModel(i,geometry); |
138 | SetSegmentationModel(i, segmentationV0); | |
139 | SetResponseModel(i, responseV0); | |
c71fc6da | 140 | SetNsec(i,1); |
6e36c0f2 | 141 | } |
ddae0931 | 142 | } |
143 | ||
144 | ||
145 | //___________________________________________ | |
146 | void AliRICHv0::CreateGeometry() | |
147 | { | |
148 | // | |
149 | // Create the geometry for RICH version 1 | |
150 | // | |
151 | // Modified by: N. Colonna (INFN - BARI, Nicola.Colonna@ba.infn.it) | |
152 | // R.A. Fini (INFN - BARI, Rosanna.Fini@ba.infn.it) | |
153 | // R.A. Loconsole (Bari University, loco@riscom.ba.infn.it) | |
154 | // | |
155 | //Begin_Html | |
156 | /* | |
157 | <img src="picts/AliRICHv1.gif"> | |
158 | */ | |
159 | //End_Html | |
160 | //Begin_Html | |
161 | /* | |
162 | <img src="picts/AliRICHv1Tree.gif"> | |
163 | */ | |
164 | //End_Html | |
6e36c0f2 | 165 | |
237c933d | 166 | AliRICH *pRICH = (AliRICH *) gAlice->GetDetector("RICH"); |
6e36c0f2 | 167 | AliRICHSegmentation* segmentation; |
168 | AliRICHGeometry* geometry; | |
169 | AliRICHChamber* iChamber; | |
170 | ||
237c933d | 171 | iChamber = &(pRICH->Chamber(0)); |
6e36c0f2 | 172 | segmentation=iChamber->GetSegmentationModel(0); |
173 | geometry=iChamber->GetGeometryModel(); | |
6d31e556 | 174 | |
175 | Float_t distance; | |
176 | distance = geometry->GetFreonThickness()/2 + geometry->GetQuartzThickness() + geometry->GetGapThickness(); | |
177 | geometry->SetRadiatorToPads(distance); | |
ddae0931 | 178 | |
179 | ||
180 | Int_t *idtmed = fIdtmed->GetArray()-999; | |
181 | ||
182 | Int_t i; | |
183 | Float_t zs; | |
184 | Int_t idrotm[1099]; | |
185 | Float_t par[3]; | |
186 | ||
187 | // --- Define the RICH detector | |
188 | // External aluminium box | |
189 | par[0] = 71.1; | |
6e36c0f2 | 190 | par[1] = 11.5; //Original Settings |
ddae0931 | 191 | par[2] = 73.15; |
6e36c0f2 | 192 | /*par[0] = 73.15; |
193 | par[1] = 11.5; | |
194 | par[2] = 71.1;*/ | |
ddae0931 | 195 | gMC->Gsvolu("RICH", "BOX ", idtmed[1009], par, 3); |
196 | ||
197 | // Sensitive part of the whole RICH | |
198 | par[0] = 64.8; | |
6e36c0f2 | 199 | par[1] = 11.5; //Original Settings |
ddae0931 | 200 | par[2] = 66.55; |
6e36c0f2 | 201 | /*par[0] = 66.55; |
202 | par[1] = 11.5; | |
203 | par[2] = 64.8;*/ | |
ddae0931 | 204 | gMC->Gsvolu("SRIC", "BOX ", idtmed[1000], par, 3); |
205 | ||
206 | // Honeycomb | |
207 | par[0] = 63.1; | |
6e36c0f2 | 208 | par[1] = .188; //Original Settings |
ddae0931 | 209 | par[2] = 66.55; |
6e36c0f2 | 210 | /*par[0] = 66.55; |
211 | par[1] = .188; | |
212 | par[2] = 63.1;*/ | |
ddae0931 | 213 | gMC->Gsvolu("HONE", "BOX ", idtmed[1001], par, 3); |
214 | ||
215 | // Aluminium sheet | |
216 | par[0] = 63.1; | |
6e36c0f2 | 217 | par[1] = .025; //Original Settings |
ddae0931 | 218 | par[2] = 66.55; |
6e36c0f2 | 219 | /*par[0] = 66.5; |
220 | par[1] = .025; | |
221 | par[2] = 63.1;*/ | |
ddae0931 | 222 | gMC->Gsvolu("ALUM", "BOX ", idtmed[1009], par, 3); |
223 | ||
224 | // Quartz | |
6e36c0f2 | 225 | par[0] = geometry->GetQuartzWidth()/2; |
226 | par[1] = geometry->GetQuartzThickness()/2; | |
227 | par[2] = geometry->GetQuartzLength()/2; | |
228 | /*par[0] = 63.1; | |
229 | par[1] = .25; //Original Settings | |
230 | par[2] = 65.5;*/ | |
231 | /*par[0] = geometry->GetQuartzWidth()/2; | |
232 | par[1] = geometry->GetQuartzThickness()/2; | |
233 | par[2] = geometry->GetQuartzLength()/2;*/ | |
234 | //printf("\n\n\n\n\n\n\n\\n\n\n\n Gap Thickness: %f %f %f\n\n\n\n\n\n\n\n\n\n\n\n\n\n",par[0],par[1],par[2]); | |
ddae0931 | 235 | gMC->Gsvolu("QUAR", "BOX ", idtmed[1002], par, 3); |
236 | ||
237 | // Spacers (cylinders) | |
238 | par[0] = 0.; | |
239 | par[1] = .5; | |
6e36c0f2 | 240 | par[2] = geometry->GetFreonThickness()/2; |
ddae0931 | 241 | gMC->Gsvolu("SPAC", "TUBE", idtmed[1002], par, 3); |
242 | ||
243 | // Opaque quartz | |
244 | par[0] = 61.95; | |
6e36c0f2 | 245 | par[1] = .2; //Original Settings |
ddae0931 | 246 | par[2] = 66.5; |
6e36c0f2 | 247 | /*par[0] = 66.5; |
248 | par[1] = .2; | |
249 | par[2] = 61.95;*/ | |
ddae0931 | 250 | gMC->Gsvolu("OQUA", "BOX ", idtmed[1007], par, 3); |
251 | ||
6e36c0f2 | 252 | // Frame of opaque quartz |
253 | par[0] = geometry->GetOuterFreonWidth()/2; | |
254 | par[1] = geometry->GetFreonThickness()/2; | |
255 | par[2] = geometry->GetOuterFreonLength()/2 + 1; | |
256 | /*par[0] = 20.65; | |
257 | par[1] = .5; //Original Settings | |
258 | par[2] = 66.5;*/ | |
259 | /*par[0] = 66.5; | |
ddae0931 | 260 | par[1] = .5; |
6e36c0f2 | 261 | par[2] = 20.65;*/ |
262 | gMC->Gsvolu("OQF1", "BOX ", idtmed[1007], par, 3); | |
263 | ||
264 | par[0] = geometry->GetInnerFreonWidth()/2; | |
265 | par[1] = geometry->GetFreonThickness()/2; | |
266 | par[2] = geometry->GetInnerFreonLength()/2 + 1; | |
267 | gMC->Gsvolu("OQF2", "BOX ", idtmed[1007], par, 3); | |
ddae0931 | 268 | |
269 | // Little bar of opaque quartz | |
6e36c0f2 | 270 | par[0] = .275; |
271 | par[1] = geometry->GetQuartzThickness()/2; | |
272 | par[2] = geometry->GetInnerFreonLength()/2 - 2.4; | |
273 | /*par[0] = .275; | |
274 | par[1] = .25; //Original Settings | |
275 | par[2] = 63.1;*/ | |
276 | /*par[0] = 63.1; | |
ddae0931 | 277 | par[1] = .25; |
6e36c0f2 | 278 | par[2] = .275;*/ |
ddae0931 | 279 | gMC->Gsvolu("BARR", "BOX ", idtmed[1007], par, 3); |
280 | ||
281 | // Freon | |
6e36c0f2 | 282 | par[0] = geometry->GetOuterFreonWidth()/2; |
283 | par[1] = geometry->GetFreonThickness()/2; | |
284 | par[2] = geometry->GetOuterFreonLength()/2; | |
285 | /*par[0] = 20.15; | |
286 | par[1] = .5; //Original Settings | |
287 | par[2] = 65.5;*/ | |
288 | /*par[0] = 65.5; | |
ddae0931 | 289 | par[1] = .5; |
6e36c0f2 | 290 | par[2] = 20.15;*/ |
291 | gMC->Gsvolu("FRE1", "BOX ", idtmed[1003], par, 3); | |
292 | ||
293 | par[0] = geometry->GetInnerFreonWidth()/2; | |
294 | par[1] = geometry->GetFreonThickness()/2; | |
295 | par[2] = geometry->GetInnerFreonLength()/2; | |
296 | gMC->Gsvolu("FRE2", "BOX ", idtmed[1003], par, 3); | |
ddae0931 | 297 | |
298 | // Methane | |
299 | par[0] = 64.8; | |
6e36c0f2 | 300 | par[1] = geometry->GetGapThickness()/2; |
301 | //printf("\n\n\n\n\n\n\n\\n\n\n\n Gap Thickness: %f\n\n\n\n\n\n\n\n\n\n\n\n\n\n",par[1]); | |
ddae0931 | 302 | par[2] = 64.8; |
303 | gMC->Gsvolu("META", "BOX ", idtmed[1004], par, 3); | |
304 | ||
305 | // Methane gap | |
306 | par[0] = 64.8; | |
6e36c0f2 | 307 | par[1] = geometry->GetProximityGapThickness()/2; |
308 | //printf("\n\n\n\n\n\n\n\\n\n\n\n Gap Thickness: %f\n\n\n\n\n\n\n\n\n\n\n\n\n\n",par[1]); | |
ddae0931 | 309 | par[2] = 64.8; |
310 | gMC->Gsvolu("GAP ", "BOX ", idtmed[1008], par, 3); | |
311 | ||
312 | // CsI photocathode | |
313 | par[0] = 64.8; | |
314 | par[1] = .25; | |
315 | par[2] = 64.8; | |
316 | gMC->Gsvolu("CSI ", "BOX ", idtmed[1005], par, 3); | |
317 | ||
318 | // Anode grid | |
319 | par[0] = 0.; | |
6e36c0f2 | 320 | par[1] = .001; |
ddae0931 | 321 | par[2] = 20.; |
322 | gMC->Gsvolu("GRID", "TUBE", idtmed[1006], par, 3); | |
323 | ||
324 | // --- Places the detectors defined with GSVOLU | |
325 | // Place material inside RICH | |
326 | gMC->Gspos("SRIC", 1, "RICH", 0., 0., 0., 0, "ONLY"); | |
327 | ||
6e36c0f2 | 328 | gMC->Gspos("ALUM", 1, "SRIC", 0., 1.276 - geometry->GetGapThickness()/2 - geometry->GetQuartzThickness() - geometry->GetFreonThickness()- .4 -.05 - .376 -.025, 0., 0, "ONLY"); |
329 | gMC->Gspos("HONE", 1, "SRIC", 0., 1.276- geometry->GetGapThickness()/2 - geometry->GetQuartzThickness() - geometry->GetFreonThickness()- .4 -.05 - .188, 0., 0, "ONLY"); | |
330 | gMC->Gspos("ALUM", 2, "SRIC", 0., 1.276 - geometry->GetGapThickness()/2 - geometry->GetQuartzThickness() - geometry->GetFreonThickness()- .4 - .025, 0., 0, "ONLY"); | |
331 | gMC->Gspos("OQUA", 1, "SRIC", 0., 1.276 - geometry->GetGapThickness()/2 - geometry->GetQuartzThickness() - geometry->GetFreonThickness()- .2, 0., 0, "ONLY"); | |
ddae0931 | 332 | |
333 | AliMatrix(idrotm[1019], 0., 0., 90., 0., 90., 90.); | |
334 | ||
6e36c0f2 | 335 | Int_t nspacers = (Int_t)(TMath::Abs(geometry->GetInnerFreonLength()/14.4)); |
336 | //printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n Spacers:%d\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",nspacers); | |
6d31e556 | 337 | |
c71fc6da | 338 | //printf("Nspacers: %d", nspacers); |
6e36c0f2 | 339 | |
340 | //for (i = 1; i <= 9; ++i) { | |
341 | //zs = (5 - i) * 14.4; //Original settings | |
6d31e556 | 342 | for (i = 0; i < nspacers; i++) { |
6e36c0f2 | 343 | zs = (TMath::Abs(nspacers/2) - i) * 14.4; |
344 | gMC->Gspos("SPAC", i, "FRE1", 6.7, 0., zs, idrotm[1019], "ONLY"); //Original settings | |
345 | //gMC->Gspos("SPAC", i, "FRE1", zs, 0., 6.7, idrotm[1019], "ONLY"); | |
ddae0931 | 346 | } |
6e36c0f2 | 347 | //for (i = 10; i <= 18; ++i) { |
348 | //zs = (14 - i) * 14.4; //Original settings | |
349 | for (i = nspacers; i < nspacers*2; ++i) { | |
350 | zs = (nspacers + TMath::Abs(nspacers/2) - i) * 14.4; | |
351 | gMC->Gspos("SPAC", i, "FRE1", -6.7, 0., zs, idrotm[1019], "ONLY"); //Original settings | |
352 | //gMC->Gspos("SPAC", i, "FRE1", zs, 0., -6.7, idrotm[1019], "ONLY"); | |
353 | } | |
354 | ||
355 | //for (i = 1; i <= 9; ++i) { | |
356 | //zs = (5 - i) * 14.4; //Original settings | |
6d31e556 | 357 | for (i = 0; i < nspacers; i++) { |
6e36c0f2 | 358 | zs = (TMath::Abs(nspacers/2) - i) * 14.4; |
359 | gMC->Gspos("SPAC", i, "FRE2", 6.7, 0., zs, idrotm[1019], "ONLY"); //Original settings | |
360 | //gMC->Gspos("SPAC", i, "FRE2", zs, 0., 6.7, idrotm[1019], "ONLY"); | |
361 | } | |
362 | //for (i = 10; i <= 18; ++i) { | |
363 | //zs = (5 - i) * 14.4; //Original settings | |
364 | for (i = nspacers; i < nspacers*2; ++i) { | |
365 | zs = (nspacers + TMath::Abs(nspacers/2) - i) * 14.4; | |
366 | gMC->Gspos("SPAC", i, "FRE2", -6.7, 0., zs, idrotm[1019], "ONLY"); //Original settings | |
367 | //gMC->Gspos("SPAC", i, "FRE2", zs, 0., -6.7, idrotm[1019], "ONLY"); | |
ddae0931 | 368 | } |
369 | ||
6e36c0f2 | 370 | /*gMC->Gspos("FRE1", 1, "OQF1", 0., 0., 0., 0, "ONLY"); |
371 | gMC->Gspos("FRE2", 1, "OQF2", 0., 0., 0., 0, "ONLY"); | |
372 | gMC->Gspos("OQF1", 1, "SRIC", 31.3, -4.724, 41.3, 0, "ONLY"); | |
373 | gMC->Gspos("OQF2", 2, "SRIC", 0., -4.724, 0., 0, "ONLY"); | |
374 | gMC->Gspos("OQF1", 3, "SRIC", -31.3, -4.724, -41.3, 0, "ONLY"); | |
375 | gMC->Gspos("BARR", 1, "QUAR", -21.65, 0., 0., 0, "ONLY"); //Original settings | |
376 | gMC->Gspos("BARR", 2, "QUAR", 21.65, 0., 0., 0, "ONLY"); //Original settings | |
ddae0931 | 377 | gMC->Gspos("QUAR", 1, "SRIC", 0., -3.974, 0., 0, "ONLY"); |
378 | gMC->Gspos("GAP ", 1, "META", 0., 4.8, 0., 0, "ONLY"); | |
379 | gMC->Gspos("META", 1, "SRIC", 0., 1.276, 0., 0, "ONLY"); | |
6e36c0f2 | 380 | gMC->Gspos("CSI ", 1, "SRIC", 0., 6.526, 0., 0, "ONLY");*/ |
381 | ||
382 | ||
383 | gMC->Gspos("FRE1", 1, "OQF1", 0., 0., 0., 0, "ONLY"); | |
384 | gMC->Gspos("FRE2", 1, "OQF2", 0., 0., 0., 0, "ONLY"); | |
385 | gMC->Gspos("OQF1", 1, "SRIC", geometry->GetOuterFreonWidth()/2 + geometry->GetInnerFreonWidth()/2, 1.276 - geometry->GetGapThickness()/2- geometry->GetQuartzThickness() -geometry->GetFreonThickness()/2, 0., 0, "ONLY"); //Original settings (31.3) | |
386 | gMC->Gspos("OQF2", 2, "SRIC", 0., 1.276 - geometry->GetGapThickness()/2 - geometry->GetQuartzThickness() - geometry->GetFreonThickness()/2, 0., 0, "ONLY"); //Original settings | |
387 | gMC->Gspos("OQF1", 3, "SRIC", - (geometry->GetOuterFreonWidth()/2 + geometry->GetInnerFreonWidth()/2), 1.276 - geometry->GetGapThickness()/2 - geometry->GetQuartzThickness() - geometry->GetFreonThickness()/2, 0., 0, "ONLY"); //Original settings (-31.3) | |
388 | gMC->Gspos("BARR", 1, "QUAR", -21.65, 0., 0., 0, "ONLY"); //Original settings | |
389 | gMC->Gspos("BARR", 2, "QUAR", 21.65, 0., 0., 0, "ONLY"); //Original settings | |
390 | gMC->Gspos("QUAR", 1, "SRIC", 0., 1.276 - geometry->GetGapThickness()/2 - geometry->GetQuartzThickness()/2, 0., 0, "ONLY"); | |
6d31e556 | 391 | gMC->Gspos("GAP ", 1, "META", 0., geometry->GetGapThickness()/2 - geometry->GetProximityGapThickness()/2 - 0.0001, 0., 0, "ONLY"); |
6e36c0f2 | 392 | gMC->Gspos("META", 1, "SRIC", 0., 1.276, 0., 0, "ONLY"); |
6d31e556 | 393 | gMC->Gspos("CSI ", 1, "SRIC", 0., 1.276 + geometry->GetGapThickness()/2 + .25, 0., 0, "ONLY"); |
394 | ||
c71fc6da | 395 | //printf("Position of the gap: %f to %f\n", 1.276 + geometry->GetGapThickness()/2 - geometry->GetProximityGapThickness()/2 - .2, 1.276 + geometry->GetGapThickness()/2 - geometry->GetProximityGapThickness()/2 + .2); |
ddae0931 | 396 | |
397 | // Place RICH inside ALICE apparatus | |
398 | ||
399 | AliMatrix(idrotm[1000], 90., 0., 70.69, 90., 19.31, -90.); | |
400 | AliMatrix(idrotm[1001], 90., -20., 90., 70., 0., 0.); | |
401 | AliMatrix(idrotm[1002], 90., 0., 90., 90., 0., 0.); | |
402 | AliMatrix(idrotm[1003], 90., 20., 90., 110., 0., 0.); | |
403 | AliMatrix(idrotm[1004], 90., 340., 108.2, 70., 18.2, 70.); | |
404 | AliMatrix(idrotm[1005], 90., 0., 109.31, 90., 19.31, 90.); | |
405 | AliMatrix(idrotm[1006], 90., 20., 108.2, 110., 18.2, 110.); | |
406 | ||
407 | gMC->Gspos("RICH", 1, "ALIC", 0., 471.9, 165.26, idrotm[1000], "ONLY"); | |
408 | gMC->Gspos("RICH", 2, "ALIC", 171., 470., 0., idrotm[1001], "ONLY"); | |
409 | gMC->Gspos("RICH", 3, "ALIC", 0., 500., 0., idrotm[1002], "ONLY"); | |
410 | gMC->Gspos("RICH", 4, "ALIC", -171., 470., 0., idrotm[1003], "ONLY"); | |
411 | gMC->Gspos("RICH", 5, "ALIC", 161.4, 443.4, -165.3, idrotm[1004], "ONLY"); | |
412 | gMC->Gspos("RICH", 6, "ALIC", 0., 471.9, -165.3, idrotm[1005], "ONLY"); | |
413 | gMC->Gspos("RICH", 7, "ALIC", -161.4, 443.4, -165.3, idrotm[1006], "ONLY"); | |
414 | ||
415 | } | |
416 | ||
417 | ||
418 | //___________________________________________ | |
419 | void AliRICHv0::CreateMaterials() | |
420 | { | |
421 | // | |
422 | // *** DEFINITION OF AVAILABLE RICH MATERIALS *** | |
423 | // ORIGIN : NICK VAN EIJNDHOVEN | |
424 | // Modified by: N. Colonna (INFN - BARI, Nicola.Colonna@ba.infn.it) | |
425 | // R.A. Fini (INFN - BARI, Rosanna.Fini@ba.infn.it) | |
426 | // R.A. Loconsole (Bari University, loco@riscom.ba.infn.it) | |
427 | // | |
237c933d | 428 | Int_t isxfld = gAlice->Field()->Integ(); |
429 | Float_t sxmgmx = gAlice->Field()->Max(); | |
6e36c0f2 | 430 | Int_t i; |
431 | ||
432 | /************************************Antonnelo's Values (14-vectors)*****************************************/ | |
433 | /* | |
ddae0931 | 434 | Float_t ppckov[14] = { 5.63e-9,5.77e-9,5.9e-9,6.05e-9,6.2e-9,6.36e-9,6.52e-9, |
435 | 6.7e-9,6.88e-9,7.08e-9,7.3e-9,7.51e-9,7.74e-9,8e-9 }; | |
237c933d | 436 | Float_t rIndexQuarz[14] = { 1.528309,1.533333, |
ddae0931 | 437 | 1.538243,1.544223,1.550568,1.55777, |
438 | 1.565463,1.574765,1.584831,1.597027, | |
439 | 1.611858,1.6277,1.6472,1.6724 }; | |
237c933d | 440 | Float_t rIndexOpaqueQuarz[14] = { 1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1. }; |
441 | Float_t rIndexMethane[14] = { 1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1. }; | |
442 | Float_t rIndexGrid[14] = { 1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1. }; | |
443 | Float_t abscoFreon[14] = { 179.0987,179.0987, | |
6e36c0f2 | 444 | 179.0987,179.0987,179.0987,142.92,56.65,13.95,10.43,7.07,2.03,.5773,.33496,0. }; |
237c933d | 445 | //Float_t abscoFreon[14] = { 1e-5,1e-5,1e-5,1e-5,1e-5,1e-5,1e-5,1e-5,1e-5, |
6e36c0f2 | 446 | // 1e-5,1e-5,1e-5,1e-5,1e-5 }; |
237c933d | 447 | Float_t abscoQuarz[14] = { 64.035,39.98,35.665,31.262,27.527,22.815,21.04,17.52, |
6e36c0f2 | 448 | 14.177,9.282,4.0925,1.149,.3627,.10857 }; |
237c933d | 449 | Float_t abscoOpaqueQuarz[14] = { 1e-5,1e-5,1e-5,1e-5,1e-5,1e-5,1e-5,1e-5,1e-5, |
ddae0931 | 450 | 1e-5,1e-5,1e-5,1e-5,1e-5 }; |
237c933d | 451 | Float_t abscoCsI[14] = { 1e-4,1e-4,1e-4,1e-4,1e-4,1e-4,1e-4,1e-4,1e-4,1e-4, |
ddae0931 | 452 | 1e-4,1e-4,1e-4,1e-4 }; |
237c933d | 453 | Float_t abscoMethane[14] = { 1e6,1e6,1e6,1e6,1e6,1e6,1e6,1e6,1e6,1e6,1e6, |
ddae0931 | 454 | 1e6,1e6,1e6 }; |
237c933d | 455 | Float_t abscoGrid[14] = { 1e-4,1e-4,1e-4,1e-4,1e-4,1e-4,1e-4,1e-4,1e-4,1e-4, |
ddae0931 | 456 | 1e-4,1e-4,1e-4,1e-4 }; |
237c933d | 457 | Float_t efficAll[14] = { 1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1. }; |
458 | Float_t efficCsI[14] = { 6e-4,.005,.0075,.01125,.045,.117,.135,.16575, | |
6e36c0f2 | 459 | .17425,.1785,.1836,.1904,.1938,.221 }; |
237c933d | 460 | Float_t efficGrid[14] = { 1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1. }; |
6e36c0f2 | 461 | */ |
462 | ||
463 | ||
464 | /**********************************End of Antonnelo's Values**********************************/ | |
465 | ||
466 | /**********************************Values from rich_media.f (31-vectors)**********************************/ | |
467 | ||
468 | ||
469 | //Photons energy intervals | |
470 | Float_t ppckov[26]; | |
471 | for (i=0;i<26;i++) | |
472 | { | |
473 | ppckov[i] = (Float_t(i)*0.1+5.5)*1e-9; | |
474 | //printf ("Energy intervals: %e\n",ppckov[i]); | |
475 | } | |
476 | ||
477 | ||
478 | //Refraction index for quarz | |
237c933d | 479 | Float_t rIndexQuarz[26]; |
6e36c0f2 | 480 | Float_t e1= 10.666; |
481 | Float_t e2= 18.125; | |
482 | Float_t f1= 46.411; | |
483 | Float_t f2= 228.71; | |
484 | for (i=0;i<26;i++) | |
485 | { | |
486 | Float_t ene=ppckov[i]*1e9; | |
487 | Float_t a=f1/(e1*e1 - ene*ene); | |
488 | Float_t b=f2/(e2*e2 - ene*ene); | |
237c933d | 489 | rIndexQuarz[i] = TMath::Sqrt(1. + a + b ); |
490 | //printf ("rIndexQuarz: %e\n",rIndexQuarz[i]); | |
6e36c0f2 | 491 | } |
492 | ||
493 | //Refraction index for opaque quarz, methane and grid | |
237c933d | 494 | Float_t rIndexOpaqueQuarz[26]; |
495 | Float_t rIndexMethane[26]; | |
496 | Float_t rIndexGrid[26]; | |
6e36c0f2 | 497 | for (i=0;i<26;i++) |
498 | { | |
237c933d | 499 | rIndexOpaqueQuarz[i]=1; |
500 | rIndexMethane[i]=1.000444; | |
501 | rIndexGrid[i]=1; | |
502 | //printf ("rIndexOpaqueQuarz , etc: %e, %e, %e\n",rIndexOpaqueQuarz[i], rIndexMethane[i], rIndexGrid[i]=1); | |
6e36c0f2 | 503 | } |
504 | ||
505 | //Absorption index for freon | |
237c933d | 506 | Float_t abscoFreon[26] = {179.0987, 179.0987, 179.0987, 179.0987, 179.0987, 179.0987, 179.0987, 179.0987, |
6e36c0f2 | 507 | 179.0987, 142.9206, 56.64957, 25.58622, 13.95293, 12.03905, 10.42953, 8.804196, |
508 | 7.069031, 4.461292, 2.028366, 1.293013, .577267, .40746, .334964, 0., 0., 0.}; | |
509 | ||
510 | //Absorption index for quarz | |
511 | /*Float_t Qzt [21] = {.0,.0,.005,.04,.35,.647,.769,.808,.829,.844,.853,.858,.869,.887,.903,.902,.902, | |
512 | .906,.907,.907,.907}; | |
513 | Float_t Wavl2[] = {150.,155.,160.0,165.0,170.0,175.0,180.0,185.0,190.0,195.0,200.0,205.0,210.0, | |
514 | 215.0,220.0,225.0,230.0,235.0,240.0,245.0,250.0}; | |
237c933d | 515 | Float_t abscoQuarz[31]; |
6e36c0f2 | 516 | for (Int_t i=0;i<31;i++) |
517 | { | |
518 | Float_t Xlam = 1237.79 / (ppckov[i]*1e9); | |
237c933d | 519 | if (Xlam <= 160) abscoQuarz[i] = 0; |
520 | if (Xlam > 250) abscoQuarz[i] = 1; | |
6e36c0f2 | 521 | else |
522 | { | |
523 | for (Int_t j=0;j<21;j++) | |
524 | { | |
525 | //printf ("Passed\n"); | |
526 | if (Xlam > Wavl2[j] && Xlam < Wavl2[j+1]) | |
527 | { | |
528 | Float_t Dabs = (Qzt[j+1] - Qzt[j])/(Wavl2[j+1] - Wavl2[j]); | |
529 | Float_t Abso = Qzt[j] + Dabs*(Xlam - Wavl2[j]); | |
237c933d | 530 | abscoQuarz[i] = -5.0/(TMath::Log(Abso)); |
6e36c0f2 | 531 | } |
532 | } | |
533 | } | |
237c933d | 534 | printf ("abscoQuarz: %e abscoFreon: %e for energy: %e\n",abscoQuarz[i],abscoFreon[i],ppckov[i]); |
6e36c0f2 | 535 | }*/ |
536 | ||
237c933d | 537 | /*Float_t abscoQuarz[31] = {49.64211, 48.41296, 47.46989, 46.50492, 45.13682, 44.47883, 43.1929 , 41.30922, 40.5943 , |
6e36c0f2 | 538 | 39.82956, 38.98623, 38.6247 , 38.43448, 37.41084, 36.22575, 33.74852, 30.73901, 24.25086, |
539 | 17.94531, 11.88753, 5.99128, 3.83503, 2.36661, 1.53155, 1.30582, 1.08574, .8779708, | |
540 | .675275, 0., 0., 0.}; | |
541 | ||
542 | for (Int_t i=0;i<31;i++) | |
543 | { | |
237c933d | 544 | abscoQuarz[i] = abscoQuarz[i]/10; |
6e36c0f2 | 545 | }*/ |
546 | ||
237c933d | 547 | Float_t abscoQuarz [26] = {105.8, 65.52, 48.58, 42.85, 35.79, 31.262, 28.598, 27.527, 25.007, 22.815, 21.004, |
6e36c0f2 | 548 | 19.266, 17.525, 15.878, 14.177, 11.719, 9.282, 6.62, 4.0925, 2.601, 1.149, .667, .3627, |
549 | .192, .1497, .10857}; | |
550 | ||
551 | //Absorption index for methane | |
237c933d | 552 | Float_t abscoMethane[26]; |
6e36c0f2 | 553 | for (i=0;i<26;i++) |
554 | { | |
237c933d | 555 | abscoMethane[i]=AbsoCH4(ppckov[i]*1e9); |
556 | //printf("abscoMethane: %e for energy: %e\n", abscoMethane[i],ppckov[i]*1e9); | |
6e36c0f2 | 557 | } |
558 | ||
559 | //Absorption index for opaque quarz, csi and grid, efficiency for all and grid | |
237c933d | 560 | Float_t abscoOpaqueQuarz[26]; |
561 | Float_t abscoCsI[26]; | |
562 | Float_t abscoGrid[26]; | |
563 | Float_t efficAll[26]; | |
564 | Float_t efficGrid[26]; | |
6e36c0f2 | 565 | for (i=0;i<26;i++) |
566 | { | |
237c933d | 567 | abscoOpaqueQuarz[i]=1e-5; |
568 | abscoCsI[i]=1e-4; | |
569 | abscoGrid[i]=1e-4; | |
570 | efficAll[i]=1; | |
571 | efficGrid[i]=1; | |
572 | //printf ("All must be 1: %e, %e, %e, %e, %e\n",abscoOpaqueQuarz[i],abscoCsI[i],abscoGrid[i],efficAll[i],efficGrid[i]); | |
6e36c0f2 | 573 | } |
574 | ||
575 | //Efficiency for csi | |
576 | ||
237c933d | 577 | Float_t efficCsI[26] = {0.000199999995, 0.000600000028, 0.000699999975, 0.00499999989, 0.00749999983, 0.010125, |
6e36c0f2 | 578 | 0.0242999997, 0.0405000001, 0.0688500032, 0.105299994, 0.121500008, 0.141749993, 0.157949999, |
579 | 0.162, 0.166050002, 0.167669997, 0.174299985, 0.176789999, 0.179279998, 0.182599992, 0.18592, | |
580 | 0.187579989, 0.189239994, 0.190899998, 0.207499996, 0.215799987}; | |
581 | ||
582 | ||
583 | ||
584 | //FRESNEL LOSS CORRECTION FOR PERPENDICULAR INCIDENCE AND | |
585 | //UNPOLARIZED PHOTONS | |
586 | ||
587 | for (i=0;i<26;i++) | |
588 | { | |
237c933d | 589 | efficCsI[i] = efficCsI[i]/(1.-Fresnel(ppckov[i]*1e9,1.,0)); |
6e36c0f2 | 590 | //printf ("Fresnel result: %e for energy: %e\n",Fresnel(ppckov[i]*1e9,1.,0),ppckov[i]*1e9); |
591 | } | |
592 | ||
593 | /*******************************************End of rich_media.f***************************************/ | |
594 | ||
595 | ||
596 | ||
597 | ||
598 | ||
ddae0931 | 599 | |
600 | Float_t afre[2], agri, amet[2], aqua[2], ahon, zfre[2], zgri, zhon, | |
601 | zmet[2], zqua[2]; | |
602 | Int_t nlmatfre; | |
603 | Float_t densquao; | |
604 | Int_t nlmatmet, nlmatqua; | |
237c933d | 605 | Float_t wmatquao[2], rIndexFreon[26]; |
ddae0931 | 606 | Float_t aquao[2], epsil, stmin, zquao[2]; |
607 | Int_t nlmatquao; | |
608 | Float_t radlal, densal, tmaxfd, deemax, stemax; | |
609 | Float_t aal, zal, radlgri, densfre, radlhon, densgri, denshon,densqua, densmet, wmatfre[2], wmatmet[2], wmatqua[2]; | |
610 | ||
611 | Int_t *idtmed = fIdtmed->GetArray()-999; | |
612 | ||
613 | TGeant3 *geant3 = (TGeant3*) gMC; | |
614 | ||
615 | // --- Photon energy (GeV) | |
616 | // --- Refraction indexes | |
6e36c0f2 | 617 | for (i = 0; i < 26; ++i) { |
237c933d | 618 | rIndexFreon[i] = ppckov[i] * .0172 * 1e9 + 1.177; |
619 | //printf ("rIndexFreon: %e \n efficCsI: %e for energy: %e\n",rIndexFreon[i], efficCsI[i], ppckov[i]); | |
ddae0931 | 620 | } |
6e36c0f2 | 621 | |
ddae0931 | 622 | // --- Detection efficiencies (quantum efficiency for CsI) |
623 | // --- Define parameters for honeycomb. | |
624 | // Used carbon of equivalent rad. lenght | |
625 | ||
626 | ahon = 12.01; | |
627 | zhon = 6.; | |
628 | denshon = 2.265; | |
629 | radlhon = 18.8; | |
630 | ||
631 | // --- Parameters to include in GSMIXT, relative to Quarz (SiO2) | |
632 | ||
633 | aqua[0] = 28.09; | |
634 | aqua[1] = 16.; | |
635 | zqua[0] = 14.; | |
636 | zqua[1] = 8.; | |
637 | densqua = 2.64; | |
638 | nlmatqua = -2; | |
639 | wmatqua[0] = 1.; | |
640 | wmatqua[1] = 2.; | |
641 | ||
642 | // --- Parameters to include in GSMIXT, relative to opaque Quarz (SiO2) | |
643 | ||
644 | aquao[0] = 28.09; | |
645 | aquao[1] = 16.; | |
646 | zquao[0] = 14.; | |
647 | zquao[1] = 8.; | |
648 | densquao = 2.64; | |
649 | nlmatquao = -2; | |
650 | wmatquao[0] = 1.; | |
651 | wmatquao[1] = 2.; | |
652 | ||
653 | // --- Parameters to include in GSMIXT, relative to Freon (C6F14) | |
654 | ||
655 | afre[0] = 12.; | |
656 | afre[1] = 19.; | |
657 | zfre[0] = 6.; | |
658 | zfre[1] = 9.; | |
659 | densfre = 1.7; | |
660 | nlmatfre = -2; | |
661 | wmatfre[0] = 6.; | |
662 | wmatfre[1] = 14.; | |
663 | ||
664 | // --- Parameters to include in GSMIXT, relative to methane (CH4) | |
665 | ||
666 | amet[0] = 12.01; | |
667 | amet[1] = 1.; | |
668 | zmet[0] = 6.; | |
669 | zmet[1] = 1.; | |
670 | densmet = 7.17e-4; | |
671 | nlmatmet = -2; | |
672 | wmatmet[0] = 1.; | |
673 | wmatmet[1] = 4.; | |
674 | ||
675 | // --- Parameters to include in GSMIXT, relative to anode grid (Cu) | |
676 | ||
677 | agri = 63.54; | |
678 | zgri = 29.; | |
679 | densgri = 8.96; | |
680 | radlgri = 1.43; | |
681 | ||
682 | // --- Parameters to include in GSMATE related to aluminium sheet | |
683 | ||
684 | aal = 26.98; | |
685 | zal = 13.; | |
686 | densal = 2.7; | |
687 | radlal = 8.9; | |
688 | ||
689 | AliMaterial(1, "Air $", 14.61, 7.3, .001205, 30420., 67500); | |
690 | AliMaterial(6, "HON", ahon, zhon, denshon, radlhon, 0); | |
691 | AliMaterial(16, "CSI", ahon, zhon, denshon, radlhon, 0); | |
692 | AliMixture(20, "QUA", aqua, zqua, densqua, nlmatqua, wmatqua); | |
693 | AliMixture(21, "QUAO", aquao, zquao, densquao, nlmatquao, wmatquao); | |
694 | AliMixture(30, "FRE", afre, zfre, densfre, nlmatfre, wmatfre); | |
695 | AliMixture(40, "MET", amet, zmet, densmet, nlmatmet, wmatmet); | |
696 | AliMixture(41, "METG", amet, zmet, densmet, nlmatmet, wmatmet); | |
697 | AliMaterial(11, "GRI", agri, zgri, densgri, radlgri, 0); | |
698 | AliMaterial(50, "ALUM", aal, zal, densal, radlal, 0); | |
699 | ||
700 | tmaxfd = -10.; | |
701 | stemax = -.1; | |
702 | deemax = -.2; | |
703 | epsil = .001; | |
704 | stmin = -.001; | |
705 | ||
237c933d | 706 | AliMedium(1, "DEFAULT MEDIUM AIR$", 1, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); |
707 | AliMedium(2, "HONEYCOMB$", 6, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); | |
708 | AliMedium(3, "QUARZO$", 20, 1, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); | |
709 | AliMedium(4, "FREON$", 30, 1, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); | |
710 | AliMedium(5, "METANO$", 40, 1, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); | |
711 | AliMedium(6, "CSI$", 16, 1, isxfld, sxmgmx,tmaxfd, stemax, deemax, epsil, stmin); | |
712 | AliMedium(7, "GRIGLIA$", 11, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); | |
713 | AliMedium(8, "QUARZOO$", 21, 1, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); | |
714 | AliMedium(9, "GAP$", 41, 1, isxfld, sxmgmx,tmaxfd, .1, -deemax, epsil, -stmin); | |
715 | AliMedium(10, "ALUMINUM$", 50, 1, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); | |
716 | ||
717 | ||
718 | geant3->Gsckov(idtmed[1000], 26, ppckov, abscoMethane, efficAll, rIndexMethane); | |
719 | geant3->Gsckov(idtmed[1001], 26, ppckov, abscoMethane, efficAll, rIndexMethane); | |
720 | geant3->Gsckov(idtmed[1002], 26, ppckov, abscoQuarz, efficAll,rIndexQuarz); | |
721 | geant3->Gsckov(idtmed[1003], 26, ppckov, abscoFreon, efficAll,rIndexFreon); | |
722 | geant3->Gsckov(idtmed[1004], 26, ppckov, abscoMethane, efficAll, rIndexMethane); | |
723 | geant3->Gsckov(idtmed[1005], 26, ppckov, abscoCsI, efficCsI, rIndexMethane); | |
724 | geant3->Gsckov(idtmed[1006], 26, ppckov, abscoGrid, efficGrid, rIndexGrid); | |
725 | geant3->Gsckov(idtmed[1007], 26, ppckov, abscoOpaqueQuarz, efficAll, rIndexOpaqueQuarz); | |
726 | geant3->Gsckov(idtmed[1008], 26, ppckov, abscoMethane, efficAll, rIndexMethane); | |
727 | geant3->Gsckov(idtmed[1009], 26, ppckov, abscoGrid, efficGrid, rIndexGrid); | |
6e36c0f2 | 728 | } |
729 | ||
730 | //___________________________________________ | |
731 | ||
732 | Float_t AliRICHv0::Fresnel(Float_t ene,Float_t pdoti, Bool_t pola) | |
733 | { | |
734 | ||
735 | //ENE(EV), PDOTI=COS(INC.ANG.), PDOTR=COS(POL.PLANE ROT.ANG.) | |
736 | ||
737 | Float_t en[36] = {5.0,5.1,5.2,5.3,5.4,5.5,5.6,5.7,5.8,5.9,6.0,6.1,6.2, | |
738 | 6.3,6.4,6.5,6.6,6.7,6.8,6.9,7.0,7.1,7.2,7.3,7.4,7.5,7.6,7.7, | |
739 | 7.8,7.9,8.0,8.1,8.2,8.3,8.4,8.5}; | |
740 | ||
741 | ||
742 | Float_t csin[36] = {2.14,2.21,2.33,2.48,2.76,2.97,2.99,2.59,2.81,3.05, | |
743 | 2.86,2.53,2.55,2.66,2.79,2.96,3.18,3.05,2.84,2.81,2.38,2.11, | |
744 | 2.01,2.13,2.39,2.73,3.08,3.15,2.95,2.73,2.56,2.41,2.12,1.95, | |
745 | 1.72,1.53}; | |
746 | ||
747 | Float_t csik[36] = {0.,0.,0.,0.,0.,0.196,0.408,0.208,0.118,0.49,0.784,0.543, | |
748 | 0.424,0.404,0.371,0.514,0.922,1.102,1.139,1.376,1.461,1.253,0.878, | |
749 | 0.69,0.612,0.649,0.824,1.347,1.571,1.678,1.763,1.857,1.824,1.824, | |
750 | 1.714,1.498}; | |
751 | Float_t xe=ene; | |
752 | Int_t j=Int_t(xe*10)-49; | |
753 | Float_t cn=csin[j]+((csin[j+1]-csin[j])/0.1)*(xe-en[j]); | |
754 | Float_t ck=csik[j]+((csik[j+1]-csik[j])/0.1)*(xe-en[j]); | |
755 | ||
756 | //FORMULAE FROM HANDBOOK OF OPTICS, 33.23 OR | |
757 | //W.R. HUNTER, J.O.S.A. 54 (1964),15 , J.O.S.A. 55(1965),1197 | |
758 | ||
759 | Float_t sinin=TMath::Sqrt(1-pdoti*pdoti); | |
760 | Float_t tanin=sinin/pdoti; | |
761 | ||
762 | Float_t c1=cn*cn-ck*ck-sinin*sinin; | |
763 | Float_t c2=4*cn*cn*ck*ck; | |
764 | Float_t aO=TMath::Sqrt(0.5*(TMath::Sqrt(c1*c1+c2)+c1)); | |
765 | Float_t b2=0.5*(TMath::Sqrt(c1*c1+c2)-c1); | |
766 | ||
767 | Float_t rs=((aO-pdoti)*(aO-pdoti)+b2)/((aO+pdoti)*(aO+pdoti)+b2); | |
768 | Float_t rp=rs*((aO-sinin*tanin)*(aO-sinin*tanin)+b2)/((aO+sinin*tanin)*(aO+sinin*tanin)+b2); | |
769 | ||
770 | ||
771 | //CORRECTION FACTOR FOR SURFACE ROUGHNESS | |
772 | //B.J. STAGG APPLIED OPTICS, 30(1991),4113 | |
773 | ||
774 | Float_t sigraf=18.; | |
775 | Float_t lamb=1240/ene; | |
776 | Float_t fresn; | |
777 | ||
778 | Float_t rO=TMath::Exp(-(4*TMath::Pi()*pdoti*sigraf/lamb)*(4*TMath::Pi()*pdoti*sigraf/lamb)); | |
779 | ||
780 | if(pola) | |
781 | { | |
782 | Float_t pdotr=0.8; //DEGREE OF POLARIZATION : 1->P , -1->S | |
783 | fresn=0.5*(rp*(1+pdotr)+rs*(1-pdotr)); | |
784 | } | |
785 | else | |
786 | fresn=0.5*(rp+rs); | |
787 | ||
788 | fresn = fresn*rO; | |
789 | return(fresn); | |
790 | } | |
791 | ||
792 | //__________________________________________ | |
793 | ||
794 | Float_t AliRICHv0::AbsoCH4(Float_t x) | |
795 | { | |
796 | ||
237c933d | 797 | //KLOSCH,SCH4(9),WL(9),EM(9),ALENGTH(31) |
6e36c0f2 | 798 | Float_t sch4[9] = {.12,.16,.23,.38,.86,2.8,7.9,28.,80.}; //MB X 10^22 |
799 | //Float_t wl[9] = {153.,152.,151.,150.,149.,148.,147.,146.,145}; | |
800 | Float_t em[9] = {8.1,8.158,8.212,8.267,8.322,8.378,8.435,8.493,8.55}; | |
237c933d | 801 | const Float_t kLosch=2.686763E19; // LOSCHMIDT NUMBER IN CM-3 |
802 | const Float_t kIgas1=100, kIgas2=0, kOxy=10., kWater=5., kPressure=750.,kTemperature=283.; | |
803 | Float_t pn=kPressure/760.; | |
804 | Float_t tn=kTemperature/273.16; | |
6e36c0f2 | 805 | |
806 | ||
807 | // ------- METHANE CROSS SECTION ----------------- | |
808 | // ASTROPH. J. 214, L47 (1978) | |
809 | ||
810 | Float_t sm=0; | |
811 | if (x<7.75) | |
812 | sm=.06e-22; | |
813 | ||
814 | if(x>=7.75 && x<=8.1) | |
815 | { | |
816 | Float_t c0=-1.655279e-1; | |
817 | Float_t c1=6.307392e-2; | |
818 | Float_t c2=-8.011441e-3; | |
819 | Float_t c3=3.392126e-4; | |
820 | sm=(c0+c1*x+c2*x*x+c3*x*x*x)*1.e-18; | |
821 | } | |
822 | ||
823 | if (x> 8.1) | |
824 | { | |
825 | Int_t j=0; | |
826 | while (x<=em[j] && x>=em[j+1]) | |
827 | { | |
828 | j++; | |
829 | Float_t a=(sch4[j+1]-sch4[j])/(em[j+1]-em[j]); | |
830 | sm=(sch4[j]+a*(x-em[j]))*1e-22; | |
831 | } | |
832 | } | |
833 | ||
237c933d | 834 | Float_t dm=(kIgas1/100.)*(1.-((kOxy+kWater)/1.e6))*kLosch*pn/tn; |
6e36c0f2 | 835 | Float_t abslm=1./sm/dm; |
ddae0931 | 836 | |
6e36c0f2 | 837 | // ------- ISOBUTHANE CROSS SECTION -------------- |
838 | // i-C4H10 (ai) abs. length from curves in | |
839 | // Lu-McDonald paper for BARI RICH workshop . | |
840 | // ----------------------------------------------------------- | |
841 | ||
842 | Float_t ai; | |
843 | Float_t absli; | |
237c933d | 844 | if (kIgas2 != 0) |
6e36c0f2 | 845 | { |
846 | if (x<7.25) | |
847 | ai=100000000.; | |
848 | ||
849 | if(x>=7.25 && x<7.375) | |
850 | ai=24.3; | |
851 | ||
852 | if(x>=7.375) | |
853 | ai=.0000000001; | |
854 | ||
237c933d | 855 | Float_t si = 1./(ai*kLosch*273.16/293.); // ISOB. CRO.SEC.IN CM2 |
856 | Float_t di=(kIgas2/100.)*(1.-((kOxy+kWater)/1.e6))*kLosch*pn/tn; | |
6e36c0f2 | 857 | absli =1./si/di; |
858 | } | |
859 | else | |
860 | absli=1.e18; | |
861 | // --------------------------------------------------------- | |
862 | // | |
863 | // transmission of O2 | |
864 | // | |
865 | // y= path in cm, x=energy in eV | |
866 | // so= cross section for UV absorption in cm2 | |
867 | // do= O2 molecular density in cm-3 | |
868 | // --------------------------------------------------------- | |
869 | ||
870 | Float_t abslo; | |
871 | Float_t so=0; | |
872 | if(x>=6.0) | |
873 | { | |
874 | if(x>=6.0 && x<6.5) | |
875 | { | |
876 | so=3.392709e-13 * TMath::Exp(2.864104 *x); | |
877 | so=so*1e-18; | |
878 | } | |
879 | ||
880 | if(x>=6.5 && x<7.0) | |
881 | { | |
882 | so=2.910039e-34 * TMath::Exp(10.3337*x); | |
883 | so=so*1e-18; | |
884 | } | |
885 | ||
886 | ||
887 | if (x>=7.0) | |
888 | { | |
889 | Float_t a0=-73770.76; | |
890 | Float_t a1=46190.69; | |
891 | Float_t a2=-11475.44; | |
892 | Float_t a3=1412.611; | |
893 | Float_t a4=-86.07027; | |
894 | Float_t a5=2.074234; | |
895 | so= a0+(a1*x)+(a2*x*x)+(a3*x*x*x)+(a4*x*x*x*x)+(a5*x*x*x*x*x); | |
896 | so=so*1e-18; | |
897 | } | |
898 | ||
237c933d | 899 | Float_t dox=(kOxy/1e6)*kLosch*pn/tn; |
6e36c0f2 | 900 | abslo=1./so/dox; |
901 | } | |
902 | else | |
903 | abslo=1.e18; | |
904 | // --------------------------------------------------------- | |
905 | // | |
906 | // transmission of H2O | |
907 | // | |
908 | // y= path in cm, x=energy in eV | |
909 | // sw= cross section for UV absorption in cm2 | |
910 | // dw= H2O molecular density in cm-3 | |
911 | // --------------------------------------------------------- | |
912 | ||
913 | Float_t abslw; | |
914 | ||
915 | Float_t b0=29231.65; | |
916 | Float_t b1=-15807.74; | |
917 | Float_t b2=3192.926; | |
918 | Float_t b3=-285.4809; | |
919 | Float_t b4=9.533944; | |
920 | ||
921 | if(x>6.75) | |
922 | { | |
923 | Float_t sw= b0+(b1*x)+(b2*x*x)+(b3*x*x*x)+(b4*x*x*x*x); | |
924 | sw=sw*1e-18; | |
237c933d | 925 | Float_t dw=(kWater/1e6)*kLosch*pn/tn; |
6e36c0f2 | 926 | abslw=1./sw/dw; |
927 | } | |
928 | else | |
929 | abslw=1.e18; | |
930 | ||
931 | // --------------------------------------------------------- | |
932 | ||
933 | Float_t alength=1./(1./abslm+1./absli+1./abslo+1./abslw); | |
934 | return (alength); | |
ddae0931 | 935 | } |
936 | ||
6e36c0f2 | 937 | |
938 | ||
939 | ||
ddae0931 | 940 | //___________________________________________ |
941 | ||
942 | void AliRICHv0::Init() | |
943 | { | |
c71fc6da | 944 | |
945 | printf("*********************************** RICH_INIT ***********************************\n"); | |
946 | printf("* *\n"); | |
947 | printf("* AliRICHv0 Default version started *\n"); | |
948 | printf("* *\n"); | |
949 | ||
950 | ||
951 | AliRICHSegmentation* segmentation; | |
952 | AliRICHGeometry* geometry; | |
953 | AliRICHResponse* response; | |
954 | ||
955 | ||
ddae0931 | 956 | // |
957 | // Initialize Tracking Chambers | |
958 | // | |
237c933d | 959 | for (Int_t i=1; i<kNCH; i++) { |
6e36c0f2 | 960 | //printf ("i:%d",i); |
961 | ( (AliRICHChamber*) (*fChambers)[i])->Init(); | |
962 | } | |
ddae0931 | 963 | |
964 | // | |
965 | // Set the chamber (sensitive region) GEANT identifier | |
966 | ||
6e36c0f2 | 967 | ((AliRICHChamber*)(*fChambers)[0])->SetGid(1); |
968 | ((AliRICHChamber*)(*fChambers)[1])->SetGid(2); | |
969 | ((AliRICHChamber*)(*fChambers)[2])->SetGid(3); | |
970 | ((AliRICHChamber*)(*fChambers)[3])->SetGid(4); | |
971 | ((AliRICHChamber*)(*fChambers)[4])->SetGid(5); | |
972 | ((AliRICHChamber*)(*fChambers)[5])->SetGid(6); | |
973 | ((AliRICHChamber*)(*fChambers)[6])->SetGid(7); | |
974 | ||
975 | Float_t pos1[3]={0,471.8999,165.2599}; | |
976 | Chamber(0).SetChamberTransform(pos1[0],pos1[1],pos1[2],new TRotMatrix("rot993","rot993",90,0,70.69,90,19.30999,-90)); | |
977 | ||
978 | Float_t pos2[3]={171,470,0}; | |
979 | Chamber(1).SetChamberTransform(pos2[0],pos2[1],pos2[2],new TRotMatrix("rot994","rot994",90,-20,90,70,0,0)); | |
980 | ||
981 | Float_t pos3[3]={0,500,0}; | |
982 | Chamber(2).SetChamberTransform(pos3[0],pos3[1],pos3[2],new TRotMatrix("rot995","rot995",90,0,90,90,0,0)); | |
983 | ||
984 | Float_t pos4[3]={-171,470,0}; | |
985 | Chamber(3).SetChamberTransform(pos4[0],pos4[1],pos4[2], new TRotMatrix("rot996","rot996",90,20,90,110,0,0)); | |
986 | ||
987 | Float_t pos5[3]={161.3999,443.3999,-165.3}; | |
988 | Chamber(4).SetChamberTransform(pos5[0],pos5[1],pos5[2],new TRotMatrix("rot997","rot997",90,340,108.1999,70,18.2,70)); | |
989 | ||
990 | Float_t pos6[3]={0., 471.9, -165.3,}; | |
991 | Chamber(5).SetChamberTransform(pos6[0],pos6[1],pos6[2],new TRotMatrix("rot998","rot998",90,0,109.3099,90,19.30999,90)); | |
992 | ||
993 | Float_t pos7[3]={-161.399,443.3999,-165.3}; | |
994 | Chamber(6).SetChamberTransform(pos7[0],pos7[1],pos7[2],new TRotMatrix("rot999","rot999",90,20,108.1999,110,18.2,110)); | |
ddae0931 | 995 | |
c71fc6da | 996 | segmentation=Chamber(0).GetSegmentationModel(0); |
997 | geometry=Chamber(0).GetGeometryModel(); | |
998 | response=Chamber(0).GetResponseModel(); | |
999 | ||
1000 | ||
1001 | printf("* Pads : %3dx%3d *\n",segmentation->Npx(),segmentation->Npy()); | |
1002 | printf("* Pad size : %5.2f x%5.2f mm2 *\n",segmentation->Dpx(),segmentation->Dpy()); | |
1003 | printf("* Gap Thickness : %5.1f mm *\n",geometry->GetGapThickness()); | |
1004 | printf("* Radiator Width : %5.1f mm *\n",geometry->GetQuartzWidth()); | |
1005 | printf("* Radiator Length : %5.1f mm *\n",geometry->GetQuartzLength()); | |
1006 | printf("* Freon Thickness : %5.1f mm *\n",geometry->GetFreonThickness()); | |
1007 | printf("* Charge Slope : %5.1f ADC *\n",response->ChargeSlope()); | |
1008 | printf("* Feedback Prob. : %5.2f %% *\n",response->AlphaFeedback()); | |
1009 | printf("* *\n"); | |
1010 | printf("* Success! *\n"); | |
1011 | printf("* *\n"); | |
1012 | printf("*********************************************************************************\n"); | |
1013 | ||
ddae0931 | 1014 | } |
1015 | ||
1016 | //___________________________________________ | |
1017 | void AliRICHv0::StepManager() | |
1018 | { | |
c71fc6da | 1019 | //Dummy step manager |
ddae0931 | 1020 | } |
1021 | ||
1022 | ||
1023 | //___________________________________________ |