diff --git a/PWGUD/Tasks/exclusiveRhoTo4Pi.cxx b/PWGUD/Tasks/exclusiveRhoTo4Pi.cxx index b19fc4c2d30..3c570a4efa3 100644 --- a/PWGUD/Tasks/exclusiveRhoTo4Pi.cxx +++ b/PWGUD/Tasks/exclusiveRhoTo4Pi.cxx @@ -57,6 +57,12 @@ struct ExclusiveRhoTo4Pi { int numFourPionTracks = 4; int numPiPlus = 2; int numPiMinus = 2; + // Numbers for background estimation + int zero = 0; + int one = 1; + int three = 3; + int four = 4; + // PDG Codes and rho mass double mRho0 = 0.77526; // GeV/c^2 int rhoPrime = 30113; // Pb-Pb at 5.36 TeV @@ -112,7 +118,8 @@ struct ExclusiveRhoTo4Pi { { // QA plots: Event and Track Counter histosDataCounter.add("EventsCounts_vs_runNo", "Event Counter Run by Run; Run Number; Number of Events", kTH2F, {{113, 0, 113}, {14, 0, 14}}); - histosDataCounter.add("TracksCounts_vs_runNo", "Track Counter Run by Run; Run Number; Number of Tracks", kTH2F, {{113, 0, 113}, {14, 0, 14}}); + histosDataCounter.add("TracksCounts_vs_runNo", "Track Counter Run by Run; Run Number; Number of Track", kTH2F, {{113, 0, 113}, {14, 0, 14}}); + histosDataCounter.add("LostInTrackCut_vs_runNo", "Track Counter Run by Run; Run Number; Number of Tracks", kTH2F, {{113, 0, 113}, {14, 0, 14}}); // QA plots: event selection-selected events histosQA.add("Events/selected/UPCmode", "UPC mode; Events", kTH1F, {{5, 0, 5}}); histosQA.add("Events/selected/GapSide", "Gap Side;Gap Side; Events", kTH1F, {{4, 0, 4}}); @@ -235,19 +242,19 @@ struct ExclusiveRhoTo4Pi { histosKin.add("all", ";pT [GeV/c]; #eta;#varphi", kTH3F, {pTAxis, etaAxis, phiAxis}); histosKin.add("selected", ";pT [GeV/c]; #eta;#varphi", kTH3F, {pTAxis, etaAxis, phiAxis}); histosKin.add("pions", ";pT [GeV/c]; #eta;#varphi", kTH3F, {pTAxis, etaAxis, phiAxis}); - histosKin.add("pions-from-4pi", ";pT [GeV/c]; #eta;#varphi;y ", kTHnSparseF, {pTAxis, etaAxis, phiAxis, rapidityAxis}); + histosKin.add("pions-from-4pion", ";pT [GeV/c]; #eta;#varphi;y ", kTHnSparseF, {pTAxis, etaAxis, phiAxis, rapidityAxis}); // Rho Prime Kinematics - histos4piKin.add("two-pion-mass", ";m_{#pi^{+}#pi^{-}} [GeV/c^2];m_{#pi^{+}#pi^{-}} [GeV/c^2];m_{#pi^{+}#pi^{-}} [GeV/c^2];m_{#pi^{+}#pi^{-}} [GeV/c^2];m_{4#pi} [GeV/c^{2}]", kTHnSparseF, {{100, 0, 2}, {100, 0, 2}, {100, 0, 2}, {100, 0, 2}, invMassAxis}); - histos4piKin.add("2PiPlusPiMinusMass", ";m_{#pi^{+}#pi^{+}#pi^{-}} [GeV/c^2];m_{#pi^{+}#pi^{+}#pi^{-}} [GeV/c^2];m_{#pi^{+}#pi^{-}#pi^{+}}#pi^{-}} [GeV/c^2]", kTHnSparseF, {{200, 0, 2.5}, {200, 0, 2.5}, invMassAxis}); - histos4piKin.add("2PiMinusPiPlusMass", ";m_{#pi^{-}#pi^{-}#pi^{+}} [GeV/c^2];m_{#pi^{-}#pi^{-}#pi^{+}} [GeV/c^2];m_{#pi^{+}#pi^{-}#pi^{+}}#pi^{-}} [GeV/c^2]", kTHnSparseF, {{200, 0, 2.5}, {200, 0, 2.5}, invMassAxis}); + histos4piKin.add("two-pion", ";p_{T}^{4#pi} [GeV/c] ;m_{#pi^{+}#pi^{-}} [GeV/c^2];m_{#pi^{+}#pi^{-}} [GeV/c^2];m_{#pi^{+}#pi^{-}} [GeV/c^2];m_{#pi^{+}#pi^{-}} [GeV/c^2];m_{4#pi} [GeV/c^{2}]", kTHnSparseF, {{100, 0, 2}, {100, 0, 2}, {100, 0, 2}, {100, 0, 2}, invMassAxis}); histos4piKin.add("zero-charge", ";pT [GeV/c]; #eta; #varphi [rad];y; m_{4#pi} [GeV/c^{2}]; Collin-Soper cos(#theta); Collin-Soper #varphi [rad];Run Number", kTHnSparseF, {pTAxis, etaAxis, phiAxis, rapidityAxis, invMassAxis, cosThetaAxis, phiAxis, {113, 0, 113}}); histos4piKin.add("non-zero-charge", ";pT [GeV/c]; #eta; #varphi [rad];y; m_{4#pi} [GeV/c^{2}];Run Number", kTHnSparseF, {pTAxis, etaAxis, phiAxis, rapidityAxis, invMassAxis, {113, 0, 113}}); + histos4piKin.add("3piMinus-1piPlus", ";pT [GeV/c]; #eta; #varphi [rad];y; m_{4#pi} [GeV/c^{2}]; Run Number", kTHnSparseF, {pTAxis, etaAxis, phiAxis, rapidityAxis, invMassAxis, {113, 0, 113}}); + histos4piKin.add("3piPlus-1piMinus", ";pT [GeV/c]; #eta; #varphi [rad];y; m_{4#pi} [GeV/c^{2}]; Run Number", kTHnSparseF, {pTAxis, etaAxis, phiAxis, rapidityAxis, invMassAxis, {113, 0, 113}}); + histos4piKin.add("4piPlus", ";pT [GeV/c]; #eta; #varphi [rad];y; m_{4#pi} [GeV/c^{2}]; Run Number", kTHnSparseF, {pTAxis, etaAxis, phiAxis, rapidityAxis, invMassAxis, {113, 0, 113}}); + histos4piKin.add("4piMinus", ";pT [GeV/c]; #eta; #varphi [rad];y; m_{4#pi} [GeV/c^{2}]; Run Number", kTHnSparseF, {pTAxis, etaAxis, phiAxis, rapidityAxis, invMassAxis, {113, 0, 113}}); // MC truth - histosMCtruth.add("pions-from-4pi", ";pT [GeV/c]; #eta;#varphi;y ", kTHnSparseF, {pTAxis, etaAxis, phiAxis, rapidityAxis, {113, 0, 113}}); + histosMCtruth.add("4-pi-pions", ";pT [GeV/c]; #eta;#varphi;y ", kTHnSparseF, {pTAxis, etaAxis, phiAxis, rapidityAxis, {113, 0, 113}}); histosMCtruth.add("Four-pion", ";pT [GeV/c]; #eta; #varphi [rad];y; m_{4#pi} [GeV/c^{2}];Run Number", kTHnSparseF, {pTAxis, etaAxis, phiAxis, rapidityAxis, invMassAxis, {113, 0, 113}}); - - //___________________________________________________________________________________________________________________________ - + //_______________________________________________________________________________________________________________________________________________ setHistBinLabels(); } // End of init function @@ -460,25 +467,19 @@ struct ExclusiveRhoTo4Pi { PxPyPzMVector p4(selectedPionMinusTracks[1].px(), selectedPionMinusTracks[1].py(), selectedPionMinusTracks[1].pz(), o2::constants::physics::MassPionCharged); // Kinematics for pions from 4 pion events - histosKin.fill(HIST("pions-from-4pi"), p1.Pt(), p1.Eta(), p1.Phi(), p1.Rapidity()); - histosKin.fill(HIST("pions-from-4pi"), p2.Pt(), p2.Eta(), p2.Phi(), p2.Rapidity()); - histosKin.fill(HIST("pions-from-4pi"), p3.Pt(), p3.Eta(), p3.Phi(), p3.Rapidity()); - histosKin.fill(HIST("pions-from-4pi"), p4.Pt(), p4.Eta(), p4.Phi(), p4.Rapidity()); + histosKin.fill(HIST("pions-from-4pion"), p1.Pt(), p1.Eta(), p1.Phi(), p1.Rapidity()); + histosKin.fill(HIST("pions-from-4pion"), p2.Pt(), p2.Eta(), p2.Phi(), p2.Rapidity()); + histosKin.fill(HIST("pions-from-4pion"), p3.Pt(), p3.Eta(), p3.Phi(), p3.Rapidity()); + histosKin.fill(HIST("pions-from-4pion"), p4.Pt(), p4.Eta(), p4.Phi(), p4.Rapidity()); PxPyPzMVector p1234 = p1 + p2 + p3 + p4; PxPyPzMVector p13 = p1 + p3; PxPyPzMVector p14 = p1 + p4; PxPyPzMVector p23 = p2 + p3; PxPyPzMVector p24 = p2 + p4; - PxPyPzMVector p123 = p1 + p2 + p3; - PxPyPzMVector p124 = p1 + p2 + p4; - PxPyPzMVector p134 = p1 + p3 + p4; - PxPyPzMVector p234 = p2 + p3 + p4; // Two Pion Mass combinations - histos4piKin.fill(HIST("two-pion-mass"), p13.M(), p14.M(), p23.M(), p24.M(), p1234.M()); - histos4piKin.fill(HIST("2PiPlusPiMinusMass"), p123.M(), p124.M(), p1234.M()); - histos4piKin.fill(HIST("2PiMinusPiPlusMass"), p134.M(), p234.M(), p1234.M()); + histos4piKin.fill(HIST("two-pion"), p1234.Pt(), p13.M(), p14.M(), p23.M(), p24.M(), p1234.M()); double fourPiPhiPair1 = collinSoperPhi(p13, p1234); double fourPiPhiPair2 = collinSoperPhi(p14, p1234); @@ -513,6 +514,15 @@ struct ExclusiveRhoTo4Pi { PxPyPzMVector p4(selectedPionTracks[3].px(), selectedPionTracks[3].py(), selectedPionTracks[3].pz(), o2::constants::physics::MassPionCharged); PxPyPzMVector p1234 = p1 + p2 + p3 + p4; // Kinematics for 4 pion system from non 0 charge events + if (numPionMinusTracks == three && numPiPlusTracks == one) { + histos4piKin.fill(HIST("3piMinus-1piPlus"), p1234.Pt(), p1234.Eta(), p1234.Phi(), p1234.Rapidity(), p1234.M(), runIndex); + } else if (numPionMinusTracks == one && numPiPlusTracks == three) { + histos4piKin.fill(HIST("3piPlus-1piMinus"), p1234.Pt(), p1234.Eta(), p1234.Phi(), p1234.Rapidity(), p1234.M(), runIndex); + } else if (numPionMinusTracks == four && numPiPlusTracks == zero) { + histos4piKin.fill(HIST("4piMinus"), p1234.Pt(), p1234.Eta(), p1234.Phi(), p1234.Rapidity(), p1234.M(), runIndex); + } else if (numPionMinusTracks == zero && numPiPlusTracks == four) { + histos4piKin.fill(HIST("4piPlus"), p1234.Pt(), p1234.Eta(), p1234.Phi(), p1234.Rapidity(), p1234.M(), runIndex); + } histos4piKin.fill(HIST("non-zero-charge"), p1234.Pt(), p1234.Eta(), p1234.Phi(), p1234.Rapidity(), p1234.M(), runIndex); } // End of Analysis for non 0 charge events } // End of 4 Pion Analysis Process function for Pass5 Data @@ -586,74 +596,121 @@ struct ExclusiveRhoTo4Pi { { int runIndex = getRunNumberIndex(collision.runNumber()); // Check if the Event is reconstructed in UPC mode - if (collision.flags() != ifUPC) { + if ((collision.flags() != ifUPC) || (!sgSelector.isCBTHadronZdcOk(collision))) { return; } + + bool ifRejectedEvent = false; + for (const auto& track : tracks) { + + if (ifRejectedEvent) { + break; + } + histosDataCounter.fill(HIST("TracksCounts_vs_runNo"), runIndex, 0); PxPyPzMVector trackVector(track.px(), track.py(), track.pz(), o2::constants::physics::MassPionCharged); // is PV contributor if (track.isPVContributor() != useOnlyPVtracks) { + histosDataCounter.fill(HIST("LostInTrackCut_vs_runNo"), runIndex, 1); + ifRejectedEvent = true; continue; } histosDataCounter.fill(HIST("TracksCounts_vs_runNo"), runIndex, 1); + // pt cut if (trackVector.Pt() < pTcut) { + histosDataCounter.fill(HIST("LostInTrackCut_vs_runNo"), runIndex, 2); + ifRejectedEvent = true; continue; } histosDataCounter.fill(HIST("TracksCounts_vs_runNo"), runIndex, 2); + // eta cut if (std::abs(trackVector.Eta()) > etaCut) { + histosDataCounter.fill(HIST("LostInTrackCut_vs_runNo"), runIndex, 3); + ifRejectedEvent = true; continue; } histosDataCounter.fill(HIST("TracksCounts_vs_runNo"), runIndex, 3); + // DCA Z cut if (std::abs(track.dcaZ()) > dcaZcut) { + histosDataCounter.fill(HIST("LostInTrackCut_vs_runNo"), runIndex, 4); + ifRejectedEvent = true; continue; } histosDataCounter.fill(HIST("TracksCounts_vs_runNo"), runIndex, 4); + // DCA XY cut float maxDCAxy = 0.0105 + 0.035 / std::pow(trackVector.Pt(), 1.1); if (dcaXYcut == 0 && (std::fabs(track.dcaXY()) > maxDCAxy)) { + histosDataCounter.fill(HIST("LostInTrackCut_vs_runNo"), runIndex, 5); + ifRejectedEvent = true; continue; } else if (dcaXYcut != 0 && (std::fabs(track.dcaXY()) > dcaXYcut)) { + histosDataCounter.fill(HIST("LostInTrackCut_vs_runNo"), runIndex, 5); + ifRejectedEvent = true; continue; } histosDataCounter.fill(HIST("TracksCounts_vs_runNo"), runIndex, 5); + // ITS Track only if (useITStracksOnly && !track.hasITS()) { + histosDataCounter.fill(HIST("LostInTrackCut_vs_runNo"), runIndex, 6); + ifRejectedEvent = true; continue; } histosDataCounter.fill(HIST("TracksCounts_vs_runNo"), runIndex, 6); + // TPC Track only if (useTPCtracksOnly && !track.hasTPC()) { + histosDataCounter.fill(HIST("LostInTrackCut_vs_runNo"), runIndex, 7); + ifRejectedEvent = true; continue; } histosDataCounter.fill(HIST("TracksCounts_vs_runNo"), runIndex, 7); + // ITS Chi2 N Clusters cut if (track.hasITS() && track.itsChi2NCl() > itsChi2NClsCut) { + histosDataCounter.fill(HIST("LostInTrackCut_vs_runNo"), runIndex, 8); + ifRejectedEvent = true; continue; } histosDataCounter.fill(HIST("TracksCounts_vs_runNo"), runIndex, 8); + // TPC Chi2 N Clusters cut if (track.hasTPC() && track.tpcChi2NCl() > tpcChi2NClsCut) { + histosDataCounter.fill(HIST("LostInTrackCut_vs_runNo"), runIndex, 9); + ifRejectedEvent = true; continue; } histosDataCounter.fill(HIST("TracksCounts_vs_runNo"), runIndex, 9); + // TPC N Clusters Findable cut if (track.hasTPC() && track.tpcNClsFindable() < tpcNClsFindableCut) { + histosDataCounter.fill(HIST("LostInTrackCut_vs_runNo"), runIndex, 10); + ifRejectedEvent = true; continue; } histosDataCounter.fill(HIST("TracksCounts_vs_runNo"), runIndex, 10); + // Selection PID Pion if (ifPion(track, useTOF, nSigmaTPCcut, nSigmaTOFcut)) { histosDataCounter.fill(HIST("TracksCounts_vs_runNo"), runIndex, 11); if (track.sign() == 1) { histosDataCounter.fill(HIST("TracksCounts_vs_runNo"), runIndex, 12); + } else { + histosDataCounter.fill(HIST("LostInTrackCut_vs_runNo"), runIndex, 12); } if (track.sign() == -1) { histosDataCounter.fill(HIST("TracksCounts_vs_runNo"), runIndex, 13); + } else { + histosDataCounter.fill(HIST("LostInTrackCut_vs_runNo"), runIndex, 13); } + } else { + histosDataCounter.fill(HIST("LostInTrackCut_vs_runNo"), runIndex, 11); + ifRejectedEvent = true; } // End of Selection PID Pion } // End of loop over tracks } // End of processCounter function @@ -856,10 +913,10 @@ struct ExclusiveRhoTo4Pi { PxPyPzMVector p4(selectedPionMinusTracks[1].px(), selectedPionMinusTracks[1].py(), selectedPionMinusTracks[1].pz(), o2::constants::physics::MassPionCharged); // Kinematics for pions from 4 pion events - histosKin.fill(HIST("pions-from-4pi"), p1.Pt(), p1.Eta(), p1.Phi(), p1.Rapidity()); - histosKin.fill(HIST("pions-from-4pi"), p2.Pt(), p2.Eta(), p2.Phi(), p2.Rapidity()); - histosKin.fill(HIST("pions-from-4pi"), p3.Pt(), p3.Eta(), p3.Phi(), p3.Rapidity()); - histosKin.fill(HIST("pions-from-4pi"), p4.Pt(), p4.Eta(), p4.Phi(), p4.Rapidity()); + histosKin.fill(HIST("pions-from-4pion"), p1.Pt(), p1.Eta(), p1.Phi(), p1.Rapidity()); + histosKin.fill(HIST("pions-from-4pion"), p2.Pt(), p2.Eta(), p2.Phi(), p2.Rapidity()); + histosKin.fill(HIST("pions-from-4pion"), p3.Pt(), p3.Eta(), p3.Phi(), p3.Rapidity()); + histosKin.fill(HIST("pions-from-4pion"), p4.Pt(), p4.Eta(), p4.Phi(), p4.Rapidity()); PxPyPzMVector p1234 = p1 + p2 + p3 + p4; PxPyPzMVector p13 = p1 + p3; @@ -868,7 +925,7 @@ struct ExclusiveRhoTo4Pi { PxPyPzMVector p24 = p2 + p4; // Two Pion Mass combinations - histos4piKin.fill(HIST("two-pion-mass"), p13.M(), p14.M(), p23.M(), p24.M(), p1234.M()); + histos4piKin.fill(HIST("two-pion"), p13.M(), p14.M(), p23.M(), p24.M(), p1234.M()); double fourPiPhiPair1 = collinSoperPhi(p13, p1234); double fourPiPhiPair2 = collinSoperPhi(p14, p1234); @@ -884,6 +941,7 @@ struct ExclusiveRhoTo4Pi { double mDiff14 = std::abs((p14.M() - mRho0)); double mDiff23 = std::abs((p23.M() - mRho0)); double mDiff24 = std::abs((p24.M() - mRho0)); + if ((mDiff13 < mDiff14) && (mDiff13 < mDiff23) && (mDiff13 < mDiff24)) { histos4piKin.fill(HIST("zero-charge"), p1234.Pt(), p1234.Eta(), p1234.Phi(), p1234.Rapidity(), p1234.M(), fourPiCosThetaPair1, fourPiPhiPair1, runIndex); } else if ((mDiff14 < mDiff13) && (mDiff14 < mDiff23) && (mDiff14 < mDiff24)) { @@ -903,6 +961,15 @@ struct ExclusiveRhoTo4Pi { PxPyPzMVector p4(selectedPionTracks[3].px(), selectedPionTracks[3].py(), selectedPionTracks[3].pz(), o2::constants::physics::MassPionCharged); PxPyPzMVector p1234 = p1 + p2 + p3 + p4; // Kinematics for 4 pion system from non 0 charge events + if (numPionMinusTracks == three && numPiPlusTracks == one) { + histos4piKin.fill(HIST("3piMinus-1piPlus"), p1234.Pt(), p1234.Eta(), p1234.Phi(), p1234.Rapidity(), p1234.M(), runIndex); + } else if (numPionMinusTracks == one && numPiPlusTracks == three) { + histos4piKin.fill(HIST("3piPlus-1piMinus"), p1234.Pt(), p1234.Eta(), p1234.Phi(), p1234.Rapidity(), p1234.M(), runIndex); + } else if (numPionMinusTracks == four && numPiPlusTracks == zero) { + histos4piKin.fill(HIST("4piMinus"), p1234.Pt(), p1234.Eta(), p1234.Phi(), p1234.Rapidity(), p1234.M(), runIndex); + } else if (numPionMinusTracks == zero && numPiPlusTracks == four) { + histos4piKin.fill(HIST("4piPlus"), p1234.Pt(), p1234.Eta(), p1234.Phi(), p1234.Rapidity(), p1234.M(), runIndex); + } histos4piKin.fill(HIST("non-zero-charge"), p1234.Pt(), p1234.Eta(), p1234.Phi(), p1234.Rapidity(), p1234.M(), runIndex); } // End of Analysis for non 0 charge events } // End of 4 Pion Analysis Process function for Pass5 MC @@ -924,11 +991,11 @@ struct ExclusiveRhoTo4Pi { for (const auto& daughter : particle.daughters_as()) { PxPyPzMVector dVector(daughter.px(), daughter.py(), daughter.pz(), o2::constants::physics::MassPionCharged); if (daughter.pdgCode() == PDG_t::kPiPlus) { - histosMCtruth.fill(HIST("pions-from-4pi"), dVector.Pt(), dVector.Eta(), dVector.Phi(), dVector.Rapidity(), runIndex); + histosMCtruth.fill(HIST("4-pi-pions"), dVector.Pt(), dVector.Eta(), dVector.Phi(), dVector.Rapidity(), runIndex); p1234 = p1234 + dVector; } if (daughter.pdgCode() == PDG_t::kPiMinus) { - histosMCtruth.fill(HIST("pions-from-4pi"), dVector.Pt(), dVector.Eta(), dVector.Phi(), dVector.Rapidity(), runIndex); + histosMCtruth.fill(HIST("4-pi-pions"), dVector.Pt(), dVector.Eta(), dVector.Phi(), dVector.Rapidity(), runIndex); p1234 = p1234 + dVector; } } // End of loop over daughters @@ -1105,6 +1172,7 @@ struct ExclusiveRhoTo4Pi { auto h1 = histosDataCounter.get(HIST("EventsCounts_vs_runNo")); auto h2 = histosDataCounter.get(HIST("TracksCounts_vs_runNo")); + auto h21 = histosDataCounter.get(HIST("LostInTrackCut_vs_runNo")); auto h3 = histos4piKin.get(HIST("zero-charge")); auto h4 = histos4piKin.get(HIST("non-zero-charge")); @@ -1115,9 +1183,13 @@ struct ExclusiveRhoTo4Pi { } for (int i = 0; i < numTrackCuts; ++i) { h2->GetYaxis()->SetBinLabel(i + 1, trackLabels[i].c_str()); + h21->GetYaxis()->SetBinLabel(i + 1, trackLabels[i].c_str()); } for (int i = 0; i < numRunNums; ++i) { std::string runLabel = std::to_string(runNos[i]); + h1->GetXaxis()->SetBinLabel(i + 1, runLabel.c_str()); + h2->GetXaxis()->SetBinLabel(i + 1, runLabel.c_str()); + h21->GetXaxis()->SetBinLabel(i + 1, runLabel.c_str()); h3->GetAxis(7)->SetBinLabel(i + 1, runLabel.c_str()); h4->GetAxis(5)->SetBinLabel(i + 1, runLabel.c_str()); h5->GetAxis(5)->SetBinLabel(i + 1, runLabel.c_str());