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