Repository: CoffeaTeam/coffea

Issue:
Bug in NanoEventsFactory.from_root() when reading in multiple files with different trigger paths
**Describe the bug**
When including multiple files (from the NanoAODv9 dataset shown below) in the NanoEventsFactory.from_root() uproot file spec, the dask.compute() function results in a KeyInFileError which I believe results from one of the files not containing a trigger path found in the other file. The reproducer works with a single file specified. This failure is not unique to these two files, however the extent of the issue is unknown.

**To Reproduce**
Steps to reproduce the behavior:
```
from coffea.nanoevents import NanoEventsFactory, NanoAODSchema
redirector="root://cmsxrootd.fnal.gov/" # This redirector doesn't seem to work on ND resources...
# redirector="root://ndcms.crc.nd.edu/"
fileset = {
    redirector+"/store/data/Run2017F/DoubleEG/NANOAOD/UL2017_MiniAODv2_NanoAODv9-v1/710000/E0416E7B-3364-D64D-910A-E83496BCD1EF.root": {'object_path': 'Events', 'steps': [0, 50]},
    redirector+"/store/data/Run2017F/DoubleEG/NANOAOD/UL2017_MiniAODv2_NanoAODv9-v1/70000/61B08DB4-292E-734A-B082-E56243B5365A.root": {'object_path': 'Events', 'steps': [0, 50]}
    }
events = NanoEventsFactory.from_root(
    fileset,
    schemaclass=NanoAODSchema,
).events().compute()
```

