#ifndef ALIANALYSISTASKB2_H
#define ALIANALYSISTASKB2_H
#include <AliAnalysisTask.h>
class AliESDtrack;
class AliMCEvent;
class AliESDEvent;
class TString;
class AliESDtrackCuts;
class AliLnHistoMap;
class AliLnID;
class TParticle;
class TList;
class TProfile;
class AliAnalysisTaskB2: public AliAnalysisTask
{
public:
AliAnalysisTaskB2();
AliAnalysisTaskB2(const char* name);
virtual ~AliAnalysisTaskB2();
virtual void ConnectInputData(Option_t *);
virtual void CreateOutputObjects();
virtual void Exec(Option_t* option);
virtual void Terminate(Option_t *);
void SetV0ANDtrigger(Bool_t flag=1) { fV0AND = flag; }
void SetNoFastOnlyTrigger(Bool_t flag=1) { fNoFastOnly = flag; }
void SetNtrkMultTrigger(Bool_t flag=1) { fNtrkMultTrigger = flag; }
void SetKNOmultInterval(Double_t min, Double_t max) { fMinKNOmult = min; fMaxKNOmult = max; }
void SetCentralityInterval(Double_t min, Double_t max) { fMinCentrality = min; fMaxCentrality = max; }
void SetMeanNtrk(Double_t mean) { fMeanNtrk = mean; }
void SetVertexXInterval(Double_t min, Double_t max) { fMinVx = min; fMaxVx = max; }
void SetVertexYInterval(Double_t min, Double_t max) { fMinVy = min; fMaxVy = max; }
void SetVertexZInterval(Double_t min, Double_t max) { fMinVz = min; fMaxVz = max; }
void SetDCAxyInterval(Double_t min, Double_t max) { fMinDCAxy = min; fMaxDCAxy = max; }
void SetDCAzInterval(Double_t min, Double_t max) { fMinDCAz = min; fMaxDCAz = max; }
void SetMaxNSigmaToVertex(Double_t max ) { fMaxNSigma = max; }
void SetEtaInterval(Double_t min, Double_t max) { fMinEta = min; fMaxEta = max; }
void SetRapidityInterval(Double_t min, Double_t max) { fMinY = min; fMaxY = max; }
void SetSimulation(Bool_t flag = kTRUE) { fSimulation = flag; }
void SetHeavyIons(Bool_t flag = kTRUE) { fHeavyIons = flag; }
void SetMomentumCorrection(Bool_t flag = kTRUE) { fMomentumCorrection = flag; }
void SetMomentumCorrectionProfile(TProfile* pfx) { fMoCpfx = pfx; }
void SetHistogramMap(AliLnHistoMap* map) { fHistoMap = map; }
void SetESDtrackCuts(AliESDtrackCuts* esdTrackCuts) {fTrackCuts = esdTrackCuts; }
void SetPID(AliLnID* lnID) { fLnID = lnID; }
void SetMaxNSigmaITS(Double_t max) { fMaxNSigmaITS = max; }
void SetMaxNSigmaTPC(Double_t max) { fMaxNSigmaTPC = max; }
void SetMaxNSigmaTOF(Double_t max) { fMaxNSigmaTOF = max; }
void SetTOFmatch(Bool_t flag = kTRUE) { fTOFmatch = flag; }
Bool_t AcceptTOFtrack(const AliESDtrack* trk) const;
void SetM2Interval(Double_t min, Double_t max) { fMinM2 = min; fMaxM2 = max; };
void SetParticleSpecies(const TString& species);
private:
AliAnalysisTaskB2(const AliAnalysisTaskB2& other);
AliAnalysisTaskB2& operator=(const AliAnalysisTaskB2& other);
AliLnHistoMap* CreateHistograms();
Int_t GetParticles();
Int_t GetTracks();
Bool_t IsV0AND() const;
Bool_t IsFastOnly(UInt_t triggerBits) const;
Bool_t IsMB(UInt_t triggerBits) const;
TParticle* GetParticle(const AliESDtrack* trk) const;
Int_t GetChargedMultiplicity(Double_t maxEta) const;
Bool_t IsFakeTrack(const AliESDtrack* trk) const;
Bool_t IsPhysicalPrimary(const TParticle* prt) const;
Bool_t IsFromMaterial(const TParticle* prt) const;
Bool_t IsFromWeakDecay(const TParticle* prt) const;
Double_t GetSign(TParticle* prt) const;
Double_t GetPhi(const AliESDtrack* trk) const;
Double_t GetTheta(const AliESDtrack* trk) const;
Double_t GetRapidity(Double_t p, Double_t pz, Double_t m) const;
Double_t GetITSmomentum(const AliESDtrack* trk) const;
Double_t GetTOFmomentum(const AliESDtrack* trk) const;
Double_t GetBeta(const AliESDtrack* trk) const;
Double_t GetMassSquared(Double_t p, Double_t beta) const;
Double_t GetTimeOfFlight(const AliESDtrack* trk) const;
Double_t GetITSchi2PerCluster(const AliESDtrack* trk) const;
Int_t GetITSnClusters(const AliESDtrack* trk) const;
Int_t GetITSnPointsPID(const AliESDtrack* trk) const;
Int_t GetPidCode(const TString& species) const;
Double_t GetMomentumCorrection(Double_t ptrec) const;
Double_t GetM2Difference(Double_t beta, Double_t p, Double_t m) const;
Double_t GetExpectedTime(const AliESDtrack* trk, Double_t m) const;
private:
TString fSpecies;
Int_t fPartCode;
Bool_t fHeavyIons;
Bool_t fSimulation;
Bool_t fMultTriggerFired;
Bool_t fCentTriggerFired;
Bool_t fTriggerFired;
Bool_t fGoodVertex;
Bool_t fPileUpEvent;
Bool_t fV0AND;
Bool_t fNoFastOnly;
Bool_t fNtrkMultTrigger;
Double_t fMinKNOmult;
Double_t fMaxKNOmult;
Double_t fMinCentrality;
Double_t fMaxCentrality;
Double_t fNch;
Double_t fNtrk;
Double_t fMeanNtrk;
Double_t fKNOmult;
Double_t fMinVx;
Double_t fMaxVx;
Double_t fMinVy;
Double_t fMaxVy;
Double_t fMinVz;
Double_t fMaxVz;
Double_t fMinDCAxy;
Double_t fMaxDCAxy;
Double_t fMinDCAz;
Double_t fMaxDCAz;
Double_t fMaxNSigma;
Double_t fMinEta;
Double_t fMaxEta;
Double_t fMinY;
Double_t fMaxY;
AliMCEvent* fMCevent;
AliESDEvent* fESDevent;
TList* fOutputContainer;
AliLnHistoMap* fHistoMap;
AliESDtrackCuts* fTrackCuts;
AliLnID* fLnID;
Double_t fMaxNSigmaITS;
Double_t fMaxNSigmaTPC;
Double_t fMaxNSigmaTOF;
class AliTriggerAnalysis* fTrigAna;
class AliESDpid* fESDpid;
Bool_t fIsPidOwner;
Int_t fTimeZeroType;
Bool_t fTOFmatch;
Double_t fMinM2;
Double_t fMaxM2;
Bool_t fMomentumCorrection;
TProfile* fMoCpfx;
ClassDef(AliAnalysisTaskB2, 1)
};
#endif // ALIANALYSISTASKB2_H