ROOT logo
#ifndef AliHFCorrelator_H
#define AliHFCorrelator_H

/**************************************************************************
 * Copyright(c) 1998-2009, 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.                  *
 **************************************************************************/

//
//             Base class for Heavy Flavour Correlations Analysis
//             Single Event and Mixed Event Analysis are implemented
//-----------------------------------------------------------------------
//          
//
//						   Author S.Bjelogrlic
//                         Utrecht University 
//                      sandro.bjelogrlic@cern.ch
//
//-----------------------------------------------------------------------

/* $Id: AliHFCorrelator.h 63605 2013-07-19 13:08:41Z arossi $ */

#include "AliHFAssociatedTrackCuts.h"
#include "AliEventPoolManager.h"
#include "AliVParticle.h"
#include "AliReducedParticle.h"
#include "AliVertexingHFUtils.h"
#include "AliRDHFCuts.h"


class AliHFCorrelator : public TNamed
{
	
 public:
	
	AliHFCorrelator();
	AliHFCorrelator(const Char_t* name, AliHFAssociatedTrackCuts *cuts, Bool_t useCentrality);
    AliHFCorrelator(const Char_t* name, AliHFAssociatedTrackCuts *cuts, Bool_t useCentrality, AliRDHFCuts *cutObject);
	virtual ~AliHFCorrelator();
	
	// enum for setting which associated particle type to work with
	enum{
	  kUndefined=0,
	  kHadron=1,
	  kKaon,
	  kKZero,
	  kElectron
	};

	//setters
	void SetDeltaPhiInterval (Double_t min, Double_t max){
		fPhiMin = min; fPhiMax = max;
		if(TMath::Abs(fPhiMin-fPhiMax) != 2*TMath::Pi()) AliInfo("AliHFCorrelator::Warning: the delta phi interval is not set to 2 Pi");
	}
    void SetDMesonCutObject(AliRDHFCuts* cutObject){
        if(fDMesonCutObject) delete fDMesonCutObject;
       
        fDMesonCutObject = cutObject;
         if(!fDMesonCutObject) printf("AliHFCorrelator::warning! D meson object not implemented correctly!");
    }
	void SetEventMixing(Bool_t mixON){fmixing=mixON;}
	void SetTriggerParticleProperties(Double_t ptTrig, Double_t phiTrig, Double_t etaTrig)
	{fPtTrigger = ptTrig; fPhiTrigger = phiTrig; fEtaTrigger = etaTrig;}
	void SetTriggerParticleDaughterCharge(Short_t charge) {fDCharge=charge;}
	
	
	void SetAssociatedParticleType(Int_t type){fselect = type;}
	void SetAODEvent(AliAODEvent* inputevent){fAODEvent = inputevent;}
	void SetMCArray(TClonesArray* mcArray){fmcArray = mcArray;}
	void SetUseMC(Bool_t useMC){fmontecarlo = useMC;}
	void SetApplyDisplacementCut(Int_t applycut){fUseImpactParameter = applycut;}
	void SetPIDmode(Int_t mode){fPIDmode = mode;}
	
	void SetD0Properties(AliAODRecoDecayHF2Prong* d, Int_t D0hyp)
	{fD0cand = d; fhypD0 = D0hyp;}
	
	void SetUseReco(Bool_t useReco) {fUseReco = useReco;}
	
	
	
        Bool_t DefineEventPool(); // Definition of the Event pool parameters
	Bool_t Initialize(); // function that initlize everything for the analysis	
	Bool_t ProcessEventPool(); // processes the event pool
	Bool_t ProcessAssociatedTracks(Int_t EventLoopIndex, const TObjArray* associatedTracks=NULL); //
	Bool_t Correlate(Int_t loopindex); // function that computes the correlations between the trigger particle and the track n. loopindex
	Bool_t PoolUpdate(const TObjArray* associatedTracks=NULL);// updates the event pool
	Double_t SetCorrectPhiRange(Double_t phi); // sets all the angles in the correct range
	void SetPidAssociated() {fhadcuts->SetPidAssociated();}

	//getters
	AliEventPool* GetPool() {return fPool;}
	TObjArray * GetTrackArray(){return fAssociatedTracks;}
	AliHFAssociatedTrackCuts* GetSelectionCuts() {return fhadcuts;}
	AliReducedParticle* GetAssociatedParticle() {return fReducedPart;}
    
    AliRDHFCuts*  GetDMesonCutObject(){return fDMesonCutObject;}
	
	Int_t GetNofTracks(){return fNofTracks;}
	Int_t GetNofEventsInPool(){return fPoolContent;}

	Double_t GetDeltaPhi(){return fDeltaPhi;} // Delta Phi, needs to be called after the method correlate 
	Double_t GetDeltaEta(){return fDeltaEta;} // Delta Eta
    Double_t GetCentrality(){return fMultCentr;} // centrality or multiplicity
	
	Double_t GetAssociatedKZeroInvariantmass(){return fk0InvMass;}
	
	
	
	// methods to reduce the tracks to correlate with track selection cuts applied here
	TObjArray*  AcceptAndReduceTracks(AliAODEvent* inputEvent); // selecting hadrons and kaons
	TObjArray*  AcceptAndReduceKZero(AliAODEvent* inputEvent); // selecting kzeros
	
	
 private:

	AliHFCorrelator(const AliHFCorrelator& vtxr);
	AliHFCorrelator& operator=(const AliHFCorrelator& vtxr );

	AliEventPoolManager* fPoolMgr;         //! event pool manager
	AliEventPool * fPool; //! Pool for event mixing
	AliHFAssociatedTrackCuts* fhadcuts;//! hadron cuts
	AliAODEvent * fAODEvent;//! AOD Event
    AliRDHFCuts * fDMesonCutObject; //! D meson cut object
	TObjArray* fAssociatedTracks; // Array of associated tracks
	TClonesArray* fmcArray; //mcarray
	AliReducedParticle * fReducedPart; // reduced AOD particle;
	AliAODRecoDecayHF2Prong* fD0cand; //D0 candidate
	Int_t fhypD0; //hypothesis necessary for
	Int_t fDCharge; // charge of a daughter of the D meson
	
	Bool_t fmixing;// switch for event mixing
	Bool_t fmontecarlo; // switch for MonteCarlo
	Bool_t fUseCentrality; // select between multiplicity (kFALSE) or centrality (kTRUE)
	Bool_t fUseReco; // switch to use reconstruction (kTRUE) or MC truth (kFALSE)
	
	Int_t fselect; // 1 for hadrons, 2 for kaons, 3 for KZeros
	Int_t fUseImpactParameter; // switch to use the impact parameter cut
	Int_t fPIDmode; // set the PID mode for Kaon identification
	
	Int_t fNofTracks; // number of tracks in track array
	Int_t fPoolContent; //  n of events in pool
	
	Double_t fPhiMin; // min for phi
	Double_t fPhiMax; // max for phi
    
    Double_t fMultCentr; // multiplicty/centrality for the event
	
	Double_t fPtTrigger; // pt of the trigger D meson
	Double_t fPhiTrigger; // phi of the trigger D meson
	Double_t fEtaTrigger; // Eta of the trigger D meson

	
	Double_t fDeltaPhi; // delta phi between D meson and associated track
	Double_t fDeltaEta; // delta eta between D meson and associated track
	
	Double_t fk0InvMass; // KZero invariant mass
	
	
	ClassDef(AliHFCorrelator,4); // class for HF correlations
};





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