From f17c294c2b5fc46577a72c53a2201ea3b5fcf9e2 Mon Sep 17 00:00:00 2001 From: Hao-Ren Jheng Date: Fri, 5 Jun 2026 15:51:52 -0400 Subject: [PATCH 1/7] kick if off --- .../framework/fun4allraw/Fun4AllStreamingInputManager.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/offline/framework/fun4allraw/Fun4AllStreamingInputManager.h b/offline/framework/fun4allraw/Fun4AllStreamingInputManager.h index e51a59c549..ddc9566cd8 100644 --- a/offline/framework/fun4allraw/Fun4AllStreamingInputManager.h +++ b/offline/framework/fun4allraw/Fun4AllStreamingInputManager.h @@ -69,6 +69,9 @@ class Fun4AllStreamingInputManager : public Fun4AllInputManager void runMvtxTriggered(bool b = true) { m_mvtx_is_triggered = b; } + // configuration for INTT hit carry-over issue mitigation (hit duplication) + void EnableInttHitDuplication(){ m_InttHitDuplication = true; } + private: struct MvtxRawHitInfo { @@ -159,6 +162,10 @@ class Fun4AllStreamingInputManager : public Fun4AllInputManager TH1 *h_taggedAllFees_intt[8]{nullptr}; TH1 *h_gl1taggedfee_intt[8][14]{{nullptr}}; TH2 *h_bcodiff_intt[8]{nullptr}; -}; + // for INTT hit carry-over issue mitigation (hit duplication) + bool m_InttHitDuplication{false}; // default to false; Should be set to true when running streaming data + const unsigned int m_InttHitCarryOverShift{120}; // 120 BCOs as the default shift. Fixed value + const int m_InttHitCarryOverShiftMaxMultiple{4}; // the max multiple of the shift. For a max multiple of M, duplicate hits from N + [1..M] * shift BCOs to N +} #endif /* FUN4ALL_FUN4ALLSTREAMINGINPUTMANAGER_H */ From b52416245750e3e5e4ebcc08207b8259c90aabf5 Mon Sep 17 00:00:00 2001 From: Hao-Ren Jheng Date: Sun, 7 Jun 2026 16:52:57 -0400 Subject: [PATCH 2/7] INTT hit duplication kickoff --- .../Fun4AllStreamingInputManager.cc | 58 +++++++++++++++++++ .../fun4allraw/Fun4AllStreamingInputManager.h | 8 ++- 2 files changed, 63 insertions(+), 3 deletions(-) diff --git a/offline/framework/fun4allraw/Fun4AllStreamingInputManager.cc b/offline/framework/fun4allraw/Fun4AllStreamingInputManager.cc index 0bea81197b..a4b8b5c64e 100644 --- a/offline/framework/fun4allraw/Fun4AllStreamingInputManager.cc +++ b/offline/framework/fun4allraw/Fun4AllStreamingInputManager.cc @@ -710,6 +710,38 @@ int Fun4AllStreamingInputManager::FillIntt() } } + // hit duplication:add hits in N + [1..M] * shift BCOs + if (m_InttHitDuplication) + { + if (m_InttHitCarryOverShiftMaxMultiple < 1) + { + std::cout << __FILE__ << ":" << __PRETTY_FUNCTION__ << ":" << __LINE__ << ": m_InttHitDuplication is set to true but m_InttHitCarryOverShiftMaxMultiple=" << m_InttHitCarryOverShiftMaxMultiple << "is not positive. Default to 1" << std::endl; + m_InttHitCarryOverShiftMaxMultiple = 1; + } + + const uint64_t max_shift = m_InttHitCarryOverShift * m_InttHitCarryOverShiftMaxMultiple; + const uint64_t bco_duplicate_high = select_crossings + max_shift; + + // now fill the pool until the highest bco in the map is higher than the duplication threshold, which is the select_crossings + the maximum shift we want to do + while (m_InttRawHitMap.rbegin()->first < bco_duplicate_high) // if the highest bco is still smaller than the duplication threshold, keep duplicating + { + const uint64_t previous_high_bco = m_InttRawHitMap.rbegin()->first; + iret = FillInttPool(); + if (iret) + { + break; // if FillInttPool returns non zero, there is no more data to read and we can stop trying to duplicate + } + // Note: need this gaurd. FillInttPool() only returns non-0 if m_InttRawHitMap is empty + // FillInttPool() calls SingleInttPoolInput::FillPool() returns regardless of whether it actually fill new data or not + // So if FillInttPool() is called and there is no new data to pool, it will return 0 but m_InttRawHitMap will not have changed (non-empty) + // If we don't check for this, it would cause an infinite loop + if (m_InttRawHitMap.rbegin()->first == previous_high_bco) + { + break; + } + } + } + unsigned int refbcobitshift = m_RefBCO & 0x3FU; bool allpackets = true; int allpacketsallfees = 0; @@ -794,6 +826,32 @@ int Fun4AllStreamingInputManager::FillIntt() } inttcont->AddHit(intthititer); } + + // Insert duplication of hits in N + [1..M] * shift BCOs if m_InttHitDuplication is set to true + if (m_InttHitDuplication) + { + for (int shift_multiple = 1; shift_multiple <= m_InttHitCarryOverShiftMaxMultiple; ++shift_multiple) + { + const uint64_t shift = m_InttHitCarryOverShift * shift_multiple; + const uint64_t source_bco = bco + shift; + auto source_iter = m_InttRawHitMap.find(source_bco); + if (source_iter == m_InttRawHitMap.end()) + { + continue; + } + + for (auto *source_hit : source_iter->second.InttRawHitVector) + { + if (source_hit->get_bco() < shift) + { + continue; + } + + auto *copied_hit = inttcont->AddHit(source_hit); + copied_hit->set_bco(source_hit->get_bco() - shift); + } + } + } } return 0; } diff --git a/offline/framework/fun4allraw/Fun4AllStreamingInputManager.h b/offline/framework/fun4allraw/Fun4AllStreamingInputManager.h index ddc9566cd8..c4e416cad3 100644 --- a/offline/framework/fun4allraw/Fun4AllStreamingInputManager.h +++ b/offline/framework/fun4allraw/Fun4AllStreamingInputManager.h @@ -10,6 +10,7 @@ #include #include #include +#include class SingleStreamingInput; class Gl1Packet; @@ -70,7 +71,8 @@ class Fun4AllStreamingInputManager : public Fun4AllInputManager void runMvtxTriggered(bool b = true) { m_mvtx_is_triggered = b; } // configuration for INTT hit carry-over issue mitigation (hit duplication) - void EnableInttHitDuplication(){ m_InttHitDuplication = true; } + void EnableInttHitDuplication(bool b = true) { m_InttHitDuplication = b; } + void InttHitCarryOverShiftMaxMultiple(const int i) { m_InttHitCarryOverShiftMaxMultiple = i; } private: struct MvtxRawHitInfo @@ -166,6 +168,6 @@ class Fun4AllStreamingInputManager : public Fun4AllInputManager // for INTT hit carry-over issue mitigation (hit duplication) bool m_InttHitDuplication{false}; // default to false; Should be set to true when running streaming data const unsigned int m_InttHitCarryOverShift{120}; // 120 BCOs as the default shift. Fixed value - const int m_InttHitCarryOverShiftMaxMultiple{4}; // the max multiple of the shift. For a max multiple of M, duplicate hits from N + [1..M] * shift BCOs to N -} + int m_InttHitCarryOverShiftMaxMultiple{4}; // the max multiple of the shift. For a max multiple of M, duplicate hits from N + [1..M] * shift BCOs to N +}; #endif /* FUN4ALL_FUN4ALLSTREAMINGINPUTMANAGER_H */ From 88b10946a50a324a94399ffc39c04f1b0f1c5cf6 Mon Sep 17 00:00:00 2001 From: Hao-Ren Jheng Date: Thu, 11 Jun 2026 14:33:28 -0400 Subject: [PATCH 3/7] A second pass of duplication for the carried-over hits whose FPHX BCO was reset --- .../Fun4AllStreamingInputManager.cc | 112 ++++++++++++------ 1 file changed, 77 insertions(+), 35 deletions(-) diff --git a/offline/framework/fun4allraw/Fun4AllStreamingInputManager.cc b/offline/framework/fun4allraw/Fun4AllStreamingInputManager.cc index a4b8b5c64e..cc0ec0e415 100644 --- a/offline/framework/fun4allraw/Fun4AllStreamingInputManager.cc +++ b/offline/framework/fun4allraw/Fun4AllStreamingInputManager.cc @@ -715,30 +715,30 @@ int Fun4AllStreamingInputManager::FillIntt() { if (m_InttHitCarryOverShiftMaxMultiple < 1) { - std::cout << __FILE__ << ":" << __PRETTY_FUNCTION__ << ":" << __LINE__ << ": m_InttHitDuplication is set to true but m_InttHitCarryOverShiftMaxMultiple=" << m_InttHitCarryOverShiftMaxMultiple << "is not positive. Default to 1" << std::endl; - m_InttHitCarryOverShiftMaxMultiple = 1; + std::cout << __FILE__ << ":" << __PRETTY_FUNCTION__ << ":" << __LINE__ << ": m_InttHitDuplication is set to true but m_InttHitCarryOverShiftMaxMultiple=" << m_InttHitCarryOverShiftMaxMultiple << "is not positive. Default to 1" << std::endl; + m_InttHitCarryOverShiftMaxMultiple = 1; } const uint64_t max_shift = m_InttHitCarryOverShift * m_InttHitCarryOverShiftMaxMultiple; const uint64_t bco_duplicate_high = select_crossings + max_shift; // now fill the pool until the highest bco in the map is higher than the duplication threshold, which is the select_crossings + the maximum shift we want to do - while (m_InttRawHitMap.rbegin()->first < bco_duplicate_high) // if the highest bco is still smaller than the duplication threshold, keep duplicating + while (m_InttRawHitMap.rbegin()->first < bco_duplicate_high) // if the highest bco is still smaller than the duplication threshold, keep duplicating { - const uint64_t previous_high_bco = m_InttRawHitMap.rbegin()->first; - iret = FillInttPool(); - if (iret) - { - break; // if FillInttPool returns non zero, there is no more data to read and we can stop trying to duplicate - } - // Note: need this gaurd. FillInttPool() only returns non-0 if m_InttRawHitMap is empty - // FillInttPool() calls SingleInttPoolInput::FillPool() returns regardless of whether it actually fill new data or not - // So if FillInttPool() is called and there is no new data to pool, it will return 0 but m_InttRawHitMap will not have changed (non-empty) - // If we don't check for this, it would cause an infinite loop - if (m_InttRawHitMap.rbegin()->first == previous_high_bco) - { - break; - } + const uint64_t previous_high_bco = m_InttRawHitMap.rbegin()->first; + iret = FillInttPool(); + if (iret) + { + break; // if FillInttPool returns non zero, there is no more data to read and we can stop trying to duplicate + } + // Note: need this guard. FillInttPool() only returns non-0 if m_InttRawHitMap is empty + // FillInttPool() calls SingleInttPoolInput::FillPool() returns regardless of whether it actually fill new data or not + // So if FillInttPool() is called and there is no new data to pool, it will return 0 but m_InttRawHitMap will not have changed (non-empty) + // If we don't check for this, it would cause an infinite loop + if (m_InttRawHitMap.rbegin()->first == previous_high_bco) + { + break; + } } } @@ -809,7 +809,7 @@ int Fun4AllStreamingInputManager::FillIntt() h_taggedAllFee_intt->Fill(refbcobitshift); } - for (auto& [bco, hitinfo] : m_InttRawHitMap) + for (auto &[bco, hitinfo] : m_InttRawHitMap) { if (bco > select_crossings) { @@ -830,29 +830,71 @@ int Fun4AllStreamingInputManager::FillIntt() // Insert duplication of hits in N + [1..M] * shift BCOs if m_InttHitDuplication is set to true if (m_InttHitDuplication) { - for (int shift_multiple = 1; shift_multiple <= m_InttHitCarryOverShiftMaxMultiple; ++shift_multiple) + for (int shift_multiple = 1; shift_multiple <= m_InttHitCarryOverShiftMaxMultiple; ++shift_multiple) + { + const uint64_t shift = m_InttHitCarryOverShift * shift_multiple; + const uint64_t source_bco = bco + shift; + auto source_iter = m_InttRawHitMap.find(source_bco); + if (source_iter == m_InttRawHitMap.end()) + { + continue; + } + + for (auto *source_hit : source_iter->second.InttRawHitVector) { - const uint64_t shift = m_InttHitCarryOverShift * shift_multiple; - const uint64_t source_bco = bco + shift; - auto source_iter = m_InttRawHitMap.find(source_bco); - if (source_iter == m_InttRawHitMap.end()) + if (source_hit->get_bco() < shift) + { + continue; + } + + auto *copied_hit = inttcont->AddHit(source_hit); + copied_hit->set_bco(source_hit->get_bco() - shift); + } + } + } + } + + // the previous block is the "first" pass of duplication that duplicates hits from N + [1..M] * shift. This doesn't address the carried-over hits whose FPHX BCO was reset to 0 + // the "second" pass duplicates hits whose FPHX BCO was reset to 0 + // Also, the "second" pass needs to handle the case where the hits with FPHX BCO = 0 are already duplicated from the "first" pass + // This happens when trgrefbco = m_RefBCO % m_InttHitCarryOverShift is 0 and reset_shift = m_InttHitCarryOverShift * s + // If this is the case, do not duplicate the hits again + if (m_InttHitDuplication) + { + const uint64_t trgrefbco = m_RefBCO % m_InttHitCarryOverShift; + + if (trgrefbco != 0) + { + // loop for multiples of carry-over shift + for (int s = 1; s <= m_InttHitCarryOverShiftMaxMultiple; s++) + { + const uint64_t reset_shift = m_InttHitCarryOverShift * s - trgrefbco; // the shift to be applied to the hits whose FPHX BCO was reset to 0 + const uint64_t reset_source_low_bco = m_RefBCO - m_intt_negative_bco + reset_shift; + const uint64_t reset_source_high_bco = select_crossings + reset_shift; + + for (auto source_iter = m_InttRawHitMap.lower_bound(reset_source_low_bco); source_iter != m_InttRawHitMap.end() && source_iter->first <= reset_source_high_bco; ++source_iter) + { + for (auto *source_hit : source_iter->second.InttRawHitVector) + { + // skip hits whose FPHX BCO is not 0 + if (source_hit->get_FPHX_BCO() != 0) { - continue; + continue; } - for (auto *source_hit : source_iter->second.InttRawHitVector) + // also skip hits whose strobe BCO is smaller than the reset shift + if (source_hit->get_bco() < reset_shift) { - if (source_hit->get_bco() < shift) - { - continue; - } - - auto *copied_hit = inttcont->AddHit(source_hit); - copied_hit->set_bco(source_hit->get_bco() - shift); + continue; } + + auto *copied_hit = inttcont->AddHit(source_hit); + copied_hit->set_bco(source_hit->get_bco() - reset_shift); + } } + } } - } + } return 0; } int Fun4AllStreamingInputManager::FillMvtx() @@ -1032,7 +1074,7 @@ int Fun4AllStreamingInputManager::FillMvtx() uint64_t lower_limit = m_mvtx_is_triggered ? select_crossings : select_crossings - m_mvtx_bco_range - m_mvtx_negative_bco; uint64_t upper_limit = m_mvtx_is_triggered ? select_crossings + m_mvtx_bco_range : select_crossings; - for (auto& [bco, hitinfo] : m_MvtxRawHitMap) + for (auto &[bco, hitinfo] : m_MvtxRawHitMap) { if (bco < lower_limit) { @@ -1045,7 +1087,7 @@ int Fun4AllStreamingInputManager::FillMvtx() if (Verbosity() > 2) { - std::cout << "Adding 0x" << std::hex << bco + std::cout << "Adding 0x" << std::hex << bco << " ref: 0x" << select_crossings << std::dec << std::endl; } for (auto *mvtxFeeIdInfo : hitinfo.MvtxFeeIdInfoVector) From 6ce8662791365c156efa10702d1cc6026ee8d39b Mon Sep 17 00:00:00 2001 From: Hao-Ren Jheng Date: Thu, 11 Jun 2026 14:36:23 -0400 Subject: [PATCH 4/7] add comments --- offline/framework/fun4allraw/Fun4AllStreamingInputManager.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/offline/framework/fun4allraw/Fun4AllStreamingInputManager.cc b/offline/framework/fun4allraw/Fun4AllStreamingInputManager.cc index cc0ec0e415..6422edf2c0 100644 --- a/offline/framework/fun4allraw/Fun4AllStreamingInputManager.cc +++ b/offline/framework/fun4allraw/Fun4AllStreamingInputManager.cc @@ -863,6 +863,7 @@ int Fun4AllStreamingInputManager::FillIntt() { const uint64_t trgrefbco = m_RefBCO % m_InttHitCarryOverShift; + // skip the second pass if trgrefbco is 0 because in this case the hits with FPHX BCO = 0 are already duplicated in the first pass if (trgrefbco != 0) { // loop for multiples of carry-over shift From 64c677156f32563d55f701d0297fcca142da97a9 Mon Sep 17 00:00:00 2001 From: Hao-Ren Jheng Date: Thu, 11 Jun 2026 19:45:11 -0400 Subject: [PATCH 5/7] The 2nd duplication pass should include all BCOs but not GL1 BCO exclusively. This fixes that --- .../Fun4AllStreamingInputManager.cc | 86 +++++++++---------- 1 file changed, 40 insertions(+), 46 deletions(-) diff --git a/offline/framework/fun4allraw/Fun4AllStreamingInputManager.cc b/offline/framework/fun4allraw/Fun4AllStreamingInputManager.cc index fa9dca1783..1b680cb7b9 100644 --- a/offline/framework/fun4allraw/Fun4AllStreamingInputManager.cc +++ b/offline/framework/fun4allraw/Fun4AllStreamingInputManager.cc @@ -827,71 +827,65 @@ int Fun4AllStreamingInputManager::FillIntt() inttcont->AddHit(intthititer); } - // Insert duplication of hits in N + [1..M] * shift BCOs if m_InttHitDuplication is set to true + // The duplication consists of 2 passes + // Pass 1: Insert duplication of hits in N + [1..M] * shift BCOs + // the "second" pass duplicates hits whose FPHX BCO was reset to 0 + // Also, the "second" pass needs to handle the case where the hits with FPHX BCO = 0 are already duplicated from the "first" pass + // This happens when target_refbco = bco % m_InttHitCarryOverShift is 0 and reset_shift = m_InttHitCarryOverShift * s + // If this is the case, do not duplicate the hits again if (m_InttHitDuplication) { + const uint64_t target_refbco = bco % m_InttHitCarryOverShift; + for (int shift_multiple = 1; shift_multiple <= m_InttHitCarryOverShiftMaxMultiple; ++shift_multiple) { const uint64_t shift = m_InttHitCarryOverShift * shift_multiple; const uint64_t source_bco = bco + shift; auto source_iter = m_InttRawHitMap.find(source_bco); - if (source_iter == m_InttRawHitMap.end()) - { - continue; - } - for (auto *source_hit : source_iter->second.InttRawHitVector) + if (source_iter != m_InttRawHitMap.end()) { - if (source_hit->get_bco() < shift) + for (auto *source_hit : source_iter->second.InttRawHitVector) { - continue; - } + if (source_hit->get_bco() < shift) + { + continue; + } - auto *copied_hit = inttcont->AddHit(source_hit); - copied_hit->set_bco(source_hit->get_bco() - shift); + auto *copied_hit = inttcont->AddHit(source_hit); + copied_hit->set_bco(source_hit->get_bco() - shift); + } } - } - } - } - // the previous block is the "first" pass of duplication that duplicates hits from N + [1..M] * shift. This doesn't address the carried-over hits whose FPHX BCO was reset to 0 - // the "second" pass duplicates hits whose FPHX BCO was reset to 0 - // Also, the "second" pass needs to handle the case where the hits with FPHX BCO = 0 are already duplicated from the "first" pass - // This happens when trgrefbco = m_RefBCO % m_InttHitCarryOverShift is 0 and reset_shift = m_InttHitCarryOverShift * s - // If this is the case, do not duplicate the hits again - if (m_InttHitDuplication) - { - const uint64_t trgrefbco = m_RefBCO % m_InttHitCarryOverShift; + if (target_refbco == 0) + { + continue; // if trgrefbco is 0, the hits with FPHX BCO = 0 are already duplicated in the first pass, so skip the second pass to avoid double duplication + } - // skip the second pass if trgrefbco is 0 because in this case the hits with FPHX BCO = 0 are already duplicated in the first pass - if (trgrefbco != 0) - { - // loop for multiples of carry-over shift - for (int s = 1; s <= m_InttHitCarryOverShiftMaxMultiple; s++) - { - const uint64_t reset_shift = m_InttHitCarryOverShift * s - trgrefbco; // the shift to be applied to the hits whose FPHX BCO was reset to 0 - const uint64_t reset_source_low_bco = m_RefBCO - m_intt_negative_bco + reset_shift; - const uint64_t reset_source_high_bco = select_crossings + reset_shift; + const uint64_t reset_shift = shift - target_refbco; + const uint64_t reset_source_bco = bco + reset_shift; + auto reset_source_iter = m_InttRawHitMap.find(reset_source_bco); + if (reset_source_iter == m_InttRawHitMap.end()) + { + continue; + } - for (auto source_iter = m_InttRawHitMap.lower_bound(reset_source_low_bco); source_iter != m_InttRawHitMap.end() && source_iter->first <= reset_source_high_bco; ++source_iter) + for (auto *source_hit : reset_source_iter->second.InttRawHitVector) { - for (auto *source_hit : source_iter->second.InttRawHitVector) + // skip hits whose FPHX BCO is not 0 + if (source_hit->get_FPHX_BCO() != 0) { - // skip hits whose FPHX BCO is not 0 - if (source_hit->get_FPHX_BCO() != 0) - { - continue; - } - - // also skip hits whose strobe BCO is smaller than the reset shift - if (source_hit->get_bco() < reset_shift) - { - continue; - } + continue; + } - auto *copied_hit = inttcont->AddHit(source_hit); - copied_hit->set_bco(source_hit->get_bco() - reset_shift); + // also skip hits whose strobe BCO is smaller than the reset shift + if (source_hit->get_bco() < reset_shift) + { + continue; } + + auto *copied_hit = inttcont->AddHit(source_hit); + copied_hit->set_bco(source_hit->get_bco() - reset_shift); } } } From 3844e7c18dfce80a3527e09a12014bf248beb0b5 Mon Sep 17 00:00:00 2001 From: Hao-Ren Jheng Date: Thu, 11 Jun 2026 19:49:44 -0400 Subject: [PATCH 6/7] typo --- offline/framework/fun4allraw/Fun4AllStreamingInputManager.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/offline/framework/fun4allraw/Fun4AllStreamingInputManager.cc b/offline/framework/fun4allraw/Fun4AllStreamingInputManager.cc index 1b680cb7b9..97a80c7b9d 100644 --- a/offline/framework/fun4allraw/Fun4AllStreamingInputManager.cc +++ b/offline/framework/fun4allraw/Fun4AllStreamingInputManager.cc @@ -859,7 +859,7 @@ int Fun4AllStreamingInputManager::FillIntt() if (target_refbco == 0) { - continue; // if trgrefbco is 0, the hits with FPHX BCO = 0 are already duplicated in the first pass, so skip the second pass to avoid double duplication + continue; // if target_refbco is 0, the hits with FPHX BCO = 0 are already duplicated in the first pass, so skip the second pass to avoid double duplication } const uint64_t reset_shift = shift - target_refbco; From cbf93806fb70d149f66ba55bc4285dce35cb6779 Mon Sep 17 00:00:00 2001 From: Hao-Ren Jheng Date: Tue, 16 Jun 2026 16:47:34 -0400 Subject: [PATCH 7/7] fix conflict --- .../framework/fun4allraw/Fun4AllStreamingInputManager.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/offline/framework/fun4allraw/Fun4AllStreamingInputManager.cc b/offline/framework/fun4allraw/Fun4AllStreamingInputManager.cc index 97a80c7b9d..49d26715b1 100644 --- a/offline/framework/fun4allraw/Fun4AllStreamingInputManager.cc +++ b/offline/framework/fun4allraw/Fun4AllStreamingInputManager.cc @@ -1428,13 +1428,20 @@ int Fun4AllStreamingInputManager::FillTpcPool() int Fun4AllStreamingInputManager::FillMicromegasPool() { + + uint64_t ref_bco_minus_range = 0; + if (m_RefBCO > m_micromegas_negative_bco) + { + ref_bco_minus_range = m_RefBCO - m_micromegas_negative_bco; + } + for (auto *iter : m_MicromegasInputVector) { if (Verbosity() > 0) { std::cout << "Fun4AllStreamingInputManager::FillMicromegasPool - fill pool for " << iter->Name() << std::endl; } - iter->FillPool(); + iter->FillPool(ref_bco_minus_range); if (m_RunNumber == 0) { m_RunNumber = iter->RunNumber();