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