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