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