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