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