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"
30 #include "AliAODConversionParticle.h"
35 // Gamma - jet correlation analysis task
36 // Authors: Svein Lindal
40 ClassImp(AliAnaConvCorrBase)
42 //________________________________________________________________________
43 AliAnaConvCorrBase::AliAnaConvCorrBase(TString name) : TObject(),
62 //________________________________________________________________________________
63 AliAnaConvCorrBase::~AliAnaConvCorrBase() {
72 //________________________________________________________________________
73 void AliAnaConvCorrBase::CreateHistograms() {
74 //Create histograms add, to outputlis
76 fHistograms = new TList();
77 fHistograms->SetOwner(kFALSE);
78 fHistograms->SetName(fName);
82 for(int iIso = 0; iIso < 2; iIso++) {
83 fHEtaPhiPt[iIso] = new TH2F(
84 Form("%s_deta_dphi_corr_%s", fName.Data(), (iIso==0)?"nonIso":"isolated"),
85 Form("%s_deta_dphi_corr_%s", fName.Data(), (iIso==0)?"nonIso":"isolated"),
86 200, -2., 2., fNPhiBins, -TMath::PiOver2(), 3*TMath::PiOver2());
87 fHistograms->Add(fHEtaPhiPt[iIso]);
90 for(int iIso = 0; iIso < 2; iIso++) {
91 fHdEta[iIso] = new TH1F(Form("%s_deta_corr_%s", fName.Data(), (iIso==0)?"nonIso":"isolated"),
92 Form("%s_deta_corr_%s", fName.Data(), (iIso==0)?"nonIso":"isolated"),
94 fHistograms->Add(fHdEta[iIso]);
97 for(int iIso = 0; iIso < 2; iIso++) {
98 fHdPhi[iIso] = new TH1F(Form("%s_dphi_corr_%s", fName.Data(), (iIso==0)?"nonIso":"isolated"),
99 Form("%s_dphi_corr_%s", fName.Data(), (iIso==0)?"nonIso":"isolated"),
100 fNPhiBins, -TMath::PiOver2(), 3*TMath::PiOver2());
101 fHistograms->Add(fHdPhi[iIso]);
104 for(int iIso = 0; iIso < 2; iIso++) {
105 fHNTriggers[iIso] = new TH1I(Form("%s_%s_fNTriggers", fName.Data(), (iIso==0)?"nonIso":"isolated"),
106 Form("%s_%s_fNTriggers", fName.Data(), (iIso==0)?"nonIso":"isolated"),
107 fNTBins, 0, fNTBins );
108 fHistograms->Add(fHNTriggers[iIso]);
112 for(int iIso = 0; iIso < 2; iIso++) {
113 for(Int_t tBin = 0; tBin < fNTBins; tBin++) {
114 for(Int_t cBin = 0; cBin < fNCBins; cBin++) {
115 fHdPhiBins[iIso][tBin][cBin] = new TH1F(Form("%s_%s_phi_corr_tBin_%d_cBin_%d", fName.Data(), (iIso==0)?"nonIso":"isolated", tBin, cBin),
116 Form("%s particles dPhi %f<tPt< %f %f<cPt<%f", (iIso==0)?"not isolated":"isolated", GetLowerBinLimit(tBin, fTBins), GetUpperBinLimit(tBin, fTBins),
117 GetLowerBinLimit(cBin, fCBins), GetUpperBinLimit(cBin, fCBins)),
118 fNPhiBins, -TMath::PiOver2(), 3*TMath::PiOver2());
119 fHistograms->Add(fHdPhiBins[iIso][tBin][cBin]);
126 ///____________________________________________________________________________
127 void AliAnaConvCorrBase::FillTriggerCounters(Float_t tPt, Bool_t isolated){
128 //Fill histogram with trigger counters
129 fHNTriggers[0]->Fill(GetTriggerBin(tPt));
130 if(isolated) fHNTriggers[isolated]->Fill(GetTriggerBin(tPt));
135 ///_____________________________________________________________________________
136 void AliAnaConvCorrBase::FillHistograms(Float_t tPt, Float_t cPt, Float_t dPhi, Float_t dEta, Bool_t isolated) {
138 Float_t ptFrac = cPt/tPt;
140 Int_t triggerBin = GetTriggerBin(tPt);
141 Int_t corrBin = GetCorrBin(cPt);
143 if(triggerBin < 0 ||corrBin < 0) return;
145 fHEtaPhiPt[0]->Fill(dEta, dPhi, cPt);
146 fHdEta[0]->Fill(dEta, cPt);
147 fHdPhi[0]->Fill(dPhi, cPt);
148 fHdPhiBins[0][triggerBin][corrBin]->Fill(dPhi);
152 fHEtaPhiPt[isolated]->Fill(dEta, dPhi, cPt);
153 fHdEta[isolated]->Fill(dEta, ptFrac);
154 fHdPhi[isolated]->Fill(dPhi, ptFrac);
155 fHdPhiBins[isolated][triggerBin][corrBin]->Fill(dPhi);
160 ///____________________________________________________________________________
161 Int_t AliAnaConvCorrBase::GetTriggerBin(Float_t pt) const {
163 for(Int_t i = 0; i < fNTBins; i++) {
164 if(pt > fTBins[i]) return i;
170 ///____________________________________________________________________________
171 Int_t AliAnaConvCorrBase::GetCorrBin(Float_t pt) const {
172 //Get correlation particle bin
173 for(Int_t i = 0; i < fNCBins; i++) {
174 if(pt > fCBins[i]) return i;
182 ///______________________________________________________________________________
183 Float_t AliAnaConvCorrBase::GetLowerBinLimit(const Int_t bin, const Float_t * const bins) const {
184 //Get lower bin limit for bin
188 ///______________________________________________________________________________
189 Float_t AliAnaConvCorrBase::GetUpperBinLimit(const Int_t bin, const Float_t * const bins) const {
190 //Get upper bin limit for bin
192 Float_t limit = -999;
196 limit = bins[bin -1];
203 //_______________________________________________________________________________
205 void AliAnaConvCorrBase::PrintStatistics() {
206 //Print some statistics between each file
208 for(int i = 0; i < fNTBins; i++) {
209 Int_t nTrig = fHNTriggers[0]->GetBinContent(i+1);
210 cout << "triggers: " << nTrig << endl;
211 for(int j = 0; j < fNCBins; j++) {
212 cout << fHdPhiBins[0][i][j]->GetEntries() << "/" << ((nTrig>0)? fHdPhiBins[0][i][j]->GetEntries()/nTrig : 0) << "; ";