code/main.py (65 lines of code) (raw):

# This is a sample Python script. import pandas as pd import numpy as np from scipy import interpolate import matplotlib.pyplot as plt # load data berToGosnr = pd.read_json('data/ber-Gosnr.json') nfDictOla = pd.read_json('data/ola.json') nfDictOlr = pd.read_json('data/olr.json') ocm = pd.read_csv('data/ocm.csv') performance_elec = pd.read_csv('data/performance_elec.csv') performance_optical = pd.read_csv('data/performance_optical.csv') # take OMS1, OCH1, 2000-01-01 00:00:00 as example # device1---------device2, center frequency is 191.4THz time = '2000-01-01 00:00:00' center_frequency = 191.4e3 IL_ODF = 0.5 IL_O = 0.9 IL_I = 0.6 # ## get device1 power and configuration device = 1 locator = '/D1/OA-W/EGR_EDFA' optical_df = performance_optical[(performance_optical['time'] == time) & (performance_optical['device_name'] == device) & (performance_optical['logical_name'] == locator) & (performance_optical['item'] == 'outputTPM') & (performance_optical['stats_type'] == 'instant')] actual_gain_1 = optical_df['actual_gain'].values[0] # the EDFA gain of device 1 actual_gain_tilt_1 = optical_df['actual_gain_tilt'].values[0] # the EDFA gain tilt of device 1 pn_1 = optical_df['pn'].values[0] # the EDFA pn of device 1 power_1 = optical_df['value'].values[0] # the panel output power of device 1 edfa_power_1 = power_1 + IL_O # ### get device1 noise figure nf_gain_map = [] for edfa_dict in nfDictOlr['amplifier'].values: if edfa_dict['part-number'] == pn_1 and edfa_dict['type'] == 'BA': nf_gain_map = edfa_dict['noise-figure-map'] gain_points = [key_gain['gain'] for key_gain in nf_gain_map] nf_points = [key_nf['noise-figure'] for key_nf in nf_gain_map] tck = interpolate.interp1d(gain_points, nf_points, assume_sorted=False, kind=1) nf = tck(actual_gain_1) # ## get device1 ocm power of och1 locator = '/D1/OA-W/EGR_OCM' ocm_power_1 = ocm[(ocm['time'] == time) & (ocm['device_name'] == device) & (ocm['logical_name'] == locator)] # ## visualize the ocm cf = ocm_power_1['center_frequency'].values cf_1 = [191.4e3, 191.6e3, 191.8e3] power_list_1 = [3.4, 3.2, 3.3] power_list = ocm_power_1['power'].values plt.bar(cf/1e3, power_list, width=0.05) plt.bar(np.array(cf_1)/1e3, power_list_1, width = 0.05) plt.xlabel("Center frequency [THz]") plt.ylabel("Power [dBm]") plt.legend(['alien och', 'provided och']) plt.show() # ### calibrate the ocm ocm_power_sum_w = 0 for p_ii in ocm_power_1['power'].values: ocm_power_sum_w += np.power(10, p_ii / 10) ocm_power_sum = 10 * np.log10(ocm_power_sum_w) offset = ocm_power_sum - edfa_power_1 channel_power = ocm_power_1[ocm_power_1['center_frequency'] == center_frequency]['power'].values[0] # get the channel power of the edfa output # ## get device2 input power device = 1 locator = '/D1/OA-W/IGR_EDFA' optical_df_2 = performance_optical[(performance_optical['time'] == time) & (performance_optical['device_name'] == device) & (performance_optical['logical_name'] == locator) & (performance_optical['item'] == 'inputTPM') & (performance_optical['stats_type'] == 'instant')] power_2 = optical_df_2['value'].values[0] # the EDFA input power of device 1 # ## get fiber parameter fiber_output_power = power_2 - IL_ODF # the output power of fiber 1 fiber_input_power = power_1 - IL_ODF # the launch power of fiber 1 fiber_loss = fiber_input_power - fiber_output_power fiber_length = 74e3 # the fiber length of fiber 1 as shown in figure