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