ROOT logo
#ifndef AliHFAssociatedTrackCuts_H
#define AliHFAssociatedTrackCuts_H
/**************************************************************************
 * Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

////////////////////////////////////////////////////////////////////////
//
// Base class for cuts on Associated tracks for HF Correlation analysis
//
// Author: S.Bjelogrlic (Utrecht) sandro.bjelogrlic@cern.ch
////////////////////////////////////////////////////////////////////////

#include <TString.h>
#include "AliAnalysisCuts.h"
#include "AliESDtrackCuts.h"
#include "AliESDVertex.h"
#include "AliAODPidHF.h"
#include "AliAODEvent.h"
#include "AliAODRecoDecayHF2Prong.h"
#include <TClonesArray.h>
#include <TH3D.h>


class AliAODTrack;
class AliAODEvent;


//
class AliHFAssociatedTrackCuts : public AliAnalysisCuts
{
	public:	
	AliHFAssociatedTrackCuts();
	AliHFAssociatedTrackCuts(const char* name, const char* title);
	
	
	AliHFAssociatedTrackCuts(const AliHFAssociatedTrackCuts& source);
	AliHFAssociatedTrackCuts& operator=(const AliHFAssociatedTrackCuts& source);
	
	virtual ~AliHFAssociatedTrackCuts(); // destructor
	Bool_t IsSelected(TList*  list) {if(list) return kTRUE; return kFALSE;};
	Bool_t IsSelected(TObject*  obj) {if(obj) return kTRUE; return kFALSE;};
	Bool_t IsInAcceptance();
	Bool_t IsHadronSelected(AliAODTrack * track,const AliESDVertex *primary=0x0, Double_t magfield=0);
	Bool_t CheckHadronKinematic(Double_t pt, Double_t d0); 
	Bool_t Charge(Short_t charge, AliAODTrack* track);
	Bool_t CheckKaonCompatibility(AliAODTrack * track, Bool_t useMc, TClonesArray* mcArray, Int_t method=1);
	Bool_t IsKZeroSelected(AliAODv0 *vzero, AliAODVertex *vtx1);
	Bool_t *IsMCpartFromHF(Int_t label, TClonesArray*mcArray);
	Bool_t InvMassDstarRejection(AliAODRecoDecayHF2Prong* d, AliAODTrack *track, Int_t hypD0) const;
	void SetPidAssociated();	
	
	// getters
	AliESDtrackCuts * GetESDTrackCuts() const {return fESDTrackCuts;}
	AliAODPidHF * GetPIDObject() const {return fPidObj;}
	TH3D * GetEfficiencyWeight() const {return fEffWeights;}
	
	Int_t GetMaxNEventsInPool() const {return fPoolMaxNEvents;}
	Int_t GetMinNTracksInPool() const {return fPoolMinNTracks;}
	Int_t GetMinEventsToMix() const {return fMinEventsToMix;}
	Int_t GetNZvtxPoolBins() const {return fNzVtxBins;}
	Double_t *GetZvtxPoolBins() const {return fZvtxBins;}
	Int_t GetNCentPoolBins() const {return fNCentBins;}
	Double_t *GetCentPoolBins() const {return fCentBins;}
	
	Int_t GetNofMCEventType() const {return fNofMCEventType;}
	Int_t *GetMCEventType() const {return fMCEventType;}
    Int_t GetPoolBin(Double_t multorcent, Double_t zVtx) const;
	
	Int_t GetNTrackCuts() const {return fNTrackCuts;}
	Float_t* GetAODTrackCuts() const {return fAODTrackCuts;}
	TString * GetTrackCutNames() const {return fTrackCutsNames;}
	Int_t GetNvZeroCuts() const {return fNvZeroCuts;}
	Float_t * GetAODvZeroCuts() const {return fAODvZeroCuts;}
	TString * GetvZeroCutNames() const {return fvZeroCutsNames;}
	Int_t GetFilterBit() const {return fBit;}
	Short_t GetCharge() const {return fCharge;}
	TString GetDescription() const {return fDescription;}
    

	
	
	
	void AddTrackCuts(const AliESDtrackCuts *cuts) {
		delete fESDTrackCuts; 
		fESDTrackCuts=new AliESDtrackCuts(*cuts); 
		return;
	}
	
	void AddDescription(TString description){fDescription=description;}
	
	//setters
	//event pool settings
	void SetMaxNEventsInPool(Int_t events){fPoolMaxNEvents=events;}
	void SetMinNTracksInPool(Int_t tracks){fPoolMinNTracks=tracks;}
	void SetMinEventsToMix(Int_t events){fMinEventsToMix=events;}
	
	void SetNofPoolBins(Int_t Nzvtxbins, Int_t Ncentbins){
		fNzVtxBins=Nzvtxbins;
		fNzVtxBinsDim=Nzvtxbins+1;
		
	    fNCentBins=Ncentbins;
		fNCentBinsDim=Ncentbins+1;
	}
	
	void SetPoolBins(Double_t *ZvtxBins, Double_t* CentBins){
		fZvtxBins=ZvtxBins; 
		fCentBins=CentBins;
	}
	
	// set MC events to process
	
	void SetNofMCEventTypes(Int_t k) {fNofMCEventType=k;}
	void SetMCEventTypes(Int_t *MCEventTypeArray);
	
	//cut settings
	void SetAODTrackCuts(Float_t *cutsarray);
	void SetTrackCutsNames(/*TString *namearray*/);
	void SetAODvZeroCuts(Float_t *cutsarray);
	void SetvZeroCutsNames(/*TString *namearray*/);
	void SetPidHF(AliAODPidHF* pid) {fPidObj = pid; return;}
	void SetCharge(Short_t charge) {fCharge = charge;}
	void SetFilterBit(Int_t bit) {fBit = bit;}
	void SetEfficiencyWeightMap(TH3D *hMap){if(fEffWeights)delete fEffWeights;fEffWeights=(TH3D*)hMap->Clone();}
    
    void SetTriggerEffWeightMapvspt(TH1D* hTrigMap) {if(fTrigEffWeightsvspt) delete fTrigEffWeightsvspt; fTrigEffWeightsvspt=(TH1D*)hTrigMap->Clone();}
	void SetTriggerEffWeightMapvsptB(TH1D* hTrigMapB) {if(fTrigEffWeightsvsptB) delete fTrigEffWeightsvsptB; fTrigEffWeightsvsptB=(TH1D*)hTrigMapB->Clone();}
    
    void SetTriggerEffWeightMap(TH2D* hTrigMap) {if(fTrigEffWeights) delete fTrigEffWeights; fTrigEffWeights=(TH2D*)hTrigMap->Clone();}
	void SetTriggerEffWeightMapB(TH2D* hTrigMapB) {if(fTrigEffWeightsB) delete fTrigEffWeightsB; fTrigEffWeightsB=(TH2D*)hTrigMapB->Clone();}
    
    
	Double_t GetTrackWeight(Double_t pt, Double_t eta,Double_t zvtx);
    Double_t GetTrigWeight(Double_t pt, Double_t mult=0);
	Double_t GetTrigWeightB(Double_t pt, Double_t mult=0);
    
    Bool_t IsTrackEffMap(){if(fEffWeights) return kTRUE; else return kFALSE;}
    Bool_t IsTrigEffMap1D(){ if(fTrigEffWeightsvspt) return kTRUE; else return kFALSE;}
    Bool_t IsTrigEffMap1DB(){ if(fTrigEffWeightsvsptB) return kTRUE; else return kFALSE;}
    Bool_t IsTrigEffMap2D(){ if(fTrigEffWeights) return kTRUE; else return kFALSE;}
    Bool_t IsTrigEffMap2DB(){ if(fTrigEffWeightsB) return kTRUE; else return kFALSE;}
    
    
	void Print(Option_t *option) const;
	virtual void PrintAll() const;
	virtual void PrintPoolParameters() const;
	virtual void PrintSelectedMCevents() const;

	
	
	
	void SetNVarsTrack(Int_t nVars){fNTrackCuts=nVars;}
	void SetNVarsVzero(Int_t nVars){fNvZeroCuts=nVars;}
	
	
	
