]>
Commit | Line | Data |
---|---|---|
5b09c01f | 1 | #ifndef ALIINTSPOTESTIMATOR_H |
2 | #define ALIINTSPOTESTIMATOR_H | |
3 | ||
4 | #include <TNamed.h> | |
5 | #include <TObjArray.h> | |
6 | #include <TMath.h> | |
7 | #include <TH2F.h> | |
8 | #include <TAxis.h> | |
9 | ||
10 | class TH1; | |
d631e5e7 | 11 | class TNtuple; |
5b09c01f | 12 | class TCanvas; |
13 | class AliESDEvent; | |
14 | class AliESDtrack; | |
15 | class AliESDVertex; | |
16 | class AliVertexerTracks; | |
17 | ||
18 | class AliIntSpotEstimator : public TNamed { | |
19 | // | |
20 | public: | |
21 | // | |
22 | AliIntSpotEstimator(Bool_t initDef=kFALSE); | |
d631e5e7 | 23 | AliIntSpotEstimator(const char* name, Double_t outcut=1e-4,Int_t ntrIP=2, |
5b09c01f | 24 | Int_t nPhiBins=12,Int_t nestb=500, |
25 | Double_t estmin=-2e-2,Double_t estmax=6e-2, | |
26 | Int_t ntrBins=10,Int_t ntMn=2,Int_t ntMx=32, | |
d631e5e7 | 27 | Int_t nPBins=14,Double_t pmn=0.2,Double_t pmx=3., Bool_t ntuple=kFALSE); |
5b09c01f | 28 | ~AliIntSpotEstimator(); |
29 | AliIntSpotEstimator &operator += (const AliIntSpotEstimator &src); | |
30 | // | |
31 | void InitEstimators(Int_t nPhiBins=12,Int_t nestb=500, | |
32 | Double_t estmin=-2e-2,Double_t estmax=6e-2, | |
33 | Int_t ntrBins=10,Int_t ntMn=2,Int_t ntMx=32, | |
d631e5e7 | 34 | Int_t nPBins=14,Double_t pmn=0.2,Double_t pmx=3.,Bool_t ntuple=kFALSE); |
5b09c01f | 35 | // |
36 | Bool_t ProcessEvent(const AliESDEvent* esd, const AliESDVertex* vtx=0); | |
37 | Bool_t ProcessEvent(const TObjArray* tracks); | |
38 | // | |
d631e5e7 | 39 | Double_t GetIPCenter(Int_t id,Double_t *err=0) const; |
40 | Double_t GetIPCenIni(Int_t id) const {return fIPCenIni[id];} | |
41 | Double_t GetIPSigma(Int_t phibin=0,Double_t *err=0) const; | |
42 | Double_t GetVtxSigma(int ntr, Double_t *err=0) const; | |
43 | Double_t GetDCASigma(double p, Double_t *err=0) const; | |
5b09c01f | 44 | // |
d631e5e7 | 45 | Int_t GetEventsAccepted() const {return fIPCenterStat;} |
46 | Int_t GetEventsProcessed() const {return fEvProc;} | |
47 | Int_t GetMinTracksForIP() const {return fMinTracksForIP;} | |
5b09c01f | 48 | // |
d631e5e7 | 49 | void SetOutlierCut(Double_t v=1e-4) {fOutlierCut = v;} |
50 | void SetIPCenIni(Double_t *xyz) {for (int i=3;i--;) fIPCenIni[i] = xyz[i];} | |
51 | void SetMinTracksForIP(Int_t ntr=2) {fMinTracksForIP = ntr>2 ? ntr : 2;} | |
5b09c01f | 52 | // |
d631e5e7 | 53 | TH2F* GetHistoIP() const {return fEstimIP;} |
54 | TH2F* GetHistoVtx() const {return fEstimVtx;} | |
55 | TH2F* GetHistoTrc() const {return fEstimTrc;} | |
56 | TH2F* GetHistoVtxXY() const {return fHVtxXY;} | |
57 | TNtuple* GetNtuple() const {return (TNtuple*)fNtuple;} | |
58 | AliVertexerTracks* GetVertexer() const {return fVertexer;} | |
5b09c01f | 59 | // |
60 | Int_t GetNPhiBins() const {return !IsValid() ? 0:fEstimIP->GetXaxis()->GetNbins();} | |
61 | Int_t GetNTrackBins() const {return !IsValid() ? 0:fEstimVtx->GetXaxis()->GetNbins();} | |
62 | Int_t GetMinTracks() const {return !IsValid() ? 0:TMath::Nint(fEstimVtx->GetXaxis()->GetXmin());} | |
63 | Int_t GetMaxTracks() const {return !IsValid() ? 0:TMath::Nint(fEstimVtx->GetXaxis()->GetXmax());} | |
64 | Int_t GetNPBins() const {return !IsValid() ? 0:fEstimTrc->GetXaxis()->GetNbins();} | |
65 | Double_t GetTrackMinP() const {return !IsValid() ? 0:1./fEstimTrc->GetXaxis()->GetXmax();} | |
66 | Double_t GetTrackMaxP() const {return !IsValid() ? 0:1./fEstimTrc->GetXaxis()->GetXmin();} | |
67 | // | |
68 | TCanvas* CreateReport(const char* outname = 0); | |
69 | virtual void Print(Option_t *opt="") const; | |
70 | virtual void Clear(Option_t *opt=""); | |
71 | virtual Long64_t Merge(TCollection *coll); | |
d631e5e7 | 72 | static Double_t CalcMean(TH1* histo, Double_t ctfact,Double_t *err=0); |
5b09c01f | 73 | // |
74 | protected: | |
75 | Bool_t IsValid() const {return fEstimIP!=0;} | |
76 | Bool_t IsZero(Double_t v,Double_t thresh=1e-15) const {return TMath::Abs(v)<thresh;} | |
77 | Bool_t ProcessTracks(); | |
78 | Bool_t ProcessIPCenter(const AliESDVertex* vtx); | |
79 | Bool_t ProcessEstimators(const AliESDEvent* esd); | |
80 | void UpdateEstimators(double rvD, double rtD, double nTracks, double pTrack, double phiTrack); | |
81 | // | |
82 | private : | |
83 | AliIntSpotEstimator(const AliIntSpotEstimator &src); | |
84 | AliIntSpotEstimator &operator=(const AliIntSpotEstimator &src); | |
85 | // | |
86 | protected: | |
87 | // | |
88 | Int_t fEvProc; // number of events processed | |
89 | Int_t fIPCenterStat; // number of events used for fIPCenter | |
d631e5e7 | 90 | Int_t fMinTracksForIP; // account IP estimator only for vertices with >= tracks |
5b09c01f | 91 | Double_t fOutlierCut; // cut on outliers |
d631e5e7 | 92 | Double_t fIPCenIni[3]; // mean IP position XYZ (initial) |
93 | Double_t fIPCenter[3]; // IP position XYZ | |
94 | Double_t fIPCen2[3]; // IP position XYZ^2 | |
5b09c01f | 95 | // |
96 | TH2F *fEstimIP; // distribution of IP estimator | |
97 | TH2F *fEstimVtx; // distribution of VTRes estimator | |
98 | TH2F *fEstimTrc; // distribution of DCA res estimator | |
d631e5e7 | 99 | TH2F *fHVtxXY; // XY histo |
100 | TNtuple *fNtuple; //! optional ntuple with dca's | |
5b09c01f | 101 | // |
102 | AliVertexerTracks* fVertexer; //! vertex fitter | |
103 | TObjArray *fTracks; //! storage for processed tracks | |
104 | // | |
105 | ClassDef(AliIntSpotEstimator,1) | |
106 | }; | |
107 | ||
108 | ||
109 | #endif |