get tables from the aliroot directory if they are not in the current one
[u/mrichter/AliRoot.git] / MUON / AliMUONEventReconstructor.h
1 #ifndef ALIMUONEVENTRECONSTRUCTOR_H
2 #define ALIMUONEVENTRECONSTRUCTOR_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /*$Id$*/
7
8 ////////////////////////////////////
9 // MUON event reconstructor in ALICE
10 ////////////////////////////////////
11
12 #include <TObject.h>
13
14 class AliMUONHit;
15 class AliMUONHitForRec;
16 class AliMUONSegment;
17 class TClonesArray;
18 class TFile;
19 class TTree;
20 class AliMUONRecoEvent;
21 class AliMUONData;
22 class AliRunLoader;
23 class AliLoader;
24
25 // Constants which should be elsewhere ????
26 const Int_t kMaxMuonTrackingChambers = 10;
27 const Int_t kMaxMuonTrackingStations = kMaxMuonTrackingChambers / 2;
28
29 class AliMUONEventReconstructor : public TObject {
30
31  public:
32   AliMUONEventReconstructor(AliLoader* ); // default Constructor
33   virtual ~AliMUONEventReconstructor(void); // Destructor
34   AliMUONEventReconstructor (const AliMUONEventReconstructor& Reconstructor); // copy constructor
35   AliMUONEventReconstructor& operator=(const AliMUONEventReconstructor& Reconstructor); // assignment operator
36
37   // Parameters for event reconstruction: public methods
38   // Get and Set, Set to defaults
39   Double_t GetMinBendingMomentum(void) const {return fMinBendingMomentum;}
40   void SetMinBendingMomentum(Double_t MinBendingMomentum) {fMinBendingMomentum = MinBendingMomentum;}
41   Double_t GetMaxBendingMomentum(void) const {return fMaxBendingMomentum;}
42   void SetMaxBendingMomentum(Double_t MaxBendingMomentum) {fMaxBendingMomentum = MaxBendingMomentum;}
43   Double_t GetMaxChi2(void) const {return fMaxChi2;}
44   void SetMaxChi2(Double_t MaxChi2) {fMaxChi2 = MaxChi2;}
45   Double_t GetMaxSigma2Distance(void) const {return fMaxSigma2Distance;}
46   void SetMaxSigma2Distance(Double_t MaxSigma2Distance) {fMaxSigma2Distance = MaxSigma2Distance;}
47   Double_t GetBendingResolution(void) const {return fBendingResolution;}
48   void SetBendingResolution(Double_t BendingResolution) {fBendingResolution = BendingResolution;}
49   Double_t GetNonBendingResolution(void) const {return fNonBendingResolution;}
50   void SetNonBendingResolution(Double_t NonBendingResolution) {fNonBendingResolution = NonBendingResolution;}
51   Double_t GetChamberThicknessInX0(void) const {return fChamberThicknessInX0;}
52   void SetChamberThicknessInX0(Double_t ChamberThicknessInX0) {fChamberThicknessInX0 = ChamberThicknessInX0;}
53   Double_t GetSimpleBValue(void) const {return fSimpleBValue;}
54   void SetSimpleBValue(Double_t SimpleBValue) {fSimpleBValue = SimpleBValue;}
55   Double_t GetSimpleBLength(void) const {return fSimpleBLength;}
56   void SetSimpleBLength(Double_t SimpleBLength) {fSimpleBLength = SimpleBLength;}
57   Double_t GetSimpleBPosition(void) const {return fSimpleBPosition;}
58   void SetSimpleBPosition(Double_t SimpleBPosition) {fSimpleBPosition = SimpleBPosition;}
59   Int_t GetRecGeantHits(void) const {return fRecGeantHits;}
60   void SetRecGeantHits(Int_t RecGeantHits) {fRecGeantHits = RecGeantHits;}
61   Double_t GetEfficiency(void) const {return fEfficiency;}
62   void SetEfficiency(Double_t Efficiency) {fEfficiency = Efficiency;}
63   Int_t GetPrintLevel(void) const {return fPrintLevel;}
64   void SetPrintLevel(Int_t PrintLevel) {fPrintLevel = PrintLevel;}
65   void SetReconstructionParametersToDefaults(void);
66
67   // Parameters for GEANT background events
68   TFile* GetBkgGeantFile(void) const {return fBkgGeantFile;}
69   void SetBkgGeantFile(Text_t *BkgGeantFileName); // set background file for GEANT hits
70   void NextBkgGeantEvent(void); // next event in background file for GEANT hits
71
72   // Hits for reconstruction
73   Int_t GetNHitsForRec(void) const {return fNHitsForRec;} // Number
74
75   // Reconstructed tracks
76   Int_t GetNRecTracks() const {return fNRecTracks;} // Number
77   void SetNRecTracks(Int_t NRecTracks) {fNRecTracks = NRecTracks;}
78   TClonesArray* GetRecTracksPtr(void) const {return fRecTracksPtr;} // Array
79  
80  // Reconstructed trigger tracks
81    Int_t GetNRecTriggerTracks() const {return fNRecTriggerTracks;} // Number
82    void SetNRecTriggerTracks(Int_t NRecTriggerTracks) {fNRecTriggerTracks = NRecTriggerTracks;}
83    TClonesArray* GetRecTriggerTracksPtr(void) const {return fRecTriggerTracksPtr;} // Array
84
85   // Hits on reconstructed tracks
86   Int_t GetNRecTrackHits() const {return fNRecTrackHits;} // Number
87   void SetNRecTrackHits(Int_t NRecTrackHits) {fNRecTrackHits = NRecTrackHits;}
88   TClonesArray* GetRecTrackHitsPtr(void) const {return fRecTrackHitsPtr;} // Array
89
90   // Functions
91   Double_t GetImpactParamFromBendingMomentum(Double_t BendingMomentum) const;
92   Double_t GetBendingMomentumFromImpactParam(Double_t ImpactParam) const;
93   void EventReconstruct(void);
94   void EventReconstructTrigger(void);
95   void EventDump(void);  // dump reconstructed event
96   void EventDumpTrigger(void);  // dump reconstructed trigger event
97   void FillEvent();      // fill and write tree of reconstructed events
98   void SetTrackMethod(Int_t TrackMethod) {fTrackMethod = TrackMethod;} //AZ
99   Int_t GetTrackMethod(void) const {return fTrackMethod;} //AZ
100   Int_t fMuons; // AZ - number of muons within acceptance - just for tests
101
102   AliMUONData*  GetMUONData() {return fMUONData;}
103
104  protected:
105
106  private:
107
108   Int_t fTrackMethod; // AZ - tracking method
109
110   // Parameters for event reconstruction
111   Double_t fMinBendingMomentum; // minimum value (GeV/c) of momentum in bending plane
112   // Parameters for event reconstruction
113   Double_t fMaxBendingMomentum; // maximum value (GeV/c) of momentum in bending plane
114   Double_t fMaxChi2; // maximum Chi2 per degree of Freedom
115   Double_t fMaxSigma2Distance; // maximum square distance in units of the variance (maximum chi2)
116   Double_t fRMin[kMaxMuonTrackingChambers]; // minimum radius (cm)
117   Double_t fRMax[kMaxMuonTrackingChambers]; // maximum radius (cm)
118   Double_t fSegmentMaxDistBending[kMaxMuonTrackingStations]; // maximum distance (cm) for segments in bending plane
119   Double_t fSegmentMaxDistNonBending[kMaxMuonTrackingStations]; // maximum distance (cm) for segments in non bending plane
120   Double_t fBendingResolution; // chamber resolution (cm) in bending plane
121   Double_t fNonBendingResolution; // chamber resolution (cm) in non bending plane
122   Double_t fChamberThicknessInX0; // chamber thickness in number of radiation lengths
123                                   // how to take it from simulation ????
124   Double_t fSimpleBValue; // simple magnetic field: value (kG)
125   Double_t fSimpleBLength; // simple magnetic field: length (cm)
126   Double_t fSimpleBPosition; // simple magnetic field: Z central position (cm)
127   Int_t fRecGeantHits; // reconstruction from raw clusters (0) or from GEANT hits (1)
128   Double_t fEfficiency; // chamber efficiency (used for GEANT hits only)
129   Int_t fPrintLevel; // print level
130
131   // Parameters for GEANT background events
132   // should be in AliMUON class ????
133   TFile *fBkgGeantFile; // pointer to file
134   TTree *fBkgGeantTK; // pointer to tree TK
135   TClonesArray *fBkgGeantParticles;   // pointer to list of particles in tree TK
136   TTree *fBkgGeantTH; // pointer to tree TH
137   TClonesArray *fBkgGeantHits;   // pointer to list of hits in tree TH
138   Int_t fBkgGeantEventNumber;   // event number
139   
140   // Hits for reconstruction (should be in AliMUON ????)
141   TClonesArray *fHitsForRecPtr; // pointer to the array of hits for reconstruction
142   Int_t fNHitsForRec; // number of hits for reconstruction
143   // Information per chamber (should be in AliMUONChamber ????)
144   Int_t fNHitsForRecPerChamber[kMaxMuonTrackingChambers]; // number of HitsForRec
145   Int_t fIndexOfFirstHitForRecPerChamber[kMaxMuonTrackingChambers]; // index (0...) of first HitForRec
146
147   // Segments inside a station
148   TClonesArray *fSegmentsPtr[kMaxMuonTrackingStations]; // array of pointers to the segments for each station
149   Int_t fNSegments[kMaxMuonTrackingStations]; // number of segments for each station
150
151   // Reconstructed tracks
152   TClonesArray *fRecTracksPtr; // pointer to array of reconstructed tracks
153   Int_t fNRecTracks; // number of reconstructed tracks
154
155   // Reconstructed trigger tracks
156   TClonesArray *fRecTriggerTracksPtr; // pointer to array of reconstructed trigger tracks
157   Int_t fNRecTriggerTracks; // number of reconstructed trigger tracks
158
159   // Track hits on reconstructed tracks
160   TClonesArray *fRecTrackHitsPtr; // pointer to array of hits on reconstructed tracks
161   Int_t fNRecTrackHits; // number of hits on reconstructed tracks
162
163   // Objects needed for tree writing
164   AliMUONRecoEvent *fRecoEvent; // the reconstructed event
165   TTree            *fEventTree; // tree of reconstructed events
166   TFile            *fTreeFile;  // file where the tree is outputed
167
168   // data container
169   AliMUONData* fMUONData;
170
171   // alice loader
172   AliLoader* fLoader;
173
174   // Functions
175   void ResetHitsForRec(void);
176   void MakeEventToBeReconstructed(void);
177   void AddHitsForRecFromGEANT(TTree *TH);
178   void AddHitsForRecFromBkgGEANT(TTree *TH, TClonesArray *Hits);
179   AliMUONHitForRec* NewHitForRecFromGEANT(AliMUONHit* Hit, Int_t TrackNumber, Int_t HitNumber, Int_t Signal);
180 /*   void AddHitsForRecFromCathodeCorrelations(TTree* TC); */
181   void AddHitsForRecFromRawClusters(TTree* TR);
182   void SortHitsForRecWithIncreasingChamber();
183   void MakeSegments(void);
184   void ResetSegments(void);
185   void MakeSegmentsPerStation(Int_t Station);
186   void MakeTracks(void);
187   Bool_t MakeTriggerTracks(void);
188   void ResetTrackHits(void);
189   void ResetTracks(void);
190   void ResetTriggerTracks(void);
191   Int_t MakeTrackCandidatesWithTwoSegments(AliMUONSegment *BegSegment);
192   Int_t MakeTrackCandidatesWithOneSegmentAndOnePoint(AliMUONSegment *BegSegment);
193   void MakeTrackCandidates(void);
194   void FollowTracks(void);
195   void RemoveDoubleTracks(void);
196   void UpdateTrackParamAtHit(void);
197   void ValidateTracksWithTrigger(void);
198
199
200   //AZ - for Kalman Filter
201   void MakeTrackCandidatesK(void);
202   void FollowTracksK(void);
203   void RemoveDoubleTracksK(void);
204   void GoToVertex(void);
205   Bool_t CheckCandidateK(Int_t icand, Int_t nSeeds);
206
207   ClassDef(AliMUONEventReconstructor, 0) // MUON event reconstructor in ALICE
208     };
209         
210 #endif