63 Commits
v2.5 ... v2.7

Author SHA1 Message Date
Jan Kundrát
8f9cf8ccc7 docs: sync the author list from git history
I don't have a script for this because it requires some manual fixups.

Change-Id: I19f36b953c98d6bc0c09040c27b964b288360c0e
2023-03-06 01:31:41 +01:00
Sami Alavi
0c797a254c simplify type annotations
PEP 484 says that `float` also implicitly allows `int`, so there's no
need to use `Union[int | float]`.

Fixes: #450
Change-Id: Ib1aeda4c13ffabd47719c1e0886e9ebcf21a64e0
2023-03-03 21:12:57 +05:00
Jan Kundrát
2cdeeabfa6 Mark Python 3.11 as supported
Change-Id: I2dedd942c92959e1f891194f6234376b9ecad6e5
2023-03-02 14:28:12 +01:00
Jan Kundrát
5e874798cb CI: GitHub: add builds on 3.11
...and also switch various jobs to use that by default.

Change-Id: I9170fc305bfd9bea6b5dde5741f912c6ed455e3e
2023-03-02 14:28:12 +01:00
Jan Kundrát
ff8f044064 Merge changes from topic "mixed-rate"
* changes:
  complete tests with the --power option tests
  Add Roadm uid when raising error
  add equalization per constant ratio power/slot_width
2023-02-14 09:59:20 +00:00
Jan Kundrát
d84ee4e76c Merge "doc: add a link to our public chat room" 2023-02-07 17:09:15 +00:00
Jan Kundrát
521d27ffac docs: fix a nasty typo
Fixes: b1067a62 docs: flexgrid
Change-Id: I44613d8ef4a27e7791db81509a56efa7ee29b4ff
2023-02-07 00:36:14 +01:00
Jan Kundrát
35e759212e doc: add a link to our public chat room
Change-Id: Id5323ad01ff0705efb9c9335e2c1f61227e5b73b
2023-02-02 17:29:19 +01:00
Jan Kundrát
f6dede2b5f docs: remove LGTM.com code-quality badge
...which no longer works since they got acquired by GitHub. Setting up
that CodeQL will need a bit more time I'm afraid.

Change-Id: I2f2bf21d31df643b25e931b2aadf60406bba683b
2023-02-02 17:28:40 +01:00
Jan Kundrát
0d0019f627 Update my e-mail address
I was informed that my TIP-specific e-mail address won't be coming back.

Change-Id: Ic2ee4986203490d90143a89dc49d7fca71a84c73
2023-02-02 17:13:23 +01:00
EstherLerouzic
06fe1c2f63 complete tests with the --power option tests
Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: Ia7be6b86b82cc0317a5ba48086ef63f67d490990
2023-01-30 18:05:41 +01:00
EstherLerouzic
092316a9d7 Add Roadm uid when raising error
in case parameters are not correct, catch the ParameterError
and raises it again with the uid of the ROADM to ease debug

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: I1f85f0e9e9226fc613d35611774c739adb2104c7
2023-01-30 18:05:37 +01:00
EstherLerouzic
48e3f96967 add equalization per constant ratio power/slot_width
Constant power per slot_width uses the slot width instead of
baud rate compared to PSD.

This is the equalization used in OpenROADM

add tests for constant power per slot width equalization

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: Ie350e4c15cb6b54c15e418556fe33e72486cb134
2023-01-30 18:03:58 +01:00
Jan Kundrát
e9e8956caf docs: fix the GitHub CI (actions) badge
Bug: https://github.com/badges/shields/issues/8671
Change-Id: I9cb15b762710cae7c3c37ed95d08aee2ca7b2457
2023-01-18 22:57:17 +01:00
Jan Kundrát
0ae341c2a5 tests: update to flake8 v5
flake8-html is now compatible with the v5 of this package, so let's use
it. Unfortunately, they killed the `--diff` option in v6, so we cannot
use it right now. I understand the reasoning as well as the fact that
it's easy to be broken, but I don't like broken CI that much.

Change-Id: I70dd686e097f411c39bfc53f83d519540687dd64
2023-01-18 22:25:48 +01:00
Jan Kundrát
0c2f6372f8 tests: switch to PEP517-compliant build process
...mainly to be in sync with oopt-gnpy-libyang that I've been working on
recently, and to allow us to modernize this infrastructure later on.

Change-Id: Id0ed1d7620762fc204300ebe8a190de8e42ae9df
2023-01-18 22:20:39 +01:00
Jan Kundrát
97e80b4445 Merge changes from topic "enable-multiple-slots-assignment"
* changes:
  record request_id as string, not integer
  support missing trx_mode in request instead of null value
2023-01-18 21:20:03 +00:00
Jan Kundrát
5e4c9b7d73 Merge "Respect fiber max_length when splitting fibers" 2023-01-18 21:19:39 +00:00
Jan Kundrát
e96f821cce CI: Switch to Fedora 36
...because Vexxhost pulled the plug on the F35 mirroring infrastructure,
and as a result, all jobs started failing.

Change-Id: Ib5d795397e907de3eff6cdb9c4145353400793ab
Depends-on: https://review.gerrithub.io/c/Telecominfraproject/oopt-zuul-jobs/+/548583
2023-01-18 21:35:08 +01:00
Jan Kundrát
5f7e61e255 CI: temporarily remove Fedora 35 jobs
...since the hosting provider pulled the plug on the mirroring
infrastructure. See the rest of these commits in this serie for
details.

Change-Id: Iac1d5f1c6f557458194deafe441564afc4851d94
2023-01-18 21:32:11 +01:00
Jonas Mårtensson
682b5c5691 Respect fiber max_length when splitting fibers
According to the documentation, auto-design will
"Split fiber lengths > max_length", which also makes sense based on the
name of the parameter but with the existing implementation fiber
length could still be longer than max_length after splitting. This
patch makes auto-design respect the specified max_length.

Signed-off-by: Jonas Mårtensson <jonas.martensson@ri.se>
Change-Id: Ifd83aa4d77206bf10796579df73632fe405e2d54
2023-01-18 11:59:06 +00:00
Jan Kundrát
11e5117505 tests: do not compare floating point numbers for equality
GitHub CI started failing with the following error:

  assert (watt2dbm(si.signal) == target - correction).all()
  assert False
   +  where False = <built-in method all of numpy.ndarray object at 0x7f01c0ca94d0>()
   +    where <built-in method all of numpy.ndarray object at 0x7f01c0ca94d0> = array([-25.5, -24.5, -22.5, -25. , -27.5]) == array([-25.5, -24.5, -22.5, -25. , -27.5])
        +array([-25.5, -24.5, -22.5, -25. , -27.5])
        -array([-25.5, -24.5, -22.5, -25. , -27.5])
        Full diff:
          array([-25.5, -24.5, -22.5, -25. , -27.5]).all

This is with code which has passed in the Zuul/Vexxhost CI.

It looks very similar to a regression that hit numpy 1.24.0, but the
GitHub action log shows that this happens with numpy 1.24.1. Weird, and
I'm not getting these differences locally, and also not on an ARM64
cloud VM.

Anyway, comparing floating point numbers for strict equality is futile,
so let's use this opportunity to use a proper check for these.

Change-Id: I05683f3116cad78d067bddde2780fe25b5caf768
2023-01-18 00:27:53 +01:00
EstherLerouzic
50603420fc ROADM: rework equalization
On a ROADM, the code would previously set the same per-carrier power
regardless of the channel spectrum width. With this patch, carriers are
equalized either by their:

- absolute power (same as before),
- power spectral density (PSD).

Also, it's possible to apply a per-channel power offset (in dB) which
will be applied to a specified channel on top of the selected
power-level or PSD strategy. The same offset can be also selected
through the `--spectrum` option via the `default_pdb` parameter.

The equalization policy can be set via the ROADM model (in the equipment
config) as well as on a per-instance basis.

The PSD is defined as the absolute power over a spectral bandwidth,
where the spectral bandwidth corresponds to the actual spectrum
occupation (without any applicable guard bands), as approximated by the
symbol rate. PSD is specified in mW/GHz. As an example, for a 32 GBaud
signal at 0.01 mW, the PSD is 0.01/32 = 3.125e-4 mW/GHz.

This has some implications on the power sweep and ROADM behavior. Same
as previously (with absolute power targets), the ROADM design determines
the power set points. Target power is usually the best (highest) power
that can be supported by the ROADMs, especially the Add/Drop and express
stages' losses, with the goal to maximize the power at the booster's
input. As such, the `--power` option (or the power sweep) doesn't
manipulate with ROADM's target output power, but only with the output
power of the amplifiers. With PSD equalization, the `--power` option is
interpreted as the power of the reference channel defined in equipment
config's `SI` container, and its PSD is used for propagation. Power
sweep is interpreted in the same way, e.g.:

      "SI":[{
            "f_min": 191.3e12,
            "baud_rate": 32e9,
            "f_max":195.1e12,
            "spacing": 50e9,
            "power_dbm": 0,
            "power_range_db": [-1,1,1],
            "roll_off": 0.15,
            "tx_osnr": 40,
            "sys_margins": 2
            }],

...and with the PSD equalization in a ROADM:

    {
      "uid": "roadm A",
      "type": "Roadm",
      "params": {
        "target_psd_out_mWperGHz": 3.125e-4,
      }
    },
    {
      "uid": "edfa in roadm A to toto",
      "type": "Edfa",
      "type_variety": "standard_medium_gain",
      "operational": {
        "gain_target": 22,
        "delta_p": 2,
        "tilt_target": 0.0,
        "out_voa": 0
      }
    },

then we use the power steps of the power_range_db to compute resulting
powers of each carrier out of the booster amp:

 power_db = psd2powerdbm(target_psd_out_mWperGHz, baud_rate)
 sweep = power_db + delta_power for delta_power in power_range_db

Assuming one 32Gbaud and one 64Gbaud carriers:

                   32 Gbaud        64 Gbaud
roadmA out power
(sig+ase+nli)      -20dBm         -17dBm

EDFA out power
range[
        -1          1dBm            4dBm
         0          2dBm            5dBm
         1          3dBm            6dBm
]

Design case:

Design is performed based on the reference channel set defined in SI
in equipment config (independantly of equalization process):

      "SI":[{
            "f_min": 191.3e12,
            "baud_rate": 32e9,
            "f_max":195.1e12,
            "spacing": 50e9,
            "power_dbm": -1,
            "power_range_db": [0,0,1],
            "roll_off": 0.15,
            "tx_osnr": 40,
            "sys_margins": 2
            }],

`delta_p` values of amps refer to this reference channel, but are applicable
for any baudrate during propagation, e.g.:

    {
      "uid": "roadm A",
      "type": "Roadm",
      "params": {
        "target_psd_out_mWperGHz": 2.717e-4,
      }
    },
    {
      "uid": "edfa in roadm A to toto",
      "type": "Edfa",
      "type_variety": "standard_medium_gain",
      "operational": {
        "gain_target": 22,
        "delta_p": 2,
        "tilt_target": 0.0,
        "out_voa": 0
      }
    },

Then the output power for a 64 Gbaud carrier will be +4 =
= lin2db(db2lin(power_dbm + delta_p)/32e9 * 64e9)
= lin2db(db2lin(power_dbm + delta_p) * 2)
= powerdbm + delta + 3 = 4 dBm

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: I28bcfeb72b0e74380b087762bb92ba5d39219eb3
2023-01-17 12:26:50 +01:00
Jan Kundrát
125264f265 coding style: don't yell when using the recommended newline-vs-operator
Fun stuff -- PEP8 used to recommend against this pattern, but back in
2016 the Pythonic Truth got reversed to actually recommend the pattern
which we're using. Unfortunately, W503 is still a thing, and even though
it's supposed to be ignored, it really ain't.

Change-Id: I99f42548d236f05d1050fd78cb81b3b20a78013c
2023-01-17 12:26:50 +01:00
Jan Kundrát
b1067a6266 docs: flexgrid
Co-authored-by: Esther Lerouzic <esther.lerouzic@orange.com>
Change-Id: If38b56a39e083deec0563f25a2b575788dcedc43
2023-01-17 09:48:15 +00:00
EstherLerouzic
50d4ecd700 docs: fix power mode vs. gain mode and power sweep
Change-Id: Ibef9a49123767d6e2ce73081485833f281711e04
Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Co-authored-by: Jan Kundrát <jan.kundrat@telecominfraproject.com>
2023-01-17 09:47:58 +00:00
Jan Kundrát
9f37e0371e CI: temporarily require tox 3.x
Upstream introduced some breaking changes, one of which is a different
installation process. As a result, the builds won't perform a full
package installation, which means that there are no console entry points
(shell wrappers), which means that the test suite fails.

Hotfix this by temporarily requiring an older version of tox.

Change-Id: I0466c70f2024d35d87606d9ad738284a143a574f
2023-01-17 01:31:33 +01:00
Jan Kundrát
9bd303db05 CI: github: upgrade deprecated actions
...because the GitHub infrastructure is deprecating Node 12 actions:

 https: //github.blog/changelog/2022-09-22-github-actions-all-actions-will-begin-running-on-node16-instead-of-node12/

Change-Id: I2d4a28be37a407aa26e79a1755eb5c3b0ec36a87
2023-01-10 12:27:50 +01:00
EstherLerouzic
1bcb3ce25c JSON: ensure that node constraints use correct indexing
The program currently ignores the explicit `index` and reads the
constraints in the JSON order of the list. However in general, it is not
guaranteed that constraints are listed in order.

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: Icefe271f5801cf9f7b43311c6666556564587c65
Signed-off-by: Jan Kundrát <jan.kundrat@telecominfraproject.com>
2022-11-22 01:53:24 +01:00
Jan Kundrát
e381138320 move test-only dependencies from main requirements
Pandas is only used from the test suite.

Bug: https://github.com/Telecominfraproject/oopt-gnpy/issues/451
Change-Id: Iafd02c800e5b7772e180979d19b81a2eda0e588f
2022-11-15 10:01:31 +00:00
EstherLerouzic
b450677709 Minor refactor: use watt2dbm function
Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: I09c3e923a8e1565d2ab07596c393bb5b2dc30f6c
2022-11-09 14:39:27 +01:00
EstherLerouzic
54a3725e17 Add a -spectrum option to input external file to define spectrum
The option is only set for gnpy-transmission-main.

The spectrum file is a list of spectrum objects, each defining
f_min, f_max and spectrum attributes using the same meaning as SI
in eqpt_config.json for baud_rate, roll_off, tx_osnr. slot_width is
used for the occupation of each carrier around their central frequency,
so slot_width corresponds to spacing of SI.
Unlike SI, the frequencies are defined includint f_min and f_max.
The partitions must be contiguous not overlapping.

Pref.p_span0 object records the req_power, while
ref_carrier records info that will be useful for equalization ie baud_rate.

For now, I have not integrated the possibility to directly use
transceivers type and mode in the list.

User can define sets of contiguous channels and a label to identify
the spectrum bands. If no label are defined, the program justs uses
the index + baud rate of the spectrum bands as label.

Print results per spectrum label

If propagated spectrum has mixed rates, then prints results (GSNR and OSNR)
for each propagated spectrum type according to its label.

Print per label channel power of elements

Per channel power prints were previously only showing the noiseless
reference channel power and only an average power.
With this change, we add a new information on the print:
the average total power (signal + noise + non-linear noise).
If there are several spectrum types propagating, the average per
spectrum is displayed using the label.
For this purpose, label and total power are recorded in each element
upon propagation

Note that the difference between this total power and the existing
channel power represents the added noise for the considered OMS.
Indeed ROADMs equalize per channel total power, so that power displayed
in 'actual pch (dBm)' may contain some noise contribution accumulated
with previous propagation.
Because 'reference pch out (dBm)' is for the noiseless reference,
it is exactly set to the target power and 'actual pch (dBm)' is always
matching 'reference pch out (dBm)' in ROADM prints.

Add examples and tests for -spectrum option

initial_spectrum1.json reproduces exactly the case of SI
initial_spectrum2.json sets half of the spectrum with 50GHz 32Gbauds and
half with 75GHz 64 Gbauds. Power setting is not set for the second half,
So that equalization will depend on ROADM settings.

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: Ibc01e59e461e5e933e95d23dacbc5289e275ccf7
2022-11-09 14:39:25 +01:00
Jan Kundrát
8889c2437a refactoring: ROADM: clarify effective_loss and improve the docs
Move the docs to a place where that variable is declared, not to the
place where it's computed.

Co-authored-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-id: I17dff12c1e81827dfb4be869e59c9be85797dba4
2022-11-03 10:24:42 +01:00
Jan Kundrát
8bf8b2947b tests: pass the reference carrier when constructing SI
Co-authored-by: EstherLerouzic <esther.lerouzic@orange.com>
Fixes: 18610fb7 Add ref_carrier to Pref and remove req_power from ReferenceCarrier
Change-Id: I8ac2a7ca7c6d866170e564771c6cb78dcf3754d8
2022-11-03 10:24:38 +01:00
EstherLerouzic
cb85b8fe2b Add a test with long propagation
Existing tests only cover short distances, and effect on accumulated
noise, especially when crossing ROADMs with equalization, are not well
reported on elements power prints.
With this long path, I can catch more printing inconsistencies.

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: I2d0e8ccbbd387a2cd6c645c07f4b5f75e4617c30
2022-11-02 12:05:26 +01:00
EstherLerouzic
18610fb7a9 Add ref_carrier to Pref and remove req_power from ReferenceCarrier
ref_carrier is added in Pref conveys the reference channel type
information ie the channel that was used for design (would it be
auto-design or for a given design). Other attributes (like
slot_width or roll-off) may be added here for future equalization
types.

Pref object already records the req_power, so let's remove it
from ReferenceCarrier and only use ref_carrier to record info that
will be useful for PSD equalization ie baud_rate.

This reference baud_rate is required to compute reference target power
based on spectral density values during propagation. It is thus required
because of on-the-fly evaluation of loss for p_span_i and for printing
loss and target power of ROADM during propagation.

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: Ic7441afa12ca5273ff99dea0268e439276107257
2022-11-02 12:05:26 +01:00
EstherLerouzic
bd6b278dd1 Add tx_osnr in spectral information
This change enables to use a different tx_osnr per carrier.

If tx_osnr is defined via spectrum then use it to define a tx_osnr per
carrier in si else use the tx_osnr of request to set tx_osnr of si.

Then, the propagate function for requests is changed to update OSNR with
tx_OSNR per carrier defined in si.

TODO: The tx_osnr defined in spectrum is not yet taken into account for
the propagate_and_optimize function, because the loop that optimizes
the choice for the mode only loops on baudrate.

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: I0fcdf559d4f1f8f0047faa257076084ec7adcc77
2022-10-31 16:04:46 +01:00
EstherLerouzic
e143d25339 Add a user defined initial spectrum in propagation functions
A new function is added to build spectrum information based on
the actual mixture of channels to be simulated (baud rate, slot width,
power per frequency).

Propagation function is changed so that, if the user defines a
specific distribution, then it uses it, else it uses as before,
all identical channels based on the initial request. In this case,
as before this change, we assume full load, with same channel for
the spectral info and not the resulting mixt of channels after
routing.

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: Icf56396837b77009e98accd27fcebd2dded6d112
2022-10-31 16:03:15 +01:00
EstherLerouzic
ffc7dbc241 Change pref from a scalar to a list of per channel delta power
The idea behind this change is to reproduce the exact same behaviour as
with the scalar, but accounting for variable levels of powers.

- delete the  neq_ch: equivalent channel count in dB because with mixed
  rates and power such a value has limited utility
- instead creates a vector that records the 'user defined' distribution
  of power.

This vector is used as a reference for channel equalization out of the
ROADM. 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, and a reduction must be
applied (ROADM can not amplify).
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]

Important note:
This changes the previous behaviour that equalized all identical channels
based on the one that had the min power !!

TODO: in coming refactor where transmission and design will be properly
separated, the initial behaviour may be set again as a design choice.

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

- in amplifier: the saturation is computed based on this vector
delta_pdb_per_channel, instead of the nb of channels.
The target of the future refactor will be to use the effective
carrier's power. I prefer to have this first step, because this is
how it is implemented today (ie based on the noiseless reference),
and I would like first to add more behaviour tests before doing
this refactor (would it be needed).

- in spectralInfo class, change pref to a Pref object to enable both
p_span0 and p_spani to be conveyed during propagation of
spectral_information in elements. No refactor of them at this point.

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: I591027cdd08e89098330c7d77d6f50212f4d4724
2022-10-28 09:13:24 +02:00
EstherLerouzic
b842898baf Change precision of --show-channels to 5 digits
Flexgrid precision is 6.25GHz so --show-channels should be at least 5 digits

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: I7de4254ab18508320133371e0d8cc8b5e08f0d2f
2022-10-28 00:38:28 +00:00
EstherLerouzic
7ea9e3b341 Fix bug when gain is not initialized
If gain is not initialized, save_networks does not work properly
trying to round a None value

Change-Id: I614859f16e0019a2f6fe680c04159398c9b1eb51
2022-10-20 15:38:12 +00:00
Jan Kundrát
fcf168b361 tests: fix flake8 and flake8-html incompatibility
Test runs (`linters-diff-ci`) end up with an error:

 Traceback (most recent call last):
   File "/home/zuul/src/gerrithub.io/Telecominfraproject/oopt-gnpy/.tox/linters-diff-ci/bin/flake8", line 8, in <module>
     sys.exit(main())
   File "/home/zuul/src/gerrithub.io/Telecominfraproject/oopt-gnpy/.tox/linters-diff-ci/lib/python3.10/site-packages/flake8/main/cli.py", line 22, in main
     app.run(argv)
   File "/home/zuul/src/gerrithub.io/Telecominfraproject/oopt-gnpy/.tox/linters-diff-ci/lib/python3.10/site-packages/flake8/main/application.py", line 336, in run
     self._run(argv)
   File "/home/zuul/src/gerrithub.io/Telecominfraproject/oopt-gnpy/.tox/linters-diff-ci/lib/python3.10/site-packages/flake8/main/application.py", line 326, in _run
     self.report()
   File "/home/zuul/src/gerrithub.io/Telecominfraproject/oopt-gnpy/.tox/linters-diff-ci/lib/python3.10/site-packages/flake8/main/application.py", line 321, in report
     self.formatter.stop()
   File "/home/zuul/src/gerrithub.io/Telecominfraproject/oopt-gnpy/.tox/linters-diff-ci/lib/python3.10/site-packages/flake8_html/plugin.py", line 245, in stop
     self.write_index()
   File "/home/zuul/src/gerrithub.io/Telecominfraproject/oopt-gnpy/.tox/linters-diff-ci/lib/python3.10/site-packages/flake8_html/plugin.py", line 281, in write_index
     versions=self.option_manager.generate_versions(),
 AttributeError: 'OptionManager' object has no attribute 'generate_versions'
 ERROR: InvocationError for command /home/zuul/src/gerrithub.io/Telecominfraproject/oopt-gnpy/.tox/linters-diff-ci/bin/flake8 --format html --htmldir linters --exit-zero (exited with code 1)

