1 ////////////////////////////////////////////////
2 //---------------------------------------------
3 // Class doing conversion gamma dPhi correlations
4 // Gamma Conversion analysis
5 //---------------------------------------------
6 ////////////////////////////////////////////////
8 #ifndef AliAnalysisTaskdPhi_cxx
9 #define AliAnalysisTaskdPhi_cxx
11 #include "AliAnalysisTaskSE.h"
15 #include <THnSparse.h>
18 //#include <AliAnalysisFilter.h>
20 //#include <AliAnaConvCorrBase.h>
22 #include <AliAnalysisCuts.h>
23 //class AliAnaConvCorrPion;
24 class AliConvEventCuts;
25 class AliConversionPhotonCuts;
26 class AliConversionMesonCuts;
34 class AliAnalysisTaskdPhi : public AliAnalysisTaskSE {
37 AliAnalysisTaskdPhi(const char *name="slindal_dPhi");
38 virtual ~AliAnalysisTaskdPhi();
40 virtual void UserCreateOutputObjects();
41 //virtual void SetUpCorrObjects();
42 // virtual void SetUpCorrAxes(AliAnaConvCorrBase * corr);
43 virtual void SetUpBins();
44 virtual void UserExec(Option_t *option);
45 virtual void Terminate(Option_t *);
47 TAxis& GetAxistPt() { return fAxistPt; }
48 TAxis& GetAxiscPt() { return fAxiscPt; }
49 TAxis& GetAxisdEta() { return fAxisdEta; }
50 TAxis& GetAxisTrigEta() { return fAxisTrigEta; }
51 TAxis& GetAxisAssEta() { return fAxisAssEta; }
52 TAxis& GetAxisPhi() { return fAxisdPhi; }
53 TAxis& GetAxisZ() { return fAxisZ; }
54 TAxis& GetAxisCent() { return fAxisCent; }
55 TAxis& GetAxisPiMass() { return fAxisPiM; }
57 void SetV0Filter(AliConvEventCuts * filterEvent, AliConversionPhotonCuts * filter) { fV0FilterEvent=filterEvent, fV0FilterPhoton = filter; }
58 void AddEventFilter(TObject * filter, Bool_t high = kTRUE) { fEventFilters[high].AddLast(filter); }
59 void AddV0Filter(TObject * filter, Bool_t high = kTRUE) { fV0Filters[high].AddLast(filter); }
60 void AddMesonFilter(TObject * filter, Bool_t high = kTRUE) { fMesonFilters[high].AddLast(filter); }
61 void AddTrackFilter(TObject * filter, Bool_t high = kTRUE) { fTrackFilters[high].AddLast(filter); }
62 void SetCorrectionMap(THnF * map) { fCorrectionMap = map; }
64 void SetEventFilter(AliConvEventCuts * filter) { fEventFilter = filter; }
65 void SetMesonFilter(AliConversionMesonCuts * filter) { fMesonFilter = filter; }
66 void SetPhotonFilter(AliConversionPhotonCuts * filter) { fPhotonFilter = filter; }
67 void SetV0Reader(AliV0ReaderV1 * reader) { fV0Reader = reader; }
68 void SaveReaderHists(Bool_t save = kTRUE) { fSaveReaderHists = save; }
69 AliAnalysisCuts * GetTrackCuts() const { return fTrackFilter; }
70 void SetTrackFilter( AliAnalysisCuts * cuts) { if (fTrackFilter) delete fTrackFilter; fTrackFilter = cuts; }
74 TClonesArray * GetConversionGammas(Bool_t isAOD);
78 //void CorrelateWithTracks(AliAODConversionParticle * particle, TObjArray tracks[], Int_t ntrackfilters, Bool_t ** lowtrackmap, Int_t nltf, Int_t const tIDs[4], Double_t dphiValues[]);
79 //void FillCounters(TObjArray * particles, TObjArray tracks[], Int_t ntrackfilters, Float_t cent, Float_t vtxz);
81 Double_t GetTrackCorrection(Double_t vtxz, AliVTrack * track);
84 ///Get the distance in phi between trigger particle and correlated particle
85 Float_t GetDPhi(Float_t dPhi) {
86 if ( dPhi < 3*TMath::PiOver2() && dPhi > - TMath::PiOver2() ) return dPhi;
87 else return ( (dPhi>0)? dPhi - TMath::TwoPi() : dPhi + TMath::TwoPi() );
90 THnSparseF * CreateSparse(TString nameString, TString titleString, TList * axesList);
91 Int_t GetBin(TAxis &axis, Double_t value);
92 THnSparseF * GetMEHistogram(Int_t binz, Int_t binc, TObjArray * array);
93 // AliAnaConvCorrBase * GetCorrObject(Int_t binz, Int_t binc, TObjArray * array);
94 void Process(TObjArray * gammas, TObjArray * tracks, Float_t cent, Float_t vtxz);
95 void FindDeltaAODBranchName(AliVEvent * event);
99 TList *fHistograms; //histograms
100 THnSparseF *fCorrSparse;
101 THnSparseF *fTrigSparse;
102 THnSparseF *fTrackSparse;
103 THnSparseF *fMassSparse;
105 AliV0ReaderV1 *fV0Reader; // V0 reader
106 Bool_t fSaveReaderHists; // save histograms from v0 reader
107 AliConvEventCuts *fV0FilterEvent; // additional v0 filter on top of v0 reader
108 AliConversionPhotonCuts *fV0FilterPhoton; // additional v0 filter on top of v0 reader
109 TObjArray fV0Filters[2]; // Array of v0 filters, increasingly loose ideally.
110 TObjArray fEventFilters[2]; // Array of event filters, increasingly loose ideally.
111 AliConvEventCuts *fEventFilter; // additional v0 filter for events only
112 AliConversionPhotonCuts *fPhotonFilter; // additional v0 filter for photons only
113 AliConversionMesonCuts *fMesonFilter; // additional meson filter behind fv0filter
114 TObjArray fMesonFilters[2]; // Array of Meson filters
115 AliAnalysisCuts *fTrackFilter; // Cuts for corr tracks
116 TObjArray fTrackFilters[2]; // Array of track cuts
120 //Int_t fTFBin; // Axis for track filters
122 TH2I *hMEvents; // event histrogam
123 TH2I *hTrackCent; // event histrogam
124 TH3F *hTrigPt; // trigger pt
125 TH2F *hTrackPt; // track pt
126 TH1F *hTrigPhi; // trigger phi
128 //AliAnaConvCorrBase * fPhotonCorr; // photon
129 //AliAnaConvCorrPion * fPionCorr; // pion
131 TString fDeltaAODBranchName; // comment
133 TAxis fAxistPt; // comment
134 TAxis fAxiscPt; // comment
135 TAxis fAxisdEta; // comment
136 TAxis fAxisTrigEta; // comment
137 TAxis fAxisAssEta; // comment
138 TAxis fAxisdPhi; // comment
139 TAxis fAxisCent; // comment
140 TAxis fAxisZ; // comment
141 TAxis fAxisPiM; // comment
142 TAxis fAxisTrackFilters; // comment
143 TAxis fAxisV0Filters; // comment
144 TAxis fAxisMesonFilters; // comment
145 Bool_t fkTrackAxis; // on or off
146 Bool_t fkV0Axis; // on or off
147 Bool_t fkPionAxis; // on or off
149 TList fAxesList; // dphi axes list
150 TList fTrigAxesList; // Trigger axes list
151 TList fTrackAxesList; // Trackociated particles axes list
152 TList fMassAxesList; // Mass vs pt sparse
154 Bool_t fDoPhoton; // do photon analysis?
155 THnF * fCorrectionMap;
158 AliAnalysisTaskdPhi(const AliAnalysisTaskdPhi&); // not implemented
159 AliAnalysisTaskdPhi& operator=(const AliAnalysisTaskdPhi&); // not implemented
161 ClassDef(AliAnalysisTaskdPhi, 11);
164 inline THnSparseF * AliAnalysisTaskdPhi::GetMEHistogram(Int_t binz, Int_t binc, TObjArray * array) {
165 ///Get Mixed Event histogram
166 if(binz < 0 || binz > fAxisZ.GetNbins()) {
167 cout << "error out of z axis range: " << binz << endl;
170 if(binc < 0 || binc >= fAxisCent.GetNbins()) {
171 cout << "error out of centraliy axis range: " << binc << endl;
175 TObjArray * arrayc = static_cast<TObjArray*>(array->At(binc));
176 THnSparseF * histogram = static_cast<THnSparseF*>(arrayc->At(binz));
181 // inline AliAnaConvCorrBase * AliAnalysisTaskdPhi::GetCorrObject(Int_t binz, Int_t binc, TObjArray * array) {
182 // ///Get correlation object
183 // if(binc < 0 || binz < 0) {
184 // AliError("We have a bad bin!!!");
188 // TObjArray * arrayc = static_cast<TObjArray*>(array->At(binc));
189 // AliAnaConvCorrBase * corrmaker = static_cast<AliAnaConvCorrBase*>(arrayc->At(binz));
193 inline Int_t AliAnalysisTaskdPhi::GetBin(TAxis & axis, Double_t value) {
194 //Return bin - 1 if within range, else return -1
195 Int_t bin = axis.FindFixBin(value);
196 bin = (bin > 0 && bin <= axis.GetNbins()) ? bin -1 : -1;