diff --git a/PWGUD/Core/SGSelector.h b/PWGUD/Core/SGSelector.h index b9fc3ecf2e7..a80224ef82b 100644 --- a/PWGUD/Core/SGSelector.h +++ b/PWGUD/Core/SGSelector.h @@ -38,12 +38,15 @@ struct SelectionResult { namespace o2::aod::sgselector { enum TrueGap : int { - NoGap = -1, - SingleGapA = 0, - SingleGapC = 1, - DoubleGap = 2 + NoGap = -1, // no gap due to change of threshold(s) in any of FV0, FT0A, ZNA, FT0C, ZNC + SingleGapA = 0, // initially single gap at A side event + SingleGapC = 1, // initially single gap at C side event + DoubleGap = 2, // initially double gap event + NoUpc = 3, // initially no UPC event with default thresholds (FT0A=150, FT0C=50) + TrkOutOfRange = 4, // to many tracks (>100 default) + BadDoubleGap = 5 // unknows status of double gap check with changed thresholds }; -} +} // namespace o2::aod::sgselector class SGSelector { @@ -65,7 +68,7 @@ class SGSelector SelectionResult result; result.bc = &oldbc; if (collision.numContrib() < diffCuts.minNTracks() || collision.numContrib() > diffCuts.maxNTracks()) { - result.value = 4; + result.value = o2::aod::sgselector::TrkOutOfRange; // 4 return result; } auto newbc = oldbc; @@ -91,9 +94,9 @@ class SGSelector newbc = bc; gC = false; } - } + } // end of loop over bc range if (!gA && !gC) { - result.value = 3; + result.value = o2::aod::sgselector::NoUpc; // gap = 3 return result; } if (gA && gC) { // loop once again for so-called DG events to get the most active FT0 BC @@ -120,7 +123,8 @@ class SGSelector result.bc = &newbc; // LOGF(info, "Old BC: %i, New BC: %i",oldbc.globalBC(), newbc.globalBC()); result.bc = &newbc; - result.value = gA && gC ? 2 : (gA ? 0 : 1); + // result.value = gA && gC ? 2 : (gA ? 0 : 1); + result.value = gA && gC ? o2::aod::sgselector::DoubleGap : (gA ? o2::aod::sgselector::SingleGapA : o2::aod::sgselector::SingleGapC); return result; } template @@ -139,12 +143,12 @@ class SGSelector float fit_cut[3] = {fv0, ft0a, ft0c}; int gap = collision.gapSide(); int true_gap = gap; - float FV0A, FT0A, FT0C, ZNA, ZNC; - FV0A = collision.totalFV0AmplitudeA(); - FT0A = collision.totalFT0AmplitudeA(); - FT0C = collision.totalFT0AmplitudeC(); - ZNA = collision.energyCommonZNA(); - ZNC = collision.energyCommonZNC(); + // float FV0A, FT0A, FT0C, ZNA, ZNC; + const float FV0A = collision.totalFV0AmplitudeA(); + const float FT0A = collision.totalFT0AmplitudeA(); + const float FT0C = collision.totalFT0AmplitudeC(); + const float ZNA = collision.energyCommonZNA(); + const float ZNC = collision.energyCommonZNC(); if (gap == o2::aod::sgselector::SingleGapA) { // gap == 0 if (FV0A > fit_cut[0] || FT0A > fit_cut[1] || ZNA > zdc_cut) true_gap = o2::aod::sgselector::NoGap; // -1 @@ -152,16 +156,18 @@ class SGSelector if (FT0C > fit_cut[2] || ZNC > zdc_cut) true_gap = o2::aod::sgselector::NoGap; // -1 } else if (gap == o2::aod::sgselector::DoubleGap) { // gap == 2 - if ((FV0A > fit_cut[0] || FT0A > fit_cut[1] || ZNA > zdc_cut) && (FT0C > fit_cut[2] || ZNC > zdc_cut)) + if ((FV0A > fit_cut[0] || FT0A > fit_cut[1] || ZNA > zdc_cut) && (FT0C > fit_cut[2] || ZNC > zdc_cut)) { true_gap = o2::aod::sgselector::NoGap; // -1 - else if ((FV0A > fit_cut[0] || FT0A > fit_cut[1] || ZNA > zdc_cut) && (FT0C <= fit_cut[2] && ZNC <= zdc_cut)) + } else if ((FV0A > fit_cut[0] || FT0A > fit_cut[1] || ZNA > zdc_cut) && (FT0C <= fit_cut[2] && ZNC <= zdc_cut)) { true_gap = o2::aod::sgselector::SingleGapC; // 1 - else if ((FV0A <= fit_cut[0] && FT0A <= fit_cut[1] && ZNA <= zdc_cut) && (FT0C > fit_cut[2] || ZNC > zdc_cut)) + } else if ((FV0A <= fit_cut[0] && FT0A <= fit_cut[1] && ZNA <= zdc_cut) && (FT0C > fit_cut[2] || ZNC > zdc_cut)) { true_gap = o2::aod::sgselector::SingleGapA; // 0 - else if (FV0A <= fit_cut[0] && FT0A <= fit_cut[1] && ZNA <= zdc_cut && FT0C <= fit_cut[2] && ZNC <= zdc_cut) + } else if (FV0A <= fit_cut[0] && FT0A <= fit_cut[1] && ZNA <= zdc_cut && FT0C <= fit_cut[2] && ZNC <= zdc_cut) { true_gap = o2::aod::sgselector::DoubleGap; // 2 - else + } else { LOGF(info, "Something wrong with DG"); + true_gap = o2::aod::sgselector::BadDoubleGap; // 5 + } } return true_gap; } diff --git a/PWGUD/TableProducer/SGCandProducer.cxx b/PWGUD/TableProducer/SGCandProducer.cxx index 37fba3120db..df466cb95b3 100644 --- a/PWGUD/TableProducer/SGCandProducer.cxx +++ b/PWGUD/TableProducer/SGCandProducer.cxx @@ -217,8 +217,8 @@ struct SGCandProducer { // Cross sections in ub. Using dummy -1 if lumi estimator is not reliable float csTCE = 10.36e6; - float csZEM = 415.2e6; // see AN: https://alice-notes.web.cern.ch/node/1515 - float csZNC = 214.5e6; // see AN: https://alice-notes.web.cern.ch/node/1515 + const float csZEM = 415.2e6; // see AN: https://alice-notes.web.cern.ch/node/1515 + const float csZNC = 214.5e6; // see AN: https://alice-notes.web.cern.ch/node/1515 if (runNumber > 543437 && runNumber < 543514) { csTCE = 8.3e6; } @@ -326,14 +326,14 @@ struct SGCandProducer { getHist(TH1, histdir + "/Stat")->Fill(8., 1.); // - int trs = collision.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard) ? 1 : 0; - int trofs = collision.selection_bit(o2::aod::evsel::kNoCollInRofStandard) ? 1 : 0; - int hmpr = collision.selection_bit(o2::aod::evsel::kNoHighMultCollInPrevRof) ? 1 : 0; - int tfb = collision.selection_bit(o2::aod::evsel::kNoTimeFrameBorder) ? 1 : 0; - int itsROFb = collision.selection_bit(o2::aod::evsel::kNoITSROFrameBorder) ? 1 : 0; - int sbp = collision.selection_bit(o2::aod::evsel::kNoSameBunchPileup) ? 1 : 0; - int zVtxFT0vPv = collision.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV) ? 1 : 0; - int vtxITSTPC = collision.selection_bit(o2::aod::evsel::kIsVertexITSTPC) ? 1 : 0; + const int trs = collision.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard) ? 1 : 0; + const int trofs = collision.selection_bit(o2::aod::evsel::kNoCollInRofStandard) ? 1 : 0; + const int hmpr = collision.selection_bit(o2::aod::evsel::kNoHighMultCollInPrevRof) ? 1 : 0; + const int tfb = collision.selection_bit(o2::aod::evsel::kNoTimeFrameBorder) ? 1 : 0; + const int itsROFb = collision.selection_bit(o2::aod::evsel::kNoITSROFrameBorder) ? 1 : 0; + const int sbp = collision.selection_bit(o2::aod::evsel::kNoSameBunchPileup) ? 1 : 0; + const int zVtxFT0vPv = collision.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV) ? 1 : 0; + const int vtxITSTPC = collision.selection_bit(o2::aod::evsel::kIsVertexITSTPC) ? 1 : 0; auto bc = collision.template foundBC_as(); double ir = 0.; const uint64_t ts = bc.timestamp(); @@ -363,14 +363,14 @@ struct SGCandProducer { return; } upchelpers::FITInfo fitInfo{}; - uint8_t chFT0A = 0; - uint8_t chFT0C = 0; - uint8_t chFDDA = 0; - uint8_t chFDDC = 0; - uint8_t chFV0A = 0; - int occ = collision.trackOccupancyInTimeRange(); + const uint8_t chFT0A = 0; + const uint8_t chFT0C = 0; + const uint8_t chFDDA = 0; + const uint8_t chFDDC = 0; + const uint8_t chFV0A = 0; + const int occ = collision.trackOccupancyInTimeRange(); udhelpers::getFITinfo(fitInfo, newbc, bcs, ft0s, fv0as, fdds); - int upc_flag = (collision.flags() & dataformats::Vertex>::Flags::UPCMode) ? 1 : 0; + const int upc_flag = (collision.flags() & dataformats::Vertex>::Flags::UPCMode) ? 1 : 0; // update SG candidates tables outputCollisions(bc.globalBC(), bc.runNumber(), collision.posX(), collision.posY(), collision.posZ(), upc_flag, diff --git a/PWGUD/Tasks/upcTauTau13topo.cxx b/PWGUD/Tasks/upcTauTau13topo.cxx index b3ff71675cc..676181f8de0 100644 --- a/PWGUD/Tasks/upcTauTau13topo.cxx +++ b/PWGUD/Tasks/upcTauTau13topo.cxx @@ -84,7 +84,7 @@ DECLARE_SOA_COLUMN(TotalFV0AmplitudeA, totalFV0AmplitudeA, float); DECLARE_SOA_COLUMN(TrkPx, trkPx, float[4]); DECLARE_SOA_COLUMN(TrkPy, trkPy, float[4]); DECLARE_SOA_COLUMN(TrkPz, trkPz, float[4]); -// DECLARE_SOA_COLUMN(TrkSign, trkSign, int[4]); +DECLARE_SOA_COLUMN(TrkSign, trkSign, int8_t[4]); DECLARE_SOA_COLUMN(TrkDCAxy, trkDCAxy, float[4]); DECLARE_SOA_COLUMN(TrkDCAz, trkDCAz, float[4]); DECLARE_SOA_COLUMN(TrkTPCcr, trkTPCcr, int[4]); @@ -95,14 +95,12 @@ DECLARE_SOA_COLUMN(TrkITScl, trkITScl, int[4]); DECLARE_SOA_COLUMN(TrkTPCsignal, trkTPCsignal, float[4]); DECLARE_SOA_COLUMN(TrkTPCnSigmaEl, trkTPCnSigmaEl, float[4]); -// DECLARE_SOA_COLUMN(TrkTPCnSigmaMu, trkTPCnSigmaMu, float[4]); DECLARE_SOA_COLUMN(TrkTPCnSigmaPi, trkTPCnSigmaPi, float[4]); DECLARE_SOA_COLUMN(TrkTPCnSigmaKa, trkTPCnSigmaKa, float[4]); DECLARE_SOA_COLUMN(TrkTPCnSigmaPr, trkTPCnSigmaPr, float[4]); DECLARE_SOA_COLUMN(TrkTPCnSigmaMu, trkTPCnSigmaMu, float[4]); DECLARE_SOA_COLUMN(TrkTOFbeta, trkTOFbeta, float[4]); DECLARE_SOA_COLUMN(TrkTOFnSigmaEl, trkTOFnSigmaEl, float[4]); -// DECLARE_SOA_COLUMN(TrkTOFnSigmaMu, trkTOFnSigmaMu, float[4]); DECLARE_SOA_COLUMN(TrkTOFnSigmaPi, trkTOFnSigmaPi, float[4]); DECLARE_SOA_COLUMN(TrkTOFnSigmaKa, trkTOFnSigmaKa, float[4]); DECLARE_SOA_COLUMN(TrkTOFnSigmaPr, trkTOFnSigmaPr, float[4]); @@ -123,7 +121,7 @@ DECLARE_SOA_TABLE(TauFourTracks, "AOD", "TAUFOURTRACK", tau_tree::TotalFT0AmplitudeA, tau_tree::TotalFT0AmplitudeC, tau_tree::TotalFV0AmplitudeA, // tau_tree::TimeFT0A, tau_tree::TimeFT0C, tau_tree::TimeFV0A, tau_tree::TrkPx, tau_tree::TrkPy, tau_tree::TrkPz, - // tau_tree::TrkSign, + tau_tree::TrkSign, tau_tree::TrkDCAxy, tau_tree::TrkDCAz, tau_tree::TrkTPCcr, tau_tree::TrkTPCfind, tau_tree::TrkTPCchi2, tau_tree::TrkITSchi2, tau_tree::TrkITScl, @@ -840,7 +838,7 @@ struct TauTau13topo { // CollisionMC histograms if (doprocessEfficiencyMCSG || doprocessSimpleMCSG) { registryMC.add("globalMC/hMCZvertex", ";V_{Z}^{MC} (cm);events", {HistType::kTH1F, {{100, -25., 25.}}}); - registryMC.add("globalMC/hMCefficiency", ";Cut Number;events", {HistType::kTH1F, {{20, 0., 20.}}}); + registryMC.add("globalMC/hMCefficiency", ";Cut Number;events", {HistType::kTH1F, {{28, -8., 20.}}}); // efficiency el registryMC.add("efficiencyMCEl/effiEl", ";Efficiency e3#pi;events", {HistType::kTH1F, {{70, 0., 70.}}}); @@ -859,6 +857,8 @@ struct TauTau13topo { registryMC.add("globalMC/hMCptGen", ";p_{T}^{gen};N^{MC particles}", {HistType::kTH1F, {{100, 0., 4.}}}); // tau + registryMC.add("tauMC/hNtaus", ";N^{#tau};N_events ", {HistType::kTH1F, {{6, -1., 5.}}}); + registryMC.add("tauMC/hMCeta", ";#eta^{#tau};N^{#tau} ", {HistType::kTH1F, {{100, -5., 5.}}}); registryMC.add("tauMC/hMCy", ";y^{#tau};N^{#tau}", {HistType::kTH1F, {{100, -5., 5.}}}); registryMC.add("tauMC/hMCphi", ";#phi^{#tau};N^{#tau}", {HistType::kTH1F, {{100, 0., 6.4}}}); @@ -873,6 +873,18 @@ struct TauTau13topo { registryMC.add("electronMC/hMCphi", ";#phi^{e};N^{e}", {HistType::kTH1F, {{100, 0., 6.4}}}); registryMC.add("electronMC/hMCpt", ";#it{p}_{T}^{e};N^{e}", {HistType::kTH1F, {{400, 0., 10.}}}); + // muon + registryMC.add("muonMC/hMCeta", ";#eta^{#mu};N^{#mu}", {HistType::kTH1F, {{100, -5., 5.}}}); + registryMC.add("muonMC/hMCy", ";y^{#mu};N^{#mu}", {HistType::kTH1F, {{100, -5., 5.}}}); + registryMC.add("muonMC/hMCphi", ";#phi^{#mu};N^{#mu}", {HistType::kTH1F, {{100, 0., 6.4}}}); + registryMC.add("muonMC/hMCpt", ";#it{p}_{T}^{#mu};N^{#mu}", {HistType::kTH1F, {{400, 0., 10.}}}); + + // pion + registryMC.add("pionMC/hMCeta", ";#eta^{#pi};N^{#pi}", {HistType::kTH1F, {{100, -5., 5.}}}); + registryMC.add("pionMC/hMCy", ";y^{#pi};N^{#pi}", {HistType::kTH1F, {{100, -5., 5.}}}); + registryMC.add("pionMC/hMCphi", ";#phi^{#pi};N^{#pi}", {HistType::kTH1F, {{100, 0., 6.4}}}); + registryMC.add("pionMC/hMCpt", ";#it{p}_{T}^{#pi};N^{#pi}", {HistType::kTH1F, {{400, 0., 10.}}}); + // efficiency mu registryMC.add("efficiencyMCMu/hpTmuon", ";p_{T}^{#mu, gen} (GeV/c);events", {HistType::kTH1F, {{200, 0., 5.}}}); @@ -3305,19 +3317,22 @@ struct TauTau13topo { void processSimpleMCSG(aod::McCollision const& mcCollision, aod::McParticles const& mcParticles) { registryMC.get(HIST("globalMC/hMCZvertex"))->Fill(mcCollision.posZ()); - registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(0., 1.); + registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(-8., 1.); registryMC.get(HIST("efficiencyMCEl/effiEl"))->Fill(0., 1.); registryMC.get(HIST("efficiencyMCMu/effiMu"))->Fill(0., 1.); registryMC.get(HIST("efficiencyMCPi/effiPi"))->Fill(0., 1.); // check how many physical primaries - // int countPrim = 0; - int countGen = 0; - int countBoth = 0; - int countCharged = 0; - int countChargedFromTau = 0; + int countPrim = 0; + int countGen = 0; // generator + int countBoth = 0; // generator + primary + int countCharged = 0; // generator + primary + charged + int countChargedFromTau = 0; // generator + primary + charged + from tau int countTau = 0; + int countChargedOnly = 0; // charged only + int countChargedOnlyFromTau = 0; // charged only and from tau + float etaTau[2]; float phiTau[2]; @@ -3347,11 +3362,13 @@ struct TauTau13topo { // loop over MC particles for (const auto& mcParticle : mcParticles) { - // LOGF(info, " mcParticle pdg %d", mcParticle.pdgCode()); + if (verbose) { + LOGF(info, " mcParticle pdg %d, gen %d, prim %d, bkg %d, process %d", mcParticle.pdgCode(), mcParticle.producedByGenerator(), mcParticle.isPhysicalPrimary(), mcParticle.fromBackgroundEvent(), mcParticle.getProcess()); + } // primaries - // if (mcParticle.isPhysicalPrimary()) { - // countPrim++; - // } + if (mcParticle.isPhysicalPrimary()) { + countPrim++; + } // // MC particles produced by generator only // @@ -3376,9 +3393,30 @@ struct TauTau13topo { } // mother is tau } // mc particle has mother } // veto neutral particles - } // physicsl primary + } // physics primary } // generator produced by + // special case only for UPCgen, charged but not taus + if (std::abs(mcParticle.pdgCode()) != kTauMinus && mcParticle.pdgCode() != kGamma && std::abs(mcParticle.pdgCode()) != kNuE && std::abs(mcParticle.pdgCode()) != kNuMu && std::abs(mcParticle.pdgCode()) != kNuTau && mcParticle.pdgCode() != kK0Long && mcParticle.pdgCode() != kPi0) { + countChargedOnly++; + // case for UPCgen when all particles are not pimaries + if (!mcParticle.isPhysicalPrimary()) { + // all charged particles, not only from 1+3 topo + registryMC.get(HIST("globalMC/hMCetaGen"))->Fill(mcParticle.eta()); + registryMC.get(HIST("globalMC/hMCphiGen"))->Fill(mcParticle.phi()); + registryMC.get(HIST("globalMC/hMCyGen"))->Fill(mcParticle.y()); + registryMC.get(HIST("globalMC/hMCptGen"))->Fill(mcParticle.pt()); + } // end of UPCgen case + + if (mcParticle.has_mothers()) { + auto const& mother = mcParticle.mothers_first_as(); + if (std::abs(mother.pdgCode()) == kTauMinus) { // 15 + countChargedOnlyFromTau++; + } // mother is tau + } // mc particle has mother + } // veto neutral particles + // end of special case only for UPCgen + // // tau+/- // @@ -3406,10 +3444,12 @@ struct TauTau13topo { if (std::abs(daughter.eta()) > 0.9) partFromTauInEta = false; } // end of pion check + // electron from tau if (std::abs(daughter.pdgCode()) == kElectron) { // 11 = electron if (daughter.pdgCode() == kElectron) flagElPlusElMinus = true; + registryMC.get(HIST("electronMC/hMCeta"))->Fill(daughter.eta()); registryMC.get(HIST("electronMC/hMCphi"))->Fill(daughter.phi()); registryMC.get(HIST("electronMC/hMCy"))->Fill(daughter.y()); @@ -3422,10 +3462,17 @@ struct TauTau13topo { if (std::abs(daughter.eta()) > 0.9) partFromTauInEta = false; } // end of electron check + // muon from tau if (std::abs(daughter.pdgCode()) == kMuonMinus) { // 13 if (daughter.pdgCode() == kMuonMinus) // 13 flagMuPlusMuMinus = true; + + registryMC.get(HIST("muonMC/hMCeta"))->Fill(daughter.eta()); + registryMC.get(HIST("muonMC/hMCphi"))->Fill(daughter.phi()); + registryMC.get(HIST("muonMC/hMCy"))->Fill(daughter.y()); + registryMC.get(HIST("muonMC/hMCpt"))->Fill(daughter.pt()); + muonFound = !muonFound; partPt = static_cast(daughter.pt()); // LOGF(info,"mu pt %f",daughter.pt()); @@ -3433,6 +3480,7 @@ struct TauTau13topo { partFromTauInEta = false; } // end of muon check } // end of loop over daughters + if (pionCounter == 3) { threePionsFound = true; } // end of 3pi check @@ -3442,6 +3490,12 @@ struct TauTau13topo { auto mcPartTmp = mcParticle.daughters_as().begin() + singlePionIndex; if (mcPartTmp.pdgCode() == kPiMinus) // -211 flagPiPlusPiMinus = true; + + registryMC.get(HIST("pionMC/hMCeta"))->Fill(mcPartTmp.eta()); + registryMC.get(HIST("pionMC/hMCphi"))->Fill(mcPartTmp.phi()); + registryMC.get(HIST("pionMC/hMCy"))->Fill(mcPartTmp.y()); + registryMC.get(HIST("pionMC/hMCpt"))->Fill(mcPartTmp.pt()); + partPt = static_cast(mcPartTmp.pt()); // motherOfSinglePionIndex = mcParticle.index(); if (std::abs(mcPartTmp.eta()) > 0.9) @@ -3454,6 +3508,7 @@ struct TauTau13topo { // LOGF(info,"pt after %f",partPt); // tau related things + registryMC.get(HIST("tauMC/hNtaus"))->Fill(countTau); if (countTau == 2) { registryMC.get(HIST("tauMC/hMCdeltaeta"))->Fill(etaTau[0] - etaTau[1]); registryMC.get(HIST("tauMC/hMCdeltaphi"))->Fill(calculateDeltaPhi(phiTau[0], phiTau[1]) * 180. / o2::constants::math::PI); @@ -3503,29 +3558,58 @@ struct TauTau13topo { registryMC.get(HIST("globalMC/hMCnPart"))->Fill(countBoth, 2); registryMC.get(HIST("globalMC/hMCnPart"))->Fill(countCharged, 3); registryMC.get(HIST("globalMC/hMCnPart"))->Fill(countChargedFromTau, 4); - if (countChargedFromTau != 4) - return; - registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(1., 1.); - if (electronFound && flagElPlusElMinus) - registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(2., 1.); // e- - else if (electronFound && !flagElPlusElMinus) - registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(3., 1.); // e+ - if (muonFound && flagMuPlusMuMinus) - registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(4., 1.); // mu- - else if (muonFound && !flagMuPlusMuMinus) - registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(5., 1.); // mu+ - if (singlePionFound && flagPiPlusPiMinus) - registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(6., 1.); // pi- - else if (singlePionFound && !flagPiPlusPiMinus) - registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(7., 1.); // pi+ + registryMC.get(HIST("globalMC/hMCnPart"))->Fill(countPrim, 5); + registryMC.get(HIST("globalMC/hMCnPart"))->Fill(countChargedOnly, 6); + registryMC.get(HIST("globalMC/hMCnPart"))->Fill(countChargedOnlyFromTau, 7); - if (!tauInRapidity) - return; - registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(8., 1.); - if (!partFromTauInEta) - return; - registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(9., 1.); + if (countChargedFromTau == 2 || countChargedOnlyFromTau == 2) { + // 2 tracks candidates + registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(-7., 1.); + } + if (countChargedFromTau == 6 || countChargedOnlyFromTau == 6) { + // 6 tracks candidates + registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(-6., 1.); + } + // if (countChargedFromTau != 4) + // return; + if (countChargedFromTau == 4 || countChargedOnlyFromTau == 4) { + // 4 tracks candidates + registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(-5., 1.); // 4 tracks + if (electronFound && flagElPlusElMinus) + registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(-4., 1.); // e- + else if (electronFound && !flagElPlusElMinus) + registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(-3., 1.); // e+ + if (muonFound && flagMuPlusMuMinus) + registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(-2., 1.); // mu- + else if (muonFound && !flagMuPlusMuMinus) + registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(-1., 1.); // mu+ + if (singlePionFound && flagPiPlusPiMinus) + registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(0., 1.); // pi- + else if (singlePionFound && !flagPiPlusPiMinus) + registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(1., 1.); // pi+ + + if (!tauInRapidity) + return; + registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(2., 1.); + if (!partFromTauInEta) + return; + registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(3., 1.); + + if (electronFound && flagElPlusElMinus) + registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(4., 1.); // e- + else if (electronFound && !flagElPlusElMinus) + registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(5., 1.); // e+ + if (muonFound && flagMuPlusMuMinus) + registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(6., 1.); // mu- + else if (muonFound && !flagMuPlusMuMinus) + registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(7., 1.); // mu+ + if (singlePionFound && flagPiPlusPiMinus) + registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(8., 1.); // pi- + else if (singlePionFound && !flagPiPlusPiMinus) + registryMC.get(HIST("globalMC/hMCefficiency"))->Fill(9., 1.); // pi+ + + } // end of 4 tracks candidate events } // end of processSimpleMCSG // using LabeledTracks = soa::Join; @@ -3549,6 +3633,7 @@ struct TauTau13topo { { // LOGF(info, " Per DF: UDMcParticles size %d, UDMcCollisions size %d, FullMcUdCollisions size %d", mcParts.size(), mcCollisions.size(), collisionsFull.size()); // LOGF(info, " Per DF: UDMcParticles size %d, UDMcCollisions size %d, FullMcUdCollisions size %d", mcParts.size(), mcCollisions.size(), collisions.size()); + LOGF(info, " UDMcCollision size %d, SmallGroups FullMcUdCollisions size %d, UDtracks %d, UDMcParticles %d", mcCollision.size(), collisions.size(), tracks.size(), mcParticles.size()); // loop over generated collisions // for (const auto &mcCollision : mcCollisions) { @@ -5089,7 +5174,7 @@ struct TauTau13topo { // int counterTmp = 0; float px[4], py[4], pz[4]; - // int sign[4]; + int8_t sign[4]; float dcaZ[4]; float dcaXY[4]; @@ -5105,8 +5190,6 @@ struct TauTau13topo { float nSigmaPr[4]; float nSigmaKa[4]; float nSigmaMu[4]; - // float chi2TPC[4]; - // float chi2ITS[4]; float chi2TOF[4] = {-1., -1., -1., -1.}; int nclTPCcrossedRows[4]; int nclTPCfind[4]; @@ -5123,7 +5206,7 @@ struct TauTau13topo { px[counterTmp] = trk.px(); py[counterTmp] = trk.py(); pz[counterTmp] = trk.pz(); - // sign[counterTmp] = trk.sign(); + sign[counterTmp] = trk.sign(); dcaZ[counterTmp] = trk.dcaZ(); dcaXY[counterTmp] = trk.dcaXY(); @@ -5141,8 +5224,6 @@ struct TauTau13topo { tmpTofNsigmaPr[counterTmp] = trk.tofNSigmaPr(); tmpTofNsigmaMu[counterTmp] = trk.tofNSigmaMu(); - // chi2TPC[counterTmp] = trk.tpcChi2NCl(); - // chi2ITS[counterTmp] = trk.itsChi2NCl(); if (trk.hasTOF()) chi2TOF[counterTmp] = trk.tofChi2(); // nclTPCfind[counterTmp] = trk.tpcNClsFindable(); @@ -5174,7 +5255,7 @@ struct TauTau13topo { dgcand.tfb(), dgcand.itsROFb(), dgcand.sbp(), dgcand.zVtxFT0vPV(), dgcand.vtxITSTPC(), dgcand.totalFT0AmplitudeA(), dgcand.totalFT0AmplitudeC(), dgcand.totalFV0AmplitudeA(), // dgcand.timeFT0A(), dgcand.timeFT0C(), dgcand.timeFV0A(), - px, py, pz, // sign, + px, py, pz, sign, dcaXY, dcaZ, nclTPCcrossedRows, nclTPCfind, nclTPCchi2, trkITSchi2, trkITScl, tmpDedx, nSigmaEl, nSigmaPi, nSigmaKa, nSigmaPr, nSigmaMu,