Source code for NuRadioReco.detector.ARIANNA.preprocessAmpResponses

import numpy as np
import os
from NuRadioReco.utilities import units
import logging
import pickle

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


[docs]def save_preprocessed_Amps(response, amp_name): output_filename = '{}.pkl'.format(amp_name) with open(output_filename, 'wb') as fout: logger.info('saving output to {}'.format(output_filename)) pickle.dump(response, fout, protocol=4)
[docs]def preprocess_300Amp(amp, channel, path="HardwareResponses/"): """ preprocess individual 300 series measurements Parameters ---------- amp: string amp series - box number - and channel. Ex: 300-01 channel: int channel id path: string directory where amp responses are located. Default is "HardwareResponses/" """ # load null measurement amp_gain_db = np.loadtxt(os.path.join(path, 'LOGMAG_NULL.CSV'), skiprows=3, delimiter=',') ph = os.path.join(path, 'PHASE_NULL.CSV') amp_phase_discrete = np.loadtxt(ph, skiprows=3, delimiter=',') # Convert to GHz and add 40dB for attenuation in measurement circuit amp_gain_db[:, 0] *= units.Hz amp_phase_discrete[:, 0] *= units.Hz amp_phase_discrete[:, 1] *= units.deg if not np.allclose(amp_gain_db[:, 0], amp_phase_discrete[:, 0]): raise ValueError("frequencies of gain and phase measurement are not equal for NULL measurement") amp_gain_db[:, 1] += 40 # 300 series amps gain_lin = 10 ** (amp_gain_db[:, 1] / 20.) response_null = gain_lin * np.exp(1j * amp_phase_discrete[:, 1]) # read in individual amp measurement path = os.path.join(path, 'Box' + amp) ch_name = '_CH{:d}.CSV'.format(channel) amp_gain_db = np.loadtxt(os.path.join(path, 'LOGMAG' + ch_name), skiprows=3, delimiter=',') ph = os.path.join(path, 'PHASE' + ch_name) amp_phase_discrete = np.loadtxt(ph, skiprows=3, delimiter=',') # Convert to GHz and add 40dB for attenuation in measurement circuit amp_gain_db[:, 0] *= units.Hz amp_phase_discrete[:, 0] *= units.Hz amp_phase_discrete[:, 1] *= units.deg ff = amp_gain_db[:, 0] if not np.allclose(amp_gain_db[:, 0], amp_phase_discrete[:, 0]): raise ValueError("frequencies of gain and phase measurement are not equal for {}-{:02d}".format(amp, channel)) amp_gain_db[:, 1] += 40 # 300 series amps gain_lin = 10 ** (amp_gain_db[:, 1] / 20.) r = gain_lin * np.exp(1j * amp_phase_discrete[:, 1]) response = {} response['freqs'] = ff response['response'] = r / response_null amplifier_response = {} amp_name = '{}-{:02d}'.format(amp, channel) amplifier_response[amp_name] = response # checkGroupDelay(get_amp_gain(ff)*get_amp_phase(ff),ff,ch_name,path) save_preprocessed_Amps(amplifier_response, amp_name)
if __name__ == "__main__": for i in range(8): preprocess_300Amp('300-03', i, path='HardwareResponses/300SeriesAmpBoxes')