]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGGA/GammaConv/AliAnalysisTaskdPhi.h
Reading friends in analysis framework inside HLT
[u/mrichter/AliRoot.git] / PWGGA / GammaConv / AliAnalysisTaskdPhi.h
1 ////////////////////////////////////////////////
2 //--------------------------------------------- 
3 // Class doing conversion gamma dPhi correlations
4 // Gamma Conversion analysis
5 //---------------------------------------------
6 ////////////////////////////////////////////////
7
8 #ifndef AliAnalysisTaskdPhi_cxx
9 #define AliAnalysisTaskdPhi_cxx
10
11 #include "AliAnalysisTaskSE.h"
12
13 #include <TAxis.h>
14 #include <TH3I.h>
15 #include <THnSparse.h>
16 #include <THn.h>
17
18 //#include <AliAnalysisFilter.h>
19 #include <iostream>
20 //#include <AliAnaConvCorrBase.h>
21 #include <AliLog.h>
22 #include <AliAnalysisCuts.h>
23 //class AliAnaConvCorrPion;
24 class AliConversionCuts;
25 class AliConversionMesonCuts;
26 class AliV0ReaderV1;
27 class TList;
28 class TH2I;
29 //class THnSparseF;
30
31 using namespace std;
32
33 class AliAnalysisTaskdPhi : public AliAnalysisTaskSE {
34   
35 public:
36   AliAnalysisTaskdPhi(const char *name="slindal_dPhi");
37   virtual ~AliAnalysisTaskdPhi();
38   
39   virtual void   UserCreateOutputObjects();
40   //virtual void   SetUpCorrObjects();
41   //  virtual void   SetUpCorrAxes(AliAnaConvCorrBase * corr);
42   virtual void   SetUpBins();
43   virtual void   UserExec(Option_t *option);
44   virtual void   Terminate(Option_t *);
45   
46   TAxis& GetAxistPt()     { return fAxistPt;      }
47   TAxis& GetAxiscPt()     { return fAxiscPt;      }
48   TAxis& GetAxisdEta()    { return fAxisdEta;     }
49   TAxis& GetAxisTrigEta() { return fAxisTrigEta;  }
50   TAxis& GetAxisAssEta()  { return fAxisAssEta;   }
51   TAxis& GetAxisPhi()     { return fAxisdPhi;     }
52   TAxis& GetAxisZ()       { return fAxisZ;        }
53   TAxis& GetAxisCent()    { return fAxisCent;     }
54   TAxis& GetAxisPiMass()  { return fAxisPiM;      }
55   
56   void SetV0Filter(AliConversionCuts * filter) { fV0Filter = filter; }
57   void AddV0Filter(TObject * filter, Bool_t high = kTRUE) { fV0Filters[high].AddLast(filter); }
58   void AddMesonFilter(TObject * filter, Bool_t high = kTRUE) { fMesonFilters[high].AddLast(filter); }
59   void AddTrackFilter(TObject * filter, Bool_t high = kTRUE) { fTrackFilters[high].AddLast(filter); }
60   void SetCorrectionMap(THnF * map)  { fCorrectionMap = map; }
61
62   void SetMesonFilter(AliConversionMesonCuts * filter) { fMesonFilter = filter; }
63   void SetPhotonFilter(AliConversionCuts * filter) { fPhotonFilter = filter; }
64   void SetV0Reader(AliV0ReaderV1 * reader) { fV0Reader = reader; }
65   void SaveReaderHists(Bool_t save = kTRUE) { fSaveReaderHists = save; }
66   AliAnalysisCuts * GetTrackCuts() const { return fTrackFilter; }
67   void SetTrackFilter( AliAnalysisCuts * cuts) { if (fTrackFilter) delete fTrackFilter; fTrackFilter = cuts; }
68   
69 protected:
70   
71   TClonesArray * GetConversionGammas(Bool_t isAOD);
72   
73 private:
74
75   //void CorrelateWithTracks(AliAODConversionParticle * particle, TObjArray tracks[], Int_t ntrackfilters, Bool_t ** lowtrackmap, Int_t nltf, Int_t const tIDs[4], Double_t dphiValues[]);
76   //void FillCounters(TObjArray * particles, TObjArray tracks[], Int_t ntrackfilters, Float_t cent, Float_t vtxz);
77
78   Double_t GetTrackCorrection(Double_t vtxz, AliVTrack * track);
79
80   
81   ///Get the distance in phi between trigger particle and correlated particle
82   Float_t GetDPhi(Float_t dPhi) { 
83     if ( dPhi < 3*TMath::PiOver2() && dPhi > - TMath::PiOver2() ) return dPhi;
84     else return ( (dPhi>0)? dPhi - TMath::TwoPi() : dPhi + TMath::TwoPi() ); 
85   }
86
87   THnSparseF * CreateSparse(TString nameString, TString titleString, TList * axesList);
88   Int_t GetBin(TAxis &axis, Double_t value);
89   THnSparseF * GetMEHistogram(Int_t binz, Int_t binc, TObjArray * array);
90   //  AliAnaConvCorrBase * GetCorrObject(Int_t binz, Int_t binc, TObjArray * array);
91   void Process(TObjArray * gammas, TObjArray * tracks, Float_t cent, Float_t vtxz);
92   void FindDeltaAODBranchName(AliVEvent * event);
93   
94
95   ///Members
96   TList * fHistograms; //histograms
97   THnSparseF * fCorrSparse;
98   THnSparseF * fTrigSparse;
99   THnSparseF * fTrackSparse;
100   THnSparseF * fMassSparse;
101
102   AliV0ReaderV1 * fV0Reader; // V0 reader
103   Bool_t fSaveReaderHists; // save histograms from v0 reader
104   AliConversionCuts * fV0Filter; //additional v0 filter on top of v0 reader
105   TObjArray fV0Filters[2]; // Array of v0 filters, increasingly loose ideally.
106   AliConversionCuts * fPhotonFilter; //additional v0 filter for photons only
107   AliConversionMesonCuts * fMesonFilter; //additional meson filter behind fv0filter
108   TObjArray fMesonFilters[2]; // Array of Meson filters
109   AliAnalysisCuts * fTrackFilter; //Cuts for corr tracks
110   TObjArray fTrackFilters[2]; // Array of track cuts
111
112   TObjArray fGammas;
113   TObjArray fTracks;
114   //Int_t fTFBin; // Axis for track filters
115
116   TH2I * hMEvents; //event histrogam
117   TH2I * hTrackCent; //event histrogam
118   TH3F * hTrigPt; // trigger pt
119   TH2F * hTrackPt; // track pt
120   TH1F * hTrigPhi; // trigger phi
121
122   //AliAnaConvCorrBase * fPhotonCorr; //photon
123   //AliAnaConvCorrPion * fPionCorr; //poin
124
125   TString fDeltaAODBranchName; //comment
126
127   TAxis fAxistPt; //comment
128   TAxis fAxiscPt; //comment
129   TAxis fAxisdEta; //comment
130   TAxis fAxisTrigEta; //comment
131   TAxis fAxisAssEta; //comment
132   TAxis fAxisdPhi; //comment
133   TAxis fAxisCent; //comment
134   TAxis fAxisZ; //comment
135   TAxis fAxisPiM; //comment
136   TAxis fAxisTrackFilters; //comment
137   TAxis fAxisV0Filters; //comment
138   TAxis fAxisMesonFilters; //comment
139   Bool_t fkTrackAxis; // on or off
140   Bool_t fkV0Axis; // on or off
141   Bool_t fkPionAxis; // on or off
142
143   TList fAxesList; //dphi axes list
144   TList fTrigAxesList; // Trigger axes list
145   TList fTrackAxesList; //Trackociated particles axes list
146   TList fMassAxesList; // Mass vs pt sparse
147
148   Bool_t fDoPhoton; // do photon analysis?
149   THnF * fCorrectionMap;
150
151   
152   AliAnalysisTaskdPhi(const AliAnalysisTaskdPhi&); // not implemented
153   AliAnalysisTaskdPhi& operator=(const AliAnalysisTaskdPhi&); // not implemented
154   
155   ClassDef(AliAnalysisTaskdPhi, 10); 
156 };
157
158 inline THnSparseF * AliAnalysisTaskdPhi::GetMEHistogram(Int_t binz, Int_t binc, TObjArray * array) {
159   ///Get Mixed Event histogram
160   if(binz < 0 || binz > fAxisZ.GetNbins()) {
161         cout << "error out of z axis range: " << binz << endl; 
162         return NULL;
163   }  
164   if(binc < 0 || binc >= fAxisCent.GetNbins()) {
165         cout << "error out of centraliy axis range: " << binc << endl; 
166         return NULL;
167   }  
168   
169   TObjArray * arrayc = static_cast<TObjArray*>(array->At(binc));
170   THnSparseF * histogram = static_cast<THnSparseF*>(arrayc->At(binz));
171   return histogram;
172 }
173
174
175 // inline AliAnaConvCorrBase * AliAnalysisTaskdPhi::GetCorrObject(Int_t binz, Int_t binc, TObjArray * array) {
176 //   ///Get correlation object
177 //   if(binc < 0 || binz < 0) {
178 //        AliError("We have a bad bin!!!");
179 //        return NULL;
180 //      }
181
182 //   TObjArray * arrayc = static_cast<TObjArray*>(array->At(binc));
183 //   AliAnaConvCorrBase * corrmaker = static_cast<AliAnaConvCorrBase*>(arrayc->At(binz));
184 //   return corrmaker;
185 // }
186
187 inline Int_t AliAnalysisTaskdPhi::GetBin(TAxis & axis, Double_t value) {
188   //Return bin - 1 if within range, else return -1
189   Int_t bin = axis.FindFixBin(value);
190   
191
192   bin = (bin > 0 && bin <= axis.GetNbins()) ? bin -1 : -1;
193   return bin;
194 }
195
196 #endif
197