feat: separate span power from tx power

gnpy currently uses the same parameter for tx output power and span
input power: this prevents from modelling low tx power effect.
This patch introduces a new tx-cannel-power and uses it to
propagate in ROADM.

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: Id3ac75e2cb617b513bdb38b51a52e05d15af46f5
This commit is contained in:
EstherLerouzic
2023-04-28 16:04:30 +02:00
parent fb70413784
commit 38cc0e3cc5
40 changed files with 559 additions and 271 deletions

View File

@@ -29,7 +29,7 @@ from typing import Union
from logging import getLogger from logging import getLogger
from gnpy.core.utils import lin2db, db2lin, arrange_frequencies, snr_sum, per_label_average, pretty_summary_print, \ from gnpy.core.utils import lin2db, db2lin, arrange_frequencies, snr_sum, per_label_average, pretty_summary_print, \
watt2dbm, psd2powerdbm watt2dbm, psd2powerdbm, calculate_absolute_min_or_zero
from gnpy.core.parameters import RoadmParams, FusedParams, FiberParams, PumpParams, EdfaParams, EdfaOperational, \ from gnpy.core.parameters import RoadmParams, FusedParams, FiberParams, PumpParams, EdfaParams, EdfaOperational, \
RoadmPath, RoadmImpairment RoadmPath, RoadmImpairment
from gnpy.core.science_utils import NliSolver, RamanSolver from gnpy.core.science_utils import NliSolver, RamanSolver
@@ -95,6 +95,7 @@ class Transceiver(_Node):
self.penalties = {} self.penalties = {}
self.total_penalty = 0 self.total_penalty = 0
self.propagated_labels = [""] self.propagated_labels = [""]
self.tx_power = None
def _calc_cd(self, spectral_info): def _calc_cd(self, spectral_info):
"""Updates the Transceiver property with the CD of the received channels. CD in ps/nm. """Updates the Transceiver property with the CD of the received channels. CD in ps/nm.
@@ -194,6 +195,7 @@ class Transceiver(_Node):
osnr_ase = per_label_average(self.osnr_ase, self.propagated_labels) osnr_ase = per_label_average(self.osnr_ase, self.propagated_labels)
osnr_ase_01nm = per_label_average(self.osnr_ase_01nm, self.propagated_labels) osnr_ase_01nm = per_label_average(self.osnr_ase_01nm, self.propagated_labels)
snr_01nm = per_label_average(self.snr_01nm, self.propagated_labels) snr_01nm = per_label_average(self.snr_01nm, self.propagated_labels)
tx_power_dbm = per_label_average(watt2dbm(self.tx_power), self.propagated_labels)
cd = mean(self.chromatic_dispersion) cd = mean(self.chromatic_dispersion)
pmd = mean(self.pmd) pmd = mean(self.pmd)
pdl = mean(self.pdl) pdl = mean(self.pdl)
@@ -207,7 +209,8 @@ class Transceiver(_Node):
f' CD (ps/nm): {cd:.2f}', f' CD (ps/nm): {cd:.2f}',
f' PMD (ps): {pmd:.2f}', f' PMD (ps): {pmd:.2f}',
f' PDL (dB): {pdl:.2f}', f' PDL (dB): {pdl:.2f}',
f' Latency (ms): {latency:.2f}']) f' Latency (ms): {latency:.2f}',
f' Actual pch out (dBm): {pretty_summary_print(tx_power_dbm)}'])
cd_penalty = self.penalties.get('chromatic_dispersion') cd_penalty = self.penalties.get('chromatic_dispersion')
if cd_penalty is not None: if cd_penalty is not None:
@@ -222,6 +225,7 @@ class Transceiver(_Node):
return result return result
def __call__(self, spectral_info): def __call__(self, spectral_info):
self.tx_power = spectral_info.tx_power
self._calc_snr(spectral_info) self._calc_snr(spectral_info)
self._calc_cd(spectral_info) self._calc_cd(spectral_info)
self._calc_pmd(spectral_info) self._calc_pmd(spectral_info)
@@ -244,6 +248,8 @@ class Roadm(_Node):
# on the path, since it depends on the equalization definition on the degree. # on the path, since it depends on the equalization definition on the degree.
self.ref_pch_out_dbm = None self.ref_pch_out_dbm = None
self.loss = 0 # auto-design interest self.loss = 0 # auto-design interest
self.loss_pch_db = None
# Optical power of carriers are equalized by the ROADM, so that the experienced loss is not the same for # Optical power of carriers are equalized by the ROADM, so that the experienced loss is not the same for
# different carriers. The ref_effective_loss records the loss for a reference carrier. # different carriers. The ref_effective_loss records the loss for a reference carrier.
self.ref_effective_loss = None self.ref_effective_loss = None
@@ -315,11 +321,13 @@ class Roadm(_Node):
return f'{type(self).__name__} {self.uid}' return f'{type(self).__name__} {self.uid}'
total_pch = pretty_summary_print(per_label_average(self.pch_out_dbm, self.propagated_labels)) total_pch = pretty_summary_print(per_label_average(self.pch_out_dbm, self.propagated_labels))
total_loss = pretty_summary_print(per_label_average(self.loss_pch_db, self.propagated_labels))
return '\n'.join([f'{type(self).__name__} {self.uid}', return '\n'.join([f'{type(self).__name__} {self.uid}',
f' type_variety: {self.type_variety}', f' Type_variety: {self.type_variety}',
f' effective loss (dB): {self.ref_effective_loss:.2f}', f' Reference loss (dB): {self.ref_effective_loss:.2f}',
f' reference pch out (dBm): {self.ref_pch_out_dbm:.2f}', f' Actual loss (dB): {total_loss}',
f' actual pch out (dBm): {total_pch}']) f' Reference pch out (dBm): {self.ref_pch_out_dbm:.2f}',
f' Actual pch out (dBm): {total_pch}'])
def get_roadm_target_power(self, spectral_info: SpectralInformation = None) -> Union[float, ndarray]: def get_roadm_target_power(self, spectral_info: SpectralInformation = None) -> Union[float, ndarray]:
"""Computes the power in dBm for a reference carrier or for a spectral information. """Computes the power in dBm for a reference carrier or for a spectral information.
@@ -380,9 +388,13 @@ class Roadm(_Node):
There is no difference for add or express : the same target is applied. There is no difference for add or express : the same target is applied.
For the moment propagate operates with spectral info carriers all having the same source or destination. For the moment propagate operates with spectral info carriers all having the same source or destination.
""" """
# record input powers to compute the actual loss at the end of the process
input_power_dbm = watt2dbm(spectral_info.signal + spectral_info.nli + spectral_info.ase)
# apply min ROADM loss if it exists # apply min ROADM loss if it exists
roadm_maxloss_db = self.get_roadm_path(from_degree, degree).impairment.maxloss roadm_maxloss_db = self.get_roadm_path(from_degree, degree).impairment.maxloss
spectral_info.apply_attenuation_db(roadm_maxloss_db) spectral_info.apply_attenuation_db(roadm_maxloss_db)
# records the total power after applying minimum loss
net_input_power_dbm = watt2dbm(spectral_info.signal + spectral_info.nli + spectral_info.ase)
# find the target power for the reference carrier # find the target power for the reference carrier
ref_per_degree_pch = self.get_per_degree_ref_power(degree) ref_per_degree_pch = self.get_per_degree_ref_power(degree)
# find the target powers for each signal carrier # find the target powers for each signal carrier
@@ -392,15 +404,19 @@ class Roadm(_Node):
# Depending on propagation upstream from this ROADM, the input power might be smaller than # Depending on propagation upstream from this ROADM, the input power might be smaller than
# the target power out configured for this ROADM degree's egress. Since ROADM does not amplify, # the target power out configured for this ROADM degree's egress. Since ROADM does not amplify,
# the power out of the ROADM for the ref channel is the min value between target power and input power. # the power out of the ROADM for the ref channel is the min value between target power and input power.
# (TODO add a minimum loss for the ROADM crossing) ref_pch_in_dbm = self.ref_pch_in_dbm[from_degree]
self.ref_pch_out_dbm = min(self.ref_pch_in_dbm[from_degree] - roadm_maxloss_db, ref_per_degree_pch) # Calculate the output power for the reference channel (only for visualization)
self.ref_pch_out_dbm = min(ref_pch_in_dbm - roadm_maxloss_db, ref_per_degree_pch)
# Definition of effective_loss: # Definition of effective_loss:
# Optical power of carriers are equalized by the ROADM, so that the experienced loss is not the same for # Optical power of carriers are equalized by the ROADM, so that the experienced loss is not the same for
# different carriers. effective_loss records the loss for the reference carrier. # different carriers. effective_loss records the loss for the reference carrier.
self.ref_effective_loss = self.ref_pch_in_dbm[from_degree] - self.ref_pch_out_dbm # Calculate the effective loss for the reference channel
input_power = spectral_info.signal + spectral_info.nli + spectral_info.ase self.ref_effective_loss = ref_pch_in_dbm - self.ref_pch_out_dbm
# Calculate the target power per channel according to the equalization policy
target_power_per_channel = per_degree_pch + spectral_info.delta_pdb_per_channel target_power_per_channel = per_degree_pch + spectral_info.delta_pdb_per_channel
# Computation of the per channel target power according to equalization policy # Computation of the correction according to equalization policy
# If target_power_per_channel has some channels power above input power, then the whole target is reduced. # If target_power_per_channel has some channels power above input power, then the whole target is reduced.
# For example, if user specifies delta_pdb_per_channel: # For example, if user specifies delta_pdb_per_channel:
# freq1: 1dB, freq2: 3dB, freq3: -3dB, and target is -20dBm out of the ROADM, # freq1: 1dB, freq2: 3dB, freq3: -3dB, and target is -20dBm out of the ROADM,
@@ -415,17 +431,25 @@ class Roadm(_Node):
# that had the min power. # that had the min power.
# This change corresponds to a discussion held during coders call. Please look at this document for # This change corresponds to a discussion held during coders call. Please look at this document for
# a reference: https://telecominfraproject.atlassian.net/wiki/spaces/OOPT/pages/669679645/PSE+Meeting+Minutes # a reference: https://telecominfraproject.atlassian.net/wiki/spaces/OOPT/pages/669679645/PSE+Meeting+Minutes
correction = (abs(watt2dbm(input_power) - target_power_per_channel) correction = calculate_absolute_min_or_zero(net_input_power_dbm - target_power_per_channel)
- (watt2dbm(input_power) - target_power_per_channel)) / 2
new_target = target_power_per_channel - correction new_target = target_power_per_channel - correction
delta_power = watt2dbm(input_power) - new_target delta_power = net_input_power_dbm - new_target
spectral_info.apply_attenuation_db(delta_power) spectral_info.apply_attenuation_db(delta_power)
spectral_info.pmd = sqrt(spectral_info.pmd ** 2
+ self.get_roadm_path(from_degree=from_degree, to_degree=degree).impairment.pmd ** 2) # Update the PMD information
spectral_info.pdl = sqrt(spectral_info.pdl ** 2 pmd_impairment = self.get_roadm_path(from_degree=from_degree, to_degree=degree).impairment.pmd
+ self.get_roadm_path(from_degree=from_degree, to_degree=degree).impairment.pdl ** 2) spectral_info.pmd = sqrt(spectral_info.pmd ** 2 + pmd_impairment ** 2)
# Update the PMD information
pdl_impairment = self.get_roadm_path(from_degree=from_degree, to_degree=degree).impairment.pdl
spectral_info.pdl = sqrt(spectral_info.pdl ** 2 + pdl_impairment ** 2)
# Update the per channel power with the result of propagation
self.pch_out_dbm = watt2dbm(spectral_info.signal + spectral_info.nli + spectral_info.ase) self.pch_out_dbm = watt2dbm(spectral_info.signal + spectral_info.nli + spectral_info.ase)
# Update the loss per channel and the labels
self.loss_pch_db = input_power_dbm - self.pch_out_dbm
self.propagated_labels = spectral_info.label self.propagated_labels = spectral_info.label
def set_roadm_paths(self, from_degree, to_degree, path_type, impairment_id=None): def set_roadm_paths(self, from_degree, to_degree, path_type, impairment_id=None):

View File

