o add calculation of residuals in the track fit
[u/mrichter/AliRoot.git] / TPC / Upgrade / AliToyMCReconstruction.h
1 #ifndef AliToyMCReconstruction_H
2 #define AliToyMCReconstruction_H
3
4 #include <TString.h>
5 #include <TObject.h>
6 #include <TClonesArray.h>
7 #include <TExMap.h>
8
9 class TTree;
10
11 class TTreeSRedirector;
12 class AliExternalTrackParam;
13 class AliTPCtrackerSector;
14 class AliToyMCEvent;
15 class AliTPCCorrection;
16 class AliTPCseed;
17 class AliTPCtrackerRow;
18 class AliToyMCTrack;
19 class AliTPCclusterMI;
20 class AliRieman;
21 class AliTrackPoint;
22 class AliTPCParam;
23
24 class AliToyMCReconstruction : public TObject {
25 public:
26   AliToyMCReconstruction();
27   virtual ~AliToyMCReconstruction();
28   
29   enum ECorrType {
30     kNoCorrection = 0,
31     kTPCCenter,
32     kAverageEta,
33     kIdeal,
34     kPreliminaryEta // NOT TO USE (needs fixing!!! Not yet in full code!!!)
35   };
36
37   enum EDet {
38     kITS=0,
39     kTPC,
40     kTRD
41   };
42   
43   void RunReco(const char* file, Int_t nmaxEv=-1);
44   void RunRecoAllClusters(const char* file, Int_t nmaxEv=-1);
45   void RunRecoAllClustersStandardTracking(const char* file, Int_t nmaxEv=-1);
46
47   void RunFullTracking(const char* file, Int_t nmaxEv=-1);
48   
49   // reconstruction settings
50   void      SetRecoSettings(Bool_t idealTracking, Int_t clusterType, ECorrType correctionType, Int_t seedingRow=130, Int_t seedingDist=10)
51                            { fIdealTracking=idealTracking; fClusterType=clusterType; fSeedingRow=seedingRow, fSeedingDist=seedingDist, fCorrectionType=correctionType; }
52   
53   void      SetClusterType(Int_t type)  { fClusterType = type;    }
54   Int_t     GetClusterType()  const     { return fClusterType;    }
55   
56   void      SetSeedingRow(Int_t row)    { fSeedingRow = row;      }
57   Int_t     GetSeedingRow()  const      { return fSeedingRow;     }
58   
59   void      SetSeedingDist(Int_t dist)  { fSeedingDist = dist;    }
60   Int_t     GetSeedingDist()  const     { return fSeedingDist;    }
61   
62   void      SetCorrType(ECorrType type) { fCorrectionType = type; }
63   ECorrType GetCorrectionType() const   { return fCorrectionType; }
64
65   void   SetUseMaterialBudget(Bool_t mat) { fUseMaterial = mat;   }
66   Bool_t GetUseMaterialBudget() const   { return fUseMaterial;    }
67
68   void   SetIdealTracking(Bool_t tr)    { fIdealTracking = tr;    }
69   Bool_t GetIdealTracking()  const      { return fIdealTracking;  }
70
71   void   SetFillClusterRes(Bool_t res)  { fFillClusterRes=res;    }
72   Bool_t GetFillClusterRes()  const     { return fFillClusterRes; }
73
74   
75   
76   void   SetTree(TTree *tree) { fTree=tree; }
77   TTree* GetTree() const { return fTree; }
78
79   AliExternalTrackParam* GetSeedFromTrack(const AliToyMCTrack * const tr, Bool_t forceSeed=kFALSE);
80   AliExternalTrackParam* GetSeedFromTrackIdeal(const AliToyMCTrack * const tr, EDet det );
81   AliExternalTrackParam* GetFittedTrackFromSeed(const AliToyMCTrack *tr, const AliExternalTrackParam *seed, TClonesArray *arrClustRes=0x0);
82   AliExternalTrackParam* GetFittedTrackFromSeedAllClusters(const AliToyMCTrack *tr, const AliExternalTrackParam *seed, Int_t &nClus);
83   AliExternalTrackParam* GetTrackRefit(const AliToyMCTrack * const tr, EDet det);
84
85   AliToyMCTrack *ConvertTPCSeedToToyMCTrack(const AliTPCseed &seed);
86   AliExternalTrackParam* GetRefittedTrack(const AliTPCseed &seed);
87   
88   AliTPCclusterMI* FindMiddleCluster(const AliTPCclusterMI *clInner, const AliTPCclusterMI *clOuter,
89                                      Double_t roady, Double_t roadz,
90                                      AliRieman &seedFit);
91
92   void AddMiddleClusters(AliTPCseed *seed,
93                          const AliTPCclusterMI *clInner, const AliTPCclusterMI *clOuter,
94                          Double_t roady, Double_t roadz,
95                          Int_t &nTotalClusters, AliRieman &seedFit);
96   Int_t MakeSeeds2(TObjArray * arr, Int_t sec, Int_t i1, Int_t i2);
97   void MakeSeeds(TObjArray * arr, Int_t sec, Int_t i1, Int_t i2);
98
99   void SetRieman(const AliTPCseed &seed, AliRieman &rieman);
100   void CopyRieman(const AliRieman &from, AliRieman &to);
101   
102   AliExternalTrackParam* ClusterToTrackAssociation(const AliTPCseed *seed, Int_t trackID, Int_t &nClus);
103   void ClusterToTrackAssociation(AliTPCseed &seed);
104   void AssociateClusters(AliTPCseed &seed, Int_t firstRow, Int_t lastRow, Bool_t direction);
105   
106   void InitSpaceCharge();
107
108   void SetLongT0seed(Bool_t l) { fLongT0seed=l; }
109   Bool_t GetLongT0seed() const { return fLongT0seed; }
110   
111   static TTree* ConnectTrees(const char* files);
112   
113   Double_t GetVDrift() const;
114   Double_t GetZLength(Int_t roc) const;
115
116   void InitStreamer(TString addName, Int_t level=1);
117
118   void ConnectInputFile(const char* file, Int_t nmaxEv=-1);
119   void Cleanup();
120
121   void DumpTracksToTree(const char* file);
122   
123 // private:
124   AliToyMCReconstruction(const AliToyMCReconstruction &rec);
125   AliToyMCReconstruction& operator= (AliToyMCReconstruction& rec);
126
127   void SetTrackPointFromCluster(const AliTPCclusterMI *cl, AliTrackPoint &p);
128   void ClusterToSpacePoint(const AliTPCclusterMI *cl, Float_t xyz[3]);
129
130   Int_t LoadInnerSectors();
131   Int_t LoadOuterSectors();
132   
133   Int_t GetSector(AliExternalTrackParam *track);
134   void FillSectorStructure(Int_t maxev);
135   void FillSectorStructureAC();
136
137   void SetupTrackMaps();
138
139   void CookLabel(AliTPCseed *seed, Double_t fraction, Int_t info[5]=0);
140
141   void DumpSeedInfo(TObjArray *arr);
142   void DumpTrackInfo(TObjArray *arr);
143   void DumpSeedInfo(const AliToyMCTrack *toyTrack, AliTPCseed *seed);
144   
145
146   void MarkClustersUsed(AliTPCseed *seed);
147   void ResetClustersZtoTime(AliTPCseed *seed);
148   
149   // reco settings
150   Int_t  fSeedingRow;            // first row used for seeding
151   Int_t  fSeedingDist;           // distance of seeds
152   Int_t  fClusterType;           // cluster type to use
153   ECorrType fCorrectionType;     // type of space point correction
154   Bool_t fDoTrackFit;            // do track fitting
155   Bool_t fUseMaterial;           // use material budget in tracking
156   Bool_t fIdealTracking;         // use ideal coordinates for tracking
157
158   Int_t  fNmaxEvents;            // maximum number of events
159
160   // current reconstruction info
161   Double_t fTime0;               // current time0 used for reconstruction
162   Bool_t   fCreateT0seed;        // if current seed is the T0 seed
163   Bool_t   fLongT0seed;          // if we should use a t0 seed including all clusters in the seed range
164   Bool_t   fFillClusterRes;      // fill cluster residuals?
165   
166   TTreeSRedirector *fStreamer;   // debug streamer
167   TFile *fInputFile;             // input file
168   TTree *fTree;                  // input tree with ToyMC info
169   AliToyMCEvent *fEvent;         // input event
170
171   AliTPCParam *fTPCParam;            // tpc reco parameters
172   AliTPCCorrection *fTPCCorrection; // space charge
173
174   const Int_t fkNSectorInner;        //number of inner sectors
175   AliTPCtrackerSector *fInnerSectorArray;  //array of inner sectors
176   const Int_t fkNSectorOuter;        //number of outer sectors
177   AliTPCtrackerSector *fOuterSectorArray;  //array of outer sectors
178
179   TClonesArray fAllClusters;     //Array keeping all clusters for free seeding
180
181   TExMap fMapTrackEvent;          // map global track number -> event number
182   TExMap fMapTrackTrackInEvent;   // map global track number -> track in event
183
184   Bool_t fIsAC;                     // if we are tracking with sector arrays running from 0-36 rather than 0-18
185    
186   ClassDef(AliToyMCReconstruction,0)
187 };
188
189
190 #endif