Test on kDebugevel
[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$
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
72ClassImp(AliRICHv0)
73
74//___________________________________________
75AliRICHv0::AliRICHv0() : AliRICH()
76{
237c933d 77
78// Default constructor
79
6e36c0f2 80 //fChambers = 0;
ddae0931 81}
82
83//___________________________________________
84AliRICHv0::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//___________________________________________
150void 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//___________________________________________
423void 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
737Float_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
799Float_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
947void 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//___________________________________________
1022void AliRICHv0::StepManager()
1023{
c71fc6da 1024 //Dummy step manager
ddae0931 1025}
1026
1027
1028//___________________________________________