@@ -52,7 +52,7 @@ class SpectralInformation(object):
def __init__(self, frequency: array, baud_rate: array, slot_width: array, signal: array, nli: array, ase: array, def __init__(self, frequency: array, baud_rate: array, slot_width: array, signal: array, nli: array, ase: array,
roll_off: array, chromatic_dispersion: array, pmd: array, pdl: array, latency: array, roll_off: array, chromatic_dispersion: array, pmd: array, pdl: array, latency: array,
delta_pdb_per_channel: array, tx_osnr: array, label: array): delta_pdb_per_channel: array, tx_osnr: array, tx_power: array, label: array):
indices = argsort(frequency) indices = argsort(frequency)
self._frequency = frequency[indices] self._frequency = frequency[indices]
self._df = outer(ones(frequency.shape), frequency) - outer(frequency, ones(frequency.shape)) self._df = outer(ones(frequency.shape), frequency) - outer(frequency, ones(frequency.shape))
@@ -80,6 +80,7 @@ class SpectralInformation(object):
self._latency = latency[indices] self._latency = latency[indices]
self._delta_pdb_per_channel = delta_pdb_per_channel[indices] self._delta_pdb_per_channel = delta_pdb_per_channel[indices]
self._tx_osnr = tx_osnr[indices] self._tx_osnr = tx_osnr[indices]
self._tx_power = tx_power[indices]
self._label = label[indices] self._label = label[indices]
@property @property
@@ -188,6 +189,14 @@ class SpectralInformation(object):
def tx_osnr(self, tx_osnr): def tx_osnr(self, tx_osnr):
self._tx_osnr = tx_osnr self._tx_osnr = tx_osnr
@property
def tx_power(self):
return self._tx_power
@tx_power.setter
def tx_power(self, tx_power):
self._tx_power = tx_power
@property @property
def channel_number(self): def channel_number(self):
return self._channel_number return self._channel_number
@@ -232,6 +241,7 @@ class SpectralInformation(object):
delta_pdb_per_channel=append(self.delta_pdb_per_channel, delta_pdb_per_channel=append(self.delta_pdb_per_channel,
other.delta_pdb_per_channel), other.delta_pdb_per_channel),
tx_osnr=append(self.tx_osnr, other.tx_osnr), tx_osnr=append(self.tx_osnr, other.tx_osnr),
tx_power=append(self.tx_power, other.tx_power),
label=append(self.label, other.label)) label=append(self.label, other.label))
except SpectrumError: except SpectrumError:
raise SpectrumError('Spectra cannot be summed: channels overlapping.') raise SpectrumError('Spectra cannot be summed: channels overlapping.')
@@ -251,6 +261,7 @@ def create_arbitrary_spectral_information(frequency: Union[ndarray, Iterable, fl
signal: Union[float, ndarray, Iterable], signal: Union[float, ndarray, Iterable],
baud_rate: Union[float, ndarray, Iterable], baud_rate: Union[float, ndarray, Iterable],
tx_osnr: Union[float, ndarray, Iterable], tx_osnr: Union[float, ndarray, Iterable],
tx_power: Union[float, ndarray, Iterable] = None,
delta_pdb_per_channel: Union[float, ndarray, Iterable] = 0., delta_pdb_per_channel: Union[float, ndarray, Iterable] = 0.,
slot_width: Union[float, ndarray, Iterable] = None, slot_width: Union[float, ndarray, Iterable] = None,
roll_off: Union[float, ndarray, Iterable] = 0., roll_off: Union[float, ndarray, Iterable] = 0.,
@@ -277,6 +288,7 @@ def create_arbitrary_spectral_information(frequency: Union[ndarray, Iterable, fl
ase = zeros(number_of_channels) ase = zeros(number_of_channels)
delta_pdb_per_channel = full(number_of_channels, delta_pdb_per_channel) delta_pdb_per_channel = full(number_of_channels, delta_pdb_per_channel)
tx_osnr = full(number_of_channels, tx_osnr) tx_osnr = full(number_of_channels, tx_osnr)
tx_power = full(number_of_channels, tx_power)
label = full(number_of_channels, label) label = full(number_of_channels, label)
return SpectralInformation(frequency=frequency, slot_width=slot_width, return SpectralInformation(frequency=frequency, slot_width=slot_width,
signal=signal, nli=nli, ase=ase, signal=signal, nli=nli, ase=ase,
@@ -284,7 +296,7 @@ def create_arbitrary_spectral_information(frequency: Union[ndarray, Iterable, fl
chromatic_dispersion=chromatic_dispersion, chromatic_dispersion=chromatic_dispersion,
pmd=pmd, pdl=pdl, latency=latency, pmd=pmd, pdl=pdl, latency=latency,
delta_pdb_per_channel=delta_pdb_per_channel, delta_pdb_per_channel=delta_pdb_per_channel,
tx_osnr=tx_osnr, label=label) tx_osnr=tx_osnr, tx_power=tx_power, label=label)
except ValueError as e: except ValueError as e:
if 'could not broadcast' in str(e): if 'could not broadcast' in str(e):
raise SpectrumError('Dimension mismatch in input fields.') raise SpectrumError('Dimension mismatch in input fields.')
@@ -292,45 +304,47 @@ def create_arbitrary_spectral_information(frequency: Union[ndarray, Iterable, fl
raise raise
def create_input_spectral_information(f_min, f_max, roll_off, baud_rate, power, spacing, tx_osnr, delta_pdb=0): def create_input_spectral_information(f_min, f_max, roll_off, baud_rate, spacing, tx_osnr, tx_power,
delta_pdb=0):
"""Creates a fixed slot width spectral information with flat power. """Creates a fixed slot width spectral information with flat power.
all arguments are scalar values""" all arguments are scalar values"""
number_of_channels = automatic_nch(f_min, f_max, spacing) number_of_channels = automatic_nch(f_min, f_max, spacing)
frequency = [(f_min + spacing * i) for i in range(1, number_of_channels + 1)] frequency = [(f_min + spacing * i) for i in range(1, number_of_channels + 1)]
delta_pdb_per_channel = delta_pdb * ones(number_of_channels) delta_pdb_per_channel = delta_pdb * ones(number_of_channels)
label = [f'{baud_rate * 1e-9 :.2f}G' for i in range(number_of_channels)] label = [f'{baud_rate * 1e-9 :.2f}G' for i in range(number_of_channels)]
return create_arbitrary_spectral_information(frequency, slot_width=spacing, signal=power, baud_rate=baud_rate, return create_arbitrary_spectral_information(frequency, slot_width=spacing, signal=tx_power, baud_rate=baud_rate,
roll_off=roll_off, delta_pdb_per_channel=delta_pdb_per_channel, roll_off=roll_off, delta_pdb_per_channel=delta_pdb_per_channel,
tx_osnr=tx_osnr, label=label) tx_osnr=tx_osnr, tx_power=tx_power, label=label)
def carriers_to_spectral_information(initial_spectrum: dict[float, Carrier], def carriers_to_spectral_information(initial_spectrum: dict[float, Carrier],
power: float) -> SpectralInformation: power: float) -> SpectralInformation:
"""Initial spectrum is a dict with key = carrier frequency, and value a Carrier object. """Initial spectrum is a dict with key = carrier frequency, and value a Carrier object.
:param initial_spectrum: indexed by frequency in Hz, with power offset (delta_pdb), baudrate, slot width, :param initial_spectrum: indexed by frequency in Hz, with power offset (delta_pdb), baudrate, slot width,
tx_osnr and roll off. tx_osnr, tx_power and roll off.
:param power: power of the request :param power: power of the request
""" """
frequency = list(initial_spectrum.keys()) frequency = list(initial_spectrum.keys())
signal = [power * db2lin(c.delta_pdb) for c in initial_spectrum.values()] signal = [c.tx_power for c in initial_spectrum.values()]
roll_off = [c.roll_off for c in initial_spectrum.values()] roll_off = [c.roll_off for c in initial_spectrum.values()]
baud_rate = [c.baud_rate for c in initial_spectrum.values()] baud_rate = [c.baud_rate for c in initial_spectrum.values()]
delta_pdb_per_channel = [c.delta_pdb for c in initial_spectrum.values()] delta_pdb_per_channel = [c.delta_pdb for c in initial_spectrum.values()]
slot_width = [c.slot_width for c in initial_spectrum.values()] slot_width = [c.slot_width for c in initial_spectrum.values()]
tx_osnr = [c.tx_osnr for c in initial_spectrum.values()] tx_osnr = [c.tx_osnr for c in initial_spectrum.values()]
tx_power = [c.tx_power for c in initial_spectrum.values()]
label = [c.label for c in initial_spectrum.values()] label = [c.label for c in initial_spectrum.values()]
p_span0 = watt2dbm(power) p_span0 = watt2dbm(power)
return create_arbitrary_spectral_information(frequency=frequency, signal=signal, baud_rate=baud_rate, return create_arbitrary_spectral_information(frequency=frequency, signal=signal, baud_rate=baud_rate,
slot_width=slot_width, roll_off=roll_off, slot_width=slot_width, roll_off=roll_off,
delta_pdb_per_channel=delta_pdb_per_channel, tx_osnr=tx_osnr, delta_pdb_per_channel=delta_pdb_per_channel, tx_osnr=tx_osnr,
label=label) tx_power=tx_power, label=label)
@dataclass @dataclass
class Carrier: class Carrier:
"""One channel in the initial mixed-type spectrum definition, each type being defined by """One channel in the initial mixed-type spectrum definition, each type being defined by
its delta_pdb (power offset with respect to reference power), baud rate, slot_width, roll_off its delta_pdb (power offset with respect to reference power), baud rate, slot_width, roll_off
and tx_osnr. delta_pdb offset is applied to target power out of Roadm. tx_power, and tx_osnr. delta_pdb offset is applied to target power out of Roadm.
Label is used to group carriers which belong to the same partition when printing results. Label is used to group carriers which belong to the same partition when printing results.
""" """
delta_pdb: float delta_pdb: float
@@ -338,6 +352,7 @@ class Carrier:
slot_width: float slot_width: float
roll_off: float roll_off: float
tx_osnr: float tx_osnr: float
tx_power: float
label: str label: str

View File

@@ -218,7 +218,7 @@ def estimate_raman_gain(node, equipment, power_dbm):
# do not compute twice to save on time # do not compute twice to save on time
return node.estimated_gain return node.estimated_gain
spectral_info = create_input_spectral_information(f_min=f_min, f_max=f_max, roll_off=roll_off, spectral_info = create_input_spectral_information(f_min=f_min, f_max=f_max, roll_off=roll_off,
baud_rate=baud_rate, power=power, spacing=spacing, baud_rate=baud_rate, tx_power=power, spacing=spacing,
tx_osnr=tx_osnr) tx_osnr=tx_osnr)
pin = watt2dbm(sum(spectral_info.signal)) pin = watt2dbm(sum(spectral_info.signal))
attenuation_in_db = node.params.con_in + node.params.att_in attenuation_in_db = node.params.con_in + node.params.att_in
@@ -304,9 +304,11 @@ def set_egress_amplifier(network, this_node, equipment, pref_ch_db, pref_total_d
prev_node = this_node prev_node = this_node
node = oms node = oms
if isinstance(this_node, elements.Transceiver): if isinstance(this_node, elements.Transceiver):
# for the time being use the same power for the target of roadms and for transceivers # todo change pref to a ref channel
# TODO: This should be changed when introducing a power parameter dedicated to transceivers if equipment['SI']['default'].tx_power_dbm is not None:
this_node_out_power = pref_ch_db this_node_out_power = equipment['SI']['default'].tx_power_dbm
else:
this_node_out_power = pref_ch_db
if isinstance(this_node, elements.Roadm): if isinstance(this_node, elements.Roadm):
# get target power out from ROADM for the reference carrier based on equalization settings # get target power out from ROADM for the reference carrier based on equalization settings
this_node_out_power = this_node.get_per_degree_ref_power(degree=node.uid) this_node_out_power = this_node.get_per_degree_ref_power(degree=node.uid)

View File

@@ -9,7 +9,7 @@ This module contains utility functions that are used with gnpy.
""" """
from csv import writer from csv import writer
from numpy import pi, cos, sqrt, log10, linspace, zeros, shape, where, logical_and, mean from numpy import pi, cos, sqrt, log10, linspace, zeros, shape, where, logical_and, mean, array
from scipy import constants from scipy import constants
from copy import deepcopy from copy import deepcopy
@@ -452,3 +452,20 @@ def restore_order(elements, order):
[3, 2, 7] [3, 2, 7]
""" """
return [elements[i[0]] for i in sorted(enumerate(order), key=lambda x:x[1]) if elements[i[0]] is not None] return [elements[i[0]] for i in sorted(enumerate(order), key=lambda x:x[1]) if elements[i[0]] is not None]
def calculate_absolute_min_or_zero(x: array) -> array:
"""Calculates the element-wise absolute minimum between the x and zero.
Parameters:
x (array): The first input array.
Returns:
array: The element-wise absolute minimum between x and zero.
Example:
>>> x = array([-1, 2, -3])
>>> calculate_absolute_min_or_zero(x)
array([1., 0., 3.])
"""
return (abs(x) - x) / 2

View File

@@ -290,6 +290,7 @@
"spacing": 50e9, "spacing": 50e9,
"power_dbm": 0, "power_dbm": 0,
"power_range_db": [0, 0, 1], "power_range_db": [0, 0, 1],
"tx_power_dbm": 0,
"roll_off": 0.15, "roll_off": 0.15,
"tx_osnr": 40, "tx_osnr": 40,
"sys_margins": 2 "sys_margins": 2

View File

@@ -194,8 +194,10 @@ def transmission_main_example(args=None):
params['effective_freq_slot'] = None params['effective_freq_slot'] = None
trx_params = trx_mode_params(equipment) trx_params = trx_mode_params(equipment)
trx_params['power'] = dbm2watt(equipment['SI']['default'].power_dbm) trx_params['power'] = dbm2watt(equipment['SI']['default'].power_dbm)
trx_params['tx_power'] = dbm2watt(equipment['SI']['default'].power_dbm)
if args.power: if args.power:
trx_params['power'] = dbm2watt(float(args.power)) trx_params['power'] = dbm2watt(float(args.power))
trx_params['tx_power'] = dbm2watt(float(args.power))
params.update(trx_params) params.update(trx_params)
initial_spectrum = None initial_spectrum = None
params['nb_channel'] = automatic_nch(trx_params['f_min'], trx_params['f_max'], trx_params['spacing']) params['nb_channel'] = automatic_nch(trx_params['f_min'], trx_params['f_max'], trx_params['spacing'])
@@ -372,7 +374,8 @@ def path_requests_run(args=None):
'effective_freq_slot': None, 'effective_freq_slot': None,
'nb_channel': automatic_nch(equipment['SI']['default'].f_min, equipment['SI']['default'].f_max, 'nb_channel': automatic_nch(equipment['SI']['default'].f_min, equipment['SI']['default'].f_max,
equipment['SI']['default'].spacing), equipment['SI']['default'].spacing),
'power': dbm2watt(equipment['SI']['default'].power_dbm) 'power': dbm2watt(equipment['SI']['default'].power_dbm),
'tx_power': dbm2watt(equipment['SI']['default'].power_dbm)
} }
trx_params = trx_mode_params(equipment) trx_params = trx_mode_params(equipment)
params.update(trx_params) params.update(trx_params)

View File

@@ -51,9 +51,10 @@ class _JsonThing:
clean_kwargs = {k: v for k, v in kwargs.items() if v != ''} clean_kwargs = {k: v for k, v in kwargs.items() if v != ''}
for k, v in default_values.items(): for k, v in default_values.items():
setattr(self, k, clean_kwargs.get(k, v)) setattr(self, k, clean_kwargs.get(k, v))
if k not in clean_kwargs and name != 'Amp': if k not in clean_kwargs and name != 'Amp' and v is not None:
msg = f'\n WARNING missing {k} attribute in eqpt_config.json[{name}]' \ # do not show this warning if the default value is None
+ f'\n default value is {k} = {v}' msg = f'\n\tWARNING missing {k} attribute in eqpt_config.json[{name}]' \
+ f'\n\tdefault value is {k} = {v}\n'
_logger.warning(msg) _logger.warning(msg)
@@ -67,7 +68,8 @@ class SI(_JsonThing):
"power_range_db": [0, 0, 0.5], "power_range_db": [0, 0, 0.5],
"roll_off": 0.15, "roll_off": 0.15,
"tx_osnr": 45, "tx_osnr": 45,
"sys_margins": 0 "sys_margins": 0,
"tx_power_dbm": None # optional value in SI
} }
def __init__(self, **kwargs): def __init__(self, **kwargs):
@@ -268,7 +270,7 @@ def _spectrum_from_json(json_data):
label should be different for each partition label should be different for each partition
>>> json_data = {'spectrum': \ >>> json_data = {'spectrum': \
[{'f_min': 193.2e12, 'f_max': 193.4e12, 'slot_width': 50e9, 'baud_rate': 32e9, 'roll_off': 0.15, \ [{'f_min': 193.2e12, 'f_max': 193.4e12, 'slot_width': 50e9, 'baud_rate': 32e9, 'roll_off': 0.15, \
'delta_pdb': 1, 'tx_osnr': 45},\ 'delta_pdb': 1, 'tx_osnr': 45, 'tx_power_dbm': -7},\
{'f_min': 193.4625e12, 'f_max': 193.9875e12, 'slot_width': 75e9, 'baud_rate': 64e9, 'roll_off': 0.15},\ {'f_min': 193.4625e12, 'f_max': 193.9875e12, 'slot_width': 75e9, 'baud_rate': 64e9, 'roll_off': 0.15},\
{'f_min': 194.075e12, 'f_max': 194.075e12, 'slot_width': 100e9, 'baud_rate': 90e9, 'roll_off': 0.15},\ {'f_min': 194.075e12, 'f_max': 194.075e12, 'slot_width': 100e9, 'baud_rate': 90e9, 'roll_off': 0.15},\
{'f_min': 194.2e12, 'f_max': 194.35e12, 'slot_width': 50e9, 'baud_rate': 32e9, 'roll_off': 0.15}]} {'f_min': 194.2e12, 'f_max': 194.35e12, 'slot_width': 50e9, 'baud_rate': 32e9, 'roll_off': 0.15}]}
@@ -276,24 +278,24 @@ def _spectrum_from_json(json_data):
>>> for k, v in spectrum.items(): >>> for k, v in spectrum.items():
... print(f'{k}: {v}') ... print(f'{k}: {v}')
... ...
193200000000000.0: Carrier(delta_pdb=1, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=45, label='0-32.00G') 193200000000000.0: Carrier(delta_pdb=1, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=45, tx_power=0.00019952623149688798, label='0-32.00G')
193250000000000.0: Carrier(delta_pdb=1, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=45, label='0-32.00G') 193250000000000.0: Carrier(delta_pdb=1, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=45, tx_power=0.00019952623149688798, label='0-32.00G')
193300000000000.0: Carrier(delta_pdb=1, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=45, label='0-32.00G') 193300000000000.0: Carrier(delta_pdb=1, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=45, tx_power=0.00019952623149688798, label='0-32.00G')
193350000000000.0: Carrier(delta_pdb=1, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=45, label='0-32.00G') 193350000000000.0: Carrier(delta_pdb=1, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=45, tx_power=0.00019952623149688798, label='0-32.00G')
193400000000000.0: Carrier(delta_pdb=1, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=45, label='0-32.00G') 193400000000000.0: Carrier(delta_pdb=1, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=45, tx_power=0.00019952623149688798, label='0-32.00G')
193462500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, label='1-64.00G') 193462500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, tx_power=0.001, label='1-64.00G')
193537500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, label='1-64.00G') 193537500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, tx_power=0.001, label='1-64.00G')
193612500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, label='1-64.00G') 193612500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, tx_power=0.001, label='1-64.00G')
193687500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, label='1-64.00G') 193687500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, tx_power=0.001, label='1-64.00G')
193762500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, label='1-64.00G') 193762500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, tx_power=0.001, label='1-64.00G')
193837500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, label='1-64.00G') 193837500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, tx_power=0.001, label='1-64.00G')
193912500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, label='1-64.00G') 193912500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, tx_power=0.001, label='1-64.00G')
193987500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, label='1-64.00G') 193987500000000.0: Carrier(delta_pdb=0, baud_rate=64000000000.0, slot_width=75000000000.0, roll_off=0.15, tx_osnr=40, tx_power=0.001, label='1-64.00G')
194075000000000.0: Carrier(delta_pdb=0, baud_rate=90000000000.0, slot_width=100000000000.0, roll_off=0.15, tx_osnr=40, label='2-90.00G') 194075000000000.0: Carrier(delta_pdb=0, baud_rate=90000000000.0, slot_width=100000000000.0, roll_off=0.15, tx_osnr=40, tx_power=0.001, label='2-90.00G')
194200000000000.0: Carrier(delta_pdb=0, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=40, label='3-32.00G') 194200000000000.0: Carrier(delta_pdb=0, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=40, tx_power=0.001, label='3-32.00G')
194250000000000.0: Carrier(delta_pdb=0, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=40, label='3-32.00G') 194250000000000.0: Carrier(delta_pdb=0, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=40, tx_power=0.001, label='3-32.00G')
194300000000000.0: Carrier(delta_pdb=0, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=40, label='3-32.00G') 194300000000000.0: Carrier(delta_pdb=0, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=40, tx_power=0.001, label='3-32.00G')
194350000000000.0: Carrier(delta_pdb=0, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=40, label='3-32.00G') 194350000000000.0: Carrier(delta_pdb=0, baud_rate=32000000000.0, slot_width=50000000000.0, roll_off=0.15, tx_osnr=40, tx_power=0.001, label='3-32.00G')
""" """
spectrum = {} spectrum = {}
json_data = sorted(json_data, key=lambda x: x['f_min']) json_data = sorted(json_data, key=lambda x: x['f_min'])
@@ -309,6 +311,9 @@ def _spectrum_from_json(json_data):
# default tx_osnr is set to 40 dB # default tx_osnr is set to 40 dB
if 'tx_osnr' not in part: if 'tx_osnr' not in part:
part['tx_osnr'] = 40 part['tx_osnr'] = 40
# default tx_power_dbm is set to 0 dBn
if 'tx_power_dbm' not in part:
part['tx_power_dbm'] = 0
# starting freq is exactly f_min to be consistent with utils.automatic_nch # starting freq is exactly f_min to be consistent with utils.automatic_nch
# first partition min occupation is f_min - slot_width / 2 (central_frequency is f_min) # first partition min occupation is f_min - slot_width / 2 (central_frequency is f_min)
# supposes that carriers are centered on frequency # supposes that carriers are centered on frequency
@@ -327,7 +332,8 @@ def _spectrum_from_json(json_data):
part['slot_width']): part['slot_width']):
spectrum[current_freq] = Carrier(delta_pdb=part['delta_pdb'], baud_rate=part['baud_rate'], spectrum[current_freq] = Carrier(delta_pdb=part['delta_pdb'], baud_rate=part['baud_rate'],
slot_width=part['slot_width'], roll_off=part['roll_off'], slot_width=part['slot_width'], roll_off=part['roll_off'],
tx_osnr=part['tx_osnr'], label=part['label']) tx_osnr=part['tx_osnr'], tx_power=dbm2watt(part['tx_power_dbm']),
label=part['label'])
previous_part_max_freq = current_freq + part['slot_width'] / 2 previous_part_max_freq = current_freq + part['slot_width'] / 2
return spectrum return spectrum
@@ -410,6 +416,9 @@ def _equipment_from_json(json_data, filename):
elif key == 'Roadm': elif key == 'Roadm':
equipment[key][subkey] = Roadm(**entry) equipment[key][subkey] = Roadm(**entry)
elif key == 'SI': elif key == 'SI':
# use power_dbm value for tx_power_dbm if the key is not in 'SI'
# if 'tx_power_dbm' not in entry.keys():
# entry['tx_power_dbm'] = entry['power_dbm']
equipment[key][subkey] = SI(**entry) equipment[key][subkey] = SI(**entry)
elif key == 'Transceiver': elif key == 'Transceiver':
equipment[key][subkey] = Transceiver(**entry) equipment[key][subkey] = Transceiver(**entry)
@@ -576,7 +585,6 @@ def requests_from_json(json_data, equipment):
params['nodes_list'] = [n['num-unnum-hop']['node-id'] for n in nd_list] params['nodes_list'] = [n['num-unnum-hop']['node-id'] for n in nd_list]
params['loose_list'] = [n['num-unnum-hop']['hop-type'] for n in nd_list] params['loose_list'] = [n['num-unnum-hop']['hop-type'] for n in nd_list]
# recover trx physical param (baudrate, ...) from type and mode # recover trx physical param (baudrate, ...) from type and mode
# in trx_mode_params optical power is read from equipment['SI']['default'] and
# nb_channel is computed based on min max frequency and spacing # nb_channel is computed based on min max frequency and spacing
try: try:
trx_params = trx_mode_params(equipment, params['trx_type'], params['trx_mode'], True) trx_params = trx_mode_params(equipment, params['trx_type'], params['trx_mode'], True)
@@ -608,6 +616,14 @@ def requests_from_json(json_data, equipment):
params['path_bandwidth'] = req['path-constraints']['te-bandwidth']['path_bandwidth'] params['path_bandwidth'] = req['path-constraints']['te-bandwidth']['path_bandwidth']
except KeyError: except KeyError:
pass pass
params['tx_power'] = req['path-constraints']['te-bandwidth'].get('tx_power')
default_tx_power_dbm = equipment['SI']['default'].tx_power_dbm
if params['tx_power'] is None:
# use request's input power in span instead
params['tx_power'] = params['power']
if default_tx_power_dbm is not None:
# use default tx power
params['tx_power'] = dbm2watt(default_tx_power_dbm)
_check_one_request(params, f_max_from_si) _check_one_request(params, f_max_from_si)
requests_list.append(PathRequest(**params)) requests_list.append(PathRequest(**params))
return requests_list return requests_list