**Output**
```
---------------------------------------------------------------------------
KeyInFileError                            Traceback (most recent call last)
Cell In[13], [line 10](vscode-notebook-cell:?execution_count=13&line=10)
      [2](vscode-notebook-cell:?execution_count=13&line=2) redirector="root://ndcms.crc.nd.edu/"
      [3](vscode-notebook-cell:?execution_count=13&line=3) fileset = {
      [4](vscode-notebook-cell:?execution_count=13&line=4)     redirector+"/store/data/Run2017F/DoubleEG/NANOAOD/UL2017_MiniAODv2_NanoAODv9-v1/710000/E0416E7B-3364-D64D-910A-E83496BCD1EF.root": {'object_path': 'Events', 'steps': [0, 50]},
      [5](vscode-notebook-cell:?execution_count=13&line=5)     redirector+"/store/data/Run2017F/DoubleEG/NANOAOD/UL2017_MiniAODv2_NanoAODv9-v1/70000/61B08DB4-292E-734A-B082-E56243B5365A.root": {'object_path': 'Events', 'steps': [0, 50]}
      [6](vscode-notebook-cell:?execution_count=13&line=6)     }
      [7](vscode-notebook-cell:?execution_count=13&line=7) events = NanoEventsFactory.from_root(
      [8](vscode-notebook-cell:?execution_count=13&line=8)     fileset,
      [9](vscode-notebook-cell:?execution_count=13&line=9)     schemaclass=NanoAODSchema,
---> [10](vscode-notebook-cell:?execution_count=13&line=10) ).events().compute()

File [~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/dask/base.py:342](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/dask/base.py:342), in DaskMethodsMixin.compute(self, **kwargs)
    [318](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/dask/base.py:318) def compute(self, **kwargs):
    [319](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/dask/base.py:319)     """Compute this dask collection
    [320](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/dask/base.py:320) 
    [321](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/dask/base.py:321)     This turns a lazy Dask collection into its in-memory equivalent.
   (...)
    [340](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/dask/base.py:340)     dask.compute
    [341](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/dask/base.py:341)     """
--> [342](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/dask/base.py:342)     (result,) = compute(self, traverse=False, **kwargs)
    [343](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/dask/base.py:343)     return result

File [~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/dask/base.py:628](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/dask/base.py:628), in compute(traverse, optimize_graph, scheduler, get, *args, **kwargs)
    [625](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/dask/base.py:625)     postcomputes.append(x.__dask_postcompute__())
    [627](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/dask/base.py:627) with shorten_traceback():
--> [628](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/dask/base.py:628)     results = schedule(dsk, keys, **kwargs)
    [630](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/dask/base.py:630) return repack([f(r, *a) for r, (f, a) in zip(results, postcomputes)])

File [~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:1256](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:1256), in _UprootOpenAndRead.__call__(self, blockwise_args)
   [1242](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:1242)     except self.allowed_exceptions as err:
   [1243](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:1243)         return (
   [1244](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:1244)             self.mock_empty(backend="cpu"),
   [1245](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:1245)             _report_failure(
   (...)
   [1253](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:1253)             ),
   [1254](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:1254)         )
-> [1256](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:1256) return self._call_impl(
   [1257](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:1257)     file_path, object_path, i_step_or_start, n_steps_or_stop, is_chunk
   [1258](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:1258) )

File [~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:1214](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:1214), in _UprootOpenAndRead._call_impl(self, file_path, object_path, i_step_or_start, n_steps_or_stop, is_chunk)
   [1208](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:1208)     start, stop = min((i_step_or_start * events_per_step), num_entries), min(
   [1209](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:1209)         (i_step_or_start + 1) * events_per_step, num_entries
   [1210](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:1210)     )
   [1212](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:1212) assert start <= stop
-> [1214](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:1214) return self.read_tree(ttree, start, stop)

File [~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:949](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:949), in UprootReadMixin.read_tree(self, tree, start, stop)
    [945](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:945) # If reading this buffer loads a permitted key, read from the tree
    [946](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:946) # We might not have _all_ keys if e.g. buffer A requires one
    [947](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:947) # but not two of the keys required for buffer B
    [948](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:948) if all(k in self.common_keys for k in keys_for_buffer):
--> [949](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:949)     container[buffer_key] = mapping[buffer_key]
    [950](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:950) # Otherwise, introduce a placeholder
    [951](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:951) else:
    [952](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:952)     container[buffer_key] = awkward.typetracer.PlaceholderArray(
    [953](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:953)         nplike=nplike,
    [954](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:954)         shape=(awkward.typetracer.unknown_length,),
    [955](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:955)         dtype=dtype,
    [956](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/_dask.py:956)     )

File [~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/coffea/nanoevents/factory.py:114](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/coffea/nanoevents/factory.py:114), in _TranslatedMapping.__getitem__(self, index)
    [113](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/coffea/nanoevents/factory.py:113) def __getitem__(self, index):
--> [114](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/coffea/nanoevents/factory.py:114)     return self._mapping[self._func(index)]

File [~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/coffea/nanoevents/mapping/base.py:94](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/coffea/nanoevents/mapping/base.py:94), in BaseSourceMapping.__getitem__(self, key)
     [92](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/coffea/nanoevents/mapping/base.py:92)     if self._access_log is not None:
     [93](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/coffea/nanoevents/mapping/base.py:93)         self._access_log.append(handle_name)
---> [94](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/coffea/nanoevents/mapping/base.py:94)     handle = self.get_column_handle(
     [95](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/coffea/nanoevents/mapping/base.py:95)         self._column_source(uuid, treepath), handle_name
     [96](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/coffea/nanoevents/mapping/base.py:96)     )
     [97](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/coffea/nanoevents/mapping/base.py:97)     stack.append(
     [98](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/coffea/nanoevents/mapping/base.py:98)         self.extract_column(
     [99](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/coffea/nanoevents/mapping/base.py:99)             handle, start, stop, use_ak_forth=self._use_ak_forth
    [100](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/coffea/nanoevents/mapping/base.py:100)         )
    [101](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/coffea/nanoevents/mapping/base.py:101)     )
    [102](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/coffea/nanoevents/mapping/base.py:102) elif node.startswith("!"):

File [~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/coffea/nanoevents/mapping/uproot.py:155](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/coffea/nanoevents/mapping/uproot.py:155), in UprootSourceMapping.get_column_handle(self, columnsource, name)
    [154](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/coffea/nanoevents/mapping/uproot.py:154) def get_column_handle(self, columnsource, name):
--> [155](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/coffea/nanoevents/mapping/uproot.py:155)     return columnsource[name]

File [~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/behaviors/TBranch.py:1646](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/behaviors/TBranch.py:1646), in HasBranches.__getitem__(self, where)
   [1644](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/behaviors/TBranch.py:1644)         return got
   [1645](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/behaviors/TBranch.py:1645)     else:
-> [1646](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/behaviors/TBranch.py:1646)         raise uproot.KeyInFileError(
   [1647](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/behaviors/TBranch.py:1647)             original_where,
   [1648](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/behaviors/TBranch.py:1648)             keys=self.keys(recursive=recursive),
   [1649](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/behaviors/TBranch.py:1649)             file_path=self._file.file_path,
   [1650](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/behaviors/TBranch.py:1650)             object_path=self.object_path,
   [1651](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/behaviors/TBranch.py:1651)         )
   [1653](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/behaviors/TBranch.py:1653) else:
   [1654](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/behaviors/TBranch.py:1654)     raise uproot.KeyInFileError(
   [1655](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/behaviors/TBranch.py:1655)         original_where,
   [1656](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/behaviors/TBranch.py:1656)         keys=self.keys(recursive=recursive),
   [1657](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/behaviors/TBranch.py:1657)         file_path=self._file.file_path,
   [1658](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/behaviors/TBranch.py:1658)         object_path=self.object_path,
   [1659](https://vscode-remote+ssh-002dremote-002bearth-002ecrc-002end-002eedu.vscode-resource.vscode-cdn.net/afs/crc.nd.edu/user/a/atownse2/Public/RSTriPhoton/test/~/micromamba/envs/triphoton-env/lib/python3.11/site-packages/uproot/behaviors/TBranch.py:1659)     )

KeyInFileError: not found: 'HLT_DoubleMu5_Upsilon_DoubleEle3_CaloIdL_TrackIdL'

    Available keys: 'HLT_DiMu9_Ele9_CaloIdL_TrackIdL', 'HLT_Mu8_DiEle12_CaloIdL_TrackIdL', 'HLT_DiMu9_Ele9_CaloIdL_TrackIdL_DZ', 'HLT_Mu8_DiEle12_CaloIdL_TrackIdL_DZ', 'HLT_Ele16_Ele12_Ele8_CaloIdL_TrackIdL', 'HLT_DoubleMu2_Jpsi_DoubleTrk1_Phi'...

in file root://ndcms.crc.nd.edu:1094//store/data/Run2017F/DoubleEG/NANOAOD/UL2017_MiniAODv2_NanoAODv9-v1/70000/61B08DB4-292E-734A-B082-E56243B5365A.root
in object /Events;1
```

