From 29362f065079982fa8b42dd7aac09ac31d207f6b Mon Sep 17 00:00:00 2001 From: jesgum Date: Tue, 2 Jun 2026 15:37:22 +0200 Subject: [PATCH 1/4] Add outer and rct info and converter to multBC table for centrality studies --- Common/DataModel/Multiplicity.h | 45 ++++++++++- .../TableProducer/Converters/CMakeLists.txt | 5 ++ .../Converters/multBCsConverter.cxx | 74 +++++++++++++++++++ .../TableProducer/multiplicityExtraTable.cxx | 53 ++++++++++--- Common/Tasks/centralityStudy.cxx | 34 +++++---- .../heavyionMultiplicity.cxx | 2 +- 6 files changed, 184 insertions(+), 29 deletions(-) create mode 100644 Common/TableProducer/Converters/multBCsConverter.cxx diff --git a/Common/DataModel/Multiplicity.h b/Common/DataModel/Multiplicity.h index 0d04cfc2a14..d103ac2032c 100644 --- a/Common/DataModel/Multiplicity.h +++ b/Common/DataModel/Multiplicity.h @@ -100,8 +100,10 @@ DECLARE_SOA_COLUMN(TimeToNext, timeToNext, float); //! DECLARE_SOA_COLUMN(TimeToNeNext, timeToNeNext, float); //! // Extra information from FIT detectors -DECLARE_SOA_COLUMN(MultFV0AOuter, multFV0AOuter, float); //! FV0 without innermost ring DECLARE_SOA_COLUMN(FT0TriggerMask, ft0TriggerMask, uint8_t); //! +DECLARE_SOA_COLUMN(MultFV0AOuter, multFV0AOuter, float); //! FV0 without innermost ring +DECLARE_SOA_COLUMN(MultFT0AOuter, multFT0AOuter, float); //! FT0A without innermost ring + } // namespace mult DECLARE_SOA_TABLE(FV0Mults, "AOD", "FV0MULT", //! Multiplicity with the FV0 detector @@ -260,7 +262,7 @@ DECLARE_SOA_COLUMN(MultCollidingBC, multCollidingBC, bool); //! CTP tri DECLARE_SOA_COLUMN(MultFT0PosZ, multFT0PosZ, float); //! Position along Z computed with the FT0 information within the BC DECLARE_SOA_COLUMN(MultFT0PosZValid, multFT0PosZValid, bool); //! Validity of the position along Z computed with the FT0 information } // namespace mult -DECLARE_SOA_TABLE(MultBCs, "AOD", "MULTBC", //! +DECLARE_SOA_TABLE(MultBCs_000, "AOD", "MULTBC", //! mult::MultFT0A, mult::MultFT0C, mult::MultFT0PosZ, @@ -283,11 +285,46 @@ DECLARE_SOA_TABLE(MultBCs, "AOD", "MULTBC", //! mult::MultCollidingBC, timestamp::Timestamp, bc::Flags); -using MultBC = MultBCs::iterator; -DECLARE_SOA_TABLE(MultBcSel, "AOD", "MULTBCSEL", //! BC selection bits joinable with multBCs +DECLARE_SOA_TABLE_VERSIONED(MultBCs_001, "AOD", "MULTBC", 1, //! + mult::MultFT0A, + mult::MultFT0C, + mult::MultFV0A, + mult::MultFDDA, + mult::MultFDDC, + mult::MultZNA, + mult::MultZNC, + mult::MultZEM1, + mult::MultZEM2, + mult::MultZPA, + mult::MultZPC, + mult::MultFV0AOuter, + mult::MultFT0AOuter); + +DECLARE_SOA_TABLE(MultBcSel_000, "AOD", "MULTBCSEL", //! BC selection bits joinable with multBCs evsel::Selection); +DECLARE_SOA_TABLE_VERSIONED(MultBcSel_001, "AOD", "MULTBCSEL", 1, //! BC selection bits joinable with multBCs + evsel::Selection, + evsel::Rct, + bc::Flags, + timestamp::Timestamp, + mult::MultFT0PosZ, + mult::MultFT0PosZValid, + mult::MultV0triggerBits, + mult::MultT0triggerBits, + mult::MultFDDtriggerBits, + mult::MultTriggerMask, + mult::MultCollidingBC, + mult::MultTVX, + mult::MultFV0OrA + ); + +using MultBCs = MultBCs_001; +using MultBcSel = MultBcSel_001; +using MultBC = MultBCs::iterator; + + // crosslinks namespace mult { diff --git a/Common/TableProducer/Converters/CMakeLists.txt b/Common/TableProducer/Converters/CMakeLists.txt index 34ddc8efb3e..89b381277bc 100644 --- a/Common/TableProducer/Converters/CMakeLists.txt +++ b/Common/TableProducer/Converters/CMakeLists.txt @@ -113,3 +113,8 @@ o2physics_add_dpl_workflow(run2-tiny-to-full-pid SOURCES run2TinyToFullPID.cxx PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore COMPONENT_NAME Analysis) + +o2physics_add_dpl_workflow(mult-bcs-converter + SOURCES multBCsConverter.cxx + PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore + COMPONENT_NAME Analysis) \ No newline at end of file diff --git a/Common/TableProducer/Converters/multBCsConverter.cxx b/Common/TableProducer/Converters/multBCsConverter.cxx new file mode 100644 index 00000000000..ae91a6a746b --- /dev/null +++ b/Common/TableProducer/Converters/multBCsConverter.cxx @@ -0,0 +1,74 @@ +// Copyright 2019-2020 CERN and copyright holders of ALICE O2. +// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders. +// All rights not expressly granted are reserved. +// +// This software is distributed under the terms of the GNU General Public +// License v3 (GPL Version 3), copied verbatim in the file "COPYING". +// +// 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 multBCsConverter.cxx +/// \brief Converts MultBCs and MultBcSel table from version 000 to 001 +/// \author Jesper Karlsson Gumrpecht + +#include "Common/DataModel/Multiplicity.h" + +#include +#include +#include +#include + +using namespace o2; +using namespace o2::framework; + +struct MultBCsConverter { + Produces multBC; + Produces multBcSel; + + static constexpr float DummyValue = -1.f; + static constexpr int DummyRct = 0; + void process(soa::Join const& multBCs) + { + for (const auto& multbc : multBCs) { + multBC( + multbc.multFT0A(), + multbc.multFT0C(), + multbc.multFV0A(), + multbc.multFDDA(), + multbc.multFDDC(), + multbc.multZNA(), + multbc.multZNC(), + multbc.multZEM1(), + multbc.multZEM2(), + multbc.multZPA(), + multbc.multZPC(), + DummyValue, // dummy amplitude for FV0A Outer + DummyValue // dummy amplitude for FT0A Outer + ); + + multBcSel( + multbc.selection_raw(), + DummyRct, // all flags to false + multbc.flags(), + multbc.timestamp(), + multbc.multFT0PosZ(), + multbc.multFT0PosZValid(), + multbc.multV0triggerBits(), + multbc.multT0triggerBits(), + multbc.multFDDtriggerBits(), + multbc.multTriggerMask(), + multbc.multCollidingBC(), + multbc.multTVX(), + multbc.multFV0OrA() + ); + } + } +}; + +WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) +{ + return WorkflowSpec{ + adaptAnalysisTask(cfgc)}; +} diff --git a/Common/TableProducer/multiplicityExtraTable.cxx b/Common/TableProducer/multiplicityExtraTable.cxx index 7319a082c63..ed75317ba63 100644 --- a/Common/TableProducer/multiplicityExtraTable.cxx +++ b/Common/TableProducer/multiplicityExtraTable.cxx @@ -155,6 +155,8 @@ struct MultiplicityExtraTable { float multFV0A = 0.f; float multFDDA = 0.f; float multFDDC = 0.f; + float multFT0AOuter = 0.f; + float multFV0AOuter = 0.f; // ZDC amplitudes float multZEM1 = -1.f; @@ -195,8 +197,11 @@ struct MultiplicityExtraTable { multFT0TriggerBits = static_cast(triggers.to_ulong()); // calculate T0 charge - for (auto amplitude : ft0.amplitudeA()) { - multFT0A += amplitude; + for (size_t ii = 0; ii < ft0.amplitudeA().size(); ++ii) { + multFT0A += ft0.amplitudeA()[ii]; + if (ft0.channelA()[ii] > 31) { + multFT0AOuter += ft0.amplitudeA()[ii]; + } } for (auto amplitude : ft0.amplitudeC()) { multFT0C += amplitude; @@ -212,8 +217,13 @@ struct MultiplicityExtraTable { std::bitset<8> fV0Triggers = fv0.triggerMask(); multFV0TriggerBits = static_cast(fV0Triggers.to_ulong()); - for (auto amplitude : fv0.amplitude()) { + for (size_t ii = 0; ii < fv0.amplitude().size(); ii++) { + auto amplitude = fv0.amplitude()[ii]; + auto channel = fv0.channel()[ii]; multFV0A += amplitude; + if (channel > 7) { + multFV0AOuter += amplitude; + } } isFV0OrA = fV0Triggers[o2::fit::Triggers::bitA]; } else { @@ -254,15 +264,36 @@ struct MultiplicityExtraTable { bc2mult(bc2multArray[bc.globalIndex()]); multBC( - tru(multFT0A), tru(multFT0C), - tru(posZFT0), posZFT0valid, tru(multFV0A), - tru(multFDDA), tru(multFDDC), tru(multZNA), tru(multZNC), tru(multZEM1), - tru(multZEM2), tru(multZPA), tru(multZPC), Tvx, isFV0OrA, - multFV0TriggerBits, multFT0TriggerBits, multFDDTriggerBits, multBCTriggerMask, collidingBC, + tru(multFT0A), + tru(multFT0C), + tru(multFV0A), + tru(multFDDA), + tru(multFDDC), + tru(multZNA), + tru(multZNC), + tru(multZEM1), + tru(multZEM2), + tru(multZPA), + tru(multZPC), + tru(multFV0AOuter), + tru(multFT0AOuter) + ); + + multBcSel( + bc.selection_raw(), + bc.rct_raw(), + bc.flags(), bc.timestamp(), - bc.flags()); - - multBcSel(bc.selection_raw()); + tru(posZFT0), + posZFT0valid, + multFV0TriggerBits, + multFT0TriggerBits, + multFDDTriggerBits, + multBCTriggerMask, + collidingBC, + Tvx, + isFV0OrA + ); } } diff --git a/Common/Tasks/centralityStudy.cxx b/Common/Tasks/centralityStudy.cxx index 298a7e57eaf..2677397b7db 100644 --- a/Common/Tasks/centralityStudy.cxx +++ b/Common/Tasks/centralityStudy.cxx @@ -331,7 +331,9 @@ struct centralityStudy { histos.add("hFT0C_BCs", "hFT0C_BCs", kTH1D, {axisMultUltraFineFT0C}); histos.add("hFT0A_BCs", "hFT0A_BCs", kTH1D, {axisMultUltraFineFT0A}); + histos.add("hFT0AOuter_BCs", "hFT0AOuter_BCs", kTH1D, {axisMultUltraFineFT0A}); histos.add("hFT0M_BCs", "hFT0M_BCs", kTH1D, {axisMultUltraFineFT0M}); + histos.add("hFT0MOuterA_BCs", "hFT0MOuterA_BCs", kTH1D, {axisMultUltraFineFT0M}); histos.add("hFV0A_BCs", "hFV0A_BCs", kTH1D, {axisMultUltraFineFV0A}); histos.add("hInteractionRate_BCs", "hInteractionRate_BCs", kTH1D, {axisInteractionRate}); @@ -711,14 +713,18 @@ struct centralityStudy { getHist(TH1, histPath + "hCollisionSelection")->Fill(15); } if (evsel.rejectIsFlangeEvent) { - if constexpr (requires { collision.ft0TriggerMask(); }) { - constexpr int IsFlangeEventId = 7; - std::bitset<8> ft0TriggerMask = collision.ft0TriggerMask(); - if (ft0TriggerMask[IsFlangeEventId]) { - return; + if constexpr (requires { collision.has_multBC(); }) { + if (collision.has_multBC()) { + auto multbc = collision.template multBC_as>(); + constexpr int IsFlangeEventId = 7; + std::bitset<8> ft0TriggerMask = multbc.multT0triggerBits(); + if (ft0TriggerMask[IsFlangeEventId]) { + return; + } } } } + histos.fill(HIST("hCollisionSelection"), 16 /* reject flange events */); if (studies.doRunByRunHistograms) { getHist(TH1, histPath + "hCollisionSelection")->Fill(16); @@ -865,7 +871,7 @@ struct centralityStudy { if constexpr (requires { collision.has_multBC(); }) { if (collision.has_multBC()) { - auto multbc = collision.template multBC_as(); + auto multbc = collision.template multBC_as>(); uint64_t bcTimestamp = multbc.timestamp(); const float interactionRate = mRateFetcher.fetch(ccdb.service, bcTimestamp, mRunNumber, irSource.value, irCrashOnNull) / 1000.; // kHz histos.fill(HIST("hInteractionRate"), interactionRate); @@ -877,7 +883,7 @@ struct centralityStudy { getHist(TH2, histPath + "hFT0CVsTime")->Fill(hoursAfterStartOfRun, collision.multFT0C()); getHist(TH2, histPath + "hFT0MVsTime")->Fill(hoursAfterStartOfRun, collision.multFT0M()); getHist(TH2, histPath + "hFV0AVsTime")->Fill(hoursAfterStartOfRun, collision.multFV0A()); - getHist(TH2, histPath + "hFV0AOuterVsTime")->Fill(hoursAfterStartOfRun, collision.multFV0AOuter()); + getHist(TH2, histPath + "hFV0AOuterVsTime")->Fill(hoursAfterStartOfRun, multbc.multFV0AOuter()); getHist(TH2, histPath + "hMFTTracksVsTime")->Fill(hoursAfterStartOfRun, collision.mftNtracks()); getHist(TH2, histPath + "hNGlobalVsTime")->Fill(hoursAfterStartOfRun, collision.multNTracksGlobal()); getHist(TH2, histPath + "hNTPVContributorsVsTime")->Fill(hoursAfterStartOfRun, collision.multPVTotalContributors()); @@ -890,22 +896,22 @@ struct centralityStudy { } } - void processCollisions(soa::Join::iterator const& collision, aod::MultBCs const&) + void processCollisions(soa::Join::iterator const& collision, soa::Join const&) { genericProcessCollision(collision); } - void processCollisionsWithResolutionStudy(soa::Join::iterator const& collision, soa::Join const&) + void processCollisionsWithResolutionStudy(soa::Join::iterator const& collision, soa::Join const&) { genericProcessCollision(collision); } - void processCollisionsWithCentrality(soa::Join::iterator const& collision, aod::MultBCs const&) + void processCollisionsWithCentrality(soa::Join::iterator const& collision, soa::Join const&) { genericProcessCollision(collision); } - void processCollisionsWithCentralityWithNeighbours(soa::Join::iterator const& collision) + void processCollisionsWithCentralityWithNeighbours(soa::Join::iterator const& collision) { genericProcessCollision(collision); } @@ -998,7 +1004,7 @@ struct centralityStudy { return true; } - void processBCs(soa::Join const& multbcs, soa::Join const&) + void processBCs(soa::Join const& multbcs, soa::Join const&) { // process BCs, calculate FT0C distribution for (const auto& multbc : multbcs) { @@ -1009,7 +1015,9 @@ struct centralityStudy { // if we got here, we also finally fill the FT0C histogram, please histos.fill(HIST("hFT0C_BCs"), multbc.multFT0C() * scale.factorFT0C); histos.fill(HIST("hFT0A_BCs"), multbc.multFT0A() * scale.factorFT0A); + histos.fill(HIST("hFT0AOuter_BCs"), multbc.multFT0AOuter() * scale.factorFT0A); histos.fill(HIST("hFT0M_BCs"), (multbc.multFT0A() + multbc.multFT0C()) * scale.factorFT0M); + histos.fill(HIST("hFT0MOuterA_BCs"), (multbc.multFT0AOuter() + multbc.multFT0C()) * scale.factorFT0M); histos.fill(HIST("hFV0A_BCs"), multbc.multFV0A() * scale.factorFV0A); histos.fill(HIST("hFV0AT0C_BCs"), (multbc.multFV0A() + multbc.multFT0C()) * scale.factorFV0AT0C); @@ -1034,7 +1042,7 @@ struct centralityStudy { } if (multbc.has_ft0Mult()) { - auto multco = multbc.ft0Mult_as>(); + auto multco = multbc.ft0Mult_as>(); if (multbc.multFT0PosZValid()) { histos.fill(HIST("hVertexZ_BCvsCO"), multco.multPVz(), multbc.multFT0PosZ()); } diff --git a/PWGLF/Tasks/GlobalEventProperties/heavyionMultiplicity.cxx b/PWGLF/Tasks/GlobalEventProperties/heavyionMultiplicity.cxx index c19f5858129..ec8c9ae7471 100644 --- a/PWGLF/Tasks/GlobalEventProperties/heavyionMultiplicity.cxx +++ b/PWGLF/Tasks/GlobalEventProperties/heavyionMultiplicity.cxx @@ -1008,7 +1008,7 @@ struct HeavyionMultiplicity { } // collision loop } - void processBcData(soa::Join::iterator const& multbc) + void processBcData(soa::Join::iterator const& multbc) { histos.fill(HIST("BcHist"), 1); // all BCs if (selectCollidingBCs && !multbc.multCollidingBC()) From aa71504df1b4a1749faf3a15deef60fcce2d7dac Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Wed, 3 Jun 2026 08:39:10 +0000 Subject: [PATCH 2/4] Please consider the following formatting changes --- Common/DataModel/Multiplicity.h | 55 +++++++++---------- .../TableProducer/Converters/CMakeLists.txt | 2 +- .../Converters/multBCsConverter.cxx | 3 +- .../TableProducer/multiplicityExtraTable.cxx | 6 +- 4 files changed, 30 insertions(+), 36 deletions(-) diff --git a/Common/DataModel/Multiplicity.h b/Common/DataModel/Multiplicity.h index d103ac2032c..c2bdd2c6a75 100644 --- a/Common/DataModel/Multiplicity.h +++ b/Common/DataModel/Multiplicity.h @@ -104,7 +104,6 @@ DECLARE_SOA_COLUMN(FT0TriggerMask, ft0TriggerMask, uint8_t); //! DECLARE_SOA_COLUMN(MultFV0AOuter, multFV0AOuter, float); //! FV0 without innermost ring DECLARE_SOA_COLUMN(MultFT0AOuter, multFT0AOuter, float); //! FT0A without innermost ring - } // namespace mult DECLARE_SOA_TABLE(FV0Mults, "AOD", "FV0MULT", //! Multiplicity with the FV0 detector mult::MultFV0A, mult::MultFV0C, @@ -287,44 +286,42 @@ DECLARE_SOA_TABLE(MultBCs_000, "AOD", "MULTBC", //! bc::Flags); DECLARE_SOA_TABLE_VERSIONED(MultBCs_001, "AOD", "MULTBC", 1, //! - mult::MultFT0A, - mult::MultFT0C, - mult::MultFV0A, - mult::MultFDDA, - mult::MultFDDC, - mult::MultZNA, - mult::MultZNC, - mult::MultZEM1, - mult::MultZEM2, - mult::MultZPA, - mult::MultZPC, - mult::MultFV0AOuter, - mult::MultFT0AOuter); + mult::MultFT0A, + mult::MultFT0C, + mult::MultFV0A, + mult::MultFDDA, + mult::MultFDDC, + mult::MultZNA, + mult::MultZNC, + mult::MultZEM1, + mult::MultZEM2, + mult::MultZPA, + mult::MultZPC, + mult::MultFV0AOuter, + mult::MultFT0AOuter); DECLARE_SOA_TABLE(MultBcSel_000, "AOD", "MULTBCSEL", //! BC selection bits joinable with multBCs evsel::Selection); DECLARE_SOA_TABLE_VERSIONED(MultBcSel_001, "AOD", "MULTBCSEL", 1, //! BC selection bits joinable with multBCs - evsel::Selection, - evsel::Rct, - bc::Flags, - timestamp::Timestamp, - mult::MultFT0PosZ, - mult::MultFT0PosZValid, - mult::MultV0triggerBits, - mult::MultT0triggerBits, - mult::MultFDDtriggerBits, - mult::MultTriggerMask, - mult::MultCollidingBC, - mult::MultTVX, - mult::MultFV0OrA - ); + evsel::Selection, + evsel::Rct, + bc::Flags, + timestamp::Timestamp, + mult::MultFT0PosZ, + mult::MultFT0PosZValid, + mult::MultV0triggerBits, + mult::MultT0triggerBits, + mult::MultFDDtriggerBits, + mult::MultTriggerMask, + mult::MultCollidingBC, + mult::MultTVX, + mult::MultFV0OrA); using MultBCs = MultBCs_001; using MultBcSel = MultBcSel_001; using MultBC = MultBCs::iterator; - // crosslinks namespace mult { diff --git a/Common/TableProducer/Converters/CMakeLists.txt b/Common/TableProducer/Converters/CMakeLists.txt index 89b381277bc..a8b14efaca3 100644 --- a/Common/TableProducer/Converters/CMakeLists.txt +++ b/Common/TableProducer/Converters/CMakeLists.txt @@ -117,4 +117,4 @@ o2physics_add_dpl_workflow(run2-tiny-to-full-pid o2physics_add_dpl_workflow(mult-bcs-converter SOURCES multBCsConverter.cxx PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore - COMPONENT_NAME Analysis) \ No newline at end of file + COMPONENT_NAME Analysis) diff --git a/Common/TableProducer/Converters/multBCsConverter.cxx b/Common/TableProducer/Converters/multBCsConverter.cxx index ae91a6a746b..991bff71c13 100644 --- a/Common/TableProducer/Converters/multBCsConverter.cxx +++ b/Common/TableProducer/Converters/multBCsConverter.cxx @@ -61,8 +61,7 @@ struct MultBCsConverter { multbc.multTriggerMask(), multbc.multCollidingBC(), multbc.multTVX(), - multbc.multFV0OrA() - ); + multbc.multFV0OrA()); } } }; diff --git a/Common/TableProducer/multiplicityExtraTable.cxx b/Common/TableProducer/multiplicityExtraTable.cxx index ed75317ba63..488ec9a1917 100644 --- a/Common/TableProducer/multiplicityExtraTable.cxx +++ b/Common/TableProducer/multiplicityExtraTable.cxx @@ -276,8 +276,7 @@ struct MultiplicityExtraTable { tru(multZPA), tru(multZPC), tru(multFV0AOuter), - tru(multFT0AOuter) - ); + tru(multFT0AOuter)); multBcSel( bc.selection_raw(), @@ -292,8 +291,7 @@ struct MultiplicityExtraTable { multBCTriggerMask, collidingBC, Tvx, - isFV0OrA - ); + isFV0OrA); } } From ce6f63bcda9f07409926e95cb5d205d08b400cf8 Mon Sep 17 00:00:00 2001 From: jesgum Date: Wed, 3 Jun 2026 10:53:08 +0200 Subject: [PATCH 3/4] fix megalinter --- Common/TableProducer/Converters/multBCsConverter.cxx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Common/TableProducer/Converters/multBCsConverter.cxx b/Common/TableProducer/Converters/multBCsConverter.cxx index 991bff71c13..fee224b842a 100644 --- a/Common/TableProducer/Converters/multBCsConverter.cxx +++ b/Common/TableProducer/Converters/multBCsConverter.cxx @@ -44,9 +44,8 @@ struct MultBCsConverter { multbc.multZEM2(), multbc.multZPA(), multbc.multZPC(), - DummyValue, // dummy amplitude for FV0A Outer - DummyValue // dummy amplitude for FT0A Outer - ); + DummyValue, // dummy amplitude for FV0A Outer + DummyValue); // dummy amplitude for FT0A Outer multBcSel( multbc.selection_raw(), From 8b210d56735fe866b907afd55167fecbc11a55b6 Mon Sep 17 00:00:00 2001 From: jesgum Date: Wed, 3 Jun 2026 16:47:25 +0200 Subject: [PATCH 4/4] reserve table size --- Common/TableProducer/Converters/multBCsConverter.cxx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Common/TableProducer/Converters/multBCsConverter.cxx b/Common/TableProducer/Converters/multBCsConverter.cxx index fee224b842a..c660b759832 100644 --- a/Common/TableProducer/Converters/multBCsConverter.cxx +++ b/Common/TableProducer/Converters/multBCsConverter.cxx @@ -31,6 +31,8 @@ struct MultBCsConverter { static constexpr int DummyRct = 0; void process(soa::Join const& multBCs) { + multBC.reserve(multBCs.size()); + multBcSel.reserve(multBCs.size()); for (const auto& multbc : multBCs) { multBC( multbc.multFT0A(),