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