View File

@@ -36,7 +36,7 @@ RequestParams = namedtuple('RequestParams', 'request_id source destination bidir
' trx_mode nodes_list loose_list spacing power nb_channel f_min' ' trx_mode nodes_list loose_list spacing power nb_channel f_min'
' f_max format baud_rate OSNR penalties bit_rate' ' f_max format baud_rate OSNR penalties bit_rate'
' roll_off tx_osnr min_spacing cost path_bandwidth effective_freq_slot' ' roll_off tx_osnr min_spacing cost path_bandwidth effective_freq_slot'
' equalization_offset_db') ' equalization_offset_db, tx_power')
DisjunctionParams = namedtuple('DisjunctionParams', 'disjunction_id relaxable link_diverse' DisjunctionParams = namedtuple('DisjunctionParams', 'disjunction_id relaxable link_diverse'
' node_diverse disjunctions_req') ' node_diverse disjunctions_req')
@@ -65,6 +65,7 @@ class PathRequest:
self.bit_rate = params.bit_rate self.bit_rate = params.bit_rate
self.roll_off = params.roll_off self.roll_off = params.roll_off
self.tx_osnr = params.tx_osnr self.tx_osnr = params.tx_osnr
self.tx_power = params.tx_power
self.min_spacing = params.min_spacing self.min_spacing = params.min_spacing
self.cost = params.cost self.cost = params.cost
self.path_bandwidth = params.path_bandwidth self.path_bandwidth = params.path_bandwidth
@@ -95,7 +96,8 @@ class PathRequest:
f'baud_rate:\t{temp} Gbaud', f'baud_rate:\t{temp} Gbaud',
f'bit_rate:\t{temp2} Gb/s', f'bit_rate:\t{temp2} Gb/s',
f'spacing:\t{self.spacing * 1e-9} GHz', f'spacing:\t{self.spacing * 1e-9} GHz',
f'power: \t{round(lin2db(self.power)+30, 2)} dBm', f'power: \t{round(lin2db(self.power) + 30, 2)} dBm',
f'tx_power_dbm: \t{round(lin2db(self.tx_power) + 30, 2)} dBm',
f'nb channels: \t{self.nb_channel}', f'nb channels: \t{self.nb_channel}',
f'path_bandwidth: \t{round(self.path_bandwidth * 1e-9, 2)} Gbit/s', f'path_bandwidth: \t{round(self.path_bandwidth * 1e-9, 2)} Gbit/s',
f'nodes-list:\t{self.nodes_list}', f'nodes-list:\t{self.nodes_list}',
@@ -337,7 +339,7 @@ def propagate(path, req, equipment):
else: else:
si = create_input_spectral_information( si = create_input_spectral_information(
f_min=req.f_min, f_max=req.f_max, roll_off=req.roll_off, baud_rate=req.baud_rate, f_min=req.f_min, f_max=req.f_max, roll_off=req.roll_off, baud_rate=req.baud_rate,
power=req.power, spacing=req.spacing, tx_osnr=req.tx_osnr, delta_pdb=req.offset_db) spacing=req.spacing, tx_osnr=req.tx_osnr, tx_power=req.tx_power, delta_pdb=req.offset_db)
roadm_osnr = [] roadm_osnr = []
for i, el in enumerate(path): for i, el in enumerate(path):
if isinstance(el, Roadm): if isinstance(el, Roadm):
@@ -380,8 +382,9 @@ def propagate_and_optimize_mode(path, req, equipment):
raise ServiceError(msg) raise ServiceError(msg)
spc_info = create_input_spectral_information(f_min=req.f_min, f_max=req.f_max, spc_info = create_input_spectral_information(f_min=req.f_min, f_max=req.f_max,
roll_off=equipment['SI']['default'].roll_off, roll_off=equipment['SI']['default'].roll_off,
baud_rate=this_br, power=req.power, spacing=req.spacing, baud_rate=this_br, spacing=req.spacing,
delta_pdb=this_offset, tx_osnr=req.tx_osnr) delta_pdb=this_offset, tx_osnr=req.tx_osnr,
tx_power=req.tx_power)
roadm_osnr = [] roadm_osnr = []
for i, el in enumerate(path): for i, el in enumerate(path):
if isinstance(el, Roadm): if isinstance(el, Roadm):
@@ -968,6 +971,7 @@ def compare_reqs(req1, req2, disjlist):
req1.format == req2.format and \ req1.format == req2.format and \
req1.OSNR == req2.OSNR and \ req1.OSNR == req2.OSNR and \
req1.roll_off == req2.roll_off and \ req1.roll_off == req2.roll_off and \
req1.tx_power == req2.tx_power and \
same_disj: same_disj:
return True return True
else: else:

View File

