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