]> git.uio.no Git - u/mrichter/AliRoot.git/blob - RICH/AliRICHv0.cxx
Test on kDebugevel
[u/mrichter/AliRoot.git] / RICH / AliRICHv0.cxx
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 /*
17   $Log$
18   Revision 1.12  2000/06/13 13:06:28  jbarbosa
19   Fixed compiling error for HP (multiple declaration)
20
21   Revision 1.11  2000/06/12 15:35:44  jbarbosa
22   Cleaned up version.
23
24   Revision 1.10  2000/06/09 14:59:25  jbarbosa
25   New default version. No setters needed, no hits.
26
27   Revision 1.9  2000/05/31 08:19:38  jbarbosa
28   Fixed bug in StepManager
29
30   Revision 1.8  2000/05/26 17:30:08  jbarbosa
31   Cerenkov angle now stored within cerenkov data structure.
32
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
39   Revision 1.6  2000/04/28 11:51:58  morsch
40    Dimensions of arrays hits and Ckov_data corrected.
41
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
46 */
47
48
49
50 /////////////////////////////////////////////////////////////
51 //  Manager and hits classes for set: RICH default version //
52 /////////////////////////////////////////////////////////////
53
54 #include <TTUBE.h>
55 #include <TNode.h> 
56 #include <TRandom.h> 
57
58 #include "AliRICHv0.h"
59 #include "AliRICHSegmentation.h"
60 #include "AliRICHResponse.h"
61 #include "AliRICHSegmentationV0.h"
62 #include "AliRICHResponseV0.h"
63 #include "AliRICHGeometry.h"
64 #include "AliRun.h"
65 #include "AliMC.h"
66 #include "iostream.h"
67 #include "AliCallf77.h"
68 #include "AliConst.h" 
69 #include "AliPDG.h" 
70 #include "TGeant3.h"
71
72 ClassImp(AliRICHv0)
73     
74 //___________________________________________
75 AliRICHv0::AliRICHv0() : AliRICH()
76 {
77
78 // Default constructor
79
80     //fChambers = 0;
81 }
82
83 //___________________________________________
84 AliRICHv0::AliRICHv0(const char *name, const char *title)
85     : AliRICH(name,title)
86 {
87     //
88 // Version 0
89 // Default Segmentation, no hits
90     AliRICHSegmentationV0* segmentationV0 = new AliRICHSegmentationV0;
91 //
92 //  Segmentation parameters
93     segmentationV0->SetPadSize(0.84,0.80);
94     segmentationV0->SetDAnod(0.84/2);
95 //
96 //  Geometry parameters
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);
108 //
109 //  Response parameters
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);
124 //
125 //
126 //    AliRICH *RICH = (AliRICH *) gAlice->GetDetector("RICH"); 
127     
128     fCkovNumber=0;
129     fFreonProd=0;
130     Int_t i=0;
131     
132     fChambers = new TObjArray(kNCH);
133     for (i=0; i<kNCH; i++) {
134       
135       (*fChambers)[i] = new AliRICHChamber();  
136       
137     }
138   
139     for (i=0; i<kNCH; i++) {
140       SetGeometryModel(i,geometry);
141       SetSegmentationModel(i, segmentationV0);
142       SetResponseModel(i, responseV0);
143       SetNsec(i,1);
144       SetDebugLevel(0);
145     }
146 }
147
148
149 //___________________________________________
150 void AliRICHv0::CreateGeometry()
151 {
152     //
153     // Create the geometry for RICH version 1
154     //
155     // Modified by:  N. Colonna (INFN - BARI, Nicola.Colonna@ba.infn.it) 
156     //               R.A. Fini  (INFN - BARI, Rosanna.Fini@ba.infn.it) 
157     //               R.A. Loconsole (Bari University, loco@riscom.ba.infn.it) 
158     //
159     //Begin_Html
160     /*
161       <img src="picts/AliRICHv1.gif">
162     */
163     //End_Html
164     //Begin_Html
165     /*
166       <img src="picts/AliRICHv1Tree.gif">
167     */
168     //End_Html
169
170   AliRICH *pRICH = (AliRICH *) gAlice->GetDetector("RICH"); 
171   AliRICHSegmentation*  segmentation;
172   AliRICHGeometry*  geometry;
173   AliRICHChamber*       iChamber;
174
175   iChamber = &(pRICH->Chamber(0));
176   segmentation=iChamber->GetSegmentationModel(0);
177   geometry=iChamber->GetGeometryModel();
178
179   Float_t distance;
180   distance = geometry->GetFreonThickness()/2 + geometry->GetQuartzThickness() + geometry->GetGapThickness();
181   geometry->SetRadiatorToPads(distance);
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;
194     par[1] = 11.5;                 //Original Settings
195     par[2] = 73.15;
196     /*par[0] = 73.15;
197     par[1] = 11.5;
198     par[2] = 71.1;*/
199     gMC->Gsvolu("RICH", "BOX ", idtmed[1009], par, 3);
200     
201     //     Sensitive part of the whole RICH 
202     par[0] = 64.8;
203     par[1] = 11.5;                 //Original Settings
204     par[2] = 66.55;
205     /*par[0] = 66.55;
206     par[1] = 11.5;
207     par[2] = 64.8;*/
208     gMC->Gsvolu("SRIC", "BOX ", idtmed[1000], par, 3);
209     
210     //     Honeycomb 
211     par[0] = 63.1;
212     par[1] = .188;                 //Original Settings
213     par[2] = 66.55;
214     /*par[0] = 66.55;
215     par[1] = .188;
216     par[2] = 63.1;*/
217     gMC->Gsvolu("HONE", "BOX ", idtmed[1001], par, 3);
218     
219     //     Aluminium sheet 
220     par[0] = 63.1;
221     par[1] = .025;                 //Original Settings
222     par[2] = 66.55;
223     /*par[0] = 66.5;
224     par[1] = .025;
225     par[2] = 63.1;*/
226     gMC->Gsvolu("ALUM", "BOX ", idtmed[1009], par, 3);
227     
228     //     Quartz 
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]);
239     gMC->Gsvolu("QUAR", "BOX ", idtmed[1002], par, 3);
240     
241     //     Spacers (cylinders) 
242     par[0] = 0.;
243     par[1] = .5;
244     par[2] = geometry->GetFreonThickness()/2;
245     gMC->Gsvolu("SPAC", "TUBE", idtmed[1002], par, 3);
246     
247     //     Opaque quartz 
248     par[0] = 61.95;
249     par[1] = .2;                   //Original Settings
250     par[2] = 66.5;
251     /*par[0] = 66.5;
252     par[1] = .2;
253     par[2] = 61.95;*/
254     gMC->Gsvolu("OQUA", "BOX ", idtmed[1007], par, 3);
255   
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;
264     par[1] = .5;
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);
272     
273     //     Little bar of opaque quartz 
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;
281     par[1] = .25;
282     par[2] = .275;*/
283     gMC->Gsvolu("BARR", "BOX ", idtmed[1007], par, 3);
284     
285     //     Freon 
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;
293     par[1] = .5;
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);
301     
302     //     Methane 
303     par[0] = 64.8;
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]);
306     par[2] = 64.8;
307     gMC->Gsvolu("META", "BOX ", idtmed[1004], par, 3);
308     
309     //     Methane gap 
310     par[0] = 64.8;
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]);
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.;
324     par[1] = .001;
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     
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");
336     
337     AliMatrix(idrotm[1019], 0., 0., 90., 0., 90., 90.);
338     
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); 
341
342     //printf("Nspacers: %d", nspacers);
343     
344     //for (i = 1; i <= 9; ++i) {
345       //zs = (5 - i) * 14.4;                       //Original settings 
346     for (i = 0; i < nspacers; i++) {
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"); 
350     }
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 
361       for (i = 0; i < nspacers; i++) {
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");
372     }
373     
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 
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");
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");
395     gMC->Gspos("GAP ", 1, "META", 0., geometry->GetGapThickness()/2 - geometry->GetProximityGapThickness()/2 - 0.0001, 0., 0, "ONLY");
396     gMC->Gspos("META", 1, "SRIC", 0., 1.276, 0., 0, "ONLY");
397     gMC->Gspos("CSI ", 1, "SRIC", 0., 1.276 + geometry->GetGapThickness()/2 + .25, 0., 0, "ONLY");
398
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);
400     
401     //     Place RICH inside ALICE apparatus 
402   
403     AliMatrix(idrotm[1000], 90., 0., 70.69, 90., 19.31, -90.);
404     AliMatrix(idrotm[1001], 90., -20., 90., 70., 0., 0.);
405     AliMatrix(idrotm[1002], 90., 0., 90., 90., 0., 0.);
406     AliMatrix(idrotm[1003], 90., 20., 90., 110., 0., 0.);
407     AliMatrix(idrotm[1004], 90., 340., 108.2, 70., 18.2, 70.);
408     AliMatrix(idrotm[1005], 90., 0., 109.31, 90., 19.31, 90.);
409     AliMatrix(idrotm[1006], 90., 20., 108.2, 110., 18.2, 110.);
410     
411     gMC->Gspos("RICH", 1, "ALIC", 0., 471.9, 165.26,     idrotm[1000], "ONLY");
412     gMC->Gspos("RICH", 2, "ALIC", 171., 470., 0.,        idrotm[1001], "ONLY");
413     gMC->Gspos("RICH", 3, "ALIC", 0., 500., 0.,          idrotm[1002], "ONLY");
414     gMC->Gspos("RICH", 4, "ALIC", -171., 470., 0.,       idrotm[1003], "ONLY");
415     gMC->Gspos("RICH", 5, "ALIC", 161.4, 443.4, -165.3,  idrotm[1004], "ONLY");
416     gMC->Gspos("RICH", 6, "ALIC", 0., 471.9, -165.3,     idrotm[1005], "ONLY");
417     gMC->Gspos("RICH", 7, "ALIC", -161.4, 443.4, -165.3, idrotm[1006], "ONLY");
418     
419 }
420
421
422 //___________________________________________
423 void AliRICHv0::CreateMaterials()
424 {
425     //
426     // *** DEFINITION OF AVAILABLE RICH MATERIALS *** 
427     // ORIGIN    : NICK VAN EIJNDHOVEN 
428     // Modified by:  N. Colonna (INFN - BARI, Nicola.Colonna@ba.infn.it) 
429     //               R.A. Fini  (INFN - BARI, Rosanna.Fini@ba.infn.it) 
430     //               R.A. Loconsole (Bari University, loco@riscom.ba.infn.it) 
431     //
432     Int_t   isxfld = gAlice->Field()->Integ();
433     Float_t sxmgmx = gAlice->Field()->Max();
434     Int_t i;
435
436     /************************************Antonnelo's Values (14-vectors)*****************************************/
437     /*
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 };
440     Float_t rIndexQuarz[14] = { 1.528309,1.533333,
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 };
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,
448                                 179.0987,179.0987,179.0987,142.92,56.65,13.95,10.43,7.07,2.03,.5773,.33496,0. };
449     //Float_t abscoFreon[14] = { 1e-5,1e-5,1e-5,1e-5,1e-5,1e-5,1e-5,1e-5,1e-5,
450         //                       1e-5,1e-5,1e-5,1e-5,1e-5 };
451     Float_t abscoQuarz[14] = { 64.035,39.98,35.665,31.262,27.527,22.815,21.04,17.52,
452                                 14.177,9.282,4.0925,1.149,.3627,.10857 };
453     Float_t abscoOpaqueQuarz[14] = { 1e-5,1e-5,1e-5,1e-5,1e-5,1e-5,1e-5,1e-5,1e-5,
454                                  1e-5,1e-5,1e-5,1e-5,1e-5 };
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,
456                               1e-4,1e-4,1e-4,1e-4 };
457     Float_t abscoMethane[14] = { 1e6,1e6,1e6,1e6,1e6,1e6,1e6,1e6,1e6,1e6,1e6,
458                                   1e6,1e6,1e6 };
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,
460                               1e-4,1e-4,1e-4,1e-4 };
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,
463                               .17425,.1785,.1836,.1904,.1938,.221 };
464     Float_t efficGrid[14] = { 1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1. };
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
483     Float_t rIndexQuarz[26];
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);
493         rIndexQuarz[i] = TMath::Sqrt(1. + a + b );
494         //printf ("rIndexQuarz: %e\n",rIndexQuarz[i]);
495     } 
496     
497     //Refraction index for opaque quarz, methane and grid
498     Float_t rIndexOpaqueQuarz[26];
499     Float_t rIndexMethane[26];
500     Float_t rIndexGrid[26];
501     for (i=0;i<26;i++)
502     {
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);
507     } 
508     
509     //Absorption index for freon
510     Float_t abscoFreon[26] = {179.0987, 179.0987, 179.0987, 179.0987, 179.0987,  179.0987, 179.0987, 179.0987, 
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};                                 
519     Float_t abscoQuarz[31];          
520     for (Int_t i=0;i<31;i++)
521     {
522         Float_t Xlam = 1237.79 / (ppckov[i]*1e9);
523         if (Xlam <= 160) abscoQuarz[i] = 0;
524         if (Xlam > 250) abscoQuarz[i] = 1;
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]);
534                     abscoQuarz[i] = -5.0/(TMath::Log(Abso));
535                 } 
536             }
537         }
538         printf ("abscoQuarz: %e abscoFreon: %e for energy: %e\n",abscoQuarz[i],abscoFreon[i],ppckov[i]);
539     }*/
540
541     /*Float_t abscoQuarz[31] = {49.64211, 48.41296, 47.46989, 46.50492, 45.13682, 44.47883, 43.1929 , 41.30922, 40.5943 ,
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     {
548         abscoQuarz[i] = abscoQuarz[i]/10;
549     }*/
550
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,
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
556     Float_t abscoMethane[26];
557     for (i=0;i<26;i++) 
558     {
559         abscoMethane[i]=AbsoCH4(ppckov[i]*1e9); 
560         //printf("abscoMethane: %e for energy: %e\n", abscoMethane[i],ppckov[i]*1e9);
561     }
562     
563     //Absorption index for opaque quarz, csi and grid, efficiency for all and grid
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];
569     for (i=0;i<26;i++)
570     { 
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]);
577     } 
578     
579     //Efficiency for csi 
580     
581     Float_t efficCsI[26] = {0.000199999995, 0.000600000028, 0.000699999975, 0.00499999989, 0.00749999983, 0.010125,
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     {
593         efficCsI[i] = efficCsI[i]/(1.-Fresnel(ppckov[i]*1e9,1.,0)); 
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     
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;
609     Float_t wmatquao[2], rIndexFreon[26];
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 
621     for (i = 0; i < 26; ++i) {
622       rIndexFreon[i] = ppckov[i] * .0172 * 1e9 + 1.177;
623       //rIndexFreon[i] = 1;
624         //printf ("rIndexFreon: %e \n efficCsI: %e for energy: %e\n",rIndexFreon[i], efficCsI[i], ppckov[i]);
625     }
626             
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     
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);
733 }
734
735 //___________________________________________
736
737 Float_t AliRICHv0::Fresnel(Float_t ene,Float_t pdoti, Bool_t pola)
738 {
739
740     //ENE(EV), PDOTI=COS(INC.ANG.), PDOTR=COS(POL.PLANE ROT.ANG.)
741     
742     Float_t en[36] = {5.0,5.1,5.2,5.3,5.4,5.5,5.6,5.7,5.8,5.9,6.0,6.1,6.2,
743                       6.3,6.4,6.5,6.6,6.7,6.8,6.9,7.0,7.1,7.2,7.3,7.4,7.5,7.6,7.7,
744                       7.8,7.9,8.0,8.1,8.2,8.3,8.4,8.5};
745      
746
747     Float_t csin[36] = {2.14,2.21,2.33,2.48,2.76,2.97,2.99,2.59,2.81,3.05,
748                         2.86,2.53,2.55,2.66,2.79,2.96,3.18,3.05,2.84,2.81,2.38,2.11,
749                         2.01,2.13,2.39,2.73,3.08,3.15,2.95,2.73,2.56,2.41,2.12,1.95,
750                         1.72,1.53};
751       
752     Float_t csik[36] = {0.,0.,0.,0.,0.,0.196,0.408,0.208,0.118,0.49,0.784,0.543,
753                         0.424,0.404,0.371,0.514,0.922,1.102,1.139,1.376,1.461,1.253,0.878,
754                         0.69,0.612,0.649,0.824,1.347,1.571,1.678,1.763,1.857,1.824,1.824,
755                         1.714,1.498};
756     Float_t xe=ene;
757     Int_t  j=Int_t(xe*10)-49;
758     Float_t cn=csin[j]+((csin[j+1]-csin[j])/0.1)*(xe-en[j]);
759     Float_t ck=csik[j]+((csik[j+1]-csik[j])/0.1)*(xe-en[j]);
760
761     //FORMULAE FROM HANDBOOK OF OPTICS, 33.23 OR
762     //W.R. HUNTER, J.O.S.A. 54 (1964),15 , J.O.S.A. 55(1965),1197
763
764     Float_t sinin=TMath::Sqrt(1-pdoti*pdoti);
765     Float_t tanin=sinin/pdoti;
766
767     Float_t c1=cn*cn-ck*ck-sinin*sinin;
768     Float_t c2=4*cn*cn*ck*ck;
769     Float_t aO=TMath::Sqrt(0.5*(TMath::Sqrt(c1*c1+c2)+c1));
770     Float_t b2=0.5*(TMath::Sqrt(c1*c1+c2)-c1);
771     
772     Float_t rs=((aO-pdoti)*(aO-pdoti)+b2)/((aO+pdoti)*(aO+pdoti)+b2);
773     Float_t rp=rs*((aO-sinin*tanin)*(aO-sinin*tanin)+b2)/((aO+sinin*tanin)*(aO+sinin*tanin)+b2);
774     
775
776     //CORRECTION FACTOR FOR SURFACE ROUGHNESS
777     //B.J. STAGG  APPLIED OPTICS, 30(1991),4113
778
779     Float_t sigraf=18.;
780     Float_t lamb=1240/ene;
781     Float_t fresn;
782  
783     Float_t  rO=TMath::Exp(-(4*TMath::Pi()*pdoti*sigraf/lamb)*(4*TMath::Pi()*pdoti*sigraf/lamb));
784
785     if(pola)
786     {
787         Float_t pdotr=0.8;                                 //DEGREE OF POLARIZATION : 1->P , -1->S
788         fresn=0.5*(rp*(1+pdotr)+rs*(1-pdotr));
789     }
790     else
791         fresn=0.5*(rp+rs);
792       
793     fresn = fresn*rO;
794     return(fresn);
795 }
796
797 //__________________________________________
798
799 Float_t AliRICHv0::AbsoCH4(Float_t x)
800 {
801
802     //KLOSCH,SCH4(9),WL(9),EM(9),ALENGTH(31)
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};
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;
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     
839     Float_t dm=(kIgas1/100.)*(1.-((kOxy+kWater)/1.e6))*kLosch*pn/tn;
840     Float_t abslm=1./sm/dm;
841     
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;
849     if (kIgas2 != 0) 
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         
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;
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         
904         Float_t dox=(kOxy/1e6)*kLosch*pn/tn;
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;
930         Float_t dw=(kWater/1e6)*kLosch*pn/tn;
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);
940 }
941
942
943
944
945 //___________________________________________
946
947 void AliRICHv0::Init()
948 {
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
961     // 
962     // Initialize Tracking Chambers
963     //
964     for (Int_t i=1; i<kNCH; i++) {
965         //printf ("i:%d",i);
966         ( (AliRICHChamber*) (*fChambers)[i])->Init();  
967     }  
968     
969     //
970     // Set the chamber (sensitive region) GEANT identifier
971     
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));
1000     
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()); 
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());
1012     printf("*                            Charge Slope    : %5.1f ADC                        *\n",response->ChargeSlope());
1013     printf("*                            Feedback Prob.  : %5.2f %%                         *\n",response->AlphaFeedback()*100);
1014     printf("*                                                                               *\n");
1015     printf("*                                   Success!                                    *\n");
1016     printf("*                                                                               *\n");
1017     printf("*********************************************************************************\n");
1018
1019 }
1020
1021 //___________________________________________
1022 void AliRICHv0::StepManager()
1023 {
1024     //Dummy step manager
1025 }
1026
1027   
1028 //___________________________________________