0c7a0c14506d4b1b680e9d8e2d61eb62b4d80fa1
[u/mrichter/AliRoot.git] / PWGGA / GammaConv / AliAnaConvCorrBase.cxx
1 /**************************************************************************
2  * This file is property of and copyright by the ALICE HLT Project        *
3  * ALICE Experiment at CERN, All rights reserved.                         *
4  *                                                                        *
5  * Primary Author: Svein Lindal <slindal@fys.uio.no>                      *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /// @file   AliAnaConvCorrBase.cxx
17 /// @author Svein Lindal
18 /// @brief  Base class for analysation of conversion particle - track correlations
19
20
21 #include "AliAnaConvCorrBase.h"
22 #include "AliAODTrack.h"
23
24 #include "TClonesArray.h"
25 #include "TH1F.h"
26 #include "TH3.h"
27 #include "TList.h"
28 #include "AliAODConversionParticle.h"
29
30 #include <iostream>
31
32 // Gamma - jet correlation analysis task
33 // Authors: Svein Lindal
34
35
36 using namespace std;
37 ClassImp(AliAnaConvCorrBase)
38
39 //________________________________________________________________________
40 AliAnaConvCorrBase::AliAnaConvCorrBase(TString name, TString title = "title") : TNamed(name, title),
41   fHistograms(NULL),
42   fAxesList(), 
43   fTrigAxisList(), 
44   fTrackAxisList(),
45   fAxistPt(),
46   fAxiscPt(), 
47   fAxisdEta(), 
48   fAxisdPhi(),
49   fAxisIso(), 
50   fAxisMEEta(), 
51   fAxisMEPhi(),
52   fCorrSparse(NULL),
53   fTrigSparse(NULL),
54   fTrackSparse(NULL)
55 {
56   //Constructor
57   fAxesList.SetOwner(kFALSE);
58   fTrackAxisList.SetOwner(kFALSE);
59   fTrigAxisList.SetOwner(kFALSE);
60
61   SetUpDefaultBins();
62  
63 }
64
65
66 //________________________________________________________________________________
67 AliAnaConvCorrBase::~AliAnaConvCorrBase() {
68   ///destructor
69 }
70
71 //________________________________________________________________________________
72 void AliAnaConvCorrBase::CreateHistograms() {
73   CreateBaseHistograms();
74 }
75
76 ///________________________________________________________________________________
77 void AliAnaConvCorrBase::SetUpDefaultBins() {
78   //Set up default bins
79   fAxisdEta.Set(40, -1.6, 1.6);
80   fAxisdEta.SetNameTitle("dEta", "delta eta");
81
82   fAxisdPhi.Set(32, -TMath::PiOver2(), 3*TMath::PiOver2());
83   fAxisdPhi.SetNameTitle("dPhi", "delta Phi");
84
85   Double_t tptbins[14] = {3.0, 3.5, 4.0, 5.0, 6.0, 8.0, 10.0, 12.5, 15, 20, 25, 30, 50, 100};
86   fAxistPt.Set(13, tptbins);
87   fAxistPt.SetNameTitle("tPt", "trigger Pt");
88
89   Double_t cptbins[18] = {1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 5.0, 6.0, 8.0, 10.0, 12.5, 15, 20, 25, 30, 50, 100};
90   fAxiscPt.Set(17, cptbins);
91   fAxiscPt.SetNameTitle("cPt", "track Pt");
92
93   fAxisIso.Set(3, -0.5, 2.5);
94   fAxisIso.SetNameTitle("iso", "isolation");
95
96   fAxesList.AddAt(&fAxisdEta, 0);
97   fAxesList.AddAt(&fAxisdPhi, 1);
98   fAxesList.AddAt(&fAxistPt, 2);
99   fAxesList.AddAt(&fAxiscPt, 3);
100   fAxesList.AddAt(&fAxisIso, 4);
101
102   fAxisMEEta.Set(320, -0.8, 0.8);
103   fAxisMEEta.SetNameTitle("eta", "eta");
104   
105   fAxisMEPhi.Set(256, 0, TMath::TwoPi());
106   fAxisMEPhi.SetNameTitle("phi", "phi");
107
108   fTrackAxisList.AddAt(&fAxisMEEta, 0);
109   fTrackAxisList.AddAt(&fAxisMEPhi, 1);
110   fTrackAxisList.AddAt(&fAxistPt, 2);
111   fTrackAxisList.AddAt(&fAxiscPt, 3);
112   fTrackAxisList.AddAt(&fAxisIso, 4);
113
114   fTrigAxisList.AddAt(&fAxisMEEta, 0);
115   fTrigAxisList.AddAt(&fAxisMEPhi, 1);
116   fTrigAxisList.AddAt(&fAxistPt, 2);
117   fTrigAxisList.AddAt(&fAxisIso, 3);
118
119
120 }
121
122
123 //________________________________________________________________________
124 void AliAnaConvCorrBase::CreateBaseHistograms() {
125   //Create histograms add, to outputlis
126
127   //cout << "Creating histograms for "<< GetName() << endl;
128
129   fHistograms = new TList();
130   fHistograms->SetOwner(kTRUE);
131   fHistograms->SetName(fName);
132
133
134
135   fCorrSparse = CreateSparse(GetName(), GetTitle(), &fAxesList);
136   fHistograms->Add(fCorrSparse);
137
138   fTrackSparse = CreateSparse(Form("%s_%s", GetName(), "METrack"), Form("%s %s", GetTitle(), "ME Tracks"), &fTrackAxisList);
139   fHistograms->Add(fTrackSparse);
140
141   fTrigSparse = CreateSparse(Form("%s_%s", GetName(), "METrig"), Form("%s %s", GetTitle(), "ME Triggers"), &fTrigAxisList);
142   fHistograms->Add(fTrigSparse);
143
144 }
145
146 ///________________________________________________________________________
147 THnSparseF * AliAnaConvCorrBase::CreateSparse(TString nameString, TString titleString, TList * axesList) {
148   //Create sparse
149   const Int_t dim = axesList->GetSize();
150   
151   //cout << nameString << " " << titleString << " " <<   "    dimesion: " << dim << endl;
152
153   TAxis * axes[dim];
154   Int_t   bins[dim];
155   Double_t min[dim];
156   Double_t max[dim];
157
158   for(Int_t i = 0; i<dim; i++) {
159         TAxis * axis = dynamic_cast<TAxis*>(axesList->At(i));
160         if(axis) axes[i] = axis;
161         else {
162           cout << "AliAnalysisTaskdPhi::CreateSparse: Error error, all the axes are not present in axis list" << endl;
163           return NULL;
164         }
165   }
166
167   for(Int_t i = 0; i<dim; i++) {
168         //cout << axes[i]->GetTitle() << endl;
169         bins[i] = axes[i]->GetNbins(); 
170         min[i] = axes[i]->GetBinLowEdge(1);
171         max[i] = axes[i]->GetBinUpEdge(axes[i]->GetNbins());
172   }
173
174   THnSparseF * sparse = new THnSparseF(Form("%s", nameString.Data()), 
175                                                                            Form("%s", titleString.Data()), 
176                                                                            dim, bins, min, max);
177   
178   for(Int_t i = 0; i<dim; i++) {
179         sparse->GetAxis(i)->SetNameTitle(axes[i]->GetName(), axes[i]->GetTitle() );
180         if(axes[i]->GetXbins()->GetSize() > 0) {
181           sparse->SetBinEdges(i, axes[i]->GetXbins()->GetArray() );
182         }
183   }
184   return sparse;
185 }
186
187
188 ///____________________________________________________________________________
189 // void AliAnaConvCorrBase::FillTriggerCounters(Float_t tPt, Bool_t isolated){ 
190 //   //Fill histogram with trigger counters
191
192 //   fHNTriggers[0]->Fill(tPt);
193   
194 //   if(isolated) {
195 //     fHNTriggers[isolated]->Fill(tPt);
196     
197 //   }
198 // }
199
200 // ///_____________________________________________________________________________
201 // void AliAnaConvCorrBase::FillHistograms(Float_t tPt, Float_t cPt, Float_t dPhi, Float_t dEta, Bool_t isolated) {
202 //   //Fill histograms
203
204 //   if(dEta) { ;}
205 //   //fHdPhi[0]->Fill(tPt, cPt, dPhi);
206 //   if(isolated) {
207 //     //fHdPhi[isolated]->Fill(tPt, cPt, dPhi);
208 //   }
209 // }
210
211 //_______________________________________________________________________________
212
213 void AliAnaConvCorrBase::PrintStatistics()  { 
214   
215   // }
216 }
217
218
219 //_______________________________________________________________________________
220 void AliAnaConvCorrBase::FillTriggerCounters(const AliAODConversionParticle * particle, Int_t leading) {
221
222 }
223
224
225 //________________________________________________________________
226 void AliAnaConvCorrBase::CorrelateWithTracks(AliAODConversionParticle * particle, TObjArray * tracks, Int_t const tIDs[4], Int_t isolated = 0) {
227   //Correlate particle with tracks
228
229
230   FillTriggerCounters(particle, isolated);
231
232   Int_t nDim = fAxesList.GetSize();
233   Double_t dphivalues[nDim];
234   Double_t trackValues[nDim];
235
236   Double_t trigValues[nDim - 1];
237   trigValues[0] = particle->Eta();
238   trigValues[1] = particle->Phi();
239   trigValues[2] = particle->Pt();
240   trigValues[3] = isolated;
241   
242   fTrigSparse->Fill(trigValues);
243
244   if(nDim > 4) {
245         dphivalues[5] = particle->M();
246         trackValues[5] = particle->M();
247         trigValues[4] = particle->M();
248   }
249
250   for(int ij = 0; ij < tracks->GetEntriesFast(); ij++) {
251         AliVTrack * track = static_cast<AliVTrack*>(tracks->UncheckedAt(ij));
252         Int_t tid = track->GetID();
253
254         if((tid > 0) && (tid == tIDs[0] || tid == tIDs[1] || tid == tIDs[2] || tid == tIDs[3]) ) {
255           continue;
256         }
257         
258         dphivalues[0] = particle->Eta() - track->Eta();
259         dphivalues[1] = GetDPhi(particle->Phi() - track->Phi());
260         dphivalues[2] = particle->Pt();
261         dphivalues[3] = track->Pt();
262         dphivalues[4] = isolated;
263
264         trackValues[0] = track->Eta();
265         trackValues[1] = track->Phi();
266         trackValues[2] = particle->Pt();
267         trackValues[3] = track->Pt();
268         trackValues[4] = isolated;
269
270
271         
272         fCorrSparse->Fill(dphivalues);
273         fTrackSparse->Fill(trackValues);
274   }
275 }
276