mirror of
https://github.com/Telecominfraproject/oopt-gnpy.git
synced 2025-11-01 02:28:05 +00:00
Compare commits
63 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8f9cf8ccc7 | ||
|
|
0c797a254c | ||
|
|
2cdeeabfa6 | ||
|
|
5e874798cb | ||
|
|
ff8f044064 | ||
|
|
d84ee4e76c | ||
|
|
521d27ffac | ||
|
|
35e759212e | ||
|
|
f6dede2b5f | ||
|
|
0d0019f627 | ||
|
|
06fe1c2f63 | ||
|
|
092316a9d7 | ||
|
|
48e3f96967 | ||
|
|
e9e8956caf | ||
|
|
0ae341c2a5 | ||
|
|
0c2f6372f8 | ||
|
|
97e80b4445 | ||
|
|
5e4c9b7d73 | ||
|
|
e96f821cce | ||
|
|
5f7e61e255 | ||
|
|
682b5c5691 | ||
|
|
11e5117505 | ||
|
|
50603420fc | ||
|
|
125264f265 | ||
|
|
b1067a6266 | ||
|
|
50d4ecd700 | ||
|
|
9f37e0371e | ||
|
|
9bd303db05 | ||
|
|
1bcb3ce25c | ||
|
|
e381138320 | ||
|
|
b450677709 | ||
|
|
54a3725e17 | ||
|
|
8889c2437a | ||
|
|
8bf8b2947b | ||
|
|
cb85b8fe2b | ||
|
|
18610fb7a9 | ||
|
|
bd6b278dd1 | ||
|
|
e143d25339 | ||
|
|
ffc7dbc241 | ||
|
|
b842898baf | ||
|
|
7ea9e3b341 | ||
|
|
fcf168b361 | ||
|
|
a7ec7e2ed6 | ||
|
|
00ee102b3a | ||
|
|
ce11524ad9 | ||
|
|
74be14562a | ||
|
|
16694d0a09 | ||
|
|
33c6038921 | ||
|
|
119c9eda90 | ||
|
|
b63e146bf4 | ||
|
|
09dba8a166 | ||
|
|
7f5043622b | ||
|
|
6ad4593f41 | ||
|
|
706661d801 | ||
|
|
a408d28911 | ||
|
|
b86fe96032 | ||
|
|
43926518ad | ||
|
|
128a6e816b | ||
|
|
44db951261 | ||
|
|
3c3d919b77 | ||
|
|
2079d2bc5b | ||
|
|
062e2076ed | ||
|
|
1dd1bad273 |
@@ -1,47 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
IMAGE_NAME=telecominfraproject/oopt-gnpy
|
|
||||||
IMAGE_TAG=$(git describe --tags)
|
|
||||||
|
|
||||||
ALREADY_FOUND=0
|
|
||||||
docker pull ${IMAGE_NAME}:${IMAGE_TAG} && ALREADY_FOUND=1
|
|
||||||
|
|
||||||
if [[ $ALREADY_FOUND == 0 ]]; then
|
|
||||||
docker build . -t ${IMAGE_NAME}
|
|
||||||
docker tag ${IMAGE_NAME} ${IMAGE_NAME}:${IMAGE_TAG}
|
|
||||||
|
|
||||||
# shared directory setup: do not clobber the real data
|
|
||||||
mkdir trash
|
|
||||||
cd trash
|
|
||||||
docker run -it --rm --volume $(pwd):/shared ${IMAGE_NAME} gnpy-transmission-example
|
|
||||||
else
|
|
||||||
echo "Image ${IMAGE_NAME}:${IMAGE_TAG} already available, will just update the other tags"
|
|
||||||
fi
|
|
||||||
|
|
||||||
docker images
|
|
||||||
|
|
||||||
do_docker_login() {
|
|
||||||
echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin
|
|
||||||
}
|
|
||||||
|
|
||||||
if [[ "${TRAVIS_PULL_REQUEST}" == "false" ]]; then
|
|
||||||
if [[ "${TRAVIS_BRANCH}" == "develop" || "${TRAVIS_BRANCH}" == "docker" ]]; then
|
|
||||||
echo "Publishing latest"
|
|
||||||
docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${IMAGE_NAME}:latest
|
|
||||||
do_docker_login
|
|
||||||
if [[ $ALREADY_FOUND == 0 ]]; then
|
|
||||||
docker push ${IMAGE_NAME}:${IMAGE_TAG}
|
|
||||||
fi
|
|
||||||
docker push ${IMAGE_NAME}:latest
|
|
||||||
elif [[ "${TRAVIS_BRANCH}" == "master" ]]; then
|
|
||||||
echo "Publishing stable"
|
|
||||||
docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${IMAGE_NAME}:stable
|
|
||||||
do_docker_login
|
|
||||||
if [[ $ALREADY_FOUND == 0 ]]; then
|
|
||||||
docker push ${IMAGE_NAME}:${IMAGE_TAG}
|
|
||||||
fi
|
|
||||||
docker push ${IMAGE_NAME}:stable
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
38
.github/workflows/main.yml
vendored
38
.github/workflows/main.yml
vendored
@@ -11,23 +11,25 @@ jobs:
|
|||||||
name: Tox test
|
name: Tox test
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- uses: fedora-python/tox-github-action@v0.4
|
- uses: fedora-python/tox-github-action@v0.4
|
||||||
with:
|
with:
|
||||||
tox_env: ${{ matrix.tox_env }}
|
tox_env: ${{ matrix.tox_env }}
|
||||||
dnf_install: ${{ matrix.dnf_install }}
|
dnf_install: ${{ matrix.dnf_install }}
|
||||||
- uses: codecov/codecov-action@29386c70ef20e286228c72b668a06fd0e8399192
|
- uses: codecov/codecov-action@v3.1.1
|
||||||
if: ${{ endswith(matrix.tox_env, '-cover') }}
|
if: ${{ endswith(matrix.tox_env, '-cover') }}
|
||||||
with:
|
with:
|
||||||
files: ${{ github.workspace }}/cover/coverage.xml
|
files: ${{ github.workspace }}/cover/coverage.xml
|
||||||
strategy:
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
tox_env:
|
tox_env:
|
||||||
- py38
|
- py38
|
||||||
- py39
|
- py39
|
||||||
- py310-cover
|
- py310
|
||||||
|
- py311-cover
|
||||||
include:
|
include:
|
||||||
- tox_env: docs
|
- tox_env: docs
|
||||||
dnf_install: graphviz
|
dnf_install: graphviz
|
||||||
@@ -38,13 +40,13 @@ jobs:
|
|||||||
name: PyPI packaging
|
name: PyPI packaging
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- uses: actions/setup-python@v2
|
- uses: actions/setup-python@v4
|
||||||
name: Install Python
|
name: Install Python
|
||||||
with:
|
with:
|
||||||
python-version: '3.10'
|
python-version: '3.11'
|
||||||
- uses: casperdcl/deploy-pypi@bb869aafd89f657ceaafe9561d3b5584766c0f95
|
- uses: casperdcl/deploy-pypi@bb869aafd89f657ceaafe9561d3b5584766c0f95
|
||||||
with:
|
with:
|
||||||
password: ${{ secrets.PYPI_API_TOKEN }}
|
password: ${{ secrets.PYPI_API_TOKEN }}
|
||||||
@@ -62,7 +64,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
username: jktjkt
|
username: jktjkt
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Extract tag name
|
- name: Extract tag name
|
||||||
@@ -92,21 +94,27 @@ jobs:
|
|||||||
telecominfraproject/oopt-gnpy:${{ steps.extract_tag_name.outputs.GIT_DESC }}
|
telecominfraproject/oopt-gnpy:${{ steps.extract_tag_name.outputs.GIT_DESC }}
|
||||||
telecominfraproject/oopt-gnpy:latest
|
telecominfraproject/oopt-gnpy:latest
|
||||||
|
|
||||||
windows:
|
other-platforms:
|
||||||
name: Tests on Windows
|
name: Tests on other platforms
|
||||||
runs-on: windows-2019
|
runs-on: ${{ matrix.os }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- uses: actions/setup-python@v2
|
- uses: actions/setup-python@v4
|
||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python_version }}
|
python-version: ${{ matrix.python_version }}
|
||||||
- run: |
|
- run: |
|
||||||
|
pip install -r tests/requirements.txt
|
||||||
pip install --editable .
|
pip install --editable .
|
||||||
pip install 'pytest>=6.2.5,<7'
|
|
||||||
pytest -vv
|
pytest -vv
|
||||||
strategy:
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
python_version:
|
include:
|
||||||
- "3.10"
|
- os: windows-2019
|
||||||
|
python_version: "3.10"
|
||||||
|
- os: windows-2022
|
||||||
|
python_version: "3.11"
|
||||||
|
- os: macos-12
|
||||||
|
python_version: "3.11"
|
||||||
|
|||||||
27
.travis.yml
27
.travis.yml
@@ -1,27 +0,0 @@
|
|||||||
dist: focal
|
|
||||||
os: linux
|
|
||||||
language: python
|
|
||||||
services: docker
|
|
||||||
python:
|
|
||||||
- "3.8"
|
|
||||||
- "3.9"
|
|
||||||
before_install:
|
|
||||||
- sudo apt-get -y install graphviz
|
|
||||||
install: skip
|
|
||||||
script:
|
|
||||||
- pip install --editable .
|
|
||||||
- pip install pytest-cov rstcheck
|
|
||||||
- pytest --cov-report=xml --cov=gnpy -v
|
|
||||||
- pip install -r docs/requirements.txt
|
|
||||||
- rstcheck --ignore-roles cite *.rst
|
|
||||||
- sphinx-build -W --keep-going docs/ x-throwaway-location
|
|
||||||
after_success:
|
|
||||||
- bash <(curl -s https://codecov.io/bash)
|
|
||||||
jobs:
|
|
||||||
include:
|
|
||||||
- stage: test
|
|
||||||
name: Docker image
|
|
||||||
script:
|
|
||||||
- git fetch --unshallow
|
|
||||||
- ./.docker-travis.sh
|
|
||||||
- docker images
|
|
||||||
22
.zuul.yaml
22
.zuul.yaml
@@ -2,10 +2,18 @@
|
|||||||
- project:
|
- project:
|
||||||
check:
|
check:
|
||||||
jobs:
|
jobs:
|
||||||
- tox-py38
|
- tox-py38:
|
||||||
- tox-py39
|
vars:
|
||||||
- tox-py310-cover
|
ensure_tox_version: '<4'
|
||||||
- tox-docs-f35
|
- tox-py39:
|
||||||
|
vars:
|
||||||
|
ensure_tox_version: '<4'
|
||||||
|
- tox-py310-cover:
|
||||||
|
vars:
|
||||||
|
ensure_tox_version: '<4'
|
||||||
|
- tox-docs-f36:
|
||||||
|
vars:
|
||||||
|
ensure_tox_version: '<4'
|
||||||
- coverage-diff:
|
- coverage-diff:
|
||||||
voting: false
|
voting: false
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -16,7 +24,11 @@
|
|||||||
coverage_job_name_current: tox-py310-cover
|
coverage_job_name_current: tox-py310-cover
|
||||||
- tox-linters-diff-n-report:
|
- tox-linters-diff-n-report:
|
||||||
voting: false
|
voting: false
|
||||||
- tox-py310-cover-previous
|
vars:
|
||||||
|
ensure_tox_version: '<4'
|
||||||
|
- tox-py310-cover-previous:
|
||||||
|
vars:
|
||||||
|
ensure_tox_version: '<4'
|
||||||
tag:
|
tag:
|
||||||
jobs:
|
jobs:
|
||||||
- oopt-release-python:
|
- oopt-release-python:
|
||||||
|
|||||||
@@ -11,18 +11,21 @@ To learn how to contribute, please see CONTRIBUTING.md
|
|||||||
- Brian Taylor (Facebook) <briantaylor@fb.com>
|
- Brian Taylor (Facebook) <briantaylor@fb.com>
|
||||||
- David Boertjes (Ciena) <dboertje@ciena.com>
|
- David Boertjes (Ciena) <dboertje@ciena.com>
|
||||||
- Diego Landa (Facebook) <dlanda@fb.com>
|
- Diego Landa (Facebook) <dlanda@fb.com>
|
||||||
|
- Emmanuelle Delfour (Orange) <WEDE7391@orange.com>
|
||||||
- Esther Le Rouzic (Orange) <esther.lerouzic@orange.com>
|
- Esther Le Rouzic (Orange) <esther.lerouzic@orange.com>
|
||||||
- Gabriele Galimberti (Cisco) <ggalimbe@cisco.com>
|
- Gabriele Galimberti (Cisco) <ggalimbe@cisco.com>
|
||||||
- Gert Grammel (Juniper Networks) <ggrammel@juniper.net>
|
- Gert Grammel (Juniper Networks) <ggrammel@juniper.net>
|
||||||
|
- Giacomo Borraccini (Politecnico di Torino) <giacomo.borraccini@polito.it>
|
||||||
- Gilad Goldfarb (Facebook) <giladg@fb.com>
|
- Gilad Goldfarb (Facebook) <giladg@fb.com>
|
||||||
- James Powell (Telecom Infra Project) <james.powell@telecominfraproject.com>
|
- James Powell (Telecom Infra Project) <james.powell@telecominfraproject.com>
|
||||||
- Jan Kundrát (Telecom Infra Project) <jan.kundrat@telecominfraproject.com>
|
- Jan Kundrát (Telecom Infra Project) <jkt@jankundrat.com>
|
||||||
- Jeanluc Augé (Orange) <jeanluc.auge@orange.com>
|
- Jeanluc Augé (Orange) <jeanluc.auge@orange.com>
|
||||||
- Jonas Mårtensson (RISE) <jonas.martensson@ri.se>
|
- Jonas Mårtensson (RISE) <jonas.martensson@ri.se>
|
||||||
- Mattia Cantono (Politecnico di Torino) <mattia.cantono@polito.it>
|
- Mattia Cantono (Politecnico di Torino) <mattia.cantono@polito.it>
|
||||||
- Miguel Garrich (University Catalunya) <miquel.garrich@upct.es>
|
- Miguel Garrich (University Catalunya) <miquel.garrich@upct.es>
|
||||||
- Raj Nagarajan (Lumentum) <raj.nagarajan@lumentum.com>
|
- Raj Nagarajan (Lumentum) <raj.nagarajan@lumentum.com>
|
||||||
- Roberts Miculens (Lattelecom) <roberts.miculens@lattelecom.lv>
|
- Roberts Miculens (Lattelecom) <roberts.miculens@lattelecom.lv>
|
||||||
|
- Sami Alavi (NUST) <sami.mansooralavi1999@gmail.com>
|
||||||
- Shengxiang Zhu (University of Arizona) <szhu@email.arizona.edu>
|
- Shengxiang Zhu (University of Arizona) <szhu@email.arizona.edu>
|
||||||
- Stefan Melin (Telia Company) <Stefan.Melin@teliacompany.com>
|
- Stefan Melin (Telia Company) <Stefan.Melin@teliacompany.com>
|
||||||
- Vittorio Curri (Politecnico di Torino) <vittorio.curri@polito.it>
|
- Vittorio Curri (Politecnico di Torino) <vittorio.curri@polito.it>
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
[](https://pypi.org/project/gnpy/)
|
[](https://pypi.org/project/gnpy/)
|
||||||
[](https://pypi.org/project/gnpy/)
|
[](https://pypi.org/project/gnpy/)
|
||||||
[](http://gnpy.readthedocs.io/en/master/?badge=master)
|
[](http://gnpy.readthedocs.io/en/master/?badge=master)
|
||||||
[](https://github.com/Telecominfraproject/oopt-gnpy/actions/workflows/main.yml)
|
[](https://github.com/Telecominfraproject/oopt-gnpy/actions/workflows/main.yml)
|
||||||
[](https://review.gerrithub.io/q/project:Telecominfraproject/oopt-gnpy+is:open)
|
[](https://review.gerrithub.io/q/project:Telecominfraproject/oopt-gnpy+is:open)
|
||||||
[](https://github.com/Telecominfraproject/oopt-gnpy/graphs/contributors)
|
[](https://github.com/Telecominfraproject/oopt-gnpy/graphs/contributors)
|
||||||
[](https://lgtm.com/projects/g/Telecominfraproject/oopt-gnpy/)
|
|
||||||
[](https://codecov.io/gh/Telecominfraproject/oopt-gnpy)
|
[](https://codecov.io/gh/Telecominfraproject/oopt-gnpy)
|
||||||
[](https://doi.org/10.5281/zenodo.3458319)
|
[](https://doi.org/10.5281/zenodo.3458319)
|
||||||
|
[](https://matrix.to/#/%23oopt-gnpy%3Afoss.wtf?via=matrix.org&via=foss.wtf)
|
||||||
|
|
||||||
GNPy is an open-source, community-developed library for building route planning and optimization tools in real-world mesh optical networks.
|
GNPy is an open-source, community-developed library for building route planning and optimization tools in real-world mesh optical networks.
|
||||||
We are a consortium of operators, vendors, and academic researchers sponsored via the [Telecom Infra Project](http://telecominfraproject.com)'s [OOPT/PSE](https://telecominfraproject.com/open-optical-packet-transport) working group.
|
We are a consortium of operators, vendors, and academic researchers sponsored via the [Telecom Infra Project](http://telecominfraproject.com)'s [OOPT/PSE](https://telecominfraproject.com/open-optical-packet-transport) working group.
|
||||||
@@ -26,4 +26,6 @@ This example demonstrates how GNPy can be used to check the expected SNR at the
|
|||||||

|

|
||||||
|
|
||||||
GNPy can do much more, including acting as a Path Computation Engine, tracking bandwidth requests, or advising the SDN controller about a best possible path through a large DWDM network.
|
GNPy can do much more, including acting as a Path Computation Engine, tracking bandwidth requests, or advising the SDN controller about a best possible path through a large DWDM network.
|
||||||
Learn more about this [in the documentation](https://gnpy.readthedocs.io/).
|
Learn more about this [in the documentation](https://gnpy.readthedocs.io/), or give it a [try online at `gnpy.app`](https://gnpy.app/):
|
||||||
|
|
||||||
|
[](https://gnpy.app/)
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ We encourage all interested people outside the TIP to [join the project](https:/
|
|||||||
|
|
||||||
`gnpy` is looking for additional contributors, especially those with experience planning and maintaining large-scale, real-world mesh optical networks.
|
`gnpy` is looking for additional contributors, especially those with experience planning and maintaining large-scale, real-world mesh optical networks.
|
||||||
|
|
||||||
To get involved, please contact [Jan Kundrát](mailto:jan.kundrat@telecominfraproject.com) or [Gert Grammel](mailto:ggrammel@juniper.net).
|
To get involved, please contact [Jan Kundrát](mailto:jkt@jankundrat.com) or [Gert Grammel](mailto:ggrammel@juniper.net).
|
||||||
|
|
||||||
`gnpy` contributions are currently limited to members of [TIP](http://telecominfraproject.com).
|
`gnpy` contributions are currently limited to members of [TIP](http://telecominfraproject.com).
|
||||||
Membership is free and open to all.
|
Membership is free and open to all.
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ This path is directional, and all "GNPy elements" along the path match the unidi
|
|||||||
|
|
||||||
The network topology contains not just the physical topology of the network, but also references to the :ref:`equipment library<concepts-equipment>` and a set of *operating parameters* for each entity.
|
The network topology contains not just the physical topology of the network, but also references to the :ref:`equipment library<concepts-equipment>` and a set of *operating parameters* for each entity.
|
||||||
These parameters include the **fiber length** of each fiber, the connector **attenutation losses**, or an amplifier's specific **gain setting**.
|
These parameters include the **fiber length** of each fiber, the connector **attenutation losses**, or an amplifier's specific **gain setting**.
|
||||||
The topology is specified via :ref:`XLS files<excel>` or via :ref:`JSON<json>`.
|
The topology is specified via :ref:`XLS files<excel>` or via :ref:`JSON<legacy-json>`.
|
||||||
|
|
||||||
.. _complete-vs-incomplete:
|
.. _complete-vs-incomplete:
|
||||||
|
|
||||||
|
|||||||
@@ -100,10 +100,10 @@ Raman Amplifiers
|
|||||||
|
|
||||||
An accurate simulation of Raman amplification requires knowledge of:
|
An accurate simulation of Raman amplification requires knowledge of:
|
||||||
|
|
||||||
- the *power* and *wavelength* of all Raman pumping lasers,
|
* the *power* and *wavelength* of all Raman pumping lasers,
|
||||||
- the *direction*, whether it is co-propagating or counter-propagating,
|
* the *direction*, whether it is co-propagating or counter-propagating,
|
||||||
- the Raman efficiency of the fiber,
|
* the Raman efficiency of the fiber,
|
||||||
- the fiber temperature.
|
* the fiber temperature.
|
||||||
|
|
||||||
Under certain scenarios it is useful to be able to run a simulation without an accurate Raman description.
|
Under certain scenarios it is useful to be able to run a simulation without an accurate Raman description.
|
||||||
For these purposes, it is possible to approximate a Raman amplifier via a fixed-gain EDFA with the :ref:`polynomial NF<ext-nf-model-polynomial-NF>` model using :math:`\text{a} = \text{b} = \text{c} = 0`, and a desired effective :math:`\text{d} = NF`.
|
For these purposes, it is possible to approximate a Raman amplifier via a fixed-gain EDFA with the :ref:`polynomial NF<ext-nf-model-polynomial-NF>` model using :math:`\text{a} = \text{b} = \text{c} = 0`, and a desired effective :math:`\text{d} = NF`.
|
||||||
|
|||||||
BIN
docs/images/2022-04-12-gnpy-app.png
Normal file
BIN
docs/images/2022-04-12-gnpy-app.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 288 KiB |
@@ -10,7 +10,7 @@ fully-functional programs.
|
|||||||
|
|
||||||
**Note**: *If you are a network operator or involved in route planning and
|
**Note**: *If you are a network operator or involved in route planning and
|
||||||
optimization for your organization, please contact project maintainer Jan
|
optimization for your organization, please contact project maintainer Jan
|
||||||
Kundrát <jan.kundrat@telecominfraproject.com>. gnpy is looking for users with
|
Kundrát <jkt@jankundrat.com>. gnpy is looking for users with
|
||||||
specific, delineated use cases to drive requirements for future
|
specific, delineated use cases to drive requirements for future
|
||||||
development.*
|
development.*
|
||||||
|
|
||||||
|
|||||||
290
docs/json.rst
290
docs/json.rst
@@ -1,4 +1,4 @@
|
|||||||
.. _json:
|
.. _legacy-json:
|
||||||
|
|
||||||
JSON Input Files
|
JSON Input Files
|
||||||
================
|
================
|
||||||
@@ -44,7 +44,7 @@ For all amplifier models:
|
|||||||
| ``type_variety`` | (string) | a unique name to ID the amplifier in the|
|
| ``type_variety`` | (string) | a unique name to ID the amplifier in the|
|
||||||
| | | JSON/Excel template topology input file |
|
| | | JSON/Excel template topology input file |
|
||||||
+------------------------+-----------+-----------------------------------------+
|
+------------------------+-----------+-----------------------------------------+
|
||||||
| ``out_voa_auto`` | (boolean) | auto_design feature to optimize the |
|
| ``out_voa_auto`` | (boolean) | auto-design feature to optimize the |
|
||||||
| | | amplifier output VOA. If true, output |
|
| | | amplifier output VOA. If true, output |
|
||||||
| | | VOA is present and will be used to push |
|
| | | VOA is present and will be used to push |
|
||||||
| | | amplifier gain to its maximum, within |
|
| | | amplifier gain to its maximum, within |
|
||||||
@@ -176,36 +176,36 @@ ROADM
|
|||||||
|
|
||||||
The user can only modify the value of existing parameters:
|
The user can only modify the value of existing parameters:
|
||||||
|
|
||||||
+--------------------------+-----------+---------------------------------------------+
|
+-------------------------------+-----------+----------------------------------------------------+
|
||||||
| field | type | description |
|
| field | type | description |
|
||||||
+==========================+===========+=============================================+
|
+===============================+===========+====================================================+
|
||||||
| ``target_pch_out_db`` | (number) | Auto-design sets the ROADM egress channel |
|
| ``target_pch_out_db`` | (number) | Default :ref:`equalization strategy<equalization>` |
|
||||||
| | | power. This reflects typical control loop |
|
| or | | for this ROADM type. |
|
||||||
| | | algorithms that adjust ROADM losses to |
|
| ``target_psd_out_mWperGHz`` | | |
|
||||||
| | | equalize channels (eg coming from different |
|
| or | | Auto-design sets the ROADM egress channel |
|
||||||
| | | ingress direction or add ports) |
|
| ``target_out_mWperSlotWidth`` | | power. This reflects typical control loop |
|
||||||
| | | This is the default value |
|
| (mutually exclusive) | | algorithms that adjust ROADM losses to |
|
||||||
| | | Roadm/params/target_pch_out_db if no value |
|
| | | equalize channels (e.g., coming from |
|
||||||
| | | is given in the ``Roadm`` element in the |
|
| | | different ingress direction or add ports). |
|
||||||
| | | topology input description. |
|
| | | |
|
||||||
| | | This default value is ignored if a |
|
| | | These values are used as defaults when no |
|
||||||
| | | params/target_pch_out_db value is input in |
|
| | | overrides are set per each ``Roadm`` |
|
||||||
| | | the topology for a given ROADM. |
|
| | | element in the network topology. |
|
||||||
+--------------------------+-----------+---------------------------------------------+
|
+-------------------------------+-----------+----------------------------------------------------+
|
||||||
| ``add_drop_osnr`` | (number) | OSNR contribution from the add/drop ports |
|
| ``add_drop_osnr`` | (number) | OSNR contribution from the add/drop ports |
|
||||||
+--------------------------+-----------+---------------------------------------------+
|
+-------------------------------+-----------+----------------------------------------------------+
|
||||||
| ``pmd`` | (number) | Polarization mode dispersion (PMD). (s) |
|
| ``pmd`` | (number) | Polarization mode dispersion (PMD). (s) |
|
||||||
+--------------------------+-----------+---------------------------------------------+
|
+-------------------------------+-----------+----------------------------------------------------+
|
||||||
| ``restrictions`` | (dict of | If non-empty, keys ``preamp_variety_list`` |
|
| ``restrictions`` | (dict of | If non-empty, keys ``preamp_variety_list`` |
|
||||||
| | strings) | and ``booster_variety_list`` represent |
|
| | strings) | and ``booster_variety_list`` represent |
|
||||||
| | | list of ``type_variety`` amplifiers which |
|
| | | list of ``type_variety`` amplifiers which |
|
||||||
| | | are allowed for auto-design within ROADM's |
|
| | | are allowed for auto-design within ROADM's |
|
||||||
| | | line degrees. |
|
| | | line degrees. |
|
||||||
| | | |
|
| | | |
|
||||||
| | | If no booster should be placed on a degree, |
|
| | | If no booster should be placed on a degree, |
|
||||||
| | | insert a ``Fused`` node on the degree |
|
| | | insert a ``Fused`` node on the degree |
|
||||||
| | | output. |
|
| | | output. |
|
||||||
+--------------------------+-----------+---------------------------------------------+
|
+-------------------------------+-----------+----------------------------------------------------+
|
||||||
|
|
||||||
Global parameters
|
Global parameters
|
||||||
-----------------
|
-----------------
|
||||||
@@ -223,6 +223,9 @@ For amplifiers defined in the topology JSON input but whose ``gain = 0`` (placeh
|
|||||||
The file ``sim_params.json`` contains the tuning parameters used within both the ``gnpy.science_utils.RamanSolver`` and
|
The file ``sim_params.json`` contains the tuning parameters used within both the ``gnpy.science_utils.RamanSolver`` and
|
||||||
the ``gnpy.science_utils.NliSolver`` for the evaluation of the Raman profile and the NLI generation, respectively.
|
the ``gnpy.science_utils.NliSolver`` for the evaluation of the Raman profile and the NLI generation, respectively.
|
||||||
|
|
||||||
|
If amplifiers don't have settings, auto-design also sets amplifiers gain, output VOA and target powers according to [J. -L. Auge, V. Curri and E. Le Rouzic, Open Design for Multi-Vendor Optical Networks, OFC 2019](https://ieeexplore.ieee.org/document/8696699), equation 4.
|
||||||
|
See ``delta_power_range_db`` for more explaination.
|
||||||
|
|
||||||
+---------------------------------------------+-----------+---------------------------------------------+
|
+---------------------------------------------+-----------+---------------------------------------------+
|
||||||
| field | type | description |
|
| field | type | description |
|
||||||
+=============================================+===========+=============================================+
|
+=============================================+===========+=============================================+
|
||||||
@@ -283,23 +286,27 @@ Span configuration is not a list (which may change in later releases) and the us
|
|||||||
+-------------------------------------+-----------+---------------------------------------------+
|
+-------------------------------------+-----------+---------------------------------------------+
|
||||||
| field | type | description |
|
| field | type | description |
|
||||||
+=====================================+===========+=============================================+
|
+=====================================+===========+=============================================+
|
||||||
| ``power_mode`` | (boolean) | If false, gain mode. Auto-design sets |
|
| ``power_mode`` | (boolean) | If false, **gain mode**. In the gain mode, |
|
||||||
| | | amplifier gain = preceding span loss, |
|
| | | only gain settings are used for |
|
||||||
| | | unless the amplifier exists and its |
|
| | | propagation, and ``delta_p`` is ignored. |
|
||||||
| | | gain > 0 in the topology input JSON. |
|
| | | If no ``gain_target`` is set in an |
|
||||||
| | | If true, power mode (recommended for |
|
| | | amplifier, auto-design computes one |
|
||||||
| | | auto-design and power sweep.) |
|
| | | according to the ``delta_power_range`` |
|
||||||
| | | Auto-design sets amplifier power |
|
| | | optimisation range. |
|
||||||
| | | according to delta_power_range. If the |
|
| | | The gain mode |
|
||||||
| | | amplifier exists with gain > 0 in the |
|
| | | is recommended if all the amplifiers |
|
||||||
| | | topology JSON input, then its gain is |
|
| | | have already consistent gain settings in |
|
||||||
| | | translated into a power target/channel. |
|
| | | the topology input file. |
|
||||||
| | | Moreover, when performing a power sweep |
|
| | | |
|
||||||
| | | (see ``power_range_db`` in the SI |
|
| | | If true, **power mode**. In the power mode, |
|
||||||
| | | configuration library) the power sweep |
|
| | | only the ``delta_p`` is used for |
|
||||||
| | | is performed w/r/t this power target, |
|
| | | propagation, and ``gain_target`` is |
|
||||||
| | | regardless of preceding amplifiers |
|
| | | ignored. |
|
||||||
| | | power saturation/limitations. |
|
| | | The power mode is recommended for |
|
||||||
|
| | | auto-design and power sweep. |
|
||||||
|
| | | If no ``delta_p`` is set, |
|
||||||
|
| | | auto-design sets an amplifier power target |
|
||||||
|
| | | according to delta_power_range_db. |
|
||||||
+-------------------------------------+-----------+---------------------------------------------+
|
+-------------------------------------+-----------+---------------------------------------------+
|
||||||
| ``delta_power_range_db`` | (number) | Auto-design only, power-mode |
|
| ``delta_power_range_db`` | (number) | Auto-design only, power-mode |
|
||||||
| | | only. Specifies the [min, max, step] |
|
| | | only. Specifies the [min, max, step] |
|
||||||
@@ -404,9 +411,9 @@ Span configuration is not a list (which may change in later releases) and the us
|
|||||||
SpectralInformation
|
SpectralInformation
|
||||||
~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
The user can only modify the value of existing parameters.
|
GNPy requires a description of all channels that are propagated through the network.
|
||||||
It defines a spectrum of N identical carriers.
|
Flexgrid channel partitioning is available since the 2.7 release via the extra ``--spectrum`` option.
|
||||||
While the code libraries allow for different carriers and power levels, the current user parametrization only allows one carrier type and one power/channel definition.
|
In the simplest case, homogeneous channel allocation can be defined via the ``SpectralInformation`` construct which defines a spectrum of N identical carriers:
|
||||||
|
|
||||||
+----------------------+-----------+-------------------------------------------+
|
+----------------------+-----------+-------------------------------------------+
|
||||||
| field | type | description |
|
| field | type | description |
|
||||||
@@ -427,11 +434,20 @@ While the code libraries allow for different carriers and power levels, the curr
|
|||||||
+----------------------+-----------+-------------------------------------------+
|
+----------------------+-----------+-------------------------------------------+
|
||||||
| ``tx_osnr`` | (number) | In dB. OSNR out from transponder. |
|
| ``tx_osnr`` | (number) | In dB. OSNR out from transponder. |
|
||||||
+----------------------+-----------+-------------------------------------------+
|
+----------------------+-----------+-------------------------------------------+
|
||||||
| ``power_dbm`` | (number) | Reference channel power. In gain mode |
|
| ``power_dbm`` | (number) | Reference channel power, in dBm. |
|
||||||
| | | (see spans/power_mode = false), all gain |
|
| | | In gain mode |
|
||||||
| | | settings are offset w/r/t this reference |
|
| | | (see spans/power_mode = false), if no |
|
||||||
| | | power. In power mode, it is the |
|
| | | gain is set in an amplifier, auto-design |
|
||||||
| | | reference power for |
|
| | | sets gain to meet this reference |
|
||||||
|
| | | power. If amplifiers gain is set, |
|
||||||
|
| | | ``power_dbm`` is |
|
||||||
|
| | | ignored. |
|
||||||
|
| | | |
|
||||||
|
| | | In power mode, the ``power_dbm`` |
|
||||||
|
| | | is the reference power for |
|
||||||
|
| | | the ``delta_p`` settings in amplifiers. |
|
||||||
|
| | | It is also the reference power for |
|
||||||
|
| | | auto-design power optimisation range |
|
||||||
| | | Spans/delta_power_range_db. For example, |
|
| | | Spans/delta_power_range_db. For example, |
|
||||||
| | | if delta_power_range_db = `[0,0,0]`, the |
|
| | | if delta_power_range_db = `[0,0,0]`, the |
|
||||||
| | | same power=power_dbm is launched in every |
|
| | | same power=power_dbm is launched in every |
|
||||||
@@ -439,12 +455,166 @@ While the code libraries allow for different carriers and power levels, the curr
|
|||||||
| | | with the power_dbm value: even if a |
|
| | | with the power_dbm value: even if a |
|
||||||
| | | power sweep is defined (see after) the |
|
| | | power sweep is defined (see after) the |
|
||||||
| | | design is not repeated. |
|
| | | design is not repeated. |
|
||||||
|
| | | |
|
||||||
|
| | | If the ``--power`` CLI option is used, |
|
||||||
|
| | | its value replaces this parameter. |
|
||||||
+----------------------+-----------+-------------------------------------------+
|
+----------------------+-----------+-------------------------------------------+
|
||||||
| ``power_range_db`` | (number) | Power sweep excursion around power_dbm. |
|
| ``power_range_db`` | (number) | Power sweep excursion around |
|
||||||
| | | It is not the min and max channel power |
|
| | | ``power_dbm``. |
|
||||||
| | | values! The reference power becomes: |
|
| | | This defines a list of reference powers |
|
||||||
|
| | | to run the propagation, in the range |
|
||||||
| | | power_range_db + power_dbm. |
|
| | | power_range_db + power_dbm. |
|
||||||
|
| | | Power sweep uses the ``delta_p`` targets |
|
||||||
|
| | | or, if they have not been set, the ones |
|
||||||
|
| | | computed by auto-design, regardless of |
|
||||||
|
| | | of preceding amplifiers' power |
|
||||||
|
| | | saturation. |
|
||||||
|
| | | |
|
||||||
|
| | | Power sweep is an easy way to find the |
|
||||||
|
| | | optimal reference power. |
|
||||||
|
| | | |
|
||||||
|
| | | Power sweep excursion is ignored in case |
|
||||||
|
| | | of gain mode. |
|
||||||
+----------------------+-----------+-------------------------------------------+
|
+----------------------+-----------+-------------------------------------------+
|
||||||
| ``sys_margins`` | (number) | In dB. Added margin on min required |
|
| ``sys_margins`` | (number) | In dB. Added margin on min required |
|
||||||
| | | transceiver OSNR. |
|
| | | transceiver OSNR. |
|
||||||
+----------------------+-----------+-------------------------------------------+
|
+----------------------+-----------+-------------------------------------------+
|
||||||
|
|
||||||
|
.. _mixed-rate:
|
||||||
|
|
||||||
|
Arbitrary channel definition
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Non-uniform channels are defined via a list of spectrum "partitions" which are defined in an extra JSON file via the ``--spectrum`` option.
|
||||||
|
In this approach, each partition is internally homogeneous, but different partitions might use different channel widths, power targets, modulation rates, etc.
|
||||||
|
|
||||||
|
+----------------------+-----------+-------------------------------------------+
|
||||||
|
| field | type | description |
|
||||||
|
+======================+===========+===========================================+
|
||||||
|
| ``f_min``, | (number) | In Hz. Mandatory. |
|
||||||
|
| ``f_max`` | | Define partition :math:`f_{min}` is |
|
||||||
|
| | | the first carrier central frequency |
|
||||||
|
| | | :math:`f_{max}` is the last one. |
|
||||||
|
| | | :math:`f_{min}` -:math:`f_{max}` |
|
||||||
|
| | | partitions must not overlap. |
|
||||||
|
| | | |
|
||||||
|
| | | Note that the meaning of ``f_min`` and |
|
||||||
|
| | | ``f_max`` is different than the one in |
|
||||||
|
| | | ``SpectralInformation``. |
|
||||||
|
+----------------------+-----------+-------------------------------------------+
|
||||||
|
| ``baud_rate`` | (number) | In Hz. Mandatory. Simulated baud rate. |
|
||||||
|
+----------------------+-----------+-------------------------------------------+
|
||||||
|
| ``slot_width`` | (number) | In Hz. Carrier spectrum occupation. |
|
||||||
|
| | | Carriers of this partition are spaced at |
|
||||||
|
| | | ``slot_width`` offsets. |
|
||||||
|
+----------------------+-----------+-------------------------------------------+
|
||||||
|
| ``roll_off`` | (number) | Pure number between 0 and 1. Mandatory |
|
||||||
|
| | | TX signal roll-off shape. Used by |
|
||||||
|
| | | Raman-aware simulation code. |
|
||||||
|
+----------------------+-----------+-------------------------------------------+
|
||||||
|
| ``tx_osnr`` | (number) | In dB. Optional. OSNR out from |
|
||||||
|
| | | transponder. Default value is 40 dB. |
|
||||||
|
+----------------------+-----------+-------------------------------------------+
|
||||||
|
| ``delta_pdb`` | (number) | In dB. Optional. Power offset compared to |
|
||||||
|
| | | the reference power used for design |
|
||||||
|
| | | (SI block in equipment library) to be |
|
||||||
|
| | | applied by ROADM to equalize the carriers |
|
||||||
|
| | | in this partition. Default value is 0 dB. |
|
||||||
|
+----------------------+-----------+-------------------------------------------+
|
||||||
|
|
||||||
|
For example this example:
|
||||||
|
|
||||||
|
.. code-block:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"SI":[
|
||||||
|
{
|
||||||
|
"f_min": 191.4e12,
|
||||||
|
"f_max":193.1e12,
|
||||||
|
"baud_rate": 32e9,
|
||||||
|
"slot_width": 50e9,
|
||||||
|
"roll_off": 0.15,
|
||||||
|
"tx_osnr": 40
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"f_min": 193.1625e12,
|
||||||
|
"f_max":195e12,
|
||||||
|
"baud_rate": 64e9,
|
||||||
|
"delta_pdb": 3,
|
||||||
|
"slot_width": 75e9,
|
||||||
|
"roll_off": 0.15,
|
||||||
|
"tx_osnr": 40
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
...defines a spectrum split into two parts.
|
||||||
|
Carriers with central frequencies ranging from 191.4 THz to 193.1 THz will have 32 GBaud rate and will be spaced by 50 Ghz.
|
||||||
|
Carriers with central frequencies ranging from 193.1625 THz to 195 THz will have 64 GBaud rate and will be spaced by 75 GHz with 3 dB power offset.
|
||||||
|
|
||||||
|
If the SI reference carrier is set to ``power_dbm`` = 0dBm, and the ROADM has ``target_pch_out_db`` set to -20 dBm, then all channels ranging from 191.4 THz to 193.1 THz will have their power equalized to -20 + 0 dBm (due to the 0 dB power offset).
|
||||||
|
All channels ranging from 193.1625 THz to 195 THz will have their power equalized to -20 + 3 = -17 dBm (total power signal + noise).
|
||||||
|
|
||||||
|
Note that first carrier of the second partition has center frequency 193.1625 THz (its spectrum occupation ranges from 193.125 THz to 193.2 THz).
|
||||||
|
The last carrier of the second partition has center frequency 193.1 THz and spectrum occupation ranges from 193.075 THz to 193.125 THz.
|
||||||
|
There is no overlap of the occupation and both share the same boundary.
|
||||||
|
|
||||||
|
.. _equalization:
|
||||||
|
|
||||||
|
Equalization choices
|
||||||
|
~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
ROADMs typically equalize the optical power across multiple channels using one of the available equalization strategies — either targeting a specific output power, or a specific power spectral density (PSD), or a spectfic power spectral density using slot_width as spectrum width reference (PSW).
|
||||||
|
All of these strategies can be adjusted by a per-channel power offset.
|
||||||
|
The equalization strategy can be defined globally per a ROADM model, or per each ROADM instance in the topology, and within a ROADM also on a per-degree basis.
|
||||||
|
|
||||||
|
Let's consider some example for the equalization. Suppose that the types of signal to be propagated are the following:
|
||||||
|
|
||||||
|
.. code-block:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"baud_rate": 32e9,
|
||||||
|
"f_min":191.3e12,
|
||||||
|
"f_max":192.3e12,
|
||||||
|
"spacing": 50e9,
|
||||||
|
"label": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"baud_rate": 64e9,
|
||||||
|
"f_min":193.3e12,
|
||||||
|
"f_max":194.3e12,
|
||||||
|
"spacing": 75e9,
|
||||||
|
"label": 2
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
with the PSD equalization in a ROADM:
|
||||||
|
|
||||||
|
.. code-block:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"uid": "roadm A",
|
||||||
|
"type": "Roadm",
|
||||||
|
"params": {
|
||||||
|
"target_psd_out_mWperGHz": 3.125e-4,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
This means that power out of the ROADM will be computed as 3.125e-4 * 32 = 0.01 mW ie -20 dBm for label 1 types of carriers
|
||||||
|
and 3.125e4 * 64 = 0.02 mW ie -16.99 dBm for label2 channels. So a ratio of ~ 3 dB between target powers for these carriers.
|
||||||
|
|
||||||
|
With the PSW equalization:
|
||||||
|
|
||||||
|
.. code-block:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"uid": "roadm A",
|
||||||
|
"type": "Roadm",
|
||||||
|
"params": {
|
||||||
|
"target_out_mWperSlotWidth": 2.0e-4,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
the power out of the ROADM will be computed as 2.0e-4 * 50 = 0.01 mW ie -20 dBm for label 1 types of carriers
|
||||||
|
and 2.0e4 * 75 = 0.015 mW ie -18.24 dBm for label2 channels. So a ratio of ~ 1.76 dB between target powers for these carriers.
|
||||||
|
|||||||
@@ -21,16 +21,19 @@ instance as a result.
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
from numpy import abs, array, errstate, ones, interp, mean, pi, polyfit, polyval, sum, sqrt, log10, exp, asarray, full,\
|
from numpy import abs, array, errstate, ones, interp, mean, pi, polyfit, polyval, sum, sqrt, log10, exp, asarray, full,\
|
||||||
squeeze, zeros, append, flip, outer
|
squeeze, zeros, append, flip, outer, ndarray
|
||||||
from scipy.constants import h, c
|
from scipy.constants import h, c
|
||||||
from scipy.interpolate import interp1d
|
from scipy.interpolate import interp1d
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
from gnpy.core.utils import lin2db, db2lin, arrange_frequencies, snr_sum
|
|
||||||
|
from gnpy.core.utils import lin2db, db2lin, arrange_frequencies, snr_sum, per_label_average, pretty_summary_print, \
|
||||||
|
watt2dbm, psd2powerdbm
|
||||||
from gnpy.core.parameters import RoadmParams, FusedParams, FiberParams, PumpParams, EdfaParams, EdfaOperational
|
from gnpy.core.parameters import RoadmParams, FusedParams, FiberParams, PumpParams, EdfaParams, EdfaOperational
|
||||||
from gnpy.core.science_utils import NliSolver, RamanSolver
|
from gnpy.core.science_utils import NliSolver, RamanSolver
|
||||||
from gnpy.core.info import SpectralInformation
|
from gnpy.core.info import SpectralInformation, ReferenceCarrier
|
||||||
from gnpy.core.exceptions import NetworkTopologyError, SpectrumError
|
from gnpy.core.exceptions import NetworkTopologyError, SpectrumError, ParametersError
|
||||||
|
|
||||||
|
|
||||||
class Location(namedtuple('Location', 'latitude longitude city region')):
|
class Location(namedtuple('Location', 'latitude longitude city region')):
|
||||||
@@ -86,6 +89,7 @@ class Transceiver(_Node):
|
|||||||
self.pdl = None
|
self.pdl = None
|
||||||
self.penalties = {}
|
self.penalties = {}
|
||||||
self.total_penalty = 0
|
self.total_penalty = 0
|
||||||
|
self.propagated_labels = [""]
|
||||||
|
|
||||||
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.
|
||||||
@@ -116,6 +120,7 @@ class Transceiver(_Node):
|
|||||||
|
|
||||||
def _calc_snr(self, spectral_info):
|
def _calc_snr(self, spectral_info):
|
||||||
with errstate(divide='ignore'):
|
with errstate(divide='ignore'):
|
||||||
|
self.propagated_labels = spectral_info.label
|
||||||
self.baud_rate = spectral_info.baud_rate
|
self.baud_rate = spectral_info.baud_rate
|
||||||
ratio_01nm = lin2db(12.5e9 / self.baud_rate)
|
ratio_01nm = lin2db(12.5e9 / self.baud_rate)
|
||||||
# set raw values to record original calculation, before update_snr()
|
# set raw values to record original calculation, before update_snr()
|
||||||
@@ -173,23 +178,22 @@ class Transceiver(_Node):
|
|||||||
if self.snr is None or self.osnr_ase is None:
|
if self.snr is None or self.osnr_ase is None:
|
||||||
return f'{type(self).__name__} {self.uid}'
|
return f'{type(self).__name__} {self.uid}'
|
||||||
|
|
||||||
snr = round(mean(self.snr), 2)
|
snr = per_label_average(self.snr, self.propagated_labels)
|
||||||
osnr_ase = round(mean(self.osnr_ase), 2)
|
osnr_ase = per_label_average(self.osnr_ase, self.propagated_labels)
|
||||||
osnr_ase_01nm = round(mean(self.osnr_ase_01nm), 2)
|
osnr_ase_01nm = per_label_average(self.osnr_ase_01nm, self.propagated_labels)
|
||||||
snr_01nm = round(mean(self.snr_01nm), 2)
|
snr_01nm = per_label_average(self.snr_01nm, 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)
|
||||||
|
|
||||||
result = '\n'.join([f'{type(self).__name__} {self.uid}',
|
result = '\n'.join([f'{type(self).__name__} {self.uid}',
|
||||||
|
f' GSNR (0.1nm, dB): {pretty_summary_print(snr_01nm)}',
|
||||||
f' GSNR (0.1nm, dB): {snr_01nm:.2f}',
|
f' GSNR (signal bw, dB): {pretty_summary_print(snr)}',
|
||||||
f' GSNR (signal bw, dB): {snr:.2f}',
|
f' OSNR ASE (0.1nm, dB): {pretty_summary_print(osnr_ase_01nm)}',
|
||||||
f' OSNR ASE (0.1nm, dB): {osnr_ase_01nm:.2f}',
|
f' OSNR ASE (signal bw, dB): {pretty_summary_print(osnr_ase)}',
|
||||||
f' OSNR ASE (signal bw, dB): {osnr_ase:.2f}',
|
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}'])
|
|
||||||
|
|
||||||
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:
|
||||||
@@ -215,63 +219,185 @@ class Roadm(_Node):
|
|||||||
def __init__(self, *args, params=None, **kwargs):
|
def __init__(self, *args, params=None, **kwargs):
|
||||||
if not params:
|
if not params:
|
||||||
params = {}
|
params = {}
|
||||||
super().__init__(*args, params=RoadmParams(**params), **kwargs)
|
try:
|
||||||
self.pch_out_db = self.params.target_pch_out_db
|
super().__init__(*args, params=RoadmParams(**params), **kwargs)
|
||||||
|
except ParametersError as e:
|
||||||
|
raise ParametersError(f'Config error in {kwargs["uid"]}: {e}') from e
|
||||||
|
|
||||||
|
# Target output power for the reference carrier, can only be computed on the fly, because it depends
|
||||||
|
# on the path, since it depends on the equalization definition on the degree.
|
||||||
|
self.ref_pch_out_dbm = None
|
||||||
self.loss = 0 # auto-design interest
|
self.loss = 0 # auto-design interest
|
||||||
self.effective_loss = None
|
|
||||||
|
# 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.
|
||||||
|
self.ref_effective_loss = None
|
||||||
|
|
||||||
self.passive = True
|
self.passive = True
|
||||||
self.restrictions = self.params.restrictions
|
self.restrictions = self.params.restrictions
|
||||||
self.per_degree_pch_out_db = self.params.per_degree_pch_out_db
|
self.propagated_labels = [""]
|
||||||
|
# element contains the two types of equalisation parameters, but only one is not None or empty
|
||||||
|
# target for equalization for the ROADM only one must be not None
|
||||||
|
self.target_pch_out_dbm = self.params.target_pch_out_db
|
||||||
|
self.target_psd_out_mWperGHz = self.params.target_psd_out_mWperGHz
|
||||||
|
self.target_out_mWperSlotWidth = self.params.target_out_mWperSlotWidth
|
||||||
|
self.per_degree_pch_out_dbm = self.params.per_degree_pch_out_db
|
||||||
|
self.per_degree_pch_psd = self.params.per_degree_pch_psd
|
||||||
|
self.per_degree_pch_psw = self.params.per_degree_pch_psw
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def to_json(self):
|
def to_json(self):
|
||||||
return {'uid': self.uid,
|
if self.target_pch_out_dbm is not None:
|
||||||
'type': type(self).__name__,
|
equalisation, value = 'target_pch_out_db', self.target_pch_out_dbm
|
||||||
'params': {
|
elif self.target_psd_out_mWperGHz is not None:
|
||||||
'target_pch_out_db': self.pch_out_db,
|
equalisation, value = 'target_psd_out_mWperGHz', self.target_psd_out_mWperGHz
|
||||||
'restrictions': self.restrictions,
|
elif self.target_out_mWperSlotWidth is not None:
|
||||||
'per_degree_pch_out_db': self.per_degree_pch_out_db
|
equalisation, value = 'target_out_mWperSlotWidth', self.target_out_mWperSlotWidth
|
||||||
},
|
else:
|
||||||
'metadata': {
|
assert False, 'There must be one default equalization defined in ROADM'
|
||||||
'location': self.metadata['location']._asdict()
|
to_json = {
|
||||||
}
|
'uid': self.uid,
|
||||||
}
|
'type': type(self).__name__,
|
||||||
|
'params': {
|
||||||
|
equalisation: value,
|
||||||
|
'restrictions': self.restrictions,
|
||||||
|
},
|
||||||
|
'metadata': {
|
||||||
|
'location': self.metadata['location']._asdict()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# several per_degree equalization may coexist on different degrees
|
||||||
|
if self.per_degree_pch_out_dbm:
|
||||||
|
to_json['params']['per_degree_pch_out_db'] = self.per_degree_pch_out_dbm
|
||||||
|
if self.per_degree_pch_psd:
|
||||||
|
to_json['params']['per_degree_psd_out_mWperGHz'] = self.per_degree_pch_psd
|
||||||
|
if self.per_degree_pch_psw:
|
||||||
|
to_json['params']['per_degree_psd_out_mWperSlotWidth'] = self.per_degree_pch_psw
|
||||||
|
return to_json
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f'{type(self).__name__}(uid={self.uid!r}, loss={self.loss!r})'
|
return f'{type(self).__name__}(uid={self.uid!r}, loss={self.loss!r})'
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
if self.effective_loss is None:
|
if self.ref_effective_loss is None:
|
||||||
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))
|
||||||
return '\n'.join([f'{type(self).__name__} {self.uid}',
|
return '\n'.join([f'{type(self).__name__} {self.uid}',
|
||||||
f' effective loss (dB): {self.effective_loss:.2f}',
|
f' effective loss (dB): {self.ref_effective_loss:.2f}',
|
||||||
f' pch out (dBm): {self.pch_out_db:.2f}'])
|
f' reference pch out (dBm): {self.ref_pch_out_dbm:.2f}',
|
||||||
|
f' actual pch out (dBm): {total_pch}'])
|
||||||
|
|
||||||
|
def get_roadm_target_power(self, ref_carrier: ReferenceCarrier = None,
|
||||||
|
spectral_info: SpectralInformation = None) -> Union[float, ndarray]:
|
||||||
|
"""Computes the power in dBm for a reference carrier or for a spectral information.
|
||||||
|
power is computed based on equalization target.
|
||||||
|
if spectral_info baud_rate is baud_rate = [32e9, 42e9, 64e9, 42e9, 32e9], and
|
||||||
|
target_pch_out_dbm is defined to -20 dbm, then the function returns an array of powers
|
||||||
|
[-20, -20, -20, -20, -20]
|
||||||
|
if target_psd_out_mWperGHz is defined instead with 3.125e-4mW/GHz then it returns
|
||||||
|
[-20, -18.819, -16.9897, -18.819, -20]
|
||||||
|
if instead a reference_baud_rate is defined, the functions computes the result for a
|
||||||
|
single reference carrier whose baud_rate is reference_baudrate
|
||||||
|
"""
|
||||||
|
if spectral_info:
|
||||||
|
if self.target_pch_out_dbm is not None:
|
||||||
|
return full(len(spectral_info.channel_number), self.target_pch_out_dbm)
|
||||||
|
if self.target_psd_out_mWperGHz is not None:
|
||||||
|
return psd2powerdbm(self.target_psd_out_mWperGHz, spectral_info.baud_rate)
|
||||||
|
if self.target_out_mWperSlotWidth is not None:
|
||||||
|
return psd2powerdbm(self.target_out_mWperSlotWidth, spectral_info.slot_width)
|
||||||
|
else:
|
||||||
|
if self.target_pch_out_dbm is not None:
|
||||||
|
return self.target_pch_out_dbm
|
||||||
|
if self.target_psd_out_mWperGHz is not None:
|
||||||
|
return psd2powerdbm(self.target_psd_out_mWperGHz, ref_carrier.baud_rate)
|
||||||
|
if self.target_out_mWperSlotWidth is not None:
|
||||||
|
return psd2powerdbm(self.target_out_mWperSlotWidth, ref_carrier.slot_width)
|
||||||
|
return None
|
||||||
|
|
||||||
|
def get_per_degree_ref_power(self, degree, ref_carrier):
|
||||||
|
"""Get the target power in dBm out of ROADM degree for the reference bandwidth
|
||||||
|
If no equalization is defined on this degree use the ROADM level one.
|
||||||
|
"""
|
||||||
|
if degree in self.per_degree_pch_out_dbm:
|
||||||
|
return self.per_degree_pch_out_dbm[degree]
|
||||||
|
elif degree in self.per_degree_pch_psd:
|
||||||
|
return psd2powerdbm(self.per_degree_pch_psd[degree], ref_carrier.baud_rate)
|
||||||
|
elif degree in self.per_degree_pch_psw:
|
||||||
|
return psd2powerdbm(self.per_degree_pch_psw[degree], ref_carrier.slot_width)
|
||||||
|
return self.get_roadm_target_power(ref_carrier)
|
||||||
|
|
||||||
|
def get_per_degree_power(self, degree, spectral_info):
|
||||||
|
"""Get the target power in dBm out of ROADM degree for the spectral information
|
||||||
|
If no equalization is defined on this degree use the ROADM level one.
|
||||||
|
"""
|
||||||
|
if degree in self.per_degree_pch_out_dbm:
|
||||||
|
return self.per_degree_pch_out_dbm[degree]
|
||||||
|
elif degree in self.per_degree_pch_psd:
|
||||||
|
return psd2powerdbm(self.per_degree_pch_psd[degree], spectral_info.baud_rate)
|
||||||
|
return self.get_roadm_target_power(spectral_info=spectral_info)
|
||||||
|
|
||||||
def propagate(self, spectral_info, degree):
|
def propagate(self, spectral_info, degree):
|
||||||
# pin_target and loss are read from eqpt_config.json['Roadm']
|
"""Equalization targets are read from topology file if defined and completed with default
|
||||||
# all ingress channels in xpress are set to this power level
|
definition of the library.
|
||||||
# but add channels are not, so we define an effective loss
|
If the input power is lower than the target one, use the input power instead because
|
||||||
# in the case of add channels
|
a ROADM doesn't amplify, it can only attenuate.
|
||||||
# find the target power on this degree:
|
There is no difference for add or express : the same target is applied. For the moment
|
||||||
# if a target power has been defined for this degree use it else use the global one.
|
propagates operates with spectral info carriers all having the same source or destination.
|
||||||
# if the input power is lower than the target one, use the input power instead because
|
"""
|
||||||
# a ROADM doesn't amplify, it can only attenuate
|
|
||||||
# TODO maybe add a minimum loss for the ROADM
|
# TODO maybe add a minimum loss for the ROADM
|
||||||
per_degree_pch = self.per_degree_pch_out_db[degree] \
|
|
||||||
if degree in self.per_degree_pch_out_db else self.pch_out_db
|
# find the target power for the reference carrier
|
||||||
self.pch_out_db = min(spectral_info.pref.p_spani, per_degree_pch)
|
ref_per_degree_pch = self.get_per_degree_ref_power(degree, spectral_info.pref.ref_carrier)
|
||||||
self.effective_loss = spectral_info.pref.p_spani - self.pch_out_db
|
# find the target powers for each signal carrier
|
||||||
|
per_degree_pch = self.get_per_degree_power(degree, spectral_info=spectral_info)
|
||||||
|
|
||||||
|
# Definition of ref_pch_out_dbm for the reference channel:
|
||||||
|
# Depending on propagation upstream from this ROADM, the input power (p_spani) might be smaller than
|
||||||
|
# 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.
|
||||||
|
# (TODO add a minimum loss for the ROADM crossing)
|
||||||
|
self.ref_pch_out_dbm = min(spectral_info.pref.p_spani, ref_per_degree_pch)
|
||||||
|
# Definition of effective_loss:
|
||||||
|
# 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.
|
||||||
|
self.ref_effective_loss = spectral_info.pref.p_spani - self.ref_pch_out_dbm
|
||||||
input_power = spectral_info.signal + spectral_info.nli + spectral_info.ase
|
input_power = spectral_info.signal + spectral_info.nli + spectral_info.ase
|
||||||
min_power = min(lin2db(input_power * 1e3))
|
target_power_per_channel = per_degree_pch + spectral_info.delta_pdb_per_channel
|
||||||
per_degree_pch = per_degree_pch if per_degree_pch < min_power else min_power
|
# Computation of the per channel target power according to equalization policy
|
||||||
delta_power = lin2db(input_power * 1e3) - per_degree_pch
|
# 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:
|
||||||
|
# freq1: 1dB, freq2: 3dB, freq3: -3dB, and target is -20dBm out of the ROADM,
|
||||||
|
# then the target power for each channel uses the specified delta_pdb_per_channel.
|
||||||
|
# target_power_per_channel[f1, f2, f3] = -19, -17, -23
|
||||||
|
# However if input_signal = -23, -16, -26, then the target can not be applied, because
|
||||||
|
# -23 < -19dBm and -26 < -23dBm. Then the target is only applied to signals whose power is above the
|
||||||
|
# threshold. others are left unchanged and unequalized.
|
||||||
|
# the new target is [-23, -17, -26]
|
||||||
|
# and the attenuation to apply is [-23, -16, -26] - [-23, -17, -26] = [0, 1, 0]
|
||||||
|
# note that this changes the previous behaviour that equalized all identical channels based on the one
|
||||||
|
# that had the min power.
|
||||||
|
# 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
|
||||||
|
correction = (abs(watt2dbm(input_power) - target_power_per_channel)
|
||||||
|
- (watt2dbm(input_power) - target_power_per_channel)) / 2
|
||||||
|
new_target = target_power_per_channel - correction
|
||||||
|
delta_power = watt2dbm(input_power) - 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.params.pmd ** 2)
|
spectral_info.pmd = sqrt(spectral_info.pmd ** 2 + self.params.pmd ** 2)
|
||||||
spectral_info.pdl = sqrt(spectral_info.pdl ** 2 + self.params.pdl ** 2)
|
spectral_info.pdl = sqrt(spectral_info.pdl ** 2 + self.params.pdl ** 2)
|
||||||
|
self.pch_out_dbm = watt2dbm(spectral_info.signal + spectral_info.nli + spectral_info.ase)
|
||||||
|
self.propagated_labels = spectral_info.label
|
||||||
|
|
||||||
def update_pref(self, spectral_info):
|
def update_pref(self, spectral_info):
|
||||||
spectral_info.pref = spectral_info.pref._replace(p_span0=spectral_info.pref.p_span0, p_spani=self.pch_out_db)
|
"""Update Reference power
|
||||||
|
|
||||||
|
This modifies the spectral info in-place. Only the `pref` is updated with new p_spani,
|
||||||
|
while p_span0 is not changed.
|
||||||
|
"""
|
||||||
|
spectral_info.pref = spectral_info.pref._replace(p_spani=self.ref_pch_out_dbm)
|
||||||
|
|
||||||
def __call__(self, spectral_info, degree):
|
def __call__(self, spectral_info, degree):
|
||||||
self.propagate(spectral_info, degree=degree)
|
self.propagate(spectral_info, degree=degree)
|
||||||
@@ -326,7 +452,7 @@ class Fiber(_Node):
|
|||||||
super().__init__(*args, params=FiberParams(**params), **kwargs)
|
super().__init__(*args, params=FiberParams(**params), **kwargs)
|
||||||
self.pch_out_db = None
|
self.pch_out_db = None
|
||||||
self.passive = True
|
self.passive = True
|
||||||
|
self.propagated_labels = [""]
|
||||||
# Raman efficiency matrix function of the delta frequency constructed such that each row is related to a
|
# Raman efficiency matrix function of the delta frequency constructed such that each row is related to a
|
||||||
# fixed frequency: positive elements represent a gain (from higher frequency) and negative elements represent
|
# fixed frequency: positive elements represent a gain (from higher frequency) and negative elements represent
|
||||||
# a loss (to lower frequency)
|
# a loss (to lower frequency)
|
||||||
@@ -376,6 +502,7 @@ class Fiber(_Node):
|
|||||||
if self.pch_out_db is None:
|
if self.pch_out_db is None:
|
||||||
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))
|
||||||
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' length (km): {self.params.length * 1e-3:.2f}',
|
f' length (km): {self.params.length * 1e-3:.2f}',
|
||||||
@@ -383,7 +510,8 @@ class Fiber(_Node):
|
|||||||
f' total loss (dB): {self.loss:.2f}',
|
f' total loss (dB): {self.loss:.2f}',
|
||||||
f' (includes conn loss (dB) in: {self.params.con_in:.2f} out: {self.params.con_out:.2f})',
|
f' (includes conn loss (dB) in: {self.params.con_in:.2f} out: {self.params.con_out:.2f})',
|
||||||
f' (conn loss out includes EOL margin defined in eqpt_config.json)',
|
f' (conn loss out includes EOL margin defined in eqpt_config.json)',
|
||||||
f' pch out (dBm): {self.pch_out_db:.2f}'])
|
f' reference pch out (dBm): {self.pch_out_db:.2f}',
|
||||||
|
f' actual pch out (dBm): {total_pch}'])
|
||||||
|
|
||||||
def loss_coef_func(self, frequency):
|
def loss_coef_func(self, frequency):
|
||||||
frequency = asarray(frequency)
|
frequency = asarray(frequency)
|
||||||
@@ -473,6 +601,8 @@ class Fiber(_Node):
|
|||||||
# apply the attenuation due to the output connector loss
|
# apply the attenuation due to the output connector loss
|
||||||
attenuation_out_db = self.params.con_out
|
attenuation_out_db = self.params.con_out
|
||||||
spectral_info.apply_attenuation_db(attenuation_out_db)
|
spectral_info.apply_attenuation_db(attenuation_out_db)
|
||||||
|
self.pch_out_dbm = watt2dbm(spectral_info.signal + spectral_info.nli + spectral_info.ase)
|
||||||
|
self.propagated_labels = spectral_info.label
|
||||||
|
|
||||||
def update_pref(self, spectral_info):
|
def update_pref(self, spectral_info):
|
||||||
# in case of Raman, the resulting loss of the fiber is not equivalent to self.loss
|
# in case of Raman, the resulting loss of the fiber is not equivalent to self.loss
|
||||||
@@ -545,6 +675,8 @@ class RamanFiber(Fiber):
|
|||||||
# apply the attenuation due to the output connector loss
|
# apply the attenuation due to the output connector loss
|
||||||
attenuation_out_db = self.params.con_out
|
attenuation_out_db = self.params.con_out
|
||||||
spectral_info.apply_attenuation_db(attenuation_out_db)
|
spectral_info.apply_attenuation_db(attenuation_out_db)
|
||||||
|
self.pch_out_dbm = watt2dbm(spectral_info.signal + spectral_info.nli + spectral_info.ase)
|
||||||
|
self.propagated_labels = spectral_info.label
|
||||||
|
|
||||||
|
|
||||||
class Edfa(_Node):
|
class Edfa(_Node):
|
||||||
@@ -573,6 +705,7 @@ class Edfa(_Node):
|
|||||||
self.delta_p = self.operational.delta_p # delta P with Pref (power swwep) in power mode
|
self.delta_p = self.operational.delta_p # delta P with Pref (power swwep) in power mode
|
||||||
self.tilt_target = self.operational.tilt_target
|
self.tilt_target = self.operational.tilt_target
|
||||||
self.out_voa = self.operational.out_voa
|
self.out_voa = self.operational.out_voa
|
||||||
|
self.propagated_labels = [""]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def to_json(self):
|
def to_json(self):
|
||||||
@@ -580,7 +713,7 @@ class Edfa(_Node):
|
|||||||
'type': type(self).__name__,
|
'type': type(self).__name__,
|
||||||
'type_variety': self.params.type_variety,
|
'type_variety': self.params.type_variety,
|
||||||
'operational': {
|
'operational': {
|
||||||
'gain_target': round(self.effective_gain, 6),
|
'gain_target': round(self.effective_gain, 6) if self.effective_gain else None,
|
||||||
'delta_p': self.delta_p,
|
'delta_p': self.delta_p,
|
||||||
'tilt_target': self.tilt_target,
|
'tilt_target': self.tilt_target,
|
||||||
'out_voa': self.out_voa
|
'out_voa': self.out_voa
|
||||||
@@ -606,6 +739,7 @@ class Edfa(_Node):
|
|||||||
if self.pin_db is None or self.pout_db is None:
|
if self.pin_db is None or self.pout_db is None:
|
||||||
return f'{type(self).__name__} {self.uid}'
|
return f'{type(self).__name__} {self.uid}'
|
||||||
nf = mean(self.nf)
|
nf = mean(self.nf)
|
||||||
|
total_pch = pretty_summary_print(per_label_average(self.pch_out_dbm, 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.params.type_variety}',
|
f' type_variety: {self.params.type_variety}',
|
||||||
f' effective gain(dB): {self.effective_gain:.2f}',
|
f' effective gain(dB): {self.effective_gain:.2f}',
|
||||||
@@ -618,6 +752,7 @@ class Edfa(_Node):
|
|||||||
f' Delta_P (dB): ' + (f'{self.delta_p:.2f}' if self.delta_p is not None else 'None'),
|
f' Delta_P (dB): ' + (f'{self.delta_p:.2f}' if self.delta_p is not None else 'None'),
|
||||||
f' target pch (dBm): ' + (f'{self.target_pch_out_db:.2f}' if self.target_pch_out_db is not None else 'None'),
|
f' target pch (dBm): ' + (f'{self.target_pch_out_db:.2f}' if self.target_pch_out_db is not None else 'None'),
|
||||||
f' effective pch (dBm): {self.effective_pch_out_db:.2f}',
|
f' effective pch (dBm): {self.effective_pch_out_db:.2f}',
|
||||||
|
f' actual pch out (dBm): {total_pch}',
|
||||||
f' output VOA (dB): {self.out_voa:.2f}'])
|
f' output VOA (dB): {self.out_voa:.2f}'])
|
||||||
|
|
||||||
def interpol_params(self, spectral_info):
|
def interpol_params(self, spectral_info):
|
||||||
@@ -639,7 +774,7 @@ class Edfa(_Node):
|
|||||||
|
|
||||||
self.nch = spectral_info.number_of_channels
|
self.nch = spectral_info.number_of_channels
|
||||||
pin = spectral_info.signal + spectral_info.ase + spectral_info.nli
|
pin = spectral_info.signal + spectral_info.ase + spectral_info.nli
|
||||||
self.pin_db = lin2db(sum(pin * 1e3))
|
self.pin_db = watt2dbm(sum(pin))
|
||||||
# The following should be changed when we have the new spectral information including slot widths.
|
# The following should be changed when we have the new spectral information including slot widths.
|
||||||
# For now, with homogeneous spectrum, we can calculate it as the difference between neighbouring channels.
|
# For now, with homogeneous spectrum, we can calculate it as the difference between neighbouring channels.
|
||||||
self.slot_width = self.channel_freq[1] - self.channel_freq[0]
|
self.slot_width = self.channel_freq[1] - self.channel_freq[0]
|
||||||
@@ -652,15 +787,14 @@ class Edfa(_Node):
|
|||||||
self.effective_gain = self.target_pch_out_db - pref.p_spani
|
self.effective_gain = self.target_pch_out_db - pref.p_spani
|
||||||
|
|
||||||
"""check power saturation and correct effective gain & power accordingly:"""
|
"""check power saturation and correct effective gain & power accordingly:"""
|
||||||
|
# Compute the saturation accounting for actual power at the input of the amp
|
||||||
self.effective_gain = min(
|
self.effective_gain = min(
|
||||||
self.effective_gain,
|
self.effective_gain,
|
||||||
self.params.p_max - (pref.p_spani + pref.neq_ch)
|
self.params.p_max - self.pin_db
|
||||||
)
|
)
|
||||||
#print(self.uid, self.effective_gain, self.operational.gain_target)
|
|
||||||
self.effective_pch_out_db = round(pref.p_spani + self.effective_gain, 2)
|
self.effective_pch_out_db = round(pref.p_spani + self.effective_gain, 2)
|
||||||
|
|
||||||
"""check power saturation and correct target_gain accordingly:"""
|
"""check power saturation and correct target_gain accordingly:"""
|
||||||
#print(self.uid, self.effective_gain, self.pin_db, pref.p_spani)
|
|
||||||
self.nf = self._calc_nf()
|
self.nf = self._calc_nf()
|
||||||
self.gprofile = self._gain_profile(pin)
|
self.gprofile = self._gain_profile(pin)
|
||||||
|
|
||||||
@@ -891,6 +1025,8 @@ class Edfa(_Node):
|
|||||||
spectral_info.apply_gain_db(self.gprofile - self.out_voa)
|
spectral_info.apply_gain_db(self.gprofile - self.out_voa)
|
||||||
spectral_info.pmd = sqrt(spectral_info.pmd ** 2 + self.params.pmd ** 2)
|
spectral_info.pmd = sqrt(spectral_info.pmd ** 2 + self.params.pmd ** 2)
|
||||||
spectral_info.pdl = sqrt(spectral_info.pdl ** 2 + self.params.pdl ** 2)
|
spectral_info.pdl = sqrt(spectral_info.pdl ** 2 + self.params.pdl ** 2)
|
||||||
|
self.pch_out_dbm = watt2dbm(spectral_info.signal + spectral_info.nli + spectral_info.ase)
|
||||||
|
self.propagated_labels = spectral_info.label
|
||||||
|
|
||||||
def update_pref(self, spectral_info):
|
def update_pref(self, spectral_info):
|
||||||
spectral_info.pref = \
|
spectral_info.pref = \
|
||||||
|
|||||||
@@ -66,9 +66,6 @@ def trx_mode_params(equipment, trx_type_variety='', trx_mode='', error_message=F
|
|||||||
trx_params['roll_off'] = default_si_data.roll_off
|
trx_params['roll_off'] = default_si_data.roll_off
|
||||||
trx_params['tx_osnr'] = default_si_data.tx_osnr
|
trx_params['tx_osnr'] = default_si_data.tx_osnr
|
||||||
trx_params['min_spacing'] = None
|
trx_params['min_spacing'] = None
|
||||||
nch = automatic_nch(trx_params['f_min'], trx_params['f_max'], trx_params['spacing'])
|
|
||||||
trx_params['nb_channel'] = nch
|
|
||||||
print(f'There are {nch} channels propagating')
|
|
||||||
|
|
||||||
trx_params['power'] = db2lin(default_si_data.power_dbm) * 1e-3
|
trx_params['power'] = db2lin(default_si_data.power_dbm) * 1e-3
|
||||||
|
|
||||||
|
|||||||
@@ -12,9 +12,10 @@ from __future__ import annotations
|
|||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
from collections.abc import Iterable
|
from collections.abc import Iterable
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
from dataclasses import dataclass
|
||||||
from numpy import argsort, mean, array, append, ones, ceil, any, zeros, outer, full, ndarray, asarray
|
from numpy import argsort, mean, array, append, ones, ceil, any, zeros, outer, full, ndarray, asarray
|
||||||
|
|
||||||
from gnpy.core.utils import automatic_nch, lin2db, db2lin
|
from gnpy.core.utils import automatic_nch, db2lin, watt2dbm
|
||||||
from gnpy.core.exceptions import SpectrumError
|
from gnpy.core.exceptions import SpectrumError
|
||||||
|
|
||||||
DEFAULT_SLOT_WIDTH_STEP = 12.5e9 # Hz
|
DEFAULT_SLOT_WIDTH_STEP = 12.5e9 # Hz
|
||||||
@@ -41,18 +42,21 @@ class Channel(namedtuple('Channel',
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class Pref(namedtuple('Pref', 'p_span0, p_spani, neq_ch ')):
|
class Pref(namedtuple('Pref', 'p_span0, p_spani, ref_carrier')):
|
||||||
"""noiseless reference power in dBm:
|
"""noiseless reference power in dBm:
|
||||||
p_span0: inital target carrier power
|
p_span0: inital target carrier power for a reference channel defined by user
|
||||||
p_spani: carrier power after element i
|
p_spani: carrier power after element i for a reference channel defined by user
|
||||||
neq_ch: equivalent channel count in dB"""
|
ref_carrier records the baud rate of the reference channel
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
class SpectralInformation(object):
|
class SpectralInformation(object):
|
||||||
""" Class containing the parameters of the entire WDM comb."""
|
""" Class containing the parameters of the entire WDM comb.
|
||||||
|
delta_pdb_per_channel: (per frequency) per channel delta power in dbm for the actual mix of channels"""
|
||||||
|
|
||||||
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):
|
roll_off: array, chromatic_dispersion: array, pmd: array, pdl: array, delta_pdb_per_channel: array,
|
||||||
|
tx_osnr: array, ref_power: Pref, 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))
|
||||||
@@ -77,8 +81,10 @@ class SpectralInformation(object):
|
|||||||
self._chromatic_dispersion = chromatic_dispersion[indices]
|
self._chromatic_dispersion = chromatic_dispersion[indices]
|
||||||
self._pmd = pmd[indices]
|
self._pmd = pmd[indices]
|
||||||
self._pdl = pdl[indices]
|
self._pdl = pdl[indices]
|
||||||
pref = lin2db(mean(signal) * 1e3)
|
self._delta_pdb_per_channel = delta_pdb_per_channel[indices]
|
||||||
self._pref = Pref(pref, pref, lin2db(self._number_of_channels))
|
self._tx_osnr = tx_osnr[indices]
|
||||||
|
self._pref = ref_power
|
||||||
|
self._label = label[indices]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def pref(self):
|
def pref(self):
|
||||||
@@ -155,6 +161,10 @@ class SpectralInformation(object):
|
|||||||
def pmd(self):
|
def pmd(self):
|
||||||
return self._pmd
|
return self._pmd
|
||||||
|
|
||||||
|
@property
|
||||||
|
def label(self):
|
||||||
|
return self._label
|
||||||
|
|
||||||
@pmd.setter
|
@pmd.setter
|
||||||
def pmd(self, pmd):
|
def pmd(self, pmd):
|
||||||
self._pmd = pmd
|
self._pmd = pmd
|
||||||
@@ -167,6 +177,22 @@ class SpectralInformation(object):
|
|||||||
def pdl(self, pdl):
|
def pdl(self, pdl):
|
||||||
self._pdl = pdl
|
self._pdl = pdl
|
||||||
|
|
||||||
|
@property
|
||||||
|
def delta_pdb_per_channel(self):
|
||||||
|
return self._delta_pdb_per_channel
|
||||||
|
|
||||||
|
@delta_pdb_per_channel.setter
|
||||||
|
def delta_pdb_per_channel(self, delta_pdb_per_channel):
|
||||||
|
self._delta_pdb_per_channel = delta_pdb_per_channel
|
||||||
|
|
||||||
|
@property
|
||||||
|
def tx_osnr(self):
|
||||||
|
return self._tx_osnr
|
||||||
|
|
||||||
|
@tx_osnr.setter
|
||||||
|
def tx_osnr(self, tx_osnr):
|
||||||
|
self._tx_osnr = tx_osnr
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def channel_number(self):
|
def channel_number(self):
|
||||||
return self._channel_number
|
return self._channel_number
|
||||||
@@ -197,6 +223,12 @@ class SpectralInformation(object):
|
|||||||
|
|
||||||
def __add__(self, other: SpectralInformation):
|
def __add__(self, other: SpectralInformation):
|
||||||
try:
|
try:
|
||||||
|
# Note that pref.p_spanx from "self" and "other" must be identical for a given simulation (correspond to the
|
||||||
|
# the simulation setup):
|
||||||
|
# - for a given simulation there is only one design (one p_span0),
|
||||||
|
# - and p_spani is the propagation result of p_span0 so there should not be different p_spani either.
|
||||||
|
if (self.pref.p_span0 != other.pref.p_span0) or (self.pref.p_spani != other.pref.p_spani):
|
||||||
|
raise SpectrumError('reference powers of the spectrum are not identical')
|
||||||
return SpectralInformation(frequency=append(self.frequency, other.frequency),
|
return SpectralInformation(frequency=append(self.frequency, other.frequency),
|
||||||
slot_width=append(self.slot_width, other.slot_width),
|
slot_width=append(self.slot_width, other.slot_width),
|
||||||
signal=append(self.signal, other.signal), nli=append(self.nli, other.nli),
|
signal=append(self.signal, other.signal), nli=append(self.nli, other.nli),
|
||||||
@@ -206,10 +238,16 @@ class SpectralInformation(object):
|
|||||||
chromatic_dispersion=append(self.chromatic_dispersion,
|
chromatic_dispersion=append(self.chromatic_dispersion,
|
||||||
other.chromatic_dispersion),
|
other.chromatic_dispersion),
|
||||||
pmd=append(self.pmd, other.pmd),
|
pmd=append(self.pmd, other.pmd),
|
||||||
pdl=append(self.pdl, other.pdl))
|
pdl=append(self.pdl, other.pdl),
|
||||||
|
delta_pdb_per_channel=append(self.delta_pdb_per_channel,
|
||||||
|
other.delta_pdb_per_channel),
|
||||||
|
tx_osnr=append(self.tx_osnr, other.tx_osnr),
|
||||||
|
ref_power=Pref(self.pref.p_span0, self.pref.p_spani, self.pref.ref_carrier),
|
||||||
|
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.')
|
||||||
|
|
||||||
|
|
||||||
def _replace(self, carriers, pref):
|
def _replace(self, carriers, pref):
|
||||||
self.chromatic_dispersion = array([c.chromatic_dispersion for c in carriers])
|
self.chromatic_dispersion = array([c.chromatic_dispersion for c in carriers])
|
||||||
self.pmd = array([c.pmd for c in carriers])
|
self.pmd = array([c.pmd for c in carriers])
|
||||||
@@ -221,14 +259,18 @@ class SpectralInformation(object):
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
|
|
||||||
def create_arbitrary_spectral_information(frequency: Union[ndarray, Iterable, int, float],
|
def create_arbitrary_spectral_information(frequency: Union[ndarray, Iterable, float],
|
||||||
signal: Union[int, float, ndarray, Iterable],
|
signal: Union[float, ndarray, Iterable],
|
||||||
baud_rate: Union[int, float, ndarray, Iterable],
|
baud_rate: Union[float, ndarray, Iterable],
|
||||||
slot_width: Union[int, float, ndarray, Iterable] = None,
|
tx_osnr: Union[float, ndarray, Iterable],
|
||||||
roll_off: Union[int, float, ndarray, Iterable] = 0.,
|
delta_pdb_per_channel: Union[float, ndarray, Iterable] = 0.,
|
||||||
chromatic_dispersion: Union[int, float, ndarray, Iterable] = 0.,
|
slot_width: Union[float, ndarray, Iterable] = None,
|
||||||
pmd: Union[int, float, ndarray, Iterable] = 0.,
|
roll_off: Union[float, ndarray, Iterable] = 0.,
|
||||||
pdl: Union[int, float, ndarray, Iterable] = 0.):
|
chromatic_dispersion: Union[float, ndarray, Iterable] = 0.,
|
||||||
|
pmd: Union[float, ndarray, Iterable] = 0.,
|
||||||
|
pdl: Union[float, ndarray, Iterable] = 0.,
|
||||||
|
ref_power: Pref = None,
|
||||||
|
label: Union[str, ndarray, Iterable] = None):
|
||||||
"""This is just a wrapper around the SpectralInformation.__init__() that simplifies the creation of
|
"""This is just a wrapper around the SpectralInformation.__init__() that simplifies the creation of
|
||||||
a non-uniform spectral information with NLI and ASE powers set to zero."""
|
a non-uniform spectral information with NLI and ASE powers set to zero."""
|
||||||
frequency = asarray(frequency)
|
frequency = asarray(frequency)
|
||||||
@@ -244,11 +286,17 @@ def create_arbitrary_spectral_information(frequency: Union[ndarray, Iterable, in
|
|||||||
pdl = full(number_of_channels, pdl)
|
pdl = full(number_of_channels, pdl)
|
||||||
nli = zeros(number_of_channels)
|
nli = zeros(number_of_channels)
|
||||||
ase = zeros(number_of_channels)
|
ase = zeros(number_of_channels)
|
||||||
|
delta_pdb_per_channel = full(number_of_channels, delta_pdb_per_channel)
|
||||||
|
tx_osnr = full(number_of_channels, tx_osnr)
|
||||||
|
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,
|
||||||
baud_rate=baud_rate, roll_off=roll_off,
|
baud_rate=baud_rate, roll_off=roll_off,
|
||||||
chromatic_dispersion=chromatic_dispersion,
|
chromatic_dispersion=chromatic_dispersion,
|
||||||
pmd=pmd, pdl=pdl)
|
pmd=pmd, pdl=pdl,
|
||||||
|
delta_pdb_per_channel=delta_pdb_per_channel,
|
||||||
|
tx_osnr=tx_osnr,
|
||||||
|
ref_power=ref_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.')
|
||||||
@@ -256,9 +304,82 @@ def create_arbitrary_spectral_information(frequency: Union[ndarray, Iterable, in
|
|||||||
raise
|
raise
|
||||||
|
|
||||||
|
|
||||||
def create_input_spectral_information(f_min, f_max, roll_off, baud_rate, power, spacing):
|
def create_input_spectral_information(f_min, f_max, roll_off, baud_rate, power, spacing, tx_osnr, ref_carrier=None):
|
||||||
""" Creates a fixed slot width spectral information with flat power """
|
""" Creates a fixed slot width spectral information with flat power.
|
||||||
nb_channel = automatic_nch(f_min, f_max, spacing)
|
all arguments are scalar values"""
|
||||||
frequency = [(f_min + spacing * i) for i in range(1, nb_channel + 1)]
|
number_of_channels = automatic_nch(f_min, f_max, spacing)
|
||||||
|
frequency = [(f_min + spacing * i) for i in range(1, number_of_channels + 1)]
|
||||||
|
p_span0 = watt2dbm(power)
|
||||||
|
p_spani = watt2dbm(power)
|
||||||
|
delta_pdb_per_channel = zeros(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=power, baud_rate=baud_rate,
|
||||||
roll_off=roll_off)
|
roll_off=roll_off, delta_pdb_per_channel=delta_pdb_per_channel,
|
||||||
|
tx_osnr=tx_osnr,
|
||||||
|
ref_power=Pref(p_span0=p_span0, p_spani=p_spani,
|
||||||
|
ref_carrier=ref_carrier),
|
||||||
|
label=label)
|
||||||
|
|
||||||
|
|
||||||
|
def carriers_to_spectral_information(initial_spectrum: dict[float, Carrier], power: float,
|
||||||
|
ref_carrier: ReferenceCarrier) -> SpectralInformation:
|
||||||
|
"""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,
|
||||||
|
tx_osnr and roll off.
|
||||||
|
:param power: power of the request
|
||||||
|
:param ref_carrier: reference carrier (baudrate) used for the reference channel
|
||||||
|
"""
|
||||||
|
frequency = list(initial_spectrum.keys())
|
||||||
|
signal = [power * db2lin(c.delta_pdb) 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()]
|
||||||
|
delta_pdb_per_channel = [c.delta_pdb 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()]
|
||||||
|
label = [c.label for c in initial_spectrum.values()]
|
||||||
|
p_span0 = watt2dbm(power)
|
||||||
|
p_spani = watt2dbm(power)
|
||||||
|
return create_arbitrary_spectral_information(frequency=frequency, signal=signal, baud_rate=baud_rate,
|
||||||
|
slot_width=slot_width, roll_off=roll_off,
|
||||||
|
delta_pdb_per_channel=delta_pdb_per_channel, tx_osnr=tx_osnr,
|
||||||
|
ref_power=Pref(p_span0=p_span0, p_spani=p_spani,
|
||||||
|
ref_carrier=ref_carrier),
|
||||||
|
label=label)
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Carrier:
|
||||||
|
"""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
|
||||||
|
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.
|
||||||
|
"""
|
||||||
|
delta_pdb: float
|
||||||
|
baud_rate: float
|
||||||
|
slot_width: float
|
||||||
|
roll_off: float
|
||||||
|
tx_osnr: float
|
||||||
|
label: str
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class ReferenceCarrier:
|
||||||
|
"""Reference channel type is used to determine target power out of ROADM for the reference channel when
|
||||||
|
constant power spectral density (PSD) equalization is set. Reference channel is the type that has been defined
|
||||||
|
in SI block and used for the initial design of the network.
|
||||||
|
Computing the power out of ROADM for the reference channel is required to correctly compute the loss
|
||||||
|
experienced by p_span_i in Roadm element.
|
||||||
|
|
||||||
|
Baud rate is required to find the target power in constant PSD: power = PSD_target * baud_rate.
|
||||||
|
For example, if target PSD is 3.125e4mW/GHz and reference carrier type a 32 GBaud channel then
|
||||||
|
output power should be -20 dBm and for a 64 GBaud channel power target would need 3 dB more: -17 dBm.
|
||||||
|
|
||||||
|
Slot width is required to find the target power in constant PSW (constant power per slot width equalization):
|
||||||
|
power = PSW_target * slot_width.
|
||||||
|
For example, if target PSW is 2e4mW/GHz and reference carrier type a 32 GBaud channel in a 50GHz slot width then
|
||||||
|
output power should be -20 dBm and for a 64 GBaud channel in a 75 GHz slot width, power target would be -18.24 dBm.
|
||||||
|
|
||||||
|
Other attributes (like slot_width or roll-off) may be added there for future equalization purpose.
|
||||||
|
"""
|
||||||
|
baud_rate: float
|
||||||
|
slot_width: float
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ from operator import attrgetter
|
|||||||
from gnpy.core import ansi_escapes, elements
|
from gnpy.core import ansi_escapes, elements
|
||||||
from gnpy.core.exceptions import ConfigurationError, NetworkTopologyError
|
from gnpy.core.exceptions import ConfigurationError, NetworkTopologyError
|
||||||
from gnpy.core.utils import round2float, convert_length
|
from gnpy.core.utils import round2float, convert_length
|
||||||
|
from gnpy.core.info import ReferenceCarrier
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
@@ -237,22 +238,20 @@ def set_egress_amplifier(network, this_node, equipment, pref_ch_db, pref_total_d
|
|||||||
""" this node can be a transceiver or a ROADM (same function called in both cases)
|
""" this node can be a transceiver or a ROADM (same function called in both cases)
|
||||||
"""
|
"""
|
||||||
power_mode = equipment['Span']['default'].power_mode
|
power_mode = equipment['Span']['default'].power_mode
|
||||||
|
ref_carrier = ReferenceCarrier(baud_rate=equipment['SI']['default'].baud_rate,
|
||||||
|
slot_width=equipment['SI']['default'].spacing)
|
||||||
next_oms = (n for n in network.successors(this_node) if not isinstance(n, elements.Transceiver))
|
next_oms = (n for n in network.successors(this_node) if not isinstance(n, elements.Transceiver))
|
||||||
this_node_degree = {k: v for k, v in this_node.per_degree_pch_out_db.items()} if hasattr(this_node, 'per_degree_pch_out_db') else {}
|
|
||||||
for oms in next_oms:
|
for oms in next_oms:
|
||||||
# go through all the OMS departing from the ROADM
|
# go through all the OMS departing from the ROADM
|
||||||
prev_node = this_node
|
prev_node = this_node
|
||||||
node = oms
|
node = oms
|
||||||
# if isinstance(next_node, elements.Fused): #support ROADM wo egress amp for metro applications
|
if isinstance(this_node, elements.Transceiver):
|
||||||
# node = find_last_node(next_node)
|
this_node_out_power = 0.0 # default value if this_node is a transceiver
|
||||||
# next_node = next(n for n in network.successors(node))
|
if isinstance(this_node, elements.Roadm):
|
||||||
# next_node = find_last_node(next_node)
|
# get target power out from ROADM for the reference carrier based on equalization settings
|
||||||
if node.uid not in this_node_degree:
|
this_node_out_power = this_node.get_per_degree_ref_power(degree=node.uid, ref_carrier=ref_carrier)
|
||||||
# if no target power is defined on this degree or no per degree target power is given use the global one
|
|
||||||
# if target_pch_out_db is not an attribute, then the element must be a transceiver
|
|
||||||
this_node_degree[node.uid] = getattr(this_node.params, 'target_pch_out_db', 0)
|
|
||||||
# use the target power on this degree
|
# use the target power on this degree
|
||||||
prev_dp = this_node_degree[node.uid] - pref_ch_db
|
prev_dp = this_node_out_power - pref_ch_db
|
||||||
dp = prev_dp
|
dp = prev_dp
|
||||||
prev_voa = 0
|
prev_voa = 0
|
||||||
voa = 0
|
voa = 0
|
||||||
@@ -331,10 +330,28 @@ def set_egress_amplifier(network, this_node, equipment, pref_ch_db, pref_total_d
|
|||||||
prev_voa = voa
|
prev_voa = voa
|
||||||
prev_node = node
|
prev_node = node
|
||||||
node = next_node
|
node = next_node
|
||||||
# print(f'{node.uid}')
|
|
||||||
|
|
||||||
if isinstance(this_node, elements.Roadm):
|
|
||||||
this_node.per_degree_pch_out_db = {k: v for k, v in this_node_degree.items()}
|
def set_roadm_per_degree_targets(roadm, network):
|
||||||
|
"""Set target powers/PSD on all degrees
|
||||||
|
This is needed to populate per_degree_pch_out_dbm or per_degree_pch_psd or per_degree_pch_psw dicts when
|
||||||
|
they are not initialized by users.
|
||||||
|
"""
|
||||||
|
next_oms = (n for n in network.successors(roadm) if not isinstance(n, elements.Transceiver))
|
||||||
|
|
||||||
|
for node in next_oms:
|
||||||
|
# go through all the OMS departing from the ROADM
|
||||||
|
if node.uid not in roadm.per_degree_pch_out_dbm and node.uid not in roadm.per_degree_pch_psd and \
|
||||||
|
node.uid not in roadm.per_degree_pch_psw:
|
||||||
|
# if no target power is defined on this degree or no per degree target power is given use the global one
|
||||||
|
if roadm.params.target_pch_out_db:
|
||||||
|
roadm.per_degree_pch_out_dbm[node.uid] = roadm.params.target_pch_out_db
|
||||||
|
elif roadm.params.target_psd_out_mWperGHz:
|
||||||
|
roadm.per_degree_pch_psd[node.uid] = roadm.params.target_psd_out_mWperGHz
|
||||||
|
elif roadm.params.target_out_mWperSlotWidth:
|
||||||
|
roadm.per_degree_pch_psw[node.uid] = roadm.params.target_out_mWperSlotWidth
|
||||||
|
else:
|
||||||
|
raise ConfigurationError(roadm.uid, 'needs an equalization target')
|
||||||
|
|
||||||
|
|
||||||
def add_roadm_booster(network, roadm):
|
def add_roadm_booster(network, roadm):
|
||||||
@@ -432,10 +449,10 @@ def calculate_new_length(fiber_length, bounds, target_length):
|
|||||||
return (length1, n_spans1)
|
return (length1, n_spans1)
|
||||||
elif (bounds.start <= length2 <= bounds.stop) and not(bounds.start <= length1 <= bounds.stop):
|
elif (bounds.start <= length2 <= bounds.stop) and not(bounds.start <= length1 <= bounds.stop):
|
||||||
return (length2, n_spans2)
|
return (length2, n_spans2)
|
||||||
elif target_length - length1 < length2 - target_length:
|
elif length2 - target_length <= target_length - length1 and length2 <= bounds.stop:
|
||||||
return (length1, n_spans1)
|
|
||||||
else:
|
|
||||||
return (length2, n_spans2)
|
return (length2, n_spans2)
|
||||||
|
else:
|
||||||
|
return (length1, n_spans1)
|
||||||
|
|
||||||
|
|
||||||
def split_fiber(network, fiber, bounds, target_length, equipment):
|
def split_fiber(network, fiber, bounds, target_length, equipment):
|
||||||
@@ -547,6 +564,7 @@ def build_network(network, equipment, pref_ch_db, pref_total_db, no_insert_edfas
|
|||||||
add_fiber_padding(network, fibers, default_span_data.padding)
|
add_fiber_padding(network, fibers, default_span_data.padding)
|
||||||
|
|
||||||
for roadm in roadms:
|
for roadm in roadms:
|
||||||
|
set_roadm_per_degree_targets(roadm, network)
|
||||||
set_egress_amplifier(network, roadm, equipment, pref_ch_db, pref_total_db)
|
set_egress_amplifier(network, roadm, equipment, pref_ch_db, pref_total_db)
|
||||||
|
|
||||||
trx = [t for t in network.nodes() if isinstance(t, elements.Transceiver)]
|
trx = [t for t in network.nodes() if isinstance(t, elements.Transceiver)]
|
||||||
|
|||||||
@@ -88,13 +88,22 @@ class SimParams(Parameters):
|
|||||||
|
|
||||||
class RoadmParams(Parameters):
|
class RoadmParams(Parameters):
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
|
self.target_pch_out_db = kwargs.get('target_pch_out_db')
|
||||||
|
self.target_psd_out_mWperGHz = kwargs.get('target_psd_out_mWperGHz')
|
||||||
|
self.target_out_mWperSlotWidth = kwargs.get('target_out_mWperSlotWidth')
|
||||||
|
equalisation_type = ['target_pch_out_db', 'target_psd_out_mWperGHz', 'target_out_mWperSlotWidth']
|
||||||
|
temp = [kwargs.get(k) is not None for k in equalisation_type]
|
||||||
|
if sum(temp) > 1:
|
||||||
|
raise ParametersError('ROADM config contains more than one equalisation type.'
|
||||||
|
+ 'Please choose only one', kwargs)
|
||||||
|
self.per_degree_pch_out_db = kwargs.get('per_degree_pch_out_db', {})
|
||||||
|
self.per_degree_pch_psd = kwargs.get('per_degree_psd_out_mWperGHz', {})
|
||||||
|
self.per_degree_pch_psw = kwargs.get('per_degree_psd_out_mWperSlotWidth', {})
|
||||||
try:
|
try:
|
||||||
self.target_pch_out_db = kwargs['target_pch_out_db']
|
|
||||||
self.add_drop_osnr = kwargs['add_drop_osnr']
|
self.add_drop_osnr = kwargs['add_drop_osnr']
|
||||||
self.pmd = kwargs['pmd']
|
self.pmd = kwargs['pmd']
|
||||||
self.pdl = kwargs['pdl']
|
self.pdl = kwargs['pdl']
|
||||||
self.restrictions = kwargs['restrictions']
|
self.restrictions = kwargs['restrictions']
|
||||||
self.per_degree_pch_out_db = kwargs['per_degree_pch_out_db'] if 'per_degree_pch_out_db' in kwargs else {}
|
|
||||||
except KeyError as e:
|
except KeyError as e:
|
||||||
raise ParametersError(f'ROADM configurations must include {e}. Configuration: {kwargs}')
|
raise ParametersError(f'ROADM configurations must include {e}. Configuration: {kwargs}')
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ Solver definitions to calculate the Raman effect and the nonlinear interference
|
|||||||
The solvers take as input instances of the spectral information, the fiber and the simulation parameters
|
The solvers take as input instances of the spectral information, the fiber and the simulation parameters
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from numpy import interp, pi, zeros, shape, where, cos, array, append, ones, exp, arange, sqrt, empty, trapz, arcsinh, \
|
from numpy import interp, pi, zeros, shape, where, cos, array, append, ones, exp, arange, sqrt, trapz, arcsinh, \
|
||||||
clip, abs, sum, concatenate, flip, outer, inner, transpose, max, format_float_scientific, diag, prod, argwhere, \
|
clip, abs, sum, concatenate, flip, outer, inner, transpose, max, format_float_scientific, diag, prod, argwhere, \
|
||||||
unique, argsort, cumprod
|
unique, argsort, cumprod
|
||||||
from logging import getLogger
|
from logging import getLogger
|
||||||
@@ -131,20 +131,20 @@ class RamanSolver:
|
|||||||
cnt_frequency = array([pump.frequency for pump in fiber.raman_pumps
|
cnt_frequency = array([pump.frequency for pump in fiber.raman_pumps
|
||||||
if pump.propagation_direction == 'counterprop'])
|
if pump.propagation_direction == 'counterprop'])
|
||||||
# Co-propagating profile initialization
|
# Co-propagating profile initialization
|
||||||
co_power_profile = empty([co_frequency.size, z.size])
|
co_power_profile = zeros([co_frequency.size, z.size])
|
||||||
if co_frequency.size:
|
if co_frequency.size:
|
||||||
co_cr = fiber.cr(co_frequency)
|
co_cr = fiber.cr(co_frequency)
|
||||||
co_alpha = fiber.alpha(co_frequency)
|
co_alpha = fiber.alpha(co_frequency)
|
||||||
co_power_profile = \
|
co_power_profile = \
|
||||||
RamanSolver.first_order_derivative_solution(co_power, co_alpha, co_cr, z, lumped_losses)
|
RamanSolver.first_order_derivative_solution(co_power, co_alpha, co_cr, z, lumped_losses)
|
||||||
# Counter-propagating profile initialization
|
# Counter-propagating profile initialization
|
||||||
cnt_power_profile = empty([co_frequency.size, z.size])
|
cnt_power_profile = zeros([cnt_frequency.size, z.size])
|
||||||
if cnt_frequency.size:
|
if cnt_frequency.size:
|
||||||
cnt_cr = fiber.cr(cnt_frequency)
|
cnt_cr = fiber.cr(cnt_frequency)
|
||||||
cnt_alpha = fiber.alpha(cnt_frequency)
|
cnt_alpha = fiber.alpha(cnt_frequency)
|
||||||
cnt_power_profile = \
|
cnt_power_profile = \
|
||||||
flip(RamanSolver.first_order_derivative_solution(cnt_power, cnt_alpha, cnt_cr,
|
flip(RamanSolver.first_order_derivative_solution(cnt_power, cnt_alpha, cnt_cr,
|
||||||
z[-1] - flip(z), flip(lumped_losses)))
|
z[-1] - flip(z), flip(lumped_losses)), axis=1)
|
||||||
# Co-propagating and Counter-propagating Profile Computation
|
# Co-propagating and Counter-propagating Profile Computation
|
||||||
if co_frequency.size and cnt_frequency.size:
|
if co_frequency.size and cnt_frequency.size:
|
||||||
co_power_profile, cnt_power_profile = \
|
co_power_profile, cnt_power_profile = \
|
||||||
|
|||||||
@@ -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
|
from numpy import pi, cos, sqrt, log10, linspace, zeros, shape, where, logical_and, mean
|
||||||
from scipy import constants
|
from scipy import constants
|
||||||
|
|
||||||
from gnpy.core.exceptions import ConfigurationError
|
from gnpy.core.exceptions import ConfigurationError
|
||||||
@@ -106,6 +106,69 @@ def db2lin(value):
|
|||||||
return 10**(value / 10)
|
return 10**(value / 10)
|
||||||
|
|
||||||
|
|
||||||
|
def watt2dbm(value):
|
||||||
|
"""Convert Watt units to dBm
|
||||||
|
|
||||||
|
>>> round(watt2dbm(0.001), 1)
|
||||||
|
0.0
|
||||||
|
>>> round(watt2dbm(0.02), 1)
|
||||||
|
13.0
|
||||||
|
"""
|
||||||
|
return lin2db(value * 1e3)
|
||||||
|
|
||||||
|
|
||||||
|
def dbm2watt(value):
|
||||||
|
"""Convert dBm units to Watt
|
||||||
|
|
||||||
|
>>> round(dbm2watt(0), 4)
|
||||||
|
0.001
|
||||||
|
>>> round(dbm2watt(-3), 4)
|
||||||
|
0.0005
|
||||||
|
>>> round(dbm2watt(13), 4)
|
||||||
|
0.02
|
||||||
|
"""
|
||||||
|
return db2lin(value) * 1e-3
|
||||||
|
|
||||||
|
|
||||||
|
def psd2powerdbm(psd_mwperghz, baudrate_baud):
|
||||||
|
"""computes power in dBm based on baudrate in bauds and psd in mW/GHz
|
||||||
|
|
||||||
|
>>> round(psd2powerdbm(0.031176, 64e9),3)
|
||||||
|
3.0
|
||||||
|
>>> round(psd2powerdbm(0.062352, 32e9),3)
|
||||||
|
3.0
|
||||||
|
>>> round(psd2powerdbm(0.015625, 64e9),3)
|
||||||
|
0.0
|
||||||
|
"""
|
||||||
|
return lin2db(baudrate_baud * psd_mwperghz * 1e-9)
|
||||||
|
|
||||||
|
|
||||||
|
def power_dbm_to_psd_mw_ghz(power_dbm, baudrate_baud):
|
||||||
|
"""computes power spectral density in mW/GHz based on baudrate in bauds and power in dBm
|
||||||
|
|
||||||
|
>>> power_dbm_to_psd_mw_ghz(0, 64e9)
|
||||||
|
0.015625
|
||||||
|
>>> round(power_dbm_to_psd_mw_ghz(3, 64e9), 6)
|
||||||
|
0.031176
|
||||||
|
>>> round(power_dbm_to_psd_mw_ghz(3, 32e9), 6)
|
||||||
|
0.062352
|
||||||
|
"""
|
||||||
|
return db2lin(power_dbm) / (baudrate_baud * 1e-9)
|
||||||
|
|
||||||
|
|
||||||
|
def psd_mw_per_ghz(power_watt, baudrate_baud):
|
||||||
|
"""computes power spectral density in mW/GHz based on baudrate in bauds and power in W
|
||||||
|
|
||||||
|
>>> psd_mw_per_ghz(2e-3, 32e9)
|
||||||
|
0.0625
|
||||||
|
>>> psd_mw_per_ghz(1e-3, 64e9)
|
||||||
|
0.015625
|
||||||
|
>>> psd_mw_per_ghz(0.5e-3, 32e9)
|
||||||
|
0.015625
|
||||||
|
"""
|
||||||
|
return power_watt * 1e3 / (baudrate_baud * 1e-9)
|
||||||
|
|
||||||
|
|
||||||
def round2float(number, step):
|
def round2float(number, step):
|
||||||
"""Round a floating point number so that its "resolution" is not bigger than 'step'
|
"""Round a floating point number so that its "resolution" is not bigger than 'step'
|
||||||
|
|
||||||
@@ -166,6 +229,32 @@ def snr_sum(snr, bw, snr_added, bw_added=12.5e9):
|
|||||||
return snr
|
return snr
|
||||||
|
|
||||||
|
|
||||||
|
def per_label_average(values, labels):
|
||||||
|
"""computes the average per defined spectrum band, using labels
|
||||||
|
|
||||||
|
>>> labels = ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'C', 'D', 'D', 'D', 'D']
|
||||||
|
>>> values = [28.51, 28.23, 28.15, 28.17, 28.36, 28.53, 28.64, 28.68, 28.7, 28.71, 28.72, 28.73, 28.74, 28.91, 27.96, 27.85, 27.87, 28.02]
|
||||||
|
>>> per_label_average(values, labels)
|
||||||
|
{'A': 28.28, 'B': 28.68, 'C': 28.91, 'D': 27.92}
|
||||||
|
"""
|
||||||
|
|
||||||
|
label_set = sorted(set(labels))
|
||||||
|
summary = {}
|
||||||
|
for label in label_set:
|
||||||
|
vals = [val for val, lab in zip(values, labels) if lab == label]
|
||||||
|
summary[label] = round(mean(vals), 2)
|
||||||
|
return summary
|
||||||
|
|
||||||
|
|
||||||
|
def pretty_summary_print(summary):
|
||||||
|
"""Build a prettty string that shows the summary dict values per label with 2 digits
|
||||||
|
"""
|
||||||
|
if len(summary) == 1:
|
||||||
|
return f'{list(summary.values())[0]:.2f}'
|
||||||
|
text = ', '.join([f'{label}: {value:.2f}' for label, value in summary.items()])
|
||||||
|
return text
|
||||||
|
|
||||||
|
|
||||||
def deltawl2deltaf(delta_wl, wavelength):
|
def deltawl2deltaf(delta_wl, wavelength):
|
||||||
""" deltawl2deltaf(delta_wl, wavelength):
|
""" deltawl2deltaf(delta_wl, wavelength):
|
||||||
delta_wl is BW in wavelength units
|
delta_wl is BW in wavelength units
|
||||||
|
|||||||
12
gnpy/example-data/initial_spectrum1.json
Normal file
12
gnpy/example-data/initial_spectrum1.json
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"spectrum":[
|
||||||
|
{
|
||||||
|
"f_min": 191.35e12,
|
||||||
|
"f_max": 195.1e12,
|
||||||
|
"baud_rate": 32e9,
|
||||||
|
"slot_width": 50e9,
|
||||||
|
"roll_off": 0.15,
|
||||||
|
"tx_osnr": 40
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
23
gnpy/example-data/initial_spectrum2.json
Normal file
23
gnpy/example-data/initial_spectrum2.json
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"spectrum":[
|
||||||
|
{
|
||||||
|
"f_min": 191.4e12,
|
||||||
|
"f_max":193.1e12,
|
||||||
|
"baud_rate": 32e9,
|
||||||
|
"slot_width": 50e9,
|
||||||
|
"delta_pdb": 0,
|
||||||
|
"roll_off": 0.15,
|
||||||
|
"tx_osnr": 40,
|
||||||
|
"label": "mode_1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"f_min": 193.1625e12,
|
||||||
|
"f_max":195e12,
|
||||||
|
"baud_rate": 64e9,
|
||||||
|
"slot_width": 75e9,
|
||||||
|
"roll_off": 0.15,
|
||||||
|
"tx_osnr": 40,
|
||||||
|
"label": "mode_2"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -14,6 +14,7 @@ import sys
|
|||||||
from math import ceil
|
from math import ceil
|
||||||
from numpy import linspace, mean
|
from numpy import linspace, mean
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
import gnpy.core.ansi_escapes as ansi_escapes
|
import gnpy.core.ansi_escapes as ansi_escapes
|
||||||
from gnpy.core.elements import Transceiver, Fiber, RamanFiber
|
from gnpy.core.elements import Transceiver, Fiber, RamanFiber
|
||||||
from gnpy.core.equipment import trx_mode_params
|
from gnpy.core.equipment import trx_mode_params
|
||||||
@@ -26,8 +27,8 @@ from gnpy.topology.request import (ResultElement, jsontocsv, compute_path_dsjctn
|
|||||||
deduplicate_disjunctions, compute_path_with_disjunction,
|
deduplicate_disjunctions, compute_path_with_disjunction,
|
||||||
PathRequest, compute_constrained_path, propagate)
|
PathRequest, compute_constrained_path, propagate)
|
||||||
from gnpy.topology.spectrum_assignment import build_oms_list, pth_assign_spectrum
|
from gnpy.topology.spectrum_assignment import build_oms_list, pth_assign_spectrum
|
||||||
from gnpy.tools.json_io import load_equipment, load_network, load_json, load_requests, save_network, \
|
from gnpy.tools.json_io import (load_equipment, load_network, load_json, load_requests, save_network,
|
||||||
requests_from_json, disjunctions_from_json, save_json
|
requests_from_json, disjunctions_from_json, save_json, load_initial_spectrum)
|
||||||
from gnpy.tools.plots import plot_baseline, plot_results
|
from gnpy.tools.plots import plot_baseline, plot_results
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
@@ -118,6 +119,7 @@ def transmission_main_example(args=None):
|
|||||||
parser.add_argument('-pl', '--plot', action='store_true')
|
parser.add_argument('-pl', '--plot', action='store_true')
|
||||||
parser.add_argument('-l', '--list-nodes', action='store_true', help='list all transceiver nodes')
|
parser.add_argument('-l', '--list-nodes', action='store_true', help='list all transceiver nodes')
|
||||||
parser.add_argument('-po', '--power', default=0, help='channel ref power in dBm')
|
parser.add_argument('-po', '--power', default=0, help='channel ref power in dBm')
|
||||||
|
parser.add_argument('--spectrum', type=Path, help='user defined mixed rate spectrum JSON file')
|
||||||
parser.add_argument('source', nargs='?', help='source node')
|
parser.add_argument('source', nargs='?', help='source node')
|
||||||
parser.add_argument('destination', nargs='?', help='destination node')
|
parser.add_argument('destination', nargs='?', help='destination node')
|
||||||
|
|
||||||
@@ -194,12 +196,21 @@ def transmission_main_example(args=None):
|
|||||||
if args.power:
|
if args.power:
|
||||||
trx_params['power'] = db2lin(float(args.power)) * 1e-3
|
trx_params['power'] = db2lin(float(args.power)) * 1e-3
|
||||||
params.update(trx_params)
|
params.update(trx_params)
|
||||||
|
initial_spectrum = None
|
||||||
|
nb_channels = automatic_nch(trx_params['f_min'], trx_params['f_max'], trx_params['spacing'])
|
||||||
|
if args.spectrum:
|
||||||
|
initial_spectrum = load_initial_spectrum(args.spectrum)
|
||||||
|
nb_channels = len(initial_spectrum)
|
||||||
|
print('User input for spectrum used for propagation instead of SI')
|
||||||
|
params['nb_channel'] = nb_channels
|
||||||
req = PathRequest(**params)
|
req = PathRequest(**params)
|
||||||
|
req.initial_spectrum = initial_spectrum
|
||||||
|
print(f'There are {nb_channels} channels propagating')
|
||||||
power_mode = equipment['Span']['default'].power_mode
|
power_mode = equipment['Span']['default'].power_mode
|
||||||
print('\n'.join([f'Power mode is set to {power_mode}',
|
print('\n'.join([f'Power mode is set to {power_mode}',
|
||||||
f'=> it can be modified in eqpt_config.json - Span']))
|
f'=> it can be modified in eqpt_config.json - Span']))
|
||||||
|
|
||||||
|
# Keep the reference channel for design: the one from SI, with full load same channels
|
||||||
pref_ch_db = lin2db(req.power * 1e3) # reference channel power / span (SL=20dB)
|
pref_ch_db = lin2db(req.power * 1e3) # reference channel power / span (SL=20dB)
|
||||||
pref_total_db = pref_ch_db + lin2db(req.nb_channel) # reference total power / span (SL=20dB)
|
pref_total_db = pref_ch_db + lin2db(req.nb_channel) # reference total power / span (SL=20dB)
|
||||||
try:
|
try:
|
||||||
@@ -226,9 +237,13 @@ def transmission_main_example(args=None):
|
|||||||
power_range = list(linspace(p_start, p_stop, p_num))
|
power_range = list(linspace(p_start, p_stop, p_num))
|
||||||
except TypeError:
|
except TypeError:
|
||||||
print('invalid power range definition in eqpt_config, should be power_range_db: [lower, upper, step]')
|
print('invalid power range definition in eqpt_config, should be power_range_db: [lower, upper, step]')
|
||||||
|
|
||||||
for dp_db in power_range:
|
for dp_db in power_range:
|
||||||
req.power = db2lin(pref_ch_db + dp_db) * 1e-3
|
req.power = db2lin(pref_ch_db + dp_db) * 1e-3
|
||||||
|
# if initial spectrum did not contain any power, now we need to use this one.
|
||||||
|
# note the initial power defines a differential wrt req.power so that if req.power is set to 2mW (3dBm)
|
||||||
|
# and initial spectrum was set to 0, this sets a initial per channel delta power to -3dB, so that
|
||||||
|
# whatever the equalization, -3 dB is applied on all channels (ie initial power in initial spectrum pre-empts
|
||||||
|
# "--power" option)
|
||||||
if power_mode:
|
if power_mode:
|
||||||
print(f'\nPropagating with input power = {ansi_escapes.cyan}{lin2db(req.power*1e3):.2f} dBm{ansi_escapes.reset}:')
|
print(f'\nPropagating with input power = {ansi_escapes.cyan}{lin2db(req.power*1e3):.2f} dBm{ansi_escapes.reset}:')
|
||||||
else:
|
else:
|
||||||
@@ -264,9 +279,9 @@ def transmission_main_example(args=None):
|
|||||||
ch_freq = final_carrier.frequency * 1e-12
|
ch_freq = final_carrier.frequency * 1e-12
|
||||||
ch_power = lin2db(final_carrier.power.signal * 1e3)
|
ch_power = lin2db(final_carrier.power.signal * 1e3)
|
||||||
print(
|
print(
|
||||||
'{:5}{:26.2f}{:26.2f}{:28.2f}{:28.2f}{:28.2f}' .format(
|
'{:5}{:26.5f}{:26.2f}{:28.2f}{:28.2f}{:28.2f}' .format(
|
||||||
final_carrier.channel_number, round(
|
final_carrier.channel_number, round(
|
||||||
ch_freq, 2), round(
|
ch_freq, 5), round(
|
||||||
ch_power, 2), round(
|
ch_power, 2), round(
|
||||||
ch_osnr, 2), round(
|
ch_osnr, 2), round(
|
||||||
ch_snr_nl, 2), round(
|
ch_snr_nl, 2), round(
|
||||||
|
|||||||
@@ -13,10 +13,13 @@ from logging import getLogger
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import json
|
import json
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
from numpy import arange
|
||||||
|
|
||||||
from gnpy.core import ansi_escapes, elements
|
from gnpy.core import ansi_escapes, elements
|
||||||
from gnpy.core.equipment import trx_mode_params
|
from gnpy.core.equipment import trx_mode_params
|
||||||
from gnpy.core.exceptions import ConfigurationError, EquipmentConfigError, NetworkTopologyError, ServiceError
|
from gnpy.core.exceptions import ConfigurationError, EquipmentConfigError, NetworkTopologyError, ServiceError
|
||||||
from gnpy.core.science_utils import estimate_nf_model
|
from gnpy.core.science_utils import estimate_nf_model
|
||||||
|
from gnpy.core.info import Carrier
|
||||||
from gnpy.core.utils import automatic_nch, automatic_fmax, merge_amplifier_restrictions
|
from gnpy.core.utils import automatic_nch, automatic_fmax, merge_amplifier_restrictions
|
||||||
from gnpy.topology.request import PathRequest, Disjunction, compute_spectrum_slot_vs_bandwidth
|
from gnpy.topology.request import PathRequest, Disjunction, compute_spectrum_slot_vs_bandwidth
|
||||||
from gnpy.tools.convert import xls_to_json_data
|
from gnpy.tools.convert import xls_to_json_data
|
||||||
@@ -91,7 +94,6 @@ class Span(_JsonThing):
|
|||||||
|
|
||||||
class Roadm(_JsonThing):
|
class Roadm(_JsonThing):
|
||||||
default_values = {
|
default_values = {
|
||||||
'target_pch_out_db': -17,
|
|
||||||
'add_drop_osnr': 100,
|
'add_drop_osnr': 100,
|
||||||
'pmd': 0,
|
'pmd': 0,
|
||||||
'pdl': 0,
|
'pdl': 0,
|
||||||
@@ -102,6 +104,20 @@ class Roadm(_JsonThing):
|
|||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
|
# If equalization is not defined in equipment, then raise an error.
|
||||||
|
# Only one type of equalization must be defined.
|
||||||
|
allowed_equalisations = ['target_pch_out_db', 'target_psd_out_mWperGHz', 'target_out_mWperSlotWidth']
|
||||||
|
requested_eq_mask = [eq in kwargs for eq in allowed_equalisations]
|
||||||
|
if sum(requested_eq_mask) > 1:
|
||||||
|
raise EquipmentConfigError('Only one equalization type should be set in ROADM, found: '
|
||||||
|
+ ', '.join(eq for eq in allowed_equalisations if eq in kwargs))
|
||||||
|
if not any(requested_eq_mask):
|
||||||
|
raise EquipmentConfigError('No equalization type set in ROADM')
|
||||||
|
|
||||||
|
for key in allowed_equalisations:
|
||||||
|
if key in kwargs:
|
||||||
|
setattr(self, key, kwargs[key])
|
||||||
|
break
|
||||||
self.update_attr(self.default_values, kwargs, 'Roadm')
|
self.update_attr(self.default_values, kwargs, 'Roadm')
|
||||||
|
|
||||||
|
|
||||||
@@ -249,11 +265,89 @@ def _automatic_spacing(baud_rate):
|
|||||||
return min((s[1] for s in spacing_list if s[0] > baud_rate), default=baud_rate * 1.2)
|
return min((s[1] for s in spacing_list if s[0] > baud_rate), default=baud_rate * 1.2)
|
||||||
|
|
||||||
|
|
||||||
|
def _spectrum_from_json(json_data):
|
||||||
|
"""JSON_data is a list of spectrum partitions each with
|
||||||
|
{f_min, f_max, baud_rate, roll_off, delta_pdb, slot_width, tx_osnr, label}
|
||||||
|
Creates the per freq Carrier's dict.
|
||||||
|
f_min, f_max, baud_rate, slot_width and roll_off are mandatory
|
||||||
|
label, tx_osnr and delta_pdb are created if not present
|
||||||
|
label should be different for each partition
|
||||||
|
>>> json_data = {'spectrum': \
|
||||||
|
[{'f_min': 193.2e12, 'f_max': 193.4e12, 'slot_width': 50e9, 'baud_rate': 32e9, 'roll_off': 0.15, \
|
||||||
|
'delta_pdb': 1, 'tx_osnr': 45},\
|
||||||
|
{'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.2e12, 'f_max': 194.35e12, 'slot_width': 50e9, 'baud_rate': 32e9, 'roll_off': 0.15}]}
|
||||||
|
>>> spectrum = _spectrum_from_json(json_data['spectrum'])
|
||||||
|
>>> for k, v in spectrum.items():
|
||||||
|
... 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')
|
||||||
|
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')
|
||||||
|
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')
|
||||||
|
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')
|
||||||
|
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')
|
||||||
|
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')
|
||||||
|
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')
|
||||||
|
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')
|
||||||
|
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')
|
||||||
|
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')
|
||||||
|
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')
|
||||||
|
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')
|
||||||
|
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')
|
||||||
|
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')
|
||||||
|
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')
|
||||||
|
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')
|
||||||
|
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')
|
||||||
|
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')
|
||||||
|
"""
|
||||||
|
spectrum = {}
|
||||||
|
json_data = sorted(json_data, key=lambda x: x['f_min'])
|
||||||
|
# min freq of occupation is f_min - slot_width/2 (numbering starts at 0)
|
||||||
|
previous_part_max_freq = 0.0
|
||||||
|
for index, part in enumerate(json_data):
|
||||||
|
# default delta_pdb is 0 dB
|
||||||
|
if 'delta_pdb' not in part:
|
||||||
|
part['delta_pdb'] = 0
|
||||||
|
# add a label to the partition for the printings
|
||||||
|
if 'label' not in part:
|
||||||
|
part['label'] = f'{index}-{part["baud_rate"] * 1e-9 :.2f}G'
|
||||||
|
# default tx_osnr is set to 40 dB
|
||||||
|
if 'tx_osnr' not in part:
|
||||||
|
part['tx_osnr'] = 40
|
||||||
|
# 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)
|
||||||
|
# supposes that carriers are centered on frequency
|
||||||
|
if previous_part_max_freq > (part['f_min'] - part['slot_width'] / 2):
|
||||||
|
# check that previous part last channel does not overlap on next part first channel
|
||||||
|
# max center of the part should be below part['f_max'] and aligned on the slot_width
|
||||||
|
msg = 'Not a valid initial spectrum definition:\nprevious spectrum last carrier max occupation ' +\
|
||||||
|
f'{previous_part_max_freq * 1e-12 :.5f}GHz ' +\
|
||||||
|
'overlaps on next spectrum first carrier occupation ' +\
|
||||||
|
f'{(part["f_min"] - part["slot_width"] / 2) * 1e-12 :.5f}GHz'
|
||||||
|
raise ValueError(msg)
|
||||||
|
|
||||||
|
max_range = ((part['f_max'] - part['f_min']) // part['slot_width'] + 1) * part['slot_width']
|
||||||
|
for current_freq in arange(part['f_min'],
|
||||||
|
part['f_min'] + max_range,
|
||||||
|
part['slot_width']):
|
||||||
|
spectrum[current_freq] = Carrier(delta_pdb=part['delta_pdb'], baud_rate=part['baud_rate'],
|
||||||
|
slot_width=part['slot_width'], roll_off=part['roll_off'],
|
||||||
|
tx_osnr=part['tx_osnr'], label=part['label'])
|
||||||
|
previous_part_max_freq = current_freq + part['slot_width'] / 2
|
||||||
|
return spectrum
|
||||||
|
|
||||||
|
|
||||||
def load_equipment(filename):
|
def load_equipment(filename):
|
||||||
json_data = load_json(filename)
|
json_data = load_json(filename)
|
||||||
return _equipment_from_json(json_data, filename)
|
return _equipment_from_json(json_data, filename)
|
||||||
|
|
||||||
|
|
||||||
|
def load_initial_spectrum(filename):
|
||||||
|
json_data = load_json(filename)
|
||||||
|
return _spectrum_from_json(json_data['spectrum'])
|
||||||
|
|
||||||
|
|
||||||
def _update_dual_stage(equipment):
|
def _update_dual_stage(equipment):
|
||||||
edfa_dict = equipment['Edfa']
|
edfa_dict = equipment['Edfa']
|
||||||
for edfa in edfa_dict.values():
|
for edfa in edfa_dict.values():
|
||||||
@@ -384,9 +478,16 @@ def network_from_json(json_data, equipment):
|
|||||||
# well, there's no variety for the 'Fused' node type
|
# well, there's no variety for the 'Fused' node type
|
||||||
pass
|
pass
|
||||||
elif variety in equipment[typ]:
|
elif variety in equipment[typ]:
|
||||||
extra_params = equipment[typ][variety]
|
extra_params = equipment[typ][variety].__dict__
|
||||||
temp = el_config.setdefault('params', {})
|
temp = el_config.setdefault('params', {})
|
||||||
temp = merge_amplifier_restrictions(temp, extra_params.__dict__)
|
if typ == 'Roadm':
|
||||||
|
# if equalization is defined, remove default equalization from the extra_params
|
||||||
|
# If equalisation is not defined in the element config, then use the default one from equipment
|
||||||
|
# if more than one equalization was defined in element config, then raise an error
|
||||||
|
extra_params = merge_equalization(temp, extra_params)
|
||||||
|
if not extra_params:
|
||||||
|
raise ConfigurationError(f'ROADM {el_config["uid"]}: invalid equalization settings')
|
||||||
|
temp = merge_amplifier_restrictions(temp, extra_params)
|
||||||
el_config['params'] = temp
|
el_config['params'] = temp
|
||||||
el_config['type_variety'] = variety
|
el_config['type_variety'] = variety
|
||||||
elif (typ in ['Fiber', 'RamanFiber']) or (typ == 'Edfa' and variety not in ['default', '']):
|
elif (typ in ['Fiber', 'RamanFiber']) or (typ == 'Edfa' and variety not in ['default', '']):
|
||||||
@@ -457,16 +558,16 @@ def requests_from_json(json_data, equipment):
|
|||||||
for req in json_data['path-request']:
|
for req in json_data['path-request']:
|
||||||
# init all params from request
|
# init all params from request
|
||||||
params = {}
|
params = {}
|
||||||
params['request_id'] = req['request-id']
|
params['request_id'] = f'{req["request-id"]}'
|
||||||
params['source'] = req['source']
|
params['source'] = req['source']
|
||||||
params['bidir'] = req['bidirectional']
|
params['bidir'] = req['bidirectional']
|
||||||
params['destination'] = req['destination']
|
params['destination'] = req['destination']
|
||||||
params['trx_type'] = req['path-constraints']['te-bandwidth']['trx_type']
|
params['trx_type'] = req['path-constraints']['te-bandwidth']['trx_type']
|
||||||
params['trx_mode'] = req['path-constraints']['te-bandwidth']['trx_mode']
|
params['trx_mode'] = req['path-constraints']['te-bandwidth'].get('trx_mode', None)
|
||||||
params['format'] = params['trx_mode']
|
params['format'] = params['trx_mode']
|
||||||
params['spacing'] = req['path-constraints']['te-bandwidth']['spacing']
|
params['spacing'] = req['path-constraints']['te-bandwidth']['spacing']
|
||||||
try:
|
try:
|
||||||
nd_list = req['explicit-route-objects']['route-object-include-exclude']
|
nd_list = sorted(req['explicit-route-objects']['route-object-include-exclude'], key=lambda x: x['index'])
|
||||||
except KeyError:
|
except KeyError:
|
||||||
nd_list = []
|
nd_list = []
|
||||||
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]
|
||||||
@@ -576,3 +677,42 @@ def convert_service_sheet(
|
|||||||
data = read_service_sheet(input_filename, eqpt, network, network_filename, bidir)
|
data = read_service_sheet(input_filename, eqpt, network, network_filename, bidir)
|
||||||
save_json(data, output_filename)
|
save_json(data, output_filename)
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
def find_equalisation(params, equalization_types):
|
||||||
|
"""Find the equalization(s) defined in params. params can be a dict or a Roadm object.
|
||||||
|
|
||||||
|
>>> roadm = {'add_drop_osnr': 100, 'pmd': 1, 'pdl': 0.5,
|
||||||
|
... 'restrictions': {'preamp_variety_list': ['a'], 'booster_variety_list': ['b']},
|
||||||
|
... 'target_psd_out_mWperGHz': 4e-4}
|
||||||
|
>>> equalization_types = ['target_pch_out_db', 'target_psd_out_mWperGHz']
|
||||||
|
>>> find_equalisation(roadm, equalization_types)
|
||||||
|
{'target_pch_out_db': False, 'target_psd_out_mWperGHz': True}
|
||||||
|
"""
|
||||||
|
equalization = {e: False for e in equalization_types}
|
||||||
|
for equ in equalization_types:
|
||||||
|
if equ in params:
|
||||||
|
equalization[equ] = True
|
||||||
|
return equalization
|
||||||
|
|
||||||
|
|
||||||
|
def merge_equalization(params, extra_params):
|
||||||
|
"""params contains ROADM element config and extra_params default values from equipment library.
|
||||||
|
If equalization is not defined in ROADM element use the one defined in equipment library.
|
||||||
|
Only one type of equalization must be defined: power (target_pch_out_db) or PSD (target_psd_out_mWperGHz)
|
||||||
|
or PSW (target_out_mWperSlotWidth)
|
||||||
|
params and extra_params are dict
|
||||||
|
"""
|
||||||
|
equalization_types = ['target_pch_out_db', 'target_psd_out_mWperGHz', 'target_out_mWperSlotWidth']
|
||||||
|
roadm_equalizations = find_equalisation(params, equalization_types)
|
||||||
|
if sum(roadm_equalizations.values()) > 1:
|
||||||
|
# if ROADM config contains more than one equalization type then this is an error
|
||||||
|
return None
|
||||||
|
if sum(roadm_equalizations.values()) == 1:
|
||||||
|
# if ROADM config contains one equalization
|
||||||
|
# don't use the default equalization
|
||||||
|
return {k: v for k, v in extra_params.items() if k not in equalization_types}
|
||||||
|
if sum(roadm_equalizations.values()) == 0:
|
||||||
|
# If ROADM config doesn't contain any equalization type, keep the default one
|
||||||
|
return extra_params
|
||||||
|
return None
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ from networkx.utils import pairwise
|
|||||||
from numpy import mean, argmin
|
from numpy import mean, argmin
|
||||||
from gnpy.core.elements import Transceiver, Roadm
|
from gnpy.core.elements import Transceiver, Roadm
|
||||||
from gnpy.core.utils import lin2db
|
from gnpy.core.utils import lin2db
|
||||||
from gnpy.core.info import create_input_spectral_information
|
from gnpy.core.info import create_input_spectral_information, carriers_to_spectral_information, ReferenceCarrier
|
||||||
from gnpy.core.exceptions import ServiceError, DisjunctionError
|
from gnpy.core.exceptions import ServiceError, DisjunctionError
|
||||||
import gnpy.core.ansi_escapes as ansi_escapes
|
import gnpy.core.ansi_escapes as ansi_escapes
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
@@ -72,6 +72,7 @@ class PathRequest:
|
|||||||
if params.effective_freq_slot is not None:
|
if params.effective_freq_slot is not None:
|
||||||
self.N = params.effective_freq_slot['N']
|
self.N = params.effective_freq_slot['N']
|
||||||
self.M = params.effective_freq_slot['M']
|
self.M = params.effective_freq_slot['M']
|
||||||
|
self.initial_spectrum = None
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return '\n\t'.join([f'{type(self).__name__} {self.request_id}',
|
return '\n\t'.join([f'{type(self).__name__} {self.request_id}',
|
||||||
@@ -339,21 +340,36 @@ def compute_constrained_path(network, req):
|
|||||||
return total_path
|
return total_path
|
||||||
|
|
||||||
|
|
||||||
|
def ref_carrier(equipment):
|
||||||
|
"""Create a reference carier based SI information with the specified request's power:
|
||||||
|
req_power records the power in W that the user has defined for a given request
|
||||||
|
(which might be different from the one used for the design).
|
||||||
|
"""
|
||||||
|
return ReferenceCarrier(baud_rate=equipment['SI']['default'].baud_rate,
|
||||||
|
slot_width=equipment['SI']['default'].spacing)
|
||||||
|
|
||||||
|
|
||||||
def propagate(path, req, equipment):
|
def propagate(path, req, equipment):
|
||||||
si = create_input_spectral_information(
|
""" propagates signals in each element according to initial spectrum set by user
|
||||||
req.f_min, req.f_max, req.roll_off, req.baud_rate,
|
"""
|
||||||
req.power, req.spacing)
|
if req.initial_spectrum is not None:
|
||||||
|
si = carriers_to_spectral_information(initial_spectrum=req.initial_spectrum,
|
||||||
|
power=req.power, ref_carrier=ref_carrier(equipment))
|
||||||
|
else:
|
||||||
|
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, spacing=req.spacing, tx_osnr=req.tx_osnr, ref_carrier=ref_carrier(equipment))
|
||||||
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)
|
si = el(si, degree=path[i+1].uid)
|
||||||
else:
|
else:
|
||||||
si = el(si)
|
si = el(si)
|
||||||
path[0].update_snr(req.tx_osnr)
|
path[0].update_snr(si.tx_osnr)
|
||||||
path[0].calc_penalties(req.penalties)
|
path[0].calc_penalties(req.penalties)
|
||||||
if any(isinstance(el, Roadm) for el in path):
|
if any(isinstance(el, Roadm) for el in path):
|
||||||
path[-1].update_snr(req.tx_osnr, equipment['Roadm']['default'].add_drop_osnr)
|
path[-1].update_snr(si.tx_osnr, equipment['Roadm']['default'].add_drop_osnr)
|
||||||
else:
|
else:
|
||||||
path[-1].update_snr(req.tx_osnr)
|
path[-1].update_snr(si.tx_osnr)
|
||||||
path[-1].calc_penalties(req.penalties)
|
path[-1].calc_penalties(req.penalties)
|
||||||
return si
|
return si
|
||||||
|
|
||||||
@@ -374,13 +390,18 @@ def propagate_and_optimize_mode(path, req, equipment):
|
|||||||
float(this_mode['min_spacing']) <= req.spacing]
|
float(this_mode['min_spacing']) <= req.spacing]
|
||||||
modes_to_explore = sorted(modes_to_explore,
|
modes_to_explore = sorted(modes_to_explore,
|
||||||
key=lambda x: x['bit_rate'], reverse=True)
|
key=lambda x: x['bit_rate'], reverse=True)
|
||||||
# print(modes_to_explore)
|
|
||||||
# step2: computes propagation for each baudrate: stop and select the first that passes
|
# step2: computes propagation for each baudrate: stop and select the first that passes
|
||||||
# TODO: the case of roll of is not included: for now use SI one
|
# TODO: the case of roll off is not included: for now use SI one
|
||||||
# TODO: if the loop in mode optimization does not have a feasible path, then bugs
|
# TODO: if the loop in mode optimization does not have a feasible path, then bugs
|
||||||
spc_info = create_input_spectral_information(req.f_min, req.f_max,
|
if req.initial_spectrum is not None:
|
||||||
equipment['SI']['default'].roll_off,
|
# this case is not yet handled: spectrum can not be defined for the path-request-run function
|
||||||
this_br, req.power, req.spacing)
|
# and this function is only called in this case. so coming here should not be considered yet.
|
||||||
|
msg = f'Request: {req.request_id} contains a unexpected initial_spectrum.'
|
||||||
|
raise ServiceError(msg)
|
||||||
|
spc_info = create_input_spectral_information(f_min=req.f_min, f_max=req.f_max,
|
||||||
|
roll_off=equipment['SI']['default'].roll_off,
|
||||||
|
baud_rate=this_br, power=req.power, spacing=req.spacing,
|
||||||
|
tx_osnr=req.tx_osnr, ref_carrier=ref_carrier(equipment))
|
||||||
for i, el in enumerate(path):
|
for i, el in enumerate(path):
|
||||||
if isinstance(el, Roadm):
|
if isinstance(el, Roadm):
|
||||||
spc_info = el(spc_info, degree=path[i+1].uid)
|
spc_info = el(spc_info, degree=path[i+1].uid)
|
||||||
@@ -1142,6 +1163,7 @@ def compute_path_with_disjunction(network, equipment, pathreqlist, pathlist):
|
|||||||
pathreq.OSNR = mode['OSNR']
|
pathreq.OSNR = mode['OSNR']
|
||||||
pathreq.tx_osnr = mode['tx_osnr']
|
pathreq.tx_osnr = mode['tx_osnr']
|
||||||
pathreq.bit_rate = mode['bit_rate']
|
pathreq.bit_rate = mode['bit_rate']
|
||||||
|
pathreq.penalties = mode['penalties']
|
||||||
# other blocking reason should not appear at this point
|
# other blocking reason should not appear at this point
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
pathreq.baud_rate = mode['baud_rate']
|
pathreq.baud_rate = mode['baud_rate']
|
||||||
@@ -1150,6 +1172,7 @@ def compute_path_with_disjunction(network, equipment, pathreqlist, pathlist):
|
|||||||
pathreq.OSNR = mode['OSNR']
|
pathreq.OSNR = mode['OSNR']
|
||||||
pathreq.tx_osnr = mode['tx_osnr']
|
pathreq.tx_osnr = mode['tx_osnr']
|
||||||
pathreq.bit_rate = mode['bit_rate']
|
pathreq.bit_rate = mode['bit_rate']
|
||||||
|
pathreq.penalties = mode['penalties']
|
||||||
|
|
||||||
# reversed path is needed for correct spectrum assignment
|
# reversed path is needed for correct spectrum assignment
|
||||||
reversed_path = find_reversed_path(pathlist[i])
|
reversed_path = find_reversed_path(pathlist[i])
|
||||||
|
|||||||
@@ -365,12 +365,6 @@ def spectrum_selection(pth, oms_list, requested_m, requested_n=None):
|
|||||||
candidate = (requested_n, requested_n - requested_m, requested_n + requested_m - 1)
|
candidate = (requested_n, requested_n - requested_m, requested_n + requested_m - 1)
|
||||||
else:
|
else:
|
||||||
candidate = (None, None, None)
|
candidate = (None, None, None)
|
||||||
# print("coucou11")
|
|
||||||
# print(candidate)
|
|
||||||
# print(freq_availability[321:321+2*m])
|
|
||||||
# a = [i+321 for i in range(2*m)]
|
|
||||||
# print(a)
|
|
||||||
# print(candidate)
|
|
||||||
return candidate, path_oms
|
return candidate, path_oms
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
matplotlib>=3.5.1,<4
|
matplotlib>=3.5.1,<4
|
||||||
networkx>=2.6,<3
|
networkx>=2.6,<3
|
||||||
numpy>=1.22.0,<2
|
numpy>=1.22.0,<2
|
||||||
pandas>=1.3.5,<2
|
|
||||||
pbr>=5.7.0,<6
|
pbr>=5.7.0,<6
|
||||||
scipy>=1.7.3,<2
|
scipy>=1.7.3,<2
|
||||||
xlrd>=1.2.0,<2
|
xlrd>=1.2.0,<2
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ name = gnpy
|
|||||||
description-file = README.md
|
description-file = README.md
|
||||||
description-content-type = text/markdown; variant=GFM
|
description-content-type = text/markdown; variant=GFM
|
||||||
author = Telecom Infra Project
|
author = Telecom Infra Project
|
||||||
author-email = jan.kundrat@telecominfraproject.com
|
author-email = jkt@jankundrat.com
|
||||||
license = BSD-3-Clause
|
license = BSD-3-Clause
|
||||||
home-page = https://github.com/Telecominfraproject/oopt-gnpy
|
home-page = https://github.com/Telecominfraproject/oopt-gnpy
|
||||||
project_urls =
|
project_urls =
|
||||||
@@ -22,6 +22,7 @@ classifier =
|
|||||||
Programming Language :: Python :: 3.8
|
Programming Language :: Python :: 3.8
|
||||||
Programming Language :: Python :: 3.9
|
Programming Language :: Python :: 3.9
|
||||||
Programming Language :: Python :: 3.10
|
Programming Language :: Python :: 3.10
|
||||||
|
Programming Language :: Python :: 3.11
|
||||||
Programming Language :: Python :: Implementation :: CPython
|
Programming Language :: Python :: Implementation :: CPython
|
||||||
Topic :: Scientific/Engineering
|
Topic :: Scientific/Engineering
|
||||||
Topic :: Scientific/Engineering :: Physics
|
Topic :: Scientific/Engineering :: Physics
|
||||||
|
|||||||
@@ -196,101 +196,101 @@
|
|||||||
0.0
|
0.0
|
||||||
],
|
],
|
||||||
"dgt": [
|
"dgt": [
|
||||||
2.714526681131686,
|
1.0,
|
||||||
2.705443819238505,
|
|
||||||
2.6947834587664494,
|
|
||||||
2.6841217449620203,
|
|
||||||
2.6681935771243177,
|
|
||||||
2.6521732021128046,
|
|
||||||
2.630396440815385,
|
|
||||||
2.602860350286428,
|
|
||||||
2.5696460593920065,
|
|
||||||
2.5364027376452056,
|
|
||||||
2.499446286796604,
|
|
||||||
2.4587748041127506,
|
|
||||||
2.414398437185221,
|
|
||||||
2.3699990328716107,
|
|
||||||
2.322373696229342,
|
|
||||||
2.271520771371253,
|
|
||||||
2.2174389328192197,
|
|
||||||
2.16337565384239,
|
|
||||||
2.1183028432496016,
|
|
||||||
2.082225099873648,
|
|
||||||
2.055100772005235,
|
|
||||||
2.0279625371819305,
|
|
||||||
2.0008103857988204,
|
|
||||||
1.9736443063300082,
|
|
||||||
1.9482128147680253,
|
|
||||||
1.9245345552113182,
|
|
||||||
1.9026104247588487,
|
|
||||||
1.8806927939516411,
|
|
||||||
1.862235672444246,
|
|
||||||
1.847275503201129,
|
|
||||||
1.835814081380705,
|
|
||||||
1.824381436842932,
|
|
||||||
1.8139629377087627,
|
|
||||||
1.8045606557581335,
|
|
||||||
1.7961751115773796,
|
|
||||||
1.7877868031023945,
|
|
||||||
1.7793941781790852,
|
|
||||||
1.7709972329654864,
|
|
||||||
1.7625959636196327,
|
|
||||||
1.7541903672600494,
|
|
||||||
1.7459181197626403,
|
|
||||||
1.737780757913635,
|
|
||||||
1.7297783508684146,
|
|
||||||
1.7217732861435076,
|
|
||||||
1.7137640932265894,
|
|
||||||
1.7057507692361864,
|
|
||||||
1.6918150918099673,
|
|
||||||
1.6719047669939942,
|
|
||||||
1.6460167077689267,
|
|
||||||
1.6201194134191075,
|
|
||||||
1.5986915141218316,
|
|
||||||
1.5817353179379183,
|
|
||||||
1.569199764184379,
|
|
||||||
1.5566577309558969,
|
|
||||||
1.545374152761467,
|
|
||||||
1.5353620432989845,
|
|
||||||
1.5266220576235803,
|
|
||||||
1.5178910621476225,
|
|
||||||
1.5097346239790443,
|
|
||||||
1.502153039909686,
|
|
||||||
1.495145456062699,
|
|
||||||
1.488134243479226,
|
|
||||||
1.48111939735681,
|
|
||||||
1.474100442252211,
|
|
||||||
1.4670307626366115,
|
|
||||||
1.4599103316162523,
|
|
||||||
1.45273959485914,
|
|
||||||
1.445565137158368,
|
|
||||||
1.4340878115214444,
|
|
||||||
1.418273806730323,
|
|
||||||
1.3981208704326855,
|
|
||||||
1.3779439775587023,
|
|
||||||
1.3598972673004606,
|
|
||||||
1.3439818461440451,
|
|
||||||
1.3301807335621048,
|
|
||||||
1.316383926863083,
|
|
||||||
1.3040618749785347,
|
|
||||||
1.2932153453410835,
|
|
||||||
1.2838336236692311,
|
|
||||||
1.2744470198196236,
|
|
||||||
1.2650555289898042,
|
|
||||||
1.2556591482982988,
|
|
||||||
1.2428104897182262,
|
|
||||||
1.2264996957264114,
|
|
||||||
1.2067249615595257,
|
|
||||||
1.1869318618366975,
|
|
||||||
1.1672278304018044,
|
|
||||||
1.1476135933863398,
|
|
||||||
1.1280891949729075,
|
|
||||||
1.108555289615659,
|
|
||||||
1.0895983485572227,
|
|
||||||
1.0712204022764056,
|
|
||||||
1.0534217504465226,
|
|
||||||
1.0356155337864215,
|
|
||||||
1.017807767853702,
|
1.017807767853702,
|
||||||
1.0
|
1.0356155337864215,
|
||||||
|
1.0534217504465226,
|
||||||
|
1.0712204022764056,
|
||||||
|
1.0895983485572227,
|
||||||
|
1.108555289615659,
|
||||||
|
1.1280891949729075,
|
||||||
|
1.1476135933863398,
|
||||||
|
1.1672278304018044,
|
||||||
|
1.1869318618366975,
|
||||||
|
1.2067249615595257,
|
||||||
|
1.2264996957264114,
|
||||||
|
1.2428104897182262,
|
||||||
|
1.2556591482982988,
|
||||||
|
1.2650555289898042,
|
||||||
|
1.2744470198196236,
|
||||||
|
1.2838336236692311,
|
||||||
|
1.2932153453410835,
|
||||||
|
1.3040618749785347,
|
||||||
|
1.316383926863083,
|
||||||
|
1.3301807335621048,
|
||||||
|
1.3439818461440451,
|
||||||
|
1.3598972673004606,
|
||||||
|
1.3779439775587023,
|
||||||
|
1.3981208704326855,
|
||||||
|
1.418273806730323,
|
||||||
|
1.4340878115214444,
|
||||||
|
1.445565137158368,
|
||||||
|
1.45273959485914,
|
||||||
|
1.4599103316162523,
|
||||||
|
1.4670307626366115,
|
||||||
|
1.474100442252211,
|
||||||
|
1.48111939735681,
|
||||||
|
1.488134243479226,
|
||||||
|
1.495145456062699,
|
||||||
|
1.502153039909686,
|
||||||
|
1.5097346239790443,
|
||||||
|
1.5178910621476225,
|
||||||
|
1.5266220576235803,
|
||||||
|
1.5353620432989845,
|
||||||
|
1.545374152761467,
|
||||||
|
1.5566577309558969,
|
||||||
|
1.569199764184379,
|
||||||
|
1.5817353179379183,
|
||||||
|
1.5986915141218316,
|
||||||
|
1.6201194134191075,
|
||||||
|
1.6460167077689267,
|
||||||
|
1.6719047669939942,
|
||||||
|
1.6918150918099673,
|
||||||
|
1.7057507692361864,
|
||||||
|
1.7137640932265894,
|
||||||
|
1.7217732861435076,
|
||||||
|
1.7297783508684146,
|
||||||
|
1.737780757913635,
|
||||||
|
1.7459181197626403,
|
||||||
|
1.7541903672600494,
|
||||||
|
1.7625959636196327,
|
||||||
|
1.7709972329654864,
|
||||||
|
1.7793941781790852,
|
||||||
|
1.7877868031023945,
|
||||||
|
1.7961751115773796,
|
||||||
|
1.8045606557581335,
|
||||||
|
1.8139629377087627,
|
||||||
|
1.824381436842932,
|
||||||
|
1.835814081380705,
|
||||||
|
1.847275503201129,
|
||||||
|
1.862235672444246,
|
||||||
|
1.8806927939516411,
|
||||||
|
1.9026104247588487,
|
||||||
|
1.9245345552113182,
|
||||||
|
1.9482128147680253,
|
||||||
|
1.9736443063300082,
|
||||||
|
2.0008103857988204,
|
||||||
|
2.0279625371819305,
|
||||||
|
2.055100772005235,
|
||||||
|
2.082225099873648,
|
||||||
|
2.1183028432496016,
|
||||||
|
2.16337565384239,
|
||||||
|
2.2174389328192197,
|
||||||
|
2.271520771371253,
|
||||||
|
2.322373696229342,
|
||||||
|
2.3699990328716107,
|
||||||
|
2.414398437185221,
|
||||||
|
2.4587748041127506,
|
||||||
|
2.499446286796604,
|
||||||
|
2.5364027376452056,
|
||||||
|
2.5696460593920065,
|
||||||
|
2.602860350286428,
|
||||||
|
2.630396440815385,
|
||||||
|
2.6521732021128046,
|
||||||
|
2.6681935771243177,
|
||||||
|
2.6841217449620203,
|
||||||
|
2.6947834587664494,
|
||||||
|
2.705443819238505,
|
||||||
|
2.714526681131686
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -1258,7 +1258,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"metric-type": "SNR-0.1nm",
|
"metric-type": "SNR-0.1nm",
|
||||||
"accumulative-value": 28.77
|
"accumulative-value": 28.78
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"metric-type": "OSNR-bandwidth",
|
"metric-type": "OSNR-bandwidth",
|
||||||
|
|||||||
@@ -3,5 +3,5 @@ response-id,source,destination,path_bandwidth,Pass?,nb of tsp pairs,total cost,t
|
|||||||
1,trx Brest_KLA,trx Vannes_KBE,10.0,True,1,1,Voyager,mode 1,22.65,22.11,18.03,32.0,1.0,trx Brest_KLA | roadm Brest_KLA | east edfa in Brest_KLA to Morlaix | fiber (Brest_KLA → Morlaix)-F060 | east fused spans in Morlaix | fiber (Morlaix → Lannion_CAS)-F059 | west edfa in Lannion_CAS to Morlaix | roadm Lannion_CAS | east edfa in Lannion_CAS to Corlay | fiber (Lannion_CAS → Corlay)-F061 | west fused spans in Corlay | fiber (Corlay → Loudeac)-F010 | west fused spans in Loudeac | fiber (Loudeac → Lorient_KMA)-F054 | west edfa in Lorient_KMA to Loudeac | roadm Lorient_KMA | east edfa in Lorient_KMA to Vannes_KBE | fiber (Lorient_KMA → Vannes_KBE)-F055 | west edfa in Vannes_KBE to Lorient_KMA | roadm Vannes_KBE | trx Vannes_KBE,"-276, 4",,,
|
1,trx Brest_KLA,trx Vannes_KBE,10.0,True,1,1,Voyager,mode 1,22.65,22.11,18.03,32.0,1.0,trx Brest_KLA | roadm Brest_KLA | east edfa in Brest_KLA to Morlaix | fiber (Brest_KLA → Morlaix)-F060 | east fused spans in Morlaix | fiber (Morlaix → Lannion_CAS)-F059 | west edfa in Lannion_CAS to Morlaix | roadm Lannion_CAS | east edfa in Lannion_CAS to Corlay | fiber (Lannion_CAS → Corlay)-F061 | west fused spans in Corlay | fiber (Corlay → Loudeac)-F010 | west fused spans in Loudeac | fiber (Loudeac → Lorient_KMA)-F054 | west edfa in Lorient_KMA to Loudeac | roadm Lorient_KMA | east edfa in Lorient_KMA to Vannes_KBE | fiber (Lorient_KMA → Vannes_KBE)-F055 | west edfa in Vannes_KBE to Lorient_KMA | roadm Vannes_KBE | trx Vannes_KBE,"-276, 4",,,
|
||||||
3,trx Lannion_CAS,trx Rennes_STA,60.0,True,1,1,vendorA_trx-type1,mode 1,28.29,25.85,21.77,32.0,1.0,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,"-284, 4",,,
|
3,trx Lannion_CAS,trx Rennes_STA,60.0,True,1,1,vendorA_trx-type1,mode 1,28.29,25.85,21.77,32.0,1.0,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,"-284, 4",,,
|
||||||
4,trx Rennes_STA,trx Lannion_CAS,150.0,True,1,1,vendorA_trx-type1,mode 2,22.27,22.15,15.05,64.0,0.0,trx Rennes_STA | roadm Rennes_STA | east edfa in Rennes_STA to Ploermel | fiber (Rennes_STA → Ploermel)- | east edfa in Ploermel to Vannes_KBE | fiber (Ploermel → Vannes_KBE)- | west edfa in Vannes_KBE to Ploermel | roadm Vannes_KBE | east edfa in Vannes_KBE to Lorient_KMA | fiber (Vannes_KBE → Lorient_KMA)-F055 | west edfa in Lorient_KMA to Vannes_KBE | roadm Lorient_KMA | east edfa in Lorient_KMA to Loudeac | fiber (Lorient_KMA → Loudeac)-F054 | east fused spans in Loudeac | fiber (Loudeac → Corlay)-F010 | east fused spans in Corlay | fiber (Corlay → Lannion_CAS)-F061 | west edfa in Lannion_CAS to Corlay | roadm Lannion_CAS | trx Lannion_CAS,"-266, 6",,,
|
4,trx Rennes_STA,trx Lannion_CAS,150.0,True,1,1,vendorA_trx-type1,mode 2,22.27,22.15,15.05,64.0,0.0,trx Rennes_STA | roadm Rennes_STA | east edfa in Rennes_STA to Ploermel | fiber (Rennes_STA → Ploermel)- | east edfa in Ploermel to Vannes_KBE | fiber (Ploermel → Vannes_KBE)- | west edfa in Vannes_KBE to Ploermel | roadm Vannes_KBE | east edfa in Vannes_KBE to Lorient_KMA | fiber (Vannes_KBE → Lorient_KMA)-F055 | west edfa in Lorient_KMA to Vannes_KBE | roadm Lorient_KMA | east edfa in Lorient_KMA to Loudeac | fiber (Lorient_KMA → Loudeac)-F054 | east fused spans in Loudeac | fiber (Loudeac → Corlay)-F010 | east fused spans in Corlay | fiber (Corlay → Lannion_CAS)-F061 | west edfa in Lannion_CAS to Corlay | roadm Lannion_CAS | trx Lannion_CAS,"-266, 6",,,
|
||||||
5,trx Rennes_STA,trx Lannion_CAS,20.0,True,1,1,vendorA_trx-type1,mode 2,30.79,28.77,21.68,64.0,3.0,trx Rennes_STA | roadm Rennes_STA | east edfa in Rennes_STA to Stbrieuc | fiber (Rennes_STA → Stbrieuc)-F057 | west edfa in Stbrieuc to Rennes_STA | fiber (Stbrieuc → Lannion_CAS)-F056 | west edfa in Lannion_CAS to Stbrieuc | roadm Lannion_CAS | trx Lannion_CAS,"-274, 6",,,
|
5,trx Rennes_STA,trx Lannion_CAS,20.0,True,1,1,vendorA_trx-type1,mode 2,30.79,28.78,21.68,64.0,3.0,trx Rennes_STA | roadm Rennes_STA | east edfa in Rennes_STA to Stbrieuc | fiber (Rennes_STA → Stbrieuc)-F057 | west edfa in Stbrieuc to Rennes_STA | fiber (Stbrieuc → Lannion_CAS)-F056 | west edfa in Lannion_CAS to Stbrieuc | roadm Lannion_CAS | trx Lannion_CAS,"-274, 6",,,
|
||||||
6,,,,NO_PATH,,,,,,,,,,,,,,
|
6,,,,NO_PATH,,,,,,,,,,,,,,
|
||||||
|
|||||||
|
809
tests/data/test_long_network.json
Normal file
809
tests/data/test_long_network.json
Normal file
@@ -0,0 +1,809 @@
|
|||||||
|
{
|
||||||
|
"network_name": "Example Network - long path",
|
||||||
|
"elements": [{
|
||||||
|
"uid": "Site_A",
|
||||||
|
"type": "Transceiver",
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"city": "Site A",
|
||||||
|
"region": "",
|
||||||
|
"latitude": 0,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "roadm Site A",
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"city": "Site A",
|
||||||
|
"region": "RLD",
|
||||||
|
"latitude": 0.0,
|
||||||
|
"longitude": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "Roadm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "booster A",
|
||||||
|
"type": "Edfa",
|
||||||
|
"type_variety": "std_medium_gain",
|
||||||
|
"operational": {
|
||||||
|
"gain_target": 16,
|
||||||
|
"tilt_target": 0
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 0,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Span1",
|
||||||
|
"type": "Fiber",
|
||||||
|
"type_variety": "SSMF",
|
||||||
|
"params": {
|
||||||
|
"length": 80,
|
||||||
|
"loss_coef": 0.2,
|
||||||
|
"length_units": "km"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 1,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Edfa1",
|
||||||
|
"type": "Edfa",
|
||||||
|
"type_variety": "test",
|
||||||
|
"operational": {
|
||||||
|
"gain_target": 16,
|
||||||
|
"tilt_target": 0
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 2,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Span2",
|
||||||
|
"type": "Fiber",
|
||||||
|
"type_variety": "SSMF",
|
||||||
|
"params": {
|
||||||
|
"length": 80,
|
||||||
|
"loss_coef": 0.2,
|
||||||
|
"length_units": "km"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 1,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Edfa2",
|
||||||
|
"type": "Edfa",
|
||||||
|
"type_variety": "test_fixed_gain",
|
||||||
|
"operational": {
|
||||||
|
"gain_target": 16,
|
||||||
|
"tilt_target": 0
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 2,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Span3",
|
||||||
|
"type": "Fiber",
|
||||||
|
"type_variety": "SSMF",
|
||||||
|
"params": {
|
||||||
|
"length": 80,
|
||||||
|
"loss_coef": 0.2,
|
||||||
|
"length_units": "km"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 1,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Edfa3",
|
||||||
|
"type": "Edfa",
|
||||||
|
"type_variety": "test",
|
||||||
|
"operational": {
|
||||||
|
"gain_target": 16,
|
||||||
|
"tilt_target": 0
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 2,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Span4",
|
||||||
|
"type": "Fiber",
|
||||||
|
"type_variety": "SSMF",
|
||||||
|
"params": {
|
||||||
|
"length": 80,
|
||||||
|
"loss_coef": 0.2,
|
||||||
|
"length_units": "km"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 1,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Edfa4",
|
||||||
|
"type": "Edfa",
|
||||||
|
"type_variety": "test_fixed_gain",
|
||||||
|
"operational": {
|
||||||
|
"gain_target": 16,
|
||||||
|
"tilt_target": 0
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 2,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Span5",
|
||||||
|
"type": "Fiber",
|
||||||
|
"type_variety": "SSMF",
|
||||||
|
"params": {
|
||||||
|
"length": 80,
|
||||||
|
"loss_coef": 0.2,
|
||||||
|
"length_units": "km"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 1,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Edfa5",
|
||||||
|
"type": "Edfa",
|
||||||
|
"type_variety": "test",
|
||||||
|
"operational": {
|
||||||
|
"gain_target": 16,
|
||||||
|
"tilt_target": 0
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 2,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "roadm Site C",
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"city": "Site A",
|
||||||
|
"region": "RLD",
|
||||||
|
"latitude": 0.0,
|
||||||
|
"longitude": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "Roadm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "booster C",
|
||||||
|
"type": "Edfa",
|
||||||
|
"type_variety": "std_medium_gain",
|
||||||
|
"operational": {
|
||||||
|
"gain_target": 16,
|
||||||
|
"tilt_target": 0
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 0,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Span6",
|
||||||
|
"type": "Fiber",
|
||||||
|
"type_variety": "SSMF",
|
||||||
|
"params": {
|
||||||
|
"length": 80,
|
||||||
|
"loss_coef": 0.2,
|
||||||
|
"length_units": "km"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 1,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Edfa6",
|
||||||
|
"type": "Edfa",
|
||||||
|
"type_variety": "test_fixed_gain",
|
||||||
|
"operational": {
|
||||||
|
"gain_target": 16,
|
||||||
|
"tilt_target": 0
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 2,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Span7",
|
||||||
|
"type": "Fiber",
|
||||||
|
"type_variety": "SSMF",
|
||||||
|
"params": {
|
||||||
|
"length": 80,
|
||||||
|
"loss_coef": 0.2,
|
||||||
|
"length_units": "km"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 1,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Edfa7",
|
||||||
|
"type": "Edfa",
|
||||||
|
"type_variety": "test",
|
||||||
|
"operational": {
|
||||||
|
"gain_target": 16,
|
||||||
|
"tilt_target": 0
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 2,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Span8",
|
||||||
|
"type": "Fiber",
|
||||||
|
"type_variety": "SSMF",
|
||||||
|
"params": {
|
||||||
|
"length": 80,
|
||||||
|
"loss_coef": 0.2,
|
||||||
|
"length_units": "km"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 1,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Edfa8",
|
||||||
|
"type": "Edfa",
|
||||||
|
"type_variety": "test_fixed_gain",
|
||||||
|
"operational": {
|
||||||
|
"gain_target": 16,
|
||||||
|
"tilt_target": 0
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 2,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Span9",
|
||||||
|
"type": "Fiber",
|
||||||
|
"type_variety": "SSMF",
|
||||||
|
"params": {
|
||||||
|
"length": 80,
|
||||||
|
"loss_coef": 0.2,
|
||||||
|
"length_units": "km"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 1,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Edfa9",
|
||||||
|
"type": "Edfa",
|
||||||
|
"type_variety": "test",
|
||||||
|
"operational": {
|
||||||
|
"gain_target": 16,
|
||||||
|
"tilt_target": 0
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 2,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Span10",
|
||||||
|
"type": "Fiber",
|
||||||
|
"type_variety": "SSMF",
|
||||||
|
"params": {
|
||||||
|
"length": 80,
|
||||||
|
"loss_coef": 0.2,
|
||||||
|
"length_units": "km"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 1,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Edfa10",
|
||||||
|
"type": "Edfa",
|
||||||
|
"type_variety": "test_fixed_gain",
|
||||||
|
"operational": {
|
||||||
|
"gain_target": 16,
|
||||||
|
"tilt_target": 0
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 2,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "roadm Site D",
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"city": "Site A",
|
||||||
|
"region": "RLD",
|
||||||
|
"latitude": 0.0,
|
||||||
|
"longitude": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "Roadm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "booster D",
|
||||||
|
"type": "Edfa",
|
||||||
|
"type_variety": "std_medium_gain",
|
||||||
|
"operational": {
|
||||||
|
"gain_target": 16,
|
||||||
|
"tilt_target": 0
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 0,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Span11",
|
||||||
|
"type": "Fiber",
|
||||||
|
"type_variety": "SSMF",
|
||||||
|
"params": {
|
||||||
|
"length": 80,
|
||||||
|
"loss_coef": 0.2,
|
||||||
|
"length_units": "km"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 1,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Edfa11",
|
||||||
|
"type": "Edfa",
|
||||||
|
"type_variety": "test",
|
||||||
|
"operational": {
|
||||||
|
"gain_target": 16,
|
||||||
|
"tilt_target": 0
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 2,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Span12",
|
||||||
|
"type": "Fiber",
|
||||||
|
"type_variety": "SSMF",
|
||||||
|
"params": {
|
||||||
|
"length": 80,
|
||||||
|
"loss_coef": 0.2,
|
||||||
|
"length_units": "km"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 1,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Edfa12",
|
||||||
|
"type": "Edfa",
|
||||||
|
"type_variety": "test_fixed_gain",
|
||||||
|
"operational": {
|
||||||
|
"gain_target": 16,
|
||||||
|
"tilt_target": 0
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 2,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "roadm Site E",
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"city": "Site A",
|
||||||
|
"region": "RLD",
|
||||||
|
"latitude": 0.0,
|
||||||
|
"longitude": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "Roadm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "booster E",
|
||||||
|
"type": "Edfa",
|
||||||
|
"type_variety": "std_medium_gain",
|
||||||
|
"operational": {
|
||||||
|
"gain_target": 16,
|
||||||
|
"tilt_target": 0
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 0,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Span13",
|
||||||
|
"type": "Fiber",
|
||||||
|
"type_variety": "SSMF",
|
||||||
|
"params": {
|
||||||
|
"length": 80,
|
||||||
|
"loss_coef": 0.2,
|
||||||
|
"length_units": "km"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 1,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Edfa13",
|
||||||
|
"type": "Edfa",
|
||||||
|
"type_variety": "test",
|
||||||
|
"operational": {
|
||||||
|
"gain_target": 16,
|
||||||
|
"tilt_target": 0
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 2,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Span14",
|
||||||
|
"type": "Fiber",
|
||||||
|
"type_variety": "SSMF",
|
||||||
|
"params": {
|
||||||
|
"length": 80,
|
||||||
|
"loss_coef": 0.2,
|
||||||
|
"length_units": "km"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 1,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Edfa14",
|
||||||
|
"type": "Edfa",
|
||||||
|
"type_variety": "test_fixed_gain",
|
||||||
|
"operational": {
|
||||||
|
"gain_target": 16,
|
||||||
|
"tilt_target": 0
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 2,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Span15",
|
||||||
|
"type": "Fiber",
|
||||||
|
"type_variety": "SSMF",
|
||||||
|
"params": {
|
||||||
|
"length": 80,
|
||||||
|
"loss_coef": 0.2,
|
||||||
|
"length_units": "km"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 1,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Edfa15",
|
||||||
|
"type": "Edfa",
|
||||||
|
"type_variety": "test",
|
||||||
|
"operational": {
|
||||||
|
"gain_target": 16,
|
||||||
|
"tilt_target": 0
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"region": "",
|
||||||
|
"latitude": 2,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "roadm Site B",
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"city": "Site B",
|
||||||
|
"region": "RLD",
|
||||||
|
"latitude": 0.0,
|
||||||
|
"longitude": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "Roadm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": "Site_B",
|
||||||
|
"type": "Transceiver",
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"city": "Site B",
|
||||||
|
"region": "",
|
||||||
|
"latitude": 3,
|
||||||
|
"longitude": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
],
|
||||||
|
"connections": [{
|
||||||
|
"from_node": "Site_A",
|
||||||
|
"to_node": "roadm Site A"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "roadm Site A",
|
||||||
|
"to_node": "booster A"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "booster A",
|
||||||
|
"to_node": "Span1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Span1",
|
||||||
|
"to_node": "Edfa1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Edfa1",
|
||||||
|
"to_node": "Span2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Span2",
|
||||||
|
"to_node": "Edfa2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Edfa2",
|
||||||
|
"to_node": "Span3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Span3",
|
||||||
|
"to_node": "Edfa3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Edfa3",
|
||||||
|
"to_node": "Span4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Span4",
|
||||||
|
"to_node": "Edfa4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Edfa4",
|
||||||
|
"to_node": "Span5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Span5",
|
||||||
|
"to_node": "Edfa5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Edfa5",
|
||||||
|
"to_node": "roadm Site C"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "roadm Site C",
|
||||||
|
"to_node": "booster C"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "booster C",
|
||||||
|
"to_node": "Span6"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Span6",
|
||||||
|
"to_node": "Edfa6"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Edfa6",
|
||||||
|
"to_node": "Span7"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Span7",
|
||||||
|
"to_node": "Edfa7"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Edfa7",
|
||||||
|
"to_node": "Span8"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Span8",
|
||||||
|
"to_node": "Edfa8"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Edfa8",
|
||||||
|
"to_node": "Span9"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Span9",
|
||||||
|
"to_node": "Edfa9"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Edfa9",
|
||||||
|
"to_node": "Span10"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Span10",
|
||||||
|
"to_node": "Edfa10"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Edfa10",
|
||||||
|
"to_node": "roadm Site D"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "roadm Site D",
|
||||||
|
"to_node": "booster D"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "booster D",
|
||||||
|
"to_node": "Span11"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Span11",
|
||||||
|
"to_node": "Edfa11"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Edfa11",
|
||||||
|
"to_node": "Span12"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Span12",
|
||||||
|
"to_node": "Edfa12"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Edfa12",
|
||||||
|
"to_node": "roadm Site E"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "roadm Site E",
|
||||||
|
"to_node": "booster E"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "booster E",
|
||||||
|
"to_node": "Span13"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Span13",
|
||||||
|
"to_node": "Edfa13"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Edfa13",
|
||||||
|
"to_node": "Span14"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Span14",
|
||||||
|
"to_node": "Edfa14"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Edfa14",
|
||||||
|
"to_node": "Span15"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Span15",
|
||||||
|
"to_node": "Edfa15"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "Edfa15",
|
||||||
|
"to_node": "roadm Site B"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from_node": "roadm Site B",
|
||||||
|
"to_node": "Site_B"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,98 +1,98 @@
|
|||||||
1.000000000000000021e-03,6.059428294303585358e-04,4.124436878765448634e-04,2.874462507798667202e-04,2.103923932407651741e-04,1.678414792051835720e-04,1.547359756068614396e-04,1.816771264024174659e-04,3.223716208702616772e-04
|
1.000000000000000021e-03,6.059596816131984903e-04,4.124540545641951000e-04,2.874328952539468305e-04,2.103398919772851445e-04,1.677242405549142946e-04,1.544863001982801454e-04,1.810521006745035243e-04,3.200643516934312716e-04
|
||||||
1.000000000000000021e-03,6.053134417926274479e-04,4.117055522849718272e-04,2.867345754340725936e-04,2.097129658661858059e-04,1.671408382188599656e-04,1.538980727463440737e-04,1.804148897825019347e-04,3.196786917797407482e-04
|
1.000000000000000021e-03,6.053276391419512917e-04,4.117105797931639192e-04,2.867132476380170980e-04,2.096494018677202108e-04,1.670078900317705016e-04,1.536235748319029191e-04,1.797412011853683042e-04,3.172302656811062894e-04
|
||||||
1.000000000000000021e-03,6.046849734433535663e-04,4.109690875237402238e-04,2.860250085842350751e-04,2.090360511584246736e-04,1.664434237997556567e-04,1.530650313352837862e-04,1.791618737991747007e-04,3.170092948646618079e-04
|
1.000000000000000021e-03,6.046965215788322606e-04,4.109687952835336887e-04,2.859957486816950244e-04,2.089614974033423851e-04,1.662949011112697126e-04,1.527659914515381017e-04,1.784402430016445015e-04,3.144223032044235564e-04
|
||||||
1.000000000000000021e-03,6.040574211994215528e-04,4.102342878398261821e-04,2.853175420730359193e-04,2.083616379079277403e-04,1.657492189637676920e-04,1.522368203677859210e-04,1.779180061767344980e-04,3.143632101370558260e-04
|
1.000000000000000021e-03,6.040663257237133005e-04,4.102286952029449651e-04,2.852803900268787471e-04,2.082761669373014350e-04,1.655852558250782110e-04,1.519135165004971508e-04,1.771491455864908956e-04,3.116402083285431824e-04
|
||||||
1.000000000000000021e-03,6.034068048547004811e-04,4.094522032835132145e-04,2.845379038962591819e-04,2.075849237814657072e-04,1.649065028354379026e-04,1.511673145690444625e-04,1.761800891032866087e-04,3.101696013411107001e-04
|
1.000000000000000021e-03,6.034134049131552151e-04,4.094420572177277762e-04,2.844940684888993296e-04,2.074903534701979157e-04,1.647299311261353841e-04,1.508247978694524506e-04,1.753757648572244786e-04,3.073546770239318966e-04
|
||||||
1.000000000000000021e-03,6.027571485450614400e-04,4.086719523190792173e-04,2.837607352174946669e-04,2.068114158243908936e-04,1.640683639230874002e-04,1.501056331894667201e-04,1.744595725998800725e-04,3.060328853710948794e-04
|
1.000000000000000021e-03,6.027614491955140619e-04,4.086572704905903084e-04,2.837102537033676193e-04,2.067078158689920062e-04,1.638793172508614261e-04,1.497441922066543145e-04,1.736205593148946460e-04,3.031290170068882115e-04
|
||||||
1.000000000000000021e-03,6.021084488423111532e-04,4.078935283235860985e-04,2.829860258399657913e-04,2.060410983394430761e-04,1.632347745793864737e-04,1.490517152618393740e-04,1.727562758069566841e-04,3.019522704750103072e-04
|
1.000000000000000021e-03,6.021104551256277167e-04,4.078743283205443272e-04,2.829289352705667755e-04,2.059285379676389937e-04,1.630333854029286287e-04,1.486716352337672398e-04,1.718833358612950819e-04,2.989623714008152688e-04
|
||||||
1.000000000000000021e-03,6.014584946769776846e-04,4.071145901524401327e-04,2.822117789926256531e-04,2.052723360542508288e-04,1.624043320606193702e-04,1.480041851535097400e-04,1.710684425093964716e-04,2.979241342510260699e-04
|
1.000000000000000021e-03,6.014582116574243619e-04,4.070908897338878368e-04,2.821481168500803620e-04,2.051508852341138217e-04,1.621907338278938133e-04,1.476057520309239507e-04,1.701623353591907634e-04,2.948510854465446421e-04
|
||||||
1.000000000000000021e-03,6.008072907871274187e-04,4.063351463691671850e-04,2.814380028310788616e-04,2.045051334722086352e-04,1.615770319309204608e-04,1.469630126571907884e-04,1.693959447695294284e-04,2.939478272988644745e-04
|
1.000000000000000021e-03,6.008047235362061304e-04,4.063069632907822604e-04,2.813678065291968134e-04,2.043748619094956848e-04,1.613513572535205565e-04,1.465465096091600223e-04,1.684574188261711764e-04,2.907944492354505236e-04
|
||||||
1.000000000000000021e-03,6.001497788207915121e-04,4.055445944921290597e-04,2.806482406689155018e-04,2.037157793952982566e-04,1.607178158735042268e-04,1.458699426620449350e-04,1.676159912510077627e-04,2.896237141368235984e-04
|
1.000000000000000021e-03,6.001451360530016092e-04,4.055123728737173791e-04,2.805722092000019225e-04,2.035777116783122080e-04,1.604816172174310248e-04,1.454380432794140279e-04,1.666509749540511247e-04,2.864106919229302104e-04
|
||||||
1.000000000000000021e-03,5.994910374944025042e-04,4.047535948218318100e-04,2.798590565363265966e-04,2.029281739019909579e-04,1.598620980598530251e-04,1.447840125437445142e-04,1.658536074234625343e-04,2.853613427461420497e-04
|
1.000000000000000021e-03,5.994843238884264500e-04,4.047173509812383436e-04,2.797772242168449484e-04,2.027823739011739494e-04,1.596154967418240479e-04,1.443369747762361644e-04,1.648627759919576703e-04,2.820911717580149220e-04
|
||||||
1.000000000000000021e-03,5.988260139740232213e-04,4.039566207302157830e-04,2.790656268334378021e-04,2.021383019157014865e-04,1.590064003284783227e-04,1.437018088215471850e-04,1.641044980680633682e-04,2.811520890672289147e-04
|
1.000000000000000021e-03,5.988172342183890103e-04,4.039163714190686103e-04,2.789780293498389497e-04,2.019848363041463460e-04,1.587495225986212185e-04,1.432398991427229250e-04,1.630885426393815433e-04,2.778273023594395367e-04
|
||||||
1.000000000000000021e-03,5.981547295973556680e-04,4.031537149116132062e-04,2.782680029999613086e-04,2.013462168991827844e-04,1.581507747250400562e-04,1.426233730149128554e-04,1.623686402996199669e-04,2.769954674673250896e-04
|
1.000000000000000021e-03,5.981438884479926745e-04,4.031094770638417378e-04,2.781746763026650849e-04,2.011851525894453846e-04,1.578837467363927922e-04,1.421468562989037501e-04,1.613282432889087106e-04,2.736185440612619660e-04
|
||||||
1.000000000000000021e-03,5.974772058480589884e-04,4.023449202032754039e-04,2.774662364916018848e-04,2.005519721420980883e-04,1.572952728586730247e-04,1.415487458023807841e-04,1.606460099014084351e-04,2.728909933446289080e-04
|
1.000000000000000021e-03,5.974643081279905951e-04,4.022967109333065402e-04,2.773672167904255525e-04,2.003833762773818070e-04,1.570182206524130687e-04,1.410578853054891162e-04,1.595818450324428667e-04,2.694643589605560702e-04
|
||||||
1.000000000000000021e-03,5.967924602151245417e-04,4.015280354275974962e-04,2.766567170422079059e-04,1.997501120648868605e-04,1.564314572956195643e-04,1.404632320601022135e-04,1.589039550526354799e-04,2.687258582080010155e-04
|
1.000000000000000021e-03,5.967776135628261383e-04,4.014760835454474729e-04,2.765523639715266420e-04,1.995745107850170087e-04,1.561451751437292214e-04,1.399593838969533089e-04,1.578189695554256631e-04,2.652593622585595239e-04
|
||||||
1.000000000000000021e-03,5.961015210291329552e-04,4.007053572943599577e-04,2.758431797434220318e-04,1.989462429758611403e-04,1.555679612182393453e-04,1.393818318435550562e-04,1.571757793000612348e-04,2.646152969711955188e-04
|
1.000000000000000021e-03,5.960847301704033955e-04,4.006496794462583626e-04,2.757335282633677394e-04,1.987637005805311633e-04,1.552725686595443394e-04,1.388652425906941482e-04,1.560705931497471889e-04,2.611111091988240428e-04
|
||||||
1.000000000000000021e-03,5.954044103428367566e-04,3.998769294251378363e-04,2.750256766566040972e-04,1.981404183299118591e-04,1.547048355449558708e-04,1.383045830163869136e-04,1.554614480121203164e-04,2.605587686095252363e-04
|
1.000000000000000021e-03,5.953856800664869900e-04,3.998175424230218200e-04,2.749107619574642008e-04,1.979509993037016505e-04,1.544004519462355480e-04,1.377754975907092790e-04,1.543366727366940775e-04,2.570190084729973012e-04
|
||||||
1.000000000000000021e-03,5.947013777400173224e-04,3.990430339362700481e-04,2.742044609070656662e-04,1.973328535702731791e-04,1.538422664307762401e-04,1.372316495983985922e-04,1.537610729441031576e-04,2.565559887984316962e-04
|
1.000000000000000021e-03,5.946807128856675898e-04,3.989799547069150759e-04,2.740843182982303974e-04,1.971366223883773178e-04,1.535290106655841792e-04,1.366903106980890768e-04,1.526173104925201149e-04,2.529827224768709296e-04
|
||||||
1.000000000000000021e-03,5.939924446448691022e-04,3.982037130272156897e-04,2.733795825341983144e-04,1.965235995659166514e-04,1.529803013963573505e-04,1.361630645638145173e-04,1.520746117923915490e-04,2.526064078268458078e-04
|
1.000000000000000021e-03,5.939698501124463306e-04,3.981369586533569987e-04,2.732542475356756692e-04,1.963206208562686219e-04,1.526582921179318820e-04,1.356097131673934353e-04,1.509124557001679569e-04,2.490016526370400561e-04
|
||||||
1.000000000000000021e-03,5.932708072008613994e-04,3.973448313523968048e-04,2.725292879585060313e-04,1.956816407574392804e-04,1.520737532268283138e-04,1.350253536692922732e-04,1.502520417395671493e-04,2.482429369311983419e-04
|
1.000000000000000021e-03,5.932465626846949178e-04,3.972749900655482406e-04,2.723996767755988246e-04,1.954732420440092287e-04,1.517449722599865122e-04,1.344633353162260421e-04,1.490787207039270096e-04,2.446311790608478916e-04
|
||||||
1.000000000000000021e-03,5.925433291275937313e-04,3.964806700993557770e-04,2.716755655440644093e-04,1.948383564731119815e-04,1.511684275731327428e-04,1.338932464840604031e-04,1.484467502756363724e-04,2.439468427807235304e-04
|
1.000000000000000021e-03,5.925174390191371033e-04,3.964077570693368959e-04,2.715417094444828503e-04,1.946245940839898595e-04,1.508329769024341859e-04,1.333227635443309334e-04,1.472627410071646460e-04,2.403295419535726046e-04
|
||||||
1.000000000000000021e-03,5.918101288584805405e-04,3.956113769664689763e-04,2.708185566039283476e-04,1.939938721213093850e-04,1.502644330979066827e-04,1.327668256867655240e-04,1.466587172007617287e-04,2.397173806066686273e-04
|
1.000000000000000021e-03,5.917825975966207411e-04,3.955354074700222146e-04,2.706804869652218665e-04,1.937748023716854423e-04,1.499224142400159925e-04,1.321880784683747445e-04,1.454644877205459041e-04,2.360959501695517580e-04
|
||||||
1.000000000000000021e-03,5.910712282476807177e-04,3.947369945531709078e-04,2.699583111402765676e-04,1.931482375169864133e-04,1.493618135415682949e-04,1.316461114156967569e-04,1.448878476419733323e-04,2.355536787532183434e-04
|
1.000000000000000021e-03,5.910420603206251872e-04,3.946579839875351422e-04,2.698160594859791645e-04,1.929239167799043884e-04,1.490133276731937860e-04,1.310592984163628486e-04,1.436838579350653566e-04,2.319294885748935905e-04
|
||||||
1.000000000000000021e-03,5.903266492974269808e-04,3.938575655934699066e-04,2.690948791496987824e-04,1.923015022699072797e-04,1.484606121781560119e-04,1.305311230155930472e-04,1.431340460611192763e-04,2.314548735305102924e-04
|
1.000000000000000021e-03,5.902958492424382119e-04,3.937755294749108723e-04,2.689484771457827648e-04,1.920719869699086713e-04,1.481057601269397369e-04,1.299364409184113305e-04,1.419207481479104003e-04,2.278292508796841368e-04
|
||||||
1.000000000000000021e-03,5.895916361077759233e-04,3.930015889157450278e-04,2.682679585446747167e-04,1.915046725018171748e-04,1.476265343831741983e-04,1.295122987364192039e-04,1.415403000102364922e-04,2.277048762028301403e-04
|
1.000000000000000021e-03,5.895598685634120817e-04,3.929178479527316910e-04,2.681193531438139815e-04,1.912726116179633686e-04,1.472689584526509451e-04,1.289152165190126341e-04,1.403276367723939690e-04,2.241040180807166735e-04
|
||||||
1.000000000000000021e-03,5.888509505821538188e-04,3.921405251235485093e-04,2.674377005486313469e-04,1.907064029438769275e-04,1.467931904457939435e-04,1.284977589807231727e-04,1.399600943498011466e-04,2.240084844157824847e-04
|
1.000000000000000021e-03,5.888182184446727908e-04,3.920550888852155800e-04,2.672869104586279658e-04,1.904718280301954622e-04,1.464329431074320987e-04,1.278983689606465277e-04,1.387482416027983217e-04,2.204326648641897243e-04
|
||||||
1.000000000000000021e-03,5.881046147353881284e-04,3.912744162777674595e-04,2.666041537474170709e-04,1.899067416692393098e-04,1.459606238177286390e-04,1.274875313353729649e-04,1.383933775516596422e-04,2.203650745808937968e-04
|
1.000000000000000021e-03,5.880709209312291698e-04,3.911872944022057189e-04,2.664511977530461032e-04,1.896696843025943828e-04,1.455977573633372962e-04,1.268859249854523304e-04,1.371825077963339959e-04,2.168145532732365665e-04
|
||||||
1.000000000000000021e-03,5.873535041835053691e-04,3.904041908037584924e-04,2.657681073335506784e-04,1.891063272435359547e-04,1.451293640595985746e-04,1.264820875947550167e-04,1.368405966876043531e-04,2.167748460671411873e-04
|
1.000000000000000021e-03,5.873188516038330012e-04,3.903153927531259398e-04,2.656130037940035156e-04,1.888668181821939697e-04,1.447639292589146184e-04,1.258783532658409540e-04,1.356308744741794301e-04,2.132498546822566535e-04
|
||||||
1.000000000000000021e-03,5.865976375297720377e-04,3.895298843642901903e-04,2.649296021207307814e-04,1.883051991594097421e-04,1.442994447916011967e-04,1.254814426573682665e-04,1.353016807452276011e-04,2.132371421364682767e-04
|
1.000000000000000021e-03,5.865620290918570692e-04,3.894394196579139384e-04,2.647723694527710347e-04,1.880632691586897262e-04,1.439314922056974795e-04,1.248756678383702303e-04,1.340932673985179111e-04,2.097378989636096219e-04
|
||||||
1.000000000000000021e-03,5.858370334908887412e-04,3.886515327161476187e-04,2.640886789067201177e-04,1.875033967487228748e-04,1.434708992929061271e-04,1.244856108614830043e-04,1.337765582492128895e-04,2.097513117892475961e-04
|
1.000000000000000021e-03,5.858004721379563712e-04,3.885594109297237520e-04,2.639293355828808605e-04,1.872590765580118600e-04,1.431004792703304354e-04,1.238778821782577646e-04,1.325696118981003829e-04,2.062780220293337398e-04
|
||||||
1.000000000000000021e-03,5.850717109173866415e-04,3.877691717638952012e-04,2.632453785571107932e-04,1.867009592919541521e-04,1.426437606415217971e-04,1.234946061839636009e-04,1.322651576281378186e-04,2.063167108712882474e-04
|
1.000000000000000021e-03,5.850341996176138979e-04,3.876754025264287241e-04,2.630839431003643525e-04,1.864542796470906004e-04,1.422709233084495310e-04,1.228850093894619591e-04,1.310598332174379369e-04,2.028695668674851068e-04
|
||||||
1.000000000000000021e-03,5.843017841779564719e-04,3.868829399849727933e-04,2.623998297381095117e-04,1.858979973489535589e-04,1.418181214209275826e-04,1.225084976697060233e-04,1.307674705482058720e-04,2.029328092689827875e-04
|
1.000000000000000021e-03,5.842633259194077947e-04,3.867875329548579075e-04,2.622363206668650243e-04,1.856489888735660490e-04,1.414429165168560936e-04,1.218971173595769875e-04,1.295639192660443006e-04,1.995119889022209966e-04
|
||||||
1.000000000000000021e-03,5.835272719783185817e-04,3.859928727352694559e-04,2.615520723807220407e-04,1.850945488934469029e-04,1.409940129261724197e-04,1.215272967897141737e-04,1.292834223062770812e-04,1.995989685833853672e-04
|
1.000000000000000021e-03,5.834878697730810785e-04,3.858958376209294626e-04,2.613865082576556967e-04,1.848432421885319707e-04,1.406164899573639974e-04,1.209142166826000190e-04,1.280817922197122173e-04,1.962046375108947760e-04
|
||||||
1.000000000000000021e-03,5.827481931390192209e-04,3.850990054645316799e-04,2.607021463995574332e-04,1.842906517410432266e-04,1.401714661235729505e-04,1.205510144929276286e-04,1.278129378421479238e-04,1.963145562589016025e-04
|
1.000000000000000021e-03,5.827078500230523962e-04,3.850003520236475163e-04,2.605345458299026889e-04,1.840370773822073991e-04,1.397916743597008157e-04,1.199363174304283899e-04,1.266133739282210172e-04,1.929468682039042694e-04
|
||||||
1.000000000000000021e-03,5.819741190680906414e-04,3.842186528659996786e-04,2.598733678747139103e-04,1.835150990942780922e-04,1.393856353878371876e-04,1.196241043053028848e-04,1.264157249384978508e-04,1.931533527071859933e-04
|
1.000000000000000021e-03,5.819334261621241173e-04,3.841195496874485939e-04,2.597054450234843122e-04,1.832615752361228063e-04,1.390067359137023490e-04,1.190124837885568685e-04,1.252266477671892364e-04,1.898342669542842250e-04
|
||||||
1.000000000000000021e-03,5.811954906857532679e-04,3.833344911530978875e-04,2.590423495637437460e-04,1.827389251971546448e-04,1.386010231640464696e-04,1.187014313463915350e-04,1.250305871218520724e-04,1.900379005692562904e-04
|
1.000000000000000021e-03,5.811544494713084385e-04,3.832349425929183610e-04,2.588741118031709712e-04,1.824854619290212638e-04,1.382230274271905722e-04,1.180928923649849320e-04,1.238519429087230690e-04,1.867668194223294086e-04
|
||||||
1.000000000000000021e-03,5.804123268686601621e-04,3.824465553881609072e-04,2.582091305240798466e-04,1.819621668943112273e-04,1.378176602140172575e-04,1.177830097537161525e-04,1.236574657124121280e-04,1.869676369318762604e-04
|
1.000000000000000021e-03,5.803709388350691226e-04,3.823465658113372784e-04,2.580405852181276633e-04,1.817087742555892370e-04,1.374405795299253087e-04,1.171775570200931022e-04,1.224892004036316632e-04,1.837439681062861012e-04
|
||||||
1.000000000000000021e-03,5.796261981805348861e-04,3.815564763513873891e-04,2.573750710547324729e-04,1.811859034357266680e-04,1.370364232713841633e-04,1.168696105278517803e-04,1.222971239749574140e-04,1.839432835829867073e-04
|
1.000000000000000021e-03,5.795844646861092117e-04,3.814560496353979662e-04,2.572062245701910057e-04,1.809325897993571621e-04,1.366602663048694689e-04,1.162672443199922736e-04,1.211391750652958171e-04,1.807664171209839225e-04
|
||||||
1.000000000000000021e-03,5.788371166298537929e-04,3.806642767897665215e-04,2.565401959245502722e-04,1.804101566728638260e-04,1.362573268495191094e-04,1.159612279572367423e-04,1.209494737333099285e-04,1.809642226433420603e-04
|
1.000000000000000021e-03,5.787950390386191295e-04,3.805634168176052199e-04,2.563710546191050039e-04,1.801569303693986560e-04,1.358821021611104744e-04,1.153619483579342790e-04,1.198017787120210541e-04,1.778335550584487373e-04
|
||||||
1.000000000000000021e-03,5.780450942923127944e-04,3.797699794962239458e-04,2.557045298790712744e-04,1.796349483543752492e-04,1.354803852765658562e-04,1.150578560981921263e-04,1.196144270262388971e-04,1.780298433107154344e-04
|
1.000000000000000021e-03,5.780026739739645147e-04,3.796686901561970007e-04,2.555351001009416268e-04,1.793818176715784992e-04,1.351061013224604760e-04,1.144616629966290335e-04,1.184769233829579004e-04,1.749447775426769835e-04
|
||||||
1.000000000000000021e-03,5.772501433097143196e-04,3.788736073065085246e-04,2.548680976361037374e-04,1.788603001211915217e-04,1.347056126906417029e-04,1.141594887707218423e-04,1.182918961012392148e-04,1.751395417672447184e-04
|
1.000000000000000021e-03,5.772073816396077655e-04,3.787718924921195112e-04,2.546983857238086673e-04,1.786072733038042632e-04,1.343322778228697451e-04,1.135663818643436025e-04,1.171645213323757931e-04,1.720994871389106646e-04
|
||||||
1.000000000000000021e-03,5.764543993312114430e-04,3.779774418763772749e-04,2.540328419678222955e-04,1.780877776040980329e-04,1.339342982068885400e-04,1.132672798320007770e-04,1.169830787460522149e-04,1.722947974180976999e-04
|
1.000000000000000021e-03,5.764112975619451167e-04,3.778753049229251356e-04,2.538628529985562728e-04,1.778348606584519826e-04,1.335619170774594953e-04,1.126772524533375236e-04,1.158657577413503814e-04,1.692991320527776819e-04
|
||||||
1.000000000000000021e-03,5.756578658699793754e-04,3.770814893242558957e-04,2.531987675065141240e-04,1.773173809352787060e-04,1.331664323570320042e-04,1.123811939733057949e-04,1.156878429947367658e-04,1.694949148917899182e-04
|
1.000000000000000021e-03,5.756144252522814222e-04,3.769789335549947914e-04,2.530285065275222683e-04,1.770645798114452998e-04,1.327950095246515803e-04,1.117942393436846088e-04,1.145805009748875411e-04,1.665430248001372392e-04
|
||||||
1.000000000000000021e-03,5.748605464740858808e-04,3.761857558021953151e-04,2.523658789003789082e-04,1.765491102506614579e-04,1.324020056947932127e-04,1.115011960644554309e-04,1.144060580710201219e-04,1.667392091004694466e-04
|
1.000000000000000021e-03,5.748167682568085593e-04,3.760827845283660131e-04,2.521953509290719687e-04,1.762964308427695766e-04,1.320315456257037542e-04,1.109173072961205789e-04,1.133086205901110452e-04,1.638304880953399246e-04
|
||||||
1.000000000000000021e-03,5.740605208264367093e-04,3.752860221900411030e-04,2.515274179172670150e-04,1.757730484194969538e-04,1.316262968484167275e-04,1.106031805667756002e-04,1.130890327345630944e-04,1.638824360782746060e-04
|
1.000000000000000021e-03,5.740166237139158025e-04,3.751830736799844387e-04,2.513572749088919958e-04,1.755213872380331861e-04,1.312580494760662926e-04,1.100242733780145235e-04,1.120050977276823334e-04,1.610268323297459373e-04
|
||||||
1.000000000000000021e-03,5.732597217139582440e-04,3.743865400085843336e-04,2.506901966657434509e-04,1.749991992264989145e-04,1.308541788026545852e-04,1.097115653341001649e-04,1.117862964715498958e-04,1.610733229285059244e-04
|
1.000000000000000021e-03,5.732157063485666254e-04,3.742836154796483610e-04,2.505204393147844274e-04,1.747485543201545441e-04,1.304881340598568315e-04,1.091376023135285023e-04,1.107157077892566201e-04,1.582698947895536752e-04
|
||||||
1.000000000000000021e-03,5.724581527307928295e-04,3.734873153380866809e-04,2.498542195054800734e-04,1.742275621656188764e-04,1.300856406740597557e-04,1.088263113284397853e-04,1.104977038827086933e-04,1.583110954216201049e-04
|
1.000000000000000021e-03,5.724140197507473007e-04,3.733844159930685934e-04,2.496848484812796650e-04,1.739779315547772373e-04,1.297217884948703216e-04,1.082572552711356679e-04,1.094403070125688193e-04,1.555589173140119988e-04
|
||||||
1.000000000000000021e-03,5.716575664778975139e-04,3.725901351223118402e-04,2.490209518882956956e-04,1.734592774731394025e-04,1.293215843757922266e-04,1.079481792373105579e-04,1.092239503861538297e-04,1.555962288273640454e-04
|
1.000000000000000021e-03,5.716133163514535006e-04,3.724872615728835922e-04,2.488519667094108378e-04,1.732106573421359136e-04,1.289599119326889729e-04,1.073839886960488172e-04,1.081795839980315968e-04,1.528943685588057789e-04
|
||||||
1.000000000000000021e-03,5.708579584178212615e-04,3.716949912014026899e-04,2.481903820156593069e-04,1.726943281050015661e-04,1.285619816677677630e-04,1.070771097820554131e-04,1.079648627815312081e-04,1.529279069228532445e-04
|
1.000000000000000021e-03,5.708135916089464952e-04,3.715921440481619780e-04,2.480217821880964816e-04,1.724467146387093834e-04,1.282024761936270685e-04,1.065177436423506841e-04,1.069333674890963240e-04,1.502754491507743331e-04
|
||||||
1.000000000000000021e-03,5.700593240595020362e-04,3.708018755033176054e-04,2.473624982033243466e-04,1.719326971657234189e-04,1.278068045492097274e-04,1.062130442456755448e-04,1.067202699871894330e-04,1.503053277730467872e-04
|
1.000000000000000021e-03,5.700148410279018158e-04,3.706990553358867476e-04,2.471942832207120249e-04,1.716860865497342535e-04,1.274494533371790404e-04,1.056584617232978574e-04,1.057014883248694426e-04,1.477013737020834935e-04
|
||||||
1.000000000000000021e-03,5.692616589508734098e-04,3.699107800243283187e-04,2.465372888514933574e-04,1.711743678703278799e-04,1.270560252111956913e-04,1.053559244063845252e-04,1.054900029091859618e-04,1.477277031714797602e-04
|
1.000000000000000021e-03,5.692170601522963469e-04,3.698079874222007994e-04,2.463694581964103098e-04,1.709287562926333241e-04,1.267008156164750913e-04,1.048060850476081559e-04,1.044837793145218324e-04,1.451713702741069042e-04
|
||||||
1.000000000000000021e-03,5.684668249800580104e-04,3.690236622787805977e-04,2.457163959794073484e-04,1.704206404911772779e-04,1.263106878677109810e-04,1.045066466916437628e-04,1.042749156168111009e-04,1.451958181660296986e-04
|
1.000000000000000021e-03,5.684221107462931718e-04,3.689208973051672467e-04,2.455489480245545849e-04,1.701760222502850749e-04,1.259576042689529907e-04,1.039615052862917467e-04,1.032810864032787402e-04,1.426862118551680341e-04
|
||||||
1.000000000000000021e-03,5.676748100054150635e-04,3.681404996529084395e-04,2.448997907163580324e-04,1.696714800685054925e-04,1.255707452244580493e-04,1.036651297187654374e-04,1.030748062779383314e-04,1.427088285865420875e-04
|
1.000000000000000021e-03,5.676299806599446841e-04,3.680377623533836952e-04,2.447327238198633678e-04,1.694278494753442496e-04,1.252197721019686588e-04,1.031246414956518974e-04,1.020932099638295122e-04,1.402450714512258731e-04
|
||||||
1.000000000000000021e-03,5.668856019606317766e-04,3.672612697075048303e-04,2.440874444423345342e-04,1.689268519744038289e-04,1.248361504800705925e-04,1.028312930702206035e-04,1.018894759794533339e-04,1.402659065748177792e-04
|
1.000000000000000021e-03,5.668406578186927338e-04,3.671585601102087264e-04,2.439207569480618843e-04,1.686842033525584789e-04,1.244872724153648453e-04,1.022954136930148580e-04,1.009199532576916553e-04,1.378471380449364540e-04
|
||||||
1.000000000000000021e-03,5.660978860040193896e-04,3.663833351346186431e-04,2.432754355983019401e-04,1.681813812071888568e-04,1.240994738987429935e-04,1.019939514788640786e-04,1.006986246362622330e-04,1.378144424939918523e-04
|
1.000000000000000021e-03,5.660528798623399357e-04,3.662807588285737852e-04,2.431092838206291959e-04,1.679399278621275505e-04,1.237529841606189703e-04,1.014631173867882653e-04,9.974194130068655907e-05,1.354424501489320950e-04
|
||||||
1.000000000000000021e-03,5.653129566917403656e-04,3.655093013788168949e-04,2.424676550876819162e-04,1.674404214250226010e-04,1.233681396595080271e-04,1.011643116013039457e-04,9.952262825359122704e-05,1.354072260989254840e-04
|
1.000000000000000021e-03,5.652678887062091489e-04,3.654068578608936813e-04,2.423020363044335113e-04,1.672001557892942780e-04,1.230240193993821724e-04,1.006384714692423982e-04,9.857860748076281341e-05,1.330810886504238974e-04
|
||||||
1.000000000000000021e-03,5.645308021917731225e-04,3.646391464999218838e-04,2.416640749146854532e-04,1.667039386446287719e-04,1.226421015627000995e-04,1.003422934745905857e-04,9.836128786277046102e-05,1.330434286087782230e-04
|
1.000000000000000021e-03,5.644856725120149217e-04,3.645368352560149003e-04,2.414989864020476457e-04,1.664648531857207327e-04,1.223003320760450115e-04,9.982139651422967225e-05,9.742975533494338731e-05,1.307622432316707048e-04
|
||||||
1.000000000000000021e-03,5.637533512715803535e-04,3.637748048842355184e-04,2.408662573039999728e-04,1.659731272165147797e-04,1.219222820499958832e-04,9.952864742131557339e-05,9.721524794079934454e-05,1.307234068834026641e-04
|
1.000000000000000021e-03,5.637081598516872297e-04,3.636726247466106157e-04,2.407016951041400575e-04,1.657352124900924413e-04,1.215828418563276393e-04,9.901263879559620603e-05,9.629602344691408898e-05,1.284862679388324466e-04
|
||||||
1.000000000000000021e-03,5.629805832911210584e-04,3.629162394326295588e-04,2.400741573155354143e-04,1.652479360999081315e-04,1.212086174287677493e-04,9.872327382660381703e-05,9.608428430098295324e-05,1.284463004684426848e-04
|
1.000000000000000021e-03,5.629353300793490293e-04,3.628141892281135789e-04,2.399101174854294510e-04,1.650111827309744587e-04,1.208714852573268089e-04,9.821209936496322563e-05,9.517719041742417905e-05,1.262523213089875105e-04
|
||||||
1.000000000000000021e-03,5.622124777547171659e-04,3.620634133660168507e-04,2.392877304473862261e-04,1.645283148026117340e-04,1.205010447638324016e-04,9.792607442008048754e-05,9.496817636981473815e-05,1.262112668660531425e-04
|
1.000000000000000021e-03,5.621671626935266465e-04,3.619614919160761232e-04,2.391242090587739641e-04,1.642927134849468424e-04,1.201661995513669139e-04,9.741968060975319133e-05,9.407303841474721877e-05,1.240595794224424390e-04
|
||||||
1.000000000000000021e-03,5.614490142952067260e-04,3.612162901840461500e-04,2.385069325732311319e-04,1.638142133018547766e-04,1.197995017798251111e-04,9.713695214164584071e-05,9.386670693673759554e-05,1.240174806289624668e-04
|
1.000000000000000021e-03,5.614036373218869204e-04,3.611144963064036881e-04,2.383439257149278542e-04,1.635797548004748762e-04,1.194669226721670609e-04,9.663528612429730903e-05,9.298335293466474341e-05,1.219072350364201328e-04
|
||||||
1.000000000000000021e-03,5.606917876274927293e-04,3.603765175920537237e-04,2.377331235014221514e-04,1.631066878653574946e-04,1.191048135885559178e-04,9.635658300529022745e-05,9.278045936752733660e-05,1.218652818497198865e-04
|
1.000000000000000021e-03,5.606463485664969944e-04,3.602748496609082000e-04,2.375706263435288989e-04,1.628733614326239394e-04,1.187744774441648902e-04,9.585958850070355037e-05,9.190871230268097864e-05,1.197956257524449784e-04
|
||||||
1.000000000000000021e-03,5.599407711882442139e-04,3.595440474626148916e-04,2.369662455139816704e-04,1.624056743525901679e-04,1.184169030927857740e-04,9.558485302446070387e-05,9.170919453133945438e-05,1.197538170918552259e-04
|
1.000000000000000021e-03,5.598952698555576370e-04,3.594425038433207622e-04,2.368042532426757629e-04,1.621734693226255697e-04,1.180887870128607769e-04,9.509247448928166366e-05,9.084888029067286991e-05,1.177239166851852087e-04
|
||||||
1.000000000000000021e-03,5.591959386362445371e-04,3.587188321446053963e-04,2.362062415256148103e-04,1.617111093879153761e-04,1.177356942042864595e-04,9.482164989506947420e-05,9.065267746151001182e-05,1.176822517560764241e-04
|
1.000000000000000021e-03,5.591503748394264367e-04,3.586174111937711294e-04,2.360447493430869353e-04,1.614800151758654528e-04,1.174097755299612002e-04,9.433383251239638840e-05,8.980362478385646723e-05,1.156912913627774928e-04
|
||||||
1.000000000000000021e-03,5.584679347085343051e-04,3.579204847030152616e-04,2.354801209260217886e-04,1.610571916563278928e-04,1.171042314833950021e-04,9.412413419793498636e-05,8.969710985766721223e-05,1.158171674873524301e-04
|
1.000000000000000021e-03,5.584225591487143505e-04,3.578196518919505740e-04,2.353197697834314708e-04,1.608280111225492105e-04,1.167814916834832538e-04,9.364209834454310303e-05,8.886089862139266997e-05,1.138670987493162862e-04
|
||||||
1.000000000000000021e-03,5.577460350040716044e-04,3.571292104088583889e-04,2.347605938090600918e-04,1.604093154405005178e-04,1.164788453357124725e-04,9.343405219685640224e-05,8.875393403591714169e-05,1.139848385910069905e-04
|
1.000000000000000021e-03,5.577008468242452242e-04,3.570289620106132170e-04,2.346013750077580542e-04,1.601820316992516276e-04,1.161592518078891664e-04,9.295772679954118940e-05,8.793036528463705852e-05,1.120748093307471799e-04
|
||||||
1.000000000000000021e-03,5.570302142000897652e-04,3.563449642017089015e-04,2.340476072540025119e-04,1.597674235279283352e-04,1.158594695166401697e-04,9.275131062844492946e-05,8.782296490203555085e-05,1.121846347113116888e-04
|
1.000000000000000021e-03,5.569852125454166723e-04,3.562452965139748743e-04,2.338895121728417183e-04,1.595420198714332595e-04,1.155429900504064843e-04,9.228062559771084612e-05,8.701184300011380421e-05,1.103138112316197746e-04
|
||||||
1.000000000000000021e-03,5.563205323021954991e-04,3.555677864531773679e-04,2.333411773810724506e-04,1.591315117132938270e-04,1.152460793074575203e-04,9.207585166649024939e-05,8.690405384945894284e-05,1.104159825692847303e-04
|
1.000000000000000021e-03,5.562757163116399499e-04,3.554686957703368042e-04,2.331841974232642283e-04,1.589079715282182140e-04,1.149326819589807311e-04,9.161073769793274093e-05,8.610518609906000706e-05,1.085835484715731990e-04
|
||||||
1.000000000000000021e-03,5.556169640414684949e-04,3.547976323593042547e-04,2.326412517183593022e-04,1.585015234268918286e-04,1.146386094395640093e-04,9.140758389001004606e-05,8.599702078916069998e-05,1.086782756746748250e-04
|
1.000000000000000021e-03,5.555723328562507538e-04,3.546991150005096983e-04,2.324853783642831767e-04,1.582798302759657303e-04,1.143282626503791007e-04,9.094797264045832242e-05,8.521021771090780625e-05,1.068834322603653324e-04
|
||||||
1.000000000000000021e-03,5.549194843577821444e-04,3.540344575531629255e-04,2.319477783590319386e-04,1.578774027587701891e-04,1.140369954748351631e-04,9.074641718074756330e-05,8.510168863112195785e-05,1.069709201912467553e-04
|
1.000000000000000021e-03,5.548750371213563657e-04,3.539365098621276230e-04,2.317930031654593444e-04,1.576575403787569985e-04,1.137296680667903865e-04,9.029224125378113518e-05,8.432676390648500317e-05,1.052128860599020399e-04
|
||||||
1.000000000000000021e-03,5.542280683854123842e-04,3.532782180675540329e-04,2.312607059053527040e-04,1.572590943887706505e-04,1.134411737206307899e-04,9.009226260907148270e-05,8.421788308143062266e-05,1.052933342707317640e-04
|
1.000000000000000021e-03,5.541838042439771635e-04,3.531808364136874187e-04,2.311070205067102163e-04,1.570410466910287454e-04,1.131368348940622735e-04,8.964345554504144940e-05,8.345465350366406993e-05,1.035713449503019397e-04
|
||||||
1.000000000000000021e-03,5.535435592528614506e-04,3.525297669260542646e-04,2.305807244353639423e-04,1.566471216497641210e-04,1.128515385449576329e-04,8.944542244330133641e-05,8.334582247054855841e-05,1.036454797753234207e-04
|
1.000000000000000021e-03,5.534994772986728557e-04,3.524329474767404734e-04,2.304281200650363333e-04,1.564308719194829761e-04,1.125501566344392631e-04,8.900191672771989599e-05,8.259410426967044201e-05,1.019587783174918249e-04
|
||||||
1.000000000000000021e-03,5.528659293179593237e-04,3.517890550472092793e-04,2.299077767025847687e-04,1.560414233076215052e-04,1.122680202866636689e-04,8.880580140054516926e-05,8.248532556564376009e-05,1.020267728319692934e-04
|
1.000000000000000021e-03,5.528220286453137825e-04,3.516927939956549431e-04,2.297562446752235638e-04,1.558269550144645319e-04,1.119695640249353838e-04,8.836753049012398612e-05,8.174493812638424233e-05,1.003746189891791522e-04
|
||||||
1.000000000000000021e-03,5.521951511907441769e-04,3.510560338657343622e-04,2.292418061160320900e-04,1.554419388795865483e-04,1.116905502099227850e-04,8.817330560855271690e-05,8.163621425685595255e-05,1.004366420798761639e-04
|
1.000000000000000021e-03,5.521514308959529988e-04,3.509603274307335013e-04,2.290913378267074509e-04,1.552292356754889449e-04,1.113949887224841186e-04,8.774020391605217217e-05,8.090698006040516024e-05,9.881831191717569708e-05
|
||||||
1.000000000000000021e-03,5.515357570680511773e-04,3.503384240935171457e-04,2.285926195257032088e-04,1.548599664871607589e-04,1.111316359132737570e-04,8.756139732097920178e-05,8.081143045355856274e-05,9.887558842870256459e-05
|
1.000000000000000021e-03,5.514925705077818562e-04,3.502439423799475968e-04,2.284441610897542578e-04,1.546502536108915020e-04,1.108405451476827762e-04,8.713560862370903280e-05,8.009669495978734939e-05,9.729798207441842409e-05
|
||||||
1.000000000000000021e-03,5.508831499695134287e-04,3.496283778737561509e-04,2.279502431225978031e-04,1.542840041018178729e-04,1.105785086338880569e-04,8.695624145470242240e-05,7.999741899881025698e-05,9.734197099681332458e-05
|
1.000000000000000021e-03,5.508404954145605355e-04,3.495351144497065954e-04,2.278037808073336661e-04,1.540772565128698055e-04,1.102918428934658313e-04,8.653767235071846409e-05,7.929694151393572473e-05,9.580416231533655223e-05
|
||||||
1.000000000000000021e-03,5.502373034395177318e-04,3.489258487042028742e-04,2.273146231686837553e-04,1.537139948092133693e-04,1.100311043442569531e-04,8.635775141128424154e-05,7.919401605398894981e-05,9.583525507692383649e-05
|
1.000000000000000021e-03,5.501951791779016417e-04,3.488337972114359704e-04,2.271701434112839691e-04,1.535101877933933972e-04,1.097488185619751536e-04,8.594630990981442489e-05,7.850756016455258672e-05,9.433633928045583440e-05
|
||||||
1.000000000000000021e-03,5.495982753581815606e-04,3.482308738101717264e-04,2.266857730549029851e-04,1.531499327576744506e-04,1.094893985055618503e-04,8.576587362490598130e-05,7.840109070036870779e-05,9.435495486246966317e-05
|
1.000000000000000021e-03,5.495566796872157793e-04,3.481400279377950191e-04,2.265432624126748171e-04,1.529490418493457818e-04,1.092114481281042810e-04,8.536146896299809861e-05,7.772842391839215501e-05,9.289404738934854406e-05
|
||||||
1.000000000000000021e-03,5.489660394111083985e-04,3.475434070850742167e-04,2.260636396270461598e-04,1.525917617808240120e-04,1.089533281238570496e-04,8.518052329278025009e-05,7.761848365092111231e-05,9.290055631012179708e-05
|
1.000000000000000021e-03,5.489249706454161527e-04,3.474537605956091817e-04,2.259230848255512310e-04,1.523937628358645337e-04,1.086796692149487770e-04,8.478306608188779627e-05,7.695937762456762194e-05,9.147679298288125297e-05
|
||||||
1.000000000000000021e-03,5.483405695169031721e-04,3.468634028939242666e-04,2.254481703234268038e-04,1.520394263837190755e-04,1.084228310216190315e-04,8.460161684084565312e-05,7.684603831721497692e-05,9.147155629123523643e-05
|
1.000000000000000021e-03,5.483000259883204826e-04,3.467749496226811058e-04,2.253095582547179863e-04,1.518442955755717951e-04,1.081534202533376696e-04,8.421101904463252675e-05,7.620026875215024978e-05,9.008409282780761526e-05
|
||||||
1.000000000000000021e-03,5.477218398160970184e-04,3.461908160447295835e-04,2.248393131323322177e-04,1.514928716901747189e-04,1.078978457743454979e-04,8.402907183940372035e-05,7.608360066029366266e-05,9.006746210081428210e-05
|
1.000000000000000021e-03,5.476818198739591458e-04,3.461035499001802445e-04,2.247026308546789793e-04,1.513005855077949086e-04,1.076326404207925846e-04,8.364524675486820964e-05,7.545094724756280888e-05,8.871547365198851438e-05
|
||||||
1.000000000000000021e-03,5.471100509830739483e-04,3.455258336641454844e-04,2.242372067336963117e-04,1.509521904405796073e-04,1.073784265457052923e-04,8.346290305268591516e-05,7.533111218717854750e-05,8.868791149478115541e-05
|
1.000000000000000021e-03,5.470705529810189179e-04,3.454397485743721506e-04,2.241024413587690614e-04,1.507627254998857578e-04,1.071173841908876651e-04,8.308576484396013343e-05,7.471135773791005180e-05,8.737059031219478156e-05
|
||||||
1.000000000000000021e-03,5.465051768578450733e-04,3.448684100639811626e-04,2.236417986238402995e-04,1.504173273640432558e-04,1.068645117117092864e-04,8.290302835464549746e-05,7.458842111919879593e-05,8.733242665255502488e-05
|
1.000000000000000021e-03,5.464661991670638182e-04,3.447835000304132159e-04,2.235089374295866490e-04,1.502306605954647535e-04,1.066075905365267742e-04,8.253249249775968508e-05,7.398135232542971769e-05,8.604898363826276057e-05
|
||||||
1.000000000000000021e-03,5.459071915129861232e-04,3.442185000233075119e-04,2.230530368831633737e-04,1.498882278486614187e-04,1.063560404456327061e-04,8.234936680962616474e-05,7.385537825478157199e-05,8.600053991717240256e-05
|
1.000000000000000021e-03,5.458687325221291348e-04,3.441347591201103138e-04,2.229220673120790245e-04,1.497043364932862668e-04,1.061031992194506256e-04,8.198535007121052676e-05,7.326078561528488937e-05,8.475020417489323324e-05
|
||||||
1.000000000000000021e-03,5.453277270883248422e-04,3.435968835063559607e-04,2.224987019123045480e-04,1.493989071766017103e-04,1.058939742146122178e-04,8.185283432112488435e-05,7.320083692872619591e-05,8.480120525436834187e-05
|
1.000000000000000021e-03,5.452901895090844558e-04,3.435150570304173014e-04,2.223706511768525117e-04,1.492190839480494894e-04,1.056468106030715887e-04,8.149737756206330190e-05,7.262157722718122260e-05,8.358877577600780481e-05
|
||||||
1.000000000000000021e-03,5.447550756300442850e-04,3.429826158632724655e-04,2.219507707465509202e-04,1.489150144895505707e-04,1.054368625228528346e-04,8.136171358212484941e-05,7.255437084770181432e-05,8.362138199130290570e-05
|
1.000000000000000021e-03,5.447184570616723891e-04,3.429026954804162766e-04,2.218256219048080177e-04,1.487392297472955698e-04,1.051953246672348403e-04,8.101471604563164947e-05,7.199020130947719233e-05,8.244600742971828849e-05
|
||||||
1.000000000000000021e-03,5.441892122953419404e-04,3.423756544954533452e-04,2.214091954721005766e-04,1.484365007267826825e-04,1.049846526338566485e-04,8.087593753205775274e-05,7.191586230794716592e-05,8.246071125248328093e-05
|
1.000000000000000021e-03,5.441535103689846154e-04,3.422976319891982578e-04,2.212869318272295087e-04,1.482647252612499030e-04,1.047486894350850925e-04,8.053730000430466094e-05,7.136654438032706549e-05,8.132155926679031160e-05
|
||||||
1.000000000000000021e-03,5.436257869834306257e-04,3.417717090501741430e-04,2.208705585733095858e-04,1.479607869104501987e-04,1.045353737048878776e-04,8.039389156994272538e-05,7.128377081045688692e-05,8.131715986317171246e-05
|
1.000000000000000021e-03,5.435909997143165834e-04,3.416955774702987799e-04,2.207511658034611989e-04,1.477929951923679644e-04,1.043049394866297369e-04,8.006352324306285982e-05,7.074908147590525608e-05,8.021344078389119761e-05
|
||||||
1.000000000000000021e-03,5.430647907230928004e-04,3.411707635569704330e-04,2.203348411819341208e-04,1.474878525008424264e-04,1.040890016129762040e-04,7.991554062444546221e-05,7.065802258502740848e-05,8.019045690600123673e-05
|
1.000000000000000021e-03,5.430309161342643806e-04,3.410965159927432586e-04,2.202183050641030458e-04,1.473240192034464783e-04,1.038640511149413747e-04,7.959335168171117276e-05,7.013774197495506457e-05,7.912139691327875046e-05
|
||||||
1.000000000000000021e-03,5.425062145452035425e-04,3.405728020832017003e-04,2.198020245085192449e-04,1.470176770797095381e-04,1.036455124224165388e-04,7.944084996986793814e-05,7.003854478529189314e-05,7.908033605497744685e-05
|
1.000000000000000021e-03,5.424732506674768149e-04,3.405004316631486216e-04,2.196883309178195964e-04,1.468577770769967101e-04,1.034260007962051111e-04,7.912675157408064104e-05,6.953245613429904408e-05,7.804517686317993341e-05
|
||||||
1.000000000000000021e-03,5.419500494783734655e-04,3.399778087230425684e-04,2.192720898259863408e-04,1.465502403299397984e-04,1.032048823605461293e-04,7.896978519468913008e-05,6.942526543493823701e-05,7.798653539704048551e-05
|
1.000000000000000021e-03,5.419179943504857889e-04,3.399073086151600896e-04,2.191612247355960430e-04,1.463942486957527610e-04,1.029907651665082401e-04,7.866368947795671801e-05,6.893315503775990498e-05,7.698453395110452940e-05
|
||||||
1.000000000000000021e-03,5.413941311127808435e-04,3.393835756573481376e-04,2.187432334857416756e-04,1.460841531649274296e-04,1.027660304092932323e-04,7.850144313387483587e-05,6.881729624423716459e-05,7.690779566810491681e-05
|
1.000000000000000021e-03,5.413629828746738867e-04,3.393149394667066966e-04,2.186351838182767991e-04,1.459320465988429058e-04,1.025572658029062702e-04,7.820326658601671303e-05,6.833895931108436813e-05,7.593823716905742757e-05
|
||||||
1.000000000000000021e-03,5.408384570747234218e-04,3.387900992487282684e-04,2.182154508640741402e-04,1.456194096560940569e-04,1.023289477092565169e-04,7.803580657419308998e-05,6.821458972979072498e-05,7.584390730667668775e-05
|
1.000000000000000021e-03,5.408082138671730385e-04,3.387233205925343745e-04,2.181102035828516778e-04,1.454711649598321068e-04,1.021254940975202248e-04,7.774546638666711494e-05,6.774982397495531476e-05,7.490609035628451105e-05
|
||||||
1.000000000000000021e-03,5.402830249660243826e-04,3.381973758275843189e-04,2.176887373150658610e-04,1.451560038709627043e-04,1.018936254270842219e-04,7.757285840469518032e-05,6.761709884283491779e-05,7.479466373034050742e-05
|
1.000000000000000021e-03,5.402536849306272763e-04,3.381324483351249330e-04,2.175862794239174624e-04,1.450115979478540569e-04,1.016954414669310805e-04,7.729027246482876178e-05,6.716570445567967391e-05,7.388790009412213962e-05
|
||||||
1.000000000000000021e-03,5.397131798668998448e-04,3.375789411508863902e-04,2.171273238640323091e-04,1.446496280566233409e-04,1.014059885387841374e-04,7.704415358894297196e-05,6.692941074150365747e-05,7.359880640935691578e-05
|
1.000000000000000021e-03,5.396844473492076093e-04,3.375153269484326116e-04,2.170269255797531330e-04,1.445081577421817903e-04,1.012119806681102793e-04,7.676796353167371053e-05,6.648955946153636300e-05,7.272015355307609235e-05
|
||||||
1.000000000000000021e-03,5.391436022217508317e-04,3.369613465901344558e-04,2.165671485747253328e-04,1.441448734692186333e-04,1.009205829600201576e-04,7.651897498112265308e-05,6.624864922679121694e-05,7.242198835523922060e-05
|
1.000000000000000021e-03,5.391154759339646064e-04,3.368990409960971838e-04,2.164687998325534753e-04,1.440063199340409466e-04,1.007307157169936256e-04,7.624910690660518565e-05,6.582015362379603355e-05,7.157078178685281889e-05
|
||||||
1.223599761281599736e-03,2.870574988594920204e-03,5.410558860144323162e-03,9.740321680379944794e-03,1.718226620812626088e-02,3.032327552654904765e-02,5.460894525232919822e-02,1.025522470341594938e-01,2.059999999999999887e-01
|
1.174325560395078800e-03,2.755298774803674553e-03,5.194387759090383395e-03,9.354521953613973567e-03,1.651171618252517473e-02,2.916966879690554432e-02,5.262163370571950466e-02,9.910396847768351836e-02,2.000000000000000111e-01
|
||||||
4.083745694274921144e-03,8.369042825128880300e-03,1.439530071705045523e-02,2.397223043565064812e-02,3.897486419880552555e-02,6.202545653148217042e-02,9.626510461383173956e-02,1.437785279168776742e-01,2.000000000000000111e-01
|
4.160571131359890040e-03,8.527170824088577475e-03,1.466969461393815427e-02,2.443642414582058997e-02,3.975038656808106002e-02,6.331729118004528201e-02,9.842489957479945428e-02,1.474045868235714374e-01,2.059999999999999887e-01
|
||||||
|
|||||||
|
@@ -1,97 +1,97 @@
|
|||||||
,signal,ase,nli
|
,Unnamed: 0,signal,ase,nli
|
||||||
0,0.0002866683470642085,3.455694800734997e-08,2.1767706055953313e-07
|
0,0,0.00028461768874888705,3.436639817118301e-08,2.1584395398371026e-07
|
||||||
1,0.0002842930902246378,3.4445260342151434e-08,2.20064716108892e-07
|
1,1,0.00028211666293476406,3.423996759499589e-08,2.1809245861954257e-07
|
||||||
2,0.00028193841273409963,3.4334217950641774e-08,2.2239856929822977e-07
|
2,2,0.0002796385058453953,3.411427963331182e-08,2.2028548201656645e-07
|
||||||
3,0.0002796041237984927,3.422381587730477e-08,2.2467937700272344e-07
|
3,3,0.0002771829951915728,3.398932824433299e-08,2.224238538437057e-07
|
||||||
4,0.00027589218358262,3.3956266402003705e-08,2.2576401766047814e-07
|
4,4,0.00027338904730863836,3.371109366484941e-08,2.2339638015421542e-07
|
||||||
5,0.0002722303444814487,3.3690926476196685e-08,2.2678094635121413e-07
|
5,5,0.0002696478418176822,3.3435235312069656e-08,2.2430128879557504e-07
|
||||||
6,0.00026861791294303266,3.342777134334201e-08,2.2773179097640802e-07
|
6,6,0.00026595862771951147,3.316172589770091e-08,2.2514026889123164e-07
|
||||||
7,0.00026505174756069215,3.316675429137828e-08,2.2861602718115889e-07
|
7,7,0.0002623182345801782,3.289051654795761e-08,2.2591288176837496e-07
|
||||||
8,0.0002615312775878486,3.290785186664305e-08,2.294352005376256e-07
|
8,8,0.00025872603823298804,3.262158136113203e-08,2.2662073272007013e-07
|
||||||
9,0.0002577007690018081,3.26092154155734e-08,2.2987401053105823e-07
|
9,9,0.0002548422077504841,3.231480491053109e-08,2.269632917207947e-07
|
||||||
10,0.00025392474812815994,3.231329178154223e-08,2.3024928325076607e-07
|
10,10,0.0002510150800727548,3.201089350512762e-08,2.2724305184561305e-07
|
||||||
11,0.0002501957390130402,3.201993265117851e-08,2.3055653947072044e-07
|
11,11,0.0002472372108596339,3.1709697987730424e-08,2.274556638142854e-07
|
||||||
12,0.0002465133077961936,3.172911082648897e-08,2.3079745224174315e-07
|
12,12,0.0002435081184388883,3.1411188710954923e-08,2.2760284870806473e-07
|
||||||
13,0.00024287702172285261,3.144079924487205e-08,2.309736700807475e-07
|
13,13,0.0002398273228957255,3.1115336193393125e-08,2.2768630096746835e-07
|
||||||
14,0.00023918644496802598,3.1142660565561954e-08,2.3099023972100006e-07
|
14,14,0.00023610099948769217,3.081056270085416e-08,2.27617695956038e-07
|
||||||
15,0.00023554415781363666,3.084719002003063e-08,2.3094533745656626e-07
|
15,15,0.00023242489102440902,3.050859262250336e-08,2.274887362838919e-07
|
||||||
16,0.0002319496781605366,3.0554358283826426e-08,2.3084061926161906e-07
|
16,16,0.00022879847092097078,3.020939430576677e-08,2.273011122655665e-07
|
||||||
17,0.000228402746264896,3.026413819712743e-08,2.306779372506828e-07
|
17,17,0.00022522143236587835,2.991293825364657e-08,2.27056704831033e-07
|
||||||
18,0.00022490287297566154,2.997650061885732e-08,2.2679314039447925e-07
|
18,18,0.00022169324298613107,2.9619193056612953e-08,2.2315585168570266e-07
|
||||||
19,0.0002210339853226993,2.9639081336421986e-08,2.225476971173533e-07
|
19,19,0.0002178178461312317,2.9278097616561043e-08,2.189169855906453e-07
|
||||||
20,0.00021722472675673681,2.9305156366940595e-08,2.1837424228396343e-07
|
20,20,0.0002140033759047069,2.8940600865395135e-08,2.1475128288390263e-07
|
||||||
21,0.00021347443350916938,2.8974683300060073e-08,2.1427183120915025e-07
|
21,21,0.00021024912752446947,2.8606658136588645e-08,2.1065775386659407e-07
|
||||||
22,0.00020978233224910872,2.864761802749998e-08,2.1023941353936252e-07
|
22,22,0.000206554289175574,2.827622313698371e-08,2.0663530613832196e-07
|
||||||
23,0.0002061476568412488,2.832391679540816e-08,2.0627595093585302e-07
|
23,23,0.00020291805701626135,2.7949249962519028e-08,2.0268286030011824e-07
|
||||||
24,0.0002028237056285935,2.8034565895618217e-08,2.0263423697267893e-07
|
24,24,0.00019961589106178864,2.765975998385304e-08,1.9907485701921993e-07
|
||||||
25,0.00019954715529254185,2.7748013284124615e-08,1.9905015325521452e-07
|
25,25,0.00019636137150032674,2.7373095433009936e-08,1.9552454239910457e-07
|
||||||
26,0.0001963174528000437,2.7464226779716075e-08,1.9552292765090665e-07
|
26,26,0.0001931539326017224,2.7089223372231097e-08,1.9203113225618846e-07
|
||||||
27,0.00019313475803109547,2.718318103861899e-08,1.920525003885138e-07
|
27,27,0.00018999370973089413,2.68081175642488e-08,1.885945418493717e-07
|
||||||
28,0.00018999848980183525,2.6904843987797665e-08,1.8863807494364378e-07
|
28,28,0.00018688010986276862,2.6529745205109403e-08,1.8521396370161997e-07
|
||||||
29,0.00018690807208013476,2.6629183784477213e-08,1.852788635171717e-07
|
29,29,0.00018381254538966195,2.6254073731438793e-08,1.818885993764317e-07
|
||||||
30,0.00018386293497138034,2.635616888672288e-08,1.8197408797080072e-07
|
30,30,0.00018079043504395085,2.5981070886269e-08,1.78617660347401e-07
|
||||||
31,0.0001808626075954048,2.608576967648626e-08,1.7872307155753016e-07
|
31,31,0.00017781329518445636,2.5710706310905614e-08,1.7540045799671345e-07
|
||||||
32,0.00017790652540681915,2.5817954962418864e-08,1.7552504805064169e-07
|
32,32,0.00017488055045064023,2.544294811944895e-08,1.7223621637516225e-07
|
||||||
33,0.00017499412908771533,2.5552693765056307e-08,1.723792598876346e-07
|
33,33,0.00017199163096488036,2.5177764647772334e-08,1.691241684952796e-07
|
||||||
34,0.0001721914205512116,2.529821177538242e-08,1.69350416018518e-07
|
34,34,0.00016923198600435235,2.4926164244345613e-08,1.6614800249846462e-07
|
||||||
35,0.00016942913344260413,2.5046172734840803e-08,1.663699885487624e-07
|
35,35,0.00016651223518287261,2.4676978561810828e-08,1.632195038378843e-07
|
||||||
36,0.0001667067703020692,2.4796549229968703e-08,1.6343730102750106e-07
|
36,36,0.00016383188581753214,2.443018036493577e-08,1.6033800467387247e-07
|
||||||
37,0.00016402494737034808,2.4549324625938814e-08,1.602954566731582e-07
|
37,37,0.0001611915388800597,2.418575294396746e-08,1.5725354810318075e-07
|
||||||
38,0.0001613831201060569,2.430447139995257e-08,1.5720933628441338e-07
|
38,38,0.0001585906555197023,2.394366896238391e-08,1.5422386234766858e-07
|
||||||
39,0.00015878075021906192,2.406196225171638e-08,1.541780421866172e-07
|
39,39,0.00015602870309712287,2.3703901303924173e-08,1.5124806354481474e-07
|
||||||
40,0.00015621730558753943,2.3821770097360405e-08,1.5120068940449393e-07
|
40,40,0.0001535051551031788,2.3466423066629146e-08,1.4832528036973196e-07
|
||||||
41,0.000153694061439545,2.3583901792213434e-08,1.4827814327673852e-07
|
41,41,0.0001510212597387019,2.3231240549132765e-08,1.4545635735033158e-07
|
||||||
42,0.00015121040694331307,2.3348329147104765e-08,1.4540943949658482e-07
|
42,42,0.00014857641307701306,2.2998325757462813e-08,1.4264034538487909e-07
|
||||||
43,0.00014876574026315321,2.3115024224465226e-08,1.425936300160931e-07
|
43,43,0.00014617002011358969,2.276765094680208e-08,1.3987631140917146e-07
|
||||||
44,0.00014623043935025647,2.2864250993313975e-08,1.397065102093322e-07
|
44,44,0.00014368188097051016,2.252080862505795e-08,1.3704924606778587e-07
|
||||||
45,0.00014373723010448477,2.2616046400344574e-08,1.3687531950007013e-07
|
45,45,0.00014123500136325632,2.227648394665253e-08,1.342768563640109e-07
|
||||||
46,0.0001412854316913198,2.2370377299191064e-08,1.3409901704421416e-07
|
46,46,0.00013882871459443323,2.2034644371118186e-08,1.31558126246417e-07
|
||||||
47,0.00013887544742801196,2.2127221340618422e-08,1.313775961274423e-07
|
47,47,0.00013646341840215168,2.1795267893415555e-08,1.2889305332810146e-07
|
||||||
48,0.0001365065605420479,2.1886545482453933e-08,1.2870998887773554e-07
|
48,48,0.00013413841082142,2.155832207437193e-08,1.2628059500046815e-07
|
||||||
49,0.00013417806673897108,2.164831702445933e-08,1.2609514810979993e-07
|
49,49,0.00013185300210097483,2.132377480769977e-08,1.2371972883222934e-07
|
||||||
50,0.00013188927370907155,2.1412503578881085e-08,1.2353204666803017e-07
|
50,50,0.00012960651423053282,2.1091594291962705e-08,1.2120945193769904e-07
|
||||||
51,0.00012964085531237725,2.117909919147538e-08,1.2102094138348867e-07
|
51,51,0.00012739961074346843,2.0861774576065466e-08,1.1875002031242091e-07
|
||||||
52,0.00012743207116500861,2.094807084934547e-08,1.1856076487337955e-07
|
52,52,0.00012523156633255863,2.0634283235397628e-08,1.1634039147633555e-07
|
||||||
53,0.0001252621950917354,2.0719385892834214e-08,1.161504721855161e-07
|
53,53,0.00012310166960708747,2.0409088189365173e-08,1.1397954484148417e-07
|
||||||
54,0.00012308423338164536,2.0485363383535514e-08,1.1374627006340893e-07
|
54,54,0.00012096529298347188,2.0178855168888422e-08,1.1162594309222065e-07
|
||||||
55,0.00012094535834842106,2.0253755300794944e-08,1.1139168040879032e-07
|
55,55,0.00011886718830718708,1.9950983760858723e-08,1.093208043434055e-07
|
||||||
56,0.00011884484242431182,2.0024527468430072e-08,1.0897675288127846e-07
|
56,56,0.00011680664424128133,1.9725440474060072e-08,1.0695583879566178e-07
|
||||||
57,0.00011678298769107047,1.9797656169961167e-08,1.0661409941810817e-07
|
57,57,0.00011478396058700633,1.950220202088885e-08,1.0464196732373097e-07
|
||||||
58,0.0001147590394591346,1.9573107382367898e-08,1.0430256532408603e-07
|
58,58,0.00011279839933843229,1.9281235055452333e-08,1.0237806316789167e-07
|
||||||
59,0.00011277225867179729,1.935084744632288e-08,1.0204102225018314e-07
|
59,59,0.00011084923776207272,1.906250658388995e-08,1.0016302524437989e-07
|
||||||
60,0.00011082192110664448,1.913084301808743e-08,9.982836715827351e-08
|
60,60,0.00010893576763351642,1.884598391874928e-08,9.79957771514819e-08
|
||||||
61,0.00010890831555726861,1.8913080844667903e-08,9.76644171489201e-08
|
61,61,0.00010705827573621923,1.8631654017664683e-08,9.587614496435341e-08
|
||||||
62,0.00010703069380321927,1.8697527263494167e-08,9.554805889434612e-08
|
62,62,0.00010521603014069265,1.8419483867548078e-08,9.380304193213288e-08
|
||||||
63,0.00010518832400867466,1.8484148971365717e-08,9.347820572370307e-08
|
63,63,0.00010340831493293095,1.8209440802910146e-08,9.1775407295826e-08
|
||||||
64,0.00010353027948847247,1.8300360477604286e-08,9.158630538270034e-08
|
64,64,0.00010178667717264663,1.8029552937387797e-08,8.992671343771878e-08
|
||||||
65,0.00010190114820620951,1.8118339508838893e-08,8.97332684173061e-08
|
65,65,0.00010019319833745167,1.7851381317094802e-08,8.811583172055121e-08
|
||||||
66,0.00010030037817345079,1.7938063167097722e-08,8.791826040657302e-08
|
66,66,9.86273426809622e-05,1.767490377589294e-08,8.634195328719705e-08
|
||||||
67,9.872746699919663e-05,1.775950920143011e-08,8.614049912759125e-08
|
67,67,9.70886230248071e-05,1.7500098774413897e-08,8.460432022445385e-08
|
||||||
68,9.718188342878233e-05,1.7582655209782296e-08,8.439918541238176e-08
|
68,68,9.557652367577673e-05,1.7326944621204857e-08,8.290215772518696e-08
|
||||||
69,9.566310719955732e-05,1.740747903977101e-08,8.269353818341506e-08
|
69,69,9.409053958216297e-05,1.7155419863785074e-08,8.123470846820667e-08
|
||||||
70,9.417062845393912e-05,1.7233958752991638e-08,8.102279372648069e-08
|
70,70,9.263017577528553e-05,1.698550325493719e-08,7.960123192429599e-08
|
||||||
71,9.27044102709892e-05,1.7062082036004708e-08,7.938660156523957e-08
|
71,71,9.119540203213482e-05,1.681718296074974e-08,7.800139303615196e-08
|
||||||
72,9.12639411274833e-05,1.6891826998956218e-08,7.778420731697601e-08
|
72,72,8.978572151582878e-05,1.6650437769918198e-08,7.643446000507212e-08
|
||||||
73,8.984872036936478e-05,1.6723171993235663e-08,7.621487408851861e-08
|
73,73,8.840064792008674e-05,1.648524670194174e-08,7.489971794966337e-08
|
||||||
74,8.845926525396718e-05,1.6557077218868872e-08,7.467873241780861e-08
|
74,74,8.704752218385389e-05,1.6323921332107853e-08,7.340306015991841e-08
|
||||||
75,8.709405706837696e-05,1.6392620086127443e-08,7.352620174175576e-08
|
75,75,8.571782151670807e-05,1.616417166590195e-08,7.228178645083984e-08
|
||||||
76,8.575262707251024e-05,1.6229781230847938e-08,7.239374499535451e-08
|
76,76,8.441109599127084e-05,1.6005979385519616e-08,7.117988659258102e-08
|
||||||
77,8.44345490553445e-05,1.6068541919248203e-08,7.128100236441453e-08
|
77,77,8.312693723019766e-05,1.584932678267078e-08,7.009701621983393e-08
|
||||||
78,8.313937224726923e-05,1.5908883354530017e-08,7.018759330199112e-08
|
78,78,8.186491243372442e-05,1.569419608150936e-08,6.90328103730187e-08
|
||||||
79,8.18666553697718e-05,1.5750787028460176e-08,6.91131452736768e-08
|
79,79,8.062459786565112e-05,1.554056978222129e-08,6.798691173543069e-08
|
||||||
80,8.061596620368467e-05,1.5594234699428168e-08,6.80572933931087e-08
|
80,80,7.94055784447779e-05,1.538843064058219e-08,6.695897028871753e-08
|
||||||
81,7.93869860927298e-05,1.54392105845737e-08,6.701976864553917e-08
|
81,81,7.820755061857071e-05,1.523776381588298e-08,6.594873006137818e-08
|
||||||
82,7.81792957880057e-05,1.528569691328632e-08,6.600021709431229e-08
|
82,82,7.703011159024537e-05,1.5088552513719166e-08,6.495585139392737e-08
|
||||||
83,7.69924848842345e-05,1.5133676199095668e-08,6.499829226870119e-08
|
83,83,7.587286701386211e-05,1.494078021244127e-08,6.398000175307732e-08
|
||||||
84,7.592423495462984e-05,1.5006007729453082e-08,6.40964585216171e-08
|
84,84,7.483848702669918e-05,1.481852757489104e-08,6.310775801171533e-08
|
||||||
85,7.487323130273564e-05,1.4879695488874347e-08,6.320918435915818e-08
|
85,85,7.382059659354297e-05,1.4697575551136038e-08,6.224941913167962e-08
|
||||||
86,7.383915942693816e-05,1.475473179887786e-08,6.233620427401105e-08
|
86,86,7.281889798107282e-05,1.4577917663325962e-08,6.140473404853674e-08
|
||||||
87,7.282024738915393e-05,1.4631093950979863e-08,6.147602236758762e-08
|
87,87,7.183165666349203e-05,1.4459532716368791e-08,6.057224011868445e-08
|
||||||
88,7.181625694043332e-05,1.4508775744557438e-08,6.062843750629826e-08
|
88,88,7.08586484091438e-05,1.4342415672865158e-08,5.975174825816752e-08
|
||||||
89,7.082695384072487e-05,1.4387771381868581e-08,5.979325194092954e-08
|
89,89,6.989965271824705e-05,1.422656189652791e-08,5.8943072529944956e-08
|
||||||
90,6.985210770121701e-05,1.4268075471622408e-08,5.8970271173546604e-08
|
90,90,6.895445267562359e-05,1.411196715686287e-08,5.814603001970201e-08
|
||||||
91,6.889061932028676e-05,1.414966436041678e-08,5.8158567240485706e-08
|
91,91,6.802197391413278e-05,1.3998609279853771e-08,5.735971476442124e-08
|
||||||
92,6.79423037538828e-05,1.4032534237451406e-08,5.7357984009008465e-08
|
92,92,6.710204336793658e-05,1.3886485591019257e-08,5.6583980825863337e-08
|
||||||
93,6.700697867481953e-05,1.3916681725635683e-08,5.656836755557654e-08
|
93,93,6.619449037899918e-05,1.3775593851234834e-08,5.581868429617485e-08
|
||||||
94,6.594003301527265e-05,1.3765768410137306e-08,5.5667634894222326e-08
|
94,94,6.515268324911003e-05,1.3628882565600955e-08,5.494017759648076e-08
|
||||||
95,6.489000516837228e-05,1.3616343300622314e-08,5.4781184522010985e-08
|
95,95,6.412720169535454e-05,1.3483606920728348e-08,5.407543748332493e-08
|
||||||
|
|||||||
|
@@ -16,8 +16,9 @@ Transceiver trx_Stockholm
|
|||||||
PMD (ps): 0.00
|
PMD (ps): 0.00
|
||||||
PDL (dB): 0.00
|
PDL (dB): 0.00
|
||||||
Roadm roadm_Stockholm
|
Roadm roadm_Stockholm
|
||||||
effective loss (dB): 22.00
|
effective loss (dB): 22.00
|
||||||
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
|
||||||
@@ -30,6 +31,7 @@ Edfa Edfa_booster_roadm_Stockholm_to_fiber (Stockholm → Norrköping)_(1/2)
|
|||||||
Delta_P (dB): 0.00
|
Delta_P (dB): 0.00
|
||||||
target pch (dBm): 2.00
|
target pch (dBm): 2.00
|
||||||
effective pch (dBm): 2.00
|
effective pch (dBm): 2.00
|
||||||
|
actual pch out (dBm): 2.00
|
||||||
output VOA (dB): 0.00
|
output VOA (dB): 0.00
|
||||||
Fiber fiber (Stockholm → Norrköping)_(1/2)
|
Fiber fiber (Stockholm → Norrköping)_(1/2)
|
||||||
type_variety: SSMF
|
type_variety: SSMF
|
||||||
@@ -38,7 +40,8 @@ Fiber fiber (Stockholm → Norrköping)_(1/2)
|
|||||||
total loss (dB): 16.33
|
total loss (dB): 16.33
|
||||||
(includes conn loss (dB) in: 0.00 out: 0.00)
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
(conn loss out includes EOL margin defined in eqpt_config.json)
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
pch out (dBm): -14.33
|
reference pch out (dBm): -14.33
|
||||||
|
actual pch out (dBm): -14.31
|
||||||
Edfa Edfa_fiber (Stockholm → Norrköping)_(1/2)
|
Edfa Edfa_fiber (Stockholm → Norrköping)_(1/2)
|
||||||
type_variety: openroadm_ila_low_noise
|
type_variety: openroadm_ila_low_noise
|
||||||
effective gain(dB): 16.33
|
effective gain(dB): 16.33
|
||||||
@@ -51,6 +54,7 @@ Edfa Edfa_fiber (Stockholm → Norrköping)_(1/2)
|
|||||||
Delta_P (dB): 0.00
|
Delta_P (dB): 0.00
|
||||||
target pch (dBm): 2.00
|
target pch (dBm): 2.00
|
||||||
effective pch (dBm): 2.00
|
effective pch (dBm): 2.00
|
||||||
|
actual pch out (dBm): 2.02
|
||||||
output VOA (dB): 0.00
|
output VOA (dB): 0.00
|
||||||
Fiber fiber (Stockholm → Norrköping)_(2/2)
|
Fiber fiber (Stockholm → Norrköping)_(2/2)
|
||||||
type_variety: SSMF
|
type_variety: SSMF
|
||||||
@@ -59,7 +63,8 @@ Fiber fiber (Stockholm → Norrköping)_(2/2)
|
|||||||
total loss (dB): 16.33
|
total loss (dB): 16.33
|
||||||
(includes conn loss (dB) in: 0.00 out: 0.00)
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
(conn loss out includes EOL margin defined in eqpt_config.json)
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
pch out (dBm): -14.33
|
reference pch out (dBm): -14.33
|
||||||
|
actual pch out (dBm): -14.30
|
||||||
Edfa Edfa_preamp_roadm_Norrköping_from_fiber (Stockholm → Norrköping)_(2/2)
|
Edfa Edfa_preamp_roadm_Norrköping_from_fiber (Stockholm → Norrköping)_(2/2)
|
||||||
type_variety: openroadm_mw_mw_preamp
|
type_variety: openroadm_mw_mw_preamp
|
||||||
effective gain(dB): 16.33
|
effective gain(dB): 16.33
|
||||||
@@ -72,10 +77,12 @@ Edfa Edfa_preamp_roadm_Norrköping_from_fiber (Stockholm → Norrköping)_(2/2)
|
|||||||
Delta_P (dB): 0.00
|
Delta_P (dB): 0.00
|
||||||
target pch (dBm): 2.00
|
target pch (dBm): 2.00
|
||||||
effective pch (dBm): 2.00
|
effective pch (dBm): 2.00
|
||||||
|
actual pch out (dBm): 2.04
|
||||||
output VOA (dB): 0.00
|
output VOA (dB): 0.00
|
||||||
Roadm roadm_Norrköping
|
Roadm roadm_Norrköping
|
||||||
effective loss (dB): 22.00
|
effective loss (dB): 22.00
|
||||||
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
|
||||||
@@ -88,6 +95,7 @@ Edfa Edfa_booster_roadm_Norrköping_to_fiber (Norrköping → Linköping)
|
|||||||
Delta_P (dB): 0.00
|
Delta_P (dB): 0.00
|
||||||
target pch (dBm): 2.00
|
target pch (dBm): 2.00
|
||||||
effective pch (dBm): 2.00
|
effective pch (dBm): 2.00
|
||||||
|
actual pch out (dBm): 2.00
|
||||||
output VOA (dB): 0.00
|
output VOA (dB): 0.00
|
||||||
Fiber fiber (Norrköping → Linköping)
|
Fiber fiber (Norrköping → Linköping)
|
||||||
type_variety: SSMF
|
type_variety: SSMF
|
||||||
@@ -96,7 +104,8 @@ Fiber fiber (Norrköping → Linköping)
|
|||||||
total loss (dB): 11.00
|
total loss (dB): 11.00
|
||||||
(includes conn loss (dB) in: 0.00 out: 0.00)
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
(conn loss out includes EOL margin defined in eqpt_config.json)
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
pch out (dBm): -9.00
|
reference pch out (dBm): -9.00
|
||||||
|
actual pch out (dBm): -9.00
|
||||||
Edfa Edfa_preamp_roadm_Linköping_from_fiber (Norrköping → Linköping)
|
Edfa Edfa_preamp_roadm_Linköping_from_fiber (Norrköping → Linköping)
|
||||||
type_variety: openroadm_mw_mw_preamp
|
type_variety: openroadm_mw_mw_preamp
|
||||||
effective gain(dB): 11.00
|
effective gain(dB): 11.00
|
||||||
@@ -109,10 +118,12 @@ Edfa Edfa_preamp_roadm_Linköping_from_fiber (Norrköping → Linköping)
|
|||||||
Delta_P (dB): 0.00
|
Delta_P (dB): 0.00
|
||||||
target pch (dBm): 2.00
|
target pch (dBm): 2.00
|
||||||
effective pch (dBm): 2.00
|
effective pch (dBm): 2.00
|
||||||
|
actual pch out (dBm): 2.01
|
||||||
output VOA (dB): 0.00
|
output VOA (dB): 0.00
|
||||||
Roadm roadm_Linköping
|
Roadm roadm_Linköping
|
||||||
effective loss (dB): 22.00
|
effective loss (dB): 22.00
|
||||||
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
|
||||||
@@ -125,6 +136,7 @@ Edfa Edfa_booster_roadm_Linköping_to_fiber (Linköping → Jönköping)
|
|||||||
Delta_P (dB): 0.00
|
Delta_P (dB): 0.00
|
||||||
target pch (dBm): 2.00
|
target pch (dBm): 2.00
|
||||||
effective pch (dBm): 2.00
|
effective pch (dBm): 2.00
|
||||||
|
actual pch out (dBm): 2.00
|
||||||
output VOA (dB): 0.00
|
output VOA (dB): 0.00
|
||||||
Fiber fiber (Linköping → Jönköping)
|
Fiber fiber (Linköping → Jönköping)
|
||||||
type_variety: SSMF
|
type_variety: SSMF
|
||||||
@@ -133,7 +145,8 @@ Fiber fiber (Linköping → Jönköping)
|
|||||||
total loss (dB): 26.80
|
total loss (dB): 26.80
|
||||||
(includes conn loss (dB) in: 0.00 out: 0.00)
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
(conn loss out includes EOL margin defined in eqpt_config.json)
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
pch out (dBm): -24.80
|
reference pch out (dBm): -24.80
|
||||||
|
actual pch out (dBm): -24.79
|
||||||
Edfa Edfa_preamp_roadm_Jönköping_from_fiber (Linköping → Jönköping)
|
Edfa Edfa_preamp_roadm_Jönköping_from_fiber (Linköping → Jönköping)
|
||||||
type_variety: openroadm_mw_mw_preamp
|
type_variety: openroadm_mw_mw_preamp
|
||||||
effective gain(dB): 26.80
|
effective gain(dB): 26.80
|
||||||
@@ -146,10 +159,12 @@ Edfa Edfa_preamp_roadm_Jönköping_from_fiber (Linköping → Jönköping)
|
|||||||
Delta_P (dB): 0.00
|
Delta_P (dB): 0.00
|
||||||
target pch (dBm): 2.00
|
target pch (dBm): 2.00
|
||||||
effective pch (dBm): 2.00
|
effective pch (dBm): 2.00
|
||||||
|
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
|
||||||
effective loss (dB): 22.00
|
effective loss (dB): 22.00
|
||||||
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
|
||||||
@@ -162,6 +177,7 @@ Edfa Edfa_booster_roadm_Jönköping_to_fiber (Jönköping → Borås)
|
|||||||
Delta_P (dB): 0.00
|
Delta_P (dB): 0.00
|
||||||
target pch (dBm): 2.00
|
target pch (dBm): 2.00
|
||||||
effective pch (dBm): 2.00
|
effective pch (dBm): 2.00
|
||||||
|
actual pch out (dBm): 2.00
|
||||||
output VOA (dB): 0.00
|
output VOA (dB): 0.00
|
||||||
Fiber fiber (Jönköping → Borås)
|
Fiber fiber (Jönköping → Borås)
|
||||||
type_variety: SSMF
|
type_variety: SSMF
|
||||||
@@ -170,7 +186,8 @@ Fiber fiber (Jönköping → Borås)
|
|||||||
total loss (dB): 17.82
|
total loss (dB): 17.82
|
||||||
(includes conn loss (dB) in: 0.00 out: 0.00)
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
(conn loss out includes EOL margin defined in eqpt_config.json)
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
pch out (dBm): -15.82
|
reference pch out (dBm): -15.82
|
||||||
|
actual pch out (dBm): -15.81
|
||||||
Edfa Edfa_preamp_roadm_Borås_from_fiber (Jönköping → Borås)
|
Edfa Edfa_preamp_roadm_Borås_from_fiber (Jönköping → Borås)
|
||||||
type_variety: openroadm_mw_mw_preamp
|
type_variety: openroadm_mw_mw_preamp
|
||||||
effective gain(dB): 17.82
|
effective gain(dB): 17.82
|
||||||
@@ -183,10 +200,12 @@ Edfa Edfa_preamp_roadm_Borås_from_fiber (Jönköping → Borås)
|
|||||||
Delta_P (dB): 0.00
|
Delta_P (dB): 0.00
|
||||||
target pch (dBm): 2.00
|
target pch (dBm): 2.00
|
||||||
effective pch (dBm): 2.00
|
effective pch (dBm): 2.00
|
||||||
|
actual pch out (dBm): 2.02
|
||||||
output VOA (dB): 0.00
|
output VOA (dB): 0.00
|
||||||
Roadm roadm_Borås
|
Roadm roadm_Borås
|
||||||
effective loss (dB): 22.00
|
effective loss (dB): 22.00
|
||||||
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
|
||||||
@@ -199,6 +218,7 @@ Edfa Edfa_booster_roadm_Borås_to_fiber (Borås → Gothenburg)
|
|||||||
Delta_P (dB): 0.00
|
Delta_P (dB): 0.00
|
||||||
target pch (dBm): 2.00
|
target pch (dBm): 2.00
|
||||||
effective pch (dBm): 2.00
|
effective pch (dBm): 2.00
|
||||||
|
actual pch out (dBm): 2.00
|
||||||
output VOA (dB): 0.00
|
output VOA (dB): 0.00
|
||||||
Fiber fiber (Borås → Gothenburg)
|
Fiber fiber (Borås → Gothenburg)
|
||||||
type_variety: SSMF
|
type_variety: SSMF
|
||||||
@@ -207,7 +227,8 @@ Fiber fiber (Borås → Gothenburg)
|
|||||||
total loss (dB): 13.53
|
total loss (dB): 13.53
|
||||||
(includes conn loss (dB) in: 0.00 out: 0.00)
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
(conn loss out includes EOL margin defined in eqpt_config.json)
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
pch out (dBm): -11.53
|
reference pch out (dBm): -11.53
|
||||||
|
actual pch out (dBm): -11.52
|
||||||
Edfa Edfa_preamp_roadm_Gothenburg_from_fiber (Borås → Gothenburg)
|
Edfa Edfa_preamp_roadm_Gothenburg_from_fiber (Borås → Gothenburg)
|
||||||
type_variety: openroadm_mw_mw_preamp
|
type_variety: openroadm_mw_mw_preamp
|
||||||
effective gain(dB): 13.53
|
effective gain(dB): 13.53
|
||||||
@@ -220,10 +241,12 @@ Edfa Edfa_preamp_roadm_Gothenburg_from_fiber (Borås → Gothenburg)
|
|||||||
Delta_P (dB): 0.00
|
Delta_P (dB): 0.00
|
||||||
target pch (dBm): 2.00
|
target pch (dBm): 2.00
|
||||||
effective pch (dBm): 2.00
|
effective pch (dBm): 2.00
|
||||||
|
actual pch out (dBm): 2.02
|
||||||
output VOA (dB): 0.00
|
output VOA (dB): 0.00
|
||||||
Roadm roadm_Gothenburg
|
Roadm roadm_Gothenburg
|
||||||
effective loss (dB): 22.00
|
effective loss (dB): 22.00
|
||||||
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.90
|
GSNR (0.1nm, dB): 18.90
|
||||||
GSNR (signal bw, dB): 14.88
|
GSNR (signal bw, dB): 14.88
|
||||||
|
|||||||
@@ -16,8 +16,9 @@ Transceiver trx_Stockholm
|
|||||||
PMD (ps): 0.00
|
PMD (ps): 0.00
|
||||||
PDL (dB): 0.00
|
PDL (dB): 0.00
|
||||||
Roadm roadm_Stockholm
|
Roadm roadm_Stockholm
|
||||||
effective loss (dB): 22.00
|
effective loss (dB): 22.00
|
||||||
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
|
||||||
@@ -30,6 +31,7 @@ Edfa Edfa_booster_roadm_Stockholm_to_fiber (Stockholm → Norrköping)_(1/2)
|
|||||||
Delta_P (dB): 0.00
|
Delta_P (dB): 0.00
|
||||||
target pch (dBm): 2.00
|
target pch (dBm): 2.00
|
||||||
effective pch (dBm): 2.00
|
effective pch (dBm): 2.00
|
||||||
|
actual pch out (dBm): 2.00
|
||||||
output VOA (dB): 0.00
|
output VOA (dB): 0.00
|
||||||
Fiber fiber (Stockholm → Norrköping)_(1/2)
|
Fiber fiber (Stockholm → Norrköping)_(1/2)
|
||||||
type_variety: SSMF
|
type_variety: SSMF
|
||||||
@@ -38,7 +40,8 @@ Fiber fiber (Stockholm → Norrköping)_(1/2)
|
|||||||
total loss (dB): 16.33
|
total loss (dB): 16.33
|
||||||
(includes conn loss (dB) in: 0.00 out: 0.00)
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
(conn loss out includes EOL margin defined in eqpt_config.json)
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
pch out (dBm): -14.33
|
reference pch out (dBm): -14.33
|
||||||
|
actual pch out (dBm): -14.31
|
||||||
Edfa Edfa_fiber (Stockholm → Norrköping)_(1/2)
|
Edfa Edfa_fiber (Stockholm → Norrköping)_(1/2)
|
||||||
type_variety: openroadm_ila_low_noise
|
type_variety: openroadm_ila_low_noise
|
||||||
effective gain(dB): 16.33
|
effective gain(dB): 16.33
|
||||||
@@ -51,6 +54,7 @@ Edfa Edfa_fiber (Stockholm → Norrköping)_(1/2)
|
|||||||
Delta_P (dB): 0.00
|
Delta_P (dB): 0.00
|
||||||
target pch (dBm): 2.00
|
target pch (dBm): 2.00
|
||||||
effective pch (dBm): 2.00
|
effective pch (dBm): 2.00
|
||||||
|
actual pch out (dBm): 2.02
|
||||||
output VOA (dB): 0.00
|
output VOA (dB): 0.00
|
||||||
Fiber fiber (Stockholm → Norrköping)_(2/2)
|
Fiber fiber (Stockholm → Norrköping)_(2/2)
|
||||||
type_variety: SSMF
|
type_variety: SSMF
|
||||||
@@ -59,7 +63,8 @@ Fiber fiber (Stockholm → Norrköping)_(2/2)
|
|||||||
total loss (dB): 16.33
|
total loss (dB): 16.33
|
||||||
(includes conn loss (dB) in: 0.00 out: 0.00)
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
(conn loss out includes EOL margin defined in eqpt_config.json)
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
pch out (dBm): -14.33
|
reference pch out (dBm): -14.33
|
||||||
|
actual pch out (dBm): -14.30
|
||||||
Edfa Edfa_preamp_roadm_Norrköping_from_fiber (Stockholm → Norrköping)_(2/2)
|
Edfa Edfa_preamp_roadm_Norrköping_from_fiber (Stockholm → Norrköping)_(2/2)
|
||||||
type_variety: openroadm_mw_mw_preamp_worstcase_ver5
|
type_variety: openroadm_mw_mw_preamp_worstcase_ver5
|
||||||
effective gain(dB): 16.33
|
effective gain(dB): 16.33
|
||||||
@@ -72,10 +77,12 @@ Edfa Edfa_preamp_roadm_Norrköping_from_fiber (Stockholm → Norrköping)_(2/2)
|
|||||||
Delta_P (dB): 0.00
|
Delta_P (dB): 0.00
|
||||||
target pch (dBm): 2.00
|
target pch (dBm): 2.00
|
||||||
effective pch (dBm): 2.00
|
effective pch (dBm): 2.00
|
||||||
|
actual pch out (dBm): 2.04
|
||||||
output VOA (dB): 0.00
|
output VOA (dB): 0.00
|
||||||
Roadm roadm_Norrköping
|
Roadm roadm_Norrköping
|
||||||
effective loss (dB): 22.00
|
effective loss (dB): 22.00
|
||||||
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
|
||||||
@@ -88,6 +95,7 @@ Edfa Edfa_booster_roadm_Norrköping_to_fiber (Norrköping → Linköping)
|
|||||||
Delta_P (dB): 0.00
|
Delta_P (dB): 0.00
|
||||||
target pch (dBm): 2.00
|
target pch (dBm): 2.00
|
||||||
effective pch (dBm): 2.00
|
effective pch (dBm): 2.00
|
||||||
|
actual pch out (dBm): 2.00
|
||||||
output VOA (dB): 0.00
|
output VOA (dB): 0.00
|
||||||
Fiber fiber (Norrköping → Linköping)
|
Fiber fiber (Norrköping → Linköping)
|
||||||
type_variety: SSMF
|
type_variety: SSMF
|
||||||
@@ -96,7 +104,8 @@ Fiber fiber (Norrköping → Linköping)
|
|||||||
total loss (dB): 11.00
|
total loss (dB): 11.00
|
||||||
(includes conn loss (dB) in: 0.00 out: 0.00)
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
(conn loss out includes EOL margin defined in eqpt_config.json)
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
pch out (dBm): -9.00
|
reference pch out (dBm): -9.00
|
||||||
|
actual pch out (dBm): -9.00
|
||||||
Edfa Edfa_preamp_roadm_Linköping_from_fiber (Norrköping → Linköping)
|
Edfa Edfa_preamp_roadm_Linköping_from_fiber (Norrköping → Linköping)
|
||||||
type_variety: openroadm_mw_mw_preamp_worstcase_ver5
|
type_variety: openroadm_mw_mw_preamp_worstcase_ver5
|
||||||
effective gain(dB): 11.00
|
effective gain(dB): 11.00
|
||||||
@@ -109,10 +118,12 @@ Edfa Edfa_preamp_roadm_Linköping_from_fiber (Norrköping → Linköping)
|
|||||||
Delta_P (dB): 0.00
|
Delta_P (dB): 0.00
|
||||||
target pch (dBm): 2.00
|
target pch (dBm): 2.00
|
||||||
effective pch (dBm): 2.00
|
effective pch (dBm): 2.00
|
||||||
|
actual pch out (dBm): 2.01
|
||||||
output VOA (dB): 0.00
|
output VOA (dB): 0.00
|
||||||
Roadm roadm_Linköping
|
Roadm roadm_Linköping
|
||||||
effective loss (dB): 22.00
|
effective loss (dB): 22.00
|
||||||
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
|
||||||
@@ -125,6 +136,7 @@ Edfa Edfa_booster_roadm_Linköping_to_fiber (Linköping → Jönköping)
|
|||||||
Delta_P (dB): 0.00
|
Delta_P (dB): 0.00
|
||||||
target pch (dBm): 2.00
|
target pch (dBm): 2.00
|
||||||
effective pch (dBm): 2.00
|
effective pch (dBm): 2.00
|
||||||
|
actual pch out (dBm): 2.00
|
||||||
output VOA (dB): 0.00
|
output VOA (dB): 0.00
|
||||||
Fiber fiber (Linköping → Jönköping)
|
Fiber fiber (Linköping → Jönköping)
|
||||||
type_variety: SSMF
|
type_variety: SSMF
|
||||||
@@ -133,7 +145,8 @@ Fiber fiber (Linköping → Jönköping)
|
|||||||
total loss (dB): 26.80
|
total loss (dB): 26.80
|
||||||
(includes conn loss (dB) in: 0.00 out: 0.00)
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
(conn loss out includes EOL margin defined in eqpt_config.json)
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
pch out (dBm): -24.80
|
reference pch out (dBm): -24.80
|
||||||
|
actual pch out (dBm): -24.79
|
||||||
Edfa Edfa_preamp_roadm_Jönköping_from_fiber (Linköping → Jönköping)
|
Edfa Edfa_preamp_roadm_Jönköping_from_fiber (Linköping → Jönköping)
|
||||||
type_variety: openroadm_mw_mw_preamp_worstcase_ver5
|
type_variety: openroadm_mw_mw_preamp_worstcase_ver5
|
||||||
effective gain(dB): 26.80
|
effective gain(dB): 26.80
|
||||||
@@ -146,10 +159,12 @@ Edfa Edfa_preamp_roadm_Jönköping_from_fiber (Linköping → Jönköping)
|
|||||||
Delta_P (dB): 0.00
|
Delta_P (dB): 0.00
|
||||||
target pch (dBm): 2.00
|
target pch (dBm): 2.00
|
||||||
effective pch (dBm): 2.00
|
effective pch (dBm): 2.00
|
||||||
|
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
|
||||||
effective loss (dB): 22.00
|
effective loss (dB): 22.00
|
||||||
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
|
||||||
@@ -162,6 +177,7 @@ Edfa Edfa_booster_roadm_Jönköping_to_fiber (Jönköping → Borås)
|
|||||||
Delta_P (dB): 0.00
|
Delta_P (dB): 0.00
|
||||||
target pch (dBm): 2.00
|
target pch (dBm): 2.00
|
||||||
effective pch (dBm): 2.00
|
effective pch (dBm): 2.00
|
||||||
|
actual pch out (dBm): 2.00
|
||||||
output VOA (dB): 0.00
|
output VOA (dB): 0.00
|
||||||
Fiber fiber (Jönköping → Borås)
|
Fiber fiber (Jönköping → Borås)
|
||||||
type_variety: SSMF
|
type_variety: SSMF
|
||||||
@@ -170,7 +186,8 @@ Fiber fiber (Jönköping → Borås)
|
|||||||
total loss (dB): 17.82
|
total loss (dB): 17.82
|
||||||
(includes conn loss (dB) in: 0.00 out: 0.00)
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
(conn loss out includes EOL margin defined in eqpt_config.json)
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
pch out (dBm): -15.82
|
reference pch out (dBm): -15.82
|
||||||
|
actual pch out (dBm): -15.81
|
||||||
Edfa Edfa_preamp_roadm_Borås_from_fiber (Jönköping → Borås)
|
Edfa Edfa_preamp_roadm_Borås_from_fiber (Jönköping → Borås)
|
||||||
type_variety: openroadm_mw_mw_preamp_worstcase_ver5
|
type_variety: openroadm_mw_mw_preamp_worstcase_ver5
|
||||||
effective gain(dB): 17.82
|
effective gain(dB): 17.82
|
||||||
@@ -183,10 +200,12 @@ Edfa Edfa_preamp_roadm_Borås_from_fiber (Jönköping → Borås)
|
|||||||
Delta_P (dB): 0.00
|
Delta_P (dB): 0.00
|
||||||
target pch (dBm): 2.00
|
target pch (dBm): 2.00
|
||||||
effective pch (dBm): 2.00
|
effective pch (dBm): 2.00
|
||||||
|
actual pch out (dBm): 2.01
|
||||||
output VOA (dB): 0.00
|
output VOA (dB): 0.00
|
||||||
Roadm roadm_Borås
|
Roadm roadm_Borås
|
||||||
effective loss (dB): 22.00
|
effective loss (dB): 22.00
|
||||||
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
|
||||||
@@ -199,6 +218,7 @@ Edfa Edfa_booster_roadm_Borås_to_fiber (Borås → Gothenburg)
|
|||||||
Delta_P (dB): 0.00
|
Delta_P (dB): 0.00
|
||||||
target pch (dBm): 2.00
|
target pch (dBm): 2.00
|
||||||
effective pch (dBm): 2.00
|
effective pch (dBm): 2.00
|
||||||
|
actual pch out (dBm): 2.00
|
||||||
output VOA (dB): 0.00
|
output VOA (dB): 0.00
|
||||||
Fiber fiber (Borås → Gothenburg)
|
Fiber fiber (Borås → Gothenburg)
|
||||||
type_variety: SSMF
|
type_variety: SSMF
|
||||||
@@ -207,7 +227,8 @@ Fiber fiber (Borås → Gothenburg)
|
|||||||
total loss (dB): 13.53
|
total loss (dB): 13.53
|
||||||
(includes conn loss (dB) in: 0.00 out: 0.00)
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
(conn loss out includes EOL margin defined in eqpt_config.json)
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
pch out (dBm): -11.53
|
reference pch out (dBm): -11.53
|
||||||
|
actual pch out (dBm): -11.52
|
||||||
Edfa Edfa_preamp_roadm_Gothenburg_from_fiber (Borås → Gothenburg)
|
Edfa Edfa_preamp_roadm_Gothenburg_from_fiber (Borås → Gothenburg)
|
||||||
type_variety: openroadm_mw_mw_preamp_worstcase_ver5
|
type_variety: openroadm_mw_mw_preamp_worstcase_ver5
|
||||||
effective gain(dB): 13.53
|
effective gain(dB): 13.53
|
||||||
@@ -220,10 +241,12 @@ Edfa Edfa_preamp_roadm_Gothenburg_from_fiber (Borås → Gothenburg)
|
|||||||
Delta_P (dB): 0.00
|
Delta_P (dB): 0.00
|
||||||
target pch (dBm): 2.00
|
target pch (dBm): 2.00
|
||||||
effective pch (dBm): 2.00
|
effective pch (dBm): 2.00
|
||||||
|
actual pch out (dBm): 2.02
|
||||||
output VOA (dB): 0.00
|
output VOA (dB): 0.00
|
||||||
Roadm roadm_Gothenburg
|
Roadm roadm_Gothenburg
|
||||||
effective loss (dB): 22.00
|
effective loss (dB): 22.00
|
||||||
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.27
|
GSNR (0.1nm, dB): 19.27
|
||||||
GSNR (signal bw, dB): 15.24
|
GSNR (signal bw, dB): 15.24
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ req id demand GSNR@bandwidth A-Z (Z-A) GSNR@0
|
|||||||
0 trx Lorient_KMA to trx Vannes_KBE : 24.83 28.92 14 mode 1 100.0 1 (-284,4)
|
0 trx Lorient_KMA to trx Vannes_KBE : 24.83 28.92 14 mode 1 100.0 1 (-284,4)
|
||||||
1 trx Brest_KLA to trx Vannes_KBE : 17.75 21.83 14 mode 1 200.0 2 (-272,8)
|
1 trx Brest_KLA to trx Vannes_KBE : 17.75 21.83 14 mode 1 200.0 2 (-272,8)
|
||||||
3 trx Lannion_CAS to trx Rennes_STA : 22.21 26.29 13 mode 1 60.0 1 (-284,4)
|
3 trx Lannion_CAS to trx Rennes_STA : 22.21 26.29 13 mode 1 60.0 1 (-284,4)
|
||||||
4 trx Rennes_STA to trx Lannion_CAS : 16.07 23.29 17 mode 2 150.0 1 (-258,6)
|
4 trx Rennes_STA to trx Lannion_CAS : 16.06 23.29 17 mode 2 150.0 1 (-258,6)
|
||||||
5 trx Rennes_STA to trx Lannion_CAS : 20.31 27.54 17 mode 2 20.0 1 (-274,6)
|
5 trx Rennes_STA to trx Lannion_CAS : 20.31 27.54 17 mode 2 20.0 1 (-274,6)
|
||||||
7 | 6 trx Lannion_CAS to trx Lorient_KMA : 19.52 23.61 14 mode 1 700.0 7 (-224,28)
|
7 | 6 trx Lannion_CAS to trx Lorient_KMA : 19.52 23.61 14 mode 1 700.0 7 (-224,28)
|
||||||
7b trx Lannion_CAS to trx Lorient_KMA : 19.61 23.69 14 mode 1 400.0 4 (-172,24)
|
7b trx Lannion_CAS to trx Lorient_KMA : 19.61 23.69 14 mode 1 400.0 4 (-172,24)
|
||||||
|
|||||||
100
tests/invocation/spectrum1_transmission_main_example
Normal file
100
tests/invocation/spectrum1_transmission_main_example
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
User input for spectrum used for propagation instead of SI
|
||||||
|
There are 76 channels propagating
|
||||||
|
Power mode is set to True
|
||||||
|
=> it can be modified in eqpt_config.json - Span
|
||||||
|
|
||||||
|
There are 3 fiber spans over 130 km between trx Lannion_CAS and trx Lorient_KMA
|
||||||
|
|
||||||
|
Now propagating between trx Lannion_CAS and trx Lorient_KMA:
|
||||||
|
|
||||||
|
Propagating with input power = [1;36;40m0.00 dBm[0m:
|
||||||
|
Transceiver trx Lannion_CAS
|
||||||
|
GSNR (0.1nm, dB): 40.00
|
||||||
|
GSNR (signal bw, dB): 35.92
|
||||||
|
OSNR ASE (0.1nm, dB): 40.00
|
||||||
|
OSNR ASE (signal bw, dB): 35.92
|
||||||
|
CD (ps/nm): 0.00
|
||||||
|
PMD (ps): 0.00
|
||||||
|
PDL (dB): 0.00
|
||||||
|
Roadm roadm Lannion_CAS
|
||||||
|
effective loss (dB): 20.00
|
||||||
|
reference pch out (dBm): -20.00
|
||||||
|
actual pch out (dBm): -20.00
|
||||||
|
Edfa east edfa in Lannion_CAS to Corlay
|
||||||
|
type_variety: std_medium_gain
|
||||||
|
effective gain(dB): 21.00
|
||||||
|
(before att_in and before output VOA)
|
||||||
|
noise figure (dB): 6.36
|
||||||
|
(including att_in)
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
Power In (dBm): -1.19
|
||||||
|
Power Out (dBm): 19.82
|
||||||
|
Delta_P (dB): 1.00
|
||||||
|
target pch (dBm): 1.00
|
||||||
|
effective pch (dBm): 1.00
|
||||||
|
actual pch out (dBm): 1.01
|
||||||
|
output VOA (dB): 0.00
|
||||||
|
Fiber fiber (Lannion_CAS → Corlay)-F061
|
||||||
|
type_variety: SSMF
|
||||||
|
length (km): 20.00
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
total loss (dB): 4.00
|
||||||
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
|
reference pch out (dBm): -3.00
|
||||||
|
actual pch out (dBm): -2.99
|
||||||
|
Fused west fused spans in Corlay
|
||||||
|
loss (dB): 1.00
|
||||||
|
Fiber fiber (Corlay → Loudeac)-F010
|
||||||
|
type_variety: SSMF
|
||||||
|
length (km): 50.00
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
total loss (dB): 10.00
|
||||||
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
|
reference pch out (dBm): -14.00
|
||||||
|
actual pch out (dBm): -13.99
|
||||||
|
Fused west fused spans in Loudeac
|
||||||
|
loss (dB): 1.00
|
||||||
|
Fiber fiber (Loudeac → Lorient_KMA)-F054
|
||||||
|
type_variety: SSMF
|
||||||
|
length (km): 60.00
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
total loss (dB): 12.00
|
||||||
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
|
reference pch out (dBm): -27.00
|
||||||
|
actual pch out (dBm): -26.99
|
||||||
|
Edfa west edfa in Lorient_KMA to Loudeac
|
||||||
|
type_variety: std_high_gain
|
||||||
|
effective gain(dB): 28.00
|
||||||
|
(before att_in and before output VOA)
|
||||||
|
noise figure (dB): 5.92
|
||||||
|
(including att_in)
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
Power In (dBm): -8.18
|
||||||
|
Power Out (dBm): 19.85
|
||||||
|
Delta_P (dB): 1.00
|
||||||
|
target pch (dBm): 1.00
|
||||||
|
effective pch (dBm): 1.00
|
||||||
|
actual pch out (dBm): 1.05
|
||||||
|
output VOA (dB): 0.00
|
||||||
|
Roadm roadm Lorient_KMA
|
||||||
|
effective loss (dB): 21.00
|
||||||
|
reference pch out (dBm): -20.00
|
||||||
|
actual pch out (dBm): -20.00
|
||||||
|
Transceiver trx Lorient_KMA
|
||||||
|
GSNR (0.1nm, dB): 23.61
|
||||||
|
GSNR (signal bw, dB): 19.52
|
||||||
|
OSNR ASE (0.1nm, dB): 23.89
|
||||||
|
OSNR ASE (signal bw, dB): 19.81
|
||||||
|
CD (ps/nm): 2171.00
|
||||||
|
PMD (ps): 0.46
|
||||||
|
PDL (dB): 0.00
|
||||||
|
|
||||||
|
Transmission result for input power = 0.00 dBm:
|
||||||
|
Final GSNR (0.1 nm): [1;36;40m23.61 dB[0m
|
||||||
|
|
||||||
|
(No source node specified: picked trx Lannion_CAS)
|
||||||
|
|
||||||
|
(No destination node specified: picked trx Lorient_KMA)
|
||||||
163
tests/invocation/spectrum2_transmission_main_example
Normal file
163
tests/invocation/spectrum2_transmission_main_example
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
User input for spectrum used for propagation instead of SI
|
||||||
|
There are 60 channels propagating
|
||||||
|
Power mode is set to True
|
||||||
|
=> it can be modified in eqpt_config.json - Span
|
||||||
|
|
||||||
|
There are 3 fiber spans over 130 km between trx Lannion_CAS and trx Lorient_KMA
|
||||||
|
|
||||||
|
Now propagating between trx Lannion_CAS and trx Lorient_KMA:
|
||||||
|
|
||||||
|
Propagating with input power = [1;36;40m0.00 dBm[0m:
|
||||||
|
Transceiver trx Lannion_CAS
|
||||||
|
GSNR (0.1nm, dB): mode_1: 40.00, mode_2: 40.00
|
||||||
|
GSNR (signal bw, dB): mode_1: 35.92, mode_2: 32.91
|
||||||
|
OSNR ASE (0.1nm, dB): mode_1: 40.00, mode_2: 40.00
|
||||||
|
OSNR ASE (signal bw, dB): mode_1: 35.92, mode_2: 32.91
|
||||||
|
CD (ps/nm): 0.00
|
||||||
|
PMD (ps): 0.00
|
||||||
|
PDL (dB): 0.00
|
||||||
|
Roadm roadm Lannion_CAS
|
||||||
|
effective loss (dB): 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
|
||||||
|
type_variety: std_medium_gain
|
||||||
|
effective gain(dB): 21.00
|
||||||
|
(before att_in and before output VOA)
|
||||||
|
noise figure (dB): 6.36
|
||||||
|
(including att_in)
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
Power In (dBm): -2.22
|
||||||
|
Power Out (dBm): 18.79
|
||||||
|
Delta_P (dB): 1.00
|
||||||
|
target pch (dBm): 1.00
|
||||||
|
effective pch (dBm): 1.00
|
||||||
|
actual pch out (dBm): mode_1: 1.01, mode_2: 1.02
|
||||||
|
output VOA (dB): 0.00
|
||||||
|
Fiber fiber (Lannion_CAS → Corlay)-F061
|
||||||
|
type_variety: SSMF
|
||||||
|
length (km): 20.00
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
total loss (dB): 4.00
|
||||||
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
|
reference pch out (dBm): -3.00
|
||||||
|
actual pch out (dBm): mode_1: -2.99, mode_2: -2.98
|
||||||
|
Fused west fused spans in Corlay
|
||||||
|
loss (dB): 1.00
|
||||||
|
Fiber fiber (Corlay → Loudeac)-F010
|
||||||
|
type_variety: SSMF
|
||||||
|
length (km): 50.00
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
total loss (dB): 10.00
|
||||||
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
|
reference pch out (dBm): -14.00
|
||||||
|
actual pch out (dBm): mode_1: -13.99, mode_2: -13.98
|
||||||
|
Fused west fused spans in Loudeac
|
||||||
|
loss (dB): 1.00
|
||||||
|
Fiber fiber (Loudeac → Lorient_KMA)-F054
|
||||||
|
type_variety: SSMF
|
||||||
|
length (km): 60.00
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
total loss (dB): 12.00
|
||||||
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
|
reference pch out (dBm): -27.00
|
||||||
|
actual pch out (dBm): mode_1: -26.99, mode_2: -26.98
|
||||||
|
Edfa west edfa in Lorient_KMA to Loudeac
|
||||||
|
type_variety: std_high_gain
|
||||||
|
effective gain(dB): 28.00
|
||||||
|
(before att_in and before output VOA)
|
||||||
|
noise figure (dB): 5.92
|
||||||
|
(including att_in)
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
Power In (dBm): -9.21
|
||||||
|
Power Out (dBm): 18.84
|
||||||
|
Delta_P (dB): 1.00
|
||||||
|
target pch (dBm): 1.00
|
||||||
|
effective pch (dBm): 1.00
|
||||||
|
actual pch out (dBm): mode_1: 1.04, mode_2: 1.09
|
||||||
|
output VOA (dB): 0.00
|
||||||
|
Roadm roadm Lorient_KMA
|
||||||
|
effective loss (dB): 21.00
|
||||||
|
reference pch out (dBm): -20.00
|
||||||
|
actual pch out (dBm): mode_1: -20.00, mode_2: -20.00
|
||||||
|
Transceiver trx Lorient_KMA
|
||||||
|
GSNR (0.1nm, dB): mode_1: 23.65, mode_2: 23.81
|
||||||
|
GSNR (signal bw, dB): mode_1: 19.57, mode_2: 16.72
|
||||||
|
OSNR ASE (0.1nm, dB): mode_1: 23.91, mode_2: 23.87
|
||||||
|
OSNR ASE (signal bw, dB): mode_1: 19.83, mode_2: 16.78
|
||||||
|
CD (ps/nm): 2171.00
|
||||||
|
PMD (ps): 0.46
|
||||||
|
PDL (dB): 0.00
|
||||||
|
|
||||||
|
Transmission result for input power = 0.00 dBm:
|
||||||
|
Final GSNR (0.1 nm): [1;36;40m23.72 dB[0m
|
||||||
|
|
||||||
|
The GSNR per channel at the end of the line is:
|
||||||
|
Ch. # Channel frequency (THz) Channel power (dBm) OSNR ASE (signal bw, dB) SNR NLI (signal bw, dB) GSNR (signal bw, dB)
|
||||||
|
1 191.40000 -20.04 19.85 33.30 19.65
|
||||||
|
2 191.45000 -20.04 19.85 32.70 19.63
|
||||||
|
3 191.50000 -20.04 19.84 32.45 19.61
|
||||||
|
4 191.55000 -20.04 19.84 32.29 19.60
|
||||||
|
5 191.60000 -20.04 19.84 32.18 19.60
|
||||||
|
6 191.65000 -20.04 19.84 32.10 19.59
|
||||||
|
7 191.70000 -20.04 19.84 32.03 19.59
|
||||||
|
8 191.75000 -20.04 19.84 31.98 19.58
|
||||||
|
9 191.80000 -20.04 19.84 31.93 19.58
|
||||||
|
10 191.85000 -20.04 19.84 31.90 19.57
|
||||||
|
11 191.90000 -20.04 19.84 31.86 19.57
|
||||||
|
12 191.95000 -20.04 19.84 31.84 19.57
|
||||||
|
13 192.00000 -20.04 19.83 31.82 19.57
|
||||||
|
14 192.05000 -20.04 19.83 31.80 19.57
|
||||||
|
15 192.10000 -20.04 19.83 31.78 19.56
|
||||||
|
16 192.15000 -20.04 19.83 31.77 19.56
|
||||||
|
17 192.20000 -20.04 19.83 31.76 19.56
|
||||||
|
18 192.25000 -20.04 19.83 31.75 19.56
|
||||||
|
19 192.30000 -20.04 19.83 31.75 19.56
|
||||||
|
20 192.35000 -20.04 19.83 31.75 19.56
|
||||||
|
21 192.40000 -20.05 19.83 31.75 19.56
|
||||||
|
22 192.45000 -20.05 19.82 31.75 19.55
|
||||||
|
23 192.50000 -20.05 19.82 31.76 19.55
|
||||||
|
24 192.55000 -20.05 19.82 31.76 19.55
|
||||||
|
25 192.60000 -20.05 19.82 31.78 19.55
|
||||||
|
26 192.65000 -20.05 19.82 31.79 19.55
|
||||||
|
27 192.70000 -20.05 19.82 31.81 19.55
|
||||||
|
28 192.75000 -20.05 19.82 31.83 19.55
|
||||||
|
29 192.80000 -20.05 19.82 31.86 19.55
|
||||||
|
30 192.85000 -20.05 19.82 31.90 19.56
|
||||||
|
31 192.90000 -20.04 19.82 31.95 19.56
|
||||||
|
32 192.95000 -20.04 19.81 32.02 19.56
|
||||||
|
33 193.00000 -20.04 19.81 32.11 19.56
|
||||||
|
34 193.05000 -20.04 19.81 32.27 19.57
|
||||||
|
35 193.10000 -20.04 19.81 32.61 19.59
|
||||||
|
36 193.16250 -20.09 16.80 33.70 16.71
|
||||||
|
37 193.23750 -20.09 16.80 34.20 16.72
|
||||||
|
38 193.31250 -20.09 16.80 34.45 16.72
|
||||||
|
39 193.38750 -20.09 16.79 34.62 16.72
|
||||||
|
40 193.46250 -20.09 16.79 34.75 16.72
|
||||||
|
41 193.53750 -20.09 16.79 34.85 16.72
|
||||||
|
42 193.61250 -20.09 16.79 34.94 16.72
|
||||||
|
43 193.68750 -20.09 16.79 35.02 16.72
|
||||||
|
44 193.76250 -20.09 16.79 35.08 16.72
|
||||||
|
45 193.83750 -20.09 16.78 35.15 16.72
|
||||||
|
46 193.91250 -20.09 16.78 35.20 16.72
|
||||||
|
47 193.98750 -20.09 16.78 35.26 16.72
|
||||||
|
48 194.06250 -20.09 16.78 35.31 16.72
|
||||||
|
49 194.13750 -20.09 16.78 35.36 16.72
|
||||||
|
50 194.21250 -20.09 16.78 35.41 16.72
|
||||||
|
51 194.28750 -20.09 16.78 35.47 16.72
|
||||||
|
52 194.36250 -20.09 16.77 35.52 16.72
|
||||||
|
53 194.43750 -20.09 16.77 35.58 16.72
|
||||||
|
54 194.51250 -20.09 16.77 35.65 16.71
|
||||||
|
55 194.58750 -20.09 16.77 35.72 16.71
|
||||||
|
56 194.66250 -20.09 16.77 35.81 16.71
|
||||||
|
57 194.73750 -20.09 16.77 35.92 16.71
|
||||||
|
58 194.81250 -20.09 16.76 36.06 16.71
|
||||||
|
59 194.88750 -20.09 16.76 36.27 16.71
|
||||||
|
60 194.96250 -20.09 16.76 36.75 16.72
|
||||||
|
|
||||||
|
(No source node specified: picked trx Lannion_CAS)
|
||||||
|
|
||||||
|
(No destination node specified: picked trx Lorient_KMA)
|
||||||
@@ -22,7 +22,8 @@ Fiber Span1
|
|||||||
total loss (dB): 17.00
|
total loss (dB): 17.00
|
||||||
(includes conn loss (dB) in: 0.50 out: 0.50)
|
(includes conn loss (dB) in: 0.50 out: 0.50)
|
||||||
(conn loss out includes EOL margin defined in eqpt_config.json)
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
pch out (dBm): -17.00
|
reference pch out (dBm): -17.00
|
||||||
|
actual pch out (dBm): -17.00
|
||||||
Edfa Edfa1
|
Edfa Edfa1
|
||||||
type_variety: std_low_gain
|
type_variety: std_low_gain
|
||||||
effective gain(dB): 15.00
|
effective gain(dB): 15.00
|
||||||
@@ -35,6 +36,7 @@ Edfa Edfa1
|
|||||||
Delta_P (dB): -2.00
|
Delta_P (dB): -2.00
|
||||||
target pch (dBm): -2.00
|
target pch (dBm): -2.00
|
||||||
effective pch (dBm): -2.00
|
effective pch (dBm): -2.00
|
||||||
|
actual pch out (dBm): -1.99
|
||||||
output VOA (dB): 0.00
|
output VOA (dB): 0.00
|
||||||
Transceiver Site_B
|
Transceiver Site_B
|
||||||
GSNR (0.1nm, dB): 31.17
|
GSNR (0.1nm, dB): 31.17
|
||||||
|
|||||||
@@ -22,27 +22,29 @@ RamanFiber Span1
|
|||||||
total loss (dB): 17.00
|
total loss (dB): 17.00
|
||||||
(includes conn loss (dB) in: 0.50 out: 0.50)
|
(includes conn loss (dB) in: 0.50 out: 0.50)
|
||||||
(conn loss out includes EOL margin defined in eqpt_config.json)
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
pch out (dBm): -7.71
|
reference pch out (dBm): -7.77
|
||||||
|
actual pch out (dBm): -8.03
|
||||||
Fused Fused1
|
Fused Fused1
|
||||||
loss (dB): 0.00
|
loss (dB): 0.00
|
||||||
Edfa Edfa1
|
Edfa Edfa1
|
||||||
type_variety: std_low_gain
|
type_variety: std_low_gain
|
||||||
effective gain(dB): 5.71
|
effective gain(dB): 5.77
|
||||||
(before att_in and before output VOA)
|
(before att_in and before output VOA)
|
||||||
noise figure (dB): 13.29
|
noise figure (dB): 13.23
|
||||||
(including att_in)
|
(including att_in)
|
||||||
pad att_in (dB): 2.29
|
pad att_in (dB): 2.23
|
||||||
Power In (dBm): 11.11
|
Power In (dBm): 11.04
|
||||||
Power Out (dBm): 16.82
|
Power Out (dBm): 16.81
|
||||||
Delta_P (dB): -2.00
|
Delta_P (dB): -2.00
|
||||||
target pch (dBm): -2.00
|
target pch (dBm): -2.00
|
||||||
effective pch (dBm): -2.00
|
effective pch (dBm): -2.00
|
||||||
|
actual pch out (dBm): -2.26
|
||||||
output VOA (dB): 0.00
|
output VOA (dB): 0.00
|
||||||
Transceiver Site_B
|
Transceiver Site_B
|
||||||
GSNR (0.1nm, dB): 31.44
|
GSNR (0.1nm, dB): 31.44
|
||||||
GSNR (signal bw, dB): 27.36
|
GSNR (signal bw, dB): 27.36
|
||||||
OSNR ASE (0.1nm, dB): 34.22
|
OSNR ASE (0.1nm, dB): 34.21
|
||||||
OSNR ASE (signal bw, dB): 30.14
|
OSNR ASE (signal bw, dB): 30.13
|
||||||
CD (ps/nm): 1336.00
|
CD (ps/nm): 1336.00
|
||||||
PMD (ps): 0.36
|
PMD (ps): 0.36
|
||||||
PDL (dB): 0.00
|
PDL (dB): 0.00
|
||||||
@@ -52,82 +54,82 @@ Transmission result for input power = 0.00 dBm:
|
|||||||
|
|
||||||
The GSNR per channel at the end of the line is:
|
The GSNR per channel at the end of the line is:
|
||||||
Ch. # Channel frequency (THz) Channel power (dBm) OSNR ASE (signal bw, dB) SNR NLI (signal bw, dB) GSNR (signal bw, dB)
|
Ch. # Channel frequency (THz) Channel power (dBm) OSNR ASE (signal bw, dB) SNR NLI (signal bw, dB) GSNR (signal bw, dB)
|
||||||
1 191.35 0.18 31.61 31.43 28.51
|
1 191.35000 0.21 31.62 31.43 28.52
|
||||||
2 191.40 0.14 31.59 31.34 28.45
|
2 191.40000 0.17 31.60 31.35 28.46
|
||||||
3 191.45 0.11 31.57 31.26 28.40
|
3 191.45000 0.13 31.58 31.26 28.41
|
||||||
4 191.50 0.07 31.55 31.17 28.35
|
4 191.50000 0.09 31.56 31.18 28.36
|
||||||
5 191.55 0.02 31.52 31.09 28.29
|
5 191.55000 0.03 31.53 31.10 28.30
|
||||||
6 191.60 -0.04 31.49 31.02 28.24
|
6 191.60000 -0.02 31.50 31.02 28.24
|
||||||
7 191.65 -0.10 31.46 30.94 28.18
|
7 191.65000 -0.08 31.46 30.94 28.19
|
||||||
8 191.70 -0.16 31.43 30.86 28.13
|
8 191.70000 -0.14 31.43 30.87 28.13
|
||||||
9 191.75 -0.21 31.40 30.79 28.07
|
9 191.75000 -0.20 31.40 30.79 28.08
|
||||||
10 191.80 -0.28 31.36 30.71 28.02
|
10 191.80000 -0.27 31.37 30.72 28.02
|
||||||
11 191.85 -0.34 31.33 30.64 27.96
|
11 191.85000 -0.33 31.33 30.65 27.97
|
||||||
12 191.90 -0.40 31.29 30.57 27.91
|
12 191.90000 -0.40 31.29 30.58 27.91
|
||||||
13 191.95 -0.47 31.26 30.50 27.85
|
13 191.95000 -0.46 31.26 30.51 27.86
|
||||||
14 192.00 -0.53 31.22 30.43 27.80
|
14 192.00000 -0.53 31.22 30.44 27.80
|
||||||
15 192.05 -0.60 31.18 30.36 27.74
|
15 192.05000 -0.59 31.18 30.37 27.75
|
||||||
16 192.10 -0.66 31.15 30.30 27.69
|
16 192.10000 -0.66 31.15 30.30 27.69
|
||||||
17 192.15 -0.73 31.11 30.23 27.64
|
17 192.15000 -0.73 31.11 30.24 27.64
|
||||||
18 192.20 -0.79 31.07 30.16 27.58
|
18 192.20000 -0.80 31.07 30.17 27.59
|
||||||
19 192.25 -0.86 31.04 30.17 27.57
|
19 192.25000 -0.86 31.03 30.18 27.57
|
||||||
20 192.30 -0.94 30.99 30.18 27.56
|
20 192.30000 -0.94 30.99 30.19 27.56
|
||||||
21 192.35 -1.01 30.95 30.19 27.54
|
21 192.35000 -1.02 30.94 30.20 27.54
|
||||||
22 192.40 -1.08 30.91 30.20 27.53
|
22 192.40000 -1.09 30.90 30.20 27.53
|
||||||
23 192.45 -1.16 30.86 30.20 27.51
|
23 192.45000 -1.17 30.86 30.21 27.51
|
||||||
24 192.50 -1.23 30.82 30.21 27.49
|
24 192.50000 -1.24 30.81 30.22 27.50
|
||||||
25 192.55 -1.30 30.78 30.22 27.48
|
25 192.55000 -1.31 30.77 30.23 27.48
|
||||||
26 192.60 -1.37 30.74 30.23 27.46
|
26 192.60000 -1.38 30.73 30.23 27.46
|
||||||
27 192.65 -1.44 30.70 30.23 27.45
|
27 192.65000 -1.45 30.69 30.24 27.45
|
||||||
28 192.70 -1.51 30.65 30.24 27.43
|
28 192.70000 -1.52 30.65 30.25 27.43
|
||||||
29 192.75 -1.58 30.61 30.25 27.42
|
29 192.75000 -1.59 30.60 30.26 27.42
|
||||||
30 192.80 -1.65 30.57 30.26 27.40
|
30 192.80000 -1.67 30.56 30.27 27.40
|
||||||
31 192.85 -1.72 30.53 30.27 27.38
|
31 192.85000 -1.74 30.52 30.27 27.38
|
||||||
32 192.90 -1.79 30.48 30.27 27.37
|
32 192.90000 -1.81 30.47 30.28 27.37
|
||||||
33 192.95 -1.86 30.44 30.28 27.35
|
33 192.95000 -1.88 30.43 30.29 27.35
|
||||||
34 193.00 -1.93 30.40 30.29 27.33
|
34 193.00000 -1.95 30.39 30.30 27.33
|
||||||
35 193.05 -2.00 30.35 30.30 27.32
|
35 193.05000 -2.02 30.34 30.30 27.31
|
||||||
36 193.10 -2.07 30.31 30.30 27.30
|
36 193.10000 -2.08 30.30 30.31 27.30
|
||||||
37 193.15 -2.14 30.27 30.31 27.28
|
37 193.15000 -2.15 30.26 30.32 27.28
|
||||||
38 193.20 -2.20 30.22 30.33 27.27
|
38 193.20000 -2.22 30.21 30.34 27.26
|
||||||
39 193.25 -2.27 30.18 30.35 27.25
|
39 193.25000 -2.29 30.17 30.36 27.25
|
||||||
40 193.30 -2.34 30.14 30.37 27.24
|
40 193.30000 -2.36 30.13 30.37 27.24
|
||||||
41 193.35 -2.41 30.09 30.38 27.23
|
41 193.35000 -2.43 30.08 30.39 27.22
|
||||||
42 193.40 -2.48 30.05 30.40 27.21
|
42 193.40000 -2.50 30.04 30.41 27.21
|
||||||
43 193.45 -2.55 30.00 30.42 27.20
|
43 193.45000 -2.56 29.99 30.43 27.19
|
||||||
44 193.50 -2.61 29.96 30.44 27.18
|
44 193.50000 -2.63 29.95 30.44 27.18
|
||||||
45 193.55 -2.69 29.91 30.46 27.16
|
45 193.55000 -2.70 29.90 30.46 27.16
|
||||||
46 193.60 -2.76 29.86 30.47 27.15
|
46 193.60000 -2.78 29.85 30.48 27.15
|
||||||
47 193.65 -2.83 29.82 30.49 27.13
|
47 193.65000 -2.85 29.80 30.50 27.13
|
||||||
48 193.70 -2.90 29.77 30.51 27.11
|
48 193.70000 -2.92 29.76 30.52 27.11
|
||||||
49 193.75 -2.98 29.72 30.53 27.10
|
49 193.75000 -2.99 29.71 30.54 27.09
|
||||||
50 193.80 -3.05 29.67 30.55 27.08
|
50 193.80000 -3.06 29.66 30.55 27.07
|
||||||
51 193.85 -3.12 29.62 30.57 27.06
|
51 193.85000 -3.14 29.61 30.57 27.06
|
||||||
52 193.90 -3.19 29.58 30.58 27.04
|
52 193.90000 -3.21 29.56 30.59 27.04
|
||||||
53 193.95 -3.26 29.53 30.60 27.02
|
53 193.95000 -3.28 29.52 30.61 27.02
|
||||||
54 194.00 -3.33 29.48 30.62 27.00
|
54 194.00000 -3.35 29.47 30.63 27.00
|
||||||
55 194.05 -3.41 29.43 30.64 26.98
|
55 194.05000 -3.42 29.42 30.65 26.98
|
||||||
56 194.10 -3.48 29.38 30.66 26.96
|
56 194.10000 -3.50 29.37 30.67 26.96
|
||||||
57 194.15 -3.55 29.33 30.72 26.96
|
57 194.15000 -3.57 29.32 30.72 26.95
|
||||||
58 194.20 -3.63 29.28 30.78 26.95
|
58 194.20000 -3.64 29.26 30.78 26.95
|
||||||
59 194.25 -3.70 29.23 30.83 26.95
|
59 194.25000 -3.72 29.21 30.84 26.94
|
||||||
60 194.30 -3.77 29.18 30.89 26.94
|
60 194.30000 -3.79 29.16 30.90 26.94
|
||||||
61 194.35 -3.85 29.12 30.96 26.93
|
61 194.35000 -3.86 29.11 30.96 26.93
|
||||||
62 194.40 -3.92 29.07 31.02 26.93
|
62 194.40000 -3.93 29.06 31.02 26.92
|
||||||
63 194.45 -3.99 29.02 31.08 26.92
|
63 194.45000 -4.01 29.01 31.09 26.91
|
||||||
64 194.50 -4.06 28.97 31.14 26.91
|
64 194.50000 -4.08 28.96 31.15 26.91
|
||||||
65 194.55 -4.13 28.92 31.21 26.91
|
65 194.55000 -4.14 28.91 31.21 26.90
|
||||||
66 194.60 -4.19 28.88 31.27 26.90
|
66 194.60000 -4.21 28.86 31.28 26.90
|
||||||
67 194.65 -4.26 28.83 31.34 26.89
|
67 194.65000 -4.27 28.82 31.34 26.89
|
||||||
68 194.70 -4.33 28.78 31.41 26.89
|
68 194.70000 -4.34 28.77 31.41 26.88
|
||||||
69 194.75 -4.39 28.73 31.47 26.88
|
69 194.75000 -4.41 28.72 31.48 26.88
|
||||||
70 194.80 -4.46 28.68 31.54 26.87
|
70 194.80000 -4.47 28.67 31.55 26.87
|
||||||
71 194.85 -4.52 28.64 31.61 26.86
|
71 194.85000 -4.54 28.63 31.62 26.86
|
||||||
72 194.90 -4.59 28.59 31.68 26.86
|
72 194.90000 -4.60 28.58 31.69 26.85
|
||||||
73 194.95 -4.65 28.54 31.76 26.85
|
73 194.95000 -4.67 28.53 31.76 26.84
|
||||||
74 195.00 -4.72 28.49 31.83 26.84
|
74 195.00000 -4.73 28.48 31.84 26.83
|
||||||
75 195.05 -4.78 28.44 31.91 26.83
|
75 195.05000 -4.80 28.43 31.91 26.82
|
||||||
76 195.10 -4.85 28.39 31.91 26.79
|
76 195.10000 -4.86 28.38 31.91 26.79
|
||||||
|
|
||||||
(No source node specified: picked Site_A)
|
(No source node specified: picked Site_A)
|
||||||
|
|
||||||
|
|||||||
453
tests/invocation/transmission_main_example_long
Normal file
453
tests/invocation/transmission_main_example_long
Normal file
@@ -0,0 +1,453 @@
|
|||||||
|
There are 96 channels propagating
|
||||||
|
Power mode is set to True
|
||||||
|
=> it can be modified in eqpt_config.json - Span
|
||||||
|
|
||||||
|
There are 15 fiber spans over 1200 km between Site_A and Site_B
|
||||||
|
|
||||||
|
Now propagating between Site_A and Site_B:
|
||||||
|
|
||||||
|
Propagating with input power = [1;36;40m0.00 dBm[0m:
|
||||||
|
Transceiver Site_A
|
||||||
|
GSNR (0.1nm, dB): 100.00
|
||||||
|
GSNR (signal bw, dB): 95.92
|
||||||
|
OSNR ASE (0.1nm, dB): 100.00
|
||||||
|
OSNR ASE (signal bw, dB): 95.92
|
||||||
|
CD (ps/nm): 0.00
|
||||||
|
PMD (ps): 0.00
|
||||||
|
PDL (dB): 0.00
|
||||||
|
Roadm roadm Site A
|
||||||
|
effective loss (dB): 20.00
|
||||||
|
reference pch out (dBm): -20.00
|
||||||
|
actual pch out (dBm): -20.00
|
||||||
|
Edfa booster A
|
||||||
|
type_variety: std_medium_gain
|
||||||
|
effective gain(dB): 20.00
|
||||||
|
(before att_in and before output VOA)
|
||||||
|
noise figure (dB): 6.58
|
||||||
|
(including att_in)
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
Power In (dBm): -0.18
|
||||||
|
Power Out (dBm): 19.83
|
||||||
|
Delta_P (dB): 0.00
|
||||||
|
target pch (dBm): 0.00
|
||||||
|
effective pch (dBm): 0.00
|
||||||
|
actual pch out (dBm): 0.01
|
||||||
|
output VOA (dB): 0.00
|
||||||
|
Fiber Span1
|
||||||
|
type_variety: SSMF
|
||||||
|
length (km): 80.00
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
total loss (dB): 16.00
|
||||||
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
|
reference pch out (dBm): -16.00
|
||||||
|
actual pch out (dBm): -15.99
|
||||||
|
Edfa Edfa1
|
||||||
|
type_variety: test
|
||||||
|
effective gain(dB): 16.00
|
||||||
|
(before att_in and before output VOA)
|
||||||
|
noise figure (dB): 8.86
|
||||||
|
(including att_in)
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
Power In (dBm): 3.84
|
||||||
|
Power Out (dBm): 19.84
|
||||||
|
Delta_P (dB): 0.00
|
||||||
|
target pch (dBm): 0.00
|
||||||
|
effective pch (dBm): 0.00
|
||||||
|
actual pch out (dBm): 0.02
|
||||||
|
output VOA (dB): 0.00
|
||||||
|
Fiber Span2
|
||||||
|
type_variety: SSMF
|
||||||
|
length (km): 80.00
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
total loss (dB): 16.00
|
||||||
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
|
reference pch out (dBm): -16.00
|
||||||
|
actual pch out (dBm): -15.98
|
||||||
|
Edfa Edfa2
|
||||||
|
type_variety: test_fixed_gain
|
||||||
|
effective gain(dB): 16.00
|
||||||
|
(before att_in and before output VOA)
|
||||||
|
noise figure (dB): 9.00
|
||||||
|
(including att_in)
|
||||||
|
pad att_in (dB): 4.00
|
||||||
|
Power In (dBm): 3.84
|
||||||
|
Power Out (dBm): 19.85
|
||||||
|
Delta_P (dB): 0.00
|
||||||
|
target pch (dBm): 0.00
|
||||||
|
effective pch (dBm): 0.00
|
||||||
|
actual pch out (dBm): 0.03
|
||||||
|
output VOA (dB): 0.00
|
||||||
|
Fiber Span3
|
||||||
|
type_variety: SSMF
|
||||||
|
length (km): 80.00
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
total loss (dB): 16.00
|
||||||
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
|
reference pch out (dBm): -16.00
|
||||||
|
actual pch out (dBm): -15.97
|
||||||
|
Edfa Edfa3
|
||||||
|
type_variety: test
|
||||||
|
effective gain(dB): 16.00
|
||||||
|
(before att_in and before output VOA)
|
||||||
|
noise figure (dB): 8.86
|
||||||
|
(including att_in)
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
Power In (dBm): 3.85
|
||||||
|
Power Out (dBm): 19.86
|
||||||
|
Delta_P (dB): 0.00
|
||||||
|
target pch (dBm): 0.00
|
||||||
|
effective pch (dBm): 0.00
|
||||||
|
actual pch out (dBm): 0.04
|
||||||
|
output VOA (dB): 0.00
|
||||||
|
Fiber Span4
|
||||||
|
type_variety: SSMF
|
||||||
|
length (km): 80.00
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
total loss (dB): 16.00
|
||||||
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
|
reference pch out (dBm): -16.00
|
||||||
|
actual pch out (dBm): -15.96
|
||||||
|
Edfa Edfa4
|
||||||
|
type_variety: test_fixed_gain
|
||||||
|
effective gain(dB): 16.00
|
||||||
|
(before att_in and before output VOA)
|
||||||
|
noise figure (dB): 9.00
|
||||||
|
(including att_in)
|
||||||
|
pad att_in (dB): 4.00
|
||||||
|
Power In (dBm): 3.86
|
||||||
|
Power Out (dBm): 19.87
|
||||||
|
Delta_P (dB): 0.00
|
||||||
|
target pch (dBm): 0.00
|
||||||
|
effective pch (dBm): 0.00
|
||||||
|
actual pch out (dBm): 0.05
|
||||||
|
output VOA (dB): 0.00
|
||||||
|
Fiber Span5
|
||||||
|
type_variety: SSMF
|
||||||
|
length (km): 80.00
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
total loss (dB): 16.00
|
||||||
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
|
reference pch out (dBm): -16.00
|
||||||
|
actual pch out (dBm): -15.95
|
||||||
|
Edfa Edfa5
|
||||||
|
type_variety: test
|
||||||
|
effective gain(dB): 16.00
|
||||||
|
(before att_in and before output VOA)
|
||||||
|
noise figure (dB): 8.86
|
||||||
|
(including att_in)
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
Power In (dBm): 3.87
|
||||||
|
Power Out (dBm): 19.88
|
||||||
|
Delta_P (dB): 0.00
|
||||||
|
target pch (dBm): 0.00
|
||||||
|
effective pch (dBm): 0.00
|
||||||
|
actual pch out (dBm): 0.06
|
||||||
|
output VOA (dB): 0.00
|
||||||
|
Roadm roadm Site C
|
||||||
|
effective loss (dB): 20.00
|
||||||
|
reference pch out (dBm): -20.00
|
||||||
|
actual pch out (dBm): -20.00
|
||||||
|
Edfa booster C
|
||||||
|
type_variety: std_medium_gain
|
||||||
|
effective gain(dB): 20.00
|
||||||
|
(before att_in and before output VOA)
|
||||||
|
noise figure (dB): 6.58
|
||||||
|
(including att_in)
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
Power In (dBm): -0.18
|
||||||
|
Power Out (dBm): 19.83
|
||||||
|
Delta_P (dB): 0.00
|
||||||
|
target pch (dBm): 0.00
|
||||||
|
effective pch (dBm): 0.00
|
||||||
|
actual pch out (dBm): 0.01
|
||||||
|
output VOA (dB): 0.00
|
||||||
|
Fiber Span6
|
||||||
|
type_variety: SSMF
|
||||||
|
length (km): 80.00
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
total loss (dB): 16.00
|
||||||
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
|
reference pch out (dBm): -16.00
|
||||||
|
actual pch out (dBm): -15.99
|
||||||
|
Edfa Edfa6
|
||||||
|
type_variety: test_fixed_gain
|
||||||
|
effective gain(dB): 16.00
|
||||||
|
(before att_in and before output VOA)
|
||||||
|
noise figure (dB): 9.00
|
||||||
|
(including att_in)
|
||||||
|
pad att_in (dB): 4.00
|
||||||
|
Power In (dBm): 3.83
|
||||||
|
Power Out (dBm): 19.84
|
||||||
|
Delta_P (dB): 0.00
|
||||||
|
target pch (dBm): 0.00
|
||||||
|
effective pch (dBm): 0.00
|
||||||
|
actual pch out (dBm): 0.02
|
||||||
|
output VOA (dB): 0.00
|
||||||
|
Fiber Span7
|
||||||
|
type_variety: SSMF
|
||||||
|
length (km): 80.00
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
total loss (dB): 16.00
|
||||||
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
|
reference pch out (dBm): -16.00
|
||||||
|
actual pch out (dBm): -15.98
|
||||||
|
Edfa Edfa7
|
||||||
|
type_variety: test
|
||||||
|
effective gain(dB): 16.00
|
||||||
|
(before att_in and before output VOA)
|
||||||
|
noise figure (dB): 8.86
|
||||||
|
(including att_in)
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
Power In (dBm): 3.84
|
||||||
|
Power Out (dBm): 19.85
|
||||||
|
Delta_P (dB): 0.00
|
||||||
|
target pch (dBm): 0.00
|
||||||
|
effective pch (dBm): 0.00
|
||||||
|
actual pch out (dBm): 0.03
|
||||||
|
output VOA (dB): 0.00
|
||||||
|
Fiber Span8
|
||||||
|
type_variety: SSMF
|
||||||
|
length (km): 80.00
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
total loss (dB): 16.00
|
||||||
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
|
reference pch out (dBm): -16.00
|
||||||
|
actual pch out (dBm): -15.97
|
||||||
|
Edfa Edfa8
|
||||||
|
type_variety: test_fixed_gain
|
||||||
|
effective gain(dB): 16.00
|
||||||
|
(before att_in and before output VOA)
|
||||||
|
noise figure (dB): 9.00
|
||||||
|
(including att_in)
|
||||||
|
pad att_in (dB): 4.00
|
||||||
|
Power In (dBm): 3.85
|
||||||
|
Power Out (dBm): 19.86
|
||||||
|
Delta_P (dB): 0.00
|
||||||
|
target pch (dBm): 0.00
|
||||||
|
effective pch (dBm): 0.00
|
||||||
|
actual pch out (dBm): 0.04
|
||||||
|
output VOA (dB): 0.00
|
||||||
|
Fiber Span9
|
||||||
|
type_variety: SSMF
|
||||||
|
length (km): 80.00
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
total loss (dB): 16.00
|
||||||
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
|
reference pch out (dBm): -16.00
|
||||||
|
actual pch out (dBm): -15.96
|
||||||
|
Edfa Edfa9
|
||||||
|
type_variety: test
|
||||||
|
effective gain(dB): 16.00
|
||||||
|
(before att_in and before output VOA)
|
||||||
|
noise figure (dB): 8.86
|
||||||
|
(including att_in)
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
Power In (dBm): 3.86
|
||||||
|
Power Out (dBm): 19.87
|
||||||
|
Delta_P (dB): 0.00
|
||||||
|
target pch (dBm): 0.00
|
||||||
|
effective pch (dBm): 0.00
|
||||||
|
actual pch out (dBm): 0.05
|
||||||
|
output VOA (dB): 0.00
|
||||||
|
Fiber Span10
|
||||||
|
type_variety: SSMF
|
||||||
|
length (km): 80.00
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
total loss (dB): 16.00
|
||||||
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
|
reference pch out (dBm): -16.00
|
||||||
|
actual pch out (dBm): -15.95
|
||||||
|
Edfa Edfa10
|
||||||
|
type_variety: test_fixed_gain
|
||||||
|
effective gain(dB): 16.00
|
||||||
|
(before att_in and before output VOA)
|
||||||
|
noise figure (dB): 9.00
|
||||||
|
(including att_in)
|
||||||
|
pad att_in (dB): 4.00
|
||||||
|
Power In (dBm): 3.87
|
||||||
|
Power Out (dBm): 19.88
|
||||||
|
Delta_P (dB): 0.00
|
||||||
|
target pch (dBm): 0.00
|
||||||
|
effective pch (dBm): 0.00
|
||||||
|
actual pch out (dBm): 0.06
|
||||||
|
output VOA (dB): 0.00
|
||||||
|
Roadm roadm Site D
|
||||||
|
effective loss (dB): 20.00
|
||||||
|
reference pch out (dBm): -20.00
|
||||||
|
actual pch out (dBm): -20.00
|
||||||
|
Edfa booster D
|
||||||
|
type_variety: std_medium_gain
|
||||||
|
effective gain(dB): 20.00
|
||||||
|
(before att_in and before output VOA)
|
||||||
|
noise figure (dB): 6.58
|
||||||
|
(including att_in)
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
Power In (dBm): -0.18
|
||||||
|
Power Out (dBm): 19.83
|
||||||
|
Delta_P (dB): 0.00
|
||||||
|
target pch (dBm): 0.00
|
||||||
|
effective pch (dBm): 0.00
|
||||||
|
actual pch out (dBm): 0.01
|
||||||
|
output VOA (dB): 0.00
|
||||||
|
Fiber Span11
|
||||||
|
type_variety: SSMF
|
||||||
|
length (km): 80.00
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
total loss (dB): 16.00
|
||||||
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
|
reference pch out (dBm): -16.00
|
||||||
|
actual pch out (dBm): -15.99
|
||||||
|
Edfa Edfa11
|
||||||
|
type_variety: test
|
||||||
|
effective gain(dB): 16.00
|
||||||
|
(before att_in and before output VOA)
|
||||||
|
noise figure (dB): 8.86
|
||||||
|
(including att_in)
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
Power In (dBm): 3.83
|
||||||
|
Power Out (dBm): 19.84
|
||||||
|
Delta_P (dB): 0.00
|
||||||
|
target pch (dBm): 0.00
|
||||||
|
effective pch (dBm): 0.00
|
||||||
|
actual pch out (dBm): 0.02
|
||||||
|
output VOA (dB): 0.00
|
||||||
|
Fiber Span12
|
||||||
|
type_variety: SSMF
|
||||||
|
length (km): 80.00
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
total loss (dB): 16.00
|
||||||
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
|
reference pch out (dBm): -16.00
|
||||||
|
actual pch out (dBm): -15.98
|
||||||
|
Edfa Edfa12
|
||||||
|
type_variety: test_fixed_gain
|
||||||
|
effective gain(dB): 16.00
|
||||||
|
(before att_in and before output VOA)
|
||||||
|
noise figure (dB): 9.00
|
||||||
|
(including att_in)
|
||||||
|
pad att_in (dB): 4.00
|
||||||
|
Power In (dBm): 3.84
|
||||||
|
Power Out (dBm): 19.85
|
||||||
|
Delta_P (dB): 0.00
|
||||||
|
target pch (dBm): 0.00
|
||||||
|
effective pch (dBm): 0.00
|
||||||
|
actual pch out (dBm): 0.03
|
||||||
|
output VOA (dB): 0.00
|
||||||
|
Roadm roadm Site E
|
||||||
|
effective loss (dB): 20.00
|
||||||
|
reference pch out (dBm): -20.00
|
||||||
|
actual pch out (dBm): -20.00
|
||||||
|
Edfa booster E
|
||||||
|
type_variety: std_medium_gain
|
||||||
|
effective gain(dB): 20.00
|
||||||
|
(before att_in and before output VOA)
|
||||||
|
noise figure (dB): 6.58
|
||||||
|
(including att_in)
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
Power In (dBm): -0.18
|
||||||
|
Power Out (dBm): 19.83
|
||||||
|
Delta_P (dB): 0.00
|
||||||
|
target pch (dBm): 0.00
|
||||||
|
effective pch (dBm): 0.00
|
||||||
|
actual pch out (dBm): 0.01
|
||||||
|
output VOA (dB): 0.00
|
||||||
|
Fiber Span13
|
||||||
|
type_variety: SSMF
|
||||||
|
length (km): 80.00
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
total loss (dB): 16.00
|
||||||
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
|
reference pch out (dBm): -16.00
|
||||||
|
actual pch out (dBm): -15.99
|
||||||
|
Edfa Edfa13
|
||||||
|
type_variety: test
|
||||||
|
effective gain(dB): 16.00
|
||||||
|
(before att_in and before output VOA)
|
||||||
|
noise figure (dB): 8.86
|
||||||
|
(including att_in)
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
Power In (dBm): 3.83
|
||||||
|
Power Out (dBm): 19.84
|
||||||
|
Delta_P (dB): 0.00
|
||||||
|
target pch (dBm): 0.00
|
||||||
|
effective pch (dBm): 0.00
|
||||||
|
actual pch out (dBm): 0.02
|
||||||
|
output VOA (dB): 0.00
|
||||||
|
Fiber Span14
|
||||||
|
type_variety: SSMF
|
||||||
|
length (km): 80.00
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
total loss (dB): 16.00
|
||||||
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
|
reference pch out (dBm): -16.00
|
||||||
|
actual pch out (dBm): -15.98
|
||||||
|
Edfa Edfa14
|
||||||
|
type_variety: test_fixed_gain
|
||||||
|
effective gain(dB): 16.00
|
||||||
|
(before att_in and before output VOA)
|
||||||
|
noise figure (dB): 9.00
|
||||||
|
(including att_in)
|
||||||
|
pad att_in (dB): 4.00
|
||||||
|
Power In (dBm): 3.84
|
||||||
|
Power Out (dBm): 19.85
|
||||||
|
Delta_P (dB): 0.00
|
||||||
|
target pch (dBm): 0.00
|
||||||
|
effective pch (dBm): 0.00
|
||||||
|
actual pch out (dBm): 0.03
|
||||||
|
output VOA (dB): 0.00
|
||||||
|
Fiber Span15
|
||||||
|
type_variety: SSMF
|
||||||
|
length (km): 80.00
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
total loss (dB): 16.00
|
||||||
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
|
reference pch out (dBm): -16.00
|
||||||
|
actual pch out (dBm): -15.97
|
||||||
|
Edfa Edfa15
|
||||||
|
type_variety: test
|
||||||
|
effective gain(dB): 16.00
|
||||||
|
(before att_in and before output VOA)
|
||||||
|
noise figure (dB): 8.86
|
||||||
|
(including att_in)
|
||||||
|
pad att_in (dB): 0.00
|
||||||
|
Power In (dBm): 3.85
|
||||||
|
Power Out (dBm): 19.86
|
||||||
|
Delta_P (dB): 0.00
|
||||||
|
target pch (dBm): 0.00
|
||||||
|
effective pch (dBm): 0.00
|
||||||
|
actual pch out (dBm): 0.04
|
||||||
|
output VOA (dB): 0.00
|
||||||
|
Roadm roadm Site B
|
||||||
|
effective loss (dB): 20.00
|
||||||
|
reference pch out (dBm): -20.00
|
||||||
|
actual pch out (dBm): -20.00
|
||||||
|
Transceiver Site_B
|
||||||
|
GSNR (0.1nm, dB): 17.85
|
||||||
|
GSNR (signal bw, dB): 13.77
|
||||||
|
OSNR ASE (0.1nm, dB): 19.70
|
||||||
|
OSNR ASE (signal bw, dB): 15.62
|
||||||
|
CD (ps/nm): 20040.00
|
||||||
|
PMD (ps): 1.39
|
||||||
|
PDL (dB): 0.00
|
||||||
|
|
||||||
|
Transmission result for input power = 0.00 dBm:
|
||||||
|
Final GSNR (0.1 nm): [1;36;40m17.85 dB[0m
|
||||||
|
|
||||||
|
(No source node specified: picked Site_A)
|
||||||
|
|
||||||
|
(No destination node specified: picked Site_B)
|
||||||
@@ -252,8 +252,9 @@ Transceiver trx Lannion_CAS
|
|||||||
PMD (ps): 0.00
|
PMD (ps): 0.00
|
||||||
PDL (dB): 0.00
|
PDL (dB): 0.00
|
||||||
Roadm roadm Lannion_CAS
|
Roadm roadm Lannion_CAS
|
||||||
effective loss (dB): 23.00
|
effective loss (dB): 23.00
|
||||||
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
|
||||||
@@ -266,6 +267,7 @@ Edfa east edfa in Lannion_CAS to Corlay
|
|||||||
Delta_P (dB): 0.00
|
Delta_P (dB): 0.00
|
||||||
target pch (dBm): 3.00
|
target pch (dBm): 3.00
|
||||||
effective pch (dBm): 1.18
|
effective pch (dBm): 1.18
|
||||||
|
actual pch out (dBm): 1.18
|
||||||
output VOA (dB): 0.00
|
output VOA (dB): 0.00
|
||||||
Fiber fiber (Lannion_CAS → Corlay)-F061
|
Fiber fiber (Lannion_CAS → Corlay)-F061
|
||||||
type_variety: SSMF
|
type_variety: SSMF
|
||||||
@@ -274,7 +276,8 @@ Fiber fiber (Lannion_CAS → Corlay)-F061
|
|||||||
total loss (dB): 4.00
|
total loss (dB): 4.00
|
||||||
(includes conn loss (dB) in: 0.00 out: 0.00)
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
(conn loss out includes EOL margin defined in eqpt_config.json)
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
pch out (dBm): -2.82
|
reference pch out (dBm): -2.82
|
||||||
|
actual pch out (dBm): -2.81
|
||||||
Fused west fused spans in Corlay
|
Fused west fused spans in Corlay
|
||||||
loss (dB): 1.00
|
loss (dB): 1.00
|
||||||
Fiber fiber (Corlay → Loudeac)-F010
|
Fiber fiber (Corlay → Loudeac)-F010
|
||||||
@@ -284,7 +287,8 @@ Fiber fiber (Corlay → Loudeac)-F010
|
|||||||
total loss (dB): 10.00
|
total loss (dB): 10.00
|
||||||
(includes conn loss (dB) in: 0.00 out: 0.00)
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
(conn loss out includes EOL margin defined in eqpt_config.json)
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
pch out (dBm): -13.82
|
reference pch out (dBm): -13.82
|
||||||
|
actual pch out (dBm): -13.81
|
||||||
Fused west fused spans in Loudeac
|
Fused west fused spans in Loudeac
|
||||||
loss (dB): 1.00
|
loss (dB): 1.00
|
||||||
Fiber fiber (Loudeac → Lorient_KMA)-F054
|
Fiber fiber (Loudeac → Lorient_KMA)-F054
|
||||||
@@ -294,23 +298,26 @@ Fiber fiber (Loudeac → Lorient_KMA)-F054
|
|||||||
total loss (dB): 12.00
|
total loss (dB): 12.00
|
||||||
(includes conn loss (dB) in: 0.00 out: 0.00)
|
(includes conn loss (dB) in: 0.00 out: 0.00)
|
||||||
(conn loss out includes EOL margin defined in eqpt_config.json)
|
(conn loss out includes EOL margin defined in eqpt_config.json)
|
||||||
pch out (dBm): -26.82
|
reference pch out (dBm): -26.82
|
||||||
|
actual pch out (dBm): -26.81
|
||||||
Edfa west edfa in Lorient_KMA to Loudeac
|
Edfa west edfa in Lorient_KMA to Loudeac
|
||||||
type_variety: test
|
type_variety: test
|
||||||
effective gain(dB): 28.00
|
effective gain(dB): 27.99
|
||||||
(before att_in and before output VOA)
|
(before att_in and before output VOA)
|
||||||
noise figure (dB): 5.76
|
noise figure (dB): 5.76
|
||||||
(including att_in)
|
(including att_in)
|
||||||
pad att_in (dB): 0.00
|
pad att_in (dB): 0.00
|
||||||
Power In (dBm): -6.99
|
Power In (dBm): -6.99
|
||||||
Power Out (dBm): 21.04
|
Power Out (dBm): 21.03
|
||||||
Delta_P (dB): -1.82
|
Delta_P (dB): -1.82
|
||||||
target pch (dBm): 1.18
|
target pch (dBm): 1.18
|
||||||
effective pch (dBm): 1.18
|
effective pch (dBm): 1.17
|
||||||
|
actual pch out (dBm): 1.21
|
||||||
output VOA (dB): 0.00
|
output VOA (dB): 0.00
|
||||||
Roadm roadm Lorient_KMA
|
Roadm roadm Lorient_KMA
|
||||||
effective loss (dB): 21.18
|
effective loss (dB): 21.17
|
||||||
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.94
|
GSNR (0.1nm, dB): 23.94
|
||||||
GSNR (signal bw, dB): 19.85
|
GSNR (signal bw, dB): 19.85
|
||||||
|
|||||||
6
tests/requirements.txt
Normal file
6
tests/requirements.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
build>=0.10.0,<1
|
||||||
|
pytest>=6.2.5,<7
|
||||||
|
pandas>=1.3.5,<2
|
||||||
|
|
||||||
|
# flake v6 killed the --diff option
|
||||||
|
flake8>=5.0.4,<6
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
from numpy import zeros, array
|
from numpy import zeros, array
|
||||||
from gnpy.core.elements import Transceiver, Edfa
|
from gnpy.core.elements import Transceiver, Edfa
|
||||||
from gnpy.core.utils import automatic_fmax, lin2db, db2lin, merge_amplifier_restrictions
|
from gnpy.core.utils import automatic_fmax, lin2db, db2lin, merge_amplifier_restrictions
|
||||||
from gnpy.core.info import create_input_spectral_information, Pref
|
from gnpy.core.info import create_input_spectral_information, ReferenceCarrier
|
||||||
from gnpy.core.network import build_network
|
from gnpy.core.network import build_network
|
||||||
from gnpy.tools.json_io import load_network, load_equipment
|
from gnpy.tools.json_io import load_network, load_equipment
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
@@ -73,7 +73,9 @@ 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_max, 0.15, bw, 1e-3, spacing)
|
return create_input_spectral_information(f_min=f_min, f_max=f_max, roll_off=0.15, baud_rate=bw, power=1e-3,
|
||||||
|
spacing=spacing, tx_osnr=40.0,
|
||||||
|
ref_carrier=ReferenceCarrier(baud_rate=32e9, slot_width=50e9))
|
||||||
|
|
||||||
|
|
||||||
@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)])
|
||||||
@@ -84,7 +86,7 @@ def test_variable_gain_nf(gain, nf_expected, setup_edfa_variable_gain, si):
|
|||||||
si.nli /= db2lin(gain)
|
si.nli /= db2lin(gain)
|
||||||
si.ase /= db2lin(gain)
|
si.ase /= db2lin(gain)
|
||||||
edfa.operational.gain_target = gain
|
edfa.operational.gain_target = gain
|
||||||
si.pref = si.pref._replace(p_span0=0, p_spani=-gain, neq_ch=lin2db(si.number_of_channels))
|
si.pref = si.pref._replace(p_span0=0, p_spani=-gain)
|
||||||
edfa.interpol_params(si)
|
edfa.interpol_params(si)
|
||||||
result = edfa.nf
|
result = edfa.nf
|
||||||
assert pytest.approx(nf_expected, abs=0.01) == result[0]
|
assert pytest.approx(nf_expected, abs=0.01) == result[0]
|
||||||
@@ -98,7 +100,7 @@ def test_fixed_gain_nf(gain, nf_expected, setup_edfa_fixed_gain, si):
|
|||||||
si.nli /= db2lin(gain)
|
si.nli /= db2lin(gain)
|
||||||
si.ase /= db2lin(gain)
|
si.ase /= db2lin(gain)
|
||||||
edfa.operational.gain_target = gain
|
edfa.operational.gain_target = gain
|
||||||
si.pref = si.pref._replace(p_span0=0, p_spani=-gain, neq_ch=lin2db(si.number_of_channels))
|
si.pref = si.pref._replace(p_span0=0, p_spani=-gain)
|
||||||
edfa.interpol_params(si)
|
edfa.interpol_params(si)
|
||||||
assert pytest.approx(nf_expected, abs=0.01) == edfa.nf[0]
|
assert pytest.approx(nf_expected, abs=0.01) == edfa.nf[0]
|
||||||
|
|
||||||
@@ -123,7 +125,7 @@ def test_compare_nf_models(gain, setup_edfa_variable_gain, si):
|
|||||||
si.ase /= db2lin(gain)
|
si.ase /= db2lin(gain)
|
||||||
edfa.operational.gain_target = gain
|
edfa.operational.gain_target = gain
|
||||||
# edfa is variable gain type
|
# edfa is variable gain type
|
||||||
si.pref = si.pref._replace(p_span0=0, p_spani=-gain, neq_ch=lin2db(si.number_of_channels))
|
si.pref = si.pref._replace(p_span0=0, p_spani=-gain)
|
||||||
edfa.interpol_params(si)
|
edfa.interpol_params(si)
|
||||||
nf_model = edfa.nf[0]
|
nf_model = edfa.nf[0]
|
||||||
|
|
||||||
@@ -178,7 +180,7 @@ def test_ase_noise(gain, si, setup_trx, bw):
|
|||||||
si = span(si)
|
si = span(si)
|
||||||
print(span)
|
print(span)
|
||||||
|
|
||||||
si.pref = si.pref._replace(p_span0=0, p_spani=-gain, neq_ch=lin2db(si.number_of_channels))
|
si.pref = si.pref._replace(p_span0=0, p_spani=-gain)
|
||||||
edfa.interpol_params(si)
|
edfa.interpol_params(si)
|
||||||
nf = edfa.nf
|
nf = edfa.nf
|
||||||
print('nf', nf)
|
print('nf', nf)
|
||||||
|
|||||||
588
tests/test_equalization.py
Normal file
588
tests/test_equalization.py
Normal file
@@ -0,0 +1,588 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Author: Esther Le Rouzic
|
||||||
|
# @Date: 2019-05-22
|
||||||
|
"""
|
||||||
|
@author: esther.lerouzic
|
||||||
|
checks that new equalization option give the same output as old one:
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
|
import pytest
|
||||||
|
from numpy.testing import assert_allclose, assert_array_equal, assert_raises
|
||||||
|
from numpy import array
|
||||||
|
|
||||||
|
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.elements import Roadm
|
||||||
|
from gnpy.core.info import create_input_spectral_information, Pref, create_arbitrary_spectral_information, \
|
||||||
|
ReferenceCarrier
|
||||||
|
from gnpy.core.equipment import trx_mode_params
|
||||||
|
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.topology.request import PathRequest, compute_constrained_path, propagate
|
||||||
|
|
||||||
|
|
||||||
|
TEST_DIR = Path(__file__).parent
|
||||||
|
EQPT_FILENAME = TEST_DIR / 'data/eqpt_config.json'
|
||||||
|
NETWORK_FILENAME = TEST_DIR / 'data/testTopology_expected.json'
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('degree, equalization_type, target, expected_pch_out_dbm, expected_si',
|
||||||
|
[('east edfa in Lannion_CAS to Morlaix', 'target_pch_out_db', -20, -20, [-20, -20, -20, -20, -20]),
|
||||||
|
('east edfa in Lannion_CAS to Morlaix', 'target_psd_out_mWperGHz', 5e-4, -17.9588,
|
||||||
|
[-17.9588, -16.7778, -14.9485, -16.7778, -17.9588]),
|
||||||
|
('east edfa in Lannion_CAS to Morlaix', 'target_out_mWperSlotWidth', 3e-4, -18.2390,
|
||||||
|
[-19.4885, -18.2390, -16.4781, -18.2390, -19.4885]),
|
||||||
|
('east edfa in Lannion_CAS to Corlay', 'target_pch_out_db', -20, -16, [-16, -16, -16, -16, -16]),
|
||||||
|
('east edfa in Lannion_CAS to Corlay', 'target_psd_out_mWperGHz', 5e-4, -16, [-16, -16, -16, -16, -16]),
|
||||||
|
('east edfa in Lannion_CAS to Corlay', 'target_out_mWperSlotWidth', 5e-4, -16, [-16, -16, -16, -16, -16]),
|
||||||
|
('east edfa in Lannion_CAS to Stbrieuc', 'target_pch_out_db', -20, -17.16699,
|
||||||
|
[-17.16698771, -15.98599459, -14.15668776, -15.98599459, -17.16698771]),
|
||||||
|
('east edfa in Lannion_CAS to Stbrieuc', 'target_psd_out_mWperGHz', 5e-4, -17.16699,
|
||||||
|
[-17.16698771, -15.98599459, -14.15668776, -15.98599459, -17.16698771]),
|
||||||
|
('east edfa in Lannion_CAS to Stbrieuc', 'target_out_mWperSlotWidth', 5e-4, -17.16699,
|
||||||
|
[-17.16698771, -15.98599459, -14.15668776, -15.98599459, -17.16698771])])
|
||||||
|
@pytest.mark.parametrize('delta_pdb_per_channel', [[0, 0, 0, 0, 0], [1, 3, 0, -5, 0]])
|
||||||
|
def test_equalization_combination_degree(delta_pdb_per_channel, degree, equalization_type, target,
|
||||||
|
expected_pch_out_dbm, expected_si):
|
||||||
|
"""Check that ROADM correctly computes power of thr reference channel based on different
|
||||||
|
combination of equalization for ROADM and per degree
|
||||||
|
"""
|
||||||
|
|
||||||
|
roadm_config = {
|
||||||
|
"uid": "roadm Lannion_CAS",
|
||||||
|
"params": {
|
||||||
|
"per_degree_pch_out_db": {
|
||||||
|
"east edfa in Lannion_CAS to Corlay": -16
|
||||||
|
},
|
||||||
|
"per_degree_psd_out_mWperGHz": {
|
||||||
|
"east edfa in Lannion_CAS to Stbrieuc": 6e-4
|
||||||
|
},
|
||||||
|
equalization_type: target,
|
||||||
|
"add_drop_osnr": 38,
|
||||||
|
"pmd": 0,
|
||||||
|
"pdl": 0,
|
||||||
|
"restrictions": {
|
||||||
|
"preamp_variety_list": [],
|
||||||
|
"booster_variety_list": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
roadm = Roadm(**roadm_config)
|
||||||
|
frequency = 191e12 + array([0, 50e9, 150e9, 225e9, 275e9])
|
||||||
|
slot_width = array([37.5e9, 50e9, 75e9, 50e9, 37.5e9])
|
||||||
|
baud_rate = array([32e9, 42e9, 64e9, 42e9, 32e9])
|
||||||
|
signal = dbm2watt(array([-20.0, -18.0, -22.0, -25.0, -16.0]))
|
||||||
|
ref_carrier = ReferenceCarrier(baud_rate=32e9, slot_width=50e9)
|
||||||
|
pref = Pref(p_span0=0, p_spani=0, ref_carrier=ref_carrier)
|
||||||
|
si = create_arbitrary_spectral_information(frequency=frequency, slot_width=slot_width,
|
||||||
|
signal=signal, baud_rate=baud_rate, roll_off=0.15,
|
||||||
|
delta_pdb_per_channel=delta_pdb_per_channel,
|
||||||
|
tx_osnr=None, ref_power=pref)
|
||||||
|
to_json_before_propagation = {
|
||||||
|
'uid': 'roadm Lannion_CAS',
|
||||||
|
'type': 'Roadm',
|
||||||
|
'params': {
|
||||||
|
equalization_type: target,
|
||||||
|
'restrictions': {'preamp_variety_list': [], 'booster_variety_list': []},
|
||||||
|
'per_degree_pch_out_db': {
|
||||||
|
'east edfa in Lannion_CAS to Corlay': -16},
|
||||||
|
"per_degree_psd_out_mWperGHz": {
|
||||||
|
"east edfa in Lannion_CAS to Stbrieuc": 6e-4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'metadata': {'location': {'latitude': 0, 'longitude': 0, 'city': None, 'region': None}}
|
||||||
|
}
|
||||||
|
assert roadm.to_json == to_json_before_propagation
|
||||||
|
si = roadm(si, degree)
|
||||||
|
assert roadm.ref_pch_out_dbm == pytest.approx(expected_pch_out_dbm, rel=1e-4)
|
||||||
|
assert_allclose(expected_si, roadm.get_per_degree_power(degree, spectral_info=si), rtol=1e-3)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('equalization_type', ["target_psd_out_mWperGHz", "target_out_mWperSlotWidth"])
|
||||||
|
def test_wrong_element_config(equalization_type):
|
||||||
|
"""Check that 2 equalization correcty raise a config error
|
||||||
|
"""
|
||||||
|
roadm_config = {
|
||||||
|
"uid": "roadm Brest_KLA",
|
||||||
|
"params": {
|
||||||
|
"per_degree_pch_out_db": {},
|
||||||
|
"target_pch_out_db": -20,
|
||||||
|
equalization_type: 3.125e-4,
|
||||||
|
"add_drop_osnr": 38,
|
||||||
|
"pmd": 0,
|
||||||
|
"pdl": 0,
|
||||||
|
"restrictions": {
|
||||||
|
"preamp_variety_list": [],
|
||||||
|
"booster_variety_list": []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"city": "Brest_KLA",
|
||||||
|
"region": "RLD",
|
||||||
|
"latitude": 4.0,
|
||||||
|
"longitude": 0.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
with pytest.raises(ConfigurationError):
|
||||||
|
_ = Roadm(**roadm_config)
|
||||||
|
|
||||||
|
|
||||||
|
def test_merge_equalization():
|
||||||
|
"""Check that if equalization is not defined default one is correctly take and
|
||||||
|
else that it is not overwritten
|
||||||
|
"""
|
||||||
|
json_data = {
|
||||||
|
"elements": [{
|
||||||
|
"uid": "roadm Brest_KLA",
|
||||||
|
"type": "Roadm"}],
|
||||||
|
"connections": []
|
||||||
|
}
|
||||||
|
equipment = load_equipment(EQPT_FILENAME)
|
||||||
|
network = network_from_json(json_data, equipment)
|
||||||
|
roadm = [n for n in network.nodes()][0]
|
||||||
|
assert roadm.target_pch_out_dbm == -20
|
||||||
|
delattr(equipment['Roadm']['default'], 'target_pch_out_db')
|
||||||
|
setattr(equipment['Roadm']['default'], 'target_psd_out_mWperGHz', power_dbm_to_psd_mw_ghz(-20, 32e9))
|
||||||
|
# json_data is changed (type is popped from json_data with network_from_json_function). Create a new one:
|
||||||
|
json_data = {
|
||||||
|
"elements": [{
|
||||||
|
"uid": "roadm Brest_KLA",
|
||||||
|
"type": "Roadm"}],
|
||||||
|
"connections": []
|
||||||
|
}
|
||||||
|
network = network_from_json(json_data, equipment)
|
||||||
|
roadm = [n for n in network.nodes()][0]
|
||||||
|
assert roadm.target_pch_out_dbm is None
|
||||||
|
assert roadm.target_psd_out_mWperGHz == 3.125e-4
|
||||||
|
assert roadm.target_out_mWperSlotWidth is None
|
||||||
|
json_data = {
|
||||||
|
"elements": [{
|
||||||
|
"uid": "roadm Brest_KLA",
|
||||||
|
"type": "Roadm",
|
||||||
|
"params": {"target_pch_out_db": -18}}],
|
||||||
|
"connections": []
|
||||||
|
}
|
||||||
|
network = network_from_json(json_data, equipment)
|
||||||
|
roadm = [n for n in network.nodes()][0]
|
||||||
|
assert roadm.target_pch_out_dbm == -18
|
||||||
|
assert roadm.target_psd_out_mWperGHz is None
|
||||||
|
assert roadm.target_out_mWperSlotWidth is None
|
||||||
|
json_data = {
|
||||||
|
"elements": [{
|
||||||
|
"uid": "roadm Brest_KLA",
|
||||||
|
"type": "Roadm",
|
||||||
|
"params": {"target_psd_out_mWperGHz": 5e-4}}],
|
||||||
|
"connections": []
|
||||||
|
}
|
||||||
|
network = network_from_json(json_data, equipment)
|
||||||
|
roadm = [n for n in network.nodes()][0]
|
||||||
|
assert roadm.target_pch_out_dbm is None
|
||||||
|
assert roadm.target_psd_out_mWperGHz == 5e-4
|
||||||
|
assert roadm.target_out_mWperSlotWidth is None
|
||||||
|
json_data = {
|
||||||
|
"elements": [{
|
||||||
|
"uid": "roadm Brest_KLA",
|
||||||
|
"type": "Roadm",
|
||||||
|
"params": {"target_out_mWperSlotWidth": 3e-4}}],
|
||||||
|
"connections": []
|
||||||
|
}
|
||||||
|
network = network_from_json(json_data, equipment)
|
||||||
|
roadm = [n for n in network.nodes()][0]
|
||||||
|
assert roadm.target_pch_out_dbm is None
|
||||||
|
assert roadm.target_psd_out_mWperGHz is None
|
||||||
|
assert roadm.target_out_mWperSlotWidth == 3e-4
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('target_out, delta_pdb_per_channel, correction',
|
||||||
|
[(-20, [0, 1, 3, 0.5, -2], [0, 0, 5, 5.5, 0]),
|
||||||
|
(-20, [0, 0, 0, 0, 0], [0, 0, 2, 5, 0]),
|
||||||
|
(-20, [-2, -2, -2, -2, -2], [0, 0, 0, 3, 0]),
|
||||||
|
(-20, [0, 2, -2, -5, 4], [0, 0, 0, 0, 0]),
|
||||||
|
(-25.5, [0, 1, 3, 0.5, -2], [0, 0, 0, 0, 0]), ])
|
||||||
|
def test_low_input_power(target_out, delta_pdb_per_channel, correction):
|
||||||
|
"""check that ROADM correctly equalizes on small examples, assumes p_span_0 = 0
|
||||||
|
case of power equalisation
|
||||||
|
"""
|
||||||
|
frequency = 191e12 + array([0, 50e9, 150e9, 225e9, 275e9])
|
||||||
|
slot_width = array([37.5e9, 50e9, 75e9, 50e9, 37.5e9])
|
||||||
|
baud_rate = array([32e9, 42e9, 64e9, 42e9, 32e9])
|
||||||
|
signal = dbm2watt(array([-20.0, -18.0, -22.0, -25.0, -16.0]))
|
||||||
|
target = target_out + array(delta_pdb_per_channel)
|
||||||
|
ref_carrier = ReferenceCarrier(baud_rate=32e9, slot_width=50e9)
|
||||||
|
pref = Pref(p_span0=0, p_spani=-20, ref_carrier=ref_carrier)
|
||||||
|
si = create_arbitrary_spectral_information(frequency=frequency, slot_width=slot_width,
|
||||||
|
signal=signal, baud_rate=baud_rate, roll_off=0.15,
|
||||||
|
delta_pdb_per_channel=delta_pdb_per_channel,
|
||||||
|
tx_osnr=None, ref_power=pref)
|
||||||
|
roadm_config = {
|
||||||
|
"uid": "roadm Brest_KLA",
|
||||||
|
"params": {
|
||||||
|
"per_degree_pch_out_db": {},
|
||||||
|
"target_pch_out_db": target_out,
|
||||||
|
"add_drop_osnr": 38,
|
||||||
|
"pmd": 0,
|
||||||
|
"pdl": 0,
|
||||||
|
"restrictions": {
|
||||||
|
"preamp_variety_list": [],
|
||||||
|
"booster_variety_list": []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"city": "Brest_KLA",
|
||||||
|
"region": "RLD",
|
||||||
|
"latitude": 4.0,
|
||||||
|
"longitude": 0.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
roadm = Roadm(**roadm_config)
|
||||||
|
si = roadm(si, 'toto')
|
||||||
|
assert_allclose(watt2dbm(si.signal), target - correction, rtol=1e-5)
|
||||||
|
# in other words check that if target is below input power, target is applied else power is unchanged
|
||||||
|
assert_allclose((watt2dbm(signal) >= target) * target + (watt2dbm(signal) < target) * watt2dbm(signal),
|
||||||
|
watt2dbm(si.signal), rtol=1e-5)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('target_out, delta_pdb_per_channel, correction',
|
||||||
|
[(3.125e-4,
|
||||||
|
[0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 2 + lin2db(64 / 32), 5 + lin2db(42 / 32), 0]),
|
||||||
|
(3.125e-4,
|
||||||
|
[1, 3, 0, -5, 0],
|
||||||
|
[1, 1 + lin2db(42 / 32), 2 + lin2db(64 / 32), 0 + lin2db(42 / 32), 0]), ])
|
||||||
|
def test_2low_input_power(target_out, delta_pdb_per_channel, correction):
|
||||||
|
"""check that ROADM correctly equalizes on small examples, assumes p_span_0 = 0
|
||||||
|
case of PSD equalisation
|
||||||
|
"""
|
||||||
|
frequency = 191e12 + array([0, 50e9, 150e9, 225e9, 275e9])
|
||||||
|
slot_width = array([37.5e9, 50e9, 75e9, 50e9, 37.5e9])
|
||||||
|
baud_rate = array([32e9, 42e9, 64e9, 42e9, 32e9])
|
||||||
|
signal = dbm2watt(array([-20.0, -18.0, -22.0, -25.0, -16.0]))
|
||||||
|
target = psd2powerdbm(target_out, baud_rate) + array(delta_pdb_per_channel)
|
||||||
|
ref_carrier = ReferenceCarrier(baud_rate=32e9, slot_width=50e9)
|
||||||
|
pref = Pref(p_span0=0, p_spani=-20, ref_carrier=ref_carrier)
|
||||||
|
si = create_arbitrary_spectral_information(frequency=frequency, slot_width=slot_width,
|
||||||
|
signal=signal, baud_rate=baud_rate, roll_off=0.15,
|
||||||
|
delta_pdb_per_channel=delta_pdb_per_channel,
|
||||||
|
tx_osnr=None, ref_power=pref)
|
||||||
|
roadm_config = {
|
||||||
|
"uid": "roadm Brest_KLA",
|
||||||
|
"params": {
|
||||||
|
"per_degree_pch_out_db": {},
|
||||||
|
"target_psd_out_mWperGHz": target_out,
|
||||||
|
"add_drop_osnr": 38,
|
||||||
|
"pmd": 0,
|
||||||
|
"pdl": 0,
|
||||||
|
"restrictions": {
|
||||||
|
"preamp_variety_list": [],
|
||||||
|
"booster_variety_list": []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"location": {
|
||||||
|
"city": "Brest_KLA",
|
||||||
|
"region": "RLD",
|
||||||
|
"latitude": 4.0,
|
||||||
|
"longitude": 0.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
roadm = Roadm(**roadm_config)
|
||||||
|
si = roadm(si, 'toto')
|
||||||
|
assert_allclose(watt2dbm(si.signal), target - correction, rtol=1e-5)
|
||||||
|
|
||||||
|
|
||||||
|
def net_setup(equipment):
|
||||||
|
""" common setup for tests: builds network, equipment and oms only once
|
||||||
|
"""
|
||||||
|
network = load_network(NETWORK_FILENAME, equipment)
|
||||||
|
spectrum = equipment['SI']['default']
|
||||||
|
p_db = spectrum.power_dbm
|
||||||
|
p_total_db = p_db + lin2db(automatic_nch(spectrum.f_min, spectrum.f_max, spectrum.spacing))
|
||||||
|
build_network(network, equipment, p_db, p_total_db)
|
||||||
|
return network
|
||||||
|
|
||||||
|
|
||||||
|
def create_voyager_req(equipment, source, dest, bidir, nodes_list, loose_list, mode, spacing, power_dbm):
|
||||||
|
""" create the usual request list according to parameters
|
||||||
|
"""
|
||||||
|
params = {'request_id': 'test_request',
|
||||||
|
'source': source,
|
||||||
|
'bidir': bidir,
|
||||||
|
'destination': dest,
|
||||||
|
'trx_type': 'Voyager',
|
||||||
|
'trx_mode': mode,
|
||||||
|
'format': mode,
|
||||||
|
'spacing': spacing,
|
||||||
|
'nodes_list': nodes_list,
|
||||||
|
'loose_list': loose_list,
|
||||||
|
'path_bandwidth': 100.0e9,
|
||||||
|
'effective_freq_slot': None}
|
||||||
|
trx_params = trx_mode_params(equipment, params['trx_type'], params['trx_mode'], True)
|
||||||
|
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_max_from_si = params['f_max']
|
||||||
|
params['nb_channel'] = automatic_nch(f_min, f_max_from_si, params['spacing'])
|
||||||
|
return PathRequest(**params)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('power_dbm', [0, 1, -2, None])
|
||||||
|
@pytest.mark.parametrize('mode, slot_width', (['mode 1', 50e9], ['mode 2', 75e9]))
|
||||||
|
def test_initial_spectrum(mode, slot_width, power_dbm):
|
||||||
|
""" checks that propagation using the user defined spectrum identical to SI, gives same result as SI
|
||||||
|
"""
|
||||||
|
# first propagate without any req.initial_spectrum attribute
|
||||||
|
equipment = load_equipment(EQPT_FILENAME)
|
||||||
|
req = create_voyager_req(equipment, 'trx Brest_KLA', 'trx Vannes_KBE', False, ['trx Vannes_KBE'], ['STRICT'],
|
||||||
|
mode, slot_width, power_dbm)
|
||||||
|
network = net_setup(equipment)
|
||||||
|
path = compute_constrained_path(network, req)
|
||||||
|
infos_expected = propagate(path, req, equipment)
|
||||||
|
# then creates req.initial_spectrum attribute exactly corresponding to -spectrum option files
|
||||||
|
temp = [{
|
||||||
|
"f_min": 191.35e12 + slot_width,
|
||||||
|
"f_max": 196.15e12 - slot_width,
|
||||||
|
"baud_rate": req.baud_rate,
|
||||||
|
"slot_width": slot_width,
|
||||||
|
"roll_off": 0.15,
|
||||||
|
"tx_osnr": 40
|
||||||
|
}]
|
||||||
|
req.initial_spectrum = _spectrum_from_json(temp)
|
||||||
|
infos_actual = propagate(path, req, equipment)
|
||||||
|
print(infos_actual.frequency[0], infos_actual.frequency[-1])
|
||||||
|
print(infos_expected.frequency[0], infos_expected.frequency[-1])
|
||||||
|
|
||||||
|
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.slot_width, infos_actual.slot_width)
|
||||||
|
assert_array_equal(infos_expected.signal, infos_actual.signal)
|
||||||
|
assert_array_equal(infos_expected.nli, infos_actual.nli)
|
||||||
|
assert_array_equal(infos_expected.ase, infos_actual.ase)
|
||||||
|
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.pmd, infos_actual.pmd)
|
||||||
|
assert_array_equal(infos_expected.channel_number, infos_actual.channel_number)
|
||||||
|
assert_array_equal(infos_expected.number_of_channels, infos_actual.number_of_channels)
|
||||||
|
|
||||||
|
|
||||||
|
def test_initial_spectrum_not_identical():
|
||||||
|
""" checks that user defined spectrum overrides spectrum defined in SI
|
||||||
|
"""
|
||||||
|
# first propagate without any req.initial_spectrum attribute
|
||||||
|
equipment = load_equipment(EQPT_FILENAME)
|
||||||
|
req = create_voyager_req(equipment, 'trx Brest_KLA', 'trx Vannes_KBE', False, ['trx Vannes_KBE'], ['STRICT'],
|
||||||
|
'mode 1', 50e9, 0)
|
||||||
|
network = net_setup(equipment)
|
||||||
|
path = compute_constrained_path(network, req)
|
||||||
|
infos_expected = propagate(path, req, equipment)
|
||||||
|
# then creates req.initial_spectrum attribute exactly corresponding to -spectrum option files
|
||||||
|
temp = [{
|
||||||
|
"f_min": 191.4e12, # align f_min , f_max on Voyager f_min, f_mix and not SI !
|
||||||
|
"f_max": 196.1e12,
|
||||||
|
"baud_rate": 40e9,
|
||||||
|
"slot_width": 62.5e9,
|
||||||
|
"roll_off": 0.15,
|
||||||
|
"tx_osnr": 40
|
||||||
|
}]
|
||||||
|
req.initial_spectrum = _spectrum_from_json(temp)
|
||||||
|
infos_actual = propagate(path, req, equipment)
|
||||||
|
assert_raises(AssertionError, assert_array_equal, infos_expected.frequency, infos_actual.frequency)
|
||||||
|
assert_raises(AssertionError, assert_array_equal, infos_expected.baud_rate, infos_actual.baud_rate)
|
||||||
|
assert_raises(AssertionError, assert_array_equal, infos_expected.slot_width, infos_actual.slot_width)
|
||||||
|
assert_raises(AssertionError, assert_array_equal, infos_expected.signal, infos_actual.signal)
|
||||||
|
assert_raises(AssertionError, assert_array_equal, infos_expected.nli, infos_actual.nli)
|
||||||
|
assert_raises(AssertionError, assert_array_equal, infos_expected.ase, infos_actual.ase)
|
||||||
|
assert_raises(AssertionError, assert_array_equal, infos_expected.channel_number, infos_actual.channel_number)
|
||||||
|
assert_raises(AssertionError, assert_array_equal, infos_expected.number_of_channels, infos_actual.number_of_channels)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('equalization, target_value', [
|
||||||
|
('target_out_mWperSlotWidth', power_dbm_to_psd_mw_ghz(-20, 50e9)),
|
||||||
|
('target_psd_out_mWperGHz', power_dbm_to_psd_mw_ghz(-20, 32e9))])
|
||||||
|
@pytest.mark.parametrize('power_dbm', [0, 2, -0.5])
|
||||||
|
def test_target_psd_or_psw(power_dbm, equalization, target_value):
|
||||||
|
""" checks that if target_out_mWperSlotWidth or target_psd_out_mWperGHz is defined, it is used as equalization
|
||||||
|
and it gives same result if computed target is the same
|
||||||
|
"""
|
||||||
|
equipment = load_equipment(EQPT_FILENAME)
|
||||||
|
network = net_setup(equipment)
|
||||||
|
req = create_voyager_req(equipment, 'trx Brest_KLA', 'trx Vannes_KBE', False, ['trx Vannes_KBE'], ['STRICT'],
|
||||||
|
'mode 1', 50e9, power_dbm)
|
||||||
|
path = compute_constrained_path(network, req)
|
||||||
|
infos_expected = propagate(path, req, equipment)
|
||||||
|
# change default equalization to power spectral density
|
||||||
|
delattr(equipment['Roadm']['default'], 'target_pch_out_db')
|
||||||
|
setattr(equipment['Roadm']['default'], equalization, target_value)
|
||||||
|
# create a second instance with this roadm settings,
|
||||||
|
network2 = net_setup(equipment)
|
||||||
|
path2 = compute_constrained_path(network2, req)
|
||||||
|
infos_actual = propagate(path2, req, equipment)
|
||||||
|
# since baudrate is the same, resulting propagation should be the same as for power equalization
|
||||||
|
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.signal, infos_actual.signal)
|
||||||
|
assert_array_equal(infos_expected.nli, infos_actual.nli)
|
||||||
|
assert_array_equal(infos_expected.ase, infos_actual.ase)
|
||||||
|
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.pmd, infos_actual.pmd)
|
||||||
|
assert_array_equal(infos_expected.channel_number, infos_actual.channel_number)
|
||||||
|
assert_array_equal(infos_expected.number_of_channels, infos_actual.number_of_channels)
|
||||||
|
|
||||||
|
|
||||||
|
def ref_network():
|
||||||
|
""" Create a network instance with a instance of propagated path
|
||||||
|
"""
|
||||||
|
equipment = load_equipment(EQPT_FILENAME)
|
||||||
|
network = net_setup(equipment)
|
||||||
|
req0 = create_voyager_req(equipment, 'trx Brest_KLA', 'trx Vannes_KBE', False, ['trx Vannes_KBE'], ['STRICT'],
|
||||||
|
'mode 1', 50e9, 0)
|
||||||
|
path0 = compute_constrained_path(network, req0)
|
||||||
|
_ = propagate(path0, req0, equipment)
|
||||||
|
return network
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('deltap', [0, +1.2, -0.5])
|
||||||
|
def test_target_psd_out_mwperghz_deltap(deltap):
|
||||||
|
""" checks that if target_psd_out_mWperGHz is defined, delta_p of amps is correctly updated
|
||||||
|
Power over 1.2dBm saturate amp with this test: TODO add a test on this saturation
|
||||||
|
"""
|
||||||
|
equipment = load_equipment(EQPT_FILENAME)
|
||||||
|
network = net_setup(equipment)
|
||||||
|
req = create_voyager_req(equipment, 'trx Brest_KLA', 'trx Vannes_KBE', False, ['trx Vannes_KBE'], ['STRICT'],
|
||||||
|
'mode 1', 50e9, deltap)
|
||||||
|
temp = [{
|
||||||
|
"f_min": 191.35e12, # align f_min , f_max on Voyager f_min, f_mix and not SI !
|
||||||
|
"f_max": 196.05e12,
|
||||||
|
"baud_rate": req.baud_rate,
|
||||||
|
"slot_width": 50e9,
|
||||||
|
"roll_off": 0.15,
|
||||||
|
"tx_osnr": 40
|
||||||
|
}]
|
||||||
|
req.initial_spectrum = _spectrum_from_json(temp)
|
||||||
|
path = compute_constrained_path(network, req)
|
||||||
|
_ = propagate(path, req, equipment)
|
||||||
|
# check that gain of booster is changed accordingly whereas gain of preamp and ila is not (no saturation case)
|
||||||
|
boosters = ['east edfa in Brest_KLA to Quimper', 'east edfa in Lorient_KMA to Vannes_KBE']
|
||||||
|
ila_preamps = ['east edfa in Quimper to Lorient_KMA', 'west edfa in Lorient_KMA to Quimper',
|
||||||
|
'west edfa in Vannes_KBE to Lorient_KMA']
|
||||||
|
for amp in boosters + ila_preamps:
|
||||||
|
expected_amp = next(n for n in ref_network() if n.uid == amp)
|
||||||
|
actual_amp = next(n for n in network.nodes() if n.uid == amp)
|
||||||
|
expected_gain = expected_amp.pout_db - expected_amp.pin_db
|
||||||
|
actual_gain = actual_amp.pout_db - actual_amp.pin_db
|
||||||
|
print(actual_amp)
|
||||||
|
if amp in boosters:
|
||||||
|
assert expected_gain + deltap == pytest.approx(actual_gain, rel=1e-3)
|
||||||
|
if amp in ila_preamps:
|
||||||
|
assert expected_gain == pytest.approx(actual_gain, rel=1e-3)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('equalization', ['target_psd_out_mWperGHz', 'target_out_mWperSlotWidth'])
|
||||||
|
@pytest.mark.parametrize('case', ['SI', 'nodes'])
|
||||||
|
@pytest.mark.parametrize('deltap', [0, +2, -0.5])
|
||||||
|
@pytest.mark.parametrize('target', [-20, -21, -18])
|
||||||
|
@pytest.mark.parametrize('mode, slot_width', (['mode 1', 50e9], ['mode 2', 75e9]))
|
||||||
|
def test_equalization(case, deltap, target, mode, slot_width, equalization):
|
||||||
|
"""check that power target on roadm is correct for these cases; check on booster
|
||||||
|
- SI : target_pch_out_db / target_psd_out_mWperGHz
|
||||||
|
- node : target_pch_out_db / target_psd_out_mWperGHz
|
||||||
|
- per degree : target_pch_out_db / target_psd_out_mWperGHz
|
||||||
|
for these cases with and without power from user
|
||||||
|
"""
|
||||||
|
equipment = load_equipment(EQPT_FILENAME)
|
||||||
|
setattr(equipment['Roadm']['default'], 'target_pch_out_db', target)
|
||||||
|
req = create_voyager_req(equipment, 'trx Brest_KLA', 'trx Rennes_STA', False,
|
||||||
|
['east edfa in Brest_KLA to Quimper', 'roadm Lannion_CAS', 'trx Rennes_STA'],
|
||||||
|
['STRICT', 'STRICT', 'STRICT'],
|
||||||
|
mode, slot_width, deltap)
|
||||||
|
roadms = ['roadm Brest_KLA', 'roadm Lorient_KMA', 'roadm Lannion_CAS', 'roadm Rennes_STA']
|
||||||
|
# degree = {'roadm Brest_KLA': 'east edfa in Brest_KLA to Quimper',
|
||||||
|
# 'roadm Lorient_KMA': 'east edfa in Lorient_KMA to Loudeac'}
|
||||||
|
# boosters = ['east edfa in Brest_KLA to Quimper', 'east edfa in Lorient_KMA to Loudeac',
|
||||||
|
# 'east edfa in Lannion_CAS to Stbrieuc']
|
||||||
|
target_psd = power_dbm_to_psd_mw_ghz(target, 32e9)
|
||||||
|
ref = ReferenceCarrier(baud_rate=32e9, slot_width=50e9)
|
||||||
|
if case == 'SI':
|
||||||
|
delattr(equipment['Roadm']['default'], 'target_pch_out_db')
|
||||||
|
setattr(equipment['Roadm']['default'], equalization, target_psd)
|
||||||
|
network = net_setup(equipment)
|
||||||
|
elif case == 'nodes':
|
||||||
|
json_data = load_json(NETWORK_FILENAME)
|
||||||
|
for el in json_data['elements']:
|
||||||
|
if el['uid'] in roadms:
|
||||||
|
el['params'] = {equalization: target_psd}
|
||||||
|
network = network_from_json(json_data, equipment)
|
||||||
|
spectrum = equipment['SI']['default']
|
||||||
|
p_db = spectrum.power_dbm
|
||||||
|
p_total_db = p_db + lin2db(automatic_nch(spectrum.f_min, spectrum.f_max, spectrum.spacing))
|
||||||
|
build_network(network, equipment, p_db, p_total_db)
|
||||||
|
# check that nodes not in roadms have target_pch_out_db not None
|
||||||
|
pw_roadms = [r for r in network.nodes() if r.uid not in roadms and isinstance(r, Roadm)]
|
||||||
|
for roadm in pw_roadms:
|
||||||
|
assert roadm.target_psd_out_mWperGHz is None
|
||||||
|
assert roadm.target_pch_out_dbm == target
|
||||||
|
for roadm in [r for r in network.nodes() if r.uid in roadms and isinstance(r, Roadm)]:
|
||||||
|
assert roadm.target_pch_out_dbm is None
|
||||||
|
assert getattr(roadm, equalization) == target_psd
|
||||||
|
path = compute_constrained_path(network, req)
|
||||||
|
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,
|
||||||
|
spacing=req.spacing, tx_osnr=req.tx_osnr, ref_carrier=ref)
|
||||||
|
for i, el in enumerate(path):
|
||||||
|
if isinstance(el, Roadm):
|
||||||
|
si = el(si, degree=path[i + 1].uid)
|
||||||
|
if case in ['SI', 'nodes', 'degrees']:
|
||||||
|
if equalization == 'target_psd_out_mWperGHz':
|
||||||
|
assert_allclose(power_dbm_to_psd_mw_ghz(watt2dbm(si.signal + si.ase + si.nli), si.baud_rate),
|
||||||
|
target_psd, rtol=1e-3)
|
||||||
|
if equalization == 'target_out_mWperSlotWidth':
|
||||||
|
assert_allclose(power_dbm_to_psd_mw_ghz(watt2dbm(si.signal + si.ase + si.nli), si.slot_width),
|
||||||
|
target_psd, rtol=1e-3)
|
||||||
|
else:
|
||||||
|
si = el(si)
|
||||||
|
print(el.uid)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('req_power', [0, 2, -1.5])
|
||||||
|
def test_power_option(req_power):
|
||||||
|
"""check that --po option adds correctly power with spectral information
|
||||||
|
"""
|
||||||
|
equipment = load_equipment(EQPT_FILENAME)
|
||||||
|
setattr(equipment['Roadm']['default'], 'target_pch_out_db', None)
|
||||||
|
setattr(equipment['Roadm']['default'], 'target_psd_out_mWperGHz', power_dbm_to_psd_mw_ghz(-20, 32e9))
|
||||||
|
network = net_setup(equipment)
|
||||||
|
req = create_voyager_req(equipment, 'trx Brest_KLA', 'trx Vannes_KBE', False, ['trx Vannes_KBE'], ['STRICT'],
|
||||||
|
'mode 1', 50e9, req_power)
|
||||||
|
path = compute_constrained_path(network, req)
|
||||||
|
infos_expected = propagate(path, req, equipment)
|
||||||
|
|
||||||
|
temp = [{
|
||||||
|
"f_min": 191.4e12, # align f_min , f_max on Voyager f_min, f_max and not SI !
|
||||||
|
"f_max": 196.1e12,
|
||||||
|
"baud_rate": req.baud_rate,
|
||||||
|
"slot_width": 50e9,
|
||||||
|
"roll_off": 0.15,
|
||||||
|
"tx_osnr": 40
|
||||||
|
}]
|
||||||
|
req.initial_spectrum = _spectrum_from_json(temp)
|
||||||
|
network2 = net_setup(equipment)
|
||||||
|
path2 = compute_constrained_path(network2, req)
|
||||||
|
infos_actual = propagate(path2, req, equipment)
|
||||||
|
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.signal, infos_actual.signal)
|
||||||
|
assert_array_equal(infos_expected.nli, infos_actual.nli)
|
||||||
|
assert_array_equal(infos_expected.ase, infos_actual.ase)
|
||||||
|
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.pmd, infos_actual.pmd)
|
||||||
|
assert_array_equal(infos_expected.channel_number, infos_actual.channel_number)
|
||||||
|
assert_array_equal(infos_expected.number_of_channels, infos_actual.number_of_channels)
|
||||||
@@ -4,47 +4,56 @@
|
|||||||
import pytest
|
import pytest
|
||||||
from numpy import array, zeros, ones
|
from numpy import array, zeros, ones
|
||||||
from numpy.testing import assert_array_equal
|
from numpy.testing import assert_array_equal
|
||||||
|
from gnpy.core.info import create_arbitrary_spectral_information, Pref
|
||||||
from gnpy.core.info import create_arbitrary_spectral_information
|
|
||||||
from gnpy.core.exceptions import SpectrumError
|
from gnpy.core.exceptions import SpectrumError
|
||||||
|
|
||||||
|
|
||||||
def test_create_arbitrary_spectral_information():
|
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],
|
||||||
|
tx_osnr=40.0,
|
||||||
|
ref_power=Pref(1, 1, None))
|
||||||
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))
|
||||||
assert_array_equal(si.nli, zeros(3))
|
assert_array_equal(si.nli, zeros(3))
|
||||||
assert_array_equal(si.ase, zeros(3))
|
assert_array_equal(si.ase, zeros(3))
|
||||||
|
assert_array_equal(si.delta_pdb_per_channel, ones(3))
|
||||||
assert_array_equal(si.roll_off, zeros(3))
|
assert_array_equal(si.roll_off, zeros(3))
|
||||||
assert_array_equal(si.chromatic_dispersion, zeros(3))
|
assert_array_equal(si.chromatic_dispersion, zeros(3))
|
||||||
assert_array_equal(si.pmd, zeros(3))
|
assert_array_equal(si.pmd, zeros(3))
|
||||||
assert_array_equal(si.channel_number, array([1, 2, 3]))
|
assert_array_equal(si.channel_number, array([1, 2, 3]))
|
||||||
assert_array_equal(si.number_of_channels, 3)
|
assert_array_equal(si.number_of_channels, 3)
|
||||||
assert_array_equal(si.df, array([[0, 50e9, 100e9], [-50e9, 0, 50e9], [-100e9, -50e9, 0]]))
|
assert_array_equal(si.df, array([[0, 50e9, 100e9], [-50e9, 0, 50e9], [-100e9, -50e9, 0]]))
|
||||||
|
assert_array_equal(si.tx_osnr, array([40.0, 40.0, 40.0]))
|
||||||
|
|
||||||
with pytest.raises(SpectrumError, match='Spectra cannot be summed: channels overlapping.'):
|
with pytest.raises(SpectrumError, match='Spectra cannot be summed: channels overlapping.'):
|
||||||
si += si
|
si += si
|
||||||
|
|
||||||
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,
|
||||||
|
ref_power=Pref(1, 1, None))
|
||||||
|
|
||||||
assert_array_equal(si.signal, array([3, 2, 1]))
|
assert_array_equal(si.signal, array([3, 2, 1]))
|
||||||
|
|
||||||
with pytest.raises(SpectrumError, match='Spectrum baud rate, including the roll off, '
|
with pytest.raises(SpectrumError, match='Spectrum baud rate, including the roll off, '
|
||||||
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,
|
||||||
|
ref_power=Pref(1, 1, None))
|
||||||
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,
|
||||||
baud_rate=32e9, slot_width=50e9)
|
tx_osnr=40.0, baud_rate=32e9, slot_width=50e9, ref_power=Pref(1, 1, None))
|
||||||
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,
|
||||||
roll_off=0.1)
|
tx_osnr=40.0, roll_off=0.1, ref_power=Pref(1, 1, None))
|
||||||
|
|
||||||
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, ref_power=Pref(1, 1, None))
|
||||||
|
|||||||
@@ -20,7 +20,15 @@ SRC_ROOT = Path(__file__).parent.parent
|
|||||||
['-e', 'gnpy/example-data/eqpt_config_openroadm_ver4.json', 'gnpy/example-data/Sweden_OpenROADMv4_example_network.json', ]),
|
['-e', 'gnpy/example-data/eqpt_config_openroadm_ver4.json', 'gnpy/example-data/Sweden_OpenROADMv4_example_network.json', ]),
|
||||||
('openroadm-v5-Stockholm-Gothenburg', transmission_main_example,
|
('openroadm-v5-Stockholm-Gothenburg', transmission_main_example,
|
||||||
['-e', 'gnpy/example-data/eqpt_config_openroadm_ver5.json', 'gnpy/example-data/Sweden_OpenROADMv5_example_network.json', ]),
|
['-e', 'gnpy/example-data/eqpt_config_openroadm_ver5.json', 'gnpy/example-data/Sweden_OpenROADMv5_example_network.json', ]),
|
||||||
))
|
('transmission_main_example_long', transmission_main_example,
|
||||||
|
['-e', 'tests/data/eqpt_config.json', 'tests/data/test_long_network.json']),
|
||||||
|
('spectrum1_transmission_main_example', transmission_main_example,
|
||||||
|
['--spectrum', 'gnpy/example-data/initial_spectrum1.json', 'gnpy/example-data/meshTopologyExampleV2.xls', ]),
|
||||||
|
('spectrum2_transmission_main_example', transmission_main_example,
|
||||||
|
['--spectrum', 'gnpy/example-data/initial_spectrum2.json', 'gnpy/example-data/meshTopologyExampleV2.xls', '--show-channels', ]),
|
||||||
|
))
|
||||||
|
|
||||||
|
|
||||||
def test_example_invocation(capfd, output, handler, args):
|
def test_example_invocation(capfd, output, handler, args):
|
||||||
'''Make sure that our examples produce useful output'''
|
'''Make sure that our examples produce useful output'''
|
||||||
os.chdir(SRC_ROOT)
|
os.chdir(SRC_ROOT)
|
||||||
|
|||||||
@@ -506,3 +506,71 @@ def test_eqpt_creation(tmpdir):
|
|||||||
# check that all amp in the converted files corresponds to an eqpt line
|
# check that all amp in the converted files corresponds to an eqpt line
|
||||||
for ampuid in jsonconverted.keys():
|
for ampuid in jsonconverted.keys():
|
||||||
assert ampuid in possiblename
|
assert ampuid in possiblename
|
||||||
|
|
||||||
|
|
||||||
|
def test_service_json_constraint_order():
|
||||||
|
"""test that the constraints are read in correct order"""
|
||||||
|
|
||||||
|
unsorted_request = {
|
||||||
|
"request-id": "unsorted",
|
||||||
|
"source": "trx Brest_KLA",
|
||||||
|
"destination": "trx Vannes_KBE",
|
||||||
|
"src-tp-id": "trx Brest_KLA",
|
||||||
|
"dst-tp-id": "trx Vannes_KBE",
|
||||||
|
"bidirectional": False,
|
||||||
|
"path-constraints": {
|
||||||
|
"te-bandwidth": {
|
||||||
|
"technology": "flexi-grid",
|
||||||
|
"trx_type": "Voyager",
|
||||||
|
"trx_mode": "mode 1",
|
||||||
|
"spacing": 50000000000.0,
|
||||||
|
"output-power": 0.001,
|
||||||
|
"path_bandwidth": 10000000000.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"explicit-route-objects": {
|
||||||
|
"route-object-include-exclude": [
|
||||||
|
{
|
||||||
|
"explicit-route-usage": "route-include-ero",
|
||||||
|
"index": 2,
|
||||||
|
"num-unnum-hop": {
|
||||||
|
"node-id": "roadm Lorient_KMA",
|
||||||
|
"link-tp-id": "link-tp-id is not used",
|
||||||
|
"hop-type": "STRICT"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"explicit-route-usage": "route-include-ero",
|
||||||
|
"index": 3,
|
||||||
|
"num-unnum-hop": {
|
||||||
|
"node-id": "roadm Vannes_KBE",
|
||||||
|
"link-tp-id": "link-tp-id is not used",
|
||||||
|
"hop-type": "STRICT"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"explicit-route-usage": "route-include-ero",
|
||||||
|
"index": 1,
|
||||||
|
"num-unnum-hop": {
|
||||||
|
"node-id": "roadm Lannion_CAS",
|
||||||
|
"link-tp-id": "link-tp-id is not used",
|
||||||
|
"hop-type": "LOOSE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"explicit-route-usage": "route-include-ero",
|
||||||
|
"index": 0,
|
||||||
|
"num-unnum-hop": {
|
||||||
|
"node-id": "roadm Brest_KLA",
|
||||||
|
"link-tp-id": "link-tp-id is not used",
|
||||||
|
"hop-type": "STRICT"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data = {'path-request': [unsorted_request]}
|
||||||
|
rqs = requests_from_json(data, equipment)
|
||||||
|
assert rqs[0].nodes_list == ['roadm Brest_KLA', 'roadm Lannion_CAS', 'roadm Lorient_KMA', 'roadm Vannes_KBE']
|
||||||
|
assert rqs[0].loose_list == ['STRICT', 'LOOSE', 'STRICT', 'STRICT']
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
import pytest
|
import pytest
|
||||||
from gnpy.core.elements import Transceiver, Fiber, Edfa, Roadm
|
from gnpy.core.elements import Transceiver, Fiber, Edfa, Roadm
|
||||||
from gnpy.core.utils import db2lin
|
from gnpy.core.utils import db2lin
|
||||||
from gnpy.core.info import create_input_spectral_information
|
from gnpy.core.info import create_input_spectral_information, ReferenceCarrier
|
||||||
from gnpy.core.network import build_network
|
from gnpy.core.network import build_network
|
||||||
from gnpy.tools.json_io import load_network, load_equipment
|
from gnpy.tools.json_io import load_network, load_equipment
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
@@ -45,7 +45,9 @@ def propagation(input_power, con_in, con_out, dest):
|
|||||||
p = input_power
|
p = input_power
|
||||||
p = db2lin(p) * 1e-3
|
p = db2lin(p) * 1e-3
|
||||||
spacing = 50e9 # THz
|
spacing = 50e9 # THz
|
||||||
si = create_input_spectral_information(191.3e12, 191.3e12 + 79 * spacing, 0.15, 32e9, p, spacing)
|
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,
|
||||||
|
ref_carrier=ReferenceCarrier(baud_rate=32e9, slot_width=50e9))
|
||||||
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)
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ from gnpy.core.elements import Fused, Roadm, Edfa
|
|||||||
from gnpy.core.network import build_network
|
from gnpy.core.network import build_network
|
||||||
from gnpy.tools.json_io import network_from_json, load_equipment, load_json, Amp
|
from gnpy.tools.json_io import network_from_json, load_equipment, load_json, Amp
|
||||||
from gnpy.core.equipment import trx_mode_params
|
from gnpy.core.equipment import trx_mode_params
|
||||||
from gnpy.topology.request import PathRequest, compute_constrained_path
|
from gnpy.topology.request import PathRequest, compute_constrained_path, ref_carrier
|
||||||
from gnpy.core.info import create_input_spectral_information
|
from gnpy.core.info import create_input_spectral_information
|
||||||
from gnpy.core.utils import db2lin
|
from gnpy.core.utils import db2lin
|
||||||
|
|
||||||
@@ -228,9 +228,9 @@ def test_roadm_target_power(prev_node_type, effective_pch_out_db, power_dbm):
|
|||||||
prev_node['params'] = {'loss': 0}
|
prev_node['params'] = {'loss': 0}
|
||||||
json_network['elements'].append(prev_node)
|
json_network['elements'].append(prev_node)
|
||||||
network = network_from_json(json_network, equipment)
|
network = network_from_json(json_network, equipment)
|
||||||
p_total_db = power_dbm + lin2db(automatic_nch(equipment['SI']['default'].f_min,
|
nb_channel = automatic_nch(equipment['SI']['default'].f_min, equipment['SI']['default'].f_max,
|
||||||
equipment['SI']['default'].f_max,
|
equipment['SI']['default'].spacing)
|
||||||
equipment['SI']['default'].spacing))
|
p_total_db = power_dbm + lin2db(nb_channel)
|
||||||
|
|
||||||
build_network(network, equipment, power_dbm, p_total_db)
|
build_network(network, equipment, power_dbm, p_total_db)
|
||||||
|
|
||||||
@@ -245,6 +245,7 @@ def test_roadm_target_power(prev_node_type, effective_pch_out_db, power_dbm):
|
|||||||
'format': '',
|
'format': '',
|
||||||
'path_bandwidth': 100e9,
|
'path_bandwidth': 100e9,
|
||||||
'effective_freq_slot': None,
|
'effective_freq_slot': None,
|
||||||
|
'nb_channel': nb_channel
|
||||||
}
|
}
|
||||||
trx_params = trx_mode_params(equipment)
|
trx_params = trx_mode_params(equipment)
|
||||||
params.update(trx_params)
|
params.update(trx_params)
|
||||||
@@ -252,15 +253,14 @@ def test_roadm_target_power(prev_node_type, effective_pch_out_db, power_dbm):
|
|||||||
req.power = db2lin(power_dbm - 30)
|
req.power = db2lin(power_dbm - 30)
|
||||||
path = compute_constrained_path(network, req)
|
path = compute_constrained_path(network, req)
|
||||||
si = create_input_spectral_information(
|
si = create_input_spectral_information(
|
||||||
req.f_min, req.f_max, req.roll_off, req.baud_rate,
|
f_min=req.f_min, f_max=req.f_max, roll_off=req.roll_off, baud_rate=req.baud_rate,
|
||||||
req.power, req.spacing)
|
power=req.power, spacing=req.spacing, tx_osnr=req.tx_osnr, ref_carrier=ref_carrier(equipment))
|
||||||
for i, el in enumerate(path):
|
for i, el in enumerate(path):
|
||||||
if isinstance(el, Roadm):
|
if isinstance(el, Roadm):
|
||||||
min_power_in_roadm = min(si.signal + si.ase + si.nli)
|
power_in_roadm = si.signal + si.ase + si.nli
|
||||||
si = el(si, degree=path[i + 1].uid)
|
si = el(si, degree=path[i + 1].uid)
|
||||||
power_out_roadm = si.signal + si.ase + si.nli
|
power_out_roadm = si.signal + si.ase + si.nli
|
||||||
if el.uid == 'roadm node B':
|
if el.uid == 'roadm node B':
|
||||||
print('input', min_power_in_roadm)
|
|
||||||
# if previous was an EDFA, power level at ROADM input is enough for the ROADM to apply its
|
# if previous was an EDFA, power level at ROADM input is enough for the ROADM to apply its
|
||||||
# target power (as specified in equipment ie -20 dBm)
|
# target power (as specified in equipment ie -20 dBm)
|
||||||
# if it is a Fused, the input power to the ROADM is smaller than the target power, and the
|
# if it is a Fused, the input power to the ROADM is smaller than the target power, and the
|
||||||
@@ -271,15 +271,15 @@ def test_roadm_target_power(prev_node_type, effective_pch_out_db, power_dbm):
|
|||||||
if prev_node_type == 'edfa':
|
if prev_node_type == 'edfa':
|
||||||
# edfa prev_node sets input power to roadm to a high enough value:
|
# edfa prev_node sets input power to roadm to a high enough value:
|
||||||
# check that target power is correctly set in the ROADM
|
# check that target power is correctly set in the ROADM
|
||||||
assert_allclose(el.pch_out_db, effective_pch_out_db, rtol=1e-3)
|
assert_allclose(el.ref_pch_out_dbm, effective_pch_out_db, rtol=1e-3)
|
||||||
# Check that egress power of roadm is equal to target power
|
# Check that egress power of roadm is equal to target power
|
||||||
assert_allclose(power_out_roadm, db2lin(effective_pch_out_db - 30), rtol=1e-3)
|
assert_allclose(power_out_roadm, db2lin(effective_pch_out_db - 30), rtol=1e-3)
|
||||||
elif prev_node_type == 'fused':
|
elif prev_node_type == 'fused':
|
||||||
# fused prev_node does reamplfy power after fiber propagation, so input power
|
# fused prev_node does reamplfy power after fiber propagation, so input power
|
||||||
# to roadm is low.
|
# to roadm is low.
|
||||||
# check that target power correctly reports power_dbm from previous propagation
|
# check that target power correctly reports power_dbm from previous propagation
|
||||||
assert_allclose(el.pch_out_db, effective_pch_out_db + power_dbm, rtol=1e-3)
|
assert_allclose(el.ref_pch_out_dbm, effective_pch_out_db + power_dbm, rtol=1e-3)
|
||||||
# Check that egress power of roadm is equalized to the min carrier input power.
|
# Check that egress power of roadm is not equalized power out is the same as power in.
|
||||||
assert_allclose(power_out_roadm, min_power_in_roadm, rtol=1e-3)
|
assert_allclose(power_out_roadm, power_in_roadm, rtol=1e-3)
|
||||||
else:
|
else:
|
||||||
si = el(si)
|
si = el(si)
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ from numpy.testing import assert_allclose
|
|||||||
from numpy import array, genfromtxt
|
from numpy import array, genfromtxt
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from gnpy.core.info import create_input_spectral_information, create_arbitrary_spectral_information
|
from gnpy.core.info import create_input_spectral_information, create_arbitrary_spectral_information, Pref, ReferenceCarrier
|
||||||
from gnpy.core.elements import Fiber, RamanFiber
|
from gnpy.core.elements import Fiber, RamanFiber
|
||||||
from gnpy.core.parameters import SimParams
|
from gnpy.core.parameters import SimParams
|
||||||
from gnpy.tools.json_io import load_json
|
from gnpy.tools.json_io import load_json
|
||||||
@@ -28,7 +28,8 @@ def test_fiber():
|
|||||||
|
|
||||||
# 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)
|
baud_rate=32e9, power=1e-3, spacing=50e9, tx_osnr=40.0,
|
||||||
|
ref_carrier=ReferenceCarrier(baud_rate=32e9, slot_width=50e9))
|
||||||
# propagation
|
# propagation
|
||||||
spectral_info_out = fiber(spectral_info_input)
|
spectral_info_out = fiber(spectral_info_input)
|
||||||
|
|
||||||
@@ -44,8 +45,12 @@ def test_fiber():
|
|||||||
slot_width = array([37.5e9, 50e9, 75e9, 50e9, 37.5e9])
|
slot_width = array([37.5e9, 50e9, 75e9, 50e9, 37.5e9])
|
||||||
baud_rate = array([32e9, 42e9, 64e9, 42e9, 32e9])
|
baud_rate = array([32e9, 42e9, 64e9, 42e9, 32e9])
|
||||||
signal = 1e-3 + array([0, -1e-4, 3e-4, -2e-4, +2e-4])
|
signal = 1e-3 + array([0, -1e-4, 3e-4, -2e-4, +2e-4])
|
||||||
|
delta_pdb_per_channel = [0, 0, 0, 0, 0]
|
||||||
|
pref = Pref(p_span0=0, p_spani=0, ref_carrier=None)
|
||||||
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,
|
||||||
|
tx_osnr=40.0, ref_power=pref)
|
||||||
|
|
||||||
# propagation
|
# propagation
|
||||||
spectral_info_out = fiber(spectral_info_input)
|
spectral_info_out = fiber(spectral_info_input)
|
||||||
@@ -63,7 +68,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)
|
baud_rate=32e9, power=1e-3, spacing=50e9, tx_osnr=40.0,
|
||||||
|
ref_carrier=ReferenceCarrier(baud_rate=32e9, slot_width=50e9))
|
||||||
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'))
|
||||||
|
|
||||||
@@ -100,7 +106,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)
|
baud_rate=32e9, power=1e-3, spacing=50e9, tx_osnr=40.0,
|
||||||
|
ref_carrier=ReferenceCarrier(baud_rate=32e9, slot_width=50e9))
|
||||||
|
|
||||||
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'))
|
||||||
|
|||||||
6
tox.ini
6
tox.ini
@@ -4,7 +4,7 @@ skipsdist = True
|
|||||||
[testenv]
|
[testenv]
|
||||||
deps =
|
deps =
|
||||||
-r{toxinidir}/requirements.txt
|
-r{toxinidir}/requirements.txt
|
||||||
pytest>=6.2.5,<7
|
-r{toxinidir}/tests/requirements.txt
|
||||||
cover: pytest-cov
|
cover: pytest-cov
|
||||||
linters: flake8
|
linters: flake8
|
||||||
linters: pep8-naming
|
linters: pep8-naming
|
||||||
@@ -19,7 +19,7 @@ commands =
|
|||||||
pytest {env:CI_COVERAGE_OPTS:} -vv {posargs}
|
pytest {env:CI_COVERAGE_OPTS:} -vv {posargs}
|
||||||
cover: coverage html -d cover
|
cover: coverage html -d cover
|
||||||
cover: coverage xml -o cover/coverage.xml
|
cover: coverage xml -o cover/coverage.xml
|
||||||
python setup.py bdist_wheel
|
python -m build
|
||||||
|
|
||||||
[testenv:docs]
|
[testenv:docs]
|
||||||
deps =
|
deps =
|
||||||
@@ -43,4 +43,4 @@ commands =
|
|||||||
[flake8]
|
[flake8]
|
||||||
max-line-length = 120
|
max-line-length = 120
|
||||||
max-complexity = 15
|
max-complexity = 15
|
||||||
ignore = N806
|
ignore = N806 W503
|
||||||
|
|||||||
Reference in New Issue
Block a user