#ifndef ALITRACKLETALG_H
#define ALITRACKLETALG_H
#include "AliTrackleter.h"
class TBits;
class TTree;
class TH1F;
class TH2F;
class AliITSDetTypeRec;
class AliITSgeom;
class AliESDEvent;
class AliESDtrack;
class AliVertex;
class AliESDVertex;
class AliMultiplicity;
class AliTrackletAlg : public AliTrackleter
{
public:
enum {kClTh,kClPh,kClZ,kClMC0,kClMC1,kClMC2,kClNPar};
enum {kTrTheta,kTrPhi,kTrDPhi,kTrDTheta,kTrLab1,kTrLab2,kClID1,kClID2,kTrNPar};
enum {kSCTh,kSCPh,kSCLab,kSCID,kSCNPar};
enum {kITSTPC,kITSSAP,kITSTPCBit=BIT(kITSTPC),kITSSAPBit=BIT(kITSSAP)};
AliTrackletAlg();
virtual ~AliTrackletAlg();
void Reconstruct(AliESDEvent* esd, TTree* treeRP);
void Reconstruct(TTree* tree, Float_t* vtx, Float_t* vtxRes);
void FindTracklets(const Float_t* vtx);
void LoadClusterFiredChips(TTree* tree);
void FlagClustersInOverlapRegions(Int_t ic1,Int_t ic2);
void FlagTrackClusters(Int_t id);
void FlagIfSecondary(AliESDtrack* track, const AliVertex* vtx);
void FlagV0s(const AliESDVertex *vtx);
void ProcessESDTracks();
Bool_t CanBeElectron(const AliESDtrack* trc) const;
void CreateMultiplicityObject();
void SetPhiWindow(Float_t w=0.08) {fPhiWindow=w;}
void SetThetaWindow(Float_t w=0.025) {fThetaWindow=w;}
void SetPhiShift(Float_t w=0.0045) {fPhiShift=w;}
void SetRemoveClustersFromOverlaps(Bool_t b = kFALSE) {fRemoveClustersFromOverlaps = b;}
void SetPhiOverlapCut(Float_t w=0.005) {fPhiOverlapCut=w;}
void SetZetaOverlapCut(Float_t w=0.05) {fZetaOverlapCut=w;}
void SetPhiRotationAngle(Float_t w=0.0) {fPhiRotationAngle=w;}
Int_t GetNClustersLayer1() const {return fNClustersLay1;}
Int_t GetNClustersLayer2() const {return fNClustersLay2;}
Int_t GetNTracklets() const {return fNTracklets;}
Int_t GetNSingleClusters() const {return fNSingleCluster;}
Short_t GetNFiredChips(Int_t layer) const {return fNFiredChips[layer];}
Float_t* GetClusterLayer1(Int_t n) {return &fClustersLay1[n*kClNPar];}
Float_t* GetClusterLayer2(Int_t n) {return &fClustersLay2[n*kClNPar];}
Float_t* GetTracklet(Int_t n) {return fTracklets[n];}
Float_t* GetCluster(Int_t n) {return fSClusters[n];}
void SetHistOn(Bool_t b=kFALSE) {fHistOn=b;}
void SaveHists();
AliITSDetTypeRec *GetDetTypeRec() const {return fDetTypeRec;}
void SetDetTypeRec(AliITSDetTypeRec *ptr){fDetTypeRec = ptr;}
void SetCutPxDrSPDin(Float_t v=0.1) { fCutPxDrSPDin = v;}
void SetCutPxDrSPDout(Float_t v=0.15) { fCutPxDrSPDout = v;}
void SetCutPxDz(Float_t v=0.2) { fCutPxDz = v;}
void SetCutDCArz(Float_t v=0.5) { fCutDCArz = v;}
void SetCutMinElectronProbTPC(Float_t v=0.5) { fCutMinElectronProbTPC = v;}
void SetCutMinElectronProbESD(Float_t v=0.1) { fCutMinElectronProbESD = v;}
void SetCutMinP(Float_t v=0.05) { fCutMinP = v;}
void SetCutMinRGamma(Float_t v=2.) { fCutMinRGamma = v;}
void SetCutMinRK0(Float_t v=1.) { fCutMinRK0 = v;}
void SetCutMinPointAngle(Float_t v=0.98) { fCutMinPointAngle = v;}
void SetCutMaxDCADauther(Float_t v=0.5) { fCutMaxDCADauther = v;}
void SetCutMassGamma(Float_t v=0.03) { fCutMassGamma = v;}
void SetCutMassGammaNSigma(Float_t v=5.) { fCutMassGammaNSigma = v;}
void SetCutMassK0(Float_t v=0.03) { fCutMassK0 = v;}
void SetCutMassK0NSigma(Float_t v=5.) { fCutMassK0NSigma = v;}
void SetCutChi2cGamma(Float_t v=2.) { fCutChi2cGamma = v;}
void SetCutChi2cK0(Float_t v=2.) { fCutChi2cK0 = v;}
void SetCutGammaSFromDecay(Float_t v=-10.) { fCutGammaSFromDecay = v;}
void SetCutK0SFromDecay(Float_t v=-10.) { fCutK0SFromDecay = v;}
void SetCutMaxDCA(Float_t v=1.) { fCutMaxDCA = v;}
Float_t GetCutPxDrSPDin() const {return fCutPxDrSPDin;}
Float_t GetCutPxDrSPDout() const {return fCutPxDrSPDout;}
Float_t GetCutPxDz() const {return fCutPxDz;}
Float_t GetCutDCArz() const {return fCutDCArz;}
Float_t GetCutMinElectronProbTPC() const {return fCutMinElectronProbTPC;}
Float_t GetCutMinElectronProbESD() const {return fCutMinElectronProbESD;}
Float_t GetCutMinP() const {return fCutMinP;}
Float_t GetCutMinRGamma() const {return fCutMinRGamma;}
Float_t GetCutMinRK0() const {return fCutMinRK0;}
Float_t GetCutMinPointAngle() const {return fCutMinPointAngle;}
Float_t GetCutMaxDCADauther() const {return fCutMaxDCADauther;}
Float_t GetCutMassGamma() const {return fCutMassGamma;}
Float_t GetCutMassGammaNSigma() const {return fCutMassGammaNSigma;}
Float_t GetCutMassK0() const {return fCutMassK0;}
Float_t GetCutMassK0NSigma() const {return fCutMassK0NSigma;}
Float_t GetCutChi2cGamma() const {return fCutChi2cGamma;}
Float_t GetCutChi2cK0() const {return fCutChi2cK0;}
Float_t GetCutGammaSFromDecay() const {return fCutGammaSFromDecay;}
Float_t GetCutK0SFromDecay() const {return fCutK0SFromDecay;}
Float_t GetCutMaxDCA() const {return fCutMaxDCA;}
protected:
AliTrackletAlg(const AliTrackletAlg& mr);
AliTrackletAlg& operator=(const AliTrackletAlg& mr);
AliITSDetTypeRec* fDetTypeRec;
AliESDEvent* fESDEvent;
TTree* fTreeRP;
UInt_t* fUsedClusLay1;
UInt_t* fUsedClusLay2;
Float_t* fClustersLay1;
Float_t* fClustersLay2;
Int_t* fDetectorIndexClustersLay1;
Int_t* fDetectorIndexClustersLay2;
Bool_t* fOverlapFlagClustersLay1;
Bool_t* fOverlapFlagClustersLay2;
Float_t** fTracklets;
Float_t** fSClusters;
Int_t fNClustersLay1;
Int_t fNClustersLay2;
Int_t fNTracklets;
Int_t fNSingleCluster;
Short_t fNFiredChips[2];
Float_t fPhiWindow;
Float_t fThetaWindow;
Float_t fPhiShift;
Bool_t fRemoveClustersFromOverlaps;
Float_t fPhiOverlapCut;
Float_t fZetaOverlapCut;
Float_t fPhiRotationAngle;
Float_t fCutPxDrSPDin;
Float_t fCutPxDrSPDout;
Float_t fCutPxDz;
Float_t fCutDCArz;
Float_t fCutMinElectronProbTPC;
Float_t fCutMinElectronProbESD;
Float_t fCutMinP;
Float_t fCutMinRGamma;
Float_t fCutMinRK0;
Float_t fCutMinPointAngle;
Float_t fCutMaxDCADauther;
Float_t fCutMassGamma;
Float_t fCutMassGammaNSigma;
Float_t fCutMassK0;
Float_t fCutMassK0NSigma;
Float_t fCutChi2cGamma;
Float_t fCutChi2cK0;
Float_t fCutGammaSFromDecay;
Float_t fCutK0SFromDecay;
Float_t fCutMaxDCA;
Bool_t fHistOn;
TH1F* fhClustersDPhiAcc;
TH1F* fhClustersDThetaAcc;
TH1F* fhClustersDPhiAll;
TH1F* fhClustersDThetaAll;
TH2F* fhDPhiVsDThetaAll;
TH2F* fhDPhiVsDThetaAcc;
TH1F* fhetaTracklets;
TH1F* fhphiTracklets;
TH1F* fhetaClustersLay1;
TH1F* fhphiClustersLay1;
void LoadClusterArrays(TTree* tree);
ClassDef(AliTrackletAlg,1)
};
#endif