Bug: https://github.com/lordmauve/flake8-html/issues/30
Change-Id: I755877341dec2d9cd9bdcdab098e2067f783cc27
2022-10-20 15:37:12 +02:00
Jan Kundrát
a7ec7e2ed6 Merge changes from topic "mixed-rate"
* changes:
  Change saturation verification to total input power
  Prepare for Pref definition
  Add utilities
2022-09-19 09:30:59 +00:00
Jan Kundrát
00ee102b3a docs: fix RST formatting
...of a bullet list. This ain't markdown, apparently.

Change-Id: I4f7a55a4084eda6463636c1dd5c41ef43ef78921
2022-09-18 12:46:19 +02:00
EstherLerouzic
ce11524ad9 Correct dgt vector: listed in the reversed order
This was corrected for example-data but not for tests data
(in commit 3a72ce84d0, related
to issue #390)

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: I929beeb034166d30aa994439a1d6a26350f5c3e9
2022-09-14 05:35:15 +00:00
EstherLerouzic
74be14562a record request_id as string, not integer
Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: I59416a6d69a5989d0c152461ca9e264abcf09ea8
2022-08-24 16:45:56 +02:00
EstherLerouzic
16694d0a09 support missing trx_mode in request instead of null value
Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: I5c05b17b0b134c7782a08e86015dc30c7c9b3713
2022-08-24 16:43:57 +02:00
EstherLerouzic
33c6038921 Change saturation verification to total input power
Previous check was made on reference channel computation.
Now we use the actual total input power to compute the actual gain.

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: I3e0db72fdb030a49e2b06cdcfb442b5e642c1777
2022-08-17 14:13:38 +02:00
EstherLerouzic
119c9eda90 Prepare for Pref definition
Mainly changes self.pch_out_db to self.ref_pch_out_dbm in order
to reflect real unit for the value and to remind that this value
is defined for a reference noiseless channel (whose power is recorded
in p_spani in Pref).

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: If0e008c3efc36ce73c9df01c76cf46985543d9fa
2022-08-17 14:13:38 +02:00
EstherLerouzic
b63e146bf4 Add utilities
to convert from/to watt, mW, dBm, power spectral density ...

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: I9b9684c1ad096aa54d01ef3f0242ecd2dcae79aa
2022-08-17 14:13:38 +02:00
gborrach
09dba8a166 Fix: Raman pumps SRS solver
In the previous version, when the values of the counter-propagating Raman pump profiles were flipped, the pumps resulted flipped also in frequency.

Change-Id: I66f7c2aff35c72f5dcb4fb11f7a82fe1df2ee3f2
Co-authored-by: Andrea D'Amico <andrea.damico@polito.it>
2022-07-27 00:20:47 +02:00
Jan Kundrát
7f5043622b CI: GitHub: show all build failures
Change-Id: I4a5aeb123aa89a30371a36788188964ca924ca12
2022-07-07 16:32:13 +02:00
Jan Kundrát
6ad4593f41 CI: GitHub: test on Mac OS as well
Change-Id: Ifb8ba470765fc02e3367beeaf8f048da6fdad6d7
2022-07-05 13:18:37 +02:00
Jan Kundrát
706661d801 CI: GitHub: use new test-requirements
Follow-up: b86fe960 I8d2e610c91da728d72c7d19590b25bbd8713f0de tests: Easier installation of test requirements via PIP
Change-Id: I870ed27af7301829ced572214f517ca76a94a0dc
2022-07-05 13:07:18 +02:00
Jan Kundrát
a408d28911 Merge "Remove Travis-CI leftovers" 2022-07-05 11:07:08 +00:00
Jan Kundrát
b86fe96032 tests: Easier installation of test requirements via PIP
Burying these behind the tox.ini works fine on CI, but it means that
someone has to ask the users to run an extra `pip install pytest` for
the test suite. Not nice.

This will need a follow-up commit to adjust the GitHub action to use
this new simplified way. That cannot land via Gerrit due to GitHub's
permission model.

Change-Id: I8d2e610c91da728d72c7d19590b25bbd8713f0de
2022-07-05 12:45:19 +02:00
Jan Kundrát
43926518ad Remove Travis-CI leftovers
These builds have not been running for about an year. Now that we have
Zuul for day-to-day CI and GitHub actions for some auxiliary package
building, remove Travis.

Change-Id: I1dd7f70045fd24d2f73f0d2086cb49edde2093c7
2022-07-05 10:14:18 +02:00
Jan Kundrát
128a6e816b docs: better anchor for legacy JSON
Change-Id: I410a4c0cdd34dd9aa5d8e34bb859746236fffdd2
2022-07-03 01:03:26 +02:00
Jan Kundrát
44db951261 docs: show gnpy.app
Change-Id: I7ec5eec72fb0f07e277ac849da09003d376eec17
2022-04-12 11:42:06 +02:00
Jonas Mårtensson
3c3d919b77 Merge "Fix: penalties are not correctly initialized" 2022-04-11 18:55:42 +00:00
EstherLerouzic
2079d2bc5b Fix: penalties are not correctly initialized
When mode is not given and propagation is performed bidir, penalties
corresponding to automatically  selected mode are not correctly
initialized in request, and gnpy-path-request fails.

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: If045624ff5dad7f0dfdec93eaa05bb5eae86e643
2022-04-06 17:17:21 +02:00
Jonas Mårtensson
062e2076ed Properly initialize power profiles for Raman calculation
numpy.empty should not be used for initializing arrays without manually
setting values since it does not initialize entries. Use numpy.zeros
instead.

Signed-off-by: Jonas Mårtensson <jonas.martensson@ri.se>
Change-Id: I4e85eb39bdce00663c0cab9582ea7ae25eb90986
2022-03-29 21:41:57 +02:00
Jonas Mårtensson
1dd1bad273 Fix bug in Raman calculation without counterpropagating pumps
The counterpropagating power profile was initialized based on number of
copropagating frequencies, which caused simulation to crash when no
counterpropagating pumps were present.

Signed-off-by: Jonas Mårtensson <jonas.martensson@ri.se>
Change-Id: I685e5438fda06058f0757ff51fdd67bc68aa1352
2022-03-29 21:27:18 +02:00
52 changed files with 3737 additions and 767 deletions

View File

@@ -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

View File

@@ -11,23 +11,25 @@ jobs:
name: Tox test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: fedora-python/tox-github-action@v0.4
with:
tox_env: ${{ matrix.tox_env }}
dnf_install: ${{ matrix.dnf_install }}
- uses: codecov/codecov-action@29386c70ef20e286228c72b668a06fd0e8399192
- uses: codecov/codecov-action@v3.1.1
if: ${{ endswith(matrix.tox_env, '-cover') }}
with:
files: ${{ github.workspace }}/cover/coverage.xml
strategy:
fail-fast: false
matrix:
tox_env:
- py38
- py39
- py310-cover
- py310
- py311-cover
include:
- tox_env: docs
dnf_install: graphviz
@@ -38,13 +40,13 @@ jobs:
name: PyPI packaging
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: actions/setup-python@v2
- uses: actions/setup-python@v4
name: Install Python
with:
python-version: '3.10'
python-version: '3.11'
- uses: casperdcl/deploy-pypi@bb869aafd89f657ceaafe9561d3b5584766c0f95
with:
password: ${{ secrets.PYPI_API_TOKEN }}
@@ -62,7 +64,7 @@ jobs:
with:
username: jktjkt
password: ${{ secrets.DOCKERHUB_TOKEN }}
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Extract tag name
@@ -92,21 +94,27 @@ jobs:
telecominfraproject/oopt-gnpy:${{ steps.extract_tag_name.outputs.GIT_DESC }}
telecominfraproject/oopt-gnpy:latest
windows:
name: Tests on Windows
runs-on: windows-2019
other-platforms:
name: Tests on other platforms
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: actions/setup-python@v2
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python_version }}
- run: |
pip install -r tests/requirements.txt
pip install --editable .
pip install 'pytest>=6.2.5,<7'
pytest -vv
strategy:
fail-fast: false
matrix:
python_version:
- "3.10"
include:
- os: windows-2019
python_version: "3.10"
- os: windows-2022
python_version: "3.11"
- os: macos-12
python_version: "3.11"

View File

@@ -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

View File

@@ -2,10 +2,18 @@
- project:
check:
jobs:
- tox-py38
- tox-py39
- tox-py310-cover
- tox-docs-f35
- tox-py38:
vars:
ensure_tox_version: '<4'
- 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:
voting: false
dependencies:
@@ -16,7 +24,11 @@
coverage_job_name_current: tox-py310-cover
- tox-linters-diff-n-report:
voting: false
- tox-py310-cover-previous
vars:
ensure_tox_version: '<4'
- tox-py310-cover-previous:
vars:
ensure_tox_version: '<4'
tag:
jobs:
- oopt-release-python:

View File

@@ -11,18 +11,21 @@ To learn how to contribute, please see CONTRIBUTING.md
- Brian Taylor (Facebook) <briantaylor@fb.com>
- David Boertjes (Ciena) <dboertje@ciena.com>
- Diego Landa (Facebook) <dlanda@fb.com>
- Emmanuelle Delfour (Orange) <WEDE7391@orange.com>
- Esther Le Rouzic (Orange) <esther.lerouzic@orange.com>
- Gabriele Galimberti (Cisco) <ggalimbe@cisco.com>
- Gert Grammel (Juniper Networks) <ggrammel@juniper.net>
- Giacomo Borraccini (Politecnico di Torino) <giacomo.borraccini@polito.it>
- Gilad Goldfarb (Facebook) <giladg@fb.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>
- Jonas Mårtensson (RISE) <jonas.martensson@ri.se>
- Mattia Cantono (Politecnico di Torino) <mattia.cantono@polito.it>
- Miguel Garrich (University Catalunya) <miquel.garrich@upct.es>
- Raj Nagarajan (Lumentum) <raj.nagarajan@lumentum.com>
- Roberts Miculens (Lattelecom) <roberts.miculens@lattelecom.lv>
- Sami Alavi (NUST) <sami.mansooralavi1999@gmail.com>
- Shengxiang Zhu (University of Arizona) <szhu@email.arizona.edu>
- Stefan Melin (Telia Company) <Stefan.Melin@teliacompany.com>
- Vittorio Curri (Politecnico di Torino) <vittorio.curri@polito.it>

View File

