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