ROOT logo
////////////////////////////////////////////////
//--------------------------------------------- 
// Class doing conversion gamma dPhi correlations
// Gamma Conversion analysis
//---------------------------------------------
////////////////////////////////////////////////

#ifndef AliAnalysisTaskdPhi_cxx
#define AliAnalysisTaskdPhi_cxx

#include "AliAnalysisTaskSE.h"

#include <TAxis.h>
#include <TH3I.h>
#include <THnSparse.h>
#include <THn.h>

//#include <AliAnalysisFilter.h>
#include <iostream>
//#include <AliAnaConvCorrBase.h>
#include <AliLog.h>
#include <AliAnalysisCuts.h>
//class AliAnaConvCorrPion;
class AliConvEventCuts;
class AliConversionPhotonCuts;
class AliConversionMesonCuts;
class AliV0ReaderV1;
class TList;
class TH2I;
//class THnSparseF;

using namespace std;

class AliAnalysisTaskdPhi : public AliAnalysisTaskSE {
  
public:
	AliAnalysisTaskdPhi(const char *name="slindal_dPhi");
	virtual ~AliAnalysisTaskdPhi();
	
	virtual void   UserCreateOutputObjects();
	//virtual void   SetUpCorrObjects();
	//  virtual void   SetUpCorrAxes(AliAnaConvCorrBase * corr);
	virtual void   SetUpBins();
	virtual void   UserExec(Option_t *option);
	virtual void   Terminate(Option_t *);
	
	TAxis& GetAxistPt()     { return fAxistPt;      }
	TAxis& GetAxiscPt()     { return fAxiscPt;      }
	TAxis& GetAxisdEta()    { return fAxisdEta;     }
	TAxis& GetAxisTrigEta() { return fAxisTrigEta;  }
	TAxis& GetAxisAssEta()  { return fAxisAssEta;   }
	TAxis& GetAxisPhi()     { return fAxisdPhi;     }
	TAxis& GetAxisZ()       { return fAxisZ;        }
	TAxis& GetAxisCent()    { return fAxisCent;     }
	TAxis& GetAxisPiMass()  { return fAxisPiM;      }
	
	void SetV0Filter(AliConvEventCuts * filterEvent, AliConversionPhotonCuts * filter) { fV0FilterEvent=filterEvent, fV0FilterPhoton = filter; }
	void AddEventFilter(TObject * filter, Bool_t high = kTRUE) { fEventFilters[high].AddLast(filter); }
	void AddV0Filter(TObject * filter, Bool_t high = kTRUE) { fV0Filters[high].AddLast(filter); }
	void AddMesonFilter(TObject * filter, Bool_t high = kTRUE) { fMesonFilters[high].AddLast(filter); }
	void AddTrackFilter(TObject * filter, Bool_t high = kTRUE) { fTrackFilters[high].AddLast(filter); }
	void SetCorrectionMap(THnF * map)  { fCorrectionMap = map; }

	void SetEventFilter(AliConvEventCuts * filter) { fEventFilter = filter; }
	void SetMesonFilter(AliConversionMesonCuts * filter) { fMesonFilter = filter; }
	void SetPhotonFilter(AliConversionPhotonCuts * filter) { fPhotonFilter = filter; }
	void SetV0Reader(AliV0ReaderV1 * reader) { fV0Reader = reader; }
	void SaveReaderHists(Bool_t save = kTRUE) { fSaveReaderHists = save; }
	AliAnalysisCuts * GetTrackCuts() const { return fTrackFilter; }
	void SetTrackFilter( AliAnalysisCuts * cuts) { if (fTrackFilter) delete fTrackFilter; fTrackFilter = cuts; }
  
protected:
	
	TClonesArray * GetConversionGammas(Bool_t isAOD);
  
private:

	//void CorrelateWithTracks(AliAODConversionParticle * particle, TObjArray tracks[], Int_t ntrackfilters, Bool_t ** lowtrackmap, Int_t nltf, Int_t const tIDs[4], Double_t dphiValues[]);
	//void FillCounters(TObjArray * particles, TObjArray tracks[], Int_t ntrackfilters, Float_t cent, Float_t vtxz);

	Double_t GetTrackCorrection(Double_t vtxz, AliVTrack * track);

	
	///Get the distance in phi between trigger particle and correlated particle
	Float_t GetDPhi(Float_t dPhi) { 
		if ( dPhi < 3*TMath::PiOver2() && dPhi > - TMath::PiOver2() ) return dPhi;
		else return ( (dPhi>0)? dPhi - TMath::TwoPi() : dPhi + TMath::TwoPi() ); 
	}

	THnSparseF * CreateSparse(TString nameString, TString titleString, TList * axesList);
	Int_t GetBin(TAxis &axis, Double_t value);
	THnSparseF * GetMEHistogram(Int_t binz, Int_t binc, TObjArray * array);
	//  AliAnaConvCorrBase * GetCorrObject(Int_t binz, Int_t binc, TObjArray * array);
	void Process(TObjArray * gammas, TObjArray * tracks, Float_t cent, Float_t vtxz);
	void FindDeltaAODBranchName(AliVEvent * event);
	

