]> git.uio.no Git - u/mrichter/AliRoot.git/blame - RICH/AliRICHv1.cxx
Merging the VirtualMC branch to the main development branch (HEAD)
[u/mrichter/AliRoot.git] / RICH / AliRICHv1.cxx
CommitLineData
c28632f0 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$
b9d0a01d 18 Revision 1.16.6.2 2002/07/24 10:07:52 alibrary
19 Updating VirtualMC
20
21 Revision 1.16.6.1 2002/06/10 15:12:46 hristov
22 Merged with v3-08-02
23
24 Revision 1.16 2001/10/10 11:29:17 morsch
25 Use segmentation v1 and wire sag as default. It does not work otherwise. Why ?
26
03f3e21a 27 Revision 1.15 2001/08/30 09:51:23 hristov
28 The operator[] is replaced by At() or AddAt() in case of TObjArray.
29
2682e810 30 Revision 1.14 2001/05/16 14:57:20 alibrary
31 New files for folders and Stack
32
9e1a0ddb 33 Revision 1.13 2001/05/10 12:28:04 jbarbosa
34 Repositioned the RICH modules.
35
449e6743 36 Revision 1.12 2001/02/23 17:26:12 jbarbosa
37 Setters for wire sag effect and voltage values.
38
c4384528 39 Revision 1.11 2001/02/13 20:10:33 jbarbosa
40 Removed call to SetNSec() (obsolete). Fixed bug in chamber initialisation (not all chambers were initialised).
41
2fc6393f 42 Revision 1.10 2000/12/20 14:08:02 jbarbosa
43 Removed dependencies on TGeant3 (thanks to F. Carminati and I. Hrivnacova)
44
5cfcdf54 45 Revision 1.9 2000/12/18 17:44:40 jbarbosa
46 Took two lines out of output.
47
f2de8657 48 Revision 1.8 2000/11/01 15:39:00 jbarbosa
49 Updated default geometry.
50
2463d46d 51 Revision 1.7 2000/10/03 21:44:09 morsch
52 Use AliSegmentation and AliHit abstract base classes.
53
a2f7eaf6 54 Revision 1.6 2000/07/10 15:28:39 fca
55 Correction of the inheritance scheme
56
452a64c6 57 Revision 1.5 2000/06/30 16:38:51 dibari
58 Removed setters.
59
64e9b5aa 60 Revision 1.4 2000/06/13 13:13:40 jbarbosa
61 Correcting previous correction...
62
bef02574 63 Revision 1.3 2000/06/13 13:06:38 jbarbosa
64 Fixed compiling error for HP (multiple declaration)
65
7f36f6bc 66 Revision 1.2 2000/06/12 15:36:16 jbarbosa
67 Cleaned up version.
68
237c933d 69 Revision 1.1 2000/06/09 15:00:31 jbarbosa
70 New full version. All parameters configurable.
71
c28632f0 72 Revision 1.9 2000/05/31 08:19:38 jbarbosa
73 Fixed bug in StepManager
74
75 Revision 1.8 2000/05/26 17:30:08 jbarbosa
76 Cerenkov angle now stored within cerenkov data structure.
77
78 Revision 1.7 2000/05/18 10:31:36 jbarbosa
79 Fixed positioning of spacers inside freon.
80 Fixed positioning of proximity gap
81 inside methane.
82 Fixed cut on neutral particles in the StepManager.
83
84 Revision 1.6 2000/04/28 11:51:58 morsch
85 Dimensions of arrays hits and Ckov_data corrected.
86
87 Revision 1.5 2000/04/19 13:28:46 morsch
88 Major changes in geometry (parametrised), materials (updated) and
89 step manager (diagnostics) (JB, AM)
90
91*/
92
93
94
95//////////////////////////////////////////////////////////
96// Manager and hits classes for set: RICH full version //
97//////////////////////////////////////////////////////////
98
99#include <TTUBE.h>
100#include <TNode.h>
101#include <TRandom.h>
237c933d 102#include <TParticle.h>
c28632f0 103
104#include "AliRICHv1.h"
237c933d 105#include "AliRICHHit.h"
a2f7eaf6 106#include "AliSegmentation.h"
64e9b5aa 107#include "AliRICHResponse.h"
03f3e21a 108#include "AliRICHSegmentationV1.h"
64e9b5aa 109#include "AliRICHResponseV0.h"
110#include "AliRICHGeometry.h"
c28632f0 111#include "AliRun.h"
112#include "AliMC.h"
113#include "iostream.h"
c28632f0 114#include "AliConst.h"
115#include "AliPDG.h"
c28632f0 116
117ClassImp(AliRICHv1)
118
119//___________________________________________
452a64c6 120AliRICHv1::AliRICHv1()
c28632f0 121{
237c933d 122
123// Default constructor fo AliRICHvv1 (full version)
124
c28632f0 125 //fChambers = 0;
126}
127
128//___________________________________________
129AliRICHv1::AliRICHv1(const char *name, const char *title)
452a64c6 130 : AliRICH(name,title)
c28632f0 131{
c28632f0 132
237c933d 133// Full version of RICH with hits and diagnostics
134
64e9b5aa 135 // Version 0
136// Default Segmentation, no hits
03f3e21a 137 AliRICHSegmentationV1* segmentation = new AliRICHSegmentationV1;
64e9b5aa 138//
139// Segmentation parameters
c4384528 140 segmentation->SetPadSize(0.84,0.80);
141 segmentation->SetDAnod(0.84/2);
64e9b5aa 142//
143// Geometry parameters
144 AliRICHGeometry* geometry = new AliRICHGeometry;
145 geometry->SetGapThickness(8);
146 geometry->SetProximityGapThickness(.4);
2463d46d 147 geometry->SetQuartzLength(133);
148 geometry->SetQuartzWidth(127.9);
64e9b5aa 149 geometry->SetQuartzThickness(.5);
2463d46d 150 geometry->SetOuterFreonLength(133);
151 geometry->SetOuterFreonWidth(41.3);
152 geometry->SetInnerFreonLength(133);
153 geometry->SetInnerFreonWidth(41.3);
154 geometry->SetFreonThickness(1.5);
64e9b5aa 155//
156// Response parameters
c4384528 157 AliRICHResponseV0* response = new AliRICHResponseV0;
158 response->SetSigmaIntegration(5.);
159 response->SetChargeSlope(27.);
160 response->SetChargeSpread(0.18, 0.18);
161 response->SetMaxAdc(4096);
162 response->SetAlphaFeedback(0.036);
163 response->SetEIonisation(26.e-9);
164 response->SetSqrtKx3(0.77459667);
165 response->SetKx2(0.962);
166 response->SetKx4(0.379);
167 response->SetSqrtKy3(0.77459667);
168 response->SetKy2(0.962);
169 response->SetKy4(0.379);
170 response->SetPitch(0.25);
03f3e21a 171 response->SetWireSag(1); // 1->On, 0->Off
c4384528 172 response->SetVoltage(2150); // Should only be 2000, 2050, 2100 or 2150
173
64e9b5aa 174//
175// AliRICH *RICH = (AliRICH *) gAlice->GetDetector("RICH");
176
237c933d 177 fCkovNumber=0;
178 fFreonProd=0;
64e9b5aa 179 Int_t i=0;
c28632f0 180
64e9b5aa 181 fChambers = new TObjArray(kNCH);
182 for (i=0; i<kNCH; i++) {
183
2682e810 184 //PH (*fChambers)[i] = new AliRICHChamber();
185 fChambers->AddAt(new AliRICHChamber(), i);
64e9b5aa 186
c28632f0 187 }
64e9b5aa 188
189 for (i=0; i<kNCH; i++) {
190 SetGeometryModel(i,geometry);
c4384528 191 SetSegmentationModel(i, segmentation);
192 SetResponseModel(i, response);
64e9b5aa 193 SetDebugLevel(0);
194 }
195
196
c28632f0 197}
198
237c933d 199void AliRICHv1::Init()
200{
201
9e1a0ddb 202 if(fDebug) {
203 printf("%s: *********************************** RICH_INIT ***********************************\n",ClassName());
204 printf("%s: * *\n",ClassName());
205 printf("%s: * AliRICHv1 Full version started *\n",ClassName());
206 printf("%s: * *\n",ClassName());
207 }
237c933d 208
209
a2f7eaf6 210 AliSegmentation* segmentation;
237c933d 211 AliRICHGeometry* geometry;
212 AliRICHResponse* response;
213
214
215 //
216 // Initialize Tracking Chambers
217 //
2fc6393f 218 for (Int_t i=0; i<kNCH; i++) {
237c933d 219 //printf ("i:%d",i);
2682e810 220 //PH ( (AliRICHChamber*) (*fChambers)[i])->Init(i);
221 ( (AliRICHChamber*)fChambers->At(i))->Init(i);
237c933d 222 }
223
224 //
225 // Set the chamber (sensitive region) GEANT identifier
226
2682e810 227 //PH ((AliRICHChamber*)(*fChambers)[0])->SetGid(1);
228 //PH ((AliRICHChamber*)(*fChambers)[1])->SetGid(2);
229 //PH ((AliRICHChamber*)(*fChambers)[2])->SetGid(3);
230 //PH ((AliRICHChamber*)(*fChambers)[3])->SetGid(4);
231 //PH ((AliRICHChamber*)(*fChambers)[4])->SetGid(5);
232 //PH ((AliRICHChamber*)(*fChambers)[5])->SetGid(6);
233 //PH ((AliRICHChamber*)(*fChambers)[6])->SetGid(7);
234
235 ((AliRICHChamber*)fChambers->At(0))->SetGid(1);
236 ((AliRICHChamber*)fChambers->At(1))->SetGid(2);
237 ((AliRICHChamber*)fChambers->At(2))->SetGid(3);
238 ((AliRICHChamber*)fChambers->At(3))->SetGid(4);
239 ((AliRICHChamber*)fChambers->At(4))->SetGid(5);
240 ((AliRICHChamber*)fChambers->At(5))->SetGid(6);
241 ((AliRICHChamber*)fChambers->At(6))->SetGid(7);
242
237c933d 243
237c933d 244 segmentation=Chamber(0).GetSegmentationModel(0);
245 geometry=Chamber(0).GetGeometryModel();
246 response=Chamber(0).GetResponseModel();
247
449e6743 248 Float_t offset = 490 + 1.276 - geometry->GetGapThickness()/2; //distance from center of mother volume to methane
249 Float_t deltaphi = 19.5; //phi angle between center of chambers - z direction
250 Float_t deltatheta = 20; //theta angle between center of chambers - x direction
251 Float_t cosphi = TMath::Cos(deltaphi*TMath::Pi()/180);
252 Float_t sinphi = TMath::Sin(deltaphi*TMath::Pi()/180);
253 Float_t costheta = TMath::Cos(deltatheta*TMath::Pi()/180);
254 Float_t sintheta = TMath::Sin(deltatheta*TMath::Pi()/180);
255
256 Float_t pos1[3]={0. , offset*cosphi , offset*sinphi};
257 Float_t pos2[3]={offset*sintheta , offset*costheta , 0. };
258 Float_t pos3[3]={0. , offset , 0.};
259 Float_t pos4[3]={-offset*sintheta , offset*costheta , 0.};
260 Float_t pos5[3]={offset*sinphi , offset*costheta*cosphi, -offset*sinphi};
261 Float_t pos6[3]={0. , offset*cosphi , -offset*sinphi};
262 Float_t pos7[3]={ -offset*sinphi , offset*costheta*cosphi, -offset*sinphi};
263
264 Chamber(0).SetChamberTransform(pos1[0],pos1[1],pos1[2],new TRotMatrix("rot993","rot993",90., 0. , 90. - deltaphi, 90. , deltaphi, -90. ));
265 Chamber(1).SetChamberTransform(pos2[0],pos2[1],pos2[2],new TRotMatrix("rot994","rot994",90., -deltatheta , 90. , 90.- deltatheta , 0. , 0. ));
266 Chamber(2).SetChamberTransform(pos3[0],pos3[1],pos3[2],new TRotMatrix("rot995","rot995",90., 0. , 90. , 90. , 0. , 0. ));
267 Chamber(3).SetChamberTransform(pos4[0],pos4[1],pos4[2],new TRotMatrix("rot996","rot996",90., deltatheta , 90. , 90 + deltatheta , 0. , 0. ));
268 Chamber(4).SetChamberTransform(pos5[0],pos5[1],pos5[2],new TRotMatrix("rot997","rot997",90., 360. - deltatheta, 108.2 , 90.- deltatheta ,18.2 , 90 - deltatheta));
269 Chamber(5).SetChamberTransform(pos6[0],pos6[1],pos6[2],new TRotMatrix("rot998","rot998",90., 0. , 90 + deltaphi , 90. , deltaphi, 90. ));
270 Chamber(6).SetChamberTransform(pos7[0],pos7[1],pos7[2],new TRotMatrix("rot999","rot999",90., deltatheta , 108.2 , 90.+ deltatheta ,18.2 , 90 + deltatheta));
237c933d 271
9e1a0ddb 272 if(fDebug) {
273 printf("%s: * Pads : %3dx%3d *\n",
274 ClassName(),segmentation->Npx(),segmentation->Npy());
275 printf("%s: * Pad size : %5.2f x%5.2f mm2 *\n",
276 ClassName(),segmentation->Dpx(),segmentation->Dpy());
277 printf("%s: * Gap Thickness : %5.1f cm *\n",
278 ClassName(),geometry->GetGapThickness());
279 printf("%s: * Radiator Width : %5.1f cm *\n",
280 ClassName(),geometry->GetQuartzWidth());
281 printf("%s: * Radiator Length : %5.1f cm *\n",
282 ClassName(),geometry->GetQuartzLength());
283 printf("%s: * Freon Thickness : %5.1f cm *\n",
284 ClassName(),geometry->GetFreonThickness());
285 printf("%s: * Charge Slope : %5.1f ADC *\n",
286 ClassName(),response->ChargeSlope());
287 printf("%s: * Feedback Prob. : %5.2f %% *\n",
288 ClassName(),response->AlphaFeedback()*100);
289 printf("%s: * Debug Level : %3d *\n",
290 ClassName(),GetDebugLevel());
291 printf("%s: * *\n",
292 ClassName());
293 printf("%s: *********************************************************************************\n",
294 ClassName());
295 }
237c933d 296}
c28632f0 297
2463d46d 298
299
300
301
302
303
304