@@ -191,36 +191,35 @@ public:
191191 fHelper .Exec (slot, untypedValues);
192192 }
193193
194- void Run (unsigned int slot, Long64_t entry ) final
194+ void Run (unsigned int slot, Long64_t bulkBeginEntry, std:: size_t bulkSize ) final
195195 {
196196 if constexpr (std::is_same_v<Helper, SnapshotHelperWithVariations>) {
197197 // check if entry passes all filters
198198 std::vector<ROOT ::Internal::RDF ::RMaskedEntryRange> filterPassed (fPrevNodes .size (), 1ul );
199199 for (unsigned int variation = 0 ; variation < fPrevNodes .size (); ++variation) {
200- filterPassed[variation] = fPrevNodes [variation]->CheckFilters (slot, entry );
200+ filterPassed[variation] = fPrevNodes [variation]->CheckFilters (slot, bulkBeginEntry, bulkSize );
201201 }
202202
203203 // Currently, every event where any of nominal or variations pass gets written to the output.
204204 // This logic could be extended for different use cases if the need arises.
205- // Assume 1-size bulk for now
206205 if (std::any_of (filterPassed.begin (), filterPassed.end (),
207206 [](const ROOT ::Internal::RDF ::RMaskedEntryRange &val) { return val[0 ]; })) {
208207 // TODO: Don't allocate
209208 std::vector<void *> untypedValues;
210209 auto nReaders = fValues [slot].size ();
211210 untypedValues.reserve (nReaders);
212- std::for_each (fValues [slot].begin (), fValues [slot].end (), [entry](auto *v) {
213- v->Load (ROOT ::Internal::RDF ::RMaskedEntryRange{1ul , true , static_cast <std::uint64_t >(entry)});
211+ std::for_each (fValues [slot].begin (), fValues [slot].end (), [bulkBeginEntry, bulkSize](auto *v) {
212+ v->Load (
213+ ROOT ::Internal::RDF ::RMaskedEntryRange{bulkSize, true , static_cast <std::uint64_t >(bulkBeginEntry)});
214214 });
215215 for (decltype (nReaders) readerIdx{}; readerIdx < nReaders; readerIdx++)
216216 untypedValues.push_back (GetValue (slot, readerIdx, /* idx=*/ 0u ));
217217
218218 fHelper .Exec (slot, untypedValues, filterPassed);
219219 }
220220 } else {
221- const auto mask = fPrevNodes .front ()->CheckFilters (slot, entry );
221+ const auto mask = fPrevNodes .front ()->CheckFilters (slot, bulkBeginEntry, bulkSize );
222222 std::for_each (fValues [slot].begin (), fValues [slot].end (), [&mask](auto *v) { v->Load (mask); });
223- // Assume 1-size bulk for now
224223 if (mask[0 ])
225224 CallExec (slot, /* idx=*/ 0u );
226225 }
0 commit comments