]>
Commit | Line | Data |
---|---|---|
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 | ||
36 | using namespace std; | |
37 | ClassImp(AliAnaConvCorrBase) | |
38 | ||
39 | //________________________________________________________________________ | |
296f4e9c | 40 | AliAnaConvCorrBase::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 | //________________________________________________________________________________ | |
69 | AliAnaConvCorrBase::~AliAnaConvCorrBase() { | |
fc7e3b59 | 70 | ///destructor |
fc7e3b59 | 71 | } |
72 | ||
3bff49c3 | 73 | //________________________________________________________________________________ |
fc7e3b59 | 74 | void AliAnaConvCorrBase::CreateHistograms() { |
811b0806 | 75 | CreateBaseHistograms(); |
76 | } | |
77 | ||
296f4e9c | 78 | ///________________________________________________________________________________ |
79 | void 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 | //________________________________________________________________________ |
133 | void 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 | ///________________________________________________________________________ |
156 | THnSparseF * 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 | 199 | void 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 | 239 | void 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 |