**Desktop:**
- NAME="Red Hat Enterprise Linux Server"
- VERSION="7.9 (Maipo)"

Discussion:
nsmith-: >  When a file is parsed, if a given key is not available in that file a buffer is generated with all identities (False in this case) that is the length of the file.

Why not `None`?
lgray: Because I can't get it to work properly.
lgray: After letting this simmer all day in the back of my head I think I have a way to get it to do option arrays. I'll give it a try.
lgray: @nsmith- ready for a review.

Patch:
diff --git a/src/coffea/dataset_tools/manipulations.py b/src/coffea/dataset_tools/manipulations.py
index d71d06e3..e515ce2b 100644
--- a/src/coffea/dataset_tools/manipulations.py
+++ b/src/coffea/dataset_tools/manipulations.py
@@ -101,10 +101,8 @@ def slice_files(fileset: FilesetSpec, theslice: Any = slice(None)) -> FilesetSpe
 
 def _default_filter(name_and_spec):
     name, spec = name_and_spec
-    thesteps = spec["steps"]
-    return thesteps is not None and (
-        len(thesteps) > 1 or (thesteps[0][1] - thesteps[0][0]) > 0
-    )
+    num_entries = spec["num_entries"]
+    return num_entries is not None and num_entries > 0
 
 
 def filter_files(
diff --git a/src/coffea/dataset_tools/preprocess.py b/src/coffea/dataset_tools/preprocess.py
index edb20598..e8dd761e 100644
--- a/src/coffea/dataset_tools/preprocess.py
+++ b/src/coffea/dataset_tools/preprocess.py
@@ -146,6 +146,7 @@ def get_steps(
                 "file": arg.file,
                 "object_path": arg.object_path,
                 "steps": out_steps,
+                "num_entries": num_entries,
                 "uuid": out_uuid,
                 "form": form_json,
                 "form_hash_md5": form_hash,
@@ -159,6 +160,7 @@ def get_steps(
                     "file": "junk",
                     "object_path": "junk",
                     "steps": [[0, 0]],
+                    "num_entries": 0,
                     "uuid": "junk",
                     "form": "junk",
                     "form_hash_md5": "junk",
@@ -187,12 +189,14 @@ class UprootFileSpec:
 @dataclass
 class CoffeaFileSpec(UprootFileSpec):
     steps: list[list[int]]
+    num_entries: int
     uuid: str
 
 
 @dataclass
 class CoffeaFileSpecOptional(CoffeaFileSpec):
     steps: list[list[int]] | None
+    num_entriees: int | None
     uuid: str | None
 
 
@@ -235,11 +239,14 @@ def _normalize_file_info(file_info):
             None if not isinstance(maybe_finfo, dict) else maybe_finfo.get("uuid", None)
         )
         this_file = normed_files[ifile]
-        this_file += (3 - len(this_file)) * (None,) + (maybe_uuid,)
+        this_file += (4 - len(this_file)) * (None,) + (maybe_uuid,)
         normed_files[ifile] = this_file
     return normed_files
 
 
+_trivial_file_fields = {"run", "luminosityBlock", "event"}
+
+
 def preprocess(
     fileset: FilesetSpecOptional,
     step_size: None | int = None,
@@ -295,7 +302,7 @@ def preprocess(
     files_to_preprocess = {}
     for name, info in fileset.items():
         norm_files = _normalize_file_info(info)
-        fields = ["file", "object_path", "steps", "uuid"]
+        fields = ["file", "object_path", "steps", "num_entries", "uuid"]
         ak_norm_files = awkward.from_iter(norm_files)
         ak_norm_files = awkward.Array(
             {field: ak_norm_files[str(ifield)] for ifield, field in enumerate(fields)}
@@ -322,10 +329,10 @@ def preprocess(
 
     for name, processed_files in all_processed_files.items():
         processed_files_without_forms = processed_files[
-            ["file", "object_path", "steps", "uuid"]
+            ["file", "object_path", "steps", "num_entries", "uuid"]
         ]
 
-        forms = processed_files[["form", "form_hash_md5"]][
+        forms = processed_files[["file", "form", "form_hash_md5", "num_entries"]][
             ~awkward.is_none(processed_files.form_hash_md5)
         ]
 
@@ -333,27 +340,71 @@ def preprocess(
             forms.form_hash_md5.to_numpy(), return_index=True
         )
 
-        dict_forms = []
-        for form in forms[unique_forms_idx].form:
-            dict_form = awkward.forms.from_json(decompress_form(form)).to_dict()
-            fields = dict_form.pop("fields")
-            dict_form["contents"] = {
-                field: content for field, content in zip(fields, dict_form["contents"])
-            }
-            dict_forms.append(dict_form)
+        dataset_forms = []
+        unique_forms = forms[unique_forms_idx]
+        for thefile, formstr, num_entries in zip(
+            unique_forms.file, unique_forms.form, unique_forms.num_entries
+        ):
+            # skip trivially filled or empty files
+            form = awkward.forms.from_json(decompress_form(formstr))
+            if num_entries >= 0 and set(form.fields) != _trivial_file_fields:
+                dataset_forms.append(form)
+            else:
+                warnings.warn(
+                    f"{thefile} has fields {form.fields} and num_entries={num_entries} "
+                    "and has been skipped during form-union determination. You will need "
+                    "to skip this file when processing. You can either manually remove it "
+                    "or, if it is an empty file, dynamically remove it with the function "
+                    "dataset_tools.filter_files which takes the output of preprocess and "
+                    ", by default, removes empty files each dataset in a fileset."
+                )
 
-        union_form = {}
+        union_array = None
         union_form_jsonstr = None
-        while len(dict_forms):
-            form = dict_forms.pop()
-            union_form.update(form)
-        if len(union_form) > 0:
-            union_form_jsonstr = awkward.forms.from_dict(union_form).to_json()
+        while len(dataset_forms):
+            new_array = awkward.Array(dataset_forms.pop().length_zero_array())
+            if union_array is None:
+                union_array = new_array
+            else:
+                union_array = awkward.to_packed(
+                    awkward.merge_union_of_records(
+                        awkward.concatenate([union_array, new_array]), axis=0
+                    )
+                )
+                union_array.layout.parameters.update(new_array.layout.parameters)
+        if union_array is not None:
+            union_form = union_array.layout.form
+
+            for icontent, content in enumerate(union_form.contents):
+                if isinstance(content, awkward.forms.IndexedOptionForm):
+                    if (
+                        not isinstance(content.content, awkward.forms.NumpyForm)
+                        or content.content.primitive != "bool"
+                    ):
+                        raise ValueError(
+                            "IndexedOptionArrays can only contain NumpyArrays of "
+                            "bools in mergers of flat-tuple-like schemas!"
+                        )
+                    parameters = (
+                        content.content.parameters.copy()
+                        if content.content.parameters is not None
+                        else {}
+                    )
+                    # re-create IndexOptionForm with parameters of lower level array
+                    union_form.contents[icontent] = awkward.forms.IndexedOptionForm(
+                        content.index,
+                        content.content,
+                        parameters=parameters,
+                        form_key=content.form_key,
+                    )
+
+            union_form_jsonstr = union_form.to_json()
 
         files_available = {
             item["file"]: {
                 "object_path": item["object_path"],
                 "steps": item["steps"],
+                "num_entries": item["num_entries"],
                 "uuid": item["uuid"],
             }
             for item in awkward.drop_none(processed_files_without_forms).to_list()
@@ -361,12 +412,13 @@ def preprocess(
 
         files_out = {}
         for proc_item, orig_item in zip(
-            processed_files.to_list(), all_ak_norm_files[name].to_list()
+            processed_files_without_forms.to_list(), all_ak_norm_files[name].to_list()
         ):
             item = orig_item if proc_item is None else proc_item
             files_out[item["file"]] = {
                 "object_path": item["object_path"],
                 "steps": item["steps"],
+                "num_entries": item["num_entries"],
                 "uuid": item["uuid"],
             }
 
diff --git a/src/coffea/nanoevents/mapping/base.py b/src/coffea/nanoevents/mapping/base.py
index 3d87b410..00557f93 100644
--- a/src/coffea/nanoevents/mapping/base.py
+++ b/src/coffea/nanoevents/mapping/base.py
@@ -56,11 +56,11 @@ class BaseSourceMapping(Mapping):
         self._cache[key] = source
 
     @abstractmethod
-    def get_column_handle(self, columnsource, name):
+    def get_column_handle(self, columnsource, name, allow_missing):
         pass
 
     @abstractmethod
-    def extract_column(self, columnhandle, start, stop, **kwargs):
+    def extract_column(self, columnhandle, start, stop, allow_missing, **kwargs):
         pass
 
     @classmethod
@@ -87,16 +87,21 @@ class BaseSourceMapping(Mapping):
             elif node == "!skip":
                 skip = True
                 continue
-            elif node == "!load":
+            elif node.startswith("!load"):
                 handle_name = stack.pop()
                 if self._access_log is not None:
                     self._access_log.append(handle_name)
+                allow_missing = node == "!loadallowmissing"
                 handle = self.get_column_handle(
-                    self._column_source(uuid, treepath), handle_name
+                    self._column_source(uuid, treepath), handle_name, allow_missing
                 )
                 stack.append(
                     self.extract_column(
-                        handle, start, stop, use_ak_forth=self._use_ak_forth
+                        handle,
+                        start,
+                        stop,
+                        allow_missing,
+                        use_ak_forth=self._use_ak_forth,
                     )
                 )
             elif node.startswith("!"):
diff --git a/src/coffea/nanoevents/mapping/uproot.py b/src/coffea/nanoevents/mapping/uproot.py
index 0e6c1278..19d5070c 100644
--- a/src/coffea/nanoevents/mapping/uproot.py
+++ b/src/coffea/nanoevents/mapping/uproot.py
@@ -2,6 +2,7 @@ import json
 import warnings
 
 import awkward
+import numpy
 import uproot
 
 from coffea.nanoevents.mapping.base import BaseSourceMapping, UUIDOpener
@@ -48,6 +49,22 @@ def _lazify_form(form, prefix, docstr=None):
         )
         if parameters:
             form["parameters"] = parameters
+    elif form["class"] == "IndexedOptionArray":
+        if (
+            form["content"]["class"] != "NumpyArray"
+            or form["content"]["primitive"] != "bool"
+        ):
+            raise ValueError(
+                "Only boolean NumpyArrays can be created dynamically if "
+                "missing in file!"
+            )
+        assert prefix.endswith("!load")
+        form["form_key"] = quote(prefix + "allowmissing,!index")
+        form["content"] = _lazify_form(
+            form["content"], prefix + "allowmissing,!content", docstr=docstr
+        )
+        if parameters:
+            form["parameters"] = parameters
     elif form["class"] == "RecordArray":
         newfields, newcontents = [], []
         for field, value in zip(form["fields"], form["contents"]):
@@ -151,14 +168,30 @@ class UprootSourceMapping(BaseSourceMapping):
         key = self.key_root() + tuple_to_key((uuid, path_in_source))
         self._cache[key] = source
 
-    def get_column_handle(self, columnsource, name):
+    def get_column_handle(self, columnsource, name, allow_missing):
+        if allow_missing:
+            return columnsource[name] if name in columnsource else None
         return columnsource[name]
 
-    def extract_column(self, columnhandle, start, stop, use_ak_forth=True):
+    def extract_column(
+        self, columnhandle, start, stop, allow_missing, use_ak_forth=True
+    ):
         # make sure uproot is single-core since our calling context might not be
+        if allow_missing and columnhandle is None:
+
+            return awkward.contents.IndexedOptionArray(
+                awkward.index.Index64(numpy.full(stop - start, -1, dtype=numpy.int64)),
+                awkward.contents.NumpyArray(numpy.array([], dtype=bool)),
+            )
+        elif not allow_missing and columnhandle is None:
+            raise RuntimeError(
+                "Received columnhandle of None when missing column in file is not allowed!"
+            )
+
         interp = columnhandle.interpretation
         interp._forth = use_ak_forth
-        return columnhandle.array(
+
+        the_array = columnhandle.array(
             interp,
             entry_start=start,
             entry_stop=stop,
@@ -166,6 +199,14 @@ class UprootSourceMapping(BaseSourceMapping):
             interpretation_executor=uproot.source.futures.TrivialExecutor(),
         )
 
+        if allow_missing:
+            the_array = awkward.contents.IndexedOptionArray(
+                awkward.index.Index64(numpy.arange(stop - start, dtype=numpy.int64)),
+                awkward.contents.NumpyArray(the_array),
+            )
+
+        return the_array
+
     def __len__(self):
         return self._stop - self._start
 


Test patch:
diff --git a/tests/test_dataset_tools.py b/tests/test_dataset_tools.py
index 58b4bea9..329029b3 100644
--- a/tests/test_dataset_tools.py
+++ b/tests/test_dataset_tools.py
@@ -122,6 +122,7 @@ _runnable_result = {
                     [28, 35],
                     [35, 40],
                 ],
+                "num_entries": 40,
                 "uuid": "a9490124-3648-11ea-89e9-f5b55c90beef",
             }
         },
@@ -140,6 +141,7 @@ _runnable_result = {
                     [28, 35],
                     [35, 40],
                 ],
+                "num_entries": 40,
                 "uuid": "a210a3f8-3648-11ea-a29f-f5b55c90beef",
             }
         },
@@ -161,6 +163,7 @@ _updated_result = {
                     [28, 35],
                     [35, 40],
                 ],
+                "num_entries": 40,
                 "uuid": "a9490124-3648-11ea-89e9-f5b55c90beef",
             }
         },
@@ -179,11 +182,13 @@ _updated_result = {
                     [28, 35],
                     [35, 40],
                 ],
+                "num_entries": 40,
                 "uuid": "a210a3f8-3648-11ea-a29f-f5b55c90beef",
             },
             "tests/samples/nano_dimuon_not_there.root": {
                 "object_path": "Events",
                 "steps": None,
+                "num_entries": None,
                 "uuid": None,
             },
         },
@@ -313,6 +318,7 @@ def test_filter_files():
                 "tests/samples/nano_dy.root": {
                     "object_path": "Events",
                     "steps": [[0, 7], [7, 14], [14, 21], [21, 28], [28, 35], [35, 40]],
+                    "num_entries": 40,
                     "uuid": "a9490124-3648-11ea-89e9-f5b55c90beef",
                 }
             },
