29 #include <THnSparse.h>
31 #include <TClonesArray.h>
32 #include <TDatabasePDG.h>
33 #include <TParticle.h>
35 #include "AliAODEvent.h"
36 #include "AliESDEvent.h"
37 #include "AliMCEvent.h"
39 #include "AliVVertex.h"
42 #include "AliAODTrack.h"
43 #include "AliESDtrack.h"
45 #include "AliMCParticle.h"
46 #include "AliAODMCParticle.h"
47 #include "AliHeader.h"
48 #include "AliGenDPMjetEventHeader.h"
49 #include "AliV0vertexer.h"
50 #include "AliAnalysisUtils.h"
51 #include "AliInputEventHandler.h"
52 #include "AliCentrality.h"
53 #include "AliPIDResponse.h"
79 fIsRefitV0sESD(kFALSE),
80 fIsSkipFastOnly(kFALSE),
82 fCutMinEventVtxContr(0),
83 fCutMaxEventVzAbs(0.),
95 fCutMinDauDCAtoPV(0.),
96 fCutMinDauXrowsTPC(0.),
97 fCutMinDauXrowsOverFindableClusTPC(0.),
98 fCutMaxKshortSigmaTPC(0.),
99 fCutMinKshortCosPA(0.),
100 fCutMaxKshortCtau(0.),
101 fCutMaxKshortArmFrac(0.),
102 fCutMinKshortDeltaM(0.),
103 fCutMaxLambdaSigmaTPC(0.),
104 fCutMinLambdaCosPA(0.),
105 fCutMaxLambdaCtau(0.),
106 fCutMaxLambdaArmFrac(0.),
107 fCutMinLambdaDeletaM(0.),
115 for (Int_t i=3; i--;) fPrimaryVtx[i] = 0.;
120 AliAnalysisTaskSE(name),
130 fIsRefitV0sESD(kFALSE),
131 fIsSkipFastOnly(kFALSE),
133 fCutMinEventVtxContr(2),
134 fCutMaxEventVzAbs(10.),
143 fCutMinV0Radius(0.5),
144 fCutMaxV0Radius(200.),
146 fCutMinDauDCAtoPV(0.06),
147 fCutMinDauXrowsTPC(70.),
148 fCutMinDauXrowsOverFindableClusTPC(0.8),
149 fCutMaxKshortSigmaTPC(5.),
150 fCutMinKshortCosPA(0.97),
151 fCutMaxKshortCtau(20.),
152 fCutMaxKshortArmFrac(-1.),
153 fCutMinKshortDeltaM(0.005),
154 fCutMaxLambdaSigmaTPC(5.),
155 fCutMinLambdaCosPA(0.995),
156 fCutMaxLambdaCtau(30.),
157 fCutMaxLambdaArmFrac(-1.),
158 fCutMinLambdaDeletaM(0.01),
168 DefineOutput(1, TList::Class());
229 if (!(InputEvent()->FindListObject(
"PicoV0s"))) InputEvent()->AddObject(
fPicoV0sClArr);
267 AliAODv0 *pV0AOD = 0;
268 AliESDv0 *pV0ESD = 0;
274 TH2D *hKshortPtInvM =
dynamic_cast<TH2D*
>(
fListUserOutputs->FindObject(
"hKshortPtInvM"));
275 TH2D *hLambdaPtInvM =
dynamic_cast<TH2D*
>(
fListUserOutputs->FindObject(
"hLambdaPtInvM"));
276 TH2D *hAntiLaPtInvM =
dynamic_cast<TH2D*
>(
fListUserOutputs->FindObject(
"hAntiLaPtInvM"));
282 for (Int_t iV0=0; iV0<nV0s; iV0++) {
285 pV0AOD =
fEventAOD->GetV0(iV0);
if (!pV0AOD)
continue;
290 pV0ESD =
fEventESD->GetV0(iV0);
if (!pV0ESD)
continue;
300 if (pV0AOD) pV0AOD=0;
301 if (pV0ESD) pV0ESD=0;
314 if (pV0RD->GetOnFlyStatus())
return 0x0;
320 Double_t dV0Vtx[3]; pV0RD->GetXYZ(dV0Vtx);
321 Double_t dV0Radius = TMath::Sqrt(dV0Vtx[0]*dV0Vtx[0] + dV0Vtx[1]*dV0Vtx[1]);
324 Double_t dDausDCA = pV0RD->DcaV0Daughters();
if (dDausDCA>
fCutMaxDausDCA)
return 0x0;
325 Double_t dPosDCAtoPV = pV0RD->DcaPosToPrimVertex();
if (dPosDCAtoPV<
fCutMinDauDCAtoPV)
return 0x0;
326 Double_t dNegDCAtoPV = pV0RD->DcaNegToPrimVertex();
if (dNegDCAtoPV<
fCutMinDauDCAtoPV)
return 0x0;
329 AliAODTrack *pDauPosRD = (AliAODTrack*)pV0RD->GetDaughter(0);
if (!pDauPosRD)
return 0x0;
330 AliAODTrack *pDauNegRD = (AliAODTrack*)pV0RD->GetDaughter(1);
if (!pDauNegRD)
return 0x0;
332 if (!(pDauPosRD->GetStatus() & AliESDtrack::kTPCrefit))
return 0x0;
333 if (!(pDauNegRD->GetStatus() & AliESDtrack::kTPCrefit))
return 0x0;
335 if ((pDauPosRD->GetProdVertex()->GetType())==((Char_t)AliAODVertex::kKink))
return 0x0;
336 if ((pDauNegRD->GetProdVertex()->GetType())==((Char_t)AliAODVertex::kKink))
return 0x0;
338 Float_t dPosXrowsTPC = pDauPosRD->GetTPCClusterInfo(2,1);
339 Float_t dNegXrowsTPC = pDauNegRD->GetTPCClusterInfo(2,1);
340 Float_t dDauXrowsTPC = dPosXrowsTPC;
if (dDauXrowsTPC>dNegXrowsTPC) dDauXrowsTPC = dNegXrowsTPC;
343 UShort_t wPosTPCNClsF = pDauPosRD->GetTPCNclsF();
if (wPosTPCNClsF<=0)
return 0x0;
344 UShort_t wNegTPCNClsF = pDauNegRD->GetTPCNclsF();
if (wNegTPCNClsF<=0)
return 0x0;
345 Double_t dPosXrowsOverFindableClusTPC = ((Double_t)dPosXrowsTPC) / ((Double_t)wPosTPCNClsF);
346 Double_t dNegXrowsOverFindableClusTPC = ((Double_t)dNegXrowsTPC) / ((Double_t)wNegTPCNClsF);
348 Double_t dDauXrowsOverFindableClusTPC = dPosXrowsOverFindableClusTPC;
349 if (dDauXrowsOverFindableClusTPC>dNegXrowsOverFindableClusTPC) dDauXrowsOverFindableClusTPC = dNegXrowsOverFindableClusTPC;
353 Short_t nPosCharge = pDauPosRD->Charge();
354 Short_t nNegCharge = pDauNegRD->Charge();
355 if ((nPosCharge==0) || (nNegCharge==0) || (nPosCharge==nNegCharge))
return 0x0;
357 Double_t dPosPxPyPz[3] = { 0., 0., 0. };
358 Double_t dNegPxPyPz[3] = { 0., 0., 0. };
359 if ((nPosCharge<0) && (nNegCharge>0)) {
360 pDauPosRD = (AliAODTrack*)pV0RD->GetDaughter(1);
361 pDauNegRD = (AliAODTrack*)pV0RD->GetDaughter(0);
363 dPosPxPyPz[0] = pV0RD->MomNegX(); dPosPxPyPz[1] = pV0RD->MomNegY(); dPosPxPyPz[2] = pV0RD->MomNegZ();
364 dNegPxPyPz[0] = pV0RD->MomPosX(); dNegPxPyPz[1] = pV0RD->MomPosY(); dNegPxPyPz[2] = pV0RD->MomPosZ();
366 dPosPxPyPz[0] = pV0RD->MomPosX(); dPosPxPyPz[1] = pV0RD->MomPosY(); dPosPxPyPz[2] = pV0RD->MomPosZ();
367 dNegPxPyPz[0] = pV0RD->MomNegX(); dNegPxPyPz[1] = pV0RD->MomNegY(); dNegPxPyPz[2] = pV0RD->MomNegZ();
370 TVector3 v3Pos(dPosPxPyPz);
371 TVector3 v3Neg(dNegPxPyPz);
378 Int_t inp = TMath::Abs(pDauPosRD->GetLabel());
if (inp<0)
return 0x0;
379 Int_t inn = TMath::Abs(pDauNegRD->GetLabel());
if (inn<0)
return 0x0;
380 AliAODMCParticle *pDauPosMC = (AliAODMCParticle*)MCEvent()->GetTrack(inp);
if (!pDauPosMC)
return 0x0;
381 AliAODMCParticle *pDauNegMC = (AliAODMCParticle*)MCEvent()->GetTrack(inn);
if (!pDauNegMC)
return 0x0;
383 Int_t imp = pDauPosMC->GetMother();
if (imp<0)
return 0x0;
384 Int_t imn = pDauNegMC->GetMother();
if (imn<0)
return 0x0;
385 if (imp != imn)
return 0x0;
387 AliAODMCParticle *pV0MC = (AliAODMCParticle*)MCEvent()->GetTrack(imp);
if (!pV0MC)
return 0x0;
390 Int_t idvMC = pV0MC->GetPdgCode();
391 Int_t idp = pDauPosMC->GetPdgCode();
392 Int_t idn = pDauNegMC->GetPdgCode();
393 Bool_t bIsKshort = ((idp==211) && (idn==-211) && (idvMC== 310));
394 Bool_t bIsLambda = ((idp==2212) && (idn==-211) && (idvMC== 3122));
395 Bool_t bIsAntiLa = ((idp==211) && (idn==-2212) && (idvMC==-3122));
396 if (!(bIsKshort || bIsLambda || bIsAntiLa))
return 0x0;
407 Double_t dMotherPt = 0.;
408 Double_t dMotherEta = 0.;
409 Double_t dMotherRap = 0.;
410 if (bIsLambda || bIsAntiLa) {
411 Int_t imv = pV0MC->GetMother();
if (imv>=0) {
412 AliAODMCParticle *pMother = (AliAODMCParticle*)MCEvent()->GetTrack(imv);
415 idmMC = pMother->GetPdgCode();
416 if ((bIsLambda && ((idmMC== 3312) || (idmMC== 3322))) ||
417 (bIsAntiLa && ((idmMC==-3312) || (idmMC==-3322)))) {
418 dMotherPt = pMother->Pt();
419 dMotherEta = pMother->Eta();
420 dMotherRap = pMother->Y();
432 Double_t dV0CosPA = pV0RD->CosPointingAngle(
fPrimaryVtx);
443 if (!(bIsKshort || bIsLambda || bIsAntiLa))
return 0x0;
446 Double_t dV0DistToPV = 0.;
448 Double_t dV0DistToPVoverP = TMath::Sqrt(dV0DistToPV) / (pV0RD->P()+1e-10);
459 if (!(bIsKshort || bIsLambda || bIsAntiLa))
return 0x0;
462 Double_t dV0ArmFrac = pV0RD->PtArmV0() / (TMath::Abs(pV0RD->AlphaV0())+1e-12);
473 if (!(bIsKshort || bIsLambda || bIsAntiLa))
return 0x0;
478 TLorentzVector vPosPion; vPosPion.SetVectM(v3Pos,
fgkMassPion);
479 TLorentzVector vNegPion; vNegPion.SetVectM(v3Neg,
fgkMassPion);
480 TLorentzVector vKshort = vPosPion + vNegPion;
482 Double_t dKshortInvM = vKshort.M();
483 Double_t dLower = 0.430006 - 0.0110029*dV0Pt;
484 Double_t dUpper = 0.563707 + 0.0114979*dV0Pt;
485 if ((dKshortInvM<dLower) || (dKshortInvM>dUpper))
return 0x0;
488 TLorentzVector vPosProton; vPosProton.SetVectM(v3Pos,
fgkMassProton);
489 TLorentzVector vNegProton; vNegProton.SetVectM(v3Neg,
fgkMassProton);
491 TLorentzVector vLamvda = vPosProton + vNegPion;
492 TLorentzVector vAntiLa = vNegProton + vPosPion;
494 Double_t dLambdaInvM = vLamvda.M();
495 Double_t dAntiLaInvM = vAntiLa.M();
504 TLorentzVector vPosProton; vPosProton.SetVectM(v3Pos,
fgkMassProton);
505 TLorentzVector vNegPion; vNegPion.SetVectM(v3Neg,
fgkMassPion);
506 TLorentzVector vLamvda = vPosProton + vNegPion;
508 Double_t dLambdaInvM = vLamvda.M();
509 Double_t dLower = 1.09501 - 0.00523272*dV0Pt - 0.075269*TMath::Exp(-3.46339*dV0Pt);
510 Double_t dUpper = 1.13688 + 0.00527838*dV0Pt + 0.084222*TMath::Exp(-3.80595*dV0Pt);
511 if ((dLambdaInvM<dLower) || (dLambdaInvM>dUpper))
return 0x0;
514 TLorentzVector vPosPion; vPosPion.SetVectM(v3Pos,
fgkMassPion);
515 TLorentzVector vKshort = vPosPion + vNegPion;
517 Double_t dKshortInvM = vKshort.M();
525 TLorentzVector vNegProton; vNegProton.SetVectM(v3Neg,
fgkMassProton);
526 TLorentzVector vPosPion; vPosPion.SetVectM(v3Pos,
fgkMassPion);
527 TLorentzVector vAntiLa = vNegProton + vPosPion;
529 Double_t dAntiLaInvM = vAntiLa.M();
530 Double_t dLower = 1.09501 - 0.00523272*dV0Pt - 0.075269*TMath::Exp(-3.46339*dV0Pt);
531 Double_t dUpper = 1.13688 + 0.00527838*dV0Pt + 0.084222*TMath::Exp(-3.80595*dV0Pt);
532 if ((dAntiLaInvM<dLower) || (dAntiLaInvM>dUpper))
return 0x0;
535 TLorentzVector vNegPion; vNegPion.SetVectM(v3Neg,
fgkMassPion);
536 TLorentzVector vKshort = vPosPion + vNegPion;
538 Double_t dKshortInvM = vKshort.M();
546 Bool_t bPosInJC = kFALSE;
547 Bool_t bNegInJC = kFALSE;
556 dDauXrowsOverFindableClusTPC,
557 v3Pos.Px(), v3Pos.Py(), v3Pos.Pz(),
558 v3Neg.Px(), v3Neg.Py(), v3Neg.Pz(),
560 idvMC, wsvMC, pV0MC->Px(), pV0MC->Py(), pV0MC->Pz(), pV0MC->E(),
561 idmMC, wsmMC, dMotherPt, dMotherEta, dMotherRap);
574 AliStack *pStack = MCEvent()->Stack();
if (!pStack)
return 0x0;
575 Int_t nPrimary = pStack->GetNprimary();
578 if (pV0RD->GetOnFlyStatus())
return 0x0;
584 Double_t dV0Vtx[3]; pV0RD->GetXYZ(dV0Vtx[0], dV0Vtx[1], dV0Vtx[2]);
585 Double_t dV0Radius = TMath::Sqrt(dV0Vtx[0]*dV0Vtx[0] + dV0Vtx[1]*dV0Vtx[1]);
588 Double_t dDausDCA = pV0RD->GetDcaV0Daughters();
if (dDausDCA>
fCutMaxDausDCA)
return 0x0;
591 Int_t nPosIndex = TMath::Abs(pV0RD->GetPindex());
if (nPosIndex<0)
return 0x0;
592 Int_t nNegIndex = TMath::Abs(pV0RD->GetNindex());
if (nNegIndex<0)
return 0x0;
594 AliESDtrack *pDauPosRD =
fEventESD->GetTrack(nPosIndex);
if (!pDauPosRD)
return 0x0;
595 AliESDtrack *pDauNegRD =
fEventESD->GetTrack(nNegIndex);
if (!pDauNegRD)
return 0x0;
597 Double_t dMegField =
fEventESD->GetMagneticField();
602 if (!(pDauPosRD->GetStatus() & AliESDtrack::kTPCrefit))
return 0x0;
603 if (!(pDauNegRD->GetStatus() & AliESDtrack::kTPCrefit))
return 0x0;
604 if ((pDauPosRD->GetKinkIndex(0)>0) || (pDauNegRD->GetKinkIndex(0)>0))
return 0x0;
606 Float_t dPosXrowsTPC = pDauPosRD->GetTPCClusterInfo(2,1);
607 Float_t dNegXrowsTPC = pDauNegRD->GetTPCClusterInfo(2,1);
608 Float_t dDauXrowsTPC = dPosXrowsTPC;
if (dDauXrowsTPC>dNegXrowsTPC) dDauXrowsTPC = dNegXrowsTPC;
611 UShort_t wPosTPCNClsF = pDauPosRD->GetTPCNclsF();
if (wPosTPCNClsF<=0)
return 0x0;
612 UShort_t wNegTPCNClsF = pDauNegRD->GetTPCNclsF();
if (wNegTPCNClsF<=0)
return 0x0;
613 Double_t dPosXrowsOverFindableClusTPC = ((Double_t)dPosXrowsTPC) / ((Double_t)wPosTPCNClsF);
614 Double_t dNegXrowsOverFindableClusTPC = ((Double_t)dNegXrowsTPC) / ((Double_t)wNegTPCNClsF);
616 Double_t dDauXrowsOverFindableClusTPC = dPosXrowsOverFindableClusTPC;
617 if (dDauXrowsOverFindableClusTPC>dNegXrowsOverFindableClusTPC) dDauXrowsOverFindableClusTPC = dNegXrowsOverFindableClusTPC;
621 Short_t nPosCharge = pDauPosRD->Charge();
622 Short_t nNegCharge = pDauNegRD->Charge();
623 if ((nPosCharge==0) || (nNegCharge==0) || (nPosCharge==nNegCharge))
return 0x0;
625 Double_t dPosPxPyPz[3] = { 0., 0., 0. };
626 Double_t dNegPxPyPz[3] = { 0., 0., 0. };
627 if ((nPosCharge<0) && (nNegCharge>0)) {
628 pDauPosRD =
fEventESD->GetTrack(nNegIndex);
629 pDauNegRD =
fEventESD->GetTrack(nPosIndex);
631 pV0RD->GetNPxPyPz(dPosPxPyPz[0], dPosPxPyPz[1], dPosPxPyPz[2]);
632 pV0RD->GetPPxPyPz(dNegPxPyPz[0], dNegPxPyPz[1], dNegPxPyPz[2]);
634 pV0RD->GetPPxPyPz(dPosPxPyPz[0], dPosPxPyPz[1], dPosPxPyPz[2]);
635 pV0RD->GetNPxPyPz(dNegPxPyPz[0], dNegPxPyPz[1], dNegPxPyPz[2]);
638 TVector3 v3Pos(dPosPxPyPz);
639 TVector3 v3Neg(dNegPxPyPz);
646 Int_t inp = TMath::Abs(pDauPosRD->GetLabel());
if (inp<0)
return 0x0;
647 Int_t inn = TMath::Abs(pDauNegRD->GetLabel());
if (inn<0)
return 0x0;
648 TParticle *pDauPosMC = ((AliMCParticle*)MCEvent()->GetTrack(inp))->Particle();
if (!pDauPosMC)
return 0x0;
649 TParticle *pDauNegMC = ((AliMCParticle*)MCEvent()->GetTrack(inn))->Particle();
if (!pDauNegMC)
return 0x0;
651 Int_t imp = pDauPosMC->GetFirstMother();
if (imp<0)
return 0x0;
652 Int_t imn = pDauNegMC->GetFirstMother();
if (imn<0)
return 0x0;
653 if (imp != imn)
return 0x0;
655 TParticle *pV0MC = ((AliMCParticle*)MCEvent()->GetTrack(imp))->Particle();
if (!pV0MC)
return 0x0;
658 Int_t idvMC = pV0MC->GetPdgCode();
659 Int_t idp = pDauPosMC->GetPdgCode();
660 Int_t idn = pDauNegMC->GetPdgCode();
661 Bool_t bIsKshort = ((idp==211) && (idn==-211) && (idvMC== 310));
662 Bool_t bIsLambda = ((idp==2212) && (idn==-211) && (idvMC== 3122));
663 Bool_t bIsAntiLa = ((idp==211) && (idn==-2212) && (idvMC==-3122));
664 if (!(bIsKshort || bIsLambda || bIsAntiLa))
return 0x0;
675 Double_t dMotherPt = 0.;
676 Double_t dMotherEta = 0.;
677 Double_t dMotherRap = 0.;
678 if (bIsLambda || bIsAntiLa) {
679 Int_t imv = pV0MC->GetFirstMother();
if (imv>=0) {
680 TParticle *pMother = ((AliMCParticle*)MCEvent()->GetTrack(imv))->Particle();
683 idmMC = pMother->GetPdgCode();
684 if ((bIsLambda && ((idmMC== 3312) || (idmMC== 3322))) ||
685 (bIsAntiLa && ((idmMC==-3312) || (idmMC==-3322)))) {
686 dMotherPt = pMother->Pt();
687 dMotherEta = pMother->Eta();
688 dMotherRap = pMother->Y();
711 if (!(bIsKshort || bIsLambda || bIsAntiLa))
return 0x0;
714 Double_t dV0DistToPV = 0.;
716 Double_t dV0DistToPVoverP = TMath::Sqrt(dV0DistToPV) / (pV0RD->P()+1e-10);
727 if (!(bIsKshort || bIsLambda || bIsAntiLa))
return 0x0;
730 Double_t dV0ArmFrac = pV0RD->PtArmV0() / (TMath::Abs(pV0RD->AlphaV0())+1e-12);
741 if (!(bIsKshort || bIsLambda || bIsAntiLa))
return 0x0;
747 TLorentzVector vPosPion; vPosPion.SetVectM(v3Pos,
fgkMassPion);
748 TLorentzVector vNegPion; vNegPion.SetVectM(v3Neg,
fgkMassPion);
749 TLorentzVector vKshort = vPosPion + vNegPion;
751 Double_t dKshortInvM = vKshort.M();
752 Double_t dLower = 0.430006 - 0.0110029*dV0Pt;
753 Double_t dUpper = 0.563707 + 0.0114979*dV0Pt;
754 if ((dKshortInvM<dLower) || (dKshortInvM>dUpper))
return 0x0;
757 TLorentzVector vPosProton; vPosProton.SetVectM(v3Pos,
fgkMassProton);
758 TLorentzVector vNegProton; vNegProton.SetVectM(v3Neg,
fgkMassProton);
760 TLorentzVector vLamvda = vPosProton + vNegPion;
761 TLorentzVector vAntiLa = vNegProton + vPosPion;
763 Double_t dLambdaInvM = vLamvda.M();
764 Double_t dAntiLaInvM = vAntiLa.M();
773 TLorentzVector vPosProton; vPosProton.SetVectM(v3Pos,
fgkMassProton);
774 TLorentzVector vNegPion; vNegPion.SetVectM(v3Neg,
fgkMassPion);
775 TLorentzVector vLamvda = vPosProton + vNegPion;
777 Double_t dLambdaInvM = vLamvda.M();
778 Double_t dLower = 1.09501 - 0.00523272*dV0Pt - 0.075269*TMath::Exp(-3.46339*dV0Pt);
779 Double_t dUpper = 1.13688 + 0.00527838*dV0Pt + 0.084222*TMath::Exp(-3.80595*dV0Pt);
780 if ((dLambdaInvM<dLower) || (dLambdaInvM>dUpper))
return 0x0;
783 TLorentzVector vPosPion; vPosPion.SetVectM(v3Pos,
fgkMassPion);
784 TLorentzVector vKshort = vPosPion + vNegPion;
786 Double_t dKshortInvM = vKshort.M();
794 TLorentzVector vNegProton; vNegProton.SetVectM(v3Neg,
fgkMassProton);
795 TLorentzVector vPosPion; vPosPion.SetVectM(v3Pos,
fgkMassPion);
796 TLorentzVector vAntiLa = vNegProton + vPosPion;
798 Double_t dAntiLaInvM = vAntiLa.M();
799 Double_t dLower = 1.09501 - 0.00523272*dV0Pt - 0.075269*TMath::Exp(-3.46339*dV0Pt);
800 Double_t dUpper = 1.13688 + 0.00527838*dV0Pt + 0.084222*TMath::Exp(-3.80595*dV0Pt);
801 if ((dAntiLaInvM<dLower) || (dAntiLaInvM>dUpper))
return 0x0;
804 TLorentzVector vNegPion; vNegPion.SetVectM(v3Neg,
fgkMassPion);
805 TLorentzVector vKshort = vPosPion + vNegPion;
807 Double_t dKshortInvM = vKshort.M();
815 Bool_t bPosInJC = kFALSE;
816 Bool_t bNegInJC = kFALSE;
825 dDauXrowsOverFindableClusTPC,
826 v3Pos.Px(), v3Pos.Py(), v3Pos.Pz(),
827 v3Neg.Px(), v3Neg.Py(), v3Neg.Pz(),
829 idvMC, wsvMC, pV0MC->Px(), pV0MC->Py(), pV0MC->Pz(), pV0MC->Energy(),
830 idmMC, wsmMC, dMotherPt, dMotherEta, dMotherRap);
848 fCentInfo = InputEvent()->GetCentrality();
852 fEventAOD =
dynamic_cast<AliAODEvent*
>(InputEvent());
853 fEventESD =
dynamic_cast<AliESDEvent*
>(InputEvent());
856 fRespoPID = fInputHandler->GetPIDResponse();
860 if (MCEvent()->GetNumberOfTracks()<=0)
return (
fEventAcptMask==0);
865 AliHeader *pHeader = MCEvent()->Header();
if (!pHeader)
return (
fEventAcptMask==0);
868 AliGenDPMjetEventHeader *pDPMjetH =
dynamic_cast<AliGenDPMjetEventHeader*
>(pHeader->GenEventHeader());
871 Int_t nd0=0, nd1=0, nd2=0; pDPMjetH->GetNDiffractive(nd1, nd2, nd0);
872 if ((nd1+nd2) != (pDPMjetH->ProjectileParticipants() + pDPMjetH->TargetParticipants()))
return (
fEventAcptMask==0);
889 UInt_t wMask = fInputHandler->IsEventSelected();
896 const AliVVertex *pVertex = InputEvent()->GetPrimaryVertex();
if (!pVertex)
return (
fEventAcptMask==0);
936 if ((!(pVtxPri->GetStatus())) && (!(pVtxSPD->GetStatus())) && (!(pVtxTrk->GetStatus())))
return (
fEventAcptMask==0);
962 AliV0vertexer aV0vtxer;
963 aV0vtxer.SetDefaultCuts(dCuts);
1006 Float_t dV0M =
fCentInfo->GetCentralityPercentile(
"V0M");
1007 Float_t dV0A =
fCentInfo->GetCentralityPercentile(
"V0A");
1008 Float_t dCL1 =
fCentInfo->GetCentralityPercentile(
"CL1");
1009 Float_t dZNA =
fCentInfo->GetCentralityPercentile(
"ZNA");
1056 Bool_t bStatusTmpH = TH1::AddDirectoryStatus();
1057 TH1::AddDirectory(kFALSE);
1061 h1 =
new TH1D(
"hEventAccCheck_V0M",
"", 210, -10., 200.); h1->Sumw2();
fListUserOutputs->Add(h1);
1062 h1 =
new TH1D(
"hEventAccCheck_V0A",
"", 210, -10., 200.); h1->Sumw2();
fListUserOutputs->Add(h1);
1063 h1 =
new TH1D(
"hEventAccCheck_CL1",
"", 210, -10., 200.); h1->Sumw2();
fListUserOutputs->Add(h1);
1064 h1 =
new TH1D(
"hEventAccCheck_ZNA",
"", 210, -10., 200.); h1->Sumw2();
fListUserOutputs->Add(h1);
1066 h1 =
new TH1D(
"hEventAccMult_V0M",
"", 210, -10., 200.); h1->Sumw2();
fListUserOutputs->Add(h1);
1067 h1 =
new TH1D(
"hEventAccMult_V0A",
"", 210, -10., 200.); h1->Sumw2();
fListUserOutputs->Add(h1);
1068 h1 =
new TH1D(
"hEventAccMult_CL1",
"", 210, -10., 200.); h1->Sumw2();
fListUserOutputs->Add(h1);
1069 h1 =
new TH1D(
"hEventAccMult_ZNA",
"", 210, -10., 200.); h1->Sumw2();
fListUserOutputs->Add(h1);
1071 h1 =
new TH1D(
"hEventAccTrigger_V0M",
"", 210, -10., 200.); h1->Sumw2();
fListUserOutputs->Add(h1);
1072 h1 =
new TH1D(
"hEventAccTrigger_V0A",
"", 210, -10., 200.); h1->Sumw2();
fListUserOutputs->Add(h1);
1073 h1 =
new TH1D(
"hEventAccTrigger_CL1",
"", 210, -10., 200.); h1->Sumw2();
fListUserOutputs->Add(h1);
1074 h1 =
new TH1D(
"hEventAccTrigger_ZNA",
"", 210, -10., 200.); h1->Sumw2();
fListUserOutputs->Add(h1);
1076 h1 =
new TH1D(
"hEventAccVertex_V0M",
"", 210, -10., 200.); h1->Sumw2();
fListUserOutputs->Add(h1);
1077 h1 =
new TH1D(
"hEventAccVertex_V0A",
"", 210, -10., 200.); h1->Sumw2();
fListUserOutputs->Add(h1);
1078 h1 =
new TH1D(
"hEventAccVertex_CL1",
"", 210, -10., 200.); h1->Sumw2();
fListUserOutputs->Add(h1);
1079 h1 =
new TH1D(
"hEventAccVertex_ZNA",
"", 210, -10., 200.); h1->Sumw2();
fListUserOutputs->Add(h1);
1081 h1 =
new TH1D(
"hEventAccPileup_V0M",
"", 210, -10., 200.); h1->Sumw2();
fListUserOutputs->Add(h1);
1082 h1 =
new TH1D(
"hEventAccPileup_V0A",
"", 210, -10., 200.); h1->Sumw2();
fListUserOutputs->Add(h1);
1083 h1 =
new TH1D(
"hEventAccPileup_CL1",
"", 210, -10., 200.); h1->Sumw2();
fListUserOutputs->Add(h1);
1084 h1 =
new TH1D(
"hEventAccPileup_ZNA",
"", 210, -10., 200.); h1->Sumw2();
fListUserOutputs->Add(h1);
1097 TH1::AddDirectory(bStatusTmpH);
void FillAntiLaPtInvM(TH2D *h)
Float_t fCutMaxLambdaSigmaTPC
static const Double_t fgkMassLambda
Double_t fCutMinKshortDeltaM
virtual ~AliAnalysisTaskSEPicoV0MakerMC()
void SetV0Cuts(Double_t d[14])
Double_t fCutMinKshortCosPA
AliAnalysisTaskSEPicoV0MakerMC()
Double_t fCutMinLambdaDeletaM
AliPIDResponse * fRespoPID
Double_t fCutMinDauXrowsOverFindableClusTPC
Double_t fCutMaxKshortArmFrac
Float_t fCutMinDauXrowsTPC
Double_t fCutMaxLambdaArmFrac
Float_t fCutMaxKshortSigmaTPC
static const Double_t fgkMassProton
AliPicoV0MC * SelectV0Candidate(AliAODv0 const *pV0)
virtual void Terminate(Option_t *opt)
Double_t fCutMaxKshortCtau
AliCentrality * fCentInfo
TClonesArray * fPicoV0sClArr
Int_t fCutMinEventVtxContr
Float_t fCutMaxEventVzAbs
Double_t fCutMinLambdaCosPA
AliAnalysisUtils * fAnaUtils
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
void FillLambdaPtInvM(TH2D *h)
static const Double_t fgkMassPion
Double_t fCutMaxLambdaCtau
void FillKshortPtInvM(TH2D *h)
static const Double_t fgkMassKshort
Double_t fCutMinDauDCAtoPV
virtual void UserCreateOutputObjects()
virtual void UserExec(Option_t *opt)