Event resampling support
Mu2e uses "resampling" techniques in physics studies to increase the
effective statistics of simulated samples. For example, one
simulation job can produce a muon stopping in the Mu2e target. The
next job will "resample" that muon stop event by decaying the muon and
simulating the electron track many times, with different random seeds.
In general, we want the ability to take an existing art event and put
all of its content into an empty event with a new event id. This is
similar to the "event mixing" situation, and Mu2e currently uses a
ResamplingMixer module to support this use case
However the "resampling" use case is simpler than mixing: there is no
need to aggregate data products. It is sufficient to support the
nSecondaries==1 case, in the mixing terms. The limitation of the
ResamplingMixer implementation is that one has to implement mixing of
all possible user data types (which may be a meaningless concept for
some types), and then provide run time configuration that lists all
products in the event. This is burdensome.
Art can already provide all data products to a module via the
RootInput source, without listing each one explicitly. It would be
useful to add either a new "resampling source" or "resampling module"
to the framework to support the resampling functionality. The new
code should have the same resampling related settings like readMode,
coverageFraction, etc., as the existing mixing code.
It is probably OK to lose provenance of resampled data products; this
is what happens in the current Mu2e ResamplingMixer implementation.
We need a way to preserve original event IDs, even after multiple
stages of resampling. In the ResamplingMixer case this is achieved
by writing out event ID from the current mixing stage in the
finalizeEvent() mixer detail call, and transmitting IDs from earlier
stages via MixOps.
Please consider adding event resampling functionality to the framework.