import numpy as np
import json
import subprocess
import matplotlib.pyplot as plt
proc = subprocess.Popen(["otdrs", "data/example1-noyes-ofl280.sor"], stdout=subprocess.PIPE)
out = proc.communicate()[0]
otdrs_out = json.loads(out)
speed_of_light = 299792458.0 refractive_index = otdrs_out['fixed_parameters']['group_index'] / 100000.0
speed_of_light_in_fibre = speed_of_light / refractive_index
seconds_per_10k_points = (otdrs_out['fixed_parameters']['data_spacing'][0]/1e10) metres_per_data_spacing = (((seconds_per_10k_points/10000.0)) * speed_of_light_in_fibre) sf = otdrs_out['data_points']['scale_factors'][0]['scale_factor'] scaled_data = np.array(otdrs_out['data_points']['scale_factors'][0]['data'])/float(sf) seconds_to_front_panel = otdrs_out['fixed_parameters']['front_panel_offset']/1e10
seconds_to_launch_connector = otdrs_out['general_parameters']['user_offset']/1e10
metres_to_front_panel = seconds_to_front_panel * speed_of_light_in_fibre
metres_to_launch_connector = (seconds_to_launch_connector * speed_of_light_in_fibre) + metres_to_front_panel
def print_key_event(ke, sf, sol, fpo):
loss = ke['event_loss']/sf
reflectance = ke['event_reflectance']/sf
seconds_to_event = ke['event_propogation_time']/1e10
metres_to_event = (seconds_to_event * sol) + fpo
print("Event {}: {}dB loss, {}dB reflectance, {}m".format(ke['event_number'], loss, reflectance, metres_to_event))
for ke in otdrs_out['key_events']['key_events']:
print_key_event(ke, sf, speed_of_light_in_fibre, metres_to_front_panel)
print_key_event(otdrs_out['key_events']['last_key_event'], sf, speed_of_light_in_fibre, metres_to_front_panel)
print("E2E loss {}dB".format(otdrs_out['key_events']['last_key_event']['end_to_end_loss']/sf))
spacing = np.arange(0, metres_per_data_spacing*otdrs_out['data_points']['scale_factors'][0]['n_points'], metres_per_data_spacing)[0:otdrs_out['data_points']['scale_factors'][0]['n_points']]
plt.plot(spacing, scaled_data, linewidth=1, )
plt.axvline(x=metres_to_front_panel) plt.axvline(x=metres_to_launch_connector) plt.xlabel("Metres from OTDR module (not front panel/launch)")
plt.ylabel("dB")
plt.gca().invert_yaxis()
plt.show()