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),
57 fAxesList.SetOwner(kFALSE);
58 fTrackAxisList.SetOwner(kFALSE);
59 fTrigAxisList.SetOwner(kFALSE);
66 //________________________________________________________________________________
67 AliAnaConvCorrBase::~AliAnaConvCorrBase() {
71 //________________________________________________________________________________
72 void AliAnaConvCorrBase::CreateHistograms() {
73 CreateBaseHistograms();
76 ///________________________________________________________________________________
77 void AliAnaConvCorrBase::SetUpDefaultBins() {
79 fAxisdEta.Set(40, -1.6, 1.6);
80 fAxisdEta.SetNameTitle("dEta", "delta eta");
82 fAxisdPhi.Set(32, -TMath::PiOver2(), 3*TMath::PiOver2());
83 fAxisdPhi.SetNameTitle("dPhi", "delta Phi");
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");
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");
93 fAxisIso.Set(3, -0.5, 2.5);
94 fAxisIso.SetNameTitle("iso", "isolation");
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);
102 fAxisMEEta.Set(320, -0.8, 0.8);
103 fAxisMEEta.SetNameTitle("eta", "eta");
105 fAxisMEPhi.Set(256, 0, TMath::TwoPi());
106 fAxisMEPhi.SetNameTitle("phi", "phi");
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);
114 fTrigAxisList.AddAt(&fAxisMEEta, 0);
115 fTrigAxisList.AddAt(&fAxisMEPhi, 1);
116 fTrigAxisList.AddAt(&fAxistPt, 2);
117 fTrigAxisList.AddAt(&fAxisIso, 3);
123 //________________________________________________________________________
124 void AliAnaConvCorrBase::CreateBaseHistograms() {
125 //Create histograms add, to outputlis
127 //cout << "Creating histograms for "<< GetName() << endl;
129 fHistograms = new TList();
130 fHistograms->SetOwner(kTRUE);
131 fHistograms->SetName(fName);
135 fCorrSparse = CreateSparse(GetName(), GetTitle(), &fAxesList);
136 fHistograms->Add(fCorrSparse);
138 fTrackSparse = CreateSparse(Form("%s_%s", GetName(), "METrack"), Form("%s %s", GetTitle(), "ME Tracks"), &fTrackAxisList);
139 fHistograms->Add(fTrackSparse);
141 fTrigSparse = CreateSparse(Form("%s_%s", GetName(), "METrig"), Form("%s %s", GetTitle(), "ME Triggers"), &fTrigAxisList);
142 fHistograms->Add(fTrigSparse);
146 ///________________________________________________________________________
147 THnSparseF * AliAnaConvCorrBase::CreateSparse(TString nameString, TString titleString, TList * axesList) {
149 const Int_t dim = axesList->GetSize();
151 //cout << nameString << " " << titleString << " " << " dimesion: " << dim << endl;
158 for(Int_t i = 0; i<dim; i++) {
159 TAxis * axis = dynamic_cast<TAxis*>(axesList->At(i));
160 if(axis) axes[i] = axis;
162 cout << "AliAnalysisTaskdPhi::CreateSparse: Error error, all the axes are not present in axis list" << endl;
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());
174 THnSparseF * sparse = new THnSparseF(Form("%s", nameString.Data()),
175 Form("%s", titleString.Data()),
176 dim, bins, min, max);
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() );
188 ///____________________________________________________________________________
189 // void AliAnaConvCorrBase::FillTriggerCounters(Float_t tPt, Bool_t isolated){
190 // //Fill histogram with trigger counters
192 // fHNTriggers[0]->Fill(tPt);
195 // fHNTriggers[isolated]->Fill(tPt);
200 // ///_____________________________________________________________________________
201 // void AliAnaConvCorrBase::FillHistograms(Float_t tPt, Float_t cPt, Float_t dPhi, Float_t dEta, Bool_t isolated) {
205 // //fHdPhi[0]->Fill(tPt, cPt, dPhi);
207 // //fHdPhi[isolated]->Fill(tPt, cPt, dPhi);
211 //_______________________________________________________________________________
213 void AliAnaConvCorrBase::PrintStatistics() {
219 // //_______________________________________________________________________________
220 // void AliAnaConvCorrBase::FillTriggerCounters(const AliAODConversionParticle * particle, Int_t leading) {
225 //________________________________________________________________
226 void AliAnaConvCorrBase::CorrelateWithTracks(AliAODConversionParticle * particle, TObjArray * tracks, Int_t const tIDs[4], Int_t isolated = 0) {
227 //Correlate particle with tracks
230 //FillTriggerCounters(particle, isolated);
232 Int_t nDim = fAxesList.GetSize();
233 Double_t dphivalues[nDim];
234 Double_t trackValues[nDim];
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;
242 fTrigSparse->Fill(trigValues);
245 dphivalues[5] = particle->M();
246 trackValues[5] = particle->M();
247 trigValues[4] = particle->M();
250 for(int ij = 0; ij < tracks->GetEntriesFast(); ij++) {
251 AliVTrack * track = static_cast<AliVTrack*>(tracks->UncheckedAt(ij));
252 Int_t tid = track->GetID();
254 if((tid > 0) && (tid == tIDs[0] || tid == tIDs[1] || tid == tIDs[2] || tid == tIDs[3]) ) {
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;
264 trackValues[0] = track->Eta();
265 trackValues[1] = track->Phi();
266 trackValues[2] = particle->Pt();
267 trackValues[3] = track->Pt();
268 trackValues[4] = isolated;
272 fCorrSparse->Fill(dphivalues);
273 fTrackSparse->Fill(trackValues);