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