]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG4/CaloCalib/AliAnalysisTaskEMCALPi0PbPb.cxx
correct selection of embedded signal clusters, get new list of clusters from input...
[u/mrichter/AliRoot.git] / PWG4 / CaloCalib / AliAnalysisTaskEMCALPi0PbPb.cxx
CommitLineData
ea3fd2d5 1// $Id$
2
ea3fd2d5 3#include "AliAnalysisTaskEMCALPi0PbPb.h"
fa443410 4#include <TAxis.h>
717fe7de 5#include <TChain.h>
6#include <TClonesArray.h>
f5d4ab70 7#include <TFile.h>
296ea9b4 8#include <TGeoGlobalMagField.h>
717fe7de 9#include <TH1F.h>
10#include <TH2F.h>
11#include <TList.h>
12#include <TLorentzVector.h>
f5d4ab70 13#include <TNtuple.h>
296ea9b4 14#include <TProfile.h>
b3ee6797 15#include <TString.h>
296ea9b4 16#include <TVector2.h>
717fe7de 17#include "AliAODEvent.h"
18#include "AliAODVertex.h"
19#include "AliAnalysisManager.h"
20#include "AliAnalysisTaskEMCALClusterizeFast.h"
296ea9b4 21#include "AliCDBManager.h"
ea3fd2d5 22#include "AliCentrality.h"
ea3fd2d5 23#include "AliEMCALGeoUtils.h"
0ec74551 24#include "AliEMCALGeometry.h"
296ea9b4 25#include "AliEMCALRecoUtils.h"
717fe7de 26#include "AliESDEvent.h"
27#include "AliESDVertex.h"
296ea9b4 28#include "AliESDtrack.h"
0ec74551 29#include "AliESDtrackCuts.h"
b6c599fe 30#include "AliEventplane.h"
296ea9b4 31#include "AliGeomManager.h"
b3ee6797 32#include "AliInputEventHandler.h"
43cfaa06 33#include "AliLog.h"
296ea9b4 34#include "AliMagF.h"
0ec74551 35#include "AliTrackerBase.h"
ea3fd2d5 36
37ClassImp(AliAnalysisTaskEMCALPi0PbPb)
717fe7de 38
ea3fd2d5 39//________________________________________________________________________
40AliAnalysisTaskEMCALPi0PbPb::AliAnalysisTaskEMCALPi0PbPb(const char *name)
41 : AliAnalysisTaskSE(name),
717fe7de 42 fCentVar("V0M"),
43 fCentFrom(0),
44 fCentTo(100),
76332037 45 fVtxZMin(-10),
46 fVtxZMax(+10),
43cfaa06 47 fUseQualFlag(1),
717fe7de 48 fClusName(),
f5d4ab70 49 fDoNtuple(0),
a49742b5 50 fDoAfterburner(0),
f224d35b 51 fAsymMax(1),
a49742b5 52 fNminCells(1),
3c661da5 53 fMinE(0.100),
f224d35b 54 fMinErat(0),
55 fMinEcc(0),
6bf90832 56 fGeoName("EMCAL_FIRSTYEARV1"),
b6c599fe 57 fMinNClusPerTr(50),
296ea9b4 58 fIsoDist(0.2),
b3ee6797 59 fTrClassNames(""),
0ec74551 60 fTrCuts(0),
b6c599fe 61 fPrimTrCuts(0),
62 fDoTrMatGeom(0),
27c2e3d9 63 fIsGeoMatsSet(0),
d9f26424 64 fNEvs(0),
d595acbb 65 fGeom(0),
296ea9b4 66 fReco(0),
717fe7de 67 fOutput(0),
b3ee6797 68 fTrClassNamesArr(0),
717fe7de 69 fEsdEv(0),
70 fAodEv(0),
43cfaa06 71 fRecPoints(0),
717fe7de 72 fEsdClusters(0),
73 fEsdCells(0),
74 fAodClusters(0),
286b47a5 75 fAodCells(0),
fa443410 76 fPtRanges(0),
296ea9b4 77 fSelTracks(0),
b6c599fe 78 fSelPrimTracks(0),
788ca675 79 fNtuple(0),
80 fHeader(0),
81 fPrimVert(0),
82 fSpdVert(0),
83 fTpcVert(0),
84 fClusters(0),
fa443410 85 fHCuts(0x0),
86 fHVertexZ(0x0),
76332037 87 fHVertexZ2(0x0),
fa443410 88 fHCent(0x0),
89 fHCentQual(0x0),
b3ee6797 90 fHTclsBeforeCuts(0x0),
91 fHTclsAfterCuts(0x0),
d595acbb 92 fHColuRow(0x0),
93 fHColuRowE(0x0),
94 fHCellMult(0x0),
95 fHCellE(0x0),
96 fHCellH(0x0),
6eb6260e 97 fHCellM(0x0),
a49742b5 98 fHCellM2(0x0),
296ea9b4 99 fHCellFreqNoCut(0x0),
2e4d8148 100 fHCellFreqCut100M(0x0),
101 fHCellFreqCut300M(0x0),
102 fHCellFreqE(0x0),
296ea9b4 103 fHCellCheckE(0x0),
6eb6260e 104 fHClustEccentricity(0),
fa443410 105 fHClustEtaPhi(0x0),
106 fHClustEnergyPt(0x0),
107 fHClustEnergySigma(0x0),
d595acbb 108 fHClustSigmaSigma(0x0),
6eb6260e 109 fHClustNCellEnergyRatio(0x0),
b6c599fe 110 fHMatchDr(0x0),
111 fHMatchDz(0x0),
112 fHMatchEp(0x0),
fa443410 113 fHPionEtaPhi(0x0),
114 fHPionMggPt(0x0),
6eb6260e 115 fHPionMggAsym(0x0),
116 fHPionMggDgg(0x0)
ea3fd2d5 117{
717fe7de 118 // Constructor.
ea3fd2d5 119
d595acbb 120 if (!name)
121 return;
122 SetName(name);
ea3fd2d5 123 DefineInput(0, TChain::Class());
ea3fd2d5 124 DefineOutput(1, TList::Class());
296ea9b4 125 fBranchNames="ESD:AliESDRun.,AliESDHeader.,PrimaryVertex.,SPDVertex.,TPCVertex.,EMCALCells.,Tracks "
126 "AOD:header,vertices,emcalCells,tracks";
ea3fd2d5 127}
ea3fd2d5 128
717fe7de 129//________________________________________________________________________
130AliAnalysisTaskEMCALPi0PbPb::~AliAnalysisTaskEMCALPi0PbPb()
131{
132 // Destructor.
ea3fd2d5 133
b3ee6797 134 if (!AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
135 delete fOutput; fOutput = 0;
136 }
fa443410 137 delete fPtRanges; fPtRanges = 0;
d595acbb 138 delete fGeom; fGeom = 0;
296ea9b4 139 delete fReco; fReco = 0;
b3ee6797 140 delete fTrClassNamesArr;
296ea9b4 141 delete fSelTracks;
b6c599fe 142 delete fSelPrimTracks;
d595acbb 143 delete [] fHColuRow;
144 delete [] fHColuRowE;
145 delete [] fHCellMult;
296ea9b4 146 delete [] fHCellFreqNoCut;
2e4d8148 147 delete [] fHCellFreqCut100M;
148 delete [] fHCellFreqCut300M;
ea3fd2d5 149}
717fe7de 150
ea3fd2d5 151//________________________________________________________________________
152void AliAnalysisTaskEMCALPi0PbPb::UserCreateOutputObjects()
153{
717fe7de 154 // Create user objects here.
ea3fd2d5 155
296ea9b4 156 fGeom = new AliEMCALGeoUtils(fGeoName,"EMCAL");
157 fReco = new AliEMCALRecoUtils();
b3ee6797 158 fTrClassNamesArr = fTrClassNames.Tokenize(" ");
717fe7de 159 fOutput = new TList();
160 fOutput->SetOwner();
296ea9b4 161 fSelTracks = new TObjArray;
b6c599fe 162 fSelPrimTracks = new TObjArray;
ea3fd2d5 163
f5d4ab70 164 if (fDoNtuple) {
165 TFile *f = OpenFile(1);
6bf90832 166 if (f) {
167 f->SetCompressionLevel(2);
788ca675 168 fNtuple = new TTree(Form("tree%.0fto%.0f",fCentFrom,fCentTo), "StandaloneTree");
6bf90832 169 fNtuple->SetDirectory(f);
170 fNtuple->SetAutoFlush(-1024*1024*1024);
171 fNtuple->SetAutoSave(-1024*1024*1024);
788ca675 172 fHeader = new AliStaHeader;
173 fNtuple->Branch("header", &fHeader, 16*1024, 99);
174 fPrimVert = new AliStaVertex;
175 fNtuple->Branch("primv", &fPrimVert, 16*1024, 99);
176 fSpdVert = new AliStaVertex;
177 fNtuple->Branch("spdv", &fSpdVert, 16*1024, 99);
178 fTpcVert = new AliStaVertex;
179 fNtuple->Branch("tpcv", &fTpcVert, 16*1024, 99);
180 if (TClass::GetClass("AliStaCluster"))
181 TClass::GetClass("AliStaCluster")->IgnoreTObjectStreamer();
182 fClusters = new TClonesArray("AliStaCluster",1000);
183 fNtuple->Branch("clusters", &fClusters, 8*16*1024, 99);
6bf90832 184 }
f5d4ab70 185 }
186
002dcebe 187 AliEMCALEMCGeometry *emc = fGeom->GetEMCGeometry();
b6c599fe 188 Double_t phimin = emc->GetArm1PhiMin()*TMath::DegToRad();
189 Double_t phimax = emc->GetArm1PhiMax()*TMath::DegToRad();
002dcebe 190
d595acbb 191 // histograms
a49742b5 192 TH1::SetDefaultSumw2(kTRUE);
193 TH2::SetDefaultSumw2(kTRUE);
b3ee6797 194 fHCuts = new TH1F("hEventCuts","",5,0.5,5.5);
195 fHCuts->GetXaxis()->SetBinLabel(1,"All");
196 fHCuts->GetXaxis()->SetBinLabel(2,"PS");
197 fHCuts->GetXaxis()->SetBinLabel(3,Form("%s: %.0f-%.0f",fCentVar.Data(),fCentFrom,fCentTo));
198 fHCuts->GetXaxis()->SetBinLabel(4,"QFlag");
199 fHCuts->GetXaxis()->SetBinLabel(5,Form("zvtx: %.0f-%.0f",fVtxZMin,fVtxZMax));
fa443410 200 fOutput->Add(fHCuts);
201 fHVertexZ = new TH1F("hVertexZBeforeCut","",100,-25,25);
202 fHVertexZ->SetXTitle("z [cm]");
203 fOutput->Add(fHVertexZ);
76332037 204 fHVertexZ2 = new TH1F("hVertexZAfterCut","",100,-25,25);
205 fHVertexZ2->SetXTitle("z [cm]");
206 fOutput->Add(fHVertexZ2);
fa443410 207 fHCent = new TH1F("hCentBeforeCut","",101,-1,100);
208 fHCent->SetXTitle(fCentVar.Data());
76332037 209 fOutput->Add(fHCent);
fa443410 210 fHCentQual = new TH1F("hCentAfterCut","",101,-1,100);
211 fHCentQual->SetXTitle(fCentVar.Data());
212 fOutput->Add(fHCentQual);
2e4d8148 213 fHTclsBeforeCuts = new TH1F("hTclsBeforeCuts","",fTrClassNamesArr->GetEntries(),0.5,0.5+fTrClassNamesArr->GetEntries());
214 fHTclsAfterCuts = new TH1F("hTclsAfterCuts","",fTrClassNamesArr->GetEntries(),0.5,0.5+fTrClassNamesArr->GetEntries());
b3ee6797 215 for (Int_t i = 0; i<fTrClassNamesArr->GetEntries(); ++i) {
216 const char *name = fTrClassNamesArr->At(i)->GetName();
217 fHTclsBeforeCuts->GetXaxis()->SetBinLabel(1+i,name);
218 fHTclsAfterCuts->GetXaxis()->SetBinLabel(1+i,name);
219 }
220 fOutput->Add(fHTclsBeforeCuts);
221 fOutput->Add(fHTclsAfterCuts);
90d5b88b 222
d595acbb 223 // histograms for cells
296ea9b4 224 Int_t nsm = fGeom->GetEMCGeometry()->GetNumberOfSuperModules();
225 fHColuRow = new TH2*[nsm];
226 fHColuRowE = new TH2*[nsm];
227 fHCellMult = new TH1*[nsm];
228 for (Int_t i = 0; i<nsm; ++i) {
2e4d8148 229 fHColuRow[i] = new TH2F(Form("hColRow_Mod%d",i),"",48,0,48,24,0.,24);
d595acbb 230 fHColuRow[i]->SetTitle(Form("Module %d: Occupancy", i));
231 fHColuRow[i]->SetXTitle("col (i#eta)");
232 fHColuRow[i]->SetYTitle("row (i#phi)");
2e4d8148 233 fHColuRowE[i] = new TH2F(Form("hColRowE_Mod%d", i),"",48,0,48,24,0,24);
90d5b88b 234 fHColuRowE[i]->SetTitle(Form("Module %d: Cell energy",i));
d595acbb 235 fHColuRowE[i]->SetXTitle("col (i#eta)");
236 fHColuRowE[i]->SetYTitle("row (i#phi)");
237 fHCellMult[i] = new TH1F(Form("hCellMult_Mod%d",i),"",1000,0,1000);
238 fHCellMult[i]->SetTitle(Form("Module %d: Cell multiplicity",i));
90d5b88b 239 fHCellMult[i]->SetXTitle("# of cells");
d595acbb 240 fOutput->Add(fHColuRow[i]);
241 fOutput->Add(fHColuRowE[i]);
242 fOutput->Add(fHCellMult[i]);
243 }
2e4d8148 244 fHCellE = new TH1F("hCellE","",250,0.,25.);
d595acbb 245 fHCellE->SetXTitle("E_{cell} [GeV]");
246 fOutput->Add(fHCellE);
fb5a0b69 247 fHCellH = new TH1F ("hCellHighestE","",250,0.,25.);
6eb6260e 248 fHCellH->SetXTitle("E^{max}_{cell} [GeV]");
d595acbb 249 fOutput->Add(fHCellH);
fb5a0b69 250 fHCellM = new TH1F ("hCellMeanEperHitCell","",250,0.,2.5);
6eb6260e 251 fHCellM->SetXTitle("#LT E_{cell}#GT [GeV]");
252 fOutput->Add(fHCellM);
fb5a0b69 253 fHCellM2 = new TH1F ("hCellMeanEperAllCells","",250,0.,1);
f4ec884e 254 fHCellM2->SetXTitle("1/N_{cells} #Sigma E_{cell} [GeV]");
a49742b5 255 fOutput->Add(fHCellM2);
90d5b88b 256
2e4d8148 257 fHCellFreqNoCut = new TH1*[nsm];
258 fHCellFreqCut100M = new TH1*[nsm];
259 fHCellFreqCut300M = new TH1*[nsm];
260 fHCellFreqE = new TH1*[nsm];
296ea9b4 261 for (Int_t i = 0; i<nsm; ++i){
262 Double_t lbin = i*24*48-0.5;
263 Double_t hbin = lbin+24*48;
2e4d8148 264 fHCellFreqNoCut[i] = new TH1F(Form("hCellFreqNoCut_SM%d",i),
265 Form("Frequency SM%d (no cut);id;#",i), 1152, lbin, hbin);
266 fHCellFreqCut100M[i] = new TH1F(Form("hCellFreqCut100M_SM%d",i),
267 Form("Frequency SM%d (>0.1GeV);id;#",i), 1152, lbin, hbin);
268 fHCellFreqCut300M[i] = new TH1F(Form("hCellFreqCut300M_SM%d",i),
269 Form("Frequency SM%d (>0.3GeV);id;#",i), 1152, lbin, hbin);
270 fHCellFreqE[i] = new TH1F(Form("hCellFreqE_SM%d",i),
271 Form("Frequency SM%d (E weighted);id;#",i), 1152, lbin, hbin);
296ea9b4 272 fOutput->Add(fHCellFreqNoCut[i]);
2e4d8148 273 fOutput->Add(fHCellFreqCut100M[i]);
274 fOutput->Add(fHCellFreqCut300M[i]);
275 fOutput->Add(fHCellFreqE[i]);
296ea9b4 276 }
277 if (1) {
278 fHCellCheckE = new TH1*[24*48*nsm];
408dc04c 279 memset(fHCellCheckE,0,24*48*nsm*sizeof(TH1*));
296ea9b4 280 Int_t tcs[1] = {4102};
281 for (UInt_t i = 0; i<sizeof(tcs)/sizeof(Int_t); ++i){
282 Int_t c=tcs[i];
283 if (c<24*48*nsm) {
fb5a0b69 284 fHCellCheckE[i] = new TH1F(Form("hCellE_id%d",c), Form("Cell %d;E [GeV/c];#",c), 500, 0, 8);
296ea9b4 285 fOutput->Add(fHCellCheckE[i]);
286 }
287 }
288 }
289
d595acbb 290 // histograms for clusters
6eb6260e 291 fHClustEccentricity = new TH1F("hClustEccentricity","",100,-0.1,1.1);
292 fHClustEccentricity->SetXTitle("#epsilon_{C}");
293 fOutput->Add(fHClustEccentricity);
002dcebe 294 fHClustEtaPhi = new TH2F("hClustEtaPhi","",500,-0.8,0.8,100*nsm,phimin,phimax);
fa443410 295 fHClustEtaPhi->SetXTitle("#eta");
296 fHClustEtaPhi->SetYTitle("#varphi");
297 fOutput->Add(fHClustEtaPhi);
298 fHClustEnergyPt = new TH2F("hClustEnergyPt","",250,0,50,250,0,50);
299 fHClustEnergyPt->SetXTitle("E [GeV]");
6eb6260e 300 fHClustEnergyPt->SetYTitle("p_{T} [GeV/c]");
fa443410 301 fOutput->Add(fHClustEnergyPt);
a49742b5 302 fHClustEnergySigma = new TH2F("hClustEnergySigma","",100,0,100,500,0,50);
303 fHClustEnergySigma->SetXTitle("E_{C} * #sigma_{max} [GeV*cm]");
6eb6260e 304 fHClustEnergySigma->SetYTitle("E_{C} [GeV]");
d595acbb 305 fOutput->Add(fHClustEnergySigma);
a49742b5 306 fHClustSigmaSigma = new TH2F("hClustSigmaSigma","",500,0,50,500,0,50);
6eb6260e 307 fHClustSigmaSigma->SetXTitle("#lambda_{0} [cm]");
308 fHClustSigmaSigma->SetYTitle("#sigma_{max} [cm]");
d595acbb 309 fOutput->Add(fHClustSigmaSigma);
6eb6260e 310 fHClustNCellEnergyRatio = new TH2F("hClustNCellEnergyRatio","",27,-0.5,26.5,101,-0.05,1.05);
311 fHClustNCellEnergyRatio->SetXTitle("N_{cells}");
312 fHClustNCellEnergyRatio->SetYTitle("E^{max}_{cell}/E_{clus}");
313 fOutput->Add(fHClustNCellEnergyRatio);
90d5b88b 314
b6c599fe 315 // histograms for track matching
316 fHMatchDr = new TH1F("hMatchDrDist",";dR [cm]",500,0,200);
317 fOutput->Add(fHMatchDr);
318 fHMatchDz = new TH1F("hMatchDzDist",";dZ [cm]",500,-100,100);
319 fOutput->Add(fHMatchDz);
320 fHMatchEp = new TH1F("hMatchEpDist",";E/p",100,0,10);
321 fOutput->Add(fHMatchEp);
d595acbb 322 // histograms for pion candidates
002dcebe 323 fHPionEtaPhi = new TH2F("hPionEtaPhi","",100,-0.8,0.8,100*nsm,phimin,phimax);
a49742b5 324 fHPionEtaPhi->SetXTitle("#eta_{#gamma#gamma}");
325 fHPionEtaPhi->SetYTitle("#varphi_{#gamma#gamma}");
fa443410 326 fOutput->Add(fHPionEtaPhi);
a49742b5 327 fHPionMggPt = new TH2F("hPionMggPt","",1000,0,2,100,0,20.0);
fa443410 328 fHPionMggPt->SetXTitle("M_{#gamma#gamma} [GeV/c^{2}]");
329 fHPionMggPt->SetYTitle("p_{T}^{#gamma#gamma} [GeV/c]");
330 fOutput->Add(fHPionMggPt);
a49742b5 331 fHPionMggAsym = new TH2F("hPionMggAsym","",1000,0,2,100,0,1);
fa443410 332 fHPionMggAsym->SetXTitle("M_{#gamma#gamma} [GeV/c^{2}]");
333 fHPionMggAsym->SetYTitle("Z_{#gamma#gamma} [GeV]");
334 fOutput->Add(fHPionMggAsym);
a49742b5 335 fHPionMggDgg = new TH2F("hPionMggDgg","",1000,0,2,100,0,10);
6eb6260e 336 fHPionMggDgg->SetXTitle("M_{#gamma#gamma} [GeV/c^{2}]");
337 fHPionMggDgg->SetYTitle("opening angle [grad]");
338 fOutput->Add(fHPionMggDgg);
78204d3d 339 const Int_t nbins = 20;
340 Double_t xbins[nbins] = {0.5,1,1.5,2,2.5,3,3.5,4,4.5,5,6,7,8,9,10,12.5,15,20,25,50};
fa443410 341 fPtRanges = new TAxis(nbins-1,xbins);
342 for (Int_t i = 0; i<=nbins; ++i) {
a49742b5 343 fHPionInvMasses[i] = new TH1F(Form("hPionInvMass%d",i),"",1000,0,2);
fa443410 344 fHPionInvMasses[i]->SetXTitle("M_{#gamma#gamma} [GeV/c^{2}]");
345 if (i==0)
346 fHPionInvMasses[i]->SetTitle(Form("0 < p_{T}^{#gamma#gamma} <%.1f",xbins[0]));
347 else if (i==nbins)
348 fHPionInvMasses[i]->SetTitle(Form("p_{T}^{#gamma#gamma} > 50"));
349 else
350 fHPionInvMasses[i]->SetTitle(Form("%.1f < p_{T}^{#gamma#gamma} <%.1f",xbins[i-1],xbins[i]));
fa443410 351 fOutput->Add(fHPionInvMasses[i]);
352 }
296ea9b4 353
717fe7de 354 PostData(1, fOutput);
ea3fd2d5 355}
356
357//________________________________________________________________________
358void AliAnalysisTaskEMCALPi0PbPb::UserExec(Option_t *)
359{
717fe7de 360 // Called for each event.
361
362 if (!InputEvent())
363 return;
364
43cfaa06 365 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
366 fEsdEv = dynamic_cast<AliESDEvent*>(InputEvent());
367 if (fEsdEv) {
368 am->LoadBranch("AliESDRun.");
369 am->LoadBranch("AliESDHeader.");
370 } else {
371 fAodEv = dynamic_cast<AliAODEvent*>(InputEvent());
408dc04c 372 if (!fAodEv) {
373 AliFatal("Neither ESD nor AOD event found");
374 return;
375 }
43cfaa06 376 am->LoadBranch("header");
377 }
378
b6c599fe 379 if (fDoTrMatGeom && !AliGeomManager::GetGeometry()) { // get geometry
27c2e3d9 380 AliWarning("Accessing geometry from OCDB, this is not very efficient!");
381 AliCDBManager *cdb = AliCDBManager::Instance();
382 if (!cdb->IsDefaultStorageSet())
383 cdb->SetDefaultStorage("raw://");
384 Int_t runno = InputEvent()->GetRunNumber();
385 if (runno != cdb->GetRun())
386 cdb->SetRun(runno);
387 AliGeomManager::LoadGeometry();
388 }
389
390 if (!AliGeomManager::GetGeometry()&&!fIsGeoMatsSet) { // set misalignment matrices (stored in first event)
391 Int_t nsm = fGeom->GetEMCGeometry()->GetNumberOfSuperModules();
392 if (fEsdEv) {
393 for (Int_t i=0; i<nsm; ++i)
394 fGeom->SetMisalMatrix(fEsdEv->GetESDRun()->GetEMCALMatrix(i),i);
395 } else {
396 for (Int_t i=0; i<nsm; ++i)
397 fGeom->SetMisalMatrix(fAodEv->GetHeader()->GetEMCALMatrix(i),i);
398 }
399 fIsGeoMatsSet = kTRUE;
400 }
401
402 if (!TGeoGlobalMagField::Instance()->GetField()) { // construct field map
403 if (fEsdEv) {
404 const AliESDRun *erun = fEsdEv->GetESDRun();
405 AliMagF *field = AliMagF::CreateFieldMap(erun->GetCurrentL3(),
406 erun->GetCurrentDip(),
407 AliMagF::kConvLHC,
408 kFALSE,
409 erun->GetBeamEnergy(),
410 erun->GetBeamType());
411 TGeoGlobalMagField::Instance()->SetField(field);
412 } else {
413 Double_t pol = -1; //polarity
414 Double_t be = -1; //beam energy
415 AliMagF::BeamType_t btype = AliMagF::kBeamTypepp;
416 Int_t runno = fAodEv->GetRunNumber();
417 if (runno>=136851 && runno<138275) {
418 pol = -1;
419 be = 2760;
420 btype = AliMagF::kBeamTypeAA;
421 } else if (runno>=138275 && runno<=139517) {
422 pol = +1;
423 be = 2760;
424 btype = AliMagF::kBeamTypeAA;
425 } else {
426 AliError(Form("Do not know the bfield parameters for run %d! Using defaults!!!", runno));
427 }
428 TGeoGlobalMagField::Instance()->SetField(new AliMagF("Maps","Maps", pol, pol, AliMagF::k5kG, btype, be));
429 }
430 }
431
b3ee6797 432 Int_t cut = 1;
433 fHCuts->Fill(cut++);
434
435 TString trgclasses;
436 AliESDHeader *h = dynamic_cast<AliESDHeader*>(InputEvent()->GetHeader());
437 if (h) {
438 trgclasses = fEsdEv->GetFiredTriggerClasses();
439 } else {
440 AliAODHeader *h2 = dynamic_cast<AliAODHeader*>(InputEvent()->GetHeader());
441 if (h2)
442 trgclasses = h2->GetFiredTriggerClasses();
443 }
444 for (Int_t i = 0; i<fTrClassNamesArr->GetEntries(); ++i) {
445 const char *name = fTrClassNamesArr->At(i)->GetName();
446 if (trgclasses.Contains(name))
447 fHTclsBeforeCuts->Fill(1+i);
448 }
449
450 UInt_t res = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
451 if (res==0)
452 return;
453
fa443410 454 fHCuts->Fill(cut++);
286b47a5 455
717fe7de 456 const AliCentrality *centP = InputEvent()->GetCentrality();
457 Double_t cent = centP->GetCentralityPercentileUnchecked(fCentVar);
fa443410 458 fHCent->Fill(cent);
717fe7de 459 if (cent<fCentFrom||cent>fCentTo)
286b47a5 460 return;
43cfaa06 461
fa443410 462 fHCuts->Fill(cut++);
286b47a5 463
43cfaa06 464 if (fUseQualFlag) {
465 if (centP->GetQuality()>0)
466 return;
467 }
286b47a5 468
fa443410 469 fHCentQual->Fill(cent);
470 fHCuts->Fill(cut++);
717fe7de 471
43cfaa06 472 if (fEsdEv) {
fa443410 473 am->LoadBranch("PrimaryVertex.");
474 am->LoadBranch("SPDVertex.");
475 am->LoadBranch("TPCVertex.");
43cfaa06 476 } else {
477 fAodEv = dynamic_cast<AliAODEvent*>(InputEvent());
478 am->LoadBranch("vertices");
3c661da5 479 if (!fAodEv) return;
43cfaa06 480 }
481
482 const AliVVertex *vertex = InputEvent()->GetPrimaryVertex();
717fe7de 483 if (!vertex)
484 return;
485
fa443410 486 fHVertexZ->Fill(vertex->GetZ());
286b47a5 487
717fe7de 488 if(vertex->GetZ()<fVtxZMin||vertex->GetZ()>fVtxZMax)
489 return;
286b47a5 490
fa443410 491 fHCuts->Fill(cut++);
76332037 492 fHVertexZ2->Fill(vertex->GetZ());
717fe7de 493
b3ee6797 494 // count number of accepted events
495 ++fNEvs;
496
497 for (Int_t i = 0; i<fTrClassNamesArr->GetEntries(); ++i) {
498 const char *name = fTrClassNamesArr->At(i)->GetName();
499 if (trgclasses.Contains(name))
500 fHTclsAfterCuts->Fill(1+i);
501 }
502
43cfaa06 503 fRecPoints = 0; // will be set if fClusName is given and AliAnalysisTaskEMCALClusterizeFast is used
b6c599fe 504 fEsdClusters = 0; // will be set if ESD input used and if fRecPoints are not set or if clusters are attached
43cfaa06 505 fEsdCells = 0; // will be set if ESD input used
b6c599fe 506 fAodClusters = 0; // will be set if AOD input used and if fRecPoints are not set or if clusters are attached
43cfaa06 507 // or if fClusName is given and AliAnalysisTaskEMCALClusterizeFast in AOD output mode
508 fAodCells = 0; // will be set if AOD input used
717fe7de 509
43cfaa06 510 // deal with special output from AliAnalysisTaskEMCALClusterizeFast first
511 Bool_t clusattached = 0;
512 Bool_t recalibrated = 0;
513 if (1 && !fClusName.IsNull()) {
514 AliAnalysisTaskEMCALClusterizeFast *cltask = 0;
515 TObjArray *ts = am->GetTasks();
516 cltask = dynamic_cast<AliAnalysisTaskEMCALClusterizeFast*>(ts->FindObject(fClusName));
517 if (cltask && cltask->GetClusters()) {
d595acbb 518 fRecPoints = const_cast<TObjArray*>(cltask->GetClusters());
43cfaa06 519 clusattached = cltask->GetAttachClusters();
520 if (cltask->GetCalibData()!=0)
521 recalibrated = kTRUE;
522 }
523 }
524 if (1 && AODEvent() && !fClusName.IsNull()) {
717fe7de 525 TList *l = AODEvent()->GetList();
526 TClonesArray *clus = 0;
527 if (l) {
528 clus = dynamic_cast<TClonesArray*>(l->FindObject(fClusName));
529 fAodClusters = clus;
530 }
ea3fd2d5 531 }
717fe7de 532
533 if (fEsdEv) { // ESD input mode
43cfaa06 534 if (1 && (!fRecPoints||clusattached)) {
535 if (!clusattached)
536 am->LoadBranch("CaloClusters");
717fe7de 537 TList *l = fEsdEv->GetList();
538 TClonesArray *clus = 0;
539 if (l) {
540 clus = dynamic_cast<TClonesArray*>(l->FindObject("CaloClusters"));
541 fEsdClusters = clus;
ea3fd2d5 542 }
543 }
43cfaa06 544 if (1) {
545 if (!recalibrated)
546 am->LoadBranch("EMCALCells.");
717fe7de 547 fEsdCells = fEsdEv->GetEMCALCells();
548 }
549 } else if (fAodEv) { // AOD input mode
43cfaa06 550 if (1 && (!fAodClusters || clusattached)) {
551 if (!clusattached)
552 am->LoadBranch("caloClusters");
717fe7de 553 TList *l = fAodEv->GetList();
554 TClonesArray *clus = 0;
555 if (l) {
556 clus = dynamic_cast<TClonesArray*>(l->FindObject("caloClusters"));
557 fAodClusters = clus;
ea3fd2d5 558 }
559 }
43cfaa06 560 if (1) {
561 if (!recalibrated)
562 am->LoadBranch("emcalCells");
717fe7de 563 fAodCells = fAodEv->GetEMCALCells();
564 }
565 } else {
566 AliFatal("Impossible to not have either pointer to ESD or AOD event");
567 }
ea3fd2d5 568
43cfaa06 569 if (1) {
570 AliDebug(2,Form("fRecPoints set: %p", fRecPoints));
571 AliDebug(2,Form("fEsdClusters set: %p", fEsdClusters));
572 AliDebug(2,Form("fEsdCells set: %p", fEsdCells));
573 AliDebug(2,Form("fAodClusters set: %p", fAodClusters));
574 AliDebug(2,Form("fAodCells set: %p", fAodCells));
575 }
576
a49742b5 577 if (fDoAfterburner)
578 ClusterAfterburner();
6eb6260e 579
296ea9b4 580 CalcTracks();
b6c599fe 581 CalcPrimTracks();
296ea9b4 582 CalcClusterProps();
583
286b47a5 584 FillCellHists();
585 FillClusHists();
586 FillPionHists();
323834f0 587 FillOtherHists();
788ca675 588 FillNtuple();
ea3fd2d5 589
de4cee41 590 fSelTracks->Clear();
591 fSelPrimTracks->Clear();
592
717fe7de 593 PostData(1, fOutput);
ea3fd2d5 594}
595
596//________________________________________________________________________
597void AliAnalysisTaskEMCALPi0PbPb::Terminate(Option_t *)
598{
717fe7de 599 // Terminate called at the end of analysis.
f5d4ab70 600
601 if (fNtuple) {
602 TFile *f = OpenFile(1);
603 if (f)
604 fNtuple->Write();
605 }
d9f26424 606
b3ee6797 607 AliInfo(Form("%s: Accepted %lld events", GetName(), fNEvs));
ea3fd2d5 608}
ea3fd2d5 609
296ea9b4 610//________________________________________________________________________
611void AliAnalysisTaskEMCALPi0PbPb::CalcTracks()
612{
b6c599fe 613 // Calculate track properties (including secondaries).
296ea9b4 614
615 fSelTracks->Clear();
616
617 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
618 TClonesArray *tracks = 0;
619 if (fEsdEv) {
620 am->LoadBranch("Tracks");
621 TList *l = fEsdEv->GetList();
622 tracks = dynamic_cast<TClonesArray*>(l->FindObject("Tracks"));
623 } else {
624 am->LoadBranch("tracks");
625 TList *l = fAodEv->GetList();
626 tracks = dynamic_cast<TClonesArray*>(l->FindObject("tracks"));
627 }
628
b6c599fe 629 if (!tracks)
630 return;
631
632 if (fEsdEv) {
633 const Int_t Ntracks = tracks->GetEntries();
634 for (Int_t iTracks = 0; iTracks < Ntracks; ++iTracks) {
635 AliESDtrack *track = static_cast<AliESDtrack*>(tracks->At(iTracks));
636 if (!track) {
637 AliWarning(Form("Could not receive track %d\n", iTracks));
638 continue;
639 }
640 if (fTrCuts && !fTrCuts->IsSelected(track))
641 continue;
642 Double_t eta = track->Eta();
643 if (eta<-1||eta>1)
644 continue;
645 fSelTracks->Add(track);
646 }
647 } else {
648 Int_t ntracks = tracks->GetEntries();
649 for (Int_t i=0; i<ntracks; ++i) {
650 AliAODTrack *track = static_cast<AliAODTrack*>(tracks->At(i));
651 if (!track)
652 continue;
653 Double_t eta = track->Eta();
654 if (eta<-1||eta>1)
655 continue;
656 if(track->GetTPCNcls()<fMinNClusPerTr)
657 continue;
658
659 if (0 && (track->Pt()>=0.6) && (track->PxAtDCA()==-999)) { // compute position on EMCAL
660 AliExternalTrackParam tParam(track);
661 if (AliTrackerBase::PropagateTrackToBxByBz(&tParam, 438, 0.139, 1, kTRUE)) {
662 Double_t trkPos[3];
663 tParam.GetXYZ(trkPos);
664 track->SetPxPyPzAtDCA(trkPos[0],trkPos[1],trkPos[2]);
665 }
666 }
667 fSelTracks->Add(track);
668 }
669 }
670}
671
672//________________________________________________________________________
673void AliAnalysisTaskEMCALPi0PbPb::CalcPrimTracks()
674{
675 // Calculate track properties.
676
677 fSelPrimTracks->Clear();
678
679 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
680 TClonesArray *tracks = 0;
681 if (fEsdEv) {
682 am->LoadBranch("Tracks");
683 TList *l = fEsdEv->GetList();
684 tracks = dynamic_cast<TClonesArray*>(l->FindObject("Tracks"));
685 } else {
686 am->LoadBranch("tracks");
687 TList *l = fAodEv->GetList();
688 tracks = dynamic_cast<TClonesArray*>(l->FindObject("tracks"));
689 }
690
296ea9b4 691 if (!tracks)
692 return;
693
0ec74551 694 AliEMCALEMCGeometry *emc = fGeom->GetEMCGeometry();
b6c599fe 695 Double_t phimin = emc->GetArm1PhiMin()*TMath::DegToRad()-fIsoDist*1.25;
696 Double_t phimax = emc->GetArm1PhiMax()*TMath::DegToRad()+fIsoDist*1.25;
0ec74551 697
296ea9b4 698 if (fEsdEv) {
b6c599fe 699 fSelPrimTracks->SetOwner(kTRUE);
0ec74551 700 am->LoadBranch("PrimaryVertex.");
701 const AliESDVertex *vtx = fEsdEv->GetPrimaryVertexSPD();
702 am->LoadBranch("SPDVertex.");
703 const AliESDVertex *vtxSPD = fEsdEv->GetPrimaryVertexSPD();
704 am->LoadBranch("Tracks");
705 const Int_t Ntracks = tracks->GetEntries();
706 for (Int_t iTracks = 0; iTracks < Ntracks; ++iTracks) {
707 AliESDtrack *track = static_cast<AliESDtrack*>(tracks->At(iTracks));
708 if (!track) {
709 AliWarning(Form("Could not receive track %d\n", iTracks));
710 continue;
711 }
712 if (fTrCuts && !fTrCuts->IsSelected(track))
296ea9b4 713 continue;
714 Double_t eta = track->Eta();
715 if (eta<-1||eta>1)
716 continue;
0ec74551 717 if (track->Phi()<phimin||track->Phi()>phimax)
718 continue;
2e4d8148 719
0ec74551 720 AliESDtrack copyt(*track);
721 Double_t bfield[3];
722 copyt.GetBxByBz(bfield);
723 AliExternalTrackParam tParam;
724 Bool_t relate = copyt.RelateToVertexBxByBz(vtxSPD,bfield,kVeryBig,&tParam);
725 if (!relate)
726 continue;
727 copyt.Set(tParam.GetX(),tParam.GetAlpha(),tParam.GetParameter(),tParam.GetCovariance());
2e4d8148 728
0ec74551 729 Double_t p[3] = { 0. };
730 copyt.GetPxPyPz(p);
731 Double_t pos[3] = { 0. };
732 copyt.GetXYZ(pos);
733 Double_t covTr[21] = { 0. };
734 copyt.GetCovarianceXYZPxPyPz(covTr);
735 Double_t pid[10] = { 0. };
736 copyt.GetESDpid(pid);
737 AliAODTrack *aTrack = new AliAODTrack(copyt.GetID(),
738 copyt.GetLabel(),
739 p,
740 kTRUE,
741 pos,
742 kFALSE,
743 covTr,
744 (Short_t)copyt.GetSign(),
745 copyt.GetITSClusterMap(),
746 pid,
747 0,/*fPrimaryVertex,*/
748 kTRUE, // check if this is right
749 vtx->UsesTrack(copyt.GetID()));
750 aTrack->SetTPCClusterMap(copyt.GetTPCClusterMap());
751 aTrack->SetTPCSharedMap (copyt.GetTPCSharedMap());
752 Float_t ndf = copyt.GetTPCNcls() + 1 - 5 ;
753 if(ndf>0)
754 aTrack->SetChi2perNDF(copyt.GetTPCchi2()/ndf);
755 else
756 aTrack->SetChi2perNDF(-1);
757 aTrack->SetFlags(copyt.GetStatus());
758 aTrack->SetTPCPointsF(copyt.GetTPCNclsF());
b6c599fe 759 fSelPrimTracks->Add(aTrack);
296ea9b4 760 }
761 } else {
762 Int_t ntracks = tracks->GetEntries();
763 for (Int_t i=0; i<ntracks; ++i) {
764 AliAODTrack *track = static_cast<AliAODTrack*>(tracks->At(i));
765 if (!track)
766 continue;
767 Double_t eta = track->Eta();
768 if (eta<-1||eta>1)
769 continue;
0ec74551 770 if (track->Phi()<phimin||track->Phi()>phimax)
771 continue;
b6c599fe 772 if(track->GetTPCNcls()<fMinNClusPerTr)
296ea9b4 773 continue;
b6c599fe 774 //todo: Learn how to set/filter AODs for prim/sec tracks
775 fSelPrimTracks->Add(track);
296ea9b4 776 }
777 }
778}
779
780//________________________________________________________________________
781void AliAnalysisTaskEMCALPi0PbPb::CalcClusterProps()
782{
783 // Calculate cluster properties
784
785 TObjArray *clusters = fEsdClusters;
786 if (!clusters)
787 clusters = fAodClusters;
788 if (!clusters)
789 return;
790
791 Int_t nclus = clusters->GetEntries();
c4236a58 792 Int_t ntrks = fSelTracks->GetEntries();
793
b6c599fe 794 Bool_t btracks[6][ntrks];
795 memset(btracks,0,sizeof(btracks));
796
296ea9b4 797 for(Int_t i = 0; i<nclus; ++i) {
798 fClusProps[i].Reset();
799
800 AliVCluster *clus = static_cast<AliVCluster*>(clusters->At(i));
801 if (!clus)
802 continue;
803 if (!clus->IsEMCAL())
804 continue;
805 if (clus->E()<fMinE)
806 continue;
807
b6c599fe 808 Float_t clsPos[3] = {0};
296ea9b4 809 clus->GetPosition(clsPos);
04785f50 810 TVector3 clsVec(clsPos);
c4236a58 811 Double_t vertex[3] = {0};
812 InputEvent()->GetPrimaryVertex()->GetXYZ(vertex);
813 TLorentzVector clusterVec;
814 clus->GetMomentum(clusterVec,vertex);
815 Double_t clsEta = clusterVec.Eta();
296ea9b4 816
296ea9b4 817 Double_t mind2 = 1e10;
818 for(Int_t j = 0; j<ntrks; ++j) {
819 AliVTrack *track = static_cast<AliVTrack*>(fSelTracks->At(j));
820 if (!track)
821 continue;
b6c599fe 822
2e4d8148 823 if (TMath::Abs(clsEta-track->Eta())>0.5)
c4236a58 824 continue;
825
b6c599fe 826 TVector3 vec(clsPos);
827 Int_t index = (Int_t)(vec.Phi()*TMath::RadToDeg()/20);
828 if (btracks[index-4][j]) {
829 continue;
830 }
831
296ea9b4 832 Float_t tmpR=-1, tmpZ=-1;
b6c599fe 833 if (!fDoTrMatGeom) {
2e4d8148 834 AliExternalTrackParam *tParam = 0;
835 if (fEsdEv) {
836 AliESDtrack *esdTrack = static_cast<AliESDtrack*>(track);
837 tParam = new AliExternalTrackParam(*esdTrack->GetTPCInnerParam());
838 } else
839 tParam = new AliExternalTrackParam(track);
840
b6c599fe 841 Double_t bfield[3] = {0};
2e4d8148 842 track->GetBxByBz(bfield);
b6c599fe 843 Double_t alpha = (index+0.5)*20*TMath::DegToRad();
844 vec.RotateZ(-alpha); //Rotate the cluster to the local extrapolation coordinate system
2e4d8148 845 tParam->Rotate(alpha); //Rotate the track to the same local extrapolation system
846 Bool_t ret = tParam->PropagateToBxByBz(vec.X(), bfield);
847 if (!ret) {
b6c599fe 848 btracks[index-4][j]=1;
2e4d8148 849 delete tParam;
04785f50 850 continue;
2e4d8148 851 }
b6c599fe 852 Double_t trkPos[3] = {0};
2e4d8148 853 tParam->GetXYZ(trkPos); //Get the extrapolated global position
04785f50 854 tmpR = TMath::Sqrt( TMath::Power(clsPos[0]-trkPos[0],2)+TMath::Power(clsPos[1]-trkPos[1],2)+TMath::Power(clsPos[2]-trkPos[2],2) );
855 tmpZ = clsPos[2]-trkPos[2];
2e4d8148 856 delete tParam;
857 } else {
858 if (TMath::Abs(clsEta-track->Eta())>fIsoDist)
859 continue;
860 AliExternalTrackParam tParam(track);
861 if (!fReco->ExtrapolateTrackToCluster(&tParam, clus, tmpR, tmpZ))
862 continue;
04785f50 863 }
2e4d8148 864
c4236a58 865 Double_t d2 = tmpR;
296ea9b4 866 if (mind2>d2) {
867 mind2=d2;
868 fClusProps[i].fTrIndex = j;
869 fClusProps[i].fTrDz = tmpZ;
c4236a58 870 fClusProps[i].fTrDr = TMath::Sqrt(tmpR*tmpR-tmpZ*tmpZ);
296ea9b4 871 fClusProps[i].fTrDist = d2;
872 fClusProps[i].fTrEp = clus->E()/track->P();
b6c599fe 873 fClusProps[i].fPhiInd = index;
296ea9b4 874 }
875 }
b6c599fe 876
877 if (fClusProps[i].fTrIndex>=0) {
878 Int_t tid = fClusProps[i].fTrIndex;
879 if ( (btracks[0][tid] && fClusProps[i].fPhiInd==0) ||
880 (btracks[1][tid] && fClusProps[i].fPhiInd==1) ) {
881 cout << i << " " << tid << ": Dr " << fClusProps[i].fTrDr << " " << " Dz " << fClusProps[i].fTrDz << endl;
882 cout << btracks[0][tid] << " " << btracks[1][tid] << endl;
883 }
884 fHMatchDr->Fill(fClusProps[i].fTrDr);
885 fHMatchDz->Fill(fClusProps[i].fTrDz);
886 fHMatchEp->Fill(fClusProps[i].fTrEp);
c4236a58 887 }
2e4d8148 888
b6c599fe 889 fClusProps[i].fTrIso = GetTrackIsolation(clusterVec.Eta(),clusterVec.Phi(),fIsoDist);
890 fClusProps[i].fTrIso1 = GetTrackIsolation(clusterVec.Eta(),clusterVec.Phi(),fIsoDist, 1);
891 fClusProps[i].fTrIso2 = GetTrackIsolation(clusterVec.Eta(),clusterVec.Phi(),fIsoDist, 2);
892 fClusProps[i].fCellIso = GetCellIsolation(clsVec.Eta(),clsVec.Phi(),fIsoDist);
296ea9b4 893 }
894}
895
323834f0 896//________________________________________________________________________
897void AliAnalysisTaskEMCALPi0PbPb::ClusterAfterburner()
898{
296ea9b4 899 // Run custer reconstruction afterburner.
323834f0 900
901 AliVCaloCells *cells = fEsdCells;
902 if (!cells)
903 cells = fAodCells;
904
905 if (!cells)
906 return;
907
908 Int_t ncells = cells->GetNumberOfCells();
909 if (ncells<=0)
910 return;
911
912 Double_t cellMeanE = 0, cellSigE = 0;
913 for (Int_t i = 0; i<ncells; ++i) {
914 Double_t cellE = cells->GetAmplitude(i);
915 cellMeanE += cellE;
916 cellSigE += cellE*cellE;
917 }
918 cellMeanE /= ncells;
919 cellSigE /= ncells;
920 cellSigE -= cellMeanE*cellMeanE;
921 if (cellSigE<0)
922 cellSigE = 0;
923 cellSigE = TMath::Sqrt(cellSigE / ncells);
924
925 Double_t subE = cellMeanE - 7*cellSigE;
926 if (subE<0)
927 return;
928
929 for (Int_t i = 0; i<ncells; ++i) {
930 Short_t id=-1;
931 Double_t amp=0,time=0;
932 if (!cells->GetCell(i, id, amp, time))
933 continue;
934 amp -= cellMeanE;
935 if (amp<0.001)
936 amp = 0;
937 cells->SetCell(i, id, amp, time);
938 }
939
940 TObjArray *clusters = fEsdClusters;
941 if (!clusters)
942 clusters = fAodClusters;
323834f0 943 if (!clusters)
944 return;
945
946 Int_t nclus = clusters->GetEntries();
947 for (Int_t i = 0; i<nclus; ++i) {
948 AliVCluster *clus = static_cast<AliVCluster*>(clusters->At(i));
949 if (!clus->IsEMCAL())
950 continue;
951 Int_t nc = clus->GetNCells();
952 Double_t clusE = 0;
953 UShort_t ids[100] = {0};
954 Double_t fra[100] = {0};
955 for (Int_t j = 0; j<nc; ++j) {
956 Short_t id = TMath::Abs(clus->GetCellAbsId(j));
957 Double_t cen = cells->GetCellAmplitude(id);
958 clusE += cen;
959 if (cen>0) {
960 ids[nc] = id;
961 ++nc;
962 }
963 }
964 if (clusE<=0) {
965 clusters->RemoveAt(i);
966 continue;
967 }
968
969 for (Int_t j = 0; j<nc; ++j) {
970 Short_t id = ids[j];
971 Double_t cen = cells->GetCellAmplitude(id);
972 fra[j] = cen/clusE;
973 }
974 clus->SetE(clusE);
975 AliAODCaloCluster *aodclus = dynamic_cast<AliAODCaloCluster*>(clus);
976 if (aodclus) {
977 aodclus->Clear("");
978 aodclus->SetNCells(nc);
979 aodclus->SetCellsAmplitudeFraction(fra);
980 aodclus->SetCellsAbsId(ids);
981 }
982 }
983 clusters->Compress();
984}
985
286b47a5 986//________________________________________________________________________
987void AliAnalysisTaskEMCALPi0PbPb::FillCellHists()
988{
989 // Fill histograms related to cell properties.
d595acbb 990
90d5b88b 991 AliVCaloCells *cells = fEsdCells;
992 if (!cells)
993 cells = fAodCells;
994
296ea9b4 995 if (!cells)
996 return;
90d5b88b 997
296ea9b4 998 Int_t cellModCount[12] = {0};
999 Double_t cellMaxE = 0;
1000 Double_t cellMeanE = 0;
1001 Int_t ncells = cells->GetNumberOfCells();
1002 if (ncells==0)
1003 return;
1004
1005 Int_t nsm = fGeom->GetEMCGeometry()->GetNumberOfSuperModules();
1006
1007 for (Int_t i = 0; i<ncells; ++i) {
1008 Int_t absID = TMath::Abs(cells->GetCellNumber(i));
1009 Double_t cellE = cells->GetAmplitude(i);
1010 fHCellE->Fill(cellE);
1011 if (cellE>cellMaxE)
1012 cellMaxE = cellE;
1013 cellMeanE += cellE;
1014
1015 Int_t iSM=-1, iTower=-1, nIphi=-1, nIeta=-1;
1016 Bool_t ret = fGeom->GetCellIndex(absID, iSM, iTower, nIphi, nIeta);
1017 if (!ret) {
1018 AliError(Form("Could not get cell index for %d", absID));
1019 continue;
1020 }
1021 ++cellModCount[iSM];
1022 Int_t iPhi=-1, iEta=-1;
1023 fGeom->GetCellPhiEtaIndexInSModule(iSM, iTower, nIphi, nIeta, iPhi, iEta);
1024 fHColuRow[iSM]->Fill(iEta,iPhi,1);
1025 fHColuRowE[iSM]->Fill(iEta,iPhi,cellE);
1026 fHCellFreqNoCut[iSM]->Fill(absID);
2e4d8148 1027 if (cellE > 0.1) fHCellFreqCut100M[iSM]->Fill(absID);
1028 if (cellE > 0.3) fHCellFreqCut300M[iSM]->Fill(absID);
296ea9b4 1029 if (fHCellCheckE && fHCellCheckE[absID])
1030 fHCellCheckE[absID]->Fill(cellE);
2e4d8148 1031 fHCellFreqE[iSM]->Fill(absID, cellE);
296ea9b4 1032 }
1033 fHCellH->Fill(cellMaxE);
1034 cellMeanE /= ncells;
1035 fHCellM->Fill(cellMeanE);
1036 fHCellM2->Fill(cellMeanE*ncells/24/48/nsm);
1037 for (Int_t i=0; i<nsm; ++i)
1038 fHCellMult[i]->Fill(cellModCount[i]);
286b47a5 1039}
1040
1041//________________________________________________________________________
1042void AliAnalysisTaskEMCALPi0PbPb::FillClusHists()
1043{
90d5b88b 1044 // Fill histograms related to cluster properties.
fa443410 1045
90d5b88b 1046 TObjArray *clusters = fEsdClusters;
1047 if (!clusters)
1048 clusters = fAodClusters;
296ea9b4 1049 if (!clusters)
1050 return;
90d5b88b 1051
296ea9b4 1052 Double_t vertex[3] = {0};
1053 InputEvent()->GetPrimaryVertex()->GetXYZ(vertex);
1054
1055 Int_t nclus = clusters->GetEntries();
1056 for(Int_t i = 0; i<nclus; ++i) {
1057 AliVCluster *clus = static_cast<AliVCluster*>(clusters->At(i));
1058 if (!clus)
1059 continue;
1060 if (!clus->IsEMCAL())
1061 continue;
90d5b88b 1062 TLorentzVector clusterVec;
296ea9b4 1063 clus->GetMomentum(clusterVec,vertex);
1064 Double_t maxAxis = 0, minAxis = 0;
1065 GetSigma(clus,maxAxis,minAxis);
788ca675 1066 clus->SetTOF(maxAxis); // store sigma in TOF
296ea9b4 1067 Double_t clusterEcc = 0;
1068 if (maxAxis > 0)
1069 clusterEcc = TMath::Sqrt(1.0 - minAxis*minAxis/(maxAxis*maxAxis));
1070 clus->SetChi2(clusterEcc); // store ecc in chi2
1071 fHClustEccentricity->Fill(clusterEcc);
1072 fHClustEtaPhi->Fill(clusterVec.Eta(),clusterVec.Phi());
1073 fHClustEnergyPt->Fill(clusterVec.E(),clusterVec.Pt());
1074 fHClustEnergySigma->Fill(clus->E()*maxAxis,clus->E());
1075 fHClustSigmaSigma->Fill(max(clus->GetM02(),clus->GetM20()),clus->E()*maxAxis);
1076 fHClustNCellEnergyRatio->Fill(clus->GetNCells(),GetMaxCellEnergy(clus)/clus->E());
788ca675 1077 }
1078}
b3ee6797 1079
788ca675 1080//________________________________________________________________________
1081void AliAnalysisTaskEMCALPi0PbPb::FillNtuple()
1082{
1083 // Fill ntuple.
1084
1085 if (!fNtuple)
1086 return;
1087
1088 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
1089 if (fAodEv) {
1090 fHeader->fRun = fAodEv->GetRunNumber();
1091 fHeader->fOrbit = fAodEv->GetHeader()->GetOrbitNumber();
1092 fHeader->fPeriod = fAodEv->GetHeader()->GetPeriodNumber();
1093 fHeader->fBx = fAodEv->GetHeader()->GetBunchCrossNumber();
1094 fHeader->fL0 = fAodEv->GetHeader()->GetL0TriggerInputs();
1095 fHeader->fL1 = fAodEv->GetHeader()->GetL1TriggerInputs();
1096 fHeader->fL2 = fAodEv->GetHeader()->GetL2TriggerInputs();
1097 fHeader->fTrClassMask = fAodEv->GetHeader()->GetTriggerMask();
1098 fHeader->fTrCluster = fAodEv->GetHeader()->GetTriggerCluster();
1099 fHeader->fOffTriggers = fAodEv->GetHeader()->GetOfflineTrigger();
1100 fHeader->fFiredTriggers = fAodEv->GetHeader()->GetFiredTriggerClasses();
1101 } else {
1102 fHeader->fRun = fEsdEv->GetRunNumber();
1103 fHeader->fOrbit = fEsdEv->GetHeader()->GetOrbitNumber();
1104 fHeader->fPeriod = fEsdEv->GetESDRun()->GetPeriodNumber();
1105 fHeader->fBx = fEsdEv->GetHeader()->GetBunchCrossNumber();
1106 fHeader->fL0 = fEsdEv->GetHeader()->GetL0TriggerInputs();
1107 fHeader->fL1 = fEsdEv->GetHeader()->GetL1TriggerInputs();
1108 fHeader->fL2 = fEsdEv->GetHeader()->GetL2TriggerInputs();
1109 fHeader->fTrClassMask = fEsdEv->GetHeader()->GetTriggerMask();
1110 fHeader->fTrCluster = fEsdEv->GetHeader()->GetTriggerCluster();
1111 fHeader->fOffTriggers = ((AliInputEventHandler*)(am->GetInputEventHandler()))->IsEventSelected();
1112 fHeader->fFiredTriggers = fEsdEv->GetFiredTriggerClasses();
1113 }
1114 AliCentrality *cent = InputEvent()->GetCentrality();
1115 fHeader->fV0Cent = cent->GetCentralityPercentileUnchecked("V0M");
1116 fHeader->fCl1Cent = cent->GetCentralityPercentileUnchecked("CL1");
1117 fHeader->fTrCent = cent->GetCentralityPercentileUnchecked("TRK");
1118 fHeader->fCqual = cent->GetQuality();
b6c599fe 1119
1120 AliEventplane *ep = InputEvent()->GetEventplane();
1121 if (ep) {
1122 if (ep->GetQVector())
1123 fHeader->fPsi = ep->GetQVector()->Phi()/2. ;
1124 fHeader->fPsi = -1;
1125 if (ep->GetQsub1()&&ep->GetQsub2())
1126 fHeader->fPsiRes = ep->GetQsub1()->Phi()/2.-ep->GetQsub2()->Phi()/2.;
1127 else
1128 fHeader->fPsiRes = 0;
1129 }
1130
788ca675 1131 Double_t val = 0;
1132 TString trgclasses(fHeader->fFiredTriggers);
1133 for (Int_t j = 0; j<fTrClassNamesArr->GetEntries(); ++j) {
1134 const char *name = fTrClassNamesArr->At(j)->GetName();
1135 if (trgclasses.Contains(name))
1136 val += TMath::Power(2,j);
1137 }
1138 fHeader->fTcls = (UInt_t)val;
1139
1140 if (fAodEv) {
1141 am->LoadBranch("vertices");
1142 AliAODVertex *pv = fAodEv->GetPrimaryVertex();
1143 FillVertex(fPrimVert, pv);
1144 AliAODVertex *sv = fAodEv->GetPrimaryVertexSPD();
1145 FillVertex(fSpdVert, sv);
1146 } else {
1147 am->LoadBranch("PrimaryVertex.");
1148 const AliESDVertex *pv = fEsdEv->GetPrimaryVertexTracks();
1149 FillVertex(fPrimVert, pv);
1150 am->LoadBranch("SPDVertex.");
1151 const AliESDVertex *sv = fEsdEv->GetPrimaryVertexSPD();
1152 FillVertex(fSpdVert, sv);
1153 am->LoadBranch("TPCVertex.");
1154 const AliESDVertex *tv = fEsdEv->GetPrimaryVertexTPC();
1155 FillVertex(fTpcVert, tv);
fa443410 1156 }
788ca675 1157
1158 TObjArray *clusters = fEsdClusters;
1159 if (!clusters)
1160 clusters = fAodClusters;
1161 if (!clusters)
1162 return;
1163
1164 fClusters->Clear();
1165 Int_t nclus = clusters->GetEntries();
1166 for(Int_t i=0,ncl=0; i<nclus; ++i) {
1167 AliVCluster *clus = static_cast<AliVCluster*>(clusters->At(i));
1168 if (!clus)
1169 continue;
1170 if (!clus->IsEMCAL())
1171 continue;
1172 if (clus->E()<fMinE)
1173 continue;
1174
1175 AliStaCluster *cl = static_cast<AliStaCluster*>(fClusters->New(ncl++));
1176 cl->fE = clus->E();
1177 Float_t pos[3];
1178 clus->GetPosition(pos);
1179 TVector3 vpos(pos);
1180 cl->fR = vpos.Perp();
1181 cl->fEta = vpos.Eta();
1182 cl->fPhi = vpos.Phi();
b6c599fe 1183 cl->fN = clus->GetNCells();
788ca675 1184 cl->fN1 = GetNCells(clus,0.100);
1185 cl->fN3 = GetNCells(clus,0.300);
1186 Short_t id = -1;
1187 Double_t emax = GetMaxCellEnergy(clus, id);
1188 cl->fIdMax = id;
1189 cl->fEmax = emax;
1190 cl->fDbc = clus->GetDistanceToBadChannel();;
1191 cl->fDisp = clus->GetDispersion();
1192 cl->fM20 = clus->GetM20();
1193 cl->fM02 = clus->GetM02();
1194 cl->fEcc = clus->Chi2(); //eccentricity
1195 cl->fSig = clus->GetTOF(); //sigma
1196 cl->fTrDz = fClusProps[i].fTrDz;
1197 cl->fTrDr = fClusProps[i].fTrDr;;
1198 cl->fTrEp = fClusProps[i].fTrEp;;
1199 cl->fTrIso = fClusProps[i].fTrIso;
b6c599fe 1200 cl->fTrIso1 = fClusProps[i].fTrIso1;
1201 cl->fTrIso2 = fClusProps[i].fTrIso2;
788ca675 1202 cl->fCeIso = fClusProps[i].fCellIso;
1203 }
1204 fNtuple->Fill();
286b47a5 1205}
1206
1207//________________________________________________________________________
1208void AliAnalysisTaskEMCALPi0PbPb::FillPionHists()
1209{
1210 // Fill histograms related to pions.
286b47a5 1211
296ea9b4 1212 Double_t vertex[3] = {0};
fa443410 1213 InputEvent()->GetPrimaryVertex()->GetXYZ(vertex);
1214
90d5b88b 1215 TObjArray *clusters = fEsdClusters;
1216 if (!clusters)
1217 clusters = fAodClusters;
fa443410 1218
90d5b88b 1219 if (clusters) {
1220 TLorentzVector clusterVec1;
1221 TLorentzVector clusterVec2;
1222 TLorentzVector pionVec;
1223
1224 Int_t nclus = clusters->GetEntries();
fa443410 1225 for (Int_t i = 0; i<nclus; ++i) {
90d5b88b 1226 AliVCluster *clus1 = static_cast<AliVCluster*>(clusters->At(i));
fa443410 1227 if (!clus1)
1228 continue;
1229 if (!clus1->IsEMCAL())
1230 continue;
3c661da5 1231 if (clus1->E()<fMinE)
6eb6260e 1232 continue;
a49742b5 1233 if (clus1->GetNCells()<fNminCells)
1234 continue;
f224d35b 1235 if (GetMaxCellEnergy(clus1)/clus1->E()<fMinErat)
1236 continue;
3c661da5 1237 if (clus1->Chi2()<fMinEcc) // eccentricity cut
f224d35b 1238 continue;
fa443410 1239 clus1->GetMomentum(clusterVec1,vertex);
1240 for (Int_t j = i+1; j<nclus; ++j) {
90d5b88b 1241 AliVCluster *clus2 = static_cast<AliVCluster*>(clusters->At(j));
fa443410 1242 if (!clus2)
1243 continue;
1244 if (!clus2->IsEMCAL())
1245 continue;
3c661da5 1246 if (clus2->E()<fMinE)
6eb6260e 1247 continue;
a49742b5 1248 if (clus2->GetNCells()<fNminCells)
1249 continue;
f224d35b 1250 if (GetMaxCellEnergy(clus2)/clus2->E()<fMinErat)
1251 continue;
3c661da5 1252 if (clus2->Chi2()<fMinEcc) // eccentricity cut
f224d35b 1253 continue;
fa443410 1254 clus2->GetMomentum(clusterVec2,vertex);
1255 pionVec = clusterVec1 + clusterVec2;
1256 Double_t pionZgg = TMath::Abs(clusterVec1.E()-clusterVec2.E())/pionVec.E();
6eb6260e 1257 Double_t pionOpeningAngle = clusterVec1.Angle(clusterVec2.Vect());
d595acbb 1258 if (pionZgg < fAsymMax) {
1259 fHPionEtaPhi->Fill(pionVec.Eta(),pionVec.Phi());
1260 fHPionMggPt->Fill(pionVec.M(),pionVec.Pt());
1261 fHPionMggAsym->Fill(pionVec.M(),pionZgg);
6eb6260e 1262 fHPionMggDgg->Fill(pionVec.M(),pionOpeningAngle);
d595acbb 1263 Int_t bin = fPtRanges->FindBin(pionVec.Pt());
1264 fHPionInvMasses[bin]->Fill(pionVec.M());
1265 }
fa443410 1266 }
1267 }
90d5b88b 1268 }
fa443410 1269}
d595acbb 1270
6eb6260e 1271//________________________________________________________________________
323834f0 1272void AliAnalysisTaskEMCALPi0PbPb::FillOtherHists()
6eb6260e 1273{
788ca675 1274 // Fill other histograms.
1275}
1276
1277//__________________________________________________________________________________________________
1278void AliAnalysisTaskEMCALPi0PbPb::FillVertex(AliStaVertex *v, const AliESDVertex *esdv)
1279{
1280 // Fill vertex from ESD vertex info.
1281
1282 v->fVx = esdv->GetX();
1283 v->fVy = esdv->GetY();
1284 v->fVz = esdv->GetZ();
1285 v->fVc = esdv->GetNContributors();
1286 v->fDisp = esdv->GetDispersion();
1287 v->fZres = esdv->GetZRes();
1288 v->fChi2 = esdv->GetChi2();
1289 v->fSt = esdv->GetStatus();
1290 v->fIs3D = esdv->IsFromVertexer3D();
1291 v->fIsZ = esdv->IsFromVertexerZ();
1292}
1293
1294//__________________________________________________________________________________________________
1295void AliAnalysisTaskEMCALPi0PbPb::FillVertex(AliStaVertex *v, const AliAODVertex *aodv)
1296{
1297 // Fill vertex from AOD vertex info.
1298
1299 v->fVx = aodv->GetX();
1300 v->fVy = aodv->GetY();
1301 v->fVz = aodv->GetZ();
1302 v->fVc = aodv->GetNContributors();
1303 v->fChi2 = aodv->GetChi2();
6eb6260e 1304}
1305
d595acbb 1306//________________________________________________________________________
296ea9b4 1307Double_t AliAnalysisTaskEMCALPi0PbPb::GetCellIsolation(Double_t cEta, Double_t cPhi, Double_t radius) const
1308{
1309 // Compute isolation based on cell content.
1310
1311 AliVCaloCells *cells = fEsdCells;
1312 if (!cells)
1313 cells = fAodCells;
1314 if (!cells)
1315 return 0;
1316
1317 Double_t cellIsolation = 0;
1318 Double_t rad2 = radius*radius;
1319 Int_t ncells = cells->GetNumberOfCells();
1320 for (Int_t i = 0; i<ncells; ++i) {
1321 Int_t absID = TMath::Abs(cells->GetCellNumber(i));
1322 Double_t cellE = cells->GetAmplitude(i);
1323 Float_t eta, phi;
1324 fGeom->EtaPhiFromIndex(absID,eta,phi);
1325 Double_t phidiff = TVector2::Phi_0_2pi(phi-cPhi);
1326 Double_t dist = (eta-cEta)*(eta-cEta)+phidiff*phidiff;
1327 if(dist>rad2)
1328 continue;
1329 cellIsolation += cellE;
1330 }
1331 return cellIsolation;
1332}
1333
1334//________________________________________________________________________
788ca675 1335Double_t AliAnalysisTaskEMCALPi0PbPb::GetMaxCellEnergy(AliVCluster *cluster, Short_t &id) const
d595acbb 1336{
90d5b88b 1337 // Get maximum energy of attached cell.
1338
788ca675 1339 id = -1;
90d5b88b 1340 Double_t maxe = 0;
90d5b88b 1341 Int_t ncells = cluster->GetNCells();
1342 if (fEsdCells) {
1343 for (Int_t i=0; i<ncells; i++) {
27422847 1344 Double_t e = fEsdCells->GetCellAmplitude(TMath::Abs(cluster->GetCellAbsId(i)));
f0897c18 1345 if (e>maxe) {
90d5b88b 1346 maxe = e;
788ca675 1347 id = cluster->GetCellAbsId(i);
f0897c18 1348 }
90d5b88b 1349 }
1350 } else {
1351 for (Int_t i=0; i<ncells; i++) {
27422847 1352 Double_t e = fAodCells->GetCellAmplitude(TMath::Abs(cluster->GetCellAbsId(i)));
90d5b88b 1353 if (e>maxe)
1354 maxe = e;
788ca675 1355 id = cluster->GetCellAbsId(i);
90d5b88b 1356 }
1357 }
6eb6260e 1358 return maxe;
d595acbb 1359}
1360
1361//________________________________________________________________________
296ea9b4 1362void AliAnalysisTaskEMCALPi0PbPb::GetSigma(AliVCluster *c, Double_t& sigmaMax, Double_t &sigmaMin) const
d595acbb 1363{
90d5b88b 1364 // Calculate the (E) weighted variance along the longer (eigen) axis.
1365
6bf90832 1366 sigmaMax = 0; // cluster variance along its longer axis
1367 sigmaMin = 0; // cluster variance along its shorter axis
1368 Double_t Ec = c->E(); // cluster energy
296ea9b4 1369 if(Ec<=0)
1370 return;
6bf90832 1371 Double_t Xc = 0 ; // cluster first moment along X
1372 Double_t Yc = 0 ; // cluster first moment along Y
1373 Double_t Sxx = 0 ; // cluster second central moment along X (variance_X^2)
1374 Double_t Sxy = 0 ; // cluster second central moment along Y (variance_Y^2)
1375 Double_t Syy = 0 ; // cluster covariance^2
90d5b88b 1376
1377 AliVCaloCells *cells = fEsdCells;
1378 if (!cells)
1379 cells = fAodCells;
1380
6eb6260e 1381 if (!cells)
1382 return;
1383
6bf90832 1384 Int_t ncells = c->GetNCells();
6eb6260e 1385 if (ncells==1)
1386 return;
1387
1388 TVector3 pos;
1389 for(Int_t j=0; j<ncells; ++j) {
6bf90832 1390 Int_t id = TMath::Abs(c->GetCellAbsId(j));
27422847 1391 fGeom->GetGlobal(id,pos);
6eb6260e 1392 Double_t cellen = cells->GetCellAmplitude(id);
1393 Xc += cellen*pos.X();
1394 Yc += cellen*pos.Y();
1395 Sxx += cellen*pos.X()*pos.X();
1396 Syy += cellen*pos.Y()*pos.Y();
1397 Sxy += cellen*pos.X()*pos.Y();
1398 }
1399 Xc /= Ec;
1400 Yc /= Ec;
1401 Sxx /= Ec;
1402 Syy /= Ec;
1403 Sxy /= Ec;
1404 Sxx -= Xc*Xc;
1405 Syy -= Yc*Yc;
1406 Sxy -= Xc*Yc;
f0897c18 1407 Sxx = TMath::Abs(Sxx);
1408 Syy = TMath::Abs(Syy);
296ea9b4 1409 sigmaMax = (Sxx + Syy + TMath::Sqrt(TMath::Abs((Sxx-Syy)*(Sxx-Syy)+4.0*Sxy*Sxy)))/2.0;
1410 sigmaMax = TMath::Sqrt(TMath::Abs(sigmaMax));
1411 sigmaMin = TMath::Abs(Sxx + Syy - TMath::Sqrt(TMath::Abs((Sxx-Syy)*(Sxx-Syy)+4.0*Sxy*Sxy)))/2.0;
1412 sigmaMin = TMath::Sqrt(TMath::Abs(sigmaMin));
d595acbb 1413}
90d5b88b 1414
6bf90832 1415//________________________________________________________________________
296ea9b4 1416Int_t AliAnalysisTaskEMCALPi0PbPb::GetNCells(AliVCluster *c, Double_t emin) const
6bf90832 1417{
1418 // Calculate number of attached cells above emin.
1419
6bf90832 1420 AliVCaloCells *cells = fEsdCells;
1421 if (!cells)
1422 cells = fAodCells;
6bf90832 1423 if (!cells)
296ea9b4 1424 return 0;
6bf90832 1425
296ea9b4 1426 Int_t n = 0;
6bf90832 1427 Int_t ncells = c->GetNCells();
1428 for(Int_t j=0; j<ncells; ++j) {
1429 Int_t id = TMath::Abs(c->GetCellAbsId(j));
1430 Double_t cellen = cells->GetCellAmplitude(id);
1431 if (cellen>=emin)
1432 ++n;
1433 }
1434 return n;
1435}
1436
296ea9b4 1437//________________________________________________________________________
b6c599fe 1438Double_t AliAnalysisTaskEMCALPi0PbPb::GetTrackIsolation(Double_t cEta, Double_t cPhi, Double_t radius, Double_t pt) const
296ea9b4 1439{
1440 // Compute isolation based on tracks.
1441
1442 Double_t trkIsolation = 0;
1443 Double_t rad2 = radius*radius;
b6c599fe 1444 Int_t ntrks = fSelPrimTracks->GetEntries();
296ea9b4 1445 for(Int_t j = 0; j<ntrks; ++j) {
1446 AliVTrack *track = static_cast<AliVTrack*>(fSelTracks->At(j));
1447 if (!track)
1448 continue;
b6c599fe 1449 if (track->Pt()<pt)
1450 continue;
296ea9b4 1451 Float_t eta = track->Eta();
1452 Float_t phi = track->Phi();
1453 Double_t phidiff = TVector2::Phi_0_2pi(phi-cPhi);
1454 Double_t dist = (eta-cEta)*(eta-cEta)+phidiff*phidiff;
1455 if(dist>rad2)
1456 continue;
1457 trkIsolation += track->Pt();
1458 }
1459 return trkIsolation;
1460}