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