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),
53 fAxesList.SetOwner(kTRUE);
59 //________________________________________________________________________________
60 AliAnaConvCorrBase::~AliAnaConvCorrBase() {
65 void AliAnaConvCorrBase::CreateHistograms() {
66 CreateBaseHistograms();
69 ///________________________________________________________________________________
70 void AliAnaConvCorrBase::SetUpDefaultBins() {
72 Double_t ptbins[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};
73 fAxisdEta.Set(160, -1.6, 1.6);
74 fAxisdEta.SetNameTitle("dEta", "delta eta");
75 fAxesList.AddAt(&fAxisdEta, 0);
77 fAxisdPhi.Set(64, -TMath::PiOver2(), 3*TMath::PiOver2());
78 fAxisdPhi.SetNameTitle("dPhi", "delta Phi");
79 fAxesList.AddAt(&fAxisdPhi, 1);
81 fAxistPt.Set(18, ptbins);
82 fAxistPt.SetNameTitle("tPt", "trigger Pt");
83 fAxesList.AddAt(&fAxistPt, 2);
85 fAxiscPt.Set(18, ptbins);
86 fAxiscPt.SetNameTitle("cPt", "track Pt");
87 fAxesList.AddAt(&fAxiscPt, 3);
89 for(int iIso = 0; iIso < 2; iIso++) {
90 fHNTriggers[iIso] = NULL;
94 //________________________________________________________________________
95 void AliAnaConvCorrBase::CreateBaseHistograms() {
96 //Create histograms add, to outputlis
98 cout << "Creating histograms for "<< GetName() << endl;
100 fHistograms = new TList();
101 fHistograms->SetOwner(kFALSE);
102 fHistograms->SetName(fName);
104 for(int iIso = 0; iIso < 2; iIso++) {
106 fHNTriggers[iIso] = new TH1F(Form("%s_%s_fNTriggers", fName.Data(), (iIso==0)?"nonIso":"isolated"),
107 Form("%s_%s_fNTriggers", fName.Data(), (iIso==0)?"nonIso":"isolated"),
108 fAxistPt.GetNbins(), fAxistPt.GetXbins()->GetArray());
109 fHNTriggers[iIso]->Sumw2();
110 fHistograms->Add(fHNTriggers[iIso]);
114 fSparse = CreateSparse(GetName(), GetTitle(), &fAxesList);
115 fHistograms->Add(fSparse);
119 ///________________________________________________________________________
120 THnSparseF * AliAnaConvCorrBase::CreateSparse(TString nameString, TString titleString, TList * axesList) {
122 const Int_t dim = axesList->GetSize();
124 cout << "dimesion: " << dim << endl;
131 for(Int_t i = 0; i<dim; i++) {
132 TAxis * axis = dynamic_cast<TAxis*>(axesList->At(i));
133 if(axis) axes[i] = axis;
135 cout << "AliAnalysisTaskdPhi::CreateSparse: Error error, all the axes are not present in axis list" << endl;
140 for(Int_t i = 0; i<dim; i++) {
141 cout << axes[i]->GetTitle() << endl;
142 bins[i] = axes[i]->GetNbins();
143 min[i] = axes[i]->GetBinLowEdge(1);
144 max[i] = axes[i]->GetBinUpEdge(axes[i]->GetNbins());
147 THnSparseF * sparse = new THnSparseF(Form("%s", nameString.Data()),
148 Form("%s", titleString.Data()),
149 dim, bins, min, max);
151 for(Int_t i = 0; i<dim; i++) {
152 sparse->GetAxis(i)->SetNameTitle(axes[i]->GetName(), axes[i]->GetTitle() );
153 if(axes[i]->GetXbins()->GetSize() > 0) {
154 sparse->SetBinEdges(i, axes[i]->GetXbins()->GetArray() );
161 ///____________________________________________________________________________
162 // void AliAnaConvCorrBase::FillTriggerCounters(Float_t tPt, Bool_t isolated){
163 // //Fill histogram with trigger counters
165 // fHNTriggers[0]->Fill(tPt);
168 // fHNTriggers[isolated]->Fill(tPt);
173 // ///_____________________________________________________________________________
174 // void AliAnaConvCorrBase::FillHistograms(Float_t tPt, Float_t cPt, Float_t dPhi, Float_t dEta, Bool_t isolated) {
178 // //fHdPhi[0]->Fill(tPt, cPt, dPhi);
180 // //fHdPhi[isolated]->Fill(tPt, cPt, dPhi);
184 //_______________________________________________________________________________
186 void AliAnaConvCorrBase::PrintStatistics() {
187 //Print some statistics between each file
188 for(Int_t i = 1; i <= fHNTriggers[0]->GetNbinsX(); i++) {
189 Int_t nTrig = (Int_t) fHNTriggers[0]->GetBinContent(i+1);
190 cout << "triggers: " << nTrig << endl;
196 //_______________________________________________________________________________
197 void AliAnaConvCorrBase::FillTriggerCounters(const AliAODConversionParticle * particle, Bool_t leading) {
198 fHNTriggers[leading]->Fill(particle->Pt());
202 //________________________________________________________________
203 void AliAnaConvCorrBase::CorrelateWithTracks(AliAODConversionParticle * particle, TObjArray * tracks, Int_t const tIDs[4], Bool_t isolated /*= kFALSE*/) {
204 //Correlate particle with tracks
206 FillTriggerCounters(particle, isolated);
208 Int_t nDim = fAxesList.GetSize();
209 Double_t dphivalues[nDim];
211 for(int ij = 0; ij < tracks->GetEntriesFast(); ij++) {
212 AliVTrack * track = static_cast<AliVTrack*>(tracks->UncheckedAt(ij));
213 Int_t tid = track->GetID();
215 if((tid > 0) && (tid == tIDs[0] || tid == tIDs[1] || tid == tIDs[2] || tid == tIDs[3]) ) {
219 dphivalues[1] = GetDPhi(particle->Phi() - track->Phi());
220 dphivalues[0] = particle->Eta() - track->Eta();
221 dphivalues[2] = particle->Pt();
222 dphivalues[3] = track->Pt();
223 if(nDim > 4) dphivalues[4] = particle->M();
224 fSparse->Fill(dphivalues);