bug fix due to tx_osnr add

tx_osnr was impacting automatic mode selection feature : this commit solves the error
+ add a novel version of the excel example with an empty mode cases

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
This commit is contained in:
EstherLerouzic
2018-12-19 15:22:03 +00:00
parent 8d97fcd735
commit 9cfb57dc4b
5 changed files with 25 additions and 18 deletions

Binary file not shown.

View File

@@ -10,7 +10,7 @@
"te-bandwidth": { "te-bandwidth": {
"technology": "flexi-grid", "technology": "flexi-grid",
"trx_type": "Voyager", "trx_type": "Voyager",
"trx_mode": "mode 1", "trx_mode": null,
"effective-freq-slot": [ "effective-freq-slot": [
{ {
"n": "null", "n": "null",
@@ -45,7 +45,7 @@
} }
], ],
"spacing": 50000000000.0, "spacing": 50000000000.0,
"max-nb-of-channel": 80, "max-nb-of-channel": null,
"output-power": 0.0012589254117941673, "output-power": 0.0012589254117941673,
"path_bandwidth": 0 "path_bandwidth": 0
} }
@@ -133,8 +133,8 @@
} }
], ],
"spacing": 50000000000.0, "spacing": 50000000000.0,
"max-nb-of-channel": 80, "max-nb-of-channel": null,
"output-power": 0.0012589254117941673, "output-power": null,
"path_bandwidth": 60000000000.0 "path_bandwidth": 60000000000.0
} }
}, },
@@ -152,7 +152,7 @@
"te-bandwidth": { "te-bandwidth": {
"technology": "flexi-grid", "technology": "flexi-grid",
"trx_type": "vendorA_trx-type1", "trx_type": "vendorA_trx-type1",
"trx_mode": "mode 2", "trx_mode": null,
"effective-freq-slot": [ "effective-freq-slot": [
{ {
"n": "null", "n": "null",
@@ -160,8 +160,8 @@
} }
], ],
"spacing": 75000000000.0, "spacing": 75000000000.0,
"max-nb-of-channel": 63, "max-nb-of-channel": null,
"output-power": 0.0019952623149688794, "output-power": null,
"path_bandwidth": 150000000000.0 "path_bandwidth": 150000000000.0
} }
}, },
@@ -188,7 +188,7 @@
], ],
"spacing": 75000000000.0, "spacing": 75000000000.0,
"max-nb-of-channel": 63, "max-nb-of-channel": 63,
"output-power": 0.0019952623149688794, "output-power": null,
"path_bandwidth": 20000000000.0 "path_bandwidth": 20000000000.0
} }
}, },

View File

@@ -69,6 +69,7 @@ def requests_from_json(json_data,equipment):
# nb_channel is computed based on min max frequency and spacing # nb_channel is computed based on min max frequency and spacing
trx_params = trx_mode_params(equipment,params['trx_type'],params['trx_mode'],True) trx_params = trx_mode_params(equipment,params['trx_type'],params['trx_mode'],True)
params.update(trx_params) params.update(trx_params)
print(trx_params['tx_osnr'])
# optical power might be set differently in the request. if it is indicated then the # optical power might be set differently in the request. if it is indicated then the
# params['power'] is updated # params['power'] is updated
if req['path-constraints']['te-bandwidth']['output-power']: if req['path-constraints']['te-bandwidth']['output-power']:
@@ -208,6 +209,7 @@ def compute_path_with_disjunction(network, equipment, pathreqlist, pathlist):
pathreq.tsp_mode = mode['format'] pathreq.tsp_mode = mode['format']
pathreq.format = mode['format'] pathreq.format = mode['format']
pathreq.OSNR = mode['OSNR'] pathreq.OSNR = mode['OSNR']
pathreq.tx_osnr = mode['tx_osnr']
pathreq.bit_rate = mode['bit_rate'] pathreq.bit_rate = mode['bit_rate']
else : else :
total_path = [] total_path = []

View File

@@ -173,6 +173,7 @@ def trx_mode_params(equipment, trx_type_variety='', trx_mode='', error_message=F
"OSNR": None, "OSNR": None,
"bit_rate": None, "bit_rate": None,
"roll_off": None, "roll_off": None,
"tx_osnr":None,
"cost":None} "cost":None}
trx_params = {**mode_params} trx_params = {**mode_params}
trx_params['frequency'] = equipment['Transceiver'][trx_type_variety].frequency trx_params['frequency'] = equipment['Transceiver'][trx_type_variety].frequency

View File

@@ -410,22 +410,26 @@ def propagate_and_optimize_mode(path, req, equipment, show=False):
if m['baud_rate'] == b] if m['baud_rate'] == b]
modes_to_explore = sorted(modes_to_explore, modes_to_explore = sorted(modes_to_explore,
key = lambda x: x['bit_rate'], reverse=True) key = lambda x: x['bit_rate'], reverse=True)
print(modes_to_explore)
# step2 : computes propagation for each baudrate: stop and select the first that passes # step2 : computes propagation for each baudrate: stop and select the first that passes
found_a_feasible_mode = False found_a_feasible_mode = False
# TODO : the case of roll of is not included: for now use SI one # TODO : the case of roll of is not included: for now use SI one
# TODO : if the loop in mode optimization does not have a feasible path, then bugs # TODO : if the loop in mode optimization does not have a feasible path, then bugs
for m in modes_to_explore :
si = create_input_spectral_information( si = create_input_spectral_information(
req.frequency['min'], equipment['SI']['default'].roll_off, req.frequency['min'], equipment['SI']['default'].roll_off,
b, req.power, req.spacing, req.nb_channel, req.tx_osnr) b, req.power, req.spacing, req.nb_channel, m['tx_osnr'])
for el in path: for el in path:
si = el(si) si = el(si)
if show : if show :
print(el) print(el)
for m in modes_to_explore : if path[-1].snr is not None:
if round(mean(path[-1].snr+lin2db(b/(12.5e9))),2) > m['OSNR'] : if round(mean(path[-1].snr+lin2db(b/(12.5e9))),2) > m['OSNR'] :
found_a_feasible_mode = True found_a_feasible_mode = True
return path, m return path, m
# only get to this point if no budrate/mode staisfies OSNR requirement else:
return [], None
# only get to this point if no baudrate/mode satisfies OSNR requirement
# returns the last propagated path and mode # returns the last propagated path and mode
msg = f'Warning! Request {req.request_id}: no mode satisfies path SNR requirement.\n' msg = f'Warning! Request {req.request_id}: no mode satisfies path SNR requirement.\n'
print(msg) print(msg)