13 #include <framework/core/Module.h>
14 #include <framework/datastore/StoreArray.h>
15 #include <framework/dataobjects/DigitBase.h>
31 class BGOverlayExecutorModule :
public Module {
60 virtual void event()
override;
66 virtual void endRun()
override;
89 template <
class Digit>
97 bgDigits.isOptional();
98 B2DEBUG(100,
"optional input: " << digits.getName() <<
" " << bgDigits.getName());
105 template <
class Digit>
110 if (!digits.isValid()) {
111 B2DEBUG(100, digits.getName() <<
" are not valid");
119 if (!bgDigits.isValid()) {
120 B2DEBUG(100, bgDigits.getName() <<
" are not valid");
125 std::multimap<unsigned, Digit*> multimap;
126 for (
auto& digit : digits) {
127 unsigned id = digit.getUniqueChannelID();
129 multimap.insert(std::pair<unsigned, Digit*>(
id, &digit));
132 int size = digits.getEntries();
135 typedef typename std::multimap<unsigned, Digit*>::iterator
Iterator;
136 for (
const auto& bgDigit : bgDigits) {
138 unsigned id = bgDigit.getUniqueChannelID();
139 std::pair<Iterator, Iterator> range = multimap.equal_range(
id);
140 for (
Iterator it = range.first; it != range.second; ++it) {
141 auto* digit = it->second;
145 if (!pileup) digits.appendNew(bgDigit);
149 int diff = size + bgDigits.getEntries() - digits.getEntries();
150 B2DEBUG(100, digits.getName() <<
": before " << size
151 <<
" + " << bgDigits.getEntries() <<
"(BG)"
152 <<
", after " << digits.getEntries()
153 <<
", merged " << diff);