]> git.uio.no Git - u/mrichter/AliRoot.git/blob - RICH/AliRICHv1.cxx
Removed dependencies on TGeant3 (thanks to F. Carminati and I. Hrivnacova)
[u/mrichter/AliRoot.git] / RICH / AliRICHv1.cxx
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$
18   Revision 1.9  2000/12/18 17:44:40  jbarbosa
19   Took two lines out of output.
20
21   Revision 1.8  2000/11/01 15:39:00  jbarbosa
22   Updated default geometry.
23
24   Revision 1.7  2000/10/03 21:44:09  morsch
25   Use AliSegmentation and AliHit abstract base classes.
26
27   Revision 1.6  2000/07/10 15:28:39  fca
28   Correction of the inheritance scheme
29
30   Revision 1.5  2000/06/30 16:38:51  dibari
31   Removed setters.
32
33   Revision 1.4  2000/06/13 13:13:40  jbarbosa
34   Correcting previous correction...
35
36   Revision 1.3  2000/06/13 13:06:38  jbarbosa
37   Fixed compiling error for HP (multiple declaration)
38
39   Revision 1.2  2000/06/12 15:36:16  jbarbosa
40   Cleaned up version.
41
42   Revision 1.1  2000/06/09 15:00:31  jbarbosa
43   New full version. All parameters configurable.
44
45   Revision 1.9  2000/05/31 08:19:38  jbarbosa
46   Fixed bug in StepManager
47
48   Revision 1.8  2000/05/26 17:30:08  jbarbosa
49   Cerenkov angle now stored within cerenkov data structure.
50
51   Revision 1.7  2000/05/18 10:31:36  jbarbosa
52   Fixed positioning of spacers inside freon.
53   Fixed positioning of proximity gap
54   inside methane.
55   Fixed cut on neutral particles in the StepManager.
56
57   Revision 1.6  2000/04/28 11:51:58  morsch
58    Dimensions of arrays hits and Ckov_data corrected.
59
60   Revision 1.5  2000/04/19 13:28:46  morsch
61   Major changes in geometry (parametrised), materials (updated) and
62   step manager (diagnostics) (JB, AM)
63
64 */
65
66
67
68 //////////////////////////////////////////////////////////
69 //  Manager and hits classes for set: RICH full version //
70 //////////////////////////////////////////////////////////
71
72 #include <TTUBE.h>
73 #include <TNode.h> 
74 #include <TRandom.h> 
75 #include <TParticle.h> 
76
77 #include "AliRICHv1.h"
78 #include "AliRICHHit.h"
79 #include "AliSegmentation.h"
80 #include "AliRICHResponse.h"
81 #include "AliRICHSegmentationV0.h"
82 #include "AliRICHResponseV0.h"
83 #include "AliRICHGeometry.h"
84 #include "AliRun.h"
85 #include "AliMC.h"
86 #include "iostream.h"
87 #include "AliCallf77.h"
88 #include "AliConst.h" 
89 #include "AliPDG.h" 
90
91 ClassImp(AliRICHv1)
92     
93 //___________________________________________
94 AliRICHv1::AliRICHv1()
95 {
96
97 // Default constructor fo AliRICHvv1 (full version)
98
99     //fChambers = 0;
100 }
101
102 //___________________________________________
103 AliRICHv1::AliRICHv1(const char *name, const char *title)
104     : AliRICH(name,title)
105 {
106
107 // Full version of RICH with hits and diagnostics
108
109   // Version 0
110 // Default Segmentation, no hits
111     AliRICHSegmentationV0* segmentationV0 = new AliRICHSegmentationV0;
112 //
113 //  Segmentation parameters
114     segmentationV0->SetPadSize(0.84,0.80);
115     segmentationV0->SetDAnod(0.84/2);
116 //
117 //  Geometry parameters
118     AliRICHGeometry* geometry = new AliRICHGeometry;
119     geometry->SetGapThickness(8);
120     geometry->SetProximityGapThickness(.4);
121     geometry->SetQuartzLength(133);
122     geometry->SetQuartzWidth(127.9);
123     geometry->SetQuartzThickness(.5);
124     geometry->SetOuterFreonLength(133);
125     geometry->SetOuterFreonWidth(41.3);
126     geometry->SetInnerFreonLength(133);
127     geometry->SetInnerFreonWidth(41.3);
128     geometry->SetFreonThickness(1.5);
129 //
130 //  Response parameters
131     AliRICHResponseV0*  responseV0   = new AliRICHResponseV0;
132     responseV0->SetSigmaIntegration(5.);
133     responseV0->SetChargeSlope(27.);
134     responseV0->SetChargeSpread(0.18, 0.18);
135     responseV0->SetMaxAdc(4096);
136     responseV0->SetAlphaFeedback(0.036);
137     responseV0->SetEIonisation(26.e-9);
138     responseV0->SetSqrtKx3(0.77459667);
139     responseV0->SetKx2(0.962);
140     responseV0->SetKx4(0.379);
141     responseV0->SetSqrtKy3(0.77459667);
142     responseV0->SetKy2(0.962);
143     responseV0->SetKy4(0.379);
144     responseV0->SetPitch(0.25);
145 //
146 //
147 //    AliRICH *RICH = (AliRICH *) gAlice->GetDetector("RICH"); 
148     
149     fCkovNumber=0;
150     fFreonProd=0;
151     Int_t i=0;
152     
153     fChambers = new TObjArray(kNCH);
154     for (i=0; i<kNCH; i++) {
155       
156       (*fChambers)[i] = new AliRICHChamber();  
157       
158     }
159   
160     for (i=0; i<kNCH; i++) {
161       SetGeometryModel(i,geometry);
162       SetSegmentationModel(i, segmentationV0);
163       SetResponseModel(i, responseV0);
164       SetNsec(i,1);
165       SetDebugLevel(0);
166     }
167
168
169 }
170
171 void AliRICHv1::Init()
172 {
173
174   printf("*********************************** RICH_INIT ***********************************\n");
175   printf("*                                                                               *\n");
176   printf("*                        AliRICHv1 Full version started                         *\n");
177   printf("*                                                                               *\n");
178
179   
180   AliSegmentation*  segmentation;
181   AliRICHGeometry*  geometry;
182   AliRICHResponse*  response;
183
184
185     // 
186     // Initialize Tracking Chambers
187     //
188     for (Int_t i=1; i<kNCH; i++) {
189         //printf ("i:%d",i);
190         ( (AliRICHChamber*) (*fChambers)[i])->Init(i);  
191     }  
192     
193     //
194     // Set the chamber (sensitive region) GEANT identifier
195     
196     ((AliRICHChamber*)(*fChambers)[0])->SetGid(1);  
197     ((AliRICHChamber*)(*fChambers)[1])->SetGid(2);  
198     ((AliRICHChamber*)(*fChambers)[2])->SetGid(3);  
199     ((AliRICHChamber*)(*fChambers)[3])->SetGid(4);  
200     ((AliRICHChamber*)(*fChambers)[4])->SetGid(5);  
201     ((AliRICHChamber*)(*fChambers)[5])->SetGid(6);  
202     ((AliRICHChamber*)(*fChambers)[6])->SetGid(7); 
203
204     Float_t pos1[3]={0,471.8999,165.2599};
205     Chamber(0).SetChamberTransform(pos1[0],pos1[1],pos1[2],new TRotMatrix("rot993","rot993",90,0,70.69,90,19.30999,-90));
206
207     Float_t pos2[3]={171,470,0};
208     Chamber(1).SetChamberTransform(pos2[0],pos2[1],pos2[2],new TRotMatrix("rot994","rot994",90,-20,90,70,0,0));
209
210     Float_t pos3[3]={0,500,0};
211     Chamber(2).SetChamberTransform(pos3[0],pos3[1],pos3[2],new TRotMatrix("rot995","rot995",90,0,90,90,0,0));
212     
213     Float_t pos4[3]={-171,470,0};
214     Chamber(3).SetChamberTransform(pos4[0],pos4[1],pos4[2], new TRotMatrix("rot996","rot996",90,20,90,110,0,0));  
215
216     Float_t pos5[3]={161.3999,443.3999,-165.3};
217     Chamber(4).SetChamberTransform(pos5[0],pos5[1],pos5[2],new TRotMatrix("rot997","rot997",90,340,108.1999,70,18.2,70));
218
219     Float_t pos6[3]={0., 471.9, -165.3,};
220     Chamber(5).SetChamberTransform(pos6[0],pos6[1],pos6[2],new TRotMatrix("rot998","rot998",90,0,109.3099,90,19.30999,90));
221
222     Float_t pos7[3]={-161.399,443.3999,-165.3};
223     Chamber(6).SetChamberTransform(pos7[0],pos7[1],pos7[2],new TRotMatrix("rot999","rot999",90,20,108.1999,110,18.2,110));
224     
225     segmentation=Chamber(0).GetSegmentationModel(0);
226     geometry=Chamber(0).GetGeometryModel();
227     response=Chamber(0).GetResponseModel();
228     
229      
230     printf("*                            Pads            : %3dx%3d                          *\n",segmentation->Npx(),segmentation->Npy());
231     printf("*                            Pad size        : %5.2f x%5.2f mm2                 *\n",segmentation->Dpx(),segmentation->Dpy()); 
232     printf("*                            Gap Thickness   : %5.1f cm                         *\n",geometry->GetGapThickness());
233     printf("*                            Radiator Width  : %5.1f cm                         *\n",geometry->GetQuartzWidth());
234     printf("*                            Radiator Length : %5.1f cm                         *\n",geometry->GetQuartzLength());
235     printf("*                            Freon Thickness : %5.1f cm                         *\n",geometry->GetFreonThickness());
236     printf("*                            Charge Slope    : %5.1f ADC                        *\n",response->ChargeSlope());
237     printf("*                            Feedback Prob.  : %5.2f %%                         *\n",response->AlphaFeedback()*100);
238     printf("*                            Debug Level     : %3d                              *\n",GetDebugLevel());
239     printf("*                                                                               *\n");
240     printf("*********************************************************************************\n");
241
242 }
243
244
245
246
247
248
249
250