#include <TObject.h>
#include <TH1.h>
#include <TTree.h>
+#include <TNtuple.h>
#include "AliSimDigits.h"
+
+struct GoodTrack
+{
+ Int_t label;
+ Double_t eta;
+ Int_t code;
+ Double_t px,py,pz;
+ Double_t x,y,z;
+ Int_t nhits;
+};
+typedef struct GoodTrack GoodTrack;
+
+
class AliL3Track;
class TClonesArray;
class TFile;
class AliL3TrackArray;
class AliL3SpacePointData;
class TH1F;
-class AliL3Transform;
class AliTPCParam;
class TTree;
class AliSimDigits;
class TObjArray;
+class TParticle;
-class AliL3Evaluate : public TObject {
+class AliL3Evaluate {
private:
- TFile *fMCFile;
- TFile *fMCclusterfile; //If you run the fast simulator.
- TClonesArray *fParticles;
AliL3TrackArray *fTracks; //!
AliTPCParam *fParam;
- AliL3SpacePointData *fClusters[36][5]; //!
- AliL3Transform *fTransform; //!
+ AliL3SpacePointData *fClusters[36][6]; //!
AliSimDigits *fDigits;
TTree *fDigitsTree;
Int_t fMinSlice;
Int_t fMaxSlice;
- UInt_t fNcl[36][5];
- Int_t fRowid[36][174];
+ UInt_t fNcl[36][6];
+ Int_t fRowid[36][176];
Int_t fMinPointsOnTrack; //Minimum points on track to be considered.
- Bool_t fIsSlow;
- Int_t fNFastPoints;
- UInt_t fMcIndex;
- Int_t fMcId;
+ Int_t fMinHitsFromParticle;
+ GoodTrack *fGoodTracks; //!
+ Float_t fMaxFalseClusters;
+ Int_t fNFastPoints;
+ UInt_t *fMcIndex;//!
+ Int_t *fMcId;//!
+ Int_t fGoodFound;
+ Int_t fGoodGen;
+ Double_t fMinGoodPt;
+
//Histograms
+ TNtuple *fNtuppel;
TH1F *fPtRes;
TH1F *fNGoodTracksPt;
TH1F *fNFoundTracksPt;
TH1F *fTrackEffEta;
TH1F *fFakeTrackEffEta;
- void FillEffHistos(TObjArray *good_particles,Int_t *particle_id);
- void AssignIDs();
- Bool_t SetDigitsTree();
- Bool_t SetMCParticleArray();
- TObjArray *DefineGoodTracks(Int_t slice,Int_t *padrow,Int_t good_number,Int_t *particle_id);
- Int_t GetMCTrackLabel(AliL3Track *track,UInt_t *index=0,Int_t *pID=0,Int_t npoints=0);
- Int_t **GetClusterIDs(AliL3Track *track,UInt_t *index=0,Int_t *pID=0,Int_t npoints=0);
- Int_t *GetFastIDs(UInt_t &tmp_ind,Int_t &npoints);
-
+
+
public:
AliL3Evaluate();
- AliL3Evaluate(Char_t *mcfile,Int_t *slice);
-
+ AliL3Evaluate(Char_t *path,Int_t min_clusters,Int_t minhits,Double_t minpt=0.1,Int_t *slice=0);
virtual ~AliL3Evaluate();
- void Setup(Char_t *trackfile,Char_t *clustfile);
- void SetupFast(Char_t *trackfile,Char_t *clustfile,Char_t *mcClusterfile);
- void CreateHistos(Int_t nbin=20,Int_t xlow=0,Int_t xup=4);
- void EvaluatePatch(Int_t slice,Int_t patch,Int_t min_points,Int_t good_number);
- void EvaluateSlice(Int_t slice,Int_t min_points,Int_t good_number);
- void EvaluateGlobal();
+ void CreateHistos(Int_t nbin=20,Float_t xlow=0,Float_t xup=4);
void Write2File(Char_t *outputfile);
-
+ void FillEffHistos();
+ void FillEffHistosNAIVE();
+ void CalcEffHistos();
+ void AssignIDs();
+ void GetGoodParticles(Char_t *particle_file);
+ void GetFastClusterIDs(Char_t *path);
+ void GetCFeff(Char_t *outfile);
+ Int_t GetMCTrackLabel(AliL3Track *track);
+ TNtuple *CalculateResiduals();
+ TNtuple *EvaluatePoints(Char_t *rootfile);
+
+ void SetMinPoints(Int_t f) {fMinPointsOnTrack = f;}
+ void SetMinGoodPt(Double_t f) {fMinGoodPt = f;}
+ void SetMaxFalseClusters(Float_t f) {fMaxFalseClusters = f;}
+
+ Int_t GetNGoodTracks() {return fGoodGen;}
+ Int_t GetNFoundTracks() {return fGoodFound;}
TH1F *GetTrackEffPt() {return fTrackEffPt;}
TH1F *GetTrackEffEta() {return fTrackEffEta;}
+ TH1F *GetFakeEffEta() {return fFakeTrackEffEta;}
+ TH1F *GetFakeEffPt() {return fFakeTrackEffPt;}
TH1F *GetPtRes() {return fPtRes;}
- void SetMinPoints(Int_t f) {fMinPointsOnTrack = f;}
-
- ClassDef(AliL3Evaluate,1)
+
+ ClassDef(AliL3Evaluate,1) //Tracking evaluation class
};
#endif