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