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 AliAnalysisTaskGammaJet.cxx
17 /// @author Svein Lindal
18 /// @brief Class used to run isolation studies of conversion gamma/pions
21 #include "AliAnaConvIsolation.h"
22 #include "AliAODTrack.h"
25 #include "TClonesArray.h"
28 #include "AliAODConversionPhoton.h"
33 // Gamma - jet correlation analysis task
34 // Author: Svein Lindal
38 ClassImp(AliAnaConvIsolation)
40 //________________________________________________________________________
41 AliAnaConvIsolation::AliAnaConvIsolation () : TObject(),
43 fCurveFunction("0.1*x"),
54 for(Int_t i = 0; i < 2; i++){
55 fhMaxPtInCone[i] = NULL;
56 fhSumPtInCone[i] = NULL;
57 fhSumPtVsMaxPt[i] = NULL;
58 fhPtCandidates[i] = NULL;
59 fhTrackMult[i] = NULL;
65 //________________________________________________________________________
66 AliAnaConvIsolation::AliAnaConvIsolation(Float_t coneSize, Float_t maxPtThreshold, Float_t sumPtThreshold, Float_t maxPtFraction, Float_t sumPtFraction) :
69 fCurveFunction("0.1*x"),
72 fMaxPtThreshold(maxPtThreshold),
73 fSumPtThreshold(sumPtThreshold),
74 fMaxPtFraction(maxPtFraction),
75 fSumPtFraction(sumPtFraction),
80 for(Int_t i = 0; i < 2; i++){
81 fhMaxPtInCone[i] = NULL;
82 fhSumPtInCone[i] = NULL;
83 fhSumPtVsMaxPt[i] = NULL;
84 fhPtCandidates[i] = NULL;
85 fhTrackMult[i] = NULL;
90 //________________________________________________________________________________
91 AliAnaConvIsolation::~AliAnaConvIsolation() {
97 //________________________________________________________________________
98 void AliAnaConvIsolation::CreateHistograms()
101 if(!fHistograms) fHistograms = new TList();
102 fHistograms->SetName(Form("Isolation_histo_cone_%f_maxPt_%f_sumPt_%f", fConeSize, fSumPtThreshold, fMaxPtThreshold));
104 fIsoCurve = new TF1("Isolation_curve", fCurveFunction.Data(), 0, 100);
105 fHistograms->Add(fIsoCurve);
107 cout << "Creatin isolation histograms conesize :" << fConeSize << endl;
109 //Create histograms add, to outputlis
110 for(Int_t i = 0; i < 2; i++){
111 fhMaxPtInCone[i] = new TH2F(Form("fhMaxPtInCone_%s_%f", (i==0)? "nonIso" : "isolated", fConeSize),
112 Form("Max pt nonIso particle in cone %f vs candidate pt", fConeSize),
113 200, 0, fHistogramMaxPt, 200, 0, fHistogramMaxPt);
114 fHistograms->Add(fhMaxPtInCone[i]);
116 fhSumPtInCone[i] = new TH2F(Form("fhSumPtInCone_%s_%f", (i==0)? "nonIso" : "isolated", fConeSize),
117 Form("Sum pt in cone %f vs candidate pt %s", fConeSize, (i==0)? "nonIsoay" : "isolated"),
118 200, 0, fHistogramMaxPt, 200, 0, fHistogramMaxPt);
119 fHistograms->Add(fhSumPtInCone[i]);
121 fhSumPtVsMaxPt[i] = new TH2F(Form("fhSumPtVsMaxPt_%s_%f", (i==0)? "nonIso" : "isolated", fConeSize),
122 Form("fhSumPtVsMaxPt_%s_%f", (i==0)? "nonIso" : "isolated", fConeSize),
123 200, 0, fHistogramMaxPt, 200, 0, fHistogramMaxPt);
124 fHistograms->Add(fhSumPtVsMaxPt[i]);
127 for(Int_t iIso = 0; iIso < 2; iIso++){
128 fhPtCandidates[iIso] = new TH1F(Form("fhPtCandidates_%s_%f", (iIso==0)? "nonIso" : "isolated", fConeSize),
129 Form("Pt of %s candidates, cone size %f", (iIso==0)? "nonIsolated" : "isolated", fConeSize),
130 200, 0 , fHistogramMaxPt);
131 fhPtCandidates[iIso]->GetXaxis()->SetTitle("P_{T} (GeV/c)");
132 fhPtCandidates[iIso]->GetYaxis()->SetTitle("dN/dP_{T} (c/GeV)");
133 fhPtCandidates[iIso]->SetMarkerStyle(kFullCircle);
134 fHistograms->Add(fhPtCandidates[iIso]);
137 // for(int iDec = 0; iDec < 2; iDec++) {
138 // for(int iIso = 0; iIso < 2; iIso++) {
140 // fHistSumPt[iIso][iDec] = new TH1F(Form("fHistSumPt_%f_%s_%s", fConeSize, (iIso==0)?"nonIso":"isolated" , (iDec==0)?"noDec":"decay" ),
141 // Form("P_{T} distribution cone %f %s %s", fConeSize, (iIso==0)?"nonIso":"isolated" , (iDec==0)?"noDec":"decay" ),
143 // fHistSumPt[iIso][iDec]->GetXaxis()->SetTitle("P_{T} (GeV/c)");
144 // fHistSumPt[iIso][iDec]->GetYaxis()->SetTitle("dN/dP_{T} (c/GeV)");
145 // fHistSumPt[iIso][iDec]->SetMarkerStyle(kFullCircle);
146 // fHistograms->Add(fHistSumPt[iIso][iDec]);
149 // fHistMaxPt[iIso][iDec] = new TH1F(Form("fHistMaxPt_%f_%s_%s", fConeSize, (iIso==0)?"nonIso":"isolated" , (iDec==0)?"noDec":"decay" ),
150 // Form("P_{T} distribution cone %f %s %s", fConeSize, (iIso==0)?"nonIso":"isolated" , (iDec==0)?"noDec":"decay" ),
152 // fHistMaxPt[iIso][iDec]->GetXaxis()->SetTitle("P_{T} (GeV/c)");
153 // fHistMaxPt[iIso][iDec]->GetYaxis()->SetTitle("dN/dP_{T} (c/GeV)");
154 // fHistMaxPt[iIso][iDec]->SetMarkerStyle(kFullCircle);
155 // fHistograms->Add(fHistMaxPt[iIso][iDec]);
162 for(Int_t iIso = 0; iIso < 2; iIso++){
163 fhTrackMult[iIso] = new TH1F(Form("fhTrackMult_%s_%f", (iIso==0)? "nonIso" : "isolated", fConeSize),
164 Form("Pt of %s candidates, cone size %f", (iIso==0)? "nonIsolated" : "isolated", fConeSize),
166 fhTrackMult[iIso]->GetXaxis()->SetTitle("n tracks in event");
167 fhTrackMult[iIso]->GetYaxis()->SetTitle("dN/dNTracks");
168 fhTrackMult[iIso]->SetMarkerStyle(kFullCircle);
169 fHistograms->Add(fhTrackMult[iIso]);
174 //________________________________________________________________________
175 Bool_t AliAnaConvIsolation::IsLeading(AliAODConversionParticle * particle, const TObjArray * tracks, const TObjArray * aodParticles) {
176 //Check if particle is highest pt particle in cone
177 for(Int_t ip = 0; ip < aodParticles->GetEntriesFast(); ip++) {
178 AliAODConversionParticle * oparticle = static_cast<AliAODConversionParticle*>(aodParticles->UncheckedAt(ip));
179 if(oparticle == particle) continue;
180 if(oparticle->Pt() > particle->Pt() &&
181 IsInCone(particle->Eta() - oparticle->Eta(),
182 particle->Phi() - oparticle->Phi(),
188 for(Int_t it = 0; it < tracks->GetEntriesFast(); it++) {
189 AliAODTrack * track = static_cast<AliAODTrack*>(tracks->UncheckedAt(it));
190 if(track->Pt() > particle->Pt() &&
191 IsInCone(particle->Eta() - track->Eta(), particle->Phi() - track->Phi(), fConeSize) ) return kFALSE;
197 //_________________________________________________________________________
198 Bool_t AliAnaConvIsolation::IsIsolated(AliAODConversionPhoton * particle, const TClonesArray * const tracks, const Int_t nSpawn, const Int_t * const spawn, Bool_t &leading) {
199 //See header file for documentation
206 for(int it = 0; it < tracks->GetEntriesFast(); it++) {
207 AliAODTrack * track = dynamic_cast<AliAODTrack*>(tracks->At(it));
211 if(track->Pt() < fMinPt) continue;
213 if(nSpawn && spawn) { ;}
215 ///Ignore tracks that are grandchildren of pion
216 // if ( particle->IsMySpawn(track->GetID(), nSpawn, spawn))
220 if ( IsInCone(particle->Eta() - track->Eta(), particle->Phi() - track->Phi(), fConeSize) ) {
221 ptSum += track->Pt();
222 if(track->Pt() > ptMax) ptMax = track->Pt();
223 if(track->Pt() > particle->Pt()) leading = kFALSE;
226 cout << "Bad track"<<endl;
231 Bool_t isolated = EvaluateIsolationCriteria( ptSum, particle->Pt());
233 FillHistograms(particle->Pt(), ptMax, ptSum, isolated, tracks->GetEntriesFast());
240 //_________________________________________________________________________
241 Bool_t AliAnaConvIsolation::IsIsolated(const AliAODConversionPhoton * const particle, const TClonesArray * const tracks, Bool_t &leading ) {
242 //See header file for documentation
249 for(int it = 0; it < tracks->GetEntriesFast(); it++) {
251 AliAODTrack * track = dynamic_cast<AliAODTrack*>(tracks->At(it));
255 if(track->Pt() < fMinPt) continue;
257 if ( (track->GetID() == particle->GetTrackLabel(0)) || track->GetID() == particle->GetTrackLabel(1) )
260 if ( IsInCone(particle->Eta() - track->Eta(), particle->Phi() - track->Phi(), fConeSize) ) {
261 ptSum += track->Pt();
262 if(track->Pt() > ptMax) ptMax = track->Pt();
263 if(track->Pt() > particle->Pt()) leading = kFALSE;
266 cout << "Bad track"<<endl;
271 Bool_t isolated = EvaluateIsolationCriteria( ptSum, particle->Pt());
273 FillHistograms(particle->Pt(), ptMax, ptSum, isolated, tracks->GetEntriesFast());
280 ///___________________________________________________________________________
281 void AliAnaConvIsolation::FillHistograms(Float_t pt, Float_t ptMax, Float_t ptSum, Bool_t isolated, Int_t nTracks) {
283 fhMaxPtInCone[isolated]->Fill(pt, ptMax);
284 fhSumPtInCone[isolated]->Fill(pt, ptSum);
285 fhSumPtVsMaxPt[isolated]->Fill(ptMax, ptSum);
286 fhPtCandidates[isolated]->Fill(pt);
287 fhTrackMult[isolated]->Fill(nTracks);
291 ///_____________________________________________________________________________
292 Bool_t AliAnaConvIsolation::EvaluateIsolationCriteria(Float_t ptSum, Float_t pt) const {
293 //Evaluate isolation criteria
294 return (ptSum < fIsoCurve->Eval(pt));