ROOT logo
#ifndef ALIANALYSISTASKB2_H
#define ALIANALYSISTASKB2_H

/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

// Analysis task for B2
// author: Eulogio Serradilla <eulogio.serradilla@cern.ch>

#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; // particle species for the analysis
	Int_t fPartCode; // particle species code
	
	Bool_t fHeavyIons; // analysis of heavy ions data
	Bool_t fSimulation; // analysis of MC simulation
	
	Bool_t fMultTriggerFired; //! track multiplicity trigger flag
	Bool_t fCentTriggerFired; //! centrality trigger flag
	Bool_t fTriggerFired; //! trigger flag
	Bool_t fGoodVertex; //! good vertex flag
	Bool_t fPileUpEvent; //! pile-up flag
	
	Bool_t fV0AND; // V0AND trigger flag
	Bool_t fNoFastOnly; // No kFastOnly trigger flag
	Bool_t fNtrkMultTrigger; // enable combined multiplicity trigger
	Double_t fMinKNOmult; // minimum KNO track multiplicity scaling
	Double_t fMaxKNOmult; // maximum KNO track multiplicity scaling
	Double_t fMinCentrality; // minimum centrality for HI
	Double_t fMaxCentrality; // maximum centrality for HI
	
	Double_t fNch; //! current charged multipicity
	Double_t fNtrk; //! current track multipicity
	Double_t fMeanNtrk; // average track multiplicity
	Double_t fKNOmult; //! KNO track multiplicity scaling
	
	Double_t fMinVx; // vertex low X value
	Double_t fMaxVx; // vertex high X value
	Double_t fMinVy; // vertex low Y value
	Double_t fMaxVy; // vertex high Y value
	Double_t fMinVz; // vertex low Z value
	Double_t fMaxVz; // vertex high Z value
	
	Double_t fMinDCAxy; // minimum DCAxy
	Double_t fMaxDCAxy; // maximum DCAxy
	Double_t fMinDCAz; // minimum DCAz
	Double_t fMaxDCAz; // maximum DCAz
	Double_t fMaxNSigma; // maximum number of sigmas to primary vertex
	
	Double_t fMinEta; // minimum pseudorapidity
	Double_t fMaxEta; // maximum pseudorapidity
	Double_t fMinY; // minimum rapidity
	Double_t fMaxY; // maximum rapidity
	
	AliMCEvent* fMCevent;   //! monte carlo event
	AliESDEvent* fESDevent; //! ESD event
	
	TList* fOutputContainer; // output container
	AliLnHistoMap*  fHistoMap; // histogram map (defined somewhere else)
	AliESDtrackCuts* fTrackCuts; // track cuts (defined somewhere else)
	AliLnID* fLnID; // PID for light nuclei (defined somewhere else)
	
	Double_t fMaxNSigmaITS; // maximum number of sigmas to dEdx in the ITS
	Double_t fMaxNSigmaTPC; // maximum number of sigmas to dEdx in the TPC
	Double_t fMaxNSigmaTOF; // maximum number of sigmas to dEdx in the TOF
	
	class AliTriggerAnalysis* fTrigAna; //! to access trigger information
	class AliESDpid* fESDpid; //! ESD pid
	Bool_t fIsPidOwner; // whether we own fESDpid
	Int_t fTimeZeroType;  // time zero type
	
	Bool_t fTOFmatch; // TOF match flag
	
	Double_t fMinM2; // minimum m2 for TPC+TOF pid
	Double_t fMaxM2; // maximum m2 for TPC+TOF pid
	
	Bool_t fMomentumCorrection; // enable momentum correction
	TProfile* fMoCpfx; // momentum correction from simulation
	
	ClassDef(AliAnalysisTaskB2, 1)
};

