From c8c80aee1b86493ed2ea12446e10ae10531a405b Mon Sep 17 00:00:00 2001 From: EstherLerouzic Date: Mon, 12 Feb 2024 15:05:46 +0100 Subject: [PATCH] Add tilt computation for design targets Compute the tilts only if raman-flag in sim_params is turned on. Use actual input power in fiber (according to expected propagation during design). Creates a function that computes the expected tilt after propagation in a span, and returns the normalized power difference at the center frequency of each band, and the tilt experenced between lower and upper frequency in each band. Include the expected tilt when computing target gains of amplifiers. Current function requires that the bands remain in the same order. (ordering is ensured when creating the objects). Change-Id: I28bdf13f2010153175e8b6d199fd8eea15d7b292 --- gnpy/core/elements.py | 32 +-- gnpy/core/network.py | 225 ++++++++++++++++-- gnpy/core/parameters.py | 2 +- tests/data/eqpt_config.json | 3 +- tests/invocation/multiband_transmission | 4 + .../openroadm-v4-Stockholm-Gothenburg | 11 + .../openroadm-v5-Stockholm-Gothenburg | 11 + .../spectrum1_transmission_main_example | 2 + .../spectrum2_transmission_main_example | 2 + tests/invocation/transmission_long_pow | 19 ++ tests/invocation/transmission_long_psd | 19 ++ tests/invocation/transmission_long_psw | 19 ++ tests/invocation/transmission_main_example | 1 + .../transmission_main_example__raman | 1 + .../invocation/transmission_main_example_long | 19 ++ tests/invocation/transmission_saturated | 2 + tests/test_amplifier.py | 2 + tests/test_equalization.py | 12 +- tests/test_logger.py | 4 +- tests/test_network_functions.py | 78 +++++- 20 files changed, 418 insertions(+), 50 deletions(-) diff --git a/gnpy/core/elements.py b/gnpy/core/elements.py index ab11bb814..5acdd1f0e 100644 --- a/gnpy/core/elements.py +++ b/gnpy/core/elements.py @@ -913,19 +913,22 @@ def __init__(self, *args, params=None, operational=None, **kwargs): @property def to_json(self): - return {'uid': self.uid, - 'type': type(self).__name__, - 'type_variety': self.params.type_variety, - 'operational': { - 'gain_target': round(self.effective_gain, 6) if self.effective_gain else None, - 'delta_p': self.delta_p, - 'tilt_target': self.tilt_target, # defined per lambda on the amp band - 'out_voa': self.out_voa - }, - 'metadata': { - 'location': self.metadata['location']._asdict() - } - } + _to_json = { + 'uid': self.uid, + 'type': type(self).__name__, + 'type_variety': self.params.type_variety, + 'operational': { + 'gain_target': round(self.effective_gain, 6) if self.effective_gain else None, + 'delta_p': self.delta_p, + 'tilt_target': round(self.tilt_target, 5) if self.tilt_target is not None else None, + # defined per lambda on the amp band + 'out_voa': self.out_voa + }, + 'metadata': { + 'location': self.metadata['location']._asdict() + } + } + return _to_json def __repr__(self): return (f'{type(self).__name__}(uid={self.uid!r}, ' @@ -947,7 +950,8 @@ def __str__(self): return '\n'.join([f'{type(self).__name__} {self.uid}', f' type_variety: {self.params.type_variety}', f' effective gain(dB): {self.effective_gain:.2f}', - f' (before att_in and before output VOA)', + ' (before att_in and before output VOA)', + f' tilt-target(dB) {self.tilt_target:.2f}', f' noise figure (dB): {nf:.2f}', f' (including att_in)', f' pad att_in (dB): {self.att_in:.2f}', diff --git a/gnpy/core/network.py b/gnpy/core/network.py index af1cca845..88f734daf 100644 --- a/gnpy/core/network.py +++ b/gnpy/core/network.py @@ -12,12 +12,13 @@ from collections import namedtuple from functools import reduce from logging import getLogger -from typing import Tuple, List, Optional, Union +from typing import Tuple, List, Optional, Union, Dict from networkx import DiGraph +from numpy import allclose import warnings from gnpy.core import elements -from gnpy.core.equipment import find_type_varieties +from gnpy.core.equipment import find_type_variety, find_type_varieties from gnpy.core.exceptions import ConfigurationError, NetworkTopologyError from gnpy.core.utils import round2float, convert_length, psd2powerdbm, lin2db, watt2dbm, dbm2watt, automatic_nch, \ find_common_range @@ -137,7 +138,7 @@ def select_edfa(raman_allowed: bool, gain_target: float, power_target: float, ed return selected_edfa.variety, power_reduction -def target_power(network, node, equipment): # get_fiber_dp +def target_power(network, node, equipment, deviation_db): # get_fiber_dp """Computes target power using J. -L. Auge, V. Curri and E. Le Rouzic, Open Design for Multi-Vendor Optical Networks, OFC 2019. equation 4 @@ -148,7 +149,8 @@ def target_power(network, node, equipment): # get_fiber_dp SPAN_LOSS_REF = 20 POWER_SLOPE = 0.3 dp_range = list(equipment['Span']['default'].delta_power_range_db) - node_loss = span_loss(network, node, equipment) + node_loss = span_loss(network, node, equipment) + deviation_db + try: dp = round2float((node_loss - SPAN_LOSS_REF) * POWER_SLOPE, dp_range[2]) dp = max(dp_range[0], dp) @@ -264,6 +266,154 @@ def span_loss(network, node, equipment, input_power=None): return loss - gain +def estimate_srs_power_deviation(network: DiGraph, last_node, equipment: dict, design_bands: dict, input_powers: dict) \ + -> List[dict]: + """Estimate tilt of power accross the design bands. + If Raman flag is on (sim-params), then estimate the bands center frequency power and the + power tilt within each band. + Uses stimulated_raman_scattering loss_profile. This may be time consuming. + + Args: + network: The network object. + last_node: The last node (Fiber or RamanFiber) of the considered span. The span may be made of + a succession of fiber and fused elements + equipment: The equipment parameters dictionary. + design_bands: The dictionary of design bands. + input_powers: The dictionary of input powers in the fiber span for each design band. + + Returns: + A list of dictionnary containing the power at band centers and the tilt within each band. + """ + # Get reference channel parameters + roll_off = equipment['SI']['default'].roll_off + baud_rate = equipment['SI']['default'].baud_rate + spacing = equipment['SI']['default'].spacing + tx_osnr = equipment['SI']['default'].tx_osnr + + # Create input spectral information for the first design band + band_name0 = list(design_bands.keys())[0] + band0 = design_bands[band_name0] + spectral_information = \ + create_input_spectral_information(f_min=band0['f_min'], f_max=band0['f_max'], roll_off=roll_off, + baud_rate=baud_rate, spacing=spacing, + tx_osnr=tx_osnr, tx_power=input_powers[band_name0]) + + # Create input spectral information for the remaining design bands + for band_name, band in list(design_bands.items())[1:]: + spectral_information = spectral_information + \ + create_input_spectral_information(f_min=band['f_min'], f_max=band['f_max'], roll_off=roll_off, + baud_rate=baud_rate, spacing=spacing, + tx_osnr=tx_osnr, tx_power=input_powers[band_name]) + + # collect preceding nodes Fiber and Fused + prev_nodes = [n for n in prev_node_generator(network, last_node)] + prev_nodes.append(last_node) + + for elem in prev_nodes: + # compute SRS tilt + if isinstance(elem, elements.Fiber): + # computes the power profile and resulting srs_power_deviation after each fiber span + srs = RamanSolver.calculate_stimulated_raman_scattering(spectral_information, fiber=elem) + # records per band + srs_power_deviation = [] + center_frequency_powers = [] + for band_name, band in design_bands.items(): + # find center frequency power + center_frequency = (band['f_max'] + band['f_min']) / 2 + center_frequency_index = abs(srs.frequency - center_frequency).argmin() + center_frequency_power = srs.power_profile[center_frequency_index][-1] + center_frequency_powers.append(center_frequency_power / input_powers[band_name]) + index_f_min = abs(srs.frequency - band['f_min']).argmin() + index_f_max = abs(srs.frequency - band['f_max']).argmin() + srs_power_deviation.append({'center_frequency_power': center_frequency_power / input_powers[band_name], + 'in_band_power_deviation_db': watt2dbm(srs.power_profile[index_f_min][-1]) + - watt2dbm(srs.power_profile[index_f_max][-1])}) + # apply the attenuation due to the fiber losses + # apply attenuation for possible next fiber in the list + # (computes the srs_power_deviation for the whole list) + attenuation_fiber = srs.loss_profile[:spectral_information.number_of_channels, -1] + spectral_information.apply_attenuation_lin(attenuation_fiber) + elif isinstance(elem, elements.Fused): + spectral_information.apply_attenuation_db(elem.loss) + else: + # to be removed when patch is finished + raise ValueError('unexpected type. supported types for srs_power_deviation estimation are Fiber and Fused') + return srs_power_deviation + + +def compute_band_power_deviation_and_tilt(srs_power_deviation, design_bands: dict, ratio: float = 0.8): + """Compute the power difference between bands (at center frequency) and the power tilt within each + band. + + Args: + srs_power_deviation: The list of dictionnary containing the power at band centers and the tilt within each band. + ratio: the ratio applied to compute the band tilt + Returns: + A tupple of dict containing the relative power deviation with respect to max value, per band in dB and the tilt + target to apply for each band. + """ + # if there is no SRS computed, there is no tilt, and the result should be zero for tilt estimation + # else, let's use the power difference between bands (due to SRS) to estimate the tilt between bands, + # and apply these values with a ratio to the next amplifier gain target, to compensate for this difference. + deviation_db = {} + tilt_target = {} + max_center_frequency_powers = max([e['center_frequency_power'] for e in srs_power_deviation]) + for band_name, tilt_elem in zip(design_bands.keys(), srs_power_deviation): + deviation_db[band_name] = watt2dbm(ratio * max_center_frequency_powers) \ + - watt2dbm(tilt_elem['center_frequency_power']) + tilt_target[band_name] = tilt_elem['in_band_power_deviation_db'] + if allclose([t['in_band_power_deviation_db'] for t in srs_power_deviation], 0, atol=1e-9): + for band_name in design_bands.keys(): + deviation_db[band_name] = 0.0 + tilt_target[band_name] = 0.0 + return deviation_db, tilt_target + + +def compute_tilt_using_previous_and_next_spans(prev_node, next_node, design_bands: List[str], + input_powers: Dict[str, float], equipment: dict, network: DiGraph, prev_weight: float = 1.0, + next_weight: float = 0) -> Tuple[Dict[str, float], Dict[str, float]]: + """Compute the power deviation per band and the tilt target based on previous and next spans. + + This function estimates the power deviation between center frequencies due to previous span and + the tilt within each band using the previous and next fiber spans with a weight (default ony uses + previous span contribution). + + Args: + prev_node: The previous node in the network. + next_node: The next node in the network. + design_bands (List[str]): A list of design bands for which the tilt is computed. + input_powers (Dict[str, float]): A dictionary of input powers for each design band. + equipment (dict): Equipment specifications. + network (DiGraph): The network graph. + prev_weight (float): Weight for the previous tilt in the target calculation (default is 1.0). + next_weight (float): Weight for the next tilt in the target calculation (default is 0.0). + + Returns: + Tuple[Dict[str, float], Dict[str, float]]: + - A dictionary containing the tilt estimation for each design band. + - A dictionary containing the tilt target for each design band. + """ + tilt_estimation = {band: 0 for band in design_bands} + prev_tilt_target = {band: 0 for band in design_bands} + next_tilt_target = {band: 0 for band in design_bands} + if isinstance(prev_node, (elements.Fiber)): + # get the estimated tilt on previous span + srs_power_deviation = estimate_srs_power_deviation(network, prev_node, equipment, design_bands=design_bands, + input_powers=input_powers) + tilt_estimation, prev_tilt_target = compute_band_power_deviation_and_tilt(srs_power_deviation, + design_bands=design_bands, ratio=0.86) + if isinstance(next_node, (elements.Fiber)): + # get estimated tilt on next span + # use the same input powers (approximation!) since current amp dp and voa have not yet been computed + srs_power_deviation = estimate_srs_power_deviation(network, find_last_node(network, next_node), equipment, + design_bands=design_bands, input_powers=input_powers) + _, next_tilt_target = compute_band_power_deviation_and_tilt(srs_power_deviation, design_bands=design_bands, + ratio=0.86) + tilt_target = {band_name: prev_weight * prev_t + next_weight * next_tilt_target[band_name] + for band_name, prev_t in prev_tilt_target.items()} + return tilt_estimation, tilt_target + + def find_first_node(network, node): """Fused node interest: returns the 1st node at the origin of a succession of fused nodes @@ -340,8 +490,8 @@ def check_oms_single_type(oms_edges: List[Tuple]) -> List[str]: return list(types) -def compute_gain_power_target(node: elements.Edfa, prev_node, next_node, power_mode: bool, prev_voa: float, prev_dp: float, - pref_total_db: float, network: DiGraph, equipment: dict) \ +def compute_gain_power_and_tilt_target(node: elements.Edfa, prev_node, next_node, power_mode: bool, prev_voa: float, prev_dp: float, + pref_total_db: float, network: DiGraph, equipment: dict, deviation_db: float, tilt_target: float) \ -> Tuple[float, float, float, float, float]: """Computes the gain and power targets for a given EDFA node. @@ -355,6 +505,8 @@ def compute_gain_power_target(node: elements.Edfa, prev_node, next_node, power_m pref_total_db (float): The reference total power in dB. network (DiGraph): The network. equipment (dict): A dictionary containing equipment specifications. + deviation_db (float): Power deviation due to band tilt during propagation before crossing this node. + tilt_target (float) : Tilt target to be configured on this amp for its amplification band. Returns: Tuple[float, float, float, float, float]: A tuple containing: @@ -367,18 +519,22 @@ def compute_gain_power_target(node: elements.Edfa, prev_node, next_node, power_m node_loss = span_loss(network, prev_node, equipment) voa = node.out_voa if node.out_voa else 0 if node.operational.delta_p is None: - dp = target_power(network, next_node, equipment) + voa + dp = target_power(network, next_node, equipment, deviation_db) + voa else: dp = node.operational.delta_p if node.effective_gain is None or power_mode: - gain_target = node_loss + dp - prev_dp + prev_voa + gain_target = node_loss + deviation_db + dp - prev_dp + prev_voa else: # gain mode with effective_gain gain_target = node.effective_gain - dp = prev_dp - node_loss - prev_voa + gain_target + dp = prev_dp - (node_loss + deviation_db) - prev_voa + gain_target + if node.operational.tilt_target is None: + _tilt_target = -tilt_target + else: + _tilt_target = node.operational.tilt_target power_target = pref_total_db + dp - return gain_target, power_target, dp, voa, node_loss + return gain_target, power_target, _tilt_target, dp, voa, node_loss def filter_edfa_list_based_on_targets(edfa_eqpt: dict, power_target: float, gain_target: float, @@ -472,8 +628,8 @@ def filter_edfa_list_based_on_targets(edfa_eqpt: dict, power_target: float, gain def preselect_multiband_amps(_amplifiers: dict, prev_node, next_node, power_mode: bool, prev_voa: dict, prev_dp: dict, pref_total_db: float, network: DiGraph, equipment: dict, restrictions: List, - _design_bands: dict): - """Preselect multiband amplifiers that are eligible with respect to power and gain target + _design_bands: dict, deviation_db: dict, tilt_target: dict): + """Preselect multiband amplifiers that are eligible with respect to power, gain and tilt target on all the bands. At this point, the restrictions list already includes constraint related to variety_list, @@ -493,6 +649,8 @@ def preselect_multiband_amps(_amplifiers: dict, prev_node, next_node, power_mode equipment: The equipment. restrictions (list of equipment name): The restrictions. _design_bands (dict): The design bands. + deviation_db (dict): The tilt power per band. + tilt_target (dict): The tilt target in each band. Returns: list: A list of preselected multiband amplifiers that are eligible for all the bands. @@ -508,12 +666,12 @@ def preselect_multiband_amps(_amplifiers: dict, prev_node, next_node, power_mode for m in _selected_type_varieties for t in equipment['Edfa'][m].multi_band if equipment['Edfa'][t].f_min <= _design_bands[band]['f_min'] and equipment['Edfa'][t].f_max >= _design_bands[band]['f_max']} - # get the target gain and power based on previous propagation - gain_target, power_target, _, _, _ = \ - compute_gain_power_target(amp, prev_node, next_node, power_mode, prev_voa[band], prev_dp[band], - pref_total_db, network, equipment) + # get the target gain, power and tilt based on previous propagation + gain_target, power_target, _tilt_target, _, _, _ = \ + compute_gain_power_and_tilt_target(amp, prev_node, next_node, power_mode, prev_voa[band], prev_dp[band], + pref_total_db, network, equipment, deviation_db[band], tilt_target[band]) _selection = [a.variety - for a in filter_edfa_list_based_on_targets(edfa_eqpt, power_target, gain_target, None, + for a in filter_edfa_list_based_on_targets(edfa_eqpt, power_target, gain_target, _tilt_target, target_extended_gain)] listes = find_type_varieties(_selection, equipment) _selected_type_varieties = [] @@ -525,8 +683,9 @@ def preselect_multiband_amps(_amplifiers: dict, prev_node, next_node, power_mode def set_one_amplifier(node: elements.Edfa, prev_node, next_node, power_mode: bool, prev_voa: float, prev_dp: float, - pref_ch_db: float, pref_total_db: float, network: DiGraph, restrictions: List[str], - equipment: dict, verbose: bool) -> Tuple[float, float]: + pref_ch_db: float, pref_total_db: float, network: DiGraph, restrictions: List[str], + equipment: dict, verbose: bool, deviation_db: float = 0.0, tilt_target: float = 0.0) \ + -> Tuple[float, float]: """Set the EDFA amplifier configuration based on power targets: This function adjusts the amplifier settings according to the specified parameters and @@ -550,9 +709,9 @@ def set_one_amplifier(node: elements.Edfa, prev_node, next_node, power_mode: boo Returns: tuple[float, float]: The updated delta power and variable optical attenuator values. """ - gain_target, power_target, dp, voa, node_loss = \ - compute_gain_power_target(node, prev_node, next_node, power_mode, prev_voa, prev_dp, - pref_total_db, network, equipment) + gain_target, power_target, _tilt_target, dp, voa, node_loss = \ + compute_gain_power_and_tilt_target(node, prev_node, next_node, power_mode, prev_voa, prev_dp, + pref_total_db, network, equipment, deviation_db, tilt_target) if isinstance(prev_node, elements.Fiber): max_fiber_lineic_loss_for_raman = \ equipment['Span']['default'].max_fiber_lineic_loss_for_raman * 1e-3 # dB/m @@ -604,6 +763,7 @@ def set_one_amplifier(node: elements.Edfa, prev_node, next_node, power_mode: boo node.delta_p = dp if power_mode else None node.effective_gain = gain_target + node.tilt_target = _tilt_target # if voa is not set, then set it and possibly optimize it with gain and update delta_p and # effective_gain values set_amplifier_voa(node, power_target, power_mode) @@ -730,7 +890,12 @@ def set_egress_amplifier(network: DiGraph, this_node: Union[elements.Roadm, elem voa[band_name] = 0 for node, next_node in oms_nodes: - # go through all nodes in the OMS (loop until next Roadm instance) + # go through all nodes in the OMS + input_powers = {band_name: dbm2watt(pref_ch_db + prev_dp[band_name] - prev_voa[band_name]) + for band_name in _design_bands} + deviation_db, tilt_target = \ + compute_tilt_using_previous_and_next_spans(prev_node, next_node, _design_bands, input_powers, + equipment, network) if isinstance(node, elements.Edfa): band_name, _ = next((n, b) for n, b in _design_bands.items()) restrictions = get_node_restrictions(node, prev_node, next_node, equipment, _design_bands) @@ -755,7 +920,8 @@ def set_egress_amplifier(network: DiGraph, this_node: Union[elements.Roadm, elem restrictions_edfa = \ preselect_multiband_amps(node.amplifiers, prev_node, next_node, power_mode, prev_voa, prev_dp, pref_total_db, - network, equipment, restrictions_multi, _design_bands) + network, equipment, restrictions_multi, _design_bands, + deviation_db=deviation_db, tilt_target=tilt_target) for band_name, amp in node.amplifiers.items(): _restrictions = [n for n in restrictions_edfa if equipment['Edfa'][n].f_min <= _design_bands[band_name]['f_min'] @@ -763,7 +929,16 @@ def set_egress_amplifier(network: DiGraph, this_node: Union[elements.Roadm, elem dp[band_name], voa[band_name] = \ set_one_amplifier(amp, prev_node, next_node, power_mode, prev_voa[band_name], prev_dp[band_name], - pref_ch_db, pref_total_db, network, _restrictions, equipment, verbose) + pref_ch_db, pref_total_db, network, _restrictions, equipment, verbose, + deviation_db=deviation_db[band_name], tilt_target=tilt_target[band_name]) + amps_type_varieties = [a.type_variety for a in node.amplifiers.values()] + try: + node.type_variety = find_type_variety(amps_type_varieties, equipment) + except ConfigurationError as e: + # should never come here... only for debugging + msg = f'In {node.uid}: {e}' + raise ConfigurationError(msg) + prev_dp.update(**dp) prev_voa.update(**voa) prev_node = node diff --git a/gnpy/core/parameters.py b/gnpy/core/parameters.py index 0c4458d2d..7d0fb6084 100644 --- a/gnpy/core/parameters.py +++ b/gnpy/core/parameters.py @@ -604,7 +604,7 @@ class EdfaOperational: 'gain_target': None, 'delta_p': None, 'out_voa': None, - 'tilt_target': 0 + 'tilt_target': None } def __init__(self, **operational): diff --git a/tests/data/eqpt_config.json b/tests/data/eqpt_config.json index 49d5f6032..a0f3e8dc3 100644 --- a/tests/data/eqpt_config.json +++ b/tests/data/eqpt_config.json @@ -162,6 +162,7 @@ } ], "SI": [{ + "type_variety": "default", "f_min": 191.3e12, "f_max": 196.1e12, "baud_rate": 32e9, @@ -171,7 +172,7 @@ "roll_off": 0.15, "tx_osnr": 100, "sys_margins": 0 - }], + }], "Transceiver":[ { "type_variety": "vendorA_trx-type1", diff --git a/tests/invocation/multiband_transmission b/tests/invocation/multiband_transmission index 377e8326d..513c00a6b 100644 --- a/tests/invocation/multiband_transmission +++ b/tests/invocation/multiband_transmission @@ -35,6 +35,7 @@ Multiband_amplifier east edfa in Site_A to Site_B type_variety: std_medium_gain_C type_variety: std_medium_gain_L effective gain(dB): 20.90 effective gain(dB): 22.19 (before att_in and before output VOA) (before att_in and before output VOA) + tilt-target(dB) 0.00 tilt-target(dB) 0.00 noise figure (dB): 6.38 noise figure (dB): 6.19 (including att_in) (including att_in) pad att_in (dB): 0.00 pad att_in (dB): 0.00 @@ -58,6 +59,7 @@ Multiband_amplifier east edfa in Site_B to Site_C type_variety: std_medium_gain_C type_variety: std_medium_gain_L effective gain(dB): 18.00 effective gain(dB): 18.00 (before att_in and before output VOA) (before att_in and before output VOA) + tilt-target(dB) 0.00 tilt-target(dB) 0.00 noise figure (dB): 7.38 noise figure (dB): 7.38 (including att_in) (including att_in) pad att_in (dB): 0.00 pad att_in (dB): 0.00 @@ -81,6 +83,7 @@ Multiband_amplifier east edfa in Site_C to Site_D type_variety: std_medium_gain_C type_variety: std_medium_gain_L effective gain(dB): 19.80 effective gain(dB): 19.80 (before att_in and before output VOA) (before att_in and before output VOA) + tilt-target(dB) 0.00 tilt-target(dB) 0.00 noise figure (dB): 6.63 noise figure (dB): 6.63 (including att_in) (including att_in) pad att_in (dB): 0.00 pad att_in (dB): 0.00 @@ -104,6 +107,7 @@ Multiband_amplifier west edfa in Site_D to Site_C type_variety: std_medium_gain_C type_variety: std_medium_gain_L effective gain(dB): 21.70 effective gain(dB): 21.70 (before att_in and before output VOA) (before att_in and before output VOA) + tilt-target(dB) 0.00 tilt-target(dB) 0.00 noise figure (dB): 6.25 noise figure (dB): 6.25 (including att_in) (including att_in) pad att_in (dB): 0.00 pad att_in (dB): 0.00 diff --git a/tests/invocation/openroadm-v4-Stockholm-Gothenburg b/tests/invocation/openroadm-v4-Stockholm-Gothenburg index 126c83e5d..0d6fc2c71 100644 --- a/tests/invocation/openroadm-v4-Stockholm-Gothenburg +++ b/tests/invocation/openroadm-v4-Stockholm-Gothenburg @@ -33,6 +33,7 @@ Edfa Edfa_booster_roadm_Stockholm_to_fiber (Stockholm → Norrköping)_(1/2) type_variety: openroadm_mw_mw_booster effective gain(dB): 22.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): -inf (including att_in) pad att_in (dB): 0.00 @@ -55,6 +56,7 @@ Edfa Edfa_fiber (Stockholm → Norrköping)_(1/2) type_variety: openroadm_ila_low_noise effective gain(dB): 16.33 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.01 (including att_in) pad att_in (dB): 0.00 @@ -77,6 +79,7 @@ Edfa Edfa_preamp_roadm_Norrköping_from_fiber (Stockholm → Norrköping)_(2/2) type_variety: openroadm_mw_mw_preamp effective gain(dB): 16.33 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 12.59 (including att_in) pad att_in (dB): 0.00 @@ -96,6 +99,7 @@ Edfa Edfa_booster_roadm_Norrköping_to_fiber (Norrköping → Linköping) type_variety: openroadm_mw_mw_booster effective gain(dB): 22.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): -inf (including att_in) pad att_in (dB): 0.00 @@ -118,6 +122,7 @@ Edfa Edfa_preamp_roadm_Linköping_from_fiber (Norrköping → Linköping) type_variety: openroadm_mw_mw_preamp effective gain(dB): 11.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 16.00 (including att_in) pad att_in (dB): 0.00 @@ -137,6 +142,7 @@ Edfa Edfa_booster_roadm_Linköping_to_fiber (Linköping → Jönköping) type_variety: openroadm_mw_mw_booster effective gain(dB): 22.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): -inf (including att_in) pad att_in (dB): 0.00 @@ -159,6 +165,7 @@ Edfa Edfa_preamp_roadm_Jönköping_from_fiber (Linköping → Jönköping) type_variety: openroadm_mw_mw_preamp effective gain(dB): 26.80 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.09 (including att_in) pad att_in (dB): 0.00 @@ -178,6 +185,7 @@ Edfa Edfa_booster_roadm_Jönköping_to_fiber (Jönköping → Borås) type_variety: openroadm_mw_mw_booster effective gain(dB): 22.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): -inf (including att_in) pad att_in (dB): 0.00 @@ -200,6 +208,7 @@ Edfa Edfa_preamp_roadm_Borås_from_fiber (Jönköping → Borås) type_variety: openroadm_mw_mw_preamp effective gain(dB): 17.82 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 11.94 (including att_in) pad att_in (dB): 0.00 @@ -219,6 +228,7 @@ Edfa Edfa_booster_roadm_Borås_to_fiber (Borås → Gothenburg) type_variety: openroadm_mw_mw_booster effective gain(dB): 22.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): -inf (including att_in) pad att_in (dB): 0.00 @@ -241,6 +251,7 @@ Edfa Edfa_preamp_roadm_Gothenburg_from_fiber (Borås → Gothenburg) type_variety: openroadm_mw_mw_preamp effective gain(dB): 13.53 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 13.78 (including att_in) pad att_in (dB): 0.00 diff --git a/tests/invocation/openroadm-v5-Stockholm-Gothenburg b/tests/invocation/openroadm-v5-Stockholm-Gothenburg index 5f2ce7f4f..682b4d1ab 100644 --- a/tests/invocation/openroadm-v5-Stockholm-Gothenburg +++ b/tests/invocation/openroadm-v5-Stockholm-Gothenburg @@ -33,6 +33,7 @@ Edfa Edfa_booster_roadm_Stockholm_to_fiber (Stockholm → Norrköping)_(1/2) type_variety: openroadm_mw_mw_booster effective gain(dB): 22.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): -inf (including att_in) pad att_in (dB): 0.00 @@ -55,6 +56,7 @@ Edfa Edfa_fiber (Stockholm → Norrköping)_(1/2) type_variety: openroadm_ila_low_noise effective gain(dB): 16.33 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.01 (including att_in) pad att_in (dB): 0.00 @@ -77,6 +79,7 @@ Edfa Edfa_preamp_roadm_Norrköping_from_fiber (Stockholm → Norrköping)_(2/2) type_variety: openroadm_mw_mw_preamp_worstcase_ver5 effective gain(dB): 16.33 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 11.43 (including att_in) pad att_in (dB): 0.00 @@ -96,6 +99,7 @@ Edfa Edfa_booster_roadm_Norrköping_to_fiber (Norrköping → Linköping) type_variety: openroadm_mw_mw_booster effective gain(dB): 22.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): -inf (including att_in) pad att_in (dB): 0.00 @@ -118,6 +122,7 @@ Edfa Edfa_preamp_roadm_Linköping_from_fiber (Norrköping → Linköping) type_variety: openroadm_mw_mw_preamp_worstcase_ver5 effective gain(dB): 11.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 16.00 (including att_in) pad att_in (dB): 0.00 @@ -137,6 +142,7 @@ Edfa Edfa_booster_roadm_Linköping_to_fiber (Linköping → Jönköping) type_variety: openroadm_mw_mw_booster effective gain(dB): 22.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): -inf (including att_in) pad att_in (dB): 0.00 @@ -159,6 +165,7 @@ Edfa Edfa_preamp_roadm_Jönköping_from_fiber (Linköping → Jönköping) type_variety: openroadm_mw_mw_preamp_worstcase_ver5 effective gain(dB): 26.80 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.01 (including att_in) pad att_in (dB): 0.00 @@ -178,6 +185,7 @@ Edfa Edfa_booster_roadm_Jönköping_to_fiber (Jönköping → Borås) type_variety: openroadm_mw_mw_booster effective gain(dB): 22.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): -inf (including att_in) pad att_in (dB): 0.00 @@ -200,6 +208,7 @@ Edfa Edfa_preamp_roadm_Borås_from_fiber (Jönköping → Borås) type_variety: openroadm_mw_mw_preamp_worstcase_ver5 effective gain(dB): 17.82 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 10.54 (including att_in) pad att_in (dB): 0.00 @@ -219,6 +228,7 @@ Edfa Edfa_booster_roadm_Borås_to_fiber (Borås → Gothenburg) type_variety: openroadm_mw_mw_booster effective gain(dB): 22.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): -inf (including att_in) pad att_in (dB): 0.00 @@ -241,6 +251,7 @@ Edfa Edfa_preamp_roadm_Gothenburg_from_fiber (Borås → Gothenburg) type_variety: openroadm_mw_mw_preamp_worstcase_ver5 effective gain(dB): 13.53 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 13.54 (including att_in) pad att_in (dB): 0.00 diff --git a/tests/invocation/spectrum1_transmission_main_example b/tests/invocation/spectrum1_transmission_main_example index fcb0a0de7..d38d3fe8c 100644 --- a/tests/invocation/spectrum1_transmission_main_example +++ b/tests/invocation/spectrum1_transmission_main_example @@ -34,6 +34,7 @@ Edfa east edfa in Lannion_CAS to Corlay type_variety: std_medium_gain effective gain(dB): 21.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 6.36 (including att_in) pad att_in (dB): 0.00 @@ -78,6 +79,7 @@ Edfa west edfa in Lorient_KMA to Loudeac type_variety: std_high_gain effective gain(dB): 28.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 5.92 (including att_in) pad att_in (dB): 0.00 diff --git a/tests/invocation/spectrum2_transmission_main_example b/tests/invocation/spectrum2_transmission_main_example index c9c0a3011..727764d38 100644 --- a/tests/invocation/spectrum2_transmission_main_example +++ b/tests/invocation/spectrum2_transmission_main_example @@ -34,6 +34,7 @@ Edfa east edfa in Lannion_CAS to Corlay type_variety: std_medium_gain effective gain(dB): 21.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 6.36 (including att_in) pad att_in (dB): 0.00 @@ -78,6 +79,7 @@ Edfa west edfa in Lorient_KMA to Loudeac type_variety: std_high_gain effective gain(dB): 28.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 5.92 (including att_in) pad att_in (dB): 0.00 diff --git a/tests/invocation/transmission_long_pow b/tests/invocation/transmission_long_pow index 683064a80..5a5bd930f 100644 --- a/tests/invocation/transmission_long_pow +++ b/tests/invocation/transmission_long_pow @@ -34,6 +34,7 @@ Edfa booster A type_variety: std_medium_gain effective gain(dB): 20.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 6.58 (including att_in) pad att_in (dB): 0.00 @@ -56,6 +57,7 @@ Edfa Edfa1 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -78,6 +80,7 @@ Edfa Edfa2 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -100,6 +103,7 @@ Edfa Edfa3 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -122,6 +126,7 @@ Edfa Edfa4 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -144,6 +149,7 @@ Edfa Edfa5 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -163,6 +169,7 @@ Edfa booster C type_variety: std_medium_gain effective gain(dB): 20.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 6.58 (including att_in) pad att_in (dB): 0.00 @@ -185,6 +192,7 @@ Edfa Edfa6 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -207,6 +215,7 @@ Edfa Edfa7 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -229,6 +238,7 @@ Edfa Edfa8 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -251,6 +261,7 @@ Edfa Edfa9 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -273,6 +284,7 @@ Edfa Edfa10 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -292,6 +304,7 @@ Edfa booster D type_variety: std_medium_gain effective gain(dB): 20.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 6.58 (including att_in) pad att_in (dB): 0.00 @@ -314,6 +327,7 @@ Edfa Edfa11 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -336,6 +350,7 @@ Edfa Edfa12 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -355,6 +370,7 @@ Edfa booster E type_variety: std_medium_gain effective gain(dB): 20.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 6.58 (including att_in) pad att_in (dB): 0.00 @@ -377,6 +393,7 @@ Edfa Edfa13 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -399,6 +416,7 @@ Edfa Edfa14 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -421,6 +439,7 @@ Edfa Edfa15 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 diff --git a/tests/invocation/transmission_long_psd b/tests/invocation/transmission_long_psd index c5fb984ab..2eabc86bb 100644 --- a/tests/invocation/transmission_long_psd +++ b/tests/invocation/transmission_long_psd @@ -34,6 +34,7 @@ Edfa booster A type_variety: std_medium_gain effective gain(dB): 20.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 6.58 (including att_in) pad att_in (dB): 0.00 @@ -56,6 +57,7 @@ Edfa Edfa1 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -78,6 +80,7 @@ Edfa Edfa2 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -100,6 +103,7 @@ Edfa Edfa3 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -122,6 +126,7 @@ Edfa Edfa4 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -144,6 +149,7 @@ Edfa Edfa5 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -163,6 +169,7 @@ Edfa booster C type_variety: std_medium_gain effective gain(dB): 20.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 6.58 (including att_in) pad att_in (dB): 0.00 @@ -185,6 +192,7 @@ Edfa Edfa6 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -207,6 +215,7 @@ Edfa Edfa7 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -229,6 +238,7 @@ Edfa Edfa8 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -251,6 +261,7 @@ Edfa Edfa9 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -273,6 +284,7 @@ Edfa Edfa10 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -292,6 +304,7 @@ Edfa booster D type_variety: std_medium_gain effective gain(dB): 20.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 6.58 (including att_in) pad att_in (dB): 0.00 @@ -314,6 +327,7 @@ Edfa Edfa11 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -336,6 +350,7 @@ Edfa Edfa12 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -355,6 +370,7 @@ Edfa booster E type_variety: std_medium_gain effective gain(dB): 20.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 6.58 (including att_in) pad att_in (dB): 0.00 @@ -377,6 +393,7 @@ Edfa Edfa13 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -399,6 +416,7 @@ Edfa Edfa14 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -421,6 +439,7 @@ Edfa Edfa15 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 diff --git a/tests/invocation/transmission_long_psw b/tests/invocation/transmission_long_psw index 070f4baf4..53362f38a 100644 --- a/tests/invocation/transmission_long_psw +++ b/tests/invocation/transmission_long_psw @@ -34,6 +34,7 @@ Edfa booster A type_variety: std_medium_gain effective gain(dB): 20.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 6.58 (including att_in) pad att_in (dB): 0.00 @@ -56,6 +57,7 @@ Edfa Edfa1 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -78,6 +80,7 @@ Edfa Edfa2 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -100,6 +103,7 @@ Edfa Edfa3 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -122,6 +126,7 @@ Edfa Edfa4 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -144,6 +149,7 @@ Edfa Edfa5 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -163,6 +169,7 @@ Edfa booster C type_variety: std_medium_gain effective gain(dB): 20.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 6.58 (including att_in) pad att_in (dB): 0.00 @@ -185,6 +192,7 @@ Edfa Edfa6 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -207,6 +215,7 @@ Edfa Edfa7 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -229,6 +238,7 @@ Edfa Edfa8 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -251,6 +261,7 @@ Edfa Edfa9 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -273,6 +284,7 @@ Edfa Edfa10 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -292,6 +304,7 @@ Edfa booster D type_variety: std_medium_gain effective gain(dB): 20.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 6.58 (including att_in) pad att_in (dB): 0.00 @@ -314,6 +327,7 @@ Edfa Edfa11 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -336,6 +350,7 @@ Edfa Edfa12 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -355,6 +370,7 @@ Edfa booster E type_variety: std_medium_gain effective gain(dB): 20.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 6.58 (including att_in) pad att_in (dB): 0.00 @@ -377,6 +393,7 @@ Edfa Edfa13 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -399,6 +416,7 @@ Edfa Edfa14 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -421,6 +439,7 @@ Edfa Edfa15 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 diff --git a/tests/invocation/transmission_main_example b/tests/invocation/transmission_main_example index 3e765a7e9..a6dc6e2c5 100644 --- a/tests/invocation/transmission_main_example +++ b/tests/invocation/transmission_main_example @@ -36,6 +36,7 @@ Edfa Edfa1 type_variety: std_low_gain effective gain(dB): 15.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 6.62 (including att_in) pad att_in (dB): 0.00 diff --git a/tests/invocation/transmission_main_example__raman b/tests/invocation/transmission_main_example__raman index df13cb905..b16baa37d 100644 --- a/tests/invocation/transmission_main_example__raman +++ b/tests/invocation/transmission_main_example__raman @@ -40,6 +40,7 @@ Edfa Edfa1 type_variety: std_low_gain effective gain(dB): 5.26 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 13.74 (including att_in) pad att_in (dB): 2.74 diff --git a/tests/invocation/transmission_main_example_long b/tests/invocation/transmission_main_example_long index 78f541047..48f45a33f 100644 --- a/tests/invocation/transmission_main_example_long +++ b/tests/invocation/transmission_main_example_long @@ -33,6 +33,7 @@ Edfa booster A type_variety: std_medium_gain effective gain(dB): 20.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 6.58 (including att_in) pad att_in (dB): 0.00 @@ -55,6 +56,7 @@ Edfa Edfa1 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -77,6 +79,7 @@ Edfa Edfa2 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -99,6 +102,7 @@ Edfa Edfa3 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -121,6 +125,7 @@ Edfa Edfa4 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -143,6 +148,7 @@ Edfa Edfa5 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -162,6 +168,7 @@ Edfa booster C type_variety: std_medium_gain effective gain(dB): 20.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 6.58 (including att_in) pad att_in (dB): 0.00 @@ -184,6 +191,7 @@ Edfa Edfa6 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -206,6 +214,7 @@ Edfa Edfa7 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -228,6 +237,7 @@ Edfa Edfa8 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -250,6 +260,7 @@ Edfa Edfa9 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -272,6 +283,7 @@ Edfa Edfa10 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -291,6 +303,7 @@ Edfa booster D type_variety: std_medium_gain effective gain(dB): 20.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 6.58 (including att_in) pad att_in (dB): 0.00 @@ -313,6 +326,7 @@ Edfa Edfa11 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -335,6 +349,7 @@ Edfa Edfa12 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -354,6 +369,7 @@ Edfa booster E type_variety: std_medium_gain effective gain(dB): 20.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 6.58 (including att_in) pad att_in (dB): 0.00 @@ -376,6 +392,7 @@ Edfa Edfa13 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 @@ -398,6 +415,7 @@ Edfa Edfa14 type_variety: test_fixed_gain effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 9.00 (including att_in) pad att_in (dB): 4.00 @@ -420,6 +438,7 @@ Edfa Edfa15 type_variety: test effective gain(dB): 16.00 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 8.86 (including att_in) pad att_in (dB): 0.00 diff --git a/tests/invocation/transmission_saturated b/tests/invocation/transmission_saturated index 151633c90..f7adc9b30 100644 --- a/tests/invocation/transmission_saturated +++ b/tests/invocation/transmission_saturated @@ -33,6 +33,7 @@ Edfa east edfa in Lannion_CAS to Corlay type_variety: test effective gain(dB): 21.18 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 6.13 (including att_in) pad att_in (dB): 0.00 @@ -77,6 +78,7 @@ Edfa west edfa in Lorient_KMA to Loudeac type_variety: std_medium_gain effective gain(dB): 27.99 (before att_in and before output VOA) + tilt-target(dB) 0.00 noise figure (dB): 5.98 (including att_in) pad att_in (dB): 0.00 diff --git a/tests/test_amplifier.py b/tests/test_amplifier.py index 0881eabee..ab9a67eb6 100644 --- a/tests/test_amplifier.py +++ b/tests/test_amplifier.py @@ -466,6 +466,7 @@ def test_multiband(): ' type_variety: std_medium_gain_C', ' effective gain(dB): 21.22', ' (before att_in and before output VOA)', + ' tilt-target(dB) 0.00', ' noise figure (dB): 6.32', ' (including att_in)', ' pad att_in (dB): 0.00', @@ -482,6 +483,7 @@ def test_multiband(): ' type_variety: std_medium_gain_L', ' effective gain(dB): 21.00', ' (before att_in and before output VOA)', + ' tilt-target(dB) 0.00', ' noise figure (dB): 6.36', ' (including att_in)', ' pad att_in (dB): 0.00', diff --git a/tests/test_equalization.py b/tests/test_equalization.py index 2611bed4a..363604821 100644 --- a/tests/test_equalization.py +++ b/tests/test_equalization.py @@ -72,7 +72,8 @@ def test_equalization_combination_degree(delta_pdb_per_channel, degree, equaliza "preamp_variety_list": [], "booster_variety_list": [] }, - "roadm-path-impairments": [] + "roadm-path-impairments": [], + "design_bands": None } } roadm = Roadm(**roadm_config) @@ -124,7 +125,8 @@ def test_wrong_element_config(equalization_type): "restrictions": { "preamp_variety_list": [], "booster_variety_list": [] - } + }, + "design_bands": None }, "metadata": { "location": { @@ -236,7 +238,8 @@ def test_low_input_power(target_out, delta_pdb_per_channel, correction): "preamp_variety_list": [], "booster_variety_list": [] }, - "roadm-path-impairments": [] + "roadm-path-impairments": [], + "design_bands": None }, "metadata": { "location": { @@ -290,7 +293,8 @@ def test_2low_input_power(target_out, delta_pdb_per_channel, correction): "preamp_variety_list": [], "booster_variety_list": [] }, - "roadm-path-impairments": [] + "roadm-path-impairments": [], + "design_bands": None }, "metadata": { "location": { diff --git a/tests/test_logger.py b/tests/test_logger.py index e1f02d440..c35e2b2d6 100644 --- a/tests/test_logger.py +++ b/tests/test_logger.py @@ -34,8 +34,8 @@ def test_jsonthing(caplog): "sys_margins": 2 } _ = SI(**json_data) - expected_msg = 'WARNING missing f_min attribute in eqpt_config.json[SI]\n\t' \ - + 'default value is f_min = 191350000000000.0' + expected_msg = '\n\tWARNING missing f_min attribute in eqpt_config.json[SI]\n' \ + + '\tdefault value is f_min = 191350000000000.0' assert expected_msg in caplog.text diff --git a/tests/test_network_functions.py b/tests/test_network_functions.py index aae5da2b3..78af95bc2 100644 --- a/tests/test_network_functions.py +++ b/tests/test_network_functions.py @@ -6,12 +6,15 @@ from pathlib import Path import pytest +from numpy.testing import assert_allclose + from gnpy.core.exceptions import NetworkTopologyError -from gnpy.core.network import span_loss, build_network, select_edfa, get_node_restrictions -from gnpy.tools.json_io import load_equipment, load_network, network_from_json +from gnpy.core.network import span_loss, build_network, select_edfa, get_node_restrictions, \ + estimate_srs_power_deviation +from gnpy.tools.json_io import load_equipment, load_network, network_from_json, load_json from gnpy.core.utils import lin2db, automatic_nch, merge_amplifier_restrictions from gnpy.core.elements import Fiber, Edfa, Roadm, Multiband_amplifier -from gnpy.core.parameters import EdfaParams, MultiBandParams +from gnpy.core.parameters import SimParams, EdfaParams, MultiBandParams TEST_DIR = Path(__file__).parent @@ -542,3 +545,72 @@ def test_get_node_restrictions(cls, defaultparams, variety_list, booster_list, b next_node = Fiber(**fiber_config) restrictions = get_node_restrictions(node, prev_node, next_node, equipment, band) assert restrictions == expected_restrictions + + +@pytest.mark.usefixtures('set_sim_params') +@pytest.mark.parametrize('case, site_type, band, expected_gain, expected_tilt, expected_variety, sim_params', [ + ('design', 'Multiband_amplifier', 'LBAND', 10.0, 0.0, 'std_medium_gain_multiband', False), + ('no_design', 'Multiband_amplifier', 'LBAND', 10.0, 0.0, 'std_low_gain_multiband_bis', False), + ('type_variety', 'Multiband_amplifier', 'LBAND', 10.0, 0.0, 'std_medium_gain_multiband', False), + ('design', 'Multiband_amplifier', 'LBAND', 9.344985, 0.0, 'std_medium_gain_multiband', True), + ('no_design', 'Multiband_amplifier', 'LBAND', 9.344985, -0.94256, 'std_low_gain_multiband_bis', True), + ('no_design', 'Multiband_amplifier', 'CBAND', 10.980212, -1.60348, 'std_low_gain_multiband_bis', True), + ('no_design', 'Fused', 'LBAND', 21.0, 0.0, 'std_medium_gain_multiband', False), + ('no_design', 'Fused', 'LBAND', 20.344985, -0.82184, 'std_medium_gain_multiband', True), + ('no_design', 'Fused', 'CBAND', 21.773072, -1.40300, 'std_medium_gain_multiband', True), + ('design', 'Fused', 'CBAND', 21.214048, 0.0, 'std_medium_gain_multiband', True), + ('design', 'Multiband_amplifier', 'CBAND', 11.044233, 0.0, 'std_medium_gain_multiband', True)]) +def test_multiband(case, site_type, band, expected_gain, expected_tilt, expected_variety, sim_params): + """Check: + - if amplifiers are defined in multiband they are used for design, + - if no design is defined, + - if type variety is defined: use it for determining bands + - if no type_variety autodesign is as expected, design uses OMS defined set of bands + EOL is added only once on spans. One span can be one fiber or several fused fibers + EOL is then added on the first fiber only. + """ + json_data = network_base(case, site_type) + equipment = load_equipment(EQPT_MULTBAND_FILENAME) + network = network_from_json(json_data, equipment) + p_db = equipment['SI']['default'].power_dbm + p_total_db = p_db + lin2db(automatic_nch(equipment['SI']['default'].f_min, + equipment['SI']['default'].f_max, equipment['SI']['default'].spacing)) + + if sim_params: + SimParams.set_params(load_json(TEST_DIR / 'data' / 'sim_params.json')) + build_network(network, equipment, p_db, p_total_db) + amp2 = next(n for n in network.nodes() if n.uid == 'east edfa in ILA2') + # restore simParams + save_sim_params = {"raman_params": SimParams._shared_dict['raman_params'].to_json(), + "nli_params": SimParams._shared_dict['nli_params'].to_json()} + SimParams.set_params(save_sim_params) + print(amp2.to_json) + assert_allclose(amp2.amplifiers[band].effective_gain, expected_gain, atol=1e-5) + assert_allclose(amp2.amplifiers[band].tilt_target, expected_tilt, atol=1e-5) + assert amp2.type_variety == expected_variety + + +def test_tilt_fused(): + """check that computed tilt is the same for one span 100km as 2 spans 30 +70 km + """ + design_bands = {'CBAND': {'f_min': 191.3e12, 'f_max': 196.0e12}, + 'LBAND': {'f_min': 187.0e12, 'f_max': 190.0e12}} + save_sim_params = {"raman_params": SimParams._shared_dict['raman_params'].to_json(), + "nli_params": SimParams._shared_dict['nli_params'].to_json()} + SimParams.set_params(load_json(TEST_DIR / 'data' / 'sim_params.json')) + input_powers = {'CBAND': 0.001, 'LBAND': 0.001} + json_data = network_base("design", "Multiband_amplifier", length=100) + equipment = load_equipment(EQPT_MULTBAND_FILENAME) + network = network_from_json(json_data, equipment) + node = next(n for n in network.nodes() if n.uid == 'fiber (SITE1 → ILA1)') + tilt_db, tilt_target = estimate_srs_power_deviation(network, node, equipment, design_bands, input_powers) + json_data = network_base("design", "Fused", length=50) + equipment = load_equipment(EQPT_MULTBAND_FILENAME) + network = network_from_json(json_data, equipment) + node = next(n for n in network.nodes() if n.uid == 'fiber (ILA1 → ILA2)') + fused_tilt_db, fused_tilt_target = \ + estimate_srs_power_deviation(network, node, equipment, design_bands, input_powers) + # restore simParams + SimParams.set_params(save_sim_params) + assert fused_tilt_db == tilt_db + assert fused_tilt_target == tilt_target