]>
Commit | Line | Data |
---|---|---|
fe4da5cc | 1 | #ifndef MUON_H |
2 | #define MUON_H | |
3da30618 | 3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * |
4 | * See cxx source for full Copyright notice */ | |
5 | ||
6 | /* $Id$ */ | |
7 | ||
fe4da5cc | 8 | //////////////////////////////////////////////// |
9 | // Manager and hits classes for set:MUON // | |
10 | //////////////////////////////////////////////// | |
11 | #include "AliDetector.h" | |
12 | #include "AliHit.h" | |
13 | #include "AliMUONConst.h" | |
a897a37a | 14 | #include "AliDigit.h" |
15 | #include "AliMUONchamber.h" | |
16 | #include "AliMUONSegRes.h" | |
fe4da5cc | 17 | #include <TVector.h> |
18 | #include <TObjArray.h> | |
a897a37a | 19 | #include <TArrayF.h> |
20 | #include <TFile.h> | |
21 | #include <TTree.h> | |
22 | typedef enum {simple, medium, big} Cluster_t; | |
fe4da5cc | 23 | |
24 | static const int NCH=14; | |
25 | ||
26 | class AliMUONcluster; | |
a897a37a | 27 | class AliMUONRawCluster; |
28 | class AliMUONClusterFinder; | |
29 | class AliMUONcorrelation; | |
fe4da5cc | 30 | |
fe4da5cc | 31 | |
32 | //---------------------------------------------- | |
fe4da5cc | 33 | |
34 | ||
35 | class AliMUONcluster : public TObject { | |
36 | public: | |
37 | ||
38 | Int_t fHitNumber; // Hit number | |
39 | Int_t fCathode; // Cathode number | |
40 | Int_t fQ ; // Total charge | |
41 | Int_t fPadX ; // Pad number along X | |
42 | Int_t fPadY ; // Pad number along Y | |
43 | Int_t fQpad ; // Charge per pad | |
44 | Int_t fRSec ; // R -sector of pad | |
45 | ||
46 | public: | |
47 | AliMUONcluster() { | |
48 | fHitNumber=fQ=fPadX=fPadY=fQpad=fRSec=0; | |
49 | } | |
50 | AliMUONcluster(Int_t *clhits); | |
51 | virtual ~AliMUONcluster() {;} | |
52 | ||
53 | ClassDef(AliMUONcluster,1) //Cluster object for set:MUON | |
54 | }; | |
55 | ||
56 | ||
57 | class AliMUONreccluster : public TObject { | |
58 | public: | |
59 | ||
60 | Int_t fTracks[3]; //labels of overlapped tracks | |
61 | ||
62 | Int_t fQ ; // Q of cluster (in ADC counts) | |
63 | Float_t fX ; // X of cluster | |
64 | Float_t fY ; // Y of cluster | |
a897a37a | 65 | |
fe4da5cc | 66 | public: |
67 | AliMUONreccluster() { | |
e3a4d40e | 68 | fTracks[0]=fTracks[1]=fTracks[2]=-1; |
a897a37a | 69 | fQ=0; fX=fY=0; |
fe4da5cc | 70 | } |
71 | virtual ~AliMUONreccluster() {;} | |
72 | ||
73 | ClassDef(AliMUONreccluster,1) //Cluster object for set:MUON | |
74 | }; | |
75 | ||
76 | //_____________________________________________________________________________ | |
77 | ||
78 | class AliMUONdigit : public TObject { | |
79 | public: | |
80 | Int_t fPadX; // Pad number along x | |
81 | Int_t fPadY ; // Pad number along y | |
82 | Int_t fSignal; // Signal amplitude | |
a897a37a | 83 | Int_t fTcharges[10]; // charge per track making this digit (up to 10) |
84 | Int_t fTracks[10]; // primary tracks making this digit (up to 10) | |
85 | Int_t fPhysics; // physics contribution to signal | |
86 | Int_t fHit; // hit number - temporary solution | |
fe4da5cc | 87 | |
88 | ||
89 | ||
90 | public: | |
91 | AliMUONdigit() {} | |
92 | AliMUONdigit(Int_t *digits); | |
93 | AliMUONdigit(Int_t *tracks, Int_t *charges, Int_t *digits); | |
a897a37a | 94 | virtual ~AliMUONdigit(); |
95 | ||
fe4da5cc | 96 | ClassDef(AliMUONdigit,1) //Digits for set:MUON |
97 | }; | |
98 | //_____________________________________________________________________________ | |
99 | ||
100 | class AliMUONlist : public AliMUONdigit { | |
101 | public: | |
a897a37a | 102 | Int_t fChamber; // chamber number of pad |
fe4da5cc | 103 | TObjArray *fTrackList; |
fe4da5cc | 104 | public: |
105 | AliMUONlist() {fTrackList=0;} | |
106 | AliMUONlist(Int_t rpad, Int_t *digits); | |
a897a37a | 107 | virtual ~AliMUONlist() {delete fTrackList;} |
fe4da5cc | 108 | TObjArray *TrackList() {return fTrackList;} |
fe4da5cc | 109 | ClassDef(AliMUONlist,1) //Digits for set:MUON |
110 | }; | |
111 | //___________________________________________ | |
112 | ||
113 | ||
114 | //___________________________________________ | |
115 | ||
116 | class AliMUONhit : public AliHit { | |
117 | public: | |
118 | Int_t fChamber; // Chamber number | |
a897a37a | 119 | Float_t fParticle; // Geant3 particle type |
fe4da5cc | 120 | Float_t fTheta ; // Incident theta angle in degrees |
121 | Float_t fPhi ; // Incident phi angle in degrees | |
122 | Float_t fTlength; // Track length inside the chamber | |
123 | Float_t fEloss; // ionisation energy loss in gas | |
124 | Int_t fPHfirst; // first padhit | |
125 | Int_t fPHlast; // last padhit | |
a897a37a | 126 | |
127 | // modifs perso | |
128 | Float_t fPTot; // hit momentum P | |
129 | Float_t fCxHit; // Px/P | |
130 | Float_t fCyHit; // Py/P | |
131 | Float_t fCzHit; // Pz/P | |
132 | ||
fe4da5cc | 133 | public: |
134 | AliMUONhit() {} | |
135 | AliMUONhit(Int_t fIshunt, Int_t track, Int_t *vol, Float_t *hits); | |
136 | virtual ~AliMUONhit() {} | |
137 | ||
138 | ClassDef(AliMUONhit,1) //Hits object for set:MUON | |
139 | }; | |
140 | ||
141 | class AliMUON : public AliDetector { | |
142 | public: | |
143 | AliMUON(); | |
144 | AliMUON(const char *name, const char *title); | |
145 | virtual ~AliMUON(); | |
146 | virtual void AddHit(Int_t, Int_t*, Float_t*); | |
147 | virtual void AddCluster(Int_t*); | |
148 | virtual void AddDigits(Int_t, Int_t*, Int_t*, Int_t*); | |
a897a37a | 149 | virtual void AddRawCluster(Int_t, const AliMUONRawCluster&); |
a897a37a | 150 | virtual void AddCathCorrel(Int_t, Int_t*, Float_t*, Float_t*); |
fe4da5cc | 151 | virtual void BuildGeometry(); |
152 | virtual void CreateGeometry() {} | |
153 | virtual void CreateMaterials() {} | |
154 | virtual void StepManager(); | |
155 | Int_t DistancetoPrimitive(Int_t px, Int_t py); | |
156 | virtual Int_t IsVersion() const =0; | |
157 | // | |
158 | TClonesArray *Clusters() {return fClusters;} | |
a897a37a | 159 | virtual void MakeTreeC(Option_t *option="C"); |
160 | void GetTreeC(Int_t); | |
fe4da5cc | 161 | virtual void MakeBranch(Option_t *opt=" "); |
162 | void SetTreeAddress(); | |
163 | virtual void ResetHits(); | |
164 | virtual void ResetDigits(); | |
a897a37a | 165 | virtual void ResetRawClusters(); |
a897a37a | 166 | virtual void ResetCorrelation(); |
167 | virtual void FindClusters(Int_t,Int_t); | |
027eb005 | 168 | virtual void Digitise(Int_t,Int_t,Option_t *opt1=" ",Option_t *opt2=" ",Text_t *name=" "); |
a897a37a | 169 | virtual void CathodeCorrelation(Int_t); |
170 | virtual void SortTracks(Int_t *,Int_t *,Int_t); | |
171 | // | |
172 | // modifs perso | |
173 | ||
e3a4d40e | 174 | void InitTracking(Double_t &, Double_t &, Double_t &); |
a897a37a | 175 | void Reconst(Int_t &,Int_t &,Int_t,Int_t &,Int_t&,Int_t&, Option_t *option,Text_t *filename); |
176 | void FinishEvent(); | |
e3a4d40e | 177 | void CloseTracking(); |
a897a37a | 178 | void SetCutPxz(Double_t p) {fSPxzCut=p;} |
179 | void SetSigmaCut(Double_t p) {fSSigmaCut=p;} | |
180 | void SetXPrec(Double_t p) {fSXPrec=p;} | |
181 | void SetYPrec(Double_t p) {fSYPrec=p;} | |
182 | Double_t GetCutPxz() {return fSPxzCut;} | |
183 | Double_t GetSigmaCut() {return fSSigmaCut;} | |
184 | Double_t GetXPrec() {return fSXPrec;} | |
185 | Double_t GetYPrec() {return fSYPrec;} | |
186 | // fin modifs perso | |
187 | ||
fe4da5cc | 188 | // Configuration Methods (per station id) |
189 | // | |
190 | // Set Chamber Segmentation Parameters | |
191 | // id refers to the station and isec to the cathode plane | |
192 | virtual void SetPADSIZ(Int_t id, Int_t isec, Float_t p1, Float_t p2); | |
193 | ||
194 | // Set Signal Generation Parameters | |
a897a37a | 195 | virtual void SetSigmaIntegration(Int_t id, Float_t p1); |
196 | virtual void SetChargeSlope(Int_t id, Float_t p1); | |
197 | virtual void SetChargeSpread(Int_t id, Float_t p1, Float_t p2); | |
198 | virtual void SetMaxAdc(Int_t id, Float_t p1); | |
fe4da5cc | 199 | // Set Segmentation and Response Model |
200 | virtual void SetSegmentationModel(Int_t id, Int_t isec, AliMUONsegmentation *segmentation); | |
201 | virtual void SetResponseModel(Int_t id, AliMUONresponse *response); | |
202 | virtual void SetNsec(Int_t id, Int_t nsec); | |
a897a37a | 203 | // Set Reconstruction Model |
204 | virtual void SetReconstructionModel(Int_t id, AliMUONClusterFinder *reconstruction); | |
fe4da5cc | 205 | // Set Stepping Parameters |
a897a37a | 206 | virtual void SetMaxStepGas(Float_t p1); |
207 | virtual void SetMaxStepAlu(Float_t p1); | |
208 | virtual void SetMaxDestepGas(Float_t p1); | |
209 | virtual void SetMaxDestepAlu(Float_t p1); | |
210 | virtual void SetMuonAcc(Bool_t acc=0, Float_t angmin=2, Float_t angmax=9); | |
fe4da5cc | 211 | // Response Simulation |
212 | virtual void MakePadHits(Float_t xhit,Float_t yhit,Float_t eloss,Int_t id); | |
213 | // Return reference to Chamber #id | |
214 | virtual AliMUONchamber& Chamber(Int_t id) {return *((AliMUONchamber *) (*fChambers)[id]);} | |
215 | // Retrieve pad hits for a given Hit | |
a897a37a | 216 | virtual AliMUONcluster* FirstPad(AliMUONhit *, TClonesArray *); |
217 | virtual AliMUONcluster* NextPad(TClonesArray *); | |
fe4da5cc | 218 | // Return pointers to digits |
219 | TObjArray *Dchambers() {return fDchambers;} | |
220 | Int_t *Ndch() {return fNdch;} | |
221 | virtual TClonesArray *DigitsAddress(Int_t id) {return ((TClonesArray *) (*fDchambers)[id]);} | |
222 | // Return pointers to reconstructed clusters | |
a897a37a | 223 | TObjArray *RawClusters() {return fRawClusters;} |
224 | Int_t *Nrawch() {return fNrawch;} | |
225 | virtual TClonesArray *RawClustAddress(Int_t id) {return ((TClonesArray *) (*fRawClusters)[id]);} | |
226 | ||
227 | // modifs perso | |
228 | AliMUONRawCluster *RawCluster(Int_t ichamber, Int_t icathod, Int_t icluster); | |
229 | ||
230 | ||
231 | // Return pointers to list of correlated clusters | |
232 | TObjArray *CathCorrel() {return fCathCorrel;} | |
233 | Int_t *Ncorch() {return fNcorch;} | |
234 | virtual TClonesArray *CathCorrelAddress(Int_t id) | |
235 | {return ((TClonesArray *) (*fCathCorrel)[id]);} | |
236 | ||
a897a37a | 237 | // Return pointer to TreeC |
238 | TTree *TreeC() {return fTreeC;} | |
fe4da5cc | 239 | protected: |
240 | TObjArray *fChambers; // List of Tracking Chambers | |
241 | Int_t fNclusters; // Number of clusters | |
242 | TClonesArray *fClusters; // List of clusters | |
243 | TObjArray *fDchambers; // List of digits | |
fe4da5cc | 244 | Int_t *fNdch; // Number of digits |
a897a37a | 245 | |
a897a37a | 246 | |
247 | TObjArray *fRawClusters; // List of raw clusters | |
248 | Int_t *fNrawch; // Number of raw clusters | |
249 | TObjArray *fCathCorrel; // List of correlated clusters | |
250 | Int_t *fNcorch; // Number of correl clusters | |
251 | TTree *fTreeC; // Cathode correl index tree | |
252 | ||
fe4da5cc | 253 | // |
254 | Bool_t fAccCut; //Transport acceptance cut | |
255 | Float_t fAccMin; //Minimum acceptance cut used during transport | |
256 | Float_t fAccMax; //Minimum acceptance cut used during transport | |
257 | // | |
258 | ||
259 | // Stepping Parameters | |
260 | Float_t fMaxStepGas; // Maximum step size inside the chamber gas | |
261 | Float_t fMaxStepAlu; // Maximum step size inside the chamber aluminum | |
262 | Float_t fMaxDestepGas; // Maximum relative energy loss in gas | |
263 | Float_t fMaxDestepAlu; // Maximum relative energy loss in aluminum | |
a897a37a | 264 | // |
265 | // modifs perso | |
266 | // Parameters for reconstruction program | |
267 | Double_t fSPxzCut; // Pxz cut (GeV/c) to begin the track finding | |
268 | Double_t fSSigmaCut; // Number of sig. delimiting the searching areas | |
269 | Double_t fSXPrec; // Chamber precision in X (cm) | |
270 | Double_t fSYPrec; // Chamber precision in Y (cm) | |
271 | ||
272 | Text_t *fFileName; | |
fe4da5cc | 273 | |
274 | protected: | |
275 | ||
276 | ClassDef(AliMUON,1) //Hits manager for set:MUON | |
277 | }; | |
278 | //___________________________________________ | |
a897a37a | 279 | |
280 | class AliMUONRawCluster : public TObject { | |
281 | public: | |
282 | ||
283 | Int_t fTracks[3]; //labels of overlapped tracks | |
284 | Int_t fQ ; // Q of cluster (in ADC counts) | |
285 | Float_t fX ; // X of cluster | |
286 | Float_t fY ; // Y of cluster | |
287 | Int_t fPeakSignal; | |
288 | Int_t fIndexMap[50]; //indeces of digits | |
289 | Int_t fOffsetMap[50]; //Emmanuel special | |
290 | Float_t fContMap[50]; //Contribution from digit | |
291 | Int_t fPhysicsMap[50]; | |
292 | Int_t fMultiplicity; //cluster multiplicity | |
293 | Int_t fNcluster[2]; | |
294 | Int_t fClusterType; | |
295 | public: | |
296 | AliMUONRawCluster() { | |
297 | fTracks[0]=fTracks[1]=fTracks[2]=-1; | |
298 | fQ=0; fX=fY=0; fMultiplicity=0; | |
299 | for (int k=0;k<50;k++) { | |
300 | fIndexMap[k]=-1; | |
301 | fOffsetMap[k]=0; | |
302 | fContMap[k]=0; | |
303 | fPhysicsMap[k]=-1; | |
304 | } | |
305 | fNcluster[0]=fNcluster[1]=-1; | |
306 | } | |
307 | virtual ~AliMUONRawCluster() {} | |
308 | ||
309 | Float_t GetRadius() {return TMath::Sqrt(fX*fX+fY*fY);} | |
310 | ||
a6f39961 | 311 | Bool_t IsSortable() const {return kTRUE;} |
a897a37a | 312 | Int_t Compare(TObject *obj); |
313 | Int_t PhysicsContribution(); | |
314 | static Int_t BinarySearch(Float_t r, TArrayF, Int_t from, Int_t upto); | |
315 | static void SortMin(Int_t *,Float_t *,Float_t *,Float_t *,Float_t *,Int_t); | |
316 | ||
317 | ClassDef(AliMUONRawCluster,1) //Cluster object for set:MUON | |
318 | }; | |
319 | ||
320 | //___________________________________________ | |
321 | class AliMUONcorrelation : public TObject { | |
322 | public: | |
323 | ||
324 | // correlation starts from the 1-st cathode | |
325 | // last number in arrays corresponds to cluster on 1-st cathode | |
326 | ||
327 | Int_t fCorrelIndex[4]; // entry number in TreeR for the associated | |
328 | // cluster candidates on the 2-nd cathode | |
329 | Float_t fX[4] ; // X of clusters on the 2-nd cathode | |
330 | Float_t fY[4] ; // Y of clusters | |
331 | ||
332 | public: | |
333 | AliMUONcorrelation() { | |
334 | fCorrelIndex[0]=fCorrelIndex[1]=fCorrelIndex[2]=fCorrelIndex[3]=0; | |
335 | fX[0]=fX[1]=fX[2]=fX[3]=0; fY[0]=fY[1]=fY[2]=fY[3]=0; | |
336 | } | |
337 | AliMUONcorrelation(Int_t *idx, Float_t *x, Float_t *y); | |
338 | virtual ~AliMUONcorrelation() {} | |
339 | ClassDef(AliMUONcorrelation,1) //Cathode correlation object for set:MUON | |
340 | }; | |
341 | ||
fe4da5cc | 342 | #endif |
343 | ||
344 | ||
345 | ||
346 | ||
347 | ||
348 | ||
349 | ||
350 | ||
351 | ||
352 | ||
353 | ||
354 | ||
355 | ||
356 | ||
357 |