@@ -324,6 +330,7 @@ def test_filter_files():
                 "tests/samples/nano_dimuon.root": {
                     "object_path": "Events",
                     "steps": [[0, 7], [7, 14], [14, 21], [21, 28], [28, 35], [35, 40]],
+                    "num_entries": 40,
                     "uuid": "a210a3f8-3648-11ea-a29f-f5b55c90beef",
                 }
             },
@@ -342,6 +349,7 @@ def test_max_files():
                 "tests/samples/nano_dy.root": {
                     "object_path": "Events",
                     "steps": [[0, 7], [7, 14], [14, 21], [21, 28], [28, 35], [35, 40]],
+                    "num_entries": 40,
                     "uuid": "a9490124-3648-11ea-89e9-f5b55c90beef",
                 }
             },
@@ -353,6 +361,7 @@ def test_max_files():
                 "tests/samples/nano_dimuon.root": {
                     "object_path": "Events",
                     "steps": [[0, 7], [7, 14], [14, 21], [21, 28], [28, 35], [35, 40]],
+                    "num_entries": 40,
                     "uuid": "a210a3f8-3648-11ea-a29f-f5b55c90beef",
                 }
             },
@@ -372,6 +381,7 @@ def test_slice_files():
                 "tests/samples/nano_dimuon_not_there.root": {
                     "object_path": "Events",
                     "steps": None,
+                    "num_entries": None,
                     "uuid": None,
                 }
             },
