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