Source code for NuRadioReco.detector.amp

import numpy as np
from NuRadioReco.utilities import units
from scipy import interpolate as intp
from matplotlib import pyplot as plt
import os


[docs]def get_amp_response(frequencies, amp_name): """ Get measured amplifier responses. Very simple script for currently NTU amps. """ # parse input file and convert to default units directory = os.path.dirname(os.path.abspath(__file__)) freqs2, phase, t = np.loadtxt(os.path.join( directory, 'amps/{}/LNA_PHASE.CSV'.format(amp_name)), unpack=True, skiprows=3, delimiter=',') freqs, logmag, t = np.loadtxt(os.path.join( directory, 'amps/{}/LNA_LOGMAG.CSV'.format(amp_name)), unpack=True, skiprows=3, delimiter=',') freqs *= units.Hz freqs2 *= units.Hz phase *= units.deg linmag = 10**(logmag / 20.) get_phase = intp.interp1d(freqs2, np.unwrap(phase)) get_linmag = intp.interp1d(freqs, linmag) amp_response = np.zeros_like(frequencies, dtype=complex) mask = (frequencies > max(freqs.min(), freqs2.min())) & (frequencies < min(freqs.max(), freqs2.max())) amp_response[mask] = get_linmag(frequencies[mask]) * np.exp(1j * get_phase(frequencies[mask])) return amp_response
if __name__ == "__main__": ff = np.linspace(10 * units.MHz, 500 * units.MHz, 100) df = ff[1] - ff[0] fig, (ax, ax2) = plt.subplots(1, 2) response = get_amp_response(ff, "NTU01") ax.plot(ff / units.MHz, np.abs(response)) group_delay = -1. / 2 / np.pi * np.diff(np.unwrap(np.angle(response))) / df # ax2.plot(ff / units.MHz, np.unwrap(np.angle(response1)) / units.deg) ax2.plot((ff[1:] + ff[:-1]) * 0.5 / units.MHz, group_delay / units.ns) ax.legend() ax2.legend() fig.tight_layout() plt.show()