@@ -170,9 +170,9 @@
"roll_off": 0.15, "roll_off": 0.15,
"tx_osnr": 100, "tx_osnr": 100,
"sys_margins": 0 "sys_margins": 0
} }],
], "Transceiver":[
"Transceiver": [{ {
"type_variety": "vendorA_trx-type1", "type_variety": "vendorA_trx-type1",
"frequency": { "frequency": {
"min": 191.35e12, "min": 191.35e12,

View File

@@ -1,10 +1,12 @@
INFO gnpy.tools.cli_examples:cli_examples.py Computing path requests meshTopologyExampleV2.xls into JSON format INFO gnpy.tools.cli_examples:cli_examples.py Computing path requests meshTopologyExampleV2.xls into JSON format
WARNING gnpy.tools.json_io:json_io.py WARNING gnpy.tools.json_io:json_io.py
WARNING missing type_variety attribute in eqpt_config.json[Roadm] WARNING missing type_variety attribute in eqpt_config.json[Roadm]
default value is type_variety = default default value is type_variety = default
WARNING gnpy.tools.json_io:json_io.py WARNING gnpy.tools.json_io:json_io.py
WARNING missing roadm-path-impairments attribute in eqpt_config.json[Roadm] WARNING missing roadm-path-impairments attribute in eqpt_config.json[Roadm]
default value is roadm-path-impairments = [] default value is roadm-path-impairments = []
INFO gnpy.tools.json_io:json_io.py Automatically converting requests from XLS to JSON INFO gnpy.tools.json_io:json_io.py Automatically converting requests from XLS to JSON
INFO gnpy.topology.request:request.py INFO gnpy.topology.request:request.py
request 0 request 0

View File

@@ -1,10 +1,12 @@
INFO gnpy.tools.cli_examples:cli_examples.py Computing path requests CORONET_services.json into JSON format INFO gnpy.tools.cli_examples:cli_examples.py Computing path requests CORONET_services.json into JSON format
WARNING gnpy.tools.json_io:json_io.py WARNING gnpy.tools.json_io:json_io.py
WARNING missing type_variety attribute in eqpt_config.json[Roadm] WARNING missing type_variety attribute in eqpt_config.json[Roadm]
default value is type_variety = default default value is type_variety = default
WARNING gnpy.tools.json_io:json_io.py WARNING gnpy.tools.json_io:json_io.py
WARNING missing roadm-path-impairments attribute in eqpt_config.json[Roadm] WARNING missing roadm-path-impairments attribute in eqpt_config.json[Roadm]
default value is roadm-path-impairments = [] default value is roadm-path-impairments = []
INFO gnpy.topology.request:request.py INFO gnpy.topology.request:request.py
request 0 request 0
Computing path from trx Abilene to trx Albany Computing path from trx Abilene to trx Albany

View File

@@ -1,9 +1,11 @@
WARNING gnpy.tools.json_io:json_io.py WARNING gnpy.tools.json_io:json_io.py
WARNING missing type_variety attribute in eqpt_config.json[Roadm] WARNING missing type_variety attribute in eqpt_config.json[Roadm]
default value is type_variety = default default value is type_variety = default
WARNING gnpy.tools.json_io:json_io.py WARNING gnpy.tools.json_io:json_io.py
WARNING missing roadm-path-impairments attribute in eqpt_config.json[Roadm] WARNING missing roadm-path-impairments attribute in eqpt_config.json[Roadm]
default value is roadm-path-impairments = [] default value is roadm-path-impairments = []
INFO gnpy.tools.cli_examples:cli_examples.py source = 'brest' INFO gnpy.tools.cli_examples:cli_examples.py source = 'brest'
INFO gnpy.tools.cli_examples:cli_examples.py destination = 'rennes' INFO gnpy.tools.cli_examples:cli_examples.py destination = 'rennes'
WARNING gnpy.core.network:network.py WARNING gnpy.core.network:network.py

View File

@@ -1,9 +1,11 @@
WARNING gnpy.tools.json_io:json_io.py WARNING gnpy.tools.json_io:json_io.py
WARNING missing type_variety attribute in eqpt_config.json[Roadm] WARNING missing type_variety attribute in eqpt_config.json[Roadm]
default value is type_variety = default default value is type_variety = default
WARNING gnpy.tools.json_io:json_io.py WARNING gnpy.tools.json_io:json_io.py
WARNING missing roadm-path-impairments attribute in eqpt_config.json[Roadm] WARNING missing roadm-path-impairments attribute in eqpt_config.json[Roadm]
default value is roadm-path-impairments = [] default value is roadm-path-impairments = []
INFO gnpy.tools.cli_examples:cli_examples.py source = 'lannion' INFO gnpy.tools.cli_examples:cli_examples.py source = 'lannion'
INFO gnpy.tools.cli_examples:cli_examples.py destination = 'lorient' INFO gnpy.tools.cli_examples:cli_examples.py destination = 'lorient'
WARNING gnpy.core.network:network.py WARNING gnpy.core.network:network.py

View File

@@ -16,11 +16,13 @@ Transceiver trx_Stockholm
PMD (ps): 0.00 PMD (ps): 0.00
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.00 Latency (ms): 0.00
Actual pch out (dBm): 2.00
Roadm roadm_Stockholm Roadm roadm_Stockholm
type_variety: default Type_variety: default
effective loss (dB): 22.00 Reference loss (dB): 22.00
reference pch out (dBm): -20.00 Actual loss (dB): 22.00
actual pch out (dBm): -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): -20.00
Edfa Edfa_booster_roadm_Stockholm_to_fiber (Stockholm → Norrköping)_(1/2) Edfa Edfa_booster_roadm_Stockholm_to_fiber (Stockholm → Norrköping)_(1/2)
type_variety: openroadm_mw_mw_booster type_variety: openroadm_mw_mw_booster
effective gain(dB): 22.00 effective gain(dB): 22.00
@@ -79,10 +81,11 @@ Edfa Edfa_preamp_roadm_Norrköping_from_fiber (Stockholm → Norrköping)_(2/2)
actual pch out (dBm): 2.03 actual pch out (dBm): 2.03
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm_Norrköping Roadm roadm_Norrköping
type_variety: default Type_variety: default
effective loss (dB): 22.00 Reference loss (dB): 22.00
reference pch out (dBm): -20.00 Actual loss (dB): 22.03
actual pch out (dBm): -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): -20.00
Edfa Edfa_booster_roadm_Norrköping_to_fiber (Norrköping → Linköping) Edfa Edfa_booster_roadm_Norrköping_to_fiber (Norrköping → Linköping)
type_variety: openroadm_mw_mw_booster type_variety: openroadm_mw_mw_booster
effective gain(dB): 22.00 effective gain(dB): 22.00
@@ -119,10 +122,11 @@ Edfa Edfa_preamp_roadm_Linköping_from_fiber (Norrköping → Linköping)
actual pch out (dBm): 2.01 actual pch out (dBm): 2.01
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm_Linköping Roadm roadm_Linköping
type_variety: default Type_variety: default
effective loss (dB): 22.00 Reference loss (dB): 22.00
reference pch out (dBm): -20.00 Actual loss (dB): 22.01
actual pch out (dBm): -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): -20.00
Edfa Edfa_booster_roadm_Linköping_to_fiber (Linköping → Jönköping) Edfa Edfa_booster_roadm_Linköping_to_fiber (Linköping → Jönköping)
type_variety: openroadm_mw_mw_booster type_variety: openroadm_mw_mw_booster
effective gain(dB): 22.00 effective gain(dB): 22.00
@@ -159,10 +163,11 @@ Edfa Edfa_preamp_roadm_Jönköping_from_fiber (Linköping → Jönköping)
actual pch out (dBm): 2.05 actual pch out (dBm): 2.05
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm_Jönköping Roadm roadm_Jönköping
type_variety: default Type_variety: default
effective loss (dB): 22.00 Reference loss (dB): 22.00
reference pch out (dBm): -20.00 Actual loss (dB): 22.05
actual pch out (dBm): -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): -20.00
Edfa Edfa_booster_roadm_Jönköping_to_fiber (Jönköping → Borås) Edfa Edfa_booster_roadm_Jönköping_to_fiber (Jönköping → Borås)
type_variety: openroadm_mw_mw_booster type_variety: openroadm_mw_mw_booster
effective gain(dB): 22.00 effective gain(dB): 22.00
@@ -199,10 +204,11 @@ Edfa Edfa_preamp_roadm_Borås_from_fiber (Jönköping → Borås)
actual pch out (dBm): 2.02 actual pch out (dBm): 2.02
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm_Borås Roadm roadm_Borås
type_variety: default Type_variety: default
effective loss (dB): 22.00 Reference loss (dB): 22.00
reference pch out (dBm): -20.00 Actual loss (dB): 22.02
actual pch out (dBm): -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): -20.00
Edfa Edfa_booster_roadm_Borås_to_fiber (Borås → Gothenburg) Edfa Edfa_booster_roadm_Borås_to_fiber (Borås → Gothenburg)
type_variety: openroadm_mw_mw_booster type_variety: openroadm_mw_mw_booster
effective gain(dB): 22.00 effective gain(dB): 22.00
@@ -239,10 +245,11 @@ Edfa Edfa_preamp_roadm_Gothenburg_from_fiber (Borås → Gothenburg)
actual pch out (dBm): 2.02 actual pch out (dBm): 2.02
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm_Gothenburg Roadm roadm_Gothenburg
type_variety: default Type_variety: default
effective loss (dB): 22.00 Reference loss (dB): 22.00
reference pch out (dBm): -20.00 Actual loss (dB): 22.02
actual pch out (dBm): -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): -20.00
Transceiver trx_Gothenburg Transceiver trx_Gothenburg
GSNR (0.1nm, dB): 18.89 GSNR (0.1nm, dB): 18.89
GSNR (signal bw, dB): 14.86 GSNR (signal bw, dB): 14.86
@@ -252,6 +259,7 @@ Transceiver trx_Gothenburg
PMD (ps): 7.99 PMD (ps): 7.99
PDL (dB): 3.74 PDL (dB): 3.74
Latency (ms): 2.45 Latency (ms): 2.45
Actual pch out (dBm): 2.00
Transmission result for input power = 2.00 dBm: Transmission result for input power = 2.00 dBm:
Final GSNR (0.1 nm): 18.89 dB Final GSNR (0.1 nm): 18.89 dB

View File

@@ -16,11 +16,13 @@ Transceiver trx_Stockholm
PMD (ps): 0.00 PMD (ps): 0.00
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.00 Latency (ms): 0.00
Actual pch out (dBm): 2.00
Roadm roadm_Stockholm Roadm roadm_Stockholm
type_variety: default Type_variety: default
effective loss (dB): 22.00 Reference loss (dB): 22.00
reference pch out (dBm): -20.00 Actual loss (dB): 22.00
actual pch out (dBm): -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): -20.00
Edfa Edfa_booster_roadm_Stockholm_to_fiber (Stockholm → Norrköping)_(1/2) Edfa Edfa_booster_roadm_Stockholm_to_fiber (Stockholm → Norrköping)_(1/2)
type_variety: openroadm_mw_mw_booster type_variety: openroadm_mw_mw_booster
effective gain(dB): 22.00 effective gain(dB): 22.00
@@ -79,10 +81,11 @@ Edfa Edfa_preamp_roadm_Norrköping_from_fiber (Stockholm → Norrköping)_(2/2)
actual pch out (dBm): 2.03 actual pch out (dBm): 2.03
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm_Norrköping Roadm roadm_Norrköping
type_variety: default Type_variety: default
effective loss (dB): 22.00 Reference loss (dB): 22.00
reference pch out (dBm): -20.00 Actual loss (dB): 22.03
actual pch out (dBm): -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): -20.00
Edfa Edfa_booster_roadm_Norrköping_to_fiber (Norrköping → Linköping) Edfa Edfa_booster_roadm_Norrköping_to_fiber (Norrköping → Linköping)
type_variety: openroadm_mw_mw_booster type_variety: openroadm_mw_mw_booster
effective gain(dB): 22.00 effective gain(dB): 22.00
@@ -119,10 +122,11 @@ Edfa Edfa_preamp_roadm_Linköping_from_fiber (Norrköping → Linköping)
actual pch out (dBm): 2.01 actual pch out (dBm): 2.01
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm_Linköping Roadm roadm_Linköping
type_variety: default Type_variety: default
effective loss (dB): 22.00 Reference loss (dB): 22.00
reference pch out (dBm): -20.00 Actual loss (dB): 22.01
actual pch out (dBm): -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): -20.00
Edfa Edfa_booster_roadm_Linköping_to_fiber (Linköping → Jönköping) Edfa Edfa_booster_roadm_Linköping_to_fiber (Linköping → Jönköping)
type_variety: openroadm_mw_mw_booster type_variety: openroadm_mw_mw_booster
effective gain(dB): 22.00 effective gain(dB): 22.00
@@ -159,10 +163,11 @@ Edfa Edfa_preamp_roadm_Jönköping_from_fiber (Linköping → Jönköping)
actual pch out (dBm): 2.04 actual pch out (dBm): 2.04
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm_Jönköping Roadm roadm_Jönköping
type_variety: default Type_variety: default
effective loss (dB): 22.00 Reference loss (dB): 22.00
reference pch out (dBm): -20.00 Actual loss (dB): 22.04
actual pch out (dBm): -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): -20.00
Edfa Edfa_booster_roadm_Jönköping_to_fiber (Jönköping → Borås) Edfa Edfa_booster_roadm_Jönköping_to_fiber (Jönköping → Borås)
type_variety: openroadm_mw_mw_booster type_variety: openroadm_mw_mw_booster
effective gain(dB): 22.00 effective gain(dB): 22.00
@@ -199,10 +204,11 @@ Edfa Edfa_preamp_roadm_Borås_from_fiber (Jönköping → Borås)
actual pch out (dBm): 2.02 actual pch out (dBm): 2.02
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm_Borås Roadm roadm_Borås
type_variety: default Type_variety: default
effective loss (dB): 22.00 Reference loss (dB): 22.00
reference pch out (dBm): -20.00 Actual loss (dB): 22.02
actual pch out (dBm): -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): -20.00
Edfa Edfa_booster_roadm_Borås_to_fiber (Borås → Gothenburg) Edfa Edfa_booster_roadm_Borås_to_fiber (Borås → Gothenburg)
type_variety: openroadm_mw_mw_booster type_variety: openroadm_mw_mw_booster
effective gain(dB): 22.00 effective gain(dB): 22.00
@@ -239,10 +245,11 @@ Edfa Edfa_preamp_roadm_Gothenburg_from_fiber (Borås → Gothenburg)
actual pch out (dBm): 2.02 actual pch out (dBm): 2.02
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm_Gothenburg Roadm roadm_Gothenburg
type_variety: default Type_variety: default
effective loss (dB): 22.00 Reference loss (dB): 22.00
reference pch out (dBm): -20.00 Actual loss (dB): 22.02
actual pch out (dBm): -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): -20.00
Transceiver trx_Gothenburg Transceiver trx_Gothenburg
GSNR (0.1nm, dB): 19.25 GSNR (0.1nm, dB): 19.25
GSNR (signal bw, dB): 15.23 GSNR (signal bw, dB): 15.23
@@ -252,6 +259,7 @@ Transceiver trx_Gothenburg
PMD (ps): 7.99 PMD (ps): 7.99
PDL (dB): 3.74 PDL (dB): 3.74
Latency (ms): 2.45 Latency (ms): 2.45
Actual pch out (dBm): 2.00
Transmission result for input power = 2.00 dBm: Transmission result for input power = 2.00 dBm:
Final GSNR (0.1 nm): 19.25 dB Final GSNR (0.1 nm): 19.25 dB

View File

@@ -21,6 +21,7 @@
bit_rate: None Gb/s bit_rate: None Gb/s
spacing: 50.0 GHz spacing: 50.0 GHz
power: 1.0 dBm power: 1.0 dBm
tx_power_dbm: 0.0 dBm
nb channels: 80 nb channels: 80
path_bandwidth: 100.0 Gbit/s path_bandwidth: 100.0 Gbit/s
nodes-list: [] nodes-list: []
@@ -34,6 +35,7 @@
bit_rate: 100.0 Gb/s bit_rate: 100.0 Gb/s
spacing: 50.0 GHz spacing: 50.0 GHz
power: 1.0 dBm power: 1.0 dBm
tx_power_dbm: 0.0 dBm
nb channels: 95 nb channels: 95
path_bandwidth: 200.0 Gbit/s path_bandwidth: 200.0 Gbit/s
nodes-list: ['roadm Brest_KLA', 'roadm Lannion_CAS', 'roadm Lorient_KMA', 'roadm Vannes_KBE'] nodes-list: ['roadm Brest_KLA', 'roadm Lannion_CAS', 'roadm Lorient_KMA', 'roadm Vannes_KBE']
@@ -47,6 +49,7 @@
bit_rate: 100.0 Gb/s bit_rate: 100.0 Gb/s
spacing: 50.0 GHz spacing: 50.0 GHz
power: 0.0 dBm power: 0.0 dBm
tx_power_dbm: 0.0 dBm
nb channels: 95 nb channels: 95
path_bandwidth: 60.0 Gbit/s path_bandwidth: 60.0 Gbit/s
nodes-list: [] nodes-list: []
@@ -60,6 +63,7 @@
bit_rate: None Gb/s bit_rate: None Gb/s
spacing: 75.0 GHz spacing: 75.0 GHz
power: 3.0 dBm power: 3.0 dBm
tx_power_dbm: 0.0 dBm
nb channels: 63 nb channels: 63
path_bandwidth: 150.0 Gbit/s path_bandwidth: 150.0 Gbit/s
nodes-list: [] nodes-list: []
@@ -73,6 +77,7 @@
bit_rate: 200.0 Gb/s bit_rate: 200.0 Gb/s
spacing: 75.0 GHz spacing: 75.0 GHz
power: 3.0 dBm power: 3.0 dBm
tx_power_dbm: 0.0 dBm
nb channels: 63 nb channels: 63
path_bandwidth: 20.0 Gbit/s path_bandwidth: 20.0 Gbit/s
nodes-list: [] nodes-list: []
@@ -86,6 +91,7 @@
bit_rate: 100.0 Gb/s bit_rate: 100.0 Gb/s
spacing: 50.0 GHz spacing: 50.0 GHz
power: 0.0 dBm power: 0.0 dBm
tx_power_dbm: 0.0 dBm
nb channels: 76 nb channels: 76
path_bandwidth: 700.0 Gbit/s path_bandwidth: 700.0 Gbit/s
nodes-list: [] nodes-list: []
@@ -99,6 +105,7 @@
bit_rate: 100.0 Gb/s bit_rate: 100.0 Gb/s
spacing: 75.0 GHz spacing: 75.0 GHz
power: 0.0 dBm power: 0.0 dBm
tx_power_dbm: 0.0 dBm
nb channels: 50 nb channels: 50
path_bandwidth: 400.0 Gbit/s path_bandwidth: 400.0 Gbit/s
nodes-list: [] nodes-list: []

View File

