]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGGA/GammaConv/AliAnaConvCorrBase.cxx
refactorize UserExec in smaller methods to make it more readable
[u/mrichter/AliRoot.git] / PWGGA / GammaConv / AliAnaConvCorrBase.cxx
CommitLineData
fc7e3b59 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"
92efd725 26#include "TH3.h"
fc7e3b59 27#include "TList.h"
fc7e3b59 28#include "AliAODConversionParticle.h"
29
fc7e3b59 30#include <iostream>
31
32// Gamma - jet correlation analysis task
33// Authors: Svein Lindal
34
35
36using namespace std;
37ClassImp(AliAnaConvCorrBase)
38
39//________________________________________________________________________
296f4e9c 40AliAnaConvCorrBase::AliAnaConvCorrBase(TString name, TString title = "title") : TNamed(name, title),
fc7e3b59 41 fHistograms(NULL),
3bff49c3 42 fAxesList(),
43 fTrigAxisList(),
44 fTrackAxisList(),
296f4e9c 45 fAxistPt(),
46 fAxiscPt(),
47 fAxisdEta(),
48 fAxisdPhi(),
3bff49c3 49 fAxisIso(),
6252ea9d 50 fAxisCent(),
51 fAxisZ(),
9e6bd607 52 fAxisTrigEta(),
53 fAxisAssEta(),
3bff49c3 54 fAxisMEPhi(),
55 fCorrSparse(NULL),
56 fTrigSparse(NULL),
57 fTrackSparse(NULL)
fc7e3b59 58{
59 //Constructor
d9f6f50a 60 fAxesList.SetOwner(kFALSE);
61 fTrackAxisList.SetOwner(kFALSE);
62 fTrigAxisList.SetOwner(kFALSE);
296f4e9c 63 SetUpDefaultBins();
d9f6f50a 64
fc7e3b59 65}
66
67
68//________________________________________________________________________________
69AliAnaConvCorrBase::~AliAnaConvCorrBase() {
fc7e3b59 70 ///destructor
fc7e3b59 71}
72
3bff49c3 73//________________________________________________________________________________
fc7e3b59 74void AliAnaConvCorrBase::CreateHistograms() {
811b0806 75 CreateBaseHistograms();
76}
77
296f4e9c 78///________________________________________________________________________________
79void AliAnaConvCorrBase::SetUpDefaultBins() {
80 //Set up default bins
6252ea9d 81 fAxisdEta.Set(32, -1.6, 1.6);
296f4e9c 82 fAxisdEta.SetNameTitle("dEta", "delta eta");
296f4e9c 83
9e6bd607 84 fAxisTrigEta.SetNameTitle("tEta", "Eta");
85 fAxisTrigEta.Set(320, -0.8, 0.8);
86
87 fAxisAssEta.SetNameTitle("aEta", "Eta");
88 fAxisAssEta.Set(360, -0.9, 0.9);
89
d64241db 90 fAxisdPhi.Set(32, -TMath::PiOver2(), 3*TMath::PiOver2());
296f4e9c 91 fAxisdPhi.SetNameTitle("dPhi", "delta Phi");
296f4e9c 92
c15c23b8 93 Double_t tptbins[15] = {2.0, 3.0, 3.5, 4.0, 5.0, 6.0, 8.0, 10.0, 12.5, 15, 20, 25, 30, 50, 100};
4267afec 94 fAxistPt.Set(13, tptbins);
296f4e9c 95 fAxistPt.SetNameTitle("tPt", "trigger Pt");
296f4e9c 96
9e6bd607 97 Double_t cptbins[19] = {0.5, 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};
c15c23b8 98 fAxiscPt.Set(18, cptbins);
296f4e9c 99 fAxiscPt.SetNameTitle("cPt", "track Pt");
3bff49c3 100
6252ea9d 101 fAxisCent.SetNameTitle("centrality", "centrality");
9e6bd607 102 fAxisCent.Set(1, -999, 999);
6252ea9d 103 fAxisZ.SetNameTitle("vtxz", "vtxz");
9e6bd607 104 Double_t zbins[6] = {-10, -5, -1.5, 1.5, 5, 10 };
105 fAxisZ.Set(5, zbins);
6252ea9d 106
c15c23b8 107 fAxisIso.Set(1, -0.5, 2.5);
3bff49c3 108 fAxisIso.SetNameTitle("iso", "isolation");
109
110 fAxesList.AddAt(&fAxisdEta, 0);
111 fAxesList.AddAt(&fAxisdPhi, 1);
112 fAxesList.AddAt(&fAxistPt, 2);
296f4e9c 113 fAxesList.AddAt(&fAxiscPt, 3);
6252ea9d 114 fAxesList.AddAt(&fAxisCent, 4);
115 fAxesList.AddAt(&fAxisZ, 5);
3bff49c3 116
9e6bd607 117 fTrackAxisList.AddAt(&fAxisAssEta, 0);
c15c23b8 118 fTrackAxisList.AddAt(&fAxistPt, 1);
119 fTrackAxisList.AddAt(&fAxiscPt, 2);
6252ea9d 120 fTrackAxisList.AddAt(&fAxisCent, 3);
121 fTrackAxisList.AddAt(&fAxisZ, 4);
3bff49c3 122
9e6bd607 123 fTrigAxisList.AddAt(&fAxisTrigEta, 0);
c15c23b8 124 fTrigAxisList.AddAt(&fAxistPt, 1);
6252ea9d 125 fTrigAxisList.AddAt(&fAxisCent, 2);
126 fTrigAxisList.AddAt(&fAxisZ, 3);
296f4e9c 127
92efd725 128
296f4e9c 129}
130
3bff49c3 131
811b0806 132//________________________________________________________________________
133void AliAnaConvCorrBase::CreateBaseHistograms() {
fc7e3b59 134 //Create histograms add, to outputlis
135
d64241db 136 //cout << "Creating histograms for "<< GetName() << endl;
811b0806 137
fc7e3b59 138 fHistograms = new TList();
3bff49c3 139 fHistograms->SetOwner(kTRUE);
fc7e3b59 140 fHistograms->SetName(fName);
141
fc7e3b59 142
92efd725 143
3bff49c3 144 fCorrSparse = CreateSparse(GetName(), GetTitle(), &fAxesList);
145 fHistograms->Add(fCorrSparse);
146
147 fTrackSparse = CreateSparse(Form("%s_%s", GetName(), "METrack"), Form("%s %s", GetTitle(), "ME Tracks"), &fTrackAxisList);
148 fHistograms->Add(fTrackSparse);
149
150 fTrigSparse = CreateSparse(Form("%s_%s", GetName(), "METrig"), Form("%s %s", GetTitle(), "ME Triggers"), &fTrigAxisList);
151 fHistograms->Add(fTrigSparse);
296f4e9c 152
fc7e3b59 153}
154
296f4e9c 155///________________________________________________________________________
156THnSparseF * AliAnaConvCorrBase::CreateSparse(TString nameString, TString titleString, TList * axesList) {
157 //Create sparse
158 const Int_t dim = axesList->GetSize();
159
d64241db 160 //cout << nameString << " " << titleString << " " << " dimesion: " << dim << endl;
296f4e9c 161
162 TAxis * axes[dim];
163 Int_t bins[dim];
164 Double_t min[dim];
165 Double_t max[dim];
166
167 for(Int_t i = 0; i<dim; i++) {
168 TAxis * axis = dynamic_cast<TAxis*>(axesList->At(i));
169 if(axis) axes[i] = axis;
170 else {
171 cout << "AliAnalysisTaskdPhi::CreateSparse: Error error, all the axes are not present in axis list" << endl;
172 return NULL;
173 }
174 }
fc7e3b59 175
296f4e9c 176 for(Int_t i = 0; i<dim; i++) {
d64241db 177 //cout << axes[i]->GetTitle() << endl;
178 bins[i] = axes[i]->GetNbins();
296f4e9c 179 min[i] = axes[i]->GetBinLowEdge(1);
180 max[i] = axes[i]->GetBinUpEdge(axes[i]->GetNbins());
181 }
fc7e3b59 182
296f4e9c 183 THnSparseF * sparse = new THnSparseF(Form("%s", nameString.Data()),
184 Form("%s", titleString.Data()),
185 dim, bins, min, max);
811b0806 186
296f4e9c 187 for(Int_t i = 0; i<dim; i++) {
188 sparse->GetAxis(i)->SetNameTitle(axes[i]->GetName(), axes[i]->GetTitle() );
189 if(axes[i]->GetXbins()->GetSize() > 0) {
190 sparse->SetBinEdges(i, axes[i]->GetXbins()->GetArray() );
191 }
811b0806 192 }
296f4e9c 193 return sparse;
fc7e3b59 194}
195
fc7e3b59 196
c15c23b8 197
198//_______________________________________________________________________________
6252ea9d 199void AliAnaConvCorrBase::FillCounters(TObjArray * particles, TObjArray * tracks, Float_t cent, Float_t vtxz) {
c15c23b8 200 //Fill ME Counters
201 const Int_t nbins = fAxistPt.GetNbins();
202 Bool_t tmap[nbins];
203 for(Int_t ptbin = 0; ptbin < nbins; ptbin++){
204 tmap[ptbin] = kFALSE;
205 }
6252ea9d 206
207
208 Double_t trackValues[fTrackAxisList.GetSize()];
209 trackValues[3] = cent;
210 trackValues[4] = vtxz;
211
c15c23b8 212 for(Int_t ip = 0; ip < particles->GetEntriesFast(); ip++){
213 AliAODConversionParticle * particle = static_cast<AliAODConversionParticle*>(particles->At(ip));
6252ea9d 214
c15c23b8 215 Int_t tbin = fAxistPt.FindFixBin(particle->Pt());
216 if (tbin > 0 && tbin < nbins + 1) {
217 if(tmap[tbin - 1] == kTRUE) {
218 continue;
219 } else {
220 tmap[tbin -1 ] = kTRUE;
6252ea9d 221
222 if( fTrackAxisList.GetSize() > 5){
223 trackValues[5] = particle->M();
c15c23b8 224 }
6252ea9d 225
c15c23b8 226 for(int ij = 0; ij < tracks->GetEntriesFast(); ij++) {
227 AliVTrack * track = static_cast<AliVTrack*>(tracks->UncheckedAt(ij));
228 trackValues[0] = track->Eta();
229 trackValues[1] = particle->Pt();
230 trackValues[2] = track->Pt();
231 fTrackSparse->Fill(trackValues);
232 }
233 }
234 }
235 }
236}
237
296f4e9c 238//________________________________________________________________
6252ea9d 239void AliAnaConvCorrBase::CorrelateWithTracks(AliAODConversionParticle * particle, TObjArray * tracks, Int_t const tIDs[4], Float_t cent, Float_t vtxz) {
296f4e9c 240 //Correlate particle with tracks
241
d64241db 242
c15c23b8 243 const Int_t nDim = fAxesList.GetSize();
296f4e9c 244 Double_t dphivalues[nDim];
6252ea9d 245 dphivalues[4] = cent;
246 dphivalues[5] = vtxz;
247
248
c15c23b8 249 Double_t trigValues[fTrigAxisList.GetSize()];
2dd6ec26 250 trigValues[0] = particle->Eta();
c15c23b8 251 trigValues[1] = particle->Pt();
6252ea9d 252 trigValues[2] = cent;
253 trigValues[3] = vtxz;
92efd725 254
6252ea9d 255 if(nDim > 6) {
256 dphivalues[6] = particle->M();
257 trigValues[4] = particle->M();
d64241db 258 }
259
c15c23b8 260 fTrigSparse->Fill(trigValues);
3bff49c3 261
c15c23b8 262 for(int ij = 0; ij < tracks->GetEntriesFast(); ij++) {
263 AliVTrack * track = static_cast<AliVTrack*>(tracks->UncheckedAt(ij));
264
265 Int_t tid = track->GetID();
266
267 if((tid > 0) && (tid == tIDs[0] || tid == tIDs[1] || tid == tIDs[2] || tid == tIDs[3]) ) {
268 continue;
269 }
3bff49c3 270
c15c23b8 271 dphivalues[0] = particle->Eta() - track->Eta();
272 dphivalues[1] = GetDPhi(particle->Phi() - track->Phi());
273 dphivalues[2] = particle->Pt();
274 dphivalues[3] = track->Pt();
275 fCorrSparse->Fill(dphivalues);
296f4e9c 276 }
277}
278