1 #ifndef ALIANALYSISTASKSE_H
10 #include <TProfile2D.h>
18 #include <THnSparse.h>
21 #include <TClonesArray.h>
25 #include <TInterpreter.h>
26 #include "AliAnalysisTask.h"
27 #include "AliCentrality.h"
29 #include "AliESDEvent.h"
30 #include "AliESDInputHandler.h"
31 #include "AliAODEvent.h"
32 #include "AliAODHandler.h"
33 #include "AliAnalysisManager.h"
34 #include "AliAnalysisTaskSE.h"
35 #include "AliAnalysisHelperJetTasks.h"
37 #include "AliInputEventHandler.h"
42 #include "AliGenEventHeader.h"
43 #include "AliGenPythiaEventHeader.h"
44 #include "AliGenHijingEventHeader.h"
45 #include "AliAODMCHeader.h"
46 #include "AliMCEvent.h"
50 #include "AliVEventHandler.h"
51 #include "AliVParticle.h"
52 #include "AliAODMCParticle.h"
53 #include "AliAnalysisUtils.h"
56 #include "AliVVertex.h"
65 #include "AliHeader.h"
66 #include "AliRunLoader.h"
67 #include "AliVVZERO.h"
80 fUseDefaultVertexCut(1), fUsePileUpCut(1),
81 fRhoTaskName(), fRhoTaskNameMC(),
82 fSignalJetRadius(0.4), fSignalJetRadiusSquared(fSignalJetRadius*fSignalJetRadius),
83 fSignalJetEtaWindow(0.9 - fSignalJetRadius), fTrackEtaWindow(0.9), fMinTrackPt(0.150), fMinJetArea(0.0),
84 fCentralityType("V0A"), fMinFractionShared(0.5),
85 fCrossSection(0.0), fTrials(0.0), fImpParam(-1.0), fRandom(0), fHelperClass(0), fInitializedLocal(0),
86 fTTlow(8.0), fTThigh(9.0), fTTtype(0), fDphiCut(TMath::Pi()-0.6), fUseDoubleBinPrecision(0),
87 fTTLowToSkip(-1.0), fTTHighToSkip(-1.0), fHistEvtSelection(0x0),fhKTAreaPt(0x0),
88 fhVertexZ(0x0), fhVertexZAccept(0x0), fhVertexZMC(0x0), fhVertexZAcceptMC(0x0),
89 fhDphiTriggerJetAccept(0x0),
90 fhCentralityV0M(0x0), fhCentralityV0A(0x0), fhCentralityV0C(0x0), fhCentralityZNA(0x0),
91 fhCentralityV0MTT(0x0), fhCentralityV0ATT(0x0), fhCentralityV0CTT(0x0), fhCentralityZNATT(0x0),
95 fRhoRec(kRho),fRhoMC(kRho), fCentralityBins(kCAll),
97 fZVertexCut(10.0),fCutPhi(0.6),
101 for(Int_t ic =0; ic<kCAll; ic++){
102 fh1Ntriggers[ic]=NULL;
103 fh1TriggerMult[ic]=NULL;
104 fh1NtriggersGen[ic]=NULL;
105 fh1TriggerMultGen[ic]=NULL;
107 fhJetPhiGen[ic]=NULL;
110 fhJetEtaGen[ic]=NULL;
113 fhTrackPtGen[ic]=NULL;
114 fhCentrality[ic]=NULL;
123 fhImpactParameter[ic]=NULL;
124 fhImpactParameterTT[ic]=NULL;
126 for(Int_t ir=0; ir<kRho; ir++){
127 fHJetSpec[ic][ir]=NULL;
128 fhDphiTriggerJet[ic][ir]=NULL;
129 fhDphiTriggerJetGen[ic][ir]=NULL;
130 fhJetPtGen[ic][ir]=NULL;
131 fhJetPtGenVsJetPtRec[ic][ir]=NULL;
132 fhJetPtResolutionVsPtGen[ic][ir]=NULL;
136 for(Int_t ir=0; ir<kRho-1; ir++){
137 fhRhoTT[ic][ir]=NULL;
138 fhRhoIncl[ic][ir]=NULL;
139 fARhoTT[ic][ir]=NULL;
140 fhDeltaPt[ic][ir]=NULL;
141 fhDeltaPtEmb[ic][ir]=NULL;
142 fhDeltaPtEmb2D[ic][ir]=NULL;
143 fhDeltaPtEmbPerp[ic][ir]=NULL;
144 fhDeltaPtEmbPerp2D[ic][ir]=NULL;
145 fhDeltaPtIncl[ic][ir]=NULL;
148 fhPtTrkTruePrimRec[ic]=NULL;
149 fhPtTrkTruePrimGen[ic]=NULL;
150 fhPtTrkSecOrFakeRec[ic]=NULL;
153 fCentralityBins[0]=0.;
154 fCentralityBins[1]=20.;
155 fCentralityBins[2]=50.;
156 fCentralityBins[3]=100.;
157 fCentralityBins[4]=1e6;
167 for(Int_t i=0; i<999; i++){
169 fTrigTracksGen[i]=0x0;
178 fUseDefaultVertexCut(1), fUsePileUpCut(1),
179 fRhoTaskName(), fRhoTaskNameMC(),
180 fSignalJetRadius(0.4), fSignalJetRadiusSquared(fSignalJetRadius*fSignalJetRadius),
181 fSignalJetEtaWindow(0.9 - fSignalJetRadius), fTrackEtaWindow(0.9), fMinTrackPt(0.150), fMinJetArea(0.0),
182 fCentralityType(
"V0A"), fMinFractionShared(0.5),
183 fCrossSection(0.0), fTrials(0.0), fImpParam(-1.0), fRandom(0), fHelperClass(0), fInitializedLocal(0),
184 fTTlow(8.0), fTThigh(9.0), fTTtype(0), fDphiCut(TMath::Pi()-0.6), fUseDoubleBinPrecision(0),
185 fTTLowToSkip(-1.0), fTTHighToSkip(-1.0),
186 fHistEvtSelection(0x0), fhKTAreaPt(0x0),
187 fhVertexZ(0x0), fhVertexZAccept(0x0), fhVertexZMC(0x0), fhVertexZAcceptMC(0x0),
188 fhDphiTriggerJetAccept(0x0),
189 fhCentralityV0M(0x0), fhCentralityV0A(0x0), fhCentralityV0C(0x0), fhCentralityZNA(0x0),
190 fhCentralityV0MTT(0x0), fhCentralityV0ATT(0x0), fhCentralityV0CTT(0x0), fhCentralityZNATT(0x0),
195 fRhoRec(kRho), fRhoMC(kRho), fCentralityBins(kCAll),
197 fZVertexCut(10.0),fCutPhi(0.6),
202 for(Int_t ic =0; ic<
kCAll; ic++){
227 for(Int_t ir=0; ir<
kRho; ir++){
237 for(Int_t ir=0; ir<kRho-1; ir++){
269 for(Int_t i=0; i<999; i++){
274 DefineOutput(1, TList::Class());
280 Double_t tmpConePt = 0.0;
282 if(!recTrkCont)
return 0.0;
284 AliVParticle* tmpTrack=NULL;
287 recTrkCont->ResetCurrentID();
289 if(!tmpTrack)
continue;
291 if(
GetDeltaR(tmpTrack->Phi(), phi, tmpTrack->Eta(), eta) < radius){
292 tmpConePt = tmpConePt + tmpTrack->Pt();
303 AliGenHijingEventHeader* hijingHeader =
dynamic_cast<AliGenHijingEventHeader*
>(MCEvent()->GenEventHeader());
307 AliAODMCHeader* aodMCH =
dynamic_cast<AliAODMCHeader*
>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
310 for(UInt_t i = 0;i<aodMCH->GetNCocktailHeaders();i++){
311 hijingHeader =
dynamic_cast<AliGenHijingEventHeader*
>(aodMCH->GetCocktailHeader(i));
312 if(hijingHeader)
break;
318 return (Double_t) (hijingHeader->ImpactParameter());
320 AliWarning(Form(
"In task %s: GetImpactParameter() failed!", GetName()));
327 AliGenEventHeader* mcHeader = NULL;
328 AliAODMCHeader* aodMCH = NULL;
331 AliRunLoader *rl = AliRunLoader::Instance();
332 if(rl) mcHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(rl->GetHeader()->GenEventHeader());
338 mcHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(MCEvent()->GenEventHeader());
341 aodMCH =
dynamic_cast<AliAODMCHeader*
>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
344 for(UInt_t i = 0; i<aodMCH->GetNCocktailHeaders(); i++){
345 mcHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(aodMCH->GetCocktailHeader(i));
353 mcHeader =
dynamic_cast<AliGenHijingEventHeader*
>(MCEvent()->GenEventHeader());
356 aodMCH =
dynamic_cast<AliAODMCHeader*
>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
359 for(UInt_t i = 0; i<aodMCH->GetNCocktailHeaders(); i++){
360 mcHeader =
dynamic_cast<AliGenHijingEventHeader*
>(aodMCH->GetCocktailHeader(i));
372 mcHeader->PrimaryVertex(
fpyVtx);
373 return (Double_t) (
fpyVtx[2]);
375 AliWarning(Form(
"In task %s: Pythia Vertex failed!", GetName()));
383 if(!event)
return kFALSE;
407 if(!event)
return kFALSE;
420 fhVertexZ->Fill(event->GetPrimaryVertex()->GetZ());
428 if(TMath::Abs(event->GetPrimaryVertex()->GetZ()) >
fZVertexCut){
443 if(!track)
return kFALSE;
447 if(!track->Charge())
return kFALSE;
449 if(!(static_cast<AliAODMCParticle*>(track))->IsPhysicalPrimary())
return kFALSE;
464 if(!jet)
return kFALSE;
500 for(Int_t ir=0;ir<nrho;ir++){
505 Bool_t coneValid = kTRUE;
507 Double_t tmpRandConePhi =
fRandom->Rndm()*TMath::TwoPi();
512 tmpRandConePhi =
fRandom->Rndm()*TMath::TwoPi();
562 for(Int_t ir=0; ir < nrho; ir++){
576 AliError(
"??? Event pointer == 0 ???");
605 Double_t centralityPercentile = -1.0;
606 Double_t centralityPercentileV0A = -1.0;
607 Double_t centralityPercentileV0C = -1.0;
608 Double_t centralityPercentileV0M = -1.0;
609 Double_t centralityPercentileZNA = -1.0;
628 AliCentrality* tmpCentrality = InputEvent()->GetCentrality();
633 centralityPercentile = tmpCentrality->GetCentralityPercentile(
fCentralityType.Data());
634 centralityPercentileV0A = tmpCentrality->GetCentralityPercentile(
"V0A");
635 centralityPercentileV0C = tmpCentrality->GetCentralityPercentile(
"V0C");
636 centralityPercentileV0M = tmpCentrality->GetCentralityPercentile(
"V0M");
637 centralityPercentileZNA = tmpCentrality->GetCentralityPercentile(
"ZNA");
641 AliWarning(Form(
"Centrality value not valid (c=%E)",centralityPercentile));
655 for(Int_t ic=0; ic<2; ic++){
656 if(
ficb[ic]==-1)
continue;
669 for(Int_t ic=0; ic<2; ic++){
670 if(
ficb[ic]==-1)
continue;
698 AliVParticle *constTrackRec = NULL;
699 AliVParticle *constTrackGen = NULL;
736 Int_t indexSingleRndTrigGen = -1;
737 AliVParticle* trackTTGen = NULL;
738 Int_t ntriggersGen = 0;
744 parContGen->ResetCurrentID();
746 if(!constTrackGen)
continue;
749 for(Int_t ic=0; ic<2; ic++){
750 if(
ficb[ic]==-1)
continue;
753 if((fTTlow <= constTrackGen->Pt()) && (constTrackGen->Pt() <
fTThigh)){
754 if(ntriggersGen<999){
764 for(Int_t ic=0; ic<2; ic++){
765 if(
ficb[ic]==-1)
continue;
770 indexSingleRndTrigGen =
fRandom->Integer(ntriggersGen);
771 trackTTGen = (AliVParticle*) (
fTrigTracksGen[indexSingleRndTrigGen]);
778 Int_t indexSingleRndTrig = -1;
779 AliVParticle* trackTT = NULL;
785 trkContRec->ResetCurrentID();
787 if(!constTrackRec)
continue;
792 if(TMath::Abs(constTrackRec->GetLabel()) == 99999)
continue;
798 for(Int_t ic=0; ic<2; ic++){
799 if(
ficb[ic]==-1)
continue;
801 fhTrackEta[
ficb[ic]]->Fill(constTrackRec->Pt(), constTrackRec->Eta());
805 if(fTTlow <= constTrackRec->Pt() && constTrackRec->Pt() <
fTThigh){
816 for(Int_t ic=0; ic<2; ic++){
817 if(
ficb[ic]==-1)
continue;
822 indexSingleRndTrig =
fRandom->Integer(ntriggers);
823 trackTT = (AliVParticle*) (
fTrigTracks[indexSingleRndTrig]);
865 Bool_t bStop = kFALSE;
869 trkContRec->ResetCurrentID();
871 if(!constTrackRec)
continue;
873 if(fTTLowToSkip <= constTrackRec->Pt() && constTrackRec->Pt() <
fTTHighToSkip){
883 parContGen->ResetCurrentID();
885 if(!constTrackGen)
continue;
887 if(fTTLowToSkip <= constTrackGen->Pt() && constTrackGen->Pt() <
fTTHighToSkip){
902 parContGen->ResetCurrentID();
904 if(!constTrackGen)
continue;
907 for(Int_t ic=0; ic<2; ic++){
908 if(
ficb[ic]==-1)
continue;
915 Bool_t bRecPrim = kFALSE;
916 if(trkContRec && parContGen){
917 trkContRec->ResetCurrentID();
919 if(!constTrackRec)
continue;
923 parContGen->ResetCurrentID();
925 if(!constTrackGen)
continue;
927 if(TMath::Abs(constTrackRec->GetLabel()) == TMath::Abs(constTrackGen->GetLabel())){
931 for(Int_t ic=0; ic<2; ic++){
932 if(
ficb[ic]==-1)
continue;
939 for(Int_t ic=0; ic<2; ic++){
940 if(
ficb[ic]==-1)
continue;
956 jetContGen->ResetCurrentID();
958 if(!jetGen)
continue;
963 for(Int_t ir=0; ir<
kRho; ir++){
966 for(Int_t ic=0; ic<2; ic++){
967 if(
ficb[ic]==-1)
continue;
976 jetContRec->ResetCurrentID();
978 if(!jetRec)
continue;
991 if(jetGen->
Pt()<1e-3){
1007 for(Int_t ir=0; ir<
kRho; ir++){
1011 for(Int_t ic=0; ic<2; ic++){
1012 if(
ficb[ic]==-1)
continue;
1033 Double_t areaJet, pTJet;
1035 Bool_t bFirstCycle = kTRUE;
1042 if(parContGen && ntriggersGen >0 && trackTTGen){
1043 bFirstCycle = kTRUE;
1050 AliVParticle* triggerHadronGen = (AliVParticle*) trackTTGen;
1053 for(Int_t ic=0; ic<2; ic++){
1054 if(
ficb[ic]==-1)
continue;
1064 jetContGen->ResetCurrentID();
1067 AliError(Form(
"%s: Could not receive gen jet", GetName()));
1072 areaJet = jetGen->
Area();
1073 pTJet = jetGen->
Pt();
1076 for(Int_t ic=0; ic<2; ic++){
1077 if(
ficb[ic]==-1)
continue;
1087 if(dfi < -0.5*TMath::Pi()) dfi += TMath::TwoPi();
1088 if(dfi > 1.5*TMath::Pi()) dfi -= TMath::TwoPi();
1090 for(Int_t ir=0; ir<
kRho;ir++){
1091 for(Int_t ic=0; ic<2; ic++){
1092 if(
ficb[ic]==-1)
continue;
1098 if(TMath::Abs(dphi) <
fDphiCut)
continue;
1102 for(Int_t ir=0; ir<
kRho;ir++){
1104 for(Int_t ic=0; ic<2; ic++){
1105 if(
ficb[ic]==-1)
continue;
1110 bFirstCycle = kFALSE;
1133 Bool_t bEmbJetCloseToTT = kFALSE;
1136 jetContRec->ResetCurrentID();
1138 if(!jetRec)
continue;
1142 bEmbJetCloseToTT = kFALSE;
1144 if(jetRec->
Pt() > trackTT->Pt()*0.5){
1147 constTrackRec =
static_cast<AliVParticle*
> (jetRec->
TrackAt(iq,trkContRec->GetArray()));
1148 if(!constTrackRec)
continue;
1149 if(constTrackRec != trackTT)
continue;
1151 bEmbJetCloseToTT = kTRUE;
1156 if(bEmbJetCloseToTT)
continue;
1164 if(jetEmb->
Pt()<1e-3){
1176 for(Int_t ir=0; ir <
kRho-1; ir++){
1177 for(Int_t ic=0; ic<2; ic++){
1178 if(
ficb[ic]==-1)
continue;
1190 if(TMath::Pi()/4 < dphi && dphi < 3*TMath::Pi()/4){
1209 for(Int_t ir=0; ir <
kRho-1; ir++){
1210 for(Int_t ic=0; ic<2; ic++){
1211 if(
ficb[ic]==-1)
continue;
1218 for(Int_t ir=0; ir < kRho-1; ir++){
1221 for(Int_t ic=0; ic<2; ic++){
1222 if(
ficb[ic]==-1)
continue;
1235 Double_t deltapt[kRho-1], phiTT = 0., etaTT = -1000.;
1238 Bool_t bRecJetCloseToTT = kFALSE;
1242 phiTT = trackTT->Phi();
1243 etaTT = trackTT->Eta();
1246 jetContRec->ResetCurrentID();
1248 if(!jetRec)
continue;
1252 bRecJetCloseToTT = kFALSE;
1254 if(jetRec->
Pt() > trackTT->Pt()*0.5){
1256 constTrackRec = (AliVParticle*) (jetRec->
TrackAt(iq,trkContRec->GetArray()));
1257 if(!constTrackRec)
continue;
1258 if(constTrackRec != trackTT)
continue;
1259 phiTT = jetRec->
Phi();
1260 etaTT = jetRec->
Eta();
1261 bRecJetCloseToTT = kTRUE;
1265 if(bRecJetCloseToTT)
break;
1276 for(Int_t ir=0; ir < kRho-1; ir++){
1277 for(Int_t ic=0; ic<2; ic++){
1278 if(
ficb[ic]==-1)
continue;
1340 if(ntriggers>0 && trackTT){
1351 AliVParticle* triggerHadron = (AliVParticle*) trackTT;
1354 for(Int_t ic=0; ic<2; ic++){
1355 if(
ficb[ic]==-1)
continue;
1362 jetContRec->ResetCurrentID();
1365 AliError(Form(
"%s: Could not receive jet", GetName()));
1370 areaJet = jetRec->
Area();
1371 pTJet = jetRec->
Pt();
1374 for(Int_t ic=0; ic<2; ic++){
1375 if(
ficb[ic]==-1)
continue;
1384 if(dfi < -0.5*TMath::Pi()) dfi += TMath::TwoPi();
1385 if(dfi > 1.5*TMath::Pi()) dfi -= TMath::TwoPi();
1387 for(Int_t ic=0; ic<2; ic++){
1388 if(
ficb[ic]==-1)
continue;
1390 for(Int_t ir=0; ir<
kRho;ir++){
1396 if(TMath::Abs(dphi) <
fDphiCut)
continue;
1401 for(Int_t ir=0; ir<
kRho;ir++){
1404 for(Int_t ic=0; ic<2; ic++){
1405 if(
ficb[ic]==-1)
continue;
1410 fARhoTT[
ficb[ic]][ir]->Fill((Float_t) (areaJet*fRhoRec[ir]));
1416 bFirstCycle = kFALSE;
1454 printf(
"ERROR: Output list not available\n");
1463 if(
fOutput && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
1480 TString bgtype[]={
"Perp",
"CMS",
"KT",
"Zero"};
1484 Bool_t oldStatus = TH1::AddDirectoryStatus();
1485 TH1::AddDirectory(kFALSE);
1494 fHistEvtSelection =
new TH1I(
"fHistEvtSelection",
"event selection", 7, -0.5, 6.5);
1506 for(Int_t ic =0; ic<icmax; ic++){
1507 name = (ic==0) ? Form(
"fh1NtriggersMB") :
1509 fh1Ntriggers[ic] =
new TH1D(name.Data(),
"# of triggers",50,0.0,50.0);
1512 name = (ic==0) ? Form(
"fh1TriggerMultMB") :
1514 fh1TriggerMult[ic] =
new TH1D(name.Data(),
"# of triggers",50,0.0,50.0);
1523 const Int_t dimSpec = 2;
1524 const Int_t nBinsSpec[dimSpec] = { 50, bw*160};
1525 const Double_t lowBinSpec[dimSpec] = { 0.0, -20.0};
1526 const Double_t hiBinSpec[dimSpec] = { 2.0, 300.0};
1528 for(Int_t ic =0; ic<icmax; ic++){
1529 for(Int_t ir=0; ir<
kRho; ir++){
1530 name = (ic==0) ? Form(
"fHJetSpecMB%s",bgtype[ir].
Data()) :
1543 Form(
"Recoil jet spectrum [A,pTjet-A*rho%s]",bgtype[ir].
Data()),
1544 nBinsSpec[0], lowBinSpec[0], hiBinSpec[0], nBinsSpec[1], lowBinSpec[1],hiBinSpec[1]);
1551 for(Int_t ic =0; ic<icmax; ic++){
1552 for(Int_t ir=0; ir<
kRho-1; ir++){
1553 name = (ic==0) ? Form(
"fhRhoMB%s",bgtype[ir].
Data()) :
1558 fhRhoTT[ic][ir] =
new TH1F(name.Data(),
1559 Form(
"Rho%s",bgtype[ir].
Data()),80, 0.0, 40.0);
1563 name = (ic==0) ? Form(
"fhRhoInclMB%s",bgtype[ir].
Data()) :
1571 name = (ic==0) ? Form(
"fARhoMB%s",bgtype[ir].
Data()) :
1575 fARhoTT[ic][ir] =
new TH1F(name.Data(),
1576 Form(
"Area times rho %s",bgtype[ir].
Data()),80, 0.0, 40.0);
1583 for(Int_t ic =0; ic<icmax; ic++){
1584 for(Int_t ir=0; ir<
kRho-1; ir++){
1586 name = (ic==0) ? Form(
"fhDeltaPtMB%s",bgtype[ir].
Data()) :
1590 fhDeltaPt[ic][ir] =
new TH1D(name.Data(),
1591 Form(
"DeltaPt%s",bgtype[ir].
Data()), 150, -50, 100);
1595 name = (ic==0) ? Form(
"fhDeltaPtInclMB%s",bgtype[ir].
Data()) :
1605 name = (ic==0) ? Form(
"fhDeltaPtEmbMB%s",bgtype[ir].
Data()) :
1613 name = (ic==0) ? Form(
"fhDeltaPtEmbPerpMB%s",bgtype[ir].
Data()) :
1622 name = (ic==0) ? Form(
"fhDeltaPtEmb2DMB%s",bgtype[ir].
Data()) :
1627 Form(
"fhDeltaPtEmb2D%s",bgtype[ir].
Data()), 125,0, 250, 150, -50, 100);
1632 name = (ic==0) ? Form(
"fhDeltaPtEmbPerp2DMB%s",bgtype[ir].
Data()) :
1645 Double_t binsPt [] = {0, 0.05,0.15, 0.5, 1., 1.5, 2., 2.5, 3., 3.5, 4., 4.5, 5., 5.5, 6.,6.5, 7., 8., 9., 10.,15., 20., 50., 100.};
1646 Int_t nbinsPt =
sizeof(binsPt)/
sizeof(Double_t)-1;
1648 fhKTAreaPt =
new TH2F(
"fhKTAreaPt",
"KT jet Area vs Pt",nbinsPt, binsPt, 50,0,2);
1653 for(Int_t ic =0; ic<icmax; ic++){
1654 name = (ic==0) ? Form(
"fhJetPhiMB") :
1658 fhJetPhi[ic] =
new TH2F(name.Data(),
"Azim dist jets vs pTjet", 50, 0, 100, 50,-TMath::Pi(),TMath::Pi());
1662 name = (ic==0) ? Form(
"fhTrackPhiMB") :
1666 fhTrackPhi[ic] =
new TH2F(name.Data(),
"azim dist trig had vs pT,trk", 50, 0, 50, 50,-TMath::Pi(),TMath::Pi());
1669 name = (ic==0) ? Form(
"fhJetEtaMB") :
1673 fhJetEta[ic] =
new TH2F(name.Data(),
"Eta dist jets vs pTjet", 50,0, 100, 40,-0.9,0.9);
1676 name = (ic==0) ? Form(
"fhTrackEtaMB") :
1680 fhTrackEta[ic] =
new TH2F(name.Data(),
"Eta dist trig had vs pT,trk", 50, 0, 50, 40,-0.9,0.9);
1683 name = (ic==0) ? Form(
"fhTrackPtMB") :
1687 fhTrackPt[ic] =
new TH1F(name.Data(),
"pT,trk ", 50, 0, 50);
1691 fhVertexZ =
new TH1F(
"fhVertexZ",
"z vertex",40,-20,20);
1694 fhVertexZAccept =
new TH1F(
"fhVertexZAccept",
"z vertex after cut",40,-20,20);
1699 fhVertexZMC =
new TH1F(
"fhVertexZMC",
"z vertex",40,-20,20);
1702 fhVertexZAcceptMC =
new TH1F(
"fhVertexZAcceptMC",
"z vertex after cut",40,-20,20);
1706 for(Int_t ic =0; ic<icmax; ic++){
1707 for(Int_t ir=0; ir <
kRho; ir++){
1708 name = (ic==0) ? Form(
"fhDphiTriggerJetMB%s",bgtype[ir].
Data()) :
1712 fhDphiTriggerJet[ic][ir] =
new TH2F(name.Data(),
"Deltaphi trig-jet",75,-50,100, 100, -0.5*TMath::Pi(),1.5*TMath::Pi());
1718 fhDphiTriggerJetAccept =
new TH1F(
"fhDphiTriggerJetAccept",
"Deltaphi trig-jet after cut",50, -0.5*TMath::Pi(),1.5*TMath::Pi());
1721 for(Int_t ic =0; ic<icmax; ic++){
1722 name = (ic==0) ? Form(
"fhCentralityMB") :
1726 fhCentrality[ic] =
new TH1F(name.Data(),
"Centrality",100,0,100);
1730 fhCentralityV0M =
new TH1F(
"hCentralityV0M",
"hCentralityV0M",100,0,100);
1733 fhCentralityV0A =
new TH1F(
"hCentralityV0A",
"hCentralityV0A",100,0,100);
1736 fhCentralityV0C =
new TH1F(
"hCentralityV0C",
"hCentralityV0C",100,0,100);
1739 fhCentralityZNA =
new TH1F(
"hCentralityZNA",
"hCentralityZNA",100,0,100);
1873 for(Int_t ic =0; ic<
kCAll; ic++){
1874 name = (ic==0) ? Form(
"fhImpactParameterMB") :
1878 fhImpactParameter[ic] =
new TH1D(name.Data(),
"impact parameter distribution from HIJING",50,0,10);
1882 name = (ic==0) ? Form(
"fhImpactParameterTTMB") :
1892 for(Int_t ic =0; ic<icmax; ic++){
1893 for(Int_t ir=0; ir <
kRho; ir++){
1894 name = (ic==0) ? Form(
"fhJetPtGenMB%s",bgtype[ir].
Data()) :
1899 Form(
"Jet pT Gen %s",bgtype[ir].
Data()),bw*160,-20,300);
1903 name = (ic==0) ? Form(
"fhJetPtGenVsJetPtRecMB%s",bgtype[ir].
Data()) :
1908 "", bw*160,-20,300, bw*160,-20,300);
1912 name = (ic==0) ? Form(
"fhJetPtResolutionVsPtGenMB%s",bgtype[ir].
Data()) :
1913 Form(
"fhJetPtResolutionVsPtGen%d%d%s",TMath::Nint(
fCentralityBins[ic-1]),
1917 "Resolution", 20,0,100, 35,-1.,0.4);
1922 Double_t bins [] = {0, 0.2,0.4,0.6, 0.8, 1., 1.2, 1.4, 1.6, 1.8, 2., 2.5, 3., 3.5, 4., 5., 6., 8., 10., 20., 50.};
1923 Int_t
nbins =
sizeof(bins)/
sizeof(Double_t)-1;
1925 for(Int_t ic =0; ic<icmax; ic++){
1926 name = (ic==0) ? Form(
"fhPtTrkTruePrimRecMB") :
1934 name = (ic==0) ? Form(
"fhPtTrkTruePrimGenMB") :
1941 name = (ic==0) ? Form(
"fhPtTrkSecOrFakeRecMB") :
1951 for(Int_t ic =0; ic<icmax; ic++){
1952 name = (ic==0) ? Form(
"fh1NtriggersGenMB") :
1960 name = (ic==0) ? Form(
"fh1TriggerMultGenMB") :
1968 for(Int_t ir=0; ir<
kRho; ir++){
1969 name = (ic==0) ? Form(
"fHJetSpecGenMB%s",bgtype[ir].
Data()) :
1981 name = (ic==0) ? Form(
"fhJetPhiGenMB") :
1988 name = (ic==0) ? Form(
"fhJetEtaGenMB") :
1996 name = (ic==0) ? Form(
"fhTrackPtGenMB") :
2003 for(Int_t ir=0; ir<
kRho; ir++){
2013 for(Int_t i=0; i<
fOutput->GetEntries(); i++){
2014 TH1 *h1 =
dynamic_cast<TH1*
>(
fOutput->At(i));
2019 THnSparse *hn =
dynamic_cast<THnSparse*
>(
fOutput->At(i));
2024 TH1::AddDirectory(oldStatus);
2050 if (vphi < -TMath::Pi()) vphi += TMath::TwoPi();
2051 else if (vphi > TMath::Pi()) vphi -= TMath::TwoPi();
2053 if (mphi < -TMath::Pi()) mphi += TMath::TwoPi();
2054 else if (mphi > TMath::Pi()) mphi -= TMath::TwoPi();
2056 Double_t dphi = mphi - vphi;
2057 if (dphi < -TMath::Pi()) dphi += TMath::TwoPi();
2058 else if (dphi > TMath::Pi()) dphi -= TMath::TwoPi();
2069 if(!trkCont)
return 0.0;
2072 AliVParticle* track = NULL;
2073 Double_t phiTT =
fRandom->Rndm()*TMath::TwoPi();
2075 Bool_t bTTJetFound = kFALSE;
2079 phiTT = triggerHadron->Phi();
2080 etaTT = triggerHadron->Eta();
2084 jetCont->ResetCurrentID();
2087 if(jet->
Pt() < triggerHadron->Pt()*0.5)
continue;
2091 track = (AliVParticle*) (jet->
TrackAt(iq,trkCont->GetArray()));
2092 if(!track)
continue;
2093 if(track != triggerHadron)
continue;
2097 bTTJetFound = kTRUE;
2100 if(bTTJetFound)
break;
2111 Double_t sumPt = 0.;
2113 trkCont->ResetCurrentID();
2115 if(!track)
continue;
2119 if(
GetDeltaR(phiTT, track->Phi(), etaTT, track->Eta()) <
fCutPhi)
continue;
2122 if(TMath::Abs(track->GetLabel()) == 99999)
continue;
2125 sumPt += track->Pt();
2134 area -= fCutPhi*fCutPhi*TMath::Pi();
2137 area -= (fCutPhi*fCutPhi*(TMath::Pi()-alpha) + fCutPhi*TMath::Sin(alpha)*(
fTrackEtaWindow - TMath::Abs(etaTT)));
2146 Double_t rhoKT = 0.0;
2148 if(!jetCont)
return rhoKT;
2151 AliVParticle* constTrack = NULL;
2152 Bool_t bKTJetCloseToTT = kFALSE;
2157 jetCont->ResetCurrentID();
2162 bKTJetCloseToTT = kFALSE;
2165 if(jet->
Pt() > triggerHadron->Pt()*0.5){
2167 constTrack = (AliVParticle*) (jet->
TrackAt(iq,trkCont->GetArray()));
2168 if(!constTrack)
continue;
2169 if(constTrack == triggerHadron){
2170 bKTJetCloseToTT = kTRUE;
2176 if(bKTJetCloseToTT)
continue;
2181 constTrack = (AliVParticle*) (jet->
TrackAt(iq,trkCont->GetArray()));
2182 if(!constTrack)
continue;
2183 if(TMath::Abs(constTrack->GetLabel()) == 99999){
2184 sumEmbPt += constTrack->Pt();
2189 jetpt = jet->
Pt()- sumEmbPt;
2192 if(jetpt <0.005) jetpt = 0.;
2198 rhoKT = TMath::Median(nJetAcc,
frhovec);
2206 Double_t rhoKTcms = 0.0;
2208 if(!jetCont)
return rhoKTcms;
2211 AliVParticle* constTrack = NULL;
2212 Bool_t bKTJetCloseToTT = kFALSE;
2214 Double_t areaPhysJets = 0.0;
2215 Double_t areaAllJets = 0.0;
2217 Double_t sumEmbPt = 0.;
2219 jetCont->ResetCurrentID();
2224 bKTJetCloseToTT = kFALSE;
2227 if(jet->
Pt() > triggerHadron->Pt()*0.5){
2229 constTrack = (AliVParticle*) (jet->
TrackAt(iq,trkCont->GetArray()));
2230 if(!constTrack)
continue;
2231 if(constTrack != triggerHadron)
continue;
2232 bKTJetCloseToTT = kTRUE;
2237 if(bKTJetCloseToTT)
continue;
2242 constTrack = (AliVParticle*) (jet->
TrackAt(iq,trkCont->GetArray()));
2243 if(!constTrack)
continue;
2244 if(TMath::Abs(constTrack->GetLabel()) == 99999){
2245 sumEmbPt += constTrack->Pt();
2251 areaAllJets += jet->
Area();
2253 jetpt = jet->
Pt()- sumEmbPt;
2256 areaPhysJets += jet->
Area();
2263 rhoKTcms = TMath::Median(nJetAcc,
frhovec)*(areaPhysJets/areaAllJets);
2273 Double_t deta = eta1 - eta2;
2274 return sqrt(dphi*dphi + deta*deta);
2282 if(!jRec)
return -1.0;
2283 if(!jconRec)
return -1.0;
2284 if(!jGen)
return -1.0;
2285 if(!jconGen)
return -1.0;
2287 Double_t fraction = 0., sumPt = 0.;
2288 Double_t jetPt2 = jGen->
Pt();
2290 AliVParticle *pgen, *prec;
2301 if(TMath::Abs(prec->GetLabel()) == TMath::Abs(pgen->GetLabel())){
2305 if(TMath::Abs(prec->Eta() - pgen->Eta()) > 1e-4)
continue;
2306 if(TMath::Abs(
RelativePhi(prec->Phi(), pgen->Phi())) > 1e-4)
continue;
2307 if(TMath::Abs(prec->Pt() - pgen->Pt()) > 1e-4)
continue;
2315 sumPt += pgen->Pt();
2322 fraction = sumPt/jetPt2;
Double_t GetDeltaR(Double_t phi1, Double_t phi2, Double_t eta1, Double_t eta2)
TH2D * fhPtTrkSecOrFakeRec[kCAll]
Double_t fSignalJetRadiusSquared
TH2F * fhJetPhiGen[kCAll]
gc jet phi vs jet pT
TH2F * fhDphiTriggerJet[kCAll][kRho]
gc vertexZ accepted after vtx cut in MC
TH1F * fhVertexZ
gc X=centrality; Y= track pT
Bool_t fUseDoubleBinPrecision
virtual AliVParticle * GetNextAcceptParticle()
TH1F * fhRhoTT[kCAll][kRho-1]
TT associated spectrum of jets.
TH1D * fh1TriggerMult[kCAll]
trigger counter
TH1F * fhCentralityV0C
centrality from V0A
TH1F * fhVertexZAccept
gc vertexZ inclusive
AliEmcalJet * ClosestJet() const
TH2F * fhTrackPhi[kCAll]
gc jet phi vs jet pT
AliJetContainer * GetJetContainer(Int_t i=0) const
Double_t EstimateBgKTcms(AliJetContainer *jetCont, AliParticleContainer *trkArray, AliVParticle *triggerHadron)
Double_t GetImpactParameter()
TH2D * fhJetPtResolutionVsPtGen[kCAll][kRho]
AliVParticle * fTrigTracks[999]
Double_t EstimateBgCone(AliJetContainer *jetCont, AliParticleContainer *trkArray, AliVParticle *triggerHadron, Bool_t isGen=kFALSE)
TH1F * fARhoTT[kCAll][kRho-1]
gc X=rho from perp cone, Y=centrality
TH2D * fhPtTrkTruePrimGen[kCAll]
TH2F * fhKTAreaPt
delta pT from RndCone using rho from perp cone inclusive event
Bool_t IsEventInAcceptance(AliVEvent *event)
ClassImp(AliAnalysisTaskHJetSpectra) AliAnalysisTaskHJetSpectra
TH1F * fhCentralityV0ATT
centrality V0 multiplicity A+C when TT is present
Bool_t IsSignalJetInAcceptance(AliEmcalJet *jet, Bool_t suppressGhost=1)
Bool_t fUseDefaultVertexCut
Bool_t RetrieveEventObjects()
TH2F * fhJetEta[kCAll]
gc track phi vs track pT
TH2F * fhJetPhi[kCAll]
KT jets area versus PT.
TH1F * fhTrackPt[kCAll]
track eta vs track pT
TRandom3 * fRandom
impact parameter from hijing
Double_t fMinFractionShared
TH1F * fhCentralityV0MTT
centrality from ZNA
TH1D * fhDeltaPtIncl[kCAll][kRho-1]
embedded delta pT versus pT of the embedded jet (emb track is perp to TT)
Container for particles within the EMCAL framework.
void UserCreateOutputObjects()
UShort_t GetNumberOfTracks() const
virtual ~AliAnalysisTaskHJetSpectra()
Double_t GetFractionSharedPt(AliEmcalJet *jRec, AliJetContainer *jconRec, AliEmcalJet *jGen, AliJetContainer *jconGen)
AliParticleContainer * GetParticleContainer(Int_t i=0) const
TH1F * fhCentrality[kCAll]
Dphi of accepted jets after dphi cut.
TH1D * fhDeltaPtEmbPerp[kCAll][kRho-1]
embedded delta pT versus pT of the embedded jet
TH1D * fh1TriggerMultGen[kCAll]
trigger counter
Bool_t IsMCEventInAcceptance(AliVEvent *event)
AliParticleContainer * GetParticleContainer() const
TH2F * fhJetEtaGen[kCAll]
jet eta vs jet pT
TH1F * fhTrackPtGen[kCAll]
gc X=centrality; Y= track pT
TH1D * fhJetPtGen[kCAll][kRho]
impact parameter distribution hijing versus TT
TH1D * fhDeltaPt[kCAll][kRho-1]
jet area times rho from perp cone
Double_t fSignalJetEtaWindow
TH1F * fhCentralityV0A
centrality V0 multiplicity A+C
void Terminate(Option_t *)
Bool_t IsTrackInAcceptance(AliVParticle *track, Bool_t isGen=0)
AliAnalysisTaskHJetSpectra()
Double_t EstimateBgKT(AliJetContainer *jetCont, AliParticleContainer *trkArray, AliVParticle *trackTT)
TH1F * fhVertexZAcceptMC
gc vertexZ inclusive in MC
AliAnalysisUtils * fHelperClass
A random number.
TH1F * fhRhoIncl[kCAll][kRho-1]
gc X=rho from perp cone, Y=centrality
TH2D * fHJetSpecGen[kCAll][kRho]
TT associated spectrum of jets.
TH1F * fhCentralityV0CTT
centrality from V0A when TT is present
Double_t GetConePt(Double_t eta, Double_t phi, Double_t radius, AliParticleContainer *trkArray, Bool_t isGen)
TH2F * fhDphiTriggerJetGen[kCAll][kRho]
gc Delta phi versus jet pT
TH2D * fhJetPtGenVsJetPtRec[kCAll][kRho]
TH1D * fh1Ntriggers[kCAll]
gc event statistics
AliEmcalJet * GetNextAcceptJet()
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
Double_t RelativePhi(Double_t mphi, Double_t vphi)
Double_t fSignalJetRadius
Enhanced TList-derived class that implements correct merging for pt_hard binned production.
TH1F * fhDphiTriggerJetAccept
gc Delta phi versus jet pT
TH1D * fhImpactParameterTT[kCAll]
impact parameter distribution hijing
Double_t fImpParam
gc value is filled, if pythia header is accessible
AliEmcalList * fOutput
!output list
TH2D * fhDeltaPtEmb2D[kCAll][kRho-1]
embedded delta pT
Short_t TrackAt(Int_t idx) const
Double_t GetSimPrimaryVertex()
TH2F * fhTrackEta[kCAll]
jet eta vs jet pT
void GetDeltaPt(Int_t nrho, TArrayD &rho, Double_t *dpt, Double_t ttPhi, Double_t ttEta, AliParticleContainer *trkArray, Bool_t isGen)
TH1D * fhDeltaPtEmb[kCAll][kRho-1]
delta pT
Base task in the EMCAL jet framework.
Represent a jet reconstructed using the EMCal jet framework.
TH2D * fhDeltaPtEmbPerp2D[kCAll][kRho-1]
embedded delta pT (emb track is perp to TT)
void UserCreateOutputObjects()
TH1F * fhVertexZMC
gc vertexZ accepted after vtx cut
TH1D * fhImpactParameter[kCAll]
centrality from ZNA when TT is present
Bool_t RetrieveEventObjects()
TH1D * fh1NtriggersGen[kCAll]
tirgger multiplicity in event
TH1F * fhCentralityZNA
centrality from V0C
Bool_t fInitializedLocal
gc Vertex selection helper
TH2D * fhPtTrkTruePrimRec[kCAll]
TH1F * fhCentralityZNATT
centrality from V0C when TT is present
Container for jet within the EMCAL jet framework.
AliVParticle * fTrigTracksGen[999]
TH1F * fhCentralityV0M
centrality
TH2D * fHJetSpec[kCAll][kRho]
trigger multiplicity in event