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