@@ -11,6 +11,7 @@
bit_rate: 300.0 Gb/s bit_rate: 300.0 Gb/s
spacing: 62.50000000000001 GHz spacing: 62.50000000000001 GHz
power: 0.0 dBm power: 0.0 dBm
tx_power_dbm: 0.0 dBm
nb channels: 76 nb channels: 76
path_bandwidth: 100.0 Gbit/s path_bandwidth: 100.0 Gbit/s
nodes-list: [] nodes-list: []

View File

@@ -16,6 +16,7 @@ Transceiver trx Rennes_STA
PMD (ps): 0.57 PMD (ps): 0.57
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.98 Latency (ms): 0.98
Actual pch out (dBm): 3.00
Propagating with input power = -2.50 dBm: Propagating with input power = -2.50 dBm:
Transceiver trx Rennes_STA Transceiver trx Rennes_STA
@@ -27,6 +28,7 @@ Transceiver trx Rennes_STA
PMD (ps): 0.57 PMD (ps): 0.57
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.98 Latency (ms): 0.98
Actual pch out (dBm): 3.00
Propagating with input power = -2.00 dBm: Propagating with input power = -2.00 dBm:
Transceiver trx Rennes_STA Transceiver trx Rennes_STA
@@ -38,6 +40,7 @@ Transceiver trx Rennes_STA
PMD (ps): 0.57 PMD (ps): 0.57
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.98 Latency (ms): 0.98
Actual pch out (dBm): 3.00
Propagating with input power = -1.50 dBm: Propagating with input power = -1.50 dBm:
Transceiver trx Rennes_STA Transceiver trx Rennes_STA
@@ -49,6 +52,7 @@ Transceiver trx Rennes_STA
PMD (ps): 0.57 PMD (ps): 0.57
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.98 Latency (ms): 0.98
Actual pch out (dBm): 3.00
Propagating with input power = -1.00 dBm: Propagating with input power = -1.00 dBm:
Transceiver trx Rennes_STA Transceiver trx Rennes_STA
@@ -60,6 +64,7 @@ Transceiver trx Rennes_STA
PMD (ps): 0.57 PMD (ps): 0.57
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.98 Latency (ms): 0.98
Actual pch out (dBm): 3.00
Propagating with input power = -0.50 dBm: Propagating with input power = -0.50 dBm:
Transceiver trx Rennes_STA Transceiver trx Rennes_STA
@@ -71,6 +76,7 @@ Transceiver trx Rennes_STA
PMD (ps): 0.57 PMD (ps): 0.57
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.98 Latency (ms): 0.98
Actual pch out (dBm): 3.00
Propagating with input power = -0.00 dBm: Propagating with input power = -0.00 dBm:
Transceiver trx Rennes_STA Transceiver trx Rennes_STA
@@ -82,6 +88,7 @@ Transceiver trx Rennes_STA
PMD (ps): 0.57 PMD (ps): 0.57
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.98 Latency (ms): 0.98
Actual pch out (dBm): 3.00
Propagating with input power = 0.50 dBm: Propagating with input power = 0.50 dBm:
Transceiver trx Rennes_STA Transceiver trx Rennes_STA
@@ -93,6 +100,7 @@ Transceiver trx Rennes_STA
PMD (ps): 0.57 PMD (ps): 0.57
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.98 Latency (ms): 0.98
Actual pch out (dBm): 3.00
Propagating with input power = 1.00 dBm: Propagating with input power = 1.00 dBm:
Transceiver trx Rennes_STA Transceiver trx Rennes_STA
@@ -104,6 +112,7 @@ Transceiver trx Rennes_STA
PMD (ps): 0.57 PMD (ps): 0.57
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.98 Latency (ms): 0.98
Actual pch out (dBm): 3.00
Propagating with input power = 1.50 dBm: Propagating with input power = 1.50 dBm:
Transceiver trx Rennes_STA Transceiver trx Rennes_STA
@@ -115,6 +124,7 @@ Transceiver trx Rennes_STA
PMD (ps): 0.57 PMD (ps): 0.57
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.98 Latency (ms): 0.98
Actual pch out (dBm): 3.00
Propagating with input power = 2.00 dBm: Propagating with input power = 2.00 dBm:
Transceiver trx Rennes_STA Transceiver trx Rennes_STA
@@ -126,6 +136,7 @@ Transceiver trx Rennes_STA
PMD (ps): 0.57 PMD (ps): 0.57
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.98 Latency (ms): 0.98
Actual pch out (dBm): 3.00
Propagating with input power = 2.50 dBm: Propagating with input power = 2.50 dBm:
Transceiver trx Rennes_STA Transceiver trx Rennes_STA
@@ -137,6 +148,7 @@ Transceiver trx Rennes_STA
PMD (ps): 0.57 PMD (ps): 0.57
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.98 Latency (ms): 0.98
Actual pch out (dBm): 3.00
Propagating with input power = 3.00 dBm: Propagating with input power = 3.00 dBm:
Transceiver trx Rennes_STA Transceiver trx Rennes_STA
@@ -148,6 +160,7 @@ Transceiver trx Rennes_STA
PMD (ps): 0.57 PMD (ps): 0.57
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.98 Latency (ms): 0.98
Actual pch out (dBm): 3.00
(Invalid source node 'brest' replaced with trx Brest_KLA) (Invalid source node 'brest' replaced with trx Brest_KLA)

View File

@@ -17,11 +17,13 @@ Transceiver trx Lannion_CAS
PMD (ps): 0.00 PMD (ps): 0.00
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.00 Latency (ms): 0.00
Actual pch out (dBm): 0.00
Roadm roadm Lannion_CAS Roadm roadm Lannion_CAS
type_variety: default Type_variety: default
effective loss (dB): 20.00 Reference loss (dB): 20.00
reference pch out (dBm): -20.00 Actual loss (dB): 20.00
actual pch out (dBm): -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): -20.00
Edfa east edfa in Lannion_CAS to Corlay Edfa east edfa in Lannion_CAS to Corlay
type_variety: std_medium_gain type_variety: std_medium_gain
effective gain(dB): 21.00 effective gain(dB): 21.00
@@ -80,10 +82,11 @@ Edfa west edfa in Lorient_KMA to Loudeac
actual pch out (dBm): 1.05 actual pch out (dBm): 1.05
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm Lorient_KMA Roadm roadm Lorient_KMA
type_variety: default Type_variety: default
effective loss (dB): 21.00 Reference loss (dB): 21.00
reference pch out (dBm): -20.00 Actual loss (dB): 21.05
actual pch out (dBm): -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): -20.00
Transceiver trx Lorient_KMA Transceiver trx Lorient_KMA
GSNR (0.1nm, dB): 23.61 GSNR (0.1nm, dB): 23.61
GSNR (signal bw, dB): 19.53 GSNR (signal bw, dB): 19.53
@@ -93,6 +96,7 @@ Transceiver trx Lorient_KMA
PMD (ps): 0.46 PMD (ps): 0.46
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.64 Latency (ms): 0.64
Actual pch out (dBm): 0.00
Transmission result for input power = 0.00 dBm: Transmission result for input power = 0.00 dBm:
Final GSNR (0.1 nm): 23.61 dB Final GSNR (0.1 nm): 23.61 dB

View File

@@ -17,11 +17,13 @@ Transceiver trx Lannion_CAS
PMD (ps): 0.00 PMD (ps): 0.00
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.00 Latency (ms): 0.00
Actual pch out (dBm): mode_1: 0.00, mode_2: 0.00
Roadm roadm Lannion_CAS Roadm roadm Lannion_CAS
type_variety: default Type_variety: default
effective loss (dB): 20.00 Reference loss (dB): 20.00
reference pch out (dBm): -20.00 Actual loss (dB): mode_1: 20.00, mode_2: 20.00
actual pch out (dBm): mode_1: -20.00, mode_2: -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): mode_1: -20.00, mode_2: -20.00
Edfa east edfa in Lannion_CAS to Corlay Edfa east edfa in Lannion_CAS to Corlay
type_variety: std_medium_gain type_variety: std_medium_gain
effective gain(dB): 21.00 effective gain(dB): 21.00
@@ -80,10 +82,11 @@ Edfa west edfa in Lorient_KMA to Loudeac
actual pch out (dBm): mode_1: 1.04, mode_2: 1.09 actual pch out (dBm): mode_1: 1.04, mode_2: 1.09
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm Lorient_KMA Roadm roadm Lorient_KMA
type_variety: default Type_variety: default
effective loss (dB): 21.00 Reference loss (dB): 21.00
reference pch out (dBm): -20.00 Actual loss (dB): mode_1: 21.04, mode_2: 21.09
actual pch out (dBm): mode_1: -20.00, mode_2: -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): mode_1: -20.00, mode_2: -20.00
Transceiver trx Lorient_KMA Transceiver trx Lorient_KMA
GSNR (0.1nm, dB): mode_1: 23.66, mode_2: 23.81 GSNR (0.1nm, dB): mode_1: 23.66, mode_2: 23.81
GSNR (signal bw, dB): mode_1: 19.58, mode_2: 16.72 GSNR (signal bw, dB): mode_1: 19.58, mode_2: 16.72
@@ -93,6 +96,7 @@ Transceiver trx Lorient_KMA
PMD (ps): 0.46 PMD (ps): 0.46
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.64 Latency (ms): 0.64
Actual pch out (dBm): mode_1: 0.00, mode_2: 0.00
Transmission result for input power = 0.00 dBm: Transmission result for input power = 0.00 dBm:
Final GSNR (0.1 nm): 23.72 dB Final GSNR (0.1 nm): 23.72 dB

View File

@@ -17,11 +17,13 @@ Transceiver Site_A
PMD (ps): 0.00 PMD (ps): 0.00
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.00 Latency (ms): 0.00
Actual pch out (dBm): mode_1: 0.00, mode_2: 0.00
Roadm roadm Site A Roadm roadm Site A
type_variety: default Type_variety: default
effective loss (dB): 20.00 Reference loss (dB): 20.00
reference pch out (dBm): -20.00 Actual loss (dB): mode_1: 20.00, mode_2: 20.00
actual pch out (dBm): mode_1: -20.00, mode_2: -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): mode_1: -20.00, mode_2: -20.00
Edfa booster A Edfa booster A
type_variety: std_medium_gain type_variety: std_medium_gain
effective gain(dB): 20.00 effective gain(dB): 20.00
@@ -146,10 +148,11 @@ Edfa Edfa5
actual pch out (dBm): mode_1: 0.05, mode_2: 0.08 actual pch out (dBm): mode_1: 0.05, mode_2: 0.08
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm Site C Roadm roadm Site C
type_variety: default Type_variety: default
effective loss (dB): 20.00 Reference loss (dB): 20.00
reference pch out (dBm): -20.00 Actual loss (dB): mode_1: 20.05, mode_2: 20.08
actual pch out (dBm): mode_1: -20.00, mode_2: -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): mode_1: -20.00, mode_2: -20.00
Edfa booster C Edfa booster C
type_variety: std_medium_gain type_variety: std_medium_gain
effective gain(dB): 20.00 effective gain(dB): 20.00
@@ -274,10 +277,11 @@ Edfa Edfa10
actual pch out (dBm): mode_1: 0.05, mode_2: 0.08 actual pch out (dBm): mode_1: 0.05, mode_2: 0.08
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm Site D Roadm roadm Site D
type_variety: default Type_variety: default
effective loss (dB): 20.00 Reference loss (dB): 20.00
reference pch out (dBm): -20.00 Actual loss (dB): mode_1: 20.05, mode_2: 20.08
actual pch out (dBm): mode_1: -20.00, mode_2: -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): mode_1: -20.00, mode_2: -20.00
Edfa booster D Edfa booster D
type_variety: std_medium_gain type_variety: std_medium_gain
effective gain(dB): 20.00 effective gain(dB): 20.00
@@ -336,10 +340,11 @@ Edfa Edfa12
actual pch out (dBm): mode_1: 0.03, mode_2: 0.04 actual pch out (dBm): mode_1: 0.03, mode_2: 0.04
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm Site E Roadm roadm Site E
type_variety: default Type_variety: default
effective loss (dB): 20.00 Reference loss (dB): 20.00
reference pch out (dBm): -20.00 Actual loss (dB): mode_1: 20.03, mode_2: 20.04
actual pch out (dBm): mode_1: -20.00, mode_2: -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): mode_1: -20.00, mode_2: -20.00
Edfa booster E Edfa booster E
type_variety: std_medium_gain type_variety: std_medium_gain
effective gain(dB): 20.00 effective gain(dB): 20.00
@@ -420,10 +425,11 @@ Edfa Edfa15
actual pch out (dBm): mode_1: 0.03, mode_2: 0.05 actual pch out (dBm): mode_1: 0.03, mode_2: 0.05
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm Site B Roadm roadm Site B
type_variety: default Type_variety: default
effective loss (dB): 20.00 Reference loss (dB): 20.00
reference pch out (dBm): -20.00 Actual loss (dB): mode_1: 20.03, mode_2: 20.05
actual pch out (dBm): mode_1: -20.00, mode_2: -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): mode_1: -20.00, mode_2: -20.00
Transceiver Site_B Transceiver Site_B
GSNR (0.1nm, dB): mode_1: 18.11, mode_2: 19.18 GSNR (0.1nm, dB): mode_1: 18.11, mode_2: 19.18
GSNR (signal bw, dB): mode_1: 14.02, mode_2: 12.09 GSNR (signal bw, dB): mode_1: 14.02, mode_2: 12.09
@@ -433,6 +439,7 @@ Transceiver Site_B
PMD (ps): 1.39 PMD (ps): 1.39
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 5.88 Latency (ms): 5.88
Actual pch out (dBm): mode_1: 0.00, mode_2: 0.00
Transmission result for input power = 0.00 dBm: Transmission result for input power = 0.00 dBm:
Final GSNR (0.1 nm): 18.56 dB Final GSNR (0.1 nm): 18.56 dB

View File

