Increment the version number
[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.15  2001/08/30 09:51:23  hristov
19   The operator[] is replaced by At() or AddAt() in case of TObjArray.
20
21   Revision 1.14  2001/05/16 14:57:20  alibrary
22   New files for folders and Stack
23
24   Revision 1.13  2001/05/10 12:28:04  jbarbosa
25   Repositioned the RICH modules.
26
27   Revision 1.12  2001/02/23 17:26:12  jbarbosa
28   Setters for wire sag effect and voltage values.
29
30   Revision 1.11  2001/02/13 20:10:33  jbarbosa
31   Removed call to SetNSec() (obsolete). Fixed bug in chamber initialisation (not all chambers were initialised).
32
33   Revision 1.10  2000/12/20 14:08:02  jbarbosa
34   Removed dependencies on TGeant3 (thanks to F. Carminati and I. Hrivnacova)
35
36   Revision 1.9  2000/12/18 17:44:40  jbarbosa
37   Took two lines out of output.
38
39   Revision 1.8  2000/11/01 15:39:00  jbarbosa
40   Updated default geometry.
41
42   Revision 1.7  2000/10/03 21:44:09  morsch
43   Use AliSegmentation and AliHit abstract base classes.
44
45   Revision 1.6  2000/07/10 15:28:39  fca
46   Correction of the inheritance scheme
47
48   Revision 1.5  2000/06/30 16:38:51  dibari
49   Removed setters.
50
51   Revision 1.4  2000/06/13 13:13:40  jbarbosa
52   Correcting previous correction...
53
54   Revision 1.3  2000/06/13 13:06:38  jbarbosa
55   Fixed compiling error for HP (multiple declaration)
56
57   Revision 1.2  2000/06/12 15:36:16  jbarbosa
58   Cleaned up version.
59
60   Revision 1.1  2000/06/09 15:00:31  jbarbosa
61   New full version. All parameters configurable.
62
63   Revision 1.9  2000/05/31 08:19:38  jbarbosa
64   Fixed bug in StepManager
65
66   Revision 1.8  2000/05/26 17:30:08  jbarbosa
67   Cerenkov angle now stored within cerenkov data structure.
68
69   Revision 1.7  2000/05/18 10:31:36  jbarbosa
70   Fixed positioning of spacers inside freon.
71   Fixed positioning of proximity gap
72   inside methane.
73   Fixed cut on neutral particles in the StepManager.
74
75   Revision 1.6  2000/04/28 11:51:58  morsch
76    Dimensions of arrays hits and Ckov_data corrected.
77
78   Revision 1.5  2000/04/19 13:28:46  morsch
79   Major changes in geometry (parametrised), materials (updated) and
80   step manager (diagnostics) (JB, AM)
81
82 */
83
84
85
86 //////////////////////////////////////////////////////////
87 //  Manager and hits classes for set: RICH full version //
88 //////////////////////////////////////////////////////////
89
90 #include <TTUBE.h>
91 #include <TNode.h> 
92 #include <TRandom.h> 
93 #include <TParticle.h> 
94
95 #include "AliRICHv1.h"
96 #include "AliRICHHit.h"
97 #include "AliSegmentation.h"
98 #include "AliRICHResponse.h"
99 #include "AliRICHSegmentationV1.h"
100 #include "AliRICHResponseV0.h"
101 #include "AliRICHGeometry.h"
102 #include "AliRun.h"
103 #include "AliMC.h"
104 #include "iostream.h"
105 #include "AliCallf77.h"
106 #include "AliConst.h" 
107 #include "AliPDG.h" 
108
109 ClassImp(AliRICHv1)
110     
111 //___________________________________________
112 AliRICHv1::AliRICHv1()
113 {
114
115 // Default constructor fo AliRICHvv1 (full version)
116
117     //fChambers = 0;
118 }
119
120 //___________________________________________
121 AliRICHv1::AliRICHv1(const char *name, const char *title)
122     : AliRICH(name,title)
123 {
124
125 // Full version of RICH with hits and diagnostics
126
127   // Version 0
128 // Default Segmentation, no hits
129     AliRICHSegmentationV1* segmentation = new AliRICHSegmentationV1;
130 //
131 //  Segmentation parameters
132     segmentation->SetPadSize(0.84,0.80);
133     segmentation->SetDAnod(0.84/2);
134 //
135 //  Geometry parameters
136     AliRICHGeometry* geometry = new AliRICHGeometry;
137     geometry->SetGapThickness(8);
138     geometry->SetProximityGapThickness(.4);
139     geometry->SetQuartzLength(133);
140     geometry->SetQuartzWidth(127.9);
141     geometry->SetQuartzThickness(.5);
142     geometry->SetOuterFreonLength(133);
143     geometry->SetOuterFreonWidth(41.3);
144     geometry->SetInnerFreonLength(133);
145     geometry->SetInnerFreonWidth(41.3);
146     geometry->SetFreonThickness(1.5);
147 //
148 //  Response parameters
149     AliRICHResponseV0*  response   = new AliRICHResponseV0;
150     response->SetSigmaIntegration(5.);
151     response->SetChargeSlope(27.);
152     response->SetChargeSpread(0.18, 0.18);
153     response->SetMaxAdc(4096);
154     response->SetAlphaFeedback(0.036);
155     response->SetEIonisation(26.e-9);
156     response->SetSqrtKx3(0.77459667);
157     response->SetKx2(0.962);
158     response->SetKx4(0.379);
159     response->SetSqrtKy3(0.77459667);
160     response->SetKy2(0.962);
161     response->SetKy4(0.379);
162     response->SetPitch(0.25);
163     response->SetWireSag(1);                     // 1->On, 0->Off
164     response->SetVoltage(2150);                  // Should only be 2000, 2050, 2100 or 2150
165
166 //
167 //    AliRICH *RICH = (AliRICH *) gAlice->GetDetector("RICH"); 
168     
169     fCkovNumber=0;
170     fFreonProd=0;
171     Int_t i=0;
172     
173     fChambers = new TObjArray(kNCH);
174     for (i=0; i<kNCH; i++) {
175       
176       //PH      (*fChambers)[i] = new AliRICHChamber();  
177       fChambers->AddAt(new AliRICHChamber(), i);  
178       
179     }
180   
181     for (i=0; i<kNCH; i++) {
182       SetGeometryModel(i,geometry);
183       SetSegmentationModel(i, segmentation);
184       SetResponseModel(i, response);
185       SetDebugLevel(0);
186     }
187
188
189 }
190
191 void AliRICHv1::Init()
192 {
193
194   if(fDebug) {
195     printf("%s: *********************************** RICH_INIT ***********************************\n",ClassName());
196     printf("%s: *                                                                               *\n",ClassName());
197     printf("%s: *                        AliRICHv1 Full version started                         *\n",ClassName());
198     printf("%s: *                                                                               *\n",ClassName());
199   }
200
201   
202   AliSegmentation*  segmentation;
203   AliRICHGeometry*  geometry;
204   AliRICHResponse*  response;
205
206
207     // 
208     // Initialize Tracking Chambers
209     //
210     for (Int_t i=0; i<kNCH; i++) {
211         //printf ("i:%d",i);
212       //PH      ( (AliRICHChamber*) (*fChambers)[i])->Init(i);  
213         ( (AliRICHChamber*)fChambers->At(i))->Init(i);  
214     }  
215     
216     //
217     // Set the chamber (sensitive region) GEANT identifier
218     
219     //PH    ((AliRICHChamber*)(*fChambers)[0])->SetGid(1);  
220     //PH    ((AliRICHChamber*)(*fChambers)[1])->SetGid(2);  
221     //PH    ((AliRICHChamber*)(*fChambers)[2])->SetGid(3);  
222     //PH    ((AliRICHChamber*)(*fChambers)[3])->SetGid(4);  
223     //PH    ((AliRICHChamber*)(*fChambers)[4])->SetGid(5);  
224     //PH    ((AliRICHChamber*)(*fChambers)[5])->SetGid(6);  
225     //PH    ((AliRICHChamber*)(*fChambers)[6])->SetGid(7); 
226
227     ((AliRICHChamber*)fChambers->At(0))->SetGid(1);  
228     ((AliRICHChamber*)fChambers->At(1))->SetGid(2);  
229     ((AliRICHChamber*)fChambers->At(2))->SetGid(3);  
230     ((AliRICHChamber*)fChambers->At(3))->SetGid(4);  
231     ((AliRICHChamber*)fChambers->At(4))->SetGid(5);  
232     ((AliRICHChamber*)fChambers->At(5))->SetGid(6);  
233     ((AliRICHChamber*)fChambers->At(6))->SetGid(7);  
234
235
236     segmentation=Chamber(0).GetSegmentationModel(0);
237     geometry=Chamber(0).GetGeometryModel();
238     response=Chamber(0).GetResponseModel();
239     
240     Float_t offset       = 490 + 1.276 - geometry->GetGapThickness()/2;        //distance from center of mother volume to methane
241     Float_t deltaphi     = 19.5;                                               //phi angle between center of chambers - z direction
242     Float_t deltatheta   = 20;                                                 //theta angle between center of chambers - x direction
243     Float_t cosphi       = TMath::Cos(deltaphi*TMath::Pi()/180);
244     Float_t sinphi       = TMath::Sin(deltaphi*TMath::Pi()/180);
245     Float_t costheta     = TMath::Cos(deltatheta*TMath::Pi()/180);
246     Float_t sintheta     = TMath::Sin(deltatheta*TMath::Pi()/180);
247
248     Float_t pos1[3]={0.                , offset*cosphi         , offset*sinphi};
249     Float_t pos2[3]={offset*sintheta   , offset*costheta       , 0. };
250     Float_t pos3[3]={0.                , offset                , 0.};
251     Float_t pos4[3]={-offset*sintheta  , offset*costheta       , 0.};
252     Float_t pos5[3]={offset*sinphi     , offset*costheta*cosphi, -offset*sinphi};
253     Float_t pos6[3]={0.                , offset*cosphi         , -offset*sinphi};
254     Float_t pos7[3]={ -offset*sinphi   , offset*costheta*cosphi, -offset*sinphi};
255
256     Chamber(0).SetChamberTransform(pos1[0],pos1[1],pos1[2],new TRotMatrix("rot993","rot993",90., 0.               , 90. - deltaphi, 90.             , deltaphi, -90.           ));
257     Chamber(1).SetChamberTransform(pos2[0],pos2[1],pos2[2],new TRotMatrix("rot994","rot994",90., -deltatheta      , 90.           , 90.- deltatheta , 0.      , 0.             ));
258     Chamber(2).SetChamberTransform(pos3[0],pos3[1],pos3[2],new TRotMatrix("rot995","rot995",90., 0.               , 90.           , 90.             , 0.      , 0.             ));
259     Chamber(3).SetChamberTransform(pos4[0],pos4[1],pos4[2],new TRotMatrix("rot996","rot996",90.,  deltatheta      , 90.           , 90 + deltatheta , 0.      , 0.             ));
260     Chamber(4).SetChamberTransform(pos5[0],pos5[1],pos5[2],new TRotMatrix("rot997","rot997",90., 360. - deltatheta, 108.2         , 90.- deltatheta ,18.2     , 90 - deltatheta));
261     Chamber(5).SetChamberTransform(pos6[0],pos6[1],pos6[2],new TRotMatrix("rot998","rot998",90., 0.               , 90 + deltaphi , 90.             , deltaphi, 90.            ));
262     Chamber(6).SetChamberTransform(pos7[0],pos7[1],pos7[2],new TRotMatrix("rot999","rot999",90., deltatheta       , 108.2         , 90.+ deltatheta ,18.2     , 90 + deltatheta));   
263      
264     if(fDebug) {
265       printf("%s: *                            Pads            : %3dx%3d                          *\n",
266              ClassName(),segmentation->Npx(),segmentation->Npy());
267       printf("%s: *                            Pad size        : %5.2f x%5.2f mm2                 *\n",
268              ClassName(),segmentation->Dpx(),segmentation->Dpy()); 
269       printf("%s: *                            Gap Thickness   : %5.1f cm                         *\n",
270              ClassName(),geometry->GetGapThickness());
271       printf("%s: *                            Radiator Width  : %5.1f cm                         *\n",
272              ClassName(),geometry->GetQuartzWidth());
273       printf("%s: *                            Radiator Length : %5.1f cm                         *\n",
274              ClassName(),geometry->GetQuartzLength());
275       printf("%s: *                            Freon Thickness : %5.1f cm                         *\n",
276              ClassName(),geometry->GetFreonThickness());
277       printf("%s: *                            Charge Slope    : %5.1f ADC                        *\n",
278              ClassName(),response->ChargeSlope());
279       printf("%s: *                            Feedback Prob.  : %5.2f %%                          *\n",
280              ClassName(),response->AlphaFeedback()*100);
281       printf("%s: *                            Debug Level     : %3d                              *\n",
282              ClassName(),GetDebugLevel());
283       printf("%s: *                                                                               *\n",
284              ClassName());
285       printf("%s: *********************************************************************************\n",
286              ClassName());
287     }
288 }
289
290
291
292
293
294
295
296