Source code for NuRadioReco.modules.channelTimeWindow

import numpy as np
import logging
from NuRadioReco.utilities import units
from NuRadioReco.framework.parameters import channelParameters as chp
from NuRadioReco.modules.base.module import register_run


[docs]class channelTimeWindow: """ Set trace outside time window to zero. """ def __init__(self): self.logger = logging.getLogger("NuRadioReco.channelTimeWindow") self.__debug = None self.begin()
[docs] def begin(self, debug=False): self.__debug = debug if(debug): self.logger.setLevel(logging.DEBUG)
[docs] @register_run() def run(self, evt, station, det, window=None, window_function='rectangular', around_pulse=True, window_width=50 * units.ns, window_rise_time=20 * units.ns ): """ Parameters ---------- evt, station, det Event, Station, Detector window: list or None [time_window_start, time_window_end] in which the signal should be kept (in units of time) window_function: string select window function * rectangular * hanning around_pulse: float or None if not None: specifies time interval around 'signal_time', if this option is set, 'window' is ignored window_width: float if around_pulse is set, defines the time width of the trace where the filter is 1. window_rise_time: float if window_function is not rectangular, defines the rise time where the filter goes from 0 to 1. """ for channel in station.iter_channels(): times = channel.get_times() trace = channel.get_trace() if(around_pulse is not None): if(not channel.has_parameter(chp.signal_time)): raise AttributeError("channel parameter 'signal_time' is not set. Did you forget to run the channelSignalReconstructor?") tmax = channel[chp.signal_time] window = [tmax - window_width * 0.5, tmax + window_width * 0.5] if(window_function == 'rectangular'): trace[np.where(times < window[0])] = 0. trace[np.where(times > window[1])] = 0. else: window_fkt = np.zeros_like(trace) i00 = np.argmin(np.abs(times - (window[0] - window_rise_time))) i01 = np.argmin(np.abs(times - window[0])) i10 = np.argmin(np.abs(times - window[1])) i11 = np.argmin(np.abs(times - (window[1] + window_rise_time))) # print(window) # self.logger.debug("times = {:.2f} {:.2f} {:.2f} {:.2f}".format(times - (window[0] - window_rise_time), # times - window[0], # times - window[1], # times - (window[1] + window_rise_time))) self.logger.debug("indices = {} {} {} {}".format(i00, i01, i10, i11)) window_fkt[i01:i10] = 1 if(window_function == 'hanning'): n = i01 - i00 window_fkt[i00:i01] = np.hanning(n * 2)[:n] n = i11 - i10 window_fkt[i10:i11] = np.hanning(n * 2)[n:] else: raise NotImplementedError("window function {} is not implemented".format(window_function)) if(self.__debug): from matplotlib import pyplot as plt fig, ax = plt.subplots(1, 1) ax.plot(times, window_fkt) plt.show() trace *= window_fkt channel.set_trace(trace, channel.get_sampling_rate())
[docs] def end(self): pass