ROOT logo
#ifndef ALIANALYSYSTASKDIHADRONPID_H
#define ALIANALYSYSTASKDIHADRONPID_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * 
* See cxx source for full Copyright notice */ 
/* $Id$ */

#include "AliAnalysisTaskSE.h"
#include "AliEventPoolManager.h"
#include "AliAODTrackCutsDiHadronPID.h"
#include "AliAODEventCutsDiHadronPID.h"
#include "TObjArray.h"
#include "THn.h"

class AliAnalysisTaskDiHadronPID : public AliAnalysisTaskSE {

public:
	// Constructors/Destructors.
	AliAnalysisTaskDiHadronPID();
	AliAnalysisTaskDiHadronPID(const char* name);
	virtual ~AliAnalysisTaskDiHadronPID();

private:
	AliAnalysisTaskDiHadronPID(const AliAnalysisTaskDiHadronPID&);
	AliAnalysisTaskDiHadronPID& operator=(const AliAnalysisTaskDiHadronPID&);

public:
	// Methods from AliAnalysisTaskSE.
	void UserCreateOutputObjects();
	void LocalInit();
	void UserExec(Option_t*);
	void Terminate(Option_t*);

	// Are all cut objects provided to the task?
	Bool_t ReadyToStart() const {return (fEventCuts && fTrackCutsTrigger && fTrackCutsAssociated);}

	// Setters.
    void SetEventCuts(AliAODEventCutsDiHadronPID* eventcuts) {fEventCuts = eventcuts;}
    void SetTrackCutsTrigger(AliAODTrackCutsDiHadronPID* trackcuts) {fTrackCutsTrigger = trackcuts;}
    void SetTrackCutsAssociated(AliAODTrackCutsDiHadronPID* trackcuts) {fTrackCutsAssociated = trackcuts;} 

    void SetNDEtaBins(Int_t nbins) {fNDEtaBins = nbins;}
    void SetNDPhiBins(Int_t nbins) {fNDPhiBins = nbins;}
    void SetMinEventsForMixing(Int_t nevents) {fMinNEventsForMixing = nevents;}
    void SetPoolTrackDepth(Int_t trackdepth) {fPoolTrackDepth = trackdepth;}
    void SetPoolSize(Int_t poolsize) {fPoolSize = poolsize;}
    void SetMixEvents(Bool_t mixevents = kTRUE) {fMixEvents = mixevents;}
    void SetMixTriggers(Bool_t mixtriggers = kTRUE) {fMixTriggers = mixtriggers;}

	void SetCalculateMismatch(Bool_t calcmismatch) {fCalculateMismatch = calcmismatch;}
	void SetMakeTOFCorrelations(Bool_t makeTOF) {fMakeTOFcorrelations = makeTOF;}
	void SetMakeTOFTPCCorrelationsPi(Bool_t makeTOFTPC) {fMakeTOFTPCcorrelationsPi = makeTOFTPC;}
	void SetMakeTOFTPCCorrelationsKa(Bool_t makeTOFTPC) {fMakeTOFTPCcorrelationsKa = makeTOFTPC;}
	void SetMakeTOFTPCCorrelationsPr(Bool_t makeTOFTPC) {fMakeTOFTPCcorrelationsPr = makeTOFTPC;}		
	void SetTOFIntervalFactorTOFTPC(Double_t factor = 1.) {fTOFIntervalFactorTOFTPC = factor;}
	void SetExtendPtAxis(Bool_t extendptaxis) {fExtendPtAxis = extendptaxis;}

	// Overrides methods from AliAnalyisTaskSE.
	void SelectCollisionCandidates(UInt_t offlineTriggerMask = AliVEvent::kMB);
	void SetDebugLevel(Int_t level);

	// Getters.
	Int_t GetNDEtaBins() const {return fNDEtaBins;}
	Int_t GetNDPhiBins() const {return fNDPhiBins;}
	Int_t GetMinEventsForMixing() const {return fMinNEventsForMixing;}
	Int_t GetPoolTrackDepth() const {return fPoolTrackDepth;}
	Int_t GetPoolSize() const {return fPoolSize;}
	Bool_t GetMixEvents() const {return fMixEvents;}
	Bool_t GetMixTriggers() const {return fMixTriggers;}

