Skip to content
Snippets Groups Projects
Commit b1811910 authored by Martin Killenberg's avatar Martin Killenberg
Browse files

feat: post analysis for RF cables

parent daf9f9b3
No related branches found
No related tags found
No related merge requests found
......@@ -3,7 +3,7 @@ import matplotlib.pyplot as plt
import numpy as np
from matplotlib import gridspec
def extract_stable_data(datafile, measurement_set, reference_signal_names):
def extract_stable_data(datafile, measurement_set, reference_signal_names, extra_signal_names):
datapoint = {}
# df is a pandas data frame
df = pd.read_csv(datafile)
......@@ -29,23 +29,32 @@ def extract_stable_data(datafile, measurement_set, reference_signal_names):
datapoint['humidity_mean'] = humidities.mean()
datapoint['humidity_var'] = humidities.var()
for extra_signal_name in extra_signal_names:
extra_signal_values = df.loc[(df['EQUILIBRIUM_INDICATOR'] == 31) & (df['SET_NAME'] == measurement_set), extra_signal_name]
datapoint[extra_signal_name] = extra_signal_values.mean()
return datapoint
# sweep_type is either 'temperature' or 'humidity'
def plot_sweep(temperatures, humidities, basename, sweep_type, measurement_sets, reference_signal_names, normalise = [True, False]):
def plot_sweep(temperatures, humidities, basename, sweep_type, measurement_sets, reference_signal_names,
analysis_config = {'type': 'rf_cable', 'normalise': [True, False], 'cable_length': 10,
'extra_signal_names' : ['RF_FREQUENCY']}):
set_data = {}
derivatives = {}
for measurement_set in measurement_sets:
set_data[measurement_set] = {'signal0_means': [], 'signal0_vars': [], 'signal1_means': [], 'signal1_vars': [],
'x_data': []}
for external_signal_name in analysis_config['extra_signal_names']:
set_data[measurement_set][external_signal_name] = []
derivatives[measurement_set] = {'signal0_deltas': [], 'signal1_deltas': [], 'x_deltas': []}
for temp, hum in zip(temperatures, humidities):
datafile = basename+'_'+str(temp)+'deg_'+str(hum)+'rh.csv'
print(datafile)
for measurement_set in measurement_sets:
datapoint = extract_stable_data(datafile, measurement_set, reference_signal_names)
datapoint = extract_stable_data(datafile, measurement_set, reference_signal_names,
analysis_config['extra_signal_names'])
if datapoint is None:
continue
......@@ -62,11 +71,14 @@ def plot_sweep(temperatures, humidities, basename, sweep_type, measurement_sets,
data['signal1_means'].append(datapoint['signal1_mean'])
data['signal1_vars'].append(datapoint['signal1_var'])
for external_signal_name in analysis_config['extra_signal_names']:
data[external_signal_name].append(datapoint[external_signal_name])
for measurement_set in measurement_sets:
data = set_data[measurement_set]
if normalise[0]:
if analysis_config['normalise'][0]:
data['signal0_means'] -= data['signal0_means'][0]
if normalise[1]:
if analysis_config['normalise'][1]:
data['signal1_means'] -= data['signal1_means'][0]
fig = plt.figure(figsize=(10, 15))
......@@ -78,9 +90,9 @@ def plot_sweep(temperatures, humidities, basename, sweep_type, measurement_sets,
fig.text(0.1, 0.9, upper_text_block)
ax1 = fig.add_subplot(gs[1, 0])
ax2 = fig.add_subplot(gs[2, 0],sharex=ax1)
ax2 = fig.add_subplot(gs[2, 0], sharex=ax1)
ax4 = fig.add_subplot(gs[4, 0])
ax5 = fig.add_subplot(gs[5, 0],sharex=ax4)
ax5 = fig.add_subplot(gs[5, 0], sharex=ax4)
ax1.tick_params(bottom=True, top=True, direction='in')
ax2.tick_params(bottom=True, top=True, direction='inout')
......@@ -132,12 +144,48 @@ def plot_sweep(temperatures, humidities, basename, sweep_type, measurement_sets,
(data['x_data'][i+1]+data['x_data'][i]))
deriv_data['x_deltas'].append((data['x_data'][i+1]+data['x_data'][i])/2)
ax4.scatter(derivatives[measurement_set]['x_deltas'], derivatives[measurement_set]['signal0_deltas'],marker='+', )
ax5.scatter(derivatives[measurement_set]['x_deltas'], derivatives[measurement_set]['signal1_deltas'],marker='+')
ax4.set_ylabel('$\\Delta$ '+reference_signal_names[0]+' '+denominator_name)
ax5.set_ylabel('$\\Delta$ '+reference_signal_names[1]+' '+denominator_name)
#######################################################################################################################
# RF cable post analysis: Normalise to cable length and convert phase to time
#######################################################################################################################
if analysis_config['type'] == 'rf_cable':
for measurement_set in measurement_sets:
data = set_data[measurement_set]
deriv_data = derivatives[measurement_set]
phase_to_time = 1e15 / (analysis_config['cable_length'] * data['RF_FREQUENCY'][0] * 360.)
deriv_data['signal0_deltas'][:] = [x * phase_to_time for x in deriv_data['signal0_deltas']]
deriv_data['signal1_deltas'][:] = [x / analysis_config['cable_length'] for x in deriv_data['signal1_deltas']]
ax4.set_ylabel('$\\Delta$t [fs/m/K]')
ax5.set_ylabel('$\\Delta$A [dB/m/K]')
#######################################################################################################################
# Closeout
#######################################################################################################################
#manual scaling if y axis. Auto is broken with scatter.
ax4_mins = []
ax4_maxs = []
ax5_mins = []
ax5_maxs = []
for measurement_set in measurement_sets:
ax4.scatter(derivatives[measurement_set]['x_deltas'], derivatives[measurement_set]['signal0_deltas'], marker='+')
ax5.scatter(derivatives[measurement_set]['x_deltas'], derivatives[measurement_set]['signal1_deltas'], marker='+')
ax4_mins.append(min(derivatives[measurement_set]['signal0_deltas']))
ax4_maxs.append(max(derivatives[measurement_set]['signal0_deltas']))
ax5_mins.append(min(derivatives[measurement_set]['signal1_deltas']))
ax5_maxs.append(max(derivatives[measurement_set]['signal1_deltas']))
# set auto y range which does not work properly for small values in scatter
dy4 = (max(ax4_maxs) - min(ax4_mins))*0.1
ax4.set_ylim(min(ax4_mins)-dy4, max(ax4_maxs)+dy4)
dy5 = (max(ax5_maxs) - min(ax5_mins))*0.1
ax5.set_ylim(min(ax5_mins)-dy5, max(ax5_maxs)+dy5)
fig.tight_layout() # otherwise the legend is clipped
fig.savefig(basename+measurement_set+'_analysis.pdf')
......
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