Skip to content
Snippets Groups Projects
Commit 0d04d097 authored by Mattia Mancini's avatar Mattia Mancini
Browse files

SSB-44: refactored code to improve understanding

parent 27a021dc
No related branches found
No related tags found
1 merge request!44Merge back holography to master
...@@ -65,6 +65,17 @@ def average_values_by_sample(data_array, window_size, field_name=None): ...@@ -65,6 +65,17 @@ def average_values_by_sample(data_array, window_size, field_name=None):
return result return result
def is_datatable_completely_flagged(data_table: numpy.ndarray):
"""
Checks if the datatable is entirely flagged
:param data_table: input data
:return: if the data is completely flagged
:rtype: bool
"""
flags = numpy.array(data_table)['flag']
return numpy.product(flags)
def _average_datatable_with_function(data_table_in, parameter, expected_array_size, function): def _average_datatable_with_function(data_table_in, parameter, expected_array_size, function):
field_names_mean = [] field_names_mean = []
formats_mean = [] formats_mean = []
...@@ -100,8 +111,7 @@ def _average_datatable_with_function(data_table_in, parameter, expected_array_si ...@@ -100,8 +111,7 @@ def _average_datatable_with_function(data_table_in, parameter, expected_array_si
fields_to_average = list(data_table_in.dtype.names) fields_to_average = list(data_table_in.dtype.names)
fields_to_average.remove('flag') fields_to_average.remove('flag')
flags = numpy.array(data_table_in)['flag'] is_flagged = is_datatable_completely_flagged(data_table_in)
is_flagged = numpy.product(flags) == True
for field_name in fields_to_average: for field_name in fields_to_average:
datatable_values = numpy.array(data_table_in) datatable_values = numpy.array(data_table_in)
...@@ -166,7 +176,6 @@ def average_datatable(data_table_in): ...@@ -166,7 +176,6 @@ def average_datatable(data_table_in):
return result return result
def average_datatable_by_time_interval(data_table_in, time_interval): def average_datatable_by_time_interval(data_table_in, time_interval):
""" """
Average the datatable with a given sample time interval window Average the datatable with a given sample time interval window
...@@ -344,7 +353,6 @@ def average_data(input_data_table): ...@@ -344,7 +353,6 @@ def average_data(input_data_table):
return out_data return out_data
def _compute_size_of_new_array(array_size, window_size): def _compute_size_of_new_array(array_size, window_size):
""" """
Round up the array size given a window size. Round up the array size given a window size.
...@@ -364,7 +372,7 @@ def _compute_size_of_new_array(array_size, window_size): ...@@ -364,7 +372,7 @@ def _compute_size_of_new_array(array_size, window_size):
return new_array_size return new_array_size
def _weigthed_average_data_per_polarization(input_dataset, output_dataset, def _weighted_average_data_per_polarization(input_dataset, output_dataset,
real_weights, imag_weights, polarization): real_weights, imag_weights, polarization):
mask = input_dataset['flag'] == False mask = input_dataset['flag'] == False
try: try:
...@@ -379,6 +387,60 @@ def _weigthed_average_data_per_polarization(input_dataset, output_dataset, ...@@ -379,6 +387,60 @@ def _weigthed_average_data_per_polarization(input_dataset, output_dataset,
output_dataset['flag'] = True output_dataset['flag'] = True
def __prepare_input_to_weight_dataset(stations, frequency, beam,
input_data_table):
"""
Prepare the input data for the weighted average
:param stations: list of stations to iterate on
:type stations: (str)
:param frequency: frequency ID
:type frequency: str
:param beam: beam ID
:type beam: str
:param input_data_table: data to iterate over
:return: the average values,
the standard deviation of the real part,
the standard deviation of the imaginary part
:rtype: list(numpy.ndarray, numpy.ndarray, numpy.ndarray)
"""
n_stations = len(stations)
average_per_beam_station = numpy.zeros(n_stations, dtype=HDS_data_sample_type)
std_real_per_beam_station = numpy.zeros(n_stations, dtype=HDS_data_sample_type)
std_imag_per_beam_station = numpy.zeros(n_stations, dtype=HDS_data_sample_type)
for i, station in enumerate(stations):
data_per_station_frequency_beam = \
input_data_table[station][str(frequency)][beam]
average_per_beam_station['XX'][i] = data_per_station_frequency_beam['mean']['XX']
average_per_beam_station['XY'][i] = data_per_station_frequency_beam['mean']['XY']
average_per_beam_station['YX'][i] = data_per_station_frequency_beam['mean']['YX']
average_per_beam_station['YY'][i] = data_per_station_frequency_beam['mean']['YY']
average_per_beam_station['l'][i] = data_per_station_frequency_beam['mean']['l']
average_per_beam_station['m'][i] = data_per_station_frequency_beam['mean']['m']
std_real_per_beam_station['XX'][i] = \
data_per_station_frequency_beam['std']['XX_real']
std_real_per_beam_station['XY'][i] = \
data_per_station_frequency_beam['std']['XY_real']
std_real_per_beam_station['YX'][i] = \
data_per_station_frequency_beam['std']['YX_real']
std_real_per_beam_station['YY'][i] = \
data_per_station_frequency_beam['std']['YY_real']
std_imag_per_beam_station['XX'][i] = \
data_per_station_frequency_beam['std']['XX_imag']
std_imag_per_beam_station['XY'][i] = \
data_per_station_frequency_beam['std']['XY_imag']
std_imag_per_beam_station['YX'][i] = \
data_per_station_frequency_beam['std']['YX_imag']
std_imag_per_beam_station['YY'][i] = \
data_per_station_frequency_beam['std']['YY_imag']
return average_per_beam_station, std_real_per_beam_station, std_imag_per_beam_station
def weighted_average_dataset_per_station(dataset, input_data_table): def weighted_average_dataset_per_station(dataset, input_data_table):
""" """
Perform a weighted average of the dataset using the std deviations in the input data Perform a weighted average of the dataset using the std deviations in the input data
...@@ -389,7 +451,7 @@ def weighted_average_dataset_per_station(dataset, input_data_table): ...@@ -389,7 +451,7 @@ def weighted_average_dataset_per_station(dataset, input_data_table):
:return: :return:
""" """
stations = dataset.reference_stations stations = dataset.reference_stations
n_stations = len(stations)
frequencies = dataset.frequencies frequencies = dataset.frequencies
beams = dataset.beamlets beams = dataset.beamlets
...@@ -403,41 +465,11 @@ def weighted_average_dataset_per_station(dataset, input_data_table): ...@@ -403,41 +465,11 @@ def weighted_average_dataset_per_station(dataset, input_data_table):
beam_str = str(beam) beam_str = str(beam)
result_per_beam = numpy.zeros(1, dtype=HDS_data_sample_type) result_per_beam = numpy.zeros(1, dtype=HDS_data_sample_type)
average_per_beam_station = numpy.zeros(n_stations, dtype=HDS_data_sample_type) average_per_beam_station, std_real_per_beam_station, std_imag_per_beam_station = \
std_real_per_beam_station = numpy.zeros(n_stations, dtype=HDS_data_sample_type) __prepare_input_to_weight_dataset(stations, frequency, beam_str, input_data_table)
std_imag_per_beam_station = numpy.zeros(n_stations, dtype=HDS_data_sample_type)
for i, station in enumerate(stations):
data_per_station_frequency_beam = \
input_data_table[station][str(frequency)][beam_str]
average_per_beam_station['XX'][i] = data_per_station_frequency_beam['mean']['XX']
average_per_beam_station['XY'][i] = data_per_station_frequency_beam['mean']['XY']
average_per_beam_station['YX'][i] = data_per_station_frequency_beam['mean']['YX']
average_per_beam_station['YY'][i] = data_per_station_frequency_beam['mean']['YY']
average_per_beam_station['l'][i] = data_per_station_frequency_beam['mean']['l']
average_per_beam_station['m'][i] = data_per_station_frequency_beam['mean']['m']
std_real_per_beam_station['XX'][i] = \
data_per_station_frequency_beam['std']['XX_real']
std_real_per_beam_station['XY'][i] = \
data_per_station_frequency_beam['std']['XY_real']
std_real_per_beam_station['YX'][i] = \
data_per_station_frequency_beam['std']['YX_real']
std_real_per_beam_station['YY'][i] = \
data_per_station_frequency_beam['std']['YY_real']
std_imag_per_beam_station['XX'][i] = \
data_per_station_frequency_beam['std']['XX_imag']
std_imag_per_beam_station['XY'][i] = \
data_per_station_frequency_beam['std']['XY_imag']
std_imag_per_beam_station['YX'][i] = \
data_per_station_frequency_beam['std']['YX_imag']
std_imag_per_beam_station['YY'][i] = \
data_per_station_frequency_beam['std']['YY_imag']
for polarization in ['XX', 'XY', 'YX', 'YY']: for polarization in ['XX', 'XY', 'YX', 'YY']:
_weigthed_average_data_per_polarization(average_per_beam_station, _weighted_average_data_per_polarization(average_per_beam_station,
result_per_beam, result_per_beam,
std_real_per_beam_station, std_real_per_beam_station,
std_imag_per_beam_station, std_imag_per_beam_station,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment