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