changes from gsi. Using mult if no centrality. testfilterbit 128
[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_H
9 #define AliAnalysisTaskdPhi_H
10
11 #include "AliAnalysisTaskSE.h"
12
13 #include <TAxis.h>
14 #include <TH3I.h>
15 #include <THnSparse.h>
16 #include <AliAnalysisFilter.h>
17 #include <iostream>
18 #include <AliAnaConvCorrBase.h>
19 #include <AliLog.h>
20 #include <AliAnalysisCuts.h>
21 #include "AliAODConversionPhoton.h"
22 class AliAnaConvIsolation;
23 class AliConversionCuts;
24
25 class TList;
26 class TH2I;
27 //class THnSparseF;
28
29 using namespace std;
30
31 class AliAnalysisTaskdPhi : public AliAnalysisTaskSE {
32
33 public:
34   AliAnalysisTaskdPhi(const char *name);
35   virtual ~AliAnalysisTaskdPhi();
36
37   virtual void   UserCreateOutputObjects();
38   virtual void   SetUpCorrObjects();
39   virtual void   UserExec(Option_t *option);
40   virtual void   Terminate(Option_t *);
41
42   TAxis& GetAxistPt()   { return fAxistPt;   }
43   TAxis& GetAxiscPt()   { return fAxiscPt;   }
44   TAxis& GetAxisEta()  { return fAxisEta;  }
45   TAxis& GetAxisPhi()  { return fAxisPhi;  }
46   TAxis& GetAxisZ()    { return fAxisZ;    }
47   TAxis& GetAxisCent() { return fAxisCent; }
48   TAxis& GetAxisPiMass() { return fAxisPiM; }
49
50
51   void SetV0Filter(AliConversionCuts * filter) { fV0Filter = filter; }
52   AliAnalysisCuts * GetTrackCuts() const { return fTrackCuts; }
53   void SetTrackCuts( AliAnalysisCuts * cuts) { if (fTrackCuts) delete fTrackCuts; fTrackCuts = cuts; }
54   Bool_t VerifyAODGamma(AliAODConversionPhoton * photon);
55   
56   
57 protected:
58   
59   TClonesArray * GetConversionGammas(Bool_t isAOD);
60
61 private:
62   
63   THnSparseF * CreateSparse(TString nameString, TString titleString, TList * axesList);
64   Int_t GetBin(TAxis &axis, Double_t value);
65   THnSparseF * GetMEHistogram(Int_t binz, Int_t binc, TObjArray * array);
66   AliAnaConvCorrBase * GetCorrObject(Int_t binz, Int_t binc, TObjArray * array);
67   void Process(TObjArray * gammas, TObjArray * tracks, Int_t vertexBin, Int_t centBin);
68   void FindDeltaAODBranchName(AliVEvent * event);
69   
70   TList * fHistograms; //histograms
71   TList * fHistoGamma; //gamma histo
72   TList * fHistoPion; //pion histo
73
74   AliConversionCuts * fV0Filter; //v0 filter
75   AliAnalysisCuts * fTrackCuts;
76
77   TObjArray * fGammas; //gammas
78   TObjArray * fPions; //poins
79
80   TObjArray * hMETracks; //mixed event tracks
81   TObjArray * hMEPhotons; //photons
82   TObjArray * hMEPions; //pions
83   TH2I * hMEvents; //event histrogam
84
85   TObjArray * fPhotonCorr; //photon
86   TObjArray * fPionCorr; //poin
87   AliAnaConvIsolation * fIsoAna; //comment
88
89
90   TString fDeltaAODBranchName; //comment
91
92   TAxis fAxistPt; //comment
93   TAxis fAxiscPt; //comment
94   TAxis fAxisEta; //comment
95   TAxis fAxisPhi; //comment
96   TAxis fAxisCent; //comment
97   TAxis fAxisZ; //comment
98   TAxis fAxisPiM; //comment
99   
100   AliAnalysisTaskdPhi(const AliAnalysisTaskdPhi&); // not implemented
101   AliAnalysisTaskdPhi& operator=(const AliAnalysisTaskdPhi&); // not implemented
102   
103   ClassDef(AliAnalysisTaskdPhi, 3); // example of analysis
104 };
105
106 inline THnSparseF * AliAnalysisTaskdPhi::GetMEHistogram(Int_t binz, Int_t binc, TObjArray * array) {
107   ///Get Mixed Event histogram
108   if(binz < 0 || binz > fAxisZ.GetNbins()) {
109         cout << "error out of z axis range: " << binz << endl; 
110         return NULL;
111   }  
112   if(binc < 0 || binc >= fAxisCent.GetNbins()) {
113         cout << "error out of centraliy axis range: " << binc << endl; 
114         return NULL;
115   }  
116   
117   TObjArray * arrayc = static_cast<TObjArray*>(array->At(binz));
118   THnSparseF * histogram = static_cast<THnSparseF*>(arrayc->At(binc));
119   return histogram;
120 }
121
122
123 inline AliAnaConvCorrBase * AliAnalysisTaskdPhi::GetCorrObject(Int_t binz, Int_t binc, TObjArray * array) {
124   ///Get correlation object
125   if(binc < 0 || binz < 0) {
126           AliError("We have a bad bin!!!");
127           return NULL;
128         }
129
130   if(array->GetEntriesFast() > binc) {
131
132         TObjArray * arrayc = static_cast<TObjArray*>(array->At(binc));
133         if(arrayc->GetEntriesFast() > binz) {
134           AliAnaConvCorrBase * corrmaker = static_cast<AliAnaConvCorrBase*>(arrayc->At(binz));
135           return corrmaker;
136         } else { cout << "balle"<<endl; }
137   } else { cout << "balle"<<endl; }
138
139   return NULL;
140 }
141
142 inline Int_t AliAnalysisTaskdPhi::GetBin(TAxis & axis, Double_t value) {
143   //Return bin - 1 if within range, else return -1
144   Int_t bin = axis.FindFixBin(value);
145   
146
147   bin = (bin > 0 && bin <= axis.GetNbins()) ? bin -1 : -1;
148   return bin;
149 }
150
151 #endif
152