Source code for NuRadioReco.modules.channelAntennaDedispersion

from NuRadioReco.modules.base.module import register_run
import numpy as np
import logging
from NuRadioReco.utilities import units
from NuRadioReco.detector.antennapattern import AntennaPatternProvider

logger = logging.getLogger('NuRadioReco.channelAntennaDedispersion')


[docs]class channelAntennaDedispersion: def __init__(self): self._provider = AntennaPatternProvider() # @lru_cache(maxsize=32) # hashing doen't make sense because ff array is always different def _get_response(self, det, station_id, channel_id, ff): antenna_name = det.get_antenna_model(station_id, channel_id) antenna = self._provider.load_antenna_pattern(antenna_name) zen_ori, az_ori, zen_rot, az_rot = det.get_antenna_orientation(station_id, channel_id) if("LPDA" in antenna_name): zen = zen_ori # the sensitive direction of an LPDA is the boresight direction az = az_ori elif("bicone" in antenna_name or "dipole" in antenna_name): zen = 90 * units.deg + zen_ori # the sensitive direction of a dipole is perpendicular to its orientatoin az = 0 else: raise AttributeError(f"antenna name {antenna_name} can't be interpreted") VEL = antenna.get_antenna_response_vectorized(ff, zen, az, zen_ori, az_ori, zen_rot, az_rot) polarization = "phi" if(np.sum(np.abs(VEL['theta'])) > np.sum(np.abs(VEL['phi']))): polarization = "theta" response = np.exp(1j * np.angle(VEL[polarization])) return response
[docs] @register_run() def run(self, evt, station, det, debug=False): for channel in station.iter_channels(): ff = channel.get_frequencies() response = self._get_response(det, station.get_id(), channel.get_id(), tuple(ff)) if debug: trace = channel.get_trace() tt = channel.get_times() from matplotlib import pyplot as plt fig, ax = plt.subplots(1, 1) ax.plot(tt, trace) channel.set_frequency_spectrum(channel.get_frequency_spectrum() / response, sampling_rate=channel.get_sampling_rate()) if debug: trace = channel.get_trace() ax.plot(tt, trace, '--') plt.show()
[docs] def end(self): pass