1 /**************************************************************************
2 * This file is property of and copyright by the ALICE HLT Project *
3 * ALICE Experiment at CERN, All rights reserved. *
5 * Primary Author: Svein Lindal <slindal@fys.uio.no> *
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 **************************************************************************/
16 /// @file AliAnaConvCorrBase.cxx
17 /// @author Svein Lindal
18 /// @brief Base class for analysation of conversion particle - track correlations
21 #include "AliAnaConvCorrBase.h"
22 #include "AliAODTrack.h"
24 #include "TClonesArray.h"
28 #include "AliAODConversionParticle.h"
32 // Gamma - jet correlation analysis task
33 // Authors: Svein Lindal
37 ClassImp(AliAnaConvCorrBase)
39 //________________________________________________________________________
40 AliAnaConvCorrBase::AliAnaConvCorrBase(TString name, TString title = "title") : TNamed(name, title),
59 fAxesList.SetOwner(kFALSE);
60 fTrackAxisList.SetOwner(kFALSE);
61 fTrigAxisList.SetOwner(kFALSE);
68 //________________________________________________________________________________
69 AliAnaConvCorrBase::~AliAnaConvCorrBase() {
73 //________________________________________________________________________________
74 void AliAnaConvCorrBase::CreateHistograms() {
75 CreateBaseHistograms();
78 ///________________________________________________________________________________
79 void AliAnaConvCorrBase::SetUpDefaultBins() {
81 fAxisdEta.Set(32, -1.6, 1.6);
82 fAxisdEta.SetNameTitle("dEta", "delta eta");
84 fAxisdPhi.Set(32, -TMath::PiOver2(), 3*TMath::PiOver2());
85 fAxisdPhi.SetNameTitle("dPhi", "delta Phi");
87 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};
88 fAxistPt.Set(13, tptbins);
89 fAxistPt.SetNameTitle("tPt", "trigger Pt");
91 Double_t cptbins[19] = {0.7, 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};
92 fAxiscPt.Set(18, cptbins);
93 fAxiscPt.SetNameTitle("cPt", "track Pt");
95 fAxisCent.SetNameTitle("centrality", "centrality");
96 fAxisZ.SetNameTitle("vtxz", "vtxz");
98 fAxisIso.Set(1, -0.5, 2.5);
99 fAxisIso.SetNameTitle("iso", "isolation");
101 fAxesList.AddAt(&fAxisdEta, 0);
102 fAxesList.AddAt(&fAxisdPhi, 1);
103 fAxesList.AddAt(&fAxistPt, 2);
104 fAxesList.AddAt(&fAxiscPt, 3);
105 fAxesList.AddAt(&fAxisCent, 4);
106 fAxesList.AddAt(&fAxisZ, 5);
108 fAxisMEEta.Set(320, -0.8, 0.8);
109 fAxisMEEta.SetNameTitle("eta", "eta");
111 fTrackAxisList.AddAt(&fAxisMEEta, 0);
112 fTrackAxisList.AddAt(&fAxistPt, 1);
113 fTrackAxisList.AddAt(&fAxiscPt, 2);
114 fTrackAxisList.AddAt(&fAxisCent, 3);
115 fTrackAxisList.AddAt(&fAxisZ, 4);
117 fTrigAxisList.AddAt(&fAxisMEEta, 0);
118 fTrigAxisList.AddAt(&fAxistPt, 1);
119 fTrigAxisList.AddAt(&fAxisCent, 2);
120 fTrigAxisList.AddAt(&fAxisZ, 3);
126 //________________________________________________________________________
127 void AliAnaConvCorrBase::CreateBaseHistograms() {
128 //Create histograms add, to outputlis
130 //cout << "Creating histograms for "<< GetName() << endl;
132 fHistograms = new TList();
133 fHistograms->SetOwner(kTRUE);
134 fHistograms->SetName(fName);
138 fCorrSparse = CreateSparse(GetName(), GetTitle(), &fAxesList);
139 fHistograms->Add(fCorrSparse);
141 fTrackSparse = CreateSparse(Form("%s_%s", GetName(), "METrack"), Form("%s %s", GetTitle(), "ME Tracks"), &fTrackAxisList);
142 fHistograms->Add(fTrackSparse);
144 fTrigSparse = CreateSparse(Form("%s_%s", GetName(), "METrig"), Form("%s %s", GetTitle(), "ME Triggers"), &fTrigAxisList);
145 fHistograms->Add(fTrigSparse);
149 ///________________________________________________________________________
150 THnSparseF * AliAnaConvCorrBase::CreateSparse(TString nameString, TString titleString, TList * axesList) {
152 const Int_t dim = axesList->GetSize();
154 //cout << nameString << " " << titleString << " " << " dimesion: " << dim << endl;
161 for(Int_t i = 0; i<dim; i++) {
162 TAxis * axis = dynamic_cast<TAxis*>(axesList->At(i));
163 if(axis) axes[i] = axis;
165 cout << "AliAnalysisTaskdPhi::CreateSparse: Error error, all the axes are not present in axis list" << endl;
170 for(Int_t i = 0; i<dim; i++) {
171 //cout << axes[i]->GetTitle() << endl;
172 bins[i] = axes[i]->GetNbins();
173 min[i] = axes[i]->GetBinLowEdge(1);
174 max[i] = axes[i]->GetBinUpEdge(axes[i]->GetNbins());
177 THnSparseF * sparse = new THnSparseF(Form("%s", nameString.Data()),
178 Form("%s", titleString.Data()),
179 dim, bins, min, max);
181 for(Int_t i = 0; i<dim; i++) {
182 sparse->GetAxis(i)->SetNameTitle(axes[i]->GetName(), axes[i]->GetTitle() );
183 if(axes[i]->GetXbins()->GetSize() > 0) {
184 sparse->SetBinEdges(i, axes[i]->GetXbins()->GetArray() );
192 //_______________________________________________________________________________
193 void AliAnaConvCorrBase::FillCounters(TObjArray * particles, TObjArray * tracks, Float_t cent, Float_t vtxz) {
195 const Int_t nbins = fAxistPt.GetNbins();
197 for(Int_t ptbin = 0; ptbin < nbins; ptbin++){
198 tmap[ptbin] = kFALSE;
202 Double_t trackValues[fTrackAxisList.GetSize()];
203 trackValues[3] = cent;
204 trackValues[4] = vtxz;
206 for(Int_t ip = 0; ip < particles->GetEntriesFast(); ip++){
207 AliAODConversionParticle * particle = static_cast<AliAODConversionParticle*>(particles->At(ip));
209 Int_t tbin = fAxistPt.FindFixBin(particle->Pt());
210 if (tbin > 0 && tbin < nbins + 1) {
211 if(tmap[tbin - 1] == kTRUE) {
214 tmap[tbin -1 ] = kTRUE;
216 if( fTrackAxisList.GetSize() > 5){
217 trackValues[5] = particle->M();
220 for(int ij = 0; ij < tracks->GetEntriesFast(); ij++) {
221 AliVTrack * track = static_cast<AliVTrack*>(tracks->UncheckedAt(ij));
222 trackValues[0] = track->Eta();
223 trackValues[1] = particle->Pt();
224 trackValues[2] = track->Pt();
225 fTrackSparse->Fill(trackValues);
232 //________________________________________________________________
233 void AliAnaConvCorrBase::CorrelateWithTracks(AliAODConversionParticle * particle, TObjArray * tracks, Int_t const tIDs[4], Float_t cent, Float_t vtxz) {
234 //Correlate particle with tracks
237 const Int_t nDim = fAxesList.GetSize();
238 Double_t dphivalues[nDim];
239 dphivalues[4] = cent;
240 dphivalues[5] = vtxz;
243 Double_t trigValues[fTrigAxisList.GetSize()];
244 trigValues[0] = particle->Eta();
245 trigValues[1] = particle->Pt();
246 trigValues[2] = cent;
247 trigValues[3] = vtxz;
250 dphivalues[6] = particle->M();
251 trigValues[4] = particle->M();
254 fTrigSparse->Fill(trigValues);
256 for(int ij = 0; ij < tracks->GetEntriesFast(); ij++) {
257 AliVTrack * track = static_cast<AliVTrack*>(tracks->UncheckedAt(ij));
259 Int_t tid = track->GetID();
261 if((tid > 0) && (tid == tIDs[0] || tid == tIDs[1] || tid == tIDs[2] || tid == tIDs[3]) ) {
265 dphivalues[0] = particle->Eta() - track->Eta();
266 dphivalues[1] = GetDPhi(particle->Phi() - track->Phi());
267 dphivalues[2] = particle->Pt();
268 dphivalues[3] = track->Pt();
269 fCorrSparse->Fill(dphivalues);