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