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