	Bool_t GetCalculateMismatch() const {return fCalculateMismatch;}
	Bool_t GetMakeTOFCorrelations() const {return fMakeTOFcorrelations;}
	Bool_t GetMakeTOFTPCCorrelationsPi() const {return fMakeTOFTPCcorrelationsPi;}
	Bool_t GetMakeTOFTPCCorrelationsKa() const {return fMakeTOFTPCcorrelationsKa;}
	Bool_t GetMakeTOFTPCCorrelationsPr() const {return fMakeTOFTPCcorrelationsPr;}		
	Double_t GetTOFIntervalFactorTOFTPC() const {return fTOFIntervalFactorTOFTPC;}
	Bool_t GetExtendPtAxis() const {return fExtendPtAxis;}

private:
	//void FillGlobalTracksArray();
	Bool_t LoadExtMismatchHistos();
	Double_t GenerateRandomHit(Double_t eta);
	void PrintPoolManagerContents();

private:

	// PID Response Object.
	AliPIDResponse*					fPIDResponse;				//! PID Response.

	// Event Cuts Object.
	AliAODEventCutsDiHadronPID*		fEventCuts;					//

	// Track Cuts Object.
	AliAODTrackCutsDiHadronPID*		fTrackCutsTrigger;			//
	AliAODTrackCutsDiHadronPID*		fTrackCutsAssociated;		//

	// Event Pool Manager.
	AliEventPoolManager*			fPoolMgr;					//! Event pool manager.

	// Track Arrays.
	TObjArray* 						fTriggerTracks;				//! 
	TObjArray* 						fAssociatedTracks;			//!
	// TObjArray* fGlobalTracksArray; 

	// Current Event.
	AliAODEvent*					fCurrentAODEvent;			//! Current AOD Event.

	// Output List.
	TList* 							fOutputList;				//! Output List.

	// Histograms.
	TH1F*							fPtSpectrumTOFbins;			//! Pt Spectrum.
	TH3F*							fCorrelationsTOFbins;		//! Correlations Histogram.
	TH3F*							fMixedEventsTOFbins;		//! Mixed Events Histogram.	
	
	TH1F*							fPtSpectrumTOFTPCbins;		//! Pt Spectrum.
	TH3F*							fCorrelationsTOFTPCbins;	//! Correlations Histogram.
	TH3F*							fMixedEventsTOFTPCbins;		//! Mixed Events Histogram.
	TObjArray*						fMixedEventsTOFTPCbinsPID;	//! Mixed Events Histograms, with PID.

	TObjArray*						fTOFhistos;					//! Array holding all correlation functions with TOF information.
	TObjArray*						fTOFmismatch;				//! Array holding mismatches, using fTOFPtAxis.
	TAxis*							fTOFPtAxis;					//! P_t axis used for the TOF correlation histograms.
	TObjArray*						fTOFTPChistos;				//! Array holding all correlation functions with TOF and TPC information.
	TObjArray*						fTOFTPCmismatch;			//! Array holding mismatches, using fTOFTPCPtAxis.
	TAxis*							fTOFTPCPtAxis;				//! P_t axis used for the TOF/ TPC correlation histograms.

	// Settings.
	Int_t							fNDEtaBins;					//
	Int_t							fNDPhiBins;					//
	Int_t							fMinNEventsForMixing;		// Pool needs at least this many events for mixing.
	Int_t							fPoolTrackDepth;			// For the pool.
	Int_t							fPoolSize;					// 
	Bool_t							fMixEvents;					// NOT YET IMPLEMENTED.
	Bool_t							fMixTriggers;				// If true, triggers are mixed, if not true, associateds are mixed.
	Bool_t							fCalculateMismatch;			//

	// TOF mismatch stuff.
	TH1F*							fT0Fill;					//
	TH2F*							fLvsEta;					//
	TObjArray*						fLvsEtaProjections;			//		

	// Flags.
	Bool_t							fMakeTOFcorrelations;		//
	Bool_t							fMakeTOFTPCcorrelationsPi;	//
	Bool_t							fMakeTOFTPCcorrelationsKa;	//
	Bool_t							fMakeTOFTPCcorrelationsPr;	//
	Double_t						fTOFIntervalFactorTOFTPC;	// Makes the TOF interval longer while keeping the resolution constant.
	Bool_t							fExtendPtAxis;				// Extends pT 

	ClassDef(AliAnalysisTaskDiHadronPID, 3);

};

