From b0127ae62f3d6911e6f4ad15250e6aea9a941594 Mon Sep 17 00:00:00 2001 From: Gyula Bencedi Date: Fri, 2 Oct 2026 16:59:24 +0200 Subject: [PATCH] Fix histo definitions and filling --- PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx | 619 +++++++++++++++-------------- 1 file changed, 311 insertions(+), 308 deletions(-) diff --git a/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx b/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx index 7b8ec127ee5..a985de4ba7d 100644 --- a/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx +++ b/PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx @@ -82,10 +82,6 @@ auto static constexpr CintZero = 0; auto static constexpr CintOne = 1; auto static constexpr CfloatFive = 5.f; auto static constexpr CInvalid = -999.f; -auto static constexpr CminAccFT0A = 3.5f; -auto static constexpr CmaxAccFT0A = 4.9f; -auto static constexpr CminAccFT0C = -3.3f; -auto static constexpr CmaxAccFT0C = -2.1f; enum class EvtSel { evtAll = 0, @@ -173,21 +169,38 @@ enum class EvtLossType { nEvtLossType }; -enum class McEffStatus { - kMcEffAll = 0, - kMcEffSel, - kMcEffHasMcColl, - kMcEffNoSplitVtx, - nMcEfftStatus +enum class DataEvtStatus { + kDataAll = 0, + kDataSel, + kDataSelGt0, + kDataRej, + nDataEvtStatus }; -enum class McStatus { +enum class McEvtStatus { kMcRecAll = 0, kMcRecSel, kMcRecHasMcColl, kMcRecNoSplitVtx, kMcGenAll, - nMcStatus + nMcEvtStatus +}; + +enum class McEvtLossStatus { + kMcEvtAll = 0, + kMcEvtVtxZ, + kMcEvtTVX, + kMcEvtInelGt0, + kMcEvtInelGt0wMft, + kMcEvtStatus +}; + +enum class McEffStatus { + kMcEffAll = 0, + kMcEffSel, + kMcEffHasMcColl, + kMcEffNoSplitVtx, + nMcEfftStatus }; enum class McTrackStatus { @@ -215,18 +228,19 @@ struct DndetaMFTPbPb { HistogramRegistry registryQC{"registryQC", {}, OutputObjHandlingPolicy::AnalysisObject, true, true}; struct : ConfigurableGroup { - Configurable cfgDoIR{"cfgDoIR", false, "Flag to retrieve Interaction rate from CCDB"}; - Configurable cfgUseIRCut{"cfgUseIRCut", false, "Flag to cut on IR rate"}; - Configurable cfgIRCrashOnNull{"cfgIRCrashOnNull", false, "Flag to avoid CTP RateFetcher crash"}; - Configurable cfgIRSource{"cfgIRSource", "ZNC hadronic", "Estimator of the interaction rate (Pb-Pb: ZNC hadronic)"}; - Configurable cfgUseTrackSel{"cfgUseTrackSel", false, "Flag to apply track selection"}; - Configurable cfgUseParticleSel{"cfgUseParticleSel", true, "Flag to apply particle selection"}; - Configurable cfgUsePrimaries{"cfgUsePrimaries", true, "Select primary particles"}; - Configurable cfgUseSecondaries{"cfgUseSecondaries", false, "Select secondary particles"}; - Configurable cfgRemoveReassigned{"cfgRemoveReassigned", false, "Remove reassgined tracks"}; - Configurable cfgRemoveSplitVertex{"cfgRemoveSplitVertex", true, "Remove split vertices"}; - Configurable cfgUseTrackParExtra{"cfgUseTrackParExtra", false, "Use table with refitted track parameters"}; - Configurable cfgUseInelgt0wMFT{"cfgUseInelgt0wMFT", false, "Use INEL > 0 condition with MFT acceptance"}; + Configurable useEvtSel{"useEvtSel", true, "Use event selection"}; + Configurable useIRFromCCDB{"useIRFromCCDB", false, "Flag to retrieve Interaction rate from CCDB"}; + Configurable useIRCut{"useIRCut", false, "Flag to cut on IR rate"}; + Configurable intRateCrashOnNull{"intRateCrashOnNull", false, "Flag to avoid CTP RateFetcher crash"}; + Configurable intRateSource{"intRateSource", "ZNC hadronic", "Estimator of the interaction rate (Pb-Pb: ZNC hadronic)"}; + Configurable useTrackSel{"useTrackSel", false, "Flag to apply track selection"}; + Configurable useParticleSel{"useParticleSel", true, "Flag to apply particle selection"}; + Configurable usePrimaries{"usePrimaries", true, "Select primary particles"}; + Configurable useSecondaries{"useSecondaries", false, "Select secondary particles"}; + Configurable rmReassigned{"rmReassigned", false, "Remove reassgined tracks"}; + Configurable rmSplitVertex{"rmSplitVertex", true, "Remove split vertices"}; + Configurable useInelgt0{"useInelgt0", false, "Use INEL > 0 condition"}; + Configurable useInelgt0wMFT{"useInelgt0wMFT", false, "Use INEL > 0 condition with MFT acceptance"}; Configurable grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; } gConf; @@ -306,7 +320,7 @@ struct DndetaMFTPbPb { Configurable maxOccupancy{"maxOccupancy", -1, "maximum occupancy from neighbouring collisions"}; Configurable minIR{"minIR", -1, "minimum IR (kHz) collisions"}; Configurable maxIR{"maxIR", -1, "maximum IR (kHz) collisions"}; - Configurable useInelgt0wTVX{"useInelgt0wTVX", false, "Use INEL > 0 condition with TVX trigger, i.e. FT0A and FT0C acceptance"}; + Configurable requireTVX{"requireTVX", false, "Use TVX trigger, i.e. FT0A and FT0C acceptance"}; Configurable useGenMult{"useGenMult", false, "use MultMC for centrality"}; } eventCuts; @@ -328,9 +342,6 @@ struct DndetaMFTPbPb { std::array centerMFT{0, 0, -61.4}; // Field at center of MFT o2::parameters::GRPMagField* grpmag = nullptr; - std::vector ambiguousTrkIds; - std::vector reassignedTrkIds; - /// @brief init function, definition of histograms void init(InitContext&) { @@ -392,12 +403,6 @@ struct DndetaMFTPbPb { LOGP(fatal, "Either doprocessMcEfficiencyIdxCentFT0C OR doprocessMcEfficiencyIdxBestCentFT0C should be enabled!"); } - // General counters - QC - auto hBcSel = registryQC.add("hBcSel", "hBcSel", HistType::kTH1F, {{3, -0.5f, +2.5f}}); - hBcSel->GetXaxis()->SetBinLabel(1, "Good BCs"); - hBcSel->GetXaxis()->SetBinLabel(2, "BCs with collisions"); - hBcSel->GetXaxis()->SetBinLabel(3, "BCs with pile-up/splitting"); - registryQC.add("Events/hEvtSel", "Number of events; Cut; #Evt Passed Cut", {HistType::kTH1F, {{static_cast(EvtSel::nEvtSel), -0.5, +static_cast(EvtSel::nEvtSel) - 0.5}}}); std::array(EvtSel::nEvtSel)> labelEvtSel{ "All coll.", @@ -421,18 +426,34 @@ struct DndetaMFTPbPb { registryQC.get(HIST("Events/hEvtSel"))->GetXaxis()->SetBinLabel(iBin + 1, labelEvtSel[iBin].data()); } - registryQC.add("Tracks/hTrkSel", "Number of tracks; Cut; #Tracks Passed Cut", {HistType::kTH1F, {{static_cast(TrkSel::nTrkSel), -0.5, +static_cast(TrkSel::nTrkSel) - 0.5}}}); - std::array(TrkSel::nTrkSel)> labelTrkSel{ - "All", - "Ncls", - "Chi2", - "Eta", - "Phi cut", - "Pt", - "CA"}; - registryQC.get(HIST("Tracks/hTrkSel"))->SetMinimum(0.1); - for (int iBin = 0; iBin < static_cast(TrkSel::nTrkSel); iBin++) { - registryQC.get(HIST("Tracks/hTrkSel"))->GetXaxis()->SetBinLabel(iBin + 1, labelTrkSel[iBin].data()); + if (doprocessTagging) { + auto hBcSel = registryQC.add("hBcSel", "hBcSel", HistType::kTH1F, {{3, -0.5f, +2.5f}}); + hBcSel->GetXaxis()->SetBinLabel(1, "Good BCs"); + hBcSel->GetXaxis()->SetBinLabel(2, "BCs with collisions"); + hBcSel->GetXaxis()->SetBinLabel(3, "BCs with pile-up/splitting"); + } + + if (doprocessDataInclusive || doprocessDatawBestTracksInclusive || + doprocessDataCentFT0C || doprocessDatawBestTracksCentFT0C || + doprocessMcInclusive || doprocessMcBestInclusive || + doprocessMcCentFT0C || doprocessMcBestCentFT0C || + doprocessMcEfficiencyInclusive || doprocessMcEfficiencyBestInclusive || + doprocessMcEfficiencyCentFT0C || doprocessMcEfficiencyBestCentFT0C || + doprocessMcEfficiencyIdxInlusive || doprocessMcEfficiencyIdxCentFT0C || + doprocessDataCorrelationwBestTracksInclusive || doprocessMcReassocDCA) { + registryQC.add("Tracks/hTrkSel", "Number of tracks; Cut; #Tracks Passed Cut", {HistType::kTH1F, {{static_cast(TrkSel::nTrkSel), -0.5, +static_cast(TrkSel::nTrkSel) - 0.5}}}); + std::array(TrkSel::nTrkSel)> labelTrkSel{ + "All", + "Ncls", + "Chi2", + "Eta", + "Phi cut", + "Pt", + "CA"}; + registryQC.get(HIST("Tracks/hTrkSel"))->SetMinimum(0.1); + for (int iBin = 0; iBin < static_cast(TrkSel::nTrkSel); iBin++) { + registryQC.get(HIST("Tracks/hTrkSel"))->GetXaxis()->SetBinLabel(iBin + 1, labelTrkSel[iBin].data()); + } } if (doprocessDatawBestTracksInclusive || doprocessDatawBestTracksCentFT0C || @@ -455,13 +476,17 @@ struct DndetaMFTPbPb { } if (doprocessDataInclusive || doprocessDatawBestTracksInclusive) { registryData.add({"Events/hInteractionRate", "; IR (kHz); occupancy", {HistType::kTH2F, {irAxis, occupancyAxis}}}); - registryData.add({"Events/Selection", ";status; occupancy", {HistType::kTH2F, {{2, 0.5, 2.5}, occupancyAxis}}}); - auto hstat = registryData.get(HIST("Events/Selection")); - auto* x = hstat->GetXaxis(); - x->SetBinLabel(1, "All"); - x->SetBinLabel(2, "Selected"); - + registryData.add("Events/DataEvtStatus", "Number of events; Cut; occupancy", {HistType::kTH2F, {{static_cast(DataEvtStatus::nDataEvtStatus), -0.5, +static_cast(DataEvtStatus::nDataEvtStatus) - 0.5}, occupancyAxis}}); + std::array(DataEvtStatus::nDataEvtStatus)> labelDataEvtStatus{ + "Data all", + "Data sel", + "Data sel gt0", + "Data rejected"}; + for (int iBin = 0; iBin < static_cast(DataEvtStatus::nDataEvtStatus); iBin++) { + registryData.get(HIST("Events/DataEvtStatus"))->GetXaxis()->SetBinLabel(iBin + 1, labelDataEvtStatus[iBin].data()); + } registryData.add({"Tracks/EtaZvtx", "; #eta; #it{z}_{vtx} (cm); occupancy", {HistType::kTHnSparseF, {etaAxis, zAxis, occupancyAxis}}}); + registryData.add({"Tracks/EtaZvtxGt0", "; #eta; #it{z}_{vtx} (cm); occupancy", {HistType::kTHnSparseF, {etaAxis, zAxis, occupancyAxis}}}); registryData.add({"Tracks/PhiEta", "; #varphi; #eta; occupancy", {HistType::kTHnSparseF, {phiAxis, etaAxis, occupancyAxis}}}); registryData.add({"Events/NtrkZvtx", "; N_{trk}; Z_{vtx} (cm); occupancy", {HistType::kTHnSparseF, {multAxis, zAxis, occupancyAxis}}}); registryData.add({"Tracks/Chi2Eta", "; #chi^{2}; #eta; occupancy", {HistType::kTHnSparseF, {chiSqAxis, etaAxis, occupancyAxis}}}); @@ -473,25 +498,24 @@ struct DndetaMFTPbPb { registryData.add({"Tracks/DCA3d", "; p_{T} (GeV/c); #eta; DCA_{XY} (cm); DCA_{Z} (cm); occupancy", {HistType::kTHnSparseF, {ptAxis, etaAxis, dcaxyAxis, dcazAxis, occupancyAxis}}}); registryData.add({"Tracks/ReTracksEtaZvtx", "; #eta; #it{z}_{vtx} (cm); occupancy", {HistType::kTHnSparseF, {etaAxis, zAxis, occupancyAxis}}}); registryData.add({"Tracks/ReTracksPhiEta", "; #varphi; #eta; occupancy", {HistType::kTHnSparseF, {phiAxis, etaAxis, occupancyAxis}}}); - registryData.add({"Tracks/OrigTracksEtaZvtx", "; #eta; #it{z}_{vtx} (cm); occupancy", {HistType::kTHnSparseF, {etaAxis, zAxis, occupancyAxis}}}); - registryData.add({"Tracks/OrigTracksPhiEta", "; #varphi; #eta; occupancy", {HistType::kTHnSparseF, {phiAxis, etaAxis, occupancyAxis}}}); - registryData.add({"Tracks/RestTracksEtaZvtx", "; #eta; #it{z}_{vtx} (cm); occupancy", {HistType::kTHnSparseF, {etaAxis, zAxis, occupancyAxis}}}); - registryData.add({"Tracks/RestTracksPhiEta", "; #varphi; #eta; occupancy", {HistType::kTHnSparseF, {phiAxis, etaAxis, occupancyAxis}}}); registryData.add({"Tracks/TrackAmbDegree", "; N_{coll}^{comp}; occupancy", {HistType::kTH2F, {{51, -0.5, 50.5}, occupancyAxis}}}); - registryData.add({"Tracks/TanLambdaExtra", "; TanLambda; occupancy", {HistType::kTH2F, {tanLambdaAxis, occupancyAxis}}}); - registryData.add({"Tracks/InvQPtExtra", "; InvQPt; occupancy", {HistType::kTH2F, {invQPtAxis, occupancyAxis}}}); - registryData.add({"Tracks/EtaExtra", "; #eta; occupancy", {HistType::kTH2F, {etaAxis, occupancyAxis}}}); - registryData.add({"Tracks/PhiExtra", "; #varphi; occupancy", {HistType::kTH2F, {phiAxis, occupancyAxis}}}); } + LOG(info) << "doprocessData[BestTrack]Inclusive -> Size of the Data histograms:"; + registryData.print(); } if (doprocessDataCentFT0C || doprocessDatawBestTracksCentFT0C) { registryData.add({"Events/Centrality/hInteractionRate", "; IR (kHz); centrality; occupancy", {HistType::kTHnSparseF, {irAxis, centralityAxis, occupancyAxis}}}); - registryData.add({"Events/Centrality/Selection", ";status; centrality; occupancy", {HistType::kTHnSparseF, {{2, 0.5, 2.5}, centralityAxis, occupancyAxis}}}); - auto hstat = registryData.get(HIST("Events/Centrality/Selection")); - hstat->GetAxis(0)->SetBinLabel(1, "All"); - hstat->GetAxis(0)->SetBinLabel(2, "Selected"); - + registryData.add("Events/Centrality/DataEvtStatus", "Number of events; Cut; centrality; occupancy", {HistType::kTHnSparseF, {{static_cast(DataEvtStatus::nDataEvtStatus), -0.5, +static_cast(DataEvtStatus::nDataEvtStatus) - 0.5}, centralityAxis, occupancyAxis}}); + std::array(DataEvtStatus::nDataEvtStatus)> labelDataEvtStatusCent{ + "Data all", + "Data sel", + "Data sel gt0", + "Data rejected"}; + for (int iBin = 0; iBin < static_cast(DataEvtStatus::nDataEvtStatus); iBin++) { + registryData.get(HIST("Events/Centrality/DataEvtStatus"))->GetAxis(0)->SetBinLabel(iBin + 1, labelDataEvtStatusCent[iBin].data()); + } registryData.add({"Tracks/Centrality/EtaZvtx", "; #eta; #it{z}_{vtx} (cm); centrality; occupancy", {HistType::kTHnSparseF, {etaAxis, zAxis, centralityAxis, occupancyAxis}}}); + registryData.add({"Tracks/Centrality/EtaZvtxGt0", "; #eta; #it{z}_{vtx} (cm); centrality; occupancy", {HistType::kTHnSparseF, {etaAxis, zAxis, centralityAxis, occupancyAxis}}}); registryData.add({"Tracks/Centrality/PhiEta", "; #varphi; #eta; centrality; occupancy", {HistType::kTHnSparseF, {phiAxis, etaAxis, centralityAxis, occupancyAxis}}}); registryData.add({"Events/Centrality/NtrkZvtx", "; N_{trk}; Z_{vtx} (cm); centrality; occupancy", {HistType::kTHnSparseF, {multAxis, zAxis, centralityAxis, occupancyAxis}}}); registryData.add({"Tracks/Centrality/Chi2Eta", "; #chi^{2}; #eta; centrality; occupancy", {HistType::kTHnSparseF, {chiSqAxis, etaAxis, centralityAxis, occupancyAxis}}}); @@ -504,16 +528,10 @@ struct DndetaMFTPbPb { registryData.add({"Tracks/Centrality/DCA3d", "; p_{T} (GeV/c); #eta; DCA_{XY} (cm); DCA_{Z} (cm); centrality; occupancy", {HistType::kTHnSparseF, {ptAxis, etaAxis, dcaxyAxis, dcazAxis, centralityAxis, occupancyAxis}}}); registryData.add({"Tracks/Centrality/ReTracksEtaZvtx", "; #eta; #it{z}_{vtx} (cm); centrality; occupancy", {HistType::kTHnSparseF, {etaAxis, zAxis, centralityAxis, occupancyAxis}}}); registryData.add({"Tracks/Centrality/ReTracksPhiEta", "; #varphi; #eta; centrality; occupancy", {HistType::kTHnSparseF, {phiAxis, etaAxis, centralityAxis, occupancyAxis}}}); - registryData.add({"Tracks/Centrality/OrigTracksEtaZvtx", "; #eta; #it{z}_{vtx} (cm); centrality; occupancy", {HistType::kTHnSparseF, {etaAxis, zAxis, centralityAxis, occupancyAxis}}}); - registryData.add({"Tracks/Centrality/OrigTracksPhiEta", "; #varphi; #eta; centrality; occupancy", {HistType::kTHnSparseF, {phiAxis, etaAxis, centralityAxis, occupancyAxis}}}); - registryData.add({"Tracks/Centrality/RestTracksEtaZvtx", "; #eta; #it{z}_{vtx} (cm); centrality; occupancy", {HistType::kTHnSparseF, {etaAxis, zAxis, centralityAxis, occupancyAxis}}}); - registryData.add({"Tracks/Centrality/RestTracksPhiEta", "; #varphi; #eta; centrality; occupancy", {HistType::kTHnSparseF, {phiAxis, etaAxis, centralityAxis, occupancyAxis}}}); registryData.add({"Tracks/Centrality/TrackAmbDegree", "; N_{coll}^{comp}; centrality; occupancy", {HistType::kTHnSparseF, {{51, -0.5, 50.5}, centralityAxis, occupancyAxis}}}); - registryData.add({"Tracks/Centrality/TanLambdaExtra", "; TanLambda; centrality; occupancy", {HistType::kTHnSparseF, {tanLambdaAxis, centralityAxis, occupancyAxis}}}); - registryData.add({"Tracks/Centrality/InvQPtExtra", "; InvQPt; centrality; occupancy", {HistType::kTHnSparseF, {invQPtAxis, centralityAxis, occupancyAxis}}}); - registryData.add({"Tracks/Centrality/EtaExtra", "; #eta; centrality; occupancy", {HistType::kTHnSparseF, {etaAxis, centralityAxis, occupancyAxis}}}); - registryData.add({"Tracks/Centrality/PhiExtra", "; #varphi; centrality; occupancy", {HistType::kTHnSparseF, {phiAxis, centralityAxis, occupancyAxis}}}); } + LOG(info) << "doprocessData[BestTrack]CentFT0C -> Size of the Data histograms:"; + registryData.print(); } if (doprocessDataCorrelationwBestTracksInclusive) { registryData.add("Events/hMultMFTvsFT0A", "MultMFT_vs_FT0A", {HistType::kTH2F, {multAxis, multFT0aAxis}}); @@ -521,17 +539,19 @@ struct DndetaMFTPbPb { registryData.add("Events/hNPVtracksVsFT0C", "NPVtracks_vs_FT0C", {HistType::kTH2F, {pvAxis, multFT0cAxis}}); registryData.add("Events/hMultMFTvsFV0A", "MultMFT_vs_FV0A", {HistType::kTH2F, {multAxis, multFV0aAxis}}); registryData.add("Events/hNPVtracksVsMultMFT", "NPVtracks_vs_MultMFT", {HistType::kTH2F, {pvAxis, multAxis}}); + LOG(info) << "doprocessDataCorrelationwBestTracksInclusive -> Size of the Data histograms:"; + registryData.print(); } if (doprocessMcInclusive || doprocessMcBestInclusive) { - registryMC.add("Events/McStatus", "Number of events; Cut; occupancy", {HistType::kTH2F, {{static_cast(McStatus::nMcStatus), -0.5, +static_cast(McStatus::nMcStatus) - 0.5}, occupancyAxis}}); - std::array(McStatus::nMcStatus)> labelMcStatus{ + registryMC.add("Events/McEvtStatus", "Number of events; Cut; occupancy", {HistType::kTH2F, {{static_cast(McEvtStatus::nMcEvtStatus), -0.5, +static_cast(McEvtStatus::nMcEvtStatus) - 0.5}, occupancyAxis}}); + std::array(McEvtStatus::nMcEvtStatus)> labelMcEvtStatus{ "Rec all", "Rec sel", "Rec w/ mc coll", "Rec w/o split vtx", "Gen all"}; - for (int iBin = 0; iBin < static_cast(McStatus::nMcStatus); iBin++) { - registryMC.get(HIST("Events/McStatus"))->GetXaxis()->SetBinLabel(iBin + 1, labelMcStatus[iBin].data()); + for (int iBin = 0; iBin < static_cast(McEvtStatus::nMcEvtStatus); iBin++) { + registryMC.get(HIST("Events/McEvtStatus"))->GetXaxis()->SetBinLabel(iBin + 1, labelMcEvtStatus[iBin].data()); } if (doprocessMcBestInclusive) { registryMC.add({"Tracks/hMcTrackStatus", "Number of tracks; Cut; occupancy", {HistType::kTH2F, {{static_cast(McTrackStatus::nMcTrackStatus), -0.5, +static_cast(McTrackStatus::nMcTrackStatus) - 0.5}, occupancyAxis}}}); @@ -556,28 +576,30 @@ struct DndetaMFTPbPb { registryMC.add({"Tracks/NclustersEta", "; nClusters; #eta; occupancy", {HistType::kTHnSparseF, {nclsAxis, etaAxis, occupancyAxis}}}); registryMC.add({"Events/NotFoundEventZvtx", "; #it{z}_{vtx} (cm); occupancy", {HistType::kTH2F, {zAxis, occupancyAxis}}}); registryMC.add({"Events/ZvtxDiff", "; Z_{rec} - Z_{gen} (cm); occupancy", {HistType::kTH2F, {deltaZAxis, occupancyAxis}}}); + LOG(info) << "doprocessMc[Best]Inclusive -> Size of the MC histograms:"; + registryMC.print(); } if (doprocessMcCentFT0C || doprocessMcBestCentFT0C) { - registryMC.add("Events/Centrality/McStatus", "Number of events; Cut; centrality; occupancy", {HistType::kTHnSparseF, {{static_cast(McStatus::nMcStatus), -0.5, +static_cast(McStatus::nMcStatus) - 0.5}, centralityAxis, occupancyAxis}}); - std::array(McStatus::nMcStatus)> labelMcStatusCent{ + registryMC.add("Events/Centrality/McEvtStatus", "Number of events; Cut; centrality; occupancy", {HistType::kTHnSparseF, {{static_cast(McEvtStatus::nMcEvtStatus), -0.5, +static_cast(McEvtStatus::nMcEvtStatus) - 0.5}, centralityAxis, occupancyAxis}}); + std::array(McEvtStatus::nMcEvtStatus)> labelMcEvtStatusCent{ "Rec all", "Rec sel", "Rec w/ mc coll", "Rec w/o split vtx", "Gen all"}; - for (int iBin = 0; iBin < static_cast(McStatus::nMcStatus); iBin++) { - registryMC.get(HIST("Events/Centrality/McStatus"))->GetAxis(0)->SetBinLabel(iBin + 1, labelMcStatusCent[iBin].data()); + for (int iBin = 0; iBin < static_cast(McEvtStatus::nMcEvtStatus); iBin++) { + registryMC.get(HIST("Events/Centrality/McEvtStatus"))->GetAxis(0)->SetBinLabel(iBin + 1, labelMcEvtStatusCent[iBin].data()); } if (doprocessMcBestCentFT0C) { registryMC.add({"Tracks/Centrality/hMcTrackStatus", "Number of tracks; Cut; centrality; occupancy", {HistType::kTHnSparseF, {{static_cast(McTrackStatus::nMcTrackStatus), -0.5, +static_cast(McTrackStatus::nMcTrackStatus) - 0.5}, centralityAxis, occupancyAxis}}}); - std::array(McTrackStatus::nMcTrackStatus)> labelMcStatusCentBest{ + std::array(McTrackStatus::nMcTrackStatus)> labelMcEvtStatusCentBest{ "Best all", "Best sel", "Trk sel", "Has coll", "Reas rm"}; for (int iBin = 0; iBin < static_cast(McTrackStatus::nMcTrackStatus); iBin++) { - registryMC.get(HIST("Tracks/Centrality/hMcTrackStatus"))->GetAxis(0)->SetBinLabel(iBin + 1, labelMcStatusCentBest[iBin].data()); + registryMC.get(HIST("Tracks/Centrality/hMcTrackStatus"))->GetAxis(0)->SetBinLabel(iBin + 1, labelMcEvtStatusCentBest[iBin].data()); } registryMC.add({"Tracks/Centrality/DCA3d", "; p_{T} (GeV/c); #eta; DCA_{XY} (cm); DCA_{Z} (cm); centrality; occupancy", {HistType::kTHnSparseF, {ptAxis, etaAxis, dcaxyAxis, dcazAxis, centralityAxis, occupancyAxis}}}); registryMC.add({"Tracks/Centrality/TrackAmbDegree", "; N_{coll}^{comp}; centrality; occupancy", {HistType::kTHnSparseF, {{51, -0.5, 50.5}, centralityAxis, occupancyAxis}}}); @@ -594,6 +616,8 @@ struct DndetaMFTPbPb { registryMC.add({"Events/Centrality/NotFoundEventZvtx", "; #it{z}_{vtx} (cm); centrality; occupancy", {HistType::kTHnSparseF, {zAxis, centralityAxis, occupancyAxis}}}); registryMC.add({"Events/Centrality/ZvtxDiff", "; Z_{rec} - Z_{gen} (cm); centrality; occupancy", {HistType::kTHnSparseF, {deltaZAxis, centralityAxis, occupancyAxis}}}); registryMC.add({"Events/Centrality/hRecZvtxCent", "; #it{z}_{vtx} (cm); centrality; occupancy", {HistType::kTHnSparseF, {zAxis, centralityAxis, occupancyAxis}}}); + LOG(info) << "doprocessMc[Best]CentFT0C -> Size of the MC histograms:"; + registryMC.print(); } if (doprocessMcEfficiencyInclusive || doprocessMcEfficiencyBestInclusive) { registryMC.add("Events/hMcEffStatus", "Number of events; Cut; occupancy", {HistType::kTH2F, {{static_cast(McEffStatus::nMcEfftStatus), -0.5, +static_cast(McEffStatus::nMcEfftStatus) - 0.5}, occupancyAxis}}); @@ -610,6 +634,8 @@ struct DndetaMFTPbPb { registryMC.add({"Events/hVtxZRec", "#it{z}_{vtx} (cm); occupancy", {HistType::kTH2F, {zAxis, occupancyAxis}}}); registryMC.add({"Tracks/hEffRec", "; p_{T} (GeV/c); #varphi; #eta; #it{z}_{vtx} (cm); recEvtType; occupancy", {HistType::kTHnSparseF, {ptAxis, phiAxis, etaAxis, zAxis, recEvtTypeAxis, occupancyAxis}}}); registryMC.add({"Tracks/hEtaRes", "#eta resolution;;(#eta_{rec} - #eta_{gen})/#eta_{gen}; occupancy", {HistType::kTHnSparseF, {etaAxis, {100, -1.0, 1.0}, occupancyAxis}}}); + LOG(info) << "doprocessMcEfficiency[Best]Inclusive -> Size of the MC histograms:"; + registryMC.print(); } if (doprocessMcEfficiencyCentFT0C || doprocessMcEfficiencyBestCentFT0C) { registryMC.add("Events/Centrality/hMcEffStatus", "Number of events; Cut; centrality; occupancy", {HistType::kTHnSparseF, {{static_cast(McEffStatus::nMcEfftStatus), -0.5, +static_cast(McEffStatus::nMcEfftStatus) - 0.5}, centralityAxis, occupancyAxis}}); @@ -625,33 +651,41 @@ struct DndetaMFTPbPb { registryMC.add({"Tracks/Centrality/hEffGen", "; p_{T} (GeV/c); #varphi; #eta; #it{z}_{vtx} (cm); genEvtType; centrality; occupancy", {HistType::kTHnSparseF, {ptAxis, phiAxis, etaAxis, zAxis, genEvtTypeAxis, centralityAxis, occupancyAxis}}}); registryMC.add({"Events/Centrality/hVtxZRec", "#it{z}_{vtx} (cm); centrality; occupancy", {HistType::kTHnSparseF, {zAxis, centralityAxis, occupancyAxis}}}); registryMC.add({"Tracks/Centrality/hEffRec", "; p_{T} (GeV/c); #varphi; #eta; #it{z}_{vtx} (cm); recEvtType; centrality; occupancy", {HistType::kTHnSparseF, {ptAxis, phiAxis, etaAxis, zAxis, recEvtTypeAxis, centralityAxis, occupancyAxis}}}); + LOG(info) << "doprocessMcEfficiency[Best]CentFT0C -> Size of the MC histograms:"; + registryMC.print(); } if (doprocessMcEfficiencyIdxInlusive || doprocessMcEfficiencyIdxBestInlusive) { registryMC.add({"Tracks/hEffIdxGen", "; p_{T} (GeV/c); #eta; recEvtIdxType; occupancy", {HistType::kTHnSparseF, {ptAxis, etaAxis, genEvtIdxTypeAxis, occupancyAxis}}}); registryMC.add({"Tracks/hEffIdxRec", "; p_{T} (GeV/c); #eta; genEvtIdxType; occupancy", {HistType::kTHnSparseF, {ptAxis, etaAxis, recEvtIdxTypeAxis, occupancyAxis}}}); registryMC.add({"Tracks/NmftTrkPerPart", "; #it{N}_{mft tracks per particle}; occupancy", {HistType::kTH2F, {{10, 0.5, 10.5}, occupancyAxis}}}); + LOG(info) << "doprocessMcEfficiencyIdx[Best]Inlusive -> Size of the MC histograms:"; + registryMC.print(); } if (doprocessMcEfficiencyIdxCentFT0C || doprocessMcEfficiencyIdxBestCentFT0C) { registryMC.add({"Tracks/Centrality/hEffIdxGen", "; p_{T} (GeV/c); #eta; recEvtIdxType; centrality; occupancy", {HistType::kTHnSparseF, {ptAxis, etaAxis, genEvtIdxTypeAxis, centralityAxis, occupancyAxis}}}); registryMC.add({"Tracks/Centrality/hEffIdxRec", "; p_{T} (GeV/c); #eta; genEvtIdxType; centrality; occupancy", {HistType::kTHnSparseF, {ptAxis, etaAxis, recEvtIdxTypeAxis, centralityAxis, occupancyAxis}}}); registryMC.add({"Tracks/Centrality/NmftTrkPerPart", "; #it{N}_{mft tracks per particle}; centrality; occupancy", {HistType::kTHnSparseF, {{10, 0.5, 10.5}, centralityAxis, occupancyAxis}}}); + LOG(info) << "doprocessMcEfficiencyIdx[Best]CentFT0C -> Size of the MC histograms:"; + registryMC.print(); } if (doprocessMcSgnEvtLossCentFT0C) { - registryMC.add("Events/hEvtMcGen", "Events/hEvtMcGen", {HistType::kTH1F, {{4, 0.f, 4.f}}}); - registryMC.get(HIST("Events/hEvtMcGen"))->GetXaxis()->SetBinLabel(1, "all"); - registryMC.get(HIST("Events/hEvtMcGen"))->GetXaxis()->SetBinLabel(2, "z-vtx"); - registryMC.get(HIST("Events/hEvtMcGen"))->GetXaxis()->SetBinLabel(3, "isInelGt0wMft"); - registryMC.get(HIST("Events/hEvtMcGen"))->GetXaxis()->SetBinLabel(4, "TVX"); - // - registryMC.add("Events/EvtSigLossStatus", ";status;centrality", {HistType::kTH2F, {{3, 0.5, 3.5}, centralityAxis}}); - auto hstat = registryMC.get(HIST("Events/EvtSigLossStatus")); + registryMC.add("Events/hMcEvtLossStatus", "Number of events; Cut", {HistType::kTH1F, {{static_cast(McEvtLossStatus::kMcEvtStatus), -0.5, +static_cast(McEvtLossStatus::kMcEvtStatus) - 0.5}}}); + std::array(McEvtLossStatus::kMcEvtStatus)> labelMcEvtLossStatus{ + "All", + "Z-vtx", + "TVX", + "InelGt0 coll", + "InelGt0 in MFT"}; + for (int iBin = 0; iBin < static_cast(McEvtLossStatus::kMcEvtStatus); iBin++) { + registryMC.get(HIST("Events/hMcEvtLossStatus"))->GetXaxis()->SetBinLabel(iBin + 1, labelMcEvtLossStatus[iBin].data()); + } + registryMC.add("Events/Centrality/EvtSigLossStatus", ";status;centrality", {HistType::kTH2F, {{3, 0.5, 3.5}, centralityAxis}}); + auto hstat = registryMC.get(HIST("Events/Centrality/EvtSigLossStatus")); hstat->GetXaxis()->SetBinLabel(1, "All MC gen events"); hstat->GetXaxis()->SetBinLabel(2, "MC gen events with rec event with event selection"); hstat->GetXaxis()->SetBinLabel(3, "MC gen events with no rec events"); - // registryMC.add({"Events/hNchGen", "Evt loss; Gen Nch FT0C; evtLossType", {HistType::kTH2F, {multFT0cAxis, evtLossTypeAxis}}}); registryMC.add({"Events/hMultGenVsCentSplit", "Split MC events: Gen Nch vs Rec Cent; rec cent; Gen Nch ", {HistType::kTH2F, {centralityAxis, multFT0cAxis}}}); - registryMC.add({"Events/hNchTVX", "; Nch; status", {HistType::kTH2F, {{2, 0, 2}, multAxis}}}); registryMC.add({"Events/hMultGenVsCent", "event mult MC gen", {HistType::kTH2F, {centralityAxis, multFT0cAxis}}}); registryMC.add({"Events/hMultGenVsCentNParticlesEta05", "event mult MC gen", {HistType::kTH2F, {centralityAxis, multAxis}}}); registryMC.add({"Events/hMultGenVsCentNParticlesEtaMFT", "event mult MC gen", {HistType::kTH2F, {centralityAxis, multAxis}}}); @@ -660,6 +694,8 @@ struct DndetaMFTPbPb { registryMC.add({"Events/hMultGenVsCentRecNParticlesEtaMFT", "event mult MC gen vs centrality", {HistType::kTH2F, {centralityAxis, multAxis}}}); registryMC.add({"Tracks/hEtaVsNchGen", "; #eta; mult gen", {HistType::kTH2F, {etaAxis, multFT0cAxis}}}); registryMC.add({"Tracks/hEtaVsNchGenRecEvt", "; #eta; mult gen w/ Rec evt", {HistType::kTH2F, {etaAxis, multFT0cAxis}}}); + LOG(info) << "doprocessMcSgnEvtLossCentFT0C -> Size of the MC histograms:"; + registryMC.print(); } if (doprocessMcReassocDCA) { registryMC.add({"Events/Centrality/EvtGenRecReassoc", ";status;centrality", {HistType::kTHnSparseF, {{3, 0.5, 3.5}, centralityAxis}}}); @@ -707,6 +743,8 @@ struct DndetaMFTPbPb { registryMC.add({"Tracks/Centrality/THnDCAxyBestGenSecWeakAmbWrongColl", "; p_{T} (GeV/c); #eta; Z_{vtx} (cm); DCA_{XY} (cm); DCA_{Z} (cm)", {HistType::kTHnSparseF, {ptAxis, etaAxis, zAxis, dcaxyAxis, dcazAxis, centralityAxis, centralityAxis}}}); registryMC.add({"Tracks/Centrality/THnDCAxyBestGenSecMatAmb", "; p_{T} (GeV/c); #eta; Z_{vtx} (cm); DCA_{XY} (cm); DCA_{Z} (cm)", {HistType::kTHnSparseF, {ptAxis, etaAxis, zAxis, dcaxyAxis, dcazAxis, centralityAxis, centralityAxis}}}); registryMC.add({"Tracks/Centrality/THnDCAxyBestGenSecMatAmbWrongColl", "; p_{T} (GeV/c); #eta; Z_{vtx} (cm); DCA_{XY} (cm); DCA_{Z} (cm)", {HistType::kTHnSparseF, {ptAxis, etaAxis, zAxis, dcaxyAxis, dcazAxis, centralityAxis, centralityAxis}}}); + LOG(info) << "doprocessMcReassocDCA -> Size of the MC histograms:"; + registryMC.print(); } } @@ -992,36 +1030,10 @@ struct DndetaMFTPbPb { return nTrk; } - template - void countBestTracksExtra(B const& besttracksExtra, float c, float occ) - { - for (auto const& etrack : besttracksExtra) { - if (fillHis) { - if constexpr (has_reco_cent) { - if (gConf.cfgUseTrackParExtra) { - registryData.fill(HIST("Tracks/Centrality/TanLambdaExtra"), etrack.tgl(), c, occ); - registryData.fill(HIST("Tracks/Centrality/InvQPtExtra"), etrack.signed1Pt(), c, occ); - registryData.fill(HIST("Tracks/Centrality/EtaExtra"), etrack.etas(), c, occ); - registryData.fill(HIST("Tracks/Centrality/PhiExtra"), etrack.phis(), c, occ); - } - } else { - if (gConf.cfgUseTrackParExtra) { - registryData.fill(HIST("Tracks/TanLambdaExtra"), etrack.tgl(), occ); - registryData.fill(HIST("Tracks/InvQPtExtra"), etrack.signed1Pt(), occ); - registryData.fill(HIST("Tracks/EtaExtra"), etrack.etas(), occ); - registryData.fill(HIST("Tracks/PhiExtra"), etrack.phis(), occ); - } - } - } - } - } - template - int countBestTracks(T const& tracks, B const& besttracks, float z, float c, float occ) + int countBestTracks(T const& /*tracks*/, B const& besttracks, float z, float c, float occ) { auto nATrk = 0; - ambiguousTrkIds.reserve(besttracks.size()); - reassignedTrkIds.reserve(besttracks.size()); for (auto const& atrack : besttracks) { if (!isBestTrackSelected(atrack)) { continue; @@ -1038,7 +1050,6 @@ struct DndetaMFTPbPb { if (!isTrackSelected(itrack)) { continue; } - ambiguousTrkIds.emplace_back(atrack.mfttrackId()); ++nATrk; if (fillHis) { if constexpr (has_reco_cent) { @@ -1058,7 +1069,6 @@ struct DndetaMFTPbPb { } } if (itrack.has_collision() && itrack.collisionId() != atrack.bestCollisionId()) { - reassignedTrkIds.emplace_back(atrack.mfttrackId()); if (fillHis) { registryQC.fill(HIST("Tracks/hBestTrkSel"), static_cast(TrkBestSel::trkBestSelNumReassoc)); if constexpr (has_reco_cent) { @@ -1071,47 +1081,6 @@ struct DndetaMFTPbPb { } } } - - for (auto const& track : tracks) { - if (!isTrackSelected(track)) { - continue; - } - if (fillHis) { - if constexpr (has_reco_cent) { - registryData.fill(HIST("Tracks/Centrality/OrigTracksEtaZvtx"), track.eta(), z, c, occ); - registryData.fill(HIST("Tracks/Centrality/OrigTracksPhiEta"), track.phi(), track.eta(), c, occ); - } else { - registryData.fill(HIST("Tracks/OrigTracksEtaZvtx"), track.eta(), z, occ); - registryData.fill(HIST("Tracks/OrigTracksPhiEta"), track.phi(), track.eta(), occ); - } - } - if (std::find(ambiguousTrkIds.begin(), ambiguousTrkIds.end(), track.globalIndex()) != ambiguousTrkIds.end()) { - continue; - } - if (std::find(reassignedTrkIds.begin(), reassignedTrkIds.end(), track.globalIndex()) != reassignedTrkIds.end()) { - continue; - } - // ++nATrk; // use for testing purposes only! - if (fillHis) { - if constexpr (has_reco_cent) { - registryData.fill(HIST("Tracks/Centrality/RestTracksEtaZvtx"), track.eta(), z, c, occ); - registryData.fill(HIST("Tracks/Centrality/RestTracksPhiEta"), track.phi(), track.eta(), c, occ); - // registryData.fill(HIST("Tracks/Centrality/EtaZvtx"), track.eta(), z, c, occ); - // registryData.fill(HIST("Tracks/Centrality/PhiEta"), phi, track.eta(), c, occ); - // registryData.fill(HIST("Tracks/Centrality/NclustersEta"), track.nClusters(), track.eta(), c, occ); - } else { - registryData.fill(HIST("Tracks/RestTracksEtaZvtx"), track.eta(), z, occ); - registryData.fill(HIST("Tracks/RestTracksPhiEta"), track.phi(), track.eta(), occ); - // registryData.fill(HIST("Tracks/EtaZvtx"), track.eta(), z, occ); - // registryData.fill(HIST("Tracks/PhiEta"), phi, track.eta(), occ); - // registryData.fill(HIST("Tracks/NclustersEta"), track.nClusters(), track.eta(), occ); - } - } - } - ambiguousTrkIds.clear(); - ambiguousTrkIds.shrink_to_fit(); - reassignedTrkIds.clear(); - reassignedTrkIds.shrink_to_fit(); return nATrk; } @@ -1119,34 +1088,15 @@ struct DndetaMFTPbPb { bool isInelGt0wMft(P const& particles) { int nChrgMc = 0; - int nChrgFT0A = 0; - int nChrgFT0C = 0; for (auto const& particle : particles) { if (!isChrgParticle(particle.pdgCode())) { continue; } - if (!particle.isPhysicalPrimary()) { - continue; - } - // trigger TVX - if (particle.eta() > CminAccFT0A && particle.eta() < CmaxAccFT0A) { - nChrgFT0A++; - } - if (particle.eta() > CminAccFT0C && particle.eta() < CmaxAccFT0C) { - nChrgFT0C++; - } - // acceptance MFT - if (particle.eta() < trackCuts.minEta || particle.eta() > trackCuts.maxEta) { + if (gConf.useParticleSel && !isParticleSelected(particle)) { continue; } nChrgMc++; } - if (nChrgFT0A == CintZero || nChrgFT0C == CintZero) { - registryMC.fill(HIST("Events/hNchTVX"), nChrgMc, 0.5); - return false; - } - registryMC.fill(HIST("Events/hNchTVX"), nChrgMc, 1.5); - return nChrgMc != CintZero; } @@ -1192,7 +1142,7 @@ struct DndetaMFTPbPb { if (!isChrgParticle(particle.pdgCode())) { continue; } - if (gConf.cfgUseParticleSel && !isParticleSelected(particle)) { + if (gConf.useParticleSel && !isParticleSelected(particle)) { continue; } if (particle.eta() < trackCuts.minEta || particle.eta() > trackCuts.maxEta) { @@ -1206,10 +1156,10 @@ struct DndetaMFTPbPb { template bool isParticleSelected(P const& particle) { - if (gConf.cfgUsePrimaries && !particle.isPhysicalPrimary()) { + if (gConf.usePrimaries && !particle.isPhysicalPrimary()) { return false; } - if (!gConf.cfgUsePrimaries && (gConf.cfgUseSecondaries && particle.isPhysicalPrimary())) { + if (!gConf.usePrimaries && (gConf.useSecondaries && particle.isPhysicalPrimary())) { return false; } if (particle.eta() < trackCuts.minEta || particle.eta() > trackCuts.maxEta) { @@ -1395,7 +1345,7 @@ struct DndetaMFTPbPb { if (!isChrgParticle(particle.pdgCode())) { continue; } - if (gConf.cfgUseParticleSel && !isParticleSelected(particle)) { + if (gConf.useParticleSel && !isParticleSelected(particle)) { continue; } if constexpr (isCent) { @@ -1449,41 +1399,59 @@ struct DndetaMFTPbPb { float occ = getOccupancy(collision, eventCuts.occupancyEstimator); auto bc = collision.template foundBC_as(); if constexpr (has_reco_cent) { - registryData.fill(HIST("Events/Centrality/Selection"), 1., c, occ); + registryData.fill(HIST("Events/Centrality/DataEvtStatus"), static_cast(DataEvtStatus::kDataAll), c, occ); } else { - registryData.fill(HIST("Events/Selection"), 1., occ); + registryData.fill(HIST("Events/DataEvtStatus"), static_cast(DataEvtStatus::kDataAll), occ); } - if (gConf.cfgDoIR) { + if (gConf.useIRFromCCDB) { initHadronicRate(bc); - float ir = !gConf.cfgIRSource.value.empty() ? rateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), gConf.cfgIRSource, gConf.cfgIRCrashOnNull) * 1.e-3 : -1; + float ir = !gConf.intRateSource.value.empty() ? rateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), gConf.intRateSource, gConf.intRateCrashOnNull) * 1.e-3 : -1; if constexpr (has_reco_cent) { registryData.fill(HIST("Events/Centrality/hInteractionRate"), ir, c, occ); } else { registryData.fill(HIST("Events/hInteractionRate"), ir, occ); } float seconds = bc.timestamp() * 1.e-3 - mMinSeconds; - if (gConf.cfgUseIRCut && (ir < eventCuts.minIR || ir > eventCuts.maxIR)) { // cut on hadronic rate + if (gConf.useIRCut && (ir < eventCuts.minIR || ir > eventCuts.maxIR)) { // cut on hadronic rate return; } gCurrentHadronicRate->Fill(seconds, ir); } - if (!isGoodEvent(collision)) { - return; - } - auto z = collision.posZ(); - if constexpr (has_reco_cent) { - registryData.fill(HIST("Events/Centrality/Selection"), 2., c, occ); - registryData.fill(HIST("Events/Centrality/hZvtxCent"), z, c, occ); - } else { - registryData.fill(HIST("Events/Selection"), 2., occ); - } - auto nTrk = countTracks(tracks, z, c, occ); + if (!gConf.useEvtSel || isGoodEvent(collision)) { + auto z = collision.posZ(); + if constexpr (has_reco_cent) { + registryData.fill(HIST("Events/Centrality/DataEvtStatus"), static_cast(DataEvtStatus::kDataSel), c, occ); + registryData.fill(HIST("Events/Centrality/hZvtxCent"), z, c, occ); + } else { + registryData.fill(HIST("Events/DataEvtStatus"), static_cast(DataEvtStatus::kDataSel), occ); + } + + auto nTrk = countTracks(tracks, z, c, occ); - if constexpr (has_reco_cent) { - registryData.fill(HIST("Events/Centrality/NtrkZvtx"), nTrk, z, c, occ); + if constexpr (has_reco_cent) { + if (nTrk > 0) { + registryData.fill(HIST("Events/Centrality/DataEvtStatus"), static_cast(DataEvtStatus::kDataSelGt0), c, occ); + for (auto const& track : tracks) { + registryData.fill(HIST("Tracks/Centrality/EtaZvtxGt0"), track.eta(), z, c, occ); + } + } + registryData.fill(HIST("Events/Centrality/NtrkZvtx"), nTrk, z, c, occ); + } else { + if (nTrk > 0) { + registryData.fill(HIST("Events/DataEvtStatus"), static_cast(DataEvtStatus::kDataSelGt0), occ); + for (auto const& track : tracks) { + registryData.fill(HIST("Tracks/EtaZvtxGt0"), track.eta(), z, occ); + } + } + registryData.fill(HIST("Events/NtrkZvtx"), nTrk, z, occ); + } } else { - registryData.fill(HIST("Events/NtrkZvtx"), nTrk, z, occ); + if constexpr (has_reco_cent) { + registryData.fill(HIST("Events/Centrality/DataEvtStatus"), static_cast(DataEvtStatus::kDataRej), c, occ); + } else { + registryData.fill(HIST("Events/DataEvtStatus"), static_cast(DataEvtStatus::kDataRej), occ); + } } } @@ -1492,49 +1460,79 @@ struct DndetaMFTPbPb { void processDatawBestTracks(typename C::iterator const& collision, aod::MFTTracks const& tracks, soa::SmallGroups const& besttracks, - aod::BestCollisionsFwd3dExtra const& besttracksExtra, CollBCs const& /*bcs*/) { float c = getRecoCent(collision); float occ = getOccupancy(collision, eventCuts.occupancyEstimator); auto bc = collision.template foundBC_as(); if constexpr (has_reco_cent) { - registryData.fill(HIST("Events/Centrality/Selection"), 1., c, occ); + registryData.fill(HIST("Events/Centrality/DataEvtStatus"), static_cast(DataEvtStatus::kDataAll), c, occ); } else { - registryData.fill(HIST("Events/Selection"), 1., occ); + registryData.fill(HIST("Events/DataEvtStatus"), static_cast(DataEvtStatus::kDataAll), occ); } - if (gConf.cfgDoIR) { + if (gConf.useIRFromCCDB) { initHadronicRate(bc); - float ir = !gConf.cfgIRSource.value.empty() ? rateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), gConf.cfgIRSource, gConf.cfgIRCrashOnNull) * 1.e-3 : -1; + float ir = !gConf.intRateSource.value.empty() ? rateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), gConf.intRateSource, gConf.intRateCrashOnNull) * 1.e-3 : -1; if constexpr (has_reco_cent) { registryData.fill(HIST("Events/Centrality/hInteractionRate"), ir, c, occ); } else { registryData.fill(HIST("Events/hInteractionRate"), ir, occ); } float seconds = bc.timestamp() * 1.e-3 - mMinSeconds; - if (gConf.cfgUseIRCut && (ir < eventCuts.minIR || ir > eventCuts.maxIR)) { // cut on hadronic rate + if (gConf.useIRCut && (ir < eventCuts.minIR || ir > eventCuts.maxIR)) { // cut on hadronic rate return; } gCurrentHadronicRate->Fill(seconds, ir); } - if (!isGoodEvent(collision)) { - return; - } - auto z = collision.posZ(); - if constexpr (has_reco_cent) { - registryData.fill(HIST("Events/Centrality/Selection"), 2., c, occ); - registryData.fill(HIST("Events/Centrality/hZvtxCent"), z, c, occ); - } else { - registryData.fill(HIST("Events/Selection"), 2., occ); - } - auto nBestTrks = countBestTracks(tracks, besttracks, z, c, occ); - countBestTracksExtra(besttracksExtra, c, occ); + if (!gConf.useEvtSel || isGoodEvent(collision)) { + auto z = collision.posZ(); + if constexpr (has_reco_cent) { + registryData.fill(HIST("Events/Centrality/DataEvtStatus"), static_cast(DataEvtStatus::kDataSel), c, occ); + registryData.fill(HIST("Events/Centrality/hZvtxCent"), z, c, occ); + } else { + registryData.fill(HIST("Events/DataEvtStatus"), static_cast(DataEvtStatus::kDataSel), occ); + } + + auto nBestTrks = countBestTracks(tracks, besttracks, z, c, occ); - if constexpr (has_reco_cent) { - registryData.fill(HIST("Events/Centrality/NtrkZvtx"), nBestTrks, z, c, occ); + if constexpr (has_reco_cent) { + if (nBestTrks > 0) { + registryData.fill(HIST("Events/Centrality/DataEvtStatus"), static_cast(DataEvtStatus::kDataSelGt0), c, occ); + for (auto const& atrack : besttracks) { + if (!isBestTrackSelected(atrack)) { + continue; + } + auto itrack = atrack.mfttrack_as(); + if (!isTrackSelected(itrack)) { + continue; + } + registryData.fill(HIST("Tracks/Centrality/EtaZvtxGt0"), itrack.eta(), z, c, occ); + } + } + registryData.fill(HIST("Events/Centrality/NtrkZvtx"), nBestTrks, z, c, occ); + } else { + if (nBestTrks > 0) { + registryData.fill(HIST("Events/DataEvtStatus"), static_cast(DataEvtStatus::kDataSelGt0), occ); + for (auto const& atrack : besttracks) { + if (!isBestTrackSelected(atrack)) { + continue; + } + auto itrack = atrack.mfttrack_as(); + if (!isTrackSelected(itrack)) { + continue; + } + registryData.fill(HIST("Tracks/EtaZvtxGt0"), itrack.eta(), z, occ); + } + } + registryData.fill(HIST("Events/NtrkZvtx"), nBestTrks, z, occ); + } } else { - registryData.fill(HIST("Events/NtrkZvtx"), nBestTrks, z, occ); + if constexpr (has_reco_cent) { + registryData.fill(HIST("Events/Centrality/DataEvtStatus"), static_cast(DataEvtStatus::kDataRej), c, occ); + } else { + registryData.fill(HIST("Events/DataEvtStatus"), static_cast(DataEvtStatus::kDataRej), occ); + } } } @@ -1552,16 +1550,16 @@ struct DndetaMFTPbPb { PROCESS_SWITCH(DndetaMFTPbPb, processDataCentFT0C, "Count tracks in FT0C centrality bins", false); - void processDatawBestTracksInclusive(Colls::iterator const& collision, aod::MFTTracks const& tracks, soa::SmallGroups const& besttracks, aod::BestCollisionsFwd3dExtra const& besttracksExtra, CollBCs const& bcs) + void processDatawBestTracksInclusive(Colls::iterator const& collision, aod::MFTTracks const& tracks, soa::SmallGroups const& besttracks, CollBCs const& bcs) { - processDatawBestTracks(collision, tracks, besttracks, besttracksExtra, bcs); + processDatawBestTracks(collision, tracks, besttracks, bcs); } PROCESS_SWITCH(DndetaMFTPbPb, processDatawBestTracksInclusive, "Count tracks based on BestCollisionsFwd3d table (inclusive)", false); - void processDatawBestTracksCentFT0C(CollsCentFT0C::iterator const& collision, aod::MFTTracks const& tracks, soa::SmallGroups const& besttracks, aod::BestCollisionsFwd3dExtra const& besttracksExtra, CollBCs const& bcs) + void processDatawBestTracksCentFT0C(CollsCentFT0C::iterator const& collision, aod::MFTTracks const& tracks, soa::SmallGroups const& besttracks, CollBCs const& bcs) { - processDatawBestTracks(collision, tracks, besttracks, besttracksExtra, bcs); + processDatawBestTracks(collision, tracks, besttracks, bcs); } PROCESS_SWITCH(DndetaMFTPbPb, processDatawBestTracksCentFT0C, "Count tracks in FT0C centrality bins based on BestCollisionsFwd3d table", false); @@ -1577,14 +1575,14 @@ struct DndetaMFTPbPb { auto nBestTrks = 0; for (auto const& atrack : besttracks) { - if (gConf.cfgUseTrackSel && !isBestTrackSelected(atrack)) { + if (gConf.useTrackSel && !isBestTrackSelected(atrack)) { continue; } auto itrack = atrack.template mfttrack_as(); if (itrack.eta() < trackCuts.minEta || itrack.eta() > trackCuts.maxEta) { continue; } - if (gConf.cfgUseTrackSel && !isTrackSelected(itrack)) { + if (gConf.useTrackSel && !isTrackSelected(itrack)) { continue; } nBestTrks++; @@ -1647,34 +1645,34 @@ struct DndetaMFTPbPb { float occRec = getOccupancy(collision, eventCuts.occupancyEstimator); float cRec = getRecoCent(collision); if constexpr (has_reco_cent) { - registryMC.fill(HIST("Events/Centrality/McStatus"), static_cast(McStatus::kMcRecAll), cRec, occRec); + registryMC.fill(HIST("Events/Centrality/McEvtStatus"), static_cast(McEvtStatus::kMcRecAll), cRec, occRec); } else { - registryMC.fill(HIST("Events/McStatus"), static_cast(McStatus::kMcRecAll), occRec); + registryMC.fill(HIST("Events/McEvtStatus"), static_cast(McEvtStatus::kMcRecAll), occRec); } if (!isGoodEvent(collision)) { continue; } if constexpr (has_reco_cent) { - registryMC.fill(HIST("Events/Centrality/McStatus"), static_cast(McStatus::kMcRecSel), cRec, occRec); + registryMC.fill(HIST("Events/Centrality/McEvtStatus"), static_cast(McEvtStatus::kMcRecSel), cRec, occRec); } else { - registryMC.fill(HIST("Events/McStatus"), static_cast(McStatus::kMcRecSel), occRec); + registryMC.fill(HIST("Events/McEvtStatus"), static_cast(McEvtStatus::kMcRecSel), occRec); } if (!collision.has_mcCollision()) { continue; } if constexpr (has_reco_cent) { - registryMC.fill(HIST("Events/Centrality/McStatus"), static_cast(McStatus::kMcRecHasMcColl), cRec, occRec); + registryMC.fill(HIST("Events/Centrality/McEvtStatus"), static_cast(McEvtStatus::kMcRecHasMcColl), cRec, occRec); } else { - registryMC.fill(HIST("Events/McStatus"), static_cast(McStatus::kMcRecHasMcColl), occRec); + registryMC.fill(HIST("Events/McEvtStatus"), static_cast(McEvtStatus::kMcRecHasMcColl), occRec); } - if (gConf.cfgRemoveSplitVertex && collision.globalIndex() != mcCollision.bestCollisionIndex()) { + if (gConf.rmSplitVertex && collision.globalIndex() != mcCollision.bestCollisionIndex()) { continue; } if constexpr (has_reco_cent) { - registryMC.fill(HIST("Events/Centrality/McStatus"), static_cast(McStatus::kMcRecNoSplitVtx), cRec, occRec); + registryMC.fill(HIST("Events/Centrality/McEvtStatus"), static_cast(McEvtStatus::kMcRecNoSplitVtx), cRec, occRec); registryMC.fill(HIST("Events/Centrality/hRecZvtxCent"), collision.posZ(), cRec, occRec); } else { - registryMC.fill(HIST("Events/McStatus"), static_cast(McStatus::kMcRecNoSplitVtx), occRec); + registryMC.fill(HIST("Events/McEvtStatus"), static_cast(McEvtStatus::kMcRecNoSplitVtx), occRec); } auto nTrkRec = 0; @@ -1688,7 +1686,7 @@ struct DndetaMFTPbPb { if (!isChrgParticle(particle.pdgCode())) { continue; } - if (gConf.cfgUseParticleSel && !isParticleSelected(particle)) { + if (gConf.useParticleSel && !isParticleSelected(particle)) { continue; } if (collision.mcCollisionId() != particle.mcCollisionId()) { @@ -1721,9 +1719,9 @@ struct DndetaMFTPbPb { } if constexpr (has_reco_cent) { - registryMC.fill(HIST("Events/Centrality/McStatus"), static_cast(McStatus::kMcGenAll), cGen, occGen); + registryMC.fill(HIST("Events/Centrality/McEvtStatus"), static_cast(McEvtStatus::kMcGenAll), cGen, occGen); } else { - registryMC.fill(HIST("Events/McStatus"), static_cast(McStatus::kMcGenAll), occGen); + registryMC.fill(HIST("Events/McEvtStatus"), static_cast(McEvtStatus::kMcGenAll), occGen); } auto nCharged = countPart(particles); @@ -1804,34 +1802,34 @@ struct DndetaMFTPbPb { float occRec = getOccupancy(collision, eventCuts.occupancyEstimator); float cRec = getRecoCent(collision); if constexpr (has_reco_cent) { - registryMC.fill(HIST("Events/Centrality/McStatus"), static_cast(McStatus::kMcRecAll), cRec, occRec); + registryMC.fill(HIST("Events/Centrality/McEvtStatus"), static_cast(McEvtStatus::kMcRecAll), cRec, occRec); } else { - registryMC.fill(HIST("Events/McStatus"), static_cast(McStatus::kMcRecAll), occRec); + registryMC.fill(HIST("Events/McEvtStatus"), static_cast(McEvtStatus::kMcRecAll), occRec); } if (!isGoodEvent(collision)) { continue; } if constexpr (has_reco_cent) { - registryMC.fill(HIST("Events/Centrality/McStatus"), static_cast(McStatus::kMcRecSel), cRec, occRec); + registryMC.fill(HIST("Events/Centrality/McEvtStatus"), static_cast(McEvtStatus::kMcRecSel), cRec, occRec); } else { - registryMC.fill(HIST("Events/McStatus"), static_cast(McStatus::kMcRecSel), occRec); + registryMC.fill(HIST("Events/McEvtStatus"), static_cast(McEvtStatus::kMcRecSel), occRec); } if (!collision.has_mcCollision()) { continue; } if constexpr (has_reco_cent) { - registryMC.fill(HIST("Events/Centrality/McStatus"), static_cast(McStatus::kMcRecHasMcColl), cRec, occRec); + registryMC.fill(HIST("Events/Centrality/McEvtStatus"), static_cast(McEvtStatus::kMcRecHasMcColl), cRec, occRec); } else { - registryMC.fill(HIST("Events/McStatus"), static_cast(McStatus::kMcRecHasMcColl), occRec); + registryMC.fill(HIST("Events/McEvtStatus"), static_cast(McEvtStatus::kMcRecHasMcColl), occRec); } - if (gConf.cfgRemoveSplitVertex && collision.globalIndex() != mcCollision.bestCollisionIndex()) { + if (gConf.rmSplitVertex && collision.globalIndex() != mcCollision.bestCollisionIndex()) { continue; } if constexpr (has_reco_cent) { - registryMC.fill(HIST("Events/Centrality/McStatus"), static_cast(McStatus::kMcRecNoSplitVtx), cRec, occRec); + registryMC.fill(HIST("Events/Centrality/McEvtStatus"), static_cast(McEvtStatus::kMcRecNoSplitVtx), cRec, occRec); registryMC.fill(HIST("Events/Centrality/hRecZvtxCent"), collision.posZ(), cRec, occRec); } else { - registryMC.fill(HIST("Events/McStatus"), static_cast(McStatus::kMcRecNoSplitVtx), occRec); + registryMC.fill(HIST("Events/McEvtStatus"), static_cast(McEvtStatus::kMcRecNoSplitVtx), occRec); } auto nATrk = 0; @@ -1868,7 +1866,7 @@ struct DndetaMFTPbPb { } else { registryMC.fill(HIST("Tracks/hMcTrackStatus"), static_cast(McTrackStatus::kTrkHasColl), occRec); } - if (gConf.cfgRemoveReassigned) { + if (gConf.rmReassigned) { if (itrack.collisionId() != atrack.bestCollisionId()) { continue; } @@ -1883,7 +1881,7 @@ struct DndetaMFTPbPb { if (!isChrgParticle(particle.pdgCode())) { continue; } - if (gConf.cfgUseParticleSel && !isParticleSelected(particle)) { + if (gConf.useParticleSel && !isParticleSelected(particle)) { continue; } if (eventCuts.useZDiffCut) { @@ -1933,9 +1931,9 @@ struct DndetaMFTPbPb { } if constexpr (has_reco_cent) { - registryMC.fill(HIST("Events/Centrality/McStatus"), static_cast(McStatus::kMcGenAll), cGen, occGen); + registryMC.fill(HIST("Events/Centrality/McEvtStatus"), static_cast(McEvtStatus::kMcGenAll), cGen, occGen); } else { - registryMC.fill(HIST("Events/McStatus"), static_cast(McStatus::kMcGenAll), occGen); + registryMC.fill(HIST("Events/McEvtStatus"), static_cast(McEvtStatus::kMcGenAll), occGen); } auto nCharged = countPart(particles); @@ -1991,7 +1989,7 @@ struct DndetaMFTPbPb { if (!isGoodEvent(collision)) { continue; } - if (gConf.cfgRemoveSplitVertex && collision.globalIndex() != mcCollision.bestCollisionIndex()) { + if (gConf.rmSplitVertex && collision.globalIndex() != mcCollision.bestCollisionIndex()) { continue; } gtOneRec = true; @@ -2007,14 +2005,14 @@ struct DndetaMFTPbPb { } else { registryMC.fill(HIST("Events/hVtxZGen"), mcCollision.posZ(), static_cast(GenTrkType::kGenAll), occRec); if (gtOneRec) { - registryMC.fill(HIST("Events/hVtxZGen"), mcCollision.posZ(), static_cast(GenTrkType::kGenAll), occRec); + registryMC.fill(HIST("Events/hVtxZGen"), mcCollision.posZ(), static_cast(GenTrkType::kGenRecEvt), occRec); } } for (const auto& particle : particles) { if (!isChrgParticle(particle.pdgCode())) { continue; } - if (gConf.cfgUseParticleSel && !isParticleSelected(particle)) { + if (gConf.useParticleSel && !isParticleSelected(particle)) { continue; } if constexpr (has_reco_cent) { @@ -2035,7 +2033,7 @@ struct DndetaMFTPbPb { } for (const auto& collision : collisions) { if constexpr (has_reco_cent) { - registryMC.fill(HIST("Events/Centrality/hMcEffStatus"), static_cast(McEffStatus::kMcEffAll), getRecoCent(collision), cRec, occRec); + registryMC.fill(HIST("Events/Centrality/hMcEffStatus"), static_cast(McEffStatus::kMcEffAll), cRec, occRec); } else { registryMC.fill(HIST("Events/hMcEffStatus"), static_cast(McEffStatus::kMcEffAll), occRec); } @@ -2043,7 +2041,7 @@ struct DndetaMFTPbPb { continue; } if constexpr (has_reco_cent) { - registryMC.fill(HIST("Events/Centrality/hMcEffStatus"), static_cast(McEffStatus::kMcEffSel), getRecoCent(collision), cRec, occRec); + registryMC.fill(HIST("Events/Centrality/hMcEffStatus"), static_cast(McEffStatus::kMcEffSel), cRec, occRec); } else { registryMC.fill(HIST("Events/hMcEffStatus"), static_cast(McEffStatus::kMcEffSel), occRec); } @@ -2051,20 +2049,20 @@ struct DndetaMFTPbPb { continue; } if constexpr (has_reco_cent) { - registryMC.fill(HIST("Events/Centrality/hMcEffStatus"), static_cast(McEffStatus::kMcEffHasMcColl), getRecoCent(collision), cRec, occRec); + registryMC.fill(HIST("Events/Centrality/hMcEffStatus"), static_cast(McEffStatus::kMcEffHasMcColl), cRec, occRec); } else { registryMC.fill(HIST("Events/hMcEffStatus"), static_cast(McEffStatus::kMcEffHasMcColl), occRec); } - if (gConf.cfgRemoveSplitVertex && collision.globalIndex() != mcCollision.bestCollisionIndex()) { + if (gConf.rmSplitVertex && collision.globalIndex() != mcCollision.bestCollisionIndex()) { continue; } if constexpr (has_reco_cent) { - registryMC.fill(HIST("Events/Centrality/hMcEffStatus"), static_cast(McEffStatus::kMcEffNoSplitVtx), getRecoCent(collision), cRec, occRec); + registryMC.fill(HIST("Events/Centrality/hMcEffStatus"), static_cast(McEffStatus::kMcEffNoSplitVtx), cRec, occRec); } else { registryMC.fill(HIST("Events/hMcEffStatus"), static_cast(McEffStatus::kMcEffNoSplitVtx), occRec); } if constexpr (has_reco_cent) { - registryMC.fill(HIST("Events/Centrality/hVtxZRec"), collision.posZ(), getRecoCent(collision), cRec, occRec); + registryMC.fill(HIST("Events/Centrality/hVtxZRec"), collision.posZ(), cRec, occRec); } else { registryMC.fill(HIST("Events/hVtxZRec"), collision.posZ(), occRec); } @@ -2078,7 +2076,7 @@ struct DndetaMFTPbPb { if (!isChrgParticle(particle.pdgCode())) { continue; } - if (gConf.cfgUseParticleSel && !isParticleSelected(particle)) { + if (gConf.useParticleSel && !isParticleSelected(particle)) { continue; } if (collision.mcCollisionId() != particle.mcCollisionId()) { @@ -2123,10 +2121,10 @@ struct DndetaMFTPbPb { /// @brief process function to calculate tracking efficiency based on BestCollisionsFwd3d in FT0C bins template - void processEfficiencyBest(typename MC::iterator const& mcCollision, - soa::SmallGroups> const& collisions, - aod::McParticles const& particles, - MftBestTracksLabeled const& besttracks) + void processMcEfficiencyBest(typename MC::iterator const& mcCollision, + soa::SmallGroups> const& collisions, + aod::McParticles const& particles, + MftBestTracksLabeled const& besttracks) { LOGP(debug, "MC col {} has {} reco cols", mcCollision.globalIndex(), collisions.size()); @@ -2139,7 +2137,7 @@ struct DndetaMFTPbPb { if (!isGoodEvent(collision)) { continue; } - if (gConf.cfgRemoveSplitVertex && collision.globalIndex() != mcCollision.bestCollisionIndex()) { + if (gConf.rmSplitVertex && collision.globalIndex() != mcCollision.bestCollisionIndex()) { continue; } gtOneRec = true; @@ -2147,21 +2145,21 @@ struct DndetaMFTPbPb { occRec = getOccupancy(collision, eventCuts.occupancyEstimator); } if constexpr (has_reco_cent) { - registryMC.fill(HIST("Events/hVtxZGen"), mcCollision.posZ(), static_cast(GenTrkType::kGenAll), cRec, occRec); + registryMC.fill(HIST("Events/Centrality/hVtxZGen"), mcCollision.posZ(), static_cast(GenTrkType::kGenAll), cRec, occRec); if (gtOneRec) { - registryMC.fill(HIST("Events/hVtxZGen"), mcCollision.posZ(), static_cast(GenTrkType::kGenRecEvt), cRec, occRec); + registryMC.fill(HIST("Events/Centrality/hVtxZGen"), mcCollision.posZ(), static_cast(GenTrkType::kGenRecEvt), cRec, occRec); } } else { registryMC.fill(HIST("Events/hVtxZGen"), mcCollision.posZ(), static_cast(GenTrkType::kGenAll), occRec); if (gtOneRec) { - registryMC.fill(HIST("Events/hVtxZGen"), mcCollision.posZ(), static_cast(GenTrkType::kGenAll), occRec); + registryMC.fill(HIST("Events/hVtxZGen"), mcCollision.posZ(), static_cast(GenTrkType::kGenRecEvt), occRec); } } for (const auto& particle : particles) { if (!isChrgParticle(particle.pdgCode())) { continue; } - if (gConf.cfgUseParticleSel && !isParticleSelected(particle)) { + if (gConf.useParticleSel && !isParticleSelected(particle)) { continue; } if constexpr (has_reco_cent) { @@ -2182,7 +2180,7 @@ struct DndetaMFTPbPb { } for (const auto& collision : collisions) { if constexpr (has_reco_cent) { - registryMC.fill(HIST("Events/Centrality/hMcEffStatus"), static_cast(McEffStatus::kMcEffAll), getRecoCent(collision), cRec, occRec); + registryMC.fill(HIST("Events/Centrality/hMcEffStatus"), static_cast(McEffStatus::kMcEffAll), cRec, occRec); } else { registryMC.fill(HIST("Events/hMcEffStatus"), static_cast(McEffStatus::kMcEffAll), occRec); } @@ -2190,7 +2188,7 @@ struct DndetaMFTPbPb { continue; } if constexpr (has_reco_cent) { - registryMC.fill(HIST("Events/Centrality/hMcEffStatus"), static_cast(McEffStatus::kMcEffSel), getRecoCent(collision), cRec, occRec); + registryMC.fill(HIST("Events/Centrality/hMcEffStatus"), static_cast(McEffStatus::kMcEffSel), cRec, occRec); } else { registryMC.fill(HIST("Events/hMcEffStatus"), static_cast(McEffStatus::kMcEffSel), occRec); } @@ -2198,20 +2196,20 @@ struct DndetaMFTPbPb { continue; } if constexpr (has_reco_cent) { - registryMC.fill(HIST("Events/Centrality/hMcEffStatus"), static_cast(McEffStatus::kMcEffHasMcColl), getRecoCent(collision), cRec, occRec); + registryMC.fill(HIST("Events/Centrality/hMcEffStatus"), static_cast(McEffStatus::kMcEffHasMcColl), cRec, occRec); } else { registryMC.fill(HIST("Events/hMcEffStatus"), static_cast(McEffStatus::kMcEffHasMcColl), occRec); } - if (gConf.cfgRemoveSplitVertex && collision.globalIndex() != mcCollision.bestCollisionIndex()) { + if (gConf.rmSplitVertex && collision.globalIndex() != mcCollision.bestCollisionIndex()) { continue; } if constexpr (has_reco_cent) { - registryMC.fill(HIST("Events/Centrality/hMcEffStatus"), static_cast(McEffStatus::kMcEffNoSplitVtx), getRecoCent(collision), cRec, occRec); + registryMC.fill(HIST("Events/Centrality/hMcEffStatus"), static_cast(McEffStatus::kMcEffNoSplitVtx), cRec, occRec); } else { registryMC.fill(HIST("Events/hMcEffStatus"), static_cast(McEffStatus::kMcEffNoSplitVtx), occRec); } if constexpr (has_reco_cent) { - registryMC.fill(HIST("Events/Centrality/hVtxZRec"), collision.posZ(), getRecoCent(collision), cRec, occRec); + registryMC.fill(HIST("Events/Centrality/hVtxZRec"), collision.posZ(), cRec, occRec); } else { registryMC.fill(HIST("Events/hVtxZRec"), collision.posZ(), occRec); } @@ -2228,7 +2226,7 @@ struct DndetaMFTPbPb { if (!itrack.has_collision()) { continue; } - if (gConf.cfgRemoveReassigned) { + if (gConf.rmReassigned) { if (itrack.collisionId() != atrack.bestCollisionId()) { continue; } @@ -2238,7 +2236,7 @@ struct DndetaMFTPbPb { if (!isChrgParticle(particle.pdgCode())) { continue; } - if (gConf.cfgUseParticleSel && !isParticleSelected(particle)) { + if (gConf.useParticleSel && !isParticleSelected(particle)) { continue; } if (eventCuts.useZDiffCut) { @@ -2276,7 +2274,7 @@ struct DndetaMFTPbPb { aod::McParticles const& particles, MftBestTracksLabeled const& besttracks) { - processEfficiencyBest(mccollision, collisions, particles, besttracks); + processMcEfficiencyBest(mccollision, collisions, particles, besttracks); } PROCESS_SWITCH(DndetaMFTPbPb, processMcEfficiencyBestInclusive, "Process tracking efficiency (inclusive, based on BestCollisionsFwd3d)", false); @@ -2286,7 +2284,7 @@ struct DndetaMFTPbPb { aod::McParticles const& particles, MftBestTracksLabeled const& besttracks) { - processEfficiencyBest(mccollision, collisions, particles, besttracks); + processMcEfficiencyBest(mccollision, collisions, particles, besttracks); } PROCESS_SWITCH(DndetaMFTPbPb, processMcEfficiencyBestCentFT0C, "Process tracking efficiency (in FT0 centrality bins, based on BestCollisionsFwd3d)", false); @@ -2307,7 +2305,7 @@ struct DndetaMFTPbPb { if (!isGoodEvent(collision)) { continue; } - if (gConf.cfgRemoveSplitVertex && collision.globalIndex() != mcCollision.bestCollisionIndex()) { + if (gConf.rmSplitVertex && collision.globalIndex() != mcCollision.bestCollisionIndex()) { continue; } cRec = getRecoCent(collision); @@ -2317,7 +2315,7 @@ struct DndetaMFTPbPb { if (!isGoodEvent(collision)) { continue; } - if (gConf.cfgRemoveSplitVertex && collision.globalIndex() != mcCollision.bestCollisionIndex()) { + if (gConf.rmSplitVertex && collision.globalIndex() != mcCollision.bestCollisionIndex()) { continue; } auto partsPerCol = particles.sliceByCached(aod::mcparticle::mcCollisionId, mcCollision.globalIndex(), cache); @@ -2453,7 +2451,7 @@ struct DndetaMFTPbPb { if (!isGoodEvent(collision)) { continue; } - if (gConf.cfgRemoveSplitVertex && collision.globalIndex() != mcCollision.bestCollisionIndex()) { + if (gConf.rmSplitVertex && collision.globalIndex() != mcCollision.bestCollisionIndex()) { continue; } cRec = getRecoCent(collision); @@ -2466,7 +2464,7 @@ struct DndetaMFTPbPb { if (!isGoodEvent(collision)) { continue; } - if (gConf.cfgRemoveSplitVertex && collision.globalIndex() != mcCollision.bestCollisionIndex()) { + if (gConf.rmSplitVertex && collision.globalIndex() != mcCollision.bestCollisionIndex()) { continue; } auto partsPerCol = particles.sliceByCached(aod::mcparticle::mcCollisionId, mcCollision.globalIndex(), cache); @@ -2594,34 +2592,36 @@ struct DndetaMFTPbPb { PROCESS_SWITCH(DndetaMFTPbPb, processMcEfficiencyIdxBestCentFT0C, "Process tracking efficiency best (in FT0C centrality bins, indexed)", false); - /// @brief process function to calculate signal loss based on MC void processMcSgnEvtLossCentFT0C(CollsMCExtraMult::iterator const& mcCollision, soa::SmallGroups> const& collisions, aod::McParticles const& particles) { LOGP(debug, "MC col {} has {} reco cols", mcCollision.globalIndex(), collisions.size()); registryMC.fill(HIST("Events/hNchGen"), mcCollision.multMCFT0C(), static_cast(EvtLossType::kGenAll)); - registryMC.fill(HIST("Events/hEvtMcGen"), 0.5); + registryMC.fill(HIST("Events/hMcEvtLossStatus"), static_cast(McEvtLossStatus::kMcEvtAll)); if (eventCuts.useZVtxCutMC && (std::abs(mcCollision.posZ()) >= eventCuts.maxZvtx)) { return; } - registryMC.fill(HIST("Events/hEvtMcGen"), 1.5); - // At least one generated primary in MFT acceptance + TVX triggered collisions - if (gConf.cfgUseInelgt0wMFT && !isInelGt0wMft(particles)) { + registryMC.fill(HIST("Events/hMcEvtLossStatus"), static_cast(McEvtLossStatus::kMcEvtVtxZ)); + if (eventCuts.requireTVX && !(mcCollision.multMCFT0C() > 0 && mcCollision.multMCFT0A() > 0)) { + return; + } + registryMC.fill(HIST("Events/hMcEvtLossStatus"), static_cast(McEvtLossStatus::kMcEvtTVX)); + if (gConf.useInelgt0 && !mcCollision.isInelGt0()) { return; } - registryMC.fill(HIST("Events/hEvtMcGen"), 2.5); - if (eventCuts.useInelgt0wTVX && !(mcCollision.multMCFT0C() > 0 && mcCollision.multMCFT0A() > 0)) { + registryMC.fill(HIST("Events/hMcEvtLossStatus"), static_cast(McEvtLossStatus::kMcEvtInelGt0)); + if (gConf.useInelgt0wMFT && !isInelGt0wMft(particles)) { return; } - registryMC.fill(HIST("Events/hEvtMcGen"), 3.5); + registryMC.fill(HIST("Events/hMcEvtLossStatus"), static_cast(McEvtLossStatus::kMcEvtInelGt0wMft)); registryMC.fill(HIST("Events/hNchGen"), mcCollision.multMCFT0C(), static_cast(EvtLossType::kGenSel)); // Evt loss den bool gtZeroColl = false; auto maxNcontributors = -1; float cRec = CInvalid; for (auto const& collision : collisions) { - if (!isGoodEvent(collision)) { + if (!isGoodEvent(collision)) { continue; } if (std::abs(collision.posZ()) >= eventCuts.maxZvtx) { @@ -2639,26 +2639,29 @@ struct DndetaMFTPbPb { auto perCollMCsample = mcSample->sliceByCached(aod::mcparticle::mcCollisionId, mcCollision.globalIndex(), cache); auto multMCNParticlesEtaMFT = countPart(perCollMCsample); - registryMC.fill(HIST("Events/EvtSigLossStatus"), 1., cRec); // Evt split den + registryMC.fill(HIST("Events/Centrality/EvtSigLossStatus"), 1., cRec); // Evt split den registryMC.fill(HIST("Events/hMultGenVsCent"), cRec, mcCollision.multMCFT0C()); registryMC.fill(HIST("Events/hMultGenVsCentNParticlesEta05"), cRec, mcCollision.multMCNParticlesEta05()); registryMC.fill(HIST("Events/hMultGenVsCentNParticlesEtaMFT"), cRec, multMCNParticlesEtaMFT); if (gtZeroColl) { + if (gConf.useInelgt0wMFT && !isInelGt0wMft(particles)) { + return; + } registryMC.fill(HIST("Events/hNchGen"), mcCollision.multMCFT0C(), static_cast(EvtLossType::kGenRecEvt)); // Evt loss num - registryMC.fill(HIST("Events/EvtSigLossStatus"), 2., cRec); // Evt split num + registryMC.fill(HIST("Events/Centrality/EvtSigLossStatus"), 2., cRec); // Evt split num registryMC.fill(HIST("Events/hMultGenVsCentRec"), cRec, mcCollision.multMCFT0C()); registryMC.fill(HIST("Events/hMultGenVsCentRecNParticlesEta05"), cRec, mcCollision.multMCNParticlesEta05()); registryMC.fill(HIST("Events/hMultGenVsCentRecNParticlesEtaMFT"), cRec, multMCNParticlesEtaMFT); } if (collisions.size() == 0) { - registryMC.fill(HIST("Events/EvtSigLossStatus"), 3., cRec); + registryMC.fill(HIST("Events/Centrality/EvtSigLossStatus"), 3., cRec); } for (auto const& particle : particles) { if (!isChrgParticle(particle.pdgCode())) { continue; } - if (gConf.cfgUseParticleSel && !isParticleSelected(particle)) { + if (gConf.useParticleSel && !isParticleSelected(particle)) { continue; } registryMC.fill(HIST("Tracks/hEtaVsNchGen"), particle.eta(), mcCollision.multMCFT0C()); // Sgn loss den @@ -2696,7 +2699,7 @@ struct DndetaMFTPbPb { continue; } registryMC.fill(HIST("Events/Centrality/EvtGenRecReassoc"), 3., crec); - if (gConf.cfgRemoveSplitVertex && (!setRecCollSel.contains(collision.globalIndex()))) { + if (gConf.rmSplitVertex && (!setRecCollSel.contains(collision.globalIndex()))) { continue; } auto mcColl = collision.mcCollision_as(); @@ -2719,7 +2722,7 @@ struct DndetaMFTPbPb { if (!itrack.has_collision()) { continue; } - if (gConf.cfgRemoveReassigned) { + if (gConf.rmReassigned) { if (itrack.collisionId() != atrack.bestCollisionId()) { continue; } @@ -2731,7 +2734,7 @@ struct DndetaMFTPbPb { if (!isChrgParticle(particle.pdgCode())) { continue; } - if (gConf.cfgUseParticleSel && !isParticleSelected(particle)) { + if (gConf.useParticleSel && !isParticleSelected(particle)) { continue; } if (eventCuts.useZDiffCut) { @@ -2749,7 +2752,7 @@ struct DndetaMFTPbPb { const auto dcaXtruth(particle.vx() - mcColl.posX()); const auto dcaYtruth(particle.vy() - mcColl.posY()); const auto dcaZtruth(particle.vz() - mcColl.posZ()); - auto dcaXYtruth = std::sqrt(dcaXtruth * dcaXtruth + dcaYtruth * dcaYtruth); + const auto dcaXYtruth = std::sqrt(dcaXtruth * dcaXtruth + dcaYtruth * dcaYtruth); const auto mcId = particle.mcCollisionId(); if (!mcIds.contains(mcId)) {