1 #ifndef ALIANALYSISTASKSE_H
10 #include <TProfile2D.h>
19 #include <THnSparse.h>
22 #include <TClonesArray.h>
26 #include <TInterpreter.h>
27 #include "AliAnalysisTask.h"
28 #include "AliCentrality.h"
30 #include "AliESDEvent.h"
31 #include "AliESDInputHandler.h"
32 #include "AliAODEvent.h"
33 #include "AliAODHandler.h"
34 #include "AliAnalysisManager.h"
35 #include "AliAnalysisTaskSE.h"
38 #include "AliInputEventHandler.h"
43 #include "AliGenEventHeader.h"
44 #include "AliGenPythiaEventHeader.h"
45 #include "AliGenHijingEventHeader.h"
46 #include "AliAODMCHeader.h"
47 #include "AliMCEvent.h"
51 #include "AliVEventHandler.h"
52 #include "AliVParticle.h"
53 #include "AliAODMCParticle.h"
54 #include "AliAnalysisUtils.h"
57 #include "AliVVertex.h"
58 #include "AliExternalTrackParam.h"
63 #include "AliGenDPMjetEventHeader.h"
68 #include "AliHeader.h"
69 #include "AliRunLoader.h"
70 #include "AliVVZERO.h"
71 #include "AliAODZDC.h"
85 fUseDefaultVertexCut(1), fUsePileUpCut(1),
86 fRhoTaskName(), fRhoTaskNameMC(),
87 fSignalJetRadius(0.4), fSignalJetRadiusSquared(fSignalJetRadius*fSignalJetRadius),
88 fSignalJetEtaWindow(0.9 - fSignalJetRadius), fTrackEtaWindow(0.9), fMinTrackPt(0.150), fMinJetArea(0.0),
89 fCentralityType("V0A"), fMinFractionShared(0.5),
90 fCrossSection(0.0), fTrials(0.0), fImpParam(-1.0), fRandom(0), fHelperClass(0), fInitializedLocal(0),
91 fTTType(0), fDphiCut(TMath::Pi()-0.6), fUseDoubleBinPrecision(0),
92 fHistEvtSelection(0x0),fhKTAreaPt(0x0),
93 fhVertexZ(0x0), fhVertexXAccept(0x0), fhVertexYAccept(0x0), fhVertexZAccept(0x0),
94 fhVertexXAcceptTT(0x0), fhVertexYAcceptTT(0x0), fhVertexZAcceptTT(0x0),
95 fhVertexZMC(0x0), fhVertexZAcceptMC(0x0),
96 fhDphiTriggerJetAccept(0x0), fhJetPhiIncl(0x0), fhJetEtaIncl(0x0),
97 fhCentralityV0M(0x0), fhCentralityV0A(0x0), fhCentralityV0C(0x0), fhCentralityZNA(0x0),
98 fhDiffPtVsPtTrackTrue(0x0),
99 fhTrackPhiCG(0x0), fhTrackPhiTPCG(0x0),
102 fhDCAinXVsPtStrange(0x0),
103 fhDCAinYVsPtStrange(0x0),
104 fhDCAinXVsPtNonStrange(0x0),
105 fhDCAinYVsPtNonStrange(0x0),
106 fCentralityBins(kCAll),
110 fZVertexCut(10.0),fCutPhi(0.6),
114 for(
Int_t it=0; it<kTT;it++){
115 fRhoRec[it].Set(kRho);
116 fRhoMC[it].Set(kRho);
119 fhCentralityTT[it] = NULL;
122 for(
Int_t iw=0; iw<21; iw++){
123 fhPtJetPrimVsPtJetRec[iw] = NULL;
126 for(
Int_t ic =0; ic<kCAll; ic++){
127 for(
Int_t it=0; it<kTT;it++){
128 fh1Ntriggers[ic][it]=NULL;
129 fh1TriggerMult[ic][it]=NULL;
130 fh1NtriggersGen[ic][it]=NULL;
131 fh1TriggerMultGen[ic][it]=NULL;
134 fhImpactParameterTT[ic][it]=NULL;
136 for(
Int_t ir=0; ir<kRho; ir++){
137 fhDphiTriggerJet[ic][it][ir]=NULL;
138 fhDphiTriggerJetGen[ic][it][ir]=NULL;
139 fHJetSpec[ic][it][ir]=NULL;
140 fHJetSpecGen[ic][it][ir]=NULL;
142 fhDeltaPt[ic][it][ir]=NULL;
143 fhDeltaPtEmb[ic][it][ir]=NULL;
144 fhDeltaPtEmb2D[ic][it][ir]=NULL;
145 fhDeltaPtEmbPerp[ic][it][ir]=NULL;
146 fhDeltaPtEmbPerp2D[ic][it][ir]=NULL;
147 fhDeltaPtEmbBc2Bc[ic][it][ir]=NULL;
148 fhDeltaPtEmbBc2Bc2D[ic][it][ir]=NULL;
150 fhRhoTT[ic][it][ir]=NULL;
151 fARhoTT[ic][it][ir]=NULL;
154 fhVzeroATotMultTT[ic][it]=NULL;
155 fhZNAEnergyTT[ic][it]=NULL;
156 fhTrackMultiplicityTT[ic][it]=NULL;
157 fhZNAVzeroATrackTT[ic][it]=NULL;
159 for(
Int_t it=0; it<kTT; it++){
160 fhJetPhi[ic][it]=NULL;
161 fhJetPhiGen[ic][it]=NULL;
165 for(
Int_t it=0; it<kTT; it++){
166 fhJetEta[ic][it]=NULL;
167 fhJetEtaGen[ic][it]=NULL;
168 fhJetEtaRecoil[ic][it]=NULL;
169 fhJetEtaRecoilGen[ic][it]=NULL;
170 fhJetPhiRecoil[ic][it]=NULL;
171 fhJetPhiRecoilGen[ic][it]=NULL;
175 fhTrackPtGen[ic]=NULL;
176 fhCentrality[ic]=NULL;
177 fhVzeroATotMult[ic]=NULL;
178 fhZNAEnergy[ic]=NULL;
179 fhTrackMultiplicity[ic]=NULL;
180 fhZNAVzeroATrack[ic]=NULL;
181 fhImpactParameter[ic]=NULL;
183 for(
Int_t ir=0; ir<kRho; ir++){
184 fhJetPtGen[ic][ir]=NULL;
185 fhJetPtGenVsJetPtRec[ic][ir]=NULL;
186 fhJetPtResolutionVsPtGen[ic][ir]=NULL;
190 for(
Int_t ir=0; ir<kRho-1; ir++){
191 fhRhoIncl[ic][ir]=NULL;
192 fhDeltaPtIncl[ic][ir]=NULL;
195 fhPtTrkTruePrimRec[ic]=NULL;
196 fhPtTrkTruePrimGen[ic]=NULL;
197 fhPtTrkSecOrFakeRec[ic]=NULL;
200 fCentralityBins[0]=0.;
201 fCentralityBins[1]=20.;
202 fCentralityBins[2]=50.;
203 fCentralityBins[3]=100.;
204 fCentralityBins[4]=1e6;
218 for(
Int_t i=0; i<999; i++){
221 for(
Int_t it=0; it<kTT; it++){
222 fTrigTracksGen[it][i]=0x0;
223 fTrigTracks[it][i]=0x0;
233 for(
Int_t i=0; i<2; i++){
234 fhInvPtQVsPhi[i] = NULL;
235 fhInvPtQVsEta[i] = NULL;
236 fhInvPtQVsPhiASide[i] = NULL;
237 fhInvPtQVsPhiCSide[i] = NULL;
238 fhSigmaPtOverPtVsPt[i] = NULL;
246 fUseDefaultVertexCut(1), fUsePileUpCut(1),
247 fRhoTaskName(), fRhoTaskNameMC(),
248 fSignalJetRadius(0.4), fSignalJetRadiusSquared(fSignalJetRadius*fSignalJetRadius),
249 fSignalJetEtaWindow(0.9 - fSignalJetRadius), fTrackEtaWindow(0.9), fMinTrackPt(0.150), fMinJetArea(0.0),
250 fCentralityType(
"V0A"), fMinFractionShared(0.5),
251 fCrossSection(0.0), fTrials(0.0), fImpParam(-1.0), fRandom(0), fHelperClass(0), fInitializedLocal(0),
252 fTTType(0), fDphiCut(TMath::Pi()-0.6), fUseDoubleBinPrecision(0),
253 fHistEvtSelection(0x0), fhKTAreaPt(0x0),
254 fhVertexZ(0x0), fhVertexXAccept(0x0), fhVertexYAccept(0x0), fhVertexZAccept(0x0),
255 fhVertexXAcceptTT(0x0), fhVertexYAcceptTT(0x0), fhVertexZAcceptTT(0x0),
256 fhVertexZMC(0x0), fhVertexZAcceptMC(0x0),
257 fhDphiTriggerJetAccept(0x0), fhJetPhiIncl(0x0), fhJetEtaIncl(0x0),
258 fhCentralityV0M(0x0), fhCentralityV0A(0x0), fhCentralityV0C(0x0), fhCentralityZNA(0x0),
260 fhDiffPtVsPtTrackTrue(0x0),
261 fhTrackPhiCG(0x0), fhTrackPhiTPCG(0x0),
264 fhDCAinXVsPtStrange(0x0),
265 fhDCAinYVsPtStrange(0x0),
266 fhDCAinXVsPtNonStrange(0x0),
267 fhDCAinYVsPtNonStrange(0x0),
268 fCentralityBins(kCAll),
272 fZVertexCut(10.0),fCutPhi(0.6),
283 for(
Int_t iw=0; iw<21; iw++){
349 for(
Int_t ir=0; ir<kRho-1; ir++){
379 for(
Int_t i=0; i<999; i++){
392 for(
Int_t i=0; i<2; i++){
401 fTrackPtRef->SetParameters(1.46886e+08,8.37087e-01);
404 fTrackPtSig =
new TF1(
"fTrackPtSig",
"([0]*exp(-x*[1])+[2]*exp(-x*[3])+[4]*exp(-x*[5]))*([6]+x*[7]+x*x*[8])",
fTTlow[
kSig],
fTThigh[kSig]);
405 fTrackPtSig->SetParameters(1.85619e+07,6.08943e-01,3.10336e+05,2.71288e-01,2.28454e+03,1.01523e-01, 8.43568e-01, 6.64789e-03, 2.13813e-04);
407 DefineOutput(1, TList::Class());
422 if(!recTrkCont)
return 0.0;
424 AliVParticle* tmpTrack=NULL;
427 recTrkCont->ResetCurrentID();
429 if(!tmpTrack)
continue;
431 if(
GetDeltaR(tmpTrack->Phi(), phi, tmpTrack->Eta(), eta) < radius){
432 tmpConePt = tmpConePt + tmpTrack->Pt();
443 AliGenHijingEventHeader* hijingHeader =
dynamic_cast<AliGenHijingEventHeader*
>(MCEvent()->GenEventHeader());
447 AliAODMCHeader* aodMCH =
dynamic_cast<AliAODMCHeader*
>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
450 for(
UInt_t i = 0;i<aodMCH->GetNCocktailHeaders();i++){
451 hijingHeader =
dynamic_cast<AliGenHijingEventHeader*
>(aodMCH->GetCocktailHeader(i));
452 if(hijingHeader)
break;
458 return (
Double_t) (hijingHeader->ImpactParameter());
460 AliWarning(Form(
"In task %s: GetImpactParameter() failed!", GetName()));
467 AliGenEventHeader* mcHeader = NULL;
468 AliAODMCHeader* aodMCH = NULL;
471 AliRunLoader *
rl = AliRunLoader::Instance();
472 if(rl) mcHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(rl->GetHeader()->GenEventHeader());
478 mcHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(MCEvent()->GenEventHeader());
481 aodMCH =
dynamic_cast<AliAODMCHeader*
>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
484 for(
UInt_t i = 0; i<aodMCH->GetNCocktailHeaders(); i++){
485 mcHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(aodMCH->GetCocktailHeader(i));
491 mcHeader =
dynamic_cast<AliGenHijingEventHeader*
>(MCEvent()->GenEventHeader());
494 aodMCH =
dynamic_cast<AliAODMCHeader*
>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
497 for(
UInt_t i = 0; i<aodMCH->GetNCocktailHeaders(); i++){
498 mcHeader =
dynamic_cast<AliGenHijingEventHeader*
>(aodMCH->GetCocktailHeader(i));
504 mcHeader =
dynamic_cast<AliGenDPMjetEventHeader*
>(MCEvent()->GenEventHeader());
507 aodMCH =
dynamic_cast<AliAODMCHeader*
>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
510 for(
UInt_t i = 0; i<aodMCH->GetNCocktailHeaders(); i++){
511 mcHeader =
dynamic_cast<AliGenDPMjetEventHeader*
>(aodMCH->GetCocktailHeader(i));
523 mcHeader->PrimaryVertex(
fpyVtx);
526 AliWarning(Form(
"In task %s: Pythia Vertex failed!", GetName()));
534 if(!event)
return kFALSE;
558 if(!event)
return kFALSE;
571 fhVertexZ->Fill(event->GetPrimaryVertex()->GetZ());
579 if(TMath::Abs(event->GetPrimaryVertex()->GetZ()) >
fZVertexCut){
583 if(event->GetPrimaryVertex()->GetNContributors()<1){
593 fVtxArray[0]=
event->GetPrimaryVertex()->GetX();
594 fVtxArray[1]=
event->GetPrimaryVertex()->GetY();
595 fVtxArray[2]=
event->GetPrimaryVertex()->GetZ();
604 if(!track)
return kFALSE;
608 if(!track->Charge())
return kFALSE;
610 if(!(static_cast<AliAODMCParticle*>(track))->IsPhysicalPrimary())
return kFALSE;
625 if(!jet)
return kFALSE;
661 for(
Int_t ir=0;ir<nrho;ir++){
673 tmpRandConePhi =
fRandom->Rndm()*TMath::TwoPi();
723 for(
Int_t ir=0; ir < nrho; ir++){
737 AliError(
"??? Event pointer == 0 ???");
766 Double_t centralityPercentile = -1.0;
767 Double_t centralityPercentileV0A = -1.0;
768 Double_t centralityPercentileV0C = -1.0;
769 Double_t centralityPercentileV0M = -1.0;
770 Double_t centralityPercentileZNA = -1.0;
776 if(InputEvent()->GetVZEROData()){
777 multVzero = InputEvent()->GetVZEROData()->GetMTotV0A();
787 AliVZDC *aodZDC =
dynamic_cast<AliVZDC*
> (InputEvent()->GetZDCData());
789 const Double_t *ZNAtower = aodZDC->GetZNATowerEnergy();
790 energyZdcNA = ZNAtower[0]*4.*82./208./12.96;
794 AliCentrality* tmpCentrality = InputEvent()->GetCentrality();
799 centralityPercentile = tmpCentrality->GetCentralityPercentile(
fCentralityType.Data());
800 centralityPercentileV0A = tmpCentrality->GetCentralityPercentile(
"V0A");
801 centralityPercentileV0C = tmpCentrality->GetCentralityPercentile(
"V0C");
802 centralityPercentileV0M = tmpCentrality->GetCentralityPercentile(
"V0M");
803 centralityPercentileZNA = tmpCentrality->GetCentralityPercentile(
"ZNA");
807 AliWarning(Form(
"Centrality value not valid (c=%E)",centralityPercentile));
821 for(
Int_t ic=0; ic<2; ic++){
822 if(
ficb[ic]==-1)
continue;
833 for(
Int_t ic=0; ic<2; ic++){
834 if(
ficb[ic]==-1)
continue;
849 TClonesArray* arrayMC = 0;
851 Int_t iNTracksMC = 0;
855 AliError(
"No input AOD found!");
858 arrayMC = (TClonesArray*) aodIn->FindListObject(AliAODMCParticle::StdBranchName());
860 AliError(
"No MC array found!");
864 iNTracksMC = arrayMC->GetEntriesFast();
881 AliVParticle *constTrackRec = NULL;
882 AliVParticle *constTrackGen = NULL;
919 Int_t indexSingleRndTrigGen[
kTT] = {-1,-1};
920 AliVParticle* trackTTGen[
kTT] = {NULL,NULL};
923 Double_t sumFakeTrackPtInJetNotStrange = 0.;
924 Double_t sumFakeTrackPtInJetStrange = 0.;
925 Double_t sumStrangeTrackPtInJet = 0.;
926 AliAODMCParticle* particleMC = NULL;
927 AliAODMCParticle* particleMCMother = NULL;
928 Int_t iIndexMother = 0;
930 Int_t iPdgCodeMother = 0;
933 Double_t newJetPt=0., newSumFakePt=0., enhw =0.;
935 Double_t normprob, prob, probTT, dphiTTTT;
941 parContGen->ResetCurrentID();
943 if(!constTrackGen)
continue;
946 for(
Int_t ic=0; ic<2; ic++){
947 if(
ficb[ic]==-1)
continue;
952 if((
fTTlow[it] <= constTrackGen->Pt()) && (constTrackGen->Pt() <
fTThigh[it])){
953 if(ntriggersGen[it]<999){
965 for(
Int_t ic=0; ic<2; ic++){
966 if(
ficb[ic]==-1)
continue;
970 if(ntriggersGen[it]==1){
971 indexSingleRndTrigGen[it] = 0;
972 trackTTGen[it] = (AliVParticle*) (
fTrigTracksGen[it][indexSingleRndTrigGen[it]]);
974 }
else if(ntriggersGen[it]>1){
979 for(
Int_t ik=0; ik<ntriggersGen[it]; ik++){
980 normprob += tmpFunc->Eval(((AliVParticle*) (
fTrigTracksGen[it][ik]))->Pt());
985 for(
Int_t ik=0; ik<ntriggersGen[it]; ik++){
986 probTT += tmpFunc->Eval(((AliVParticle*) (
fTrigTracksGen[it][ik]))->Pt())/normprob;
988 indexSingleRndTrigGen[it] = ik;
993 indexSingleRndTrigGen[it] = 0;
995 trackTTGen[it] = (AliVParticle*) (
fTrigTracksGen[it][indexSingleRndTrigGen[it]]);
997 indexSingleRndTrigGen[it] =
fRandom->Integer(ntriggersGen[it]);
998 trackTTGen[it] = (AliVParticle*) (
fTrigTracksGen[it][indexSingleRndTrigGen[it]]);
1007 Int_t indexSingleRndTrig[
kTT] = {-1,-1};
1008 AliVParticle* trackTT[
kTT] = {NULL,NULL};
1014 trkContRec->ResetCurrentID();
1016 if(!constTrackRec)
continue;
1021 if(TMath::Abs(constTrackRec->GetLabel()) == 99999)
continue;
1027 for(
Int_t ic=0; ic<2; ic++){
1028 if(
ficb[ic]==-1)
continue;
1030 fhTrackEta[
ficb[ic]]->Fill(constTrackRec->Pt(), constTrackRec->Eta());
1035 if(
fTTlow[it] <= constTrackRec->Pt() && constTrackRec->Pt() <
fTThigh[it]){
1036 if(ntriggers[it]<999){
1048 for(
Int_t ic=0; ic<2; ic++){
1049 if(
ficb[ic]==-1)
continue;
1058 if(ntriggers[it]==1){
1059 indexSingleRndTrig[it] = 0;
1060 trackTT[it] = (AliVParticle*) (
fTrigTracks[it][indexSingleRndTrig[it]]);
1062 }
else if(ntriggers[it]>1){
1067 for(
Int_t ik=0; ik<ntriggers[it]; ik++){
1068 normprob += tmpFunc->Eval(((AliVParticle*) (
fTrigTracks[it][ik]))->Pt());
1073 if(dphiTTTT<-0.5*TMath::Pi()) dphiTTTT += TMath::TwoPi();
1074 if(dphiTTTT> 1.5*TMath::Pi()) dphiTTTT -= TMath::TwoPi();
1082 for(
Int_t ik=0; ik<ntriggers[it]; ik++){
1083 probTT += tmpFunc->Eval(((AliVParticle*) (
fTrigTracks[it][ik]))->Pt())/normprob;
1085 indexSingleRndTrig[it] = ik;
1090 indexSingleRndTrig[it] = 0;
1092 trackTT[it] = (AliVParticle*) (
fTrigTracks[it][indexSingleRndTrig[it]]);
1094 indexSingleRndTrig[it] =
fRandom->Integer(ntriggers[it]);
1095 trackTT[it] = (AliVParticle*) (
fTrigTracks[it][indexSingleRndTrig[it]]);
1100 if(ntriggers[
kRef]>0 || ntriggers[
kSig]>0){
1148 Bool_t bRecPrim = kFALSE;
1154 parContGen->ResetCurrentID();
1156 if(!constTrackGen)
continue;
1159 for(
Int_t ic=0; ic<2; ic++){
1160 if(
ficb[ic]==-1)
continue;
1168 if(trkContRec && parContGen){
1169 trkContRec->ResetCurrentID();
1171 if(!constTrackRec)
continue;
1175 parContGen->ResetCurrentID();
1177 if(!constTrackGen)
continue;
1179 if(TMath::Abs(constTrackRec->GetLabel()) == TMath::Abs(constTrackGen->GetLabel())){
1183 for(
Int_t ic=0; ic<2; ic++){
1184 if(
ficb[ic]==-1)
continue;
1193 for(
Int_t ic=0; ic<2; ic++){
1194 if(
ficb[ic]==-1)
continue;
1210 jetContGen->ResetCurrentID();
1212 if(!jetGen)
continue;
1220 for(
Int_t ic=0; ic<2; ic++){
1221 if(
ficb[ic]==-1)
continue;
1231 jetContRec->ResetCurrentID();
1233 if(!jetRec)
continue;
1238 sumFakeTrackPtInJetNotStrange = 0.;
1239 sumFakeTrackPtInJetStrange = 0.;
1240 sumStrangeTrackPtInJet = 0.;
1242 particleMCMother = NULL;
1249 constTrackRec =
static_cast<AliVParticle*
> (jetRec->
TrackAt(iq,trkContRec->GetArray()));
1250 if(!constTrackRec)
continue;
1253 parContGen->ResetCurrentID();
1255 if(!constTrackGen)
continue;
1257 if(TMath::Abs(constTrackRec->GetLabel()) == TMath::Abs(constTrackGen->GetLabel())){
1264 lab = TMath::Abs(constTrackRec->GetLabel());
1267 if(lab < iNTracksMC){
1268 particleMC = (AliAODMCParticle*) arrayMC->At(lab);
1270 iPdgCode = TMath::Abs(particleMC->GetPdgCode());
1271 iIndexMother = TMath::Abs(particleMC->GetMother());
1273 sumFakeTrackPtInJetStrange += constTrackRec->Pt();
1274 sumStrangeTrackPtInJet += constTrackRec->Pt();
1278 if(iIndexMother < iNTracksMC && 0 <= iIndexMother && !bStrange){
1280 particleMCMother = (AliAODMCParticle*) arrayMC->At(iIndexMother);
1281 if(particleMCMother){
1282 iPdgCodeMother = TMath::Abs(particleMCMother->GetPdgCode());
1285 sumFakeTrackPtInJetStrange += constTrackRec->Pt();
1286 sumStrangeTrackPtInJet += constTrackRec->Pt();
1294 sumFakeTrackPtInJetNotStrange += constTrackRec->Pt();
1298 lab = TMath::Abs(constTrackRec->GetLabel());
1299 if(lab < iNTracksMC){
1300 particleMC = (AliAODMCParticle*) arrayMC->At(lab);
1302 iPdgCode = TMath::Abs(particleMC->GetPdgCode());
1304 sumStrangeTrackPtInJet += constTrackRec->Pt();
1311 for(
Int_t iw=0; iw<21; iw++){
1313 newJetPt = jetRec->
Pt() + enhw*sumStrangeTrackPtInJet;
1314 newSumFakePt = sumFakeTrackPtInJetNotStrange + (1.0+ enhw)*sumFakeTrackPtInJetStrange;
1329 if(jetGen->
Pt()<1e-3){
1349 for(
Int_t ic=0; ic<2; ic++){
1350 if(
ficb[ic]==-1)
continue;
1373 Bool_t bFirstCycle = kTRUE;
1381 if(parContGen && ntriggersGen[it] >0 && ((AliVParticle*)trackTTGen[it])){
1382 bFirstCycle = kTRUE;
1384 AliVParticle* triggerHadronGen = (AliVParticle*) trackTTGen[it];
1385 if(!triggerHadronGen)
continue;
1387 for(
Int_t ic=0; ic<2; ic++){
1388 if(
ficb[ic]==-1)
continue;
1398 jetContGen->ResetCurrentID();
1401 AliError(Form(
"%s: Could not receive gen jet", GetName()));
1406 areaJet = jetGen->
Area();
1407 pTJet = jetGen->
Pt();
1410 for(
Int_t ic=0; ic<2; ic++){
1411 if(
ficb[ic]==-1)
continue;
1421 if(dfi < -0.5*TMath::Pi()) dfi += TMath::TwoPi();
1422 if(dfi > 1.5*TMath::Pi()) dfi -= TMath::TwoPi();
1425 for(
Int_t ic=0; ic<2; ic++){
1426 if(
ficb[ic]==-1)
continue;
1432 if(TMath::Abs(dphi) <
fDphiCut)
continue;
1438 for(
Int_t ic=0; ic<2; ic++){
1439 if(
ficb[ic]==-1)
continue;
1450 bFirstCycle = kFALSE;
1473 Bool_t bEmbJetCloseToTT = kFALSE;
1476 jetContRec->ResetCurrentID();
1478 if(!jetRec)
continue;
1482 bEmbJetCloseToTT = kFALSE;
1484 if(jetRec->
Pt() > trackTT[it]->Pt()*0.5){
1487 constTrackRec =
static_cast<AliVParticle*
> (jetRec->
TrackAt(iq,trkContRec->GetArray()));
1488 if(!constTrackRec)
continue;
1489 if(constTrackRec != ((AliVParticle*) trackTT[it]))
continue;
1491 bEmbJetCloseToTT = kTRUE;
1496 if(bEmbJetCloseToTT)
continue;
1504 if(jetEmb->
Pt()<1e-3){
1517 for(
Int_t ic=0; ic<2; ic++){
1518 if(
ficb[ic]==-1)
continue;
1529 dphi = TMath::Abs(
RelativePhi(trackTT[it]->Phi(), jetEmb->
Phi()));
1530 if(TMath::Pi()/4 < dphi && dphi < 3*TMath::Pi()/4){
1539 }
else if(dphi >= 3*TMath::Pi()/4 ){
1561 for(
Int_t ic=0; ic<2; ic++){
1562 if(
ficb[ic]==-1)
continue;
1568 if(ntriggers[it]>0){
1570 for(
Int_t ir=0; ir < kRho-1; ir++){
1573 for(
Int_t ic=0; ic<2; ic++){
1574 if(
ficb[ic]==-1)
continue;
1587 Double_t deltapt[kRho-1], phiTT = 0., etaTT = -1000.;
1590 Bool_t bRecJetCloseToTT = kFALSE;
1594 bRecJetCloseToTT = kFALSE;
1599 phiTT = trackTT[it]->Phi();
1600 etaTT = trackTT[it]->Eta();
1603 jetContRec->ResetCurrentID();
1605 if(!jetRec)
continue;
1609 bRecJetCloseToTT = kFALSE;
1611 if(jetRec->
Pt() > trackTT[it]->Pt()*0.5){
1613 constTrackRec = (AliVParticle*) (jetRec->
TrackAt(iq,trkContRec->GetArray()));
1614 if(!constTrackRec)
continue;
1615 if(constTrackRec != ((AliVParticle*) trackTT[it]))
continue;
1616 phiTT = jetRec->
Phi();
1617 etaTT = jetRec->
Eta();
1618 bRecJetCloseToTT = kTRUE;
1622 if(bRecJetCloseToTT)
break;
1630 GetDeltaPt(kRho-1, (
fRhoRec[it]), &deltapt[0], phiTT, etaTT, trkContRec, kFALSE);
1633 for(
Int_t ir=0; ir < kRho-1; ir++){
1634 for(
Int_t ic=0; ic<2; ic++){
1635 if(
ficb[ic]==-1)
continue;
1639 if(ntriggers[it]>0){
1653 AliAODTrack *atrk=NULL;
1658 trkContRec->ResetCurrentID();
1665 if(dphi < 0) dphi+= 2*TMath::Pi();
1666 if(dphi > 2*TMath::Pi()) dphi-= 2*TMath::Pi();
1668 if(atrk->IsGlobalConstrained()){
1674 itrkq = (atrk->Charge()<0) ? 0 : 1;
1687 memset(cv, 0,
sizeof(
Double_t) * 21);
1688 memset(pxpypz, 0,
sizeof(
Double_t) * 50);
1689 memset(xyz, 0,
sizeof(
Double_t) * 50);
1691 atrk->GetPxPyPz(pxpypz);
1692 atrk->GetCovarianceXYZPxPyPz(cv);
1694 AliExternalTrackParam par(xyz, pxpypz, cv, atrk->Charge());
1695 fhSigmaPtOverPtVsPt[itrkq]->Fill(atrk->Pt(), TMath::Abs(sqrt(par.GetSigma1Pt2())/par.GetSigned1Pt()));
1702 lab = TMath::Abs(atrk->GetLabel());
1704 if(lab < iNTracksMC){
1705 particleMC = (AliAODMCParticle*) arrayMC->At(lab);
1707 if(particleMC->IsPhysicalPrimary()){
1719 for(
Int_t ic=0; ic<2; ic++){
1720 if(
ficb[ic]==-1)
continue;
1749 jetContRec->ResetCurrentID();
1752 AliError(Form(
"%s: Could not receive jet", GetName()));
1757 pTJet = jetRec->
Pt();
1767 if(ntriggers[it]>0 && ((AliVParticle*) trackTT[it])){
1772 AliVParticle* triggerHadron = (AliVParticle*) trackTT[it];
1773 if(!triggerHadron)
continue;
1775 for(
Int_t ic=0; ic<2; ic++){
1776 if(
ficb[ic]==-1)
continue;
1783 jetContRec->ResetCurrentID();
1786 AliError(Form(
"%s: Could not receive jet", GetName()));
1791 areaJet = jetRec->
Area();
1792 pTJet = jetRec->
Pt();
1795 for(
Int_t ic=0; ic<2; ic++){
1796 if(
ficb[ic]==-1)
continue;
1805 if(dfi < -0.5*TMath::Pi()) dfi += TMath::TwoPi();
1806 if(dfi > 1.5*TMath::Pi()) dfi -= TMath::TwoPi();
1808 for(
Int_t ic=0; ic<2; ic++){
1809 if(
ficb[ic]==-1)
continue;
1817 if(TMath::Abs(dphi) <
fDphiCut)
continue;
1825 for(
Int_t ic=0; ic<2; ic++){
1826 if(
ficb[ic]==-1)
continue;
1842 bFirstCycle = kFALSE;
1880 printf(
"ERROR: Output list not available\n");
1889 if(
fOutput && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
1906 TString bgtype[]={
"Perp",
"CMS",
"KT",
"Zero"};
1910 Bool_t oldStatus = TH1::AddDirectoryStatus();
1911 TH1::AddDirectory(kFALSE);
1933 for(
Int_t ic =0; ic<icmax; ic++){
1934 name = (ic==0) ? Form(
"fh1NtriggersMB") :
1936 name.Append(Form(
"TT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
1940 name = (ic==0) ? Form(
"fh1TriggerMultMB") :
1942 name.Append(Form(
"TT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
1953 const Int_t dimSpec = 2;
1954 const Int_t nBinsSpec[dimSpec] = { 50, bw*160};
1955 const Double_t lowBinSpec[dimSpec] = { 0.0, -20.0};
1956 const Double_t hiBinSpec[dimSpec] = { 2.0, 300.0};
1958 for(
Int_t ic =0; ic<icmax; ic++){
1961 name = (ic==0) ?
"fHJetSpecMB" :
1964 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
1968 Form(
"Recoil jet spectrum TT%d%d [A,pTjet-A*rho%s]",
1970 nBinsSpec[0], lowBinSpec[0], hiBinSpec[0], nBinsSpec[1], lowBinSpec[1],hiBinSpec[1]);
1978 for(
Int_t ic =0; ic<icmax; ic++){
1981 name = (ic==0) ?
"fhRhoMB" :
1985 name.Append(Form(
"TT%d%d%s",TMath::Nint(
fTTlow[it]),TMath::Nint(
fTThigh[it]),bgtype[ir].
Data()));
1988 fhRhoTT[ic][it][ir] =
new TH1F(name.Data(),
1989 Form(
"Rho%s",bgtype[ir].
Data()),80, 0.0, 40.0);
1994 name = (ic==0) ?
"fARhoMB" :
1998 name.Append(Form(
"TT%d%d%s",TMath::Nint(
fTTlow[it]),TMath::Nint(
fTThigh[it]),bgtype[ir].
Data()));
1999 fARhoTT[ic][it][ir] =
new TH1F(name.Data(),
2000 Form(
"Area times rho %s",bgtype[ir].
Data()),80, 0.0, 40.0);
2004 name = (ic==0) ? Form(
"fhRhoInclMB%s",bgtype[ir].
Data()) :
2015 for(
Int_t ic =0; ic<icmax; ic++){
2018 name = (ic==0) ?
"fhDeltaPtMB" :
2022 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
2024 Form(
"DeltaPt%s",bgtype[ir].
Data()), 150, -50, 100);
2029 name = (ic==0) ?
"fhDeltaPtInclMB" :
2033 name.Append(Form(
"%s", bgtype[ir].
Data()));
2041 name = (ic==0) ?
"fhDeltaPtEmbMB" :
2045 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
2050 name = (ic==0) ?
"fhDeltaPtEmbPerpMB" :
2054 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
2059 name = (ic==0) ?
"fhDeltaPtEmbBc2BcMB" :
2063 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
2068 name = (ic==0) ?
"fhDeltaPtEmb2DMB" :
2072 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
2074 Form(
"fhDeltaPtEmb2D%s",bgtype[ir].
Data()), 125,0, 250, 150, -50, 100);
2079 name = (ic==0) ?
"fhDeltaPtEmbPerp2DMB" :
2083 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
2089 name = (ic==0) ?
"fhDeltaPtEmbBc2Bc2DMB" :
2093 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
2104 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.};
2107 fhKTAreaPt =
new TH2F(
"fhKTAreaPt",
"KT jet Area vs Pt",nbinsPt, binsPt, 50,0,2);
2112 for(
Int_t ic =0; ic<icmax; ic++){
2114 name = (ic==0) ? Form(
"fhJetPhiMBTT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])) :
2121 fhJetPhi[ic][it] =
new TH2F(name.Data(),
"Azim dist jets vs pTjet", 50, 0, 100, 50,-TMath::Pi(),TMath::Pi());
2126 name = (ic==0) ? Form(
"fhJetPhiMBTT%d%dRecoil", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])) :
2133 fhJetPhiRecoil[ic][it] =
new TH2F(name.Data(),
"Azim dist jets vs pTjet", 50, 0, 100, 50,-TMath::Pi(),TMath::Pi());
2138 name = (ic==0) ? Form(
"fhTrackPhiMB") :
2142 fhTrackPhi[ic] =
new TH2F(name.Data(),
"azim dist trig had vs pT,trk", 50, 0, 50, 50,-TMath::Pi(),TMath::Pi());
2146 name = (ic==0) ? Form(
"fhJetEtaMBTT%d%d",TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]) ) :
2152 fhJetEta[ic][it] =
new TH2F(name.Data(),
"Eta dist jets vs pTjet", 50,0, 100, 40,-0.9,0.9);
2157 name = (ic==0) ? Form(
"fhJetEtaMBTT%d%dRecoil",TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]) ) :
2163 fhJetEtaRecoil[ic][it] =
new TH2F(name.Data(),
"Eta dist of recoil jets vs pTjet", 50,0, 100, 40,-0.9,0.9);
2167 name = (ic==0) ? Form(
"fhTrackEtaMB") :
2171 fhTrackEta[ic] =
new TH2F(name.Data(),
"Eta dist trig had vs pT,trk", 50, 0, 50, 40,-0.9,0.9);
2174 name = (ic==0) ? Form(
"fhTrackPtMB") :
2178 fhTrackPt[ic] =
new TH1F(name.Data(),
"pT,trk ", 50, 0, 50);
2182 fhVertexZ =
new TH1F(
"fhVertexZ",
"z vertex",40,-20,20);
2185 fhVertexXAccept =
new TH1F(
"fhVertexXAccept",
"vertex after cut",600,-3,3);
2191 fhVertexZAccept =
new TH1F(
"fhVertexZAccept",
"z vertex after cut",40,-20,20);
2206 fhVertexZMC =
new TH1F(
"fhVertexZMC",
"z vertex",40,-20,20);
2209 fhVertexZAcceptMC =
new TH1F(
"fhVertexZAcceptMC",
"z vertex after cut",40,-20,20);
2213 for(
Int_t ic =0; ic<icmax; ic++){
2217 Form(
"fhDphiTriggerJetMB") :
2220 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]) ,bgtype[ir].
Data()));
2222 fhDphiTriggerJet[ic][it][ir] =
new TH2F(name.Data(),
"Deltaphi trig-jet",75,-50,100, 100, -0.5*TMath::Pi(),1.5*TMath::Pi());
2229 fhDphiTriggerJetAccept =
new TH1F(
"fhDphiTriggerJetAccept",
"Deltaphi trig-jet after cut",50, -0.5*TMath::Pi(),1.5*TMath::Pi());
2232 fhDphiTTTT[
kRef] =
new TH1F(
"fhDphiTTTT67",
"Deltaphi between multiple TT",50, -0.5*TMath::Pi(),1.5*TMath::Pi());
2238 fhJetPhiIncl =
new TH2F(
"fhJetPhiIncl",
"Azim dist jets vs pTjet", 50, 0, 100, 50,-TMath::Pi(),TMath::Pi());
2241 fhJetEtaIncl =
new TH2F(
"fhJetEtaIncl",
"Eta dist inclusive jets vs pTjet", 50,0, 100, 40,-0.9,0.9);
2244 fhTrackPhiCG =
new TH2F(
"fhTrackPhiCG",
"azim dist trig had vs pT,trk Glob Const", 50, 0, 50, 50,0,2*TMath::Pi());
2247 fhTrackPhiTPCG =
new TH2F(
"fhTrackPhiTPCG",
"azim dist trig had vs pT,trk TPC Const", 50, 0, 50, 50,0,2*TMath::Pi());
2251 for(
Int_t i=0; i<2; i++){
2252 name = (i==0) ?
"Neg" :
"Pos";
2254 Form(
"%s track 1/pt versus track phi", name.Data()), 36, 0, 2*TMath::Pi(), 40, 0, 0.4);
2258 Form(
"%s track 1/pt versus track eta", name.Data()), 20, -0.9, 0.9, 40, 0, 0.4);
2262 Form(
"%s track 1/pt versus track phi", name.Data()), 36, 0, 2*TMath::Pi(), 40, 0, 0.4);
2266 Form(
"%s track 1/pt versus track phi", name.Data()), 36, 0, 2*TMath::Pi(), 40, 0, 0.4);
2270 Form(
"%s track sigma(1/pt)/ 1/pt vs pt", name.Data()), 100, 0, 100, 250, 0, 1);
2274 for(
Int_t ic =0; ic<icmax; ic++){
2275 name = (ic==0) ? Form(
"fhCentralityMB") :
2279 fhCentrality[ic] =
new TH1F(name.Data(),
"Centrality",20,0,100);
2283 fhCentralityV0M =
new TH1F(
"hCentralityV0M",
"hCentralityV0M",20,0,100);
2286 fhCentralityV0A =
new TH1F(
"hCentralityV0A",
"hCentralityV0A",20,0,100);
2289 fhCentralityV0C =
new TH1F(
"hCentralityV0C",
"hCentralityV0C",20,0,100);
2292 fhCentralityZNA =
new TH1F(
"hCentralityZNA",
"hCentralityZNA",20,0,100);
2296 name = Form(
"fhCentralityTT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]));
2302 for(
Int_t ic =0; ic<icmax; ic++){
2303 name = (ic==0) ? Form(
"fhVzeroATotMultMB") :
2308 fhVzeroATotMult[ic] =
new TH1F(name.Data(),
"hVzeroATotMult",1000,0,1000);
2312 name = (ic==0) ?
"fhVzeroATotMultMB" :
2316 name.Append(Form(
"TT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
2326 for(
Int_t ic =0; ic<icmax; ic++){
2327 name = (ic==0) ? Form(
"fhZNAEnergyMB") :
2332 fhZNAEnergy[ic] =
new TH1F(name.Data(),
"fhZNAEnergy",1000,0,200);
2336 name = (ic==0) ? Form(
"fhZNAEnergyMB") :
2340 name.Append(Form(
"TT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
2349 for(
Int_t ic =0; ic<icmax; ic++){
2350 name = (ic==0) ? Form(
"fhTrackMultiplicityMB") :
2358 name = (ic==0) ? Form(
"fhTrackMultiplicityMB") :
2362 name.Append(Form(
"TT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
2371 const Int_t dimZ = 3;
2372 const Int_t nBinsZ[dimZ] = { 100, 100, 25 };
2373 const Double_t lowBinZ[dimZ] = { 0.0, 0.0, 0.0};
2374 const Double_t hiBinZ[dimZ] = { 200.0, 1000.0, 250};
2376 for(
Int_t ic =0; ic<icmax; ic++){
2377 name = (ic==0) ? Form(
"fhZNAVzeroATrackMB") :
2383 Form(
"ZNA, V0A mult, track mult"),
2384 dimZ, nBinsZ,lowBinZ,hiBinZ);
2391 name = (ic==0) ? Form(
"fhZNAVzeroATrackMB") :
2395 name.Append(Form(
"TT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
2420 name = (ic==0) ? Form(
"fhImpactParameterMB") :
2429 name = (ic==0) ? Form(
"fhImpactParameterMB") :
2433 name.Append(Form(
"TT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
2440 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.};
2444 for(
Int_t ic =0; ic<icmax; ic++){
2446 name = (ic==0) ? Form(
"fhJetPtGenMB%s",bgtype[ir].
Data()) :
2451 Form(
"Jet pT Gen %s",bgtype[ir].
Data()),bw*160,-20,300);
2455 name = (ic==0) ? Form(
"fhJetPtGenVsJetPtRecMB%s",bgtype[ir].
Data()) :
2460 "", bw*160,-20,300, bw*160,-20,300);
2464 name = (ic==0) ? Form(
"fhJetPtResolutionVsPtGenMB%s",bgtype[ir].
Data()) :
2465 Form(
"fhJetPtResolutionVsPtGen%d%d%s",TMath::Nint(
fCentralityBins[ic-1]),
2469 "Resolution", 20,0,100, 200,-1.,1.);
2476 -50, -48., -46., -44, -42.,
2477 -40., -38., -36., -34., -32., -30., -28., -26., -25., -24., -23., -22., -21.,
2478 -20., -19.5, -19., -18.5, -18., -17.5, -17., -16.5, -16., -15.5,
2479 -15., -14.5, -14., -13.5, -13., -12.5, -12., -11.5, -11., -10.5,
2480 -10.0, -9.8, -9.6, -9.4, -9.2,
2481 -9.0, -8.8, -8.6, -8.4, -8.2,
2482 -8.0, -7.8, -7.6, -7.4, -7.2,
2483 -7.0, -6.8, -6.6, -6.4, -6.2,
2484 -6.0, -5.8, -5.6, -5.4, -5.2,
2485 -5.0, -4.8, -4.6, -4.4, -4.2,
2486 -4.0, -3.8, -3.6, -3.4, -3.2,
2487 -3.0, -2.8, -2.6, -2.4, -2.2,
2488 -2.0, -1.9, -1.8, -1.7, -1.6, -1.5, -1.4, -1.3, -1.2, -1.1,
2489 -1.0,-0.95, -0.9, -0.85, -0.8, -0.75, -0.7, -0.65, -0.6, -0.55,
2490 -0.5,-0.48, -0.46, -0.44, -0.42,
2491 -0.4, -0.38, -0.36, -0.34, -0.32,
2492 -0.3, -0.28, -0.26, -0.24, -0.22,
2493 -0.2, -0.18, -0.16, -0.14, -0.12,
2494 -0.1, -0.09, -0.08, -0.07, -0.06,
2495 -0.05, -0.045, -0.04,-0.035 ,-0.03, -0.025, -0.02, -0.015, -0.01, -0.005,
2496 0, 0.005, 0.01, 0.015, 0.02, 0.025, 0.03, 0.035, 0.04, 0.045,
2497 0.05, 0.06, 0.07, 0.08, 0.09,
2498 0.1, 0.12, 0.14, 0.16, 0.18,
2499 0.2, 0.22, 0.24, 0.26, 0.28,
2500 0.3, 0.32, 0.34, 0.36, 0.38,
2501 0.4, 0.42, 0.44, 0.46, 0.48,
2502 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8,0.85, 0.9, 0.95,
2503 1.0,1.1, 1.2,1.3, 1.4,1.5, 1.6, 1.7, 1.8, 1.9,
2504 2.0, 2.2, 2.4, 2.6, 2.8,
2505 3.0, 3.2, 3.4, 3.6, 3.8,
2506 4.0, 4.2, 4.4, 4.6, 4.8,
2507 5.0, 5.2, 5.4, 5.6, 5.8,
2508 6.0, 6.2, 6.4, 6.6, 6.8,
2509 7.0, 7.2, 7.4, 7.6, 7.8,
2510 8.0, 8.2, 8.4, 8.6, 8.8,
2511 9.0, 9.2, 9.4, 9.6, 9.8,
2512 10., 10.5, 11., 11.5, 12., 12.5, 13., 13.5, 14., 14.5,
2513 15., 15.5, 16., 16.5, 17., 17.5, 18., 18.5, 19., 19.5,
2514 20., 21., 22., 23., 24, 25, 26., 28., 30., 32.,34., 36., 38.,
2515 40., 42., 44., 46., 48., 50.};
2518 for(
Int_t ic =0; ic<icmax; ic++){
2519 name = (ic==0) ? Form(
"fhPtTrkTruePrimRecMB") :
2527 name = (ic==0) ? Form(
"fhPtTrkTruePrimGenMB") :
2534 name = (ic==0) ? Form(
"fhPtTrkSecOrFakeRecMB") :
2542 for(
Int_t iw=0; iw<21; iw++){
2543 name = Form(
"fhPtJetPrimVsPtJetRecMB%03d",TMath::Nint(100*iw*0.05));
2547 name = Form(
"fhDiffPtVsPtTrackTrueMB");
2553 fhDCAinXVsPt =
new TH2D(
"fhDCAinXVsPt",
"fhDCAinXVsPt",nbins, bins, 200, -10.,10);
2570 for(
Int_t ic =0; ic<icmax; ic++){
2572 name = (ic==0) ? Form(
"fh1NtriggersGenMB") :
2575 name.Append(Form(
"TT%d%d",TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
2581 name = (ic==0) ? Form(
"fh1TriggerMultGenMB") :
2585 name.Append(Form(
"TT%d%d",TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
2591 name = (ic==0) ?
"fHJetSpecGenMB" :
2595 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
2602 name = (ic==0) ? Form(
"fhJetPhiGenMBTT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])) :
2613 name = (ic==0) ? Form(
"fhJetEtaGenMBTT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])) :
2626 name = (ic==0) ? Form(
"fhJetPhiGenMBTT%d%dRecoil", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])) :
2627 Form(
"fhJetPhiGen%d%dTT%d%dRecoil",TMath::Nint(
fCentralityBins[ic-1]),
2637 name = (ic==0) ? Form(
"fhJetEtaGenMBTT%d%dRecoil", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])) :
2638 Form(
"fhJetEtaGen%d%dTT%d%dRecoil",TMath::Nint(
fCentralityBins[ic-1]),
2650 name = (ic==0) ? Form(
"fhTrackPtGenMB") :
2675 THnSparse *hn =
dynamic_cast<THnSparse*
>(
fOutput->At(i));
2680 TH1::AddDirectory(oldStatus);
2706 if (vphi < -TMath::Pi()) vphi += TMath::TwoPi();
2707 else if (vphi > TMath::Pi()) vphi -= TMath::TwoPi();
2709 if (mphi < -TMath::Pi()) mphi += TMath::TwoPi();
2710 else if (mphi > TMath::Pi()) mphi -= TMath::TwoPi();
2713 if (dphi < -TMath::Pi()) dphi += TMath::TwoPi();
2714 else if (dphi > TMath::Pi()) dphi -= TMath::TwoPi();
2725 if(!trkCont)
return 0.0;
2728 AliVParticle* track = NULL;
2731 Bool_t bTTJetFound = kFALSE;
2735 phiTT = triggerHadron->Phi();
2736 etaTT = triggerHadron->Eta();
2740 jetCont->ResetCurrentID();
2743 if(jet->
Pt() < triggerHadron->Pt()*0.5)
continue;
2747 track = (AliVParticle*) (jet->
TrackAt(iq,trkCont->GetArray()));
2748 if(!track)
continue;
2749 if(track != triggerHadron)
continue;
2753 bTTJetFound = kTRUE;
2756 if(bTTJetFound)
break;
2769 trkCont->ResetCurrentID();
2771 if(!track)
continue;
2775 if(
GetDeltaR(phiTT, track->Phi(), etaTT, track->Eta()) <
fCutPhi)
continue;
2778 if(TMath::Abs(track->GetLabel()) == 99999)
continue;
2781 sumPt += track->Pt();
2790 area -= fCutPhi*fCutPhi*TMath::Pi();
2793 area -= (fCutPhi*fCutPhi*(TMath::Pi()-alpha) + fCutPhi*TMath::Sin(alpha)*(
fTrackEtaWindow - TMath::Abs(etaTT)));
2804 if(!jetCont)
return rhoKT;
2807 AliVParticle* constTrack = NULL;
2808 Bool_t bKTJetCloseToTT = kFALSE;
2813 jetCont->ResetCurrentID();
2818 bKTJetCloseToTT = kFALSE;
2821 if(jet->
Pt() > triggerHadron->Pt()*0.5){
2823 constTrack = (AliVParticle*) (jet->
TrackAt(iq,trkCont->GetArray()));
2824 if(!constTrack)
continue;
2825 if(constTrack == triggerHadron){
2826 bKTJetCloseToTT = kTRUE;
2832 if(bKTJetCloseToTT)
continue;
2837 constTrack = (AliVParticle*) (jet->
TrackAt(iq,trkCont->GetArray()));
2838 if(!constTrack)
continue;
2839 if(TMath::Abs(constTrack->GetLabel()) == 99999){
2840 sumEmbPt += constTrack->Pt();
2845 jetpt = jet->
Pt()- sumEmbPt;
2848 if(jetpt <0.005) jetpt = 0.;
2854 rhoKT = TMath::Median(nJetAcc,
frhovec);
2864 if(!jetCont)
return rhoKTcms;
2867 AliVParticle* constTrack = NULL;
2868 Bool_t bKTJetCloseToTT = kFALSE;
2875 jetCont->ResetCurrentID();
2880 bKTJetCloseToTT = kFALSE;
2883 if(jet->
Pt() > triggerHadron->Pt()*0.5){
2885 constTrack = (AliVParticle*) (jet->
TrackAt(iq,trkCont->GetArray()));
2886 if(!constTrack)
continue;
2887 if(constTrack != triggerHadron)
continue;
2888 bKTJetCloseToTT = kTRUE;
2893 if(bKTJetCloseToTT)
continue;
2898 constTrack = (AliVParticle*) (jet->
TrackAt(iq,trkCont->GetArray()));
2899 if(!constTrack)
continue;
2900 if(TMath::Abs(constTrack->GetLabel()) == 99999){
2901 sumEmbPt += constTrack->Pt();
2907 areaAllJets += jet->
Area();
2909 jetpt = jet->
Pt()- sumEmbPt;
2912 areaPhysJets += jet->
Area();
2919 rhoKTcms = TMath::Median(nJetAcc,
frhovec)*(areaPhysJets/areaAllJets);
2930 return sqrt(dphi*dphi + deta*deta);
2938 if(!jRec)
return -1.0;
2939 if(!jconRec)
return -1.0;
2940 if(!jGen)
return -1.0;
2941 if(!jconGen)
return -1.0;
2943 Double_t fraction = 0., sumPt = 0.;
2946 AliVParticle *pgen, *prec;
2957 if(TMath::Abs(prec->GetLabel()) == TMath::Abs(pgen->GetLabel())){
2961 if(TMath::Abs(prec->Eta() - pgen->Eta()) > 1e-4)
continue;
2962 if(TMath::Abs(
RelativePhi(prec->Phi(), pgen->Phi())) > 1e-4)
continue;
2963 if(TMath::Abs(prec->Pt() - pgen->Pt()) > 1e-4)
continue;
2971 sumPt += pgen->Pt();
2978 fraction = sumPt/jetPt2;
2992 if(ip==321)
return kTRUE;
2993 if(ip==130)
return kTRUE;
2994 if(ip==310)
return kTRUE;
2995 if(ip==3112)
return kTRUE;
2996 if(ip==3122)
return kTRUE;
2997 if(ip==3222)
return kTRUE;
2998 if(ip==3312)
return kTRUE;
2999 if(ip==3322)
return kTRUE;
3000 if(ip==3334)
return kTRUE;
Double_t GetDeltaR(Double_t phi1, Double_t phi2, Double_t eta1, Double_t eta2)
TH2D * fhPtTrkSecOrFakeRec[kCAll]
pt spectrum of true generated primary track
TH1F * fhVertexZAcceptTT
gc vertexZ accepted after vtx cut
Double_t fSignalJetRadiusSquared
void SetTT(Double_t tlr, Double_t thr, Double_t tls, Double_t ths)
TH2F * fhJetPhiRecoil[kCAll][kTT]
minimum bias eta for recoil jets gen
TH1F * fhVertexZ
gc X=centrality; Y= track pT
Double_t fTTlow[kTT]
gc trigger if tracks/jets are loaded initiates calling ExecOnce
Bool_t fUseDoubleBinPrecision
virtual AliVParticle * GetNextAcceptParticle()
TH1F * fhVzeroATotMultTT[kCAll][kTT]
V0A multiplicity for given V0A centrality selection.
TH1D * fhDeltaPtEmbBc2Bc[kCAll][kTT][kRho]
embedded delta pT versus pT of the embedded jet (emb track is perp to TT)
AliVParticle * fTrigTracksGen[kTT][999]
TH2D * fhDCAinXVsPt
hybrid TPC constrained track phi vs track pT
TH1F * fhCentralityV0C
centrality from V0A
TH1F * fhVertexZAccept
gc vertexZ accepted after vtx cut
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]
pt jet gen level vs pT jet rec level
Double_t EstimateBgCone(AliJetContainer *jetCont, AliParticleContainer *trkArray, AliVParticle *triggerHadron, Bool_t isGen=kFALSE)
TH2D * fhPtTrkTruePrimGen[kCAll]
pt spectrum of true reconstructed primary tracks
Bool_t FillHistograms()
Function filling histograms.
TH2F * fhKTAreaPt
delta pT from RndCone using rho from perp cone inclusive event
Bool_t IsEventInAcceptance(AliVEvent *event)
TH1D * fhDeltaPt[kCAll][kTT][kRho]
jet area times rho from perp cone
ClassImp(AliAnalysisTaskHJetSpectra) AliAnalysisTaskHJetSpectra
TH1D * fhDeltaPtEmbPerp[kCAll][kTT][kRho]
embedded delta pT versus pT of the embedded jet
Bool_t IsSignalJetInAcceptance(AliEmcalJet *jet, Bool_t suppressGhost=1)
TH2D * fhDeltaPtEmb2D[kCAll][kTT][kRho]
embedded delta pT
TH1D * fh1NtriggersGen[kCAll][kTT]
tirgger multiplicity in event
TH2F * fhJetEta[kCAll][kTT]
gc track phi vs track pT
TH1F * fhRhoIncl[kCAll][kRho]
gc X=rho from perp cone, Y=centrality
TArrayD fRhoRec[kTT]
Y DCA versus pT of non strange tracks.
TH1F * fhVertexXAccept
gc vertexZ inclusive
TH1D * fhDeltaPtEmb[kCAll][kTT][kRho]
delta pT
Bool_t fUseDefaultVertexCut
Bool_t RetrieveEventObjects()
TH1D * fh1TriggerMultGen[kCAll][kTT]
trigger counter
Bool_t Run()
Run function. This is the core function of the analysis and contains the user code. Therefore users have to implement this function.
TH1F * fhTrackPt[kCAll]
track eta vs track pT
TH1D * fhDeltaPtIncl[kCAll][kRho]
embedded delta pT versus pT of the embedded jet (emb track is backtoback in azimtuh w...
TH2D * fhInvPtQVsPhi[2]
track Y= rec pt - true pt X= true track pT
TRandom3 * fRandom
impact parameter from hijing
Double_t fMinFractionShared
TH1D * fh1TriggerMult[kCAll][kTT]
trigger counter
TH2D * fhSigmaPtOverPtVsPt[2]
q*1/pT versus eta
TH1F * fhVertexXAcceptTT
gc vertexZ accepted after vtx cut
Container for particles within the EMCAL framework.
void UserCreateOutputObjects()
Int_t TrackAt(Int_t idx) const
UShort_t GetNumberOfTracks() const
TH1F * fhCentralityTT[kTT]
centrality
virtual ~AliAnalysisTaskHJetSpectra()
Double_t GetFractionSharedPt(AliEmcalJet *jRec, AliJetContainer *jconRec, AliEmcalJet *jGen, AliJetContainer *jconGen)
THnSparse * fhZNAVzeroATrackTT[kCAll][kTT]
ZNA energy versus Vzero A mult versus track mult.
TH1D * fhTrackMultiplicity[kCAll]
ZDC A neutral energy.
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Get particle container attached to this task.
TH2F * fhDphiTriggerJet[kCAll][kTT][kRho]
gc vertexZ accepted after vtx cut in MC
TH1F * fhCentrality[kCAll]
minimum bias eta inclusive
Bool_t IsMCEventInAcceptance(AliVEvent *event)
AliParticleContainer * GetParticleContainer() const
TH2D * fhPtJetPrimVsPtJetRec[21]
pt spectrum of reconstructed fake or secondary tracks
TH1F * fhTrackPtGen[kCAll]
gc X=centrality; Y= track pT
THnSparse * fhZNAVzeroATrack[kCAll]
multiplicity of tracks in event with TT track
TH1D * fh1Ntriggers[kCAll][kTT]
gc event statistics
TH1D * fhJetPtGen[kCAll][kRho]
impact parameter distribution hijing versus TT
TH2D * fhDCAinYVsPtNonStrange
X DCA versus pT of non strange tracks.
Double_t fSignalJetEtaWindow
TH1F * fhCentralityV0A
centrality V0 multiplicity A+C
TH2F * fhJetEtaGen[kCAll][kTT]
jet eta vs jet pT
void Terminate(Option_t *)
Bool_t IsTrackInAcceptance(AliVParticle *track, Bool_t isGen=0)
TH1F * fhZNAEnergy[kCAll]
V0A multiplicity.
TH2D * fhDeltaPtEmbPerp2D[kCAll][kTT][kRho]
embedded delta pT (emb track is perp to TT)
TH2D * fHJetSpecGen[kCAll][kTT][kRho]
TT associated spectrum of jets.
AliAnalysisTaskHJetSpectra()
Double_t EstimateBgKT(AliJetContainer *jetCont, AliParticleContainer *trkArray, AliVParticle *trackTT)
TH2F * fhJetEtaRecoilGen[kCAll][kTT]
minimum bias eta fore recoil jets
TH1F * fhVertexZAcceptMC
gc vertexZ inclusive in MC
TH2D * fhInvPtQVsPhiCSide[2]
q*1/pT versus eta
TH2F * fhJetPhiRecoilGen[kCAll][kTT]
minimum bias phi for recoil jets
AliAnalysisUtils * fHelperClass
A random number.
Double_t GetConePt(Double_t eta, Double_t phi, Double_t radius, AliParticleContainer *trkArray, Bool_t isGen)
TH1F * fhDphiTTTT[kTT]
Dphi of accepted jets after dphi cut.
TH2F * fhJetPhi[kCAll][kTT]
KT jets area versus PT.
TH1D * fhTrackMultiplicityTT[kCAll][kTT]
multiplicity of tracks
TH2D * fhJetPtGenVsJetPtRec[kCAll][kRho]
pt distribution of generator level jets
TH2F * fhDphiTriggerJetGen[kCAll][kTT][kRho]
gc Delta phi versus jet pT
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)
TH1F * fhVertexYAccept
gc vertexZ accepted after vtx cut
Double_t fSignalJetRadius
TH1F * fhZNAEnergyTT[kCAll][kTT]
ZDC A neutral energy for given V0A centrality selection.
TH2D * fhDCAinXVsPtStrange
Y DCA versus pT.
Enhanced TList-derived class that implements correct merging for pt_hard binned production.
TH2F * fhJetEtaIncl
minimum bias phi inclusive
TH1F * fhRhoTT[kCAll][kTT][kRho]
TT associated spectrum of jets.
TH1F * fhDphiTriggerJetAccept
gc Delta phi versus jet pT
TH2F * fhJetPhiIncl
Dphi between multiple trigger tracks.
TH2D * fHJetSpec[kCAll][kTT][kRho]
trigger multiplicity in event
Double_t fImpParam
gc value is filled, if pythia header is accessible
TH2F * fhJetEtaRecoil[kCAll][kTT]
jet eta vs jet pT
AliEmcalList * fOutput
!output list
TH2D * fhDiffPtVsPtTrackTrue
pt spectrum of reconstructed jets without fake track pT vs reconstructed jet pT
Double_t GetSimPrimaryVertex()
TH1F * fARhoTT[kCAll][kTT][kRho]
gc X=rho from perp cone, Y=centrality
TH2F * fhTrackEta[kCAll]
minimum bias phi for recoil jets gen
void GetDeltaPt(Int_t nrho, TArrayD &rho, Double_t *dpt, Double_t ttPhi, Double_t ttEta, AliParticleContainer *trkArray, Bool_t isGen)
TH1F * fhVertexYAcceptTT
gc vertexZ accepted after vtx cut
Base task in the EMCAL jet framework.
TH2D * fhInvPtQVsPhiASide[2]
q*1/pT versus eta
Represent a jet reconstructed using the EMCal jet framework.
Bool_t IsStrange(Int_t ip)
void UserCreateOutputObjects()
Main initialization function on the worker.
TH2D * fhDCAinYVsPtStrange
X DCA versus pT of strange tracks.
TH1F * fhVzeroATotMult[kCAll]
centrality from ZNA
TH1F * fhVertexZMC
gc vertexZ accepted after vtx cut
TH2D * fhInvPtQVsEta[2]
q*1/pT versus phi
AliVParticle * fTrigTracks[kTT][999]
TH1D * fhImpactParameter[kCAll]
ZNA energy versus Vzero mult. versus track mult. in events with TT.
TH2F * fhTrackPhiTPCG
hybrid constrained global track phi vs track pT
Bool_t RetrieveEventObjects()
Retrieve common objects from event.
TH2D * fhDCAinXVsPtNonStrange
Y DCA versus pT of strange tracks.
TH2D * fhDeltaPtEmbBc2Bc2D[kCAll][kTT][kRho]
embedded delta pT (emb track is back-to-back in azimuth to TT)
TH1F * fhCentralityZNA
centrality from V0C
TH2D * fhDCAinYVsPt
X DCA versus pT.
Bool_t fInitializedLocal
gc Vertex selection helper
TH2D * fhPtTrkTruePrimRec[kCAll]
pt jet resolution
Container for jet within the EMCAL jet framework.
TH2F * fhJetPhiGen[kCAll][kTT]
gc jet phi vs jet pT
TH1D * fhImpactParameterTT[kCAll][kTT]
impact parameter distribution hijing
TH1F * fhCentralityV0M
centrality V0 multiplicity A+C when TT is present