#endif
 AliAnalysisTaskDiHadronPID.h:1
 AliAnalysisTaskDiHadronPID.h:2
 AliAnalysisTaskDiHadronPID.h:3
 AliAnalysisTaskDiHadronPID.h:4
 AliAnalysisTaskDiHadronPID.h:5
 AliAnalysisTaskDiHadronPID.h:6
 AliAnalysisTaskDiHadronPID.h:7
 AliAnalysisTaskDiHadronPID.h:8
 AliAnalysisTaskDiHadronPID.h:9
 AliAnalysisTaskDiHadronPID.h:10
 AliAnalysisTaskDiHadronPID.h:11
 AliAnalysisTaskDiHadronPID.h:12
 AliAnalysisTaskDiHadronPID.h:13
 AliAnalysisTaskDiHadronPID.h:14
 AliAnalysisTaskDiHadronPID.h:15
 AliAnalysisTaskDiHadronPID.h:16
 AliAnalysisTaskDiHadronPID.h:17
 AliAnalysisTaskDiHadronPID.h:18
 AliAnalysisTaskDiHadronPID.h:19
 AliAnalysisTaskDiHadronPID.h:20
 AliAnalysisTaskDiHadronPID.h:21
 AliAnalysisTaskDiHadronPID.h:22
 AliAnalysisTaskDiHadronPID.h:23
 AliAnalysisTaskDiHadronPID.h:24
 AliAnalysisTaskDiHadronPID.h:25
 AliAnalysisTaskDiHadronPID.h:26
 AliAnalysisTaskDiHadronPID.h:27
 AliAnalysisTaskDiHadronPID.h:28
 AliAnalysisTaskDiHadronPID.h:29
 AliAnalysisTaskDiHadronPID.h:30
 AliAnalysisTaskDiHadronPID.h:31
 AliAnalysisTaskDiHadronPID.h:32
 AliAnalysisTaskDiHadronPID.h:33
 AliAnalysisTaskDiHadronPID.h:34
 AliAnalysisTaskDiHadronPID.h:35
 AliAnalysisTaskDiHadronPID.h:36
 AliAnalysisTaskDiHadronPID.h:37
 AliAnalysisTaskDiHadronPID.h:38
 AliAnalysisTaskDiHadronPID.h:39
 AliAnalysisTaskDiHadronPID.h:40
 AliAnalysisTaskDiHadronPID.h:41
 AliAnalysisTaskDiHadronPID.h:42
 AliAnalysisTaskDiHadronPID.h:43
 AliAnalysisTaskDiHadronPID.h:44
 AliAnalysisTaskDiHadronPID.h:45
 AliAnalysisTaskDiHadronPID.h:46
 AliAnalysisTaskDiHadronPID.h:47
 AliAnalysisTaskDiHadronPID.h:48
 AliAnalysisTaskDiHadronPID.h:49
 AliAnalysisTaskDiHadronPID.h:50
 AliAnalysisTaskDiHadronPID.h:51
 AliAnalysisTaskDiHadronPID.h:52
 AliAnalysisTaskDiHadronPID.h:53
 AliAnalysisTaskDiHadronPID.h:54
 AliAnalysisTaskDiHadronPID.h:55
 AliAnalysisTaskDiHadronPID.h:56
 AliAnalysisTaskDiHadronPID.h:57
 AliAnalysisTaskDiHadronPID.h:58
 AliAnalysisTaskDiHadronPID.h:59
 AliAnalysisTaskDiHadronPID.h:60
 AliAnalysisTaskDiHadronPID.h:61
 AliAnalysisTaskDiHadronPID.h:62
 AliAnalysisTaskDiHadronPID.h:63
 AliAnalysisTaskDiHadronPID.h:64
 AliAnalysisTaskDiHadronPID.h:65
 AliAnalysisTaskDiHadronPID.h:66
 AliAnalysisTaskDiHadronPID.h:67
 AliAnalysisTaskDiHadronPID.h:68
 AliAnalysisTaskDiHadronPID.h:69
 AliAnalysisTaskDiHadronPID.h:70
 AliAnalysisTaskDiHadronPID.h:71
 AliAnalysisTaskDiHadronPID.h:72
 AliAnalysisTaskDiHadronPID.h:73
 AliAnalysisTaskDiHadronPID.h:74
 AliAnalysisTaskDiHadronPID.h:75
 AliAnalysisTaskDiHadronPID.h:76
 AliAnalysisTaskDiHadronPID.h:77
 AliAnalysisTaskDiHadronPID.h:78
 AliAnalysisTaskDiHadronPID.h:79
 AliAnalysisTaskDiHadronPID.h:80
 AliAnalysisTaskDiHadronPID.h:81
 AliAnalysisTaskDiHadronPID.h:82
 AliAnalysisTaskDiHadronPID.h:83
 AliAnalysisTaskDiHadronPID.h:84
 AliAnalysisTaskDiHadronPID.h:85
 AliAnalysisTaskDiHadronPID.h:86
 AliAnalysisTaskDiHadronPID.h:87
 AliAnalysisTaskDiHadronPID.h:88
 AliAnalysisTaskDiHadronPID.h:89
 AliAnalysisTaskDiHadronPID.h:90
 AliAnalysisTaskDiHadronPID.h:91
 AliAnalysisTaskDiHadronPID.h:92
 AliAnalysisTaskDiHadronPID.h:93
 AliAnalysisTaskDiHadronPID.h:94
 AliAnalysisTaskDiHadronPID.h:95
 AliAnalysisTaskDiHadronPID.h:96
 AliAnalysisTaskDiHadronPID.h:97
 AliAnalysisTaskDiHadronPID.h:98
 AliAnalysisTaskDiHadronPID.h:99
 AliAnalysisTaskDiHadronPID.h:100
 AliAnalysisTaskDiHadronPID.h:101
 AliAnalysisTaskDiHadronPID.h:102
 AliAnalysisTaskDiHadronPID.h:103
 AliAnalysisTaskDiHadronPID.h:104
 AliAnalysisTaskDiHadronPID.h:105
 AliAnalysisTaskDiHadronPID.h:106
 AliAnalysisTaskDiHadronPID.h:107
 AliAnalysisTaskDiHadronPID.h:108
 AliAnalysisTaskDiHadronPID.h:109
 AliAnalysisTaskDiHadronPID.h:110
 AliAnalysisTaskDiHadronPID.h:111
 AliAnalysisTaskDiHadronPID.h:112
 AliAnalysisTaskDiHadronPID.h:113
 AliAnalysisTaskDiHadronPID.h:114
 AliAnalysisTaskDiHadronPID.h:115
 AliAnalysisTaskDiHadronPID.h:116
 AliAnalysisTaskDiHadronPID.h:117
 AliAnalysisTaskDiHadronPID.h:118
 AliAnalysisTaskDiHadronPID.h:119
 AliAnalysisTaskDiHadronPID.h:120
 AliAnalysisTaskDiHadronPID.h:121
 AliAnalysisTaskDiHadronPID.h:122
 AliAnalysisTaskDiHadronPID.h:123
 AliAnalysisTaskDiHadronPID.h:124
 AliAnalysisTaskDiHadronPID.h:125
 AliAnalysisTaskDiHadronPID.h:126
 AliAnalysisTaskDiHadronPID.h:127
 AliAnalysisTaskDiHadronPID.h:128
 AliAnalysisTaskDiHadronPID.h:129
 AliAnalysisTaskDiHadronPID.h:130
 AliAnalysisTaskDiHadronPID.h:131
 AliAnalysisTaskDiHadronPID.h:132
 AliAnalysisTaskDiHadronPID.h:133
 AliAnalysisTaskDiHadronPID.h:134
 AliAnalysisTaskDiHadronPID.h:135
 AliAnalysisTaskDiHadronPID.h:136
 AliAnalysisTaskDiHadronPID.h:137
 AliAnalysisTaskDiHadronPID.h:138
 AliAnalysisTaskDiHadronPID.h:139
 AliAnalysisTaskDiHadronPID.h:140
 AliAnalysisTaskDiHadronPID.h:141
 AliAnalysisTaskDiHadronPID.h:142
 AliAnalysisTaskDiHadronPID.h:143
 AliAnalysisTaskDiHadronPID.h:144
 AliAnalysisTaskDiHadronPID.h:145
 AliAnalysisTaskDiHadronPID.h:146
 AliAnalysisTaskDiHadronPID.h:147
 AliAnalysisTaskDiHadronPID.h:148
 AliAnalysisTaskDiHadronPID.h:149
 AliAnalysisTaskDiHadronPID.h:150
 AliAnalysisTaskDiHadronPID.h:151
 AliAnalysisTaskDiHadronPID.h:152
 AliAnalysisTaskDiHadronPID.h:153
 AliAnalysisTaskDiHadronPID.h:154