Dummy copy constructor added
[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$
c71fc6da 18 Revision 1.9 2000/05/31 08:19:38 jbarbosa
19 Fixed bug in StepManager
20
27d40190 21 Revision 1.8 2000/05/26 17:30:08 jbarbosa
22 Cerenkov angle now stored within cerenkov data structure.
23
b15cdb56 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
6d31e556 30 Revision 1.6 2000/04/28 11:51:58 morsch
31 Dimensions of arrays hits and Ckov_data corrected.
32
8140b37e 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
4c039060 37*/
38
6e36c0f2 39
40
c71fc6da 41/////////////////////////////////////////////////////////////
42// Manager and hits classes for set: RICH default version //
43/////////////////////////////////////////////////////////////
ddae0931 44
45#include <TTUBE.h>
46#include <TNode.h>
47#include <TRandom.h>
48
49#include "AliRICHv0.h"
c71fc6da 50#include "AliRICHSegResV0.h"
ddae0931 51#include "AliRun.h"
52#include "AliMC.h"
53#include "iostream.h"
54#include "AliCallf77.h"
55#include "AliConst.h"
6e36c0f2 56#include "AliPDG.h"
ddae0931 57#include "TGeant3.h"
58
59ClassImp(AliRICHv0)
60
61//___________________________________________
62AliRICHv0::AliRICHv0() : AliRICH()
63{
6e36c0f2 64 //fChambers = 0;
ddae0931 65}
66
67//___________________________________________
68AliRICHv0::AliRICHv0(const char *name, const char *title)
69 : AliRICH(name,title)
70{
c71fc6da 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
6e36c0f2 112 fCkov_number=0;
113 fFreon_prod=0;
c71fc6da 114
ddae0931 115 fChambers = new TObjArray(7);
116 for (Int_t i=0; i<7; i++) {
c71fc6da 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);
6e36c0f2 127 }
ddae0931 128}
129
130
131//___________________________________________
132void 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
6e36c0f2 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();
6d31e556 160
161 Float_t distance;
162 distance = geometry->GetFreonThickness()/2 + geometry->GetQuartzThickness() + geometry->GetGapThickness();
163 geometry->SetRadiatorToPads(distance);
ddae0931 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;
6e36c0f2 176 par[1] = 11.5; //Original Settings
ddae0931 177 par[2] = 73.15;
6e36c0f2 178 /*par[0] = 73.15;
179 par[1] = 11.5;
180 par[2] = 71.1;*/
ddae0931 181 gMC->Gsvolu("RICH", "BOX ", idtmed[1009], par, 3);
182
183 // Sensitive part of the whole RICH
184 par[0] = 64.8;
6e36c0f2 185 par[1] = 11.5; //Original Settings
ddae0931 186 par[2] = 66.55;
6e36c0f2 187 /*par[0] = 66.55;
188 par[1] = 11.5;
189 par[2] = 64.8;*/
ddae0931 190 gMC->Gsvolu("SRIC", "BOX ", idtmed[1000], par, 3);
191
192 // Honeycomb
193 par[0] = 63.1;
6e36c0f2 194 par[1] = .188; //Original Settings
ddae0931 195 par[2] = 66.55;
6e36c0f2 196 /*par[0] = 66.55;
197 par[1] = .188;
198 par[2] = 63.1;*/
ddae0931 199 gMC->Gsvolu("HONE", "BOX ", idtmed[1001], par, 3);
200
201 // Aluminium sheet
202 par[0] = 63.1;
6e36c0f2 203 par[1] = .025; //Original Settings
ddae0931 204 par[2] = 66.55;
6e36c0f2 205 /*par[0] = 66.5;
206 par[1] = .025;
207 par[2] = 63.1;*/
ddae0931 208 gMC->Gsvolu("ALUM", "BOX ", idtmed[1009], par, 3);
209
210 // Quartz
6e36c0f2 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]);
ddae0931 221 gMC->Gsvolu("QUAR", "BOX ", idtmed[1002], par, 3);
222
223 // Spacers (cylinders)
224 par[0] = 0.;
225 par[1] = .5;
6e36c0f2 226 par[2] = geometry->GetFreonThickness()/2;
ddae0931 227 gMC->Gsvolu("SPAC", "TUBE", idtmed[1002], par, 3);
228
229 // Opaque quartz
230 par[0] = 61.95;
6e36c0f2 231 par[1] = .2; //Original Settings
ddae0931 232 par[2] = 66.5;
6e36c0f2 233 /*par[0] = 66.5;
234 par[1] = .2;
235 par[2] = 61.95;*/
ddae0931 236 gMC->Gsvolu("OQUA", "BOX ", idtmed[1007], par, 3);
237
6e36c0f2 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;
ddae0931 246 par[1] = .5;
6e36c0f2 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);
ddae0931 254
255 // Little bar of opaque quartz
6e36c0f2 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;
ddae0931 263 par[1] = .25;
6e36c0f2 264 par[2] = .275;*/
ddae0931 265 gMC->Gsvolu("BARR", "BOX ", idtmed[1007], par, 3);
266
267 // Freon
6e36c0f2 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;
ddae0931 275 par[1] = .5;
6e36c0f2 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);
ddae0931 283
284 // Methane
285 par[0] = 64.8;
6e36c0f2 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]);
ddae0931 288 par[2] = 64.8;
289 gMC->Gsvolu("META", "BOX ", idtmed[1004], par, 3);
290
291 // Methane gap
292 par[0] = 64.8;
6e36c0f2 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]);
ddae0931 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.;
6e36c0f2 306 par[1] = .001;
ddae0931 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
6e36c0f2 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");
ddae0931 318
319 AliMatrix(idrotm[1019], 0., 0., 90., 0., 90., 90.);
320
6e36c0f2 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);
6d31e556 323
c71fc6da 324 //printf("Nspacers: %d", nspacers);
6e36c0f2 325
326 //for (i = 1; i <= 9; ++i) {
327 //zs = (5 - i) * 14.4; //Original settings
6d31e556 328 for (i = 0; i < nspacers; i++) {
6e36c0f2 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");
ddae0931 332 }
6e36c0f2 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
6d31e556 343 for (i = 0; i < nspacers; i++) {
6e36c0f2 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");
ddae0931 354 }
355
6e36c0f2 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
ddae0931 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");
6e36c0f2 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");
6d31e556 377 gMC->Gspos("GAP ", 1, "META", 0., geometry->GetGapThickness()/2 - geometry->GetProximityGapThickness()/2 - 0.0001, 0., 0, "ONLY");
6e36c0f2 378 gMC->Gspos("META", 1, "SRIC", 0., 1.276, 0., 0, "ONLY");
6d31e556 379 gMC->Gspos("CSI ", 1, "SRIC", 0., 1.276 + geometry->GetGapThickness()/2 + .25, 0., 0, "ONLY");
380
c71fc6da 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);
ddae0931 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//___________________________________________
405void 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();
6e36c0f2 416 Int_t i;
417
418 /************************************Antonnelo's Values (14-vectors)*****************************************/
419 /*
ddae0931 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,
6e36c0f2 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 };
ddae0931 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. };
6e36c0f2 444 Float_t effic_csi[14] = { 6e-4,.005,.0075,.01125,.045,.117,.135,.16575,
445 .17425,.1785,.1836,.1904,.1938,.221 };
ddae0931 446 Float_t effic_gri[14] = { 1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1. };
6e36c0f2 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
ddae0931 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;
6e36c0f2 591 Float_t wmatquao[2], rindex_freon[26];
ddae0931 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
6e36c0f2 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]);
ddae0931 606 }
6e36c0f2 607
ddae0931 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
6e36c0f2 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
718Float_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
780Float_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;
ddae0931 822
6e36c0f2 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);
ddae0931 921}
922
6e36c0f2 923
924
925
ddae0931 926//___________________________________________
927
928void AliRICHv0::Init()
929{
c71fc6da 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
ddae0931 942 //
943 // Initialize Tracking Chambers
944 //
6e36c0f2 945 for (Int_t i=1; i<7; i++) {
946 //printf ("i:%d",i);
947 ( (AliRICHChamber*) (*fChambers)[i])->Init();
948 }
ddae0931 949
950 //
951 // Set the chamber (sensitive region) GEANT identifier
952
6e36c0f2 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));
ddae0931 981
c71fc6da 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
ddae0931 1000}
1001
1002//___________________________________________
1003void AliRICHv0::StepManager()
1004{
c71fc6da 1005 //Dummy step manager
ddae0931 1006}
1007
1008
1009//___________________________________________
6d31e556 1010Int_t AliRICH::MakePadHits(Float_t xhit,Float_t yhit,Float_t eloss, Int_t idvol, Response_t res)
ddae0931 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
6e36c0f2 1025 ((AliRICHChamber*) (*fChambers)[idvol])->DisIntegration(eloss, xhit, yhit, nnew, newclust, res);
ddae0931 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
6e36c0f2 1046 AddPadHit(clhits);
ddae0931 1047 }
1048 }
6d31e556 1049return nnew;
ddae0931 1050}