#ifndef ALIITSVERTEXERZD_H
#define ALIITSVERTEXERZD_H
#include<AliITSVertexer.h>
class TFile;
class TString;
class AliESDVertex;
class TH1F;
class AliITSVertexerZD : public AliITSVertexer {
public:
AliITSVertexerZD();
AliITSVertexerZD(Float_t x0, Float_t y0);
virtual ~AliITSVertexerZD();
virtual AliESDVertex* FindVertexForCurrentEvent(TTree *itsClusterTree);
virtual void PrintStatus() const;
void SetDiffPhiMax(Float_t pm = 0.1){fDiffPhiMax = pm;}
void ConfigIterations(Int_t noiter=4,Float_t *ptr=0);
void SetFirstLayerModules(Int_t m1 = 240, Int_t m2 = 323){fFirstL1 = m1; fLastL1 = m2;}
void SetSecondLayerModules(Int_t m1 = 324, Int_t m2 = 499){fFirstL2 = m1; fLastL2 = m2;}
void SetLowLimit(Float_t lim=-70.){fLowLim = lim;}
void SetHighLimit(Float_t lim=70.){fHighLim = lim;}
Float_t GetLowLimit() const {return fLowLim;}
Float_t GetHighLimit() const {return fHighLim;}
void SetBinWidthCoarse(Float_t bw=0.01){fStepCoarse = bw;}
void SetPPsetting(Float_t cl2=250., Float_t coarsebin=0.02){fPPsetting[0]=cl2; fPPsetting[1]=coarsebin;}
static Int_t GetPeakRegion(TH1F* h, Int_t &binmin, Int_t &binmax);
static Int_t FindSecondPeak(TH1F* h, Int_t binmin,Int_t binmax, Float_t& secPeakPos);
Float_t GetBinWidthCoarse() const {return fStepCoarse;}
void SetTolerance(Float_t tol = 20./10000.){fTolerance = tol;}
void SetWindowWidth(Float_t ww=0.2){fWindowWidth=ww;}
Float_t GetTolerance() const {return fTolerance;}
void SetSearchForPileup(Bool_t opt){fSearchForPileup=opt;}
Bool_t IsSearchForPileupActive() const { return fSearchForPileup;}
protected:
void ResetHistograms();
void VertexZFinder(TTree *itsClusterTree);
Float_t GetPhiMaxIter(Int_t i) const {return fPhiDiffIter[i];}
Int_t fFirstL1;
Int_t fLastL1;
Int_t fFirstL2;
Int_t fLastL2;
Float_t fDiffPhiMax;
Float_t fZFound;
Float_t fZsig;
TH1F *fZCombc;
Float_t fLowLim;
Float_t fHighLim;
Float_t fStepCoarse;
Float_t fTolerance;
Float_t fPPsetting[2];
Int_t fMaxIter;
Float_t fPhiDiffIter[5];
Float_t fWindowWidth;
Bool_t fSearchForPileup;
private:
AliITSVertexerZD(const AliITSVertexerZD& vtxr);
AliITSVertexerZD& operator=(const AliITSVertexerZD& vtxr );
ClassDef(AliITSVertexerZD,1);
};
#endif