reboost.daq package

Submodules

reboost.daq.core module

reboost.daq.core._run_daq_non_sparse_impl(evt, chids, tau_preamp, noise_threshold, baseline_slope_threshold, trigger_threshold, waveform_length, trigger_position)

Numba-accelerated implementation of run_daq_non_sparse().

Parameters:
reboost.daq.core.run_daq_non_sparse(evt, n_sim_events, source_activity, *, tau_preamp=500, noise_threshold=5, baseline_slope_threshold=0.01, trigger_threshold=25, waveform_length=100, trigger_position=50)

Run the DAQ in non-sparse mode.

Pipe simulated HPGe events through the DAQ system in non-sparse mode. Return a table where each row represents an event that was actually recorded by the DAQ. For each event and each channel, determine the characteristics of the waveform.

Warning

This code assumes that the simulated events are time-independent.

Parameters:
  • evt (Array) –

    simulated events. Must be an Awkward array with the following fields:

    • evtid (int): event ID in the simulation.

    • geds_energy_active (array of floats): energy deposits (in keV) in the active HPGe detector channels for this event.

    • geds_rawid_active (array of ints): hardware raw-IDs of the active HPGe detector channels, in the same order as geds_energy_active.

  • source_activity (float) – source activity in Bq.

  • n_sim_events (int) – total number of simulated events.

  • tau_preamp (float) –

    pre-amplification RC constant in microseconds. the signal model is an exponential:

    \[f(t) = E_i * e^{((t - t_i) / \tau)}\]

    where \(E_i\) is the energy of the signal and \(t_i\) is the time it occurred.

  • noise_threshold (float) – threshold (in keV) for a signal to be “visible” above noise. In LEGEND-200, the “energy” of forced trigger events is gauss-distributed around 0.5 keV with a standard deviation of about 0.5 keV.

  • baseline_slope_threshold (float) – threshold (in keV/us) on the baseline slope to be tagged as not flat. in LEGEND-200, the slope of waveforms in force-triggered events is gauss-distributed around 0 with a standard deviation of about 2 keV/ms.

  • trigger_threshold (float) – amplitude (in keV) needed for the DAQ to trigger on a signal.

  • waveform_length (float) – length of the waveform in microseconds stored on disk.

  • trigger_position (float) – location (offset) in microseconds of the triggered signal in the waveform.

Returns:

tuple[ak.Array, list[int]]

A two-element tuple (daq_data, channel_ids):

daq_data

Awkward array (table) where each row is one DAQ record. Fields:

  • evtid (int): event ID in the simulation.

  • timestamp (float): timestamp of the start of the waveform in microseconds.

  • has_trigger (2-D array of bool, shape (n_records, n_channels)): True for the channel(s) whose energy deposit triggered the DAQ.

  • has_pre_pulse (2-D array of bool, shape (n_records, n_channels)): True when a signal above noise_threshold is present in the pre-trigger part of the waveform (hard pre-pile-up).

  • has_post_pulse (2-D array of bool, shape (n_records, n_channels)): True when a signal above noise_threshold arrives after the trigger position but still within the waveform window (hard post-pile-up).

  • has_slope (2-D array of bool, shape (n_records, n_channels)): True when the decaying tail of an earlier signal produces a significant baseline slope.

channel_ids

Sorted list of the unique hardware raw-IDs (integers) of all channels present in evt. The column order in the 2-D boolean fields above matches this list.

reboost.daq.utils module

reboost.daq.utils.print_random_crash_msg(rng)