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