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),
108 fZVertexCut(10.0),fCutPhi(0.6),
112 for(
Int_t it=0; it<kTT;it++){
113 fRhoRec[it].Set(kRho);
114 fRhoMC[it].Set(kRho);
117 fhCentralityTT[it] = NULL;
120 for(
Int_t iw=0; iw<21; iw++){
121 fhPtJetPrimVsPtJetRec[iw] = NULL;
124 for(
Int_t ic =0; ic<kCAll; ic++){
125 for(
Int_t it=0; it<kTT;it++){
126 fh1Ntriggers[ic][it]=NULL;
127 fh1TriggerMult[ic][it]=NULL;
128 fh1NtriggersGen[ic][it]=NULL;
129 fh1TriggerMultGen[ic][it]=NULL;
132 fhImpactParameterTT[ic][it]=NULL;
134 for(
Int_t ir=0; ir<kRho; ir++){
135 fhDphiTriggerJet[ic][it][ir]=NULL;
136 fhDphiTriggerJetGen[ic][it][ir]=NULL;
137 fHJetSpec[ic][it][ir]=NULL;
138 fHJetSpecGen[ic][it][ir]=NULL;
140 fhDeltaPt[ic][it][ir]=NULL;
141 fhDeltaPtEmb[ic][it][ir]=NULL;
142 fhDeltaPtEmb2D[ic][it][ir]=NULL;
143 fhDeltaPtEmbPerp[ic][it][ir]=NULL;
144 fhDeltaPtEmbPerp2D[ic][it][ir]=NULL;
145 fhDeltaPtEmbBc2Bc[ic][it][ir]=NULL;
146 fhDeltaPtEmbBc2Bc2D[ic][it][ir]=NULL;
148 fhRhoTT[ic][it][ir]=NULL;
149 fARhoTT[ic][it][ir]=NULL;
152 fhVzeroATotMultTT[ic][it]=NULL;
153 fhZNAEnergyTT[ic][it]=NULL;
154 fhTrackMultiplicityTT[ic][it]=NULL;
155 fhZNAVzeroATrackTT[ic][it]=NULL;
157 for(
Int_t it=0; it<kTT; it++){
158 fhJetPhi[ic][it]=NULL;
159 fhJetPhiGen[ic][it]=NULL;
163 for(
Int_t it=0; it<kTT; it++){
164 fhJetEta[ic][it]=NULL;
165 fhJetEtaGen[ic][it]=NULL;
166 fhJetEtaRecoil[ic][it]=NULL;
167 fhJetEtaRecoilGen[ic][it]=NULL;
168 fhJetPhiRecoil[ic][it]=NULL;
169 fhJetPhiRecoilGen[ic][it]=NULL;
173 fhTrackPtGen[ic]=NULL;
174 fhCentrality[ic]=NULL;
175 fhVzeroATotMult[ic]=NULL;
176 fhZNAEnergy[ic]=NULL;
177 fhTrackMultiplicity[ic]=NULL;
178 fhZNAVzeroATrack[ic]=NULL;
179 fhImpactParameter[ic]=NULL;
181 for(
Int_t ir=0; ir<kRho; ir++){
182 fhJetPtGen[ic][ir]=NULL;
183 fhJetPtGenVsJetPtRec[ic][ir]=NULL;
184 fhJetPtResolutionVsPtGen[ic][ir]=NULL;
188 for(
Int_t ir=0; ir<kRho-1; ir++){
189 fhRhoIncl[ic][ir]=NULL;
190 fhDeltaPtIncl[ic][ir]=NULL;
193 fhPtTrkTruePrimRec[ic]=NULL;
194 fhPtTrkTruePrimGen[ic]=NULL;
195 fhPtTrkSecOrFakeRec[ic]=NULL;
198 fCentralityBins[0]=0.;
199 fCentralityBins[1]=20.;
200 fCentralityBins[2]=50.;
201 fCentralityBins[3]=100.;
202 fCentralityBins[4]=1e6;
216 for(
Int_t i=0; i<999; i++){
219 for(
Int_t it=0; it<kTT; it++){
220 fTrigTracksGen[it][i]=0x0;
221 fTrigTracks[it][i]=0x0;
231 for(
Int_t i=0; i<2; i++){
232 fhInvPtQVsPhi[i] = NULL;
233 fhInvPtQVsEta[i] = NULL;
234 fhInvPtQVsPhiASide[i] = NULL;
235 fhInvPtQVsPhiCSide[i] = NULL;
236 fhSigmaPtOverPtVsPt[i] = NULL;
244 fUseDefaultVertexCut(1), fUsePileUpCut(1),
245 fRhoTaskName(), fRhoTaskNameMC(),
246 fSignalJetRadius(0.4), fSignalJetRadiusSquared(fSignalJetRadius*fSignalJetRadius),
247 fSignalJetEtaWindow(0.9 - fSignalJetRadius), fTrackEtaWindow(0.9), fMinTrackPt(0.150), fMinJetArea(0.0),
248 fCentralityType(
"V0A"), fMinFractionShared(0.5),
249 fCrossSection(0.0), fTrials(0.0), fImpParam(-1.0), fRandom(0), fHelperClass(0), fInitializedLocal(0),
250 fTTType(0), fDphiCut(TMath::Pi()-0.6), fUseDoubleBinPrecision(0),
251 fHistEvtSelection(0x0), fhKTAreaPt(0x0),
252 fhVertexZ(0x0), fhVertexXAccept(0x0), fhVertexYAccept(0x0), fhVertexZAccept(0x0),
253 fhVertexXAcceptTT(0x0), fhVertexYAcceptTT(0x0), fhVertexZAcceptTT(0x0),
254 fhVertexZMC(0x0), fhVertexZAcceptMC(0x0),
255 fhDphiTriggerJetAccept(0x0), fhJetPhiIncl(0x0), fhJetEtaIncl(0x0),
256 fhCentralityV0M(0x0), fhCentralityV0A(0x0), fhCentralityV0C(0x0), fhCentralityZNA(0x0),
258 fhDiffPtVsPtTrackTrue(0x0),
259 fhTrackPhiCG(0x0), fhTrackPhiTPCG(0x0),
262 fhDCAinXVsPtStrange(0x0),
263 fhDCAinYVsPtStrange(0x0),
264 fhDCAinXVsPtNonStrange(0x0),
265 fhDCAinYVsPtNonStrange(0x0),
266 fCentralityBins(kCAll),
268 fZVertexCut(10.0),fCutPhi(0.6),
279 for(
Int_t iw=0; iw<21; iw++){
345 for(
Int_t ir=0; ir<kRho-1; ir++){
375 for(
Int_t i=0; i<999; i++){
388 for(
Int_t i=0; i<2; i++){
399 DefineOutput(1, TList::Class());
414 if(!recTrkCont)
return 0.0;
416 AliVParticle* tmpTrack=NULL;
419 recTrkCont->ResetCurrentID();
421 if(!tmpTrack)
continue;
423 if(
GetDeltaR(tmpTrack->Phi(), phi, tmpTrack->Eta(), eta) < radius){
424 tmpConePt = tmpConePt + tmpTrack->Pt();
435 AliGenHijingEventHeader* hijingHeader =
dynamic_cast<AliGenHijingEventHeader*
>(MCEvent()->GenEventHeader());
439 AliAODMCHeader* aodMCH =
dynamic_cast<AliAODMCHeader*
>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
442 for(
UInt_t i = 0;i<aodMCH->GetNCocktailHeaders();i++){
443 hijingHeader =
dynamic_cast<AliGenHijingEventHeader*
>(aodMCH->GetCocktailHeader(i));
444 if(hijingHeader)
break;
450 return (
Double_t) (hijingHeader->ImpactParameter());
452 AliWarning(Form(
"In task %s: GetImpactParameter() failed!", GetName()));
459 AliGenEventHeader* mcHeader = NULL;
460 AliAODMCHeader* aodMCH = NULL;
463 AliRunLoader *
rl = AliRunLoader::Instance();
464 if(rl) mcHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(rl->GetHeader()->GenEventHeader());
470 mcHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(MCEvent()->GenEventHeader());
473 aodMCH =
dynamic_cast<AliAODMCHeader*
>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
476 for(
UInt_t i = 0; i<aodMCH->GetNCocktailHeaders(); i++){
477 mcHeader =
dynamic_cast<AliGenPythiaEventHeader*
>(aodMCH->GetCocktailHeader(i));
483 mcHeader =
dynamic_cast<AliGenHijingEventHeader*
>(MCEvent()->GenEventHeader());
486 aodMCH =
dynamic_cast<AliAODMCHeader*
>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
489 for(
UInt_t i = 0; i<aodMCH->GetNCocktailHeaders(); i++){
490 mcHeader =
dynamic_cast<AliGenHijingEventHeader*
>(aodMCH->GetCocktailHeader(i));
496 mcHeader =
dynamic_cast<AliGenDPMjetEventHeader*
>(MCEvent()->GenEventHeader());
499 aodMCH =
dynamic_cast<AliAODMCHeader*
>(InputEvent()->FindListObject(AliAODMCHeader::StdBranchName()));
502 for(
UInt_t i = 0; i<aodMCH->GetNCocktailHeaders(); i++){
503 mcHeader =
dynamic_cast<AliGenDPMjetEventHeader*
>(aodMCH->GetCocktailHeader(i));
515 mcHeader->PrimaryVertex(
fpyVtx);
518 AliWarning(Form(
"In task %s: Pythia Vertex failed!", GetName()));
526 if(!event)
return kFALSE;
550 if(!event)
return kFALSE;
563 fhVertexZ->Fill(event->GetPrimaryVertex()->GetZ());
571 if(TMath::Abs(event->GetPrimaryVertex()->GetZ()) >
fZVertexCut){
575 if(event->GetPrimaryVertex()->GetNContributors()<1){
585 fVtxArray[0]=
event->GetPrimaryVertex()->GetX();
586 fVtxArray[1]=
event->GetPrimaryVertex()->GetY();
587 fVtxArray[2]=
event->GetPrimaryVertex()->GetZ();
596 if(!track)
return kFALSE;
600 if(!track->Charge())
return kFALSE;
602 if(!(static_cast<AliAODMCParticle*>(track))->IsPhysicalPrimary())
return kFALSE;
617 if(!jet)
return kFALSE;
653 for(
Int_t ir=0;ir<nrho;ir++){
665 tmpRandConePhi =
fRandom->Rndm()*TMath::TwoPi();
715 for(
Int_t ir=0; ir < nrho; ir++){
729 AliError(
"??? Event pointer == 0 ???");
758 Double_t centralityPercentile = -1.0;
759 Double_t centralityPercentileV0A = -1.0;
760 Double_t centralityPercentileV0C = -1.0;
761 Double_t centralityPercentileV0M = -1.0;
762 Double_t centralityPercentileZNA = -1.0;
768 if(InputEvent()->GetVZEROData()){
769 multVzero = InputEvent()->GetVZEROData()->GetMTotV0A();
779 AliVZDC *aodZDC =
dynamic_cast<AliVZDC*
> (InputEvent()->GetZDCData());
781 const Double_t *ZNAtower = aodZDC->GetZNATowerEnergy();
782 energyZdcNA = ZNAtower[0]*4.*82./208./12.96;
786 AliCentrality* tmpCentrality = InputEvent()->GetCentrality();
791 centralityPercentile = tmpCentrality->GetCentralityPercentile(
fCentralityType.Data());
792 centralityPercentileV0A = tmpCentrality->GetCentralityPercentile(
"V0A");
793 centralityPercentileV0C = tmpCentrality->GetCentralityPercentile(
"V0C");
794 centralityPercentileV0M = tmpCentrality->GetCentralityPercentile(
"V0M");
795 centralityPercentileZNA = tmpCentrality->GetCentralityPercentile(
"ZNA");
799 AliWarning(Form(
"Centrality value not valid (c=%E)",centralityPercentile));
813 for(
Int_t ic=0; ic<2; ic++){
814 if(
ficb[ic]==-1)
continue;
825 for(
Int_t ic=0; ic<2; ic++){
826 if(
ficb[ic]==-1)
continue;
841 TClonesArray* arrayMC = 0;
843 Int_t iNTracksMC = 0;
847 AliError(
"No input AOD found!");
850 arrayMC = (TClonesArray*) aodIn->FindListObject(AliAODMCParticle::StdBranchName());
852 AliError(
"No MC array found!");
856 iNTracksMC = arrayMC->GetEntriesFast();
873 AliVParticle *constTrackRec = NULL;
874 AliVParticle *constTrackGen = NULL;
911 Int_t indexSingleRndTrigGen[
kTT] = {-1,-1};
912 AliVParticle* trackTTGen[
kTT] = {NULL,NULL};
915 Double_t sumFakeTrackPtInJetNotStrange = 0.;
916 Double_t sumFakeTrackPtInJetStrange = 0.;
917 Double_t sumStrangeTrackPtInJet = 0.;
918 AliAODMCParticle* particleMC = NULL;
919 AliAODMCParticle* particleMCMother = NULL;
920 Int_t iIndexMother = 0;
922 Int_t iPdgCodeMother = 0;
925 Double_t newJetPt=0., newSumFakePt=0., enhw =0.;
932 parContGen->ResetCurrentID();
934 if(!constTrackGen)
continue;
937 for(
Int_t ic=0; ic<2; ic++){
938 if(
ficb[ic]==-1)
continue;
943 if((
fTTlow[it] <= constTrackGen->Pt()) && (constTrackGen->Pt() <
fTThigh[it])){
944 if(ntriggersGen[it]<999){
956 for(
Int_t ic=0; ic<2; ic++){
957 if(
ficb[ic]==-1)
continue;
961 if(ntriggersGen[it]==1){
962 indexSingleRndTrigGen[it] = 0;
963 trackTTGen[it] = (AliVParticle*) (
fTrigTracksGen[it][indexSingleRndTrigGen[it]]);
965 }
else if(ntriggersGen[it]>1){
970 for(
Int_t ik=0; ik<ntriggersGen[it]; ik++){
972 indexSingleRndTrigGen[it] = ik;
976 trackTTGen[it] = (AliVParticle*) (
fTrigTracksGen[it][indexSingleRndTrigGen[it]]);
978 indexSingleRndTrigGen[it] =
fRandom->Integer(ntriggersGen[it]);
979 trackTTGen[it] = (AliVParticle*) (
fTrigTracksGen[it][indexSingleRndTrigGen[it]]);
988 Int_t indexSingleRndTrig[
kTT] = {-1,-1};
989 AliVParticle* trackTT[
kTT] = {NULL,NULL};
995 trkContRec->ResetCurrentID();
997 if(!constTrackRec)
continue;
1002 if(TMath::Abs(constTrackRec->GetLabel()) == 99999)
continue;
1008 for(
Int_t ic=0; ic<2; ic++){
1009 if(
ficb[ic]==-1)
continue;
1011 fhTrackEta[
ficb[ic]]->Fill(constTrackRec->Pt(), constTrackRec->Eta());
1016 if(
fTTlow[it] <= constTrackRec->Pt() && constTrackRec->Pt() <
fTThigh[it]){
1017 if(ntriggers[it]<999){
1029 for(
Int_t ic=0; ic<2; ic++){
1030 if(
ficb[ic]==-1)
continue;
1039 if(ntriggers[it]==1){
1040 indexSingleRndTrig[it] = 0;
1041 trackTT[it] = (AliVParticle*) (
fTrigTracks[it][indexSingleRndTrig[it]]);
1043 }
else if(ntriggers[it]>1){
1047 for(
Int_t ik=0; ik<ntriggers[it]; ik++){
1052 if(dphiTTTT<-0.5*TMath::Pi()) dphiTTTT += TMath::TwoPi();
1053 if(dphiTTTT> 1.5*TMath::Pi()) dphiTTTT -= TMath::TwoPi();
1060 for(
Int_t ik=0; ik<ntriggers[it]; ik++){
1061 if(pTofTT < ((AliVParticle*) (
fTrigTracks[it][ik]))->Pt()){
1062 indexSingleRndTrig[it] = ik;
1063 pTofTT = ((AliVParticle*) (
fTrigTracks[it][ik]))->Pt();
1067 trackTT[it] = (AliVParticle*) (
fTrigTracks[it][indexSingleRndTrig[it]]);
1069 indexSingleRndTrig[it] =
fRandom->Integer(ntriggers[it]);
1070 trackTT[it] = (AliVParticle*) (
fTrigTracks[it][indexSingleRndTrig[it]]);
1075 if(ntriggers[
kRef]>0 || ntriggers[
kSig]>0){
1123 Bool_t bRecPrim = kFALSE;
1129 parContGen->ResetCurrentID();
1131 if(!constTrackGen)
continue;
1134 for(
Int_t ic=0; ic<2; ic++){
1135 if(
ficb[ic]==-1)
continue;
1143 if(trkContRec && parContGen){
1144 trkContRec->ResetCurrentID();
1146 if(!constTrackRec)
continue;
1150 parContGen->ResetCurrentID();
1152 if(!constTrackGen)
continue;
1154 if(TMath::Abs(constTrackRec->GetLabel()) == TMath::Abs(constTrackGen->GetLabel())){
1158 for(
Int_t ic=0; ic<2; ic++){
1159 if(
ficb[ic]==-1)
continue;
1168 for(
Int_t ic=0; ic<2; ic++){
1169 if(
ficb[ic]==-1)
continue;
1185 jetContGen->ResetCurrentID();
1187 if(!jetGen)
continue;
1195 for(
Int_t ic=0; ic<2; ic++){
1196 if(
ficb[ic]==-1)
continue;
1206 jetContRec->ResetCurrentID();
1208 if(!jetRec)
continue;
1213 sumFakeTrackPtInJetNotStrange = 0.;
1214 sumFakeTrackPtInJetStrange = 0.;
1215 sumStrangeTrackPtInJet = 0.;
1217 particleMCMother = NULL;
1224 constTrackRec =
static_cast<AliVParticle*
> (jetRec->
TrackAt(iq,trkContRec->GetArray()));
1225 if(!constTrackRec)
continue;
1228 parContGen->ResetCurrentID();
1230 if(!constTrackGen)
continue;
1232 if(TMath::Abs(constTrackRec->GetLabel()) == TMath::Abs(constTrackGen->GetLabel())){
1239 lab = TMath::Abs(constTrackRec->GetLabel());
1242 if(lab < iNTracksMC){
1243 particleMC = (AliAODMCParticle*) arrayMC->At(lab);
1245 iPdgCode = TMath::Abs(particleMC->GetPdgCode());
1246 iIndexMother = TMath::Abs(particleMC->GetMother());
1248 sumFakeTrackPtInJetStrange += constTrackRec->Pt();
1249 sumStrangeTrackPtInJet += constTrackRec->Pt();
1253 if(iIndexMother < iNTracksMC && 0 <= iIndexMother && !bStrange){
1255 particleMCMother = (AliAODMCParticle*) arrayMC->At(iIndexMother);
1256 if(particleMCMother){
1257 iPdgCodeMother = TMath::Abs(particleMCMother->GetPdgCode());
1260 sumFakeTrackPtInJetStrange += constTrackRec->Pt();
1261 sumStrangeTrackPtInJet += constTrackRec->Pt();
1269 sumFakeTrackPtInJetNotStrange += constTrackRec->Pt();
1273 lab = TMath::Abs(constTrackRec->GetLabel());
1274 if(lab < iNTracksMC){
1275 particleMC = (AliAODMCParticle*) arrayMC->At(lab);
1277 iPdgCode = TMath::Abs(particleMC->GetPdgCode());
1279 sumStrangeTrackPtInJet += constTrackRec->Pt();
1286 for(
Int_t iw=0; iw<21; iw++){
1288 newJetPt = jetRec->
Pt() + enhw*sumStrangeTrackPtInJet;
1289 newSumFakePt = sumFakeTrackPtInJetNotStrange + (1.0+ enhw)*sumFakeTrackPtInJetStrange;
1304 if(jetGen->
Pt()<1e-3){
1324 for(
Int_t ic=0; ic<2; ic++){
1325 if(
ficb[ic]==-1)
continue;
1348 Bool_t bFirstCycle = kTRUE;
1356 if(parContGen && ntriggersGen[it] >0 && ((AliVParticle*)trackTTGen[it])){
1357 bFirstCycle = kTRUE;
1359 AliVParticle* triggerHadronGen = (AliVParticle*) trackTTGen[it];
1360 if(!triggerHadronGen)
continue;
1362 for(
Int_t ic=0; ic<2; ic++){
1363 if(
ficb[ic]==-1)
continue;
1373 jetContGen->ResetCurrentID();
1376 AliError(Form(
"%s: Could not receive gen jet", GetName()));
1381 areaJet = jetGen->
Area();
1382 pTJet = jetGen->
Pt();
1385 for(
Int_t ic=0; ic<2; ic++){
1386 if(
ficb[ic]==-1)
continue;
1396 if(dfi < -0.5*TMath::Pi()) dfi += TMath::TwoPi();
1397 if(dfi > 1.5*TMath::Pi()) dfi -= TMath::TwoPi();
1400 for(
Int_t ic=0; ic<2; ic++){
1401 if(
ficb[ic]==-1)
continue;
1407 if(TMath::Abs(dphi) <
fDphiCut)
continue;
1413 for(
Int_t ic=0; ic<2; ic++){
1414 if(
ficb[ic]==-1)
continue;
1425 bFirstCycle = kFALSE;
1448 Bool_t bEmbJetCloseToTT = kFALSE;
1451 jetContRec->ResetCurrentID();
1453 if(!jetRec)
continue;
1457 bEmbJetCloseToTT = kFALSE;
1459 if(jetRec->
Pt() > trackTT[it]->Pt()*0.5){
1462 constTrackRec =
static_cast<AliVParticle*
> (jetRec->
TrackAt(iq,trkContRec->GetArray()));
1463 if(!constTrackRec)
continue;
1464 if(constTrackRec != ((AliVParticle*) trackTT[it]))
continue;
1466 bEmbJetCloseToTT = kTRUE;
1471 if(bEmbJetCloseToTT)
continue;
1479 if(jetEmb->
Pt()<1e-3){
1492 for(
Int_t ic=0; ic<2; ic++){
1493 if(
ficb[ic]==-1)
continue;
1504 dphi = TMath::Abs(
RelativePhi(trackTT[it]->Phi(), jetEmb->
Phi()));
1505 if(TMath::Pi()/4 < dphi && dphi < 3*TMath::Pi()/4){
1514 }
else if(dphi >= 3*TMath::Pi()/4 ){
1536 for(
Int_t ic=0; ic<2; ic++){
1537 if(
ficb[ic]==-1)
continue;
1543 if(ntriggers[it]>0){
1545 for(
Int_t ir=0; ir < kRho-1; ir++){
1548 for(
Int_t ic=0; ic<2; ic++){
1549 if(
ficb[ic]==-1)
continue;
1562 Double_t deltapt[kRho-1], phiTT = 0., etaTT = -1000.;
1565 Bool_t bRecJetCloseToTT = kFALSE;
1569 bRecJetCloseToTT = kFALSE;
1574 phiTT = trackTT[it]->Phi();
1575 etaTT = trackTT[it]->Eta();
1578 jetContRec->ResetCurrentID();
1580 if(!jetRec)
continue;
1584 bRecJetCloseToTT = kFALSE;
1586 if(jetRec->
Pt() > trackTT[it]->Pt()*0.5){
1588 constTrackRec = (AliVParticle*) (jetRec->
TrackAt(iq,trkContRec->GetArray()));
1589 if(!constTrackRec)
continue;
1590 if(constTrackRec != ((AliVParticle*) trackTT[it]))
continue;
1591 phiTT = jetRec->
Phi();
1592 etaTT = jetRec->
Eta();
1593 bRecJetCloseToTT = kTRUE;
1597 if(bRecJetCloseToTT)
break;
1605 GetDeltaPt(kRho-1, (
fRhoRec[it]), &deltapt[0], phiTT, etaTT, trkContRec, kFALSE);
1608 for(
Int_t ir=0; ir < kRho-1; ir++){
1609 for(
Int_t ic=0; ic<2; ic++){
1610 if(
ficb[ic]==-1)
continue;
1614 if(ntriggers[it]>0){
1628 AliAODTrack *atrk=NULL;
1633 trkContRec->ResetCurrentID();
1640 if(dphi < 0) dphi+= 2*TMath::Pi();
1641 if(dphi > 2*TMath::Pi()) dphi-= 2*TMath::Pi();
1643 if(atrk->IsGlobalConstrained()){
1649 itrkq = (atrk->Charge()<0) ? 0 : 1;
1662 memset(cv, 0,
sizeof(
Double_t) * 21);
1663 memset(pxpypz, 0,
sizeof(
Double_t) * 50);
1664 memset(xyz, 0,
sizeof(
Double_t) * 50);
1666 atrk->GetPxPyPz(pxpypz);
1667 atrk->GetCovarianceXYZPxPyPz(cv);
1669 AliExternalTrackParam par(xyz, pxpypz, cv, atrk->Charge());
1670 fhSigmaPtOverPtVsPt[itrkq]->Fill(atrk->Pt(), TMath::Abs(sqrt(par.GetSigma1Pt2())/par.GetSigned1Pt()));
1677 lab = TMath::Abs(atrk->GetLabel());
1679 if(lab < iNTracksMC){
1680 particleMC = (AliAODMCParticle*) arrayMC->At(lab);
1682 if(particleMC->IsPhysicalPrimary()){
1694 for(
Int_t ic=0; ic<2; ic++){
1695 if(
ficb[ic]==-1)
continue;
1724 jetContRec->ResetCurrentID();
1727 AliError(Form(
"%s: Could not receive jet", GetName()));
1732 pTJet = jetRec->
Pt();
1742 if(ntriggers[it]>0 && ((AliVParticle*) trackTT[it])){
1747 AliVParticle* triggerHadron = (AliVParticle*) trackTT[it];
1748 if(!triggerHadron)
continue;
1750 for(
Int_t ic=0; ic<2; ic++){
1751 if(
ficb[ic]==-1)
continue;
1758 jetContRec->ResetCurrentID();
1761 AliError(Form(
"%s: Could not receive jet", GetName()));
1766 areaJet = jetRec->
Area();
1767 pTJet = jetRec->
Pt();
1770 for(
Int_t ic=0; ic<2; ic++){
1771 if(
ficb[ic]==-1)
continue;
1780 if(dfi < -0.5*TMath::Pi()) dfi += TMath::TwoPi();
1781 if(dfi > 1.5*TMath::Pi()) dfi -= TMath::TwoPi();
1783 for(
Int_t ic=0; ic<2; ic++){
1784 if(
ficb[ic]==-1)
continue;
1792 if(TMath::Abs(dphi) <
fDphiCut)
continue;
1800 for(
Int_t ic=0; ic<2; ic++){
1801 if(
ficb[ic]==-1)
continue;
1817 bFirstCycle = kFALSE;
1855 printf(
"ERROR: Output list not available\n");
1864 if(
fOutput && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
1881 TString bgtype[]={
"Perp",
"CMS",
"KT",
"Zero"};
1885 Bool_t oldStatus = TH1::AddDirectoryStatus();
1886 TH1::AddDirectory(kFALSE);
1908 for(
Int_t ic =0; ic<icmax; ic++){
1909 name = (ic==0) ? Form(
"fh1NtriggersMB") :
1911 name.Append(Form(
"TT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
1915 name = (ic==0) ? Form(
"fh1TriggerMultMB") :
1917 name.Append(Form(
"TT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
1928 const Int_t dimSpec = 2;
1929 const Int_t nBinsSpec[dimSpec] = { 50, bw*160};
1930 const Double_t lowBinSpec[dimSpec] = { 0.0, -20.0};
1931 const Double_t hiBinSpec[dimSpec] = { 2.0, 300.0};
1933 for(
Int_t ic =0; ic<icmax; ic++){
1936 name = (ic==0) ?
"fHJetSpecMB" :
1939 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
1943 Form(
"Recoil jet spectrum TT%d%d [A,pTjet-A*rho%s]",
1945 nBinsSpec[0], lowBinSpec[0], hiBinSpec[0], nBinsSpec[1], lowBinSpec[1],hiBinSpec[1]);
1953 for(
Int_t ic =0; ic<icmax; ic++){
1956 name = (ic==0) ?
"fhRhoMB" :
1960 name.Append(Form(
"TT%d%d%s",TMath::Nint(
fTTlow[it]),TMath::Nint(
fTThigh[it]),bgtype[ir].
Data()));
1963 fhRhoTT[ic][it][ir] =
new TH1F(name.Data(),
1964 Form(
"Rho%s",bgtype[ir].
Data()),80, 0.0, 40.0);
1969 name = (ic==0) ?
"fARhoMB" :
1973 name.Append(Form(
"TT%d%d%s",TMath::Nint(
fTTlow[it]),TMath::Nint(
fTThigh[it]),bgtype[ir].
Data()));
1974 fARhoTT[ic][it][ir] =
new TH1F(name.Data(),
1975 Form(
"Area times rho %s",bgtype[ir].
Data()),80, 0.0, 40.0);
1979 name = (ic==0) ? Form(
"fhRhoInclMB%s",bgtype[ir].
Data()) :
1990 for(
Int_t ic =0; ic<icmax; ic++){
1993 name = (ic==0) ?
"fhDeltaPtMB" :
1997 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
1999 Form(
"DeltaPt%s",bgtype[ir].
Data()), 150, -50, 100);
2004 name = (ic==0) ?
"fhDeltaPtInclMB" :
2008 name.Append(Form(
"%s", bgtype[ir].
Data()));
2016 name = (ic==0) ?
"fhDeltaPtEmbMB" :
2020 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
2025 name = (ic==0) ?
"fhDeltaPtEmbPerpMB" :
2029 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
2034 name = (ic==0) ?
"fhDeltaPtEmbBc2BcMB" :
2038 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
2043 name = (ic==0) ?
"fhDeltaPtEmb2DMB" :
2047 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
2049 Form(
"fhDeltaPtEmb2D%s",bgtype[ir].
Data()), 125,0, 250, 150, -50, 100);
2054 name = (ic==0) ?
"fhDeltaPtEmbPerp2DMB" :
2058 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
2064 name = (ic==0) ?
"fhDeltaPtEmbBc2Bc2DMB" :
2068 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
2079 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.};
2082 fhKTAreaPt =
new TH2F(
"fhKTAreaPt",
"KT jet Area vs Pt",nbinsPt, binsPt, 50,0,2);
2087 for(
Int_t ic =0; ic<icmax; ic++){
2089 name = (ic==0) ? Form(
"fhJetPhiMBTT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])) :
2096 fhJetPhi[ic][it] =
new TH2F(name.Data(),
"Azim dist jets vs pTjet", 50, 0, 100, 50,-TMath::Pi(),TMath::Pi());
2101 name = (ic==0) ? Form(
"fhJetPhiMBTT%d%dRecoil", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])) :
2108 fhJetPhiRecoil[ic][it] =
new TH2F(name.Data(),
"Azim dist jets vs pTjet", 50, 0, 100, 50,-TMath::Pi(),TMath::Pi());
2113 name = (ic==0) ? Form(
"fhTrackPhiMB") :
2117 fhTrackPhi[ic] =
new TH2F(name.Data(),
"azim dist trig had vs pT,trk", 50, 0, 50, 50,-TMath::Pi(),TMath::Pi());
2121 name = (ic==0) ? Form(
"fhJetEtaMBTT%d%d",TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]) ) :
2127 fhJetEta[ic][it] =
new TH2F(name.Data(),
"Eta dist jets vs pTjet", 50,0, 100, 40,-0.9,0.9);
2132 name = (ic==0) ? Form(
"fhJetEtaMBTT%d%dRecoil",TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]) ) :
2138 fhJetEtaRecoil[ic][it] =
new TH2F(name.Data(),
"Eta dist of recoil jets vs pTjet", 50,0, 100, 40,-0.9,0.9);
2142 name = (ic==0) ? Form(
"fhTrackEtaMB") :
2146 fhTrackEta[ic] =
new TH2F(name.Data(),
"Eta dist trig had vs pT,trk", 50, 0, 50, 40,-0.9,0.9);
2149 name = (ic==0) ? Form(
"fhTrackPtMB") :
2153 fhTrackPt[ic] =
new TH1F(name.Data(),
"pT,trk ", 50, 0, 50);
2157 fhVertexZ =
new TH1F(
"fhVertexZ",
"z vertex",40,-20,20);
2160 fhVertexXAccept =
new TH1F(
"fhVertexXAccept",
"vertex after cut",600,-3,3);
2166 fhVertexZAccept =
new TH1F(
"fhVertexZAccept",
"z vertex after cut",40,-20,20);
2181 fhVertexZMC =
new TH1F(
"fhVertexZMC",
"z vertex",40,-20,20);
2184 fhVertexZAcceptMC =
new TH1F(
"fhVertexZAcceptMC",
"z vertex after cut",40,-20,20);
2188 for(
Int_t ic =0; ic<icmax; ic++){
2192 Form(
"fhDphiTriggerJetMB") :
2195 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]) ,bgtype[ir].
Data()));
2197 fhDphiTriggerJet[ic][it][ir] =
new TH2F(name.Data(),
"Deltaphi trig-jet",75,-50,100, 100, -0.5*TMath::Pi(),1.5*TMath::Pi());
2204 fhDphiTriggerJetAccept =
new TH1F(
"fhDphiTriggerJetAccept",
"Deltaphi trig-jet after cut",50, -0.5*TMath::Pi(),1.5*TMath::Pi());
2207 fhDphiTTTT[
kRef] =
new TH1F(
"fhDphiTTTT67",
"Deltaphi between multiple TT",50, -0.5*TMath::Pi(),1.5*TMath::Pi());
2213 fhJetPhiIncl =
new TH2F(
"fhJetPhiIncl",
"Azim dist jets vs pTjet", 50, 0, 100, 50,-TMath::Pi(),TMath::Pi());
2216 fhJetEtaIncl =
new TH2F(
"fhJetEtaIncl",
"Eta dist inclusive jets vs pTjet", 50,0, 100, 40,-0.9,0.9);
2219 fhTrackPhiCG =
new TH2F(
"fhTrackPhiCG",
"azim dist trig had vs pT,trk Glob Const", 50, 0, 50, 50,0,2*TMath::Pi());
2222 fhTrackPhiTPCG =
new TH2F(
"fhTrackPhiTPCG",
"azim dist trig had vs pT,trk TPC Const", 50, 0, 50, 50,0,2*TMath::Pi());
2226 for(
Int_t i=0; i<2; i++){
2227 name = (i==0) ?
"Neg" :
"Pos";
2229 Form(
"%s track 1/pt versus track phi", name.Data()), 36, 0, 2*TMath::Pi(), 40, 0, 0.4);
2233 Form(
"%s track 1/pt versus track eta", name.Data()), 20, -0.9, 0.9, 40, 0, 0.4);
2237 Form(
"%s track 1/pt versus track phi", name.Data()), 36, 0, 2*TMath::Pi(), 40, 0, 0.4);
2241 Form(
"%s track 1/pt versus track phi", name.Data()), 36, 0, 2*TMath::Pi(), 40, 0, 0.4);
2245 Form(
"%s track sigma(1/pt)/ 1/pt vs pt", name.Data()), 100, 0, 100, 250, 0, 1);
2249 for(
Int_t ic =0; ic<icmax; ic++){
2250 name = (ic==0) ? Form(
"fhCentralityMB") :
2254 fhCentrality[ic] =
new TH1F(name.Data(),
"Centrality",100,0,100);
2258 fhCentralityV0M =
new TH1F(
"hCentralityV0M",
"hCentralityV0M",100,0,100);
2261 fhCentralityV0A =
new TH1F(
"hCentralityV0A",
"hCentralityV0A",100,0,100);
2264 fhCentralityV0C =
new TH1F(
"hCentralityV0C",
"hCentralityV0C",100,0,100);
2267 fhCentralityZNA =
new TH1F(
"hCentralityZNA",
"hCentralityZNA",100,0,100);
2271 name = Form(
"fhCentralityTT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]));
2277 for(
Int_t ic =0; ic<icmax; ic++){
2278 name = (ic==0) ? Form(
"fhVzeroATotMultMB") :
2283 fhVzeroATotMult[ic] =
new TH1F(name.Data(),
"hVzeroATotMult",1000,0,1000);
2287 name = (ic==0) ?
"fhVzeroATotMultMB" :
2291 name.Append(Form(
"TT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
2301 for(
Int_t ic =0; ic<icmax; ic++){
2302 name = (ic==0) ? Form(
"fhZNAEnergyMB") :
2307 fhZNAEnergy[ic] =
new TH1F(name.Data(),
"fhZNAEnergy",1000,0,200);
2311 name = (ic==0) ? Form(
"fhZNAEnergyMB") :
2315 name.Append(Form(
"TT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
2324 for(
Int_t ic =0; ic<icmax; ic++){
2325 name = (ic==0) ? Form(
"fhTrackMultiplicityMB") :
2333 name = (ic==0) ? Form(
"fhTrackMultiplicityMB") :
2337 name.Append(Form(
"TT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
2346 const Int_t dimZ = 3;
2347 const Int_t nBinsZ[dimZ] = { 100, 100, 25 };
2348 const Double_t lowBinZ[dimZ] = { 0.0, 0.0, 0.0};
2349 const Double_t hiBinZ[dimZ] = { 200.0, 1000.0, 250};
2351 for(
Int_t ic =0; ic<icmax; ic++){
2352 name = (ic==0) ? Form(
"fhZNAVzeroATrackMB") :
2358 Form(
"ZNA, V0A mult, track mult"),
2359 dimZ, nBinsZ,lowBinZ,hiBinZ);
2366 name = (ic==0) ? Form(
"fhZNAVzeroATrackMB") :
2370 name.Append(Form(
"TT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
2395 name = (ic==0) ? Form(
"fhImpactParameterMB") :
2404 name = (ic==0) ? Form(
"fhImpactParameterMB") :
2408 name.Append(Form(
"TT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
2415 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.};
2419 for(
Int_t ic =0; ic<icmax; ic++){
2421 name = (ic==0) ? Form(
"fhJetPtGenMB%s",bgtype[ir].
Data()) :
2426 Form(
"Jet pT Gen %s",bgtype[ir].
Data()),bw*160,-20,300);
2430 name = (ic==0) ? Form(
"fhJetPtGenVsJetPtRecMB%s",bgtype[ir].
Data()) :
2435 "", bw*160,-20,300, bw*160,-20,300);
2439 name = (ic==0) ? Form(
"fhJetPtResolutionVsPtGenMB%s",bgtype[ir].
Data()) :
2440 Form(
"fhJetPtResolutionVsPtGen%d%d%s",TMath::Nint(
fCentralityBins[ic-1]),
2444 "Resolution", 20,0,100, 200,-1.,1.);
2451 -50, -48., -46., -44, -42.,
2452 -40., -38., -36., -34., -32., -30., -28., -26., -25., -24., -23., -22., -21.,
2453 -20., -19.5, -19., -18.5, -18., -17.5, -17., -16.5, -16., -15.5,
2454 -15., -14.5, -14., -13.5, -13., -12.5, -12., -11.5, -11., -10.5,
2455 -10.0, -9.8, -9.6, -9.4, -9.2,
2456 -9.0, -8.8, -8.6, -8.4, -8.2,
2457 -8.0, -7.8, -7.6, -7.4, -7.2,
2458 -7.0, -6.8, -6.6, -6.4, -6.2,
2459 -6.0, -5.8, -5.6, -5.4, -5.2,
2460 -5.0, -4.8, -4.6, -4.4, -4.2,
2461 -4.0, -3.8, -3.6, -3.4, -3.2,
2462 -3.0, -2.8, -2.6, -2.4, -2.2,
2463 -2.0, -1.9, -1.8, -1.7, -1.6, -1.5, -1.4, -1.3, -1.2, -1.1,
2464 -1.0,-0.95, -0.9, -0.85, -0.8, -0.75, -0.7, -0.65, -0.6, -0.55,
2465 -0.5,-0.48, -0.46, -0.44, -0.42,
2466 -0.4, -0.38, -0.36, -0.34, -0.32,
2467 -0.3, -0.28, -0.26, -0.24, -0.22,
2468 -0.2, -0.18, -0.16, -0.14, -0.12,
2469 -0.1, -0.09, -0.08, -0.07, -0.06,
2470 -0.05, -0.045, -0.04,-0.035 ,-0.03, -0.025, -0.02, -0.015, -0.01, -0.005,
2471 0, 0.005, 0.01, 0.015, 0.02, 0.025, 0.03, 0.035, 0.04, 0.045,
2472 0.05, 0.06, 0.07, 0.08, 0.09,
2473 0.1, 0.12, 0.14, 0.16, 0.18,
2474 0.2, 0.22, 0.24, 0.26, 0.28,
2475 0.3, 0.32, 0.34, 0.36, 0.38,
2476 0.4, 0.42, 0.44, 0.46, 0.48,
2477 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8,0.85, 0.9, 0.95,
2478 1.0,1.1, 1.2,1.3, 1.4,1.5, 1.6, 1.7, 1.8, 1.9,
2479 2.0, 2.2, 2.4, 2.6, 2.8,
2480 3.0, 3.2, 3.4, 3.6, 3.8,
2481 4.0, 4.2, 4.4, 4.6, 4.8,
2482 5.0, 5.2, 5.4, 5.6, 5.8,
2483 6.0, 6.2, 6.4, 6.6, 6.8,
2484 7.0, 7.2, 7.4, 7.6, 7.8,
2485 8.0, 8.2, 8.4, 8.6, 8.8,
2486 9.0, 9.2, 9.4, 9.6, 9.8,
2487 10., 10.5, 11., 11.5, 12., 12.5, 13., 13.5, 14., 14.5,
2488 15., 15.5, 16., 16.5, 17., 17.5, 18., 18.5, 19., 19.5,
2489 20., 21., 22., 23., 24, 25, 26., 28., 30., 32.,34., 36., 38.,
2490 40., 42., 44., 46., 48., 50.};
2493 for(
Int_t ic =0; ic<icmax; ic++){
2494 name = (ic==0) ? Form(
"fhPtTrkTruePrimRecMB") :
2502 name = (ic==0) ? Form(
"fhPtTrkTruePrimGenMB") :
2509 name = (ic==0) ? Form(
"fhPtTrkSecOrFakeRecMB") :
2517 for(
Int_t iw=0; iw<21; iw++){
2518 name = Form(
"fhPtJetPrimVsPtJetRecMB%03d",TMath::Nint(100*iw*0.05));
2522 name = Form(
"fhDiffPtVsPtTrackTrueMB");
2528 fhDCAinXVsPt =
new TH2D(
"fhDCAinXVsPt",
"fhDCAinXVsPt",nbins, bins, 200, -10.,10);
2545 for(
Int_t ic =0; ic<icmax; ic++){
2547 name = (ic==0) ? Form(
"fh1NtriggersGenMB") :
2550 name.Append(Form(
"TT%d%d",TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
2556 name = (ic==0) ? Form(
"fh1TriggerMultGenMB") :
2560 name.Append(Form(
"TT%d%d",TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])));
2566 name = (ic==0) ?
"fHJetSpecGenMB" :
2570 name.Append(Form(
"TT%d%d%s", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it]), bgtype[ir].
Data()));
2577 name = (ic==0) ? Form(
"fhJetPhiGenMBTT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])) :
2588 name = (ic==0) ? Form(
"fhJetEtaGenMBTT%d%d", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])) :
2601 name = (ic==0) ? Form(
"fhJetPhiGenMBTT%d%dRecoil", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])) :
2602 Form(
"fhJetPhiGen%d%dTT%d%dRecoil",TMath::Nint(
fCentralityBins[ic-1]),
2612 name = (ic==0) ? Form(
"fhJetEtaGenMBTT%d%dRecoil", TMath::Nint(
fTTlow[it]), TMath::Nint(
fTThigh[it])) :
2613 Form(
"fhJetEtaGen%d%dTT%d%dRecoil",TMath::Nint(
fCentralityBins[ic-1]),
2625 name = (ic==0) ? Form(
"fhTrackPtGenMB") :
2650 THnSparse *hn =
dynamic_cast<THnSparse*
>(
fOutput->At(i));
2655 TH1::AddDirectory(oldStatus);
2681 if (vphi < -TMath::Pi()) vphi += TMath::TwoPi();
2682 else if (vphi > TMath::Pi()) vphi -= TMath::TwoPi();
2684 if (mphi < -TMath::Pi()) mphi += TMath::TwoPi();
2685 else if (mphi > TMath::Pi()) mphi -= TMath::TwoPi();
2688 if (dphi < -TMath::Pi()) dphi += TMath::TwoPi();
2689 else if (dphi > TMath::Pi()) dphi -= TMath::TwoPi();
2700 if(!trkCont)
return 0.0;
2703 AliVParticle* track = NULL;
2706 Bool_t bTTJetFound = kFALSE;
2710 phiTT = triggerHadron->Phi();
2711 etaTT = triggerHadron->Eta();
2715 jetCont->ResetCurrentID();
2718 if(jet->
Pt() < triggerHadron->Pt()*0.5)
continue;
2722 track = (AliVParticle*) (jet->
TrackAt(iq,trkCont->GetArray()));
2723 if(!track)
continue;
2724 if(track != triggerHadron)
continue;
2728 bTTJetFound = kTRUE;
2731 if(bTTJetFound)
break;
2744 trkCont->ResetCurrentID();
2746 if(!track)
continue;
2750 if(
GetDeltaR(phiTT, track->Phi(), etaTT, track->Eta()) <
fCutPhi)
continue;
2753 if(TMath::Abs(track->GetLabel()) == 99999)
continue;
2756 sumPt += track->Pt();
2765 area -= fCutPhi*fCutPhi*TMath::Pi();
2768 area -= (fCutPhi*fCutPhi*(TMath::Pi()-alpha) + fCutPhi*TMath::Sin(alpha)*(
fTrackEtaWindow - TMath::Abs(etaTT)));
2779 if(!jetCont)
return rhoKT;
2782 AliVParticle* constTrack = NULL;
2783 Bool_t bKTJetCloseToTT = kFALSE;
2788 jetCont->ResetCurrentID();
2793 bKTJetCloseToTT = kFALSE;
2796 if(jet->
Pt() > triggerHadron->Pt()*0.5){
2798 constTrack = (AliVParticle*) (jet->
TrackAt(iq,trkCont->GetArray()));
2799 if(!constTrack)
continue;
2800 if(constTrack == triggerHadron){
2801 bKTJetCloseToTT = kTRUE;
2807 if(bKTJetCloseToTT)
continue;
2812 constTrack = (AliVParticle*) (jet->
TrackAt(iq,trkCont->GetArray()));
2813 if(!constTrack)
continue;
2814 if(TMath::Abs(constTrack->GetLabel()) == 99999){
2815 sumEmbPt += constTrack->Pt();
2820 jetpt = jet->
Pt()- sumEmbPt;
2823 if(jetpt <0.005) jetpt = 0.;
2829 rhoKT = TMath::Median(nJetAcc,
frhovec);
2839 if(!jetCont)
return rhoKTcms;
2842 AliVParticle* constTrack = NULL;
2843 Bool_t bKTJetCloseToTT = kFALSE;
2850 jetCont->ResetCurrentID();
2855 bKTJetCloseToTT = kFALSE;
2858 if(jet->
Pt() > triggerHadron->Pt()*0.5){
2860 constTrack = (AliVParticle*) (jet->
TrackAt(iq,trkCont->GetArray()));
2861 if(!constTrack)
continue;
2862 if(constTrack != triggerHadron)
continue;
2863 bKTJetCloseToTT = kTRUE;
2868 if(bKTJetCloseToTT)
continue;
2873 constTrack = (AliVParticle*) (jet->
TrackAt(iq,trkCont->GetArray()));
2874 if(!constTrack)
continue;
2875 if(TMath::Abs(constTrack->GetLabel()) == 99999){
2876 sumEmbPt += constTrack->Pt();
2882 areaAllJets += jet->
Area();
2884 jetpt = jet->
Pt()- sumEmbPt;
2887 areaPhysJets += jet->
Area();
2894 rhoKTcms = TMath::Median(nJetAcc,
frhovec)*(areaPhysJets/areaAllJets);
2905 return sqrt(dphi*dphi + deta*deta);
2913 if(!jRec)
return -1.0;
2914 if(!jconRec)
return -1.0;
2915 if(!jGen)
return -1.0;
2916 if(!jconGen)
return -1.0;
2918 Double_t fraction = 0., sumPt = 0.;
2921 AliVParticle *pgen, *prec;
2932 if(TMath::Abs(prec->GetLabel()) == TMath::Abs(pgen->GetLabel())){
2936 if(TMath::Abs(prec->Eta() - pgen->Eta()) > 1e-4)
continue;
2937 if(TMath::Abs(
RelativePhi(prec->Phi(), pgen->Phi())) > 1e-4)
continue;
2938 if(TMath::Abs(prec->Pt() - pgen->Pt()) > 1e-4)
continue;
2946 sumPt += pgen->Pt();
2953 fraction = sumPt/jetPt2;
2967 if(ip==321)
return kTRUE;
2968 if(ip==130)
return kTRUE;
2969 if(ip==310)
return kTRUE;
2970 if(ip==3112)
return kTRUE;
2971 if(ip==3122)
return kTRUE;
2972 if(ip==3222)
return kTRUE;
2973 if(ip==3312)
return kTRUE;
2974 if(ip==3322)
return kTRUE;
2975 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
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