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