	///Members
	TList 							*fHistograms; 					//histograms
	THnSparseF 						*fCorrSparse;
	THnSparseF 						*fTrigSparse;
	THnSparseF 						*fTrackSparse;
	THnSparseF 						*fMassSparse;

	AliV0ReaderV1 					*fV0Reader; 					// V0 reader
	Bool_t 							fSaveReaderHists; 				// save histograms from v0 reader
	AliConvEventCuts				*fV0FilterEvent; 				// additional v0 filter on top of v0 reader
	AliConversionPhotonCuts			*fV0FilterPhoton; 				// additional v0 filter on top of v0 reader
	TObjArray 						fV0Filters[2]; 					// Array of v0 filters, increasingly loose ideally.
	TObjArray 						fEventFilters[2]; 				// Array of event filters, increasingly loose ideally.
	AliConvEventCuts 				*fEventFilter;	 				// additional v0 filter for events only
	AliConversionPhotonCuts 		*fPhotonFilter; 				// additional v0 filter for photons only
	AliConversionMesonCuts 			*fMesonFilter; 					// additional meson filter behind fv0filter
	TObjArray 						fMesonFilters[2]; 				// Array of Meson filters
	AliAnalysisCuts 				*fTrackFilter; 					// Cuts for corr tracks
	TObjArray 						fTrackFilters[2]; 				// Array of track cuts

	TObjArray 						fGammas;
	TObjArray 						fTracks;
	//Int_t 								fTFBin; 						// Axis for track filters

	TH2I 							*hMEvents; 						// event histrogam
	TH2I 							*hTrackCent; 					// event histrogam
	TH3F 							*hTrigPt; 						// trigger pt
	TH2F 							*hTrackPt; 						// track pt
	TH1F 							*hTrigPhi; 						// trigger phi

	//AliAnaConvCorrBase * 				fPhotonCorr;	 				// photon
	//AliAnaConvCorrPion * 				fPionCorr; 						// pion

	TString 						fDeltaAODBranchName; 			// comment

	TAxis 							fAxistPt;						// comment
	TAxis 							fAxiscPt;						// comment
	TAxis 							fAxisdEta;						// comment
	TAxis 							fAxisTrigEta;					// comment
	TAxis 							fAxisAssEta;					// comment
	TAxis 							fAxisdPhi;						// comment
	TAxis 							fAxisCent;						// comment
	TAxis 							fAxisZ;							// comment
	TAxis 							fAxisPiM;						// comment
	TAxis 							fAxisTrackFilters; 				// comment
	TAxis 							fAxisV0Filters; 				// comment
	TAxis 							fAxisMesonFilters; 				// comment
	Bool_t 							fkTrackAxis; 					// on or off
	Bool_t 							fkV0Axis; 						// on or off
	Bool_t 							fkPionAxis; 					// on or off

	TList 							fAxesList; 						// dphi axes list
	TList 							fTrigAxesList; 					// Trigger axes list
	TList 							fTrackAxesList; 				// Trackociated particles axes list
	TList 							fMassAxesList; 					// Mass vs pt sparse

	Bool_t 							fDoPhoton; 						// do photon analysis?
	THnF * 							fCorrectionMap;

	
	AliAnalysisTaskdPhi(const AliAnalysisTaskdPhi&); // not implemented
	AliAnalysisTaskdPhi& operator=(const AliAnalysisTaskdPhi&); // not implemented
	
	ClassDef(AliAnalysisTaskdPhi, 11); 
};

inline THnSparseF * AliAnalysisTaskdPhi::GetMEHistogram(Int_t binz, Int_t binc, TObjArray * array) {
	///Get Mixed Event histogram
	if(binz < 0 || binz > fAxisZ.GetNbins()) {
		cout << "error out of z axis range: " << binz << endl; 
		return NULL;
	}  
	if(binc < 0 || binc >= fAxisCent.GetNbins()) {
		cout << "error out of centraliy axis range: " << binc << endl; 
		return NULL;
	}  
	
	TObjArray * arrayc = static_cast<TObjArray*>(array->At(binc));
	THnSparseF * histogram = static_cast<THnSparseF*>(arrayc->At(binz));
	return histogram;
}


// inline AliAnaConvCorrBase * AliAnalysisTaskdPhi::GetCorrObject(Int_t binz, Int_t binc, TObjArray * array) {
//   ///Get correlation object
//   if(binc < 0 || binz < 0) {
// 	  AliError("We have a bad bin!!!");
// 	  return NULL;
// 	}

//   TObjArray * arrayc = static_cast<TObjArray*>(array->At(binc));
//   AliAnaConvCorrBase * corrmaker = static_cast<AliAnaConvCorrBase*>(arrayc->At(binz));
//   return corrmaker;
// }

inline Int_t AliAnalysisTaskdPhi::GetBin(TAxis & axis, Double_t value) {
	//Return bin - 1 if within range, else return -1
	Int_t bin = axis.FindFixBin(value);
	bin = (bin > 0 && bin <= axis.GetNbins()) ? bin -1 : -1;
	return bin;
}

#endif

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