10 #include "TLorentzVector.h" 11 #include "Math/SVector.h" 12 #include "Math/SMatrix.h" 14 #include "TPaveText.h" 17 #include "AliAnalysisUtils.h" 18 #include "AliExternalTrackParam.h" 19 #include "AliAODEvent.h" 20 #include "AliAODTrack.h" 21 #include "AliAODVertex.h" 23 #include "AliAODMCParticle.h" 24 #include "AliAODTracklets.h" 25 #include "AliMCEvent.h" 26 #include "AliESDEvent.h" 27 #include "AliESDUtils.h" 28 #include "AliMCEventHandler.h" 30 #include "AliPIDResponse.h" 32 #include "AliAnalysisManager.h" 33 #include "AliInputEventHandler.h" 34 #include "AliVEventHandler.h" 35 #include "AliVVertex.h" 36 #include "AliVParticle.h" 37 #include "AliAODMCHeader.h" 39 #include "AliGenEventHeader.h" 40 #include "AliVertexerTracks.h" 42 #include "THnSparse.h" 43 #include "TObjectTable.h" 55 #include "AliGenPythiaEventHeader.h" 70 fEventVertex(
nullptr),
71 fPidResponse(
nullptr),
75 fUsePIDJetProb(kFALSE),
76 fDoMCCorrection(kFALSE),
77 fDoUnderlyingEventSub(kFALSE),
79 fDoFlavourMatching(kFALSE),
80 fParam_Smear_Sigma(1.),
81 fParam_Smear_Mean(0.),
82 fGlobalVertex(kFALSE),
83 fDoNotCheckIsPhysicalPrimary(kFALSE),
85 fFillCorrelations(kFALSE),
90 fUseSignificance(kTRUE),
93 fXsectionWeightingFactor(1),
94 fProductionNumberPtHard(-1),
99 fNoJetConstituents(0),
100 fTCThresholdPtFixed(0.008),
102 fGraphSigmaData(
nullptr),
103 fGraphSigmaMC(
nullptr),
105 fGraphOmega(
nullptr),
108 fGeant3FlukaProton(
nullptr),
109 fGeant3FlukaAntiProton(
nullptr),
110 fGeant3FlukaLambda(
nullptr),
111 fGeant3FlukaAntiLambda(
nullptr),
112 fGeant3FlukaKMinus(
nullptr),
113 h1DThresholdsFirst(0),
114 h1DThresholdsSecond(0),
115 h1DThresholdsThird(0),
121 h2DProbDistsudsgV0(0),
123 h2DLNProbDistsUnid(0),
124 h2DLNProbDistsudsg(0),
127 h2DLNProbDistsudsgV0(0),
128 h2DLNProbDistscV0(0),
129 h1DProbThresholds(0),
136 fh1dTracksAccepeted(0),
138 fHLundIterative(
nullptr),
139 fhnV0InJetK0s(
nullptr),
140 fhnV0InJetLambda(
nullptr),
141 fhnV0InJetALambda(
nullptr),
142 fh1V0CounterCentK0s(
nullptr),
143 fh1V0CounterCentLambda(
nullptr),
144 fh1V0CounterCentALambda(
nullptr),
145 fh2dKshortMassVsPt(
nullptr),
146 fh2dLamdaMassVsPt(
nullptr),
147 fh2dAnLamdaMassVsPt(
nullptr),
148 h1DV0FalseRec(
nullptr),
149 h1DV0TrueRec(
nullptr),
150 h1DV0TrueDataDef(
nullptr),
151 h1DV0TrueMCDef(
nullptr),
152 fh1dKshortPtMC(
nullptr),
153 fh1dLamdaPtMC(
nullptr),
154 fh1dAnLamdaPtMC(
nullptr),
155 fh2dKshortPtVsJetPtMC(
nullptr),
156 fh2dLamdaPtVsJetPtMC(
nullptr),
157 fh2dAnLamdaPtVsJetPtMC(
nullptr),
160 fESDTrackCut(
nullptr),
162 fV0CandidateArray(
nullptr),
163 fMcEvtSampled(kFALSE),
164 fBackgroundFactorLinus{0},
165 fPUdsgJet(100),fPSJet(100),fPCJet(100),fPBJet(100),
169 fMCglobalDCAxyShift(0.0008),
170 fMCglobalDCASmear(1),
171 fVertexRecalcMinPt(1.0),
176 fIsMixSignalReady_n1(kFALSE),
177 fIsMixSignalReady_n2(kFALSE),
178 fIsMixSignalReady_n3(kFALSE),
179 fIsSameEvent_n1(kFALSE),
180 fIsSameEvent_n2(kFALSE),
181 fIsSameEvent_n3(kFALSE),
182 fUseTreeForCorrelations(kFALSE),
183 fCorrelationCrossCheck(
nullptr),
190 SetMakeGeneralHistograms(kTRUE);
191 SetDefaultAnalysisCuts();
193 SetNeedEmcalGeom(kFALSE);
194 SetOffTrigger(AliVEvent::kINT7);
196 DefineOutput(1, AliEmcalList::Class()) ;
206 fRunSmearing(kFALSE),
207 fUsePIDJetProb(kFALSE),
208 fDoMCCorrection(kFALSE),
209 fDoUnderlyingEventSub(kFALSE),
211 fDoFlavourMatching(kFALSE),
212 fParam_Smear_Sigma(1.),
213 fParam_Smear_Mean(0.),
214 fGlobalVertex(kFALSE),
215 fDoNotCheckIsPhysicalPrimary(kFALSE),
217 fFillCorrelations(kFALSE),
218 fDoLundPlane(kFALSE),
222 fUseSignificance(kTRUE),
225 fXsectionWeightingFactor(1.),
226 fProductionNumberPtHard(-1),
231 fNoJetConstituents(0),
232 fTCThresholdPtFixed(0.008),
241 fGeant3FlukaAntiProton(
nullptr),
243 fGeant3FlukaAntiLambda(
nullptr),
245 h1DThresholdsFirst(0),
246 h1DThresholdsSecond(0),
247 h1DThresholdsThird(0),
253 h2DProbDistsudsgV0(0),
255 h2DLNProbDistsUnid(0),
256 h2DLNProbDistsudsg(0),
259 h2DLNProbDistsudsgV0(0),
260 h2DLNProbDistscV0(0),
261 h1DProbThresholds(0),
268 fh1dTracksAccepeted(0),
275 fh1V0CounterCentLambda(
nullptr),
276 fh1V0CounterCentALambda(
nullptr),
287 fh2dKshortPtVsJetPtMC(
nullptr),
289 fh2dAnLamdaPtVsJetPtMC(
nullptr),
295 fMcEvtSampled(kFALSE),
296 fBackgroundFactorLinus{0},
327 DefineOutput(1, AliEmcalList::Class()) ;
414 printf(
"Run Track Smearing.\n");
416 AliExternalTrackParam et; et.CopyFromVTrack(track);
420 Int_t imc=track->GetLabel();
422 const AliAODMCParticle *mc=
static_cast<AliAODMCParticle*
>(
fMCArray->At(imc));
430 AliExternalTrackParam mct(mcx,mcp,mccv,mcc);
431 const Double_t *parammc=mct.GetParameter();
432 AliVertex vtx(mcx,1.,1);
436 et.PropagateToDCA(&vtx,track->GetBz(),10.);
437 et.Rotate(mct.GetAlpha());
462 Double_t dd0zn =dd0zo *(sd0zo >0. ? (sd0zn /sd0zo ) : 1.);
465 Double_t dd0rpn=dd0rpo*(sd0rpo>0. ? (sd0rpn/sd0rpo) : 1.);
467 Double_t d0rpn =d0rpmc+dd0rpn-dd0mrpn;
469 Double_t dpt1n =dpt1o *(spt1o >0. ? (spt1n /spt1o ) : 1.);
480 et.GetCovarianceXYZPxPyPz(cv);
481 track->SetPosition(x,kFALSE);
482 track->SetP(p,kTRUE);
483 track->SetCovMatrix(cv);
485 UChar_t itsClusterMap = track->GetITSClusterMap();
486 SETBIT(itsClusterMap,7);
487 track->SetITSClusterMap(itsClusterMap);
494 AliAODMCParticle *pMCAOD =
nullptr;
495 if(track->GetLabel()< 0)
return pdg;
496 pMCAOD =
static_cast<AliAODMCParticle*
>(
fMCArray->At(track->GetLabel()));
497 if(!(pMCAOD))
return pdg;
498 pdg = pMCAOD->PdgCode();
500 AliAODMCParticle *pMCAODmother =
nullptr;
501 pMCAODmother =
static_cast<AliAODMCParticle*
>(
fMCArray->At(pMCAOD->GetMother()));
502 if(!(pMCAOD))
return pdg;
503 motherpdg =pMCAODmother->PdgCode();
513 FillHist(
"fh2dTracksImpParZ",dca[1],track->Pt(),1);
540 global[0] = local[0]* TMath::Sin(alpha) + local[1] * TMath::Cos(alpha);
541 global[1] = local[0]* TMath::Cos(alpha) + local[1] * TMath::Sin(-alpha);
542 global[2] = local[2];
565 FillHist(
"fh1dJetRecEtaPhiAccepted",eta,phi, 1);
566 FillHist(
"fh1dJetRecPtAccepted",jetpt, 1);
569 if(jetflavour==0)
FillHist(
"fh1dJetRecPtUnidentified",jetpt, 1);
570 else if(jetflavour==1)
FillHist(
"fh1dJetRecPtudsg", jetpt, 1);
571 else if(jetflavour==2)
FillHist(
"fh1dJetRecPtc", jetpt, 1);
572 else if(jetflavour==3)
FillHist(
"fh1dJetRecPtb", jetpt, 1);
573 else if(jetflavour==4)
FillHist(
"fh1dJetRecPts", jetpt, 1);
591 for (
Int_t iN = 1 ; iN <=3 ;++iN){
592 if(!nTracks[iN])
continue;
593 FillHist(Form(
"fh1dJetRecPt_n_%i_%s_Accepted",iN,
"all"),jetpt,1);
595 if(jetflavour==0)
continue;
601 const char * stype [4] = {
"fh2dJetSignedImpParXY",
"fh2dJetSignedImpParXYSignificance",
"fh2dJetSignedImpParXYZ",
"fh2dJetSignedImpParXYZSignificance"};
602 const char * subord [3] = {
"First",
"Second",
"Third"};
604 for (
Int_t iType = 0 ;iType <2 ;++iType){
605 TString hname = Form(
"%s%s",stype[iType],subord[iN]);
606 FillHist(hname.Data(),jetpt,params[iType],1);
609 FillHist(hnameflav.Data(),jetpt,params[iType],1);
616 FillHist(
"fh1dTracksIPvsPt_V0JetTracks", pt, IP,1);
619 FillHist(
"fh1dTracksIPvsPt_V0inV0Jet", pt, IP,1);
624 FillHist(
"fh1dTracksIPvsPt_B", pt, IP,1);
627 FillHist(
"fh1dTracksIPvsPt_V0inBJet", pt, IP,1);
635 printf(
"Filling track type resolution hists");
759 printf(
"Correct for Underlying Event.\n");
767 printf(
"Correct for Underlying Event.\n");
770 FillHist(
"fh2dJetGenPtVsJetRecPt",genpt,jetpt,1);
783 AliDebugStream(1) <<
"Using custom MC outlier rejection" << std::endl;
787 printf(
"No particle container found\n");
792 auto jetiter = partjets->
accepted();
793 auto max = std::max_element(jetiter.begin(), jetiter.end(), [](
const AliEmcalJet *lhs,
const AliEmcalJet *rhs ) {
return lhs->
Pt() < rhs->Pt(); });
794 if(max != jetiter.end()) {
796 AliDebugStream(1) <<
"Found max jet with pt " << (*max)->Pt() <<
" GeV/c" << std::endl;
826 Double_t dMassPDGK0s = TDatabasePDG::Instance()->GetParticle(kK0Short)->Mass();
827 Double_t dMassPDGLambda = TDatabasePDG::Instance()->GetParticle(kLambda0)->Mass();
828 sV0->
fPt = TMath::Sqrt(v0->Pt2V0());
831 v0->GetSecondaryVtx(dSecVtxPos);
835 for(
Int_t iPos = 0; iPos < 3; iPos++)
836 dDecayPath[iPos] = dSecVtxPos[iPos] - dPrimVtxPos[iPos];
838 Double_t dDecLen2D = TMath::Sqrt(dDecayPath[0] * dDecayPath[0] + dDecayPath[1] * dDecayPath[1]);
841 const AliAODTrack* trackPos = (AliAODTrack*)v0->GetDaughter(0);
842 const AliAODTrack* trackNeg = (AliAODTrack*)v0->GetDaughter(1);
843 if(!trackPos || !trackPos){
848 sV0->
bOnFly=v0->GetOnFlyStatus();
851 sV0->
fDecayRadius=TMath::Sqrt(dSecVtxPos[0] * dSecVtxPos[0] + dSecVtxPos[1] * dSecVtxPos[1]);
855 sV0->
fRapK0=v0->RapK0Short();
857 sV0->
fDecayLength3D=TMath::Sqrt(dDecayPath[0] * dDecayPath[0] + dDecayPath[1] * dDecayPath[1] + dDecayPath[2] * dDecayPath[2]);
858 sV0->
fDecayLength2D=TMath::Sqrt(dDecayPath[0] * dDecayPath[0] + dDecayPath[1] * dDecayPath[1]);
861 sV0->
fMassK0=v0->MassK0Short();
871 const AliAODTrack* vTrack =0x0;
872 const AliAODVertex* prodVtxDaughter =0x0;
874 vTrack =(AliAODTrack*)v0->GetDaughter(0);
877 vTrack =(AliAODTrack*)v0->GetDaughter(1);
879 if(!vTrack) AliError(
" There should be daughter tracks but GetV0DaughProperties does not get them!\n");
880 prodVtxDaughter = (AliAODVertex*)(vTrack->GetProdVertex());
881 Int_t cTypeVtxProd = prodVtxDaughter->GetType();
883 sTrack->
fPt= vTrack->Pt();
884 sTrack->
fEta=vTrack->Eta();
885 sTrack->
iCharge=vTrack->Charge();
886 sTrack->
iCrossedTPC=vTrack->GetTPCClusterInfo(2, 1);
889 sTrack->
fDCAtoPV=TMath::Abs(v0->DcaPosToPrimVertex());
893 sTrack->
fDCAtoPV=TMath::Abs(v0->DcaNegToPrimVertex());
896 sTrack->
bTPCRefitOn=vTrack->IsOn(AliAODTrack::kTPCrefit);
897 sTrack->
bIsKink=(cTypeVtxProd == AliAODVertex::kKink);
902 if(!part || !jet) AliError(Form(
"Particle or Jet missing: part=%p, jet=%p\n", part,jet));
904 TVector3 vecMom2(jet->
Px(), jet->
Py(), jet->
Pz());
905 TVector3 vecMom1(part->Px(), part->Py(), part->Pz());
906 Double_t dR = vecMom2.DeltaR(vecMom1);
907 if(dR <= dRMax)
return kTRUE;
927 AliAODMCHeader* headerMC = (AliAODMCHeader*)fAODIn->FindListObject(AliAODMCHeader::StdBranchName());
930 AliError(
"No MC header found!");
933 Double_t dPrimVtxMCX = headerMC->GetVtxX();
934 Double_t dPrimVtxMCY = headerMC->GetVtxY();
935 Double_t dPrimVtxMCZ = headerMC->GetVtxZ();
937 AliAODMCParticle *pAOD = 0;
942 pAOD =
dynamic_cast<AliAODMCParticle*
>(
fMCArray->At(i));
947 Double_t dy = dPrimVtxMCY - pAOD->Yv();
948 Double_t dz = dPrimVtxMCZ - pAOD->Zv();
949 Double_t dDistPrimary = TMath::Sqrt(dx * dx + dy * dy + dz * dz);
950 Bool_t bV0MCIsPrimaryDist = (dDistPrimary < 0.01);
951 if(!bV0MCIsPrimaryDist)
continue;
954 Int_t id = pAOD->GetPdgCode();
955 Bool_t bV0 = ((
id==3122) || (
id==-3122) || (
id==310));
956 if (!bV0) { pAOD=0;
continue; }
959 int itrackPos = pAOD->GetDaughterLabel(0);
960 int itrackNeg = pAOD->GetDaughterLabel(1);
962 AliAODMCParticle* trackPos=(AliAODMCParticle*)
GetMCTrack(itrackPos);
963 AliAODMCParticle* trackNeg=(AliAODMCParticle*)
GetMCTrack(itrackNeg);
965 if((!trackPos)||(!trackNeg))
continue;
973 if (pAOD->Pt() <0.15)
continue;
982 if(!
jetcongen) AliError(
"No MC jet container available!\n");
989 if(fJetPt < 5.)
continue;
991 if(!bIsInCone)
continue;
1017 if(!track)
return kFALSE;
1018 AliAODv0* v0aod = 0x0;
1025 const AliAODTrack* trackPos =0x0;
1026 const AliAODTrack* trackNeg =0x0;
1027 AliAODMCParticle *v0MC=0x0;
1028 AliAODMCParticle *v0Daugh=0x0;
1029 int tracklabel=track->GetLabel();
1030 int posdaughlabel=-99;
1031 int negdaughlabel=-99;
1032 int iMCLabelMother=-99;
1033 int iMCPdgMother=-99;
1034 int iMCPdgDaughter=-99;
1043 trackPos=(AliAODTrack*) (AliAODTrack*)v0aod->GetDaughter(0);
1044 trackNeg=(AliAODTrack*)(AliAODTrack*)v0aod->GetDaughter(1);
1045 posid = trackPos->GetID();
1046 negid = trackNeg->GetID();
1047 trackid = track->GetID();
1051 posdaughlabel=trackPos->GetLabel();
1052 negdaughlabel=trackNeg->GetLabel();
1054 if((tracklabel==posdaughlabel)||(tracklabel==negdaughlabel)){
1057 if((tracklabel == posdaughlabel)&&(trackid!=posid) ) {
1058 AliError(Form(
"Mismatch of trackid=%i and posdaughter id=%i! (tracklabel=%i, daughlabel=%i) Are you using hybrid tracks?",trackid, posid, tracklabel, posdaughlabel));
1060 if((tracklabel == negdaughlabel)&&(trackid!=negid)){
1061 AliError(Form(
"Mismatch of trackid=%i and negdaughter id=%i! (tracklabel=%i, daughlabel=%i) Are you using hybrid tracks?",trackid, negid, tracklabel, negdaughlabel));
1065 if(posid == trackid || negid == trackid) {
1071 if(tracklabel>(
fMCArray->GetEntriesFast())||(tracklabel<0))
return 0;
1072 v0Daugh=
dynamic_cast<AliAODMCParticle*
>(
fMCArray->At(tracklabel));
1073 if(!v0Daugh)
return 0;
1074 iMCLabelMother=v0Daugh->GetMother();
1075 v0MC=
dynamic_cast<AliAODMCParticle*
>(
fMCArray->At(iMCLabelMother));
1079 iMCPdgMother=v0MC->GetPdgCode();
1080 iMCPdgDaughter=v0Daugh->GetPdgCode();
1086 if(((iMCPdgMother==310)||(iMCPdgMother==3122)||(iMCPdgMother==-3122))&&(iV0Tag!=
V0Rec)){
1090 if(((iMCPdgMother==310)||(iMCPdgMother==3122)||(iMCPdgMother==-3122))&&(iV0Tag==
V0Rec)){
1100 printf(
"----------------- V0 -----------------\n");
1101 printf(
"bOnFly=%i, bDaughsMissing=%i\n", bOnFly, bDaughsMissing);
1102 printf(
"fDCAV0DaughvsDaugh=%f, fPA=%f, fDecayRadius=%f, fLifetimeK0=%f, fLifetimeLambda=%f\n", fDCAV0DaughvsDaugh,fPA,fDecayRadius,fLifetimeK0,fLifetimeLambda);
1103 printf(
"fEta=%f, fPt=%f, fRapK0=%f, fRapLambda=%f, fDecayLength3D=%f, fDecayLength2D=%f\n",fEta, fPt, fRapK0, fRapLambda, fDecayLength3D, fDecayLength3D);
1104 printf(
"fArmenterosAlpha=%f, fArmenterosPt=%f, fMassK0=%f, fMassLambda=%f, fMassAntilambda=%f\n",fArmenterosAlpha,fArmenterosPt,fMassK0,fMassLambda,fMassAntilambda);
1105 printf(
"fSigmaPosPion=%f fSigmaPosProton=%f fSigmaNegPion=%f fSigmaNegProton=%f\n", fSigmaPosPion,fSigmaPosProton,fSigmaNegPion,fSigmaNegProton);
1106 printf(
"bIsCandidateK0s=%i ,bIsCandidateLambda=%i, bIsCandidateALambda=%i, bIsInPeakK0s=%i bIsInPeakLambda=%i bIsInPeakALambda=%i\n", bIsCandidateK0s,bIsCandidateLambda,bIsCandidateALambda,bIsInPeakK0s,bIsInPeakLambda,bIsInPeakALambda);
1107 printf(
"bIsInConeJet=%i, bIsInConePerp=%i, bIsInConeRnd=%i, bIsInConeMed=%i, bIsOutsideCones=%i\n",bIsInConeJet,bIsInConePerp,bIsInConeRnd,bIsInConeMed,bIsOutsideCones);
1108 printf(
"-----------------------------------------\n");
1112 printf(
"----------------- V0 Daugh -----------------\n");
1113 printf(
"fPT=%f, fEta=%f, iCharge=%i\n", fPt, fEta, iCharge);
1114 printf(
"iCrossedTPC=%i iNoTPCCluster=%i fDCAtoPV=%f bTPCRefitOn=%i bIsKink=%i\n", iCrossedTPC, iNoTPCCluster, fDCAtoPV, bTPCRefitOn, bIsKink);
1115 printf(
"-----------------------------------------\n");
1140 if(!
fMCArray) { AliError(
"No fMCArray");
return NULL;}
1143 if((iLabel < 0) || (iLabel >= nStack)){
1148 AliAODMCParticle *mctrack =
dynamic_cast<AliAODMCParticle *
>(
fMCArray->At(iLabel));
1154 Int_t iPdgCodePion = 211;
1155 Int_t iPdgCodeProton = 2212;
1156 Int_t iPdgCodeK0s = 310;
1157 Int_t iPdgCodeLambda = 3122;
1159 AliAODMCHeader* headerMC = (AliAODMCHeader*)fAODIn->FindListObject(AliAODMCHeader::StdBranchName());
1160 Double_t dPrimVtxMCX = 0., dPrimVtxMCY = 0., dPrimVtxMCZ = 0.;
1163 AliError(
"No MC header found!");
1166 dPrimVtxMCX = headerMC->GetVtxX();
1167 dPrimVtxMCY = headerMC->GetVtxY();
1168 dPrimVtxMCZ = headerMC->GetVtxZ();
1171 if(!(bIsCandidateK0s) && !(bIsCandidateLambda) && !(bIsCandidateALambda))
return 0;
1173 const AliAODTrack* postrack = (AliAODTrack*)v0->GetDaughter(0);
1174 const AliAODTrack* negtrack = (AliAODTrack*)v0->GetDaughter(1);
1175 Int_t iposLabel = postrack->GetLabel();
1176 Int_t inegLabel = negtrack->GetLabel();
1177 AliAODMCParticle* particleMCDaughterPos=(AliAODMCParticle*)
GetMCTrack(iposLabel);
1178 AliAODMCParticle* particleMCDaughterNeg=(AliAODMCParticle*)
GetMCTrack(inegLabel);
1179 if(!particleMCDaughterNeg || !particleMCDaughterPos)
return 0;
1181 Int_t iPdgCodeDaughterPos = particleMCDaughterPos->GetPdgCode();
1182 Int_t iPdgCodeDaughterNeg = particleMCDaughterNeg->GetPdgCode();
1183 Int_t iIndexMotherPos = particleMCDaughterPos->GetMother();
1184 Int_t iIndexMotherNeg = particleMCDaughterNeg->GetMother();
1185 Double_t fPosEta=particleMCDaughterPos->Eta();
1186 Double_t fPosPt=particleMCDaughterPos->Pt();
1187 Double_t fNegEta=particleMCDaughterNeg->Eta();
1188 Double_t fNegPt=particleMCDaughterNeg->Pt();
1190 if((iIndexMotherNeg < 0) || (iIndexMotherNeg >= iNTracksMC) || (iIndexMotherPos < 0) || (iIndexMotherPos >= iNTracksMC)){
1194 AliAODMCParticle* particleMCMotherPos = (AliAODMCParticle*)
fMCArray->At(iIndexMotherNeg);
1195 AliAODMCParticle* particleMCMotherNeg = (AliAODMCParticle*)
fMCArray->At(iIndexMotherPos);
1196 int posidmother=particleMCMotherPos->GetPdgCode();
1197 int negidmother=particleMCMotherNeg->GetPdgCode();
1210 if((posidmother != iPdgCodeK0s) && (TMath::Abs(posidmother) != iPdgCodeLambda)&&(negidmother != iPdgCodeK0s) && (TMath::Abs(negidmother) != iPdgCodeLambda))
return 0;
1212 if(iIndexMotherNeg != iIndexMotherPos){
1220 AliAODMCParticle* particleMCMother = (AliAODMCParticle*)
fMCArray->At(iIndexMotherPos);
1221 if(!particleMCMother)
return 0;
1223 Int_t iPdgCodeMother = particleMCMother->GetPdgCode();
1224 Double_t dPtV0Gen = particleMCMother->Pt();
1225 Double_t dRapV0Gen = particleMCMother->Y();
1229 if(dPtV0Gen <0.15)
return 0;
1234 if((iPdgCodeMother != iPdgCodeK0s) && (TMath::Abs(iPdgCodeMother) != iPdgCodeLambda))
return 0;
1237 Bool_t bV0MCIsK0s = ((iPdgCodeMother == iPdgCodeK0s) && (iPdgCodeDaughterPos == +iPdgCodePion) && (iPdgCodeDaughterNeg == -iPdgCodePion));
1238 Bool_t bV0MCIsLambda = ((iPdgCodeMother == +iPdgCodeLambda) && (iPdgCodeDaughterPos == +iPdgCodeProton) && (iPdgCodeDaughterNeg == -iPdgCodePion));
1239 Bool_t bV0MCIsALambda = ((iPdgCodeMother == -iPdgCodeLambda) && (iPdgCodeDaughterPos == +iPdgCodePion) && (iPdgCodeDaughterNeg == -iPdgCodeProton));
1242 Double_t dx = dPrimVtxMCX - particleMCMother->Xv();
1243 Double_t dy = dPrimVtxMCY - particleMCMother->Yv();
1244 Double_t dz = dPrimVtxMCZ - particleMCMother->Zv();
1245 Double_t dDistPrimary = TMath::Sqrt(dx * dx + dy * dy + dz * dz);
1246 Bool_t bV0MCIsPrimaryDist = (dDistPrimary < 0.01);
1249 if(bIsCandidateK0s){
1250 if(bV0MCIsK0s && bV0MCIsPrimaryDist){
1257 if(bIsCandidateLambda){
1258 if(bV0MCIsLambda && bV0MCIsPrimaryDist){
1266 if(bIsCandidateALambda){
1267 if(bV0MCIsALambda && bV0MCIsPrimaryDist){
1287 Int_t iNV0s = fAODIn->GetNumberOfV0s();
1291 for(
Int_t iV0 = 0; iV0 < iNV0s; iV0++){
1292 v0 = fAODIn->GetV0(iV0);
1304 if(hasNoDaughters)
continue;
1310 Int_t iCutIndex = 0;
1320 if(sV0->
bOnFly)
continue;
1327 if(sNegDaugh->
iCharge != -1)
continue;
1328 if(sPosDaugh->
iCharge != 1)
continue;
1336 if(sPosDaugh->
bIsKink)
continue;
1337 if(sNegDaugh->
bIsKink)
continue;
1497 Double_t dMassPDGK0s = TDatabasePDG::Instance()->GetParticle(kK0Short)->Mass();
1498 Double_t dMassPDGLambda = TDatabasePDG::Instance()->GetParticle(kLambda0)->Mass();
1500 if(TMath::Abs(sV0->
fMassK0 - dMassPDGK0s) < dMassPeakWindowK0s)
1502 if(TMath::Abs(sV0->
fMassLambda - dMassPDGLambda) < dMassPeakWindowLambda)
1504 if(TMath::Abs(sV0->
fMassAntilambda - dMassPDGLambda) < dMassPeakWindowLambda)
1533 if(iVetoDec==1) fIsMCTrueK0=1.;
1534 if(iVetoDec==2) fIsMCTrueLambda=1.;
1535 if(iVetoDec==3) fIsMCTrueALambda=1.;
1541 if(!
jetconrec)printf(
"No jet container with reconstructed jets!\n");
1544 fJetPt= jetrec->
Pt();
1548 if(fJetPt < 5.)
continue;
1579 new((*fV0CandidateArray)[nBins]) AliAODv0(*v0);
1597 fEventVertex =
dynamic_cast<AliAODVertex*
>(ev->GetPrimaryVertex());
1605 Bool_t HasImpactParameter = kFALSE;
1607 Double_t cov[3] = {-99999,-99999,-99999};
1609 AliVTrack* trackV = NULL;
1610 fIsEsd = (InputEvent()->IsA()==AliESDEvent::Class())? kTRUE : kFALSE;
1614 fMCEvent =
dynamic_cast<AliMCEvent*
>(MCEvent()) ;
1616 AliError(
"Could not retrieve MC particles! Returning");
1621 fMCArray =
static_cast<TClonesArray*
>(InputEvent()->FindListObject(AliAODMCParticle::StdBranchName()));
1623 AliError(
"Could not retrieve AOD MC particles! Returning");
1639 IncHist(
"fh1dEventsAcceptedInRun",1);
1643 FillHist(
"fh1dNoParticlesPerEvent",InputEvent()->GetNumberOfTracks(),1);
1647 for(
long itrack= 0; itrack<InputEvent()->GetNumberOfTracks();++itrack)
1649 trackV =
static_cast<AliVTrack*
>(InputEvent()->GetTrack(itrack));
1651 AliInfo(
"Could not retrieve Track");
1654 IncHist(
"fh1dTracksAccepeted",1);
1656 IncHist(
"fh1dTracksAccepeted",3);
1660 IncHist(
"fh1dTracksAccepeted",2);
1661 FillHist(
"fh2dAcceptedTracksEtaPhi",trackV->Eta(),trackV->Phi(),1);
1662 TrackWeight =1;dca[0]=-9999;dca[1]=-9999;cov[0]=-9999;cov[1]=-9999;cov[2]=-9999;
1663 HasImpactParameter =kFALSE;
1670 if(!HasImpactParameter)
continue;
1691 if (!jetgen)
continue;
1709 if(!jetrec)
continue;
1710 jetpt = jetrec->
Pt();
1718 Bool_t is_udgjet = kFALSE;
1720 jetmatched =
nullptr;
1734 std::vector<SJetIpPati> sImpParXY,sImpParXYZ,sImpParXYSig,sImpParXYZSig;
1735 AliVParticle *vp=0x0;
1736 int NJetParticles=0;
1739 Double_t cov[3] = {-99999,-99999,-99999};
1749 AliError(
"AliVParticle associated to constituent not found");
1752 AliVTrack *vtrack =
dynamic_cast<AliVTrack*
>(vp);
1754 AliError(Form(
"Could not receive track%d\n", i));
1757 AliAODTrack *trackV =
dynamic_cast<AliAODTrack*
>(vtrack);
1759 if (!trackV || !jetrec)
continue;
1772 Int_t corridx=-1;
double ppt;
1774 dca[0]=fabs(dca[0]);
1779 FillHist(
"fh2dJetSignedImpParXY" ,jetpt,cursImParXY,TrackWeight);
1780 FillHist(
"fh2dJetSignedImpParXYSignificance",jetpt,cursImParXYSig,TrackWeight);
1782 const char * subtype [5] = {
"Unidentified",
"udsg",
"c",
"b",
"s"};
1784 FillHist(Form(
"fh2dJetSignedImpParXY%s",subtype[jetflavour]),jetpt,cursImParXY,TrackWeight);
1785 FillHist(Form(
"fh2dJetSignedImpParXYSignificance%s",subtype[jetflavour]),jetpt,cursImParXYSig,TrackWeight);
1787 double fTrackPt=trackV->Pt();
1790 if(cursImParXYSig>fIPValue){
1804 SJetIpPati a(cursImParXY, TrackWeight,isV0,kFALSE,corridx,trackV->Pt()); sImpParXY.push_back(a);
1805 SJetIpPati b(cursImParXYZ, TrackWeight,isV0,kFALSE,corridx,trackV->Pt()); sImpParXYZ.push_back(b);
1806 SJetIpPati c(cursImParXYSig, TrackWeight,isV0,kFALSE,corridx,trackV->Pt());sImpParXYSig.push_back(
c);
1807 SJetIpPati d(cursImParXYZSig, TrackWeight,isV0,kFALSE,corridx,trackV->Pt());sImpParXYZSig.push_back(d);
1813 FillHist(
"fh1dParticlesPerJet",NJetParticles,1);
1816 bool hasIPs[4] ={kFALSE,kFALSE,kFALSE, kFALSE};
1817 Double_t ipval[4] = {-9999.,-9999.,-9999., -9999.};
1818 Double_t ipvalsig[4] = {-9999.,-9999.,-9999., -9999.};
1825 if((
int)sImpParXYSig.size()>0) hasIPs[0]=kTRUE;
1826 if((
int)sImpParXYSig.size()>1) hasIPs[1]=kTRUE;
1827 if((
int)sImpParXYSig.size()>2) hasIPs[2]=kTRUE;
1828 if((
int)sImpParXYSig.size()>3) hasIPs[3]=kTRUE;
1831 ipvalsig[0] =sImpParXYSig.at(0).first;
1832 ipval[0] =sImpParXY.at(0).first;
1836 ipvalsig[1] =sImpParXYSig.at(1).first;
1837 ipval[1] =sImpParXY.at(1).first;
1841 ipvalsig[2] =sImpParXYSig.at(2).first;
1842 ipval[2] =sImpParXY.at(2).first;
1846 ipvalsig[3] =sImpParXYSig.at(3).first;
1847 ipval[3] =sImpParXY.at(3).first;
1859 bool isV0Jet=kFALSE;
1860 if((hasIPs[0])&&(!
fIsPythia)&&(sImpParXYSig[0].is_V0==
V0Rec))isV0Jet=kTRUE;
1865 for(
long unsigned iTrack=0;iTrack<sImpParXYSig.size();iTrack++){
1866 FillTrackIPvsPt(sImpParXYSig[iTrack].is_V0,sImpParXYSig[iTrack].trackpt,sImpParXYSig[iTrack].first,jetflavour);
1873 for(
int iN=0;iN<3;iN++){
1874 if(!hasIPs[iN])
continue;
1876 Double_t params [4] ={sImpParXY.at(iN).first,sImpParXYSig.at(iN).first,sImpParXYZ.at(iN).first,sImpParXYZSig.at(iN).first};
1886 kTagDec[iThresh]=
new bool[6];
1887 for(
int iType=0;iType<6;iType++){
1888 kTagDec[iThresh][iType]=0;
1921 if(sImpParXY.size()!=0){
1922 FillHist(
"fh2dNoAcceptedTracksvsJetArea",(
int)sImpParXY.size(),jetrec->
Area(),1);
1925 sImpParXYSig.clear();
1927 sImpParXYZSig.clear();
1930 delete kTagDec[iThresh];
1941 AliExternalTrackParam etp; etp.CopyFromVTrack(track);
1942 return etp.GetAlpha();
1947 AliExternalTrackParam etp; etp.CopyFromVTrack(track);
1952 AliVEvent * eev = (AliVEvent*)InputEvent();
1953 const AliVVertex *vtxESDSkip =(
const AliVVertex *) (InputEvent()->GetPrimaryVertex()) ;
1954 if(!vtxESDSkip)
return -9999;
1955 if(!(etp.PropagateToDCA(vtxESDSkip, eev->GetMagneticField(), kBeampiperadius, dv, dcov)))
return -9999.;
1963 AliVEvent * eev = (AliVEvent*)InputEvent();
1965 AliExternalTrackParam etp; etp.CopyFromVTrack(track);
1967 return etp.GetC(eev->GetMagneticField());
1985 void AliAnalysisTaskHFJetIPQA::SetUseMonteCarloWeighingLinus(TH1F *Pi0, TH1F *Eta, TH1F *EtaP, TH1F *Rho, TH1F *Phi, TH1F *Omega, TH1F *K0s, TH1F *Lambda, TH1F *ChargedPi, TH1F *ChargedKaon, TH1F *Proton, TH1F *D0, TH1F *DPlus, TH1F *DStarPlus, TH1F *DSPlus, TH1F *LambdaC, TH1F *BPlus, TH1F *B0, TH1F *LambdaB, TH1F *BStarPlus)
1987 for(
Int_t i =1 ; i< Pi0->GetNbinsX()+1;++i){
2031 TFile * jetProbfile=TFile::Open(filename,
"READ");
2033 int bins_low[5] = {0,1,2,4,6};
2034 int bins_high[5] = {1,2,4,6,255};
2035 int its_hits[4] = {6,5,4,3};
2037 const char * type[5] ={
"Electron",
"Pion",
"Kaon",
"Proton",
""};
2038 for (
int k=0;k<5;++k){
2039 for (
int i=0;i<4;++i){
2040 for (
int j=0;j<5;++j){
2042 if(k==4) fResulFkt = (
TGraph*)jetProbfile->Get(Form(
"fResulFkt_ITS_%i_PT_%i_to_%i",its_hits[i],bins_low[j],bins_high[j]));
2043 else fResulFkt = (
TGraph*)jetProbfile->Get(Form(
"fResulFkt_ITS_%i_PT_%i_to_%i_%s",its_hits[i],bins_low[j],bins_high[j],type[k]));
2049 Printf(
"Added %i %i %i -> [%i][%i][%i]->[%i]",j,k,i,j,i,k,20*k + 4*j +i );
2055 if(jetProbfile)jetProbfile->Close();
2080 if (bn[0] && bn[1]) {
2081 FillHist(
"fh2dInclusiveCorrelationN1N2",v[0],v[1]);
2082 if(jetpt>10 && jetpt <20)
FillHist(
"fh2dGreater10_20GeVCorrelationN1N2",v[0],v[1]);
2083 if(jetpt>20 && jetpt <30)
FillHist(
"fh2dGreater20_30GeVCorrelationN1N2",v[0],v[1]);
2084 if(jetpt>30 && jetpt <100)
FillHist(
"fh2dGreater30_100GeVCorrelationN1N2",v[0],v[1]);
2087 if (bn[0] && bn[2]) {
2088 FillHist(
"fh2dInclusiveCorrelationN1N3",v[1],v[2]);
2089 if(jetpt>10 && jetpt <20)
FillHist(
"fh2dGreater10_20GeVCorrelationN1N3",v[0],v[2]);
2090 if(jetpt>20 && jetpt <30)
FillHist(
"fh2dGreater20_30GeVCorrelationN1N3",v[0],v[2]);
2091 if(jetpt>30 && jetpt <100)
FillHist(
"fh2dGreater30_100GeVCorrelationN1N3",v[0],v[2]);
2092 FillHist(
"fh2dInclusiveCorrelationN2N3",v[0],v[2]);
2093 if(jetpt>10 && jetpt <20)
FillHist(
"fh2dGreater10_20GeVCorrelationN2N3",v[1],v[2]);
2094 if(jetpt>20 && jetpt <30)
FillHist(
"fh2dGreater20_30GeVCorrelationN2N3",v[1],v[2]);
2095 if(jetpt>30 && jetpt <100)
FillHist(
"fh2dGreater30_100GeVCorrelationN2N3",v[1],v[2]);
2098 bool n3wasReady =
false;
2099 double storedn3=-999;
2105 FillHist(
"fh2dInclusiveCorrelationN1N2mix",v[0],n2);
2106 if(jetpt>10 && jetpt <20)
FillHist(
"fh2dGreater10_20GeVCorrelationN1N2mix",v[0],n2);
2107 if(jetpt>20 && jetpt <30)
FillHist(
"fh2dGreater20_30GeVCorrelationN1N2mix",v[0],n2);
2108 if(jetpt>30 && jetpt <100)
FillHist(
"fh2dGreater30_100GeVCorrelationN1N2mix",v[0],n2);
2116 FillHist(
"fh2dInclusiveCorrelationN1N3mix",v[0],n3);
2117 if(jetpt>10 && jetpt <20)
FillHist(
"fh2dGreater10_20GeVCorrelationN1N3mix",v[0],n3);
2118 if(jetpt>20 && jetpt <30)
FillHist(
"fh2dGreater20_30GeVCorrelationN1N3mix",v[0],n3);
2119 if(jetpt>30 && jetpt <100)
FillHist(
"fh2dGreater30_100GeVCorrelationN1N3mix",v[0],n3);
2128 FillHist(
"fh2dInclusiveCorrelationN2N3mix",v[1],n3);
2129 if(jetpt>10 && jetpt <20)
FillHist(
"fh2dGreater10_20GeVCorrelationN2N3mix",v[1],n3);
2130 if(jetpt>20 && jetpt <30)
FillHist(
"fh2dGreater20_30GeVCorrelationN2N3mix",v[1],n3);
2131 if(jetpt>30 && jetpt <100)
FillHist(
"fh2dGreater30_100GeVCorrelationN2N3mix",v[1],n3);
2141 Printf(
"Analysing Jets with Radius: R=%f\n",
fJetRadius);
2156 "p_{T,Track}^{min}",
2157 "p_{T,TrackMC}^{min}",
2177 "DCA(Daugh1<->Daugh2)",
2192 TString sTemp[7]={
"Unidentified",
"udsg",
"c",
"b",
"udsgV0",
"cV0",
""};
2193 for(
int iS=0;iS<7;iS++){
2209 if(!mgr) AliError(
"Analysis manager not found!");
2210 AliVEventHandler *evhand = mgr->GetInputEventHandler();
2211 if (!evhand) AliError(
"Event handler not found!");
2212 if (evhand->InheritsFrom(
"AliESDInputHandler"))
fIsEsd = kTRUE;
2224 AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
2228 AliFatal(
"NULL PID response");
2286 fHistManager.
CreateTH1(
"fh1dNoParticlesPerEvent",
"fh1dNoParticlesvsEvent;#;No Particles/Event",5000, 0, 5000,
"s");
2288 fHistManager.
CreateTH1(
"fh1dEventsAcceptedInRun",
"fh1dEventsAcceptedInRun;Events Accepted;count",1,0,1,
"s");
2291 fHistManager.
CreateTH2(
"fh1dJetRecEtaPhiAccepted",
"detector level jet;#eta;phi",1,-0.5,0.5,1,0.,TMath::TwoPi(),
"s");
2292 fHistManager.
CreateTH2(
"fh2dAcceptedTracksEtaPhi",
"accepted tracks;#eta;phi",200,-0.9,0.9,200,0.,TMath::TwoPi(),
"s");
2294 fHistManager.
CreateTH1(
"fh1dJetRecPtAccepted",
"accepted detector level jets;pt (GeV/c); count",500,0,250,
"s");
2297 fHistManager.
CreateTH2(
"fh2dNoAcceptedTracksvsJetArea",
"fh2dNoAcceptedTracksvsJetArea;No Accepted Tracks;JetArea",20,0,20,100,0,1);
2308 fHistManager.
CreateTH1(
"fh1dJetRecPtUnidentified",
"detector level jets;pt (GeV/c); count",500,0,250,
"s");
2319 fh1dCuts->GetXaxis()->LabelsOption(
"v");
2321 for(
Int_t iBin = 0; iBin < 25; iBin++){
2324 fh1dCutudg->GetXaxis()->SetBinLabel(iBin + 1, BJetCuts[iBin].
Data());
2325 fh1dCutb->GetXaxis()->SetBinLabel(iBin + 1, BJetCuts[iBin].
Data());
2326 fh1dCutc->GetXaxis()->SetBinLabel(iBin + 1, BJetCuts[iBin].
Data());
2327 fh1dCuts->GetXaxis()->SetBinLabel(iBin + 1, BJetCuts[iBin].
Data());
2333 const Int_t dimSpec = 6;
2334 const Int_t nBinsSpec[6] = {50,100,100,20,100,2};
2335 const Double_t lowBinSpec[6] = {0.,-10,0,0,0,0};
2336 const Double_t hiBinSpec[6] = {5.,10.,100,20,100,2};
2338 "LundIterativePlot [log(1/theta),log(z*theta),pTjet,algo]",
2339 dimSpec,nBinsSpec,lowBinSpec,hiBinSpec);
2345 const char * tagtype[6] = {
"Full",
"Single1st",
"Single2nd",
"Single3rd",
"Double",
"Triple"};
2348 for(
int iType=0;iType<6;iType++){
2390 for(
int iType=0;iType<6;iType++){
2410 for(
int iType=0;iType<6;iType++){
2427 fHistManager.
CreateTH2(
"fh2dTracksImpParXY",
"radial imp. parameter ;impact parameter xy (cm);a.u.",2000,lowIPxy,highIPxy,500,0,100.,
"s");
2428 fHistManager.
CreateTH2(
"fh2dTracksImpParXYZ",
"XYZ imp. parameter ;impact parameter xy (cm);a.u.",2000,-1,1,500,0,100.,
"s");
2430 fHistManager.
CreateTH2(
"fh2dTracksImpParZ",
"z imp. parameter ;impact parameter xy (cm);a.u.",2000,lowIPxy,highIPxy,500,0,10.,
"s");
2431 fHistManager.
CreateTH2(
"fh2dTracksImpParXYSignificance",
"radial imp. parameter sig;impact parameter xy (cm);a.u.",2000,-30,30,500,0,100.,
"s");
2432 fHistManager.
CreateTH2(
"fh2dTracksImpParZSignificance",
"z imp. parameter ;impact parameter xy (cm);a.u.",2000,-30,30,500,0,100.,
"s");
2433 fHistManager.
CreateTH1(
"fh1dTracksImpParXY",
"2d imp. parameter ;impact parameter 2d (cm);a.u.",400,-0.2,0.2,
"s");
2434 fHistManager.
CreateTH1(
"fh1dTracksImpParXYZ",
"3d imp. parameter ;impact parameter 3d (cm);a.u.",2000,0,1.,
"s");
2435 fHistManager.
CreateTH1(
"fh1dTracksImpParXYSignificance",
"radial imp. parameter ;impact parameter xy significance;a.u.",200,-30,30,
"s");
2438 fHistManager.
CreateTH2(
"fh1dTracksIPvsPt_B",
"Track IP vs Track Pt; p_{T,Track} (GeV/c); d_{0}",500,0,250,300,0,30);
2439 fHistManager.
CreateTH2(
"fh1dTracksIPvsPt_V0JetTracks",
"Track IP vs Track Pt; p_{T,Track} (GeV/c); d_{0}",500,0,250,300,0,30);
2440 fHistManager.
CreateTH2(
"fh1dTracksIPvsPt_V0inV0Jet",
"Track IP vs Track Pt; p_{T,Track} (GeV/c); d_{0}",500,0,250,300,0,30);
2441 fHistManager.
CreateTH2(
"fh1dTracksIPvsPt_V0inBJet",
"Track IP vs Track Pt; p_{T,Track} (GeV/c); d_{0}",500,0,250,300,0,30);
2448 for(
int iN=1;iN<=3;iN++){
2449 fHistManager.
CreateTH1(Form(
"fh1dJetRecPt_n_%i_all_Accepted",iN),
"detector level jets;pt (GeV/c); count",500,0,250,
"s");
2450 fHistManager.
CreateTH1(Form(
"fh1dTrackPt_n_%i_all_Accepted",iN),
"detector level jets;pt (GeV/c); count",500,0,200,
"s");
2460 const Int_t iNDimInJC = 5;
2461 Int_t binsKInJC[iNDimInJC] = {200, 200, 200, 200,5};
2462 Double_t xminKInJC[iNDimInJC] = {0.35, 0., -1., 0.,0};
2463 Double_t xmaxKInJC[iNDimInJC] = {0.65, 50., 1., 200.,5};
2464 Int_t binsLInJC[iNDimInJC] = {200, 200, 200, 200,5};
2465 Double_t xminLInJC[iNDimInJC] = {1.05, 0., -1., 0.,0};
2466 Double_t xmaxLInJC[iNDimInJC] = {1.25, 50., 1., 200.,5};
2472 fhnV0InJetK0s =
new THnSparseD(
"fhnV0InJetK0s",
"K0s: Mass vs Pt in jets;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0};#it{p}_{T}^{jet} (GeV/#it{c}); IsMCTrueK0", iNDimInJC, binsKInJC, xminKInJC, xmaxKInJC);
2473 fhnV0InJetLambda =
new THnSparseD(
"fhnV0InJetLambda",
"Lambda: Mass vs Pt in jets;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0};#it{p}_{T}^{jet} (GeV/#it{c}); IsMCTrueLamda", iNDimInJC, binsLInJC, xminLInJC, xmaxLInJC);
2474 fhnV0InJetALambda =
new THnSparseD(
"fhnV0InJetALambda",
"ALambda: Mass vs Pt in jets;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{#eta}_{V0};#it{p}_{T}^{jet} (GeV/#it{c}); IsMCTrueALamda", iNDimInJC, binsLInJC, xminLInJC, xmaxLInJC);
2484 for(
Int_t j = 0; j < 18; j++){
2498 fh2dKshortPtVsJetPtMC =
new TH2D(
"fh2dKshortPtVsJetPtMC",
"KShort Pt Vs Jet Pt MC;p_{T,V0} (GeV/c);#it{p}_{T,jet} (GeV/#it{c})",200,0,50,200,0, 200);
2499 fh2dLamdaPtVsJetPtMC =
new TH2D(
"fh2dLamdaPtVsJetPtMC",
"Lamda Pt Vs Jet Pt MC;p_{T,V0} (GeV/c);#it{p}_{T,jet} (GeV/#it{c})",200,0,50,200,0,200);
2500 fh2dAnLamdaPtVsJetPtMC =
new TH2D(
"fh2dAnLamdaPtVsJetPtMC",
"Anti Lamda Pt Vs Jet Pt MC;p_{T,V0} (GeV/c);#it{p}_{T,jet} (GeV/#it{c})",200,0,50,200,0,200);
2518 for(
int iType=0;iType<6;iType++){
2524 const char * base =
"fh2dJetSignedImpPar";
2525 const char * dim[2] = {
"XY",
"XYZ"};
2526 const char * typ[2] = {
"",
"Significance"};
2527 const char * ordpar [4] = {
"",
"First",
"Second",
"Third"};
2528 const char * special [1] = {
"",};
2533 Int_t ipbins = 1000;
2536 for (
Int_t id = 0;
id<1;++id)
2538 for (
Int_t io = 0;io<4;++io)
2539 for (
Int_t is = 0;is<1;++is)
2540 for (
Int_t it = 1;it<2;++it){
2544 if(io==0 && ifl==4) ipbins = 1000;
2551 if(
id==0) ipbins =1000;
2554 Form(
"%s%s%s%s%s%s;;",base,dim[
id],typ[it],
sTemplateFlavour[ifl].
Data(),ordpar[io],special[is]),
2555 ptbins,ptlow,pthigh,ipbins,iplow,iphigh,
"s");
2563 while ((obj = next())) {
2564 printf(
"Adding Object %s\n",obj->GetName());
2585 int sForm[24]={1,2,2,0,0,0,0,1,1,0,
2586 0,1,0,1,0,3,3,0,0,0,3,3,2,2};
2589 for(
int iV0Cut=0;iV0Cut<24;iV0Cut++){
2591 switch (sForm[iV0Cut]){
2593 v0cuts+=Form(
"%0.f",
fV0Cuts[iV0Cut]);
2597 v0cuts+=Form(
"%0.1f",
fV0Cuts[iV0Cut]);
2601 v0cuts+=Form(
"%0.2f",
fV0Cuts[iV0Cut]);
2605 v0cuts+=Form(
"%0.3f",
fV0Cuts[iV0Cut]);
2636 printf(
"Cut Track Settings: %s\n",jetcuts.Data());
2667 printf(
"Cut Vertex Settings %s\n", trackcuts.Data());
2669 vertexcuts+=version;
2715 printf(
"Vertex Cuts: %s\n",vertexcuts.Data());
2732 AliPIDResponse::EDetPidStatus status[AliPIDResponse::kNdetectors] = {AliPIDResponse::kDetNoSignal,AliPIDResponse::kDetNoSignal,AliPIDResponse::kDetNoSignal,AliPIDResponse::kDetNoSignal,AliPIDResponse::kDetNoSignal,AliPIDResponse::kDetNoSignal,AliPIDResponse::kDetNoSignal};
2733 unsigned int nGoodDet = 0;
2734 for (
int j =0; j<AliPIDResponse::kNdetectors;j++)
2739 status[j] =
fPidResponse->NumberOfSigmas(static_cast <AliPIDResponse::EDetector>(j), track, static_cast <AliPID::EParticleType>(i), val);
2740 if (status[j] == AliPIDResponse::kDetPidOk ){
2744 if( nGoodDet/7 <2 )
return false;
2745 nDetectors = nGoodDet/7;
2746 Double_t probTPCTOF[AliPID::kSPECIES]={-1.,-1.,-1.,-1.,-1.};
2748 fCombined->SetDetectorMask(AliPIDResponse::kDetITS|AliPIDResponse::kDetTPC|AliPIDResponse::kDetTOF|AliPIDResponse::kDetTRD|AliPIDResponse::kDetEMCAL);
2752 for (
int j =0 ;j< AliPID::kSPECIES;++j ){
2753 prob[j] =probTPCTOF[j];
2754 if(prob[j] >maxpidv ){
2759 MostProbablePID=static_cast <AliPID::EParticleType>(maxpid);
2769 AliPID::EParticleType mpPID=AliPID::kUnknown;
2780 AliPID::EParticleType mpPID=AliPID::kUnknown;
2783 if(mpPID==
AliPID::kPion && p[2] >0.90 && nDet >1)
return kTRUE;
2791 AliPID::EParticleType mpPID=AliPID::kUnknown;
2793 if(mpPID==
AliPID::kKaon && p[3] >0.90 && nDet >1)
return kTRUE;
2801 AliPID::EParticleType mpPID=AliPID::kUnknown;
2809 Int_t nTracks=aod->GetNumberOfTracks();
2810 AliAODTrack * t =
nullptr;
2811 AliExternalTrackParam etp_at_r39_old; etp_at_r39_old.CopyFromVTrack(track);
2812 etp_at_r39_old.PropagateTo(3.9,InputEvent()->GetMagneticField());
2813 double angle0 = TMath::ATan2(etp_at_r39_old.Yv(),etp_at_r39_old.Xv());
2814 double zz0 = etp_at_r39_old.GetZ();
2817 for(
Int_t i=0; i<nTracks; i++){
2818 t = (AliAODTrack *)(aod->GetTrack(i));
2819 if(!((((AliAODTrack*)t)->TestFilterBit(4))))
continue;
2820 int id = (
Int_t)t->GetID();
2821 AliExternalTrackParam etp_at_r39; etp_at_r39.CopyFromVTrack(t);
2822 etp_at_r39.PropagateTo(3.9,InputEvent()->GetMagneticField());
2823 double angle = TMath::ATan2(etp_at_r39.Yv(),etp_at_r39.Xv());
2824 double zz = etp_at_r39.GetZ();
2827 if(fabs(TVector2::Phi_mpi_pi(angle-angle0))>TMath::Pi()/6.) {
2830 if(fabs(zz-zz0)>0.5) {
2834 skipped[nTrksToSkip++] = id;
2843 AliAODVertex *vtxAOD =aod ->GetPrimaryVertex();
2844 if(!vtxAOD)
return 0;
2849 if(!title.Contains(
"VertexerTracks"))
return 0;
2851 AliVertexerTracks vertexer(aod->GetMagneticField());
2852 vertexer.SetITSMode();
2853 vertexer.SetMinClusters(3);
2854 if(title.Contains(
"WithConstraint")) {
2856 aod->GetDiamondCovXY(diamondcovxy);
2857 Double_t pos[3]={aod->GetDiamondX(),aod->GetDiamondY(),0.};
2858 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
2859 AliESDVertex diamond(pos,cov,1.,1);
2860 vertexer.SetVtxStart(&diamond);
2865 Int_t skipped[5000];
for(
Int_t i=0;i<5000;i++) skipped[i]=-1;
2867 if(!(
id<0)) skipped[0] = id;
2870 vertexer.SetSkipTracks(nTrksToSkip,skipped);
2874 AliESDVertex *vtxESDNew = vertexer.FindPrimaryVertex(aod);
2875 if(!vtxESDNew)
return 0;
2876 Int_t nContrib =vtxESDNew->GetNContributors();
2879 delete vtxESDNew; vtxESDNew=
nullptr;
2884 delete vtxESDNew; vtxESDNew=
nullptr;
2893 vtxESDNew->GetXYZ(pos);
2894 vtxESDNew->GetCovMatrix(cov);
2895 chi2perNDF = vtxESDNew->GetChi2toNDF();
2896 if(vtxESDNew)
delete vtxESDNew;
2898 AliAODVertex *vtxAODNew =
new AliAODVertex(pos,cov,chi2perNDF);
2899 vtxAODNew->SetNContributors(nContrib);
2909 Int_t pCorr_indx=-1;
2911 if(pCorr_indx<0 )
continue;
2912 FillHist(histname,pCorr_indx+0.5,pT, 1);
2924 for(
Int_t j = 0; j < InputEvent()->GetNumberOfTracks(); ++j) {
2925 tr = (AliVTrack*)(InputEvent()->GetTrack(j));
2928 Int_t pCorr_indx=-1;
2930 if(pCorr_indx<0)
continue;
2931 FillHist(
"fh2dParticleSpectra_Event",pCorr_indx+0.5,pT, 1);
2947 if(perp_jet1)
delete perp_jet1;
2948 if(perp_jet2)
delete perp_jet2;
2952 TVector3 j(jet_in->
Px(), jet_in->
Py(), jet_in->
Pz());
2954 std::vector <int > track_inc;
2955 p1.RotateZ(rev ? -1*TMath::Pi()/2. :TMath::Pi()/2. );
2958 std::vector <int> const_idx1;
2962 TVector3 v(tr->Px(), tr->Py(), tr->Pz());
2968 const_idx1.push_back(itrack);
2976 jet1 =
new AliEmcalJet(sumAllPt1, p1.Eta(), TVector2::Phi_0_2pi (p1.Phi()), 0);
2980 for (
int i = 0 ; i < (int) const_idx1.size();++i) {
3013 result = impar[0]/sqrt(cov[0]);
3016 result = TMath::Sqrt(impar[0]*impar[0]+impar[1]*impar[1]);
3019 result = TMath::Sqrt(impar[0]*impar[0]+impar[1]*impar[1]);
3020 dFdx = impar[0]/result;
3021 dFdy = impar[1]/result;
3022 result /=TMath::Sqrt(cov[0]*dFdx*dFdx + cov[2]*dFdy*dFdy + 2* cov[1] *dFdx*dFdy);
3026 result /=TMath::Sqrt(cov[2]);
3029 result = TMath::Sqrt(impar[0]*impar[0]+impar[1]*impar[1]);
3030 dFdx = impar[0]/result;
3031 dFdy = impar[1]/result;
3032 result =TMath::Sqrt(cov[0]*dFdx*dFdx + cov[2]*dFdy*dFdy + 2* cov[1] *dFdx*dFdy);
3045 if(JetFlavor==2)
fh1dCutc->Fill(CutIndex);
3046 if(JetFlavor==3)
fh1dCutb->Fill(CutIndex);
3047 if(JetFlavor==4)
fh1dCuts->Fill(CutIndex);
3053 if(!track)
return kFALSE;
3056 fESDTrackCut->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
3057 if(!(
fESDTrackCut->AcceptTrack((AliESDtrack*)track)))
return kFALSE;
3062 if(!(((AliAODTrack*)track)->TestFilterBit(9) || ((AliAODTrack*)track)->TestFilterBit(4)))
return kFALSE;
3064 if(TMath::Abs(track->Eta())>0.9)
return kFALSE;
3068 if(!(((AliAODTrack*)track->HasPointOnITSLayer(0))&&(AliAODTrack*)track->HasPointOnITSLayer(1))){
3075 Int_t SPDSSDHits = (int) track->HasPointOnITSLayer(0) + (int) track->HasPointOnITSLayer(1) + (int) track->HasPointOnITSLayer(4) + (int) track->HasPointOnITSLayer(5);
3095 AliAODVertex *aodvertex = (( AliAODTrack *)track)->GetProdVertex();
3096 if(!aodvertex)
return kFALSE;
3098 if(aodvertex->GetType()==AliAODVertex::kKink){
3104 ULong_t status=track->GetStatus();
3106 if(!(status & AliAODTrack::kTPCrefit)){
3113 if(!(status & AliAODTrack::kITSrefit)){
3172 if (!jets1 || !jets1->
GetArray() || !jets2 || !jets2->
GetArray())
return kFALSE;
3178 if (!jet2)
continue;
3209 if (jet1->
MCPt() < minjetpt)
continue;
3222 if(!mcpart)
return kFALSE;
3224 if(!mcmother)
return kTRUE;
3227 istatus = ( (AliMCParticle*)mcmother)->Particle()->GetStatusCode();
3230 istatus = ((AliAODMCParticle*)mcmother)->GetStatus();
3232 if(istatus >11)
return kTRUE;
3242 AliMCParticle *pMCESD =
nullptr;
3243 AliAODMCParticle *pMCAOD =
nullptr;
3244 if(track->GetLabel()< 0)
return 1;
3247 pMCESD = ((AliMCParticle*)MCEvent()->GetTrack(abs(track->GetLabel())));
3248 if(!(pMCESD))
return 1;
3251 pMCAOD =
static_cast<AliAODMCParticle*
>(
fMCArray->At(abs(track->GetLabel())));
3252 if(!(pMCAOD))
return 1;
3255 AliVParticle * mcpart =
fIsEsd ? ( AliVParticle * )pMCESD:( AliVParticle * )pMCAOD;
3256 Bool_t _particlesourcefound(kFALSE);
3257 Int_t _particlesourcepdg(mcpart->PdgCode());
3258 Int_t _particlesourceidx(25);
3261 AliVParticle * mcpartclone = mcpart;
3263 if((abs(mcpart->PdgCode()) >0 && abs(mcpart->PdgCode()) <7)|| (abs(mcpart->PdgCode()) == 21))
break;
3264 _particlesourcept = mcpart->Pt();
3265 _particlesourcepdg = abs(mcpart->PdgCode());
3267 _particlesourcefound = kTRUE;
3272 if (!_particlesourcefound) {
3273 mcpart = mcpartclone;
3276 if((abs(mcpart->PdgCode()) >0 && abs(mcpart->PdgCode()) <7)|| (abs(mcpart->PdgCode()) == 21))
break;
3277 _particlesourcept = mcpart->Pt();
3278 _particlesourcepdg = abs(mcpart->PdgCode());
3280 _particlesourcefound = kTRUE;
3286 if (!_particlesourcefound) {
3287 mcpart = mcpartclone;
3289 if((abs(mcpart->PdgCode()) >0 && abs(mcpart->PdgCode()) <7)|| (abs(mcpart->PdgCode()) == 21))
break;
3290 _particlesourcept = mcpart->Pt();
3291 _particlesourcepdg = abs(mcpart->PdgCode());
3293 _particlesourcefound = kTRUE;
3299 if (!_particlesourcefound) {
3300 mcpart = mcpartclone;
3302 if((abs(mcpart->PdgCode()) >0 && abs(mcpart->PdgCode()) <7)|| (abs(mcpart->PdgCode()) == 21))
break;
3303 _particlesourcept = mcpart->Pt();
3304 _particlesourcepdg = abs(mcpart->PdgCode());
3306 _particlesourcefound = kTRUE;
3312 if (!_particlesourcefound) {
3313 mcpart = mcpartclone;
3315 if((abs(mcpart->PdgCode()) >0 && abs(mcpart->PdgCode()) <7)|| (abs(mcpart->PdgCode()) == 21))
break;
3316 _particlesourcept = mcpart->Pt();
3318 _particlesourcefound = kTRUE;
3325 if (!_particlesourcefound)
return 1.;
3328 if (_particlesourceidx <0)
return 1;
3329 if (_particlesourceidx >19)
return 1;
3330 Double_t wpos = ((_particlesourcept - 0.15)/ 0.05);
3332 fractpart = modf (wpos , &intpart);
3333 if (fractpart > 0) intpart = intpart + 1;
3334 Int_t bin = floor(intpart);
3335 if (bin > 497) bin = 497;
3336 if (_particlesourcept < 0.1+ 1E-5) bin = 0;
3339 pCorr_indx = _particlesourceidx;
3342 switch(mcpart->PdgCode())
3346 flucafactor =1./
fPhi->Eval(_particlesourcept);
3351 flucafactor =1./
fK0Star->Eval(_particlesourcept);
3356 flucafactor =1./
fK0Star->Eval(_particlesourcept);
3362 flucafactor =1./
fGraphOmega->Eval(_particlesourcept);
3367 flucafactor =1./
fGraphXi->Eval(_particlesourcept);
3371 flucafactor =1./
fPhi->Eval(_particlesourcept);
3377 flucafactor =1./
fK0Star->Eval(_particlesourcept);
3382 flucafactor =1./
fK0Star->Eval(_particlesourcept);
3387 flucafactor =
fGraphOmega->Eval(_particlesourcept);
3392 flucafactor =
fGraphXi->Eval(_particlesourcept);
3398 factor*=flucafactor;
3399 if (factor <= 0 || factor > 100.) {
3402 ppt = _particlesourcept;
3439 Int_t pdg2 = abs(mcpart->PdgCode());
3482 AliVParticle * mother =
nullptr;
3484 pdg = abs(mcpart->PdgCode());
3486 if(pIsSecStrANGE )
return kFALSE;
3493 if((abs(mother->PdgCode()) == 3222) )
3520 pdg = abs(mcpart->PdgCode());
3521 if(TMath::Abs(mcpart->Y()) >=.5)
return kFALSE;
3573 pdg = abs(mcpart->PdgCode());
3604 AliVParticle * mother =
nullptr;
3605 if (part->GetMother()<0)
return nullptr;
3607 mother = static_cast <AliMCParticle*>(MCEvent()->GetTrack(part->GetMother()));
3610 mother =
static_cast<AliAODMCParticle*
>(
fMCArray->At(part->GetMother()));
3612 if(!mother)
return nullptr;
3620 return fIsEsd ? MCEvent()->IsPhysicalPrimary(part->GetLabel()) : static_cast<AliAODMCParticle*>(part)->IsPhysicalPrimary() ;
3627 return fIsEsd ? MCEvent()->IsSecondaryFromWeakDecay(part->GetLabel()) : static_cast<AliAODMCParticle*>(part)->IsSecondaryFromWeakDecay() ;
3636 AliVParticle * mother =
nullptr;
3638 pdg = abs(mcpart->PdgCode());
3657 if((abs(mother->PdgCode()) ==
bPhi))
3666 if((abs(mother->PdgCode()) ==
bPhi))
3676 if((abs(mother->PdgCode()) == 3312) || (abs(mother->PdgCode()) == 3322) || (abs(mother->PdgCode()) == 3334))
3693 if(!part)
return kFALSE;
3694 Int_t pdg = TMath::Abs(part->PdgCode());
3695 if ((pdg >= 500 && pdg < 600 )||(pdg >= 5000 && pdg < 6000 ))
3698 Int_t mpdg = TMath::Abs(pm->PdgCode());
3699 if (!(mpdg >5000 && mpdg <6000) && !(mpdg >500 && mpdg <600))
3710 if(!part)
return kFALSE;
3711 Int_t pdg = TMath::Abs(part->PdgCode());
3712 if ((pdg >= 400 && pdg < 500 )||(pdg >= 4000 && pdg < 5000 ))
3715 if(!pm)
return kTRUE;
3716 Int_t mpdg = TMath::Abs(pm->PdgCode());
3717 if (!(mpdg >4000 && mpdg <6000) && !(mpdg >400 && mpdg <600))
3728 Int_t pos[22] = {
bPi0,
bEta,
bEtaPrime,
bPhi,
bRho,
bOmega,
bK0s,
bLambda,
bOmegaBaryon,
bXiBaryon,
bD0,
bPi,
bKaon,
bProton,
bDPlus,
bDStarPlus,
bDSPlus,
bLambdaB,
bLambdaC,
bBPlus,
bB0,
bBStarPlus};
3729 for (
Int_t i =0 ;i<22 ;++i){
3730 if (abs(pdg)==pos[i] )
return kTRUE;
3753 if (d1 < jet1->ClosestJetDistance()) {
3757 else if (d1 < jet1->SecondClosestJetDistance()) {
3762 if (d2 < jet2->ClosestJetDistance()) {
3766 else if (d2 < jet2->SecondClosestJetDistance()) {
3779 dphi = TVector2::Phi_mpi_pi(dphi);
3780 d = sqrt(deta * deta + dphi * dphi);
3787 printf(
"Doing MC Correction.\n");
3789 if(val > 0 )
return val;
3812 printf(
"Correct for Underlying Event.\n");
3826 printf(
"Correct for Underlying Event.\n");
3848 return ((pdg==1)||(pdg==2)||(pdg==3)||(pdg==4)||(pdg==5)||(pdg==21));
3872 double p_udsg_max=-999;
3873 double p_s_max=-999;
3874 AliVParticle *vp=0x0;
3877 int kJetOrigin=-999;
3889 vp =
static_cast<AliVParticle*
>(jet->
Track(i));
3891 AliError(
"AliVParticle associated to constituent not found\n");
3895 AliAODMCParticle * part =
static_cast<AliAODMCParticle*
>(vp);
3898 AliError(
"Finding no Part!\n");
3901 pdg = (abs(part->PdgCode()));
3908 for(
Int_t iPrim = 0 ; iPrim<
fMCArray->GetEntriesFast();iPrim++){
3910 AliAODMCParticle * part =
static_cast<AliAODMCParticle*
>(
fMCArray->At(iPrim));
3912 if(!part->IsPrimary())
continue;
3919 Int_t pdg = (abs(part->PdgCode()));
3922 dphi = TVector2::Phi_mpi_pi(dphi);
3923 Double_t d = sqrt(deta * deta + dphi * dphi);
3928 if(d > radius)
continue;
3939 int kFirstDaugh=part->GetDaughterLabel(0);
3940 int NDaugh=part->GetNDaughters();
3941 for(
int idaugh=0;idaugh<NDaugh;idaugh++){
3942 int kDaughLabel=kFirstDaugh+idaugh;
3949 kJetOrigin=part->PdgCode();
3979 if(abs(kJetOrigin) == 5) {
3982 else if(abs(kJetOrigin)== 4) {
3985 else if(abs(kJetOrigin) == 3 ) {
3989 else if(abs(kJetOrigin)== 1 ||abs(kJetOrigin)== 2 || abs(kJetOrigin) == 21) {
4025 if(p_s_max>p_udsg_max){
4047 std::vector<fastjet::PseudoJet> fInputVectors;
4048 fInputVectors.clear();
4049 fastjet::PseudoJet PseudoTracks;
4055 if (!fTrk)
continue;
4057 PseudoTracks.reset(fTrk->Px(), fTrk->Py(), fTrk->Pz(),fTrk->E());
4058 PseudoTracks.set_user_index(fJet->
TrackAt(i)+100);
4059 fInputVectors.push_back(PseudoTracks);
4062 fastjet::JetAlgorithm jetalgo(fastjet::cambridge_algorithm);
4066 fastjet::JetDefinition fJetDef(jetalgo, 1., static_cast<fastjet::RecombinationScheme>(0), fastjet::BestFJ30 );
4069 fastjet::ClusterSequence fClustSeqSA(fInputVectors, fJetDef);
4070 std::vector<fastjet::PseudoJet> fOutputJets;
4071 fOutputJets.clear();
4072 fOutputJets=fClustSeqSA.inclusive_jets(0);
4074 fastjet::PseudoJet jj;
4075 fastjet::PseudoJet j1;
4076 fastjet::PseudoJet j2;
4079 double thetaverage=0;
4081 double flagSubjet=0;
4082 while(jj.has_parents(j1,j2)){
4084 if(j1.perp() < j2.perp())
swap(j1,j2);
4086 double delta_R=j1.delta_R(j2);
4087 double z=j2.perp()/(j1.perp()+j2.perp());
4088 double y =log(1.0/delta_R);
4089 double lnpt_rel=log(j2.perp()*delta_R);
4090 double yh=j1.e()+j2.e();
4091 vector < fastjet::PseudoJet > constitj1 = sorted_by_pt(j1.constituents());
4094 ktaverage=ktaverage+lnpt_rel;
4095 thetaverage=thetaverage+delta_R;
4096 Double_t LundEntries[6] = {y,lnpt_rel,fOutputJets[0].perp(),nall,yh,flagSubjet};
4099 }
catch (fastjet::Error) {
4100 AliError(
" [w] FJ Exception caught.");
4111 if(h1) h1->Fill(x,w);
4119 if(h2) h2->Fill(x,y,w);
4127 h1->SetBinContent(bin,h1->GetBinContent(bin)+1);
4135 res =
fOutput->FindObject(name);
4136 if((res))
return nullptr;
4138 TH1 * phist=
nullptr;
4140 phist =
new TH1D (name,title,x,xlow,xhigh);
4143 phist =
new TH2D(name,title,x,xlow,xhigh,y,ylow,yhigh);
4148 if(sName.EqualTo(
"fh1dCutsPrinted")){
4210 if(!track || !event)
return kFALSE;
4211 if(dca==0 || cov ==0 ||XYZatDCA ==0 )
return kFALSE;
4212 AliExternalTrackParam etp;
4213 etp.CopyFromVTrack((AliVTrack*)track);
4221 if(!vtxESDSkip)
return kFALSE;
4222 if(!etp.PropagateTo(1,event->GetMagneticField()))
return kFALSE;
4228 if(etp.PropagateToDCA(vtxESDSkip, event->GetMagneticField(), kBeampiperadius, dca, cov)){
4230 etp.GetXYZ(XYZatDCA);
4231 etp.GetXYZ(x_at_dca);
4232 etp.GetPxPyPz(p_at_dca);
4236 }
else return kFALSE;
4259 const AliVVertex * vertex = InputEvent()->GetPrimaryVertex();
4261 Printf(
"Primary vertex %e %e %e",vertex->GetX(),vertex->GetY(),vertex->GetY() );
4272 if(!track || !event || !jet)
return kFALSE;
4273 if(dca==0 || cov ==0 ||XYZatDCA ==0 )
return kFALSE;
4280 vtxESDSkip->GetXYZ(VxVyVz);
4287 TVector3 jetP3(jetp);
4288 double covjet [21] = {0.};
4289 double pxpypz[3] = {0.};
4291 AliExternalTrackParam etp_jet(VxVyVz, pxpypz, covjet, (
Short_t)0);
4294 TVector3 JetDir =jetP3.Unit();
4295 TVector3 D0(XYZatDCA);
4296 TVector3 vertex(VxVyVz);
4297 TVector3 DD0(D0.x()-vertex.x(),D0.y()-vertex.y(),0.);
4298 double ps =DD0.Dot(JetDir);
4299 double value = DD0.Mag()*(ps/fabs(ps));
4300 jetsign = TMath::Sign(1.,value);
4301 TVector3 dd0 =DD0.Unit();
4304 AliExternalTrackParam etp_track; etp_track.CopyFromVTrack(track);
4305 Double_t xa,xb,xyz_jet_global[3],xyz_track_global[3];
4307 etp_jet.GetDCA(&etp_track, event->GetMagneticField(), xa, xb);
4308 etp_jet.GetXYZAt(xa, event->GetMagneticField(),xyz_jet_global);
4309 etp_track.GetXYZAt(xb, event->GetMagneticField(),xyz_track_global);
4310 etp_track.PropagateTo(xb,event->GetMagneticField());
4318 double val = ((VxVyVz[0] - xyz_track_global[0]) * (VxVyVz[0] - xyz_track_global[0]) +
4319 (VxVyVz[1] - xyz_track_global[1]) * (VxVyVz[1] - xyz_track_global[1])+
4320 (VxVyVz[2] - xyz_track_global[2]) * (VxVyVz[2] - xyz_track_global[2]));
4323 double bdecaylength = val >0 ? sqrt(val) : 1000;
4329 double dcajetrack = sqrt((xyz_jet_global[0] - xyz_track_global[0]) * (xyz_jet_global[0] - xyz_track_global[0]) +
4330 (xyz_jet_global[1] - xyz_track_global[1]) * (xyz_jet_global[1] - xyz_track_global[1])+
4331 (xyz_jet_global[2] - xyz_track_global[2]) * (xyz_jet_global[2]- xyz_track_global[2]));
4338 if(!(
IsDCAAccepted(bdecaylength, dcajetrack, dca, jetflavour)))
return kFALSE;
4359 fFracs.push_back(sFrac.Atof());
4384 if(!oa) AliError(Form(
" No %i'th Probability Threshold object array!\n",iProbSet));
4385 printf(
"Pointer oa=%p\n",oa);
4387 if(!
h1DProbThresholds.back()) AliError(Form(
" No %i'th Probability Threshold hist!\n",iProbSet));
4399 TFile* fileThresholds=TFile::Open(PathToThresholds.Data());
4400 if(!fileThresholds ||(fileThresholds&& !fileThresholds->IsOpen())){AliError(Form(
"%s :: File with threshold values not found",taskname.Data()));}
4402 Printf(
"%s :: File %s successfully loaded, setting up threshold functions.",taskname.Data(),PathToThresholds.Data());
4405 printf(
"Reading threshold histograms for track counting...\n");
4409 for(
int iThresh=0;iThresh<nTCThresh;iThresh++){
4410 fileThresholds->GetObject(Form(
"TCThres_%i",iThresh),oaTCThresh[iThresh]);
4415 fileThresholds->GetObject(
"ProbLookup",oLookup);
4431 for(
int iN=0;iN<3;iN++){
4460 if(!hasIPs[0])
continue;
4468 if(ipval[0]>IPthresN1[iThresh]&&ipval[1]>IPthresN2[iThresh]&&ipval[2]>IPthresN3[iThresh]){
4470 kTagDec[iThresh][
Full]=kTRUE; kTagDec[iThresh][
Triple]=kTRUE;
4476 if(ipval[2]>IPthresN3[iThresh]) {
4478 kTagDec[iThresh][
Full]=kTRUE; kTagDec[iThresh][
Single3rd]=kTRUE;
4488 if(ipval[0]>IPthresN1[iThresh]&&ipval[1]>IPthresN2[iThresh]) {
4490 kTagDec[iThresh][
Full]=kTRUE; kTagDec[iThresh][
Double]=kTRUE;
4496 if(ipval[1]>IPthresN2[iThresh]) {
4498 kTagDec[iThresh][
Full]=kTRUE; kTagDec[iThresh][
Single2nd]=kTRUE;
4508 if(ipval[0]>IPthresN1[iThresh]) {
4510 kTagDec[iThresh][
Full]=kTRUE; kTagDec[iThresh][
Single1st]=kTRUE;
4529 if(probval>threshval){
4530 kTagDec[iThresh][
Full]=kTRUE;
4545 if(kTagDec[iThresh][
Double])
FillHist(Form(
"h1DTagged_Double_%0.2f",
fFracs[iThresh]), jetpt, 1);
4546 if(kTagDec[iThresh][
Triple])
FillHist(Form(
"h1DTagged_Triple_%0.2f",
fFracs[iThresh]), jetpt, 1);
4550 if(kTagDec[iThresh][Full]&&(jetflavour!=
Unid)){
4555 if(kTagDec[iThresh][
Double])
FillHist(Form(
"h1DTagged_Double_%0.2f",
fFracs[iThresh]), jetpt, 1);
4556 if(kTagDec[iThresh][
Triple])
FillHist(Form(
"h1DTagged_Triple_%0.2f",
fFracs[iThresh]), jetpt, 1);
4558 if(kTagDec[iThresh][Full]&&(jetflavour==
B)&&hasIPs){
4561 FillHist(Form(
"h1DTrueBTagged_Full_%0.2f",
fFracs[iThresh]), jetpt, 1);
4565 if(kTagDec[iThresh][
Double])
FillHist(Form(
"h1DTrueBTagged_Double_%0.2f",
fFracs[iThresh]), jetpt, 1);
4566 if(kTagDec[iThresh][
Triple])
FillHist(Form(
"h1DTrueBTagged_Triple_%0.2f",
fFracs[iThresh]), jetpt, 1);
4570 if(kTagDec[iThresh][Full]&&(jetflavour==
C)&&hasIPs){
4571 FillHist(Form(
"h1DFalseCTagged_Full_%0.2f",
fFracs[iThresh]), jetpt, 1);
4575 if(kTagDec[iThresh][
Double])
FillHist(Form(
"h1DFalseCTagged_Double_%0.2f",
fFracs[iThresh]), jetpt, 1);
4576 if(kTagDec[iThresh][
Triple])
FillHist(Form(
"h1DFalseCTagged_Triple_%0.2f",
fFracs[iThresh]), jetpt, 1);
4579 if(kTagDec[iThresh][Full]&&(jetflavour==
UDSG)&&hasIPs){
4580 FillHist(Form(
"h1DFalseUDSGTagged_Full_%0.2f",
fFracs[iThresh]), jetpt, 1);
4581 if(kTagDec[iThresh][
Single1st])
FillHist(Form(
"h1DFalseUDSGTagged_Single1st_%0.2f",
fFracs[iThresh]), jetpt, 1);
4582 if(kTagDec[iThresh][
Single2nd])
FillHist(Form(
"h1DFalseUDSGTagged_Single2nd_%0.2f",
fFracs[iThresh]), jetpt, 1);
4583 if(kTagDec[iThresh][
Single3rd])
FillHist(Form(
"h1DFalseUDSGTagged_Single3rd_%0.2f",
fFracs[iThresh]), jetpt, 1);
4584 if(kTagDec[iThresh][
Double])
FillHist(Form(
"h1DFalseUDSGTagged_Double_%0.2f",
fFracs[iThresh]), jetpt, 1);
4585 if(kTagDec[iThresh][
Triple])
FillHist(Form(
"h1DFalseUDSGTagged_Triple_%0.2f",
fFracs[iThresh]), jetpt, 1);
4588 if((kTagDec[iThresh][Full])&&((jetflavour==
UDSGV0)||(jetflavour==
CV0))&&hasIPs){
4589 FillHist(Form(
"h1DFalseV0Tagged_Full_%0.2f",
fFracs[iThresh]), jetpt, 1);
4593 if(kTagDec[iThresh][
Double])
FillHist(Form(
"h1DFalseV0Tagged_Double_%0.2f",
fFracs[iThresh]), jetpt, 1);
4594 if(kTagDec[iThresh][
Triple])
FillHist(Form(
"h1DFalseV0Tagged_Triple_%0.2f",
fFracs[iThresh]), jetpt, 1);
4597 if(!kTagDec[iThresh][Full]&&jetflavour==
B&&hasIPs){
4605 const char * tagtype[6] = {
"Full",
"Single1st",
"Single2nd",
"Single3rd",
"Double",
"Triple"};
4608 for(
int iType=0;iType<6;iType++){
4609 if(kTagDec[iThresh][iType]){
4611 FillHist(Form(
"h1DTaggedJetPt_%s_%0.2f",tagtype[iType],
fFracs[iThresh]),jetpt,1);
4621 FillHist(Form(
"h1DV0FalseRec"), jetpt, 1);
4626 FillHist(Form(
"h1DV0TrueDataDef"), jetpt, 1);
4627 if((jetflavour!=
B)){
4629 FillHist(Form(
"h1DV0TrueMCDef"), jetpt, 1);
4634 if(jetflavour==
C) jetflavour=
CV0;
4638 FillHist(Form(
"h1DV0TrueDataDef"), jetpt, 1);
4639 FillHist(Form(
"h1DV0TrueRec"), jetpt, 1);
4641 if(jetflavour==
C) jetflavour=
CV0;
4643 FillHist(Form(
"h1DV0TrueMCDef"), jetpt, 1);
4654 int iStartIPBin=
h2DProbLookup[iN]->GetXaxis()->FindBin(-25);
4656 double prob=
h2DProbLookup[iN]->Integral(iStartIPBin,iIPBin,iJetPtBin,iJetPtBin);
4657 prob=prob/(
h2DProbLookup[iN]->Integral(iStartIPBin,iZeroIPBin,iJetPtBin,iJetPtBin));
4667 double probval[3]={0};
4668 int iJetPtBin=
h2DProbLookup[0]->GetYaxis()->FindBin(jetpt);;
4672 for(
int iN=0;iN<3;iN++){
4673 if(!hasIPs[iN])
continue;
4674 if(ipval[iN]<0)
continue;
4675 iIPBin[iN]=
h2DProbLookup[iN]->GetXaxis()->FindBin(-ipval[iN]);
4676 probval[iN]=
IntegrateIP(iJetPtBin,iIPBin[iN], iN);
4680 prob=prob*probval[iN];
4683 double prob3=prob-prob*TMath::Log(prob)+prob*(TMath::Log(prob)*TMath::Log(prob))*0.5;
4684 double prob2=prob-prob*TMath::Log(prob);
4688 if(hasIPs[2]&&ipval[2]>0){
4692 if(hasIPs[1]&&ipval[1]>0){
4696 if(hasIPs[0]&&ipval[0]>0){
4705 double lnprobval=-TMath::Log(probval);
4713 FillHist(Form(
"h2DProbDists"),probval,jetpt,1);
4714 FillHist(Form(
"h2DLNProbDists"),lnprobval,jetpt,1);
4715 const char * tagtype[6] = {
"Full",
"Single1st",
"Single2nd",
"Single3rd",
"Double",
"Triple"};
4720 for(
int iType=0;iType<6;iType++){
4721 if(kTagDec[iThresh][iType]){
4722 FillHist(Form(
"h2DProbDistsTag_%s_%0.2f",tagtype[iType],
fFracs[iThresh]),probval,jetpt,1);
4723 FillHist(Form(
"h2DLNProbDistsTag_%s_%0.2f",tagtype[iType],
fFracs[iThresh]),lnprobval,jetpt,1);
4727 if(iThresh==0&&iType==0){
4728 FillHist(Form(
"h2DProbDists_UDSG"),probval,jetpt,1);
4729 FillHist(Form(
"h2DLNProbDists_UDSG"),lnprobval,jetpt,1);
4732 if(kTagDec[iThresh][iType]){
4733 FillHist(Form(
"h2DProbDistsTag_UDSG_%s_%0.2f",tagtype[iType],
fFracs[iThresh]),probval,jetpt,1);
4734 FillHist(Form(
"h2DLNProbDistsTag_UDSG_%s_%0.2f",tagtype[iType],
fFracs[iThresh]),lnprobval,jetpt,1);
4740 if(iThresh==0&&iType==0){
4741 FillHist(Form(
"h2DProbDists_B"),probval,jetpt,1);
4742 FillHist(Form(
"h2DLNProbDists_B"),lnprobval,jetpt,1);
4745 if(kTagDec[iThresh][iType]){
4746 FillHist(Form(
"h2DProbDistsTag_B_%s_%0.2f",tagtype[iType],
fFracs[iThresh]),probval,jetpt,1);
4747 FillHist(Form(
"h2DLNProbDistsTag_B_%s_%0.2f",tagtype[iType],
fFracs[iThresh]),lnprobval,jetpt,1);
4753 if(iThresh==0&&iType==0){
4754 FillHist(Form(
"h2DProbDists_C"),probval,jetpt,1);
4755 FillHist(Form(
"h2DLNProbDists_C"),lnprobval,jetpt,1);
4758 if(kTagDec[iThresh][iType]){
4759 FillHist(Form(
"h2DProbDistsTag_C_%s_%0.2f",tagtype[iType],
fFracs[iThresh]),probval,jetpt,1);
4760 FillHist(Form(
"h2DLNProbDistsTag_C_%s_%0.2f",tagtype[iType],
fFracs[iThresh]),lnprobval,jetpt,1);
4766 if(iThresh==0&&iType==0){
4767 FillHist(Form(
"h2DProbDists_V0"),probval,jetpt,1);
4768 FillHist(Form(
"h2DLNProbDists_V0"),lnprobval,jetpt,1);
4771 if(kTagDec[iThresh][iType]){
4772 FillHist(Form(
"h2DProbDistsTag_V0_%s_%0.2f",tagtype[iType],
fFracs[iThresh]),probval,jetpt,1);
4773 FillHist(Form(
"h2DLNProbDistsTag_V0_%s_%0.2f",tagtype[iType],
fFracs[iThresh]),lnprobval,jetpt,1);
4779 if(iThresh==0&&iType==0){
4780 FillHist(Form(
"h2DProbDists_V0"),probval,jetpt,1);
4781 FillHist(Form(
"h2DLNProbDists_V0"),lnprobval,jetpt,1);
4784 if(kTagDec[iThresh][iType]){
4785 FillHist(Form(
"h2DProbDistsTag_V0_%s_%0.2f",tagtype[iType],
fFracs[iThresh]),probval,jetpt,1);
4786 FillHist(Form(
"h2DLNProbDistsTag_V0_%s_%0.2f",tagtype[iType],
fFracs[iThresh]),lnprobval,jetpt,1);
4797 double lnprobval=-TMath::Log(probval);
4798 TString sFlavour[6]={
"Unid",
"UDSG",
"C",
"B",
"V0",
"V0"};
4803 if(ipval[0]>0){
FillHist(
"h2DProb1Above0",lnprobval,jetpt,1);}
4804 if((ipval[0]>0)&&(ipval[1]>0)){
FillHist(
"h2DProb2Above0",lnprobval,jetpt,1);}
4805 if((ipval[0]>0)&&(ipval[1]>0)&&(ipval[2]>0)){
FillHist(
"h2DProb3Above0",lnprobval,jetpt,1);}
4807 if(ipval[0]>0) {
FillHist(Form(
"h2DProb1Above0_%s",sFlavour[jetflavour].
Data()),lnprobval,jetpt,1);}
4808 if((ipval[0]>0)&&(ipval[1]>0)) {
FillHist(Form(
"h2DProb2Above0_%s",sFlavour[jetflavour].
Data()),lnprobval,jetpt,1);}
4809 if((ipval[0]>0)&&(ipval[1]>0)&&(ipval[2]>0)) {
FillHist(Form(
"h2DProb3Above0_%s",sFlavour[jetflavour].
Data()),lnprobval,jetpt,1);}
4813 if(kTagDec[0][Single1st]&&(ipval[1]>0)) {
FillHist(
"h2DProb1AbThresh1Ab0",lnprobval,jetpt,1);}
4814 if(kTagDec[0][Single1st]&&(ipval[1]>0)&&(ipval[2]>0)) {
FillHist(
"h2DProb1AbThresh2Ab0",lnprobval,jetpt,1);}
4817 if(kTagDec[0][
Double]) {
FillHist(
"h2DProb2AboveThresh",lnprobval,jetpt,1);}
4818 if(kTagDec[0][Double]&&(ipval[2]>0)) {
FillHist(
"h2DProb2AbThresh1Ab0",lnprobval,jetpt,1);}
4819 if(kTagDec[0][Double]&&(ipval[2]>0)&&(ipval[3]>0)) {
FillHist(
"h2DProb2AbThresh2Ab0",lnprobval,jetpt,1);}
4824 printf(
"\n*********************************\n");
4825 printf(
"Corrections:\n");
4829 printf(
"*********************************\n");
Double_t GetTrackCurvature(AliAODTrack *track)
void SetSecondClosestJet(AliEmcalJet *j, Double_t d)
void ReadThresholdHists(TString PathToThresholds, TString taskname, int nTCThresh)
void AddTrackAt(Int_t track, Int_t idx)
std::vector< Double_t > fPSJet
Double_t GetRhoVal() const
Bool_t fIsPythia
trigger, if it is a PYTHIA production
Double_t GetLocalAlphaAOD(AliAODTrack *track)
int DetermineUnsuitableVtxTracks(int *skipped, AliAODEvent *const aod, AliVTrack *const track)
AliVParticle * GetVParticleMother(AliVParticle *part)
GetVParticleMother.
Bool_t fIsMixSignalReady_n2
virtual void Terminate(Option_t *option="")
AliPIDResponse * fPidResponse
void setFFillCorrelations(const Bool_t &value)
AliAODMCParticle * GetMCTrack(int iLabel)
Bool_t SetResFunctionPID(const char *filename)
SetResFunction.
bool IsFromElectron(AliAODTrack *track)
void GetOutOfJetParticleComposition(AliEmcalJet *jet, int flavour)
Bool_t GetBMesonWeight(AliVParticle *mcpart, Int_t &pdg, Double_t &pT, Int_t &idx)
GetBMesonWeight.
Double_t fBackgroundFactorLinus[21][498]
AliEmcalJet * ClosestJet() const
void FillProbThreshHists(double proval, double *ipval, double jetpt, int jetflavour, bool *hasIPs, bool **kTagDec)
TClonesArray * fV0CandidateArray
Double_t GetPtCorrected(const AliEmcalJet *jet)
GetPtCorrected.
TTree * fCorrelationCrossCheck
std::vector< Double_t > fPCJet
TH2D * fh2dAnLamdaMassVsPt
Double_t ClosestJetDistance() const
Bool_t IsJetTaggedJetProb(double thresProb=0.90)
IsJetTaggedJetProb.
TH2D * GetHist2D(const char *name)
void SetMatchingLevel(AliEmcalJet *jet1, AliEmcalJet *jet2, Int_t matching=0)
SetMatchingLevel.
void FillCorrelations(bool bn[3], double v[3], double jetpt)
TH1D * fh1V0CounterCentLambda
number of K0s candidates after various cuts
Double_t GetMaxEta() const
int GetMCTruth(AliAODTrack *track, int &motherpdg)