]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TRD/AliTRDv0.cxx
Remove Process_t
[u/mrichter/AliRoot.git] / TRD / AliTRDv0.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.17  2000/11/01 14:53:21  cblume
19 Merge with TRD-develop
20
21 Revision 1.14.2.3  2000/10/06 16:49:46  cblume
22 Made Getters const
23
24 Revision 1.14.2.2  2000/10/04 16:34:58  cblume
25 Replace include files by forward declarations
26
27 Revision 1.14.2.1  2000/09/18 13:48:18  cblume
28 Adapt to new AliTRDhit
29
30 Revision 1.16  2000/06/08 18:32:58  cblume
31 Make code compliant to coding conventions
32
33 Revision 1.15  2000/06/07 16:25:37  cblume
34 Try to remove compiler warnings on Sun and HP
35
36 Revision 1.14  2000/02/28 19:10:26  cblume
37 Include the new TRD classes
38
39 Revision 1.13.4.1  2000/02/28 18:01:53  cblume
40 Change to new hit version and introduce geometry class
41
42 Revision 1.13  1999/11/05 22:50:28  fca
43 Do not use Atan, removed from ROOT too
44
45 Revision 1.12  1999/11/02 16:35:56  fca
46 New version of TRD introduced
47
48 Revision 1.11  1999/11/01 20:41:51  fca
49 Added protections against using the wrong version of FRAME
50
51 Revision 1.10  1999/09/29 09:24:35  fca
52 Introduction of the Copyright and cvs Log
53
54 */
55
56 ///////////////////////////////////////////////////////////////////////////////
57 //                                                                           //
58 //  Transition Radiation Detector version 0 -- fast simulator                //
59 //                                                                           //
60 //Begin_Html
61 /*
62 <img src="picts/AliTRDfullClass.gif">
63 */
64 //End_Html
65 //                                                                           //
66 //                                                                           //
67 ///////////////////////////////////////////////////////////////////////////////
68
69 #include <TMath.h>
70 #include <TRandom.h>
71 #include <TVector.h> 
72 #include <TLorentzVector.h>
73
74 #include "AliRun.h"
75 #include "AliMC.h"
76 #include "AliConst.h"
77   
78 #include "AliTRDv0.h"
79 #include "AliTRDhit.h"
80 #include "AliTRDgeometry.h"
81
82 ClassImp(AliTRDv0)
83   
84 //_____________________________________________________________________________
85 AliTRDv0::AliTRDv0():AliTRD() 
86 {
87   //
88   // AliTRDv0 default constructor
89   //
90
91   fIdSens     = 0;
92   fHitsOn     = 0;
93
94   fIdChamber1 = 0;
95   fIdChamber2 = 0;
96   fIdChamber3 = 0;
97
98 }
99
100 //_____________________________________________________________________________
101 AliTRDv0::AliTRDv0(const char *name, const char *title) 
102          :AliTRD(name, title) 
103 {
104   //
105   // Standard constructor for Transition Radiation Detector version 0
106   //
107
108   fIdSens     = 0;
109   fHitsOn     = 0;
110
111   fIdChamber1 = 0;
112   fIdChamber2 = 0;
113   fIdChamber3 = 0;
114
115 }
116
117 //_____________________________________________________________________________
118 AliTRDv0::~AliTRDv0()
119 {
120   //
121   // AliTRDv0 destructor
122   //
123
124 }
125
126 //_____________________________________________________________________________
127 void AliTRDv0::CreateGeometry()
128 {
129   //
130   // Create the GEANT geometry for the Transition Radiation Detector - Version 0
131   // This version covers the full azimuth. 
132   //
133
134   // Check that FRAME is there otherwise we have no place where to put the TRD
135   AliModule* frame = gAlice->GetModule("FRAME");
136   if (!frame) return;
137
138   // Define the chambers
139   AliTRD::CreateGeometry();
140
141 }
142
143 //_____________________________________________________________________________
144 void AliTRDv0::CreateMaterials()
145 {
146   //
147   // Create materials for the Transition Radiation Detector
148   //
149
150   AliTRD::CreateMaterials();
151
152 }
153
154 //_____________________________________________________________________________
155 void AliTRDv0::Init() 
156 {
157   //
158   // Initialize Transition Radiation Detector after geometry is built
159   //
160
161   AliTRD::Init();
162
163   // Identifier of the sensitive volume (amplification region)
164   fIdSens     = gMC->VolId("UL06");
165
166   // Identifier of the TRD-driftchambers
167   fIdChamber1 = gMC->VolId("UCIO");
168   fIdChamber2 = gMC->VolId("UCIM");
169   fIdChamber3 = gMC->VolId("UCII");
170
171   printf("          Fast simulator\n\n");
172   for (Int_t i = 0; i < 80; i++) printf("*");
173   printf("\n");
174   
175 }
176
177 //_____________________________________________________________________________
178 void AliTRDv0::StepManager()
179 {
180   //
181   // Procedure called at every step in the TRD
182   // Fast simulator. If switched on, a hit is produced when a track
183   // crosses the border between amplification region and pad plane.
184   //
185
186   Int_t   pla = 0; 
187   Int_t   cha = 0;
188   Int_t   sec = 0; 
189   Int_t   iIdSens, icSens; 
190   Int_t   iIdChamber, icChamber;
191
192   Float_t hits[3];
193   Int_t   det;
194
195   TLorentzVector p;
196   TClonesArray  &lhits = *fHits;
197
198   // Writing out hits enabled?
199   if (!(fHitsOn)) return;
200
201   // Use only charged tracks and count them only once per volume
202   if (gMC->TrackCharge()    && 
203       gMC->IsTrackExiting()) {
204     
205     // Check on sensitive volume
206     iIdSens = gMC->CurrentVolID(icSens);
207     if (iIdSens == fIdSens) { 
208
209       gMC->TrackPosition(p);
210       for (Int_t i = 0; i < 3; i++) hits[i] = p[i];
211
212       // The sector number (0 - 17)
213       // The numbering goes clockwise and starts at y = 0
214       Float_t phi = kRaddeg*TMath::ATan2(hits[0],hits[1]);
215       if (phi < 90.) 
216         phi = phi + 270.;
217       else
218         phi = phi -  90.;
219       sec = ((Int_t) (phi / 20));
220
221       // The chamber number 
222       //   0: outer left
223       //   1: middle left
224       //   2: inner
225       //   3: middle right
226       //   4: outer right
227       iIdChamber = gMC->CurrentVolOffID(1,icChamber);
228       if      (iIdChamber == fIdChamber1)
229         cha = (hits[2] < 0 ? 0 : 4);
230       else if (iIdChamber == fIdChamber2)       
231         cha = (hits[2] < 0 ? 1 : 3);
232       else if (iIdChamber == fIdChamber3)       
233         cha = 2;
234
235       // The plane number (0 - 5)
236       pla = icChamber - TMath::Nint((Float_t) (icChamber / 7)) * 6 - 1;
237       det = fGeometry->GetDetector(pla,cha,sec);
238
239       new(lhits[fNhits++]) AliTRDhit(fIshunt
240                                     ,gAlice->CurrentTrack()
241                                     ,det
242                                     ,hits
243                                     ,0);
244
245     }
246
247   }  
248
249 }