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