add NaN trap to linux version
[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.14  2000/07/10 15:28:39  fca
19   Correction of the inheritance scheme
20
21   Revision 1.13  2000/06/30 16:38:15  dibari
22   Test on kDebugevel
23
24   Revision 1.12  2000/06/13 13:06:28  jbarbosa
25   Fixed compiling error for HP (multiple declaration)
26
27   Revision 1.11  2000/06/12 15:35:44  jbarbosa
28   Cleaned up version.
29
30   Revision 1.10  2000/06/09 14:59:25  jbarbosa
31   New default version. No setters needed, no hits.
32
33   Revision 1.9  2000/05/31 08:19:38  jbarbosa
34   Fixed bug in StepManager
35
36   Revision 1.8  2000/05/26 17:30:08  jbarbosa
37   Cerenkov angle now stored within cerenkov data structure.
38
39   Revision 1.7  2000/05/18 10:31:36  jbarbosa
40   Fixed positioning of spacers inside freon.
41   Fixed positioning of proximity gap
42   inside methane.
43   Fixed cut on neutral particles in the StepManager.
44
45   Revision 1.6  2000/04/28 11:51:58  morsch
46    Dimensions of arrays hits and Ckov_data corrected.
47
48   Revision 1.5  2000/04/19 13:28:46  morsch
49   Major changes in geometry (parametrised), materials (updated) and
50   step manager (diagnostics) (JB, AM)
51
52 */
53
54
55
56 /////////////////////////////////////////////////////////////
57 //  Manager and hits classes for set: RICH default version //
58 /////////////////////////////////////////////////////////////
59
60 #include <TTUBE.h>
61 #include <TNode.h> 
62 #include <TRandom.h> 
63
64 #include "AliRICHv0.h"
65 #include "AliRICHSegmentation.h"
66 #include "AliRICHResponse.h"
67 #include "AliRICHSegmentationV0.h"
68 #include "AliRICHResponseV0.h"
69 #include "AliRICHGeometry.h"
70 #include "AliRun.h"
71 #include "AliMC.h"
72 #include "iostream.h"
73 #include "AliCallf77.h"
74 #include "AliConst.h" 
75 #include "AliPDG.h" 
76 #include "TGeant3.h"
77
78 ClassImp(AliRICHv0)
79     
80 //___________________________________________
81 AliRICHv0::AliRICHv0() : AliRICH()
82 {
83
84 // Default constructor
85
86     //fChambers = 0;
87 }
88
89 //___________________________________________
90 AliRICHv0::AliRICHv0(const char *name, const char *title)
91     : AliRICH(name,title)
92 {
93     //
94 // Version 0
95 // Default Segmentation, no hits
96     AliRICHSegmentationV0* segmentationV0 = new AliRICHSegmentationV0;
97 //
98 //  Segmentation parameters
99     segmentationV0->SetPadSize(0.84,0.80);
100     segmentationV0->SetDAnod(0.84/2);
101 //
102 //  Geometry parameters
103     AliRICHGeometry* geometry = new AliRICHGeometry;
104     geometry->SetGapThickness(8);
105     geometry->SetProximityGapThickness(.4);
106     geometry->SetQuartzLength(131);
107     geometry->SetQuartzWidth(126.2);
108     geometry->SetQuartzThickness(.5);
109     geometry->SetOuterFreonLength(131);
110     geometry->SetOuterFreonWidth(40.3);
111     geometry->SetInnerFreonLength(131);
112     geometry->SetInnerFreonWidth(40.3);
113     geometry->SetFreonThickness(1.5);
114 //
115 //  Response parameters
116     AliRICHResponseV0*  responseV0   = new AliRICHResponseV0;
117     responseV0->SetSigmaIntegration(5.);
118     responseV0->SetChargeSlope(27.);
119     responseV0->SetChargeSpread(0.18, 0.18);
120     responseV0->SetMaxAdc(4096);
121     responseV0->SetAlphaFeedback(0.036);
122     responseV0->SetEIonisation(26.e-9);
123     responseV0->SetSqrtKx3(0.77459667);
124     responseV0->SetKx2(0.962);
125     responseV0->SetKx4(0.379);
126     responseV0->SetSqrtKy3(0.77459667);
127     responseV0->SetKy2(0.962);
128     responseV0->SetKy4(0.379);
129     responseV0->SetPitch(0.25);
130 //
131 //
132 //    AliRICH *RICH = (AliRICH *) gAlice->GetDetector("RICH"); 
133     
134     fCkovNumber=0;
135     fFreonProd=0;
136     Int_t i=0;
137     
138     fChambers = new TObjArray(kNCH);
139     for (i=0; i<kNCH; i++) {
140       
141       (*fChambers)[i] = new AliRICHChamber();  
142       
143     }
144   
145     for (i=0; i<kNCH; i++) {
146       SetGeometryModel(i,geometry);
147       SetSegmentationModel(i, segmentationV0);
148       SetResponseModel(i, responseV0);
149       SetNsec(i,1);
150       SetDebugLevel(0);
151     }
152 }
153
154
155
156 //___________________________________________
157
158 void AliRICHv0::Init()
159 {
160
161   printf("*********************************** RICH_INIT ***********************************\n");
162   printf("*                                                                               *\n");
163   printf("*                       AliRICHv0 Default version started                       *\n");
164   printf("*                                                                               *\n");
165
166   
167   AliRICHSegmentation*  segmentation;
168   AliRICHGeometry*  geometry;
169   AliRICHResponse*  response;
170
171
172     // 
173     // Initialize Tracking Chambers
174     //
175     for (Int_t i=1; i<kNCH; i++) {
176         //printf ("i:%d",i);
177         ( (AliRICHChamber*) (*fChambers)[i])->Init();  
178     }  
179     
180     //
181     // Set the chamber (sensitive region) GEANT identifier
182     
183     ((AliRICHChamber*)(*fChambers)[0])->SetGid(1);  
184     ((AliRICHChamber*)(*fChambers)[1])->SetGid(2);  
185     ((AliRICHChamber*)(*fChambers)[2])->SetGid(3);  
186     ((AliRICHChamber*)(*fChambers)[3])->SetGid(4);  
187     ((AliRICHChamber*)(*fChambers)[4])->SetGid(5);  
188     ((AliRICHChamber*)(*fChambers)[5])->SetGid(6);  
189     ((AliRICHChamber*)(*fChambers)[6])->SetGid(7); 
190
191     Float_t pos1[3]={0,471.8999,165.2599};
192     Chamber(0).SetChamberTransform(pos1[0],pos1[1],pos1[2],new TRotMatrix("rot993","rot993",90,0,70.69,90,19.30999,-90));
193
194     Float_t pos2[3]={171,470,0};
195     Chamber(1).SetChamberTransform(pos2[0],pos2[1],pos2[2],new TRotMatrix("rot994","rot994",90,-20,90,70,0,0));
196
197     Float_t pos3[3]={0,500,0};
198     Chamber(2).SetChamberTransform(pos3[0],pos3[1],pos3[2],new TRotMatrix("rot995","rot995",90,0,90,90,0,0));
199     
200     Float_t pos4[3]={-171,470,0};
201     Chamber(3).SetChamberTransform(pos4[0],pos4[1],pos4[2], new TRotMatrix("rot996","rot996",90,20,90,110,0,0));  
202
203     Float_t pos5[3]={161.3999,443.3999,-165.3};
204     Chamber(4).SetChamberTransform(pos5[0],pos5[1],pos5[2],new TRotMatrix("rot997","rot997",90,340,108.1999,70,18.2,70));
205
206     Float_t pos6[3]={0., 471.9, -165.3,};
207     Chamber(5).SetChamberTransform(pos6[0],pos6[1],pos6[2],new TRotMatrix("rot998","rot998",90,0,109.3099,90,19.30999,90));
208
209     Float_t pos7[3]={-161.399,443.3999,-165.3};
210     Chamber(6).SetChamberTransform(pos7[0],pos7[1],pos7[2],new TRotMatrix("rot999","rot999",90,20,108.1999,110,18.2,110));
211     
212     segmentation=Chamber(0).GetSegmentationModel(0);
213     geometry=Chamber(0).GetGeometryModel();
214     response=Chamber(0).GetResponseModel();
215     
216      
217     printf("*                            Pads            : %3dx%3d                          *\n",segmentation->Npx(),segmentation->Npy());
218     printf("*                            Pad size        : %5.2f x%5.2f mm2                 *\n",segmentation->Dpx(),segmentation->Dpy()); 
219     printf("*                            Gap Thickness   : %5.1f cm                         *\n",geometry->GetGapThickness());
220     printf("*                            Radiator Width  : %5.1f cm                         *\n",geometry->GetQuartzWidth());
221     printf("*                            Radiator Length : %5.1f cm                         *\n",geometry->GetQuartzLength());
222     printf("*                            Freon Thickness : %5.1f cm                         *\n",geometry->GetFreonThickness());
223     printf("*                            Charge Slope    : %5.1f ADC                        *\n",response->ChargeSlope());
224     printf("*                            Feedback Prob.  : %5.2f %%                         *\n",response->AlphaFeedback()*100);
225     printf("*                                                                               *\n");
226     printf("*                                   Success!                                    *\n");
227     printf("*                                                                               *\n");
228     printf("*********************************************************************************\n");
229
230 }
231