7 #include <TProfile2D.h>
12 #include <TClonesArray.h>
16 #include <TLorentzVector.h>
21 #include "AliAODHandler.h"
22 #include "AliAODEvent.h"
23 #include "AliAODInputHandler.h"
24 #include "AliAnalysisManager.h"
25 #include "AliAnalysisTask.h"
26 #include "AliCentrality.h"
28 #include "AliESDEvent.h"
29 #include "AliESDInputHandler.h"
30 #include "AliESDtrack.h"
31 #include "AliESDtrackCuts.h"
32 #include "AliVParticle.h"
33 #include "AliVTrack.h"
34 #include "AliInputEventHandler.h"
35 #include "AliMCEvent.h"
37 #include "AliGenEventHeader.h"
38 #include "AliGenPythiaEventHeader.h"
41 #include "AliAODMCParticle.h"
45 #include "AliAnalysisTaskFastEmbedding.h"
47 #include "AliAODJet.h"
48 #include "AliAODJetEventBackground.h"
64 fVerbosity(0), fIsEmbedding(kFALSE), fAnaType(0), fPeriod("lhc11h"),
fCollisionSystem("PbPb"),
65 fIsMC(kFALSE), fAnalyzeMCTruth(kFALSE), fMC(0),
66 fEvent(0x0), fESD(0x0), fAODIn(0x0), fAODOut(0x0), fAODExtension(0x0),
67 fOfflineTrgMask(AliVEvent::kAny), fTriggerType(-1), fCentrality(-1), fMaxVtxZ(10),
68 fEsdTrkCut(0x0), fEsdHybCut(0x0), fFilterMask(0), fRequireITSRefit(kTRUE), fRequireSharedClsCut(kTRUE),
69 fIsInit(kFALSE), fNonStdFile(""), fMcParticleArrName(""), fMcParticleArray(0x0), fMcParticlelMap(0x0),
70 fEmbTrkArrName(""), fEmbTrkArray(0x0), fTrackArrName(""), fTrackArray(0x0),
71 fTriggerTrkIndex(-1), fTriggerTrkPt(-1), fSwitchOnAvoidTpcHole(kFALSE), fAvoidTpcHole(0), fCutTPCBoundary(kFALSE), fDistToTPCBoundary(0.),
72 fMinTrkPt(0.15), fMaxTrkPt(1e4), fMinTrkEta(-0.9), fMaxTrkEta(0.9), fMinTrkPhi(0), fMaxTrkPhi(2*pi),
73 fRadius(0.4), fJetArrName(""), fPLJetArrName(""), fDLJetArrName(""), fJetArray(0x0), fPLJetArray(0x0), fDLJetArray(0x0),
74 fRhoName(""), fRho(0x0), fRhoValue(0), fEvtBkg(0x0), fPtHardBinName(0x0), fPtHardBin(-1),
75 fRunTrkQA(kFALSE), fRunJetQA(kFALSE), fRunSingleInclHJet(kFALSE), fTTtype(0), fTTMinPt(9), fTTMaxPt(10), fJetPtMin(10),
76 fRunPLHJet(kFALSE), fRunDLHJet(kFALSE), fRunLeadTrkQA(kFALSE), fStudyKtEffects(kFALSE), fKtValue(0), fRandom(0),
78 fOutputList(0x0), fhEventStat(0x0), fhNTrials(0x0), fhPtHardBins(0x0)
88 for(
Int_t i=0; i<4; i++)
91 fhCentrality[i] = 0x0;
99 fhNumberOfTT[i] = 0x0;
100 for(
Int_t j=0; j<3; j++)
103 fhJetArea[i][j] = 0x0;
107 fHJetPhiCorr[i][j] = 0x0;
109 fHJetPhiCorrUp[i] = 0x0;
110 fHJetPhiCorrDown[i] = 0x0;
112 fhLeadTrkQA[i] = 0x0;
113 fhKtEffects[i] = 0x0;
116 fAODfilterBits[0] = -1;
117 fAODfilterBits[1] = -1;
123 fVerbosity(0), fIsEmbedding(kFALSE), fAnaType(0), fPeriod(
"lhc11h"),
fCollisionSystem(
"PbPb"),
124 fIsMC(kFALSE), fAnalyzeMCTruth(kFALSE), fMC(0),
125 fEvent(0x0), fESD(0x0), fAODIn(0x0), fAODOut(0x0), fAODExtension(0x0),
126 fOfflineTrgMask(AliVEvent::kAny), fTriggerType(-1), fCentrality(-1), fMaxVtxZ(10),
127 fEsdTrkCut(0x0), fEsdHybCut(0x0), fFilterMask(0), fRequireITSRefit(kTRUE), fRequireSharedClsCut(kTRUE),
128 fIsInit(kFALSE), fNonStdFile(
""), fMcParticleArrName(
""), fMcParticleArray(0x0), fMcParticlelMap(0x0),
129 fEmbTrkArrName(
""), fEmbTrkArray(0x0), fTrackArrName(
""), fTrackArray(0x0),
130 fTriggerTrkIndex(-1), fTriggerTrkPt(-1), fSwitchOnAvoidTpcHole(kFALSE), fAvoidTpcHole(0), fCutTPCBoundary(kFALSE), fDistToTPCBoundary(0.),
131 fMinTrkPt(0.15), fMaxTrkPt(1e4), fMinTrkEta(-0.9), fMaxTrkEta(0.9), fMinTrkPhi(0), fMaxTrkPhi(2*
pi),
132 fRadius(0.4), fJetArrName(
""), fPLJetArrName(
""), fDLJetArrName(
""), fJetArray(0x0), fPLJetArray(0x0), fDLJetArray(0x0),
133 fRhoName(
""), fRho(0x0), fRhoValue(0), fEvtBkg(0x0), fPtHardBinName(0x0), fPtHardBin(-1),
134 fRunTrkQA(kFALSE), fRunJetQA(kFALSE), fRunSingleInclHJet(kFALSE), fTTtype(0), fTTMinPt(9), fTTMaxPt(10), fJetPtMin(10),
135 fRunPLHJet(kFALSE), fRunDLHJet(kFALSE), fRunLeadTrkQA(kFALSE), fStudyKtEffects(kFALSE), fKtValue(0), fRandom(0),
137 fOutputList(0x0), fhEventStat(0x0), fhNTrials(0x0), fhPtHardBins(0x0)
143 DefineInput(0, TChain::Class());
144 DefineOutput(1, TList::Class());
147 for(
Int_t i=0; i<4; i++)
159 for(
Int_t j=0; j<3; j++)
196 const Int_t nTrkPtBins = 100;
197 const Float_t lowTrkPtBin=0, upTrkPtBin=100;
198 const Int_t nJetPtBins = 300;
199 const Float_t lowJetPtBin=-100, upJetPtBin=200;
202 const Int_t dimTrkqa = 4;
203 const Int_t nBinsTrkqa[dimTrkqa] = {nTrkPtBins/5, 36, 40, 10};
204 const Double_t lowBinTrkqa[dimTrkqa] = {lowTrkPtBin, 0, -1, 0};
205 const Double_t hiBinTrkqa[dimTrkqa] = {upTrkPtBin, 360, 1, 10};
207 const Int_t dimTrkRes = 5;
208 const Int_t nBinsTrkRes[dimTrkRes] = {nTrkPtBins, 50, 50, 3, 10};
209 const Double_t lowBinTrkRes[dimTrkRes] = {lowTrkPtBin, 0, 0, 0, 0};
210 const Double_t hiBinTrkRes[dimTrkRes] = {upTrkPtBin, 0.5, 0.5, 3, 10};
212 const Int_t dimPhiRes = 4;
213 const Int_t nBinsPhiRes[dimPhiRes] = {nTrkPtBins, 200, 3, 10};
214 const Double_t lowBinPhiRes[dimPhiRes] = {lowTrkPtBin, -0.00995, 0, 0};
215 const Double_t hiBinPhiRes[dimPhiRes] = {upTrkPtBin, 0.01005, 3, 10};
218 const Int_t dimJetpt = 4;
219 const Int_t nBinsJetpt[dimJetpt] = {nJetPtBins, 300, 10, 10};
220 const Double_t lowBinJetpt[dimJetpt] = {lowJetPtBin, 0, 0, 0};
221 const Double_t hiBinJetpt[dimJetpt] = {upJetPtBin, 300, 10, 10};
223 const Int_t dimJetA = 4;
224 const Int_t nBinsJetA[dimJetA] = {nJetPtBins, 100, 10, 10};
225 const Double_t lowBinJetA[dimJetA] = {lowJetPtBin, 0, 0, 0};
226 const Double_t hiBinJetA[dimJetA] = {upJetPtBin, 1, 10, 10};
228 const Int_t dimJetqa = 7;
229 const Int_t nBinsJetqa[dimJetqa] = {nJetPtBins/5, 36, 24, 6, 100, 10, 11};
230 const Double_t lowBinJetqa[dimJetqa] = {lowJetPtBin, 0, -0.6, 0, 0, 0, 0};
231 const Double_t hiBinJetqa[dimJetqa] = {upJetPtBin, 360, 0.6, 1.2, 500, 10, 11};
234 const Int_t dimTT = 4;
235 const Int_t nBinsTT[dimTT] = {nTrkPtBins, 10, 11, 10};
236 const Double_t lowBinTT[dimTT] = {lowTrkPtBin, 0, 0, 0};
237 const Double_t hiBinTT[dimTT] = {upTrkPtBin, 100, 11, 10};
239 const Int_t dimCor = 8;
240 const Int_t nBinsCor[dimCor] = {nTrkPtBins, nJetPtBins, 140, 6, 10, 40, 11, 10};
241 const Double_t lowBinCor[dimCor] = {lowTrkPtBin,lowJetPtBin,
pi-4.95, 0, 0, -1.95, 0, 0};
242 const Double_t hiBinCor[dimCor] = {upTrkPtBin, upJetPtBin,
pi+2.05, 1.2, 100, 2.05, 11, 10};
245 const Int_t dimLeadTrkqa = 5;
246 const Int_t nBinsLeadTrkqa[dimLeadTrkqa] = {nTrkPtBins, 200, 80, 55, 10};
247 const Double_t lowBinLeadTrkqa[dimLeadTrkqa] = {lowTrkPtBin, 0, -0.4, 0, 0};
248 const Double_t hiBinLeadTrkqa[dimLeadTrkqa] = {upTrkPtBin, 200, 0.4, 1.1, 100};
251 const Int_t dimKt = 5;
252 const Int_t nBinsKt[dimKt] = {nTrkPtBins, 20, 81, 10, 11};
253 const Double_t lowBinKt[dimKt] = {lowTrkPtBin, 0, -40.5, 0, 0};
254 const Double_t hiBinKt[dimKt] = {upTrkPtBin, 200, 40.5, 10, 11};
261 Bool_t oldStatus = TH1::AddDirectoryStatus();
262 if(
fAnaType==1) TH1::AddDirectory(kFALSE);
264 fhEventStat =
new TH1F(
"fhEventStat",
"Event statistics for jet analysis",8,0,8);
268 fhEventStat->GetXaxis()->SetBinLabel(4,
"Vtx+10cm");
270 fhEventStat->GetXaxis()->SetBinLabel(6,
"kCentral");
271 fhEventStat->GetXaxis()->SetBinLabel(7,
"kSemiCentral");
272 fhEventStat->GetXaxis()->SetBinLabel(8,
"kJetService");
275 fhNTrials =
new TH1F(
"fhNTrials",
"Number of trials",1,0,1);
278 fhPtHardBins =
new TH1F(
"fhPtHardBins",
"Number of events in each pT hard bin",11,0,11);
281 const char *triggerName[4] = {
"kMB",
"kEGA",
"kEJE",
"MC"};
282 const char *dataType[3] = {
"",
"_DL",
"_PL"};
283 const char *dataName[3] = {
"Data",
"DL",
"PL"};
285 Double_t newbins[7] = {0,0.07,0.2,0.4,0.6,0.8,1};
287 for(
Int_t i=0; i<4; i++)
295 if(
fPeriod==
"lhc11a" && i>1 )
continue;
296 if(
fPeriod==
"lhc10h" && i!=0 )
continue;
297 if(
fPeriod==
"lhc11h" && i!=0 )
continue;
298 if(
fPeriod.Contains(
"lhc12a15a") && i!=0 )
continue;
299 if(
fPeriod.Contains(
"lhc12a15e") && i!=0 )
continue;
302 fhVtxZ[i] =
new TH1F(Form(
"%s_fhVtxZ",triggerName[i]),Form(
"%s: z distribution of event vertexz;z(cm)",triggerName[i]),400,-20,20);
305 fhCentrality[i] =
new TH1F(Form(
"%s_fhCentrality",triggerName[i]),Form(
"%s: Event centrality;centrality",triggerName[i]),100,0,100);
308 fhRhoVsCent[i] =
new TH2F(Form(
"%s_fhRhoVsCent",triggerName[i]),Form(
"%s: Rho vs centrality (R=%1.1f);centrality;Rho",triggerName[i],
fRadius),100,0,100,300,0,300);
313 fhTrkPt[i] =
new TH2F(Form(
"%s_fhTrkPt",triggerName[i]),Form(
"%s: Track p_{T} vs centrality;p_{T}^{track} (GeV/c);Centrality",triggerName[i]),nTrkPtBins,lowTrkPtBin,upTrkPtBin,10,0,100);
316 fhTrkQA[i] =
new THnSparseF(Form(
"%s_fhTrkQA",triggerName[i]),Form(
"%s: track p_{T} vs #phi vs #eta vs centrality;p_{T,track} (GeV/c);#phi;#eta;centrality",triggerName[i]),dimTrkqa,nBinsTrkqa,lowBinTrkqa,hiBinTrkqa);
319 fhTrkPtRes[i] =
new THnSparseF(Form(
"%s_fhTrkPtRes",triggerName[i]),Form(
"%s: track p_{T} vs resolution vs (p_{T}^{gen}-p_{T}^{rec})/p_{T}^{gen} vs type vs centrality;p_{T,track} (GeV/c);#sigma(p_{T})/p_{T};type;centrality",triggerName[i]),dimTrkRes,nBinsTrkRes,lowBinTrkRes,hiBinTrkRes);
322 fhTrkPhiRes[i] =
new THnSparseF(Form(
"%s_fhTrkPhiRes",triggerName[i]),Form(
"%s: track p_{T} vs #varphi^{gen}-#varphi^{rec} vs type vs centrality;p_{T,track} (GeV/c);#Delta#varphi;type;centrality",triggerName[i]),dimPhiRes,nBinsPhiRes,lowBinPhiRes,hiBinPhiRes);
326 for(
Int_t j=0; j<3; j++)
332 fhJetPt[i][j] =
new THnSparseF(Form(
"%s_fhJetPt%s",triggerName[i],dataType[j]),Form(
"%s-%s: jet p_{T} vs raw jet p_{T} vs centrality vs pt hard bin (R=%1.1f);p_{T,jet}^{ch} (GeV/c);p_{T,jet}^{raw} (GeV/c);centrality;ptHardBin",dataName[j],triggerName[i],
fRadius),dimJetpt,nBinsJetpt,lowBinJetpt,hiBinJetpt);
335 fhJetArea[i][j] =
new THnSparseF(Form(
"%s_fhJetArea%s",triggerName[i],dataType[j]),Form(
"%s-%s: jet p_{T} vs area vs centrality vs pt hard bin (R=%1.1f);p_{T,jet}^{ch} (GeV/c);area;centrality;ptHardBin",dataName[j],triggerName[i],
fRadius),dimJetA,nBinsJetA,lowBinJetA,hiBinJetA);
338 fhJetQA[i][j] =
new THnSparseF(Form(
"%s_fhJetQA%s",triggerName[i],dataType[j]),Form(
"%s-%s: jet p_{T} vs #phi vs #eta vs area vs # of constituents vs centrality vs pt hard bin (R=%1.1f);p_{T,jet}^{ch} (GeV/c);#phi;#eta;area;# of constituents;centrality;ptHardBin",dataName[j],triggerName[i],
fRadius),dimJetqa,nBinsJetqa,lowBinJetqa,hiBinJetqa);
339 fhJetQA[i][j]->SetBinEdges(3,newbins);
345 fhTTPt[i][j] =
new THnSparseF(Form(
"%s_fhTTPt%s",triggerName[i],dataType[j]),Form(
"%s-%s: TT p_{T} vs centrality vs pT hard bin;p_{T,TT}^{ch} (GeV/c);centrality;ptHardBin",dataName[j],triggerName[i]),dimTT,nBinsTT,lowBinTT,hiBinTT);
348 fHJetPhiCorr[i][j] =
new THnSparseF(Form(
"%s_fHJetPhiCorr%s",triggerName[i],dataType[j]),Form(
"%s-%s: single inclusive TT p_{T} vs recoil jet p_{T} vs #Delta#varphi vs area vs centrality vs #Delta#eta vs pt hard bin vs event bin (R=%1.1f);TT p_{T} (GeV/c);p_{T,jet}^{ch} (GeV/c);#Delta#varphi;area;centrality;#Delta#eta;ptHardBin;EventBin",dataName[j],triggerName[i],
fRadius),dimCor,nBinsCor,lowBinCor,hiBinCor);
357 fhNumberOfTT[i] =
new TH1F(Form(
"%s_fhNumberOfTT",triggerName[i]), Form(
"%s: number of TT",triggerName[i]),6,0,6);
363 fHJetPhiCorrUp[i] =
new THnSparseF(Form(
"%s_fHJetPhiCorrUp",triggerName[i]),Form(
"%s: single inclusive TT p_{T} vs recoil jet p_{T} vs #Delta#varphi vs area vs centrality vs #Delta#eta vs pt hard bin vs event bin (R=%1.1f);TT p_{T} (GeV/c);p_{T,jet}^{ch} (GeV/c);#Delta#varphi;area;centrality;#Delta#eta;ptHardBin;EventBin",triggerName[i],
fRadius),dimCor,nBinsCor,lowBinCor,hiBinCor);
366 fHJetPhiCorrDown[i] =
new THnSparseF(Form(
"%s_fHJetPhiCorrDown",triggerName[i]),Form(
"%s: single inclusive TT p_{T} vs recoil jet p_{T} vs #Delta#varphi vs area vs centrality vs #Delta#eta vs pt hard bin vs event bin (R=%1.1f);TT p_{T} (GeV/c);p_{T,jet}^{ch} (GeV/c);#Delta#varphi;area;centrality;#Delta#eta;ptHardBin;EventBin",triggerName[i],
fRadius),dimCor,nBinsCor,lowBinCor,hiBinCor);
373 fhLeadTrkQA[i] =
new THnSparseF(Form(
"%s_fhLeadTrkQA",triggerName[i]),Form(
"%s: p_{T,trk}^{leading} vs p_{T,jet}^{full} vs #Delta#varphi vs z vs centrality;p_{T,trk}^{leading} (GeV/c); p_{T,jet}^{full} (GeV/c);#Delta#varphi;z;centrality",triggerName[i]),dimLeadTrkqa,nBinsLeadTrkqa,lowBinLeadTrkqa,hiBinLeadTrkqa);
379 fhKtEffects[i] =
new THnSparseF(Form(
"%s_fhKtEffects",triggerName[i]),Form(
"%s: TT p_{T} vs recoil jet p_{T} vs k_{t} vs centrality vs pt hard bin (R=%1.1f);TT p_{T} (GeV/c);p_{T,jet}^{ch} (GeV/c);k_{t} (GeV/c);centrality;ptHardBin",triggerName[i],
fRadius),dimKt,nBinsKt,lowBinKt,hiBinKt);
386 for(
Int_t i=0; i<nObj; i++)
389 if (obj->IsA()->InheritsFrom(
"THnSparse" ))
391 THnSparseF *hn = (THnSparseF*)obj;
398 fEsdTrkCut = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE,1);
402 fEsdTrkCut->SetMaxChi2TPCConstrainedGlobal(36);
403 fEsdTrkCut->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
406 fEsdHybCut->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kNone);
413 if(
fAnaType==1) TH1::AddDirectory(oldStatus);
420 AliInfo(
"User Nofity");
422 Int_t runNumber = InputEvent()->GetRunNumber();
427 Int_t runs_iroc[28] = {169975, 169981, 170038, 170040, 170083, 170084, 170085, 170088, 170089, 170091, 170152, 170155, 170159, 170163, 170193, 170195, 170203, 170204, 170205, 170228, 170230, 170264, 170268, 170269, 170270, 170306, 170308, 170309};
428 Int_t runs_oroc[23] = {169591, 169590, 169588, 169587, 169586, 169584, 169557, 169555, 169554, 169553, 169550, 169515, 169512, 169506, 169504, 169498, 169475, 169420, 169418, 169099, 169040, 169045, 169044};
430 for(
Int_t i=0; i<28; i++)
432 if(runNumber==runs_iroc[i])
438 for(
Int_t i=0; i<23; i++)
440 if(runNumber==runs_oroc[i])
450 TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
451 TFile *currFile = tree->GetCurrentFile();
453 if(
fileName.Contains(
"root_archive.zip#"))
455 Ssiz_t pos =
fileName.Index(
"#",0,TString::kExact);
463 TFile *fxsec = TFile::Open(Form(
"%s%s",
fileName.Data(),
"pyxsec_hists.root"),
"read");
466 TKey *key = (TKey*)fxsec->GetListOfKeys()->At(0);
472 fhNTrials->Fill(0.5, ((TH1F*)list->FindObject(
"h1Trials"))->GetBinContent(1));
482 fxsec = TFile::Open(Form(
"%s%s",
fileName.Data(),
"pyxsec.root"),
"read");
483 TTree *xtree = (
TTree*)fxsec->Get(
"Xsection");
487 xtree->SetBranchAddress(
"ntrials",&ntrials);
510 AliError(
"Input event not available");
519 AliError(
"MC event available");
539 AliAODHandler *aodH =
dynamic_cast<AliAODHandler*
>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
554 else list =
fAODOut->GetList();
555 for(
Int_t i=0; i<list->GetEntries(); i++)
558 cout<<i<<
": "<<obj->GetName()<<
" : "<<obj->ClassName()<<endl;
570 fileName.Remove(0,51);
571 fileName.Remove(fileName.Index(
"/"));
576 Double_t pthard = AliAnalysisTaskFastEmbedding::GetPtHard();
582 UInt_t trigger = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
588 if(
fPeriod.Contains(
"lhc11a",TString::kIgnoreCase))
599 const AliVVertex* vtx =
fEvent->GetPrimaryVertex();
600 if (!vtx || vtx->GetNContributors()<1)
return;
603 if (TMath::Abs(vtx->GetZ())>
fMaxVtxZ)
return;
608 if(trigger & AliVEvent::kCentral)
fhEventStat->Fill(5.5);
609 else if (trigger & AliVEvent::kCentral)
fhEventStat->Fill(6.5);
620 if (centrality)
fCentrality = centrality->GetCentralityPercentile(
"V0M");
642 Double_t trigPt = -1, trigPhi = -999, trigEta = -999;
693 Int_t trigIndex = -1;
699 if(!trackArray)
return 0;
701 Int_t nTT = 0, counter = 0;
702 Int_t ntracks = trackArray->GetEntries();
705 for(
Int_t it=0; it<ntracks; it++)
707 AliVParticle *t =
dynamic_cast<AliVParticle*
>(trackArray->At(it));
708 if(!t || t->Charge()==0 || !
AcceptTrack(t))
continue;
710 if(
fAnaType==0 && arrayType==1 && t->GetLabel()==0)
continue;
720 arr.AddAt(it,counter);
729 if(counter==0) trigIndex = -1;
730 else if(counter==1) trigIndex = arr.At(0);
735 trigIndex = arr.At(TMath::FloorNint(pro));
742 AliVParticle *tt = (AliVParticle*)
fTrackArray->At(trigIndex);
749 if(
fAvoidTpcHole==1 && !(trigPhi>3.89 && trigPhi<5.53)) trigIndex = -1;
750 if(
fAvoidTpcHole==2 && !(trigPhi>2.45 && trigPhi<3.44)) trigIndex = -1;
763 if(trigIndex==-1) { trigPt = -1; trigPhi = -999; trigEta = -999;}
779 Int_t nJets = jetArray->GetEntries();
780 Double_t jetPt = 0, jetEta = 0, jetPhi = 0, jetArea = 0;
781 for(
Int_t ij=0; ij<nJets; ij++)
789 jetArea = jet->
Area();
793 AliAODJet* jet =
dynamic_cast<AliAODJet*
>(jetArray->At(ij));
797 jetArea = jet->EffectiveAreaCharged();
804 Double_t jetPtCorr = jetPt-rho*jetArea;
821 for(
Int_t it=0; it<ntracks; it++)
823 AliVParticle *t =
dynamic_cast<AliVParticle*
>(
fTrackArray->At(it));
824 if(!t || t->Charge()==0 || !
AcceptTrack(t))
continue;
828 if(phi<0) phi += 2*
pi;
835 Int_t ntrack =
fESD->GetNumberOfTracks();
836 for(
Int_t itr=0; itr<ntrack; itr++)
838 AliESDtrack *esdtrack =
fESD->GetTrack(itr);
839 if(!esdtrack || TMath::Abs(esdtrack->Eta())>0.9 )
continue;
849 Int_t label = esdtrack->GetLabel();
852 AliMCParticle *part = (AliMCParticle*)
fMC->GetTrack(label);
853 TParticle *tpart = (TParticle*)part->Particle();
854 if(TMath::Abs(tpart->GetPdgCode())==211)
859 resolution = (part->Pt()-esdtrack->Pt())/part->Pt();
861 Double_t fillPtRes[] = {esdtrack->Pt(),esdtrack->Pt()*TMath::Sqrt(esdtrack->GetSigma1Pt2()),resolution,(
Double_t)type,
fCentrality};
867 ntracks =
fAODIn->GetNumberOfTracks();
869 for(
Int_t itrack=0; itrack<ntracks; itrack++)
871 AliAODTrack *aodtrack = (AliAODTrack*)
fAODIn->GetTrack(itrack);
872 if(!aodtrack || !
AcceptTrack(dynamic_cast<AliVParticle*>(aodtrack)) )
continue;
875 if (aodtrack->IsHybridGlobalConstrainedGlobal())
883 else if (aodtrack->TestFilterBit(
fAODfilterBits[1]) && (aodtrack->GetStatus()&AliESDtrack::kITSrefit)!=0) type = 1;
888 Int_t label = aodtrack->GetLabel();
891 AliMCParticle *part = (AliMCParticle*)
fMC->GetTrack(label);
892 resolution = (part->Pt()-aodtrack->Pt())/part->Pt();
908 Int_t nJets = jetArray->GetEntries();
909 Double_t jetPt = 0, jetEta = 0, jetPhi = 0, jetArea = 0, jetPtCorr = 0;
911 for(
Int_t ij=0; ij<nJets; ij++)
919 jetArea = jet->
Area();
924 AliAODJet* jet =
dynamic_cast<AliAODJet*
>(jetArray->At(ij));
928 jetArea = jet->EffectiveAreaCharged();
929 nCons = jet->GetRefTracks()->GetEntriesFast();
935 jetPtCorr = jetPt-rho*jetArea;
937 hJetPt->Fill(fillPt);
940 hJetArea->Fill(fillA);
943 hJetQA->Fill(fillQA);
957 for(
Int_t ij=0; ij<nJets; ij++)
998 for(
Int_t ij=0; ij<nJets; ij++)
1005 if(dPhi<pi+0.6 && dPhi>
pi-0.6)
1034 AliWarning(Form(
"%s: Could not retrieve map for MC particles %s! Will assume MC labels consistent with indexes...", GetName(),
fMcParticleArrName.Data()));
1046 AliError(Form(
"Could not retrieve tracks %s!",
fTrackArrName.Data()));
1054 AliInfo(Form(
"Retrieve PYTHIA+PbPb tracks %s!",
fEmbTrkArrName.Data()));
1058 AliError(Form(
"Could not retrieve PYTHIA+PbPb tracks %s!",
fEmbTrkArrName.Data()));
1068 AliInfo(Form(
"Retrieve rho %s!",
fRhoName.Data()));
1072 AliError(Form(
"Could not retrieve rho %s!",
fRhoName.Data()));
1081 AliInfo(Form(
"Retrieve jets %s!",
fJetArrName.Data()));
1085 AliError(Form(
"%s: Could not retrieve jets %s!", GetName(),
fJetArrName.Data()));
1093 AliInfo(Form(
"Retrieve DL jets %s!",
fDLJetArrName.Data()));
1097 AliError(Form(
"%s: Could not retrieve DL jets %s!", GetName(),
fDLJetArrName.Data()));
1105 AliInfo(Form(
"Retrieve PL jets %s!",
fPLJetArrName.Data()));
1109 AliError(Form(
"%s: Could not retrieve PL jets %s!", GetName(),
fPLJetArrName.Data()));
1122 AliError(
"The object for pt hard bin information is not available!");
1153 AliError(Form(
"Could not retrieve tracks %s!",
fTrackArrName.Data()));
1161 AliInfo(Form(
"Retrieve PYTHIA+PbPb tracks %s!",
fEmbTrkArrName.Data()));
1167 AliError(Form(
"Could not retrieve PYTHIA+PbPb tracks %s!",
fTrackArrName.Data()));
1175 AliInfo(Form(
"Retrieve jets %s!",
fJetArrName.Data()));
1181 AliError(Form(
"%s: Could not retrieve jets %s!", GetName(),
fJetArrName.Data()));
1189 AliInfo(Form(
"Retrieve DL jets %s!",
fDLJetArrName.Data()));
1195 AliError(Form(
"%s: Could not retrieve DL jets %s!", GetName(),
fDLJetArrName.Data()));
1203 AliInfo(Form(
"Retrieve PL jets %s!",
fPLJetArrName.Data()));
1209 AliError(Form(
"%s: Could not retrieve PL jets %s!", GetName(),
fPLJetArrName.Data()));
1217 AliInfo(Form(
"Retrieve rho %s!",
fRhoName.Data()));
1223 AliError(Form(
"Could not retrieve rho %s!",
fRhoName.Data()));
1235 Double_t phi = TMath::ATan2(py,px);
1236 if(phi<0) phi += 2*
pi;
1244 if(dPhi>2*
pi) dPhi -= 2*
pi;
1245 if(dPhi<-2*
pi) dPhi += 2*
pi;
1246 if(dPhi<-0.5*
pi) dPhi += 2*
pi;
1247 if(dPhi>1.5*
pi) dPhi -= 2*
pi;
1254 if(phi<4-pi/2 && phi>5.5-1.5*
pi)
return 1;
1271 AliAODTrack *aodtrack =
static_cast<AliAODTrack*
>(track);
1274 if(!aodtrack->TestFilterBit(
fFilterMask) )
return kFALSE;
1278 if(!aodtrack->IsHybridGlobalConstrainedGlobal())
return kFALSE;
1280 if(
fRequireITSRefit && (aodtrack->GetStatus()&AliESDtrack::kITSrefit)==0 )
return kFALSE;
1284 if (frac > 0.4)
return kFALSE;
1293 if(TMath::Abs(jetEta)>etaCut)
return kFALSE;
1300 const Int_t nBins = 10;
1301 Double_t binLimits[nBins] = { 5., 11., 21., 36., 57., 84., 117., 156., 200., 249. };
1303 while(bin<nBins-1 && binLimits[bin+1]<ptHard)
1315 if(pdg==211) type = 0;
1316 else if(pdg==321) type = 1;
1317 else if(pdg==2212) type = 2;
1318 else if(pdg==11) type = 3;
1319 else if(pdg>=3122 && pdg<=3334) type = 4;
1328 Double_t cov[21] = {0,}, pxpypz[3] = {0,}, xyz[3] = {0,};
1329 AliExternalTrackParam *exParam =
new AliExternalTrackParam();
1330 aodtrack->GetCovMatrix(cov);
1331 aodtrack->PxPyPz(pxpypz);
1332 aodtrack->GetXYZ(xyz);
1333 exParam->Set(xyz,pxpypz,cov,aodtrack->Charge());
1334 sigma1Pt2 = exParam->GetSigma1Pt2();
1344 const char *decision[2] = {
"no",
"yes"};
1345 printf(
"\n\n===== h-jet analysis configuration =====\n");
1347 printf(
"Is this MC data: %s\n",decision[
fIsMC]);
1352 printf(
"Require track to have ITS refit? %s\n",decision[
fRequireITSRefit]);
1353 printf(
"Require to cut on fraction of shared TPC clusters? %s\n",decision[
fRequireSharedClsCut]);
1356 printf(
"Track phi range: %2.0f < phi < %2.0f\n",
fMinTrkPhi*TMath::RadToDeg(),
fMaxTrkPhi*TMath::RadToDeg());
1359 printf(
"Jet cone size R = %1.1f, and jet pt > %1.0f GeV/c \n",
fRadius,
fJetPtMin);
1360 printf(
"Run track QA: %s\n",decision[
fRunTrkQA]);
1361 printf(
"Run jet QA: %s\n",decision[
fRunJetQA]);
1364 printf(
"Run leading track QA: %s\n",decision[
fRunLeadTrkQA]);
1366 printf(
"Run background flow: %s\n",decision[
fRunBkgFlow]);
1367 printf(
"=======================================\n\n");
1373 return (trkPx*jetPx+trkPy*jetPy+trkPz*jetPz)/(jetPx*jetPx+jetPy*jetPy+jetPz*jetPz);
Double_t GetTrackPhiOnEMCal() const
Bool_t fRunTrkQA
Pt hard bin.
Double_t GetZ(const Double_t trkPx, const Double_t trkPy, const Double_t trkPz, const Double_t jetPx, const Double_t jetPy, const Double_t jetPz)
Double_t fCentrality
Trigger type of the event.
Int_t fPtHardBin
Pt hard bin param.
AliESDtrackCuts * fEsdHybCut
Track cuts for global tracks in ESD.
THnSparse * fhLeadTrkQA[4]
AliNamedString * fPtHardBinName
Event background for LEGO train.
TH1F * fhEventStat
Output list.
TClonesArray * fPLJetArray
Array of the found jets.
Bool_t IsGoodAODtrack(AliVParticle *track)
THnSparse * fhKtEffects[4]
void UserExec(Option_t *option)
THnSparse * fHJetPhiCorrDown[4]
AliAODJetEventBackground * fEvtBkg
Value of the rho parameter.
Bool_t AcceptTrack(AliVParticle *track)
Double_t GetTrackPtOnEMCal() const
AliVEvent::EOfflineTriggerTypes fOfflineTrgMask
where we take the jets from can be input or output AOD
Bool_t fRunSingleInclHJet
void UserCreateOutputObjects()
THnSparse * fhJetPt[4][3]
Int_t FindSingleIncTrigger(const TClonesArray *trackArray, Double_t &trigPt, Double_t &trigPhi, Double_t &trigEta, const Int_t arrayType)
UInt_t fFilterMask
Track cuts for complementary tracks in ESD.
static Bool_t Selected(Bool_t bSet=kFALSE, Bool_t bNew=kTRUE)
UShort_t GetNumberOfConstituents() const
Bool_t IsGoodJet(Double_t jetEta)
Int_t GetPtHardBin(Double_t ptHard)
UShort_t GetNumberOfTracks() const
Bool_t fSwitchOnAvoidTpcHole
Trigger track pt.
TString fNonStdFile
Flag if all the arraies are successfully retrieved.
AliESDtrackCuts * fEsdTrkCut
Int_t GetParticleType(Int_t pdg_input)
virtual ~AliAnalysisTaskHJetDphi()
Double_t fDistToTPCBoundary
TClonesArray * fTrackArray
TString fTrackArrName
Array of PbPb tracks + PYTHIA tracks.
AliAODEvent * fAODIn
ESD event.
TClonesArray * fEmbTrkArray
Double_t GetAODTrackPtRes(AliAODTrack *track)
void RunJetQA(const TClonesArray *jetArray, const Double_t rho, THnSparse *hJetPt, THnSparse *hJetArea, THnSparse *hJetQA)
Double_t CalculatePhi(const Double_t py, const Double_t px)
TString fMcParticleArrName
THnSparse * fhJetQA[4][3]
TString fRhoName
Array of the embedded PYTHIA jet array on detector level.
AliAODExtension * fAODExtension
Output AOD event.
ClassImp(AliAnalysisTaskHJetDphi) const Double_t pi
TString fEmbTrkArrName
Array of mc map for EMCal train.
Double_t CalculateDPhi(const Double_t phi1, const Double_t phi2)
Bool_t fRequireSharedClsCut
THnSparse * fhTrkPhiRes[4]
Int_t fTriggerTrkIndex
Array of input tracks.
Short_t TrackAt(Int_t idx) const
THnSparse * fHJetPhiCorrUp[4]
AliAnalysisTaskHJetDphi()
AliESDEvent * fESD
Input event.
TClonesArray * fMcParticleArray
THnSparse * fhTrkPtRes[4]
THnSparse * fHJetPhiCorr[4][3]
Represent a jet reconstructed using the EMCal jet framework.
TClonesArray * fDLJetArray
Array of the embedded PYTHIA jet array on particle level.
AliVEvent * fEvent
MC events.
Int_t fAODfilterBits[2]
Random number generator.
AliAODEvent * fAODOut
Input AOD event.
Double_t fRhoValue
Rho parameter.
Int_t LocateToTPCHole(const Double_t phi)
Double_t fMaxVtxZ
V0M for current event.
void RunSingleInclHJetCorr(Double_t trigPt, Double_t trigPhi, Double_t trigEta, const TClonesArray *jetArray, Double_t rho, THnSparse *hTT, THnSparse *hn)
THnSparse * fhJetArea[4][3]
AliNamedArrayI * fMcParticlelMap
Array of input mc particles.
TList * OpenFile(const char *fname)
void Terminate(Option_t *)