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