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