@@ -17,11 +17,13 @@ Transceiver Site_A
PMD (ps): 0.00 PMD (ps): 0.00
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.00 Latency (ms): 0.00
Actual pch out (dBm): mode_1: 0.00, mode_2: 0.00
Roadm roadm Site A Roadm roadm Site A
type_variety: default Type_variety: default
effective loss (dB): 20.00 Reference loss (dB): 20.00
reference pch out (dBm): -20.00 Actual loss (dB): mode_1: 20.00, mode_2: 16.99
actual pch out (dBm): mode_1: -20.00, mode_2: -16.99 Reference pch out (dBm): -20.00
Actual pch out (dBm): mode_1: -20.00, mode_2: -16.99
Edfa booster A Edfa booster A
type_variety: std_medium_gain type_variety: std_medium_gain
effective gain(dB): 20.00 effective gain(dB): 20.00
@@ -146,10 +148,11 @@ Edfa Edfa5
actual pch out (dBm): mode_1: 0.06, mode_2: 3.07 actual pch out (dBm): mode_1: 0.06, mode_2: 3.07
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm Site C Roadm roadm Site C
type_variety: default Type_variety: default
effective loss (dB): 20.00 Reference loss (dB): 20.00
reference pch out (dBm): -20.00 Actual loss (dB): mode_1: 20.06, mode_2: 20.06
actual pch out (dBm): mode_1: -20.00, mode_2: -16.99 Reference pch out (dBm): -20.00
Actual pch out (dBm): mode_1: -20.00, mode_2: -16.99
Edfa booster C Edfa booster C
type_variety: std_medium_gain type_variety: std_medium_gain
effective gain(dB): 20.00 effective gain(dB): 20.00
@@ -274,10 +277,11 @@ Edfa Edfa10
actual pch out (dBm): mode_1: 0.06, mode_2: 3.07 actual pch out (dBm): mode_1: 0.06, mode_2: 3.07
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm Site D Roadm roadm Site D
type_variety: default Type_variety: default
effective loss (dB): 20.00 Reference loss (dB): 20.00
reference pch out (dBm): -20.00 Actual loss (dB): mode_1: 20.06, mode_2: 20.06
actual pch out (dBm): mode_1: -20.00, mode_2: -16.99 Reference pch out (dBm): -20.00
Actual pch out (dBm): mode_1: -20.00, mode_2: -16.99
Edfa booster D Edfa booster D
type_variety: std_medium_gain type_variety: std_medium_gain
effective gain(dB): 20.00 effective gain(dB): 20.00
@@ -336,10 +340,11 @@ Edfa Edfa12
actual pch out (dBm): mode_1: 0.03, mode_2: 3.04 actual pch out (dBm): mode_1: 0.03, mode_2: 3.04
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm Site E Roadm roadm Site E
type_variety: default Type_variety: default
effective loss (dB): 20.00 Reference loss (dB): 20.00
reference pch out (dBm): -20.00 Actual loss (dB): mode_1: 20.03, mode_2: 20.03
actual pch out (dBm): mode_1: -20.00, mode_2: -16.99 Reference pch out (dBm): -20.00
Actual pch out (dBm): mode_1: -20.00, mode_2: -16.99
Edfa booster E Edfa booster E
type_variety: std_medium_gain type_variety: std_medium_gain
effective gain(dB): 20.00 effective gain(dB): 20.00
@@ -420,10 +425,11 @@ Edfa Edfa15
actual pch out (dBm): mode_1: 0.04, mode_2: 3.05 actual pch out (dBm): mode_1: 0.04, mode_2: 3.05
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm Site B Roadm roadm Site B
type_variety: default Type_variety: default
effective loss (dB): 20.00 Reference loss (dB): 20.00
reference pch out (dBm): -20.00 Actual loss (dB): mode_1: 20.04, mode_2: 20.04
actual pch out (dBm): mode_1: -20.00, mode_2: -16.99 Reference pch out (dBm): -20.00
Actual pch out (dBm): mode_1: -20.00, mode_2: -16.99
Transceiver Site_B Transceiver Site_B
GSNR (0.1nm, dB): mode_1: 17.91, mode_2: 20.37 GSNR (0.1nm, dB): mode_1: 17.91, mode_2: 20.37
GSNR (signal bw, dB): mode_1: 13.83, mode_2: 13.28 GSNR (signal bw, dB): mode_1: 13.83, mode_2: 13.28
@@ -433,6 +439,7 @@ Transceiver Site_B
PMD (ps): 1.39 PMD (ps): 1.39
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 5.88 Latency (ms): 5.88
Actual pch out (dBm): mode_1: 0.00, mode_2: 0.00
Transmission result for input power = 0.00 dBm: Transmission result for input power = 0.00 dBm:
Final GSNR (0.1 nm): 18.94 dB Final GSNR (0.1 nm): 18.94 dB

View File

@@ -17,11 +17,13 @@ Transceiver Site_A
PMD (ps): 0.00 PMD (ps): 0.00
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.00 Latency (ms): 0.00
Actual pch out (dBm): mode_1: 0.00, mode_2: 0.00
Roadm roadm Site A Roadm roadm Site A
type_variety: default Type_variety: default
effective loss (dB): 20.00 Reference loss (dB): 20.00
reference pch out (dBm): -20.00 Actual loss (dB): mode_1: 20.00, mode_2: 18.24
actual pch out (dBm): mode_1: -20.00, mode_2: -18.24 Reference pch out (dBm): -20.00
Actual pch out (dBm): mode_1: -20.00, mode_2: -18.24
Edfa booster A Edfa booster A
type_variety: std_medium_gain type_variety: std_medium_gain
effective gain(dB): 20.00 effective gain(dB): 20.00
@@ -146,10 +148,11 @@ Edfa Edfa5
actual pch out (dBm): mode_1: 0.05, mode_2: 1.82 actual pch out (dBm): mode_1: 0.05, mode_2: 1.82
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm Site C Roadm roadm Site C
type_variety: default Type_variety: default
effective loss (dB): 20.00 Reference loss (dB): 20.00
reference pch out (dBm): -20.00 Actual loss (dB): mode_1: 20.05, mode_2: 20.06
actual pch out (dBm): mode_1: -20.00, mode_2: -18.24 Reference pch out (dBm): -20.00
Actual pch out (dBm): mode_1: -20.00, mode_2: -18.24
Edfa booster C Edfa booster C
type_variety: std_medium_gain type_variety: std_medium_gain
effective gain(dB): 20.00 effective gain(dB): 20.00
@@ -274,10 +277,11 @@ Edfa Edfa10
actual pch out (dBm): mode_1: 0.05, mode_2: 1.82 actual pch out (dBm): mode_1: 0.05, mode_2: 1.82
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm Site D Roadm roadm Site D
type_variety: default Type_variety: default
effective loss (dB): 20.00 Reference loss (dB): 20.00
reference pch out (dBm): -20.00 Actual loss (dB): mode_1: 20.05, mode_2: 20.06
actual pch out (dBm): mode_1: -20.00, mode_2: -18.24 Reference pch out (dBm): -20.00
Actual pch out (dBm): mode_1: -20.00, mode_2: -18.24
Edfa booster D Edfa booster D
type_variety: std_medium_gain type_variety: std_medium_gain
effective gain(dB): 20.00 effective gain(dB): 20.00
@@ -336,10 +340,11 @@ Edfa Edfa12
actual pch out (dBm): mode_1: 0.03, mode_2: 1.79 actual pch out (dBm): mode_1: 0.03, mode_2: 1.79
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm Site E Roadm roadm Site E
type_variety: default Type_variety: default
effective loss (dB): 20.00 Reference loss (dB): 20.00
reference pch out (dBm): -20.00 Actual loss (dB): mode_1: 20.03, mode_2: 20.03
actual pch out (dBm): mode_1: -20.00, mode_2: -18.24 Reference pch out (dBm): -20.00
Actual pch out (dBm): mode_1: -20.00, mode_2: -18.24
Edfa booster E Edfa booster E
type_variety: std_medium_gain type_variety: std_medium_gain
effective gain(dB): 20.00 effective gain(dB): 20.00
@@ -420,10 +425,11 @@ Edfa Edfa15
actual pch out (dBm): mode_1: 0.03, mode_2: 1.80 actual pch out (dBm): mode_1: 0.03, mode_2: 1.80
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm Site B Roadm roadm Site B
type_variety: default Type_variety: default
effective loss (dB): 20.00 Reference loss (dB): 20.00
reference pch out (dBm): -20.00 Actual loss (dB): mode_1: 20.03, mode_2: 20.04
actual pch out (dBm): mode_1: -20.00, mode_2: -18.24 Reference pch out (dBm): -20.00
Actual pch out (dBm): mode_1: -20.00, mode_2: -18.24
Transceiver Site_B Transceiver Site_B
GSNR (0.1nm, dB): mode_1: 18.02, mode_2: 20.22 GSNR (0.1nm, dB): mode_1: 18.02, mode_2: 20.22
GSNR (signal bw, dB): mode_1: 13.94, mode_2: 13.12 GSNR (signal bw, dB): mode_1: 13.94, mode_2: 13.12
@@ -433,6 +439,7 @@ Transceiver Site_B
PMD (ps): 1.39 PMD (ps): 1.39
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 5.88 Latency (ms): 5.88
Actual pch out (dBm): mode_1: 0.00, mode_2: 0.00
Transmission result for input power = 0.00 dBm: Transmission result for input power = 0.00 dBm:
Final GSNR (0.1 nm): 18.94 dB Final GSNR (0.1 nm): 18.94 dB

View File

@@ -16,6 +16,7 @@ Transceiver Site_A
PMD (ps): 0.00 PMD (ps): 0.00
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.00 Latency (ms): 0.00
Actual pch out (dBm): 0.00
Fiber Span1 Fiber Span1
type_variety: SSMF type_variety: SSMF
length (km): 80.00 length (km): 80.00
@@ -47,6 +48,7 @@ Transceiver Site_B
PMD (ps): 0.36 PMD (ps): 0.36
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.39 Latency (ms): 0.39
Actual pch out (dBm): 0.00
Transmission result for input power = 0.00 dBm: Transmission result for input power = 0.00 dBm:
Final GSNR (0.1 nm): 31.18 dB Final GSNR (0.1 nm): 31.18 dB

View File

@@ -16,6 +16,7 @@ Transceiver Site_A
PMD (ps): 0.00 PMD (ps): 0.00
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.00 Latency (ms): 0.00
Actual pch out (dBm): 0.00
RamanFiber Span1 RamanFiber Span1
type_variety: SSMF type_variety: SSMF
length (km): 80.00 length (km): 80.00
@@ -51,6 +52,7 @@ Transceiver Site_B
PMD (ps): 0.36 PMD (ps): 0.36
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.39 Latency (ms): 0.39
Actual pch out (dBm): 0.00
Transmission result for input power = 0.00 dBm: Transmission result for input power = 0.00 dBm:
Final GSNR (0.1 nm): 31.44 dB Final GSNR (0.1 nm): 31.44 dB

View File

@@ -16,11 +16,13 @@ Transceiver Site_A
PMD (ps): 0.00 PMD (ps): 0.00
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.00 Latency (ms): 0.00
Actual pch out (dBm): 0.00
Roadm roadm Site A Roadm roadm Site A
type_variety: default Type_variety: default
effective loss (dB): 20.00 Reference loss (dB): 20.00
reference pch out (dBm): -20.00 Actual loss (dB): 20.00
actual pch out (dBm): -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): -20.00
Edfa booster A Edfa booster A
type_variety: std_medium_gain type_variety: std_medium_gain
effective gain(dB): 20.00 effective gain(dB): 20.00
@@ -145,10 +147,11 @@ Edfa Edfa5
actual pch out (dBm): 0.06 actual pch out (dBm): 0.06
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm Site C Roadm roadm Site C
type_variety: default Type_variety: default
effective loss (dB): 20.00 Reference loss (dB): 20.00
reference pch out (dBm): -20.00 Actual loss (dB): 20.06
actual pch out (dBm): -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): -20.00
Edfa booster C Edfa booster C
type_variety: std_medium_gain type_variety: std_medium_gain
effective gain(dB): 20.00 effective gain(dB): 20.00
@@ -273,10 +276,11 @@ Edfa Edfa10
actual pch out (dBm): 0.06 actual pch out (dBm): 0.06
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm Site D Roadm roadm Site D
type_variety: default Type_variety: default
effective loss (dB): 20.00 Reference loss (dB): 20.00
reference pch out (dBm): -20.00 Actual loss (dB): 20.06
actual pch out (dBm): -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): -20.00
Edfa booster D Edfa booster D
type_variety: std_medium_gain type_variety: std_medium_gain
effective gain(dB): 20.00 effective gain(dB): 20.00
@@ -335,10 +339,11 @@ Edfa Edfa12
actual pch out (dBm): 0.03 actual pch out (dBm): 0.03
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm Site E Roadm roadm Site E
type_variety: default Type_variety: default
effective loss (dB): 20.00 Reference loss (dB): 20.00
reference pch out (dBm): -20.00 Actual loss (dB): 20.03
actual pch out (dBm): -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): -20.00
Edfa booster E Edfa booster E
type_variety: std_medium_gain type_variety: std_medium_gain
effective gain(dB): 20.00 effective gain(dB): 20.00
@@ -419,10 +424,11 @@ Edfa Edfa15
actual pch out (dBm): 0.04 actual pch out (dBm): 0.04
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm Site B Roadm roadm Site B
type_variety: default Type_variety: default
effective loss (dB): 20.00 Reference loss (dB): 20.00
reference pch out (dBm): -20.00 Actual loss (dB): 20.04
actual pch out (dBm): -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): -20.00
Transceiver Site_B Transceiver Site_B
GSNR (0.1nm, dB): 17.84 GSNR (0.1nm, dB): 17.84
GSNR (signal bw, dB): 13.76 GSNR (signal bw, dB): 13.76
@@ -432,6 +438,7 @@ Transceiver Site_B
PMD (ps): 1.39 PMD (ps): 1.39
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 5.88 Latency (ms): 5.88
Actual pch out (dBm): 0.00
Transmission result for input power = 0.00 dBm: Transmission result for input power = 0.00 dBm:
Final GSNR (0.1 nm): 17.84 dB Final GSNR (0.1 nm): 17.84 dB

View File

@@ -16,11 +16,13 @@ Transceiver trx Lannion_CAS
PMD (ps): 0.00 PMD (ps): 0.00
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.00 Latency (ms): 0.00
Actual pch out (dBm): 3.00
Roadm roadm Lannion_CAS Roadm roadm Lannion_CAS
type_variety: default Type_variety: default
effective loss (dB): 23.00 Reference loss (dB): 23.00
reference pch out (dBm): -20.00 Actual loss (dB): 23.00
actual pch out (dBm): -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): -20.00
Edfa east edfa in Lannion_CAS to Corlay Edfa east edfa in Lannion_CAS to Corlay
type_variety: test type_variety: test
effective gain(dB): 21.18 effective gain(dB): 21.18
@@ -79,10 +81,11 @@ Edfa west edfa in Lorient_KMA to Loudeac
actual pch out (dBm): 1.21 actual pch out (dBm): 1.21
output VOA (dB): 0.00 output VOA (dB): 0.00
Roadm roadm Lorient_KMA Roadm roadm Lorient_KMA
type_variety: default Type_variety: default
effective loss (dB): 21.18 Reference loss (dB): 21.18
reference pch out (dBm): -20.00 Actual loss (dB): 21.21
actual pch out (dBm): -20.00 Reference pch out (dBm): -20.00
Actual pch out (dBm): -20.00
Transceiver trx Lorient_KMA Transceiver trx Lorient_KMA
GSNR (0.1nm, dB): 23.77 GSNR (0.1nm, dB): 23.77
GSNR (signal bw, dB): 19.69 GSNR (signal bw, dB): 19.69
@@ -92,6 +95,7 @@ Transceiver trx Lorient_KMA
PMD (ps): 0.46 PMD (ps): 0.46
PDL (dB): 0.00 PDL (dB): 0.00
Latency (ms): 0.64 Latency (ms): 0.64
Actual pch out (dBm): 3.00
Transmission result for input power = 3.00 dBm: Transmission result for input power = 3.00 dBm:
Final GSNR (0.1 nm): 23.77 dB Final GSNR (0.1 nm): 23.77 dB

View File

