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