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