@@ -74,8 +74,8 @@ def si(nch_and_spacing, bw):
nb_channel, spacing = nch_and_spacing nb_channel, spacing = nch_and_spacing
f_min = 191.3e12 f_min = 191.3e12
f_max = automatic_fmax(f_min, spacing, nb_channel) f_max = automatic_fmax(f_min, spacing, nb_channel)
return create_input_spectral_information(f_min=f_min, f_max=f_max, roll_off=0.15, baud_rate=bw, power=1e-3, return create_input_spectral_information(f_min=f_min, f_max=f_max, roll_off=0.15, baud_rate=bw,
spacing=spacing, tx_osnr=40.0) spacing=spacing, tx_osnr=40.0, tx_power=1e-3)
@pytest.mark.parametrize("gain, nf_expected", [(10, 15), (15, 10), (25, 5.8)]) @pytest.mark.parametrize("gain, nf_expected", [(10, 15), (15, 10), (25, 5.8)])
@@ -232,8 +232,8 @@ def test_amp_behaviour(tilt_target, delta_p):
fiber.params.con_in = 0 fiber.params.con_in = 0
fiber.params.con_out = 0 fiber.params.con_out = 0
fiber.ref_pch_in_dbm = 0.0 fiber.ref_pch_in_dbm = 0.0
si = create_input_spectral_information(f_min=191.3e12, f_max=196.05e12, roll_off=0.15, baud_rate=64e9, power=0.001, si = create_input_spectral_information(f_min=191.3e12, f_max=196.05e12, roll_off=0.15, baud_rate=64e9,
spacing=75e9, tx_osnr=None) spacing=75e9, tx_osnr=None, tx_power=1e-3)
si = fiber(si) si = fiber(si)
total_sig_powerin = sum(si.signal) total_sig_powerin = sum(si.signal)
sig_in = lin2db(si.signal) sig_in = lin2db(si.signal)
@@ -320,7 +320,7 @@ def test_amp_saturation(delta_pdb_per_channel, base_power, delta_p):
si = create_arbitrary_spectral_information(frequency=frequency, slot_width=slot_width, si = create_arbitrary_spectral_information(frequency=frequency, slot_width=slot_width,
signal=signal, baud_rate=baud_rate, roll_off=0.15, signal=signal, baud_rate=baud_rate, roll_off=0.15,
delta_pdb_per_channel=delta_pdb_per_channel, delta_pdb_per_channel=delta_pdb_per_channel,
tx_osnr=None) tx_osnr=None, tx_power=None)
total_sig_powerin = sum(si.signal) total_sig_powerin = sum(si.signal)
sig_in = lin2db(si.signal) sig_in = lin2db(si.signal)
si = edfa(si) si = edfa(si)

View File

@@ -119,8 +119,9 @@ def create_rq(equipment, srce, dest, bdir, node_list, loose_list, rqid='test_req
'nodes_list': node_list, 'nodes_list': node_list,
'loose_list': loose_list, 'loose_list': loose_list,
'path_bandwidth': 100.0e9, 'path_bandwidth': 100.0e9,
'power': 1.0, 'power': 1.0e-3,
'effective_freq_slot': None, 'tx_power': 1.0e-3,
'effective_freq_slot': None
} }
params['format'] = params['trx_mode'] params['format'] = params['trx_mode']
trx_params = trx_mode_params(equipment, params['trx_type'], params['trx_mode'], True) trx_params = trx_mode_params(equipment, params['trx_type'], params['trx_mode'], True)
@@ -258,7 +259,8 @@ def request_set():
'f_min': 191.1e12, 'f_min': 191.1e12,
'f_max': 196.3e12, 'f_max': 196.3e12,
'nb_channel': None, 'nb_channel': None,
'power': 0.001, 'power': 1e-3,
'tx_power': 1e-3,
'path_bandwidth': 200e9} 'path_bandwidth': 200e9}

View File

@@ -17,12 +17,14 @@ from copy import deepcopy
from gnpy.core.utils import lin2db, automatic_nch, dbm2watt, power_dbm_to_psd_mw_ghz, watt2dbm, psd2powerdbm from gnpy.core.utils import lin2db, automatic_nch, dbm2watt, power_dbm_to_psd_mw_ghz, watt2dbm, psd2powerdbm
from gnpy.core.network import build_network from gnpy.core.network import build_network
from gnpy.core.elements import Roadm from gnpy.core.elements import Roadm
from gnpy.core.info import create_input_spectral_information, create_arbitrary_spectral_information, ReferenceCarrier from gnpy.core.info import create_input_spectral_information, create_arbitrary_spectral_information, ReferenceCarrier, \
carriers_to_spectral_information
from gnpy.core.equipment import trx_mode_params from gnpy.core.equipment import trx_mode_params
from gnpy.core.exceptions import ConfigurationError from gnpy.core.exceptions import ConfigurationError
from gnpy.tools.json_io import network_from_json, load_equipment, load_network, _spectrum_from_json, load_json, \ from gnpy.tools.json_io import network_from_json, load_equipment, load_network, _spectrum_from_json, load_json, \
Transceiver, requests_from_json Transceiver, requests_from_json
from gnpy.topology.request import PathRequest, compute_constrained_path, propagate, propagate_and_optimize_mode from gnpy.topology.request import PathRequest, compute_constrained_path, propagate, propagate_and_optimize_mode
from gnpy.topology.spectrum_assignment import build_oms_list
TEST_DIR = Path(__file__).parent TEST_DIR = Path(__file__).parent
@@ -330,10 +332,11 @@ def create_voyager_req(equipment, source, dest, bidir, nodes_list, loose_list, m
'nodes_list': nodes_list, 'nodes_list': nodes_list,
'loose_list': loose_list, 'loose_list': loose_list,
'path_bandwidth': 100.0e9, 'path_bandwidth': 100.0e9,
'effective_freq_slot': None} 'effective_freq_slot': None,
'power': 1e-3,
'tx_power': 1e-3}
trx_params = trx_mode_params(equipment, params['trx_type'], params['trx_mode'], True) trx_params = trx_mode_params(equipment, params['trx_type'], params['trx_mode'], True)
params.update(trx_params) params.update(trx_params)
params['power'] = dbm2watt(power_dbm) if power_dbm else dbm2watt(equipment['SI']['default'].power_dbm)
f_min = params['f_min'] f_min = params['f_min']
f_max_from_si = params['f_max'] f_max_from_si = params['f_max']
params['nb_channel'] = automatic_nch(f_min, f_max_from_si, params['spacing']) params['nb_channel'] = automatic_nch(f_min, f_max_from_si, params['spacing'])
@@ -368,9 +371,9 @@ def test_initial_spectrum(mode, slot_width, power_dbm):
assert_array_equal(infos_expected.frequency, infos_actual.frequency) assert_array_equal(infos_expected.frequency, infos_actual.frequency)
assert_array_equal(infos_expected.baud_rate, infos_actual.baud_rate) assert_array_equal(infos_expected.baud_rate, infos_actual.baud_rate)
assert_array_equal(infos_expected.slot_width, infos_actual.slot_width) assert_array_equal(infos_expected.slot_width, infos_actual.slot_width)
assert_array_equal(infos_expected.signal, infos_actual.signal) assert_allclose(infos_expected.signal, infos_actual.signal, rtol=1e-10)
assert_array_equal(infos_expected.nli, infos_actual.nli) assert_allclose(infos_expected.nli, infos_actual.nli, rtol=1e-10)
assert_array_equal(infos_expected.ase, infos_actual.ase) assert_allclose(infos_expected.ase, infos_actual.ase, rtol=1e-10)
assert_array_equal(infos_expected.roll_off, infos_actual.roll_off) assert_array_equal(infos_expected.roll_off, infos_actual.roll_off)
assert_array_equal(infos_expected.chromatic_dispersion, infos_actual.chromatic_dispersion) assert_array_equal(infos_expected.chromatic_dispersion, infos_actual.chromatic_dispersion)
assert_array_equal(infos_expected.pmd, infos_actual.pmd) assert_array_equal(infos_expected.pmd, infos_actual.pmd)
@@ -539,8 +542,8 @@ def test_equalization(case, deltap, target, mode, slot_width, equalization):
assert getattr(roadm, equalization) == target_psd assert getattr(roadm, equalization) == target_psd
path = compute_constrained_path(network, req) path = compute_constrained_path(network, req)
si = create_input_spectral_information( si = create_input_spectral_information(
f_min=req.f_min, f_max=req.f_max, roll_off=req.roll_off, baud_rate=req.baud_rate, power=req.power, f_min=req.f_min, f_max=req.f_max, roll_off=req.roll_off, baud_rate=req.baud_rate,
spacing=req.spacing, tx_osnr=req.tx_osnr) spacing=req.spacing, tx_osnr=req.tx_osnr, tx_power=req.power)
for i, el in enumerate(path): for i, el in enumerate(path):
if isinstance(el, Roadm): if isinstance(el, Roadm):
si = el(si, degree=path[i + 1].uid, from_degree=path[i - 1].uid) si = el(si, degree=path[i + 1].uid, from_degree=path[i - 1].uid)
@@ -583,9 +586,9 @@ def test_power_option(req_power):
infos_actual = propagate(path2, req, equipment) infos_actual = propagate(path2, req, equipment)
assert_array_equal(infos_expected.baud_rate, infos_actual.baud_rate) assert_array_equal(infos_expected.baud_rate, infos_actual.baud_rate)
assert_array_equal(infos_expected.slot_width, infos_actual.slot_width) assert_array_equal(infos_expected.slot_width, infos_actual.slot_width)
assert_array_equal(infos_expected.signal, infos_actual.signal) assert_allclose(infos_expected.signal, infos_actual.signal, rtol=1e-10)
assert_array_equal(infos_expected.nli, infos_actual.nli) assert_allclose(infos_expected.nli, infos_actual.nli, rtol=1e-10)
assert_array_equal(infos_expected.ase, infos_actual.ase) assert_allclose(infos_expected.ase, infos_actual.ase, rtol=1e-10)
assert_array_equal(infos_expected.roll_off, infos_actual.roll_off) assert_array_equal(infos_expected.roll_off, infos_actual.roll_off)
assert_array_equal(infos_expected.chromatic_dispersion, infos_actual.chromatic_dispersion) assert_array_equal(infos_expected.chromatic_dispersion, infos_actual.chromatic_dispersion)
assert_array_equal(infos_expected.pmd, infos_actual.pmd) assert_array_equal(infos_expected.pmd, infos_actual.pmd)
@@ -841,3 +844,103 @@ def test_power_offset_automatic_mode_selection(slot_width, value, equalization,
_, mode = propagate_and_optimize_mode(path, free_req, equipment) _, mode = propagate_and_optimize_mode(path, free_req, equipment)
assert mode['format'] == expected_mode assert mode['format'] == expected_mode
assert_allclose(path_expected[-1].snr_01nm, path[-1].snr_01nm, rtol=1e-5) assert_allclose(path_expected[-1].snr_01nm, path[-1].snr_01nm, rtol=1e-5)
@pytest.mark.parametrize('tx_power_dbm', [-10, -8, 0, 10])
def test_tx_power(tx_power_dbm):
"""If carrier add power is below equalization target + ROADM add max loss, then equalizatio
can not be applied.
"""
json_data = load_json(NETWORK_FILENAME)
for el in json_data['elements']:
if el['uid'] == 'roadm Lannion_CAS':
el['type_variety'] = 'example_detailed_impairments'
equipment = load_equipment(EQPT_FILENAME)
network = network_from_json(json_data, equipment)
default_spectrum = equipment['SI']['default']
p_db = default_spectrum.power_dbm
p_total_db = p_db + lin2db(automatic_nch(default_spectrum.f_min, default_spectrum.f_max, default_spectrum.spacing))
build_network(network, equipment, p_db, p_total_db)
build_oms_list(network, equipment)
expected_roadm_lannion = {
"uid": "roadm Lannion_CAS",
"type": "Roadm",
"type_variety": "example_detailed_impairments",
"params": {
"restrictions": {
"preamp_variety_list": [],
"booster_variety_list": []
},
'per_degree_pch_out_db': {'east edfa in Lannion_CAS to Corlay': -20,
'east edfa in Lannion_CAS to Morlaix': -20,
'east edfa in Lannion_CAS to Stbrieuc': -20},
"target_pch_out_db": -20
},
'metadata': {
'location': {
'city': 'Lannion_CAS',
'latitude': 2.0,
'longitude': 0.0,
'region': 'RLD'
}
}
}
roadm = next(n for n in network.nodes() if n.uid == 'roadm Lannion_CAS')
assert roadm.to_json == expected_roadm_lannion
spectrum = _spectrum_from_json([
{
"f_min": 191.35e12,
"f_max": 191.35e12,
"baud_rate": 32e9,
"slot_width": 50e9,
"power_dbm": 0,
"roll_off": 0.15,
"tx_osnr": 40
},
{
"f_min": 193.15e12,
"f_max": 193.15e12,
"baud_rate": 32e9,
"slot_width": 50e9,
"power_dbm": 0,
"roll_off": 0.15,
"tx_osnr": 40,
"tx_power_dbm": tx_power_dbm
},
{
"f_min": 193.2e12,
"f_max": 193.2e12,
"baud_rate": 32e9,
"slot_width": 50e9,
"power_dbm": 0,
"roll_off": 0.15,
"tx_osnr": 40}])
power = 1.0e-3
si = carriers_to_spectral_information(initial_spectrum=spectrum,
power=power)
si = roadm(si, "east edfa in Lannion_CAS to Corlay", "trx Lannion_CAS")
# Checks that if tx_power on add port is below min required power, its equalization target can not be met
add_max_loss = next(e for e in getattr(equipment['Roadm']['example_detailed_impairments'], 'roadm-path-impairments')
if 'roadm-add-path' in e)['roadm-add-path']['roadm-maxloss']
min_required_add_power = -20 + add_max_loss
power_reduction = max(0, min_required_add_power - tx_power_dbm)
assert_allclose(si.signal, dbm2watt(array([-20, -20 - power_reduction, -20])), rtol=1e-5)
path = ['trx Lannion_CAS',
'roadm Lannion_CAS',
'east edfa in Lannion_CAS to Stbrieuc',
'fiber (Lannion_CAS → Stbrieuc)-F056',
'east edfa in Stbrieuc to Rennes_STA',
'fiber (Stbrieuc → Rennes_STA)-F057',
'west edfa in Rennes_STA to Stbrieuc',
'roadm Rennes_STA',
'trx Rennes_STA']
si = carriers_to_spectral_information(initial_spectrum=spectrum,
power=power)
for i, uid in enumerate(path):
node = next(n for n in network.nodes() if n.uid == uid)
if isinstance(node, Roadm):
si = node(si, path[i + 1], path[i - 1])
else:
si = node(si)
assert_allclose(watt2dbm(si.signal + si.ase + si.nli), array([-20, -20, -20]), rtol=1e-5)

View File

@@ -53,7 +53,8 @@ def create_rq(equipment, srce, dest, bdir, nd_list, ls_list, mode, power_dbm):
'effective_freq_slot': None, 'effective_freq_slot': None,
'path_bandwidth': 100000000000.0, 'path_bandwidth': 100000000000.0,
'spacing': 50e9 if mode == 'mode 1' else 75e9, 'spacing': 50e9 if mode == 'mode 1' else 75e9,
'power': dbm2watt(power_dbm) 'power': dbm2watt(power_dbm),
'tx_power': dbm2watt(power_dbm)
} }
trx_params = trx_mode_params(equipment, params['trx_type'], params['trx_mode'], True) trx_params = trx_mode_params(equipment, params['trx_type'], params['trx_mode'], True)
params.update(trx_params) params.update(trx_params)

View File

