Made some changes in DefineGoodparticles; Allowing to read good tracks from file
[u/mrichter/AliRoot.git] / HLT / src / AliL3Evaluate.h
1 #ifndef ALIL3_Evaluate
2 #define ALIL3_Evaluate
3
4 #include <TObject.h>
5 #include <TH1.h>
6 #include <TTree.h>
7 #include <TNtuple.h>
8 #include "AliSimDigits.h"
9
10
11 struct GoodTrack 
12 {
13
14   Int_t label;
15   Double_t eta;
16   Int_t code;
17   Double_t px,py,pz;
18   Double_t pt;
19 };
20 typedef struct GoodTrack GoodTrack;
21
22
23 class AliL3Track;
24 class TClonesArray;
25 class TFile;
26 class AliL3TrackArray;
27 class AliL3SpacePointData;
28 class TH1F;
29 class AliL3Transform;
30 class AliTPCParam;
31 class TTree;
32 class AliSimDigits;
33 class TObjArray;
34 class TParticle;
35
36 class AliL3Evaluate : public TObject {
37
38  private:
39
40   TFile *fDigitsFile;
41   TFile *fMCclusterfile;  //If you run the fast simulator.
42   TFile *fEventFile;
43   GoodTrack fGoodTracks[15000]; //!
44   TObjArray *fParticles;
45   AliL3TrackArray *fTracks; //!
46   AliTPCParam *fParam;
47   AliL3SpacePointData *fClusters[36][6]; //!
48   AliL3Transform *fTransform; //!
49   AliSimDigits *fDigits;
50   TTree *fDigitsTree;
51   Int_t fMinSlice;
52   Int_t fMaxSlice;
53   UInt_t fNcl[36][6];
54   Int_t fRowid[36][176];
55   Int_t fMinPointsOnTrack;  //Minimum points on track to be considered.
56   Bool_t fIsSlow;
57   Bool_t fNoOverlap;
58   Int_t fNFastPoints;
59   UInt_t *fMcIndex;//!
60   Int_t *fMcId;//!
61   Int_t fGoodFound;
62   Int_t fGoodGen;
63   Double_t fMinGoodPt;
64
65   //Histograms
66   TNtuple *fNtuppel;
67   TH1F *fPtRes;
68   TH1F *fNGoodTracksPt;
69   TH1F *fNFoundTracksPt;
70   TH1F *fNFakeTracksPt;
71   TH1F *fTrackEffPt;
72   TH1F *fFakeTrackEffPt;
73   TH1F *fNGoodTracksEta;
74   TH1F *fNFoundTracksEta;
75   TH1F *fNFakeTracksEta;
76   TH1F *fTrackEffEta;
77   TH1F *fFakeTrackEffEta;
78   
79   void FillEffHistos();
80   void CalcEffHistos();
81   void AssignIDs();
82   Bool_t InitMC();
83   void DefineGoodTracks(Int_t *slice,Int_t *padrow,Int_t good_number,Char_t *fname="good_tracks_tpc");
84   Int_t GetMCTrackLabel(AliL3Track *track);
85   Int_t **GetClusterIDs(AliL3Track *track);
86   void GetFastClusterIDs(Char_t *path);
87   
88  public:
89   AliL3Evaluate();
90   AliL3Evaluate(Char_t *mcfile,Int_t *slice);
91   AliL3Evaluate(Int_t *slice);
92
93   virtual ~AliL3Evaluate();
94
95   void SetupFast(Char_t *trackfile,Char_t *mcClusterfile,Char_t *path=".");
96   void SetupSlow(Char_t *trackfile,Char_t *digitsfile,Char_t *path=".");
97   void Setup(Char_t *trackfile,Char_t *path);
98   void CreateHistos(Int_t nbin=20,Int_t xlow=0,Int_t xup=4);
99   void EvaluatePatch(Int_t slice,Int_t patch,Int_t min_points,Int_t good_number);
100   void EvaluateSlice(Int_t slice,Int_t min_points,Int_t good_number);
101   void EvaluateGlobal(Int_t min_points,Int_t good_number,Char_t *fname);
102   void Write2File(Char_t *outputfile);
103     
104   TH1F *GetTrackEffPt() {return fTrackEffPt;}
105   TH1F *GetTrackEffEta() {return fTrackEffEta;}
106   TH1F *GetPtRes() {return fPtRes;}
107
108   void SetMinPoints(Int_t f) {fMinPointsOnTrack = f;}
109   void SetMinGoodPt(Double_t f) {fMinGoodPt = f;}
110   void DoSingleTracks() {fNoOverlap = kTRUE;}
111   Int_t GetNGoodTracks() {return fGoodGen;}
112   Int_t GetNFoundTracks() {return fGoodFound;}
113   
114   TNtuple *CalculateResiduals();
115   TNtuple *EvaluatePoints(Char_t *rootfile);
116   Bool_t GetParticleCrossingPoint(TParticle *part,Int_t slice,Int_t padrow,Float_t *xyz);
117   //TNtuple *EvaluateGEANT();
118
119   ClassDef(AliL3Evaluate,1) 
120 };
121
122 #endif