From 5aefdce09eeb4f1be8abb97309e2243a07ab9001 Mon Sep 17 00:00:00 2001 From: RD0407 <67634136+RD0407@users.noreply.github.com> Date: Sun, 16 Jul 2023 13:28:10 +0200 Subject: [PATCH 1/8] Update spectraTOF.cxx --- PWGLF/Tasks/spectraTOF.cxx | 314 ++++++++++++++----------------------- 1 file changed, 115 insertions(+), 199 deletions(-) diff --git a/PWGLF/Tasks/spectraTOF.cxx b/PWGLF/Tasks/spectraTOF.cxx index 4de929f8b13..c0e1d358c5b 100644 --- a/PWGLF/Tasks/spectraTOF.cxx +++ b/PWGLF/Tasks/spectraTOF.cxx @@ -31,7 +31,7 @@ #include "Framework/StaticFor.h" #include "Common/Core/TrackSelectionDefaults.h" #include "PWGLF/DataModel/LFParticleIdentification.h" -#include "PWGLF/DataModel/spectraTOF.h" +#include "spectraTOF.h" #include "TPDGCode.h" @@ -44,10 +44,8 @@ using namespace o2::framework::expressions; struct tofSpectra { Configurable cfgNSigmaCut{"cfgNSigmaCut", 3, "Value of the Nsigma cut"}; Configurable cfgCutVertex{"cfgCutVertex", 10.0f, "Accepted z-vertex range"}; - Configurable cfgCutEtaMax{"cfgCutEtaMax", 0.8f, "Max eta range for tracks"}; - Configurable cfgCutEtaMin{"cfgCutEtaMin", -0.8f, "Min eta range for tracks"}; + Configurable cfgCutEta{"cfgCutEta", 0.8f, "Eta range for tracks"}; Configurable cfgCutY{"cfgCutY", 0.5f, "Y range for tracks"}; - Configurable cfgINELCut{"cfgINELCut", 0, "Event selection: 0 no sel, 1 sel8, 2 INEL>0, 3 INEL>1"}; Configurable enableDcaGoodEvents{"enableDcaGoodEvents", true, "Enables the MC plots with the correct match between data and MC"}; Configurable enableTrackCutHistograms{"enableTrackCutHistograms", true, "Enables track cut histograms, before and after the cut"}; Configurable enableDeltaHistograms{"enableDeltaHistograms", true, "Enables the delta TPC and TOF histograms"}; @@ -57,18 +55,29 @@ struct tofSpectra { Configurable requireNoTrd{"requireNoTrd", false, "Require tracks without TRD"}; Configurable selectEvTime{"selectEvTime", 0, "Select event time flags; 0: any event time, 1: isEvTimeDefined, 2: IsEvTimeTOF, 3: IsEvTimeT0AC, 4: IsEvTimeTOFT0AV, 5: NOT isEvTimeDefined"}; ConfigurableAxis binsPt{"binsPt", {VARIABLE_WIDTH, 0.0, 0.1, 0.12, 0.14, 0.16, 0.18, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.2, 2.4, 2.6, 2.8, 3.0, 3.2, 3.4, 3.6, 3.8, 4.0, 4.2, 4.4, 4.6, 4.8, 5.0}, "Binning of the pT axis"}; - ConfigurableAxis binsEta{"binsEta", {100, -1, 1}, "Binning of the eta axis"}; ConfigurableAxis binsnsigmaTPC{"binsnsigmaTPC", {200, -10, 10}, "Binning of the nsigmaTPC axis"}; + ConfigurableAxis binseta{"binseta", {16, -0.8, 0.8}, "Binning of the eta axis"}; ConfigurableAxis binsnsigmaTOF{"binsnsigmaTOF", {200, -10, 10}, "Binning of the nsigmaTOF axis"}; ConfigurableAxis binsdeltaTPC{"binsdeltaTPC", {500, -1000, 1000}, "Binning of the nsigmaTPC axis"}; ConfigurableAxis binsdeltaTOF{"binsdeltaTOF", {500, -1000, 1000}, "Binning of the nsigmaTOF axis"}; ConfigurableAxis binsDca{"binsDca", {VARIABLE_WIDTH, -3.0, -2.95, -2.9, -2.85, -2.8, -2.75, -2.7, -2.65, -2.6, -2.55, -2.5, -2.45, -2.4, -2.35, -2.3, -2.25, -2.2, -2.15, -2.1, -2.05, -2.0, -1.975, -1.95, -1.925, -1.9, -1.875, -1.85, -1.825, -1.8, -1.775, -1.75, -1.725, -1.7, -1.675, -1.65, -1.625, -1.6, -1.575, -1.55, -1.525, -1.5, -1.475, -1.45, -1.425, -1.4, -1.375, -1.35, -1.325, -1.3, -1.275, -1.25, -1.225, -1.2, -1.175, -1.15, -1.125, -1.1, -1.075, -1.05, -1.025, -1.0, -0.99, -0.98, -0.97, -0.96, -0.95, -0.94, -0.93, -0.92, -0.91, -0.9, -0.89, -0.88, -0.87, -0.86, -0.85, -0.84, -0.83, -0.82, -0.81, -0.8, -0.79, -0.78, -0.77, -0.76, -0.75, -0.74, -0.73, -0.72, -0.71, -0.7, -0.69, -0.68, -0.67, -0.66, -0.65, -0.64, -0.63, -0.62, -0.61, -0.6, -0.59, -0.58, -0.57, -0.56, -0.55, -0.54, -0.53, -0.52, -0.51, -0.5, -0.49, -0.48, -0.47, -0.46, -0.45, -0.44, -0.43, -0.42, -0.41, -0.4, -0.396, -0.392, -0.388, -0.384, -0.38, -0.376, -0.372, -0.368, -0.364, -0.36, -0.356, -0.352, -0.348, -0.344, -0.34, -0.336, -0.332, -0.328, -0.324, -0.32, -0.316, -0.312, -0.308, -0.304, -0.3, -0.296, -0.292, -0.288, -0.284, -0.28, -0.276, -0.272, -0.268, -0.264, -0.26, -0.256, -0.252, -0.248, -0.244, -0.24, -0.236, -0.232, -0.228, -0.224, -0.22, -0.216, -0.212, -0.208, -0.204, -0.2, -0.198, -0.196, -0.194, -0.192, -0.19, -0.188, -0.186, -0.184, -0.182, -0.18, -0.178, -0.176, -0.174, -0.172, -0.17, -0.168, -0.166, -0.164, -0.162, -0.16, -0.158, -0.156, -0.154, -0.152, -0.15, -0.148, -0.146, -0.144, -0.142, -0.14, -0.138, -0.136, -0.134, -0.132, -0.13, -0.128, -0.126, -0.124, -0.122, -0.12, -0.118, -0.116, -0.114, -0.112, -0.11, -0.108, -0.106, -0.104, -0.102, -0.1, -0.099, -0.098, -0.097, -0.096, -0.095, -0.094, -0.093, -0.092, -0.091, -0.09, -0.089, -0.088, -0.087, -0.086, -0.085, -0.084, -0.083, -0.082, -0.081, -0.08, -0.079, -0.078, -0.077, -0.076, -0.075, -0.074, -0.073, -0.072, -0.071, -0.07, -0.069, -0.068, -0.067, -0.066, -0.065, -0.064, -0.063, -0.062, -0.061, -0.06, -0.059, -0.058, -0.057, -0.056, -0.055, -0.054, -0.053, -0.052, -0.051, -0.05, -0.049, -0.048, -0.047, -0.046, -0.045, -0.044, -0.043, -0.042, -0.041, -0.04, -0.039, -0.038, -0.037, -0.036, -0.035, -0.034, -0.033, -0.032, -0.031, -0.03, -0.029, -0.028, -0.027, -0.026, -0.025, -0.024, -0.023, -0.022, -0.021, -0.02, -0.019, -0.018, -0.017, -0.016, -0.015, -0.014, -0.013, -0.012, -0.011, -0.01, -0.009, -0.008, -0.007, -0.006, -0.005, -0.004, -0.003, -0.002, -0.001, -0.0, 0.001, 0.002, 0.003, 0.004, 0.005, 0.006, 0.007, 0.008, 0.009, 0.01, 0.011, 0.012, 0.013, 0.014, 0.015, 0.016, 0.017, 0.018, 0.019, 0.02, 0.021, 0.022, 0.023, 0.024, 0.025, 0.026, 0.027, 0.028, 0.029, 0.03, 0.031, 0.032, 0.033, 0.034, 0.035, 0.036, 0.037, 0.038, 0.039, 0.04, 0.041, 0.042, 0.043, 0.044, 0.045, 0.046, 0.047, 0.048, 0.049, 0.05, 0.051, 0.052, 0.053, 0.054, 0.055, 0.056, 0.057, 0.058, 0.059, 0.06, 0.061, 0.062, 0.063, 0.064, 0.065, 0.066, 0.067, 0.068, 0.069, 0.07, 0.071, 0.072, 0.073, 0.074, 0.075, 0.076, 0.077, 0.078, 0.079, 0.08, 0.081, 0.082, 0.083, 0.084, 0.085, 0.086, 0.087, 0.088, 0.089, 0.09, 0.091, 0.092, 0.093, 0.094, 0.095, 0.096, 0.097, 0.098, 0.099, 0.1, 0.102, 0.104, 0.106, 0.108, 0.11, 0.112, 0.114, 0.116, 0.118, 0.12, 0.122, 0.124, 0.126, 0.128, 0.13, 0.132, 0.134, 0.136, 0.138, 0.14, 0.142, 0.144, 0.146, 0.148, 0.15, 0.152, 0.154, 0.156, 0.158, 0.16, 0.162, 0.164, 0.166, 0.168, 0.17, 0.172, 0.174, 0.176, 0.178, 0.18, 0.182, 0.184, 0.186, 0.188, 0.19, 0.192, 0.194, 0.196, 0.198, 0.2, 0.204, 0.208, 0.212, 0.216, 0.22, 0.224, 0.228, 0.232, 0.236, 0.24, 0.244, 0.248, 0.252, 0.256, 0.26, 0.264, 0.268, 0.272, 0.276, 0.28, 0.284, 0.288, 0.292, 0.296, 0.3, 0.304, 0.308, 0.312, 0.316, 0.32, 0.324, 0.328, 0.332, 0.336, 0.34, 0.344, 0.348, 0.352, 0.356, 0.36, 0.364, 0.368, 0.372, 0.376, 0.38, 0.384, 0.388, 0.392, 0.396, 0.4, 0.41, 0.42, 0.43, 0.44, 0.45, 0.46, 0.47, 0.48, 0.49, 0.5, 0.51, 0.52, 0.53, 0.54, 0.55, 0.56, 0.57, 0.58, 0.59, 0.6, 0.61, 0.62, 0.63, 0.64, 0.65, 0.66, 0.67, 0.68, 0.69, 0.7, 0.71, 0.72, 0.73, 0.74, 0.75, 0.76, 0.77, 0.78, 0.79, 0.8, 0.81, 0.82, 0.83, 0.84, 0.85, 0.86, 0.87, 0.88, 0.89, 0.9, 0.91, 0.92, 0.93, 0.94, 0.95, 0.96, 0.97, 0.98, 0.99, 1.0, 1.025, 1.05, 1.075, 1.1, 1.125, 1.15, 1.175, 1.2, 1.225, 1.25, 1.275, 1.3, 1.325, 1.35, 1.375, 1.4, 1.425, 1.45, 1.475, 1.5, 1.525, 1.55, 1.575, 1.6, 1.625, 1.65, 1.675, 1.7, 1.725, 1.75, 1.775, 1.8, 1.825, 1.85, 1.875, 1.9, 1.925, 1.95, 1.975, 2.0, 2.05, 2.1, 2.15, 2.2, 2.25, 2.3, 2.35, 2.4, 2.45, 2.5, 2.55, 2.6, 2.65, 2.7, 2.75, 2.8, 2.85, 2.9, 2.95, 3.0}, "Binning of DCA xy and z axis"}; ConfigurableAxis binsMultiplicity{"binsMultiplicity", {100, 0, 100}, "Binning for multiplicity"}; ConfigurableAxis binsPercentile{"binsPercentile", {100, 0, 100}, "Binning for percentiles"}; + static constexpr int kNoMultiplicity = 0; + static constexpr int kMultFV0M = 1; + static constexpr int kMultFT0M = 2; + static constexpr int kMultFDDM = 3; + static constexpr int kMultTracklets = 4; + static constexpr int kMultTPC = 5; + static constexpr int kMultNTracksPV = 6; + static constexpr int kMultNTracksPVeta1 = 7; + static constexpr int kCentralityFT0C = 8; + static constexpr int kCentralityFT0M = 9; + static constexpr int kCentralityFV0A = 10; + static constexpr int kNMults = 10; Configurable multiplicityEstimator{"multiplicityEstimator", 0, "Flag to use a multiplicity estimator: 0 no multiplicity, 1 MultFV0M, 2 MultFT0M, 3 MultFDDM, 4 MultTracklets, 5 MultTPC, 6 MultNTracksPV, 7 MultNTracksPVeta1, 8 CentralityFT0C, 9 CentralityFT0M, 10 CentralityFV0A"}; // Custom track cuts for the cut variation study TrackSelection customTrackCuts; - Configurable ckeckKaonIsPvContrib{"ckeckKaonIsPvContrib", false, "Flag to ckeck if kaon tracks are from pv"}; Configurable useCustomTrackCuts{"useCustomTrackCuts", false, "Flag to use custom track cuts"}; Configurable itsPattern{"itsPattern", 0, "0 = Run3ITSibAny, 1 = Run3ITSallAny, 2 = Run3ITSall7Layers, 3 = Run3ITSibTwo"}; Configurable requireITS{"requireITS", true, "Additional cut on the ITS requirement"}; @@ -158,7 +167,6 @@ struct tofSpectra { LOG(info) << "\tmaxChi2PerClusterITS=" << maxChi2PerClusterITS.value; LOG(info) << "\tmaxDcaZ=" << maxDcaZ.value; LOG(info) << "\tmakeTHnSparseChoice=" << makeTHnSparseChoice.value; - LOG(info) << "\tckeckKaonIsPvContrib=" << ckeckKaonIsPvContrib.value; customTrackCuts = getGlobalTrackSelectionRun3ITSMatch(itsPattern.value); LOG(info) << "Customizing track cuts:"; @@ -172,28 +180,24 @@ struct tofSpectra { customTrackCuts.SetMinNCrossedRowsOverFindableClustersTPC(minNCrossedRowsOverFindableClustersTPC.value); customTrackCuts.SetMaxDcaXYPtDep([](float pt) { return 10000.f; }); // No DCAxy cut will be used, this is done via the member function of the task customTrackCuts.SetMaxDcaZ(maxDcaZ.value); + //customTrackCuts.SetMakeTHnSparseChoice(makeTHnSparseChoice.value); customTrackCuts.print(); } // Histograms const AxisSpec vtxZAxis{100, -20, 20, "Vtx_{z} (cm)"}; const AxisSpec pAxis{binsPt, "#it{p} (GeV/#it{c})"}; const AxisSpec ptAxis{binsPt, "#it{p}_{T} (GeV/#it{c})"}; + const AxisSpec etaAxis{binseta, "#it{#eta}"}; histos.add("event/vertexz", "", HistType::kTH1D, {vtxZAxis}); auto h = histos.add("evsel", "evsel", HistType::kTH1D, {{10, 0.5, 10.5}}); h->GetXaxis()->SetBinLabel(1, "Events read"); - h->GetXaxis()->SetBinLabel(2, "INEL>0"); - h->GetXaxis()->SetBinLabel(3, "INEL>1"); - h->GetXaxis()->SetBinLabel(4, "Ev. sel. passed"); - h->GetXaxis()->SetBinLabel(5, "INEL>0"); - h->GetXaxis()->SetBinLabel(6, "INEL>1"); - h->GetXaxis()->SetBinLabel(7, "posZ passed"); - h->GetXaxis()->SetBinLabel(8, "INEL>0"); - h->GetXaxis()->SetBinLabel(9, "INEL>1"); + h->GetXaxis()->SetBinLabel(2, "Ev. sel. passed"); + h->GetXaxis()->SetBinLabel(3, "posZ passed"); h = histos.add("tracksel", "tracksel", HistType::kTH1D, {{10, 0.5, 10.5}}); h->GetXaxis()->SetBinLabel(1, "Tracks read"); - h->GetXaxis()->SetBinLabel(2, Form(" %.2f < #eta < %.2f ", cfgCutEtaMin.value, cfgCutEtaMax.value)); + h->GetXaxis()->SetBinLabel(2, "Eta passed"); h->GetXaxis()->SetBinLabel(3, "Quality passed"); h->GetXaxis()->SetBinLabel(4, "TOF passed (partial)"); @@ -232,7 +236,6 @@ struct tofSpectra { if (enableTrackCutHistograms) { const AxisSpec chargeAxis{2, -2.f, 2.f, "Charge"}; - histos.add("track/Eta", "Eta", HistType::kTH1D, {{binsEta, "#eta tracks"}}); // its histograms histos.add("track/ITS/itsNCls", "number of found ITS clusters;# clusters ITS", kTH2D, {{8, -0.5, 7.5}, chargeAxis}); histos.add("track/ITS/itsChi2NCl", "chi2 per ITS cluster;chi2 / cluster ITS", kTH2D, {{100, 0, 40}, chargeAxis}); @@ -303,15 +306,11 @@ struct tofSpectra { histos.add("MC/fake/neg", "Fake negative tracks", kTH1D, {ptAxis}); histos.add("MC/no_collision/pos", "No collision pos track", kTH1D, {ptAxis}); histos.add("MC/no_collision/neg", "No collision neg track", kTH1D, {ptAxis}); - auto hh = histos.add("MC/GenRecoCollisions", "Generated and Reconstructed MC Collisions", kTH1D, {{10, 0.5, 10.5}}); - hh->GetXaxis()->SetBinLabel(1, "Collisions generated"); - hh->GetXaxis()->SetBinLabel(2, "Collisions reconstructed"); - hh->GetXaxis()->SetBinLabel(3, "INEL>0"); - hh->GetXaxis()->SetBinLabel(4, "INEL>1"); - hh->GetXaxis()->SetBinLabel(5, "hasParticleInFT0C && hasParticleInFT0A"); + histos.add("MC/GenRecoCollisions", "Generated and Reconstructed MC Collisions", kTH1D, {{3, 0, 3}}); } for (int i = 0; i < NpCharge; i++) { + switch (i) { case 0: case Np: @@ -327,19 +326,19 @@ struct tofSpectra { break; case 2: case Np + 2: - if (doprocessFullPi == false && doprocessLfFullPi == false && doprocessDerived == false) { + if (doprocessFullPi == false && doprocessLfFullPi == false) { continue; } break; case 3: case Np + 3: - if (doprocessFullKa == false && doprocessLfFullKa == false && doprocessDerived == false) { + if (doprocessFullKa == false && doprocessLfFullKa == false) { continue; } break; case 4: case Np + 4: - if (doprocessFullPr == false && doprocessLfFullPr == false && doprocessDerived == false) { + if (doprocessFullPr == false && doprocessLfFullPr == false) { continue; } break; @@ -373,62 +372,58 @@ struct tofSpectra { const AxisSpec nsigmaTOFAxis{binsnsigmaTOF, Form("N_{#sigma}^{TOF}(%s)", pTCharge[i])}; const AxisSpec deltaTPCAxis{binsdeltaTPC, Form("#Delta^{TPC}(%s)", pTCharge[i])}; const AxisSpec deltaTOFAxis{binsdeltaTOF, Form("#Delta^{TOF}(%s)", pTCharge[i])}; - const AxisSpec etaAxis{binsEta, Form("#eta^{TPC}_{TOF}(%s)", pTCharge[i])}; AxisSpec multAxis{binsMultiplicity, "Undefined multiplicity estimator"}; - if (enableTPCTOFHistograms && !makeTHnSparseChoice) { + if (enableTPCTOFHistograms) { histos.add(hnsigmatpctof[i].data(), pTCharge[i], kTH3D, {ptAxis, nsigmaTPCAxis, nsigmaTOFAxis}); } - if (enableTPCTOFHistograms && makeTHnSparseChoice) { - histos.add(hnsigmatpctof[i].data(), pTCharge[i], kTHnSparseD, {ptAxis, etaAxis, nsigmaTPCAxis, nsigmaTOFAxis}); - } switch (multiplicityEstimator) { - case MultCodes::kNoMultiplicity: // No multiplicity + case kNoMultiplicity: // No multiplicity break; - case MultCodes::kMultFV0M: // MultFV0M + case kMultFV0M: // MultFV0M multAxis.name = "MultFV0M"; break; - case MultCodes::kMultFT0M: // MultFT0M + case kMultFT0M: // MultFT0M multAxis.name = "MultFT0M"; break; - case MultCodes::kMultFDDM: // MultFDDM + case kMultFDDM: // MultFDDM multAxis.name = "MultFDDM"; break; - case MultCodes::kMultTracklets: // MultTracklets + case kMultTracklets: // MultTracklets multAxis.name = "MultTracklets"; break; - case MultCodes::kMultTPC: // MultTPC + case kMultTPC: // MultTPC multAxis.name = "MultTPC"; break; - case MultCodes::kMultNTracksPV: // MultNTracksPV + case kMultNTracksPV: // MultNTracksPV multAxis.name = "MultNTracksPV"; break; - case MultCodes::kMultNTracksPVeta1: // MultNTracksPVeta1 + case kMultNTracksPVeta1: // MultNTracksPVeta1 multAxis.name = "MultNTracksPVeta1"; break; - case MultCodes::kCentralityFT0C: // Centrality FT0C + case kCentralityFT0C: // Centrality FT0C multAxis = {binsPercentile, "Centrality FT0C"}; break; - case MultCodes::kCentralityFT0M: // Centrality FT0M + case kCentralityFT0M: // Centrality FT0M multAxis = {binsPercentile, "Centrality FT0M"}; break; - case MultCodes::kCentralityFV0A: // Centrality FV0A + case kCentralityFV0A: // Centrality FV0A multAxis = {binsPercentile, "Centrality FV0A"}; break; default: LOG(fatal) << "Unrecognized option for multiplicity " << multiplicityEstimator; } - if (multiplicityEstimator == MultCodes::kNoMultiplicity) { + if (multiplicityEstimator == kNoMultiplicity) { histos.add(hnsigmatof[i].data(), pTCharge[i], kTH2D, {ptAxis, nsigmaTOFAxis}); histos.add(hnsigmatpc[i].data(), pTCharge[i], kTH2D, {ptAxis, nsigmaTPCAxis}); if (enableDeltaHistograms) { histos.add(hdeltatof[i].data(), pTCharge[i], kTH2D, {ptAxis, deltaTOFAxis}); histos.add(hdeltatpc[i].data(), pTCharge[i], kTH2D, {ptAxis, deltaTPCAxis}); } - } else if (multiplicityEstimator != MultCodes::kNoMultiplicity && makeTHnSparseChoice) { // RD - histos.add(hnsigmatof[i].data(), pTCharge[i], kTHnSparseD, {ptAxis, nsigmaTOFAxis, multAxis, dcaXyAxis, dcaZAxis}); // RD - histos.add(hnsigmatpc[i].data(), pTCharge[i], kTHnSparseD, {ptAxis, nsigmaTPCAxis, multAxis, dcaXyAxis, dcaZAxis}); // RD + } else if (multiplicityEstimator != kNoMultiplicity && makeTHnSparseChoice) { // RD + histos.add(hnsigmatof[i].data(), pTCharge[i], kTHnSparseD, {ptAxis, nsigmaTOFAxis, multAxis, dcaXyAxis, dcaZAxis, etaAxis}); // RD + histos.add(hnsigmatpc[i].data(), pTCharge[i], kTHnSparseD, {ptAxis, nsigmaTPCAxis, multAxis, dcaXyAxis, dcaZAxis, etaAxis}); // RD } else { @@ -500,70 +495,65 @@ struct tofSpectra { if (abs(track.rapidity(PID::getMass(id))) > cfgCutY) { return; } - if constexpr (id == PID::Kaon) { - if (ckeckKaonIsPvContrib && !track.isPVContributor()) { - return; - } - } const auto& nsigmaTOF = o2::aod::pidutils::tofNSigma(track); const auto& nsigmaTPC = o2::aod::pidutils::tpcNSigma(track); // const auto id = track.sign() > 0 ? id : id + Np; float multiplicity = 0.f; switch (multiplicityEstimator) { - case MultCodes::kNoMultiplicity: // No multiplicity + case kNoMultiplicity: // No multiplicity break; - case MultCodes::kMultFV0M: // MultFV0M + case kMultFV0M: // MultFV0M // multiplicity = collision.multFV0M(); // multiplicity = collision.multZeqFV0A() + collision.multZeqFV0C(); multiplicity = collision.multZeqFV0A(); break; - case MultCodes::kMultFT0M: // MultFT0M + case kMultFT0M: // MultFT0M // multiplicity = collision.multFT0M(); multiplicity = collision.multZeqFT0A() + collision.multZeqFT0C(); break; - case MultCodes::kMultFDDM: // MultFDDM + case kMultFDDM: // MultFDDM // multiplicity = collision.multFDDM(); multiplicity = collision.multZeqFDDA() + collision.multZeqFDDC(); break; - case MultCodes::kMultTracklets: // MultTracklets + case kMultTracklets: // MultTracklets multiplicity = collision.multTracklets(); break; - case MultCodes::kMultTPC: // MultTPC + case kMultTPC: // MultTPC multiplicity = collision.multTPC(); break; - case MultCodes::kMultNTracksPV: // MultNTracksPV + case kMultNTracksPV: // MultNTracksPV // multiplicity = collision.multNTracksPV(); multiplicity = collision.multZeqNTracksPV(); break; - case MultCodes::kMultNTracksPVeta1: // MultNTracksPVeta1 + case kMultNTracksPVeta1: // MultNTracksPVeta1 multiplicity = collision.multNTracksPVeta1(); break; - case MultCodes::kCentralityFT0C: // Centrality FT0C + case kCentralityFT0C: // Centrality FT0C multiplicity = collision.centFT0C(); break; - case MultCodes::kCentralityFT0M: // Centrality FT0M + case kCentralityFT0M: // Centrality FT0M multiplicity = collision.centFT0M(); break; - case MultCodes::kCentralityFV0A: // Centrality FT0M + case kCentralityFV0A: // Centrality FT0M multiplicity = collision.centFV0A(); break; default: LOG(fatal) << "Unknown multiplicity estimator: " << multiplicityEstimator; } - if (multiplicityEstimator == MultCodes::kNoMultiplicity) { + if (multiplicityEstimator == kNoMultiplicity) { if (track.sign() > 0) { histos.fill(HIST(hnsigmatpc[id]), track.pt(), nsigmaTPC); } else { histos.fill(HIST(hnsigmatpc[id + Np]), track.pt(), nsigmaTPC); } - } else if (makeTHnSparseChoice) { // RD - if (track.sign() > 0) { // RD - histos.fill(HIST(hnsigmatpc[id]), track.pt(), nsigmaTPC, multiplicity, track.dcaXY(), track.dcaZ()); // RD - } else { // RD - histos.fill(HIST(hnsigmatpc[id + Np]), track.pt(), nsigmaTPC, multiplicity, track.dcaXY(), track.dcaZ()); // RD - } // RD + } else if (multiplicityEstimator != kNoMultiplicity && makeTHnSparseChoice) { // RD + if (track.sign() > 0) { // RD + histos.fill(HIST(hnsigmatpc[id]), track.pt(), nsigmaTPC, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD + } else { // RD + histos.fill(HIST(hnsigmatpc[id + Np]), track.pt(), nsigmaTPC, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD + } // RD } else { if (track.sign() > 0) { histos.fill(HIST(hnsigmatpc[id]), track.pt(), nsigmaTPC, multiplicity); @@ -575,7 +565,7 @@ struct tofSpectra { if constexpr (fillFullInfo) { if (enableDeltaHistograms) { const auto& deltaTPC = o2::aod::pidutils::tpcExpSignalDiff(track); - if (multiplicityEstimator == MultCodes::kNoMultiplicity) { + if (multiplicityEstimator == kNoMultiplicity) { if (track.sign() > 0) { histos.fill(HIST(hdeltatpc[id]), track.pt(), deltaTPC); } else { @@ -672,18 +662,18 @@ struct tofSpectra { } } - if (multiplicityEstimator == MultCodes::kNoMultiplicity) { + if (multiplicityEstimator == kNoMultiplicity) { if (track.sign() > 0) { histos.fill(HIST(hnsigmatof[id]), track.pt(), nsigmaTOF); } else { histos.fill(HIST(hnsigmatof[id + Np]), track.pt(), nsigmaTOF); } - } else if (multiplicityEstimator != MultCodes::kNoMultiplicity && makeTHnSparseChoice) { // RD - if (track.sign() > 0) { // RD - histos.fill(HIST(hnsigmatof[id]), track.pt(), nsigmaTOF, multiplicity, track.dcaXY(), track.dcaZ()); // RD - } else { // RD - histos.fill(HIST(hnsigmatof[id + Np]), track.pt(), nsigmaTOF, multiplicity, track.dcaXY(), track.dcaZ()); // RD - } // RD + } else if (multiplicityEstimator != kNoMultiplicity && makeTHnSparseChoice) { // RD + if (track.sign() > 0) { // RD + histos.fill(HIST(hnsigmatof[id]), track.pt(), nsigmaTOF, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD + } else { // RD + histos.fill(HIST(hnsigmatof[id + Np]), track.pt(), nsigmaTOF, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD + } // RD } else { if (track.sign() > 0) { histos.fill(HIST(hnsigmatof[id]), track.pt(), nsigmaTOF, multiplicity); @@ -692,15 +682,7 @@ struct tofSpectra { } } - if (enableTPCTOFHistograms && makeTHnSparseChoice) { - if (track.sign() > 0) { - histos.fill(HIST(hnsigmatpctof[id]), track.pt(), track.eta(), nsigmaTPC, nsigmaTOF); - } else { - histos.fill(HIST(hnsigmatpctof[id + Np]), track.pt(), track.eta(), nsigmaTPC, nsigmaTOF); - } - } - - if (enableTPCTOFHistograms && !makeTHnSparseChoice) { + if (enableTPCTOFHistograms) { if (track.sign() > 0) { histos.fill(HIST(hnsigmatpctof[id]), track.pt(), nsigmaTPC, nsigmaTOF); } else { @@ -711,7 +693,7 @@ struct tofSpectra { if constexpr (fillFullInfo) { if (enableDeltaHistograms) { const auto& deltaTOF = o2::aod::pidutils::tofExpSignalDiff(track); - if (multiplicityEstimator == MultCodes::kNoMultiplicity) { + if (multiplicityEstimator == kNoMultiplicity) { if (track.sign() > 0) { histos.fill(HIST(hdeltatof[id]), track.pt(), deltaTOF); } else { @@ -755,53 +737,23 @@ struct tofSpectra { } } - int mNInelTrks = 0; - template - bool isEventSelected(CollisionType const& collision, TrackType const& tracks) + template + bool isEventSelected(CollisionType const& collision) { if constexpr (fillHistograms) { - histos.fill(HIST("evsel"), 1.f); - } - mNInelTrks = 0; // Reset it - for (const auto& trk : tracks) { - if (trk.isPVContributor() && std::abs(trk.eta()) < 1.f) { - mNInelTrks++; - } - if (mNInelTrks >= 2) { - break; - } - } - if constexpr (fillHistograms) { - if (mNInelTrks >= 1) { - histos.fill(HIST("evsel"), 2.f); - } - if (mNInelTrks >= 2) { - histos.fill(HIST("evsel"), 3.f); - } + histos.fill(HIST("evsel"), 1); } if (!collision.sel8()) { return false; } if constexpr (fillHistograms) { - histos.fill(HIST("evsel"), 4.f); - if (mNInelTrks >= 1) { - histos.fill(HIST("evsel"), 5.f); - } - if (mNInelTrks >= 2) { - histos.fill(HIST("evsel"), 6.f); - } + histos.fill(HIST("evsel"), 2); } if (abs(collision.posZ()) > cfgCutVertex) { return false; } if constexpr (fillHistograms) { - histos.fill(HIST("evsel"), 7.f); - if (mNInelTrks >= 1) { - histos.fill(HIST("evsel"), 8.f); - } - if (mNInelTrks >= 2) { - histos.fill(HIST("evsel"), 9.f); - } + histos.fill(HIST("evsel"), 3); histos.fill(HIST("event/vertexz"), collision.posZ()); if constexpr (fillMultiplicity) { @@ -862,13 +814,13 @@ struct tofSpectra { return track.isGlobalTrackWoDCA(); } - template + template bool isTrackSelected(TrackType const& track) { if constexpr (fillHistograms) { histos.fill(HIST("tracksel"), 1); } - if (track.eta() < cfgCutEtaMin || track.eta() > cfgCutEtaMax) { + if (abs(track.eta()) > cfgCutEta) { return false; } if constexpr (fillHistograms) { @@ -1005,10 +957,10 @@ struct tofSpectra { using TrackCandidates = soa::Join; - void processStandard(CollisionCandidate::iterator const& collision, - TrackCandidates const& tracks) + void process(CollisionCandidate::iterator const& collision, + TrackCandidates const& tracks) { - if (!isEventSelected(collision, tracks)) { + if (!isEventSelected(collision)) { return; } for (const auto& track : tracks) { @@ -1017,30 +969,6 @@ struct tofSpectra { } } } // end of the process function - PROCESS_SWITCH(tofSpectra, processStandard, "Standard processor from AO2D", true); - - Preslice spPerCol = aod::spectra::collisionId; - SliceCache cacheTrk; - void processDerived(aod::SpColls const& collisions, - aod::SpTracks const& tracks) - { - for (const auto& collision : collisions) { - if (!isEventSelected(collision, tracks)) { - return; - } - const auto& tracksInCollision = tracks.sliceByCached(aod::spectra::collisionId, collision.globalIndex(), cacheTrk); - for (const auto& track : tracksInCollision) { - if (!isTrackSelected(track)) { - continue; - } - histos.fill(HIST("track/Eta"), track.eta()); - fillParticleHistos(track, collision); - fillParticleHistos(track, collision); - fillParticleHistos(track, collision); - } - } - } // end of the process function - PROCESS_SWITCH(tofSpectra, processDerived, "Derived data processor", false); #define makeProcessFunction(processorName, inputPid, particleId, isFull, tofTable, tpcTable) \ void process##processorName##inputPid(CollisionCandidate::iterator const& collision, \ @@ -1048,7 +976,7 @@ struct tofSpectra { aod::pid##tofTable##inputPid, \ aod::pid##tpcTable##inputPid> const& tracks) \ { \ - if (!isEventSelected(collision, tracks)) { \ + if (!isEventSelected(collision)) { \ return; \ } \ for (const auto& track : tracks) { \ @@ -1154,37 +1082,37 @@ struct tofSpectra { float multiplicity = 0.f; switch (multiplicityEstimator) { - case MultCodes::kNoMultiplicity: // No multiplicity - multiplicity = 50; // to check if its filled + case kNoMultiplicity: // No multiplicity + multiplicity = 50; // to check if its filled break; - case MultCodes::kMultFV0M: // MultFV0M + case kMultFV0M: // MultFV0M multiplicity = collision.multZeqFV0A(); break; - case MultCodes::kMultFT0M: + case kMultFT0M: multiplicity = collision.multZeqFT0A() + collision.multZeqFT0C(); break; - case MultCodes::kMultFDDM: // MultFDDM + case kMultFDDM: // MultFDDM multiplicity = collision.multZeqFDDA() + collision.multZeqFDDC(); break; - case MultCodes::kMultTracklets: // MultTracklets + case kMultTracklets: // MultTracklets multiplicity = collision.multTracklets(); break; - case MultCodes::kMultTPC: // MultTPC + case kMultTPC: // MultTPC multiplicity = collision.multTPC(); break; - case MultCodes::kMultNTracksPV: // MultNTracksPV + case kMultNTracksPV: // MultNTracksPV // multiplicity = collision.multNTracksPV(); multiplicity = collision.multZeqNTracksPV(); break; - case MultCodes::kMultNTracksPVeta1: // MultNTracksPVeta1 + case kMultNTracksPVeta1: // MultNTracksPVeta1 multiplicity = collision.multNTracksPVeta1(); break; - case MultCodes::kCentralityFT0C: // Centrality FT0C + case kCentralityFT0C: // Centrality FT0C multiplicity = collision.centFT0C(); break; - case MultCodes::kCentralityFT0M: // Centrality FT0M + case kCentralityFT0M: // Centrality FT0M multiplicity = collision.centFT0M(); // collision.centFT0A() break; default: @@ -1196,10 +1124,9 @@ struct tofSpectra { if (mcParticle.pdgCode() != PDGs[i]) { return; } - if (track.eta() < cfgCutEtaMin || track.eta() > cfgCutEtaMax) { + if (std::abs(mcParticle.eta()) > cfgCutEta) { return; } - if (std::abs(mcParticle.y()) > cfgCutY) { return; } @@ -1344,37 +1271,37 @@ struct tofSpectra { float multiplicity = 0.f; switch (multiplicityEstimator) { - case MultCodes::kNoMultiplicity: // No multiplicity - multiplicity = 50; // to check if its filled + case kNoMultiplicity: // No multiplicity + multiplicity = 50; // to check if its filled break; - case MultCodes::kMultFV0M: // MultFV0M + case kMultFV0M: // MultFV0M multiplicity = collision.multZeqFV0A(); break; - case MultCodes::kMultFT0M: + case kMultFT0M: multiplicity = collision.multZeqFT0A() + collision.multZeqFT0C(); break; - case MultCodes::kMultFDDM: // MultFDDM + case kMultFDDM: // MultFDDM multiplicity = collision.multZeqFDDA() + collision.multZeqFDDC(); break; - case MultCodes::kMultTracklets: // MultTracklets + case kMultTracklets: // MultTracklets multiplicity = collision.multTracklets(); break; - case MultCodes::kMultTPC: // MultTPC + case kMultTPC: // MultTPC multiplicity = collision.multTPC(); break; - case MultCodes::kMultNTracksPV: // MultNTracksPV + case kMultNTracksPV: // MultNTracksPV // multiplicity = collision.multNTracksPV(); multiplicity = collision.multZeqNTracksPV(); break; - case MultCodes::kMultNTracksPVeta1: // MultNTracksPVeta1 + case kMultNTracksPVeta1: // MultNTracksPVeta1 multiplicity = collision.multNTracksPVeta1(); break; - case MultCodes::kCentralityFT0C: // Centrality FT0C + case kCentralityFT0C: // Centrality FT0C multiplicity = collision.centFT0C(); break; - case MultCodes::kCentralityFT0M: // Centrality FT0M + case kCentralityFT0M: // Centrality FT0M multiplicity = collision.centFT0M(); // collision.centFT0A() break; default: @@ -1573,8 +1500,8 @@ struct tofSpectra { CollisionCandidateMC const& collisions) { // Fill number of generated and reconstructed collisions for normalization - histos.fill(HIST("MC/GenRecoCollisions"), 1.f, mcCollisions.size()); - histos.fill(HIST("MC/GenRecoCollisions"), 2.f, collisions.size()); + histos.fill(HIST("MC/GenRecoCollisions"), 0.5, mcCollisions.size()); + histos.fill(HIST("MC/GenRecoCollisions"), 1.5, collisions.size()); // LOGF(info, "Enter processMC!"); for (const auto& track : tracks) { if (!track.has_collision()) { @@ -1585,9 +1512,6 @@ struct tofSpectra { } continue; } - if (!track.collision_as().sel8()) { - continue; - } if (!passesCutWoDCA(track)) { continue; } @@ -1639,18 +1563,15 @@ struct tofSpectra { const auto& particlesInCollision = mcParticles.sliceByCached(aod::mcparticle::mcCollisionId, mcCollision.globalIndex(), cache); bool hasParticleInFT0C = false; bool hasParticleInFT0A = false; - - int nInelPart = 0; for (const auto& mcParticle : particlesInCollision) { if (mcParticle.isPhysicalPrimary()) { - if (mcParticle.eta() >= -3.4f && mcParticle.eta() <= -2.3f) { // Acceptance of the FT0C - hasParticleInFT0C = true; - } - if (mcParticle.eta() >= 3.8f && mcParticle.eta() <= 5.0f) { // Acceptance of the FT0A - hasParticleInFT0A = true; - } - if (std::abs(mcParticle.eta()) < 1.f) { - nInelPart++; + if (TMath::Abs(mcParticle.pdgCode()) == 211) { + if (mcParticle.eta() >= -3.4 && mcParticle.eta() <= -2.3) { // Acceptance of the FT0C + hasParticleInFT0C = true; + } + if (mcParticle.eta() >= 3.8 && mcParticle.eta() <= 5.0) { // Acceptance of the FT0A + hasParticleInFT0A = true; + } } } @@ -1661,18 +1582,13 @@ struct tofSpectra { fillParticleHistograms_MCGenEvs(mcParticle, mcCollision); }); } - if (nInelPart >= 1) { - histos.fill(HIST("MC/GenRecoCollisions"), 3.f); - } - if (nInelPart >= 2) { - histos.fill(HIST("MC/GenRecoCollisions"), 4.f); - } if (hasParticleInFT0C && hasParticleInFT0A) { - histos.fill(HIST("MC/GenRecoCollisions"), 5.f); + histos.fill(HIST("MC/GenRecoCollisions"), 2.5); } } } PROCESS_SWITCH(tofSpectra, processMC, "Process MC", false); + }; // end of spectra task -WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) { return WorkflowSpec{adaptAnalysisTask(cfgc)}; } \ No newline at end of file +WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) { return WorkflowSpec{adaptAnalysisTask(cfgc)}; } From 3371754fbf6d75e2f5808f98687046f2c9ac8826 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Sun, 16 Jul 2023 11:30:31 +0000 Subject: [PATCH 2/8] Please consider the following formatting changes --- PWGLF/Tasks/spectraTOF.cxx | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/PWGLF/Tasks/spectraTOF.cxx b/PWGLF/Tasks/spectraTOF.cxx index c0e1d358c5b..020960176ea 100644 --- a/PWGLF/Tasks/spectraTOF.cxx +++ b/PWGLF/Tasks/spectraTOF.cxx @@ -180,7 +180,7 @@ struct tofSpectra { customTrackCuts.SetMinNCrossedRowsOverFindableClustersTPC(minNCrossedRowsOverFindableClustersTPC.value); customTrackCuts.SetMaxDcaXYPtDep([](float pt) { return 10000.f; }); // No DCAxy cut will be used, this is done via the member function of the task customTrackCuts.SetMaxDcaZ(maxDcaZ.value); - //customTrackCuts.SetMakeTHnSparseChoice(makeTHnSparseChoice.value); + // customTrackCuts.SetMakeTHnSparseChoice(makeTHnSparseChoice.value); customTrackCuts.print(); } // Histograms @@ -421,7 +421,7 @@ struct tofSpectra { histos.add(hdeltatof[i].data(), pTCharge[i], kTH2D, {ptAxis, deltaTOFAxis}); histos.add(hdeltatpc[i].data(), pTCharge[i], kTH2D, {ptAxis, deltaTPCAxis}); } - } else if (multiplicityEstimator != kNoMultiplicity && makeTHnSparseChoice) { // RD + } else if (multiplicityEstimator != kNoMultiplicity && makeTHnSparseChoice) { // RD histos.add(hnsigmatof[i].data(), pTCharge[i], kTHnSparseD, {ptAxis, nsigmaTOFAxis, multAxis, dcaXyAxis, dcaZAxis, etaAxis}); // RD histos.add(hnsigmatpc[i].data(), pTCharge[i], kTHnSparseD, {ptAxis, nsigmaTPCAxis, multAxis, dcaXyAxis, dcaZAxis, etaAxis}); // RD @@ -548,12 +548,12 @@ struct tofSpectra { } else { histos.fill(HIST(hnsigmatpc[id + Np]), track.pt(), nsigmaTPC); } - } else if (multiplicityEstimator != kNoMultiplicity && makeTHnSparseChoice) { // RD - if (track.sign() > 0) { // RD + } else if (multiplicityEstimator != kNoMultiplicity && makeTHnSparseChoice) { // RD + if (track.sign() > 0) { // RD histos.fill(HIST(hnsigmatpc[id]), track.pt(), nsigmaTPC, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD - } else { // RD + } else { // RD histos.fill(HIST(hnsigmatpc[id + Np]), track.pt(), nsigmaTPC, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD - } // RD + } // RD } else { if (track.sign() > 0) { histos.fill(HIST(hnsigmatpc[id]), track.pt(), nsigmaTPC, multiplicity); @@ -668,12 +668,12 @@ struct tofSpectra { } else { histos.fill(HIST(hnsigmatof[id + Np]), track.pt(), nsigmaTOF); } - } else if (multiplicityEstimator != kNoMultiplicity && makeTHnSparseChoice) { // RD - if (track.sign() > 0) { // RD + } else if (multiplicityEstimator != kNoMultiplicity && makeTHnSparseChoice) { // RD + if (track.sign() > 0) { // RD histos.fill(HIST(hnsigmatof[id]), track.pt(), nsigmaTOF, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD - } else { // RD + } else { // RD histos.fill(HIST(hnsigmatof[id + Np]), track.pt(), nsigmaTOF, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD - } // RD + } // RD } else { if (track.sign() > 0) { histos.fill(HIST(hnsigmatof[id]), track.pt(), nsigmaTOF, multiplicity); From b26f885fe8e31afaaadb88dcdf47c39b3aa10285 Mon Sep 17 00:00:00 2001 From: RD0407 <67634136+RD0407@users.noreply.github.com> Date: Sun, 16 Jul 2023 13:49:49 +0200 Subject: [PATCH 3/8] Update spectraTOF.cxx --- PWGLF/Tasks/spectraTOF.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGLF/Tasks/spectraTOF.cxx b/PWGLF/Tasks/spectraTOF.cxx index 020960176ea..b935ee768e9 100644 --- a/PWGLF/Tasks/spectraTOF.cxx +++ b/PWGLF/Tasks/spectraTOF.cxx @@ -31,7 +31,7 @@ #include "Framework/StaticFor.h" #include "Common/Core/TrackSelectionDefaults.h" #include "PWGLF/DataModel/LFParticleIdentification.h" -#include "spectraTOF.h" +#include "PWGLF/DataModel/spectraTOF.h" #include "TPDGCode.h" From c9bc0daade0d35787163e67b520fa54229da8b60 Mon Sep 17 00:00:00 2001 From: Rohaan Deb <67634136+RD0407@users.noreply.github.com> Date: Mon, 17 Jul 2023 07:06:39 +0200 Subject: [PATCH 4/8] Update PWGLF/Tasks/spectraTOF.cxx Additional eta axis added to the THnSParse plots of nsigmaTPC and nsigmaTOF --- PWGLF/Tasks/spectraTOF.cxx | 299 ++++++++++++++++++++++++------------- 1 file changed, 192 insertions(+), 107 deletions(-) diff --git a/PWGLF/Tasks/spectraTOF.cxx b/PWGLF/Tasks/spectraTOF.cxx index b935ee768e9..3f40e2199e7 100644 --- a/PWGLF/Tasks/spectraTOF.cxx +++ b/PWGLF/Tasks/spectraTOF.cxx @@ -44,8 +44,10 @@ using namespace o2::framework::expressions; struct tofSpectra { Configurable cfgNSigmaCut{"cfgNSigmaCut", 3, "Value of the Nsigma cut"}; Configurable cfgCutVertex{"cfgCutVertex", 10.0f, "Accepted z-vertex range"}; - Configurable cfgCutEta{"cfgCutEta", 0.8f, "Eta range for tracks"}; + Configurable cfgCutEtaMax{"cfgCutEtaMax", 0.8f, "Max eta range for tracks"}; + Configurable cfgCutEtaMin{"cfgCutEtaMin", -0.8f, "Min eta range for tracks"}; Configurable cfgCutY{"cfgCutY", 0.5f, "Y range for tracks"}; + Configurable cfgINELCut{"cfgINELCut", 0, "Event selection: 0 no sel, 1 sel8, 2 INEL>0, 3 INEL>1"}; Configurable enableDcaGoodEvents{"enableDcaGoodEvents", true, "Enables the MC plots with the correct match between data and MC"}; Configurable enableTrackCutHistograms{"enableTrackCutHistograms", true, "Enables track cut histograms, before and after the cut"}; Configurable enableDeltaHistograms{"enableDeltaHistograms", true, "Enables the delta TPC and TOF histograms"}; @@ -55,29 +57,18 @@ struct tofSpectra { Configurable requireNoTrd{"requireNoTrd", false, "Require tracks without TRD"}; Configurable selectEvTime{"selectEvTime", 0, "Select event time flags; 0: any event time, 1: isEvTimeDefined, 2: IsEvTimeTOF, 3: IsEvTimeT0AC, 4: IsEvTimeTOFT0AV, 5: NOT isEvTimeDefined"}; ConfigurableAxis binsPt{"binsPt", {VARIABLE_WIDTH, 0.0, 0.1, 0.12, 0.14, 0.16, 0.18, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.2, 2.4, 2.6, 2.8, 3.0, 3.2, 3.4, 3.6, 3.8, 4.0, 4.2, 4.4, 4.6, 4.8, 5.0}, "Binning of the pT axis"}; + ConfigurableAxis binsEta{"binsEta", {100, -1, 1}, "Binning of the eta axis"}; ConfigurableAxis binsnsigmaTPC{"binsnsigmaTPC", {200, -10, 10}, "Binning of the nsigmaTPC axis"}; - ConfigurableAxis binseta{"binseta", {16, -0.8, 0.8}, "Binning of the eta axis"}; ConfigurableAxis binsnsigmaTOF{"binsnsigmaTOF", {200, -10, 10}, "Binning of the nsigmaTOF axis"}; ConfigurableAxis binsdeltaTPC{"binsdeltaTPC", {500, -1000, 1000}, "Binning of the nsigmaTPC axis"}; ConfigurableAxis binsdeltaTOF{"binsdeltaTOF", {500, -1000, 1000}, "Binning of the nsigmaTOF axis"}; ConfigurableAxis binsDca{"binsDca", {VARIABLE_WIDTH, -3.0, -2.95, -2.9, -2.85, -2.8, -2.75, -2.7, -2.65, -2.6, -2.55, -2.5, -2.45, -2.4, -2.35, -2.3, -2.25, -2.2, -2.15, -2.1, -2.05, -2.0, -1.975, -1.95, -1.925, -1.9, -1.875, -1.85, -1.825, -1.8, -1.775, -1.75, -1.725, -1.7, -1.675, -1.65, -1.625, -1.6, -1.575, -1.55, -1.525, -1.5, -1.475, -1.45, -1.425, -1.4, -1.375, -1.35, -1.325, -1.3, -1.275, -1.25, -1.225, -1.2, -1.175, -1.15, -1.125, -1.1, -1.075, -1.05, -1.025, -1.0, -0.99, -0.98, -0.97, -0.96, -0.95, -0.94, -0.93, -0.92, -0.91, -0.9, -0.89, -0.88, -0.87, -0.86, -0.85, -0.84, -0.83, -0.82, -0.81, -0.8, -0.79, -0.78, -0.77, -0.76, -0.75, -0.74, -0.73, -0.72, -0.71, -0.7, -0.69, -0.68, -0.67, -0.66, -0.65, -0.64, -0.63, -0.62, -0.61, -0.6, -0.59, -0.58, -0.57, -0.56, -0.55, -0.54, -0.53, -0.52, -0.51, -0.5, -0.49, -0.48, -0.47, -0.46, -0.45, -0.44, -0.43, -0.42, -0.41, -0.4, -0.396, -0.392, -0.388, -0.384, -0.38, -0.376, -0.372, -0.368, -0.364, -0.36, -0.356, -0.352, -0.348, -0.344, -0.34, -0.336, -0.332, -0.328, -0.324, -0.32, -0.316, -0.312, -0.308, -0.304, -0.3, -0.296, -0.292, -0.288, -0.284, -0.28, -0.276, -0.272, -0.268, -0.264, -0.26, -0.256, -0.252, -0.248, -0.244, -0.24, -0.236, -0.232, -0.228, -0.224, -0.22, -0.216, -0.212, -0.208, -0.204, -0.2, -0.198, -0.196, -0.194, -0.192, -0.19, -0.188, -0.186, -0.184, -0.182, -0.18, -0.178, -0.176, -0.174, -0.172, -0.17, -0.168, -0.166, -0.164, -0.162, -0.16, -0.158, -0.156, -0.154, -0.152, -0.15, -0.148, -0.146, -0.144, -0.142, -0.14, -0.138, -0.136, -0.134, -0.132, -0.13, -0.128, -0.126, -0.124, -0.122, -0.12, -0.118, -0.116, -0.114, -0.112, -0.11, -0.108, -0.106, -0.104, -0.102, -0.1, -0.099, -0.098, -0.097, -0.096, -0.095, -0.094, -0.093, -0.092, -0.091, -0.09, -0.089, -0.088, -0.087, -0.086, -0.085, -0.084, -0.083, -0.082, -0.081, -0.08, -0.079, -0.078, -0.077, -0.076, -0.075, -0.074, -0.073, -0.072, -0.071, -0.07, -0.069, -0.068, -0.067, -0.066, -0.065, -0.064, -0.063, -0.062, -0.061, -0.06, -0.059, -0.058, -0.057, -0.056, -0.055, -0.054, -0.053, -0.052, -0.051, -0.05, -0.049, -0.048, -0.047, -0.046, -0.045, -0.044, -0.043, -0.042, -0.041, -0.04, -0.039, -0.038, -0.037, -0.036, -0.035, -0.034, -0.033, -0.032, -0.031, -0.03, -0.029, -0.028, -0.027, -0.026, -0.025, -0.024, -0.023, -0.022, -0.021, -0.02, -0.019, -0.018, -0.017, -0.016, -0.015, -0.014, -0.013, -0.012, -0.011, -0.01, -0.009, -0.008, -0.007, -0.006, -0.005, -0.004, -0.003, -0.002, -0.001, -0.0, 0.001, 0.002, 0.003, 0.004, 0.005, 0.006, 0.007, 0.008, 0.009, 0.01, 0.011, 0.012, 0.013, 0.014, 0.015, 0.016, 0.017, 0.018, 0.019, 0.02, 0.021, 0.022, 0.023, 0.024, 0.025, 0.026, 0.027, 0.028, 0.029, 0.03, 0.031, 0.032, 0.033, 0.034, 0.035, 0.036, 0.037, 0.038, 0.039, 0.04, 0.041, 0.042, 0.043, 0.044, 0.045, 0.046, 0.047, 0.048, 0.049, 0.05, 0.051, 0.052, 0.053, 0.054, 0.055, 0.056, 0.057, 0.058, 0.059, 0.06, 0.061, 0.062, 0.063, 0.064, 0.065, 0.066, 0.067, 0.068, 0.069, 0.07, 0.071, 0.072, 0.073, 0.074, 0.075, 0.076, 0.077, 0.078, 0.079, 0.08, 0.081, 0.082, 0.083, 0.084, 0.085, 0.086, 0.087, 0.088, 0.089, 0.09, 0.091, 0.092, 0.093, 0.094, 0.095, 0.096, 0.097, 0.098, 0.099, 0.1, 0.102, 0.104, 0.106, 0.108, 0.11, 0.112, 0.114, 0.116, 0.118, 0.12, 0.122, 0.124, 0.126, 0.128, 0.13, 0.132, 0.134, 0.136, 0.138, 0.14, 0.142, 0.144, 0.146, 0.148, 0.15, 0.152, 0.154, 0.156, 0.158, 0.16, 0.162, 0.164, 0.166, 0.168, 0.17, 0.172, 0.174, 0.176, 0.178, 0.18, 0.182, 0.184, 0.186, 0.188, 0.19, 0.192, 0.194, 0.196, 0.198, 0.2, 0.204, 0.208, 0.212, 0.216, 0.22, 0.224, 0.228, 0.232, 0.236, 0.24, 0.244, 0.248, 0.252, 0.256, 0.26, 0.264, 0.268, 0.272, 0.276, 0.28, 0.284, 0.288, 0.292, 0.296, 0.3, 0.304, 0.308, 0.312, 0.316, 0.32, 0.324, 0.328, 0.332, 0.336, 0.34, 0.344, 0.348, 0.352, 0.356, 0.36, 0.364, 0.368, 0.372, 0.376, 0.38, 0.384, 0.388, 0.392, 0.396, 0.4, 0.41, 0.42, 0.43, 0.44, 0.45, 0.46, 0.47, 0.48, 0.49, 0.5, 0.51, 0.52, 0.53, 0.54, 0.55, 0.56, 0.57, 0.58, 0.59, 0.6, 0.61, 0.62, 0.63, 0.64, 0.65, 0.66, 0.67, 0.68, 0.69, 0.7, 0.71, 0.72, 0.73, 0.74, 0.75, 0.76, 0.77, 0.78, 0.79, 0.8, 0.81, 0.82, 0.83, 0.84, 0.85, 0.86, 0.87, 0.88, 0.89, 0.9, 0.91, 0.92, 0.93, 0.94, 0.95, 0.96, 0.97, 0.98, 0.99, 1.0, 1.025, 1.05, 1.075, 1.1, 1.125, 1.15, 1.175, 1.2, 1.225, 1.25, 1.275, 1.3, 1.325, 1.35, 1.375, 1.4, 1.425, 1.45, 1.475, 1.5, 1.525, 1.55, 1.575, 1.6, 1.625, 1.65, 1.675, 1.7, 1.725, 1.75, 1.775, 1.8, 1.825, 1.85, 1.875, 1.9, 1.925, 1.95, 1.975, 2.0, 2.05, 2.1, 2.15, 2.2, 2.25, 2.3, 2.35, 2.4, 2.45, 2.5, 2.55, 2.6, 2.65, 2.7, 2.75, 2.8, 2.85, 2.9, 2.95, 3.0}, "Binning of DCA xy and z axis"}; ConfigurableAxis binsMultiplicity{"binsMultiplicity", {100, 0, 100}, "Binning for multiplicity"}; ConfigurableAxis binsPercentile{"binsPercentile", {100, 0, 100}, "Binning for percentiles"}; - static constexpr int kNoMultiplicity = 0; - static constexpr int kMultFV0M = 1; - static constexpr int kMultFT0M = 2; - static constexpr int kMultFDDM = 3; - static constexpr int kMultTracklets = 4; - static constexpr int kMultTPC = 5; - static constexpr int kMultNTracksPV = 6; - static constexpr int kMultNTracksPVeta1 = 7; - static constexpr int kCentralityFT0C = 8; - static constexpr int kCentralityFT0M = 9; - static constexpr int kCentralityFV0A = 10; - static constexpr int kNMults = 10; Configurable multiplicityEstimator{"multiplicityEstimator", 0, "Flag to use a multiplicity estimator: 0 no multiplicity, 1 MultFV0M, 2 MultFT0M, 3 MultFDDM, 4 MultTracklets, 5 MultTPC, 6 MultNTracksPV, 7 MultNTracksPVeta1, 8 CentralityFT0C, 9 CentralityFT0M, 10 CentralityFV0A"}; // Custom track cuts for the cut variation study TrackSelection customTrackCuts; + Configurable ckeckKaonIsPvContrib{"ckeckKaonIsPvContrib", false, "Flag to ckeck if kaon tracks are from pv"}; Configurable useCustomTrackCuts{"useCustomTrackCuts", false, "Flag to use custom track cuts"}; Configurable itsPattern{"itsPattern", 0, "0 = Run3ITSibAny, 1 = Run3ITSallAny, 2 = Run3ITSall7Layers, 3 = Run3ITSibTwo"}; Configurable requireITS{"requireITS", true, "Additional cut on the ITS requirement"}; @@ -167,6 +158,7 @@ struct tofSpectra { LOG(info) << "\tmaxChi2PerClusterITS=" << maxChi2PerClusterITS.value; LOG(info) << "\tmaxDcaZ=" << maxDcaZ.value; LOG(info) << "\tmakeTHnSparseChoice=" << makeTHnSparseChoice.value; + LOG(info) << "\tckeckKaonIsPvContrib=" << ckeckKaonIsPvContrib.value; customTrackCuts = getGlobalTrackSelectionRun3ITSMatch(itsPattern.value); LOG(info) << "Customizing track cuts:"; @@ -180,24 +172,29 @@ struct tofSpectra { customTrackCuts.SetMinNCrossedRowsOverFindableClustersTPC(minNCrossedRowsOverFindableClustersTPC.value); customTrackCuts.SetMaxDcaXYPtDep([](float pt) { return 10000.f; }); // No DCAxy cut will be used, this is done via the member function of the task customTrackCuts.SetMaxDcaZ(maxDcaZ.value); - // customTrackCuts.SetMakeTHnSparseChoice(makeTHnSparseChoice.value); customTrackCuts.print(); } // Histograms const AxisSpec vtxZAxis{100, -20, 20, "Vtx_{z} (cm)"}; const AxisSpec pAxis{binsPt, "#it{p} (GeV/#it{c})"}; const AxisSpec ptAxis{binsPt, "#it{p}_{T} (GeV/#it{c})"}; - const AxisSpec etaAxis{binseta, "#it{#eta}"}; + //const AxisSpec etaAxis{binsEta, "#eta tracks"}; histos.add("event/vertexz", "", HistType::kTH1D, {vtxZAxis}); auto h = histos.add("evsel", "evsel", HistType::kTH1D, {{10, 0.5, 10.5}}); h->GetXaxis()->SetBinLabel(1, "Events read"); - h->GetXaxis()->SetBinLabel(2, "Ev. sel. passed"); - h->GetXaxis()->SetBinLabel(3, "posZ passed"); + h->GetXaxis()->SetBinLabel(2, "INEL>0"); + h->GetXaxis()->SetBinLabel(3, "INEL>1"); + h->GetXaxis()->SetBinLabel(4, "Ev. sel. passed"); + h->GetXaxis()->SetBinLabel(5, "INEL>0"); + h->GetXaxis()->SetBinLabel(6, "INEL>1"); + h->GetXaxis()->SetBinLabel(7, "posZ passed"); + h->GetXaxis()->SetBinLabel(8, "INEL>0"); + h->GetXaxis()->SetBinLabel(9, "INEL>1"); h = histos.add("tracksel", "tracksel", HistType::kTH1D, {{10, 0.5, 10.5}}); h->GetXaxis()->SetBinLabel(1, "Tracks read"); - h->GetXaxis()->SetBinLabel(2, "Eta passed"); + h->GetXaxis()->SetBinLabel(2, Form(" %.2f < #eta < %.2f ", cfgCutEtaMin.value, cfgCutEtaMax.value)); h->GetXaxis()->SetBinLabel(3, "Quality passed"); h->GetXaxis()->SetBinLabel(4, "TOF passed (partial)"); @@ -236,6 +233,7 @@ struct tofSpectra { if (enableTrackCutHistograms) { const AxisSpec chargeAxis{2, -2.f, 2.f, "Charge"}; + histos.add("track/Eta", "Eta", HistType::kTH1D, {{binsEta, "#eta tracks"}}); // its histograms histos.add("track/ITS/itsNCls", "number of found ITS clusters;# clusters ITS", kTH2D, {{8, -0.5, 7.5}, chargeAxis}); histos.add("track/ITS/itsChi2NCl", "chi2 per ITS cluster;chi2 / cluster ITS", kTH2D, {{100, 0, 40}, chargeAxis}); @@ -306,11 +304,15 @@ struct tofSpectra { histos.add("MC/fake/neg", "Fake negative tracks", kTH1D, {ptAxis}); histos.add("MC/no_collision/pos", "No collision pos track", kTH1D, {ptAxis}); histos.add("MC/no_collision/neg", "No collision neg track", kTH1D, {ptAxis}); - histos.add("MC/GenRecoCollisions", "Generated and Reconstructed MC Collisions", kTH1D, {{3, 0, 3}}); + auto hh = histos.add("MC/GenRecoCollisions", "Generated and Reconstructed MC Collisions", kTH1D, {{10, 0.5, 10.5}}); + hh->GetXaxis()->SetBinLabel(1, "Collisions generated"); + hh->GetXaxis()->SetBinLabel(2, "Collisions reconstructed"); + hh->GetXaxis()->SetBinLabel(3, "INEL>0"); + hh->GetXaxis()->SetBinLabel(4, "INEL>1"); + hh->GetXaxis()->SetBinLabel(5, "hasParticleInFT0C && hasParticleInFT0A"); } for (int i = 0; i < NpCharge; i++) { - switch (i) { case 0: case Np: @@ -326,19 +328,19 @@ struct tofSpectra { break; case 2: case Np + 2: - if (doprocessFullPi == false && doprocessLfFullPi == false) { + if (doprocessFullPi == false && doprocessLfFullPi == false && doprocessDerived == false) { continue; } break; case 3: case Np + 3: - if (doprocessFullKa == false && doprocessLfFullKa == false) { + if (doprocessFullKa == false && doprocessLfFullKa == false && doprocessDerived == false) { continue; } break; case 4: case Np + 4: - if (doprocessFullPr == false && doprocessLfFullPr == false) { + if (doprocessFullPr == false && doprocessLfFullPr == false && doprocessDerived == false) { continue; } break; @@ -372,56 +374,60 @@ struct tofSpectra { const AxisSpec nsigmaTOFAxis{binsnsigmaTOF, Form("N_{#sigma}^{TOF}(%s)", pTCharge[i])}; const AxisSpec deltaTPCAxis{binsdeltaTPC, Form("#Delta^{TPC}(%s)", pTCharge[i])}; const AxisSpec deltaTOFAxis{binsdeltaTOF, Form("#Delta^{TOF}(%s)", pTCharge[i])}; + const AxisSpec etaAxis{binsEta, Form("#eta^{TPC}_{TOF}(%s)", pTCharge[i])}; AxisSpec multAxis{binsMultiplicity, "Undefined multiplicity estimator"}; - if (enableTPCTOFHistograms) { + if (enableTPCTOFHistograms && !makeTHnSparseChoice) { histos.add(hnsigmatpctof[i].data(), pTCharge[i], kTH3D, {ptAxis, nsigmaTPCAxis, nsigmaTOFAxis}); } + if (enableTPCTOFHistograms && makeTHnSparseChoice) { + histos.add(hnsigmatpctof[i].data(), pTCharge[i], kTHnSparseD, {ptAxis, etaAxis, nsigmaTPCAxis, nsigmaTOFAxis}); + } switch (multiplicityEstimator) { - case kNoMultiplicity: // No multiplicity + case MultCodes::kNoMultiplicity: // No multiplicity break; - case kMultFV0M: // MultFV0M + case MultCodes::kMultFV0M: // MultFV0M multAxis.name = "MultFV0M"; break; - case kMultFT0M: // MultFT0M + case MultCodes::kMultFT0M: // MultFT0M multAxis.name = "MultFT0M"; break; - case kMultFDDM: // MultFDDM + case MultCodes::kMultFDDM: // MultFDDM multAxis.name = "MultFDDM"; break; - case kMultTracklets: // MultTracklets + case MultCodes::kMultTracklets: // MultTracklets multAxis.name = "MultTracklets"; break; - case kMultTPC: // MultTPC + case MultCodes::kMultTPC: // MultTPC multAxis.name = "MultTPC"; break; - case kMultNTracksPV: // MultNTracksPV + case MultCodes::kMultNTracksPV: // MultNTracksPV multAxis.name = "MultNTracksPV"; break; - case kMultNTracksPVeta1: // MultNTracksPVeta1 + case MultCodes::kMultNTracksPVeta1: // MultNTracksPVeta1 multAxis.name = "MultNTracksPVeta1"; break; - case kCentralityFT0C: // Centrality FT0C + case MultCodes::kCentralityFT0C: // Centrality FT0C multAxis = {binsPercentile, "Centrality FT0C"}; break; - case kCentralityFT0M: // Centrality FT0M + case MultCodes::kCentralityFT0M: // Centrality FT0M multAxis = {binsPercentile, "Centrality FT0M"}; break; - case kCentralityFV0A: // Centrality FV0A + case MultCodes::kCentralityFV0A: // Centrality FV0A multAxis = {binsPercentile, "Centrality FV0A"}; break; default: LOG(fatal) << "Unrecognized option for multiplicity " << multiplicityEstimator; } - if (multiplicityEstimator == kNoMultiplicity) { + if (multiplicityEstimator == MultCodes::kNoMultiplicity) { histos.add(hnsigmatof[i].data(), pTCharge[i], kTH2D, {ptAxis, nsigmaTOFAxis}); histos.add(hnsigmatpc[i].data(), pTCharge[i], kTH2D, {ptAxis, nsigmaTPCAxis}); if (enableDeltaHistograms) { histos.add(hdeltatof[i].data(), pTCharge[i], kTH2D, {ptAxis, deltaTOFAxis}); histos.add(hdeltatpc[i].data(), pTCharge[i], kTH2D, {ptAxis, deltaTPCAxis}); } - } else if (multiplicityEstimator != kNoMultiplicity && makeTHnSparseChoice) { // RD + } else if (multiplicityEstimator != MultCodes::kNoMultiplicity && makeTHnSparseChoice) { // RD histos.add(hnsigmatof[i].data(), pTCharge[i], kTHnSparseD, {ptAxis, nsigmaTOFAxis, multAxis, dcaXyAxis, dcaZAxis, etaAxis}); // RD histos.add(hnsigmatpc[i].data(), pTCharge[i], kTHnSparseD, {ptAxis, nsigmaTPCAxis, multAxis, dcaXyAxis, dcaZAxis, etaAxis}); // RD @@ -495,65 +501,70 @@ struct tofSpectra { if (abs(track.rapidity(PID::getMass(id))) > cfgCutY) { return; } + if constexpr (id == PID::Kaon) { + if (ckeckKaonIsPvContrib && !track.isPVContributor()) { + return; + } + } const auto& nsigmaTOF = o2::aod::pidutils::tofNSigma(track); const auto& nsigmaTPC = o2::aod::pidutils::tpcNSigma(track); // const auto id = track.sign() > 0 ? id : id + Np; float multiplicity = 0.f; switch (multiplicityEstimator) { - case kNoMultiplicity: // No multiplicity + case MultCodes::kNoMultiplicity: // No multiplicity break; - case kMultFV0M: // MultFV0M + case MultCodes::kMultFV0M: // MultFV0M // multiplicity = collision.multFV0M(); // multiplicity = collision.multZeqFV0A() + collision.multZeqFV0C(); multiplicity = collision.multZeqFV0A(); break; - case kMultFT0M: // MultFT0M + case MultCodes::kMultFT0M: // MultFT0M // multiplicity = collision.multFT0M(); multiplicity = collision.multZeqFT0A() + collision.multZeqFT0C(); break; - case kMultFDDM: // MultFDDM + case MultCodes::kMultFDDM: // MultFDDM // multiplicity = collision.multFDDM(); multiplicity = collision.multZeqFDDA() + collision.multZeqFDDC(); break; - case kMultTracklets: // MultTracklets + case MultCodes::kMultTracklets: // MultTracklets multiplicity = collision.multTracklets(); break; - case kMultTPC: // MultTPC + case MultCodes::kMultTPC: // MultTPC multiplicity = collision.multTPC(); break; - case kMultNTracksPV: // MultNTracksPV + case MultCodes::kMultNTracksPV: // MultNTracksPV // multiplicity = collision.multNTracksPV(); multiplicity = collision.multZeqNTracksPV(); break; - case kMultNTracksPVeta1: // MultNTracksPVeta1 + case MultCodes::kMultNTracksPVeta1: // MultNTracksPVeta1 multiplicity = collision.multNTracksPVeta1(); break; - case kCentralityFT0C: // Centrality FT0C + case MultCodes::kCentralityFT0C: // Centrality FT0C multiplicity = collision.centFT0C(); break; - case kCentralityFT0M: // Centrality FT0M + case MultCodes::kCentralityFT0M: // Centrality FT0M multiplicity = collision.centFT0M(); break; - case kCentralityFV0A: // Centrality FT0M + case MultCodes::kCentralityFV0A: // Centrality FT0M multiplicity = collision.centFV0A(); break; default: LOG(fatal) << "Unknown multiplicity estimator: " << multiplicityEstimator; } - if (multiplicityEstimator == kNoMultiplicity) { + if (multiplicityEstimator == MultCodes::kNoMultiplicity) { if (track.sign() > 0) { histos.fill(HIST(hnsigmatpc[id]), track.pt(), nsigmaTPC); } else { histos.fill(HIST(hnsigmatpc[id + Np]), track.pt(), nsigmaTPC); } - } else if (multiplicityEstimator != kNoMultiplicity && makeTHnSparseChoice) { // RD - if (track.sign() > 0) { // RD + } else if (makeTHnSparseChoice) { // RD + if (track.sign() > 0) { // RD histos.fill(HIST(hnsigmatpc[id]), track.pt(), nsigmaTPC, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD - } else { // RD + } else { // RD histos.fill(HIST(hnsigmatpc[id + Np]), track.pt(), nsigmaTPC, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD - } // RD + } // RD } else { if (track.sign() > 0) { histos.fill(HIST(hnsigmatpc[id]), track.pt(), nsigmaTPC, multiplicity); @@ -565,7 +576,7 @@ struct tofSpectra { if constexpr (fillFullInfo) { if (enableDeltaHistograms) { const auto& deltaTPC = o2::aod::pidutils::tpcExpSignalDiff(track); - if (multiplicityEstimator == kNoMultiplicity) { + if (multiplicityEstimator == MultCodes::kNoMultiplicity) { if (track.sign() > 0) { histos.fill(HIST(hdeltatpc[id]), track.pt(), deltaTPC); } else { @@ -662,18 +673,18 @@ struct tofSpectra { } } - if (multiplicityEstimator == kNoMultiplicity) { + if (multiplicityEstimator == MultCodes::kNoMultiplicity) { if (track.sign() > 0) { histos.fill(HIST(hnsigmatof[id]), track.pt(), nsigmaTOF); } else { histos.fill(HIST(hnsigmatof[id + Np]), track.pt(), nsigmaTOF); } - } else if (multiplicityEstimator != kNoMultiplicity && makeTHnSparseChoice) { // RD - if (track.sign() > 0) { // RD + } else if (multiplicityEstimator != MultCodes::kNoMultiplicity && makeTHnSparseChoice) { // RD + if (track.sign() > 0) { // RD histos.fill(HIST(hnsigmatof[id]), track.pt(), nsigmaTOF, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD - } else { // RD + } else { // RD histos.fill(HIST(hnsigmatof[id + Np]), track.pt(), nsigmaTOF, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD - } // RD + } // RD } else { if (track.sign() > 0) { histos.fill(HIST(hnsigmatof[id]), track.pt(), nsigmaTOF, multiplicity); @@ -682,7 +693,15 @@ struct tofSpectra { } } - if (enableTPCTOFHistograms) { + if (enableTPCTOFHistograms && makeTHnSparseChoice) { + if (track.sign() > 0) { + histos.fill(HIST(hnsigmatpctof[id]), track.pt(), track.eta(), nsigmaTPC, nsigmaTOF); + } else { + histos.fill(HIST(hnsigmatpctof[id + Np]), track.pt(), track.eta(), nsigmaTPC, nsigmaTOF); + } + } + + if (enableTPCTOFHistograms && !makeTHnSparseChoice) { if (track.sign() > 0) { histos.fill(HIST(hnsigmatpctof[id]), track.pt(), nsigmaTPC, nsigmaTOF); } else { @@ -693,7 +712,7 @@ struct tofSpectra { if constexpr (fillFullInfo) { if (enableDeltaHistograms) { const auto& deltaTOF = o2::aod::pidutils::tofExpSignalDiff(track); - if (multiplicityEstimator == kNoMultiplicity) { + if (multiplicityEstimator == MultCodes::kNoMultiplicity) { if (track.sign() > 0) { histos.fill(HIST(hdeltatof[id]), track.pt(), deltaTOF); } else { @@ -737,23 +756,53 @@ struct tofSpectra { } } - template - bool isEventSelected(CollisionType const& collision) + int mNInelTrks = 0; + template + bool isEventSelected(CollisionType const& collision, TrackType const& tracks) { if constexpr (fillHistograms) { - histos.fill(HIST("evsel"), 1); + histos.fill(HIST("evsel"), 1.f); + } + mNInelTrks = 0; // Reset it + for (const auto& trk : tracks) { + if (trk.isPVContributor() && std::abs(trk.eta()) < 1.f) { + mNInelTrks++; + } + if (mNInelTrks >= 2) { + break; + } + } + if constexpr (fillHistograms) { + if (mNInelTrks >= 1) { + histos.fill(HIST("evsel"), 2.f); + } + if (mNInelTrks >= 2) { + histos.fill(HIST("evsel"), 3.f); + } } if (!collision.sel8()) { return false; } if constexpr (fillHistograms) { - histos.fill(HIST("evsel"), 2); + histos.fill(HIST("evsel"), 4.f); + if (mNInelTrks >= 1) { + histos.fill(HIST("evsel"), 5.f); + } + if (mNInelTrks >= 2) { + histos.fill(HIST("evsel"), 6.f); + } } if (abs(collision.posZ()) > cfgCutVertex) { return false; } if constexpr (fillHistograms) { - histos.fill(HIST("evsel"), 3); + histos.fill(HIST("evsel"), 7.f); + if (mNInelTrks >= 1) { + histos.fill(HIST("evsel"), 8.f); + } + if (mNInelTrks >= 2) { + histos.fill(HIST("evsel"), 9.f); + } histos.fill(HIST("event/vertexz"), collision.posZ()); if constexpr (fillMultiplicity) { @@ -814,13 +863,13 @@ struct tofSpectra { return track.isGlobalTrackWoDCA(); } - template + template bool isTrackSelected(TrackType const& track) { if constexpr (fillHistograms) { histos.fill(HIST("tracksel"), 1); } - if (abs(track.eta()) > cfgCutEta) { + if (track.eta() < cfgCutEtaMin || track.eta() > cfgCutEtaMax) { return false; } if constexpr (fillHistograms) { @@ -957,10 +1006,10 @@ struct tofSpectra { using TrackCandidates = soa::Join; - void process(CollisionCandidate::iterator const& collision, - TrackCandidates const& tracks) + void processStandard(CollisionCandidate::iterator const& collision, + TrackCandidates const& tracks) { - if (!isEventSelected(collision)) { + if (!isEventSelected(collision, tracks)) { return; } for (const auto& track : tracks) { @@ -969,6 +1018,30 @@ struct tofSpectra { } } } // end of the process function + PROCESS_SWITCH(tofSpectra, processStandard, "Standard processor from AO2D", true); + + Preslice spPerCol = aod::spectra::collisionId; + SliceCache cacheTrk; + void processDerived(aod::SpColls const& collisions, + aod::SpTracks const& tracks) + { + for (const auto& collision : collisions) { + if (!isEventSelected(collision, tracks)) { + return; + } + const auto& tracksInCollision = tracks.sliceByCached(aod::spectra::collisionId, collision.globalIndex(), cacheTrk); + for (const auto& track : tracksInCollision) { + if (!isTrackSelected(track)) { + continue; + } + histos.fill(HIST("track/Eta"), track.eta()); + fillParticleHistos(track, collision); + fillParticleHistos(track, collision); + fillParticleHistos(track, collision); + } + } + } // end of the process function + PROCESS_SWITCH(tofSpectra, processDerived, "Derived data processor", false); #define makeProcessFunction(processorName, inputPid, particleId, isFull, tofTable, tpcTable) \ void process##processorName##inputPid(CollisionCandidate::iterator const& collision, \ @@ -976,7 +1049,7 @@ struct tofSpectra { aod::pid##tofTable##inputPid, \ aod::pid##tpcTable##inputPid> const& tracks) \ { \ - if (!isEventSelected(collision)) { \ + if (!isEventSelected(collision, tracks)) { \ return; \ } \ for (const auto& track : tracks) { \ @@ -1082,37 +1155,37 @@ struct tofSpectra { float multiplicity = 0.f; switch (multiplicityEstimator) { - case kNoMultiplicity: // No multiplicity - multiplicity = 50; // to check if its filled + case MultCodes::kNoMultiplicity: // No multiplicity + multiplicity = 50; // to check if its filled break; - case kMultFV0M: // MultFV0M + case MultCodes::kMultFV0M: // MultFV0M multiplicity = collision.multZeqFV0A(); break; - case kMultFT0M: + case MultCodes::kMultFT0M: multiplicity = collision.multZeqFT0A() + collision.multZeqFT0C(); break; - case kMultFDDM: // MultFDDM + case MultCodes::kMultFDDM: // MultFDDM multiplicity = collision.multZeqFDDA() + collision.multZeqFDDC(); break; - case kMultTracklets: // MultTracklets + case MultCodes::kMultTracklets: // MultTracklets multiplicity = collision.multTracklets(); break; - case kMultTPC: // MultTPC + case MultCodes::kMultTPC: // MultTPC multiplicity = collision.multTPC(); break; - case kMultNTracksPV: // MultNTracksPV + case MultCodes::kMultNTracksPV: // MultNTracksPV // multiplicity = collision.multNTracksPV(); multiplicity = collision.multZeqNTracksPV(); break; - case kMultNTracksPVeta1: // MultNTracksPVeta1 + case MultCodes::kMultNTracksPVeta1: // MultNTracksPVeta1 multiplicity = collision.multNTracksPVeta1(); break; - case kCentralityFT0C: // Centrality FT0C + case MultCodes::kCentralityFT0C: // Centrality FT0C multiplicity = collision.centFT0C(); break; - case kCentralityFT0M: // Centrality FT0M + case MultCodes::kCentralityFT0M: // Centrality FT0M multiplicity = collision.centFT0M(); // collision.centFT0A() break; default: @@ -1124,9 +1197,10 @@ struct tofSpectra { if (mcParticle.pdgCode() != PDGs[i]) { return; } - if (std::abs(mcParticle.eta()) > cfgCutEta) { + if (track.eta() < cfgCutEtaMin || track.eta() > cfgCutEtaMax) { return; } + if (std::abs(mcParticle.y()) > cfgCutY) { return; } @@ -1271,37 +1345,37 @@ struct tofSpectra { float multiplicity = 0.f; switch (multiplicityEstimator) { - case kNoMultiplicity: // No multiplicity - multiplicity = 50; // to check if its filled + case MultCodes::kNoMultiplicity: // No multiplicity + multiplicity = 50; // to check if its filled break; - case kMultFV0M: // MultFV0M + case MultCodes::kMultFV0M: // MultFV0M multiplicity = collision.multZeqFV0A(); break; - case kMultFT0M: + case MultCodes::kMultFT0M: multiplicity = collision.multZeqFT0A() + collision.multZeqFT0C(); break; - case kMultFDDM: // MultFDDM + case MultCodes::kMultFDDM: // MultFDDM multiplicity = collision.multZeqFDDA() + collision.multZeqFDDC(); break; - case kMultTracklets: // MultTracklets + case MultCodes::kMultTracklets: // MultTracklets multiplicity = collision.multTracklets(); break; - case kMultTPC: // MultTPC + case MultCodes::kMultTPC: // MultTPC multiplicity = collision.multTPC(); break; - case kMultNTracksPV: // MultNTracksPV + case MultCodes::kMultNTracksPV: // MultNTracksPV // multiplicity = collision.multNTracksPV(); multiplicity = collision.multZeqNTracksPV(); break; - case kMultNTracksPVeta1: // MultNTracksPVeta1 + case MultCodes::kMultNTracksPVeta1: // MultNTracksPVeta1 multiplicity = collision.multNTracksPVeta1(); break; - case kCentralityFT0C: // Centrality FT0C + case MultCodes::kCentralityFT0C: // Centrality FT0C multiplicity = collision.centFT0C(); break; - case kCentralityFT0M: // Centrality FT0M + case MultCodes::kCentralityFT0M: // Centrality FT0M multiplicity = collision.centFT0M(); // collision.centFT0A() break; default: @@ -1500,8 +1574,8 @@ struct tofSpectra { CollisionCandidateMC const& collisions) { // Fill number of generated and reconstructed collisions for normalization - histos.fill(HIST("MC/GenRecoCollisions"), 0.5, mcCollisions.size()); - histos.fill(HIST("MC/GenRecoCollisions"), 1.5, collisions.size()); + histos.fill(HIST("MC/GenRecoCollisions"), 1.f, mcCollisions.size()); + histos.fill(HIST("MC/GenRecoCollisions"), 2.f, collisions.size()); // LOGF(info, "Enter processMC!"); for (const auto& track : tracks) { if (!track.has_collision()) { @@ -1512,6 +1586,9 @@ struct tofSpectra { } continue; } + if (!track.collision_as().sel8()) { + continue; + } if (!passesCutWoDCA(track)) { continue; } @@ -1563,15 +1640,18 @@ struct tofSpectra { const auto& particlesInCollision = mcParticles.sliceByCached(aod::mcparticle::mcCollisionId, mcCollision.globalIndex(), cache); bool hasParticleInFT0C = false; bool hasParticleInFT0A = false; + + int nInelPart = 0; for (const auto& mcParticle : particlesInCollision) { if (mcParticle.isPhysicalPrimary()) { - if (TMath::Abs(mcParticle.pdgCode()) == 211) { - if (mcParticle.eta() >= -3.4 && mcParticle.eta() <= -2.3) { // Acceptance of the FT0C - hasParticleInFT0C = true; - } - if (mcParticle.eta() >= 3.8 && mcParticle.eta() <= 5.0) { // Acceptance of the FT0A - hasParticleInFT0A = true; - } + if (mcParticle.eta() >= -3.4f && mcParticle.eta() <= -2.3f) { // Acceptance of the FT0C + hasParticleInFT0C = true; + } + if (mcParticle.eta() >= 3.8f && mcParticle.eta() <= 5.0f) { // Acceptance of the FT0A + hasParticleInFT0A = true; + } + if (std::abs(mcParticle.eta()) < 1.f) { + nInelPart++; } } @@ -1582,13 +1662,18 @@ struct tofSpectra { fillParticleHistograms_MCGenEvs(mcParticle, mcCollision); }); } + if (nInelPart >= 1) { + histos.fill(HIST("MC/GenRecoCollisions"), 3.f); + } + if (nInelPart >= 2) { + histos.fill(HIST("MC/GenRecoCollisions"), 4.f); + } if (hasParticleInFT0C && hasParticleInFT0A) { - histos.fill(HIST("MC/GenRecoCollisions"), 2.5); + histos.fill(HIST("MC/GenRecoCollisions"), 5.f); } } } PROCESS_SWITCH(tofSpectra, processMC, "Process MC", false); - }; // end of spectra task WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) { return WorkflowSpec{adaptAnalysisTask(cfgc)}; } From c3b64469dcbb2e640f8d8b8c06ab1ead7c00af97 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Mon, 17 Jul 2023 05:07:34 +0000 Subject: [PATCH 5/8] Please consider the following formatting changes --- PWGLF/Tasks/spectraTOF.cxx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PWGLF/Tasks/spectraTOF.cxx b/PWGLF/Tasks/spectraTOF.cxx index 3f40e2199e7..318c280c091 100644 --- a/PWGLF/Tasks/spectraTOF.cxx +++ b/PWGLF/Tasks/spectraTOF.cxx @@ -178,7 +178,7 @@ struct tofSpectra { const AxisSpec vtxZAxis{100, -20, 20, "Vtx_{z} (cm)"}; const AxisSpec pAxis{binsPt, "#it{p} (GeV/#it{c})"}; const AxisSpec ptAxis{binsPt, "#it{p}_{T} (GeV/#it{c})"}; - //const AxisSpec etaAxis{binsEta, "#eta tracks"}; + // const AxisSpec etaAxis{binsEta, "#eta tracks"}; histos.add("event/vertexz", "", HistType::kTH1D, {vtxZAxis}); auto h = histos.add("evsel", "evsel", HistType::kTH1D, {{10, 0.5, 10.5}}); @@ -561,7 +561,7 @@ struct tofSpectra { } } else if (makeTHnSparseChoice) { // RD if (track.sign() > 0) { // RD - histos.fill(HIST(hnsigmatpc[id]), track.pt(), nsigmaTPC, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD + histos.fill(HIST(hnsigmatpc[id]), track.pt(), nsigmaTPC, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD } else { // RD histos.fill(HIST(hnsigmatpc[id + Np]), track.pt(), nsigmaTPC, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD } // RD @@ -681,7 +681,7 @@ struct tofSpectra { } } else if (multiplicityEstimator != MultCodes::kNoMultiplicity && makeTHnSparseChoice) { // RD if (track.sign() > 0) { // RD - histos.fill(HIST(hnsigmatof[id]), track.pt(), nsigmaTOF, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD + histos.fill(HIST(hnsigmatof[id]), track.pt(), nsigmaTOF, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD } else { // RD histos.fill(HIST(hnsigmatof[id + Np]), track.pt(), nsigmaTOF, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD } // RD From 527b900ac44cd015cf1b53eff8ed8aa5fed6a8e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Mon, 17 Jul 2023 07:21:29 +0200 Subject: [PATCH 6/8] Update spectraTOF.cxx Fix eta axis, format --- PWGLF/Tasks/spectraTOF.cxx | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/PWGLF/Tasks/spectraTOF.cxx b/PWGLF/Tasks/spectraTOF.cxx index 318c280c091..c4f5457a35c 100644 --- a/PWGLF/Tasks/spectraTOF.cxx +++ b/PWGLF/Tasks/spectraTOF.cxx @@ -178,7 +178,7 @@ struct tofSpectra { const AxisSpec vtxZAxis{100, -20, 20, "Vtx_{z} (cm)"}; const AxisSpec pAxis{binsPt, "#it{p} (GeV/#it{c})"}; const AxisSpec ptAxis{binsPt, "#it{p}_{T} (GeV/#it{c})"}; - // const AxisSpec etaAxis{binsEta, "#eta tracks"}; + const AxisSpec etaAxis{binsEta, "#eta"}; histos.add("event/vertexz", "", HistType::kTH1D, {vtxZAxis}); auto h = histos.add("evsel", "evsel", HistType::kTH1D, {{10, 0.5, 10.5}}); @@ -374,7 +374,6 @@ struct tofSpectra { const AxisSpec nsigmaTOFAxis{binsnsigmaTOF, Form("N_{#sigma}^{TOF}(%s)", pTCharge[i])}; const AxisSpec deltaTPCAxis{binsdeltaTPC, Form("#Delta^{TPC}(%s)", pTCharge[i])}; const AxisSpec deltaTOFAxis{binsdeltaTOF, Form("#Delta^{TOF}(%s)", pTCharge[i])}; - const AxisSpec etaAxis{binsEta, Form("#eta^{TPC}_{TOF}(%s)", pTCharge[i])}; AxisSpec multAxis{binsMultiplicity, "Undefined multiplicity estimator"}; if (enableTPCTOFHistograms && !makeTHnSparseChoice) { @@ -427,10 +426,9 @@ struct tofSpectra { histos.add(hdeltatof[i].data(), pTCharge[i], kTH2D, {ptAxis, deltaTOFAxis}); histos.add(hdeltatpc[i].data(), pTCharge[i], kTH2D, {ptAxis, deltaTPCAxis}); } - } else if (multiplicityEstimator != MultCodes::kNoMultiplicity && makeTHnSparseChoice) { // RD + } else if (multiplicityEstimator != MultCodes::kNoMultiplicity && makeTHnSparseChoice) { // RD histos.add(hnsigmatof[i].data(), pTCharge[i], kTHnSparseD, {ptAxis, nsigmaTOFAxis, multAxis, dcaXyAxis, dcaZAxis, etaAxis}); // RD histos.add(hnsigmatpc[i].data(), pTCharge[i], kTHnSparseD, {ptAxis, nsigmaTPCAxis, multAxis, dcaXyAxis, dcaZAxis, etaAxis}); // RD - } else { histos.add(hnsigmatof[i].data(), pTCharge[i], kTH3D, {ptAxis, nsigmaTOFAxis, multAxis}); @@ -559,12 +557,12 @@ struct tofSpectra { } else { histos.fill(HIST(hnsigmatpc[id + Np]), track.pt(), nsigmaTPC); } - } else if (makeTHnSparseChoice) { // RD - if (track.sign() > 0) { // RD - histos.fill(HIST(hnsigmatpc[id]), track.pt(), nsigmaTPC, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD - } else { // RD + } else if (makeTHnSparseChoice) { // RD + if (track.sign() > 0) { // RD + histos.fill(HIST(hnsigmatpc[id]), track.pt(), nsigmaTPC, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD + } else { // RD histos.fill(HIST(hnsigmatpc[id + Np]), track.pt(), nsigmaTPC, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD - } // RD + } // RD } else { if (track.sign() > 0) { histos.fill(HIST(hnsigmatpc[id]), track.pt(), nsigmaTPC, multiplicity); @@ -679,12 +677,12 @@ struct tofSpectra { } else { histos.fill(HIST(hnsigmatof[id + Np]), track.pt(), nsigmaTOF); } - } else if (multiplicityEstimator != MultCodes::kNoMultiplicity && makeTHnSparseChoice) { // RD - if (track.sign() > 0) { // RD - histos.fill(HIST(hnsigmatof[id]), track.pt(), nsigmaTOF, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD - } else { // RD + } else if (multiplicityEstimator != MultCodes::kNoMultiplicity && makeTHnSparseChoice) { // RD + if (track.sign() > 0) { // RD + histos.fill(HIST(hnsigmatof[id]), track.pt(), nsigmaTOF, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD + } else { // RD histos.fill(HIST(hnsigmatof[id + Np]), track.pt(), nsigmaTOF, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD - } // RD + } // RD } else { if (track.sign() > 0) { histos.fill(HIST(hnsigmatof[id]), track.pt(), nsigmaTOF, multiplicity); From 4388c8c662dd0646e383ae6da1894202d044d635 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Mon, 17 Jul 2023 07:24:41 +0200 Subject: [PATCH 7/8] Update spectraTOF.cxx --- PWGLF/Tasks/spectraTOF.cxx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/PWGLF/Tasks/spectraTOF.cxx b/PWGLF/Tasks/spectraTOF.cxx index c4f5457a35c..9c2fc85e240 100644 --- a/PWGLF/Tasks/spectraTOF.cxx +++ b/PWGLF/Tasks/spectraTOF.cxx @@ -426,13 +426,14 @@ struct tofSpectra { histos.add(hdeltatof[i].data(), pTCharge[i], kTH2D, {ptAxis, deltaTOFAxis}); histos.add(hdeltatpc[i].data(), pTCharge[i], kTH2D, {ptAxis, deltaTPCAxis}); } - } else if (multiplicityEstimator != MultCodes::kNoMultiplicity && makeTHnSparseChoice) { // RD - histos.add(hnsigmatof[i].data(), pTCharge[i], kTHnSparseD, {ptAxis, nsigmaTOFAxis, multAxis, dcaXyAxis, dcaZAxis, etaAxis}); // RD - histos.add(hnsigmatpc[i].data(), pTCharge[i], kTHnSparseD, {ptAxis, nsigmaTPCAxis, multAxis, dcaXyAxis, dcaZAxis, etaAxis}); // RD } else { - - histos.add(hnsigmatof[i].data(), pTCharge[i], kTH3D, {ptAxis, nsigmaTOFAxis, multAxis}); - histos.add(hnsigmatpc[i].data(), pTCharge[i], kTH3D, {ptAxis, nsigmaTPCAxis, multAxis}); + if (makeTHnSparseChoice) { // RD + histos.add(hnsigmatof[i].data(), pTCharge[i], kTHnSparseD, {ptAxis, nsigmaTOFAxis, multAxis, dcaXyAxis, dcaZAxis, etaAxis}); // RD + histos.add(hnsigmatpc[i].data(), pTCharge[i], kTHnSparseD, {ptAxis, nsigmaTPCAxis, multAxis, dcaXyAxis, dcaZAxis, etaAxis}); // RD + } else { + histos.add(hnsigmatof[i].data(), pTCharge[i], kTH3D, {ptAxis, nsigmaTOFAxis, multAxis}); + histos.add(hnsigmatpc[i].data(), pTCharge[i], kTH3D, {ptAxis, nsigmaTPCAxis, multAxis}); + } if (enableDeltaHistograms) { histos.add(hdeltatof[i].data(), pTCharge[i], kTH3D, {ptAxis, deltaTOFAxis, multAxis}); histos.add(hdeltatpc[i].data(), pTCharge[i], kTH3D, {ptAxis, deltaTPCAxis, multAxis}); From 64400be85c50f554adcb10cdd4fc7e960213c283 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Mon, 17 Jul 2023 07:33:23 +0200 Subject: [PATCH 8/8] Update spectraTOF.cxx --- PWGLF/Tasks/spectraTOF.cxx | 55 ++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/PWGLF/Tasks/spectraTOF.cxx b/PWGLF/Tasks/spectraTOF.cxx index 9c2fc85e240..93b01a20506 100644 --- a/PWGLF/Tasks/spectraTOF.cxx +++ b/PWGLF/Tasks/spectraTOF.cxx @@ -376,11 +376,12 @@ struct tofSpectra { const AxisSpec deltaTOFAxis{binsdeltaTOF, Form("#Delta^{TOF}(%s)", pTCharge[i])}; AxisSpec multAxis{binsMultiplicity, "Undefined multiplicity estimator"}; - if (enableTPCTOFHistograms && !makeTHnSparseChoice) { - histos.add(hnsigmatpctof[i].data(), pTCharge[i], kTH3D, {ptAxis, nsigmaTPCAxis, nsigmaTOFAxis}); - } - if (enableTPCTOFHistograms && makeTHnSparseChoice) { - histos.add(hnsigmatpctof[i].data(), pTCharge[i], kTHnSparseD, {ptAxis, etaAxis, nsigmaTPCAxis, nsigmaTOFAxis}); + if (enableTPCTOFHistograms) { + if (makeTHnSparseChoice) { // JL + histos.add(hnsigmatpctof[i].data(), pTCharge[i], kTHnSparseD, {ptAxis, etaAxis, nsigmaTPCAxis, nsigmaTOFAxis}); // JL + } else { + histos.add(hnsigmatpctof[i].data(), pTCharge[i], kTH3D, {ptAxis, nsigmaTPCAxis, nsigmaTOFAxis}); + } } switch (multiplicityEstimator) { @@ -678,33 +679,35 @@ struct tofSpectra { } else { histos.fill(HIST(hnsigmatof[id + Np]), track.pt(), nsigmaTOF); } - } else if (multiplicityEstimator != MultCodes::kNoMultiplicity && makeTHnSparseChoice) { // RD - if (track.sign() > 0) { // RD - histos.fill(HIST(hnsigmatof[id]), track.pt(), nsigmaTOF, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD - } else { // RD - histos.fill(HIST(hnsigmatof[id + Np]), track.pt(), nsigmaTOF, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD - } // RD } else { - if (track.sign() > 0) { - histos.fill(HIST(hnsigmatof[id]), track.pt(), nsigmaTOF, multiplicity); - } else { - histos.fill(HIST(hnsigmatof[id + Np]), track.pt(), nsigmaTOF, multiplicity); - } - } - - if (enableTPCTOFHistograms && makeTHnSparseChoice) { - if (track.sign() > 0) { - histos.fill(HIST(hnsigmatpctof[id]), track.pt(), track.eta(), nsigmaTPC, nsigmaTOF); + if (makeTHnSparseChoice) { // RD + if (track.sign() > 0) { // RD + histos.fill(HIST(hnsigmatof[id]), track.pt(), nsigmaTOF, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD + } else { // RD + histos.fill(HIST(hnsigmatof[id + Np]), track.pt(), nsigmaTOF, multiplicity, track.dcaXY(), track.dcaZ(), track.eta()); // RD + } // RD } else { - histos.fill(HIST(hnsigmatpctof[id + Np]), track.pt(), track.eta(), nsigmaTPC, nsigmaTOF); + if (track.sign() > 0) { + histos.fill(HIST(hnsigmatof[id]), track.pt(), nsigmaTOF, multiplicity); + } else { + histos.fill(HIST(hnsigmatof[id + Np]), track.pt(), nsigmaTOF, multiplicity); + } } } - if (enableTPCTOFHistograms && !makeTHnSparseChoice) { - if (track.sign() > 0) { - histos.fill(HIST(hnsigmatpctof[id]), track.pt(), nsigmaTPC, nsigmaTOF); + if (enableTPCTOFHistograms) { + if (makeTHnSparseChoice) { + if (track.sign() > 0) { + histos.fill(HIST(hnsigmatpctof[id]), track.pt(), track.eta(), nsigmaTPC, nsigmaTOF); + } else { + histos.fill(HIST(hnsigmatpctof[id + Np]), track.pt(), track.eta(), nsigmaTPC, nsigmaTOF); + } } else { - histos.fill(HIST(hnsigmatpctof[id + Np]), track.pt(), nsigmaTPC, nsigmaTOF); + if (track.sign() > 0) { + histos.fill(HIST(hnsigmatpctof[id]), track.pt(), nsigmaTPC, nsigmaTOF); + } else { + histos.fill(HIST(hnsigmatpctof[id + Np]), track.pt(), nsigmaTPC, nsigmaTOF); + } } }