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