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;
160 fhJetPhiGen[ic]=NULL;
163 fhJetEtaGen[ic]=NULL;
166 fhTrackPtGen[ic]=NULL;
167 fhCentrality[ic]=NULL;
168 fhVzeroATotMult[ic]=NULL;
169 fhZNAEnergy[ic]=NULL;
170 fhTrackMultiplicity[ic]=NULL;
171 fhZNAVzeroATrack[ic]=NULL;
172 fhImpactParameter[ic]=NULL;
174 for(
Int_t ir=0; ir<kRho; ir++){
175 fhJetPtGen[ic][ir]=NULL;
176 fhJetPtGenVsJetPtRec[ic][ir]=NULL;
177 fhJetPtResolutionVsPtGen[ic][ir]=NULL;
181 for(
Int_t ir=0; ir<kRho-1; ir++){
182 fhRhoIncl[ic][ir]=NULL;
183 fhDeltaPtIncl[ic][ir]=NULL;
186 fhPtTrkTruePrimRec[ic]=NULL;
187 fhPtTrkTruePrimGen[ic]=NULL;
188 fhPtTrkSecOrFakeRec[ic]=NULL;
191 fCentralityBins[0]=0.;
192 fCentralityBins[1]=20.;
193 fCentralityBins[2]=50.;
194 fCentralityBins[3]=100.;
195 fCentralityBins[4]=1e6;
209 for(
Int_t i=0; i<999; i++){
212 for(
Int_t it=0; it<kTT; it++){
213 fTrigTracksGen[it][i]=0x0;
214 fTrigTracks[it][i]=0x0;
224 for(
Int_t i=0; i<2; i++){
225 fhInvPtQVsPhi[i] = NULL;
226 fhInvPtQVsEta[i] = NULL;
227 fhInvPtQVsPhiASide[i] = NULL;
228 fhInvPtQVsPhiCSide[i] = NULL;
229 fhSigmaPtOverPtVsPt[i] = NULL;
237 fUseDefaultVertexCut(1), fUsePileUpCut(1),
238 fRhoTaskName(), fRhoTaskNameMC(),
239 fSignalJetRadius(0.4), fSignalJetRadiusSquared(fSignalJetRadius*fSignalJetRadius),
240 fSignalJetEtaWindow(0.9 - fSignalJetRadius), fTrackEtaWindow(0.9), fMinTrackPt(0.150), fMinJetArea(0.0),
241 fCentralityType(
"V0A"), fMinFractionShared(0.5),
242 fCrossSection(0.0), fTrials(0.0), fImpParam(-1.0), fRandom(0), fHelperClass(0), fInitializedLocal(0),
243 fTTType(0), fDphiCut(TMath::Pi()-0.6), fUseDoubleBinPrecision(0),
244 fHistEvtSelection(0x0), fhKTAreaPt(0x0),
245 fhVertexZ(0x0), fhVertexXAccept(0x0), fhVertexYAccept(0x0), fhVertexZAccept(0x0),
246 fhVertexXAcceptTT(0x0), fhVertexYAcceptTT(0x0), fhVertexZAcceptTT(0x0),
247 fhVertexZMC(0x0), fhVertexZAcceptMC(0x0),
248 fhDphiTriggerJetAccept(0x0), fhJetPhiIncl(0x0), fhJetEtaIncl(0x0),
249 fhCentralityV0M(0x0), fhCentralityV0A(0x0), fhCentralityV0C(0x0), fhCentralityZNA(0x0),
251 fhDiffPtVsPtTrackTrue(0x0),
252 fhTrackPhiCG(0x0), fhTrackPhiTPCG(0x0),
255 fhDCAinXVsPtStrange(0x0),
256 fhDCAinYVsPtStrange(0x0),
257 fhDCAinXVsPtNonStrange(0x0),
258 fhDCAinYVsPtNonStrange(0x0),
259 fCentralityBins(kCAll),
263 fZVertexCut(10.0),fCutPhi(0.6),
274 for(
Int_t iw=0; iw<21; iw++){
332 for(
Int_t ir=0; ir<kRho-1; ir++){
362 for(
Int_t i=0; i<999; i++){
375 for(
Int_t i=0; i<2; i++){
384 fTrackPtRef->SetParameters(1.46886e+08,8.37087e-01);
387 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]);
388 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);
390 DefineOutput(1, TList::Class());
405 if(!recTrkCont)
return 0.0;
407 AliVParticle* tmpTrack=NULL;
410 recTrkCont->ResetCurrentID();
412 if(!tmpTrack)
continue;
414 if(
GetDeltaR(tmpTrack->Phi(), phi, tmpTrack->Eta(), eta) < radius){
415 tmpConePt = tmpConePt + tmpTrack->Pt();
426 AliGenHijingEventHeader* hijingHeader =
dynamic_cast<AliGenHijingEventHeader*
>(MCEvent()->GenEventHeader());
430 AliAODMCHeader* aodMCH =
dynamic_cast<AliAODMCHeader*
>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
433 for(
UInt_t i = 0;i<aodMCH->GetNCocktailHeaders();i++){
434 hijingHeader =
dynamic_cast<AliGenHijingEventHeader*
>(aodMCH->GetCocktailHeader(i));
435 if(hijingHeader)
break;
441 return (
Double_t) (hijingHeader->ImpactParameter());
443 AliWarning(Form(
"In task %s: GetImpactParameter() failed!", GetName()));
450 AliGenEventHeader* mcHeader = NULL;
451 AliAODMCHeader* aodMCH = NULL;
454 AliRunLoader *rl = AliRunLoader::Instance();
455 if(rl) mcHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(rl->GetHeader()->GenEventHeader());
461 mcHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(MCEvent()->GenEventHeader());
464 aodMCH =
dynamic_cast<AliAODMCHeader*
>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
467 for(
UInt_t i = 0; i<aodMCH->GetNCocktailHeaders(); i++){
468 mcHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(aodMCH->GetCocktailHeader(i));
474 mcHeader =
dynamic_cast<AliGenHijingEventHeader*
>(MCEvent()->GenEventHeader());
477 aodMCH =
dynamic_cast<AliAODMCHeader*
>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
480 for(
UInt_t i = 0; i<aodMCH->GetNCocktailHeaders(); i++){
481 mcHeader =
dynamic_cast<AliGenHijingEventHeader*
>(aodMCH->GetCocktailHeader(i));
487 mcHeader =
dynamic_cast<AliGenDPMjetEventHeader*
>(MCEvent()->GenEventHeader());
490 aodMCH =
dynamic_cast<AliAODMCHeader*
>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
493 for(
UInt_t i = 0; i<aodMCH->GetNCocktailHeaders(); i++){
494 mcHeader =
dynamic_cast<AliGenDPMjetEventHeader*
>(aodMCH->GetCocktailHeader(i));
506 mcHeader->PrimaryVertex(
fpyVtx);
509 AliWarning(Form(
"In task %s: Pythia Vertex failed!", GetName()));
517 if(!event)
return kFALSE;
541 if(!event)
return kFALSE;
554 fhVertexZ->Fill(event->GetPrimaryVertex()->GetZ());
562 if(TMath::Abs(event->GetPrimaryVertex()->GetZ()) >
fZVertexCut){
566 if(event->GetPrimaryVertex()->GetNContributors()<1){
576 fVtxArray[0]=
event->GetPrimaryVertex()->GetX();
577 fVtxArray[1]=
event->GetPrimaryVertex()->GetY();
578 fVtxArray[2]=
event->GetPrimaryVertex()->GetZ();
587 if(!track)
return kFALSE;
591 if(!track->Charge())
return kFALSE;
593 if(!(static_cast<AliAODMCParticle*>(track))->IsPhysicalPrimary())
return kFALSE;
608 if(!jet)
return kFALSE;
644 for(
Int_t ir=0;ir<nrho;ir++){
656 tmpRandConePhi =
fRandom->Rndm()*TMath::TwoPi();
706 for(
Int_t ir=0; ir < nrho; ir++){
720 AliError(
"??? Event pointer == 0 ???");
749 Double_t centralityPercentile = -1.0;
750 Double_t centralityPercentileV0A = -1.0;
751 Double_t centralityPercentileV0C = -1.0;
752 Double_t centralityPercentileV0M = -1.0;
753 Double_t centralityPercentileZNA = -1.0;
759 if(InputEvent()->GetVZEROData()){
760 multVzero = InputEvent()->GetVZEROData()->GetMTotV0A();
770 AliVZDC *aodZDC =
dynamic_cast<AliVZDC*
> (InputEvent()->GetZDCData());
772 const Double_t *ZNAtower = aodZDC->GetZNATowerEnergy();
773 energyZdcNA = ZNAtower[0]*4.*82./208./12.96;
777 AliCentrality* tmpCentrality = InputEvent()->GetCentrality();
782 centralityPercentile = tmpCentrality->GetCentralityPercentile(
fCentralityType.Data());
783 centralityPercentileV0A = tmpCentrality->GetCentralityPercentile(
"V0A");
784 centralityPercentileV0C = tmpCentrality->GetCentralityPercentile(
"V0C");
785 centralityPercentileV0M = tmpCentrality->GetCentralityPercentile(
"V0M");
786 centralityPercentileZNA = tmpCentrality->GetCentralityPercentile(
"ZNA");
790 AliWarning(Form(
"Centrality value not valid (c=%E)",centralityPercentile));
804 for(
Int_t ic=0; ic<2; ic++){
805 if(
ficb[ic]==-1)
continue;
816 for(
Int_t ic=0; ic<2; ic++){
817 if(
ficb[ic]==-1)
continue;
832 TClonesArray* arrayMC = 0;
834 Int_t iNTracksMC = 0;
838 AliError(
"No input AOD found!");
841 arrayMC = (TClonesArray*) aodIn->FindListObject(AliAODMCParticle::StdBranchName());
843 AliError(
"No MC array found!");
847 iNTracksMC = arrayMC->GetEntriesFast();
864 AliVParticle *constTrackRec = NULL;
865 AliVParticle *constTrackGen = NULL;
902 Int_t indexSingleRndTrigGen[
kTT] = {-1,-1};
903 AliVParticle* trackTTGen[
kTT] = {NULL,NULL};
906 Double_t sumFakeTrackPtInJetNotStrange = 0.;
907 Double_t sumFakeTrackPtInJetStrange = 0.;
908 Double_t sumStrangeTrackPtInJet = 0.;
909 AliAODMCParticle* particleMC = NULL;
910 AliAODMCParticle* particleMCMother = NULL;
911 Int_t iIndexMother = 0;
913 Int_t iPdgCodeMother = 0;
916 Double_t newJetPt=0., newSumFakePt=0., enhw =0.;
918 Double_t normprob, prob, probTT, dphiTTTT;
924 parContGen->ResetCurrentID();
926 if(!constTrackGen)
continue;
929 for(
Int_t ic=0; ic<2; ic++){
930 if(
ficb[ic]==-1)
continue;
935 if((
fTTlow[it] <= constTrackGen->Pt()) && (constTrackGen->Pt() <
fTThigh[it])){
936 if(ntriggersGen[it]<999){
948 for(
Int_t ic=0; ic<2; ic++){
949 if(
ficb[ic]==-1)
continue;
953 if(ntriggersGen[it]==1){
954 indexSingleRndTrigGen[it] = 0;
955 trackTTGen[it] = (AliVParticle*) (
fTrigTracksGen[it][indexSingleRndTrigGen[it]]);
957 }
else if(ntriggersGen[it]>1){
962 for(
Int_t ik=0; ik<ntriggersGen[it]; ik++){
963 normprob += tmpFunc->Eval(((AliVParticle*) (
fTrigTracksGen[it][ik]))->Pt());
968 for(
Int_t ik=0; ik<ntriggersGen[it]; ik++){
969 probTT += tmpFunc->Eval(((AliVParticle*) (
fTrigTracksGen[it][ik]))->Pt())/normprob;
971 indexSingleRndTrigGen[it] = ik;
976 indexSingleRndTrigGen[it] = 0;
978 trackTTGen[it] = (AliVParticle*) (
fTrigTracksGen[it][indexSingleRndTrigGen[it]]);
980 indexSingleRndTrigGen[it] =
fRandom->Integer(ntriggersGen[it]);
981 trackTTGen[it] = (AliVParticle*) (
fTrigTracksGen[it][indexSingleRndTrigGen[it]]);
990 Int_t indexSingleRndTrig[
kTT] = {-1,-1};
991 AliVParticle* trackTT[
kTT] = {NULL,NULL};
997 trkContRec->ResetCurrentID();
999 if(!constTrackRec)
continue;
1004 if(TMath::Abs(constTrackRec->GetLabel()) == 99999)
continue;
1010 for(
Int_t ic=0; ic<2; ic++){
1011 if(
ficb[ic]==-1)
continue;
1013 fhTrackEta[
ficb[ic]]->Fill(constTrackRec->Pt(), constTrackRec->Eta());
1018 if(
fTTlow[it] <= constTrackRec->Pt() && constTrackRec->Pt() <
fTThigh[it]){
1019 if(ntriggers[it]<999){
1031 for(
Int_t ic=0; ic<2; ic++){
1032 if(
ficb[ic]==-1)
continue;
1041 if(ntriggers[it]==1){
1042 indexSingleRndTrig[it] = 0;
1043 trackTT[it] = (AliVParticle*) (
fTrigTracks[it][indexSingleRndTrig[it]]);
1045 }
else if(ntriggers[it]>1){
1050 for(
Int_t ik=0; ik<ntriggers[it]; ik++){
1051 normprob += tmpFunc->Eval(((AliVParticle*) (
fTrigTracks[it][ik]))->Pt());
1056 if(dphiTTTT<-0.5*TMath::Pi()) dphiTTTT += TMath::TwoPi();
1057 if(dphiTTTT> 1.5*TMath::Pi()) dphiTTTT -= TMath::TwoPi();
1065 for(
Int_t ik=0; ik<ntriggers[it]; ik++){
1066 probTT += tmpFunc->Eval(((AliVParticle*) (
fTrigTracks[it][ik]))->Pt())/normprob;
1068 indexSingleRndTrig[it] = ik;
1073 indexSingleRndTrig[it] = 0;
1075 trackTT[it] = (AliVParticle*) (
fTrigTracks[it][indexSingleRndTrig[it]]);
1077 indexSingleRndTrig[it] =
fRandom->Integer(ntriggers[it]);
1078 trackTT[it] = (AliVParticle*) (
fTrigTracks[it][indexSingleRndTrig[it]]);
1083 if(ntriggers[
kRef]>0 || ntriggers[
kSig]>0){
1131 Bool_t bRecPrim = kFALSE;
1137 parContGen->ResetCurrentID();
1139 if(!constTrackGen)
continue;
1142 for(
Int_t ic=0; ic<2; ic++){
1143 if(
ficb[ic]==-1)
continue;
1151 if(trkContRec && parContGen){
1152 trkContRec->ResetCurrentID();
1154 if(!constTrackRec)
continue;
1158 parContGen->ResetCurrentID();
1160 if(!constTrackGen)
continue;
1162 if(TMath::Abs(constTrackRec->GetLabel()) == TMath::Abs(constTrackGen->GetLabel())){
1166 for(
Int_t ic=0; ic<2; ic++){
1167 if(
ficb[ic]==-1)
continue;
1176 for(
Int_t ic=0; ic<2; ic++){
1177 if(
ficb[ic]==-1)
continue;
1193 jetContGen->ResetCurrentID();
1195 if(!jetGen)
continue;
1203 for(
Int_t ic=0; ic<2; ic++){
1204 if(
ficb[ic]==-1)
continue;
1214 jetContRec->ResetCurrentID();
1216 if(!jetRec)
continue;
1221 sumFakeTrackPtInJetNotStrange = 0.;
1222 sumFakeTrackPtInJetStrange = 0.;
1223 sumStrangeTrackPtInJet = 0.;
1225 particleMCMother = NULL;
1232 constTrackRec =
static_cast<AliVParticle*
> (jetRec->
TrackAt(iq,trkContRec->GetArray()));
1233 if(!constTrackRec)
continue;
1236 parContGen->ResetCurrentID();
1238 if(!constTrackGen)
continue;
1240 if(TMath::Abs(constTrackRec->GetLabel()) == TMath::Abs(constTrackGen->GetLabel())){
1247 lab = TMath::Abs(constTrackRec->GetLabel());
1250 if(lab < iNTracksMC){
1251 particleMC = (AliAODMCParticle*) arrayMC->At(lab);
1253 iPdgCode = TMath::Abs(particleMC->GetPdgCode());
1254 iIndexMother = TMath::Abs(particleMC->GetMother());
1256 sumFakeTrackPtInJetStrange += constTrackRec->Pt();
1257 sumStrangeTrackPtInJet += constTrackRec->Pt();
1261 if(iIndexMother < iNTracksMC && 0 <= iIndexMother && !bStrange){
1263 particleMCMother = (AliAODMCParticle*) arrayMC->At(iIndexMother);
1264 if(particleMCMother){
1265 iPdgCodeMother = TMath::Abs(particleMCMother->GetPdgCode());
1268 sumFakeTrackPtInJetStrange += constTrackRec->Pt();
1269 sumStrangeTrackPtInJet += constTrackRec->Pt();
1277 sumFakeTrackPtInJetNotStrange += constTrackRec->Pt();
1281 lab = TMath::Abs(constTrackRec->GetLabel());
1282 if(lab < iNTracksMC){
1283 particleMC = (AliAODMCParticle*) arrayMC->At(lab);
1285 iPdgCode = TMath::Abs(particleMC->GetPdgCode());
1287 sumStrangeTrackPtInJet += constTrackRec->Pt();
1294 for(
Int_t iw=0; iw<21; iw++){
1296 newJetPt = jetRec->
Pt() + enhw*sumStrangeTrackPtInJet;
1297 newSumFakePt = sumFakeTrackPtInJetNotStrange + (1.0+ enhw)*sumFakeTrackPtInJetStrange;
1312 if(jetGen->
Pt()<1e-3){
1332 for(
Int_t ic=0; ic<2; ic++){
1333 if(
ficb[ic]==-1)
continue;
1356 Bool_t bFirstCycle = kTRUE;
1364 if(parContGen && ntriggersGen[it] >0 && ((AliVParticle*)trackTTGen[it])){
1365 bFirstCycle = kTRUE;
1367 AliVParticle* triggerHadronGen = (AliVParticle*) trackTTGen[it];
1368 if(!triggerHadronGen)
continue;
1370 for(
Int_t ic=0; ic<2; ic++){
1371 if(
ficb[ic]==-1)
continue;
1381 jetContGen->ResetCurrentID();
1384 AliError(Form(
"%s: Could not receive gen jet", GetName()));
1389 areaJet = jetGen->
Area();
1390 pTJet = jetGen->
Pt();
1392 if(bFirstCycle && it==
kRef){
1393 for(
Int_t ic=0; ic<2; ic++){
1394 if(
ficb[ic]==-1)
continue;
1404 if(dfi < -0.5*TMath::Pi()) dfi += TMath::TwoPi();
1405 if(dfi > 1.5*TMath::Pi()) dfi -= TMath::TwoPi();
1408 for(
Int_t ic=0; ic<2; ic++){
1409 if(
ficb[ic]==-1)
continue;
1415 if(TMath::Abs(dphi) <
fDphiCut)
continue;
1421 for(
Int_t ic=0; ic<2; ic++){
1422 if(
ficb[ic]==-1)
continue;
1427 bFirstCycle = kFALSE;
1450 Bool_t bEmbJetCloseToTT = kFALSE;
1453 jetContRec->ResetCurrentID();
1455 if(!jetRec)
continue;
1459 bEmbJetCloseToTT = kFALSE;
1461 if(jetRec->
Pt() > trackTT[it]->Pt()*0.5){
1464 constTrackRec =
static_cast<AliVParticle*
> (jetRec->
TrackAt(iq,trkContRec->GetArray()));
1465 if(!constTrackRec)
continue;
1466 if(constTrackRec != ((AliVParticle*) trackTT[it]))
continue;
1468 bEmbJetCloseToTT = kTRUE;
1473 if(bEmbJetCloseToTT)
continue;
1481 if(jetEmb->
Pt()<1e-3){
1494 for(
Int_t ic=0; ic<2; ic++){
1495 if(
ficb[ic]==-1)
continue;
1506 dphi = TMath::Abs(
RelativePhi(trackTT[it]->Phi(), jetEmb->
Phi()));
1507 if(TMath::Pi()/4 < dphi && dphi < 3*TMath::Pi()/4){
1516 }
else if(dphi >= 3*TMath::Pi()/4 ){
1538 for(
Int_t ic=0; ic<2; ic++){
1539 if(
ficb[ic]==-1)
continue;
1545 if(ntriggers[it]>0){
1547 for(
Int_t ir=0; ir < kRho-1; ir++){
1550 for(
Int_t ic=0; ic<2; ic++){
1551 if(
ficb[ic]==-1)
continue;
1564 Double_t deltapt[kRho-1], phiTT = 0., etaTT = -1000.;
1567 Bool_t bRecJetCloseToTT = kFALSE;
1571 bRecJetCloseToTT = kFALSE;
1576 phiTT = trackTT[it]->Phi();
1577 etaTT = trackTT[it]->Eta();
1580 jetContRec->ResetCurrentID();
1582 if(!jetRec)
continue;
1586 bRecJetCloseToTT = kFALSE;
1588 if(jetRec->
Pt() > trackTT[it]->Pt()*0.5){
1590 constTrackRec = (AliVParticle*) (jetRec->
TrackAt(iq,trkContRec->GetArray()));
1591 if(!constTrackRec)
continue;
1592 if(constTrackRec != ((AliVParticle*) trackTT[it]))
continue;
1593 phiTT = jetRec->
Phi();
1594 etaTT = jetRec->
Eta();
1595 bRecJetCloseToTT = kTRUE;
1599 if(bRecJetCloseToTT)
break;
1607 GetDeltaPt(kRho-1, (
fRhoRec[it]), &deltapt[0], phiTT, etaTT, trkContRec, kFALSE);
1610 for(
Int_t ir=0; ir < kRho-1; ir++){
1611 for(
Int_t ic=0; ic<2; ic++){
1612 if(
ficb[ic]==-1)
continue;
1616 if(ntriggers[it]>0){
1630 AliAODTrack *atrk=NULL;
1635 trkContRec->ResetCurrentID();
1642 if(dphi < 0) dphi+= 2*TMath::Pi();
1643 if(dphi > 2*TMath::Pi()) dphi-= 2*TMath::Pi();
1645 if(atrk->IsGlobalConstrained()){
1651 itrkq = (atrk->Charge()<0) ? 0 : 1;
1664 memset(cv, 0,
sizeof(
Double_t) * 21);
1665 memset(pxpypz, 0,
sizeof(
Double_t) * 50);
1666 memset(xyz, 0,
sizeof(
Double_t) * 50);
1668 atrk->GetPxPyPz(pxpypz);
1669 atrk->GetCovarianceXYZPxPyPz(cv);
1671 AliExternalTrackParam par(xyz, pxpypz, cv, atrk->Charge());
1672 fhSigmaPtOverPtVsPt[itrkq]->Fill(atrk->Pt(), TMath::Abs(sqrt(par.GetSigma1Pt2())/par.GetSigned1Pt()));
1679 lab = TMath::Abs(atrk->GetLabel());
1681 if(lab < iNTracksMC){
1682 particleMC = (AliAODMCParticle*) arrayMC->At(lab);
1684 if(particleMC->IsPhysicalPrimary()){
1696 for(
Int_t ic=0; ic<2; ic++){
1697 if(
ficb[ic]==-1)
continue;
1726 jetContRec->ResetCurrentID();
1729 AliError(Form(
"%s: Could not receive jet", GetName()));
1734 pTJet = jetRec->
Pt();
1744 if(ntriggers[it]>0 && ((AliVParticle*) trackTT[it])){
1749 AliVParticle* triggerHadron = (AliVParticle*) trackTT[it];
1750 if(!triggerHadron)
continue;
1752 for(
Int_t ic=0; ic<2; ic++){
1753 if(
ficb[ic]==-1)
continue;
1760 jetContRec->ResetCurrentID();
1763 AliError(Form(
"%s: Could not receive jet", GetName()));
1768 areaJet = jetRec->
Area();
1769 pTJet = jetRec->
Pt();
1771 if(bFirstCycle && it==
kRef){
1772 for(
Int_t ic=0; ic<2; ic++){
1773 if(
ficb[ic]==-1)
continue;
1782 if(dfi < -0.5*TMath::Pi()) dfi += TMath::TwoPi();
1783 if(dfi > 1.5*TMath::Pi()) dfi -= TMath::TwoPi();
1785 for(
Int_t ic=0; ic<2; ic++){
1786 if(
ficb[ic]==-1)
continue;
1794 if(TMath::Abs(dphi) <
fDphiCut)
continue;
1802 for(
Int_t ic=0; ic<2; ic++){
1803 if(
ficb[ic]==-1)
continue;
1814 bFirstCycle = kFALSE;
1852 printf(
"ERROR: Output list not available\n");
1861 if(
fOutput && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
1878 TString bgtype[]={
"Perp",
"CMS",
"KT",
"Zero"};
1882 Bool_t oldStatus = TH1::AddDirectoryStatus();
1883 TH1::AddDirectory(kFALSE);
1905 for(
Int_t ic =0; ic<icmax; ic++){
1906 name = (ic==0) ? Form(
"fh1NtriggersMB") :
1908 name.Append(Form(
"TT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
1912 name = (ic==0) ? Form(
"fh1TriggerMultMB") :
1914 name.Append(Form(
"TT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
1925 const Int_t dimSpec = 2;
1926 const Int_t nBinsSpec[dimSpec] = { 50, bw*160};
1927 const Double_t lowBinSpec[dimSpec] = { 0.0, -20.0};
1928 const Double_t hiBinSpec[dimSpec] = { 2.0, 300.0};
1930 for(
Int_t ic =0; ic<icmax; ic++){
1933 name = (ic==0) ?
"fHJetSpecMB" :
1936 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
1940 Form(
"Recoil jet spectrum TT%d%d [A,pTjet-A*rho%s]",
1942 nBinsSpec[0], lowBinSpec[0], hiBinSpec[0], nBinsSpec[1], lowBinSpec[1],hiBinSpec[1]);
1950 for(
Int_t ic =0; ic<icmax; ic++){
1953 name = (ic==0) ?
"fhRhoMB" :
1957 name.Append(Form(
"TT%d%d%s",TMath::Nint(
fTTlow[it]),TMath::Nint(
fTThigh[it]),bgtype[ir].
Data()));
1960 fhRhoTT[ic][it][ir] =
new TH1F(name.Data(),
1961 Form(
"Rho%s",bgtype[ir].
Data()),80, 0.0, 40.0);
1966 name = (ic==0) ?
"fARhoMB" :
1970 name.Append(Form(
"TT%d%d%s",TMath::Nint(
fTTlow[it]),TMath::Nint(
fTThigh[it]),bgtype[ir].
Data()));
1971 fARhoTT[ic][it][ir] =
new TH1F(name.Data(),
1972 Form(
"Area times rho %s",bgtype[ir].
Data()),80, 0.0, 40.0);
1976 name = (ic==0) ? Form(
"fhRhoInclMB%s",bgtype[ir].
Data()) :
1987 for(
Int_t ic =0; ic<icmax; ic++){
1990 name = (ic==0) ?
"fhDeltaPtMB" :
1994 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
1996 Form(
"DeltaPt%s",bgtype[ir].
Data()), 150, -50, 100);
2001 name = (ic==0) ?
"fhDeltaPtInclMB" :
2005 name.Append(Form(
"%s", bgtype[ir].
Data()));
2013 name = (ic==0) ?
"fhDeltaPtEmbMB" :
2017 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
2022 name = (ic==0) ?
"fhDeltaPtEmbPerpMB" :
2026 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
2031 name = (ic==0) ?
"fhDeltaPtEmbBc2BcMB" :
2035 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
2040 name = (ic==0) ?
"fhDeltaPtEmb2DMB" :
2044 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
2046 Form(
"fhDeltaPtEmb2D%s",bgtype[ir].
Data()), 125,0, 250, 150, -50, 100);
2051 name = (ic==0) ?
"fhDeltaPtEmbPerp2DMB" :
2055 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
2061 name = (ic==0) ?
"fhDeltaPtEmbBc2Bc2DMB" :
2065 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
2076 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.};
2079 fhKTAreaPt =
new TH2F(
"fhKTAreaPt",
"KT jet Area vs Pt",nbinsPt, binsPt, 50,0,2);
2084 for(
Int_t ic =0; ic<icmax; ic++){
2085 name = (ic==0) ? Form(
"fhJetPhiMB") :
2089 fhJetPhi[ic] =
new TH2F(name.Data(),
"Azim dist jets vs pTjet", 50, 0, 100, 50,-TMath::Pi(),TMath::Pi());
2093 name = (ic==0) ? Form(
"fhTrackPhiMB") :
2097 fhTrackPhi[ic] =
new TH2F(name.Data(),
"azim dist trig had vs pT,trk", 50, 0, 50, 50,-TMath::Pi(),TMath::Pi());
2100 name = (ic==0) ? Form(
"fhJetEtaMB") :
2104 fhJetEta[ic] =
new TH2F(name.Data(),
"Eta dist jets vs pTjet", 50,0, 100, 40,-0.9,0.9);
2107 name = (ic==0) ? Form(
"fhTrackEtaMB") :
2111 fhTrackEta[ic] =
new TH2F(name.Data(),
"Eta dist trig had vs pT,trk", 50, 0, 50, 40,-0.9,0.9);
2114 name = (ic==0) ? Form(
"fhTrackPtMB") :
2118 fhTrackPt[ic] =
new TH1F(name.Data(),
"pT,trk ", 50, 0, 50);
2122 fhVertexZ =
new TH1F(
"fhVertexZ",
"z vertex",40,-20,20);
2125 fhVertexXAccept =
new TH1F(
"fhVertexXAccept",
"vertex after cut",600,-3,3);
2131 fhVertexZAccept =
new TH1F(
"fhVertexZAccept",
"z vertex after cut",40,-20,20);
2146 fhVertexZMC =
new TH1F(
"fhVertexZMC",
"z vertex",40,-20,20);
2149 fhVertexZAcceptMC =
new TH1F(
"fhVertexZAcceptMC",
"z vertex after cut",40,-20,20);
2153 for(
Int_t ic =0; ic<icmax; ic++){
2157 Form(
"fhDphiTriggerJetMB") :
2160 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]) ,bgtype[ir].
Data()));
2162 fhDphiTriggerJet[ic][it][ir] =
new TH2F(name.Data(),
"Deltaphi trig-jet",75,-50,100, 100, -0.5*TMath::Pi(),1.5*TMath::Pi());
2169 fhDphiTriggerJetAccept =
new TH1F(
"fhDphiTriggerJetAccept",
"Deltaphi trig-jet after cut",50, -0.5*TMath::Pi(),1.5*TMath::Pi());
2172 fhDphiTTTT[
kRef] =
new TH1F(
"fhDphiTTTT67",
"Deltaphi between multiple TT",50, -0.5*TMath::Pi(),1.5*TMath::Pi());
2178 fhJetPhiIncl =
new TH2F(
"fhJetPhiIncl",
"Azim dist jets vs pTjet", 50, 0, 100, 50,-TMath::Pi(),TMath::Pi());
2181 fhJetEtaIncl =
new TH2F(
"fhJetEtaIncl",
"Eta dist inclusive jets vs pTjet", 50,0, 100, 40,-0.9,0.9);
2184 fhTrackPhiCG =
new TH2F(
"fhTrackPhiCG",
"azim dist trig had vs pT,trk Glob Const", 50, 0, 50, 50,0,2*TMath::Pi());
2187 fhTrackPhiTPCG =
new TH2F(
"fhTrackPhiTPCG",
"azim dist trig had vs pT,trk TPC Const", 50, 0, 50, 50,0,2*TMath::Pi());
2191 for(
Int_t i=0; i<2; i++){
2192 name = (i==0) ?
"Neg" :
"Pos";
2194 Form(
"%s track 1/pt versus track phi", name.Data()), 36, 0, 2*TMath::Pi(), 40, 0, 0.4);
2198 Form(
"%s track 1/pt versus track eta", name.Data()), 20, -0.9, 0.9, 40, 0, 0.4);
2202 Form(
"%s track 1/pt versus track phi", name.Data()), 36, 0, 2*TMath::Pi(), 40, 0, 0.4);
2206 Form(
"%s track 1/pt versus track phi", name.Data()), 36, 0, 2*TMath::Pi(), 40, 0, 0.4);
2210 Form(
"%s track sigma(1/pt)/ 1/pt vs pt", name.Data()), 100, 0, 100, 250, 0, 1);
2214 for(
Int_t ic =0; ic<icmax; ic++){
2215 name = (ic==0) ? Form(
"fhCentralityMB") :
2219 fhCentrality[ic] =
new TH1F(name.Data(),
"Centrality",20,0,100);
2223 fhCentralityV0M =
new TH1F(
"hCentralityV0M",
"hCentralityV0M",20,0,100);
2226 fhCentralityV0A =
new TH1F(
"hCentralityV0A",
"hCentralityV0A",20,0,100);
2229 fhCentralityV0C =
new TH1F(
"hCentralityV0C",
"hCentralityV0C",20,0,100);
2232 fhCentralityZNA =
new TH1F(
"hCentralityZNA",
"hCentralityZNA",20,0,100);
2236 name = Form(
"fhCentralityTT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]));
2242 for(
Int_t ic =0; ic<icmax; ic++){
2243 name = (ic==0) ? Form(
"fhVzeroATotMultMB") :
2248 fhVzeroATotMult[ic] =
new TH1F(name.Data(),
"hVzeroATotMult",1000,0,1000);
2252 name = (ic==0) ?
"fhVzeroATotMultMB" :
2256 name.Append(Form(
"TT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
2266 for(
Int_t ic =0; ic<icmax; ic++){
2267 name = (ic==0) ? Form(
"fhZNAEnergyMB") :
2272 fhZNAEnergy[ic] =
new TH1F(name.Data(),
"fhZNAEnergy",1000,0,200);
2276 name = (ic==0) ? Form(
"fhZNAEnergyMB") :
2280 name.Append(Form(
"TT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
2289 for(
Int_t ic =0; ic<icmax; ic++){
2290 name = (ic==0) ? Form(
"fhTrackMultiplicityMB") :
2298 name = (ic==0) ? Form(
"fhTrackMultiplicityMB") :
2302 name.Append(Form(
"TT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
2311 const Int_t dimZ = 3;
2312 const Int_t nBinsZ[dimZ] = { 100, 100, 25 };
2313 const Double_t lowBinZ[dimZ] = { 0.0, 0.0, 0.0};
2314 const Double_t hiBinZ[dimZ] = { 200.0, 1000.0, 250};
2316 for(
Int_t ic =0; ic<icmax; ic++){
2317 name = (ic==0) ? Form(
"fhZNAVzeroATrackMB") :
2323 Form(
"ZNA, V0A mult, track mult"),
2324 dimZ, nBinsZ,lowBinZ,hiBinZ);
2331 name = (ic==0) ? Form(
"fhZNAVzeroATrackMB") :
2335 name.Append(Form(
"TT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
2360 name = (ic==0) ? Form(
"fhImpactParameterMB") :
2369 name = (ic==0) ? Form(
"fhImpactParameterMB") :
2373 name.Append(Form(
"TT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
2380 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.};
2384 for(
Int_t ic =0; ic<icmax; ic++){
2386 name = (ic==0) ? Form(
"fhJetPtGenMB%s",bgtype[ir].
Data()) :
2391 Form(
"Jet pT Gen %s",bgtype[ir].
Data()),bw*160,-20,300);
2395 name = (ic==0) ? Form(
"fhJetPtGenVsJetPtRecMB%s",bgtype[ir].
Data()) :
2400 "", bw*160,-20,300, bw*160,-20,300);
2404 name = (ic==0) ? Form(
"fhJetPtResolutionVsPtGenMB%s",bgtype[ir].
Data()) :
2405 Form(
"fhJetPtResolutionVsPtGen%d%d%s",TMath::Nint(
fCentralityBins[ic-1]),
2409 "Resolution", 20,0,100, 200,-1.,1.);
2416 -50, -48., -46., -44, -42.,
2417 -40., -38., -36., -34., -32., -30., -28., -26., -25., -24., -23., -22., -21.,
2418 -20., -19.5, -19., -18.5, -18., -17.5, -17., -16.5, -16., -15.5,
2419 -15., -14.5, -14., -13.5, -13., -12.5, -12., -11.5, -11., -10.5,
2420 -10.0, -9.8, -9.6, -9.4, -9.2,
2421 -9.0, -8.8, -8.6, -8.4, -8.2,
2422 -8.0, -7.8, -7.6, -7.4, -7.2,
2423 -7.0, -6.8, -6.6, -6.4, -6.2,
2424 -6.0, -5.8, -5.6, -5.4, -5.2,
2425 -5.0, -4.8, -4.6, -4.4, -4.2,
2426 -4.0, -3.8, -3.6, -3.4, -3.2,
2427 -3.0, -2.8, -2.6, -2.4, -2.2,
2428 -2.0, -1.9, -1.8, -1.7, -1.6, -1.5, -1.4, -1.3, -1.2, -1.1,
2429 -1.0,-0.95, -0.9, -0.85, -0.8, -0.75, -0.7, -0.65, -0.6, -0.55,
2430 -0.5,-0.48, -0.46, -0.44, -0.42,
2431 -0.4, -0.38, -0.36, -0.34, -0.32,
2432 -0.3, -0.28, -0.26, -0.24, -0.22,
2433 -0.2, -0.18, -0.16, -0.14, -0.12,
2434 -0.1, -0.09, -0.08, -0.07, -0.06,
2435 -0.05, -0.045, -0.04,-0.035 ,-0.03, -0.025, -0.02, -0.015, -0.01, -0.005,
2436 0, 0.005, 0.01, 0.015, 0.02, 0.025, 0.03, 0.035, 0.04, 0.045,
2437 0.05, 0.06, 0.07, 0.08, 0.09,
2438 0.1, 0.12, 0.14, 0.16, 0.18,
2439 0.2, 0.22, 0.24, 0.26, 0.28,
2440 0.3, 0.32, 0.34, 0.36, 0.38,
2441 0.4, 0.42, 0.44, 0.46, 0.48,
2442 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8,0.85, 0.9, 0.95,
2443 1.0,1.1, 1.2,1.3, 1.4,1.5, 1.6, 1.7, 1.8, 1.9,
2444 2.0, 2.2, 2.4, 2.6, 2.8,
2445 3.0, 3.2, 3.4, 3.6, 3.8,
2446 4.0, 4.2, 4.4, 4.6, 4.8,
2447 5.0, 5.2, 5.4, 5.6, 5.8,
2448 6.0, 6.2, 6.4, 6.6, 6.8,
2449 7.0, 7.2, 7.4, 7.6, 7.8,
2450 8.0, 8.2, 8.4, 8.6, 8.8,
2451 9.0, 9.2, 9.4, 9.6, 9.8,
2452 10., 10.5, 11., 11.5, 12., 12.5, 13., 13.5, 14., 14.5,
2453 15., 15.5, 16., 16.5, 17., 17.5, 18., 18.5, 19., 19.5,
2454 20., 21., 22., 23., 24, 25, 26., 28., 30., 32.,34., 36., 38.,
2455 40., 42., 44., 46., 48., 50.};
2458 for(
Int_t ic =0; ic<icmax; ic++){
2459 name = (ic==0) ? Form(
"fhPtTrkTruePrimRecMB") :
2467 name = (ic==0) ? Form(
"fhPtTrkTruePrimGenMB") :
2474 name = (ic==0) ? Form(
"fhPtTrkSecOrFakeRecMB") :
2482 for(
Int_t iw=0; iw<21; iw++){
2483 name = Form(
"fhPtJetPrimVsPtJetRecMB%03d",TMath::Nint(100*iw*0.05));
2487 name = Form(
"fhDiffPtVsPtTrackTrueMB");
2493 fhDCAinXVsPt =
new TH2D(
"fhDCAinXVsPt",
"fhDCAinXVsPt",nbins, bins, 200, -10.,10);
2510 for(
Int_t ic =0; ic<icmax; ic++){
2512 name = (ic==0) ? Form(
"fh1NtriggersGenMB") :
2515 name.Append(Form(
"TT%d%d",TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
2521 name = (ic==0) ? Form(
"fh1TriggerMultGenMB") :
2525 name.Append(Form(
"TT%d%d",TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
2531 name = (ic==0) ?
"fHJetSpecGenMB" :
2535 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
2541 name = (ic==0) ? Form(
"fhJetPhiGenMB") :
2548 name = (ic==0) ? Form(
"fhJetEtaGenMB") :
2556 name = (ic==0) ? Form(
"fhTrackPtGenMB") :
2581 THnSparse *hn =
dynamic_cast<THnSparse*
>(
fOutput->At(i));
2586 TH1::AddDirectory(oldStatus);
2612 if (vphi < -TMath::Pi()) vphi += TMath::TwoPi();
2613 else if (vphi > TMath::Pi()) vphi -= TMath::TwoPi();
2615 if (mphi < -TMath::Pi()) mphi += TMath::TwoPi();
2616 else if (mphi > TMath::Pi()) mphi -= TMath::TwoPi();
2619 if (dphi < -TMath::Pi()) dphi += TMath::TwoPi();
2620 else if (dphi > TMath::Pi()) dphi -= TMath::TwoPi();
2631 if(!trkCont)
return 0.0;
2634 AliVParticle* track = NULL;
2637 Bool_t bTTJetFound = kFALSE;
2641 phiTT = triggerHadron->Phi();
2642 etaTT = triggerHadron->Eta();
2646 jetCont->ResetCurrentID();
2649 if(jet->
Pt() < triggerHadron->Pt()*0.5)
continue;
2653 track = (AliVParticle*) (jet->
TrackAt(iq,trkCont->GetArray()));
2654 if(!track)
continue;
2655 if(track != triggerHadron)
continue;
2659 bTTJetFound = kTRUE;
2662 if(bTTJetFound)
break;
2675 trkCont->ResetCurrentID();
2677 if(!track)
continue;
2681 if(
GetDeltaR(phiTT, track->Phi(), etaTT, track->Eta()) <
fCutPhi)
continue;
2684 if(TMath::Abs(track->GetLabel()) == 99999)
continue;
2687 sumPt += track->Pt();
2696 area -= fCutPhi*fCutPhi*TMath::Pi();
2699 area -= (fCutPhi*fCutPhi*(TMath::Pi()-alpha) + fCutPhi*TMath::Sin(alpha)*(
fTrackEtaWindow - TMath::Abs(etaTT)));
2710 if(!jetCont)
return rhoKT;
2713 AliVParticle* constTrack = NULL;
2714 Bool_t bKTJetCloseToTT = kFALSE;
2719 jetCont->ResetCurrentID();
2724 bKTJetCloseToTT = kFALSE;
2727 if(jet->
Pt() > triggerHadron->Pt()*0.5){
2729 constTrack = (AliVParticle*) (jet->
TrackAt(iq,trkCont->GetArray()));
2730 if(!constTrack)
continue;
2731 if(constTrack == triggerHadron){
2732 bKTJetCloseToTT = kTRUE;
2738 if(bKTJetCloseToTT)
continue;
2743 constTrack = (AliVParticle*) (jet->
TrackAt(iq,trkCont->GetArray()));
2744 if(!constTrack)
continue;
2745 if(TMath::Abs(constTrack->GetLabel()) == 99999){
2746 sumEmbPt += constTrack->Pt();
2751 jetpt = jet->
Pt()- sumEmbPt;
2754 if(jetpt <0.005) jetpt = 0.;
2760 rhoKT = TMath::Median(nJetAcc,
frhovec);
2770 if(!jetCont)
return rhoKTcms;
2773 AliVParticle* constTrack = NULL;
2774 Bool_t bKTJetCloseToTT = kFALSE;
2781 jetCont->ResetCurrentID();
2786 bKTJetCloseToTT = kFALSE;
2789 if(jet->
Pt() > triggerHadron->Pt()*0.5){
2791 constTrack = (AliVParticle*) (jet->
TrackAt(iq,trkCont->GetArray()));
2792 if(!constTrack)
continue;
2793 if(constTrack != triggerHadron)
continue;
2794 bKTJetCloseToTT = kTRUE;
2799 if(bKTJetCloseToTT)
continue;
2804 constTrack = (AliVParticle*) (jet->
TrackAt(iq,trkCont->GetArray()));
2805 if(!constTrack)
continue;
2806 if(TMath::Abs(constTrack->GetLabel()) == 99999){
2807 sumEmbPt += constTrack->Pt();
2813 areaAllJets += jet->
Area();
2815 jetpt = jet->
Pt()- sumEmbPt;
2818 areaPhysJets += jet->
Area();
2825 rhoKTcms = TMath::Median(nJetAcc,
frhovec)*(areaPhysJets/areaAllJets);
2836 return sqrt(dphi*dphi + deta*deta);
2844 if(!jRec)
return -1.0;
2845 if(!jconRec)
return -1.0;
2846 if(!jGen)
return -1.0;
2847 if(!jconGen)
return -1.0;
2849 Double_t fraction = 0., sumPt = 0.;
2852 AliVParticle *pgen, *prec;
2863 if(TMath::Abs(prec->GetLabel()) == TMath::Abs(pgen->GetLabel())){
2867 if(TMath::Abs(prec->Eta() - pgen->Eta()) > 1e-4)
continue;
2868 if(TMath::Abs(
RelativePhi(prec->Phi(), pgen->Phi())) > 1e-4)
continue;
2869 if(TMath::Abs(prec->Pt() - pgen->Pt()) > 1e-4)
continue;
2877 sumPt += pgen->Pt();
2884 fraction = sumPt/jetPt2;
2898 if(ip==321)
return kTRUE;
2899 if(ip==130)
return kTRUE;
2900 if(ip==310)
return kTRUE;
2901 if(ip==3112)
return kTRUE;
2902 if(ip==3122)
return kTRUE;
2903 if(ip==3222)
return kTRUE;
2904 if(ip==3312)
return kTRUE;
2905 if(ip==3322)
return kTRUE;
2906 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 * fhJetPhiGen[kCAll]
gc jet phi vs jet pT
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
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
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
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
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()
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
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
TH2F * fhJetEtaGen[kCAll]
jet eta vs jet pT
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
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)
TH1F * fhVertexZAcceptMC
gc vertexZ inclusive in MC
TH2D * fhInvPtQVsPhiCSide[2]
q*1/pT versus eta
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.
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
AliEmcalList * fOutput
!output list
TH2D * fhDiffPtVsPtTrackTrue
pt spectrum of reconstructed jets without fake track pT vs reconstructed jet pT
Short_t TrackAt(Int_t idx) const
Double_t GetSimPrimaryVertex()
TH1F * fARhoTT[kCAll][kTT][kRho]
gc X=rho from perp cone, Y=centrality
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)
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()
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()
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.
TH1D * fhImpactParameterTT[kCAll][kTT]
impact parameter distribution hijing
TH1F * fhCentralityV0M
centrality V0 multiplicity A+C when TT is present