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