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