#endif // ALIANALYSISTASKB2_H
 AliAnalysisTaskB2.h:1
 AliAnalysisTaskB2.h:2
 AliAnalysisTaskB2.h:3
 AliAnalysisTaskB2.h:4
 AliAnalysisTaskB2.h:5
 AliAnalysisTaskB2.h:6
 AliAnalysisTaskB2.h:7
 AliAnalysisTaskB2.h:8
 AliAnalysisTaskB2.h:9
 AliAnalysisTaskB2.h:10
 AliAnalysisTaskB2.h:11
 AliAnalysisTaskB2.h:12
 AliAnalysisTaskB2.h:13
 AliAnalysisTaskB2.h:14
 AliAnalysisTaskB2.h:15
 AliAnalysisTaskB2.h:16
 AliAnalysisTaskB2.h:17
 AliAnalysisTaskB2.h:18
 AliAnalysisTaskB2.h:19
 AliAnalysisTaskB2.h:20
 AliAnalysisTaskB2.h:21
 AliAnalysisTaskB2.h:22
 AliAnalysisTaskB2.h:23
 AliAnalysisTaskB2.h:24
 AliAnalysisTaskB2.h:25
 AliAnalysisTaskB2.h:26
 AliAnalysisTaskB2.h:27
 AliAnalysisTaskB2.h:28
 AliAnalysisTaskB2.h:29
 AliAnalysisTaskB2.h:30
 AliAnalysisTaskB2.h:31
 AliAnalysisTaskB2.h:32
 AliAnalysisTaskB2.h:33
 AliAnalysisTaskB2.h:34
 AliAnalysisTaskB2.h:35
 AliAnalysisTaskB2.h:36
 AliAnalysisTaskB2.h:37
 AliAnalysisTaskB2.h:38
 AliAnalysisTaskB2.h:39
 AliAnalysisTaskB2.h:40
 AliAnalysisTaskB2.h:41
 AliAnalysisTaskB2.h:42
 AliAnalysisTaskB2.h:43
 AliAnalysisTaskB2.h:44
 AliAnalysisTaskB2.h:45
 AliAnalysisTaskB2.h:46
 AliAnalysisTaskB2.h:47
 AliAnalysisTaskB2.h:48
 AliAnalysisTaskB2.h:49
 AliAnalysisTaskB2.h:50
 AliAnalysisTaskB2.h:51
 AliAnalysisTaskB2.h:52
 AliAnalysisTaskB2.h:53
 AliAnalysisTaskB2.h:54
 AliAnalysisTaskB2.h:55
 AliAnalysisTaskB2.h:56
 AliAnalysisTaskB2.h:57
 AliAnalysisTaskB2.h:58
 AliAnalysisTaskB2.h:59
 AliAnalysisTaskB2.h:60
 AliAnalysisTaskB2.h:61
 AliAnalysisTaskB2.h:62
 AliAnalysisTaskB2.h:63
 AliAnalysisTaskB2.h:64
 AliAnalysisTaskB2.h:65
 AliAnalysisTaskB2.h:66
 AliAnalysisTaskB2.h:67
 AliAnalysisTaskB2.h:68
 AliAnalysisTaskB2.h:69
 AliAnalysisTaskB2.h:70
 AliAnalysisTaskB2.h:71
 AliAnalysisTaskB2.h:72
 AliAnalysisTaskB2.h:73
 AliAnalysisTaskB2.h:74
 AliAnalysisTaskB2.h:75
 AliAnalysisTaskB2.h:76
 AliAnalysisTaskB2.h:77
 AliAnalysisTaskB2.h:78
 AliAnalysisTaskB2.h:79
 AliAnalysisTaskB2.h:80
 AliAnalysisTaskB2.h:81
 AliAnalysisTaskB2.h:82
 AliAnalysisTaskB2.h:83
 AliAnalysisTaskB2.h:84
 AliAnalysisTaskB2.h:85
 AliAnalysisTaskB2.h:86
 AliAnalysisTaskB2.h:87
 AliAnalysisTaskB2.h:88
 AliAnalysisTaskB2.h:89
 AliAnalysisTaskB2.h:90
 AliAnalysisTaskB2.h:91
 AliAnalysisTaskB2.h:92
 AliAnalysisTaskB2.h:93
 AliAnalysisTaskB2.h:94
 AliAnalysisTaskB2.h:95
 AliAnalysisTaskB2.h:96
 AliAnalysisTaskB2.h:97
 AliAnalysisTaskB2.h:98
 AliAnalysisTaskB2.h:99
 AliAnalysisTaskB2.h:100
 AliAnalysisTaskB2.h:101
 AliAnalysisTaskB2.h:102
 AliAnalysisTaskB2.h:103
 AliAnalysisTaskB2.h:104
 AliAnalysisTaskB2.h:105
 AliAnalysisTaskB2.h:106
 AliAnalysisTaskB2.h:107
 AliAnalysisTaskB2.h:108
 AliAnalysisTaskB2.h:109
 AliAnalysisTaskB2.h:110
 AliAnalysisTaskB2.h:111
 AliAnalysisTaskB2.h:112
 AliAnalysisTaskB2.h:113
 AliAnalysisTaskB2.h:114
 AliAnalysisTaskB2.h:115
 AliAnalysisTaskB2.h:116
 AliAnalysisTaskB2.h:117
 AliAnalysisTaskB2.h:118
 AliAnalysisTaskB2.h:119
 AliAnalysisTaskB2.h:120
 AliAnalysisTaskB2.h:121
 AliAnalysisTaskB2.h:122
 AliAnalysisTaskB2.h:123
 AliAnalysisTaskB2.h:124
 AliAnalysisTaskB2.h:125
 AliAnalysisTaskB2.h:126
 AliAnalysisTaskB2.h:127
 AliAnalysisTaskB2.h:128
 AliAnalysisTaskB2.h:129
 AliAnalysisTaskB2.h:130
 AliAnalysisTaskB2.h:131
 AliAnalysisTaskB2.h:132
 AliAnalysisTaskB2.h:133
 AliAnalysisTaskB2.h:134
 AliAnalysisTaskB2.h:135
 AliAnalysisTaskB2.h:136
 AliAnalysisTaskB2.h:137
 AliAnalysisTaskB2.h:138
 AliAnalysisTaskB2.h:139
 AliAnalysisTaskB2.h:140
 AliAnalysisTaskB2.h:141
 AliAnalysisTaskB2.h:142
 AliAnalysisTaskB2.h:143
 AliAnalysisTaskB2.h:144
 AliAnalysisTaskB2.h:145
 AliAnalysisTaskB2.h:146
 AliAnalysisTaskB2.h:147
 AliAnalysisTaskB2.h:148
 AliAnalysisTaskB2.h:149
 AliAnalysisTaskB2.h:150
 AliAnalysisTaskB2.h:151
 AliAnalysisTaskB2.h:152
 AliAnalysisTaskB2.h:153
 AliAnalysisTaskB2.h:154
 AliAnalysisTaskB2.h:155
 AliAnalysisTaskB2.h:156
 AliAnalysisTaskB2.h:157
 AliAnalysisTaskB2.h:158
 AliAnalysisTaskB2.h:159
 AliAnalysisTaskB2.h:160
 AliAnalysisTaskB2.h:161
 AliAnalysisTaskB2.h:162
 AliAnalysisTaskB2.h:163
 AliAnalysisTaskB2.h:164
 AliAnalysisTaskB2.h:165
 AliAnalysisTaskB2.h:166
 AliAnalysisTaskB2.h:167
 AliAnalysisTaskB2.h:168
 AliAnalysisTaskB2.h:169
 AliAnalysisTaskB2.h:170
 AliAnalysisTaskB2.h:171
 AliAnalysisTaskB2.h:172
 AliAnalysisTaskB2.h:173
 AliAnalysisTaskB2.h:174
 AliAnalysisTaskB2.h:175
 AliAnalysisTaskB2.h:176
 AliAnalysisTaskB2.h:177
 AliAnalysisTaskB2.h:178
 AliAnalysisTaskB2.h:179
 AliAnalysisTaskB2.h:180
 AliAnalysisTaskB2.h:181
 AliAnalysisTaskB2.h:182
 AliAnalysisTaskB2.h:183
 AliAnalysisTaskB2.h:184
 AliAnalysisTaskB2.h:185
 AliAnalysisTaskB2.h:186
 AliAnalysisTaskB2.h:187
 AliAnalysisTaskB2.h:188
 AliAnalysisTaskB2.h:189
 AliAnalysisTaskB2.h:190
 AliAnalysisTaskB2.h:191
 AliAnalysisTaskB2.h:192
 AliAnalysisTaskB2.h:193
 AliAnalysisTaskB2.h:194