From ade3d5e48a80f8b2fa541a741a2c3d32a604eb1c Mon Sep 17 00:00:00 2001 From: Gian Michele Innocenti Date: Tue, 2 Feb 2021 15:15:10 +0100 Subject: [PATCH 01/23] Add untested version oft the X to Jpsi track track --- Analysis/Tasks/PWGHF/CMakeLists.txt | 9 ++- Analysis/Tasks/PWGHF/taskX.cxx | 96 +++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 Analysis/Tasks/PWGHF/taskX.cxx diff --git a/Analysis/Tasks/PWGHF/CMakeLists.txt b/Analysis/Tasks/PWGHF/CMakeLists.txt index cadec6d335bdb..6fb285562c45d 100644 --- a/Analysis/Tasks/PWGHF/CMakeLists.txt +++ b/Analysis/Tasks/PWGHF/CMakeLists.txt @@ -63,7 +63,7 @@ o2_add_dpl_workflow(hf-lc-candidate-selector PUBLIC_LINK_LIBRARIES O2::Framework O2::AnalysisDataModel O2::AnalysisCore O2::DetectorsVertexing COMPONENT_NAME Analysis) -o2_add_dpl_workflow(hf-jpsi-toee-candidate-selector +o2_add_dpl_workflow(hf-jpsi-toee-candidate-selector SOURCES HFJpsiToEECandidateSelector.cxx PUBLIC_LINK_LIBRARIES O2::Framework O2::AnalysisDataModel O2::AnalysisCore O2::DetectorsVertexing COMPONENT_NAME Analysis) @@ -88,7 +88,7 @@ o2_add_dpl_workflow(hf-task-lc PUBLIC_LINK_LIBRARIES O2::Framework O2::AnalysisDataModel O2::AnalysisCore O2::DetectorsVertexing COMPONENT_NAME Analysis) -o2_add_dpl_workflow(hf-task-jpsi +o2_add_dpl_workflow(hf-task-jpsi SOURCES taskJpsi.cxx PUBLIC_LINK_LIBRARIES O2::Framework O2::AnalysisDataModel O2::AnalysisCore O2::DetectorsVertexing COMPONENT_NAME Analysis) @@ -103,6 +103,11 @@ o2_add_dpl_workflow(hf-task-xic PUBLIC_LINK_LIBRARIES O2::Framework O2::AnalysisDataModel O2::AnalysisCore O2::DetectorsVertexing COMPONENT_NAME Analysis) +o2_add_dpl_workflow(hf-task-x + SOURCES taskX.cxx + PUBLIC_LINK_LIBRARIES O2::Framework O2::AnalysisDataModel O2::AnalysisCore O2::DetectorsVertexing + COMPONENT_NAME Analysis) + o2_add_dpl_workflow(hf-mc-validation SOURCES HFMCValidation.cxx PUBLIC_LINK_LIBRARIES O2::Framework O2::AnalysisDataModel O2::AnalysisCore O2::DetectorsVertexing diff --git a/Analysis/Tasks/PWGHF/taskX.cxx b/Analysis/Tasks/PWGHF/taskX.cxx new file mode 100644 index 0000000000000..638c86a8505ff --- /dev/null +++ b/Analysis/Tasks/PWGHF/taskX.cxx @@ -0,0 +1,96 @@ +// Copyright CERN and copyright holders of ALICE O2. This software is +// distributed under the terms of the GNU General Public License v3 (GPL +// Version 3), copied verbatim in the file "COPYING". +// +// See http://alice-o2.web.cern.ch/license for full licensing information. +// +// In applying this license CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +/// \file taskX.cxx +/// \brief X(3872) analysis task +/// +/// \author Gian Michele Innocenti , CERN + +#include "Framework/AnalysisTask.h" +#include "Framework/HistogramRegistry.h" +#include "AnalysisDataModel/HFSecondaryVertex.h" +#include "AnalysisDataModel/HFCandidateSelectionTables.h" + +using namespace o2; +using namespace o2::framework; +using namespace o2::aod::hf_cand_prong2; +using namespace o2::framework::expressions; + +void customize(std::vector& workflowOptions) +{ + ConfigParamSpec optionDoMC{"doMC", VariantType::Bool, false, {"Fill MC histograms."}}; + workflowOptions.push_back(optionDoMC); +} + +#include "Framework/runDataProcessing.h" + +namespace o2::aod +{ +namespace extra +{ +DECLARE_SOA_INDEX_COLUMN(Collision, collision); +} +DECLARE_SOA_TABLE(Colls, "AOD", "COLLSID", o2::aod::extra::CollisionId); +} // namespace o2::aod +struct AddCollisionId { + Produces colls; + void process(aod::HfCandProng2 const& candidates, aod::Tracks const&) + { + for (auto& candidate : candidates) { + colls(candidate.index0_as().collisionId()); + } + } +}; + +/// X analysis task +/// FIXME: Still need to remove track duplication!!! +struct TaskX { + HistogramRegistry registry{ + "registry", + {{"hmassJpsi", "2-prong candidates;inv. mass (#pi K) (GeV/#it{c}^{2});entries", {HistType::kTH1F, {{500, 0., 5.}}}}, + {"hptcand", "X candidates;candidate #it{p}_{T} (GeV/#it{c});entries", {HistType::kTH1F, {{100, 0., 10.}}}}}}; + + Configurable d_selectionFlagJpsi{"d_selectionFlagJpsi", 1, "Selection Flag for Jpsi"}; + Configurable cutEtaCandMax{"cutEtaCandMax", -1., "max. cand. pseudorapidity"}; + + Filter filterSelectCandidates = (aod::hf_selcandidate_jpsi::isSelJpsiToEE >= d_selectionFlagJpsi); + + void process(aod::Collision const&, soa::Filtered const& tracks, soa::Filtered> const& candidates) + { + for (auto& candidate : candidates) { + if (!(candidate.hfflag() & 1 << JpsiToEE)) { + continue; + } + if (cutEtaCandMax >= 0. && std::abs(candidate.eta()) > cutEtaCandMax) { + continue; + } + registry.fill(HIST("hmass"), InvMassJpsiToEE(candidate)); + for (auto trackPos1 = tracks.begin(); trackPos1 != tracks.end(); ++trackPos1) { + if (trackPos1.signed1Pt() < 0) { + continue; + } + for (auto trackNeg1 = tracks.begin(); trackNeg1 != tracks.end(); ++trackNeg1) { + if (trackNeg1.signed1Pt() > 0) { + continue; + } + registry.fill(HIST("hptcand"), candidate.pt() + trackPos1.pt() + trackNeg1.pt()); + } + } + } + } +}; + +WorkflowSpec defineDataProcessing(ConfigContext const&) +{ + WorkflowSpec workflow{ + adaptAnalysisTask("hf-task-add-collisionId"), + adaptAnalysisTask("hf-task-x")}; + return workflow; +} From f642bbdb150ac2cdd9b004009225e1d3ee09c307 Mon Sep 17 00:00:00 2001 From: Rik Spijkers Date: Mon, 8 Feb 2021 16:22:32 +0100 Subject: [PATCH 02/23] This commit adds the Xtask to O2 --- Analysis/Tasks/PWGHF/taskX.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Analysis/Tasks/PWGHF/taskX.cxx b/Analysis/Tasks/PWGHF/taskX.cxx index 638c86a8505ff..4c9e3543dc078 100644 --- a/Analysis/Tasks/PWGHF/taskX.cxx +++ b/Analysis/Tasks/PWGHF/taskX.cxx @@ -71,7 +71,7 @@ struct TaskX { if (cutEtaCandMax >= 0. && std::abs(candidate.eta()) > cutEtaCandMax) { continue; } - registry.fill(HIST("hmass"), InvMassJpsiToEE(candidate)); + registry.fill(HIST("hmassJpsi"), InvMassJpsiToEE(candidate)); for (auto trackPos1 = tracks.begin(); trackPos1 != tracks.end(); ++trackPos1) { if (trackPos1.signed1Pt() < 0) { continue; From aa51f5ad4bc3badb68a8bc0cd905ec0c7c238b1d Mon Sep 17 00:00:00 2001 From: Rik Spijkers Date: Sat, 13 Feb 2021 12:48:22 +0100 Subject: [PATCH 03/23] removed the filter on aod::BigTracks --- Analysis/Tasks/PWGHF/taskX.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Analysis/Tasks/PWGHF/taskX.cxx b/Analysis/Tasks/PWGHF/taskX.cxx index 4c9e3543dc078..61b48f1d051f8 100644 --- a/Analysis/Tasks/PWGHF/taskX.cxx +++ b/Analysis/Tasks/PWGHF/taskX.cxx @@ -62,7 +62,8 @@ struct TaskX { Filter filterSelectCandidates = (aod::hf_selcandidate_jpsi::isSelJpsiToEE >= d_selectionFlagJpsi); - void process(aod::Collision const&, soa::Filtered const& tracks, soa::Filtered> const& candidates) +/// aod::BigTracks is not soa::Filtered, should be added when filters are added + void process(aod::Collision const&, aod::BigTracks const& tracks, soa::Filtered> const& candidates) { for (auto& candidate : candidates) { if (!(candidate.hfflag() & 1 << JpsiToEE)) { From 8e78d24df78bf8d97641fd3bac8c0bc32daf6076 Mon Sep 17 00:00:00 2001 From: Rik Spijkers Date: Mon, 15 Feb 2021 16:18:26 +0100 Subject: [PATCH 04/23] Fixed clang indentation errors (hopefully) --- Analysis/Tasks/PWGHF/taskX.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Analysis/Tasks/PWGHF/taskX.cxx b/Analysis/Tasks/PWGHF/taskX.cxx index 61b48f1d051f8..7179c83bbf069 100644 --- a/Analysis/Tasks/PWGHF/taskX.cxx +++ b/Analysis/Tasks/PWGHF/taskX.cxx @@ -62,7 +62,7 @@ struct TaskX { Filter filterSelectCandidates = (aod::hf_selcandidate_jpsi::isSelJpsiToEE >= d_selectionFlagJpsi); -/// aod::BigTracks is not soa::Filtered, should be added when filters are added + /// aod::BigTracks is not soa::Filtered, should be added when filters are added void process(aod::Collision const&, aod::BigTracks const& tracks, soa::Filtered> const& candidates) { for (auto& candidate : candidates) { @@ -82,7 +82,7 @@ struct TaskX { continue; } registry.fill(HIST("hptcand"), candidate.pt() + trackPos1.pt() + trackNeg1.pt()); - } + } } } } From f230837ef8f470d50d66bcf29eeb5c90235b2d00 Mon Sep 17 00:00:00 2001 From: Rik Spijkers Date: Mon, 15 Feb 2021 16:35:18 +0100 Subject: [PATCH 05/23] previous commit still had clang issues, this should resolve it (indentation) --- Analysis/Tasks/PWGHF/taskX.cxx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Analysis/Tasks/PWGHF/taskX.cxx b/Analysis/Tasks/PWGHF/taskX.cxx index 7179c83bbf069..4329e9474b32f 100644 --- a/Analysis/Tasks/PWGHF/taskX.cxx +++ b/Analysis/Tasks/PWGHF/taskX.cxx @@ -62,7 +62,7 @@ struct TaskX { Filter filterSelectCandidates = (aod::hf_selcandidate_jpsi::isSelJpsiToEE >= d_selectionFlagJpsi); - /// aod::BigTracks is not soa::Filtered, should be added when filters are added + /// aod::BigTracks is not soa::Filtered, should be added when filters are added void process(aod::Collision const&, aod::BigTracks const& tracks, soa::Filtered> const& candidates) { for (auto& candidate : candidates) { @@ -81,9 +81,9 @@ struct TaskX { if (trackNeg1.signed1Pt() > 0) { continue; } - registry.fill(HIST("hptcand"), candidate.pt() + trackPos1.pt() + trackNeg1.pt()); + registry.fill(HIST("hptcand"), candidate.pt() + trackPos1.pt() + trackNeg1.pt()); } - } + } } } }; From 18a9e71667aeff8a418df000fd89172275037133 Mon Sep 17 00:00:00 2001 From: Rik Spijkers Date: Fri, 19 Feb 2021 12:50:12 +0100 Subject: [PATCH 06/23] temporary commit, please ignore --- Analysis/Tasks/PWGHF/taskX.cxx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Analysis/Tasks/PWGHF/taskX.cxx b/Analysis/Tasks/PWGHF/taskX.cxx index 4329e9474b32f..24bbd21e8faa8 100644 --- a/Analysis/Tasks/PWGHF/taskX.cxx +++ b/Analysis/Tasks/PWGHF/taskX.cxx @@ -73,10 +73,12 @@ struct TaskX { continue; } registry.fill(HIST("hmassJpsi"), InvMassJpsiToEE(candidate)); + printf("Jpsi index 0 %d \n Jpsi index 1 %d \n", candidate.index0(), candidate.index1()); for (auto trackPos1 = tracks.begin(); trackPos1 != tracks.end(); ++trackPos1) { if (trackPos1.signed1Pt() < 0) { continue; } + // TrackPos1.index0(); for (auto trackNeg1 = tracks.begin(); trackNeg1 != tracks.end(); ++trackNeg1) { if (trackNeg1.signed1Pt() > 0) { continue; From 8a0c48716cf733d2f1873009f04dbdb661901061 Mon Sep 17 00:00:00 2001 From: rspijkers Date: Tue, 23 Feb 2021 13:49:57 +0100 Subject: [PATCH 07/23] Disables TPC in J/psi selector; Adds duplicate track check in X task. --- .../Tasks/PWGHF/HFJpsiToEECandidateSelector.cxx | 9 +++++---- Analysis/Tasks/PWGHF/taskX.cxx | 14 ++++++++++++-- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/Analysis/Tasks/PWGHF/HFJpsiToEECandidateSelector.cxx b/Analysis/Tasks/PWGHF/HFJpsiToEECandidateSelector.cxx index 81a7bbd92eb8b..60fa91f635703 100644 --- a/Analysis/Tasks/PWGHF/HFJpsiToEECandidateSelector.cxx +++ b/Analysis/Tasks/PWGHF/HFJpsiToEECandidateSelector.cxx @@ -189,10 +189,11 @@ struct HFJpsiToEECandidateSelector { continue; } - if (selectionPID(trackPos) == 0 || selectionPID(trackNeg) == 0) { - hfSelJpsiToEECandidate(0); - continue; - } + // no tpc in run5, commented out + // if (selectionPID(trackPos) == 0 || selectionPID(trackNeg) == 0) { + // hfSelJpsiToEECandidate(0); + // continue; + // } hfSelJpsiToEECandidate(1); } diff --git a/Analysis/Tasks/PWGHF/taskX.cxx b/Analysis/Tasks/PWGHF/taskX.cxx index 24bbd21e8faa8..1e3e82af81b46 100644 --- a/Analysis/Tasks/PWGHF/taskX.cxx +++ b/Analysis/Tasks/PWGHF/taskX.cxx @@ -73,16 +73,26 @@ struct TaskX { continue; } registry.fill(HIST("hmassJpsi"), InvMassJpsiToEE(candidate)); - printf("Jpsi index 0 %d \n Jpsi index 1 %d \n", candidate.index0(), candidate.index1()); + int index0jpsi = candidate.index0Id(); + int index1jpsi = candidate.index1Id(); + auto trackJpsiParVarPos1 = getTrackParCov(candidate.index0()); + auto trackJpsiParVarNeg1 = getTrackParCov(candidate.index1()); for (auto trackPos1 = tracks.begin(); trackPos1 != tracks.end(); ++trackPos1) { if (trackPos1.signed1Pt() < 0) { continue; } - // TrackPos1.index0(); + if (trackPos1.globalIndex() == index0jpsi){ + printf("pos track pt check: trackJpsiParVarPos1.pt(), trackPos1.pt()\n"); + continue; + } for (auto trackNeg1 = tracks.begin(); trackNeg1 != tracks.end(); ++trackNeg1) { if (trackNeg1.signed1Pt() > 0) { continue; } + if (trackNeg1.globalIndex() == index1jpsi){ + printf("neg track pt check: trackJpsiParVarNeg1.pt(), trackNeg1.pt()\n"); + continue; + } registry.fill(HIST("hptcand"), candidate.pt() + trackPos1.pt() + trackNeg1.pt()); } } From 45370a6982fa53a2ea381fbbdc6632587fb03242 Mon Sep 17 00:00:00 2001 From: rspijkers Date: Tue, 23 Feb 2021 16:13:39 +0100 Subject: [PATCH 08/23] Fixes the duplicate track check --- Analysis/Tasks/PWGHF/taskX.cxx | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/Analysis/Tasks/PWGHF/taskX.cxx b/Analysis/Tasks/PWGHF/taskX.cxx index 1e3e82af81b46..d27f792da7bf4 100644 --- a/Analysis/Tasks/PWGHF/taskX.cxx +++ b/Analysis/Tasks/PWGHF/taskX.cxx @@ -49,12 +49,28 @@ struct AddCollisionId { } }; +// TODO: Function that calculates inv mass of X candidate +// namespace o2::aod +// { +// namespace hf_cand_prong3 +// { +// template +// auto InvMassXToJpsiPiPi(const T& candidate) +// { +// return candidate.m(array{RecoDecay::getMassPDG(kJpsi), RecoDecay::getMassPDG(kPiPlus), RecoDecay::getMassPDG(kPiPlus)}); +// } +// } // namespace hf_cand_prong3 +// } // namespace o2::aod + +// RecoDecay::M(array{array{px0, py0, pz0}, array{px1, py1, pz1}, array{px2, py2, pz2}}, m); + /// X analysis task /// FIXME: Still need to remove track duplication!!! struct TaskX { HistogramRegistry registry{ "registry", {{"hmassJpsi", "2-prong candidates;inv. mass (#pi K) (GeV/#it{c}^{2});entries", {HistType::kTH1F, {{500, 0., 5.}}}}, + {"hmassX", "3-prong candidates;inv. mass (#J/psi pi+ pi-) (GeV/#it{c}^{2});entries", {HistType::kTH1F, {{500, 0., 5.}}}}, {"hptcand", "X candidates;candidate #it{p}_{T} (GeV/#it{c});entries", {HistType::kTH1F, {{100, 0., 10.}}}}}}; Configurable d_selectionFlagJpsi{"d_selectionFlagJpsi", 1, "Selection Flag for Jpsi"}; @@ -73,16 +89,18 @@ struct TaskX { continue; } registry.fill(HIST("hmassJpsi"), InvMassJpsiToEE(candidate)); + int index0jpsi = candidate.index0Id(); int index1jpsi = candidate.index1Id(); - auto trackJpsiParVarPos1 = getTrackParCov(candidate.index0()); - auto trackJpsiParVarNeg1 = getTrackParCov(candidate.index1()); + auto JpsiTrackPos = candidate.index0(); + auto JpsiTrackNeg = candidate.index1(); for (auto trackPos1 = tracks.begin(); trackPos1 != tracks.end(); ++trackPos1) { if (trackPos1.signed1Pt() < 0) { continue; } if (trackPos1.globalIndex() == index0jpsi){ - printf("pos track pt check: trackJpsiParVarPos1.pt(), trackPos1.pt()\n"); + printf("pos track id check: %ld, %u\n", trackPos1.globalIndex(), index0jpsi); + printf("pos track pt check: %f, %f\n", JpsiTrackPos.pt(), trackPos1.pt()); continue; } for (auto trackNeg1 = tracks.begin(); trackNeg1 != tracks.end(); ++trackNeg1) { @@ -90,10 +108,17 @@ struct TaskX { continue; } if (trackNeg1.globalIndex() == index1jpsi){ - printf("neg track pt check: trackJpsiParVarNeg1.pt(), trackNeg1.pt()\n"); + printf("neg track id check: %ld, %u\n", trackNeg1.globalIndex(), index1jpsi); + printf("neg track pt check: %f, %f\n", JpsiTrackNeg.pt(), trackNeg1.pt()); continue; } registry.fill(HIST("hptcand"), candidate.pt() + trackPos1.pt() + trackNeg1.pt()); + + // quick&dirty calculation of invariant mass + // auto JpsiParray = ; + // auto trackPos1P = array{trackPos1.px(), trackPos1.py(), trackPos1.pz()}; + // auto trackNeg1P = array{trackNeg1.px(), trackNeg1.py(), trackNeg1.pz()}; + // registry.fill(HIST("hmassX"), RecoDecay::M(array{candidate.p(), trackPos1P, trackNeg1P}, 3.872)); } } } From 2270d95486690e0e8b6ec61ce8960bae9b785d35 Mon Sep 17 00:00:00 2001 From: rspijkers Date: Wed, 24 Feb 2021 11:09:41 +0100 Subject: [PATCH 09/23] Clean up X task --- Analysis/Tasks/PWGHF/taskX.cxx | 32 ++++++-------------------------- 1 file changed, 6 insertions(+), 26 deletions(-) diff --git a/Analysis/Tasks/PWGHF/taskX.cxx b/Analysis/Tasks/PWGHF/taskX.cxx index d27f792da7bf4..4033249e40537 100644 --- a/Analysis/Tasks/PWGHF/taskX.cxx +++ b/Analysis/Tasks/PWGHF/taskX.cxx @@ -12,6 +12,7 @@ /// \brief X(3872) analysis task /// /// \author Gian Michele Innocenti , CERN +/// \author Rik Spijkers #include "Framework/AnalysisTask.h" #include "Framework/HistogramRegistry.h" @@ -49,21 +50,6 @@ struct AddCollisionId { } }; -// TODO: Function that calculates inv mass of X candidate -// namespace o2::aod -// { -// namespace hf_cand_prong3 -// { -// template -// auto InvMassXToJpsiPiPi(const T& candidate) -// { -// return candidate.m(array{RecoDecay::getMassPDG(kJpsi), RecoDecay::getMassPDG(kPiPlus), RecoDecay::getMassPDG(kPiPlus)}); -// } -// } // namespace hf_cand_prong3 -// } // namespace o2::aod - -// RecoDecay::M(array{array{px0, py0, pz0}, array{px1, py1, pz1}, array{px2, py2, pz2}}, m); - /// X analysis task /// FIXME: Still need to remove track duplication!!! struct TaskX { @@ -113,17 +99,11 @@ struct TaskX { continue; } registry.fill(HIST("hptcand"), candidate.pt() + trackPos1.pt() + trackNeg1.pt()); - - // quick&dirty calculation of invariant mass - // auto JpsiParray = ; - // auto trackPos1P = array{trackPos1.px(), trackPos1.py(), trackPos1.pz()}; - // auto trackNeg1P = array{trackNeg1.px(), trackNeg1.py(), trackNeg1.pz()}; - // registry.fill(HIST("hmassX"), RecoDecay::M(array{candidate.p(), trackPos1P, trackNeg1P}, 3.872)); - } - } - } - } -}; + } // pi- loop + } // pi+ loop + } // Jpsi loop + } // process +}; // struct WorkflowSpec defineDataProcessing(ConfigContext const&) { From 4ca94e1d34e0c644c17a3ddb356d89c5dc45b76a Mon Sep 17 00:00:00 2001 From: rspijkers Date: Mon, 1 Mar 2021 12:16:00 +0100 Subject: [PATCH 10/23] Added author and fixed variable names --- Analysis/Tasks/PWGHF/taskX.cxx | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/Analysis/Tasks/PWGHF/taskX.cxx b/Analysis/Tasks/PWGHF/taskX.cxx index 4033249e40537..9f96bb6fb1bda 100644 --- a/Analysis/Tasks/PWGHF/taskX.cxx +++ b/Analysis/Tasks/PWGHF/taskX.cxx @@ -50,16 +50,15 @@ struct AddCollisionId { } }; -/// X analysis task +/// X(3872) analysis task /// FIXME: Still need to remove track duplication!!! struct TaskX { HistogramRegistry registry{ "registry", - {{"hmassJpsi", "2-prong candidates;inv. mass (#pi K) (GeV/#it{c}^{2});entries", {HistType::kTH1F, {{500, 0., 5.}}}}, - {"hmassX", "3-prong candidates;inv. mass (#J/psi pi+ pi-) (GeV/#it{c}^{2});entries", {HistType::kTH1F, {{500, 0., 5.}}}}, - {"hptcand", "X candidates;candidate #it{p}_{T} (GeV/#it{c});entries", {HistType::kTH1F, {{100, 0., 10.}}}}}}; + {{"hMassJpsi", "2-prong candidates;inv. mass (#pi K) (GeV/#it{c}^{2});entries", {HistType::kTH1F, {{500, 0., 5.}}}}, + {"hPtCand", "X candidates;candidate #it{p}_{T} (GeV/#it{c});entries", {HistType::kTH1F, {{100, 0., 10.}}}}}}; - Configurable d_selectionFlagJpsi{"d_selectionFlagJpsi", 1, "Selection Flag for Jpsi"}; + Configurable selectionFlagJpsi{"selectionFlagJpsi", 1, "Selection Flag for Jpsi"}; Configurable cutEtaCandMax{"cutEtaCandMax", -1., "max. cand. pseudorapidity"}; Filter filterSelectCandidates = (aod::hf_selcandidate_jpsi::isSelJpsiToEE >= d_selectionFlagJpsi); @@ -80,25 +79,25 @@ struct TaskX { int index1jpsi = candidate.index1Id(); auto JpsiTrackPos = candidate.index0(); auto JpsiTrackNeg = candidate.index1(); - for (auto trackPos1 = tracks.begin(); trackPos1 != tracks.end(); ++trackPos1) { - if (trackPos1.signed1Pt() < 0) { + for (auto trackPos = tracks.begin(); trackPos != tracks.end(); ++trackPos) { + if (trackPos.signed1Pt() < 0) { continue; } - if (trackPos1.globalIndex() == index0jpsi){ - printf("pos track id check: %ld, %u\n", trackPos1.globalIndex(), index0jpsi); - printf("pos track pt check: %f, %f\n", JpsiTrackPos.pt(), trackPos1.pt()); + if (trackPos.globalIndex() == index0jpsi){ + printf("pos track id check: %ld, %u\n", trackPos.globalIndex(), index0jpsi); + printf("pos track pt check: %f, %f\n", JpsiTrackPos.pt(), trackPos.pt()); continue; } - for (auto trackNeg1 = tracks.begin(); trackNeg1 != tracks.end(); ++trackNeg1) { - if (trackNeg1.signed1Pt() > 0) { + for (auto trackNeg = tracks.begin(); trackNeg != tracks.end(); ++trackNeg) { + if (trackNeg.signed1Pt() > 0) { continue; } - if (trackNeg1.globalIndex() == index1jpsi){ - printf("neg track id check: %ld, %u\n", trackNeg1.globalIndex(), index1jpsi); - printf("neg track pt check: %f, %f\n", JpsiTrackNeg.pt(), trackNeg1.pt()); + if (trackNeg.globalIndex() == index1jpsi){ + printf("neg track id check: %ld, %u\n", trackNeg.globalIndex(), index1jpsi); + printf("neg track pt check: %f, %f\n", JpsiTrackNeg.pt(), trackNeg.pt()); continue; } - registry.fill(HIST("hptcand"), candidate.pt() + trackPos1.pt() + trackNeg1.pt()); + registry.fill(HIST("hptcand"), candidate.pt() + trackPos.pt() + trackNeg.pt()); } // pi- loop } // pi+ loop } // Jpsi loop From c3b190adf512708b35dd6b2a72fda6688175d2d5 Mon Sep 17 00:00:00 2001 From: rspijkers Date: Mon, 1 Mar 2021 12:19:03 +0100 Subject: [PATCH 11/23] Fixed clang-format --- Analysis/Tasks/PWGHF/taskX.cxx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Analysis/Tasks/PWGHF/taskX.cxx b/Analysis/Tasks/PWGHF/taskX.cxx index 9f96bb6fb1bda..8506756f57beb 100644 --- a/Analysis/Tasks/PWGHF/taskX.cxx +++ b/Analysis/Tasks/PWGHF/taskX.cxx @@ -83,7 +83,7 @@ struct TaskX { if (trackPos.signed1Pt() < 0) { continue; } - if (trackPos.globalIndex() == index0jpsi){ + if (trackPos.globalIndex() == index0jpsi) { printf("pos track id check: %ld, %u\n", trackPos.globalIndex(), index0jpsi); printf("pos track pt check: %f, %f\n", JpsiTrackPos.pt(), trackPos.pt()); continue; @@ -92,17 +92,17 @@ struct TaskX { if (trackNeg.signed1Pt() > 0) { continue; } - if (trackNeg.globalIndex() == index1jpsi){ + if (trackNeg.globalIndex() == index1jpsi) { printf("neg track id check: %ld, %u\n", trackNeg.globalIndex(), index1jpsi); printf("neg track pt check: %f, %f\n", JpsiTrackNeg.pt(), trackNeg.pt()); continue; } registry.fill(HIST("hptcand"), candidate.pt() + trackPos.pt() + trackNeg.pt()); } // pi- loop - } // pi+ loop - } // Jpsi loop - } // process -}; // struct + } // pi+ loop + } // Jpsi loop + } // process +}; // struct WorkflowSpec defineDataProcessing(ConfigContext const&) { From ec7cb675b013e86472a74138e312498d490db72b Mon Sep 17 00:00:00 2001 From: rspijkers Date: Mon, 1 Mar 2021 16:33:13 +0100 Subject: [PATCH 12/23] Various fixes: - added home institute (UU) - changed pion loop statement (shouldn't do anything different) - deleted print statements - deleted JpsiTracks, no longer needed (only used for print statements) - edited some variable names I forgot last commit --- Analysis/Tasks/PWGHF/taskX.cxx | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/Analysis/Tasks/PWGHF/taskX.cxx b/Analysis/Tasks/PWGHF/taskX.cxx index 8506756f57beb..605904d422cb4 100644 --- a/Analysis/Tasks/PWGHF/taskX.cxx +++ b/Analysis/Tasks/PWGHF/taskX.cxx @@ -12,7 +12,7 @@ /// \brief X(3872) analysis task /// /// \author Gian Michele Innocenti , CERN -/// \author Rik Spijkers +/// \author Rik Spijkers , Utrecht University #include "Framework/AnalysisTask.h" #include "Framework/HistogramRegistry.h" @@ -61,7 +61,7 @@ struct TaskX { Configurable selectionFlagJpsi{"selectionFlagJpsi", 1, "Selection Flag for Jpsi"}; Configurable cutEtaCandMax{"cutEtaCandMax", -1., "max. cand. pseudorapidity"}; - Filter filterSelectCandidates = (aod::hf_selcandidate_jpsi::isSelJpsiToEE >= d_selectionFlagJpsi); + Filter filterSelectCandidates = (aod::hf_selcandidate_jpsi::isSelJpsiToEE >= selectionFlagJpsi); /// aod::BigTracks is not soa::Filtered, should be added when filters are added void process(aod::Collision const&, aod::BigTracks const& tracks, soa::Filtered> const& candidates) @@ -73,31 +73,25 @@ struct TaskX { if (cutEtaCandMax >= 0. && std::abs(candidate.eta()) > cutEtaCandMax) { continue; } - registry.fill(HIST("hmassJpsi"), InvMassJpsiToEE(candidate)); + registry.fill(HIST("hMassJpsi"), InvMassJpsiToEE(candidate)); int index0jpsi = candidate.index0Id(); int index1jpsi = candidate.index1Id(); - auto JpsiTrackPos = candidate.index0(); - auto JpsiTrackNeg = candidate.index1(); - for (auto trackPos = tracks.begin(); trackPos != tracks.end(); ++trackPos) { + for (auto& trackPos : tracks) { if (trackPos.signed1Pt() < 0) { continue; } if (trackPos.globalIndex() == index0jpsi) { - printf("pos track id check: %ld, %u\n", trackPos.globalIndex(), index0jpsi); - printf("pos track pt check: %f, %f\n", JpsiTrackPos.pt(), trackPos.pt()); continue; } - for (auto trackNeg = tracks.begin(); trackNeg != tracks.end(); ++trackNeg) { + for (auto& trackNeg : tracks) { if (trackNeg.signed1Pt() > 0) { continue; } if (trackNeg.globalIndex() == index1jpsi) { - printf("neg track id check: %ld, %u\n", trackNeg.globalIndex(), index1jpsi); - printf("neg track pt check: %f, %f\n", JpsiTrackNeg.pt(), trackNeg.pt()); continue; } - registry.fill(HIST("hptcand"), candidate.pt() + trackPos.pt() + trackNeg.pt()); + registry.fill(HIST("hPtCand"), candidate.pt() + trackPos.pt() + trackNeg.pt()); } // pi- loop } // pi+ loop } // Jpsi loop From 17c4f27876291c1c0ae189b9c487eb690d9b9b56 Mon Sep 17 00:00:00 2001 From: rspijkers Date: Mon, 1 Mar 2021 17:02:09 +0100 Subject: [PATCH 13/23] hf-task-add-collisionId --> hf-task-x-add-collisionId --- Analysis/Tasks/PWGHF/taskX.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Analysis/Tasks/PWGHF/taskX.cxx b/Analysis/Tasks/PWGHF/taskX.cxx index 605904d422cb4..0e47dcf39d1e6 100644 --- a/Analysis/Tasks/PWGHF/taskX.cxx +++ b/Analysis/Tasks/PWGHF/taskX.cxx @@ -101,7 +101,7 @@ struct TaskX { WorkflowSpec defineDataProcessing(ConfigContext const&) { WorkflowSpec workflow{ - adaptAnalysisTask("hf-task-add-collisionId"), + adaptAnalysisTask("hf-task-x-add-collisionId"), adaptAnalysisTask("hf-task-x")}; return workflow; } From 07d2cd8e7b7d2ab4bd2f52c02a578bf5808aa2bc Mon Sep 17 00:00:00 2001 From: rspijkers Date: Tue, 2 Mar 2021 17:07:08 +0100 Subject: [PATCH 14/23] Create separate workflow for AddCollisionId Only applied to X task for now --- Analysis/Tasks/PWGHF/AddCollisionId.cxx | 27 +++++++++++++++++++++++++ Analysis/Tasks/PWGHF/CMakeLists.txt | 5 +++++ Analysis/Tasks/PWGHF/taskX.cxx | 22 +------------------- 3 files changed, 33 insertions(+), 21 deletions(-) create mode 100644 Analysis/Tasks/PWGHF/AddCollisionId.cxx diff --git a/Analysis/Tasks/PWGHF/AddCollisionId.cxx b/Analysis/Tasks/PWGHF/AddCollisionId.cxx new file mode 100644 index 0000000000000..f9f116b87c888 --- /dev/null +++ b/Analysis/Tasks/PWGHF/AddCollisionId.cxx @@ -0,0 +1,27 @@ +#include "Framework/runDataProcessing.h" +#include "Framework/AnalysisTask.h" + +namespace o2::aod +{ +namespace extra +{ +DECLARE_SOA_INDEX_COLUMN(Collision, collision); +} +DECLARE_SOA_TABLE(Colls, "AOD", "COLLSID", o2::aod::extra::CollisionId); +} // namespace o2::aod + +struct AddCollisionId { + Produces colls; + void process(aod::HfCandProng2 const& candidates, aod::Tracks const&) + { + for (auto& candidate : candidates) { + colls(candidate.index0_as().collisionId()); + } + } // process +}; // struct + +WorkflowSpec defineDataProcessing(ConfigContext const&) +{ + return WorkflowSpec{ + adaptAnalysisTask("hf-task-add-collisionId")}; +} diff --git a/Analysis/Tasks/PWGHF/CMakeLists.txt b/Analysis/Tasks/PWGHF/CMakeLists.txt index 6fb285562c45d..04630a8329a61 100644 --- a/Analysis/Tasks/PWGHF/CMakeLists.txt +++ b/Analysis/Tasks/PWGHF/CMakeLists.txt @@ -112,3 +112,8 @@ o2_add_dpl_workflow(hf-mc-validation SOURCES HFMCValidation.cxx PUBLIC_LINK_LIBRARIES O2::Framework O2::AnalysisDataModel O2::AnalysisCore O2::DetectorsVertexing COMPONENT_NAME Analysis) + +o2_add_dpl_workflow(hf-task-add-collisionId + SOURCES AddCollisionId.cxx + PUBLIC_LINK_LIBRARIES O2::Framework O2::AnalysisDataModel O2::AnalysisCore O2::DetectorsVertexing + COMPONENT_NAME Analysis) diff --git a/Analysis/Tasks/PWGHF/taskX.cxx b/Analysis/Tasks/PWGHF/taskX.cxx index 0e47dcf39d1e6..2d8f1a097feec 100644 --- a/Analysis/Tasks/PWGHF/taskX.cxx +++ b/Analysis/Tasks/PWGHF/taskX.cxx @@ -14,6 +14,7 @@ /// \author Gian Michele Innocenti , CERN /// \author Rik Spijkers , Utrecht University +#include "Framework/runDataProcessing.h" #include "Framework/AnalysisTask.h" #include "Framework/HistogramRegistry.h" #include "AnalysisDataModel/HFSecondaryVertex.h" @@ -30,28 +31,7 @@ void customize(std::vector& workflowOptions) workflowOptions.push_back(optionDoMC); } -#include "Framework/runDataProcessing.h" - -namespace o2::aod -{ -namespace extra -{ -DECLARE_SOA_INDEX_COLUMN(Collision, collision); -} -DECLARE_SOA_TABLE(Colls, "AOD", "COLLSID", o2::aod::extra::CollisionId); -} // namespace o2::aod -struct AddCollisionId { - Produces colls; - void process(aod::HfCandProng2 const& candidates, aod::Tracks const&) - { - for (auto& candidate : candidates) { - colls(candidate.index0_as().collisionId()); - } - } -}; - /// X(3872) analysis task -/// FIXME: Still need to remove track duplication!!! struct TaskX { HistogramRegistry registry{ "registry", From 0da95d102d376720ca35e5abeb8621f2a3d4b165 Mon Sep 17 00:00:00 2001 From: rspijkers Date: Wed, 3 Mar 2021 11:12:45 +0100 Subject: [PATCH 15/23] Minor fixes, commit for troubleshooting --- Analysis/Tasks/PWGHF/AddCollisionId.cxx | 8 ++++++++ Analysis/Tasks/PWGHF/taskX.cxx | 1 - 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Analysis/Tasks/PWGHF/AddCollisionId.cxx b/Analysis/Tasks/PWGHF/AddCollisionId.cxx index f9f116b87c888..0b2cfce7aa8f6 100644 --- a/Analysis/Tasks/PWGHF/AddCollisionId.cxx +++ b/Analysis/Tasks/PWGHF/AddCollisionId.cxx @@ -1,5 +1,13 @@ +// TODO: remove unnecessary headerfiles and namespaces #include "Framework/runDataProcessing.h" #include "Framework/AnalysisTask.h" +#include "AnalysisDataModel/HFSecondaryVertex.h" +#include "AnalysisDataModel/HFCandidateSelectionTables.h" + +using namespace o2; +using namespace o2::framework; +using namespace o2::aod::hf_cand_prong2; +using namespace o2::framework::expressions; namespace o2::aod { diff --git a/Analysis/Tasks/PWGHF/taskX.cxx b/Analysis/Tasks/PWGHF/taskX.cxx index 2d8f1a097feec..781a2f21a8097 100644 --- a/Analysis/Tasks/PWGHF/taskX.cxx +++ b/Analysis/Tasks/PWGHF/taskX.cxx @@ -81,7 +81,6 @@ struct TaskX { WorkflowSpec defineDataProcessing(ConfigContext const&) { WorkflowSpec workflow{ - adaptAnalysisTask("hf-task-x-add-collisionId"), adaptAnalysisTask("hf-task-x")}; return workflow; } From 1d4f1fc5c0d075ba861291a0ac37fab8d14ab7ea Mon Sep 17 00:00:00 2001 From: rspijkers Date: Thu, 4 Mar 2021 19:13:34 +0100 Subject: [PATCH 16/23] Integrates collisionId into HFCandidateCreators instead of making it a separate workflow - also removes aod::Colls from both X and B Tasks (the declaration has to be removed from B task still) - adds cfgc to taskX.cxx --- .../AnalysisDataModel/HFSecondaryVertex.h | 3 ++ Analysis/Tasks/PWGHF/AddCollisionId.cxx | 35 ------------------- Analysis/Tasks/PWGHF/CMakeLists.txt | 5 --- .../Tasks/PWGHF/HFCandidateCreator2Prong.cxx | 3 +- .../Tasks/PWGHF/HFCandidateCreator3Prong.cxx | 3 +- Analysis/Tasks/PWGHF/taskBPlus.cxx | 2 +- Analysis/Tasks/PWGHF/taskX.cxx | 6 ++-- 7 files changed, 11 insertions(+), 46 deletions(-) delete mode 100644 Analysis/Tasks/PWGHF/AddCollisionId.cxx diff --git a/Analysis/DataModel/include/AnalysisDataModel/HFSecondaryVertex.h b/Analysis/DataModel/include/AnalysisDataModel/HFSecondaryVertex.h index c8e50c10bc630..3020d4aeb5778 100644 --- a/Analysis/DataModel/include/AnalysisDataModel/HFSecondaryVertex.h +++ b/Analysis/DataModel/include/AnalysisDataModel/HFSecondaryVertex.h @@ -82,6 +82,8 @@ DECLARE_SOA_TABLE(HfCutStatusProng3, "AOD", "HFCUTSTATUSP3", // general decay properties namespace hf_cand { +// collision properties +DECLARE_SOA_INDEX_COLUMN(Collision, collision); // secondary vertex DECLARE_SOA_COLUMN(XSecondaryVertex, xSecondaryVertex, float); DECLARE_SOA_COLUMN(YSecondaryVertex, ySecondaryVertex, float); @@ -235,6 +237,7 @@ auto InvMassJpsiToEE(const T& candidate) // general columns #define HFCAND_COLUMNS \ + hf_cand::CollisionId, \ collision::PosX, collision::PosY, collision::PosZ, \ hf_cand::XSecondaryVertex, hf_cand::YSecondaryVertex, hf_cand::ZSecondaryVertex, \ hf_cand::ErrorDecayLength, hf_cand::ErrorDecayLengthXY, \ diff --git a/Analysis/Tasks/PWGHF/AddCollisionId.cxx b/Analysis/Tasks/PWGHF/AddCollisionId.cxx deleted file mode 100644 index 0b2cfce7aa8f6..0000000000000 --- a/Analysis/Tasks/PWGHF/AddCollisionId.cxx +++ /dev/null @@ -1,35 +0,0 @@ -// TODO: remove unnecessary headerfiles and namespaces -#include "Framework/runDataProcessing.h" -#include "Framework/AnalysisTask.h" -#include "AnalysisDataModel/HFSecondaryVertex.h" -#include "AnalysisDataModel/HFCandidateSelectionTables.h" - -using namespace o2; -using namespace o2::framework; -using namespace o2::aod::hf_cand_prong2; -using namespace o2::framework::expressions; - -namespace o2::aod -{ -namespace extra -{ -DECLARE_SOA_INDEX_COLUMN(Collision, collision); -} -DECLARE_SOA_TABLE(Colls, "AOD", "COLLSID", o2::aod::extra::CollisionId); -} // namespace o2::aod - -struct AddCollisionId { - Produces colls; - void process(aod::HfCandProng2 const& candidates, aod::Tracks const&) - { - for (auto& candidate : candidates) { - colls(candidate.index0_as().collisionId()); - } - } // process -}; // struct - -WorkflowSpec defineDataProcessing(ConfigContext const&) -{ - return WorkflowSpec{ - adaptAnalysisTask("hf-task-add-collisionId")}; -} diff --git a/Analysis/Tasks/PWGHF/CMakeLists.txt b/Analysis/Tasks/PWGHF/CMakeLists.txt index 04630a8329a61..6fb285562c45d 100644 --- a/Analysis/Tasks/PWGHF/CMakeLists.txt +++ b/Analysis/Tasks/PWGHF/CMakeLists.txt @@ -112,8 +112,3 @@ o2_add_dpl_workflow(hf-mc-validation SOURCES HFMCValidation.cxx PUBLIC_LINK_LIBRARIES O2::Framework O2::AnalysisDataModel O2::AnalysisCore O2::DetectorsVertexing COMPONENT_NAME Analysis) - -o2_add_dpl_workflow(hf-task-add-collisionId - SOURCES AddCollisionId.cxx - PUBLIC_LINK_LIBRARIES O2::Framework O2::AnalysisDataModel O2::AnalysisCore O2::DetectorsVertexing - COMPONENT_NAME Analysis) diff --git a/Analysis/Tasks/PWGHF/HFCandidateCreator2Prong.cxx b/Analysis/Tasks/PWGHF/HFCandidateCreator2Prong.cxx index a7f2b89b40638..bb4d44ff43218 100644 --- a/Analysis/Tasks/PWGHF/HFCandidateCreator2Prong.cxx +++ b/Analysis/Tasks/PWGHF/HFCandidateCreator2Prong.cxx @@ -109,7 +109,8 @@ struct HFCandidateCreator2Prong { auto errorDecayLengthXY = std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); // fill candidate table rows - rowCandidateBase(collision.posX(), collision.posY(), collision.posZ(), + rowCandidateBase(rowTrackIndexProng2.index0().collisionId(), + collision.posX(), collision.posY(), collision.posZ(), secondaryVertex[0], secondaryVertex[1], secondaryVertex[2], errorDecayLength, errorDecayLengthXY, chi2PCA, diff --git a/Analysis/Tasks/PWGHF/HFCandidateCreator3Prong.cxx b/Analysis/Tasks/PWGHF/HFCandidateCreator3Prong.cxx index 66000fc7e2577..89855defbb8dd 100644 --- a/Analysis/Tasks/PWGHF/HFCandidateCreator3Prong.cxx +++ b/Analysis/Tasks/PWGHF/HFCandidateCreator3Prong.cxx @@ -115,7 +115,8 @@ struct HFCandidateCreator3Prong { auto errorDecayLengthXY = std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); // fill candidate table rows - rowCandidateBase(collision.posX(), collision.posY(), collision.posZ(), + rowCandidateBase(rowTrackIndexProng3.index0().collisionId(), + collision.posX(), collision.posY(), collision.posZ(), secondaryVertex[0], secondaryVertex[1], secondaryVertex[2], errorDecayLength, errorDecayLengthXY, chi2PCA, diff --git a/Analysis/Tasks/PWGHF/taskBPlus.cxx b/Analysis/Tasks/PWGHF/taskBPlus.cxx index 48648a4854621..4bbc666bb81bf 100644 --- a/Analysis/Tasks/PWGHF/taskBPlus.cxx +++ b/Analysis/Tasks/PWGHF/taskBPlus.cxx @@ -65,7 +65,7 @@ struct TaskBplus { Filter filterSelectCandidates = (aod::hf_selcandidate_d0::isSelD0 >= d_selectionFlagD0 || aod::hf_selcandidate_d0::isSelD0bar >= d_selectionFlagD0bar); Partition positiveTracks = aod::track::signed1Pt >= 0.f; - void process(aod::Collision const&, aod::BigTracks const&, soa::Filtered> const& candidates) + void process(aod::Collision const&, aod::BigTracks const&, soa::Filtered> const& candidates) { for (auto& candidate : candidates) { if (!(candidate.hfflag() & 1 << D0ToPiK)) { diff --git a/Analysis/Tasks/PWGHF/taskX.cxx b/Analysis/Tasks/PWGHF/taskX.cxx index 781a2f21a8097..8ad5054691d69 100644 --- a/Analysis/Tasks/PWGHF/taskX.cxx +++ b/Analysis/Tasks/PWGHF/taskX.cxx @@ -44,7 +44,7 @@ struct TaskX { Filter filterSelectCandidates = (aod::hf_selcandidate_jpsi::isSelJpsiToEE >= selectionFlagJpsi); /// aod::BigTracks is not soa::Filtered, should be added when filters are added - void process(aod::Collision const&, aod::BigTracks const& tracks, soa::Filtered> const& candidates) + void process(aod::Collision const&, aod::BigTracks const& tracks, soa::Filtered> const& candidates) { for (auto& candidate : candidates) { if (!(candidate.hfflag() & 1 << JpsiToEE)) { @@ -78,9 +78,9 @@ struct TaskX { } // process }; // struct -WorkflowSpec defineDataProcessing(ConfigContext const&) +WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) { WorkflowSpec workflow{ - adaptAnalysisTask("hf-task-x")}; + adaptAnalysisTask(cfgc, "hf-task-x")}; return workflow; } From 792177afd473f8553f8eee6d795dae9528685151 Mon Sep 17 00:00:00 2001 From: rspijkers Date: Fri, 5 Mar 2021 11:02:51 +0100 Subject: [PATCH 17/23] minor fixes: - use the collision row for collision ID - removed obsolete table and task from B task - fix indentation in HFSecondaryVertex.h --- .../AnalysisDataModel/HFSecondaryVertex.h | 2 +- .../Tasks/PWGHF/HFCandidateCreator2Prong.cxx | 2 +- .../Tasks/PWGHF/HFCandidateCreator3Prong.cxx | 2 +- Analysis/Tasks/PWGHF/taskBPlus.cxx | 22 +------------------ Analysis/Tasks/PWGHF/taskX.cxx | 5 +++-- 5 files changed, 7 insertions(+), 26 deletions(-) diff --git a/Analysis/DataModel/include/AnalysisDataModel/HFSecondaryVertex.h b/Analysis/DataModel/include/AnalysisDataModel/HFSecondaryVertex.h index 3020d4aeb5778..9f824d5da5a3f 100644 --- a/Analysis/DataModel/include/AnalysisDataModel/HFSecondaryVertex.h +++ b/Analysis/DataModel/include/AnalysisDataModel/HFSecondaryVertex.h @@ -238,7 +238,7 @@ auto InvMassJpsiToEE(const T& candidate) // general columns #define HFCAND_COLUMNS \ hf_cand::CollisionId, \ - collision::PosX, collision::PosY, collision::PosZ, \ + collision::PosX, collision::PosY, collision::PosZ, \ hf_cand::XSecondaryVertex, hf_cand::YSecondaryVertex, hf_cand::ZSecondaryVertex, \ hf_cand::ErrorDecayLength, hf_cand::ErrorDecayLengthXY, \ hf_cand::Chi2PCA, \ diff --git a/Analysis/Tasks/PWGHF/HFCandidateCreator2Prong.cxx b/Analysis/Tasks/PWGHF/HFCandidateCreator2Prong.cxx index bb4d44ff43218..ada577f60e098 100644 --- a/Analysis/Tasks/PWGHF/HFCandidateCreator2Prong.cxx +++ b/Analysis/Tasks/PWGHF/HFCandidateCreator2Prong.cxx @@ -109,7 +109,7 @@ struct HFCandidateCreator2Prong { auto errorDecayLengthXY = std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); // fill candidate table rows - rowCandidateBase(rowTrackIndexProng2.index0().collisionId(), + rowCandidateBase(collision.globalIndex(), collision.posX(), collision.posY(), collision.posZ(), secondaryVertex[0], secondaryVertex[1], secondaryVertex[2], errorDecayLength, errorDecayLengthXY, diff --git a/Analysis/Tasks/PWGHF/HFCandidateCreator3Prong.cxx b/Analysis/Tasks/PWGHF/HFCandidateCreator3Prong.cxx index 89855defbb8dd..9b04b574f77d8 100644 --- a/Analysis/Tasks/PWGHF/HFCandidateCreator3Prong.cxx +++ b/Analysis/Tasks/PWGHF/HFCandidateCreator3Prong.cxx @@ -115,7 +115,7 @@ struct HFCandidateCreator3Prong { auto errorDecayLengthXY = std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); // fill candidate table rows - rowCandidateBase(rowTrackIndexProng3.index0().collisionId(), + rowCandidateBase(collision.globalIndex(), collision.posX(), collision.posY(), collision.posZ(), secondaryVertex[0], secondaryVertex[1], secondaryVertex[2], errorDecayLength, errorDecayLengthXY, diff --git a/Analysis/Tasks/PWGHF/taskBPlus.cxx b/Analysis/Tasks/PWGHF/taskBPlus.cxx index 4bbc666bb81bf..6a5c4108a45df 100644 --- a/Analysis/Tasks/PWGHF/taskBPlus.cxx +++ b/Analysis/Tasks/PWGHF/taskBPlus.cxx @@ -15,6 +15,7 @@ /// \author Vít Kučera , CERN /// \author Nima Zardoshti , CERN +#include "Framework/runDataProcessing.h" #include "Framework/AnalysisTask.h" #include "Framework/HistogramRegistry.h" #include "AnalysisDataModel/HFSecondaryVertex.h" @@ -31,26 +32,6 @@ void customize(std::vector& workflowOptions) workflowOptions.push_back(optionDoMC); } -#include "Framework/runDataProcessing.h" - -namespace o2::aod -{ -namespace extra -{ -DECLARE_SOA_INDEX_COLUMN(Collision, collision); -} -DECLARE_SOA_TABLE(Colls, "AOD", "COLLSID", o2::aod::extra::CollisionId); -} // namespace o2::aod -struct AddCollisionId { - Produces colls; - void process(aod::HfCandProng2 const& candidates, aod::Tracks const&) - { - for (auto& candidate : candidates) { - colls(candidate.index0_as().collisionId()); - } - } -}; - /// B+ analysis task struct TaskBplus { HistogramRegistry registry{ @@ -92,7 +73,6 @@ struct TaskBplus { WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) { WorkflowSpec workflow{ - adaptAnalysisTask(cfgc, TaskName{"hf-task-add-collisionId"}), adaptAnalysisTask(cfgc, TaskName{"hf-task-bplus"})}; return workflow; } diff --git a/Analysis/Tasks/PWGHF/taskX.cxx b/Analysis/Tasks/PWGHF/taskX.cxx index 8ad5054691d69..3341099bcb46e 100644 --- a/Analysis/Tasks/PWGHF/taskX.cxx +++ b/Analysis/Tasks/PWGHF/taskX.cxx @@ -14,7 +14,6 @@ /// \author Gian Michele Innocenti , CERN /// \author Rik Spijkers , Utrecht University -#include "Framework/runDataProcessing.h" #include "Framework/AnalysisTask.h" #include "Framework/HistogramRegistry.h" #include "AnalysisDataModel/HFSecondaryVertex.h" @@ -31,6 +30,8 @@ void customize(std::vector& workflowOptions) workflowOptions.push_back(optionDoMC); } +#include "Framework/runDataProcessing.h" + /// X(3872) analysis task struct TaskX { HistogramRegistry registry{ @@ -81,6 +82,6 @@ struct TaskX { WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) { WorkflowSpec workflow{ - adaptAnalysisTask(cfgc, "hf-task-x")}; + adaptAnalysisTask(cfgc, TaskName{"hf-task-x"})}; return workflow; } From caad6df4d92f433f08364d3e82effc39e5c7dd59 Mon Sep 17 00:00:00 2001 From: rspijkers Date: Mon, 8 Mar 2021 13:46:59 +0100 Subject: [PATCH 18/23] jpsi candidate selector: - removed charge check - changed TPC checks --- .../Tasks/PWGHF/HFJpsiToEECandidateSelector.cxx | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Analysis/Tasks/PWGHF/HFJpsiToEECandidateSelector.cxx b/Analysis/Tasks/PWGHF/HFJpsiToEECandidateSelector.cxx index 60fa91f635703..8492c099163a2 100644 --- a/Analysis/Tasks/PWGHF/HFJpsiToEECandidateSelector.cxx +++ b/Analysis/Tasks/PWGHF/HFJpsiToEECandidateSelector.cxx @@ -76,9 +76,6 @@ struct HFJpsiToEECandidateSelector { template bool daughterSelection(const T& track) { - if (track.sign() == 0) { - return false; - } /*if (track.tpcNClsFound() == 0) { return false; //is it clusters findable or found - need to check }*/ @@ -141,9 +138,11 @@ struct HFJpsiToEECandidateSelector { template bool selectionPIDTPC(const T& track, int nSigmaCut) { + if (nSigmaCut > 10) { + return true; + } return track.tpcNSigmaEl() < nSigmaCut; } - /// PID selection on daughter track /// \param track is the daughter track /// \return 1 if successful PID match, 0 if successful PID rejection, -1 if no PID info @@ -189,11 +188,10 @@ struct HFJpsiToEECandidateSelector { continue; } - // no tpc in run5, commented out - // if (selectionPID(trackPos) == 0 || selectionPID(trackNeg) == 0) { - // hfSelJpsiToEECandidate(0); - // continue; - // } + if (selectionPID(trackPos) == 0 || selectionPID(trackNeg) == 0) { + hfSelJpsiToEECandidate(0); + continue; + } hfSelJpsiToEECandidate(1); } From f54533c3db3f5233f991818b45ef19bb740f2bd1 Mon Sep 17 00:00:00 2001 From: rspijkers Date: Tue, 9 Mar 2021 11:02:11 +0100 Subject: [PATCH 19/23] move runDataProcessing.h below customize --- Analysis/Tasks/PWGHF/taskBPlus.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Analysis/Tasks/PWGHF/taskBPlus.cxx b/Analysis/Tasks/PWGHF/taskBPlus.cxx index 6a5c4108a45df..1bcc99ec3ead6 100644 --- a/Analysis/Tasks/PWGHF/taskBPlus.cxx +++ b/Analysis/Tasks/PWGHF/taskBPlus.cxx @@ -15,7 +15,6 @@ /// \author Vít Kučera , CERN /// \author Nima Zardoshti , CERN -#include "Framework/runDataProcessing.h" #include "Framework/AnalysisTask.h" #include "Framework/HistogramRegistry.h" #include "AnalysisDataModel/HFSecondaryVertex.h" @@ -32,6 +31,8 @@ void customize(std::vector& workflowOptions) workflowOptions.push_back(optionDoMC); } +#include "Framework/runDataProcessing.h" + /// B+ analysis task struct TaskBplus { HistogramRegistry registry{ From 140b8b226484d606bcdef53b8e882a745225985a Mon Sep 17 00:00:00 2001 From: rspijkers Date: Wed, 10 Mar 2021 11:45:40 +0100 Subject: [PATCH 20/23] Add collision ID check for testing purposes To be removed before merging --- Analysis/Tasks/PWGHF/taskX.cxx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Analysis/Tasks/PWGHF/taskX.cxx b/Analysis/Tasks/PWGHF/taskX.cxx index 3341099bcb46e..5de9ec090e701 100644 --- a/Analysis/Tasks/PWGHF/taskX.cxx +++ b/Analysis/Tasks/PWGHF/taskX.cxx @@ -65,6 +65,11 @@ struct TaskX { if (trackPos.globalIndex() == index0jpsi) { continue; } + // temporary collision Id check, to see if code works + if (candidate.collisionId() != trackPos.collisionId()) { + Printf("%d, %d", candidate.collisionId(), trackPos.collisionId()); + continue; + } for (auto& trackNeg : tracks) { if (trackNeg.signed1Pt() > 0) { continue; @@ -72,6 +77,11 @@ struct TaskX { if (trackNeg.globalIndex() == index1jpsi) { continue; } + // temporary collision Id check, to see if code works + if (candidate.collisionId() != trackNeg.collisionId()) { + Printf("%d, %d", candidate.collisionId(), trackNeg.collisionId()); + continue; + } registry.fill(HIST("hPtCand"), candidate.pt() + trackPos.pt() + trackNeg.pt()); } // pi- loop } // pi+ loop From bfc75d57546f15cdf59342fa628aa654ec115383 Mon Sep 17 00:00:00 2001 From: rspijkers Date: Wed, 10 Mar 2021 14:37:18 +0100 Subject: [PATCH 21/23] remove the collision ID check, add Y cut - Y cut instead of eta cut on the Jpsi - also corrected x-axis label of Jpsi mass histo --- Analysis/Tasks/PWGHF/taskX.cxx | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/Analysis/Tasks/PWGHF/taskX.cxx b/Analysis/Tasks/PWGHF/taskX.cxx index 5de9ec090e701..ba7ebc6e1cfa0 100644 --- a/Analysis/Tasks/PWGHF/taskX.cxx +++ b/Analysis/Tasks/PWGHF/taskX.cxx @@ -36,11 +36,11 @@ void customize(std::vector& workflowOptions) struct TaskX { HistogramRegistry registry{ "registry", - {{"hMassJpsi", "2-prong candidates;inv. mass (#pi K) (GeV/#it{c}^{2});entries", {HistType::kTH1F, {{500, 0., 5.}}}}, + {{"hMassJpsi", "2-prong candidates;inv. mass (e+ e-) (GeV/#it{c}^{2});entries", {HistType::kTH1F, {{500, 0., 5.}}}}, {"hPtCand", "X candidates;candidate #it{p}_{T} (GeV/#it{c});entries", {HistType::kTH1F, {{100, 0., 10.}}}}}}; Configurable selectionFlagJpsi{"selectionFlagJpsi", 1, "Selection Flag for Jpsi"}; - Configurable cutEtaCandMax{"cutEtaCandMax", -1., "max. cand. pseudorapidity"}; + Configurable cutYCandMax{"cutYCandMax", -1., "max. cand. rapidity"}; Filter filterSelectCandidates = (aod::hf_selcandidate_jpsi::isSelJpsiToEE >= selectionFlagJpsi); @@ -51,7 +51,7 @@ struct TaskX { if (!(candidate.hfflag() & 1 << JpsiToEE)) { continue; } - if (cutEtaCandMax >= 0. && std::abs(candidate.eta()) > cutEtaCandMax) { + if (cutYCandMax >= 0. && std::abs(YJpsi(candidate)) > cutYCandMax) { continue; } registry.fill(HIST("hMassJpsi"), InvMassJpsiToEE(candidate)); @@ -65,11 +65,6 @@ struct TaskX { if (trackPos.globalIndex() == index0jpsi) { continue; } - // temporary collision Id check, to see if code works - if (candidate.collisionId() != trackPos.collisionId()) { - Printf("%d, %d", candidate.collisionId(), trackPos.collisionId()); - continue; - } for (auto& trackNeg : tracks) { if (trackNeg.signed1Pt() > 0) { continue; @@ -77,11 +72,6 @@ struct TaskX { if (trackNeg.globalIndex() == index1jpsi) { continue; } - // temporary collision Id check, to see if code works - if (candidate.collisionId() != trackNeg.collisionId()) { - Printf("%d, %d", candidate.collisionId(), trackNeg.collisionId()); - continue; - } registry.fill(HIST("hPtCand"), candidate.pt() + trackPos.pt() + trackNeg.pt()); } // pi- loop } // pi+ loop From 769dda94e6fe5eb69f38158ee56ac3a40cafed34 Mon Sep 17 00:00:00 2001 From: rspijkers Date: Mon, 15 Mar 2021 21:54:28 +0100 Subject: [PATCH 22/23] Pion track loops more efficient - also changed sign and index checks --- Analysis/Tasks/PWGHF/taskX.cxx | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/Analysis/Tasks/PWGHF/taskX.cxx b/Analysis/Tasks/PWGHF/taskX.cxx index ba7ebc6e1cfa0..00fc8284f06f2 100644 --- a/Analysis/Tasks/PWGHF/taskX.cxx +++ b/Analysis/Tasks/PWGHF/taskX.cxx @@ -58,23 +58,31 @@ struct TaskX { int index0jpsi = candidate.index0Id(); int index1jpsi = candidate.index1Id(); - for (auto& trackPos : tracks) { - if (trackPos.signed1Pt() < 0) { - continue; - } - if (trackPos.globalIndex() == index0jpsi) { + for (auto& track1 : tracks) { + int signTrack1 = track1.sign(); + int indexTrack1 = track1.globalIndex(); + if (signTrack1 > 0) { + if (indexTrack1 == index0jpsi) { + continue; + } + } else if (indexTrack1 == index1jpsi) { continue; } - for (auto& trackNeg : tracks) { - if (trackNeg.signed1Pt() > 0) { + for (auto track2 = track1 + 1; track2 != tracks.end(); ++track2) { + if (signTrack1 == track2.sign()) { continue; } - if (trackNeg.globalIndex() == index1jpsi) { + int indexTrack2 = track2.globalIndex(); + if (signTrack1 > 0) { + if (indexTrack2 == index1jpsi) { + continue; + } + } else if (indexTrack2 == index0jpsi) { continue; } - registry.fill(HIST("hPtCand"), candidate.pt() + trackPos.pt() + trackNeg.pt()); - } // pi- loop - } // pi+ loop + registry.fill(HIST("hPtCand"), candidate.pt() + track1.pt() + track2.pt()); + } // track2 loop (pion) + } // track1 loop (pion) } // Jpsi loop } // process }; // struct From 8e88ba0d591881e9d04ba5bff3f120d41f2f50d2 Mon Sep 17 00:00:00 2001 From: Gian Michele Innocenti Date: Wed, 17 Mar 2021 18:46:38 +0100 Subject: [PATCH 23/23] Update HFJpsiToEECandidateSelector.cxx --- Analysis/Tasks/PWGHF/HFJpsiToEECandidateSelector.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Analysis/Tasks/PWGHF/HFJpsiToEECandidateSelector.cxx b/Analysis/Tasks/PWGHF/HFJpsiToEECandidateSelector.cxx index 8492c099163a2..27b4d410aca08 100644 --- a/Analysis/Tasks/PWGHF/HFJpsiToEECandidateSelector.cxx +++ b/Analysis/Tasks/PWGHF/HFJpsiToEECandidateSelector.cxx @@ -138,7 +138,7 @@ struct HFJpsiToEECandidateSelector { template bool selectionPIDTPC(const T& track, int nSigmaCut) { - if (nSigmaCut > 10) { + if (nSigmaCut > 999.) { return true; } return track.tpcNSigmaEl() < nSigmaCut;