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