]> git.uio.no Git - u/mrichter/AliRoot.git/blob - RICH/AliRICHv2.cxx
Some additional changes related to the previous changes. AliL3Transform
[u/mrichter/AliRoot.git] / RICH / AliRICHv2.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.7  2001/05/10 12:28:26  jbarbosa
19   Repositioned the RICH modules.
20
21   Revision 1.6  2001/02/13 20:10:45  jbarbosa
22   Removed call to SetNSec() (obsolete). Fixed bug in chamber initialisation (not all chambers were initialised).
23
24   Revision 1.5  2000/12/20 14:08:14  jbarbosa
25   Removed dependencies on TGeant3 (thanks to F. Carminati and I. Hrivnacova)
26
27   Revision 1.4  2000/12/18 17:44:49  jbarbosa
28   Took two lines out of output.
29
30   Revision 1.3  2000/10/03 21:44:09  morsch
31   Use AliSegmentation and AliHit abstract base classes.
32
33   Revision 1.2  2000/07/10 15:28:39  fca
34   Correction of the inheritance scheme
35
36   Revision 1.1  2000/06/30 16:40:03  dibari
37   New configurale version.
38
39   Revision 1.4  2000/06/13 13:13:40  jbarbosa
40   Correcting previous correction...
41
42   Revision 1.3  2000/06/13 13:06:38  jbarbosa
43   Fixed compiling error for HP (multiple declaration)
44
45   Revision 1.2  2000/06/12 15:36:16  jbarbosa
46   Cleaned up version.
47
48   Revision 1.1  2000/06/09 15:00:31  jbarbosa
49   New full version. All parameters configurable.
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 full version //
76 //////////////////////////////////////////////////////////
77
78 #include <TTUBE.h>
79 #include <TNode.h> 
80 #include <TRandom.h> 
81 #include <TParticle.h> 
82
83 #include "AliRICHv2.h"
84 #include "AliRICHHit.h"
85 #include "AliRun.h"
86 #include "AliMC.h"
87 #include "iostream.h"
88 #include "AliCallf77.h"
89 #include "AliConst.h" 
90 #include "AliPDG.h" 
91
92 ClassImp(AliRICHv2)
93     
94 //___________________________________________
95 AliRICHv2::AliRICHv2()
96 {
97
98 // Default constructor fo AliRICHvv2 (full version)
99
100     //fChambers = 0;
101 }
102
103 //___________________________________________
104 AliRICHv2::AliRICHv2(const char *name, const char *title)
105     : AliRICH(name,title)
106 {
107
108 // Full version of RICH with hits and diagnostics, CONFIURABLE
109
110     fCkovNumber=0;
111     fFreonProd=0;
112   
113     fChambers = new TObjArray(kNCH);
114     for (Int_t i=0; i<kNCH; i++) {
115     
116         (*fChambers)[i] = new AliRICHChamber();  
117         
118     }
119 }
120
121 void AliRICHv2::Init()
122 {
123
124   if(fDebug) {
125     printf("%s: *********************************** RICH_INIT ***********************************\n",ClassName());
126     printf("%s: *                                                                               *\n",ClassName());
127     printf("%s: *                    AliRICHv2 Configurable version started                     *\n",ClassName());
128     printf("%s: *                                                                               *\n",ClassName());
129   }
130
131   
132   AliSegmentation*  segmentation;
133   AliRICHGeometry*  geometry;
134   AliRICHResponse*  response;
135
136
137     // 
138     // Initialize Tracking Chambers
139     //
140     for (Int_t i=0; i<kNCH; i++) {
141         //printf ("i:%d",i);
142         ( (AliRICHChamber*) (*fChambers)[i])->Init(i);  
143     }  
144     
145     //
146     // Set the chamber (sensitive region) GEANT identifier
147     
148     ((AliRICHChamber*)(*fChambers)[0])->SetGid(1);  
149     ((AliRICHChamber*)(*fChambers)[1])->SetGid(2);  
150     ((AliRICHChamber*)(*fChambers)[2])->SetGid(3);  
151     ((AliRICHChamber*)(*fChambers)[3])->SetGid(4);  
152     ((AliRICHChamber*)(*fChambers)[4])->SetGid(5);  
153     ((AliRICHChamber*)(*fChambers)[5])->SetGid(6);  
154     ((AliRICHChamber*)(*fChambers)[6])->SetGid(7); 
155
156     segmentation=Chamber(0).GetSegmentationModel(0);
157     geometry=Chamber(0).GetGeometryModel();
158     response=Chamber(0).GetResponseModel();
159
160     Float_t offset       = 490 + 1.276 - geometry->GetGapThickness()/2;        //distance from center of mother volume to methane
161     Float_t deltaphi     = 19.5;                                               //phi angle between center of chambers - z direction
162     Float_t deltatheta   = 20;                                                 //theta angle between center of chambers - x direction
163     Float_t cosphi       = TMath::Cos(deltaphi*TMath::Pi()/180);
164     Float_t sinphi       = TMath::Sin(deltaphi*TMath::Pi()/180);
165     Float_t costheta     = TMath::Cos(deltatheta*TMath::Pi()/180);
166     Float_t sintheta     = TMath::Sin(deltatheta*TMath::Pi()/180);
167
168     Float_t pos1[3]={0.                , offset*cosphi         , offset*sinphi};
169     Float_t pos2[3]={offset*sintheta   , offset*costheta       , 0. };
170     Float_t pos3[3]={0.                , offset                , 0.};
171     Float_t pos4[3]={-offset*sintheta  , offset*costheta       , 0.};
172     Float_t pos5[3]={offset*sinphi     , offset*costheta*cosphi, -offset*sinphi};
173     Float_t pos6[3]={0.                , offset*cosphi         , -offset*sinphi};
174     Float_t pos7[3]={ -offset*sinphi   , offset*costheta*cosphi, -offset*sinphi};
175
176     Chamber(0).SetChamberTransform(pos1[0],pos1[1],pos1[2],new TRotMatrix("rot993","rot993",90., 0.               , 90. - deltaphi, 90.             , deltaphi, -90.           ));
177     Chamber(1).SetChamberTransform(pos2[0],pos2[1],pos2[2],new TRotMatrix("rot994","rot994",90., -deltatheta      , 90.           , 90.- deltatheta , 0.      , 0.             ));
178     Chamber(2).SetChamberTransform(pos3[0],pos3[1],pos3[2],new TRotMatrix("rot995","rot995",90., 0.               , 90.           , 90.             , 0.      , 0.             ));
179     Chamber(3).SetChamberTransform(pos4[0],pos4[1],pos4[2],new TRotMatrix("rot996","rot996",90.,  deltatheta      , 90.           , 90 + deltatheta , 0.      , 0.             ));
180     Chamber(4).SetChamberTransform(pos5[0],pos5[1],pos5[2],new TRotMatrix("rot997","rot997",90., 360. - deltatheta, 108.2         , 90.- deltatheta ,18.2     , 90 - deltatheta));
181     Chamber(5).SetChamberTransform(pos6[0],pos6[1],pos6[2],new TRotMatrix("rot998","rot998",90., 0.               , 90 + deltaphi , 90.             , deltaphi, 90.            ));
182     Chamber(6).SetChamberTransform(pos7[0],pos7[1],pos7[2],new TRotMatrix("rot999","rot999",90., deltatheta       , 108.2         , 90.+ deltatheta ,18.2     , 90 + deltatheta));
183     
184     if(fDebug) {    
185       printf("%s: *                            Pads            : %3dx%3d                          *\n",
186              ClassName(),segmentation->Npx(),segmentation->Npy());
187       printf("%s: *                            Pad size        : %5.2f x%5.2f mm2                 *\n",
188              ClassName(),segmentation->Dpx(),segmentation->Dpy()); 
189       printf("%s: *                            Gap Thickness   : %5.1f cm                         *\n",
190              ClassName(),geometry->GetGapThickness());
191       printf("%s: *                            Radiator Width  : %5.1f cm                         *\n",
192              ClassName(),geometry->GetQuartzWidth());
193       printf("%s: *                            Radiator Length : %5.1f cm                         *\n",
194              ClassName(),geometry->GetQuartzLength());
195       printf("%s: *                            Freon Thickness : %5.1f cm                         *\n",
196              ClassName(),geometry->GetFreonThickness());
197       printf("%s: *                            Charge Slope    : %5.1f ADC                        *\n",
198              ClassName(),response->ChargeSlope());
199       printf("%s: *                            Feedback Prob.  : %5.2f %%                          *\n",
200              ClassName(),response->AlphaFeedback()*100);
201       printf("%s: *                            Debug Level     : %3d                              *\n",
202              ClassName(),GetDebugLevel());
203       printf("%s: *                                                                               *\n",
204              ClassName());
205       printf("%s: *********************************************************************************\n",
206              ClassName());
207     }
208 }
209