@@ -390,6 +400,7 @@ def test_max_chunks():
                 "tests/samples/nano_dy.root": {
                     "object_path": "Events",
                     "steps": [[0, 7], [7, 14], [14, 21]],
+                    "num_entries": 40,
                     "uuid": "a9490124-3648-11ea-89e9-f5b55c90beef",
                 }
             },
@@ -401,6 +412,7 @@ def test_max_chunks():
                 "tests/samples/nano_dimuon.root": {
                     "object_path": "Events",
                     "steps": [[0, 7], [7, 14], [14, 21]],
+                    "num_entries": 40,
                     "uuid": "a210a3f8-3648-11ea-a29f-f5b55c90beef",
                 }
             },
@@ -419,6 +431,7 @@ def test_slice_chunks():
                 "tests/samples/nano_dy.root": {
                     "object_path": "Events",
                     "steps": [[0, 7], [14, 21], [28, 35]],
+                    "num_entries": 40,
                     "uuid": "a9490124-3648-11ea-89e9-f5b55c90beef",
                 }
             },
@@ -430,6 +443,7 @@ def test_slice_chunks():
                 "tests/samples/nano_dimuon.root": {
                     "object_path": "Events",
                     "steps": [[0, 7], [14, 21], [28, 35]],
+                    "num_entries": 40,
                     "uuid": "a210a3f8-3648-11ea-a29f-f5b55c90beef",
                 }
             },