@@ -3,12 +3,12 @@
[![Install via pip](https://img.shields.io/pypi/v/gnpy)](https://pypi.org/project/gnpy/)
[![Python versions](https://img.shields.io/pypi/pyversions/gnpy)](https://pypi.org/project/gnpy/)
[![Documentation status](https://readthedocs.org/projects/gnpy/badge/?version=master)](http://gnpy.readthedocs.io/en/master/?badge=master)
[![GitHub Workflow Status](https://img.shields.io/github/workflow/status/Telecominfraproject/oopt-gnpy/build)](https://github.com/Telecominfraproject/oopt-gnpy/actions/workflows/main.yml)
[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/Telecominfraproject/oopt-gnpy/main.yml)](https://github.com/Telecominfraproject/oopt-gnpy/actions/workflows/main.yml)
[![Gerrit](https://img.shields.io/badge/patches-via%20Gerrit-blue)](https://review.gerrithub.io/q/project:Telecominfraproject/oopt-gnpy+is:open)
[![Contributors](https://img.shields.io/github/contributors-anon/Telecominfraproject/oopt-gnpy)](https://github.com/Telecominfraproject/oopt-gnpy/graphs/contributors)
[![Code Quality via LGTM.com](https://img.shields.io/lgtm/grade/python/github/Telecominfraproject/oopt-gnpy)](https://lgtm.com/projects/g/Telecominfraproject/oopt-gnpy/)
[![Code Coverage via codecov](https://img.shields.io/codecov/c/github/Telecominfraproject/oopt-gnpy)](https://codecov.io/gh/Telecominfraproject/oopt-gnpy)
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.3458319.svg)](https://doi.org/10.5281/zenodo.3458319)
[![Matrix chat](https://img.shields.io/matrix/oopt-gnpy:matrix.org)](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.
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
![Running a simple simulation example](https://telecominfraproject.github.io/oopt-gnpy/docs/images/transmission_main_example.svg)
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/):
[![Path propagation at gnpy.app](docs/images/2022-04-12-gnpy-app.png)](https://gnpy.app/)

View File

@@ -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.
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).
Membership is free and open to all.

View File

@@ -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.
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:

View File

@@ -100,10 +100,10 @@ Raman Amplifiers
An accurate simulation of Raman amplification requires knowledge of:
- the *power* and *wavelength* of all Raman pumping lasers,
- the *direction*, whether it is co-propagating or counter-propagating,
- the Raman efficiency of the fiber,
- the fiber temperature.
* the *power* and *wavelength* of all Raman pumping lasers,
* the *direction*, whether it is co-propagating or counter-propagating,
* the Raman efficiency of the fiber,
* the fiber temperature.
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`.

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 KiB

View File

@@ -10,7 +10,7 @@ fully-functional programs.
**Note**: *If you are a network operator or involved in route planning and
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
development.*

View File

@@ -1,4 +1,4 @@
.. _json:
.. _legacy-json:
JSON Input Files
================
@@ -44,7 +44,7 @@ For all amplifier models:
| ``type_variety`` | (string) | a unique name to ID the amplifier in the|
| | | 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 |
| | | VOA is present and will be used to push |
| | | amplifier gain to its maximum, within |
@@ -176,36 +176,36 @@ ROADM
The user can only modify the value of existing parameters:
+--------------------------+-----------+---------------------------------------------+
| field | type | description |
+==========================+===========+=============================================+
| ``target_pch_out_db`` | (number) | Auto-design sets the ROADM egress channel |
| | | power. This reflects typical control loop |
| | | algorithms that adjust ROADM losses to |
| | | equalize channels (eg coming from different |
| | | ingress direction or add ports) |
| | | This is the default value |
| | | Roadm/params/target_pch_out_db if no value |
| | | is given in the ``Roadm`` element in the |
| | | topology input description. |
| | | This default value is ignored if a |
| | | params/target_pch_out_db value is input in |
| | | the topology for a given ROADM. |
+--------------------------+-----------+---------------------------------------------+
| ``add_drop_osnr`` | (number) | OSNR contribution from the add/drop ports |
+--------------------------+-----------+---------------------------------------------+
| ``pmd`` | (number) | Polarization mode dispersion (PMD). (s) |
+--------------------------+-----------+---------------------------------------------+
| ``restrictions`` | (dict of | If non-empty, keys ``preamp_variety_list`` |
| | strings) | and ``booster_variety_list`` represent |
| | | list of ``type_variety`` amplifiers which |
| | | are allowed for auto-design within ROADM's |
| | | line degrees. |
| | | |
| | | If no booster should be placed on a degree, |
| | | insert a ``Fused`` node on the degree |
| | | output. |
+--------------------------+-----------+---------------------------------------------+
+-------------------------------+-----------+----------------------------------------------------+
| field | type | description |
+===============================+===========+====================================================+
| ``target_pch_out_db`` | (number) | Default :ref:`equalization strategy<equalization>` |
| or | | for this ROADM type. |
| ``target_psd_out_mWperGHz`` | | |
| or | | Auto-design sets the ROADM egress channel |
| ``target_out_mWperSlotWidth`` | | power. This reflects typical control loop |
| (mutually exclusive) | | algorithms that adjust ROADM losses to |
| | | equalize channels (e.g., coming from |
| | | different ingress direction or add ports). |
| | | |
| | | These values are used as defaults when no |
| | | overrides are set per each ``Roadm`` |
| | | element in the network topology. |
+-------------------------------+-----------+----------------------------------------------------+
| ``add_drop_osnr`` | (number) | OSNR contribution from the add/drop ports |
+-------------------------------+-----------+----------------------------------------------------+
| ``pmd`` | (number) | Polarization mode dispersion (PMD). (s) |
+-------------------------------+-----------+----------------------------------------------------+
| ``restrictions`` | (dict of | If non-empty, keys ``preamp_variety_list`` |
| | strings) | and ``booster_variety_list`` represent |
| | | list of ``type_variety`` amplifiers which |
| | | are allowed for auto-design within ROADM's |
| | | line degrees. |
| | | |
| | | If no booster should be placed on a degree, |
| | | insert a ``Fused`` node on the degree |
| | | output. |
+-------------------------------+-----------+----------------------------------------------------+
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 ``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 |
+=============================================+===========+=============================================+
@@ -283,23 +286,27 @@ Span configuration is not a list (which may change in later releases) and the us
+-------------------------------------+-----------+---------------------------------------------+
| field | type | description |
+=====================================+===========+=============================================+
| ``power_mode`` | (boolean) | If false, gain mode. Auto-design sets |
| | | amplifier gain = preceding span loss, |
| | | unless the amplifier exists and its |
| | | gain > 0 in the topology input JSON. |
| | | If true, power mode (recommended for |
| | | auto-design and power sweep.) |
| | | Auto-design sets amplifier power |
| | | according to delta_power_range. If the |
| | | amplifier exists with gain > 0 in the |
| | | topology JSON input, then its gain is |
| | | translated into a power target/channel. |
| | | Moreover, when performing a power sweep |
| | | (see ``power_range_db`` in the SI |
| | | configuration library) the power sweep |
| | | is performed w/r/t this power target, |
| | | regardless of preceding amplifiers |
| | | power saturation/limitations. |
| ``power_mode`` | (boolean) | If false, **gain mode**. In the gain mode, |
| | | only gain settings are used for |
| | | propagation, and ``delta_p`` is ignored. |
| | | If no ``gain_target`` is set in an |
| | | amplifier, auto-design computes one |
| | | according to the ``delta_power_range`` |
| | | optimisation range. |
| | | The gain mode |
| | | is recommended if all the amplifiers |
| | | have already consistent gain settings in |
| | | the topology input file. |
| | | |
| | | If true, **power mode**. In the power mode, |
| | | only the ``delta_p`` is used for |
| | | propagation, and ``gain_target`` is |
| | | ignored. |
| | | 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 |
| | | 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
~~~~~~~~~~~~~~~~~~~
The user can only modify the value of existing parameters.
It defines a spectrum of N identical carriers.
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.
GNPy requires a description of all channels that are propagated through the network.
Flexgrid channel partitioning is available since the 2.7 release via the extra ``--spectrum`` option.
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 |
@@ -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. |
+----------------------+-----------+-------------------------------------------+
| ``power_dbm`` | (number) | Reference channel power. In gain mode |
| | | (see spans/power_mode = false), all gain |
| | | settings are offset w/r/t this reference |
| | | power. In power mode, it is the |
| | | reference power for |
| ``power_dbm`` | (number) | Reference channel power, in dBm. |
| | | In gain mode |
| | | (see spans/power_mode = false), if no |
| | | gain is set in an amplifier, auto-design |
| | | 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, |
| | | if delta_power_range_db = `[0,0,0]`, the |
| | | 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 |
| | | power sweep is defined (see after) the |
| | | 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. |
| | | It is not the min and max channel power |
| | | values! The reference power becomes: |
| ``power_range_db`` | (number) | Power sweep excursion around |
| | | ``power_dbm``. |
| | | This defines a list of reference powers |
| | | to run the propagation, in the range |
| | | 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 |
| | | 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.

View File

@@ -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,\
squeeze, zeros, append, flip, outer
squeeze, zeros, append, flip, outer, ndarray
from scipy.constants import h, c
from scipy.interpolate import interp1d
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.science_utils import NliSolver, RamanSolver
from gnpy.core.info import SpectralInformation
from gnpy.core.exceptions import NetworkTopologyError, SpectrumError
from gnpy.core.info import SpectralInformation, ReferenceCarrier
from gnpy.core.exceptions import NetworkTopologyError, SpectrumError, ParametersError
class Location(namedtuple('Location', 'latitude longitude city region')):
@@ -86,6 +89,7 @@ class Transceiver(_Node):
self.pdl = None
self.penalties = {}
self.total_penalty = 0
self.propagated_labels = [""]
def _calc_cd(self, spectral_info):
""" 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):
with errstate(divide='ignore'):
self.propagated_labels = spectral_info.label
self.baud_rate = spectral_info.baud_rate
ratio_01nm = lin2db(12.5e9 / self.baud_rate)
# 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:
return f'{type(self).__name__} {self.uid}'
snr = round(mean(self.snr), 2)
osnr_ase = round(mean(self.osnr_ase), 2)
osnr_ase_01nm = round(mean(self.osnr_ase_01nm), 2)
snr_01nm = round(mean(self.snr_01nm), 2)
snr = per_label_average(self.snr, self.propagated_labels)
osnr_ase = per_label_average(self.osnr_ase, self.propagated_labels)
osnr_ase_01nm = per_label_average(self.osnr_ase_01nm, self.propagated_labels)
snr_01nm = per_label_average(self.snr_01nm, self.propagated_labels)
cd = mean(self.chromatic_dispersion)
pmd = mean(self.pmd)
pdl = mean(self.pdl)
result = '\n'.join([f'{type(self).__name__} {self.uid}',
f' GSNR (0.1nm, dB): {snr_01nm:.2f}',
f' GSNR (signal bw, dB): {snr:.2f}',
f' OSNR ASE (0.1nm, dB): {osnr_ase_01nm:.2f}',
f' OSNR ASE (signal bw, dB): {osnr_ase:.2f}',
f' CD (ps/nm): {cd:.2f}',
f' PMD (ps): {pmd:.2f}',
f' PDL (dB): {pdl:.2f}'])
f' GSNR (0.1nm, dB): {pretty_summary_print(snr_01nm)}',
f' GSNR (signal bw, dB): {pretty_summary_print(snr)}',
f' OSNR ASE (0.1nm, dB): {pretty_summary_print(osnr_ase_01nm)}',
f' OSNR ASE (signal bw, dB): {pretty_summary_print(osnr_ase)}',
f' CD (ps/nm): {cd:.2f}',
f' PMD (ps): {pmd:.2f}',
f' PDL (dB): {pdl:.2f}'])
cd_penalty = self.penalties.get('chromatic_dispersion')
if cd_penalty is not None:
@@ -215,63 +219,185 @@ class Roadm(_Node):
def __init__(self, *args, params=None, **kwargs):
if not params:
params = {}
super().__init__(*args, params=RoadmParams(**params), **kwargs)
self.pch_out_db = self.params.target_pch_out_db
try:
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.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.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
def to_json(self):
return {'uid': self.uid,
'type': type(self).__name__,
'params': {
'target_pch_out_db': self.pch_out_db,
'restrictions': self.restrictions,
'per_degree_pch_out_db': self.per_degree_pch_out_db
},
'metadata': {
'location': self.metadata['location']._asdict()
}
}
if self.target_pch_out_dbm is not None:
equalisation, value = 'target_pch_out_db', self.target_pch_out_dbm
elif self.target_psd_out_mWperGHz is not None:
equalisation, value = 'target_psd_out_mWperGHz', self.target_psd_out_mWperGHz
elif self.target_out_mWperSlotWidth is not None:
equalisation, value = 'target_out_mWperSlotWidth', self.target_out_mWperSlotWidth
else:
assert False, 'There must be one default equalization defined in ROADM'
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):
return f'{type(self).__name__}(uid={self.uid!r}, loss={self.loss!r})'
def __str__(self):
if self.effective_loss is None:
if self.ref_effective_loss is None:
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}',
f' effective loss (dB): {self.effective_loss:.2f}',
f' pch out (dBm): {self.pch_out_db:.2f}'])
f' effective loss (dB): {self.ref_effective_loss:.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):
# pin_target and loss are read from eqpt_config.json['Roadm']
# all ingress channels in xpress are set to this power level
# but add channels are not, so we define an effective loss
# in the case of add channels
# find the target power on this degree:
# if a target power has been defined for this degree use it else use the global one.
# 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
"""Equalization targets are read from topology file if defined and completed with default
definition of the library.
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.
There is no difference for add or express : the same target is applied. For the moment
propagates operates with spectral info carriers all having the same source or destination.
"""
# 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
self.pch_out_db = min(spectral_info.pref.p_spani, per_degree_pch)
self.effective_loss = spectral_info.pref.p_spani - self.pch_out_db
# find the target power for the reference carrier
ref_per_degree_pch = self.get_per_degree_ref_power(degree, spectral_info.pref.ref_carrier)
# 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
min_power = min(lin2db(input_power * 1e3))
per_degree_pch = per_degree_pch if per_degree_pch < min_power else min_power
delta_power = lin2db(input_power * 1e3) - per_degree_pch
target_power_per_channel = per_degree_pch + spectral_info.delta_pdb_per_channel
# Computation of the per channel target power according to equalization policy
# 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.pmd = sqrt(spectral_info.pmd ** 2 + self.params.pmd ** 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):
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):
self.propagate(spectral_info, degree=degree)
@@ -326,7 +452,7 @@ class Fiber(_Node):
super().__init__(*args, params=FiberParams(**params), **kwargs)
self.pch_out_db = None
self.passive = True
self.propagated_labels = [""]
# 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
# a loss (to lower frequency)
@@ -376,6 +502,7 @@ class Fiber(_Node):
if self.pch_out_db is None:
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}',
f' type_variety: {self.type_variety}',
f' length (km): {self.params.length * 1e-3:.2f}',
@@ -383,7 +510,8 @@ class Fiber(_Node):
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' (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):
frequency = asarray(frequency)
@@ -473,6 +601,8 @@ class Fiber(_Node):
# apply the attenuation due to the output connector loss
attenuation_out_db = self.params.con_out
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):
# 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
attenuation_out_db = self.params.con_out
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):
@@ -573,6 +705,7 @@ class Edfa(_Node):
self.delta_p = self.operational.delta_p # delta P with Pref (power swwep) in power mode
self.tilt_target = self.operational.tilt_target
self.out_voa = self.operational.out_voa
self.propagated_labels = [""]
@property
def to_json(self):
@@ -580,7 +713,7 @@ class Edfa(_Node):
'type': type(self).__name__,
'type_variety': self.params.type_variety,
'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,
'tilt_target': self.tilt_target,
'out_voa': self.out_voa
@@ -606,6 +739,7 @@ class Edfa(_Node):
if self.pin_db is None or self.pout_db is None:
return f'{type(self).__name__} {self.uid}'
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}',
f' type_variety: {self.params.type_variety}',
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' 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' actual pch out (dBm): {total_pch}',
f' output VOA (dB): {self.out_voa:.2f}'])
def interpol_params(self, spectral_info):
@@ -639,7 +774,7 @@ class Edfa(_Node):
self.nch = spectral_info.number_of_channels
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.
# 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]
@@ -652,15 +787,14 @@ class Edfa(_Node):
self.effective_gain = self.target_pch_out_db - pref.p_spani
"""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,
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)
"""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.gprofile = self._gain_profile(pin)
@@ -891,6 +1025,8 @@ class Edfa(_Node):
spectral_info.apply_gain_db(self.gprofile - self.out_voa)
spectral_info.pmd = sqrt(spectral_info.pmd ** 2 + self.params.pmd ** 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):
spectral_info.pref = \

View File

@@ -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['tx_osnr'] = default_si_data.tx_osnr
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

View File

@@ -12,9 +12,10 @@ from __future__ import annotations
from collections import namedtuple
from collections.abc import Iterable
from typing import Union
from dataclasses import dataclass
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
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:
p_span0: inital target carrier power
p_spani: carrier power after element i
neq_ch: equivalent channel count in dB"""
p_span0: inital target carrier power for a reference channel defined by user
p_spani: carrier power after element i for a reference channel defined by user
ref_carrier records the baud rate of the reference channel
"""
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,
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)
self._frequency = frequency[indices]
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._pmd = pmd[indices]
self._pdl = pdl[indices]
pref = lin2db(mean(signal) * 1e3)
self._pref = Pref(pref, pref, lin2db(self._number_of_channels))
self._delta_pdb_per_channel = delta_pdb_per_channel[indices]
self._tx_osnr = tx_osnr[indices]
self._pref = ref_power
self._label = label[indices]
@property
def pref(self):
@@ -155,6 +161,10 @@ class SpectralInformation(object):
def pmd(self):
return self._pmd
@property
def label(self):
return self._label
@pmd.setter
def pmd(self, pmd):
self._pmd = pmd
@@ -167,6 +177,22 @@ class SpectralInformation(object):
def pdl(self, 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
def channel_number(self):
return self._channel_number
@@ -197,6 +223,12 @@ class SpectralInformation(object):
def __add__(self, other: SpectralInformation):
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),
slot_width=append(self.slot_width, other.slot_width),
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,
other.chromatic_dispersion),
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:
raise SpectrumError('Spectra cannot be summed: channels overlapping.')
def _replace(self, carriers, pref):
self.chromatic_dispersion = array([c.chromatic_dispersion for c in carriers])
self.pmd = array([c.pmd for c in carriers])
@@ -221,14 +259,18 @@ class SpectralInformation(object):
return self
def create_arbitrary_spectral_information(frequency: Union[ndarray, Iterable, int, float],
signal: Union[int, float, ndarray, Iterable],
baud_rate: Union[int, float, ndarray, Iterable],
slot_width: Union[int, float, ndarray, Iterable] = None,
roll_off: Union[int, float, ndarray, Iterable] = 0.,
chromatic_dispersion: Union[int, float, ndarray, Iterable] = 0.,
pmd: Union[int, float, ndarray, Iterable] = 0.,
pdl: Union[int, float, ndarray, Iterable] = 0.):
def create_arbitrary_spectral_information(frequency: Union[ndarray, Iterable, float],
signal: Union[float, ndarray, Iterable],
baud_rate: Union[float, ndarray, Iterable],
tx_osnr: Union[float, ndarray, Iterable],
delta_pdb_per_channel: Union[float, ndarray, Iterable] = 0.,
slot_width: Union[float, ndarray, Iterable] = None,
roll_off: Union[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
a non-uniform spectral information with NLI and ASE powers set to zero."""
frequency = asarray(frequency)
@@ -244,11 +286,17 @@ def create_arbitrary_spectral_information(frequency: Union[ndarray, Iterable, in
pdl = full(number_of_channels, pdl)
nli = 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,
signal=signal, nli=nli, ase=ase,
baud_rate=baud_rate, roll_off=roll_off,
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:
if 'could not broadcast' in str(e):
raise SpectrumError('Dimension mismatch in input fields.')
@@ -256,9 +304,82 @@ def create_arbitrary_spectral_information(frequency: Union[ndarray, Iterable, in
raise
def create_input_spectral_information(f_min, f_max, roll_off, baud_rate, power, spacing):
""" Creates a fixed slot width spectral information with flat power """
nb_channel = automatic_nch(f_min, f_max, spacing)
frequency = [(f_min + spacing * i) for i in range(1, nb_channel + 1)]
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.
all arguments are scalar values"""
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,
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

View File

@@ -12,6 +12,7 @@ from operator import attrgetter
from gnpy.core import ansi_escapes, elements
from gnpy.core.exceptions import ConfigurationError, NetworkTopologyError
from gnpy.core.utils import round2float, convert_length
from gnpy.core.info import ReferenceCarrier
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)
"""
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))
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:
# go through all the OMS departing from the ROADM
prev_node = this_node
node = oms
# if isinstance(next_node, elements.Fused): #support ROADM wo egress amp for metro applications
# node = find_last_node(next_node)
# next_node = next(n for n in network.successors(node))
# next_node = find_last_node(next_node)
if node.uid not in this_node_degree:
# 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)
if isinstance(this_node, elements.Transceiver):
this_node_out_power = 0.0 # default value if this_node is a transceiver
if isinstance(this_node, elements.Roadm):
# get target power out from ROADM for the reference carrier based on equalization settings
this_node_out_power = this_node.get_per_degree_ref_power(degree=node.uid, ref_carrier=ref_carrier)
# 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
prev_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_node = 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):
@@ -432,10 +449,10 @@ def calculate_new_length(fiber_length, bounds, target_length):
return (length1, n_spans1)
elif (bounds.start <= length2 <= bounds.stop) and not(bounds.start <= length1 <= bounds.stop):
return (length2, n_spans2)
elif target_length - length1 < length2 - target_length:
return (length1, n_spans1)
else:
elif length2 - target_length <= target_length - length1 and length2 <= bounds.stop:
return (length2, n_spans2)
else:
return (length1, n_spans1)
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)
for roadm in roadms:
set_roadm_per_degree_targets(roadm, network)
set_egress_amplifier(network, roadm, equipment, pref_ch_db, pref_total_db)
trx = [t for t in network.nodes() if isinstance(t, elements.Transceiver)]

View File

@@ -88,13 +88,22 @@ class SimParams(Parameters):
class RoadmParams(Parameters):
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:
self.target_pch_out_db = kwargs['target_pch_out_db']
self.add_drop_osnr = kwargs['add_drop_osnr']
self.pmd = kwargs['pmd']
self.pdl = kwargs['pdl']
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:
raise ParametersError(f'ROADM configurations must include {e}. Configuration: {kwargs}')

View File

@@ -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
"""
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, \
unique, argsort, cumprod
from logging import getLogger
@@ -131,20 +131,20 @@ class RamanSolver:
cnt_frequency = array([pump.frequency for pump in fiber.raman_pumps
if pump.propagation_direction == 'counterprop'])
# 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:
co_cr = fiber.cr(co_frequency)
co_alpha = fiber.alpha(co_frequency)
co_power_profile = \
RamanSolver.first_order_derivative_solution(co_power, co_alpha, co_cr, z, lumped_losses)
# 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:
cnt_cr = fiber.cr(cnt_frequency)
cnt_alpha = fiber.alpha(cnt_frequency)
cnt_power_profile = \
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
if co_frequency.size and cnt_frequency.size:
co_power_profile, cnt_power_profile = \

View File

@@ -9,7 +9,7 @@ This module contains utility functions that are used with gnpy.
"""
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 gnpy.core.exceptions import ConfigurationError
@@ -106,6 +106,69 @@ def db2lin(value):
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):
"""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
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):
""" deltawl2deltaf(delta_wl, wavelength):
delta_wl is BW in wavelength units

View 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
}
]
}

View 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"
}
]
}

View File

@@ -14,6 +14,7 @@ import sys
from math import ceil
from numpy import linspace, mean
from pathlib import Path
import gnpy.core.ansi_escapes as ansi_escapes
from gnpy.core.elements import Transceiver, Fiber, RamanFiber
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,
PathRequest, compute_constrained_path, propagate)
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, \
requests_from_json, disjunctions_from_json, save_json
from gnpy.tools.json_io import (load_equipment, load_network, load_json, load_requests, save_network,
requests_from_json, disjunctions_from_json, save_json, load_initial_spectrum)
from gnpy.tools.plots import plot_baseline, plot_results
_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('-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('--spectrum', type=Path, help='user defined mixed rate spectrum JSON file')
parser.add_argument('source', nargs='?', help='source node')
parser.add_argument('destination', nargs='?', help='destination node')
@@ -194,12 +196,21 @@ def transmission_main_example(args=None):
if args.power:
trx_params['power'] = db2lin(float(args.power)) * 1e-3
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.initial_spectrum = initial_spectrum
print(f'There are {nb_channels} channels propagating')
power_mode = equipment['Span']['default'].power_mode
print('\n'.join([f'Power mode is set to {power_mode}',
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_total_db = pref_ch_db + lin2db(req.nb_channel) # reference total power / span (SL=20dB)
try:
@@ -226,9 +237,13 @@ def transmission_main_example(args=None):
power_range = list(linspace(p_start, p_stop, p_num))
except TypeError:
print('invalid power range definition in eqpt_config, should be power_range_db: [lower, upper, step]')
for dp_db in power_range:
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:
print(f'\nPropagating with input power = {ansi_escapes.cyan}{lin2db(req.power*1e3):.2f} dBm{ansi_escapes.reset}:')
else:
@@ -264,9 +279,9 @@ def transmission_main_example(args=None):
ch_freq = final_carrier.frequency * 1e-12
ch_power = lin2db(final_carrier.power.signal * 1e3)
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(
ch_freq, 2), round(
ch_freq, 5), round(
ch_power, 2), round(
ch_osnr, 2), round(
ch_snr_nl, 2), round(

View File

@@ -13,10 +13,13 @@ from logging import getLogger
from pathlib import Path
import json
from collections import namedtuple
from numpy import arange
from gnpy.core import ansi_escapes, elements
from gnpy.core.equipment import trx_mode_params
from gnpy.core.exceptions import ConfigurationError, EquipmentConfigError, NetworkTopologyError, ServiceError
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.topology.request import PathRequest, Disjunction, compute_spectrum_slot_vs_bandwidth
from gnpy.tools.convert import xls_to_json_data
@@ -91,7 +94,6 @@ class Span(_JsonThing):
class Roadm(_JsonThing):
default_values = {
'target_pch_out_db': -17,
'add_drop_osnr': 100,
'pmd': 0,
'pdl': 0,
@@ -102,6 +104,20 @@ class Roadm(_JsonThing):
}
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')
@@ -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)
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):
json_data = load_json(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):
edfa_dict = equipment['Edfa']
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
pass
elif variety in equipment[typ]:
extra_params = equipment[typ][variety]
extra_params = equipment[typ][variety].__dict__
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['type_variety'] = variety
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']:
# init all params from request
params = {}
params['request_id'] = req['request-id']
params['request_id'] = f'{req["request-id"]}'
params['source'] = req['source']
params['bidir'] = req['bidirectional']
params['destination'] = req['destination']
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['spacing'] = req['path-constraints']['te-bandwidth']['spacing']
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:
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)
save_json(data, output_filename)
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

View File

@@ -23,7 +23,7 @@ from networkx.utils import pairwise
from numpy import mean, argmin
from gnpy.core.elements import Transceiver, Roadm
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
import gnpy.core.ansi_escapes as ansi_escapes
from copy import deepcopy
@@ -72,6 +72,7 @@ class PathRequest:
if params.effective_freq_slot is not None:
self.N = params.effective_freq_slot['N']
self.M = params.effective_freq_slot['M']
self.initial_spectrum = None
def __str__(self):
return '\n\t'.join([f'{type(self).__name__} {self.request_id}',
@@ -339,21 +340,36 @@ def compute_constrained_path(network, req):
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):
si = create_input_spectral_information(
req.f_min, req.f_max, req.roll_off, req.baud_rate,
req.power, req.spacing)
""" propagates signals in each element according to initial spectrum set by user
"""
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):
if isinstance(el, Roadm):
si = el(si, degree=path[i+1].uid)
else:
si = el(si)
path[0].update_snr(req.tx_osnr)
path[0].update_snr(si.tx_osnr)
path[0].calc_penalties(req.penalties)
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:
path[-1].update_snr(req.tx_osnr)
path[-1].update_snr(si.tx_osnr)
path[-1].calc_penalties(req.penalties)
return si
@@ -374,13 +390,18 @@ def propagate_and_optimize_mode(path, req, equipment):
float(this_mode['min_spacing']) <= req.spacing]
modes_to_explore = sorted(modes_to_explore,
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
# 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
spc_info = create_input_spectral_information(req.f_min, req.f_max,
equipment['SI']['default'].roll_off,
this_br, req.power, req.spacing)
if req.initial_spectrum is not None:
# this case is not yet handled: spectrum can not be defined for the path-request-run function
# 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):
if isinstance(el, Roadm):
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.tx_osnr = mode['tx_osnr']
pathreq.bit_rate = mode['bit_rate']
pathreq.penalties = mode['penalties']
# other blocking reason should not appear at this point
except AttributeError:
pathreq.baud_rate = mode['baud_rate']
@@ -1150,6 +1172,7 @@ def compute_path_with_disjunction(network, equipment, pathreqlist, pathlist):
pathreq.OSNR = mode['OSNR']
pathreq.tx_osnr = mode['tx_osnr']
pathreq.bit_rate = mode['bit_rate']
pathreq.penalties = mode['penalties']
# reversed path is needed for correct spectrum assignment
reversed_path = find_reversed_path(pathlist[i])

View File

@@ -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)
else:
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

View File

@@ -1,7 +1,6 @@
matplotlib>=3.5.1,<4
networkx>=2.6,<3
numpy>=1.22.0,<2
pandas>=1.3.5,<2
pbr>=5.7.0,<6
scipy>=1.7.3,<2
xlrd>=1.2.0,<2

View File

@@ -3,7 +3,7 @@ name = gnpy
description-file = README.md
description-content-type = text/markdown; variant=GFM
author = Telecom Infra Project
author-email = jan.kundrat@telecominfraproject.com
author-email = jkt@jankundrat.com
license = BSD-3-Clause
home-page = https://github.com/Telecominfraproject/oopt-gnpy
project_urls =
@@ -22,6 +22,7 @@ classifier =
Programming Language :: Python :: 3.8
Programming Language :: Python :: 3.9
Programming Language :: Python :: 3.10
Programming Language :: Python :: 3.11
Programming Language :: Python :: Implementation :: CPython
Topic :: Scientific/Engineering
Topic :: Scientific/Engineering :: Physics

View File

@@ -196,101 +196,101 @@
0.0
],
"dgt": [
2.714526681131686,
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.0,
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
]
}
}

View File

@@ -1258,7 +1258,7 @@
},
{
"metric-type": "SNR-0.1nm",
"accumulative-value": 28.77
"accumulative-value": 28.78
},
{
"metric-type": "OSNR-bandwidth",

View File

@@ -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",,,
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",,,
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,,,,,,,,,,,,,,
1 response-id source destination path_bandwidth Pass? nb of tsp pairs total cost transponder-type transponder-mode OSNR-0.1nm SNR-0.1nm SNR-bandwidth baud rate (Gbaud) input power (dBm) path spectrum (N,M) reversed path OSNR-0.1nm reversed path SNR-0.1nm reversed path SNR-bandwidth
3 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
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
5 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
6 5 trx Rennes_STA trx Lannion_CAS 20.0 True 1 1 vendorA_trx-type1 mode 2 30.79 28.77 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
7 6 NO_PATH

View 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"
}
]
}

View File

@@ -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.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.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.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.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.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.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.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.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.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,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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.391436022217508317e-04,3.369613465901344558e-04,2.165671485747253328e-04,1.441448734692186333e-04,1.009205829600201576e-04,7.651897498112265308e-05,6.624864922679121694e-05,7.242198835523922060e-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
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
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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.391154759339646064e-04,3.368990409960971838e-04,2.164687998325534753e-04,1.440063199340409466e-04,1.007307157169936256e-04,7.624910690660518565e-05,6.582015362379603355e-05,7.157078178685281889e-05
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.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 1.000000000000000021e-03 6.059428294303585358e-04 6.059596816131984903e-04 4.124436878765448634e-04 4.124540545641951000e-04 2.874462507798667202e-04 2.874328952539468305e-04 2.103923932407651741e-04 2.103398919772851445e-04 1.678414792051835720e-04 1.677242405549142946e-04 1.547359756068614396e-04 1.544863001982801454e-04 1.816771264024174659e-04 1.810521006745035243e-04 3.223716208702616772e-04 3.200643516934312716e-04
2 1.000000000000000021e-03 6.053134417926274479e-04 6.053276391419512917e-04 4.117055522849718272e-04 4.117105797931639192e-04 2.867345754340725936e-04 2.867132476380170980e-04 2.097129658661858059e-04 2.096494018677202108e-04 1.671408382188599656e-04 1.670078900317705016e-04 1.538980727463440737e-04 1.536235748319029191e-04 1.804148897825019347e-04 1.797412011853683042e-04 3.196786917797407482e-04 3.172302656811062894e-04
3 1.000000000000000021e-03 6.046849734433535663e-04 6.046965215788322606e-04 4.109690875237402238e-04 4.109687952835336887e-04 2.860250085842350751e-04 2.859957486816950244e-04 2.090360511584246736e-04 2.089614974033423851e-04 1.664434237997556567e-04 1.662949011112697126e-04 1.530650313352837862e-04 1.527659914515381017e-04 1.791618737991747007e-04 1.784402430016445015e-04 3.170092948646618079e-04 3.144223032044235564e-04
4 1.000000000000000021e-03 6.040574211994215528e-04 6.040663257237133005e-04 4.102342878398261821e-04 4.102286952029449651e-04 2.853175420730359193e-04 2.852803900268787471e-04 2.083616379079277403e-04 2.082761669373014350e-04 1.657492189637676920e-04 1.655852558250782110e-04 1.522368203677859210e-04 1.519135165004971508e-04 1.779180061767344980e-04 1.771491455864908956e-04 3.143632101370558260e-04 3.116402083285431824e-04
5 1.000000000000000021e-03 6.034068048547004811e-04 6.034134049131552151e-04 4.094522032835132145e-04 4.094420572177277762e-04 2.845379038962591819e-04 2.844940684888993296e-04 2.075849237814657072e-04 2.074903534701979157e-04 1.649065028354379026e-04 1.647299311261353841e-04 1.511673145690444625e-04 1.508247978694524506e-04 1.761800891032866087e-04 1.753757648572244786e-04 3.101696013411107001e-04 3.073546770239318966e-04
6 1.000000000000000021e-03 6.027571485450614400e-04 6.027614491955140619e-04 4.086719523190792173e-04 4.086572704905903084e-04 2.837607352174946669e-04 2.837102537033676193e-04 2.068114158243908936e-04 2.067078158689920062e-04 1.640683639230874002e-04 1.638793172508614261e-04 1.501056331894667201e-04 1.497441922066543145e-04 1.744595725998800725e-04 1.736205593148946460e-04 3.060328853710948794e-04 3.031290170068882115e-04
7 1.000000000000000021e-03 6.021084488423111532e-04 6.021104551256277167e-04 4.078935283235860985e-04 4.078743283205443272e-04 2.829860258399657913e-04 2.829289352705667755e-04 2.060410983394430761e-04 2.059285379676389937e-04 1.632347745793864737e-04 1.630333854029286287e-04 1.490517152618393740e-04 1.486716352337672398e-04 1.727562758069566841e-04 1.718833358612950819e-04 3.019522704750103072e-04 2.989623714008152688e-04
8 1.000000000000000021e-03 6.014584946769776846e-04 6.014582116574243619e-04 4.071145901524401327e-04 4.070908897338878368e-04 2.822117789926256531e-04 2.821481168500803620e-04 2.052723360542508288e-04 2.051508852341138217e-04 1.624043320606193702e-04 1.621907338278938133e-04 1.480041851535097400e-04 1.476057520309239507e-04 1.710684425093964716e-04 1.701623353591907634e-04 2.979241342510260699e-04 2.948510854465446421e-04
9 1.000000000000000021e-03 6.008072907871274187e-04 6.008047235362061304e-04 4.063351463691671850e-04 4.063069632907822604e-04 2.814380028310788616e-04 2.813678065291968134e-04 2.045051334722086352e-04 2.043748619094956848e-04 1.615770319309204608e-04 1.613513572535205565e-04 1.469630126571907884e-04 1.465465096091600223e-04 1.693959447695294284e-04 1.684574188261711764e-04 2.939478272988644745e-04 2.907944492354505236e-04
10 1.000000000000000021e-03 6.001497788207915121e-04 6.001451360530016092e-04 4.055445944921290597e-04 4.055123728737173791e-04 2.806482406689155018e-04 2.805722092000019225e-04 2.037157793952982566e-04 2.035777116783122080e-04 1.607178158735042268e-04 1.604816172174310248e-04 1.458699426620449350e-04 1.454380432794140279e-04 1.676159912510077627e-04 1.666509749540511247e-04 2.896237141368235984e-04 2.864106919229302104e-04
11 1.000000000000000021e-03 5.994910374944025042e-04 5.994843238884264500e-04 4.047535948218318100e-04 4.047173509812383436e-04 2.798590565363265966e-04 2.797772242168449484e-04 2.029281739019909579e-04 2.027823739011739494e-04 1.598620980598530251e-04 1.596154967418240479e-04 1.447840125437445142e-04 1.443369747762361644e-04 1.658536074234625343e-04 1.648627759919576703e-04 2.853613427461420497e-04 2.820911717580149220e-04
12 1.000000000000000021e-03 5.988260139740232213e-04 5.988172342183890103e-04 4.039566207302157830e-04 4.039163714190686103e-04 2.790656268334378021e-04 2.789780293498389497e-04 2.021383019157014865e-04 2.019848363041463460e-04 1.590064003284783227e-04 1.587495225986212185e-04 1.437018088215471850e-04 1.432398991427229250e-04 1.641044980680633682e-04 1.630885426393815433e-04 2.811520890672289147e-04 2.778273023594395367e-04
13 1.000000000000000021e-03 5.981547295973556680e-04 5.981438884479926745e-04 4.031537149116132062e-04 4.031094770638417378e-04 2.782680029999613086e-04 2.781746763026650849e-04 2.013462168991827844e-04 2.011851525894453846e-04 1.581507747250400562e-04 1.578837467363927922e-04 1.426233730149128554e-04 1.421468562989037501e-04 1.623686402996199669e-04 1.613282432889087106e-04 2.769954674673250896e-04 2.736185440612619660e-04
14 1.000000000000000021e-03 5.974772058480589884e-04 5.974643081279905951e-04 4.023449202032754039e-04 4.022967109333065402e-04 2.774662364916018848e-04 2.773672167904255525e-04 2.005519721420980883e-04 2.003833762773818070e-04 1.572952728586730247e-04 1.570182206524130687e-04 1.415487458023807841e-04 1.410578853054891162e-04 1.606460099014084351e-04 1.595818450324428667e-04 2.728909933446289080e-04 2.694643589605560702e-04
15 1.000000000000000021e-03 5.967924602151245417e-04 5.967776135628261383e-04 4.015280354275974962e-04 4.014760835454474729e-04 2.766567170422079059e-04 2.765523639715266420e-04 1.997501120648868605e-04 1.995745107850170087e-04 1.564314572956195643e-04 1.561451751437292214e-04 1.404632320601022135e-04 1.399593838969533089e-04 1.589039550526354799e-04 1.578189695554256631e-04 2.687258582080010155e-04 2.652593622585595239e-04
16 1.000000000000000021e-03 5.961015210291329552e-04 5.960847301704033955e-04 4.007053572943599577e-04 4.006496794462583626e-04 2.758431797434220318e-04 2.757335282633677394e-04 1.989462429758611403e-04 1.987637005805311633e-04 1.555679612182393453e-04 1.552725686595443394e-04 1.393818318435550562e-04 1.388652425906941482e-04 1.571757793000612348e-04 1.560705931497471889e-04 2.646152969711955188e-04 2.611111091988240428e-04
17 1.000000000000000021e-03 5.954044103428367566e-04 5.953856800664869900e-04 3.998769294251378363e-04 3.998175424230218200e-04 2.750256766566040972e-04 2.749107619574642008e-04 1.981404183299118591e-04 1.979509993037016505e-04 1.547048355449558708e-04 1.544004519462355480e-04 1.383045830163869136e-04 1.377754975907092790e-04 1.554614480121203164e-04 1.543366727366940775e-04 2.605587686095252363e-04 2.570190084729973012e-04
18 1.000000000000000021e-03 5.947013777400173224e-04 5.946807128856675898e-04 3.990430339362700481e-04 3.989799547069150759e-04 2.742044609070656662e-04 2.740843182982303974e-04 1.973328535702731791e-04 1.971366223883773178e-04 1.538422664307762401e-04 1.535290106655841792e-04 1.372316495983985922e-04 1.366903106980890768e-04 1.537610729441031576e-04 1.526173104925201149e-04 2.565559887984316962e-04 2.529827224768709296e-04
19 1.000000000000000021e-03 5.939924446448691022e-04 5.939698501124463306e-04 3.982037130272156897e-04 3.981369586533569987e-04 2.733795825341983144e-04 2.732542475356756692e-04 1.965235995659166514e-04 1.963206208562686219e-04 1.529803013963573505e-04 1.526582921179318820e-04 1.361630645638145173e-04 1.356097131673934353e-04 1.520746117923915490e-04 1.509124557001679569e-04 2.526064078268458078e-04 2.490016526370400561e-04
20 1.000000000000000021e-03 5.932708072008613994e-04 5.932465626846949178e-04 3.973448313523968048e-04 3.972749900655482406e-04 2.725292879585060313e-04 2.723996767755988246e-04 1.956816407574392804e-04 1.954732420440092287e-04 1.520737532268283138e-04 1.517449722599865122e-04 1.350253536692922732e-04 1.344633353162260421e-04 1.502520417395671493e-04 1.490787207039270096e-04 2.482429369311983419e-04 2.446311790608478916e-04
21 1.000000000000000021e-03 5.925433291275937313e-04 5.925174390191371033e-04 3.964806700993557770e-04 3.964077570693368959e-04 2.716755655440644093e-04 2.715417094444828503e-04 1.948383564731119815e-04 1.946245940839898595e-04 1.511684275731327428e-04 1.508329769024341859e-04 1.338932464840604031e-04 1.333227635443309334e-04 1.484467502756363724e-04 1.472627410071646460e-04 2.439468427807235304e-04 2.403295419535726046e-04
22 1.000000000000000021e-03 5.918101288584805405e-04 5.917825975966207411e-04 3.956113769664689763e-04 3.955354074700222146e-04 2.708185566039283476e-04 2.706804869652218665e-04 1.939938721213093850e-04 1.937748023716854423e-04 1.502644330979066827e-04 1.499224142400159925e-04 1.327668256867655240e-04 1.321880784683747445e-04 1.466587172007617287e-04 1.454644877205459041e-04 2.397173806066686273e-04 2.360959501695517580e-04
23 1.000000000000000021e-03 5.910712282476807177e-04 5.910420603206251872e-04 3.947369945531709078e-04 3.946579839875351422e-04 2.699583111402765676e-04 2.698160594859791645e-04 1.931482375169864133e-04 1.929239167799043884e-04 1.493618135415682949e-04 1.490133276731937860e-04 1.316461114156967569e-04 1.310592984163628486e-04 1.448878476419733323e-04 1.436838579350653566e-04 2.355536787532183434e-04 2.319294885748935905e-04
24 1.000000000000000021e-03 5.903266492974269808e-04 5.902958492424382119e-04 3.938575655934699066e-04 3.937755294749108723e-04 2.690948791496987824e-04 2.689484771457827648e-04 1.923015022699072797e-04 1.920719869699086713e-04 1.484606121781560119e-04 1.481057601269397369e-04 1.305311230155930472e-04 1.299364409184113305e-04 1.431340460611192763e-04 1.419207481479104003e-04 2.314548735305102924e-04 2.278292508796841368e-04
25 1.000000000000000021e-03 5.895916361077759233e-04 5.895598685634120817e-04 3.930015889157450278e-04 3.929178479527316910e-04 2.682679585446747167e-04 2.681193531438139815e-04 1.915046725018171748e-04 1.912726116179633686e-04 1.476265343831741983e-04 1.472689584526509451e-04 1.295122987364192039e-04 1.289152165190126341e-04 1.415403000102364922e-04 1.403276367723939690e-04 2.277048762028301403e-04 2.241040180807166735e-04
26 1.000000000000000021e-03 5.888509505821538188e-04 5.888182184446727908e-04 3.921405251235485093e-04 3.920550888852155800e-04 2.674377005486313469e-04 2.672869104586279658e-04 1.907064029438769275e-04 1.904718280301954622e-04 1.467931904457939435e-04 1.464329431074320987e-04 1.284977589807231727e-04 1.278983689606465277e-04 1.399600943498011466e-04 1.387482416027983217e-04 2.240084844157824847e-04 2.204326648641897243e-04
27 1.000000000000000021e-03 5.881046147353881284e-04 5.880709209312291698e-04 3.912744162777674595e-04 3.911872944022057189e-04 2.666041537474170709e-04 2.664511977530461032e-04 1.899067416692393098e-04 1.896696843025943828e-04 1.459606238177286390e-04 1.455977573633372962e-04 1.274875313353729649e-04 1.268859249854523304e-04 1.383933775516596422e-04 1.371825077963339959e-04 2.203650745808937968e-04 2.168145532732365665e-04
28 1.000000000000000021e-03 5.873535041835053691e-04 5.873188516038330012e-04 3.904041908037584924e-04 3.903153927531259398e-04 2.657681073335506784e-04 2.656130037940035156e-04 1.891063272435359547e-04 1.888668181821939697e-04 1.451293640595985746e-04 1.447639292589146184e-04 1.264820875947550167e-04 1.258783532658409540e-04 1.368405966876043531e-04 1.356308744741794301e-04 2.167748460671411873e-04 2.132498546822566535e-04
29 1.000000000000000021e-03 5.865976375297720377e-04 5.865620290918570692e-04 3.895298843642901903e-04 3.894394196579139384e-04 2.649296021207307814e-04 2.647723694527710347e-04 1.883051991594097421e-04 1.880632691586897262e-04 1.442994447916011967e-04 1.439314922056974795e-04 1.254814426573682665e-04 1.248756678383702303e-04 1.353016807452276011e-04 1.340932673985179111e-04 2.132371421364682767e-04 2.097378989636096219e-04
30 1.000000000000000021e-03 5.858370334908887412e-04 5.858004721379563712e-04 3.886515327161476187e-04 3.885594109297237520e-04 2.640886789067201177e-04 2.639293355828808605e-04 1.875033967487228748e-04 1.872590765580118600e-04 1.434708992929061271e-04 1.431004792703304354e-04 1.244856108614830043e-04 1.238778821782577646e-04 1.337765582492128895e-04 1.325696118981003829e-04 2.097513117892475961e-04 2.062780220293337398e-04
31 1.000000000000000021e-03 5.850717109173866415e-04 5.850341996176138979e-04 3.877691717638952012e-04 3.876754025264287241e-04 2.632453785571107932e-04 2.630839431003643525e-04 1.867009592919541521e-04 1.864542796470906004e-04 1.426437606415217971e-04 1.422709233084495310e-04 1.234946061839636009e-04 1.228850093894619591e-04 1.322651576281378186e-04 1.310598332174379369e-04 2.063167108712882474e-04 2.028695668674851068e-04
32 1.000000000000000021e-03 5.843017841779564719e-04 5.842633259194077947e-04 3.868829399849727933e-04 3.867875329548579075e-04 2.623998297381095117e-04 2.622363206668650243e-04 1.858979973489535589e-04 1.856489888735660490e-04 1.418181214209275826e-04 1.414429165168560936e-04 1.225084976697060233e-04 1.218971173595769875e-04 1.307674705482058720e-04 1.295639192660443006e-04 2.029328092689827875e-04 1.995119889022209966e-04
33 1.000000000000000021e-03 5.835272719783185817e-04 5.834878697730810785e-04 3.859928727352694559e-04 3.858958376209294626e-04 2.615520723807220407e-04 2.613865082576556967e-04 1.850945488934469029e-04 1.848432421885319707e-04 1.409940129261724197e-04 1.406164899573639974e-04 1.215272967897141737e-04 1.209142166826000190e-04 1.292834223062770812e-04 1.280817922197122173e-04 1.995989685833853672e-04 1.962046375108947760e-04
34 1.000000000000000021e-03 5.827481931390192209e-04 5.827078500230523962e-04 3.850990054645316799e-04 3.850003520236475163e-04 2.607021463995574332e-04 2.605345458299026889e-04 1.842906517410432266e-04 1.840370773822073991e-04 1.401714661235729505e-04 1.397916743597008157e-04 1.205510144929276286e-04 1.199363174304283899e-04 1.278129378421479238e-04 1.266133739282210172e-04 1.963145562589016025e-04 1.929468682039042694e-04
35 1.000000000000000021e-03 5.819741190680906414e-04 5.819334261621241173e-04 3.842186528659996786e-04 3.841195496874485939e-04 2.598733678747139103e-04 2.597054450234843122e-04 1.835150990942780922e-04 1.832615752361228063e-04 1.393856353878371876e-04 1.390067359137023490e-04 1.196241043053028848e-04 1.190124837885568685e-04 1.264157249384978508e-04 1.252266477671892364e-04 1.931533527071859933e-04 1.898342669542842250e-04
36 1.000000000000000021e-03 5.811954906857532679e-04 5.811544494713084385e-04 3.833344911530978875e-04 3.832349425929183610e-04 2.590423495637437460e-04 2.588741118031709712e-04 1.827389251971546448e-04 1.824854619290212638e-04 1.386010231640464696e-04 1.382230274271905722e-04 1.187014313463915350e-04 1.180928923649849320e-04 1.250305871218520724e-04 1.238519429087230690e-04 1.900379005692562904e-04 1.867668194223294086e-04
37 1.000000000000000021e-03 5.804123268686601621e-04 5.803709388350691226e-04 3.824465553881609072e-04 3.823465658113372784e-04 2.582091305240798466e-04 2.580405852181276633e-04 1.819621668943112273e-04 1.817087742555892370e-04 1.378176602140172575e-04 1.374405795299253087e-04 1.177830097537161525e-04 1.171775570200931022e-04 1.236574657124121280e-04 1.224892004036316632e-04 1.869676369318762604e-04 1.837439681062861012e-04
38 1.000000000000000021e-03 5.796261981805348861e-04 5.795844646861092117e-04 3.815564763513873891e-04 3.814560496353979662e-04 2.573750710547324729e-04 2.572062245701910057e-04 1.811859034357266680e-04 1.809325897993571621e-04 1.370364232713841633e-04 1.366602663048694689e-04 1.168696105278517803e-04 1.162672443199922736e-04 1.222971239749574140e-04 1.211391750652958171e-04 1.839432835829867073e-04 1.807664171209839225e-04
39 1.000000000000000021e-03 5.788371166298537929e-04 5.787950390386191295e-04 3.806642767897665215e-04 3.805634168176052199e-04 2.565401959245502722e-04 2.563710546191050039e-04 1.804101566728638260e-04 1.801569303693986560e-04 1.362573268495191094e-04 1.358821021611104744e-04 1.159612279572367423e-04 1.153619483579342790e-04 1.209494737333099285e-04 1.198017787120210541e-04 1.809642226433420603e-04 1.778335550584487373e-04
40 1.000000000000000021e-03 5.780450942923127944e-04 5.780026739739645147e-04 3.797699794962239458e-04 3.796686901561970007e-04 2.557045298790712744e-04 2.555351001009416268e-04 1.796349483543752492e-04 1.793818176715784992e-04 1.354803852765658562e-04 1.351061013224604760e-04 1.150578560981921263e-04 1.144616629966290335e-04 1.196144270262388971e-04 1.184769233829579004e-04 1.780298433107154344e-04 1.749447775426769835e-04
41 1.000000000000000021e-03 5.772501433097143196e-04 5.772073816396077655e-04 3.788736073065085246e-04 3.787718924921195112e-04 2.548680976361037374e-04 2.546983857238086673e-04 1.788603001211915217e-04 1.786072733038042632e-04 1.347056126906417029e-04 1.343322778228697451e-04 1.141594887707218423e-04 1.135663818643436025e-04 1.182918961012392148e-04 1.171645213323757931e-04 1.751395417672447184e-04 1.720994871389106646e-04
42 1.000000000000000021e-03 5.764543993312114430e-04 5.764112975619451167e-04 3.779774418763772749e-04 3.778753049229251356e-04 2.540328419678222955e-04 2.538628529985562728e-04 1.780877776040980329e-04 1.778348606584519826e-04 1.339342982068885400e-04 1.335619170774594953e-04 1.132672798320007770e-04 1.126772524533375236e-04 1.169830787460522149e-04 1.158657577413503814e-04 1.722947974180976999e-04 1.692991320527776819e-04
43 1.000000000000000021e-03 5.756578658699793754e-04 5.756144252522814222e-04 3.770814893242558957e-04 3.769789335549947914e-04 2.531987675065141240e-04 2.530285065275222683e-04 1.773173809352787060e-04 1.770645798114452998e-04 1.331664323570320042e-04 1.327950095246515803e-04 1.123811939733057949e-04 1.117942393436846088e-04 1.156878429947367658e-04 1.145805009748875411e-04 1.694949148917899182e-04 1.665430248001372392e-04
44 1.000000000000000021e-03 5.748605464740858808e-04 5.748167682568085593e-04 3.761857558021953151e-04 3.760827845283660131e-04 2.523658789003789082e-04 2.521953509290719687e-04 1.765491102506614579e-04 1.762964308427695766e-04 1.324020056947932127e-04 1.320315456257037542e-04 1.115011960644554309e-04 1.109173072961205789e-04 1.144060580710201219e-04 1.133086205901110452e-04 1.667392091004694466e-04 1.638304880953399246e-04
45 1.000000000000000021e-03 5.740605208264367093e-04 5.740166237139158025e-04 3.752860221900411030e-04 3.751830736799844387e-04 2.515274179172670150e-04 2.513572749088919958e-04 1.757730484194969538e-04 1.755213872380331861e-04 1.316262968484167275e-04 1.312580494760662926e-04 1.106031805667756002e-04 1.100242733780145235e-04 1.130890327345630944e-04 1.120050977276823334e-04 1.638824360782746060e-04 1.610268323297459373e-04
46 1.000000000000000021e-03 5.732597217139582440e-04 5.732157063485666254e-04 3.743865400085843336e-04 3.742836154796483610e-04 2.506901966657434509e-04 2.505204393147844274e-04 1.749991992264989145e-04 1.747485543201545441e-04 1.308541788026545852e-04 1.304881340598568315e-04 1.097115653341001649e-04 1.091376023135285023e-04 1.117862964715498958e-04 1.107157077892566201e-04 1.610733229285059244e-04 1.582698947895536752e-04
47 1.000000000000000021e-03 5.724581527307928295e-04 5.724140197507473007e-04 3.734873153380866809e-04 3.733844159930685934e-04 2.498542195054800734e-04 2.496848484812796650e-04 1.742275621656188764e-04 1.739779315547772373e-04 1.300856406740597557e-04 1.297217884948703216e-04 1.088263113284397853e-04 1.082572552711356679e-04 1.104977038827086933e-04 1.094403070125688193e-04 1.583110954216201049e-04 1.555589173140119988e-04
48 1.000000000000000021e-03 5.716575664778975139e-04 5.716133163514535006e-04 3.725901351223118402e-04 3.724872615728835922e-04 2.490209518882956956e-04 2.488519667094108378e-04 1.734592774731394025e-04 1.732106573421359136e-04 1.293215843757922266e-04 1.289599119326889729e-04 1.079481792373105579e-04 1.073839886960488172e-04 1.092239503861538297e-04 1.081795839980315968e-04 1.555962288273640454e-04 1.528943685588057789e-04
49 1.000000000000000021e-03 5.708579584178212615e-04 5.708135916089464952e-04 3.716949912014026899e-04 3.715921440481619780e-04 2.481903820156593069e-04 2.480217821880964816e-04 1.726943281050015661e-04 1.724467146387093834e-04 1.285619816677677630e-04 1.282024761936270685e-04 1.070771097820554131e-04 1.065177436423506841e-04 1.079648627815312081e-04 1.069333674890963240e-04 1.529279069228532445e-04 1.502754491507743331e-04
50 1.000000000000000021e-03 5.700593240595020362e-04 5.700148410279018158e-04 3.708018755033176054e-04 3.706990553358867476e-04 2.473624982033243466e-04 2.471942832207120249e-04 1.719326971657234189e-04 1.716860865497342535e-04 1.278068045492097274e-04 1.274494533371790404e-04 1.062130442456755448e-04 1.056584617232978574e-04 1.067202699871894330e-04 1.057014883248694426e-04 1.503053277730467872e-04 1.477013737020834935e-04
51 1.000000000000000021e-03 5.692616589508734098e-04 5.692170601522963469e-04 3.699107800243283187e-04 3.698079874222007994e-04 2.465372888514933574e-04 2.463694581964103098e-04 1.711743678703278799e-04 1.709287562926333241e-04 1.270560252111956913e-04 1.267008156164750913e-04 1.053559244063845252e-04 1.048060850476081559e-04 1.054900029091859618e-04 1.044837793145218324e-04 1.477277031714797602e-04 1.451713702741069042e-04
52 1.000000000000000021e-03 5.684668249800580104e-04 5.684221107462931718e-04 3.690236622787805977e-04 3.689208973051672467e-04 2.457163959794073484e-04 2.455489480245545849e-04 1.704206404911772779e-04 1.701760222502850749e-04 1.263106878677109810e-04 1.259576042689529907e-04 1.045066466916437628e-04 1.039615052862917467e-04 1.042749156168111009e-04 1.032810864032787402e-04 1.451958181660296986e-04 1.426862118551680341e-04
53 1.000000000000000021e-03 5.676748100054150635e-04 5.676299806599446841e-04 3.681404996529084395e-04 3.680377623533836952e-04 2.448997907163580324e-04 2.447327238198633678e-04 1.696714800685054925e-04 1.694278494753442496e-04 1.255707452244580493e-04 1.252197721019686588e-04 1.036651297187654374e-04 1.031246414956518974e-04 1.030748062779383314e-04 1.020932099638295122e-04 1.427088285865420875e-04 1.402450714512258731e-04
54 1.000000000000000021e-03 5.668856019606317766e-04 5.668406578186927338e-04 3.672612697075048303e-04 3.671585601102087264e-04 2.440874444423345342e-04 2.439207569480618843e-04 1.689268519744038289e-04 1.686842033525584789e-04 1.248361504800705925e-04 1.244872724153648453e-04 1.028312930702206035e-04 1.022954136930148580e-04 1.018894759794533339e-04 1.009199532576916553e-04 1.402659065748177792e-04 1.378471380449364540e-04
55 1.000000000000000021e-03 5.660978860040193896e-04 5.660528798623399357e-04 3.663833351346186431e-04 3.662807588285737852e-04 2.432754355983019401e-04 2.431092838206291959e-04 1.681813812071888568e-04 1.679399278621275505e-04 1.240994738987429935e-04 1.237529841606189703e-04 1.019939514788640786e-04 1.014631173867882653e-04 1.006986246362622330e-04 9.974194130068655907e-05 1.378144424939918523e-04 1.354424501489320950e-04
56 1.000000000000000021e-03 5.653129566917403656e-04 5.652678887062091489e-04 3.655093013788168949e-04 3.654068578608936813e-04 2.424676550876819162e-04 2.423020363044335113e-04 1.674404214250226010e-04 1.672001557892942780e-04 1.233681396595080271e-04 1.230240193993821724e-04 1.011643116013039457e-04 1.006384714692423982e-04 9.952262825359122704e-05 9.857860748076281341e-05 1.354072260989254840e-04 1.330810886504238974e-04
57 1.000000000000000021e-03 5.645308021917731225e-04 5.644856725120149217e-04 3.646391464999218838e-04 3.645368352560149003e-04 2.416640749146854532e-04 2.414989864020476457e-04 1.667039386446287719e-04 1.664648531857207327e-04 1.226421015627000995e-04 1.223003320760450115e-04 1.003422934745905857e-04 9.982139651422967225e-05 9.836128786277046102e-05 9.742975533494338731e-05 1.330434286087782230e-04 1.307622432316707048e-04
58 1.000000000000000021e-03 5.637533512715803535e-04 5.637081598516872297e-04 3.637748048842355184e-04 3.636726247466106157e-04 2.408662573039999728e-04 2.407016951041400575e-04 1.659731272165147797e-04 1.657352124900924413e-04 1.219222820499958832e-04 1.215828418563276393e-04 9.952864742131557339e-05 9.901263879559620603e-05 9.721524794079934454e-05 9.629602344691408898e-05 1.307234068834026641e-04 1.284862679388324466e-04
59 1.000000000000000021e-03 5.629805832911210584e-04 5.629353300793490293e-04 3.629162394326295588e-04 3.628141892281135789e-04 2.400741573155354143e-04 2.399101174854294510e-04 1.652479360999081315e-04 1.650111827309744587e-04 1.212086174287677493e-04 1.208714852573268089e-04 9.872327382660381703e-05 9.821209936496322563e-05 9.608428430098295324e-05 9.517719041742417905e-05 1.284463004684426848e-04 1.262523213089875105e-04
60 1.000000000000000021e-03 5.622124777547171659e-04 5.621671626935266465e-04 3.620634133660168507e-04 3.619614919160761232e-04 2.392877304473862261e-04 2.391242090587739641e-04 1.645283148026117340e-04 1.642927134849468424e-04 1.205010447638324016e-04 1.201661995513669139e-04 9.792607442008048754e-05 9.741968060975319133e-05 9.496817636981473815e-05 9.407303841474721877e-05 1.262112668660531425e-04 1.240595794224424390e-04
61 1.000000000000000021e-03 5.614490142952067260e-04 5.614036373218869204e-04 3.612162901840461500e-04 3.611144963064036881e-04 2.385069325732311319e-04 2.383439257149278542e-04 1.638142133018547766e-04 1.635797548004748762e-04 1.197995017798251111e-04 1.194669226721670609e-04 9.713695214164584071e-05 9.663528612429730903e-05 9.386670693673759554e-05 9.298335293466474341e-05 1.240174806289624668e-04 1.219072350364201328e-04
62 1.000000000000000021e-03 5.606917876274927293e-04 5.606463485664969944e-04 3.603765175920537237e-04 3.602748496609082000e-04 2.377331235014221514e-04 2.375706263435288989e-04 1.631066878653574946e-04 1.628733614326239394e-04 1.191048135885559178e-04 1.187744774441648902e-04 9.635658300529022745e-05 9.585958850070355037e-05 9.278045936752733660e-05 9.190871230268097864e-05 1.218652818497198865e-04 1.197956257524449784e-04
63 1.000000000000000021e-03 5.599407711882442139e-04 5.598952698555576370e-04 3.595440474626148916e-04 3.594425038433207622e-04 2.369662455139816704e-04 2.368042532426757629e-04 1.624056743525901679e-04 1.621734693226255697e-04 1.184169030927857740e-04 1.180887870128607769e-04 9.558485302446070387e-05 9.509247448928166366e-05 9.170919453133945438e-05 9.084888029067286991e-05 1.197538170918552259e-04 1.177239166851852087e-04
64 1.000000000000000021e-03 5.591959386362445371e-04 5.591503748394264367e-04 3.587188321446053963e-04 3.586174111937711294e-04 2.362062415256148103e-04 2.360447493430869353e-04 1.617111093879153761e-04 1.614800151758654528e-04 1.177356942042864595e-04 1.174097755299612002e-04 9.482164989506947420e-05 9.433383251239638840e-05 9.065267746151001182e-05 8.980362478385646723e-05 1.176822517560764241e-04 1.156912913627774928e-04
65 1.000000000000000021e-03 5.584679347085343051e-04 5.584225591487143505e-04 3.579204847030152616e-04 3.578196518919505740e-04 2.354801209260217886e-04 2.353197697834314708e-04 1.610571916563278928e-04 1.608280111225492105e-04 1.171042314833950021e-04 1.167814916834832538e-04 9.412413419793498636e-05 9.364209834454310303e-05 8.969710985766721223e-05 8.886089862139266997e-05 1.158171674873524301e-04 1.138670987493162862e-04
66 1.000000000000000021e-03 5.577460350040716044e-04 5.577008468242452242e-04 3.571292104088583889e-04 3.570289620106132170e-04 2.347605938090600918e-04 2.346013750077580542e-04 1.604093154405005178e-04 1.601820316992516276e-04 1.164788453357124725e-04 1.161592518078891664e-04 9.343405219685640224e-05 9.295772679954118940e-05 8.875393403591714169e-05 8.793036528463705852e-05 1.139848385910069905e-04 1.120748093307471799e-04
67 1.000000000000000021e-03 5.570302142000897652e-04 5.569852125454166723e-04 3.563449642017089015e-04 3.562452965139748743e-04 2.340476072540025119e-04 2.338895121728417183e-04 1.597674235279283352e-04 1.595420198714332595e-04 1.158594695166401697e-04 1.155429900504064843e-04 9.275131062844492946e-05 9.228062559771084612e-05 8.782296490203555085e-05 8.701184300011380421e-05 1.121846347113116888e-04 1.103138112316197746e-04
68 1.000000000000000021e-03 5.563205323021954991e-04 5.562757163116399499e-04 3.555677864531773679e-04 3.554686957703368042e-04 2.333411773810724506e-04 2.331841974232642283e-04 1.591315117132938270e-04 1.589079715282182140e-04 1.152460793074575203e-04 1.149326819589807311e-04 9.207585166649024939e-05 9.161073769793274093e-05 8.690405384945894284e-05 8.610518609906000706e-05 1.104159825692847303e-04 1.085835484715731990e-04
69 1.000000000000000021e-03 5.556169640414684949e-04 5.555723328562507538e-04 3.547976323593042547e-04 3.546991150005096983e-04 2.326412517183593022e-04 2.324853783642831767e-04 1.585015234268918286e-04 1.582798302759657303e-04 1.146386094395640093e-04 1.143282626503791007e-04 9.140758389001004606e-05 9.094797264045832242e-05 8.599702078916069998e-05 8.521021771090780625e-05 1.086782756746748250e-04 1.068834322603653324e-04
70 1.000000000000000021e-03 5.549194843577821444e-04 5.548750371213563657e-04 3.540344575531629255e-04 3.539365098621276230e-04 2.319477783590319386e-04 2.317930031654593444e-04 1.578774027587701891e-04 1.576575403787569985e-04 1.140369954748351631e-04 1.137296680667903865e-04 9.074641718074756330e-05 9.029224125378113518e-05 8.510168863112195785e-05 8.432676390648500317e-05 1.069709201912467553e-04 1.052128860599020399e-04
71 1.000000000000000021e-03 5.542280683854123842e-04 5.541838042439771635e-04 3.532782180675540329e-04 3.531808364136874187e-04 2.312607059053527040e-04 2.311070205067102163e-04 1.572590943887706505e-04 1.570410466910287454e-04 1.134411737206307899e-04 1.131368348940622735e-04 9.009226260907148270e-05 8.964345554504144940e-05 8.421788308143062266e-05 8.345465350366406993e-05 1.052933342707317640e-04 1.035713449503019397e-04
72 1.000000000000000021e-03 5.535435592528614506e-04 5.534994772986728557e-04 3.525297669260542646e-04 3.524329474767404734e-04 2.305807244353639423e-04 2.304281200650363333e-04 1.566471216497641210e-04 1.564308719194829761e-04 1.128515385449576329e-04 1.125501566344392631e-04 8.944542244330133641e-05 8.900191672771989599e-05 8.334582247054855841e-05 8.259410426967044201e-05 1.036454797753234207e-04 1.019587783174918249e-04
73 1.000000000000000021e-03 5.528659293179593237e-04 5.528220286453137825e-04 3.517890550472092793e-04 3.516927939956549431e-04 2.299077767025847687e-04 2.297562446752235638e-04 1.560414233076215052e-04 1.558269550144645319e-04 1.122680202866636689e-04 1.119695640249353838e-04 8.880580140054516926e-05 8.836753049012398612e-05 8.248532556564376009e-05 8.174493812638424233e-05 1.020267728319692934e-04 1.003746189891791522e-04
74 1.000000000000000021e-03 5.521951511907441769e-04 5.521514308959529988e-04 3.510560338657343622e-04 3.509603274307335013e-04 2.292418061160320900e-04 2.290913378267074509e-04 1.554419388795865483e-04 1.552292356754889449e-04 1.116905502099227850e-04 1.113949887224841186e-04 8.817330560855271690e-05 8.774020391605217217e-05 8.163621425685595255e-05 8.090698006040516024e-05 1.004366420798761639e-04 9.881831191717569708e-05
75 1.000000000000000021e-03 5.515357570680511773e-04 5.514925705077818562e-04 3.503384240935171457e-04 3.502439423799475968e-04 2.285926195257032088e-04 2.284441610897542578e-04 1.548599664871607589e-04 1.546502536108915020e-04 1.111316359132737570e-04 1.108405451476827762e-04 8.756139732097920178e-05 8.713560862370903280e-05 8.081143045355856274e-05 8.009669495978734939e-05 9.887558842870256459e-05 9.729798207441842409e-05
76 1.000000000000000021e-03 5.508831499695134287e-04 5.508404954145605355e-04 3.496283778737561509e-04 3.495351144497065954e-04 2.279502431225978031e-04 2.278037808073336661e-04 1.542840041018178729e-04 1.540772565128698055e-04 1.105785086338880569e-04 1.102918428934658313e-04 8.695624145470242240e-05 8.653767235071846409e-05 7.999741899881025698e-05 7.929694151393572473e-05 9.734197099681332458e-05 9.580416231533655223e-05
77 1.000000000000000021e-03 5.502373034395177318e-04 5.501951791779016417e-04 3.489258487042028742e-04 3.488337972114359704e-04 2.273146231686837553e-04 2.271701434112839691e-04 1.537139948092133693e-04 1.535101877933933972e-04 1.100311043442569531e-04 1.097488185619751536e-04 8.635775141128424154e-05 8.594630990981442489e-05 7.919401605398894981e-05 7.850756016455258672e-05 9.583525507692383649e-05 9.433633928045583440e-05
78 1.000000000000000021e-03 5.495982753581815606e-04 5.495566796872157793e-04 3.482308738101717264e-04 3.481400279377950191e-04 2.266857730549029851e-04 2.265432624126748171e-04 1.531499327576744506e-04 1.529490418493457818e-04 1.094893985055618503e-04 1.092114481281042810e-04 8.576587362490598130e-05 8.536146896299809861e-05 7.840109070036870779e-05 7.772842391839215501e-05 9.435495486246966317e-05 9.289404738934854406e-05
79 1.000000000000000021e-03 5.489660394111083985e-04 5.489249706454161527e-04 3.475434070850742167e-04 3.474537605956091817e-04 2.260636396270461598e-04 2.259230848255512310e-04 1.525917617808240120e-04 1.523937628358645337e-04 1.089533281238570496e-04 1.086796692149487770e-04 8.518052329278025009e-05 8.478306608188779627e-05 7.761848365092111231e-05 7.695937762456762194e-05 9.290055631012179708e-05 9.147679298288125297e-05
80 1.000000000000000021e-03 5.483405695169031721e-04 5.483000259883204826e-04 3.468634028939242666e-04 3.467749496226811058e-04 2.254481703234268038e-04 2.253095582547179863e-04 1.520394263837190755e-04 1.518442955755717951e-04 1.084228310216190315e-04 1.081534202533376696e-04 8.460161684084565312e-05 8.421101904463252675e-05 7.684603831721497692e-05 7.620026875215024978e-05 9.147155629123523643e-05 9.008409282780761526e-05
81 1.000000000000000021e-03 5.477218398160970184e-04 5.476818198739591458e-04 3.461908160447295835e-04 3.461035499001802445e-04 2.248393131323322177e-04 2.247026308546789793e-04 1.514928716901747189e-04 1.513005855077949086e-04 1.078978457743454979e-04 1.076326404207925846e-04 8.402907183940372035e-05 8.364524675486820964e-05 7.608360066029366266e-05 7.545094724756280888e-05 9.006746210081428210e-05 8.871547365198851438e-05
82 1.000000000000000021e-03 5.471100509830739483e-04 5.470705529810189179e-04 3.455258336641454844e-04 3.454397485743721506e-04 2.242372067336963117e-04 2.241024413587690614e-04 1.509521904405796073e-04 1.507627254998857578e-04 1.073784265457052923e-04 1.071173841908876651e-04 8.346290305268591516e-05 8.308576484396013343e-05 7.533111218717854750e-05 7.471135773791005180e-05 8.868791149478115541e-05 8.737059031219478156e-05
83 1.000000000000000021e-03 5.465051768578450733e-04 5.464661991670638182e-04 3.448684100639811626e-04 3.447835000304132159e-04 2.236417986238402995e-04 2.235089374295866490e-04 1.504173273640432558e-04 1.502306605954647535e-04 1.068645117117092864e-04 1.066075905365267742e-04 8.290302835464549746e-05 8.253249249775968508e-05 7.458842111919879593e-05 7.398135232542971769e-05 8.733242665255502488e-05 8.604898363826276057e-05
84 1.000000000000000021e-03 5.459071915129861232e-04 5.458687325221291348e-04 3.442185000233075119e-04 3.441347591201103138e-04 2.230530368831633737e-04 2.229220673120790245e-04 1.498882278486614187e-04 1.497043364932862668e-04 1.063560404456327061e-04 1.061031992194506256e-04 8.234936680962616474e-05 8.198535007121052676e-05 7.385537825478157199e-05 7.326078561528488937e-05 8.600053991717240256e-05 8.475020417489323324e-05
85 1.000000000000000021e-03 5.453277270883248422e-04 5.452901895090844558e-04 3.435968835063559607e-04 3.435150570304173014e-04 2.224987019123045480e-04 2.223706511768525117e-04 1.493989071766017103e-04 1.492190839480494894e-04 1.058939742146122178e-04 1.056468106030715887e-04 8.185283432112488435e-05 8.149737756206330190e-05 7.320083692872619591e-05 7.262157722718122260e-05 8.480120525436834187e-05 8.358877577600780481e-05
86 1.000000000000000021e-03 5.447550756300442850e-04 5.447184570616723891e-04 3.429826158632724655e-04 3.429026954804162766e-04 2.219507707465509202e-04 2.218256219048080177e-04 1.489150144895505707e-04 1.487392297472955698e-04 1.054368625228528346e-04 1.051953246672348403e-04 8.136171358212484941e-05 8.101471604563164947e-05 7.255437084770181432e-05 7.199020130947719233e-05 8.362138199130290570e-05 8.244600742971828849e-05
87 1.000000000000000021e-03 5.441892122953419404e-04 5.441535103689846154e-04 3.423756544954533452e-04 3.422976319891982578e-04 2.214091954721005766e-04 2.212869318272295087e-04 1.484365007267826825e-04 1.482647252612499030e-04 1.049846526338566485e-04 1.047486894350850925e-04 8.087593753205775274e-05 8.053730000430466094e-05 7.191586230794716592e-05 7.136654438032706549e-05 8.246071125248328093e-05 8.132155926679031160e-05
88 1.000000000000000021e-03 5.436257869834306257e-04 5.435909997143165834e-04 3.417717090501741430e-04 3.416955774702987799e-04 2.208705585733095858e-04 2.207511658034611989e-04 1.479607869104501987e-04 1.477929951923679644e-04 1.045353737048878776e-04 1.043049394866297369e-04 8.039389156994272538e-05 8.006352324306285982e-05 7.128377081045688692e-05 7.074908147590525608e-05 8.131715986317171246e-05 8.021344078389119761e-05
89 1.000000000000000021e-03 5.430647907230928004e-04 5.430309161342643806e-04 3.411707635569704330e-04 3.410965159927432586e-04 2.203348411819341208e-04 2.202183050641030458e-04 1.474878525008424264e-04 1.473240192034464783e-04 1.040890016129762040e-04 1.038640511149413747e-04 7.991554062444546221e-05 7.959335168171117276e-05 7.065802258502740848e-05 7.013774197495506457e-05 8.019045690600123673e-05 7.912139691327875046e-05
90 1.000000000000000021e-03 5.425062145452035425e-04 5.424732506674768149e-04 3.405728020832017003e-04 3.405004316631486216e-04 2.198020245085192449e-04 2.196883309178195964e-04 1.470176770797095381e-04 1.468577770769967101e-04 1.036455124224165388e-04 1.034260007962051111e-04 7.944084996986793814e-05 7.912675157408064104e-05 7.003854478529189314e-05 6.953245613429904408e-05 7.908033605497744685e-05 7.804517686317993341e-05
91 1.000000000000000021e-03 5.419500494783734655e-04 5.419179943504857889e-04 3.399778087230425684e-04 3.399073086151600896e-04 2.192720898259863408e-04 2.191612247355960430e-04 1.465502403299397984e-04 1.463942486957527610e-04 1.032048823605461293e-04 1.029907651665082401e-04 7.896978519468913008e-05 7.866368947795671801e-05 6.942526543493823701e-05 6.893315503775990498e-05 7.798653539704048551e-05 7.698453395110452940e-05
92 1.000000000000000021e-03 5.413941311127808435e-04 5.413629828746738867e-04 3.393835756573481376e-04 3.393149394667066966e-04 2.187432334857416756e-04 2.186351838182767991e-04 1.460841531649274296e-04 1.459320465988429058e-04 1.027660304092932323e-04 1.025572658029062702e-04 7.850144313387483587e-05 7.820326658601671303e-05 6.881729624423716459e-05 6.833895931108436813e-05 7.690779566810491681e-05 7.593823716905742757e-05
93 1.000000000000000021e-03 5.408384570747234218e-04 5.408082138671730385e-04 3.387900992487282684e-04 3.387233205925343745e-04 2.182154508640741402e-04 2.181102035828516778e-04 1.456194096560940569e-04 1.454711649598321068e-04 1.023289477092565169e-04 1.021254940975202248e-04 7.803580657419308998e-05 7.774546638666711494e-05 6.821458972979072498e-05 6.774982397495531476e-05 7.584390730667668775e-05 7.490609035628451105e-05
94 1.000000000000000021e-03 5.402830249660243826e-04 5.402536849306272763e-04 3.381973758275843189e-04 3.381324483351249330e-04 2.176887373150658610e-04 2.175862794239174624e-04 1.451560038709627043e-04 1.450115979478540569e-04 1.018936254270842219e-04 1.016954414669310805e-04 7.757285840469518032e-05 7.729027246482876178e-05 6.761709884283491779e-05 6.716570445567967391e-05 7.479466373034050742e-05 7.388790009412213962e-05
95 1.000000000000000021e-03 5.397131798668998448e-04 5.396844473492076093e-04 3.375789411508863902e-04 3.375153269484326116e-04 2.171273238640323091e-04 2.170269255797531330e-04 1.446496280566233409e-04 1.445081577421817903e-04 1.014059885387841374e-04 1.012119806681102793e-04 7.704415358894297196e-05 7.676796353167371053e-05 6.692941074150365747e-05 6.648955946153636300e-05 7.359880640935691578e-05 7.272015355307609235e-05
96 1.000000000000000021e-03 5.391436022217508317e-04 5.391154759339646064e-04 3.369613465901344558e-04 3.368990409960971838e-04 2.165671485747253328e-04 2.164687998325534753e-04 1.441448734692186333e-04 1.440063199340409466e-04 1.009205829600201576e-04 1.007307157169936256e-04 7.651897498112265308e-05 7.624910690660518565e-05 6.624864922679121694e-05 6.582015362379603355e-05 7.242198835523922060e-05 7.157078178685281889e-05
97 1.223599761281599736e-03 1.174325560395078800e-03 2.870574988594920204e-03 2.755298774803674553e-03 5.410558860144323162e-03 5.194387759090383395e-03 9.740321680379944794e-03 9.354521953613973567e-03 1.718226620812626088e-02 1.651171618252517473e-02 3.032327552654904765e-02 2.916966879690554432e-02 5.460894525232919822e-02 5.262163370571950466e-02 1.025522470341594938e-01 9.910396847768351836e-02 2.059999999999999887e-01 2.000000000000000111e-01
98 4.083745694274921144e-03 4.160571131359890040e-03 8.369042825128880300e-03 8.527170824088577475e-03 1.439530071705045523e-02 1.466969461393815427e-02 2.397223043565064812e-02 2.443642414582058997e-02 3.897486419880552555e-02 3.975038656808106002e-02 6.202545653148217042e-02 6.331729118004528201e-02 9.626510461383173956e-02 9.842489957479945428e-02 1.437785279168776742e-01 1.474045868235714374e-01 2.000000000000000111e-01 2.059999999999999887e-01

View File

@@ -1,97 +1,97 @@
,signal,ase,nli
0,0.0002866683470642085,3.455694800734997e-08,2.1767706055953313e-07
1,0.0002842930902246378,3.4445260342151434e-08,2.20064716108892e-07
2,0.00028193841273409963,3.4334217950641774e-08,2.2239856929822977e-07
3,0.0002796041237984927,3.422381587730477e-08,2.2467937700272344e-07
4,0.00027589218358262,3.3956266402003705e-08,2.2576401766047814e-07
5,0.0002722303444814487,3.3690926476196685e-08,2.2678094635121413e-07
6,0.00026861791294303266,3.342777134334201e-08,2.2773179097640802e-07
7,0.00026505174756069215,3.316675429137828e-08,2.2861602718115889e-07
8,0.0002615312775878486,3.290785186664305e-08,2.294352005376256e-07
9,0.0002577007690018081,3.26092154155734e-08,2.2987401053105823e-07
10,0.00025392474812815994,3.231329178154223e-08,2.3024928325076607e-07
11,0.0002501957390130402,3.201993265117851e-08,2.3055653947072044e-07
12,0.0002465133077961936,3.172911082648897e-08,2.3079745224174315e-07
13,0.00024287702172285261,3.144079924487205e-08,2.309736700807475e-07
14,0.00023918644496802598,3.1142660565561954e-08,2.3099023972100006e-07
15,0.00023554415781363666,3.084719002003063e-08,2.3094533745656626e-07
16,0.0002319496781605366,3.0554358283826426e-08,2.3084061926161906e-07
17,0.000228402746264896,3.026413819712743e-08,2.306779372506828e-07
18,0.00022490287297566154,2.997650061885732e-08,2.2679314039447925e-07
19,0.0002210339853226993,2.9639081336421986e-08,2.225476971173533e-07
20,0.00021722472675673681,2.9305156366940595e-08,2.1837424228396343e-07
21,0.00021347443350916938,2.8974683300060073e-08,2.1427183120915025e-07
22,0.00020978233224910872,2.864761802749998e-08,2.1023941353936252e-07
23,0.0002061476568412488,2.832391679540816e-08,2.0627595093585302e-07
24,0.0002028237056285935,2.8034565895618217e-08,2.0263423697267893e-07
25,0.00019954715529254185,2.7748013284124615e-08,1.9905015325521452e-07
26,0.0001963174528000437,2.7464226779716075e-08,1.9552292765090665e-07
27,0.00019313475803109547,2.718318103861899e-08,1.920525003885138e-07
28,0.00018999848980183525,2.6904843987797665e-08,1.8863807494364378e-07
29,0.00018690807208013476,2.6629183784477213e-08,1.852788635171717e-07
30,0.00018386293497138034,2.635616888672288e-08,1.8197408797080072e-07
31,0.0001808626075954048,2.608576967648626e-08,1.7872307155753016e-07
32,0.00017790652540681915,2.5817954962418864e-08,1.7552504805064169e-07
33,0.00017499412908771533,2.5552693765056307e-08,1.723792598876346e-07
34,0.0001721914205512116,2.529821177538242e-08,1.69350416018518e-07
35,0.00016942913344260413,2.5046172734840803e-08,1.663699885487624e-07
36,0.0001667067703020692,2.4796549229968703e-08,1.6343730102750106e-07
37,0.00016402494737034808,2.4549324625938814e-08,1.602954566731582e-07
38,0.0001613831201060569,2.430447139995257e-08,1.5720933628441338e-07
39,0.00015878075021906192,2.406196225171638e-08,1.541780421866172e-07
40,0.00015621730558753943,2.3821770097360405e-08,1.5120068940449393e-07
41,0.000153694061439545,2.3583901792213434e-08,1.4827814327673852e-07
42,0.00015121040694331307,2.3348329147104765e-08,1.4540943949658482e-07
43,0.00014876574026315321,2.3115024224465226e-08,1.425936300160931e-07
44,0.00014623043935025647,2.2864250993313975e-08,1.397065102093322e-07
45,0.00014373723010448477,2.2616046400344574e-08,1.3687531950007013e-07
46,0.0001412854316913198,2.2370377299191064e-08,1.3409901704421416e-07
47,0.00013887544742801196,2.2127221340618422e-08,1.313775961274423e-07
48,0.0001365065605420479,2.1886545482453933e-08,1.2870998887773554e-07
49,0.00013417806673897108,2.164831702445933e-08,1.2609514810979993e-07
50,0.00013188927370907155,2.1412503578881085e-08,1.2353204666803017e-07
51,0.00012964085531237725,2.117909919147538e-08,1.2102094138348867e-07
52,0.00012743207116500861,2.094807084934547e-08,1.1856076487337955e-07
53,0.0001252621950917354,2.0719385892834214e-08,1.161504721855161e-07
54,0.00012308423338164536,2.0485363383535514e-08,1.1374627006340893e-07
55,0.00012094535834842106,2.0253755300794944e-08,1.1139168040879032e-07
56,0.00011884484242431182,2.0024527468430072e-08,1.0897675288127846e-07
57,0.00011678298769107047,1.9797656169961167e-08,1.0661409941810817e-07
58,0.0001147590394591346,1.9573107382367898e-08,1.0430256532408603e-07
59,0.00011277225867179729,1.935084744632288e-08,1.0204102225018314e-07
60,0.00011082192110664448,1.913084301808743e-08,9.982836715827351e-08
61,0.00010890831555726861,1.8913080844667903e-08,9.76644171489201e-08
62,0.00010703069380321927,1.8697527263494167e-08,9.554805889434612e-08
63,0.00010518832400867466,1.8484148971365717e-08,9.347820572370307e-08
64,0.00010353027948847247,1.8300360477604286e-08,9.158630538270034e-08
65,0.00010190114820620951,1.8118339508838893e-08,8.97332684173061e-08
66,0.00010030037817345079,1.7938063167097722e-08,8.791826040657302e-08
67,9.872746699919663e-05,1.775950920143011e-08,8.614049912759125e-08
68,9.718188342878233e-05,1.7582655209782296e-08,8.439918541238176e-08
69,9.566310719955732e-05,1.740747903977101e-08,8.269353818341506e-08
70,9.417062845393912e-05,1.7233958752991638e-08,8.102279372648069e-08
71,9.27044102709892e-05,1.7062082036004708e-08,7.938660156523957e-08
72,9.12639411274833e-05,1.6891826998956218e-08,7.778420731697601e-08
73,8.984872036936478e-05,1.6723171993235663e-08,7.621487408851861e-08
74,8.845926525396718e-05,1.6557077218868872e-08,7.467873241780861e-08
75,8.709405706837696e-05,1.6392620086127443e-08,7.352620174175576e-08
76,8.575262707251024e-05,1.6229781230847938e-08,7.239374499535451e-08
77,8.44345490553445e-05,1.6068541919248203e-08,7.128100236441453e-08
78,8.313937224726923e-05,1.5908883354530017e-08,7.018759330199112e-08
79,8.18666553697718e-05,1.5750787028460176e-08,6.91131452736768e-08
80,8.061596620368467e-05,1.5594234699428168e-08,6.80572933931087e-08
81,7.93869860927298e-05,1.54392105845737e-08,6.701976864553917e-08
82,7.81792957880057e-05,1.528569691328632e-08,6.600021709431229e-08
83,7.69924848842345e-05,1.5133676199095668e-08,6.499829226870119e-08
84,7.592423495462984e-05,1.5006007729453082e-08,6.40964585216171e-08
85,7.487323130273564e-05,1.4879695488874347e-08,6.320918435915818e-08
86,7.383915942693816e-05,1.475473179887786e-08,6.233620427401105e-08
87,7.282024738915393e-05,1.4631093950979863e-08,6.147602236758762e-08
88,7.181625694043332e-05,1.4508775744557438e-08,6.062843750629826e-08
89,7.082695384072487e-05,1.4387771381868581e-08,5.979325194092954e-08
90,6.985210770121701e-05,1.4268075471622408e-08,5.8970271173546604e-08
91,6.889061932028676e-05,1.414966436041678e-08,5.8158567240485706e-08
92,6.79423037538828e-05,1.4032534237451406e-08,5.7357984009008465e-08
93,6.700697867481953e-05,1.3916681725635683e-08,5.656836755557654e-08
94,6.594003301527265e-05,1.3765768410137306e-08,5.5667634894222326e-08
95,6.489000516837228e-05,1.3616343300622314e-08,5.4781184522010985e-08
,Unnamed: 0,signal,ase,nli
0,0,0.00028461768874888705,3.436639817118301e-08,2.1584395398371026e-07
1,1,0.00028211666293476406,3.423996759499589e-08,2.1809245861954257e-07
2,2,0.0002796385058453953,3.411427963331182e-08,2.2028548201656645e-07
3,3,0.0002771829951915728,3.398932824433299e-08,2.224238538437057e-07
4,4,0.00027338904730863836,3.371109366484941e-08,2.2339638015421542e-07
5,5,0.0002696478418176822,3.3435235312069656e-08,2.2430128879557504e-07
6,6,0.00026595862771951147,3.316172589770091e-08,2.2514026889123164e-07
7,7,0.0002623182345801782,3.289051654795761e-08,2.2591288176837496e-07
8,8,0.00025872603823298804,3.262158136113203e-08,2.2662073272007013e-07
9,9,0.0002548422077504841,3.231480491053109e-08,2.269632917207947e-07
10,10,0.0002510150800727548,3.201089350512762e-08,2.2724305184561305e-07
11,11,0.0002472372108596339,3.1709697987730424e-08,2.274556638142854e-07
12,12,0.0002435081184388883,3.1411188710954923e-08,2.2760284870806473e-07
13,13,0.0002398273228957255,3.1115336193393125e-08,2.2768630096746835e-07
14,14,0.00023610099948769217,3.081056270085416e-08,2.27617695956038e-07
15,15,0.00023242489102440902,3.050859262250336e-08,2.274887362838919e-07
16,16,0.00022879847092097078,3.020939430576677e-08,2.273011122655665e-07
17,17,0.00022522143236587835,2.991293825364657e-08,2.27056704831033e-07
18,18,0.00022169324298613107,2.9619193056612953e-08,2.2315585168570266e-07
19,19,0.0002178178461312317,2.9278097616561043e-08,2.189169855906453e-07
20,20,0.0002140033759047069,2.8940600865395135e-08,2.1475128288390263e-07
21,21,0.00021024912752446947,2.8606658136588645e-08,2.1065775386659407e-07
22,22,0.000206554289175574,2.827622313698371e-08,2.0663530613832196e-07
23,23,0.00020291805701626135,2.7949249962519028e-08,2.0268286030011824e-07
24,24,0.00019961589106178864,2.765975998385304e-08,1.9907485701921993e-07
25,25,0.00019636137150032674,2.7373095433009936e-08,1.9552454239910457e-07
26,26,0.0001931539326017224,2.7089223372231097e-08,1.9203113225618846e-07
27,27,0.00018999370973089413,2.68081175642488e-08,1.885945418493717e-07
28,28,0.00018688010986276862,2.6529745205109403e-08,1.8521396370161997e-07
29,29,0.00018381254538966195,2.6254073731438793e-08,1.818885993764317e-07
30,30,0.00018079043504395085,2.5981070886269e-08,1.78617660347401e-07
31,31,0.00017781329518445636,2.5710706310905614e-08,1.7540045799671345e-07
32,32,0.00017488055045064023,2.544294811944895e-08,1.7223621637516225e-07
33,33,0.00017199163096488036,2.5177764647772334e-08,1.691241684952796e-07
34,34,0.00016923198600435235,2.4926164244345613e-08,1.6614800249846462e-07
35,35,0.00016651223518287261,2.4676978561810828e-08,1.632195038378843e-07
36,36,0.00016383188581753214,2.443018036493577e-08,1.6033800467387247e-07
37,37,0.0001611915388800597,2.418575294396746e-08,1.5725354810318075e-07
38,38,0.0001585906555197023,2.394366896238391e-08,1.5422386234766858e-07
39,39,0.00015602870309712287,2.3703901303924173e-08,1.5124806354481474e-07
40,40,0.0001535051551031788,2.3466423066629146e-08,1.4832528036973196e-07
41,41,0.0001510212597387019,2.3231240549132765e-08,1.4545635735033158e-07
42,42,0.00014857641307701306,2.2998325757462813e-08,1.4264034538487909e-07
43,43,0.00014617002011358969,2.276765094680208e-08,1.3987631140917146e-07
44,44,0.00014368188097051016,2.252080862505795e-08,1.3704924606778587e-07
45,45,0.00014123500136325632,2.227648394665253e-08,1.342768563640109e-07
46,46,0.00013882871459443323,2.2034644371118186e-08,1.31558126246417e-07
47,47,0.00013646341840215168,2.1795267893415555e-08,1.2889305332810146e-07
48,48,0.00013413841082142,2.155832207437193e-08,1.2628059500046815e-07
49,49,0.00013185300210097483,2.132377480769977e-08,1.2371972883222934e-07
50,50,0.00012960651423053282,2.1091594291962705e-08,1.2120945193769904e-07
51,51,0.00012739961074346843,2.0861774576065466e-08,1.1875002031242091e-07
52,52,0.00012523156633255863,2.0634283235397628e-08,1.1634039147633555e-07
53,53,0.00012310166960708747,2.0409088189365173e-08,1.1397954484148417e-07
54,54,0.00012096529298347188,2.0178855168888422e-08,1.1162594309222065e-07
55,55,0.00011886718830718708,1.9950983760858723e-08,1.093208043434055e-07
56,56,0.00011680664424128133,1.9725440474060072e-08,1.0695583879566178e-07
57,57,0.00011478396058700633,1.950220202088885e-08,1.0464196732373097e-07
58,58,0.00011279839933843229,1.9281235055452333e-08,1.0237806316789167e-07
59,59,0.00011084923776207272,1.906250658388995e-08,1.0016302524437989e-07
60,60,0.00010893576763351642,1.884598391874928e-08,9.79957771514819e-08
61,61,0.00010705827573621923,1.8631654017664683e-08,9.587614496435341e-08
62,62,0.00010521603014069265,1.8419483867548078e-08,9.380304193213288e-08
63,63,0.00010340831493293095,1.8209440802910146e-08,9.1775407295826e-08
64,64,0.00010178667717264663,1.8029552937387797e-08,8.992671343771878e-08
65,65,0.00010019319833745167,1.7851381317094802e-08,8.811583172055121e-08
66,66,9.86273426809622e-05,1.767490377589294e-08,8.634195328719705e-08
67,67,9.70886230248071e-05,1.7500098774413897e-08,8.460432022445385e-08
68,68,9.557652367577673e-05,1.7326944621204857e-08,8.290215772518696e-08
69,69,9.409053958216297e-05,1.7155419863785074e-08,8.123470846820667e-08
70,70,9.263017577528553e-05,1.698550325493719e-08,7.960123192429599e-08
71,71,9.119540203213482e-05,1.681718296074974e-08,7.800139303615196e-08
72,72,8.978572151582878e-05,1.6650437769918198e-08,7.643446000507212e-08
73,73,8.840064792008674e-05,1.648524670194174e-08,7.489971794966337e-08
74,74,8.704752218385389e-05,1.6323921332107853e-08,7.340306015991841e-08
75,75,8.571782151670807e-05,1.616417166590195e-08,7.228178645083984e-08
76,76,8.441109599127084e-05,1.6005979385519616e-08,7.117988659258102e-08
77,77,8.312693723019766e-05,1.584932678267078e-08,7.009701621983393e-08
78,78,8.186491243372442e-05,1.569419608150936e-08,6.90328103730187e-08
79,79,8.062459786565112e-05,1.554056978222129e-08,6.798691173543069e-08
80,80,7.94055784447779e-05,1.538843064058219e-08,6.695897028871753e-08
81,81,7.820755061857071e-05,1.523776381588298e-08,6.594873006137818e-08
82,82,7.703011159024537e-05,1.5088552513719166e-08,6.495585139392737e-08
83,83,7.587286701386211e-05,1.494078021244127e-08,6.398000175307732e-08
84,84,7.483848702669918e-05,1.481852757489104e-08,6.310775801171533e-08
85,85,7.382059659354297e-05,1.4697575551136038e-08,6.224941913167962e-08
86,86,7.281889798107282e-05,1.4577917663325962e-08,6.140473404853674e-08
87,87,7.183165666349203e-05,1.4459532716368791e-08,6.057224011868445e-08
88,88,7.08586484091438e-05,1.4342415672865158e-08,5.975174825816752e-08
89,89,6.989965271824705e-05,1.422656189652791e-08,5.8943072529944956e-08
90,90,6.895445267562359e-05,1.411196715686287e-08,5.814603001970201e-08
91,91,6.802197391413278e-05,1.3998609279853771e-08,5.735971476442124e-08
92,92,6.710204336793658e-05,1.3886485591019257e-08,5.6583980825863337e-08
93,93,6.619449037899918e-05,1.3775593851234834e-08,5.581868429617485e-08
94,94,6.515268324911003e-05,1.3628882565600955e-08,5.494017759648076e-08
95,95,6.412720169535454e-05,1.3483606920728348e-08,5.407543748332493e-08
1 Unnamed: 0 signal ase nli
2 0 0 0.0002866683470642085 0.00028461768874888705 3.455694800734997e-08 3.436639817118301e-08 2.1767706055953313e-07 2.1584395398371026e-07
3 1 1 0.0002842930902246378 0.00028211666293476406 3.4445260342151434e-08 3.423996759499589e-08 2.20064716108892e-07 2.1809245861954257e-07
4 2 2 0.00028193841273409963 0.0002796385058453953 3.4334217950641774e-08 3.411427963331182e-08 2.2239856929822977e-07 2.2028548201656645e-07
5 3 3 0.0002796041237984927 0.0002771829951915728 3.422381587730477e-08 3.398932824433299e-08 2.2467937700272344e-07 2.224238538437057e-07
6 4 4 0.00027589218358262 0.00027338904730863836 3.3956266402003705e-08 3.371109366484941e-08 2.2576401766047814e-07 2.2339638015421542e-07
7 5 5 0.0002722303444814487 0.0002696478418176822 3.3690926476196685e-08 3.3435235312069656e-08 2.2678094635121413e-07 2.2430128879557504e-07
8 6 6 0.00026861791294303266 0.00026595862771951147 3.342777134334201e-08 3.316172589770091e-08 2.2773179097640802e-07 2.2514026889123164e-07
9 7 7 0.00026505174756069215 0.0002623182345801782 3.316675429137828e-08 3.289051654795761e-08 2.2861602718115889e-07 2.2591288176837496e-07
10 8 8 0.0002615312775878486 0.00025872603823298804 3.290785186664305e-08 3.262158136113203e-08 2.294352005376256e-07 2.2662073272007013e-07
11 9 9 0.0002577007690018081 0.0002548422077504841 3.26092154155734e-08 3.231480491053109e-08 2.2987401053105823e-07 2.269632917207947e-07
12 10 10 0.00025392474812815994 0.0002510150800727548 3.231329178154223e-08 3.201089350512762e-08 2.3024928325076607e-07 2.2724305184561305e-07
13 11 11 0.0002501957390130402 0.0002472372108596339 3.201993265117851e-08 3.1709697987730424e-08 2.3055653947072044e-07 2.274556638142854e-07
14 12 12 0.0002465133077961936 0.0002435081184388883 3.172911082648897e-08 3.1411188710954923e-08 2.3079745224174315e-07 2.2760284870806473e-07
15 13 13 0.00024287702172285261 0.0002398273228957255 3.144079924487205e-08 3.1115336193393125e-08 2.309736700807475e-07 2.2768630096746835e-07
16 14 14 0.00023918644496802598 0.00023610099948769217 3.1142660565561954e-08 3.081056270085416e-08 2.3099023972100006e-07 2.27617695956038e-07
17 15 15 0.00023554415781363666 0.00023242489102440902 3.084719002003063e-08 3.050859262250336e-08 2.3094533745656626e-07 2.274887362838919e-07
18 16 16 0.0002319496781605366 0.00022879847092097078 3.0554358283826426e-08 3.020939430576677e-08 2.3084061926161906e-07 2.273011122655665e-07
19 17 17 0.000228402746264896 0.00022522143236587835 3.026413819712743e-08 2.991293825364657e-08 2.306779372506828e-07 2.27056704831033e-07
20 18 18 0.00022490287297566154 0.00022169324298613107 2.997650061885732e-08 2.9619193056612953e-08 2.2679314039447925e-07 2.2315585168570266e-07
21 19 19 0.0002210339853226993 0.0002178178461312317 2.9639081336421986e-08 2.9278097616561043e-08 2.225476971173533e-07 2.189169855906453e-07
22 20 20 0.00021722472675673681 0.0002140033759047069 2.9305156366940595e-08 2.8940600865395135e-08 2.1837424228396343e-07 2.1475128288390263e-07
23 21 21 0.00021347443350916938 0.00021024912752446947 2.8974683300060073e-08 2.8606658136588645e-08 2.1427183120915025e-07 2.1065775386659407e-07
24 22 22 0.00020978233224910872 0.000206554289175574 2.864761802749998e-08 2.827622313698371e-08 2.1023941353936252e-07 2.0663530613832196e-07
25 23 23 0.0002061476568412488 0.00020291805701626135 2.832391679540816e-08 2.7949249962519028e-08 2.0627595093585302e-07 2.0268286030011824e-07
26 24 24 0.0002028237056285935 0.00019961589106178864 2.8034565895618217e-08 2.765975998385304e-08 2.0263423697267893e-07 1.9907485701921993e-07
27 25 25 0.00019954715529254185 0.00019636137150032674 2.7748013284124615e-08 2.7373095433009936e-08 1.9905015325521452e-07 1.9552454239910457e-07
28 26 26 0.0001963174528000437 0.0001931539326017224 2.7464226779716075e-08 2.7089223372231097e-08 1.9552292765090665e-07 1.9203113225618846e-07
29 27 27 0.00019313475803109547 0.00018999370973089413 2.718318103861899e-08 2.68081175642488e-08 1.920525003885138e-07 1.885945418493717e-07
30 28 28 0.00018999848980183525 0.00018688010986276862 2.6904843987797665e-08 2.6529745205109403e-08 1.8863807494364378e-07 1.8521396370161997e-07
31 29 29 0.00018690807208013476 0.00018381254538966195 2.6629183784477213e-08 2.6254073731438793e-08 1.852788635171717e-07 1.818885993764317e-07
32 30 30 0.00018386293497138034 0.00018079043504395085 2.635616888672288e-08 2.5981070886269e-08 1.8197408797080072e-07 1.78617660347401e-07
33 31 31 0.0001808626075954048 0.00017781329518445636 2.608576967648626e-08 2.5710706310905614e-08 1.7872307155753016e-07 1.7540045799671345e-07
34 32 32 0.00017790652540681915 0.00017488055045064023 2.5817954962418864e-08 2.544294811944895e-08 1.7552504805064169e-07 1.7223621637516225e-07
35 33 33 0.00017499412908771533 0.00017199163096488036 2.5552693765056307e-08 2.5177764647772334e-08 1.723792598876346e-07 1.691241684952796e-07
36 34 34 0.0001721914205512116 0.00016923198600435235 2.529821177538242e-08 2.4926164244345613e-08 1.69350416018518e-07 1.6614800249846462e-07
37 35 35 0.00016942913344260413 0.00016651223518287261 2.5046172734840803e-08 2.4676978561810828e-08 1.663699885487624e-07 1.632195038378843e-07
38 36 36 0.0001667067703020692 0.00016383188581753214 2.4796549229968703e-08 2.443018036493577e-08 1.6343730102750106e-07 1.6033800467387247e-07
39 37 37 0.00016402494737034808 0.0001611915388800597 2.4549324625938814e-08 2.418575294396746e-08 1.602954566731582e-07 1.5725354810318075e-07
40 38 38 0.0001613831201060569 0.0001585906555197023 2.430447139995257e-08 2.394366896238391e-08 1.5720933628441338e-07 1.5422386234766858e-07
41 39 39 0.00015878075021906192 0.00015602870309712287 2.406196225171638e-08 2.3703901303924173e-08 1.541780421866172e-07 1.5124806354481474e-07
42 40 40 0.00015621730558753943 0.0001535051551031788 2.3821770097360405e-08 2.3466423066629146e-08 1.5120068940449393e-07 1.4832528036973196e-07
43 41 41 0.000153694061439545 0.0001510212597387019 2.3583901792213434e-08 2.3231240549132765e-08 1.4827814327673852e-07 1.4545635735033158e-07
44 42 42 0.00015121040694331307 0.00014857641307701306 2.3348329147104765e-08 2.2998325757462813e-08 1.4540943949658482e-07 1.4264034538487909e-07
45 43 43 0.00014876574026315321 0.00014617002011358969 2.3115024224465226e-08 2.276765094680208e-08 1.425936300160931e-07 1.3987631140917146e-07
46 44 44 0.00014623043935025647 0.00014368188097051016 2.2864250993313975e-08 2.252080862505795e-08 1.397065102093322e-07 1.3704924606778587e-07
47 45 45 0.00014373723010448477 0.00014123500136325632 2.2616046400344574e-08 2.227648394665253e-08 1.3687531950007013e-07 1.342768563640109e-07
48 46 46 0.0001412854316913198 0.00013882871459443323 2.2370377299191064e-08 2.2034644371118186e-08 1.3409901704421416e-07 1.31558126246417e-07
49 47 47 0.00013887544742801196 0.00013646341840215168 2.2127221340618422e-08 2.1795267893415555e-08 1.313775961274423e-07 1.2889305332810146e-07
50 48 48 0.0001365065605420479 0.00013413841082142 2.1886545482453933e-08 2.155832207437193e-08 1.2870998887773554e-07 1.2628059500046815e-07
51 49 49 0.00013417806673897108 0.00013185300210097483 2.164831702445933e-08 2.132377480769977e-08 1.2609514810979993e-07 1.2371972883222934e-07
52 50 50 0.00013188927370907155 0.00012960651423053282 2.1412503578881085e-08 2.1091594291962705e-08 1.2353204666803017e-07 1.2120945193769904e-07
53 51 51 0.00012964085531237725 0.00012739961074346843 2.117909919147538e-08 2.0861774576065466e-08 1.2102094138348867e-07 1.1875002031242091e-07
54 52 52 0.00012743207116500861 0.00012523156633255863 2.094807084934547e-08 2.0634283235397628e-08 1.1856076487337955e-07 1.1634039147633555e-07
55 53 53 0.0001252621950917354 0.00012310166960708747 2.0719385892834214e-08 2.0409088189365173e-08 1.161504721855161e-07 1.1397954484148417e-07
56 54 54 0.00012308423338164536 0.00012096529298347188 2.0485363383535514e-08 2.0178855168888422e-08 1.1374627006340893e-07 1.1162594309222065e-07
57 55 55 0.00012094535834842106 0.00011886718830718708 2.0253755300794944e-08 1.9950983760858723e-08 1.1139168040879032e-07 1.093208043434055e-07
58 56 56 0.00011884484242431182 0.00011680664424128133 2.0024527468430072e-08 1.9725440474060072e-08 1.0897675288127846e-07 1.0695583879566178e-07
59 57 57 0.00011678298769107047 0.00011478396058700633 1.9797656169961167e-08 1.950220202088885e-08 1.0661409941810817e-07 1.0464196732373097e-07
60 58 58 0.0001147590394591346 0.00011279839933843229 1.9573107382367898e-08 1.9281235055452333e-08 1.0430256532408603e-07 1.0237806316789167e-07
61 59 59 0.00011277225867179729 0.00011084923776207272 1.935084744632288e-08 1.906250658388995e-08 1.0204102225018314e-07 1.0016302524437989e-07
62 60 60 0.00011082192110664448 0.00010893576763351642 1.913084301808743e-08 1.884598391874928e-08 9.982836715827351e-08 9.79957771514819e-08
63 61 61 0.00010890831555726861 0.00010705827573621923 1.8913080844667903e-08 1.8631654017664683e-08 9.76644171489201e-08 9.587614496435341e-08
64 62 62 0.00010703069380321927 0.00010521603014069265 1.8697527263494167e-08 1.8419483867548078e-08 9.554805889434612e-08 9.380304193213288e-08
65 63 63 0.00010518832400867466 0.00010340831493293095 1.8484148971365717e-08 1.8209440802910146e-08 9.347820572370307e-08 9.1775407295826e-08
66 64 64 0.00010353027948847247 0.00010178667717264663 1.8300360477604286e-08 1.8029552937387797e-08 9.158630538270034e-08 8.992671343771878e-08
67 65 65 0.00010190114820620951 0.00010019319833745167 1.8118339508838893e-08 1.7851381317094802e-08 8.97332684173061e-08 8.811583172055121e-08
68 66 66 0.00010030037817345079 9.86273426809622e-05 1.7938063167097722e-08 1.767490377589294e-08 8.791826040657302e-08 8.634195328719705e-08
69 67 67 9.872746699919663e-05 9.70886230248071e-05 1.775950920143011e-08 1.7500098774413897e-08 8.614049912759125e-08 8.460432022445385e-08
70 68 68 9.718188342878233e-05 9.557652367577673e-05 1.7582655209782296e-08 1.7326944621204857e-08 8.439918541238176e-08 8.290215772518696e-08
71 69 69 9.566310719955732e-05 9.409053958216297e-05 1.740747903977101e-08 1.7155419863785074e-08 8.269353818341506e-08 8.123470846820667e-08
72 70 70 9.417062845393912e-05 9.263017577528553e-05 1.7233958752991638e-08 1.698550325493719e-08 8.102279372648069e-08 7.960123192429599e-08
73 71 71 9.27044102709892e-05 9.119540203213482e-05 1.7062082036004708e-08 1.681718296074974e-08 7.938660156523957e-08 7.800139303615196e-08
74 72 72 9.12639411274833e-05 8.978572151582878e-05 1.6891826998956218e-08 1.6650437769918198e-08 7.778420731697601e-08 7.643446000507212e-08
75 73 73 8.984872036936478e-05 8.840064792008674e-05 1.6723171993235663e-08 1.648524670194174e-08 7.621487408851861e-08 7.489971794966337e-08
76 74 74 8.845926525396718e-05 8.704752218385389e-05 1.6557077218868872e-08 1.6323921332107853e-08 7.467873241780861e-08 7.340306015991841e-08
77 75 75 8.709405706837696e-05 8.571782151670807e-05 1.6392620086127443e-08 1.616417166590195e-08 7.352620174175576e-08 7.228178645083984e-08
78 76 76 8.575262707251024e-05 8.441109599127084e-05 1.6229781230847938e-08 1.6005979385519616e-08 7.239374499535451e-08 7.117988659258102e-08
79 77 77 8.44345490553445e-05 8.312693723019766e-05 1.6068541919248203e-08 1.584932678267078e-08 7.128100236441453e-08 7.009701621983393e-08
80 78 78 8.313937224726923e-05 8.186491243372442e-05 1.5908883354530017e-08 1.569419608150936e-08 7.018759330199112e-08 6.90328103730187e-08
81 79 79 8.18666553697718e-05 8.062459786565112e-05 1.5750787028460176e-08 1.554056978222129e-08 6.91131452736768e-08 6.798691173543069e-08
82 80 80 8.061596620368467e-05 7.94055784447779e-05 1.5594234699428168e-08 1.538843064058219e-08 6.80572933931087e-08 6.695897028871753e-08
83 81 81 7.93869860927298e-05 7.820755061857071e-05 1.54392105845737e-08 1.523776381588298e-08 6.701976864553917e-08 6.594873006137818e-08
84 82 82 7.81792957880057e-05 7.703011159024537e-05 1.528569691328632e-08 1.5088552513719166e-08 6.600021709431229e-08 6.495585139392737e-08
85 83 83 7.69924848842345e-05 7.587286701386211e-05 1.5133676199095668e-08 1.494078021244127e-08 6.499829226870119e-08 6.398000175307732e-08
86 84 84 7.592423495462984e-05 7.483848702669918e-05 1.5006007729453082e-08 1.481852757489104e-08 6.40964585216171e-08 6.310775801171533e-08
87 85 85 7.487323130273564e-05 7.382059659354297e-05 1.4879695488874347e-08 1.4697575551136038e-08 6.320918435915818e-08 6.224941913167962e-08
88 86 86 7.383915942693816e-05 7.281889798107282e-05 1.475473179887786e-08 1.4577917663325962e-08 6.233620427401105e-08 6.140473404853674e-08
89 87 87 7.282024738915393e-05 7.183165666349203e-05 1.4631093950979863e-08 1.4459532716368791e-08 6.147602236758762e-08 6.057224011868445e-08
90 88 88 7.181625694043332e-05 7.08586484091438e-05 1.4508775744557438e-08 1.4342415672865158e-08 6.062843750629826e-08 5.975174825816752e-08
91 89 89 7.082695384072487e-05 6.989965271824705e-05 1.4387771381868581e-08 1.422656189652791e-08 5.979325194092954e-08 5.8943072529944956e-08
92 90 90 6.985210770121701e-05 6.895445267562359e-05 1.4268075471622408e-08 1.411196715686287e-08 5.8970271173546604e-08 5.814603001970201e-08
93 91 91 6.889061932028676e-05 6.802197391413278e-05 1.414966436041678e-08 1.3998609279853771e-08 5.8158567240485706e-08 5.735971476442124e-08
94 92 92 6.79423037538828e-05 6.710204336793658e-05 1.4032534237451406e-08 1.3886485591019257e-08 5.7357984009008465e-08 5.6583980825863337e-08
95 93 93 6.700697867481953e-05 6.619449037899918e-05 1.3916681725635683e-08 1.3775593851234834e-08 5.656836755557654e-08 5.581868429617485e-08
96 94 94 6.594003301527265e-05 6.515268324911003e-05 1.3765768410137306e-08 1.3628882565600955e-08 5.5667634894222326e-08 5.494017759648076e-08
97 95 95 6.489000516837228e-05 6.412720169535454e-05 1.3616343300622314e-08 1.3483606920728348e-08 5.4781184522010985e-08 5.407543748332493e-08

View File

@@ -16,8 +16,9 @@ Transceiver trx_Stockholm
PMD (ps): 0.00
PDL (dB): 0.00
Roadm roadm_Stockholm
effective loss (dB): 22.00
pch out (dBm): -20.00
effective loss (dB): 22.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)
type_variety: openroadm_mw_mw_booster
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
target pch (dBm): 2.00
effective pch (dBm): 2.00
actual pch out (dBm): 2.00
output VOA (dB): 0.00
Fiber fiber (Stockholm → Norrköping)_(1/2)
type_variety: SSMF
@@ -38,7 +40,8 @@ Fiber fiber (Stockholm → Norrköping)_(1/2)
total loss (dB): 16.33
(includes conn loss (dB) in: 0.00 out: 0.00)
(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)
type_variety: openroadm_ila_low_noise
effective gain(dB): 16.33
@@ -51,6 +54,7 @@ Edfa Edfa_fiber (Stockholm → Norrköping)_(1/2)
Delta_P (dB): 0.00
target pch (dBm): 2.00
effective pch (dBm): 2.00
actual pch out (dBm): 2.02
output VOA (dB): 0.00
Fiber fiber (Stockholm → Norrköping)_(2/2)
type_variety: SSMF
@@ -59,7 +63,8 @@ Fiber fiber (Stockholm → Norrköping)_(2/2)
total loss (dB): 16.33
(includes conn loss (dB) in: 0.00 out: 0.00)
(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)
type_variety: openroadm_mw_mw_preamp
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
target pch (dBm): 2.00
effective pch (dBm): 2.00
actual pch out (dBm): 2.04
output VOA (dB): 0.00
Roadm roadm_Norrköping
effective loss (dB): 22.00
pch out (dBm): -20.00
effective loss (dB): 22.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)
type_variety: openroadm_mw_mw_booster
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
target pch (dBm): 2.00
effective pch (dBm): 2.00
actual pch out (dBm): 2.00
output VOA (dB): 0.00
Fiber fiber (Norrköping → Linköping)
type_variety: SSMF
@@ -96,7 +104,8 @@ Fiber fiber (Norrköping → Linköping)
total loss (dB): 11.00
(includes conn loss (dB) in: 0.00 out: 0.00)
(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)
type_variety: openroadm_mw_mw_preamp
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
target pch (dBm): 2.00
effective pch (dBm): 2.00
actual pch out (dBm): 2.01
output VOA (dB): 0.00
Roadm roadm_Linköping
effective loss (dB): 22.00
pch out (dBm): -20.00
effective loss (dB): 22.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)
type_variety: openroadm_mw_mw_booster
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
target pch (dBm): 2.00
effective pch (dBm): 2.00
actual pch out (dBm): 2.00
output VOA (dB): 0.00
Fiber fiber (Linköping → Jönköping)
type_variety: SSMF
@@ -133,7 +145,8 @@ Fiber fiber (Linköping → Jönköping)
total loss (dB): 26.80
(includes conn loss (dB) in: 0.00 out: 0.00)
(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)
type_variety: openroadm_mw_mw_preamp
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
target pch (dBm): 2.00
effective pch (dBm): 2.00
actual pch out (dBm): 2.04
output VOA (dB): 0.00
Roadm roadm_Jönköping
effective loss (dB): 22.00
pch out (dBm): -20.00
effective loss (dB): 22.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)
type_variety: openroadm_mw_mw_booster
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
target pch (dBm): 2.00
effective pch (dBm): 2.00
actual pch out (dBm): 2.00
output VOA (dB): 0.00
Fiber fiber (Jönköping → Borås)
type_variety: SSMF
@@ -170,7 +186,8 @@ Fiber fiber (Jönköping → Borås)
total loss (dB): 17.82
(includes conn loss (dB) in: 0.00 out: 0.00)
(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)
type_variety: openroadm_mw_mw_preamp
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
target pch (dBm): 2.00
effective pch (dBm): 2.00
actual pch out (dBm): 2.02
output VOA (dB): 0.00
Roadm roadm_Borås
effective loss (dB): 22.00
pch out (dBm): -20.00
effective loss (dB): 22.00
reference pch out (dBm): -20.00
actual pch out (dBm): -20.00
Edfa Edfa_booster_roadm_Borås_to_fiber (Borås → Gothenburg)
type_variety: openroadm_mw_mw_booster
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
target pch (dBm): 2.00
effective pch (dBm): 2.00
actual pch out (dBm): 2.00
output VOA (dB): 0.00
Fiber fiber (Borås → Gothenburg)
type_variety: SSMF
@@ -207,7 +227,8 @@ Fiber fiber (Borås → Gothenburg)
total loss (dB): 13.53
(includes conn loss (dB) in: 0.00 out: 0.00)
(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)
type_variety: openroadm_mw_mw_preamp
effective gain(dB): 13.53
@@ -220,10 +241,12 @@ Edfa Edfa_preamp_roadm_Gothenburg_from_fiber (Borås → Gothenburg)
Delta_P (dB): 0.00
target pch (dBm): 2.00
effective pch (dBm): 2.00
actual pch out (dBm): 2.02
output VOA (dB): 0.00
Roadm roadm_Gothenburg
effective loss (dB): 22.00
pch out (dBm): -20.00
effective loss (dB): 22.00
reference pch out (dBm): -20.00
actual pch out (dBm): -20.00
Transceiver trx_Gothenburg
GSNR (0.1nm, dB): 18.90
GSNR (signal bw, dB): 14.88

View File

@@ -16,8 +16,9 @@ Transceiver trx_Stockholm
PMD (ps): 0.00
PDL (dB): 0.00
Roadm roadm_Stockholm
effective loss (dB): 22.00
pch out (dBm): -20.00
effective loss (dB): 22.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)
type_variety: openroadm_mw_mw_booster
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
target pch (dBm): 2.00
effective pch (dBm): 2.00
actual pch out (dBm): 2.00
output VOA (dB): 0.00
Fiber fiber (Stockholm → Norrköping)_(1/2)
type_variety: SSMF
@@ -38,7 +40,8 @@ Fiber fiber (Stockholm → Norrköping)_(1/2)
total loss (dB): 16.33
(includes conn loss (dB) in: 0.00 out: 0.00)
(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)
type_variety: openroadm_ila_low_noise
effective gain(dB): 16.33
@@ -51,6 +54,7 @@ Edfa Edfa_fiber (Stockholm → Norrköping)_(1/2)
Delta_P (dB): 0.00
target pch (dBm): 2.00
effective pch (dBm): 2.00
actual pch out (dBm): 2.02
output VOA (dB): 0.00
Fiber fiber (Stockholm → Norrköping)_(2/2)
type_variety: SSMF
@@ -59,7 +63,8 @@ Fiber fiber (Stockholm → Norrköping)_(2/2)
total loss (dB): 16.33
(includes conn loss (dB) in: 0.00 out: 0.00)
(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)
type_variety: openroadm_mw_mw_preamp_worstcase_ver5
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
target pch (dBm): 2.00
effective pch (dBm): 2.00
actual pch out (dBm): 2.04
output VOA (dB): 0.00
Roadm roadm_Norrköping
effective loss (dB): 22.00
pch out (dBm): -20.00
effective loss (dB): 22.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)
type_variety: openroadm_mw_mw_booster
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
target pch (dBm): 2.00
effective pch (dBm): 2.00
actual pch out (dBm): 2.00
output VOA (dB): 0.00
Fiber fiber (Norrköping → Linköping)
type_variety: SSMF
@@ -96,7 +104,8 @@ Fiber fiber (Norrköping → Linköping)
total loss (dB): 11.00
(includes conn loss (dB) in: 0.00 out: 0.00)
(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)
type_variety: openroadm_mw_mw_preamp_worstcase_ver5
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
target pch (dBm): 2.00
effective pch (dBm): 2.00
actual pch out (dBm): 2.01
output VOA (dB): 0.00
Roadm roadm_Linköping
effective loss (dB): 22.00
pch out (dBm): -20.00
effective loss (dB): 22.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)
type_variety: openroadm_mw_mw_booster
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
target pch (dBm): 2.00
effective pch (dBm): 2.00
actual pch out (dBm): 2.00
output VOA (dB): 0.00
Fiber fiber (Linköping → Jönköping)
type_variety: SSMF
@@ -133,7 +145,8 @@ Fiber fiber (Linköping → Jönköping)
total loss (dB): 26.80
(includes conn loss (dB) in: 0.00 out: 0.00)
(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)
type_variety: openroadm_mw_mw_preamp_worstcase_ver5
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
target pch (dBm): 2.00
effective pch (dBm): 2.00
actual pch out (dBm): 2.04
output VOA (dB): 0.00
Roadm roadm_Jönköping
effective loss (dB): 22.00
pch out (dBm): -20.00
effective loss (dB): 22.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)
type_variety: openroadm_mw_mw_booster
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
target pch (dBm): 2.00
effective pch (dBm): 2.00
actual pch out (dBm): 2.00
output VOA (dB): 0.00
Fiber fiber (Jönköping → Borås)
type_variety: SSMF
@@ -170,7 +186,8 @@ Fiber fiber (Jönköping → Borås)
total loss (dB): 17.82
(includes conn loss (dB) in: 0.00 out: 0.00)
(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)
type_variety: openroadm_mw_mw_preamp_worstcase_ver5
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
target pch (dBm): 2.00
effective pch (dBm): 2.00
actual pch out (dBm): 2.01
output VOA (dB): 0.00
Roadm roadm_Borås
effective loss (dB): 22.00
pch out (dBm): -20.00
effective loss (dB): 22.00
reference pch out (dBm): -20.00
actual pch out (dBm): -20.00
Edfa Edfa_booster_roadm_Borås_to_fiber (Borås → Gothenburg)
type_variety: openroadm_mw_mw_booster
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
target pch (dBm): 2.00
effective pch (dBm): 2.00
actual pch out (dBm): 2.00
output VOA (dB): 0.00
Fiber fiber (Borås → Gothenburg)
type_variety: SSMF
@@ -207,7 +227,8 @@ Fiber fiber (Borås → Gothenburg)
total loss (dB): 13.53
(includes conn loss (dB) in: 0.00 out: 0.00)
(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)
type_variety: openroadm_mw_mw_preamp_worstcase_ver5
effective gain(dB): 13.53
@@ -220,10 +241,12 @@ Edfa Edfa_preamp_roadm_Gothenburg_from_fiber (Borås → Gothenburg)
Delta_P (dB): 0.00
target pch (dBm): 2.00
effective pch (dBm): 2.00
actual pch out (dBm): 2.02
output VOA (dB): 0.00
Roadm roadm_Gothenburg
effective loss (dB): 22.00
pch out (dBm): -20.00
effective loss (dB): 22.00
reference pch out (dBm): -20.00
actual pch out (dBm): -20.00
Transceiver trx_Gothenburg
GSNR (0.1nm, dB): 19.27
GSNR (signal bw, dB): 15.24

View File

@@ -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)
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)
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)
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)

View 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 = 0.00 dBm:
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): 23.61 dB
(No source node specified: picked trx Lannion_CAS)
(No destination node specified: picked trx Lorient_KMA)

View 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 = 0.00 dBm:
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): 23.72 dB
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)

View File

@@ -22,7 +22,8 @@ Fiber Span1
total loss (dB): 17.00
(includes conn loss (dB) in: 0.50 out: 0.50)
(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
type_variety: std_low_gain
effective gain(dB): 15.00
@@ -35,6 +36,7 @@ Edfa Edfa1
Delta_P (dB): -2.00
target pch (dBm): -2.00
effective pch (dBm): -2.00
actual pch out (dBm): -1.99
output VOA (dB): 0.00
Transceiver Site_B
GSNR (0.1nm, dB): 31.17

View File

@@ -22,27 +22,29 @@ RamanFiber Span1
total loss (dB): 17.00
(includes conn loss (dB) in: 0.50 out: 0.50)
(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
loss (dB): 0.00
Edfa Edfa1
type_variety: std_low_gain
effective gain(dB): 5.71
effective gain(dB): 5.77
(before att_in and before output VOA)
noise figure (dB): 13.29
noise figure (dB): 13.23
(including att_in)
pad att_in (dB): 2.29
Power In (dBm): 11.11
Power Out (dBm): 16.82
pad att_in (dB): 2.23
Power In (dBm): 11.04
Power Out (dBm): 16.81
Delta_P (dB): -2.00
target pch (dBm): -2.00
effective pch (dBm): -2.00
actual pch out (dBm): -2.26
output VOA (dB): 0.00
Transceiver Site_B
GSNR (0.1nm, dB): 31.44
GSNR (signal bw, dB): 27.36
OSNR ASE (0.1nm, dB): 34.22
OSNR ASE (signal bw, dB): 30.14
OSNR ASE (0.1nm, dB): 34.21
OSNR ASE (signal bw, dB): 30.13
CD (ps/nm): 1336.00
PMD (ps): 0.36
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:
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
2 191.40 0.14 31.59 31.34 28.45
3 191.45 0.11 31.57 31.26 28.40
4 191.50 0.07 31.55 31.17 28.35
5 191.55 0.02 31.52 31.09 28.29
6 191.60 -0.04 31.49 31.02 28.24
7 191.65 -0.10 31.46 30.94 28.18
8 191.70 -0.16 31.43 30.86 28.13
9 191.75 -0.21 31.40 30.79 28.07
10 191.80 -0.28 31.36 30.71 28.02
11 191.85 -0.34 31.33 30.64 27.96
12 191.90 -0.40 31.29 30.57 27.91
13 191.95 -0.47 31.26 30.50 27.85
14 192.00 -0.53 31.22 30.43 27.80
15 192.05 -0.60 31.18 30.36 27.74
16 192.10 -0.66 31.15 30.30 27.69
17 192.15 -0.73 31.11 30.23 27.64
18 192.20 -0.79 31.07 30.16 27.58
19 192.25 -0.86 31.04 30.17 27.57
20 192.30 -0.94 30.99 30.18 27.56
21 192.35 -1.01 30.95 30.19 27.54
22 192.40 -1.08 30.91 30.20 27.53
23 192.45 -1.16 30.86 30.20 27.51
24 192.50 -1.23 30.82 30.21 27.49
25 192.55 -1.30 30.78 30.22 27.48
26 192.60 -1.37 30.74 30.23 27.46
27 192.65 -1.44 30.70 30.23 27.45
28 192.70 -1.51 30.65 30.24 27.43
29 192.75 -1.58 30.61 30.25 27.42
30 192.80 -1.65 30.57 30.26 27.40
31 192.85 -1.72 30.53 30.27 27.38
32 192.90 -1.79 30.48 30.27 27.37
33 192.95 -1.86 30.44 30.28 27.35
34 193.00 -1.93 30.40 30.29 27.33
35 193.05 -2.00 30.35 30.30 27.32
36 193.10 -2.07 30.31 30.30 27.30
37 193.15 -2.14 30.27 30.31 27.28
38 193.20 -2.20 30.22 30.33 27.27
39 193.25 -2.27 30.18 30.35 27.25
40 193.30 -2.34 30.14 30.37 27.24
41 193.35 -2.41 30.09 30.38 27.23
42 193.40 -2.48 30.05 30.40 27.21
43 193.45 -2.55 30.00 30.42 27.20
44 193.50 -2.61 29.96 30.44 27.18
45 193.55 -2.69 29.91 30.46 27.16
46 193.60 -2.76 29.86 30.47 27.15
47 193.65 -2.83 29.82 30.49 27.13
48 193.70 -2.90 29.77 30.51 27.11
49 193.75 -2.98 29.72 30.53 27.10
50 193.80 -3.05 29.67 30.55 27.08
51 193.85 -3.12 29.62 30.57 27.06
52 193.90 -3.19 29.58 30.58 27.04
53 193.95 -3.26 29.53 30.60 27.02
54 194.00 -3.33 29.48 30.62 27.00
55 194.05 -3.41 29.43 30.64 26.98
56 194.10 -3.48 29.38 30.66 26.96
57 194.15 -3.55 29.33 30.72 26.96
58 194.20 -3.63 29.28 30.78 26.95
59 194.25 -3.70 29.23 30.83 26.95
60 194.30 -3.77 29.18 30.89 26.94
61 194.35 -3.85 29.12 30.96 26.93
62 194.40 -3.92 29.07 31.02 26.93
63 194.45 -3.99 29.02 31.08 26.92
64 194.50 -4.06 28.97 31.14 26.91
65 194.55 -4.13 28.92 31.21 26.91
66 194.60 -4.19 28.88 31.27 26.90
67 194.65 -4.26 28.83 31.34 26.89
68 194.70 -4.33 28.78 31.41 26.89
69 194.75 -4.39 28.73 31.47 26.88
70 194.80 -4.46 28.68 31.54 26.87
71 194.85 -4.52 28.64 31.61 26.86
72 194.90 -4.59 28.59 31.68 26.86
73 194.95 -4.65 28.54 31.76 26.85
74 195.00 -4.72 28.49 31.83 26.84
75 195.05 -4.78 28.44 31.91 26.83
76 195.10 -4.85 28.39 31.91 26.79
1 191.35000 0.21 31.62 31.43 28.52
2 191.40000 0.17 31.60 31.35 28.46
3 191.45000 0.13 31.58 31.26 28.41
4 191.50000 0.09 31.56 31.18 28.36
5 191.55000 0.03 31.53 31.10 28.30
6 191.60000 -0.02 31.50 31.02 28.24
7 191.65000 -0.08 31.46 30.94 28.19
8 191.70000 -0.14 31.43 30.87 28.13
9 191.75000 -0.20 31.40 30.79 28.08
10 191.80000 -0.27 31.37 30.72 28.02
11 191.85000 -0.33 31.33 30.65 27.97
12 191.90000 -0.40 31.29 30.58 27.91
13 191.95000 -0.46 31.26 30.51 27.86
14 192.00000 -0.53 31.22 30.44 27.80
15 192.05000 -0.59 31.18 30.37 27.75
16 192.10000 -0.66 31.15 30.30 27.69
17 192.15000 -0.73 31.11 30.24 27.64
18 192.20000 -0.80 31.07 30.17 27.59
19 192.25000 -0.86 31.03 30.18 27.57
20 192.30000 -0.94 30.99 30.19 27.56
21 192.35000 -1.02 30.94 30.20 27.54
22 192.40000 -1.09 30.90 30.20 27.53
23 192.45000 -1.17 30.86 30.21 27.51
24 192.50000 -1.24 30.81 30.22 27.50
25 192.55000 -1.31 30.77 30.23 27.48
26 192.60000 -1.38 30.73 30.23 27.46
27 192.65000 -1.45 30.69 30.24 27.45
28 192.70000 -1.52 30.65 30.25 27.43
29 192.75000 -1.59 30.60 30.26 27.42
30 192.80000 -1.67 30.56 30.27 27.40
31 192.85000 -1.74 30.52 30.27 27.38
32 192.90000 -1.81 30.47 30.28 27.37
33 192.95000 -1.88 30.43 30.29 27.35
34 193.00000 -1.95 30.39 30.30 27.33
35 193.05000 -2.02 30.34 30.30 27.31
36 193.10000 -2.08 30.30 30.31 27.30
37 193.15000 -2.15 30.26 30.32 27.28
38 193.20000 -2.22 30.21 30.34 27.26
39 193.25000 -2.29 30.17 30.36 27.25
40 193.30000 -2.36 30.13 30.37 27.24
41 193.35000 -2.43 30.08 30.39 27.22
42 193.40000 -2.50 30.04 30.41 27.21
43 193.45000 -2.56 29.99 30.43 27.19
44 193.50000 -2.63 29.95 30.44 27.18
45 193.55000 -2.70 29.90 30.46 27.16
46 193.60000 -2.78 29.85 30.48 27.15
47 193.65000 -2.85 29.80 30.50 27.13
48 193.70000 -2.92 29.76 30.52 27.11
49 193.75000 -2.99 29.71 30.54 27.09
50 193.80000 -3.06 29.66 30.55 27.07
51 193.85000 -3.14 29.61 30.57 27.06
52 193.90000 -3.21 29.56 30.59 27.04
53 193.95000 -3.28 29.52 30.61 27.02
54 194.00000 -3.35 29.47 30.63 27.00
55 194.05000 -3.42 29.42 30.65 26.98
56 194.10000 -3.50 29.37 30.67 26.96
57 194.15000 -3.57 29.32 30.72 26.95
58 194.20000 -3.64 29.26 30.78 26.95
59 194.25000 -3.72 29.21 30.84 26.94
60 194.30000 -3.79 29.16 30.90 26.94
61 194.35000 -3.86 29.11 30.96 26.93
62 194.40000 -3.93 29.06 31.02 26.92
63 194.45000 -4.01 29.01 31.09 26.91
64 194.50000 -4.08 28.96 31.15 26.91
65 194.55000 -4.14 28.91 31.21 26.90
66 194.60000 -4.21 28.86 31.28 26.90
67 194.65000 -4.27 28.82 31.34 26.89
68 194.70000 -4.34 28.77 31.41 26.88
69 194.75000 -4.41 28.72 31.48 26.88
70 194.80000 -4.47 28.67 31.55 26.87
71 194.85000 -4.54 28.63 31.62 26.86
72 194.90000 -4.60 28.58 31.69 26.85
73 194.95000 -4.67 28.53 31.76 26.84
74 195.00000 -4.73 28.48 31.84 26.83
75 195.05000 -4.80 28.43 31.91 26.82
76 195.10000 -4.86 28.38 31.91 26.79
(No source node specified: picked Site_A)

View 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 = 0.00 dBm:
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): 17.85 dB
(No source node specified: picked Site_A)
(No destination node specified: picked Site_B)

View File

@@ -252,8 +252,9 @@ Transceiver trx Lannion_CAS
PMD (ps): 0.00
PDL (dB): 0.00
Roadm roadm Lannion_CAS
effective loss (dB): 23.00
pch out (dBm): -20.00
effective loss (dB): 23.00
reference pch out (dBm): -20.00
actual pch out (dBm): -20.00
Edfa east edfa in Lannion_CAS to Corlay
type_variety: test
effective gain(dB): 21.18
@@ -266,6 +267,7 @@ Edfa east edfa in Lannion_CAS to Corlay
Delta_P (dB): 0.00
target pch (dBm): 3.00
effective pch (dBm): 1.18
actual pch out (dBm): 1.18
output VOA (dB): 0.00
Fiber fiber (Lannion_CAS → Corlay)-F061
type_variety: SSMF
@@ -274,7 +276,8 @@ Fiber fiber (Lannion_CAS → Corlay)-F061
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)
pch out (dBm): -2.82
reference pch out (dBm): -2.82
actual pch out (dBm): -2.81
Fused west fused spans in Corlay
loss (dB): 1.00
Fiber fiber (Corlay → Loudeac)-F010
@@ -284,7 +287,8 @@ Fiber fiber (Corlay → Loudeac)-F010
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)
pch out (dBm): -13.82
reference pch out (dBm): -13.82
actual pch out (dBm): -13.81
Fused west fused spans in Loudeac
loss (dB): 1.00
Fiber fiber (Loudeac → Lorient_KMA)-F054
@@ -294,23 +298,26 @@ Fiber fiber (Loudeac → Lorient_KMA)-F054
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)
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
type_variety: test
effective gain(dB): 28.00
effective gain(dB): 27.99
(before att_in and before output VOA)
noise figure (dB): 5.76
(including att_in)
pad att_in (dB): 0.00
Power In (dBm): -6.99
Power Out (dBm): 21.04
Power Out (dBm): 21.03
Delta_P (dB): -1.82
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
Roadm roadm Lorient_KMA
effective loss (dB): 21.18
pch out (dBm): -20.00
effective loss (dB): 21.17
reference pch out (dBm): -20.00
actual pch out (dBm): -20.00
Transceiver trx Lorient_KMA
GSNR (0.1nm, dB): 23.94
GSNR (signal bw, dB): 19.85

6
tests/requirements.txt Normal file
View 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

View File

@@ -6,7 +6,7 @@
from numpy import zeros, array
from gnpy.core.elements import Transceiver, Edfa
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.tools.json_io import load_network, load_equipment
from pathlib import Path
@@ -73,7 +73,9 @@ def si(nch_and_spacing, bw):
nb_channel, spacing = nch_and_spacing
f_min = 191.3e12
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)])
@@ -84,7 +86,7 @@ def test_variable_gain_nf(gain, nf_expected, setup_edfa_variable_gain, si):
si.nli /= db2lin(gain)
si.ase /= db2lin(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)
result = edfa.nf
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.ase /= db2lin(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)
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)
edfa.operational.gain_target = gain
# 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)
nf_model = edfa.nf[0]
@@ -178,7 +180,7 @@ def test_ase_noise(gain, si, setup_trx, bw):
si = span(si)
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)
nf = edfa.nf
print('nf', nf)

588
tests/test_equalization.py Normal file
View 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)

View File

@@ -4,47 +4,56 @@
import pytest
from numpy import array, zeros, ones
from numpy.testing import assert_array_equal
from gnpy.core.info import create_arbitrary_spectral_information
from gnpy.core.info import create_arbitrary_spectral_information, Pref
from gnpy.core.exceptions import SpectrumError
def test_create_arbitrary_spectral_information():
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.slot_width, array([37.5e9, 37.5e9, 37.5e9]))
assert_array_equal(si.signal, ones(3))
assert_array_equal(si.nli, 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.chromatic_dispersion, zeros(3))
assert_array_equal(si.pmd, zeros(3))
assert_array_equal(si.channel_number, array([1, 2, 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.tx_osnr, array([40.0, 40.0, 40.0]))
with pytest.raises(SpectrumError, match='Spectra cannot be summed: channels overlapping.'):
si += si
si = create_arbitrary_spectral_information(frequency=array([193.35e12, 193.3e12, 193.25e12]),
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]))
with pytest.raises(SpectrumError, match='Spectrum baud rate, including the roll off, '
r'larger than the slot width for channels: \[1, 3\].'):
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 '
r'distances between channels: \[\(1, 2\), \(3, 4\)\].'):
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 '
r'distances between channels: \[\(1, 2\), \(2, 3\)\].'):
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,
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))

View File

@@ -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', ]),
('openroadm-v5-Stockholm-Gothenburg', transmission_main_example,
['-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):
'''Make sure that our examples produce useful output'''
os.chdir(SRC_ROOT)

View File

@@ -506,3 +506,71 @@ def test_eqpt_creation(tmpdir):
# check that all amp in the converted files corresponds to an eqpt line
for ampuid in jsonconverted.keys():
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']

View File

@@ -6,7 +6,7 @@
import pytest
from gnpy.core.elements import Transceiver, Fiber, Edfa, Roadm
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.tools.json_io import load_network, load_equipment
from pathlib import Path
@@ -45,7 +45,9 @@ def propagation(input_power, con_in, con_out, dest):
p = input_power
p = db2lin(p) * 1e-3
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')
sink = next(transceivers[uid] for uid in transceivers if uid == dest)
path = dijkstra_path(network, source, sink)

View File

@@ -19,7 +19,7 @@ from gnpy.core.elements import Fused, Roadm, Edfa
from gnpy.core.network import build_network
from gnpy.tools.json_io import network_from_json, load_equipment, load_json, Amp
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.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}
json_network['elements'].append(prev_node)
network = network_from_json(json_network, equipment)
p_total_db = power_dbm + lin2db(automatic_nch(equipment['SI']['default'].f_min,
equipment['SI']['default'].f_max,
equipment['SI']['default'].spacing))
nb_channel = automatic_nch(equipment['SI']['default'].f_min, equipment['SI']['default'].f_max,
equipment['SI']['default'].spacing)
p_total_db = power_dbm + lin2db(nb_channel)
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': '',
'path_bandwidth': 100e9,
'effective_freq_slot': None,
'nb_channel': nb_channel
}
trx_params = trx_mode_params(equipment)
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)
path = compute_constrained_path(network, req)
si = create_input_spectral_information(
req.f_min, req.f_max, req.roll_off, req.baud_rate,
req.power, req.spacing)
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):
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)
power_out_roadm = si.signal + si.ase + si.nli
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
# 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
@@ -271,15 +271,15 @@ def test_roadm_target_power(prev_node_type, effective_pch_out_db, power_dbm):
if prev_node_type == 'edfa':
# edfa prev_node sets input power to roadm to a high enough value:
# 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
assert_allclose(power_out_roadm, db2lin(effective_pch_out_db - 30), rtol=1e-3)
elif prev_node_type == 'fused':
# fused prev_node does reamplfy power after fiber propagation, so input power
# to roadm is low.
# 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)
# Check that egress power of roadm is equalized to the min carrier input power.
assert_allclose(power_out_roadm, min_power_in_roadm, 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 not equalized power out is the same as power in.
assert_allclose(power_out_roadm, power_in_roadm, rtol=1e-3)
else:
si = el(si)

View File

@@ -12,7 +12,7 @@ from numpy.testing import assert_allclose
from numpy import array, genfromtxt
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.parameters import SimParams
from gnpy.tools.json_io import load_json
@@ -28,7 +28,8 @@ def test_fiber():
# fix grid spectral information generation
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
spectral_info_out = fiber(spectral_info_input)
@@ -44,8 +45,12 @@ def test_fiber():
slot_width = array([37.5e9, 50e9, 75e9, 50e9, 37.5e9])
baud_rate = array([32e9, 42e9, 64e9, 42e9, 32e9])
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,
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
spectral_info_out = fiber(spectral_info_input)
@@ -63,7 +68,8 @@ def test_raman_fiber():
""" Test the accuracy of propagating the RamanFiber."""
# spectral information generation
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'))
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."""
# spectral information generation
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'))
fiber = Fiber(**load_json(TEST_DIR / 'data' / 'test_lumped_losses_raman_fiber_config.json'))

View File

@@ -4,7 +4,7 @@ skipsdist = True
[testenv]
deps =
-r{toxinidir}/requirements.txt
pytest>=6.2.5,<7
-r{toxinidir}/tests/requirements.txt
cover: pytest-cov
linters: flake8
linters: pep8-naming
@@ -19,7 +19,7 @@ commands =
pytest {env:CI_COVERAGE_OPTS:} -vv {posargs}
cover: coverage html -d cover
cover: coverage xml -o cover/coverage.xml
python setup.py bdist_wheel
python -m build
[testenv:docs]
deps =
@@ -43,4 +43,4 @@ commands =
[flake8]
max-line-length = 120
max-complexity = 15
ignore = N806
ignore = N806 W503