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