@@ -12,7 +12,7 @@ def test_create_arbitrary_spectral_information():
si = create_arbitrary_spectral_information(frequency=[193.25e12, 193.3e12, 193.35e12], si = create_arbitrary_spectral_information(frequency=[193.25e12, 193.3e12, 193.35e12],
baud_rate=32e9, signal=[1, 1, 1], baud_rate=32e9, signal=[1, 1, 1],
delta_pdb_per_channel=[1, 1, 1], delta_pdb_per_channel=[1, 1, 1],
tx_osnr=40.0) tx_osnr=40.0, tx_power=[1, 1, 1])
assert_array_equal(si.baud_rate, array([32e9, 32e9, 32e9])) assert_array_equal(si.baud_rate, array([32e9, 32e9, 32e9]))
assert_array_equal(si.slot_width, array([37.5e9, 37.5e9, 37.5e9])) assert_array_equal(si.slot_width, array([37.5e9, 37.5e9, 37.5e9]))
assert_array_equal(si.signal, ones(3)) assert_array_equal(si.signal, ones(3))
@@ -33,7 +33,7 @@ def test_create_arbitrary_spectral_information():
si = create_arbitrary_spectral_information(frequency=array([193.35e12, 193.3e12, 193.25e12]), si = create_arbitrary_spectral_information(frequency=array([193.35e12, 193.3e12, 193.25e12]),
slot_width=array([50e9, 50e9, 50e9]), slot_width=array([50e9, 50e9, 50e9]),
baud_rate=32e9, signal=array([1, 2, 3]), baud_rate=32e9, signal=array([1, 2, 3]),
tx_osnr=40.0) tx_osnr=40.0, tx_power=array([1, 2, 3]))
assert_array_equal(si.signal, array([3, 2, 1])) assert_array_equal(si.signal, array([3, 2, 1]))
@@ -41,16 +41,16 @@ def test_create_arbitrary_spectral_information():
r'larger than the slot width for channels: \[1, 3\].'): r'larger than the slot width for channels: \[1, 3\].'):
create_arbitrary_spectral_information(frequency=[193.25e12, 193.3e12, 193.35e12], signal=1, create_arbitrary_spectral_information(frequency=[193.25e12, 193.3e12, 193.35e12], signal=1,
baud_rate=[64e9, 32e9, 64e9], slot_width=50e9, baud_rate=[64e9, 32e9, 64e9], slot_width=50e9,
tx_osnr=40.0) tx_osnr=40.0, tx_power=1)
with pytest.raises(SpectrumError, match='Spectrum required slot widths larger than the frequency spectral ' with pytest.raises(SpectrumError, match='Spectrum required slot widths larger than the frequency spectral '
r'distances between channels: \[\(1, 2\), \(3, 4\)\].'): r'distances between channels: \[\(1, 2\), \(3, 4\)\].'):
create_arbitrary_spectral_information(frequency=[193.26e12, 193.3e12, 193.35e12, 193.39e12], signal=1, create_arbitrary_spectral_information(frequency=[193.26e12, 193.3e12, 193.35e12, 193.39e12], signal=1,
tx_osnr=40.0, baud_rate=32e9, slot_width=50e9) tx_osnr=40.0, baud_rate=32e9, slot_width=50e9, tx_power=1)
with pytest.raises(SpectrumError, match='Spectrum required slot widths larger than the frequency spectral ' with pytest.raises(SpectrumError, match='Spectrum required slot widths larger than the frequency spectral '
r'distances between channels: \[\(1, 2\), \(2, 3\)\].'): r'distances between channels: \[\(1, 2\), \(2, 3\)\].'):
create_arbitrary_spectral_information(frequency=[193.25e12, 193.3e12, 193.35e12], signal=1, baud_rate=49e9, create_arbitrary_spectral_information(frequency=[193.25e12, 193.3e12, 193.35e12], signal=1, baud_rate=49e9,
tx_osnr=40.0, roll_off=0.1) tx_osnr=40.0, roll_off=0.1, tx_power=1)
with pytest.raises(SpectrumError, with pytest.raises(SpectrumError,
match='Dimension mismatch in input fields.'): match='Dimension mismatch in input fields.'):
create_arbitrary_spectral_information(frequency=[193.25e12, 193.3e12, 193.35e12], signal=[1, 2], baud_rate=49e9, create_arbitrary_spectral_information(frequency=[193.25e12, 193.3e12, 193.35e12], signal=[1, 2], baud_rate=49e9,
tx_osnr=40.0) tx_osnr=40.0, tx_power=1)

View File

@@ -34,7 +34,7 @@ def test_jsonthing(caplog):
"sys_margins": 2 "sys_margins": 2
} }
_ = SI(**json_data) _ = SI(**json_data)
expected_msg = 'WARNING missing f_min attribute in eqpt_config.json[SI]\n ' \ expected_msg = 'WARNING missing f_min attribute in eqpt_config.json[SI]\n\t' \
+ 'default value is f_min = 191350000000000.0' + 'default value is f_min = 191350000000000.0'
assert expected_msg in caplog.text assert expected_msg in caplog.text

View File

@@ -228,6 +228,7 @@ def test_design_non_amplified_link(elem1, elem2, expected_gain, expected_delta_p
equipment = load_equipment(EQPT_FILENAME) equipment = load_equipment(EQPT_FILENAME)
equipment['Span']['default'].power_mode = power_mode equipment['Span']['default'].power_mode = power_mode
equipment['SI']['default'].power_dbm = p_db equipment['SI']['default'].power_dbm = p_db
equipment['SI']['default'].tx_power_dbm = p_db
network = network_from_json(json_data, equipment) network = network_from_json(json_data, equipment)
edfa = next(a for a in network.nodes() if a.uid == 'edfa') edfa = next(a for a in network.nodes() if a.uid == 'edfa')
edfa.params.out_voa_auto = True edfa.params.out_voa_auto = True

View File

@@ -352,6 +352,7 @@ def test_excel_ila_constraints(source, destination, route_list, hoptype, expecte
'cost': None, 'cost': None,
'roll_off': 0, 'roll_off': 0,
'tx_osnr': 0, 'tx_osnr': 0,
'tx_power': 0,
'penalties': None, 'penalties': None,
'min_spacing': None, 'min_spacing': None,
'nb_channel': 0, 'nb_channel': 0,

View File

@@ -52,7 +52,8 @@ def propagation(input_power, con_in, con_out, dest):
p = db2lin(p) * 1e-3 p = db2lin(p) * 1e-3
spacing = 50e9 # THz spacing = 50e9 # THz
si = create_input_spectral_information(f_min=191.3e12, f_max=191.3e12 + 79 * spacing, roll_off=0.15, si = create_input_spectral_information(f_min=191.3e12, f_max=191.3e12 + 79 * spacing, roll_off=0.15,
baud_rate=32e9, power=p, spacing=spacing, tx_osnr=None) baud_rate=32e9, spacing=spacing, tx_osnr=None,
tx_power=p)
source = next(transceivers[uid] for uid in transceivers if uid == 'trx A') source = next(transceivers[uid] for uid in transceivers if uid == 'trx A')
sink = next(transceivers[uid] for uid in transceivers if uid == dest) sink = next(transceivers[uid] for uid in transceivers if uid == dest)
path = dijkstra_path(network, source, sink) path = dijkstra_path(network, source, sink)
@@ -181,7 +182,7 @@ def test_json_element(error, json_data, expected_msg):
network = network_from_json(json_data, equipment) network = network_from_json(json_data, equipment)
elem = next(e for e in network.nodes() if e.uid == 'Elem') elem = next(e for e in network.nodes() if e.uid == 'Elem')
si = create_input_spectral_information(f_min=191.3e12, f_max=196.1e12, roll_off=0.15, si = create_input_spectral_information(f_min=191.3e12, f_max=196.1e12, roll_off=0.15,
baud_rate=32e9, power=1.0e-3, spacing=50.0e9, tx_osnr=45) baud_rate=32e9, tx_power=1.0e-3, spacing=50.0e9, tx_osnr=45)
with pytest.raises(error, match=re.escape(expected_msg)): with pytest.raises(error, match=re.escape(expected_msg)):
_ = elem(si) _ = elem(si)

View File

@@ -255,7 +255,8 @@ def test_roadm_target_power(prev_node_type, effective_pch_out_db, power_dbm, roa
'path_bandwidth': 100e9, 'path_bandwidth': 100e9,
'effective_freq_slot': None, 'effective_freq_slot': None,
'nb_channel': nb_channel, 'nb_channel': nb_channel,
'power': dbm2watt(power_dbm) 'power': dbm2watt(power_dbm),
'tx_power': dbm2watt(power_dbm)
} }
trx_params = trx_mode_params(equipment) trx_params = trx_mode_params(equipment)
params.update(trx_params) params.update(trx_params)
@@ -264,7 +265,7 @@ def test_roadm_target_power(prev_node_type, effective_pch_out_db, power_dbm, roa
path = compute_constrained_path(network, req) path = compute_constrained_path(network, req)
si = create_input_spectral_information( si = create_input_spectral_information(
f_min=req.f_min, f_max=req.f_max, roll_off=req.roll_off, baud_rate=req.baud_rate, f_min=req.f_min, f_max=req.f_max, roll_off=req.roll_off, baud_rate=req.baud_rate,
power=req.power, spacing=req.spacing, tx_osnr=req.tx_osnr) spacing=req.spacing, tx_osnr=req.tx_osnr, tx_power=req.tx_power)
for i, el in enumerate(path): for i, el in enumerate(path):
if isinstance(el, Roadm): if isinstance(el, Roadm):
power_in_roadm = si.signal + si.ase + si.nli power_in_roadm = si.signal + si.ase + si.nli
@@ -311,7 +312,8 @@ def create_per_oms_request(network, eqpt, req_power):
'path_bandwidth': 100e9, 'path_bandwidth': 100e9,
'effective_freq_slot': None, 'effective_freq_slot': None,
'nb_channel': nb_channel, 'nb_channel': nb_channel,
'power': dbm2watt(req_power) 'power': dbm2watt(req_power),
'tx_power': dbm2watt(req_power)
} }
trx_params = trx_mode_params(eqpt) trx_params = trx_mode_params(eqpt)
params.update(trx_params) params.update(trx_params)
@@ -339,6 +341,7 @@ def create_per_oms_request(network, eqpt, req_power):
carrier['label'] = "" carrier['label'] = ""
carrier['slot_width'] = req.spacing carrier['slot_width'] = req.spacing
carrier['delta_pdb'] = 0 carrier['delta_pdb'] = 0
carrier['tx_power'] = 1e-3
req.initial_spectrum = {(req.f_min + req.spacing * f): Carrier(**carrier) req.initial_spectrum = {(req.f_min + req.spacing * f): Carrier(**carrier)
for f in range(1, req.nb_channel + 1)} for f in range(1, req.nb_channel + 1)}
req_list.append(req) req_list.append(req)
@@ -353,6 +356,7 @@ def create_per_oms_request(network, eqpt, req_power):
carrier['label'] = "" carrier['label'] = ""
carrier['slot_width'] = req.spacing carrier['slot_width'] = req.spacing
carrier['delta_pdb'] = 0 carrier['delta_pdb'] = 0
carrier['tx_power'] = 1e-3
req.initial_spectrum = {(req.f_min + req.spacing * f): Carrier(**carrier) for f in range(1, req.nb_channel + 1)} req.initial_spectrum = {(req.f_min + req.spacing * f): Carrier(**carrier) for f in range(1, req.nb_channel + 1)}
req_list.append(req) req_list.append(req)
return req_list return req_list

View File

@@ -28,7 +28,8 @@ def test_fiber():
fiber.ref_pch_in_dbm = 0.0 fiber.ref_pch_in_dbm = 0.0
# fix grid spectral information generation # fix grid spectral information generation
spectral_info_input = create_input_spectral_information(f_min=191.3e12, f_max=196.1e12, roll_off=0.15, spectral_info_input = create_input_spectral_information(f_min=191.3e12, f_max=196.1e12, roll_off=0.15,
baud_rate=32e9, power=1e-3, spacing=50e9, tx_osnr=40.0) baud_rate=32e9, spacing=50e9, tx_osnr=40.0,
tx_power=1e-3)
# propagation # propagation
spectral_info_out = fiber(spectral_info_input) spectral_info_out = fiber(spectral_info_input)
@@ -48,7 +49,7 @@ def test_fiber():
spectral_info_input = create_arbitrary_spectral_information(frequency=frequency, slot_width=slot_width, spectral_info_input = create_arbitrary_spectral_information(frequency=frequency, slot_width=slot_width,
signal=signal, baud_rate=baud_rate, roll_off=0.15, signal=signal, baud_rate=baud_rate, roll_off=0.15,
delta_pdb_per_channel=delta_pdb_per_channel, delta_pdb_per_channel=delta_pdb_per_channel,
tx_osnr=40.0) tx_osnr=40.0, tx_power=1e-3)
# propagation # propagation
spectral_info_out = fiber(spectral_info_input) spectral_info_out = fiber(spectral_info_input)
@@ -66,7 +67,8 @@ def test_raman_fiber():
"""Test the accuracy of propagating the RamanFiber.""" """Test the accuracy of propagating the RamanFiber."""
# spectral information generation # spectral information generation
spectral_info_input = create_input_spectral_information(f_min=191.3e12, f_max=196.1e12, roll_off=0.15, spectral_info_input = create_input_spectral_information(f_min=191.3e12, f_max=196.1e12, roll_off=0.15,
baud_rate=32e9, power=1e-3, spacing=50e9, tx_osnr=40.0) baud_rate=32e9, spacing=50e9, tx_osnr=40.0,
tx_power=1e-3)
SimParams.set_params(load_json(TEST_DIR / 'data' / 'sim_params.json')) SimParams.set_params(load_json(TEST_DIR / 'data' / 'sim_params.json'))
fiber = RamanFiber(**load_json(TEST_DIR / 'data' / 'test_science_utils_fiber_config.json')) fiber = RamanFiber(**load_json(TEST_DIR / 'data' / 'test_science_utils_fiber_config.json'))
fiber.ref_pch_in_dbm = 0.0 fiber.ref_pch_in_dbm = 0.0
@@ -103,7 +105,8 @@ def test_fiber_lumped_losses_srs(set_sim_params):
"""Test the accuracy of Fiber with lumped losses propagation.""" """Test the accuracy of Fiber with lumped losses propagation."""
# spectral information generation # spectral information generation
spectral_info_input = create_input_spectral_information(f_min=191.3e12, f_max=196.1e12, roll_off=0.15, spectral_info_input = create_input_spectral_information(f_min=191.3e12, f_max=196.1e12, roll_off=0.15,
baud_rate=32e9, power=1e-3, spacing=50e9, tx_osnr=40.0) baud_rate=32e9, spacing=50e9, tx_osnr=40.0,
tx_power=1e-3)
SimParams.set_params(load_json(TEST_DIR / 'data' / 'sim_params.json')) SimParams.set_params(load_json(TEST_DIR / 'data' / 'sim_params.json'))
fiber = Fiber(**load_json(TEST_DIR / 'data' / 'test_lumped_losses_raman_fiber_config.json')) fiber = Fiber(**load_json(TEST_DIR / 'data' / 'test_lumped_losses_raman_fiber_config.json'))

View File

@@ -288,6 +288,7 @@ def request_set():
'cost': 1, 'cost': 1,
'roll_off': 0.15, 'roll_off': 0.15,
'tx_osnr': 38, 'tx_osnr': 38,
'tx_power': 0.001,
'penalties': {}, 'penalties': {},
'min_spacing': 37.5e9, 'min_spacing': 37.5e9,
'nb_channel': None, 'nb_channel': None,

View File

@@ -61,7 +61,7 @@ def test_trx_mode_params(trx_type, trx_mode, error_message, no_error, expected_r
'penalties': {}, 'penalties': {},
'roll_off': 0.15, 'roll_off': 0.15,
'spacing': 50000000000.0, 'spacing': 50000000000.0,
'tx_osnr': 100 'tx_osnr': 100,
} }
possible_results["mode 2"] = { possible_results["mode 2"] = {
'format': 'mode 2', 'format': 'mode 2',