private:
	AliESDtrackCuts *fESDTrackCuts; // track cut object
	AliAODPidHF * fPidObj;     /// PID object
	TH3D *fEffWeights;     // weight map (pt,eta,zvtx) to account for single track efficiency
    TH1D *fTrigEffWeightsvspt;     // weight map (pt,mult) to account for trigger efficiency (on data, from c)
	TH1D *fTrigEffWeightsvsptB;     // weight map (pt,mult) to account for trigger efficiency (from b)
    TH2D *fTrigEffWeights;     // weight map (pt,mult) to account for trigger efficiency (on data, from c)
	TH2D *fTrigEffWeightsB;     // weight map (pt,mult) to account for trigger efficiency (from b)
	Int_t fPoolMaxNEvents; // set maximum number of events in the pool
	Int_t fPoolMinNTracks; // se minimum number of tracks in the pool
	Int_t fMinEventsToMix; // set the minimum number of events you wanna mix
	
	Int_t fNzVtxBins; // number of z vrtx bins
	Int_t fNzVtxBinsDim; // number of z vrtx bins +1 : necessary to initialize correctly the array
	Double_t* fZvtxBins; // [fNzVtxBinsDim]
	
	
	Int_t fNCentBins; //number of centrality bins
	Int_t fNCentBinsDim; //number of centrality bins bins +1 : necessary to initialize correctly the array
	Double_t* fCentBins; // [fNCentBinsDim]
	
	Int_t fNofMCEventType;// number of event types to be selected in MC simultaneously;
	Int_t *fMCEventType;//[fNofMCEventType]
	
	Int_t fNTrackCuts;     // array dimension
	Float_t* fAODTrackCuts;//[fNTrackCuts]
	TString * fTrackCutsNames;//[fNTrackCuts]
	Int_t fNvZeroCuts;// array dimension
	Float_t *fAODvZeroCuts;//[fNvZeroCuts]
	TString * fvZeroCutsNames;//[fNvZeroCuts]
	Int_t fBit; // filterBit
	Short_t fCharge; // charge (+1 or -1)
	TString fDescription; // additional description to the cuts
	
	
	ClassDef(AliHFAssociatedTrackCuts,6);
};


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