23 Commits
v2.10 ... v2.11

Author SHA1 Message Date
EstherLerouzic
c35104c184 Add documentation for multiband
Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: Iadf6d9edd8c67c1389c4a0d482466a8c52198621
2024-11-21 09:26:51 +01:00
AndreaDAmico
7b1354ee24 fix: avoid using cumtrapz from scipy
cumtrapz has been replaced with cumulative_trapezoid in the scipy version currently required by GNPy.

Change-Id: I6790f7aa8d8e8d171faa48db4b20e6a93141c471
2024-11-15 22:25:27 +00:00
AndreaDAmico
39d3f0f483 Perturbative Raman Solver
Raman effect evaluation based on a perturbative solution for faster computation

Change-Id: Ie6d4ea4d9f95d8755dc8dfd004c954d4c2c5f759
2024-11-08 19:55:20 +00:00
AndreaDAmico
bbe9ef7356 Increasing precision in Raman tests
Change-Id: I7a4de449a673d2e2ac23376d7fe64399c65e1246
2024-11-08 18:12:49 +00:00
AndreaDAmico
42a8f018cd GGN approximation formula defined
An approximated version of the GGN is implemented to reduce the computational time enabling fast multi-band transmission simulations

Change-Id: I2951a878aa04b5eb4a33ba86d626a788c4cbb100
2024-11-08 18:09:44 +00:00
EstherLerouzic
29f5dd1dc4 Add frequency dependency on ROADM impairments
Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: Icb88bf9c42c09deb0064e3299b78b080462fef79
2024-10-16 17:49:00 +00:00
EstherLerouzic
03da959724 insert multiband_amplifier if needed
the automatic add_missing_elements function is updated to insert
multiband booster, preamp or inline amplifiers based on the OMS
nature. If nothing is stated, then uses Edfas.

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: I968a2fc0a3da97aecb7b513ff211491b20cdd4f2
2024-10-16 17:47:29 +00:00
EstherLerouzic
f621ca6fe7 Add tilt computation for design targets
Compute the tilts only if raman-flag in sim_params is turned on.
Use actual input power in fiber (according to expected propagation
during design).
Creates a function that computes the expected tilt after propagation
in a span, and returns the normalized power difference at the center
frequency of each band, and the tilt experenced between lower and
upper frequency in each band.
Include the expected tilt when computing target gains of amplifiers.
Current function requires that the bands remain in the same order.
(ordering is ensured when creating the objects).

Change-Id: I28bdf13f2010153175e8b6d199fd8eea15d7b292
2024-10-16 17:46:59 +00:00
EstherLerouzic
24f4503020 Preselect multiband amplifiers based on band gain and power targets
To ensure that the multiband amplifier meets the required gain and
power targets for each band, this commit introduces a preselection
process for the amplifiers type variety. The preselection ensures
that only compatible amplifiers are considered, avoiding that
an amplifier is selected for one band that is not part of the same
multiband amplifier type variety of the amplifier selected for the
other band(s).

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: I8de7e0b7c165e6edfe47d7f4cda80db23924a9c9
2024-10-16 17:46:34 +00:00
EstherLerouzic
520c3615e4 Refactor select_edfa
Objective is to reuse the functions that lists suitable type variety candidates
for each amplifier of the multiband amplifier

restrictions are processed before entering select_edfa.

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: I8c784cef6bfed9a2e95bc39434a32191678db81f
2024-10-16 17:40:29 +00:00
EstherLerouzic
548626a9f2 preselect amplifiers based on restrictions and bands
make sure that selected amplifiers (single or multiband) have a band
that encompasses design_band.

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: I8b66755efbe8413f32328b9e02099ffdedd4b7ed
2024-10-16 17:40:01 +00:00
EstherLerouzic
7a26833a5a Add some test on select_edfa
Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: Ia54c62fe76175f16048992ca1f67439dd32c6e5e
2024-10-16 17:39:39 +00:00
EstherLerouzic
c2f6f9c6a0 Add an invocation test with multiband case
Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: I0a98175f0c6b4333fae6bea40dac826032a25233
2024-10-16 17:39:13 +00:00
EstherLerouzic
64a91256fc Propagate power per band during autodesign
Target setting computation is done going through each element of the OMS
and computing resulting delta power after each amplifier element. In order
to account for different delta power per band (multi band autodesign), the
computation must be made per band. The previous introduction of a standard
name for bands ("CBAND", "LBAND") ensures a stable key to index these
delta power computation.

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: Ida4b2486ebde4f2a1fb21a44458d1fe34a788d1f
2024-10-16 17:37:35 +00:00
EstherLerouzic
bdcffc2a5e Refactor: define a separate function to compute targets
Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: I5698feb059f13b90c1ab3d0843fb000c4e0b6b59
2024-10-16 17:36:52 +00:00
EstherLerouzic
c384af8062 Refactor: create a function to set one single band amplifier
Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: I00018c38b0cc0ceefcd21d50dd0cdc639019cc70
2024-10-16 17:36:25 +00:00
EstherLerouzic
0813332adc Enable differentiated design band per OMS
Introduce a design_band parameter in ROADM and Transceiver.
- if nothing is defined, use SI band(s)
- if design band is defined in ROADM, use this one for all degrees
- if per degree design band is defined, use this one instead

unsupported case: single band OMS with default multiband design band.
Check that these definitions are consistent with actual amplifiers

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: Ibea4ce6e72d2b1e96ef8cf4efaf499530d24179c
2024-10-16 17:31:33 +00:00
EstherLerouzic
22fe9ead55 Introduce multi band amps
Introduce a new multi-band element that contains a list of Edfa element:
- reads multiple amps out of the element config.
- deduces frequency band from the amp in the list.

no autodesign yet: multi-band amps must have type_variety.

- checks that type variety of individual EDFAs is consistent with multiband
type variety
- demux and mux spectrum when propagate in multiband
- don't add a preamp or booster if a multiband amp is already defined.

The print of channel number is removed from equipment, since the channel number
may now depend on the path's amplifiers. This changes invocation results layout.

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: I44e77ff82e622cdee4021a7984d660317cb90cf9
2024-10-16 17:26:11 +00:00
EstherLerouzic
920ac30aa5 Refactor and simplify network functions
Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: Ifa0949a8b7739036639e1a4b006ceb08804558ce
2024-10-16 17:24:52 +00:00
EstherLerouzic
ac8fd770ab Only propagates carriers that belong to Amp bandwidth
The commit introduces mux/demux functions in amps and ensures that the
propagation is only done on carriers that are in the Amp bandwitdh, ie
with all their spectrum including slot width is in bandwidth.

For consistency, default amp f_min is changed:
Objective is to use amplifiers' band to bound the possible frequencies
to be propagated. Since the current default f_min of Amp in json_io.py is
higher than the SI one, this would result in a different nb of channels
than currently used in tests, and a change in all tests. In order to
avoid this, I preferred to change this value and have consistency
between SI f_min and Amp f_min.

The commits adds a set of functions to make amps band the useable
spectrum on each OMS. Thee OMS generation is changed to use the amp band.

The commit adds filtering functions (demux and mux) to filter out spectrum
which is not in the amplifier band.

Spectrum assignment is also corrected to correctly match the amp bandwidth
constraint with guardband: center frequency index must be within the
usable part of the amp band. This changes a bit the notion of freq_index
and guardband in the functions, but this is transparent to user:
f_min, f_max represent the amp band, while self.freq_index_min/max
represent the center frequency boundary for a reference 50GHz channel.

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: I225b2b2dc0e1f1992c0460f6e08fa9c9bc641edf
2024-10-16 17:16:21 +00:00
EstherLerouzic
5277ae2005 Add a redesign option
redesign True means that network is redesigned using each request
as reference channel. When False it means that the design is made
once and successive propagation use the settings computed with this
design.

Default propogation is without redesign, so that path-request-script
must use the ----redesign-per-request option to behave as before this
commit.

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: I0084185106d14659a846136620cd17791d551a7d
2024-10-16 17:15:20 +00:00
EstherLerouzic
30ead40e76 Creates a set of functions to be called by CLI and API
Instead of copying the CLI script in API code, use functions shared
by CLI and API

Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: I3f9b30b8700b68237d0e80768db015d8dec3deb5
2024-10-16 17:13:25 +00:00
EstherLerouzic
ae858b911a fix: capture warning to show the ROADM uid
Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: Ie13bf4c3436a5a0b8ec730698920eee2c7fb81e8
2024-10-16 17:10:34 +00:00
56 changed files with 7167 additions and 1003 deletions

View File

@@ -19,7 +19,7 @@ EDFA
~~~~
The EDFA equipment library is a list of supported amplifiers. New amplifiers
can be added and existing ones removed. Three different noise models are available:
can be added and existing ones removed. Various noise models are available.
1. ``'type_def': 'variable_gain'`` is a simplified model simulating a 2-coil EDFA with internal, input and output VOAs.
The NF vs gain response is calculated accordingly based on the input parameters: ``nf_min``, ``nf_max``, and ``gain_flatmax``.
@@ -35,8 +35,12 @@ can be added and existing ones removed. Three different noise models are availab
A detailed JSON configuration file is required (by default `gnpy/example-data/std_medium_gain_advanced_config.json <https://github.com/Telecominfraproject/oopt-gnpy/blob/master/gnpy/example-data/std_medium_gain_advanced_config.json>`_).
It uses a 3rd order polynomial where NF = f(gain), NF_ripple = f(frequency), gain_ripple = f(frequency), N-array dgt = f(frequency).
Compared to the previous models, NF ripple and gain ripple are modelled.
6. ``'type_def': 'multi_band'`` defines an amplifier type corresponding to an amplification site composed of multiple amplifier elements, where each amplifies a different band of the spectrum.
The ``amplifiers`` list contains the list of single-band amplifier type varieties that can compose such multiband
amplifiers. Several options can be listed for the same spectrum band. Only one can be selected
for the actual :ref:`Multiband_amplifier<multiband_amps>` element.
For all amplifier models:
For all single band amplifier models:
+------------------------+-----------+-----------------------------------------+
| field | type | description |
@@ -55,6 +59,30 @@ For all amplifier models:
| | | be used as a manual input (from JSON or |
| | | Excel template topology files.) |
+------------------------+-----------+-----------------------------------------+
| ``f_min`` | (number) | Optional. In :math:`Hz`. Minimum and |
| and ``f_max`` | | maximum frequency range for the |
| | | amplifier. Signal must fit entirely |
| | | within this range (center frequency and |
| | | spectrum width). |
| | | Default is 191.275e-12 Hz and |
| | | 196.125e-12 (tunable in |
| | | default_edfa_config.json) |
+------------------------+-----------+-----------------------------------------+
For multi_band amplifier models:
+------------------------+-----------+-----------------------------------------+
| field | type | description |
+========================+===========+=========================================+
| ``type_variety`` | (string) | A unique name to ID the amplifier in the|
| | | JSON template topology input file. |
+------------------------+-----------+-----------------------------------------+
| ``allowed_for_design`` | (boolean) | If false, the amplifier will not be |
| | | picked by auto-design but it can still |
| | | be used as a manual input (from JSON or |
| | | Excel template topology files.) |
+------------------------+-----------+-----------------------------------------+
Fiber
~~~~~
@@ -447,14 +475,14 @@ Here is an example:
"uid": "roadm SITE1",
"type": "Roadm",
"type_variety": "detailed_impairments",
"params": {
"per_degree_impairments": [
{
"from_degree": "trx SITE1",
"to_degree": "east edfa in SITE1 to ILA1",
"impairment_id": 1
}]
}
"params": {
"per_degree_impairments": [
{
"from_degree": "trx SITE1",
"to_degree": "east edfa in SITE1 to ILA1",
"impairment_id": 1
}]
}
}
It is not permitted to use a roadm-path-impairment-id for the wrong roadm path type (add impairment only for add path).
@@ -492,6 +520,19 @@ See ``delta_power_range_db`` for more explaination.
| | | mandatory when Raman amplification is |
| | | included in the simulation |
+---------------------------------------------+-----------+---------------------------------------------+
| ``raman_params.method`` | (string) | Model used for Raman evaluation. Valid |
| | | choices are ``perturbative`` (see |
| | | `arXiv:2304.11756 |
| | | <https://arxiv.org/abs/2304.11756>`_) and |
| | | ``numerical``, the GNPy legacy first order |
| | | derivative numerical solution. |
+---------------------------------------------+-----------+---------------------------------------------+
|``raman_params.order`` | | Order of the perturbative expansion. |
| | | For C- and C+L-band transmission scenarios |
| | | the second order provides high accuracy |
| | | considering common values of fiber input |
| | | power. (Default is 2) |
+---------------------------------------------+-----------+---------------------------------------------+
| ``raman_params.result_spatial_resolution`` | (number) | Spatial resolution of the output |
| | | Raman profile along the entire fiber span. |
| | | This affects the accuracy and the |
@@ -503,11 +544,18 @@ See ``delta_power_range_db`` for more explaination.
| | | channel around 0 dBm, a suggested value of |
| | | spatial resolution is 10e3 m |
+---------------------------------------------+-----------+---------------------------------------------+
| ``raman_params.solver_spatial_resolution`` | (number) | Spatial step for the iterative solution |
| | | of the first order differential equation |
| | | used to calculate the Raman profile |
| | | along the entire fiber span. |
| | | This affects the accuracy and the |
| ``raman_params.solver_spatial_resolution`` | (number) | When using the ``perturbative`` method, |
| | | the step for the spatial integration does |
| | | not affect the first order. Therefore, a |
| | | large step can be used when no |
| | | counter-propagating Raman amplification is |
| | | present; a suggested value is 10e3 m. |
| | | In presence of counter-propagating Raman |
| | | amplification or when using the |
| | | ``numerical`` method the following remains |
| | | valid. |
| | | The spatial step for the iterative solution |
| | | affects the accuracy and the |
| | | computational time of the evaluated |
| | | Raman profile: |
| | | smaller the spatial resolution higher both |
@@ -523,6 +571,10 @@ See ``delta_power_range_db`` for more explaination.
| | | ``ggn_spectrally_separated`` (see eq. 21 |
| | | from `arXiv:1710.02225 |
| | | <https://arxiv.org/abs/1710.02225>`_). |
| | | ``ggn_approx`` (see eq. 24-25 |
| | | from `jlt:9741324 |
| | | <https://eeexplore.ieee.org/document/ |
| | | 9741324>`_). |
+---------------------------------------------+-----------+---------------------------------------------+
| ``dispersion_tolerance`` | (number) | Optional. Pure number. Tuning parameter for |
| | | ggn model solution. Default value is 1. |
@@ -727,6 +779,10 @@ In the simplest case, homogeneous channel allocation can be defined via the ``Sp
+----------------------+-----------+-------------------------------------------+
| field | type | description |
+======================+===========+===========================================+
| ``type_variety`` | (string) | Optional. Default: ``default`` |
| | | A unique name to ID the band for |
| | | propagation or design. |
+----------------------+-----------+-------------------------------------------+
| ``f_min``, | (number) | In Hz. Define spectrum boundaries. Note |
| ``f_max`` | | that due to backward compatibility, the |
| | | first channel central frequency is placed |
@@ -793,6 +849,13 @@ In the simplest case, homogeneous channel allocation can be defined via the ``Sp
| | | transceiver OSNR. |
+----------------------+-----------+-------------------------------------------+
It is possible to define a set of bands in the SI block. In this case, type_variety must be used.
Each set defines a reference channel used for design functions and autodesign processes.
If no spectrum is defined (--spectrum or --services), then the same type of reference channel is
also used for simulation.
.. _mixed-rate:
Arbitrary channel definition
@@ -843,7 +906,7 @@ For example this example:
.. code-block:: json
{
"SI":[
"spectrum":[
{
"f_min": 191.4e12,
"f_max":193.1e12,
@@ -854,7 +917,7 @@ For example this example:
},
{
"f_min": 193.1625e12,
"f_max":195e12,
"f_max": 195e12,
"baud_rate": 64e9,
"delta_pdb": 3,
"slot_width": 75e9,
@@ -1100,6 +1163,8 @@ the maximum achievable total power.
The exact layout used by simulation can be retrieved thanks to --save-network option.
.. _operational_field:
+----------------------+-----------+--------------------------------------------------+
| field | type | description |
+======================+===========+==================================================+
@@ -1155,6 +1220,63 @@ The exact layout used by simulation can be retrieved thanks to --save-network op
}
}
.. _multiband_amps:
Multiband_amplifier attributes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+----------------------+-----------+--------------------------------------------------+
| field | type | description |
+======================+===========+==================================================+
| ``type`` | (string) | Mandatory: ``Multiband_amplifier`` |
+----------------------+-----------+--------------------------------------------------+
| ``type_variety`` | (string) | Optional, value must be listed in the library |
| | | to be a valid type. If not defined, autodesign |
| | | will pick one in the library among the |
| | | ``allowed_for_design``. |
+----------------------+-----------+--------------------------------------------------+
| ``amplifiers`` | (list of | Optional, configuration settings of the |
| | dict) | amplifiers composing the multiband amplifier. |
| | | Single band amplifier can be set with the |
| | | parameters of tables: |
| | | :ref:`operational_field<operational_field>`: |
+----------------------+-----------+--------------------------------------------------+
Example of Multiband_amplifier element setting:
.. code-block:: json
{
"uid": "east edfa in Site_A to Site_B",
"type": "Multiband_amplifier",
"type_variety": "std_medium_gain_multiband",
"amplifiers": [{
"type_variety": "std_medium_gain_C",
"operational": {
"gain_target": 22.55,
"delta_p": 0.9,
"out_voa": 3.0,
"tilt_target": 0.0
}
}, {
"type_variety": "std_medium_gain_L",
"operational": {
"gain_target": 21,
"delta_p": 3.0,
"out_voa": 3.0,
"tilt_target": 0.0
}
}
]
}
The frequency band of the element is the concatenation of the bands of each individual amplifier contained in
the Multiband_amplifier element. Only carriers within these bands are propagated through the Multiband_amplifier
element. If the user defines a spectrum larger than these bands, carriers that do not match the bands will be
filtered out. The user can define the bandwidth of the amplifiers in the library. f_min and f_max represent the
bandwidth of the amplifier (the entire channel must fit). The individual amplifier type_variety must be part of the
allowed ``amplifiers`` list defined in the library.
Roadm
~~~~~
@@ -1186,32 +1308,69 @@ Roadm
| | dict) | defined, it overrides the general values defined |
| | | by type_variety. |
+----------------------------------------+-----------+----------------------------------------------------+
| ``design_bands`` | (list of | Optional. List of bands expressed as dictionnary, |
| | dict) | e.g. {"f_min": 191.3e12, "f_max": 195.1e12} |
| | | To be considered for autodesign on all degrees of |
| | | the ROADM, if nothing is defined on the degrees. |
+----------------------------------------+-----------+----------------------------------------------------+
| ``per_degree_design_bands`` | (dict of | Optional. If defined, it overrides ROADM's general |
| | string, | design_bands, on the degree identified with the |
| | list of | key string. Value is a list of bands defined by |
| | dict) | their frequency bounds ``f_min`` and ``f_max`` |
| | | expressed in THz. |
+----------------------------------------+-----------+----------------------------------------------------+
Definition example:
.. code-block:: json
.. code-block:: json
{
"uid": "roadm SITE1",
"type": "Roadm",
"type_variety": "detailed_impairments",
"params": {
"per_degree_impairments": [
{
"from_degree": "trx SITE1",
"to_degree": "east edfa in SITE1 to ILA1",
"impairment_id": 1
}],
"per_degree_pch_out_db": {
"params": {
"per_degree_impairments": [
{
"from_degree": "trx SITE1",
"to_degree": "east edfa in SITE1 to ILA1",
"impairment_id": 1
}],
"per_degree_pch_out_db": {
"east edfa in SITE1 to ILA1": -13.5
}
}
}
}
}
In this example, all «implicit» express roadm-path are assigned as roadm-path-impairment-id = 0, and the target power is
set according to the value defined in the library except for the direction heading to "east edfa in SITE1 to ILA1", where
constant power equalization is used to reach -13.5 dBm target power.
.. code-block:: json
{
"uid": "roadm SITE1",
"type": "Roadm",
"params": {
"per_degree_design_bands": {
"east edfa in SITE1 to ILA1": [
{"f_min": 191.3e12, "f_max": 196.0e12},
{"f_min": 187.0e12, "f_max": 190.0e12}
]
}
}
}
In this example the OMS starting from east edfa in SITE1 to ILA1 is defined as a multiband OMS. This means that
if there is no setting in all or some of the amplifiers in the OMS, the autodesign function will select amplifiers
from those that have ``multi_band`` ``type_def`` amplifiers.
The default ``design_bands`` is inferred from the :ref:`SI<spectral_info>` block.
Note that ``design_bands`` and ``type_variety`` amplifiers must be consistent:
- you cannot mix single band and multiband amplifiers on the same OMS;
- the frequency range of the amplifiers must include ``design_bands``.
Fused
~~~~~
@@ -1221,7 +1380,7 @@ A fused element connected to the egress of a ROADM will disable the automatic bo
Fused ``params`` only contains a ``loss`` value in dB.
.. code-block:: json
.. code-block:: json
"params": {
"loss": 2

View File

@@ -6,6 +6,200 @@ Release change log
Each release introduces some changes and new features.
(prepare text for next release)
v2.11
-----
**New feature**
A new type_def for amplifiers has been introduced: multi_band. This allows the definition of a
multiband amplifier site composed of several amplifiers per band (a typical application is C+L transmission). The
release also includes autodesign for links (Optical Multiplex Section, OMS) composed of multi_band amplifiers.
Multi_band autodesign includes basic tilt and tilt_target calculation when the Raman flag is enabled with the
--sim-params option. The spectrum is demultiplexed before propagation in the amplifier and multiplexed in the output
fiber at the amplifier output.
In the library:
.. code-block:: json
{
"type_variety": "std_medium_gain_C",
"f_min": 191.225e12,
"f_max": 196.125e12,
"type_def": "variable_gain",
"gain_flatmax": 26,
"gain_min": 15,
"p_max": 21,
"nf_min": 6,
"nf_max": 10,
"out_voa_auto": false,
"allowed_for_design": false
},
{
"type_variety": "std_medium_gain_L",
"f_min": 186.5e12,
"f_max": 190.1e12,
"type_def": "variable_gain",
"gain_flatmax": 26,
"gain_min": 15,
"p_max": 21,
"nf_min": 6,
"nf_max": 10,
"out_voa_auto": false,
"allowed_for_design": true
},
{
"type_variety": "std_medium_gain_multiband",
"type_def": "multi_band",
"amplifiers": [
"std_medium_gain_C",
"std_medium_gain_L"
],
"allowed_for_design": false
},
In the network topology:
.. code-block:: json
{
"uid": "east edfa in Site_A to Site_B",
"type": "Multiband_amplifier",
"type_variety": "std_medium_gain_multiband",
"amplifiers": [{
"type_variety": "std_medium_gain_C",
"operational": {
"gain_target": 22.55,
"delta_p": 0.9,
"out_voa": 3.0,
"tilt_target": 0.0
}
}, {
"type_variety": "std_medium_gain_L",
"operational": {
"gain_target": 21,
"delta_p": 3.0,
"out_voa": 3.0,
"tilt_target": 0.0
}
}
]
}
**Network design**
Optionally, users can define a design target per OMS (single or multi-band), with specific frequency ranges.
Default design bands are defined in the SI.
.. code-block:: json
{
"uid": "roadm Site_A",
"type": "Roadm",
"params": {
"target_pch_out_db": -20,
"design_bands": [{"f_min": 191.3e12, "f_max": 195.1e12}]
}
}
It is possible to define a set of bands in the SI block instead of a single Spectrum Information.
In this case type_variety must be used.
Each set defines a reference channel used for design functions and autodesign.
The default design settings for the path-request-run script have been modified.
Now, design is performed once for the reference channel defined in the SI block of the eqpt_config,
and requests are propagated based on this design.
The --redesign-per-request option can be used to restore previous behaviour
(design using request channel types).
The autodesign function has been updated to insert multiband booster, preamp or inline amplifiers based on the OMS
nature. If nothing is stated (no amplifier defined in the OMS, no design_bands attribute in the ROADM), then
it uses single band Edfas.
**Propagation**
Only carriers within the amplifier bandwidth are propagated, improving system coherence. This more rigorous checking
of the spectrum to be propagated and the amplifier bandwidth may lead to changes in the total number of channels
compared to previous releases. The range can be adjusted by changing the values of ``f_min`` and ``f_max``
in the amplifier library.
``f_min`` and ``f_max`` represent the boundary frequencies of the amplification bandwidth (the entire channel must fit
within this range).
In the example below, a signal center frequency of 190.05THz with a 50GHz width cannot fit within the amplifier band.
Note that this has a different meaning in the SI or Transceiver blocks, where ``f_min`` and ``f_max`` refers to the
minimum / maximum values of the carrier center frequency.
.. code-block:: json
{
"type_variety": "std_booster_L",
"f_min": 186.55e12,
"f_max": 190.05e12,
"type_def": "fixed_gain",
"gain_flatmax": 21,
"gain_min": 20,
"p_max": 21,
"nf0": 5,
"allowed_for_design": false
}
**Display**
The CLI output for the transmission_main_example now displays the channels used for design and simulation,
as well as the tilt target of amplifiers.
.. code-block:: text
Reference used for design: (Input optical power reference in span = 0.00dBm,
spacing = 50.00GHz
nb_channels = 76)
Channels propagating: (Input optical power deviation in span = 0.00dB,
spacing = 50.00GHz,
transceiver output power = 0.00dBm,
nb_channels = 76)
The CLI output displays the settings of each amplifier:
.. code-block:: text
Multiband_amplifier east edfa in Site_A to Site_B
type_variety: std_medium_gain_multiband
type_variety: std_medium_gain_C type_variety: std_medium_gain_L
effective gain(dB): 20.90 effective gain(dB): 22.19
(before att_in and before output VOA) (before att_in and before output VOA)
tilt-target(dB) 0.00 tilt-target(dB) 0.00
noise figure (dB): 6.38 noise figure (dB): 6.19
(including att_in) (including att_in)
pad att_in (dB): 0.00 pad att_in (dB): 0.00
Power In (dBm): -1.08 Power In (dBm): -1.49
Power Out (dBm): 19.83 Power Out (dBm): 20.71
Delta_P (dB): 0.90 Delta_P (dB): 2.19
target pch (dBm): 0.90 target pch (dBm): 3.00
actual pch out (dBm): -2.09 actual pch out (dBm): -0.80
output VOA (dB): 3.00 output VOA (dB): 3.00
**New feature**
The preturbative Raman and the approximated GGN models are introduced for a faster evaluation of the Raman and
Kerr effects, respectively.
These implementation are intended to reduce the computational effort required by multiband transmission scenarios.
Both the novel models have been validated with exstensive simulations
(see `arXiv:2304.11756 <https://arxiv.org/abs/2304.11756>`_ for the new Raman model and
`jlt:9741324 <https://eeexplore.ieee.org/document/9741324>`_ for the new NLI model).
Additionally, they have been experimentally validated in a laboratory setup composed of commertial equipment
(see `icton:10648172 <https://eeexplore.ieee.org/document/10648172>`_).
v2.10
-----
ROADM impairments can be defined per degree and roadm-path type (add, drop or express).
Minimum loss when crossing a ROADM is no more 0 dB. It can be set per ROADM degree with roadm-path-impairments.

View File

@@ -5,12 +5,12 @@
gnpy.core.elements
==================
Standard network elements which propagate optical spectrum
Standard network elements which propagate optical spectrum.
A network element is a Python callable. It takes a :class:`.info.SpectralInformation`
object and returns a copy with appropriate fields affected. This structure
represents spectral information that is "propogated" by this network element.
Network elements must have only a local "view" of the network and propogate
represents spectral information that is "propagated" by this network element.
Network elements must have only a local "view" of the network and propagate
:class:`.info.SpectralInformation` using only this information. They should be independent and
self-contained.
@@ -20,20 +20,22 @@ unique identifier and a printable name, and provide the :py:meth:`__call__` meth
instance as a result.
"""
from copy import deepcopy
from numpy import abs, array, errstate, ones, interp, mean, pi, polyfit, polyval, sum, sqrt, log10, exp, asarray, full,\
squeeze, zeros, append, flip, outer, ndarray
squeeze, zeros, outer, ndarray
from scipy.constants import h, c
from scipy.interpolate import interp1d
from collections import namedtuple
from typing import Union
from typing import Union, List
from logging import getLogger
import warnings
from gnpy.core.utils import lin2db, db2lin, arrange_frequencies, snr_sum, per_label_average, pretty_summary_print, \
watt2dbm, psd2powerdbm, calculate_absolute_min_or_zero
watt2dbm, psd2powerdbm, calculate_absolute_min_or_zero, nice_column_str
from gnpy.core.parameters import RoadmParams, FusedParams, FiberParams, PumpParams, EdfaParams, EdfaOperational, \
RoadmPath, RoadmImpairment
MultiBandParams, RoadmPath, RoadmImpairment, TransceiverParams, find_band_name, FrequencyBand
from gnpy.core.science_utils import NliSolver, RamanSolver
from gnpy.core.info import SpectralInformation
from gnpy.core.info import SpectralInformation, muxed_spectral_information, demuxed_spectral_information
from gnpy.core.exceptions import NetworkTopologyError, SpectrumError, ParametersError
@@ -80,8 +82,20 @@ class _Node:
class Transceiver(_Node):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def __init__(self, *args, params=None, **kwargs):
if not params:
params = {}
try:
with warnings.catch_warnings(record=True) as caught_warnings:
super().__init__(*args, params=TransceiverParams(**params), **kwargs)
if caught_warnings:
msg = f'In Transceiver {kwargs["uid"]}: {caught_warnings[0].message}'
_logger.warning(msg)
except ParametersError as e:
msg = f'Config error in {kwargs["uid"]}: {e}'
_logger.critical(msg)
raise ParametersError(msg) from e
self.osnr_ase_01nm = None
self.osnr_ase = None
self.osnr_nli = None
@@ -96,6 +110,8 @@ class Transceiver(_Node):
self.total_penalty = 0
self.propagated_labels = [""]
self.tx_power = None
self.design_bands = self.params.design_bands
self.per_degree_design_bands = self.params.per_degree_design_bands
def _calc_cd(self, spectral_info):
"""Updates the Transceiver property with the CD of the received channels. CD in ps/nm.
@@ -239,7 +255,11 @@ class Roadm(_Node):
if not params:
params = {}
try:
super().__init__(*args, params=RoadmParams(**params), **kwargs)
with warnings.catch_warnings(record=True) as caught_warnings:
super().__init__(*args, params=RoadmParams(**params), **kwargs)
if caught_warnings:
msg = f'In ROADM {kwargs["uid"]}: {caught_warnings[0].message}'
_logger.warning(msg)
except ParametersError as e:
msg = f'Config error in {kwargs["uid"]}: {e}'
raise ParametersError(msg) from e
@@ -278,6 +298,8 @@ class Roadm(_Node):
"to_degree": i["to_degree"],
"impairment_id": i["impairment_id"]}
for i in self.params.per_degree_impairments}
self.design_bands = deepcopy(self.params.design_bands)
self.per_degree_design_bands = deepcopy(self.params.per_degree_design_bands)
@property
def to_json(self):
@@ -311,6 +333,11 @@ class Roadm(_Node):
if self.per_degree_impairments:
to_json['per_degree_impairments'] = list(self.per_degree_impairments.values())
if self.params.design_bands is not None:
if len(self.params.design_bands) > 1:
to_json['params']['design_bands'] = self.params.design_bands
if self.params.per_degree_design_bands:
to_json['params']['per_degree_design_bands'] = self.params.per_degree_design_bands
return to_json
def __repr__(self):
@@ -391,7 +418,7 @@ class Roadm(_Node):
# record input powers to compute the actual loss at the end of the process
input_power_dbm = watt2dbm(spectral_info.signal + spectral_info.nli + spectral_info.ase)
# apply min ROADM loss if it exists
roadm_maxloss_db = self.get_roadm_path(from_degree, degree).impairment.maxloss
roadm_maxloss_db = self.get_impairment('roadm-maxloss', spectral_info.frequency, from_degree, degree)
spectral_info.apply_attenuation_db(roadm_maxloss_db)
# records the total power after applying minimum loss
net_input_power_dbm = watt2dbm(spectral_info.signal + spectral_info.nli + spectral_info.ase)
@@ -406,7 +433,7 @@ class Roadm(_Node):
# the power out of the ROADM for the ref channel is the min value between target power and input power.
ref_pch_in_dbm = self.ref_pch_in_dbm[from_degree]
# Calculate the output power for the reference channel (only for visualization)
self.ref_pch_out_dbm = min(ref_pch_in_dbm - roadm_maxloss_db, ref_per_degree_pch)
self.ref_pch_out_dbm = min(ref_pch_in_dbm - max(roadm_maxloss_db), 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
@@ -438,11 +465,11 @@ class Roadm(_Node):
spectral_info.apply_attenuation_db(delta_power)
# Update the PMD information
pmd_impairment = self.get_roadm_path(from_degree=from_degree, to_degree=degree).impairment.pmd
pmd_impairment = self.get_impairment('roadm-pmd', spectral_info.frequency, from_degree, degree)
spectral_info.pmd = sqrt(spectral_info.pmd ** 2 + pmd_impairment ** 2)
# Update the PMD information
pdl_impairment = self.get_roadm_path(from_degree=from_degree, to_degree=degree).impairment.pdl
pdl_impairment = self.get_impairment('roadm-pdl', spectral_info.frequency, from_degree, degree)
spectral_info.pdl = sqrt(spectral_info.pdl ** 2 + pdl_impairment ** 2)
# Update the per channel power with the result of propagation
@@ -460,13 +487,19 @@ class Roadm(_Node):
"""
# initialize impairment with params.pmd, params.cd
# if more detailed parameters are available for the Roadm, the use them instead
roadm_global_impairment = {'roadm-pmd': self.params.pmd,
'roadm-pdl': self.params.pdl}
roadm_global_impairment = {
'impairment': [{
'roadm-pmd': self.params.pmd,
'roadm-pdl': self.params.pdl,
'frequency-range': {
'lower-frequency': None,
'upper-frequency': None
}}]}
if path_type in ['add', 'drop']:
# without detailed imparments, we assume that add OSNR contribution is the same as drop contribution
# add_drop_osnr_db = - 10log10(1/add_osnr + 1/drop_osnr) with add_osnr = drop_osnr
# = add_osnr_db + 10log10(2)
roadm_global_impairment['roadm-osnr'] = self.params.add_drop_osnr + lin2db(2)
roadm_global_impairment['impairment'][0]['roadm-osnr'] = self.params.add_drop_osnr + lin2db(2)
impairment = RoadmImpairment(roadm_global_impairment)
if impairment_id is None:
@@ -507,6 +540,34 @@ class Roadm(_Node):
return self.roadm_path_impairments[impairment_id].path_type
return None
def get_impairment(self, impairment: str, frequency_array: array, from_degree: str, degree: str) \
-> array:
"""
Retrieves the specified impairment values for the given frequency array.
Parameters:
impairment (str): The type of impairment to retrieve (roadm-pmd, roamd-maxloss...).
frequency_array (array): The frequencies at which to check for impairments.
from_degree (str): The ingress degree for the roadm internal path.
degree (str): The egress degree for the roadm internal path.
Returns:
array: An array of impairment values for the specified frequencies.
"""
result = []
impairment_per_band = self.get_roadm_path(from_degree, degree).impairment.impairments
for frequency in frequency_array:
for item in impairment_per_band:
f_min = item['frequency-range']['lower-frequency']
f_max = item['frequency-range']['upper-frequency']
if (f_min is None or f_min <= frequency <= f_max):
item[impairment] = item.get(impairment, RoadmImpairment.default_values[impairment])
if item[impairment] is not None:
result.append(item[impairment])
break # Stop searching after the first match for this frequency
if result:
return array(result)
def __call__(self, spectral_info, degree, from_degree):
self.propagate(spectral_info, degree=degree, from_degree=from_degree)
return spectral_info
@@ -886,19 +947,22 @@ class Edfa(_Node):
@property
def to_json(self):
return {'uid': self.uid,
'type': type(self).__name__,
'type_variety': self.params.type_variety,
'operational': {
'gain_target': round(self.effective_gain, 6) if self.effective_gain else None,
'delta_p': self.delta_p,
'tilt_target': self.tilt_target, # defined per lambda on the amp band
'out_voa': self.out_voa
},
'metadata': {
'location': self.metadata['location']._asdict()
}
}
_to_json = {
'uid': self.uid,
'type': type(self).__name__,
'type_variety': self.params.type_variety,
'operational': {
'gain_target': round(self.effective_gain, 6) if self.effective_gain else None,
'delta_p': self.delta_p,
'tilt_target': round(self.tilt_target, 5) if self.tilt_target is not None else None,
# defined per lambda on the amp band
'out_voa': self.out_voa
},
'metadata': {
'location': self.metadata['location']._asdict()
}
}
return _to_json
def __repr__(self):
return (f'{type(self).__name__}(uid={self.uid!r}, '
@@ -920,7 +984,8 @@ class Edfa(_Node):
return '\n'.join([f'{type(self).__name__} {self.uid}',
f' type_variety: {self.params.type_variety}',
f' effective gain(dB): {self.effective_gain:.2f}',
f' (before att_in and before output VOA)',
' (before att_in and before output VOA)',
f' tilt-target(dB) {self.tilt_target:.2f}',
f' noise figure (dB): {nf:.2f}',
f' (including att_in)',
f' pad att_in (dB): {self.att_in:.2f}',
@@ -1199,5 +1264,126 @@ class Edfa(_Node):
self.propagated_labels = spectral_info.label
def __call__(self, spectral_info):
self.propagate(spectral_info)
return spectral_info
# filter out carriers outside the amplifier band
band = next(b for b in self.params.bands)
spectral_info = demuxed_spectral_information(spectral_info, band)
if spectral_info.carriers:
self.propagate(spectral_info)
return spectral_info
raise ValueError(f'Amp {self.uid} Defined propagation band does not match amplifiers band.')
class Multiband_amplifier(_Node):
"""Represents a multiband amplifier that manages multiple amplifiers across different frequency bands.
This class allows for the initialization and management of amplifiers, each associated with a specific
frequency band. It provides methods for signal propagation through the amplifiers and for exporting
to JSON format.
param: amplifiers: list of dict. A list of dictionaries, each containing parameters for setting an
individual amplifier.
param: params : dict. A dictionary of parameters for the multiband amplifier, which must include
necessary configuration settings.
param: args, kwargs: Additional positional and keyword arguments passed to the parent class `_Node`.
Attributes:
-----------
variety_list : A list of varieties associated with the amplifier.
amplifiers : A dictionary mapping band names to their corresponding amplifier instances.
Methods:
--------
__call__(spectral_info):
Propagates the input spectral information through each amplifier and returns the multiplexed spectrum.
to_json:
Converts the amplifier's state to a JSON-compatible dictionary.
__repr__():
Returns a string representation of the multiband amplifier instance.
__str__():
Returns a formatted string representation of the multiband amplifier and its amplifiers.
Raises:
-------
ParametersError: If there are conflicting amplifier definitions for the same frequency band during initialization.
ValueError: If the input spectral information does not match any defined amplifier bands during propagation.
"""
# separate the top level type_variety from kwargs to avoid having multiple type_varieties on each element processing
def __init__(self, *args, amplifiers: List[dict], params: dict, **kwargs):
self.variety_list = kwargs.pop('variety_list', None)
try:
super().__init__(params=MultiBandParams(**params), **kwargs)
except ParametersError as e:
raise ParametersError(f'{kwargs["uid"]}: {e}')
self.amplifiers = {}
if 'type_variety' in kwargs:
kwargs.pop('type_variety')
self.passive = False
for amp_dict in amplifiers:
# amplifiers dict uses default names as key to represent the band
amp = Edfa(**amp_dict, **kwargs)
band = next(b for b in amp.params.bands)
band_name = find_band_name(FrequencyBand(f_min=band["f_min"], f_max=band["f_max"]))
if band_name not in self.amplifiers.keys() and band not in self.params.bands:
self.params.bands.append(band)
self.amplifiers[band_name] = amp
elif band_name not in self.amplifiers.keys() and band in self.params.bands:
self.amplifiers[band_name] = amp
else:
raise ParametersError(f'{kwargs["uid"]}: has more than one amp defined for the same band')
def __call__(self, spectral_info: SpectralInformation):
"""propagates in each amp and returns the muxed spectrum
"""
out_si = []
for _, amp in self.amplifiers.items():
si = demuxed_spectral_information(spectral_info, amp.params.bands[0])
# if spectral_info frequencies are outside amp band, si is None
if si:
si = amp(si)
out_si.append(si)
if not out_si:
raise ValueError('Defined propagation band does not match amplifiers band.')
return muxed_spectral_information(out_si)
@property
def to_json(self):
return {'uid': self.uid,
'type': type(self).__name__,
'type_variety': self.type_variety,
'amplifiers': [{
'type_variety': amp.type_variety,
'operational': {
'gain_target': round(amp.effective_gain, 6),
'delta_p': amp.delta_p,
'tilt_target': amp.tilt_target,
'out_voa': amp.out_voa
}} for amp in self.amplifiers.values()
],
'metadata': {
'location': self.metadata['location']._asdict()
}
}
def __repr__(self):
return (f'{type(self).__name__}(uid={self.uid!r}, '
f'type_variety={self.type_variety!r}, ')
def __str__(self):
amp_str = [f'{type(self).__name__} {self.uid}',
f' type_variety: {self.type_variety}']
multi_str_data = []
max_width = 0
for amp in self.amplifiers.values():
lines = amp.__str__().split('\n')
# start at index 1 to remove uid from each amp list of strings
# records only if amp is used ie si has frequencies in amp) otherwise there is no other string than the uid
if len(lines) > 1:
max_width = max(max_width, max([len(line) for line in lines[1:]]))
multi_str_data.append(lines[1:])
# multi_str_data contains lines with each amp str, instead we want to print per column: transpose the string
transposed_data = list(map(list, zip(*multi_str_data)))
return '\n'.join(amp_str) + '\n' + nice_column_str(data=transposed_data, max_length=max_width + 2, padding=3)

View File

@@ -7,8 +7,11 @@ gnpy.core.equipment
This module contains functionality for specifying equipment.
"""
from collections import defaultdict
from functools import reduce
from typing import List
from gnpy.core.exceptions import EquipmentConfigError
from gnpy.core.exceptions import EquipmentConfigError, ConfigurationError
def trx_mode_params(equipment, trx_type_variety='', trx_mode='', error_message=False):
@@ -80,3 +83,50 @@ def trx_mode_params(equipment, trx_type_variety='', trx_mode='', error_message=F
trx_params = {**default_trx_params}
return trx_params
def find_type_variety(amps: List[str], equipment: dict) -> str:
"""Returns the multiband type_variety associated with a list of single band type_varieties
Args:
amps (List[str]): A list of single band type_varieties.
equipment (dict): A dictionary containing equipment information.
Returns:
str: an amplifier type variety
"""
listes = find_type_varieties(amps, equipment)
_found_type = list(reduce(lambda x, y: set(x) & set(y), listes))
# Given a list of single band amplifiers, find the multiband amplifier whose multi_band group
# matches. For example, if amps list contains ["a1_LBAND", "a2_CBAND"], with a1.multi_band = [a1_LBAND, a1_CBAND]
# and a2.multi_band = [a1_LBAND, a2_CBAND], then:
# possible_type_varieties = {"a1_LBAND": ["a1", "a2"], "a2_CBAND": ["a2"]}
# listes = [["a1", "a2"], ["a2"]]
# and _found_type = [a2]
if not _found_type:
msg = f'{amps} amps do not belong to the same amp type {listes}'
raise ConfigurationError(msg)
return _found_type[0]
def find_type_varieties(amps: List[str], equipment: dict) -> List[List[str]]:
"""Returns the multiband list of type_varieties associated with a list of single band type_varieties
Args:
amps (List[str]): A list of single band type_varieties.
equipment (dict): A dictionary containing equipment information.
Returns:
List[List[str]]: A list of lists containing the multiband type_varieties
associated with each single band type_variety.
"""
possible_type_varieties = defaultdict(list)
for amp_name, amp in equipment['Edfa'].items():
if amp.multi_band is not None:
for elem in amp.multi_band:
# possible_type_varieties stores the list of multiband amp names that list this elem as
# a possible amplifier of the multiband group. For example, if "std_medium_gain_multiband"
# and "std_medium_gain_multiband_new" contain "std_medium_gain_C" in their "multi_band" list, then:
# possible_type_varieties["std_medium_gain_C"] =
# ["std_medium_gain_multiband", "std_medium_gain_multiband_new"]
possible_type_varieties[elem].append(amp_name)
return [possible_type_varieties[a] for a in amps]

View File

@@ -11,7 +11,7 @@ This module contains classes for modelling :class:`SpectralInformation`.
from __future__ import annotations
from collections import namedtuple
from collections.abc import Iterable
from typing import Union
from typing import Union, List
from dataclasses import dataclass
from numpy import argsort, mean, array, append, ones, ceil, any, zeros, outer, full, ndarray, asarray
@@ -317,6 +317,56 @@ def create_input_spectral_information(f_min, f_max, roll_off, baud_rate, spacing
tx_osnr=tx_osnr, tx_power=tx_power, label=label)
def is_in_band(frequency: float, band: dict) -> bool:
"""band has {"f_min": value, "f_max": value} format
"""
if frequency >= band['f_min'] and frequency <= band['f_max']:
return True
return False
def demuxed_spectral_information(input_si: SpectralInformation, band: dict) -> SpectralInformation:
"""extract a si based on band
"""
filtered_indices = [i for i, f in enumerate(input_si.frequency)
if is_in_band(f - input_si.slot_width[i] / 2, band)
and is_in_band(f + input_si.slot_width[i] / 2, band)]
if filtered_indices:
frequency = input_si.frequency[filtered_indices]
baud_rate = input_si.baud_rate[filtered_indices]
slot_width = input_si.slot_width[filtered_indices]
signal = input_si.signal[filtered_indices]
nli = input_si.nli[filtered_indices]
ase = input_si.ase[filtered_indices]
roll_off = input_si.roll_off[filtered_indices]
chromatic_dispersion = input_si.chromatic_dispersion[filtered_indices]
pmd = input_si.pmd[filtered_indices]
pdl = input_si.pdl[filtered_indices]
latency = input_si.latency[filtered_indices]
delta_pdb_per_channel = input_si.delta_pdb_per_channel[filtered_indices]
tx_osnr = input_si.tx_osnr[filtered_indices]
tx_power = input_si.tx_power[filtered_indices]
label = input_si.label[filtered_indices]
return SpectralInformation(frequency=frequency, baud_rate=baud_rate, slot_width=slot_width, signal=signal,
nli=nli, ase=ase, roll_off=roll_off, chromatic_dispersion=chromatic_dispersion,
pmd=pmd, pdl=pdl, latency=latency, delta_pdb_per_channel=delta_pdb_per_channel,
tx_osnr=tx_osnr, tx_power=tx_power, label=label)
return None
def muxed_spectral_information(input_si_list: List[SpectralInformation]) -> SpectralInformation:
"""return the assembled spectrum
"""
if input_si_list and len(input_si_list) > 1:
si = input_si_list[0] + muxed_spectral_information(input_si_list[1:])
return si
elif input_si_list and len(input_si_list) == 1:
return input_si_list[0]
else:
raise ValueError('liste vide')
def carriers_to_spectral_information(initial_spectrum: dict[float, Carrier],
power: float) -> SpectralInformation:
"""Initial spectrum is a dict with key = carrier frequency, and value a Carrier object.

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,8 @@ gnpy.core.parameters
This module contains all parameters to configure standard network elements.
"""
from collections import namedtuple
from copy import deepcopy
from dataclasses import dataclass
from scipy.constants import c, pi
from numpy import asarray, array, exp, sqrt, log, outer, ones, squeeze, append, flip, linspace, full
@@ -35,25 +36,32 @@ class PumpParams(Parameters):
class RamanParams(Parameters):
def __init__(self, flag=False, result_spatial_resolution=10e3, solver_spatial_resolution=50):
def __init__(self, flag=False, method='perturbative', order=2, result_spatial_resolution=10e3,
solver_spatial_resolution=10e3):
"""Simulation parameters used within the Raman Solver
:params flag: boolean for enabling/disable the evaluation of the Raman power profile in frequency and position
:params method: Raman solver method
:params order: solution order for perturbative method
:params result_spatial_resolution: spatial resolution of the evaluated Raman power profile
:params solver_spatial_resolution: spatial step for the iterative solution of the first order ode
"""
self.flag = flag
self.method = method
self.order = order
self.result_spatial_resolution = result_spatial_resolution # [m]
self.solver_spatial_resolution = solver_spatial_resolution # [m]
def to_json(self):
return {"flag": self.flag,
"method": self.method,
"order": self.order,
"result_spatial_resolution": self.result_spatial_resolution,
"solver_spatial_resolution": self.solver_spatial_resolution}
class NLIParams(Parameters):
def __init__(self, method='gn_model_analytic', dispersion_tolerance=1, phase_shift_tolerance=0.1,
def __init__(self, method='gn_model_analytic', dispersion_tolerance=4, phase_shift_tolerance=0.1,
computed_channels=None, computed_number_of_channels=None):
"""Simulation parameters used within the Nli Solver
@@ -117,6 +125,8 @@ class RoadmParams(Parameters):
except KeyError as e:
raise ParametersError(f'ROADM configurations must include {e}. Configuration: {kwargs}')
self.per_degree_impairments = kwargs.get('per_degree_impairments', [])
self.design_bands = kwargs.get('design_bands', [])
self.per_degree_design_bands = kwargs.get('per_degree_design_bands', {})
def get_roadm_path_impairments(self, path_impairments_list):
"""Get the ROADM list of profiles for impairments definition
@@ -134,7 +144,7 @@ class RoadmParams(Parameters):
for path_impairment in path_impairments_list:
index = path_impairment['roadm-path-impairments-id']
path_type = next(key for key in path_impairment if key in authorized_path_types.keys())
impairment_dict = dict({'path-type': authorized_path_types[path_type]}, **path_impairment[path_type][0])
impairment_dict = {'path-type': authorized_path_types[path_type], 'impairment': path_impairment[path_type]}
roadm_path_impairments[index] = RoadmImpairment(impairment_dict)
return roadm_path_impairments
@@ -155,26 +165,24 @@ class RoadmPath:
class RoadmImpairment:
"""Generic definition of impairments for express, add and drop"""
default_values = {
'roadm-pmd': None,
'roadm-cd': None,
'roadm-pdl': None,
'roadm-inband-crosstalk': None,
'roadm-maxloss': 0,
'roadm-osnr': None,
'roadm-pmax': None,
'roadm-noise-figure': None,
'minloss': None,
'typloss': None,
'pmin': None,
'ptyp': None
}
def __init__(self, params):
"""Records roadm internal paths and types"""
self.path_type = params.get('path-type')
self.pmd = params.get('roadm-pmd')
self.cd = params.get('roadm-cd')
self.pdl = params.get('roadm-pdl')
self.inband_crosstalk = params.get('roadm-inband-crosstalk')
self.maxloss = params.get('roadm-maxloss', 0)
if params.get('frequency-range') is not None:
self.fmin = params.get('frequency-range')['lower-frequency']
self.fmax = params.get('frequency-range')['upper-frequency']
else:
self.fmin, self.fmax = None, None
self.osnr = params.get('roadm-osnr', None)
self.pmax = params.get('roadm-pmax', None)
self.nf = params.get('roadm-noise-figure', None)
self.minloss = params.get('minloss', None)
self.typloss = params.get('typloss', None)
self.pmin = params.get('pmin', None)
self.ptyp = params.get('ptyp', None)
self.impairments = params['impairment']
class FusedParams(Parameters):
@@ -463,10 +471,10 @@ class FiberParams(Parameters):
class EdfaParams:
default_values = {
'f_min': 191.3e12,
'f_max': 196.1e12,
'f_min': None,
'f_max': None,
'multi_band': None,
'bands': [],
'bands': None,
'type_variety': '',
'type_def': '',
'gain_flatmax': None,
@@ -502,9 +510,11 @@ class EdfaParams:
# Bandwidth
self.f_min = params['f_min']
self.f_max = params['f_max']
self.bandwidth = self.f_max - self.f_min
self.f_cent = (self.f_max + self.f_min) / 2
self.bandwidth = self.f_max - self.f_min if self.f_max and self.f_min else None
self.f_cent = (self.f_max + self.f_min) / 2 if self.f_max and self.f_min else None
self.f_ripple_ref = params['f_ripple_ref']
self.bands = [{'f_min': params['f_min'],
'f_max': params['f_max']}]
# Gain
self.gain_flatmax = params['gain_flatmax']
@@ -591,7 +601,7 @@ class EdfaParams:
def update_params(self, kwargs):
for k, v in kwargs.items():
setattr(self, k, self.update_params(**v) if isinstance(v, dict) else v)
setattr(self, k, v)
class EdfaOperational:
@@ -599,7 +609,7 @@ class EdfaOperational:
'gain_target': None,
'delta_p': None,
'out_voa': None,
'tilt_target': 0
'tilt_target': None
}
def __init__(self, **operational):
@@ -614,3 +624,62 @@ class EdfaOperational:
return (f'{type(self).__name__}('
f'gain_target={self.gain_target!r}, '
f'tilt_target={self.tilt_target!r})')
class MultiBandParams:
default_values = {
'bands': [],
'type_variety': '',
'type_def': None,
'allowed_for_design': False
}
def __init__(self, **params):
try:
self.update_attr(params)
except KeyError as e:
raise ParametersError(f'Multiband configurations json must include {e}. Configuration: {params}')
def update_attr(self, kwargs):
clean_kwargs = {k: v for k, v in kwargs.items() if v != ''}
for k, v in self.default_values.items():
# use deepcopy to avoid sharing same object amongst all instance when v is a list or a dict!
if isinstance(v, (list, dict)):
setattr(self, k, clean_kwargs.get(k, deepcopy(v)))
else:
setattr(self, k, clean_kwargs.get(k, v))
class TransceiverParams:
def __init__(self, **params):
self.design_bands = params.get('design_bands', [])
self.per_degree_design_bands = params.get('per_degree_design_bands', {})
@dataclass
class FrequencyBand:
"""Frequency band
"""
f_min: float
f_max: float
DEFAULT_BANDS_DEFINITION = {
"LBAND": FrequencyBand(f_min=187e12, f_max=189e12),
"CBAND": FrequencyBand(f_min=191.3e12, f_max=196.0e12)
}
# use this definition to index amplifiers'element of a multiband amplifier.
# this is not the design band
def find_band_name(band: FrequencyBand) -> str:
"""return the default band name (CBAND, LBAND, ...) that corresponds to the band frequency range
Use the band center frequency: if center frequency is inside the band then returns CBAND.
This is to flexibly encompass all kind of bands definitions.
returns the first matching band name.
"""
for band_name, frequency_range in DEFAULT_BANDS_DEFINITION.items():
center_frequency = (band.f_min + band.f_max) / 2
if center_frequency >= frequency_range.f_min and center_frequency <= frequency_range.f_max:
return band_name
return 'unknown_band'

View File

@@ -12,14 +12,14 @@ The solvers take as input instances of the spectral information, the fiber and t
from numpy import interp, pi, zeros, cos, array, append, ones, exp, arange, sqrt, trapz, arcsinh, clip, abs, sum, \
concatenate, flip, outer, inner, transpose, max, format_float_scientific, diag, sort, unique, argsort, cumprod, \
polyfit
polyfit, log, reshape, swapaxes, full, nan, cumsum
from logging import getLogger
from scipy.constants import k, h
from scipy.interpolate import interp1d
from math import isclose
from math import isclose, factorial
from gnpy.core.utils import db2lin, lin2db
from gnpy.core.exceptions import EquipmentConfigError
from gnpy.core.exceptions import EquipmentConfigError, ParametersError
from gnpy.core.parameters import SimParams
from gnpy.core.info import SpectralInformation
@@ -136,15 +136,17 @@ class RamanSolver:
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)
RamanSolver.calculate_unidirectional_stimulated_raman_scattering(co_power, co_alpha, co_cr, z,
lumped_losses)
# Counter-propagating profile initialization
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)), axis=1)
cnt_power_profile = flip(
RamanSolver.calculate_unidirectional_stimulated_raman_scattering(cnt_power, cnt_alpha, cnt_cr,
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 = \
@@ -163,8 +165,9 @@ class RamanSolver:
alpha = fiber.alpha(spectral_info.frequency)
cr = fiber.cr(spectral_info.frequency)
# Power profile
power_profile = \
RamanSolver.first_order_derivative_solution(spectral_info.signal, alpha, cr, z, lumped_losses)
power_profile = (
RamanSolver.calculate_unidirectional_stimulated_raman_scattering(spectral_info.signal, alpha, cr, z,
lumped_losses))
# Loss profile
loss_profile = power_profile / outer(spectral_info.signal, ones(z.size))
frequency = spectral_info.frequency
@@ -200,8 +203,8 @@ class RamanSolver:
return ase
@staticmethod
def first_order_derivative_solution(power_in, alpha, cr, z, lumped_losses):
"""Solves the Raman first order derivative equation
def calculate_unidirectional_stimulated_raman_scattering(power_in, alpha, cr, z, lumped_losses):
"""Solves the Raman equation
:param power_in: launch power array
:param alpha: loss coefficient array
@@ -210,18 +213,66 @@ class RamanSolver:
:param lumped_losses: concentrated losses array along the fiber span
:return: power profile matrix
"""
dz = z[1:] - z[:-1]
power = outer(power_in, ones(z.size))
for i in range(1, z.size):
power[:, i] = \
power[:, i - 1] * (1 + (- alpha + sum(cr * power[:, i - 1], 1)) * dz[i - 1]) * lumped_losses[i - 1]
if sim_params.raman_params.method == 'perturbative':
if sim_params.raman_params.order > 4:
raise ValueError(f'Order {sim_params.raman_params.order} not implemented in Raman Solver.')
z_lumped_losses = append(z[lumped_losses != 1], z[-1])
llumped_losses = append(1, lumped_losses[lumped_losses != 1])
power = outer(power_in, ones(z.size))
last_position = 0
z_indices = arange(0, z.size)
for z_lumped_loss, lumped_loss in zip(z_lumped_losses, llumped_losses):
if last_position < z[-1]:
interval = z_indices[(z >= last_position) * (z <= z_lumped_loss) == 1]
z_interval = z[interval] - last_position
dz = z_interval[1:] - z_interval[:-1]
last_position = z[interval][-1]
p0 = power_in * lumped_loss
power_interval = outer(p0, ones(z_interval.size))
alphaz = outer(alpha, z_interval)
expz = exp(- alphaz)
eff_length = 1 / outer(alpha, ones(z_interval.size)) * (1 - expz)
crpz = transpose(ones([z_interval.size, cr.shape[0], cr.shape[1]]) * cr * p0, (1, 2, 0))
exponent = - alphaz
if sim_params.raman_params.order >= 1:
gamma1 = sum(crpz * eff_length, 1)
exponent += gamma1
if sim_params.raman_params.order >= 2:
z_integrand = expz * gamma1
z_integral = cumsum((z_integrand[:, :-1] + z_integrand[:, 1:]) / 2 * dz, 1)
gamma2 = zeros(gamma1.shape)
gamma2[:, 1:] = sum(crpz[:, :, 1:] * z_integral, 1)
exponent += gamma2
if sim_params.raman_params.order >= 3:
z_integrand = expz * (gamma2 + 1/2 * gamma1**2)
z_integral = cumsum((z_integrand[:, :-1] + z_integrand[:, 1:]) / 2 * dz, 1)
gamma3 = zeros(gamma1.shape)
gamma3[:, 1:] = sum(crpz[:, :, 1:] * z_integral, 1)
exponent += gamma3
if sim_params.raman_params.order >= 4:
z_integrand = expz * (gamma3 + gamma1 * gamma2 + 1/factorial(3) * gamma1**3)
z_integral = cumsum((z_integrand[:, :-1] + z_integrand[:, 1:]) / 2 * dz, 1)
gamma4 = zeros(gamma1.shape)
gamma4[:, 1:] = sum(crpz[:, :, 1:] * z_integral, 1)
exponent += gamma4
power_interval *= exp(exponent)
power[:, interval[1:]] = power_interval[:, 1:]
power_in = power_interval[:, -1]
elif sim_params.raman_params.method == 'numerical':
dz = z[1:] - z[:-1]
power = outer(power_in, ones(z.size))
for i in range(1, z.size):
power[:, i] = (power[:, i - 1] * (1 + (- alpha + sum(cr * power[:, i - 1], 1)) * dz[i - 1]) *
lumped_losses[i - 1])
else:
raise ValueError(f'Method {sim_params.raman_params.method} not implemented in Raman Solver.')
return power
@staticmethod
def iterative_algorithm(co_initial_guess_power, cnt_initial_guess_power, co_frequency, cnt_frequency, z, fiber,
lumped_losses):
"""Solves the Raman first order derivative equation in case of both co- and counter-propagating
frequencies
"""Solves the Raman equation in case of both co- and counter-propagating frequencies
:param co_initial_guess_power: co-propagationg Raman first order derivative equation solution
:param cnt_initial_guess_power: counter-propagationg Raman first order derivative equation solution
@@ -276,6 +327,7 @@ class NliSolver:
List of implemented methods:
'gn_model_analytic': eq. 120 from arXiv:1209.0394
'ggn_spectrally_separated': eq. 21 from arXiv: 1710.02225
'ggn_approx': eq. 24-25 jlt:9741324
"""
SPM_WEIGHT = (16.0 / 27.0)
@@ -324,6 +376,28 @@ class NliSolver:
g_nli = sum(g_nli, 1)
g_nli = interp(spectral_info.frequency, cut_frequency, g_nli)
nli = spectral_info.baud_rate * g_nli # Local white noise
elif 'ggn_approx' in sim_params.nli_params.method:
if sim_params.nli_params.computed_channels is not None:
cut_indices = array(sim_params.nli_params.computed_channels) - 1
elif sim_params.nli_params.computed_number_of_channels is not None:
nb_ch_computed = sim_params.nli_params.computed_number_of_channels
nb_ch = len(spectral_info.channel_number)
cut_indices = array([round(i * (nb_ch - 1) / (nb_ch_computed - 1)) for i in range(0, nb_ch_computed)])
else:
cut_indices = array(spectral_info.channel_number) - 1
eta = NliSolver._ggn_approx(cut_indices, spectral_info, fiber, srs)
# Interpolation over the channels not indicated as computed channels in simulation parameters
cut_power = outer(spectral_info.signal[cut_indices], ones(spectral_info.number_of_channels))
cut_frequency = spectral_info.frequency[cut_indices]
pump_power = outer(ones(cut_indices.size), spectral_info.signal)
cut_baud_rate = outer(spectral_info.baud_rate[cut_indices], ones(spectral_info.number_of_channels))
g_nli = eta * cut_power * pump_power ** 2 / cut_baud_rate
g_nli = sum(g_nli, 1)
g_nli = interp(spectral_info.frequency, cut_frequency, g_nli)
nli = spectral_info.baud_rate * g_nli # Local white noise
else:
raise ValueError(f'Method {sim_params.nli_params.method} not implemented.')
@@ -526,6 +600,89 @@ class NliSolver:
freq_offset_th = ((k_ref * delta_f_ref) * rs_ref * beta2_ref) / (beta2 * symbol_rate)
return freq_offset_th
@staticmethod
def _ggn_approx(cut_indices, spectral_info: SpectralInformation, fiber, srs, spm_weight=SPM_WEIGHT,
xpm_weight=XPM_WEIGHT):
"""Computes the nonlinear interference power evaluated at the fiber input.
The method uses eq. 24-25 of https://ieeexplore.ieee.org/document/9741324
"""
# Spectral Features
nch = spectral_info.number_of_channels
frequency = spectral_info.frequency
baud_rate = spectral_info.baud_rate
slot_width = spectral_info.slot_width
roll_off = spectral_info.roll_off
df = spectral_info.df + diag(full(nch, nan))
# Physical fiber parameters
alpha = fiber.alpha(frequency)
beta2 = fiber.beta2(frequency)
gamma = outer(fiber.gamma(frequency[cut_indices]), ones(nch))
identity = diag(ones(nch))
weight = spm_weight * identity + xpm_weight * (ones([nch, nch]) - identity)
weight = weight[cut_indices, :]
dispersion_tolerance = sim_params.nli_params.dispersion_tolerance
phase_shift_tolerance = sim_params.nli_params.phase_shift_tolerance
max_slot_width = max(slot_width)
max_beta2 = max(abs(beta2))
delta_z = sim_params.raman_params.result_spatial_resolution
# Approximation psi
loss_profile = srs.loss_profile[:nch]
z = srs.z
psi = NliSolver._approx_psi(df=df, frequency=frequency, beta2=beta2, baud_rate=baud_rate,
loss_profile=loss_profile, z=z)
# GGN for SPM
for cut_index in cut_indices:
dn = 0
cut_frequency = frequency[cut_index]
cut_baud_rate = baud_rate[cut_index]
cut_roll_off = roll_off[cut_index]
cut_beta2 = beta2[cut_index]
cut_alpha = alpha[cut_index]
k_tol = dispersion_tolerance * abs(cut_alpha)
phi_tol = phase_shift_tolerance / delta_z
f_cut_resolution = min(k_tol, phi_tol) / abs(max_beta2) / (4 * pi ** 2 * (1 + dn) * max_slot_width)
f_pump_resolution = min(k_tol, phi_tol) / abs(max_beta2) / (4 * pi ** 2 * max_slot_width)
psi[cut_index, cut_index] = NliSolver._generalized_psi(cut_frequency, cut_frequency, cut_baud_rate,
cut_roll_off, cut_frequency, cut_baud_rate,
cut_roll_off, f_cut_resolution, f_pump_resolution,
srs, cut_alpha, cut_beta2, 0, cut_frequency)
psi = psi[cut_indices, :]
cut_baud_rate = outer(baud_rate[cut_indices], ones(nch))
pump_baud_rate = outer(ones(cut_indices.size), baud_rate)
eta_cut_central_frequency = \
gamma ** 2 * weight * psi / (cut_baud_rate * pump_baud_rate ** 2)
eta = cut_baud_rate * eta_cut_central_frequency # Local white noise
return eta
@staticmethod
def _approx_psi(df, frequency, baud_rate, beta2, loss_profile, z):
"""Computes the approximated psi function similarly to the one used in the GN model.
The method uses eq. 25 of https://ieeexplore.ieee.org/document/9741324"""
pump_baud_rate = outer(ones(frequency.size), baud_rate)
cut_beta = outer(beta2, ones(frequency.size))
pump_beta = outer(ones(frequency.size), beta2)
delta_z = abs(z[:-1] - z[1:])
loss_lin = log(loss_profile)
pump_alpha = (loss_lin[:, 1:] - loss_lin[:, :-1]) / delta_z
leff = abs((loss_profile[:, 1:] - loss_profile[:, :-1]) / sqrt(abs(pump_alpha))) * pump_alpha / abs(pump_alpha)
leff = reshape(outer(leff, ones(z.size - 1)), newshape=[leff.shape[0], leff.shape[1], leff.shape[1]])
leff2 = leff * swapaxes(leff, 2, 1)
leff2 = sum(leff2, axis=(1, 2))
z_int = outer(ones(frequency.size), leff2)
delta_beta = (cut_beta + pump_beta) / 2
psi = z_int * pump_baud_rate / (4 * pi * abs(delta_beta * df))
return psi
def estimate_nf_model(type_variety, gain_min, gain_max, nf_min, nf_max):
if nf_min < -10:

View File

@@ -12,6 +12,7 @@ from csv import writer
from numpy import pi, cos, sqrt, log10, linspace, zeros, shape, where, logical_and, mean, array
from scipy import constants
from copy import deepcopy
from typing import List
from gnpy.core.exceptions import ConfigurationError
@@ -458,3 +459,69 @@ def calculate_absolute_min_or_zero(x: array) -> array:
array([1., 0., 3.])
"""
return (abs(x) - x) / 2
def nice_column_str(data: List[List[str]], max_length: int = 30, padding: int = 1) -> str:
"""data is a list of rows, creates strings with nice alignment per colum and padding with spaces
letf justified
>>> table_data = [['aaa', 'b', 'c'], ['aaaaaaaa', 'bbb', 'c'], ['a', 'bbbbbbbbbb', 'c']]
>>> print(nice_column_str(table_data))
aaa b c
aaaaaaaa bbb c
a bbbbbbbbbb c
"""
# transpose data to determine size of columns
transposed_data = list(map(list, zip(*data)))
column_width = [max(len(word) for word in column) + padding for column in transposed_data]
nice_str = []
for row in data:
column = ''.join(word[0:max_length].ljust(min(width, max_length)) for width, word in zip(column_width, row))
nice_str.append(f'{column}')
return '\n'.join(nice_str)
def find_common_range(amp_bands: List[List[dict]], default_band_f_min: float, default_band_f_max: float) \
-> List[dict]:
"""Find the common frequency range of bands
If there are no amplifiers in the path, then use default band
>>> amp_bands = [[{'f_min': 191e12, 'f_max' : 195e12}, {'f_min': 186e12, 'f_max' : 190e12} ], \
[{'f_min': 185e12, 'f_max' : 189e12}, {'f_min': 192e12, 'f_max' : 196e12}], \
[{'f_min': 186e12, 'f_max': 193e12}]]
>>> find_common_range(amp_bands, 190e12, 195e12)
[{'f_min': 186000000000000.0, 'f_max': 189000000000000.0}, {'f_min': 192000000000000.0, 'f_max': 193000000000000.0}]
>>> amp_bands = [[{'f_min': 191e12, 'f_max' : 195e12}, {'f_min': 186e12, 'f_max' : 190e12} ], \
[{'f_min': 185e12, 'f_max' : 189e12}, {'f_min': 192e12, 'f_max' : 196e12}], \
[{'f_min': 186e12, 'f_max': 192e12}]]
>>> find_common_range(amp_bands, 190e12, 195e12)
[{'f_min': 186000000000000.0, 'f_max': 189000000000000.0}]
"""
_amp_bands = [sorted(amp, key=lambda x: x['f_min']) for amp in amp_bands]
_temp = []
# remove None bands
for amp in _amp_bands:
is_band = True
for band in amp:
if not (is_band and band['f_min'] and band['f_max']):
is_band = False
if is_band:
_temp.append(amp)
# remove duplicate
unique_amp_bands = []
for amp in _temp:
if amp not in unique_amp_bands:
unique_amp_bands.append(amp)
if unique_amp_bands:
common_range = unique_amp_bands[0]
else:
if default_band_f_min is None or default_band_f_max is None:
return []
common_range = [{'f_min': default_band_f_min, 'f_max': default_band_f_max}]
for bands in unique_amp_bands:
common_range = [{'f_min': max(first['f_min'], second['f_min']), 'f_max': min(first['f_max'], second['f_max'])}
for first in common_range for second in bands
if max(first['f_min'], second['f_min']) < min(first['f_max'], second['f_max'])]
return sorted(common_range, key=lambda x: x['f_min'])

View File

@@ -5,8 +5,8 @@
"gain_ripple": [
0.0
],
"f_min": 191.35e12,
"f_max": 196.1e12,
"f_min": 191.275e12,
"f_max": 196.125e12,
"dgt": [
1.0,
1.017807767853702,

View File

@@ -0,0 +1,479 @@
{
"Edfa": [
{
"type_variety": "std_high_gain",
"type_def": "variable_gain",
"gain_flatmax": 35,
"gain_min": 25,
"p_max": 21,
"nf_min": 5.5,
"nf_max": 7,
"out_voa_auto": false,
"allowed_for_design": true
},
{
"type_variety": "std_medium_gain",
"type_def": "variable_gain",
"gain_flatmax": 26,
"gain_min": 15,
"p_max": 23,
"nf_min": 6,
"nf_max": 10,
"out_voa_auto": false,
"allowed_for_design": true
},
{
"type_variety": "std_low_gain",
"type_def": "variable_gain",
"gain_flatmax": 16,
"gain_min": 8,
"p_max": 23,
"nf_min": 6.5,
"nf_max": 11,
"out_voa_auto": false,
"allowed_for_design": true
},
{
"type_variety": "high_power",
"type_def": "variable_gain",
"gain_flatmax": 16,
"gain_min": 8,
"p_max": 25,
"nf_min": 9,
"nf_max": 15,
"out_voa_auto": false,
"allowed_for_design": false
},
{
"type_variety": "std_fixed_gain",
"type_def": "fixed_gain",
"gain_flatmax": 21,
"gain_min": 20,
"p_max": 21,
"nf0": 5.5,
"allowed_for_design": false
},
{
"type_variety": "4pumps_raman",
"type_def": "fixed_gain",
"gain_flatmax": 12,
"gain_min": 12,
"p_max": 21,
"nf0": -1,
"allowed_for_design": false
},
{
"type_variety": "hybrid_4pumps_lowgain",
"type_def": "dual_stage",
"raman": true,
"gain_min": 25,
"preamp_variety": "4pumps_raman",
"booster_variety": "std_low_gain",
"allowed_for_design": true
},
{
"type_variety": "hybrid_4pumps_mediumgain",
"type_def": "dual_stage",
"raman": true,
"gain_min": 25,
"preamp_variety": "4pumps_raman",
"booster_variety": "std_medium_gain",
"allowed_for_design": true
},
{
"type_variety": "medium+low_gain",
"type_def": "dual_stage",
"gain_min": 25,
"preamp_variety": "std_medium_gain",
"booster_variety": "std_low_gain",
"allowed_for_design": true
},
{
"type_variety": "medium+high_power",
"type_def": "dual_stage",
"gain_min": 25,
"preamp_variety": "std_medium_gain",
"booster_variety": "high_power",
"allowed_for_design": false
},
{
"type_variety": "std_medium_gain_C",
"f_min": 191.225e12,
"f_max": 196.125e12,
"type_def": "variable_gain",
"gain_flatmax": 26,
"gain_min": 15,
"p_max": 21,
"nf_min": 6,
"nf_max": 10,
"out_voa_auto": false,
"allowed_for_design": false
},
{
"type_variety": "std_medium_gain_L",
"f_min": 186.5e12,
"f_max": 190.1e12,
"type_def": "variable_gain",
"gain_flatmax": 26,
"gain_min": 15,
"p_max": 21,
"nf_min": 6,
"nf_max": 10,
"out_voa_auto": false,
"allowed_for_design": true
},
{
"type_variety": "std_low_gain",
"f_min": 191.25e12,
"f_max": 196.15e12,
"type_def": "variable_gain",
"gain_flatmax": 16,
"gain_min": 8,
"p_max": 21,
"nf_min": 7,
"nf_max": 11,
"out_voa_auto": false,
"allowed_for_design": true
},
{
"type_variety": "std_low_gain_reduced_band",
"f_min": 192.25e12,
"f_max": 196.15e12,
"type_def": "variable_gain",
"gain_flatmax": 16,
"gain_min": 8,
"p_max": 21,
"nf_min": 7,
"nf_max": 11,
"out_voa_auto": false,
"allowed_for_design": true
},
{
"type_variety": "std_low_gain_bis",
"f_min": 191.25e12,
"f_max": 196.15e12,
"type_def": "variable_gain",
"gain_flatmax": 16,
"gain_min": 8,
"p_max": 21,
"nf_min": 6,
"nf_max": 10,
"out_voa_auto": false,
"allowed_for_design": true
},
{
"type_variety": "std_low_gain_L_ter",
"f_min": 186.55e12,
"f_max": 190.05e12,
"type_def": "variable_gain",
"gain_flatmax": 16,
"gain_min": 8,
"p_max": 16,
"nf_min": 7,
"nf_max": 11,
"out_voa_auto": false,
"allowed_for_design": true
},
{
"type_variety": "std_low_gain_L",
"f_min": 186.55e12,
"f_max": 190.05e12,
"type_def": "variable_gain",
"gain_flatmax": 16,
"gain_min": 8,
"p_max": 21,
"nf_min": 7,
"nf_max": 11,
"out_voa_auto": false,
"allowed_for_design": true
},
{
"type_variety": "std_low_gain_L_reduced_band",
"f_min": 187.3e12,
"f_max": 190.05e12,
"type_def": "variable_gain",
"gain_flatmax": 16,
"gain_min": 8,
"p_max": 21,
"nf_min": 7,
"nf_max": 11,
"out_voa_auto": false,
"allowed_for_design": true
},
{
"type_variety": "test",
"type_def": "variable_gain",
"gain_flatmax": 25,
"gain_min": 15,
"p_max": 21,
"nf_min": 5.8,
"nf_max": 10,
"out_voa_auto": false,
"allowed_for_design": true
},
{
"type_variety": "test_fixed_gain",
"type_def": "fixed_gain",
"gain_flatmax": 21,
"gain_min": 20,
"p_max": 21,
"nf0": 5,
"allowed_for_design": true
},
{
"type_variety": "std_booster",
"type_def": "fixed_gain",
"gain_flatmax": 21,
"gain_min": 20,
"p_max": 21,
"nf0": 5,
"allowed_for_design": false
},
{
"type_variety": "std_booster_L",
"f_min": 186.55e12,
"f_max": 190.05e12,
"type_def": "fixed_gain",
"gain_flatmax": 21,
"gain_min": 20,
"p_max": 21,
"nf0": 5,
"allowed_for_design": false
},
{
"type_variety": "std_booster_multiband",
"type_def": "multi_band",
"amplifiers": [
"std_booster",
"std_booster_L"
],
"allowed_for_design": false
},
{
"type_variety": "std_medium_gain_multiband",
"type_def": "multi_band",
"amplifiers": [
"std_medium_gain_C",
"std_medium_gain_L"
],
"allowed_for_design": false
},
{
"type_variety": "std_low_gain_multiband",
"type_def": "multi_band",
"amplifiers": [
"std_low_gain",
"std_low_gain_L"
],
"allowed_for_design": false
},
{
"type_variety": "std_low_gain_multiband_ter",
"type_def": "multi_band",
"amplifiers": [
"std_low_gain",
"std_low_gain_L_ter"
],
"allowed_for_design": false
},
{
"type_variety": "std_low_gain_multiband_bis",
"type_def": "multi_band",
"amplifiers": [
"std_low_gain_bis",
"std_low_gain_L"
],
"allowed_for_design": true
},
{
"type_variety": "std_low_gain_multiband_reduced",
"type_def": "multi_band",
"amplifiers": [
"std_low_gain_reduced",
"std_low_gain_L"
],
"allowed_for_design": true
},
{
"type_variety": "std_low_gain_multiband_reduced",
"type_def": "multi_band",
"amplifiers": [
"std_low_gain_bis",
"std_low_gain_L_reduced_band"
],
"allowed_for_design": true
}
],
"Fiber": [
{
"type_variety": "SSMF",
"dispersion": 1.67e-05,
"effective_area": 83e-12,
"pmd_coef": 1.265e-15
},
{
"type_variety": "NZDF",
"dispersion": 0.5e-05,
"effective_area": 72e-12,
"pmd_coef": 1.265e-15
},
{
"type_variety": "LOF",
"dispersion": 2.2e-05,
"effective_area": 125e-12,
"pmd_coef": 1.265e-15
}
],
"RamanFiber": [
{
"type_variety": "SSMF",
"dispersion": 1.67e-05,
"effective_area": 83e-12,
"pmd_coef": 1.265e-15
}
],
"Span": [
{
"power_mode": true,
"delta_power_range_db": [
-2,
3,
0.5
],
"max_fiber_lineic_loss_for_raman": 0.25,
"target_extended_gain": 2.5,
"max_length": 150,
"length_units": "km",
"max_loss": 28,
"padding": 10,
"EOL": 0,
"con_in": 0,
"con_out": 0
}
],
"Roadm": [
{
"target_pch_out_db": -20,
"add_drop_osnr": 38,
"pmd": 0,
"pdl": 0,
"restrictions": {
"preamp_variety_list": [],
"booster_variety_list": []
}
}
],
"SI": [
{
"f_min": 191.3e12,
"baud_rate": 32e9,
"f_max": 195.1e12,
"spacing": 50e9,
"power_dbm": 0,
"power_range_db": [
0,
0,
1
],
"roll_off": 0.15,
"tx_osnr": 40,
"sys_margins": 2
},
{
"type_variety": "lband",
"f_min": 186.3e12,
"baud_rate": 32e9,
"f_max": 190.1e12,
"spacing": 50e9,
"power_dbm": 0,
"power_range_db": [
0,
0,
1
],
"roll_off": 0.15,
"tx_osnr": 40,
"sys_margins": 2
}
],
"Transceiver": [
{
"type_variety": "vendorA_trx-type1",
"frequency": {
"min": 191.35e12,
"max": 196.1e12
},
"mode": [
{
"format": "mode 1",
"baud_rate": 32e9,
"OSNR": 11,
"bit_rate": 100e9,
"roll_off": 0.15,
"tx_osnr": 40,
"min_spacing": 37.5e9,
"cost": 1
},
{
"format": "mode 2",
"baud_rate": 66e9,
"OSNR": 15,
"bit_rate": 200e9,
"roll_off": 0.15,
"tx_osnr": 40,
"min_spacing": 75e9,
"cost": 1
}
]
},
{
"type_variety": "Voyager",
"frequency": {
"min": 191.35e12,
"max": 196.1e12
},
"mode": [
{
"format": "mode 1",
"baud_rate": 32e9,
"OSNR": 12,
"bit_rate": 100e9,
"roll_off": 0.15,
"tx_osnr": 40,
"min_spacing": 37.5e9,
"cost": 1
},
{
"format": "mode 3",
"baud_rate": 44e9,
"OSNR": 18,
"bit_rate": 300e9,
"roll_off": 0.15,
"tx_osnr": 40,
"min_spacing": 62.5e9,
"cost": 1
},
{
"format": "mode 2",
"baud_rate": 66e9,
"OSNR": 21,
"bit_rate": 400e9,
"roll_off": 0.15,
"tx_osnr": 40,
"min_spacing": 75e9,
"cost": 1
},
{
"format": "mode 4",
"baud_rate": 66e9,
"OSNR": 16,
"bit_rate": 200e9,
"roll_off": 0.15,
"tx_osnr": 40,
"min_spacing": 75e9,
"cost": 1
}
]
}
]
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,24 @@
{
"spectrum": [
{
"f_min": 191.25e12,
"baud_rate": 32e9,
"f_max": 195.1e12,
"slot_width": 50e9,
"delta_pdb": 0,
"roll_off": 0.15,
"tx_osnr": 40,
"label": "cband"
},
{
"f_min": 186.3e12,
"baud_rate": 32e9,
"f_max": 190.1e12,
"slot_width": 50e9,
"delta_pdb": 0,
"roll_off": 0.15,
"tx_osnr": 40,
"label": "lband"
}
]
}

View File

@@ -5,8 +5,8 @@
0.0359549,
5.82851
],
"f_min": 191.35e12,
"f_max": 196.1e12,
"f_min": 191.275e12,
"f_max": 196.125e12,
"nf_ripple": [
0.4372876328262819,
0.4372876328262819,

View File

@@ -12,24 +12,21 @@ import argparse
import logging
import sys
from math import ceil
from numpy import linspace, mean
from numpy import mean
from pathlib import Path
from copy import deepcopy
import gnpy.core.ansi_escapes as ansi_escapes
from gnpy.core.elements import Transceiver, Fiber, RamanFiber
from gnpy.core.equipment import trx_mode_params
from gnpy.core.elements import Transceiver, Fiber, RamanFiber, Roadm
import gnpy.core.exceptions as exceptions
from gnpy.core.network import add_missing_elements_in_network, design_network
from gnpy.core.parameters import SimParams
from gnpy.core.utils import db2lin, lin2db, automatic_nch, watt2dbm, dbm2watt
from gnpy.topology.request import (ResultElement, jsontocsv, compute_path_dsjctn, requests_aggregation,
BLOCKING_NOPATH, correct_json_route_list,
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.core.utils import lin2db, pretty_summary_print, per_label_average, watt2dbm
from gnpy.topology.request import (ResultElement, jsontocsv, BLOCKING_NOPATH)
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)
requests_from_json, save_json, load_initial_spectrum)
from gnpy.tools.plots import plot_baseline, plot_results
from gnpy.tools.worker_utils import designed_network, transmission_simulation, planning
_logger = logging.getLogger(__name__)
_examples_dir = Path(__file__).parent.parent / 'example-data'
@@ -144,19 +141,17 @@ def transmission_main_example(args=None):
sys.exit()
# First try to find exact match if source/destination provided
source = None
if args.source:
source = transceivers.pop(args.source, None)
valid_source = True if source else False
else:
source = None
_logger.info('No source node specified: picking random transceiver')
destination = None
nodes_list = []
loose_list = []
if args.destination:
destination = transceivers.pop(args.destination, None)
valid_destination = True if destination else False
else:
destination = None
_logger.info('No destination node specified: picking random transceiver')
# If no exact match try to find partial match
if args.source and not source:
@@ -173,107 +168,72 @@ def transmission_main_example(args=None):
if not source:
source = list(transceivers.values())[0]
del transceivers[source.uid]
_logger.info('No source node specified: picking random transceiver')
if not destination:
destination = list(transceivers.values())[0]
nodes_list = [destination.uid]
loose_list = ['STRICT']
_logger.info('No destination node specified: picking random transceiver')
_logger.info(f'source = {args.source!r}')
_logger.info(f'destination = {args.destination!r}')
_logger.info(f'source = {source.uid!r}')
_logger.info(f'destination = {destination.uid!r}')
params = {}
params['request_id'] = 0
params['trx_type'] = ''
params['trx_mode'] = ''
params['source'] = source.uid
params['destination'] = destination.uid
params['bidir'] = False
params['nodes_list'] = [destination.uid]
params['loose_list'] = ['strict']
params['format'] = ''
params['path_bandwidth'] = 0
params['effective_freq_slot'] = None
trx_params = trx_mode_params(equipment)
trx_params['power'] = dbm2watt(equipment['SI']['default'].power_dbm)
trx_params['tx_power'] = dbm2watt(equipment['SI']['default'].power_dbm)
if args.power:
trx_params['power'] = dbm2watt(float(args.power))
trx_params['tx_power'] = dbm2watt(float(args.power))
params.update(trx_params)
initial_spectrum = None
params['nb_channel'] = automatic_nch(trx_params['f_min'], trx_params['f_max'], trx_params['spacing'])
# use ref_req to hold reference channel used for design and req for the propagation
# and req to hold channels to be propagated
# apply power sweep on the design and on the channels
ref_req = PathRequest(**params)
pref_ch_db = watt2dbm(ref_req.power)
if args.spectrum:
# use the spectrum defined by user for the propagation.
# the nb of channel for design remains the one of the reference channel
initial_spectrum = load_initial_spectrum(args.spectrum)
params['nb_channel'] = len(initial_spectrum)
print('User input for spectrum used for propagation instead of SI')
req = PathRequest(**params)
p_ch_db = watt2dbm(req.power)
req.initial_spectrum = initial_spectrum
print(f'There are {req.nb_channel} channels propagating')
power_mode = equipment['Span']['default'].power_mode
print('\n'.join([f'Power mode is set to {power_mode}',
'=> it can be modified in eqpt_config.json - Span']))
if not args.no_insert_edfas:
try:
add_missing_elements_in_network(network, equipment)
except exceptions.NetworkTopologyError as e:
print(f'{ansi_escapes.red}Invalid network definition:{ansi_escapes.reset} {e}')
sys.exit(1)
except exceptions.ConfigurationError as e:
print(f'{ansi_escapes.red}Configuration error:{ansi_escapes.reset} {e}')
sys.exit(1)
path = compute_constrained_path(network, req)
spans = [s.params.length for s in path if isinstance(s, RamanFiber) or isinstance(s, Fiber)]
power_range = [0]
if power_mode:
# power cannot be changed in gain mode
try:
p_start, p_stop, p_step = equipment['SI']['default'].power_range_db
p_num = abs(int(round((p_stop - p_start) / p_step))) + 1 if p_step != 0 else 1
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]')
# initial network is designed using req.power. that is that any missing information (amp gain or delta_p) is filled
# using this req.power, previous to any sweep requested later on.
# Simulate !
try:
design_network(ref_req, network, equipment, set_connector_losses=True, verbose=True)
network, req, ref_req = designed_network(equipment, network, source.uid, destination.uid,
nodes_list=nodes_list, loose_list=loose_list,
args_power=args.power,
initial_spectrum=initial_spectrum,
no_insert_edfas=args.no_insert_edfas)
path, propagations_for_path, powers_dbm, infos = transmission_simulation(equipment, network, req, ref_req)
except exceptions.NetworkTopologyError as e:
print(f'{ansi_escapes.red}Invalid network definition:{ansi_escapes.reset} {e}')
sys.exit(1)
except exceptions.ConfigurationError as e:
print(f'{ansi_escapes.red}Configuration error:{ansi_escapes.reset} {e}')
sys.exit(1)
except exceptions.ServiceError as e:
print(f'Service error: {e}')
sys.exit(1)
except ValueError:
sys.exit(1)
# print or export results
spans = [s.params.length for s in path if isinstance(s, RamanFiber) or isinstance(s, Fiber)]
print(f'\nThere are {len(spans)} fiber spans over {sum(spans)/1000:.0f} km between {source.uid} '
f'and {destination.uid}')
print(f'\nNow propagating between {source.uid} and {destination.uid}:')
for dp_db in power_range:
ref_req.power = dbm2watt(pref_ch_db + dp_db)
req.power = dbm2watt(p_ch_db + dp_db)
design_network(ref_req, network, equipment, set_connector_losses=False, verbose=False)
# 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)
print(f'Reference used for design: (Input optical power reference in span = {watt2dbm(ref_req.power):.2f}dBm,\n'
+ f' spacing = {ref_req.spacing * 1e-9:.2f}GHz\n'
+ f' nb_channels = {ref_req.nb_channel})')
print('\nChannels propagating: (Input optical power deviation in span = '
+ f'{pretty_summary_print(per_label_average(infos.delta_pdb_per_channel, infos.label))}dB,\n'
+ ' spacing = '
+ f'{pretty_summary_print(per_label_average(infos.slot_width * 1e-9, infos.label))}GHz,\n'
+ ' transceiver output power = '
+ f'{pretty_summary_print(per_label_average(watt2dbm(infos.tx_power), infos.label))}dBm,\n'
+ f' nb_channels = {infos.number_of_channels})')
for path, power_dbm in zip(propagations_for_path, powers_dbm):
if power_mode:
print(f'\nPropagating with input power = {ansi_escapes.cyan}{watt2dbm(req.power):.2f} '
print(f'Input optical power reference in span = {ansi_escapes.cyan}{power_dbm:.2f} '
+ f'dBm{ansi_escapes.reset}:')
else:
print(f'\nPropagating in {ansi_escapes.cyan}gain mode{ansi_escapes.reset}: power cannot be set manually')
infos = propagate(path, req, equipment)
if len(power_range) == 1:
print('\nPropagating in {ansi_escapes.cyan}gain mode{ansi_escapes.reset}: power cannot be set manually')
if len(powers_dbm) == 1:
for elem in path:
print(elem)
if power_mode:
print(f'\nTransmission result for input power = {lin2db(req.power*1e3):.2f} dBm:')
print(f'\nTransmission result for input optical power reference in span = {power_dbm:.2f} dBm:')
else:
print(f'\nTransmission results:')
print(f' Final GSNR (0.1 nm): {ansi_escapes.cyan}{mean(destination.snr_01nm):.02f} dB{ansi_escapes.reset}')
@@ -339,111 +299,50 @@ def path_requests_run(args=None):
help='considers that all demands are bidir')
parser.add_argument('-o', '--output', type=Path, metavar=_help_fname_json_csv,
help='Store satisifed requests into a JSON or CSV file')
parser.add_argument('--redesign-per-request', action='store_true', help='Redesign the network at each request'
+ ' computation using the request as the reference channel')
args = parser.parse_args(args if args is not None else sys.argv[1:])
_setup_logging(args)
_logger.info(f'Computing path requests {args.service_filename.name} into JSON format')
(equipment, network) = load_common_data(args.equipment, args.topology, args.sim_params, args.save_network_before_autodesign)
(equipment, network) = \
load_common_data(args.equipment, args.topology, args.sim_params, args.save_network_before_autodesign)
# Build the network once using the default power defined in SI in eqpt config
# TODO power density: db2linp(ower_dbm": 0)/power_dbm": 0 * nb channels as defined by
# spacing, f_min and f_max
if not args.no_insert_edfas:
try:
add_missing_elements_in_network(network, equipment)
except exceptions.NetworkTopologyError as e:
print(f'{ansi_escapes.red}Invalid network definition:{ansi_escapes.reset} {e}')
sys.exit(1)
except exceptions.ConfigurationError as e:
print(f'{ansi_escapes.red}Configuration error:{ansi_escapes.reset} {e}')
sys.exit(1)
if args.save_network is not None:
save_network(network, args.save_network)
print(f'Network (after autodesign) saved to {args.save_network}')
params = {
'request_id': 'reference',
'trx_type': '',
'trx_mode': '',
'source': None,
'destination': None,
'bidir': False,
'nodes_list': [],
'loose_list': [],
'format': '',
'path_bandwidth': 0,
'effective_freq_slot': None,
'nb_channel': automatic_nch(equipment['SI']['default'].f_min, equipment['SI']['default'].f_max,
equipment['SI']['default'].spacing),
'power': dbm2watt(equipment['SI']['default'].power_dbm),
'tx_power': dbm2watt(equipment['SI']['default'].power_dbm)
}
trx_params = trx_mode_params(equipment)
params.update(trx_params)
reference_channel = PathRequest(**params)
try:
design_network(reference_channel, network, equipment, verbose=True)
network, _, _ = designed_network(equipment, network, no_insert_edfas=args.no_insert_edfas)
data = load_requests(args.service_filename, equipment, bidir=args.bidir,
network=network, network_filename=args.topology)
_data = requests_from_json(data, equipment)
oms_list, propagatedpths, reversed_propagatedpths, rqs, dsjn, result = \
planning(network, equipment, data, redesign=args.redesign_per_request)
except exceptions.NetworkTopologyError as e:
print(f'{ansi_escapes.red}Invalid network definition:{ansi_escapes.reset} {e}')
sys.exit(1)
except exceptions.ConfigurationError as e:
print(f'{ansi_escapes.red}Configuration error:{ansi_escapes.reset} {e}')
sys.exit(1)
if args.save_network is not None:
save_network(network, args.save_network)
print(f'{ansi_escapes.blue}Network (after autodesign) saved to {args.save_network}{ansi_escapes.reset}')
oms_list = build_oms_list(network, equipment)
try:
data = load_requests(args.service_filename, equipment, bidir=args.bidir,
network=network, network_filename=args.topology)
rqs = requests_from_json(data, equipment)
except exceptions.ServiceError as e:
print(f'{ansi_escapes.red}Service error:{ansi_escapes.reset} {e}')
sys.exit(1)
# check that request ids are unique. Non unique ids, may
# mess the computation: better to stop the computation
all_ids = [r.request_id for r in rqs]
if len(all_ids) != len(set(all_ids)):
for item in list(set(all_ids)):
all_ids.remove(item)
msg = f'Requests id {all_ids} are not unique'
_logger.critical(msg)
sys.exit()
rqs = correct_json_route_list(network, rqs)
# pths = compute_path(network, equipment, rqs)
dsjn = disjunctions_from_json(data)
print(f'{ansi_escapes.blue}List of disjunctions{ansi_escapes.reset}')
print(dsjn)
# need to warn or correct in case of wrong disjunction form
# disjunction must not be repeated with same or different ids
dsjn = deduplicate_disjunctions(dsjn)
# Aggregate demands with same exact constraints
print(f'{ansi_escapes.blue}Aggregating similar requests{ansi_escapes.reset}')
rqs, dsjn = requests_aggregation(rqs, dsjn)
# TODO export novel set of aggregated demands in a json file
print(f'{ansi_escapes.blue}The following services have been requested:{ansi_escapes.reset}')
print(rqs)
print(f'{ansi_escapes.blue}Computing all paths with constraints{ansi_escapes.reset}')
try:
pths = compute_path_dsjctn(network, equipment, rqs, dsjn)
except exceptions.DisjunctionError as this_e:
print(f'{ansi_escapes.red}Disjunction error:{ansi_escapes.reset} {this_e}')
sys.exit(1)
print(f'{ansi_escapes.blue}Propagating on selected path{ansi_escapes.reset}')
propagatedpths, reversed_pths, reversed_propagatedpths = compute_path_with_disjunction(network, equipment, rqs, pths)
# Note that deepcopy used in compute_path_with_disjunction returns
# a list of nodes which are not belonging to network (they are copies of the node objects).
# so there can not be propagation on these nodes.
pth_assign_spectrum(pths, rqs, oms_list, reversed_pths)
except exceptions.ServiceError as e:
print(f'Service error: {e}')
sys.exit(1)
except ValueError:
sys.exit(1)
print(f'{ansi_escapes.blue}List of disjunctions{ansi_escapes.reset}')
print(dsjn)
print(f'{ansi_escapes.blue}The following services have been requested:{ansi_escapes.reset}')
print(_data)
print(f'{ansi_escapes.blue}Result summary{ansi_escapes.reset}')
header = ['req id', ' demand', ' GSNR@bandwidth A-Z (Z-A)', ' GSNR@0.1nm A-Z (Z-A)',

View File

@@ -14,14 +14,15 @@ from pathlib import Path
import json
from collections import namedtuple
from numpy import arange
from copy import deepcopy
from gnpy.core import elements
from gnpy.core.equipment import trx_mode_params
from gnpy.core.equipment import trx_mode_params, find_type_variety
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, dbm2watt
from gnpy.core.parameters import DEFAULT_RAMAN_COEFFICIENT, EdfaParams
from gnpy.core.parameters import DEFAULT_RAMAN_COEFFICIENT, EdfaParams, MultiBandParams
from gnpy.topology.request import PathRequest, Disjunction, compute_spectrum_slot_vs_bandwidth
from gnpy.topology.spectrum_assignment import mvalue_to_slots
from gnpy.tools.convert import xls_to_json_data
@@ -192,11 +193,12 @@ class Amp(_JsonThing):
@classmethod
def from_json(cls, filename, **kwargs):
config = Path(filename).parent / 'default_edfa_config.json'
# default_edfa_config.json assumes a DGT profile independantly from fmin/fmax, that's a generic profile
type_variety = kwargs['type_variety']
type_def = kwargs.get('type_def', 'variable_gain') # default compatibility with older json eqpt files
nf_def = None
dual_stage_def = None
amplifiers = None
if type_def == 'fixed_gain':
try:
@@ -241,16 +243,25 @@ class Amp(_JsonThing):
preamp_variety = kwargs.pop('preamp_variety')
booster_variety = kwargs.pop('booster_variety')
except KeyError:
msg = f'missing preamp/booster variety input for amplifier: {type_variety} in equipment config'
raise EquipmentConfigError(msg)
raise EquipmentConfigError(f'missing preamp/booster variety input for amplifier: {type_variety}'
+ ' in equipment config')
dual_stage_def = Model_dual_stage(preamp_variety, booster_variety)
elif type_def == 'multi_band':
amplifiers = kwargs['amplifiers']
else:
raise EquipmentConfigError(f'Edfa type_def {type_def} does not exist')
json_data = load_json(config)
# raise an error if config does not contain f_min, f_max
if 'f_min' not in json_data or 'f_max' not in json_data:
raise EquipmentConfigError('default Edfa config does not contain f_min and f_max values.'
+ ' Please correct file.')
# use f_min, f_max from kwargs
if 'f_min' in kwargs:
json_data.pop('f_min', None)
json_data.pop('f_max', None)
return cls(**{**kwargs, **json_data,
'nf_model': nf_def, 'dual_stage_model': dual_stage_def})
'nf_model': nf_def, 'dual_stage_model': dual_stage_def, 'multi_band': amplifiers})
def _automatic_spacing(baud_rate):
@@ -367,6 +378,31 @@ def _update_dual_stage(equipment):
return equipment
def _update_band(equipment: dict) -> dict:
"""Creates a list of bands for this amplifier, and remove other parameters which are not applicable
"""
amp_dict = equipment['Edfa']
for amplifier in amp_dict.values():
if amplifier.type_def != 'multi_band':
amplifier.bands = [{'f_min': amplifier.f_min,
'f_max': amplifier.f_max}]
# updates band parameter
else:
_bands = [{'f_min': amp_dict[a].f_min,
'f_max': amp_dict[a].f_max} for a in amp_dict[amplifier.type_variety].multi_band]
# remove duplicates
amplifier.bands = []
for b in _bands:
if b not in amplifier.bands:
amplifier.bands.append(b)
# remove non applicable parameters
for key in ['f_min', 'f_max', 'gain_flatmax', 'gain_min', 'p_max', 'nf_model', 'dual_stage_model',
'nf_fit_coeff', 'nf_ripple', 'dgt', 'gain_ripple']:
delattr(amplifier, key)
return equipment
def _roadm_restrictions_sanity_check(equipment):
"""verifies that booster and preamp restrictions specified in roadm equipment are listed in the edfa."""
for roadm_type, roadm_eqpt in equipment['Roadm'].items():
@@ -428,7 +464,13 @@ def _equipment_from_json(json_data, filename):
raise EquipmentConfigError(f'Unrecognized network element type "{key}"')
_check_fiber_vs_raman_fiber(equipment)
equipment = _update_dual_stage(equipment)
equipment = _update_band(equipment)
_roadm_restrictions_sanity_check(equipment)
possible_SI = list(equipment['SI'].keys())
if 'default' not in possible_SI:
# Use "default" key in the equipment, using the first listed keys
equipment['SI']['default'] = equipment['SI'][possible_SI[0]]
del equipment['SI'][possible_SI[0]]
return equipment
@@ -464,6 +506,8 @@ def _cls_for(equipment_type):
return elements.Fiber
elif equipment_type == 'RamanFiber':
return elements.RamanFiber
elif equipment_type == 'Multiband_amplifier':
return elements.Multiband_amplifier
else:
raise ConfigurationError(f'Unknown network equipment "{equipment_type}"')
@@ -477,7 +521,55 @@ def network_from_json(json_data, equipment):
typ = el_config.pop('type')
variety = el_config.pop('type_variety', 'default')
cls = _cls_for(typ)
if typ == 'Fused':
if typ == 'Transceiver':
temp = el_config.setdefault('params', {})
if typ == 'Multiband_amplifier':
if variety in ['default', '']:
extra_params = None
temp = el_config.setdefault('params', {})
temp = merge_amplifier_restrictions(temp, deepcopy(MultiBandParams.default_values))
el_config['params'] = temp
else:
extra_params = equipment['Edfa'][variety]
temp = el_config.setdefault('params', {})
# use config params preferably to library params, only use library params to fill in
# the missing attribute
temp = merge_amplifier_restrictions(temp, deepcopy(extra_params.__dict__))
el_config['params'] = temp
el_config['type_variety'] = variety
# if config does not contain any amp list create one
amps = el_config.setdefault('amplifiers', [])
for amp in amps:
amp_variety = amp['type_variety'] # juste pour essayer
amp_extra_params = equipment['Edfa'][amp_variety]
temp = amp.setdefault('params', {})
temp = merge_amplifier_restrictions(temp, amp_extra_params.__dict__)
amp['params'] = temp
amp['type_variety'] = amp_variety
# check type_variety consistant with amps type_variety
if amps:
try:
multiband_type_variety = find_type_variety([a['type_variety'] for a in amps], equipment)
except ConfigurationError as e:
msg = f'Node {el_config["uid"]}: {e}'
raise ConfigurationError(msg)
if variety is not None and variety != multiband_type_variety:
raise ConfigurationError(f'In node {el_config["uid"]}: multiband amplifier type_variety is not '
+ 'consistent with its amps type varieties.')
if not amps and extra_params is not None:
# the amp config does not contain the amplifiers operational settings, but has a type_variety
# defined so that it is possible to create the template of amps for design for each band. This
# defines the default design bands.
# This lopp populates each amp with default values, for each band
for band in extra_params.bands:
params = {k: v for k, v in Amp.default_values.items()}
# update frequencies with band values
params['f_min'] = band['f_min']
params['f_max'] = band['f_max']
amps.append({'params': params})
# without type_variety, it is not possible to set the amplifier dict at this point: need to wait
# for design, and use user defined design-bands
elif typ == 'Fused':
# well, there's no variety for the 'Fused' node type
pass
elif variety in equipment[typ]:

248
gnpy/tools/worker_utils.py Normal file
View File

@@ -0,0 +1,248 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'''
gnpy.tools.worker_utils
=======================
Common code for CLI examples and API
'''
import logging
from copy import deepcopy
from typing import Union, List, Tuple
from numpy import linspace
from networkx import DiGraph
from gnpy.core.utils import automatic_nch, watt2dbm, dbm2watt, pretty_summary_print, per_label_average
from gnpy.core.equipment import trx_mode_params
from gnpy.core.network import add_missing_elements_in_network, design_network
from gnpy.core import exceptions
from gnpy.core.info import SpectralInformation
from gnpy.topology.spectrum_assignment import build_oms_list, pth_assign_spectrum, OMS
from gnpy.topology.request import correct_json_route_list, deduplicate_disjunctions, requests_aggregation, \
compute_path_dsjctn, compute_path_with_disjunction, ResultElement, PathRequest, Disjunction, \
compute_constrained_path, propagate
from gnpy.tools.json_io import requests_from_json, disjunctions_from_json
logger = logging.getLogger(__name__)
def designed_network(equipment: dict, network: DiGraph, source: str = None, destination: str = None,
nodes_list: List[str] = None, loose_list: List[str] = None,
initial_spectrum: dict = None, no_insert_edfas: bool = False,
args_power: Union[str, float, int] = None,
service_req: PathRequest = None) -> Tuple[DiGraph, PathRequest, PathRequest]:
"""Build the reference channels based on inputs and design the network for this reference channel, and build the
channel to be propagated for the single transmission script.
Reference channel (target input power in spans, nb of channels, transceiver output power) is built using
equipment['SI'] information. If indicated, with target input power in spans is updated with args_power.
Channel to be propagated is using the same channel reference, except if different settings are provided
with service_req and initial_spectrum. The service to be propagated uses specified source, destination
and list nodes_list of include nodes constraint except if the service_req is specified.
Args:
- equipment: a dictionary containing equipment information.
- network: a directed graph representing the initial network.
- no_insert_edfas: a boolean indicating whether to insert EDFAs in the network.
- args_power: the power to be used for the network design.
- service_req: the service request the user wants to propagate.
- source: the source node for the channel to be propagated if no service_req is specified.
- destination: the destination node for the channel to be propagated if no service_req is specified.
- nodes_list: a list of nodes to be included ifor the channel to be propagated if no service_req is specified.
- loose_list: a list of loose nodes to be included in the network design.
- initial_spectrum: a dictionary representing the initial spectrum to propagate.
Returns:
- The designed network.
- The channel to propagate.
- The reference channel used for the design.
"""
if loose_list is None:
loose_list = []
if nodes_list is None:
nodes_list = []
if not no_insert_edfas:
add_missing_elements_in_network(network, equipment)
if not nodes_list:
if destination:
nodes_list = [destination]
loose_list = ['STRICT']
else:
nodes_list = []
loose_list = []
params = {
'request_id': 'reference',
'trx_type': '',
'trx_mode': '',
'source': source,
'destination': destination,
'bidir': False,
'nodes_list': nodes_list,
'loose_list': loose_list,
'format': '',
'path_bandwidth': 0,
'effective_freq_slot': None,
'nb_channel': automatic_nch(equipment['SI']['default'].f_min, equipment['SI']['default'].f_max,
equipment['SI']['default'].spacing),
'power': dbm2watt(equipment['SI']['default'].power_dbm),
'tx_power': None
}
params['tx_power'] = dbm2watt(equipment['SI']['default'].power_dbm)
if equipment['SI']['default'].tx_power_dbm is not None:
# use SI tx_power if present
params['tx_power'] = dbm2watt(equipment['SI']['default'].tx_power_dbm)
trx_params = trx_mode_params(equipment)
params.update(trx_params)
# use args_power instead of si
if args_power:
params['power'] = dbm2watt(float(args_power))
if equipment['SI']['default'].tx_power_dbm is None:
params['tx_power'] = params['power']
# use si as reference channel
reference_channel = PathRequest(**params)
# temporary till multiband design feat is available: do not design for L band
reference_channel.nb_channel = min(params['nb_channel'], automatic_nch(191.2e12, 196.0e12, params['spacing']))
if service_req:
# use service_req as reference channel with si tx_power if service_req tx_power is None
if service_req.tx_power is None:
service_req.tx_power = params['tx_power']
reference_channel = service_req
design_network(reference_channel, network, equipment, set_connector_losses=True, verbose=True)
if initial_spectrum:
params['nb_channel'] = len(initial_spectrum)
req = PathRequest(**params)
if service_req:
req = service_req
req.initial_spectrum = initial_spectrum
return network, req, reference_channel
def check_request_path_ids(rqs: List[PathRequest]):
"""check that request ids are unique. Non unique ids, may
mess the computation: better to stop the computation
"""
all_ids = [r.request_id for r in rqs]
if len(all_ids) != len(set(all_ids)):
for item in list(set(all_ids)):
all_ids.remove(item)
msg = f'Requests id {all_ids} are not unique'
logger.error(msg)
raise ValueError(msg)
def planning(network: DiGraph, equipment: dict, data: dict, redesign: bool = False) \
-> Tuple[List[OMS], list, list, List[PathRequest], List[Disjunction], List[ResultElement]]:
"""Run planning
data contain the service dict from json
redesign True means that network is redesign using each request as reference channel
when False it means that the design is made once and successive propagation use the settings
computed with this design.
"""
oms_list = build_oms_list(network, equipment)
rqs = requests_from_json(data, equipment)
# check that request ids are unique.
check_request_path_ids(rqs)
rqs = correct_json_route_list(network, rqs)
dsjn = disjunctions_from_json(data)
logger.info('List of disjunctions:\n%s', dsjn)
# need to warn or correct in case of wrong disjunction form
# disjunction must not be repeated with same or different ids
dsjn = deduplicate_disjunctions(dsjn)
logger.info('Aggregating similar requests')
rqs, dsjn = requests_aggregation(rqs, dsjn)
logger.info('The following services have been requested:\n%s', rqs)
# logger.info('Computing all paths with constraints for request %s', optical_path_result_id)
pths = compute_path_dsjctn(network, equipment, rqs, dsjn)
logger.info('Propagating on selected path')
propagatedpths, reversed_pths, reversed_propagatedpths = \
compute_path_with_disjunction(network, equipment, rqs, pths, redesign=redesign)
# Note that deepcopy used in compute_path_with_disjunction returns
# a list of nodes which are not belonging to network (they are copies of the node objects).
# so there can not be propagation on these nodes.
# Allowed user_policy are first_fit and 2partition
pth_assign_spectrum(pths, rqs, oms_list, reversed_pths)
for i, rq in enumerate(rqs):
if hasattr(rq, 'OSNR') and rq.OSNR:
rq.osnr_with_sys_margin = rq.OSNR + equipment["SI"]["default"].sys_margins
# assumes that list of rqs and list of propgatedpths have same order
result = [ResultElement(rq, pth, rpth) for rq, pth, rpth in zip(rqs, propagatedpths, reversed_propagatedpths)]
return oms_list, propagatedpths, reversed_propagatedpths, rqs, dsjn, result
def transmission_simulation(equipment: dict, network: DiGraph, req: PathRequest, ref_req: PathRequest) \
-> Tuple[list, List[list], List[Union[float, int]], SpectralInformation]:
"""Run simulation and returms the propagation result for each power sweep iteration.
Args:
- equipment: a dictionary containing equipment information.
- network: network after being designed using ref_req. Any missing information (amp gain or delta_p) must have
been filled using ref_req as reference channel previuos to this function.
- req: channel to be propagated.
- ref_req: the reference channel used for filling missing information in the network.
In case of power sweep, network is redesigned using ref_req whose target input power in span is
updated with the power step.
Returns a tuple containing:
- path: last propagated path. Power sweep is not possible with gain mode (as gain targets are used)
- propagations: list of propagated path for each power iteration
- powers_dbm: list of power used for the power sweep
- infos: last propagated spectral information
"""
power_mode = equipment['Span']['default'].power_mode
logger.info('Power mode is set to %s=> it can be modified in eqpt_config.json - Span', power_mode)
# initial network is designed using ref_req. that is that any missing information (amp gain or delta_p) is filled
# using this ref_req.power, previous to any sweep requested later on.
pref_ch_db = watt2dbm(ref_req.power)
p_ch_db = watt2dbm(req.power)
path = compute_constrained_path(network, req)
power_range = [0]
if power_mode:
# power cannot be changed in gain mode
try:
p_start, p_stop, p_step = equipment['SI']['default'].power_range_db
p_num = abs(int(round((p_stop - p_start) / p_step))) + 1 if p_step != 0 else 1
power_range = list(linspace(p_start, p_stop, p_num))
except TypeError as e:
msg = 'invalid power range definition in eqpt_config, should be power_range_db: [lower, upper, step]'
logger.error(msg)
raise exceptions.EquipmentConfigError(msg) from e
logger.info('Now propagating between %s and %s', req.source, req.destination)
propagations = []
powers_dbm = []
for dp_db in power_range:
ref_req.power = dbm2watt(pref_ch_db + dp_db)
req.power = dbm2watt(p_ch_db + dp_db)
# Power sweep is made to evaluate different span input powers, so redesign is mandatory for each power,
# but no need to redesign if there are no power sweep
if len(power_range) > 1:
design_network(ref_req, network.subgraph(path), equipment, set_connector_losses=False, verbose=False)
infos = propagate(path, req, equipment)
propagations.append(deepcopy(path))
powers_dbm.append(pref_ch_db + dp_db)
logger.info('\nChannels propagating: (Input optical power deviation in span = '
+ f'{pretty_summary_print(per_label_average(infos.delta_pdb_per_channel, infos.label))}dB,\n'
+ ' spacing = '
+ f'{pretty_summary_print(per_label_average(infos.slot_width * 1e-9, infos.label))}GHz,\n'
+ ' transceiver output power = '
+ f'{pretty_summary_print(per_label_average(watt2dbm(infos.tx_power), infos.label))}dBm,\n'
+ f' nb_channels = {infos.number_of_channels})')
if not power_mode:
logger.info('\n\tPropagating using gain targets: Input optical power deviation in span ignored')
return path, propagations, powers_dbm, infos

View File

@@ -16,14 +16,17 @@ See: draft-ietf-teas-yang-path-computation-01.txt
"""
from collections import namedtuple, OrderedDict
from typing import List
from logging import getLogger
from networkx import (dijkstra_path, NetworkXNoPath,
all_simple_paths, shortest_simple_paths)
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, carriers_to_spectral_information
from gnpy.core.elements import Transceiver, Roadm, Edfa, Multiband_amplifier
from gnpy.core.utils import lin2db, find_common_range
from gnpy.core.info import create_input_spectral_information, carriers_to_spectral_information, \
demuxed_spectral_information, muxed_spectral_information, SpectralInformation
from gnpy.core import network as network_module
from gnpy.core.exceptions import ServiceError, DisjunctionError
from copy import deepcopy
@@ -332,19 +335,40 @@ def compute_constrained_path(network, req):
return total_path
def filter_si(path: list, equipment: dict, si: SpectralInformation) -> SpectralInformation:
"""Filter spectral information based on the amplifiers common range"""
# First retrieve f_min, f_max spectrum according to amplifiers' spectrum on the path
common_range = find_elements_common_range(path, equipment)
# filter out frequencies that should not be created
filtered_si = []
for band in common_range:
temp = demuxed_spectral_information(si, band)
if temp:
filtered_si.append(temp)
if not filtered_si:
raise ValueError('Defined propagation band does not match amplifiers band.')
return muxed_spectral_information(filtered_si)
def propagate(path, req, equipment):
"""propagates signals in each element according to initial spectrum set by user"""
"""propagates signals in each element according to initial spectrum set by user
Spectrum is specified in request through f_min, f_max and spacing, or initial_spectrum
and amps frequency band on the path is used to filter out frequencies"""
# generates spectrum based on request
if req.initial_spectrum is not None:
si = carriers_to_spectral_information(initial_spectrum=req.initial_spectrum, power=req.power)
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,
spacing=req.spacing, tx_osnr=req.tx_osnr, tx_power=req.tx_power, delta_pdb=req.offset_db)
# filter out frequencies that should not be created
si = filter_si(path, equipment, si)
roadm_osnr = []
for i, el in enumerate(path):
if isinstance(el, Roadm):
si = el(si, degree=path[i + 1].uid, from_degree=path[i - 1].uid)
roadm_osnr.append(el.get_roadm_path(from_degree=path[i - 1].uid, to_degree=path[i + 1].uid).impairment.osnr)
roadm_osnr.append(el.get_impairment('roadm-osnr', si.frequency,
from_degree=path[i - 1].uid, degree=path[i + 1].uid))
else:
si = el(si)
path[0].update_snr(si.tx_osnr)
@@ -385,11 +409,13 @@ def propagate_and_optimize_mode(path, req, equipment):
baud_rate=this_br, spacing=req.spacing,
delta_pdb=this_offset, tx_osnr=req.tx_osnr,
tx_power=req.tx_power)
spc_info = filter_si(path, equipment, spc_info)
roadm_osnr = []
for i, el in enumerate(path):
if isinstance(el, Roadm):
spc_info = el(spc_info, degree=path[i + 1].uid, from_degree=path[i - 1].uid)
roadm_osnr.append(el.get_roadm_path(from_degree=path[i - 1].uid, to_degree=path[i + 1].uid).impairment.osnr)
roadm_osnr.append(el.get_impairment('roadm-osnr', spc_info.frequency,
from_degree=path[i - 1].uid, degree=path[i + 1].uid))
else:
spc_info = el(spc_info)
for this_mode in modes_to_explore:
@@ -1071,7 +1097,7 @@ def deduplicate_disjunctions(disjn):
return local_disjn
def compute_path_with_disjunction(network, equipment, pathreqlist, pathlist):
def compute_path_with_disjunction(network, equipment, pathreqlist, pathlist, redesign=False):
"""use a list but a dictionnary might be helpful to find path based on request_id
TODO change all these req, dsjct, res lists into dict !
@@ -1080,6 +1106,10 @@ def compute_path_with_disjunction(network, equipment, pathreqlist, pathlist):
reversed_path_res_list = []
propagated_reversed_path_res_list = []
total_nb_requests = len(pathreqlist)
if redesign:
LOGGER.warning('Redesign the network for each request channel, '
+ 'using the request channel as the reference channel for the design.')
for i, pathreq in enumerate(pathreqlist):
# use the power specified in requests but might be different from the one
@@ -1097,7 +1127,16 @@ def compute_path_with_disjunction(network, equipment, pathreqlist, pathlist):
# elements to simulate performance, several demands having the same destination
# may use the same transponder for the performance simulation. This is why
# we use deepcopy: to ensure that each propagation is recorded and not overwritten
network_module.design_network(pathreq, network, equipment, set_connector_losses=False, verbose=False)
# reversed path is needed for correct spectrum assignment
if redesign:
# this is the legacy case where network was automatically redesigned using the
# request channel as reference (nb and power used for amplifiers total power out)
reversed_path = []
if pathlist[i]:
reversed_path = find_reversed_path(pathlist[i])
network_nodes_for_redesign = pathlist[i] + reversed_path
network_module.design_network(pathreq, network.subgraph(network_nodes_for_redesign), equipment,
set_connector_losses=False, verbose=False)
total_path = deepcopy(pathlist[i])
msg = msg + f'\n\tComputed path (roadms):{[e.uid for e in total_path if isinstance(e, Roadm)]}'
LOGGER.info(msg)
@@ -1212,3 +1251,11 @@ def _penalty_msg(total_path, msg, min_ind):
else:
msg += f'\n\t{pretty} penalty not evaluated'
return msg
def find_elements_common_range(el_list: list, equipment: dict) -> List[dict]:
"""Find the common frequency range of amps of a given list of elements (for example an OMS or a path)
If there are no amplifiers in the path, then use the SI
"""
amp_bands = [n.params.bands for n in el_list if isinstance(n, (Edfa, Multiband_amplifier))]
return find_common_range(amp_bands, equipment['SI']['default'].f_min, equipment['SI']['default'].f_max)

View File

@@ -15,28 +15,31 @@ element/oms correspondace
from collections import namedtuple
from logging import getLogger
from gnpy.core.elements import Roadm, Transceiver
from gnpy.core.elements import Roadm, Transceiver, Edfa, Multiband_amplifier
from gnpy.core.exceptions import ServiceError, SpectrumError
from gnpy.core.utils import order_slots, restore_order
from gnpy.topology.request import compute_spectrum_slot_vs_bandwidth
from gnpy.topology.request import compute_spectrum_slot_vs_bandwidth, find_elements_common_range
LOGGER = getLogger(__name__)
GUARDBAND = 25e9
class Bitmap:
"""records the spectrum occupation"""
def __init__(self, f_min, f_max, grid, guardband=0.15e12, bitmap=None):
# n is the min index including guardband. Guardband is require to be sure
def __init__(self, f_min, f_max, grid, guardband=GUARDBAND, bitmap=None):
# n is the min index including guardband. Guardband is required to be sure
# that a channel can be assigned with center frequency fmin (means that its
# slot occupation goes below freq_index_min
n_min = frequency_to_n(f_min - guardband, grid)
n_max = frequency_to_n(f_max + guardband, grid) - 1
n_min = frequency_to_n(f_min, grid)
n_max = frequency_to_n(f_max, grid)
self.n_min = n_min
self.n_max = n_max
self.freq_index_min = frequency_to_n(f_min)
self.freq_index_max = frequency_to_n(f_max)
self.freq_index_min = frequency_to_n(f_min + guardband)
self.freq_index_max = frequency_to_n(f_max - guardband)
self.freq_index = list(range(n_min, n_max + 1))
self.guardband = guardband
if bitmap is None:
self.bitmap = [1] * (n_max - n_min + 1)
elif len(bitmap) == len(self.freq_index):
@@ -83,7 +86,6 @@ class OMS:
self.spectrum_bitmap = []
self.nb_channels = 0
self.service_list = []
# TODO
def __str__(self):
return '\n\t'.join([f'{type(self).__name__} {self.oms_id}',
@@ -98,7 +100,7 @@ class OMS:
self.el_id_list.append(elem.uid)
self.el_list.append(elem)
def update_spectrum(self, f_min, f_max, guardband=0.15e12, existing_spectrum=None, grid=0.00625e12):
def update_spectrum(self, f_min, f_max, guardband=GUARDBAND, existing_spectrum=None, grid=0.00625e12):
"""Frequencies expressed in Hz.
Add 150 GHz margin to enable a center channel on f_min
Use ITU-T G694.1 Flexible DWDM grid definition
@@ -226,6 +228,40 @@ def align_grids(oms_list):
return oms_list
def find_network_freq_range(network, equipment):
"""Find the lowest freq from amps and highest freq among all amps to determine the resulting bitmap
"""
amp_bands = [band for n in network.nodes() if isinstance(n, (Edfa, Multiband_amplifier)) for band in n.params.bands]
min_frequencies = [a['f_min'] for a in amp_bands]
max_frequencies = [a['f_max'] for a in amp_bands]
return min(min_frequencies), max(max_frequencies)
def create_oms_bitmap(oms, equipment, f_min, f_max, guardband, grid):
"""Find the highest low freq from oms amps and lowest high freq among oms amps to determine
the possible bitmap window.
f_min and f_max represent the useable spectrum (not the useable center frequencies)
ie n smaller than frequency_to_n(min_freq, grid) are not useable
"""
n_min = frequency_to_n(f_min, grid)
n_max = frequency_to_n(f_max, grid) - 1
common_range = find_elements_common_range(oms.el_list, equipment)
band0 = common_range[0]
band0_n_min = frequency_to_n(band0['f_min'], grid)
band0_n_max = frequency_to_n(band0['f_max'], grid)
bitmap = [0] * (band0_n_min - n_min) + [1] * (band0_n_max - band0_n_min + 1)
i = 1
while i < len(common_range):
band = common_range[i]
band_n_min = frequency_to_n(band['f_min'], grid)
band_n_max = frequency_to_n(band['f_max'], grid)
bitmap = bitmap + [0] * (band_n_min - band0_n_max - 1) + [1] * (band_n_max - band_n_min + 1)
band0_n_max = band_n_max
i += 1
bitmap = bitmap + [0] * (n_max - band0_n_max)
return bitmap
def build_oms_list(network, equipment):
"""initialization of OMS list in the network
@@ -237,7 +273,15 @@ def build_oms_list(network, equipment):
"""
oms_id = 0
oms_list = []
for node in [n for n in network.nodes() if isinstance(n, Roadm)]:
# identify all vertices of OMS: of course ROADM, but aso links to external chassis transponders
oms_vertices = [n for n in network.nodes() if isinstance(n, Roadm)] +\
[n for n in network.nodes() if isinstance(n, Transceiver)
and not isinstance(next(network.successors(n)), Roadm)]
# determine the size of the bitmap common to all the omses: find min and max frequencies of all amps
# in the network. These gives the band not the center frequency. Thhen we use a reference channel
# slot width (50GHz) to set the f_min, f_max
f_min, f_max = find_network_freq_range(network, equipment)
for node in oms_vertices:
for edge in network.edges([node]):
if not isinstance(edge[1], Transceiver):
nd_in = edge[0] # nd_in is a Roadm
@@ -271,8 +315,9 @@ def build_oms_list(network, equipment):
nd_out.oms_list = []
nd_out.oms_list.append(oms_id)
oms.update_spectrum(equipment['SI']['default'].f_min,
equipment['SI']['default'].f_max, grid=0.00625e12)
bitmap = create_oms_bitmap(oms, equipment, f_min=f_min, f_max=f_max, guardband=GUARDBAND,
grid=0.00625e12)
oms.update_spectrum(f_min, f_max, guardband=GUARDBAND, grid=0.00625e12, existing_spectrum=bitmap)
# oms.assign_spectrum(13,7) gives back (193137500000000.0, 193225000000000.0)
# as in the example in the standard
# oms.assign_spectrum(13,7)
@@ -333,10 +378,11 @@ def aggregate_oms_bitmap(path_oms, oms_list):
'el_id_list': 0,
'el_list': []
}
freq_min = nvalue_to_frequency(spectrum.freq_index_min)
freq_max = nvalue_to_frequency(spectrum.freq_index_max)
freq_min = nvalue_to_frequency(spectrum.n_min)
freq_max = nvalue_to_frequency(spectrum.n_max)
aggregate_oms = OMS(**params)
aggregate_oms.update_spectrum(freq_min, freq_max, grid=0.00625e12, existing_spectrum=bitmap)
aggregate_oms.update_spectrum(freq_min, freq_max, grid=0.00625e12, guardband=spectrum.guardband,
existing_spectrum=bitmap)
return aggregate_oms

View File

@@ -1,6 +1,6 @@
{
"f_min": 191.35e12,
"f_max": 196.1e12,
"f_min": 191.275e12,
"f_max": 196.125e12,
"nf_ripple": [
0.0,
0.0,

View File

@@ -128,6 +128,19 @@
"roadm-pmax": 2.5,
"roadm-osnr": 41,
"roadm-noise-figure": 23
}, {
"frequency-range": {
"lower-frequency": 186.3e12,
"upper-frequency": 190.1e12
},
"roadm-pmd": 0,
"roadm-cd": 0,
"roadm-pdl": 0.5,
"roadm-inband-crosstalk": 0,
"roadm-maxloss": 5,
"roadm-pmax": 0,
"roadm-osnr": 35,
"roadm-noise-figure": 6
}]
}, {
"roadm-path-impairments-id": 2,
@@ -162,6 +175,7 @@
}
],
"SI": [{
"type_variety": "default",
"f_min": 191.3e12,
"f_max": 196.1e12,
"baud_rate": 32e9,
@@ -171,7 +185,7 @@
"roll_off": 0.15,
"tx_osnr": 100,
"sys_margins": 0
}],
}],
"Transceiver":[
{
"type_variety": "vendorA_trx-type1",

View File

@@ -0,0 +1,396 @@
{ "Edfa":[{
"type_variety": "CienaDB_medium_gain",
"type_def": "advanced_model",
"gain_flatmax": 25,
"gain_min": 15,
"p_max": 21,
"advanced_config_from_json": "std_medium_gain_advanced_config.json",
"out_voa_auto": false,
"allowed_for_design": true
},
{
"type_variety": "std_medium_gain",
"f_min": 191.25e12,
"f_max": 196.15e12,
"type_def": "variable_gain",
"gain_flatmax": 26,
"gain_min": 15,
"p_max": 21,
"nf_min": 6,
"nf_max": 10,
"out_voa_auto": false,
"allowed_for_design": true
},
{
"type_variety": "std_medium_gain_L",
"f_min": 186.55e12,
"f_max": 190.05e12,
"type_def": "variable_gain",
"gain_flatmax": 26,
"gain_min": 15,
"p_max": 21,
"nf_min": 6,
"nf_max": 10,
"out_voa_auto": false,
"allowed_for_design": true
},
{
"type_variety": "std_low_gain",
"f_min": 191.25e12,
"f_max": 196.15e12,
"type_def": "variable_gain",
"gain_flatmax": 16,
"gain_min": 8,
"p_max": 21,
"nf_min": 7,
"nf_max": 11,
"out_voa_auto": false,
"allowed_for_design": true
},
{
"type_variety": "std_low_gain_reduced_band",
"f_min": 192.25e12,
"f_max": 196.15e12,
"type_def": "variable_gain",
"gain_flatmax": 16,
"gain_min": 8,
"p_max": 21,
"nf_min": 7,
"nf_max": 11,
"out_voa_auto": false,
"allowed_for_design": true
},
{
"type_variety": "std_low_gain_reduced",
"f_min": 192.25e12,
"f_max": 196.15e12,
"type_def": "variable_gain",
"gain_flatmax": 16,
"gain_min": 8,
"p_max": 21,
"nf_min": 7,
"nf_max": 11,
"out_voa_auto": false,
"allowed_for_design": true
},
{
"type_variety": "std_low_gain_bis",
"f_min": 191.25e12,
"f_max": 196.15e12,
"type_def": "variable_gain",
"gain_flatmax": 16,
"gain_min": 8,
"p_max": 21,
"nf_min": 6,
"nf_max": 10,
"out_voa_auto": false,
"allowed_for_design": true
}, {
"type_variety": "std_low_gain_L_ter",
"f_min": 186.55e12,
"f_max": 190.05e12,
"type_def": "variable_gain",
"gain_flatmax": 16,
"gain_min": 8,
"p_max": 16,
"nf_min": 7,
"nf_max": 11,
"out_voa_auto": false,
"allowed_for_design": true
},
{
"type_variety": "std_low_gain_L",
"f_min": 186.55e12,
"f_max": 190.05e12,
"type_def": "variable_gain",
"gain_flatmax": 16,
"gain_min": 8,
"p_max": 21,
"nf_min": 7,
"nf_max": 11,
"out_voa_auto": false,
"allowed_for_design": true
},
{
"type_variety": "std_low_gain_L_reduced_band",
"f_min": 187.3e12,
"f_max": 190.05e12,
"type_def": "variable_gain",
"gain_flatmax": 16,
"gain_min": 8,
"p_max": 21,
"nf_min": 7,
"nf_max": 11,
"out_voa_auto": false,
"allowed_for_design": true
},
{
"type_variety": "test",
"type_def": "variable_gain",
"gain_flatmax": 25,
"gain_min": 15,
"p_max": 21,
"nf_min": 5.8,
"nf_max": 10,
"out_voa_auto": false,
"allowed_for_design": true
},
{
"type_variety": "test_fixed_gain",
"type_def": "fixed_gain",
"gain_flatmax": 21,
"gain_min": 20,
"p_max": 21,
"nf0": 5,
"allowed_for_design": true
},
{
"type_variety": "std_booster",
"type_def": "fixed_gain",
"gain_flatmax": 21,
"gain_min": 20,
"p_max": 21,
"nf0": 5,
"allowed_for_design": false
}, {
"type_variety": "std_booster_L",
"f_min": 186.55e12,
"f_max": 190.05e12,
"type_def": "fixed_gain",
"gain_flatmax": 21,
"gain_min": 20,
"p_max": 21,
"nf0": 5,
"allowed_for_design": false
}, {
"type_variety": "std_booster_multiband",
"type_def": "multi_band",
"amplifiers": [
"std_booster",
"std_booster_L"
],
"allowed_for_design": false
}, {
"type_variety": "std_medium_gain_multiband",
"type_def": "multi_band",
"amplifiers": [
"std_medium_gain",
"std_medium_gain_L"
],
"allowed_for_design": true
},
{
"type_variety": "std_low_gain_multiband",
"type_def": "multi_band",
"amplifiers": [
"std_low_gain",
"std_low_gain_L"
],
"allowed_for_design": false
}, {
"type_variety": "std_low_gain_multiband_ter",
"type_def": "multi_band",
"amplifiers": [
"std_low_gain",
"std_low_gain_L_ter"
],
"allowed_for_design": false
}, {
"type_variety": "std_low_gain_multiband_bis",
"type_def": "multi_band",
"amplifiers": [
"std_low_gain_bis",
"std_low_gain_L"
],
"allowed_for_design": true
}, {
"type_variety": "std_low_gain_multiband_reduced_bis",
"type_def": "multi_band",
"amplifiers": [
"std_low_gain_reduced",
"std_low_gain_L"
],
"allowed_for_design": true
}, {
"type_variety": "std_low_gain_multiband_reduced",
"type_def": "multi_band",
"amplifiers": [
"std_low_gain_bis",
"std_low_gain_L_reduced_band"
],
"allowed_for_design": true
}
],
"Fiber":[{
"type_variety": "SSMF",
"dispersion": 1.67e-05,
"effective_area": 83e-12,
"pmd_coef": 1.265e-15
}
],
"Span":[{
"power_mode":true,
"delta_power_range_db": [0,0,0.5],
"max_fiber_lineic_loss_for_raman": 0.25,
"target_extended_gain": 2.5,
"max_length": 150,
"length_units": "km",
"max_loss": 28,
"padding": 10,
"EOL": 0,
"con_in": 0,
"con_out": 0
}
],
"Roadm":[{
"target_pch_out_db": -20,
"add_drop_osnr": 38,
"pmd": 0,
"pdl": 0,
"restrictions": {
"preamp_variety_list":[],
"booster_variety_list":[]
}
}],
"SI":[{
"f_min": 191.3e12,
"f_max":196.1e12,
"baud_rate": 32e9,
"spacing": 50e9,
"power_dbm": 0,
"power_range_db": [0,0,0.5],
"roll_off": 0.15,
"tx_osnr": 100,
"sys_margins": 0
}],
"Transceiver":[
{
"type_variety": "vendorA_trx-type1",
"frequency":{
"min": 191.35e12,
"max": 196.1e12
},
"mode":[
{
"format": "PS_SP64_1",
"baud_rate": 32e9,
"OSNR": 11,
"bit_rate": 100e9,
"roll_off": 0.15,
"tx_osnr": 100,
"min_spacing": 50e9,
"cost":1
},
{
"format": "PS_SP64_2",
"baud_rate": 64e9,
"OSNR": 15,
"bit_rate": 200e9,
"roll_off": 0.15,
"tx_osnr": 100,
"min_spacing": 75e9,
"cost":1
},
{
"format": "mode 1",
"baud_rate": 32e9,
"OSNR": 11,
"bit_rate": 100e9,
"roll_off": 0.15,
"tx_osnr": 100,
"min_spacing": 50e9,
"cost":1
},
{
"format": "mode 2",
"baud_rate": 64e9,
"OSNR": 15,
"bit_rate": 200e9,
"roll_off": 0.15,
"tx_osnr": 100,
"min_spacing": 75e9,
"cost":1
}
]
},
{
"type_variety": "Voyager_16QAM",
"frequency":{
"min": 191.35e12,
"max": 196.1e12
},
"mode":[
{
"format": "16QAM",
"baud_rate": 32e9,
"OSNR": 19,
"bit_rate": 200e9,
"roll_off": 0.15,
"tx_osnr": 100,
"min_spacing": 50e9,
"cost":1
}
]
},
{
"type_variety": "Voyager",
"frequency":{
"min": 191.35e12,
"max": 196.1e12
},
"mode":[
{
"format": "mode 1",
"baud_rate": 32e9,
"OSNR": 12,
"bit_rate": 100e9,
"roll_off": 0.15,
"tx_osnr": 45,
"min_spacing": 50e9,
"cost":1
},
{
"format": "mode 3",
"baud_rate": 44e9,
"OSNR": 18,
"bit_rate": 300e9,
"roll_off": 0.15,
"tx_osnr": 45,
"min_spacing": 62.5e9,
"cost":1
},
{
"format": "mode 2",
"baud_rate": 66e9,
"OSNR": 21,
"bit_rate": 400e9,
"roll_off": 0.15,
"tx_osnr": 45,
"min_spacing": 75e9,
"cost":1
},
{
"format": "mode 2 - fake",
"baud_rate": 66e9,
"OSNR": 21,
"bit_rate": 400e9,
"roll_off": 0.15,
"tx_osnr": 45,
"min_spacing": 75e9,
"cost":1
},
{
"format": "mode 4",
"baud_rate": 66e9,
"OSNR": 16,
"bit_rate": 200e9,
"roll_off": 0.15,
"tx_osnr": 45,
"min_spacing": 75e9,
"cost":1
}
]
}
]
}

View File

@@ -2,7 +2,7 @@
"raman_params": {
"flag": true,
"result_spatial_resolution": 10e3,
"solver_spatial_resolution": 50
"solver_spatial_resolution": 10e3
},
"nli_params": {
"method": "ggn_spectrally_separated",

View File

@@ -1,4 +1,7 @@
{ "nf_fit_coeff": [
{
"f_min": 191.275e12,
"f_max": 196.125e12,
"nf_fit_coeff": [
0.000168241,
0.0469961,
0.0359549,

View File

@@ -0,0 +1,6 @@
,signal,nli
0,3.9807550201531427e-07,1.0345007661598643e-10
1,3.582672964406964e-07,8.554802579711129e-11
2,5.174953110822109e-07,1.2476289414924814e-10
3,3.1845777742391393e-07,8.147850636202276e-11
4,4.776857897651456e-07,1.5683132697931042e-10
1 signal nli
2 0 3.9807550201531427e-07 1.0345007661598643e-10
3 1 3.582672964406964e-07 8.554802579711129e-11
4 2 5.174953110822109e-07 1.2476289414924814e-10
5 3 3.1845777742391393e-07 8.147850636202276e-11
6 4 4.776857897651456e-07 1.5683132697931042e-10

View File

@@ -1,96 +1,97 @@
0.001,0.0007537739940510926,0.0005921033539224395,0.000384643453726324,0.00024710943492700773,0.00015765779381207088,0.00010015276356884663,6.345008665672524e-05,4.012925332336102e-05,2.535268958174273e-05
0.001,0.0007532443480762404,0.0005915606741358828,0.00038408573214392957,0.00024666764094038643,0.00015734224135307426,9.993879038586218e-05,6.330912140259024e-05,4.003794165686942e-05,2.529414108865862e-05
0.001,0.0007527148738848327,0.0005910183036445593,0.0003835286706438232,0.0002462265418760313,0.00015702726304657165,9.972523988324127e-05,6.316844848796591e-05,3.994682503096186e-05,2.5235719950422228e-05
0.001,0.0007521855703345118,0.0005904762413907948,0.00038297226807207136,0.0002457861365766504,0.00015671285789580896,9.9512111295817e-05,6.302806736731544e-05,3.985590307420444e-05,2.5177425921282973e-05
0.001,0.0007516564362539944,0.0005899344862777934,0.00038241652320864807,0.0002453464238190796,0.00015639902485083639,9.929940381972637e-05,6.288797746852316e-05,3.976517539750482e-05,2.511925874398998e-05
0.001,0.0007511274704431355,0.0005893930371697809,0.0003818614347679428,0.0002449074023149522,0.00015608576280913723,9.908711661290977e-05,6.27481781932559e-05,3.967464159435973e-05,2.5061218149955632e-05
0.001,0.0007505986716729718,0.0005888518928921378,0.00038130700139925517,0.0002444690707113658,0.00015577307061625246,9.887524879560432e-05,6.260866891731864e-05,3.958430124109855e-05,2.5003303859417958e-05
0.001,0.0007500678710880661,0.0005883088511431218,0.000380751009486411,0.0002440296996901373,0.00015545972380501664,9.866297459432463e-05,6.246890748950651e-05,3.949380391318895e-05,2.4945291488462056e-05
0.001,0.0007495350705096461,0.0005877639154939723,0.000380193466563788,0.00024358929686534952,0.00015514572847430736,9.8450298405315e-05,6.232889690863924e-05,3.9403151593579556e-05,2.4887182324516918e-05
0.001,0.0007490002717484986,0.0005872170894971442,0.00037963438011605534,0.00024314786979147204,0.00015483109067004745,9.823722458416644e-05,6.218864014470764e-05,3.931234624568946e-05,2.4828977642138712e-05
0.001,0.0007484634766050366,0.000586668376686434,0.0003790737575785661,0.00024270542596389042,0.0001545158163857142,9.802375744622405e-05,6.204814013916893e-05,3.9221389813611975e-05,2.4770678703146694e-05
0.001,0.0007479199274773811,0.0005861128912299699,0.0003785065486556895,0.00024225795000622747,0.0001541970308568484,9.780794472023814e-05,6.190610951865765e-05,3.9129447888412384e-05,2.471175028700643e-05
0.001,0.0007473696306726699,0.0005855506450602122,0.0003779327791658341,0.00024180546890527417,0.0001538747562360148,9.758980264023896e-05,6.176255947727244e-05,3.903652792388679e-05,2.4652197254708885e-05
0.001,0.0007468125926679213,0.0005849816503235855,0.0003773524752207052,0.00024134800990073543,0.00015354901486124996,9.736934756691086e-05,6.161750129261558e-05,3.8942637427869684e-05,2.459202450185328e-05
0.001,0.0007462488201102061,0.0005844059193804029,0.00037676566322402907,0.00024088560048334876,0.0001532198292542639,9.714659598616437e-05,6.147094632476142e-05,3.884778396152801e-05,2.4531236958179027e-05
0.001,0.0007456783198168171,0.0005838234648047683,0.00037617236987025305,0.00024041826839299018,0.00015288722211863548,9.692156450770277e-05,6.132290601522212e-05,3.875197513865345e-05,2.4469839587096592e-05
0.001,0.0007451010987754332,0.0005832342993844907,0.0003755726221432343,0.0002399460416167659,0.00015255121633799497,9.66942698635831e-05,6.11733918859104e-05,3.8655218624953314e-05,2.4407837385217267e-05
0.001,0.0007445173992825126,0.0005826386743528757,0.00037496668540476865,0.00023946913369259697,0.00015221196586566552,9.646481704279825e-05,6.102247334575324e-05,3.85575594785277e-05,2.4345259282747418e-05
0.001,0.0007439272282773631,0.0005820366023339485,0.0003743545861363169,0.00023898757201912962,0.00015186949307274757,9.623322238874437e-05,6.0870161643097905e-05,3.845900518061352e-05,2.4282110155051444e-05
0.001,0.0007433305928659832,0.0005814280961601982,0.00037373635109929905,0.0002385013842326201,0.0001515238205025659,9.599950236146117e-05,6.071646810276464e-05,3.835956326175255e-05,2.4218394908993806e-05
0.001,0.0007427275003211868,0.0005808131688724332,0.0003731120073337174,0.00023801059820498021,0.0001511749708688244,9.576367353617374e-05,6.05614041249978e-05,3.825924130107498e-05,2.4154118482464792e-05
0.001,0.0007421180800523362,0.0005801919587229117,0.00037248171070273063,0.0002375153439047009,0.00015082303982525373,9.55258019540184e-05,6.0405013700224733e-05,3.815806798909622e-05,2.4089299350133826e-05
0.001,0.0007415023395254894,0.0005795644789202474,0.00037184548827748576,0.0002370156491221818,0.00015046804996987382,9.528590408468248e-05,6.0247308147258e-05,3.8056050847170796e-05,2.4023942410771268e-05
0.001,0.0007408802863797739,0.000578930742889133,0.00037120336741830446,0.00023651154189285886,0.00015011002407818366,9.504399651802114e-05,6.008829886368558e-05,3.7953197447440844e-05,2.395805259559495e-05
0.001,0.0007402519284274773,0.00057829076427012,0.0003705553757730914,0.00023600305049498863,0.0001497489851010917,9.480009596242987e-05,5.992799732470356e-05,3.784951541204015e-05,2.389163486774317e-05
0.001,0.0007396172736541335,0.0005776445569193926,0.0003699015412757306,0.000235490203447419,0.00014938495616282697,9.455421924320194e-05,5.976641508193571e-05,3.774501241228877e-05,2.38246942217421e-05
0.001,0.0007389763302186035,0.0005769921349085269,0.00036924189214444916,0.00023497302950733012,0.00014901796055883247,9.4306383300876e-05,5.960356376224896e-05,3.763969616788547e-05,2.37572356829714e-05
0.001,0.000738329973009011,0.0005763343882557762,0.00036857732657886674,0.00023445223185895243,0.00014864849677321228,9.40569245366171e-05,5.943966431343476e-05,3.753370952478887e-05,2.3689350732036766e-05
0.001,0.0007376782088319843,0.0005756713289449496,0.0003679078688863157,0.00023392783529630037,0.00014827658488585004,9.38058575472753e-05,5.927472675087035e-05,3.7427059131368685e-05,2.362104369630353e-05
0.001,0.0007370210446325295,0.0005750029691304239,0.000367233543593211,0.00023339986479263558,0.00014790224510292775,9.355319701349314e-05,5.910876114408311e-05,3.7319751670569666e-05,2.3552318925085614e-05
0.001,0.0007363584874940915,0.0005743293211369546,0.0003665543754437431,0.00023286834549865966,0.00014752549775524457,9.329895769838934e-05,5.8941777615809794e-05,3.721179385927125e-05,2.348318078922229e-05
0.001,0.0007356906659117175,0.0005736505214206793,0.00036587051603697917,0.00023233340267585003,0.00014714643450378646,9.30432026577021e-05,5.8773818072131705e-05,3.710321298927822e-05,2.3413646846771747e-05
0.001,0.0007350175870680764,0.0005729665823498456,0.00036518198995355594,0.00023179506120909636,0.00014676507541963834,9.278594644638945e-05,5.8604892484780656e-05,3.699401567385024e-05,2.3343721399750524e-05
0.001,0.000734339258284937,0.0005722775164633901,0.0003644888219905243,0.00023125334615855053,0.0001463814406964208,9.252720370024704e-05,5.8435010877524154e-05,3.688420855938328e-05,2.327340877117354e-05
0.001,0.0007336556870231954,0.0005715833364706749,0.00036379103715988533,0.00023070828275766533,0.00014599555064848363,9.226698913450141e-05,5.82641833251609e-05,3.677379832472749e-05,2.320271330460301e-05
0.001,0.0007329668808828947,0.0005708840552512191,0.00036308866068712113,0.00023015989641122435,0.00014560742570909416,9.200531754239911e-05,5.8092419952513674e-05,3.666279168050168e-05,2.313163936369656e-05
0.001,0.000732272847603227,0.0005701796858544125,0.000362381718009681,0.0002296082126933358,0.00014521708642859763,9.174220379377606e-05,5.791973093340874e-05,3.6551195368400524e-05,2.3060191331749373e-05
0.001,0.0007315751779154508,0.0005694718366517781,0.00036167180797618383,0.00022905447155647377,0.00014482540661409508,9.147823538482221e-05,5.774650123146614e-05,3.643925790598459e-05,2.2988528215049473e-05
0.001,0.0007308738763564251,0.0005687605159526348,0.00036095894758939165,0.00022849869020493823,0.00014443240010265552,9.121342232553745e-05,5.7572737692798364e-05,3.6326983828340116e-05,2.2916652961499898e-05
0.001,0.0007301689475478705,0.0005680457321686527,0.00036024315397386176,0.00022794088593578913,0.00014403808079282816,9.094777466478586e-05,5.739844718775089e-05,3.6214377685641065e-05,2.2844568528419092e-05
0.001,0.0007294603961963875,0.0005673274938137002,0.0003595244443750873,0.00022738107613769066,0.00014364246264358423,9.068130248947494e-05,5.72236366103174e-05,3.610144404275241e-05,2.2772277882278848e-05
0.001,0.0007287502876018436,0.0005666079096289159,0.00035880496633647314,0.00022682095171468864,0.00014324674865159545,9.041481948469436e-05,5.7048841153261715e-05,3.598852922211342e-05,2.270000293927642e-05
0.001,0.0007280386231103084,0.0005658869826353605,0.0003580847262718071,0.00022626051891339797,0.00014285094367250402,9.014832907727154e-05,5.687406312117876e-05,3.587563473352017e-05,2.2627744673782604e-05
0.001,0.0007273254041056322,0.0005651647158992671,0.00035736373064750184,0.00022569978402038908,0.00014245505258865028,8.988183471111395e-05,5.669930482943582e-05,3.5762762093538084e-05,2.2555504064421286e-05
0.001,0.0007266106320094578,0.0005644411125319691,0.00035664198598218,0.00022513875336164715,0.0001420590803085807,8.961533984682783e-05,5.652456860390248e-05,3.564991282531874e-05,2.2483282093948716e-05
0.001,0.000725894308281204,0.0005637161756897977,0.0003559194988462394,0.00022457743330201225,0.00014166303176654256,8.934884796133105e-05,5.634985678067539e-05,3.5537088458413665e-05,2.2411079749130865e-05
0.001,0.0007251764344180624,0.0005629899085739927,0.00035519627586142176,0.0002240158302446243,0.00014126691192198565,8.90823625474685e-05,5.6175171705805915e-05,3.542429052859005e-05,2.233889802062196e-05
0.001,0.0007244588135748975,0.0005622641246704724,0.00035447409591105305,0.0002234553120905153,0.00014087167955905718,8.881652603390643e-05,5.600093342830372e-05,3.531178983274928e-05,2.2266910019981595e-05
0.001,0.000723741443178776,0.000561538821268995,0.0003537529553873339,0.00022289587522719752,0.00014047733166655684,8.855133617099835e-05,5.5827140373801375e-05,3.519958531186087e-05,2.219511505192651e-05
0.001,0.0007230243206833482,0.0005608139956950427,0.00035303285074046774,0.00022233751609917817,0.00014008386527925162,8.82867907426191e-05,5.565379099102327e-05,3.508767592227262e-05,2.212351243120618e-05
0.001,0.0007223074435688039,0.0005600896453097011,0.0003523137784782074,0.00022178023120736695,0.00013969127747733319,8.802288756574066e-05,5.5480883751481105e-05,3.4976060635503277e-05,2.2052101482465692e-05
0.001,0.0007215926247557181,0.0005593676122940626,0.00035159759247597197,0.00022122546934306127,0.00013930059415776796,8.776031848020719e-05,5.5308872854303e-05,3.486503301641155e-05,2.198107017600086e-05
0.001,0.0007208798585848073,0.0005586478889723664,0.0003508842795507963,0.0002206732171528304,0.00013891180440309996,8.749907547557891e-05,5.513775276548628e-05,3.475458937431628e-05,2.1910416102241813e-05
0.001,0.0007201691394257483,0.000557930467712979,0.00035017382661216696,0.00022012346138632064,0.00013852489738482468,8.723915060881119e-05,5.49675179985075e-05,3.464472605058592e-05,2.184013687270143e-05
0.001,0.0007194604616770773,0.00055721534092818,0.00034946622066134466,0.00021957618889536463,0.00013813986236255893,8.698053600359808e-05,5.4798163113848986e-05,3.453543941831367e-05,2.177023011975932e-05
0.001,0.0007187538197660722,0.0005565025010739346,0.00034876144879066544,0.00021903138663308575,0.0001377566886832086,8.672322384971475e-05,5.462968271852315e-05,3.442672588199151e-05,2.1700693496445714e-05
0.001,0.0007180492081486484,0.0005557919406496801,0.00034805949818288173,0.0002184890416530366,0.00013737536578016266,8.646720640237894e-05,5.446207146561145e-05,3.431858187719449e-05,2.1631524676231647e-05
0.001,0.000717348639431565,0.0005550856739198547,0.00034736232071304855,0.00021795064331956514,0.00013699693247692832,8.621317757037385e-05,5.429578217858938e-05,3.421129897003673e-05,2.1562909902755936e-05
0.001,0.0007166521035756881,0.0005543836868927082,0.0003466698924934393,0.00021741616794755068,0.00013662136971116798,8.596112351100096e-05,5.413080535731451e-05,3.410487085131832e-05,2.1494845067789903e-05
0.001,0.0007159595906065037,0.0005536859656730149,0.00034598218983055497,0.0002168855920630381,0.0001362486585998701,8.571103051605296e-05,5.396713159578493e-05,3.399929127512844e-05,2.142732610463052e-05
0.001,0.0007152710906138687,0.0005529924964615861,0.00034529918922366796,0.00021635889240138666,0.0001358787804376394,8.546288501047042e-05,5.380475158117202e-05,3.389455405818364e-05,2.1360348987661796e-05
0.001,0.0007145881681833736,0.0005523048607339887,0.0003446224616264519,0.00021583728670966556,0.00013551259312919557,8.521726369129195e-05,5.364404315662281e-05,3.379090310339315e-05,2.129406976339983e-05
0.001,0.0007139108109389651,0.0005516230407004492,0.0003439519758859039,0.00021532074399295122,0.00013515007172518374,8.497414844816332e-05,5.3484993898260945e-05,3.368833016244125e-05,2.122848306212633e-05
0.001,0.0007132390066148024,0.0005509470187317473,0.00034328770115903844,0.00021480923358720733,0.0001347911915544671,8.473352137819455e-05,5.3327591526929936e-05,3.358682708410006e-05,2.1163583577742056e-05
0.001,0.0007125727430549207,0.0005502767773585094,0.000342629606910633,0.00021430272515636744,0.0001344359282214269,8.449536478383494e-05,5.317182390666476e-05,3.348638581318404e-05,2.109936606707349e-05
0.001,0.0007119120082129148,0.0005496122992705212,0.0003419776629110174,0.0002138011886894788,0.00013408425760331254,8.425966117078749e-05,5.3017679043188334e-05,3.3386998389521964e-05,2.1035825349191292e-05
0.001,0.000711256790151613,0.0005489535673160376,0.0003413318392338714,0.00021330459449785352,0.00013373615584760944,8.40263932459383e-05,5.286514508242194e-05,3.3288656946938245e-05,2.0972956304734848e-05
0.001,0.0007106071943639499,0.0005483006816957998,0.00034069221933208274,0.0002128129992904075,0.00013339165932644894,8.379558393280961e-05,5.271423641048183e-05,3.31913705135711e-05,2.091076460544407e-05
0.001,0.000709963208882901,0.0005476536252143895,0.0003400587732671483,0.0002123263734210078,0.00013305074425072359,8.356721599784782e-05,5.256494122003263e-05,3.3095131256746724e-05,2.0849245154782437e-05
0.001,0.0007093248218486061,0.0005470123808316875,0.00033943147139689077,0.0002118446875576196,0.00013271338709432742,8.334127240311385e-05,5.241724783997488e-05,3.299993143509595e-05,2.0788392916005465e-05
0.001,0.0007086920215080653,0.0005463769316622218,0.0003388102843733889,0.00021136791267964032,0.0001323795645916927,8.311773630434548e-05,5.2271144734051514e-05,3.290576339760186e-05,2.07282029115292e-05
0.001,0.0007080656480431051,0.0005457481216341828,0.0003381960373995552,0.00021089668206097172,0.0001320497200486003,8.289690449717853e-05,5.2126825862102536e-05,3.2812752146082854e-05,2.0668755034757233e-05
0.001,0.0007074456886869565,0.0005451259321489777,0.0003375886977799707,0.0002104309633113142,0.00013172382748945162,8.26787581753205e-05,5.198427834496719e-05,3.2720889139431744e-05,2.061004372929991e-05
0.001,0.0007068321308093747,0.0005445103448031184,0.0003369882331820464,0.00020997072442018424,0.00013140186125447996,8.246327876643199e-05,5.18434894660219e-05,3.2630165945308436e-05,2.055206350992823e-05
0.001,0.0007062249619162967,0.0005439013413874698,0.00033639461163356655,0.00020951593375373114,0.00013108379599680725,8.225044792981545e-05,5.170444666951808e-05,3.254057423900392e-05,2.0494808961820763e-05
0.001,0.00070562416964951,0.0005432989038865089,0.00033580780152024723,0.000209066560051587,0.00013076960667953474,8.204024755412909e-05,5.156713755893784e-05,3.2452105802317056e-05,2.0438274739819433e-05
0.001,0.0007050297417863318,0.0005427030144775926,0.0003352277715833316,0.00020862257242375786,0.00013045926857287288,8.183265975513502e-05,5.143154989537623e-05,3.236475252244954e-05,2.038245556769746e-05
0.001,0.0007044417829621171,0.000542113771820027,0.0003346546023905152,0.00020818402485557293,0.00013015281596227648,8.162770599537212e-05,5.129769708700084e-05,3.227852278867728e-05,2.032735670561579e-05
0.001,0.0007038602809995153,0.0005415311581470623,0.00033408826282687573,0.00020775088664703998,0.00012985022429639665,8.142536853201701e-05,5.116556699709043e-05,3.219340855821242e-05,2.0272972923816322e-05
0.001,0.0007032852238493367,0.0005409551558747416,0.0003335287221154158,0.00020732312745044945,0.00012955146931603386,8.122562983828357e-05,5.103514763884953e-05,3.2109401888525124e-05,2.0219299058105656e-05
0.001,0.0007027165995902542,0.0005403857476012292,0.00033297594981485264,0.00020690071726752732,0.0001292565270515082,8.102847260135871e-05,5.090642717392409e-05,3.202649493632917e-05,2.0166330009182866e-05
0.001,0.0007021546252265139,0.0005398231466905069,0.00033243014325207994,0.00020648380199548492,0.0001289654971719027,8.083396250547584e-05,5.077944809587575e-05,3.194471491165552e-05,2.0114083097018264e-05
0.001,0.0007015992888126556,0.0005392673356287205,0.0003318912717105927,0.00020607235137144977,0.0001286783555062261,8.06420820982489e-05,5.065419847368218e-05,3.186405391103787e-05,2.006255318369691e-05
0.001,0.0007010505785332368,0.0005387182970867077,0.00033135930481238495,0.00020566633548374424,0.0001283950781739038,8.04528141416734e-05,5.053066652493675e-05,3.1784504130324826e-05,2.001173519622426e-05
0.001,0.000700508482702546,0.0005381760139193414,0.00033083421251577956,0.00020526572476908743,0.000128115641582197,8.026614161010359e-05,5.040884061439589e-05,3.170605786368809e-05,1.9961624125869314e-05
0.001,0.0006999729897643184,0.0005376404691648787,0.00033031596511327947,0.00020487049000982136,0.00012784002242364822,8.008204768824872e-05,5.028870925253973e-05,3.1628707502639986e-05,1.9912215027513866e-05
0.001,0.0006994440882914515,0.0005371116460443127,0.0003298045332294241,0.0002044806023311588,0.0001275681976735486,7.990051576919067e-05,5.0170261094149856e-05,3.155244553506268e-05,1.9863503019009735e-05
0.001,0.0006989172535560769,0.0005365850419669894,0.000329295612913881,0.00020409280438264766,0.00012729790663346764,7.972004038787022e-05,5.0052515589855926e-05,3.147664135129994e-05,1.9815085586326718e-05
0.001,0.0006983924815322933,0.0005360606511477293,0.0003287891938968759,0.00020370708584067882,0.00012702914094133737,7.954061545150935e-05,4.993546855036179e-05,3.140129216611291e-05,1.9766960914662127e-05
0.001,0.0006978697681747856,0.000535538467781285,0.000328285265898271,0.00020332343638453147,0.00012676189224377013,7.936223487646896e-05,4.981911579385119e-05,3.1326395199731696e-05,1.971912719297887e-05
0.001,0.0006973491094188342,0.0005350184860423863,0.0003277838186277228,0.0002029418456965422,0.0001264961521961901,7.918489258833681e-05,4.970345314604528e-05,3.125194767789152e-05,1.967158261402843e-05
0.001,0.0006968284099289676,0.000534498597351666,0.00032728277956097635,0.00020256071739357045,0.0001262308004979493,7.900783730702533e-05,4.958798911408524e-05,3.1177632631488905e-05,1.9624124503146986e-05
0.001,0.0006963076677967887,0.0005339787996978908,0.00032678214616920946,0.00020218004908417888,0.0001259658352285323,7.883106763041168e-05,4.947272273059253e-05,3.110344941552445e-05,1.957675243920473e-05
0.001,0.0006957868810888677,0.0005334590910383602,0.00032628191587964447,0.00020179983833834103,0.00012570125443876325,7.865458213663353e-05,4.935765301510161e-05,3.102939737649859e-05,1.9529465995615212e-05
0.001,0.0006952660478468047,0.0005329394692990367,0.0003257820860759608,0.00020142008268794192,0.0001254370561512512,7.847837938443003e-05,4.924277897429975e-05,3.0955475852573814e-05,1.94822647404421e-05
0.001,0.00069474516608728,0.0005324199323746772,0.00032528265409871067,0.0002010407796272818,0.0001251732383608348,7.830245791348127e-05,4.91280996022673e-05,3.088168417373684e-05,1.943514823650581e-05
0 km,7 km,10 km,20 km,30 km,40 km,50 km,60 km,70 km,80 km
0.001,0.0007539177767305848,0.0005922648034750569,0.00038490617279658137,0.000247392320543982,0.00015791555306607623,0.0001003671566373715,6.361853747449743e-05,4.0256607010916584e-05,2.5446360651215025e-05
0.001,0.0007533902419958185,0.0005917244917926066,0.0003843504806873478,0.0002469518485683003,0.0001576007478372822,0.00010015356028336005,6.347773727057954e-05,4.016534974386181e-05,2.5387814123899557e-05
0.001,0.0007528628792251897,0.0005911844879166931,0.0003837954443648265,0.0002465120671477305,0.00015728651344926157,9.994038442151031e-05,6.333722806950528e-05,4.007428674216739e-05,2.5329394519652018e-05
0.001,0.0007523356872805944,0.0005906447907925071,0.0003832410626787123,0.0002460729751307637,0.00015697284891103737,9.972762829117227e-05,6.319700932883725e-05,3.9983417636365086e-05,2.5271101593906498e-05
0.001,0.0007518086649950493,0.0005901053993262767,0.0003826873344129807,0.000245634571300401,0.00015665975317873245,9.95152910932062e-05,6.305708047968383e-05,3.9892742039402306e-05,2.5212935090640287e-05
0.001,0.0007512818111727442,0.0005895663123854124,0.00038213425828639575,0.0002451968543747938,0.0001563472251561599,9.930337199043154e-05,6.291744092702573e-05,3.980225954686196e-05,2.5154894742516358e-05
0.001,0.0007507551245890757,0.0005890275287986403,0.0003815818329529933,0.00024475982300791935,0.00015603526369546326,9.909187010814736e-05,6.277809005009466e-05,3.9711969737226656e-05,2.5096980271060998e-05
0.001,0.0007502264452226824,0.0005884868559085152,0.00038102785262825065,0.00024432175277214066,0.00015572264698517112,9.88799609470651e-05,6.26384862087587e-05,3.9621522312922004e-05,2.5038967246912867e-05
0.001,0.000749695774901522,0.0005879442972710813,0.00038047232480109013,0.00024388265123925605,0.00015540938109456906,9.866764888521257e-05,6.249863239143498e-05,3.953091925128679e-05,2.498085695464162e-05
0.001,0.0007491631154430714,0.0005873998564236413,0.00037991525691100856,0.00024344252592185564,0.00015509547204033507,9.845493826021018e-05,6.235853155787194e-05,3.944016251022327e-05,2.4922650665997884e-05
0.001,0.0007486284686543365,0.0005868535368848297,0.00037935665634847824,0.00024300138427382333,0.00015478092578703268,9.824183336966692e-05,6.2218186639435e-05,3.9349254028404254e-05,2.4864349640052216e-05
0.001,0.0007480870957031576,0.000586300474032492,0.00037879149123861057,0.0002425552230413961,0.00015446287448415177,9.80263854642033e-05,6.207631182945079e-05,3.925735993392708e-05,2.4805418700342044e-05
0.001,0.0007475390029192987,0.0005857406797529387,0.0003782197872436036,0.00024210406905347345,0.00015414134016629157,9.780861070114894e-05,6.193291827596257e-05,3.9164487654400794e-05,2.4745862693628148e-05
0.001,0.0007469841968019674,0.0005851741661454001,0.0003776415703174324,0.00024164794939077438,0.0001538163450528885,9.758852536415706e-05,6.178801721036571e-05,3.907064467141267e-05,2.4685686501265697e-05
0.001,0.0007464226840200367,0.0005846009455219824,0.00037705686670463337,0.0002411868913840224,0.0001534879115464833,9.736614586183658e-05,6.164161994641891e-05,3.897583851984993e-05,2.462489503874857e-05
0.001,0.0007458544714121565,0.0005840210304075477,0.00037646570293897594,0.00024072092261200308,0.00015315606223087128,9.714148872627883e-05,6.149373787917076e-05,3.888007678716513e-05,2.45634932552282e-05
0.001,0.0007452795659868886,0.0005834344335395587,0.00037586810584214404,0.0002402500708997022,0.000152820819869329,9.691457061165131e-05,6.134438248396139e-05,3.878336711269497e-05,2.450148613305654e-05
0.001,0.0007446982091229053,0.0005828414050804809,0.00037526433980072227,0.0002397745491251193,0.0001524823380310375,9.668549630724793e-05,6.119362307821724e-05,3.868575452092861e-05,2.4438902597094615e-05
0.001,0.0007441104077793266,0.0005822419576041865,0.000374654431136991,0.00023929438452844706,0.0001521406389697796,9.645428208068799e-05,6.10414708650461e-05,3.858724646752558e-05,2.4375747508899864e-05
0.001,0.0007435161690815189,0.0005816361038919765,0.0003740384064517259,0.00023880960458647735,0.00015179574511101,9.622094431596755e-05,6.0887937123913e-05,3.848785045741014e-05,2.4312025761525238e-05
0.001,0.0007429155003212045,0.0005810238569324259,0.0003734162926228523,0.00023832023701067176,0.00015144767905002232,9.598549951201614e-05,6.073303320960556e-05,3.83875740440667e-05,2.42477422790523e-05
0.001,0.0007423085305088799,0.0005804053544492479,0.00037278824495395505,0.0002378264113599139,0.00015109653618969462,9.574801357389848e-05,6.057680304696976e-05,3.828644589147927e-05,2.4182915529390252e-05
0.001,0.0007416952671281527,0.0005797806095975203,0.0003721542903540935,0.000237328155265129,0.00015074233901078615,9.550850289594038e-05,6.041925791001213e-05,3.8184473495775654e-05,2.411755039775751e-05
0.001,0.0007410757178351933,0.0005791496357472955,0.0003715144560199718,0.00023682549660121693,0.00015038511017095082,9.526698399235154e-05,6.026040915139781e-05,3.8081664403831414e-05,2.4051651801815565e-05
0.001,0.0007404498904588522,0.0005785124464833875,0.0003708687694343879,0.00023631846348487102,0.00015002487250269267,9.502347349561174e-05,6.0100268201280124e-05,3.797802621247342e-05,2.3985224691142176e-05
0.001,0.000739817793000736,0.0005778690556051271,0.0003702172583646133,0.00023580708427235972,0.00014966164901128063,9.477798815483971e-05,5.9938846566140114e-05,3.787356656768574e-05,2.3918274046705576e-05
0.001,0.0007391794336352683,0.0005772194771261406,0.00036955995086080306,0.00023529138755728292,0.00014929546287266413,9.453054483414699e-05,5.977615582759686e-05,3.776829316380097e-05,2.385080488032797e-05
0.001,0.0007385356837401969,0.0005765645972068202,0.00036889774196575574,0.0002347720745464529,0.00014892681149659162,9.42814794200372e-05,5.9612416728092556e-05,3.7662348796962334e-05,2.378290869241134e-05
0.001,0.0007378865501365786,0.0005759044277808471,0.0003682306558404449,0.0002342491698918279,0.00014855571485941296,9.403080644324396e-05,5.944763924389705e-05,3.755574009362634e-05,2.371458979861065e-05
0.001,0.0007372320397833855,0.0005752389809515306,0.00036755871686373843,0.00023372269842386576,0.0001481821930634036,9.377854051813779e-05,5.92818334053861e-05,3.74484737148236e-05,2.364585253654512e-05
0.001,0.0007365721597776102,0.0005745682689916729,0.0003668819496311701,0.00023319268514975972,0.00014780626633511263,9.352469634142839e-05,5.911500929610015e-05,3.734055635551828e-05,2.35767012653732e-05
0.001,0.0007359070382096695,0.0005738924278329212,0.00036620050520582223,0.0002326592549483615,0.00014742802610623578,9.326933684741753e-05,5.8947208765596136e-05,3.723201528626343e-05,2.3507153539330125e-05
0.001,0.0007352366822744919,0.0005732114697907263,0.0003655144080205807,0.0002321224325628545,0.00014704749234532768,9.30124765259338e-05,5.877844174725213e-05,3.712285709891949e-05,2.3437213649054356e-05
0.001,0.0007345610993055855,0.0005725254073502257,0.0003648236827235576,0.00023158224291094424,0.00014666468514311576,9.275412994749425e-05,5.860871822644595e-05,3.701308841848994e-05,2.336688590620212e-05
0.001,0.0007338802967751745,0.0005718342531661053,0.0003641283541767086,0.00023103871108296522,0.00014627962471074844,9.249431176193324e-05,5.843804823954878e-05,3.690271590243443e-05,2.32961746429929e-05
0.001,0.0007331942822941306,0.0005711380200622195,0.000363428447454292,0.00023049186233985435,0.00014589233137793237,9.223303669696582e-05,5.826644187292669e-05,3.679174623998899e-05,2.3225084211761806e-05
0.001,0.0007325030636119942,0.000570436721031382,0.0003627239878414387,0.00022994172211121704,0.00014550282559116622,9.197031955679165e-05,5.809390926192732e-05,3.66801861514784e-05,2.3153618984504423e-05
0.001,0.0007318082249846354,0.000569731957456593,0.0003620165686744435,0.0002293895269980944,0.0001451119793900387,9.170674702405544e-05,5.792083507086079e-05,3.656828410642266e-05,2.3081938026911105e-05
0.001,0.0007311097709589727,0.0005690237376093709,0.0003613062068501535,0.00022883529410468975,0.00014471980653999792,9.14423290636205e-05,5.774722611940683e-05,3.6456044625219865e-05,2.3010044279099164e-05
0.001,0.0007304077061664716,0.0005683120698629669,0.00036059291938656614,0.00022827904062761942,0.00014432632086784533,9.117707567918865e-05,5.757308925149413e-05,3.6343472243382366e-05,2.293794069062729e-05
0.001,0.0007297020353231152,0.0005675969626922158,0.0003598767234219355,0.00022772078385475435,0.00014393153626068395,9.091099691249356e-05,5.739843133472259e-05,3.6230571511141116e-05,2.2865630220232028e-05
0.001,0.0007289948155254126,0.0005668805157203741,0.00035915975887038315,0.00022716220982550104,0.00014353665302637602,9.064490513205597e-05,5.722378701487135e-05,3.611768859725593e-05,2.279333481077374e-05
0.001,0.0007282860481242219,0.0005661627319510184,0.0003584420321019746,0.00022660332474955334,0.0001431416759965279,9.037880375071969e-05,5.7049158588914064e-05,3.6004825007582225e-05,2.2721055434706506e-05
0.001,0.0007275757345080665,0.0005654436144326382,0.00035772354953912867,0.0002260441348764214,0.00014274661002939483,9.011269619839399e-05,5.687454836459578e-05,3.5891982254752056e-05,2.2648793068745655e-05
0.001,0.0007268638761030398,0.0005647231662585116,0.0003570043176561602,0.0002254846464948739,0.0001423514600093734,8.984658592167178e-05,5.6699958660169715e-05,3.5779161857992474e-05,2.2576548693746487e-05
0.001,0.0007261504743729061,0.0005640013905666712,0.00035628434297892044,0.0002249248659324104,0.00014195623084652692,8.958047638345721e-05,5.652539180412445e-05,3.5666365342942064e-05,2.250432329458613e-05
0.001,0.0007254355308190145,0.0005632782905397587,0.00035556363208430486,0.00022436479955468554,0.0001415609274760624,8.931437106256734e-05,5.635085013490999e-05,3.5553594241465086e-05,2.2432117860037706e-05
0.001,0.0007247208411865314,0.0005625556717890254,0.0003548439578507697,0.00022380581171795803,0.00014116650687104502,8.904891159204534e-05,5.61767534392646e-05,3.544111934056619e-05,2.2360105593797506e-05
0.001,0.00072400640290786,0.000561833531609933,0.00035412531668185007,0.00022324789882467925,0.00014077296603347102,8.878409573173543e-05,5.600310014889176e-05,3.5328939584811035e-05,2.228828580259237e-05
0.001,0.0007232922134419361,0.000561111867333509,0.00035340770503880037,0.00022269105733400152,0.00014038030201108317,8.8519921274859e-05,5.5829888718494674e-05,3.521705393409239e-05,2.221665780315407e-05
0.001,0.0007225782702742098,0.0005603906763262448,0.0003526911194401051,0.00022213528376118449,0.00013998851189683077,8.825638604758897e-05,5.5657117625479614e-05,3.510546136342301e-05,2.214522092208301e-05
0.001,0.0007218663790349207,0.0005596717927826706,0.0003519774072686018,0.00022158202285215626,0.0001395986194011808,8.79941808494171e-05,5.5485240659247415e-05,3.499445534348073e-05,2.207416317565271e-05
0.001,0.0007211565340671307,0.000558955209053062,0.0003512665554090523,0.0002210312613239567,0.0001392106136609281,8.773329770591506e-05,5.531425230770577e-05,3.4884032196140665e-05,2.200348216114185e-05
0.001,0.0007204487297429265,0.0005582409175317231,0.00035055855083818805,0.00022048298599609717,0.00013882448390129787,8.747372870968443e-05,5.514414710600884e-05,3.477418827518741e-05,2.1933175496831414e-05
0.001,0.0007197429604633029,0.0005575289106567639,0.00034985338062403464,0.00021993718378969884,0.00013844021943515845,8.721546601972457e-05,5.497491963609735e-05,3.466491996599965e-05,2.1863240821795316e-05
0.001,0.0007190392206580874,0.0005568191809099186,0.0003491510319252488,0.00021939384172660586,0.00013805780966217872,8.695850186076947e-05,5.480656452622117e-05,3.455622368522282e-05,2.1793675795681418e-05
0.001,0.0007183375047857581,0.0005561117208162645,0.0003484514919904163,0.00021885294692850114,0.00013767724406801954,8.670282852265318e-05,5.463907645048003e-05,3.444809588045186e-05,2.172447809850241e-05
0.001,0.0007176398171146462,0.0005554085359032386,0.00034775670623974134,0.0002183159850558065,0.00013729955964329822,8.644913914890404e-05,5.447290801376681e-05,3.4340828149382966e-05,2.165583410030806e-05
0.001,0.0007169461476104001,0.0005547096122322624,0.0003470666509123452,0.00021778293254731739,0.00013692473741724035,8.61974199558567e-05,5.430804975101775e-05,3.423441420247442e-05,2.15877397033261e-05
0.001,0.0007162564863033777,0.0005540149359610161,0.00034638130244054916,0.00021725376605180745,0.00013655275859741984,8.594765729366703e-05,5.4144492290891566e-05,3.412884781322755e-05,2.152019085117201e-05
0.001,0.0007155708232884887,0.0005533244933430584,0.0003457006374485156,0.00021672846242622396,0.00013618360456808432,8.569983764497563e-05,5.3982226354801364e-05,3.40241228175218e-05,2.1453183528407172e-05
0.001,0.0007148907167777357,0.0005526398589811358,0.0003450262214786548,0.00021620823613271921,0.00013581813150424676,8.545453691240582e-05,5.3821629494988794e-05,3.392048307301558e-05,2.1386873841072776e-05
0.001,0.0007142161543980302,0.0005519610151552632,0.0003443580235484482,0.00021569305634208547,0.00013545631457844443,8.521173706397784e-05,5.366268933409295e-05,3.381792035746172e-05,2.1321256433336487e-05
0.001,0.0007135471238866448,0.0005512879443055973,0.0003436960129838173,0.0002151828925541902,0.0001350981292399717,8.497142027417112e-05,5.350539363884576e-05,3.371642654533412e-05,2.1256326012778444e-05
0.001,0.0007128836130908273,0.0005506206290316834,0.00034304015941680915,0.00021467771459500972,0.00013474355121214092,8.473356892178238e-05,5.3349730318534455e-05,3.361599360677474e-05,2.1192077349695405e-05
0.001,0.0007122256099675188,0.0005499590520918091,0.0003423904327834519,0.00021417749261385993,0.00013439255648970008,8.449816558787534e-05,5.319568742351694e-05,3.35166136065783e-05,2.1128505276425763e-05
0.001,0.0007115731025829938,0.0005493031964022937,0.0003417468033215544,0.0002136821970805245,0.000134045121336186,8.426519305371512e-05,5.304325314373989e-05,3.341827870317759e-05,2.106560468667675e-05
0.001,0.0007109261960066054,0.0005486531617838624,0.0003411093543337103,0.00021319188469384628,0.00013370128216574169,8.403467429429362e-05,5.289244191063335e-05,3.3320997960119286e-05,2.1003381278303992e-05
0.001,0.0007102848782749661,0.0005480089311096272,0.00034047805604549785,0.00021270652596543237,0.00013336101530442401,8.380659214968773e-05,5.274324196034732e-05,3.3224763568979684e-05,2.0941829967612013e-05
0.001,0.0007096491375319776,0.0005473704874075498,0.00033985287897724074,0.00021222609171923644,0.00013302429733989257,8.358092965463258e-05,5.25956416646764e-05,3.312956781229619e-05,2.088094573050621e-05
0.001,0.0007090189620285115,0.0005467378138598193,0.00033923379394201156,0.00021175055308892372,0.0001326911051189623,8.335767003660405e-05,5.244962952967474e-05,3.3035403062615115e-05,2.0820723601860106e-05
0.001,0.0007083951884833238,0.0005461117507284293,0.0003386216233705354,0.00021128054172409337,0.00013236188112429926,8.31371097341464e-05,5.230539940125761e-05,3.294239432192892e-05,2.076124352066865e-05
0.001,0.0007077778041323896,0.000545492279490185,0.00033801633474888146,0.00021081602540817874,0.00013203659950671687,8.291923002160208e-05,5.216293844781483e-05,3.285053307562121e-05,2.0702499944560498e-05
0.001,0.0007071667963482699,0.0005448793818164008,0.0003374178959240363,0.00021035697230232543,0.00013171523473119512,8.270401240613943e-05,5.202223399957759e-05,3.2759810917439646e-05,2.064448740210184e-05
0.001,0.0007065621526397901,0.000544273039572169,0.0003368262751014692,0.00020990335094223987,0.0001313977615739679,8.249143862546502e-05,5.188327354697137e-05,3.267021954836586e-05,2.0587200492045967e-05
0.001,0.0007059638606517004,0.0005436732348155853,0.0003362414408426963,0.00020945513023505862,0.00013108415511962746,8.228149064554578e-05,5.174604473897535e-05,3.258175077549588e-05,2.053063388259103e-05
0.001,0.0007053719081643225,0.0005430799497970297,0.00033566336206289793,0.00020901227945626015,0.00013077439075827684,8.20741506583782e-05,5.161053538152209e-05,3.249439651094783e-05,2.047478231065629e-05
0.001,0.0007047863993885064,0.0005424932828039034,0.0003350921191971394,0.0002085748525953015,0.00013046850282623395,8.186944018288875e-05,5.147675893062123e-05,3.240816518060804e-05,2.0419651063027786e-05
0.001,0.0007042073221500205,0.000541913216142546,0.0003345276813035574,0.00020814281911618103,0.00013016646689064054,8.166734155142674e-05,5.134470329367606e-05,3.232304876615549e-05,2.0365234922821375e-05
0.001,0.0007036346644028755,0.0005413397323015136,0.0003339700177764314,0.00020771614883326046,0.00012986825880927205,8.146783731136239e-05,5.121435652738549e-05,3.2239039349161415e-05,2.0311528738515718e-05
0.001,0.0007030684142289592,0.0005407728139509093,0.00033341909834398085,0.00020729481190839792,0.00012957385472790145,8.12709102230124e-05,5.1085706836262186e-05,3.215612911007561e-05,2.0258527423278803e-05
0.001,0.0007025087877125606,0.0005402126735385767,0.0003328751197405316,0.00020687895394469412,0.00012928335419699167,8.107662593993734e-05,5.095879672189383e-05,3.2074345280702784e-05,2.0206248321016987e-05
0.001,0.0007019557729111361,0.0005396592936234858,0.0003323380514212155,0.00020646854484108668,0.0001289967331620245,8.088496708343894e-05,5.083361429641059e-05,3.1993679981452625e-05,2.0154686306347033e-05
0.001,0.0007014093580122255,0.0005391126569487217,0.00033180786317787807,0.00020606355484577673,0.00012871396785738722,8.069591648818549e-05,5.071014781993386e-05,3.191412543168724e-05,2.010383631860697e-05
0.001,0.0007008695313331482,0.0005385727464408199,0.0003312845251369297,0.00020566395455347188,0.0001284350348038258,8.050945720021523e-05,5.058838569914163e-05,3.1835673948741706e-05,2.0053693361205354e-05
0.001,0.0007003362813206957,0.0005380395452091099,0.00033076800775717,0.00020526971490259695,0.00012815991080588224,8.032557247492852e-05,5.046831648582724e-05,3.175831794694013e-05,2.0004252500969603e-05
0.001,0.0006998095965508554,0.0005375130365450592,0.00033025828182767485,0.00020488080717254625,0.00012788857294937395,8.014424577511121e-05,5.0349928875481843e-05,3.168204993662801e-05,1.9955508867504938e-05
0.001,0.0006992849713647436,0.000536988737498668,0.0003297510574308719,0.00020449398184933928,0.0001276187643023316,7.996397313508213e-05,5.023224268320585e-05,3.160623916862529e-05,1.9907059627792014e-05
0.001,0.0006987624017369506,0.0005364666423066755,0.0003292463243531191,0.00020410922866516542,0.000127350476544274,7.978474848904117e-05,5.011525373583123e-05,3.153088286679667e-05,1.985890297191875e-05
0.001,0.0006982418836227756,0.0005359467451858974,0.000328744072370431,0.00020372653735498857,0.00012708370136324496,7.960656578019794e-05,4.9998957867578574e-05,3.1455978260416835e-05,1.9811037093701456e-05
0.001,0.0006977234129582083,0.0005354290403332512,0.00032824429124863073,0.00020334589765671668,0.0001268184304559618,7.942941896086744e-05,4.988335092011608e-05,3.138152258420484e-05,1.976346019070644e-05
0.001,0.0006972049031024503,0.0005349114284143175,0.00032774491556384407,0.00020296571741865816,0.00012655354571184963,7.925255773427056e-05,4.976794174339877e-05,3.130719890433304e-05,1.971596949574029e-05
0.001,0.0006966863521517465,0.000534393907423076,0.000327245942795149,0.00020258599425811892,0.00012628904521745982,7.907598070306232e-05,4.965272937294146e-05,3.123300657741713e-05,1.966856458850977e-05
0.001,0.000696167758177353,0.0005338764753221901,0.0003267473703778833,0.00020220672575398438,0.00012602492703077633,7.889968645020544e-05,4.95377128311886e-05,3.1158944951577065e-05,1.9621245043263798e-05
0.001,0.0006956491192256274,0.0005333591300431401,0.0003262491957040711,0.00020182790944721542,0.00012576118918167348,7.872367353931904e-05,4.942289112776892e-05,3.108501336660957e-05,1.957401042890837e-05
0.001,0.0006951304333180151,0.0005328418694862771,0.0003257514161227785,0.00020144954284132072,0.00012549782967232552,7.854794051499734e-05,4.9308263259716635e-05,3.1011211154138606e-05,1.9526860309103978e-05
1 0.001 0 km 0.0007537739940510926 7 km 0.0005921033539224395 10 km 0.000384643453726324 20 km 0.00024710943492700773 30 km 0.00015765779381207088 40 km 0.00010015276356884663 50 km 6.345008665672524e-05 60 km 4.012925332336102e-05 70 km 2.535268958174273e-05 80 km
2 0.001 0.0007532443480762404 0.0007539177767305848 0.0005915606741358828 0.0005922648034750569 0.00038408573214392957 0.00038490617279658137 0.00024666764094038643 0.000247392320543982 0.00015734224135307426 0.00015791555306607623 9.993879038586218e-05 0.0001003671566373715 6.330912140259024e-05 6.361853747449743e-05 4.003794165686942e-05 4.0256607010916584e-05 2.529414108865862e-05 2.5446360651215025e-05
3 0.001 0.0007527148738848327 0.0007533902419958185 0.0005910183036445593 0.0005917244917926066 0.0003835286706438232 0.0003843504806873478 0.0002462265418760313 0.0002469518485683003 0.00015702726304657165 0.0001576007478372822 9.972523988324127e-05 0.00010015356028336005 6.316844848796591e-05 6.347773727057954e-05 3.994682503096186e-05 4.016534974386181e-05 2.5235719950422228e-05 2.5387814123899557e-05
4 0.001 0.0007521855703345118 0.0007528628792251897 0.0005904762413907948 0.0005911844879166931 0.00038297226807207136 0.0003837954443648265 0.0002457861365766504 0.0002465120671477305 0.00015671285789580896 0.00015728651344926157 9.9512111295817e-05 9.994038442151031e-05 6.302806736731544e-05 6.333722806950528e-05 3.985590307420444e-05 4.007428674216739e-05 2.5177425921282973e-05 2.5329394519652018e-05
5 0.001 0.0007516564362539944 0.0007523356872805944 0.0005899344862777934 0.0005906447907925071 0.00038241652320864807 0.0003832410626787123 0.0002453464238190796 0.0002460729751307637 0.00015639902485083639 0.00015697284891103737 9.929940381972637e-05 9.972762829117227e-05 6.288797746852316e-05 6.319700932883725e-05 3.976517539750482e-05 3.9983417636365086e-05 2.511925874398998e-05 2.5271101593906498e-05
6 0.001 0.0007511274704431355 0.0007518086649950493 0.0005893930371697809 0.0005901053993262767 0.0003818614347679428 0.0003826873344129807 0.0002449074023149522 0.000245634571300401 0.00015608576280913723 0.00015665975317873245 9.908711661290977e-05 9.95152910932062e-05 6.27481781932559e-05 6.305708047968383e-05 3.967464159435973e-05 3.9892742039402306e-05 2.5061218149955632e-05 2.5212935090640287e-05
7 0.001 0.0007505986716729718 0.0007512818111727442 0.0005888518928921378 0.0005895663123854124 0.00038130700139925517 0.00038213425828639575 0.0002444690707113658 0.0002451968543747938 0.00015577307061625246 0.0001563472251561599 9.887524879560432e-05 9.930337199043154e-05 6.260866891731864e-05 6.291744092702573e-05 3.958430124109855e-05 3.980225954686196e-05 2.5003303859417958e-05 2.5154894742516358e-05
8 0.001 0.0007500678710880661 0.0007507551245890757 0.0005883088511431218 0.0005890275287986403 0.000380751009486411 0.0003815818329529933 0.0002440296996901373 0.00024475982300791935 0.00015545972380501664 0.00015603526369546326 9.866297459432463e-05 9.909187010814736e-05 6.246890748950651e-05 6.277809005009466e-05 3.949380391318895e-05 3.9711969737226656e-05 2.4945291488462056e-05 2.5096980271060998e-05
9 0.001 0.0007495350705096461 0.0007502264452226824 0.0005877639154939723 0.0005884868559085152 0.000380193466563788 0.00038102785262825065 0.00024358929686534952 0.00024432175277214066 0.00015514572847430736 0.00015572264698517112 9.8450298405315e-05 9.88799609470651e-05 6.232889690863924e-05 6.26384862087587e-05 3.9403151593579556e-05 3.9621522312922004e-05 2.4887182324516918e-05 2.5038967246912867e-05
10 0.001 0.0007490002717484986 0.000749695774901522 0.0005872170894971442 0.0005879442972710813 0.00037963438011605534 0.00038047232480109013 0.00024314786979147204 0.00024388265123925605 0.00015483109067004745 0.00015540938109456906 9.823722458416644e-05 9.866764888521257e-05 6.218864014470764e-05 6.249863239143498e-05 3.931234624568946e-05 3.953091925128679e-05 2.4828977642138712e-05 2.498085695464162e-05
11 0.001 0.0007484634766050366 0.0007491631154430714 0.000586668376686434 0.0005873998564236413 0.0003790737575785661 0.00037991525691100856 0.00024270542596389042 0.00024344252592185564 0.0001545158163857142 0.00015509547204033507 9.802375744622405e-05 9.845493826021018e-05 6.204814013916893e-05 6.235853155787194e-05 3.9221389813611975e-05 3.944016251022327e-05 2.4770678703146694e-05 2.4922650665997884e-05
12 0.001 0.0007479199274773811 0.0007486284686543365 0.0005861128912299699 0.0005868535368848297 0.0003785065486556895 0.00037935665634847824 0.00024225795000622747 0.00024300138427382333 0.0001541970308568484 0.00015478092578703268 9.780794472023814e-05 9.824183336966692e-05 6.190610951865765e-05 6.2218186639435e-05 3.9129447888412384e-05 3.9349254028404254e-05 2.471175028700643e-05 2.4864349640052216e-05
13 0.001 0.0007473696306726699 0.0007480870957031576 0.0005855506450602122 0.000586300474032492 0.0003779327791658341 0.00037879149123861057 0.00024180546890527417 0.0002425552230413961 0.0001538747562360148 0.00015446287448415177 9.758980264023896e-05 9.80263854642033e-05 6.176255947727244e-05 6.207631182945079e-05 3.903652792388679e-05 3.925735993392708e-05 2.4652197254708885e-05 2.4805418700342044e-05
14 0.001 0.0007468125926679213 0.0007475390029192987 0.0005849816503235855 0.0005857406797529387 0.0003773524752207052 0.0003782197872436036 0.00024134800990073543 0.00024210406905347345 0.00015354901486124996 0.00015414134016629157 9.736934756691086e-05 9.780861070114894e-05 6.161750129261558e-05 6.193291827596257e-05 3.8942637427869684e-05 3.9164487654400794e-05 2.459202450185328e-05 2.4745862693628148e-05
15 0.001 0.0007462488201102061 0.0007469841968019674 0.0005844059193804029 0.0005851741661454001 0.00037676566322402907 0.0003776415703174324 0.00024088560048334876 0.00024164794939077438 0.0001532198292542639 0.0001538163450528885 9.714659598616437e-05 9.758852536415706e-05 6.147094632476142e-05 6.178801721036571e-05 3.884778396152801e-05 3.907064467141267e-05 2.4531236958179027e-05 2.4685686501265697e-05
16 0.001 0.0007456783198168171 0.0007464226840200367 0.0005838234648047683 0.0005846009455219824 0.00037617236987025305 0.00037705686670463337 0.00024041826839299018 0.0002411868913840224 0.00015288722211863548 0.0001534879115464833 9.692156450770277e-05 9.736614586183658e-05 6.132290601522212e-05 6.164161994641891e-05 3.875197513865345e-05 3.897583851984993e-05 2.4469839587096592e-05 2.462489503874857e-05
17 0.001 0.0007451010987754332 0.0007458544714121565 0.0005832342993844907 0.0005840210304075477 0.0003755726221432343 0.00037646570293897594 0.0002399460416167659 0.00024072092261200308 0.00015255121633799497 0.00015315606223087128 9.66942698635831e-05 9.714148872627883e-05 6.11733918859104e-05 6.149373787917076e-05 3.8655218624953314e-05 3.888007678716513e-05 2.4407837385217267e-05 2.45634932552282e-05
18 0.001 0.0007445173992825126 0.0007452795659868886 0.0005826386743528757 0.0005834344335395587 0.00037496668540476865 0.00037586810584214404 0.00023946913369259697 0.0002402500708997022 0.00015221196586566552 0.000152820819869329 9.646481704279825e-05 9.691457061165131e-05 6.102247334575324e-05 6.134438248396139e-05 3.85575594785277e-05 3.878336711269497e-05 2.4345259282747418e-05 2.450148613305654e-05
19 0.001 0.0007439272282773631 0.0007446982091229053 0.0005820366023339485 0.0005828414050804809 0.0003743545861363169 0.00037526433980072227 0.00023898757201912962 0.0002397745491251193 0.00015186949307274757 0.0001524823380310375 9.623322238874437e-05 9.668549630724793e-05 6.0870161643097905e-05 6.119362307821724e-05 3.845900518061352e-05 3.868575452092861e-05 2.4282110155051444e-05 2.4438902597094615e-05
20 0.001 0.0007433305928659832 0.0007441104077793266 0.0005814280961601982 0.0005822419576041865 0.00037373635109929905 0.000374654431136991 0.0002385013842326201 0.00023929438452844706 0.0001515238205025659 0.0001521406389697796 9.599950236146117e-05 9.645428208068799e-05 6.071646810276464e-05 6.10414708650461e-05 3.835956326175255e-05 3.858724646752558e-05 2.4218394908993806e-05 2.4375747508899864e-05
21 0.001 0.0007427275003211868 0.0007435161690815189 0.0005808131688724332 0.0005816361038919765 0.0003731120073337174 0.0003740384064517259 0.00023801059820498021 0.00023880960458647735 0.0001511749708688244 0.00015179574511101 9.576367353617374e-05 9.622094431596755e-05 6.05614041249978e-05 6.0887937123913e-05 3.825924130107498e-05 3.848785045741014e-05 2.4154118482464792e-05 2.4312025761525238e-05
22 0.001 0.0007421180800523362 0.0007429155003212045 0.0005801919587229117 0.0005810238569324259 0.00037248171070273063 0.0003734162926228523 0.0002375153439047009 0.00023832023701067176 0.00015082303982525373 0.00015144767905002232 9.55258019540184e-05 9.598549951201614e-05 6.0405013700224733e-05 6.073303320960556e-05 3.815806798909622e-05 3.83875740440667e-05 2.4089299350133826e-05 2.42477422790523e-05
23 0.001 0.0007415023395254894 0.0007423085305088799 0.0005795644789202474 0.0005804053544492479 0.00037184548827748576 0.00037278824495395505 0.0002370156491221818 0.0002378264113599139 0.00015046804996987382 0.00015109653618969462 9.528590408468248e-05 9.574801357389848e-05 6.0247308147258e-05 6.057680304696976e-05 3.8056050847170796e-05 3.828644589147927e-05 2.4023942410771268e-05 2.4182915529390252e-05
24 0.001 0.0007408802863797739 0.0007416952671281527 0.000578930742889133 0.0005797806095975203 0.00037120336741830446 0.0003721542903540935 0.00023651154189285886 0.000237328155265129 0.00015011002407818366 0.00015074233901078615 9.504399651802114e-05 9.550850289594038e-05 6.008829886368558e-05 6.041925791001213e-05 3.7953197447440844e-05 3.8184473495775654e-05 2.395805259559495e-05 2.411755039775751e-05
25 0.001 0.0007402519284274773 0.0007410757178351933 0.00057829076427012 0.0005791496357472955 0.0003705553757730914 0.0003715144560199718 0.00023600305049498863 0.00023682549660121693 0.0001497489851010917 0.00015038511017095082 9.480009596242987e-05 9.526698399235154e-05 5.992799732470356e-05 6.026040915139781e-05 3.784951541204015e-05 3.8081664403831414e-05 2.389163486774317e-05 2.4051651801815565e-05
26 0.001 0.0007396172736541335 0.0007404498904588522 0.0005776445569193926 0.0005785124464833875 0.0003699015412757306 0.0003708687694343879 0.000235490203447419 0.00023631846348487102 0.00014938495616282697 0.00015002487250269267 9.455421924320194e-05 9.502347349561174e-05 5.976641508193571e-05 6.0100268201280124e-05 3.774501241228877e-05 3.797802621247342e-05 2.38246942217421e-05 2.3985224691142176e-05
27 0.001 0.0007389763302186035 0.000739817793000736 0.0005769921349085269 0.0005778690556051271 0.00036924189214444916 0.0003702172583646133 0.00023497302950733012 0.00023580708427235972 0.00014901796055883247 0.00014966164901128063 9.4306383300876e-05 9.477798815483971e-05 5.960356376224896e-05 5.9938846566140114e-05 3.763969616788547e-05 3.787356656768574e-05 2.37572356829714e-05 2.3918274046705576e-05
28 0.001 0.000738329973009011 0.0007391794336352683 0.0005763343882557762 0.0005772194771261406 0.00036857732657886674 0.00036955995086080306 0.00023445223185895243 0.00023529138755728292 0.00014864849677321228 0.00014929546287266413 9.40569245366171e-05 9.453054483414699e-05 5.943966431343476e-05 5.977615582759686e-05 3.753370952478887e-05 3.776829316380097e-05 2.3689350732036766e-05 2.385080488032797e-05
29 0.001 0.0007376782088319843 0.0007385356837401969 0.0005756713289449496 0.0005765645972068202 0.0003679078688863157 0.00036889774196575574 0.00023392783529630037 0.0002347720745464529 0.00014827658488585004 0.00014892681149659162 9.38058575472753e-05 9.42814794200372e-05 5.927472675087035e-05 5.9612416728092556e-05 3.7427059131368685e-05 3.7662348796962334e-05 2.362104369630353e-05 2.378290869241134e-05
30 0.001 0.0007370210446325295 0.0007378865501365786 0.0005750029691304239 0.0005759044277808471 0.000367233543593211 0.0003682306558404449 0.00023339986479263558 0.0002342491698918279 0.00014790224510292775 0.00014855571485941296 9.355319701349314e-05 9.403080644324396e-05 5.910876114408311e-05 5.944763924389705e-05 3.7319751670569666e-05 3.755574009362634e-05 2.3552318925085614e-05 2.371458979861065e-05
31 0.001 0.0007363584874940915 0.0007372320397833855 0.0005743293211369546 0.0005752389809515306 0.0003665543754437431 0.00036755871686373843 0.00023286834549865966 0.00023372269842386576 0.00014752549775524457 0.0001481821930634036 9.329895769838934e-05 9.377854051813779e-05 5.8941777615809794e-05 5.92818334053861e-05 3.721179385927125e-05 3.74484737148236e-05 2.348318078922229e-05 2.364585253654512e-05
32 0.001 0.0007356906659117175 0.0007365721597776102 0.0005736505214206793 0.0005745682689916729 0.00036587051603697917 0.0003668819496311701 0.00023233340267585003 0.00023319268514975972 0.00014714643450378646 0.00014780626633511263 9.30432026577021e-05 9.352469634142839e-05 5.8773818072131705e-05 5.911500929610015e-05 3.710321298927822e-05 3.734055635551828e-05 2.3413646846771747e-05 2.35767012653732e-05
33 0.001 0.0007350175870680764 0.0007359070382096695 0.0005729665823498456 0.0005738924278329212 0.00036518198995355594 0.00036620050520582223 0.00023179506120909636 0.0002326592549483615 0.00014676507541963834 0.00014742802610623578 9.278594644638945e-05 9.326933684741753e-05 5.8604892484780656e-05 5.8947208765596136e-05 3.699401567385024e-05 3.723201528626343e-05 2.3343721399750524e-05 2.3507153539330125e-05
34 0.001 0.000734339258284937 0.0007352366822744919 0.0005722775164633901 0.0005732114697907263 0.0003644888219905243 0.0003655144080205807 0.00023125334615855053 0.0002321224325628545 0.0001463814406964208 0.00014704749234532768 9.252720370024704e-05 9.30124765259338e-05 5.8435010877524154e-05 5.877844174725213e-05 3.688420855938328e-05 3.712285709891949e-05 2.327340877117354e-05 2.3437213649054356e-05
35 0.001 0.0007336556870231954 0.0007345610993055855 0.0005715833364706749 0.0005725254073502257 0.00036379103715988533 0.0003648236827235576 0.00023070828275766533 0.00023158224291094424 0.00014599555064848363 0.00014666468514311576 9.226698913450141e-05 9.275412994749425e-05 5.82641833251609e-05 5.860871822644595e-05 3.677379832472749e-05 3.701308841848994e-05 2.320271330460301e-05 2.336688590620212e-05
36 0.001 0.0007329668808828947 0.0007338802967751745 0.0005708840552512191 0.0005718342531661053 0.00036308866068712113 0.0003641283541767086 0.00023015989641122435 0.00023103871108296522 0.00014560742570909416 0.00014627962471074844 9.200531754239911e-05 9.249431176193324e-05 5.8092419952513674e-05 5.843804823954878e-05 3.666279168050168e-05 3.690271590243443e-05 2.313163936369656e-05 2.32961746429929e-05
37 0.001 0.000732272847603227 0.0007331942822941306 0.0005701796858544125 0.0005711380200622195 0.000362381718009681 0.000363428447454292 0.0002296082126933358 0.00023049186233985435 0.00014521708642859763 0.00014589233137793237 9.174220379377606e-05 9.223303669696582e-05 5.791973093340874e-05 5.826644187292669e-05 3.6551195368400524e-05 3.679174623998899e-05 2.3060191331749373e-05 2.3225084211761806e-05
38 0.001 0.0007315751779154508 0.0007325030636119942 0.0005694718366517781 0.000570436721031382 0.00036167180797618383 0.0003627239878414387 0.00022905447155647377 0.00022994172211121704 0.00014482540661409508 0.00014550282559116622 9.147823538482221e-05 9.197031955679165e-05 5.774650123146614e-05 5.809390926192732e-05 3.643925790598459e-05 3.66801861514784e-05 2.2988528215049473e-05 2.3153618984504423e-05
39 0.001 0.0007308738763564251 0.0007318082249846354 0.0005687605159526348 0.000569731957456593 0.00036095894758939165 0.0003620165686744435 0.00022849869020493823 0.0002293895269980944 0.00014443240010265552 0.0001451119793900387 9.121342232553745e-05 9.170674702405544e-05 5.7572737692798364e-05 5.792083507086079e-05 3.6326983828340116e-05 3.656828410642266e-05 2.2916652961499898e-05 2.3081938026911105e-05
40 0.001 0.0007301689475478705 0.0007311097709589727 0.0005680457321686527 0.0005690237376093709 0.00036024315397386176 0.0003613062068501535 0.00022794088593578913 0.00022883529410468975 0.00014403808079282816 0.00014471980653999792 9.094777466478586e-05 9.14423290636205e-05 5.739844718775089e-05 5.774722611940683e-05 3.6214377685641065e-05 3.6456044625219865e-05 2.2844568528419092e-05 2.3010044279099164e-05
41 0.001 0.0007294603961963875 0.0007304077061664716 0.0005673274938137002 0.0005683120698629669 0.0003595244443750873 0.00036059291938656614 0.00022738107613769066 0.00022827904062761942 0.00014364246264358423 0.00014432632086784533 9.068130248947494e-05 9.117707567918865e-05 5.72236366103174e-05 5.757308925149413e-05 3.610144404275241e-05 3.6343472243382366e-05 2.2772277882278848e-05 2.293794069062729e-05
42 0.001 0.0007287502876018436 0.0007297020353231152 0.0005666079096289159 0.0005675969626922158 0.00035880496633647314 0.0003598767234219355 0.00022682095171468864 0.00022772078385475435 0.00014324674865159545 0.00014393153626068395 9.041481948469436e-05 9.091099691249356e-05 5.7048841153261715e-05 5.739843133472259e-05 3.598852922211342e-05 3.6230571511141116e-05 2.270000293927642e-05 2.2865630220232028e-05
43 0.001 0.0007280386231103084 0.0007289948155254126 0.0005658869826353605 0.0005668805157203741 0.0003580847262718071 0.00035915975887038315 0.00022626051891339797 0.00022716220982550104 0.00014285094367250402 0.00014353665302637602 9.014832907727154e-05 9.064490513205597e-05 5.687406312117876e-05 5.722378701487135e-05 3.587563473352017e-05 3.611768859725593e-05 2.2627744673782604e-05 2.279333481077374e-05
44 0.001 0.0007273254041056322 0.0007282860481242219 0.0005651647158992671 0.0005661627319510184 0.00035736373064750184 0.0003584420321019746 0.00022569978402038908 0.00022660332474955334 0.00014245505258865028 0.0001431416759965279 8.988183471111395e-05 9.037880375071969e-05 5.669930482943582e-05 5.7049158588914064e-05 3.5762762093538084e-05 3.6004825007582225e-05 2.2555504064421286e-05 2.2721055434706506e-05
45 0.001 0.0007266106320094578 0.0007275757345080665 0.0005644411125319691 0.0005654436144326382 0.00035664198598218 0.00035772354953912867 0.00022513875336164715 0.0002260441348764214 0.0001420590803085807 0.00014274661002939483 8.961533984682783e-05 9.011269619839399e-05 5.652456860390248e-05 5.687454836459578e-05 3.564991282531874e-05 3.5891982254752056e-05 2.2483282093948716e-05 2.2648793068745655e-05
46 0.001 0.000725894308281204 0.0007268638761030398 0.0005637161756897977 0.0005647231662585116 0.0003559194988462394 0.0003570043176561602 0.00022457743330201225 0.0002254846464948739 0.00014166303176654256 0.0001423514600093734 8.934884796133105e-05 8.984658592167178e-05 5.634985678067539e-05 5.6699958660169715e-05 3.5537088458413665e-05 3.5779161857992474e-05 2.2411079749130865e-05 2.2576548693746487e-05
47 0.001 0.0007251764344180624 0.0007261504743729061 0.0005629899085739927 0.0005640013905666712 0.00035519627586142176 0.00035628434297892044 0.0002240158302446243 0.0002249248659324104 0.00014126691192198565 0.00014195623084652692 8.90823625474685e-05 8.958047638345721e-05 5.6175171705805915e-05 5.652539180412445e-05 3.542429052859005e-05 3.5666365342942064e-05 2.233889802062196e-05 2.250432329458613e-05
48 0.001 0.0007244588135748975 0.0007254355308190145 0.0005622641246704724 0.0005632782905397587 0.00035447409591105305 0.00035556363208430486 0.0002234553120905153 0.00022436479955468554 0.00014087167955905718 0.0001415609274760624 8.881652603390643e-05 8.931437106256734e-05 5.600093342830372e-05 5.635085013490999e-05 3.531178983274928e-05 3.5553594241465086e-05 2.2266910019981595e-05 2.2432117860037706e-05
49 0.001 0.000723741443178776 0.0007247208411865314 0.000561538821268995 0.0005625556717890254 0.0003537529553873339 0.0003548439578507697 0.00022289587522719752 0.00022380581171795803 0.00014047733166655684 0.00014116650687104502 8.855133617099835e-05 8.904891159204534e-05 5.5827140373801375e-05 5.61767534392646e-05 3.519958531186087e-05 3.544111934056619e-05 2.219511505192651e-05 2.2360105593797506e-05
50 0.001 0.0007230243206833482 0.00072400640290786 0.0005608139956950427 0.000561833531609933 0.00035303285074046774 0.00035412531668185007 0.00022233751609917817 0.00022324789882467925 0.00014008386527925162 0.00014077296603347102 8.82867907426191e-05 8.878409573173543e-05 5.565379099102327e-05 5.600310014889176e-05 3.508767592227262e-05 3.5328939584811035e-05 2.212351243120618e-05 2.228828580259237e-05
51 0.001 0.0007223074435688039 0.0007232922134419361 0.0005600896453097011 0.000561111867333509 0.0003523137784782074 0.00035340770503880037 0.00022178023120736695 0.00022269105733400152 0.00013969127747733319 0.00014038030201108317 8.802288756574066e-05 8.8519921274859e-05 5.5480883751481105e-05 5.5829888718494674e-05 3.4976060635503277e-05 3.521705393409239e-05 2.2052101482465692e-05 2.221665780315407e-05
52 0.001 0.0007215926247557181 0.0007225782702742098 0.0005593676122940626 0.0005603906763262448 0.00035159759247597197 0.0003526911194401051 0.00022122546934306127 0.00022213528376118449 0.00013930059415776796 0.00013998851189683077 8.776031848020719e-05 8.825638604758897e-05 5.5308872854303e-05 5.5657117625479614e-05 3.486503301641155e-05 3.510546136342301e-05 2.198107017600086e-05 2.214522092208301e-05
53 0.001 0.0007208798585848073 0.0007218663790349207 0.0005586478889723664 0.0005596717927826706 0.0003508842795507963 0.0003519774072686018 0.0002206732171528304 0.00022158202285215626 0.00013891180440309996 0.0001395986194011808 8.749907547557891e-05 8.79941808494171e-05 5.513775276548628e-05 5.5485240659247415e-05 3.475458937431628e-05 3.499445534348073e-05 2.1910416102241813e-05 2.207416317565271e-05
54 0.001 0.0007201691394257483 0.0007211565340671307 0.000557930467712979 0.000558955209053062 0.00035017382661216696 0.0003512665554090523 0.00022012346138632064 0.0002210312613239567 0.00013852489738482468 0.0001392106136609281 8.723915060881119e-05 8.773329770591506e-05 5.49675179985075e-05 5.531425230770577e-05 3.464472605058592e-05 3.4884032196140665e-05 2.184013687270143e-05 2.200348216114185e-05
55 0.001 0.0007194604616770773 0.0007204487297429265 0.00055721534092818 0.0005582409175317231 0.00034946622066134466 0.00035055855083818805 0.00021957618889536463 0.00022048298599609717 0.00013813986236255893 0.00013882448390129787 8.698053600359808e-05 8.747372870968443e-05 5.4798163113848986e-05 5.514414710600884e-05 3.453543941831367e-05 3.477418827518741e-05 2.177023011975932e-05 2.1933175496831414e-05
56 0.001 0.0007187538197660722 0.0007197429604633029 0.0005565025010739346 0.0005575289106567639 0.00034876144879066544 0.00034985338062403464 0.00021903138663308575 0.00021993718378969884 0.0001377566886832086 0.00013844021943515845 8.672322384971475e-05 8.721546601972457e-05 5.462968271852315e-05 5.497491963609735e-05 3.442672588199151e-05 3.466491996599965e-05 2.1700693496445714e-05 2.1863240821795316e-05
57 0.001 0.0007180492081486484 0.0007190392206580874 0.0005557919406496801 0.0005568191809099186 0.00034805949818288173 0.0003491510319252488 0.0002184890416530366 0.00021939384172660586 0.00013737536578016266 0.00013805780966217872 8.646720640237894e-05 8.695850186076947e-05 5.446207146561145e-05 5.480656452622117e-05 3.431858187719449e-05 3.455622368522282e-05 2.1631524676231647e-05 2.1793675795681418e-05
58 0.001 0.000717348639431565 0.0007183375047857581 0.0005550856739198547 0.0005561117208162645 0.00034736232071304855 0.0003484514919904163 0.00021795064331956514 0.00021885294692850114 0.00013699693247692832 0.00013767724406801954 8.621317757037385e-05 8.670282852265318e-05 5.429578217858938e-05 5.463907645048003e-05 3.421129897003673e-05 3.444809588045186e-05 2.1562909902755936e-05 2.172447809850241e-05
59 0.001 0.0007166521035756881 0.0007176398171146462 0.0005543836868927082 0.0005554085359032386 0.0003466698924934393 0.00034775670623974134 0.00021741616794755068 0.0002183159850558065 0.00013662136971116798 0.00013729955964329822 8.596112351100096e-05 8.644913914890404e-05 5.413080535731451e-05 5.447290801376681e-05 3.410487085131832e-05 3.4340828149382966e-05 2.1494845067789903e-05 2.165583410030806e-05
60 0.001 0.0007159595906065037 0.0007169461476104001 0.0005536859656730149 0.0005547096122322624 0.00034598218983055497 0.0003470666509123452 0.0002168855920630381 0.00021778293254731739 0.0001362486585998701 0.00013692473741724035 8.571103051605296e-05 8.61974199558567e-05 5.396713159578493e-05 5.430804975101775e-05 3.399929127512844e-05 3.423441420247442e-05 2.142732610463052e-05 2.15877397033261e-05
61 0.001 0.0007152710906138687 0.0007162564863033777 0.0005529924964615861 0.0005540149359610161 0.00034529918922366796 0.00034638130244054916 0.00021635889240138666 0.00021725376605180745 0.0001358787804376394 0.00013655275859741984 8.546288501047042e-05 8.594765729366703e-05 5.380475158117202e-05 5.4144492290891566e-05 3.389455405818364e-05 3.412884781322755e-05 2.1360348987661796e-05 2.152019085117201e-05
62 0.001 0.0007145881681833736 0.0007155708232884887 0.0005523048607339887 0.0005533244933430584 0.0003446224616264519 0.0003457006374485156 0.00021583728670966556 0.00021672846242622396 0.00013551259312919557 0.00013618360456808432 8.521726369129195e-05 8.569983764497563e-05 5.364404315662281e-05 5.3982226354801364e-05 3.379090310339315e-05 3.40241228175218e-05 2.129406976339983e-05 2.1453183528407172e-05
63 0.001 0.0007139108109389651 0.0007148907167777357 0.0005516230407004492 0.0005526398589811358 0.0003439519758859039 0.0003450262214786548 0.00021532074399295122 0.00021620823613271921 0.00013515007172518374 0.00013581813150424676 8.497414844816332e-05 8.545453691240582e-05 5.3484993898260945e-05 5.3821629494988794e-05 3.368833016244125e-05 3.392048307301558e-05 2.122848306212633e-05 2.1386873841072776e-05
64 0.001 0.0007132390066148024 0.0007142161543980302 0.0005509470187317473 0.0005519610151552632 0.00034328770115903844 0.0003443580235484482 0.00021480923358720733 0.00021569305634208547 0.0001347911915544671 0.00013545631457844443 8.473352137819455e-05 8.521173706397784e-05 5.3327591526929936e-05 5.366268933409295e-05 3.358682708410006e-05 3.381792035746172e-05 2.1163583577742056e-05 2.1321256433336487e-05
65 0.001 0.0007125727430549207 0.0007135471238866448 0.0005502767773585094 0.0005512879443055973 0.000342629606910633 0.0003436960129838173 0.00021430272515636744 0.0002151828925541902 0.0001344359282214269 0.0001350981292399717 8.449536478383494e-05 8.497142027417112e-05 5.317182390666476e-05 5.350539363884576e-05 3.348638581318404e-05 3.371642654533412e-05 2.109936606707349e-05 2.1256326012778444e-05
66 0.001 0.0007119120082129148 0.0007128836130908273 0.0005496122992705212 0.0005506206290316834 0.0003419776629110174 0.00034304015941680915 0.0002138011886894788 0.00021467771459500972 0.00013408425760331254 0.00013474355121214092 8.425966117078749e-05 8.473356892178238e-05 5.3017679043188334e-05 5.3349730318534455e-05 3.3386998389521964e-05 3.361599360677474e-05 2.1035825349191292e-05 2.1192077349695405e-05
67 0.001 0.000711256790151613 0.0007122256099675188 0.0005489535673160376 0.0005499590520918091 0.0003413318392338714 0.0003423904327834519 0.00021330459449785352 0.00021417749261385993 0.00013373615584760944 0.00013439255648970008 8.40263932459383e-05 8.449816558787534e-05 5.286514508242194e-05 5.319568742351694e-05 3.3288656946938245e-05 3.35166136065783e-05 2.0972956304734848e-05 2.1128505276425763e-05
68 0.001 0.0007106071943639499 0.0007115731025829938 0.0005483006816957998 0.0005493031964022937 0.00034069221933208274 0.0003417468033215544 0.0002128129992904075 0.0002136821970805245 0.00013339165932644894 0.000134045121336186 8.379558393280961e-05 8.426519305371512e-05 5.271423641048183e-05 5.304325314373989e-05 3.31913705135711e-05 3.341827870317759e-05 2.091076460544407e-05 2.106560468667675e-05
69 0.001 0.000709963208882901 0.0007109261960066054 0.0005476536252143895 0.0005486531617838624 0.0003400587732671483 0.0003411093543337103 0.0002123263734210078 0.00021319188469384628 0.00013305074425072359 0.00013370128216574169 8.356721599784782e-05 8.403467429429362e-05 5.256494122003263e-05 5.289244191063335e-05 3.3095131256746724e-05 3.3320997960119286e-05 2.0849245154782437e-05 2.1003381278303992e-05
70 0.001 0.0007093248218486061 0.0007102848782749661 0.0005470123808316875 0.0005480089311096272 0.00033943147139689077 0.00034047805604549785 0.0002118446875576196 0.00021270652596543237 0.00013271338709432742 0.00013336101530442401 8.334127240311385e-05 8.380659214968773e-05 5.241724783997488e-05 5.274324196034732e-05 3.299993143509595e-05 3.3224763568979684e-05 2.0788392916005465e-05 2.0941829967612013e-05
71 0.001 0.0007086920215080653 0.0007096491375319776 0.0005463769316622218 0.0005473704874075498 0.0003388102843733889 0.00033985287897724074 0.00021136791267964032 0.00021222609171923644 0.0001323795645916927 0.00013302429733989257 8.311773630434548e-05 8.358092965463258e-05 5.2271144734051514e-05 5.25956416646764e-05 3.290576339760186e-05 3.312956781229619e-05 2.07282029115292e-05 2.088094573050621e-05
72 0.001 0.0007080656480431051 0.0007090189620285115 0.0005457481216341828 0.0005467378138598193 0.0003381960373995552 0.00033923379394201156 0.00021089668206097172 0.00021175055308892372 0.0001320497200486003 0.0001326911051189623 8.289690449717853e-05 8.335767003660405e-05 5.2126825862102536e-05 5.244962952967474e-05 3.2812752146082854e-05 3.3035403062615115e-05 2.0668755034757233e-05 2.0820723601860106e-05
73 0.001 0.0007074456886869565 0.0007083951884833238 0.0005451259321489777 0.0005461117507284293 0.0003375886977799707 0.0003386216233705354 0.0002104309633113142 0.00021128054172409337 0.00013172382748945162 0.00013236188112429926 8.26787581753205e-05 8.31371097341464e-05 5.198427834496719e-05 5.230539940125761e-05 3.2720889139431744e-05 3.294239432192892e-05 2.061004372929991e-05 2.076124352066865e-05
74 0.001 0.0007068321308093747 0.0007077778041323896 0.0005445103448031184 0.000545492279490185 0.0003369882331820464 0.00033801633474888146 0.00020997072442018424 0.00021081602540817874 0.00013140186125447996 0.00013203659950671687 8.246327876643199e-05 8.291923002160208e-05 5.18434894660219e-05 5.216293844781483e-05 3.2630165945308436e-05 3.285053307562121e-05 2.055206350992823e-05 2.0702499944560498e-05
75 0.001 0.0007062249619162967 0.0007071667963482699 0.0005439013413874698 0.0005448793818164008 0.00033639461163356655 0.0003374178959240363 0.00020951593375373114 0.00021035697230232543 0.00013108379599680725 0.00013171523473119512 8.225044792981545e-05 8.270401240613943e-05 5.170444666951808e-05 5.202223399957759e-05 3.254057423900392e-05 3.2759810917439646e-05 2.0494808961820763e-05 2.064448740210184e-05
76 0.001 0.00070562416964951 0.0007065621526397901 0.0005432989038865089 0.000544273039572169 0.00033580780152024723 0.0003368262751014692 0.000209066560051587 0.00020990335094223987 0.00013076960667953474 0.0001313977615739679 8.204024755412909e-05 8.249143862546502e-05 5.156713755893784e-05 5.188327354697137e-05 3.2452105802317056e-05 3.267021954836586e-05 2.0438274739819433e-05 2.0587200492045967e-05
77 0.001 0.0007050297417863318 0.0007059638606517004 0.0005427030144775926 0.0005436732348155853 0.0003352277715833316 0.0003362414408426963 0.00020862257242375786 0.00020945513023505862 0.00013045926857287288 0.00013108415511962746 8.183265975513502e-05 8.228149064554578e-05 5.143154989537623e-05 5.174604473897535e-05 3.236475252244954e-05 3.258175077549588e-05 2.038245556769746e-05 2.053063388259103e-05
78 0.001 0.0007044417829621171 0.0007053719081643225 0.000542113771820027 0.0005430799497970297 0.0003346546023905152 0.00033566336206289793 0.00020818402485557293 0.00020901227945626015 0.00013015281596227648 0.00013077439075827684 8.162770599537212e-05 8.20741506583782e-05 5.129769708700084e-05 5.161053538152209e-05 3.227852278867728e-05 3.249439651094783e-05 2.032735670561579e-05 2.047478231065629e-05
79 0.001 0.0007038602809995153 0.0007047863993885064 0.0005415311581470623 0.0005424932828039034 0.00033408826282687573 0.0003350921191971394 0.00020775088664703998 0.0002085748525953015 0.00012985022429639665 0.00013046850282623395 8.142536853201701e-05 8.186944018288875e-05 5.116556699709043e-05 5.147675893062123e-05 3.219340855821242e-05 3.240816518060804e-05 2.0272972923816322e-05 2.0419651063027786e-05
80 0.001 0.0007032852238493367 0.0007042073221500205 0.0005409551558747416 0.000541913216142546 0.0003335287221154158 0.0003345276813035574 0.00020732312745044945 0.00020814281911618103 0.00012955146931603386 0.00013016646689064054 8.122562983828357e-05 8.166734155142674e-05 5.103514763884953e-05 5.134470329367606e-05 3.2109401888525124e-05 3.232304876615549e-05 2.0219299058105656e-05 2.0365234922821375e-05
81 0.001 0.0007027165995902542 0.0007036346644028755 0.0005403857476012292 0.0005413397323015136 0.00033297594981485264 0.0003339700177764314 0.00020690071726752732 0.00020771614883326046 0.0001292565270515082 0.00012986825880927205 8.102847260135871e-05 8.146783731136239e-05 5.090642717392409e-05 5.121435652738549e-05 3.202649493632917e-05 3.2239039349161415e-05 2.0166330009182866e-05 2.0311528738515718e-05
82 0.001 0.0007021546252265139 0.0007030684142289592 0.0005398231466905069 0.0005407728139509093 0.00033243014325207994 0.00033341909834398085 0.00020648380199548492 0.00020729481190839792 0.0001289654971719027 0.00012957385472790145 8.083396250547584e-05 8.12709102230124e-05 5.077944809587575e-05 5.1085706836262186e-05 3.194471491165552e-05 3.215612911007561e-05 2.0114083097018264e-05 2.0258527423278803e-05
83 0.001 0.0007015992888126556 0.0007025087877125606 0.0005392673356287205 0.0005402126735385767 0.0003318912717105927 0.0003328751197405316 0.00020607235137144977 0.00020687895394469412 0.0001286783555062261 0.00012928335419699167 8.06420820982489e-05 8.107662593993734e-05 5.065419847368218e-05 5.095879672189383e-05 3.186405391103787e-05 3.2074345280702784e-05 2.006255318369691e-05 2.0206248321016987e-05
84 0.001 0.0007010505785332368 0.0007019557729111361 0.0005387182970867077 0.0005396592936234858 0.00033135930481238495 0.0003323380514212155 0.00020566633548374424 0.00020646854484108668 0.0001283950781739038 0.0001289967331620245 8.04528141416734e-05 8.088496708343894e-05 5.053066652493675e-05 5.083361429641059e-05 3.1784504130324826e-05 3.1993679981452625e-05 2.001173519622426e-05 2.0154686306347033e-05
85 0.001 0.000700508482702546 0.0007014093580122255 0.0005381760139193414 0.0005391126569487217 0.00033083421251577956 0.00033180786317787807 0.00020526572476908743 0.00020606355484577673 0.000128115641582197 0.00012871396785738722 8.026614161010359e-05 8.069591648818549e-05 5.040884061439589e-05 5.071014781993386e-05 3.170605786368809e-05 3.191412543168724e-05 1.9961624125869314e-05 2.010383631860697e-05
86 0.001 0.0006999729897643184 0.0007008695313331482 0.0005376404691648787 0.0005385727464408199 0.00033031596511327947 0.0003312845251369297 0.00020487049000982136 0.00020566395455347188 0.00012784002242364822 0.0001284350348038258 8.008204768824872e-05 8.050945720021523e-05 5.028870925253973e-05 5.058838569914163e-05 3.1628707502639986e-05 3.1835673948741706e-05 1.9912215027513866e-05 2.0053693361205354e-05
87 0.001 0.0006994440882914515 0.0007003362813206957 0.0005371116460443127 0.0005380395452091099 0.0003298045332294241 0.00033076800775717 0.0002044806023311588 0.00020526971490259695 0.0001275681976735486 0.00012815991080588224 7.990051576919067e-05 8.032557247492852e-05 5.0170261094149856e-05 5.046831648582724e-05 3.155244553506268e-05 3.175831794694013e-05 1.9863503019009735e-05 2.0004252500969603e-05
88 0.001 0.0006989172535560769 0.0006998095965508554 0.0005365850419669894 0.0005375130365450592 0.000329295612913881 0.00033025828182767485 0.00020409280438264766 0.00020488080717254625 0.00012729790663346764 0.00012788857294937395 7.972004038787022e-05 8.014424577511121e-05 5.0052515589855926e-05 5.0349928875481843e-05 3.147664135129994e-05 3.168204993662801e-05 1.9815085586326718e-05 1.9955508867504938e-05
89 0.001 0.0006983924815322933 0.0006992849713647436 0.0005360606511477293 0.000536988737498668 0.0003287891938968759 0.0003297510574308719 0.00020370708584067882 0.00020449398184933928 0.00012702914094133737 0.0001276187643023316 7.954061545150935e-05 7.996397313508213e-05 4.993546855036179e-05 5.023224268320585e-05 3.140129216611291e-05 3.160623916862529e-05 1.9766960914662127e-05 1.9907059627792014e-05
90 0.001 0.0006978697681747856 0.0006987624017369506 0.000535538467781285 0.0005364666423066755 0.000328285265898271 0.0003292463243531191 0.00020332343638453147 0.00020410922866516542 0.00012676189224377013 0.000127350476544274 7.936223487646896e-05 7.978474848904117e-05 4.981911579385119e-05 5.011525373583123e-05 3.1326395199731696e-05 3.153088286679667e-05 1.971912719297887e-05 1.985890297191875e-05
91 0.001 0.0006973491094188342 0.0006982418836227756 0.0005350184860423863 0.0005359467451858974 0.0003277838186277228 0.000328744072370431 0.0002029418456965422 0.00020372653735498857 0.0001264961521961901 0.00012708370136324496 7.918489258833681e-05 7.960656578019794e-05 4.970345314604528e-05 4.9998957867578574e-05 3.125194767789152e-05 3.1455978260416835e-05 1.967158261402843e-05 1.9811037093701456e-05
92 0.001 0.0006968284099289676 0.0006977234129582083 0.000534498597351666 0.0005354290403332512 0.00032728277956097635 0.00032824429124863073 0.00020256071739357045 0.00020334589765671668 0.0001262308004979493 0.0001268184304559618 7.900783730702533e-05 7.942941896086744e-05 4.958798911408524e-05 4.988335092011608e-05 3.1177632631488905e-05 3.138152258420484e-05 1.9624124503146986e-05 1.976346019070644e-05
93 0.001 0.0006963076677967887 0.0006972049031024503 0.0005339787996978908 0.0005349114284143175 0.00032678214616920946 0.00032774491556384407 0.00020218004908417888 0.00020296571741865816 0.0001259658352285323 0.00012655354571184963 7.883106763041168e-05 7.925255773427056e-05 4.947272273059253e-05 4.976794174339877e-05 3.110344941552445e-05 3.130719890433304e-05 1.957675243920473e-05 1.971596949574029e-05
94 0.001 0.0006957868810888677 0.0006966863521517465 0.0005334590910383602 0.000534393907423076 0.00032628191587964447 0.000327245942795149 0.00020179983833834103 0.00020258599425811892 0.00012570125443876325 0.00012628904521745982 7.865458213663353e-05 7.907598070306232e-05 4.935765301510161e-05 4.965272937294146e-05 3.102939737649859e-05 3.123300657741713e-05 1.9529465995615212e-05 1.966856458850977e-05
95 0.001 0.0006952660478468047 0.000696167758177353 0.0005329394692990367 0.0005338764753221901 0.0003257820860759608 0.0003267473703778833 0.00020142008268794192 0.00020220672575398438 0.0001254370561512512 0.00012602492703077633 7.847837938443003e-05 7.889968645020544e-05 4.924277897429975e-05 4.95377128311886e-05 3.0955475852573814e-05 3.1158944951577065e-05 1.94822647404421e-05 1.9621245043263798e-05
96 0.001 0.00069474516608728 0.0006956491192256274 0.0005324199323746772 0.0005333591300431401 0.00032528265409871067 0.0003262491957040711 0.0002010407796272818 0.00020182790944721542 0.0001251732383608348 0.00012576118918167348 7.830245791348127e-05 7.872367353931904e-05 4.91280996022673e-05 4.942289112776892e-05 3.088168417373684e-05 3.108501336660957e-05 1.943514823650581e-05 1.957401042890837e-05
97 0.001 0.0006951304333180151 0.0005328418694862771 0.0003257514161227785 0.00020144954284132072 0.00012549782967232552 7.854794051499734e-05 4.9308263259716635e-05 3.1011211154138606e-05 1.9526860309103978e-05

View File

@@ -1,98 +1,99 @@
0.001,0.0007651928200015371,0.0006070713937965498,0.00041423535558437785,0.0002897888610631573,0.00021340907299884933,0.00017198131811953097,0.00016127923791982795,0.00019503601408127412,0.00036549739730595273
0.001,0.0007645995806173374,0.0006064422887178694,0.00041349144049413134,0.00028906380160320487,0.00021270693331134475,0.0001712438796411692,0.0001603765556252246,0.00019363496213474675,0.00036239423700181427
0.001,0.0007640065772643761,0.0006058136176614386,0.00041274866023030733,0.0002883403899406645,0.0002120069527025505,0.00017050944162049183,0.000159478716966613,0.00019224364342300643,0.0003593168093314386
0.001,0.0007634138087852742,0.000605185379478,0.0004120070127662441,0.0002876186224176594,0.00021130912485491145,0.00016977799240843955,0.0001585856969223786,0.00019086199210672448,0.0003562649023666937
0.001,0.0007628028346998721,0.0006045332187986192,0.0004112166712442958,0.0002868226029691562,0.00021050564591298308,0.0001688917074786142,0.00015743651373617922,0.00018893812235512526,0.0003514029291704815
0.001,0.0007621921143131398,0.0006038815297458003,0.00041042762231867933,0.00028602858816935265,0.00020970502628600424,0.00016800982241073787,0.00015629534163924753,0.00018703308452519017,0.00034660591682276115
0.001,0.0007615816463554626,0.0006032303109890501,0.0004096398633263614,0.0002852365728026657,0.00020890725596775628,0.00016713231600712825,0.00015516212643578583,0.00018514669874176095,0.00034187301148734186
0.001,0.0007609692265548555,0.000602577299493926,0.0004088509941253184,0.00028444450359523985,0.00020811064471691694,0.00016625772561605027,0.00015403541161623416,0.00018327705284413884,0.00033720006213702974
0.001,0.0007603548574442921,0.0006019224999904981,0.0004080610253035772,0.00028365239238410656,0.0002073152021201705,0.00016538605339556675,0.00015291517504370476,0.00018142402424673905,0.0003325863766610152
0.001,0.0007597350402439383,0.0006012612395706585,0.0004072600935672035,0.0002828447987841907,0.00020649842223713097,0.00016448344741808307,0.00015174362495246272,0.00017946021794659197,0.00032758319657592714
0.001,0.0007591132829776185,0.0006005982088110791,0.0004064581175876688,0.00028203726728774387,0.00020568299547110922,0.00016358411213968798,0.00015057934813125987,0.00017751539893581778,0.00032265060787650516
0.001,0.000758484736453085,0.0005999283660908604,0.0004056495676510805,0.00028122495212139567,0.00020486486304104927,0.00016268449575399985,0.00014941879820841596,0.00017558496339953558,0.0003177787884410679
0.001,0.0007578494094215417,0.0005992517275730322,0.0004048344831924046,0.000280407904430663,0.00020404408117776887,0.0001617846565020927,0.00014826202727426984,0.00017366890284920263,0.0003129672376410902
0.001,0.0007572073108060312,0.0005985683096346821,0.0004040129039083478,0.0002795861755026316,0.00020322070604404603,0.00016088465224596546,0.00014710908652278506,0.00017176720707727308,0.00030821545426856767
0.001,0.0007565575890478602,0.00059787696153193,0.0004031823074325593,0.00027875567967892653,0.00020238859856737548,0.00015997497741322437,0.00014594324831107206,0.00016984173084389243,0.0003033838449669414
0.001,0.0007559011152632264,0.0005971788697390111,0.00040234530612592536,0.0002779206290242912,0.00020155405878687617,0.00015906535701622418,0.0001447815990558725,0.00016793142878541938,0.0002986152551090434
0.001,0.000755237898986442,0.000596474051424026,0.00040150194087318277,0.00027708107588917086,0.00020071714346489746,0.00015815584855490808,0.00014362418708307366,0.00016603627832169687,0.00029390910930431773
0.001,0.0007545681886825906,0.0005957627683701927,0.00040065250958751827,0.00027623729012494873,0.00019987808563904174,0.00015724665811831285,0.0001424712015659587,0.00016415642490307197,0.0002892651425802985
0.001,0.0007538919937536639,0.0005950450374279253,0.0003997970520738093,0.0002753893223189692,0.00019903693960802692,0.00015633783972296886,0.0001413226854400146,0.00016229183664828758,0.0002846827650697017
0.001,0.0007532045557665671,0.0005943145247994342,0.0003989223236188871,0.00027451662339635243,0.0001981640806362608,0.00015538551594067732,0.00014010540813129958,0.00016028630721570607,0.00027963581042999
0.001,0.0007525106592079478,0.0005935776116184588,0.00039804170193550713,0.0002736399653899091,0.00019728948692008958,0.00015443417816766013,0.00013889388158999866,0.0001582996284854468,0.0002746667454821644
0.001,0.0007518104383956622,0.000592834444449282,0.0003971553683797481,0.0002727595219957832,0.00019641331428482412,0.00015348396557824612,0.00013768822268133468,0.000156331819705631,0.00026977480754699626
0.001,0.0007511039033537896,0.0005920850408658466,0.0003962633635582371,0.00027187534416274955,0.00019553561634171146,0.00015253492870981108,0.00013648846139846028,0.00015438279270990136,0.0002649590347362105
0.001,0.0007503910642803073,0.0005913294186556257,0.0003953657283217157,0.0002709874829437419,0.00019465644657888978,0.0001515871176567501,0.0001352946268320504,0.0001524524582210848,0.0002602184722292356
0.001,0.0007496855573046408,0.0005905851062898704,0.00039449552403657745,0.00027014241927282736,0.0001938361803657908,0.0001507194393001951,0.00013421767536698768,0.000150722476765932,0.0002559376038022294
0.001,0.0007489737467556278,0.0005898345737440663,0.000393619635985906,0.00026929349394052985,0.00019301404332913125,0.00014985216957655317,0.00013314488789598826,0.00014900672746282064,0.00025171693602497907
0.001,0.0007482556429977025,0.0005890778388714725,0.00039273810426086416,0.0002684407562332248,0.0001921900867993824,0.00014898535811302548,0.00013207630234912348,0.00014730517414690737,0.000247555825445753
0.001,0.000747532135526673,0.0005883158165865031,0.0003918519024244402,0.00026758503804540166,0.0001913649895279964,0.00014811957577380352,0.00013101244041258906,0.0001456183389249714,0.00024345460151209766
0.001,0.0007468032330641541,0.0005875485221384682,0.0003909610648762846,0.00026672638132361175,0.0001905387943939666,0.00014725486211264363,0.00012995332641946747,0.00014394616337354944,0.00023941257691738652
0.001,0.0007460689444707028,0.0005867759709451519,0.0003900656262003575,0.00026586482808789615,0.00018971154418348472,0.00014639125636754904,0.00012889898406950181,0.00014228858823944247,0.00023542906884335907
0.001,0.0007453292787585437,0.0005859981786120694,0.0003891656212152682,0.00026500042051039684,0.000188883281693472,0.0001455287975953345,0.000127849436626481,0.0001406455538271199,0.00023150340029334736
0.001,0.0007445843685250069,0.0005852152884984452,0.0003882612223549495,0.00026413331906842847,0.00018805414639063353,0.00014466760638632992,0.00012680478406473458,0.00013901709088191773,0.00022763506393382832
0.001,0.0007438342228409441,0.0005844273161744179,0.0003873524639441998,0.00026326356496406687,0.00018722417962072503,0.0001438077197030893,0.00012576504647438162,0.00013740313489262333,0.00022382338328436597
0.001,0.0007430788509165626,0.0005836342773781009,0.0003864393804873395,0.0002623911994661588,0.00018639342263244998,0.00014294917419819004,0.000124730243348245,0.00013580362065026603,0.00022006768669446508
0.001,0.000742327254060605,0.0005828476385639736,0.00038554300530339766,0.00026154496076193957,0.00018559797011481673,0.0001421370333657246,0.00012375932796391997,0.00013430279846409174,0.00021649152387618443
0.001,0.0007415704350109161,0.0005820559385468977,0.00038464228372291103,0.0002606960153281244,0.00018480150743526303,0.00014132579578003348,0.000122792459010487,0.0001328143978658426,0.0002129659469511457
0.001,0.0007408084031449065,0.0005812591931755618,0.00038373724983374976,0.00025984440338310303,0.0001840040745362742,0.0001405154975809745,0.00012182965960439977,0.00013133837476817992,0.00020949038404752677
0.001,0.0007400427720784002,0.0005804590496942265,0.00038282961864956994,0.0002589915613698488,0.00018320681873232144,0.00013970708155515462,0.00012087177639736769,0.00012987560432955444,0.00020606578076074432
0.001,0.0007392735475065714,0.0005796555183614057,0.00038191941292656456,0.0002581375157328154,0.0001824097650442608,0.00013890056717630873,0.00011991881140841177,0.0001284260094133047,0.00020269149646849757
0.001,0.0007385007352097838,0.0005788486095364762,0.00038100665551987393,0.00025728229294257515,0.00018161293842329387,0.00013809597373520515,0.00011897076635433426,0.0001269895128043655,0.00019936689671873207
0.001,0.0007377243410529983,0.0005780383336785572,0.0003800913693799712,0.0002564259194903244,0.00018081636374445108,0.00013729332033271256,0.00011802764264291933,0.00012556603720150224,0.00019609135315036536
0.001,0.0007369464655998592,0.0005772268587748353,0.0003791758785432219,0.0002555703831979673,0.00018002165393456068,0.00013649394990366146,0.00011709066577140669,0.00012415690240967774,0.0001928666431485617
0.001,0.0007361671107233329,0.000576414188654825,0.000378260191109379,0.00025471569177879693,0.0001792288130669198,0.00013569785799734456,0.00011615980704210183,0.00012276198311838844,0.00018969202938803596
0.001,0.0007353862783344302,0.000575600327192691,0.00037734431522203,0.00025386185296321013,0.00017843784520433673,0.00013490504014296103,0.00011523503783001357,0.00012138115492992521,0.0001865667844236815
0.001,0.0007346027258369329,0.0005747835721418604,0.00037642443290667116,0.0002530026346493095,0.000177639416207763,0.0001341012793025371,0.0001142922256260196,0.00011996295037667013,0.00018332302768968173
0.001,0.0007338177018431625,0.0005739656376861859,0.00037550439543261463,0.0002521443237629474,0.00017684294734265143,0.00013330094534015117,0.00011335582519792064,0.00011855974750452474,0.00018013280630154984
0.001,0.0007330312083387708,0.0005731465277735759,0.000374584210907019,0.00025128692777751636,0.0001760484420635206,0.00013250403238709868,0.00011242580398299235,0.00011717140625198769,0.000176995286763841
0.001,0.0007322450716827681,0.0005723280950701311,0.00037366577307640326,0.00025043200586833656,0.00017525712146802507,0.00013171151729665014,0.00011150300328069361,0.00011579873047427355,0.00017391111613739919
0.001,0.0007314592892342591,0.0005715103366354928,0.0003727490765712826,0.00024957954955556494,0.0001744689721973381,0.00013092337604814113,0.00011058736861417956,0.00011444154833756723,0.0001708794064250159
0.001,0.0007306738583803173,0.0005706932495677312,0.00037183411609277345,0.00024872955044744495,0.00017368398100343736,0.0001301395848004509,0.00010967884595770732,0.00011309968990727626,0.00016789928423747183
0.001,0.0007298887765314699,0.0005698768309963597,0.00037092088639398746,0.0002478820002115871,0.00017290213471209804,0.00012936011984533696,0.0001087773816703527,0.00011177298701463364,0.00016496989019036454
0.001,0.0007291058850619836,0.0005690629705872476,0.0003700113801847071,0.0002470385774678141,0.00017212477134492983,0.0001285860674779147,0.00010788392632853856,0.00011046237940908493,0.00016209217355659912
0.001,0.0007283251776795193,0.0005682516594285885,0.0003691055790623401,0.0002461992575642169,0.00017135185999287266,0.00012781738439880834,0.00010699840217906239,0.00010916766306641233,0.00015926520709064215
0.001,0.000727546648123048,0.000567442888658507,0.0003682034647519281,0.00024536401604150686,0.00017058337001160307,0.00012705402771768452,0.00010612073231230378,0.0001078886367084761,0.00015648808062028533
0.001,0.0007267691175258129,0.0005666351120658079,0.00036730194585451363,0.00024452825978826814,0.00016981299319253088,0.00012628722374912656,0.00010523753204397677,0.00010660034638564814,0.00015369233245141463
0.001,0.0007259937543683618,0.0005658298620581495,0.00036640409142867466,0.00024369656281803695,0.0001690470312136919,0.00012552576286196436,0.00010436224908854787,0.00010532792661952348,0.00015094700928094292
0.001,0.0007252205525006216,0.0005650271299429238,0.0003655098835814395,0.0002428689011484816,0.0001682854538881413,0.00012476960247399048,0.00010349480634605481,0.00010407117393308648,0.00014825118806841486
0.001,0.0007244515476870691,0.0005642289688561167,0.00036462138604045246,0.00024204694758546622,0.00016752954803985582,0.00012401974721449815,0.00010263603739686231,0.00010283083470852359,0.0001456053538142381
0.001,0.0007236867286572494,0.0005634353625294562,0.0003637385663464586,0.00024123066115747858,0.00016677926586679636,0.00012327613591461942,0.00010178584352378332,0.00010160667618634935,0.0001430085413998934
0.001,0.0007229260842094953,0.0005626462948017631,0.0003628613922977866,0.00024042000126051454,0.00016603456004153966,0.00012253870808207087,0.0001009441272602465,0.00010039846917127745,0.000140459805170444
0.001,0.0007221696032014468,0.000561861749604344,0.00036198983191176377,0.0002396149275989645,0.00016529538363567852,0.00012180740380654271,0.00010011079225737115,9.920598777483068e-05,0.00013795821792425024
0.001,0.0007214188723728384,0.00056108334509554,0.0003611255610840681,0.0002388168283348348,0.00016456282140960994,0.00012108307905286178,9.928655238677393e-05,9.802986918413655e-05,0.0001355041849544529
0.001,0.0007206738776295639,0.0005603110603628828,0.0003602685373417506,0.00023802565027806571,0.00016383681258690845,0.00012036565891864721,9.847129356381268e-05,9.686986333449523e-05,0.0001330967445342526
0.001,0.0007199346049934109,0.0005595448746691314,0.00035941871861020354,0.00023724134078502595,0.00016311729706930416,0.00011965506942237431,9.7664903298557e-05,9.57257243308077e-05,0.00013073495556510661
0.001,0.0007192103057281418,0.0005587965882928195,0.000358597914203722,0.00023649404923234267,0.0001624426539507404,0.00011900000933912548,9.693290327537121e-05,9.469853254875163e-05,0.0001286228242214262
0.001,0.0007184916860834766,0.000558054333130965,0.0003577841401235257,0.0002357533416394368,0.00016177407584741055,0.00011835110239617177,9.620855295571759e-05,9.368449216343134e-05,0.0001265476735456528
0.001,0.000717778732645577,0.0005573180893469085,0.0003569773567342285,0.0002350191694371068,0.0001611115088719043,0.00011770828481211398,9.549176022876216e-05,9.268341301362701e-05,0.00012450880618841231
0.001,0.0007170715507844816,0.0005565879566941514,0.0003561776441627035,0.00023429158098135867,0.00016045497378223205,0.00011707155159443024,9.47824835635146e-05,9.169515755193108e-05,0.00012250560759307665
0.001,0.0007163701270344053,0.0005558639152622166,0.0003553849627325309,0.00023357052778616886,0.00015980441694230793,0.00011644083951173604,9.408063218207804e-05,9.071953997714039e-05,0.00012053740486430812
0.001,0.0007156744480415676,0.0005551459453084167,0.00035459927313802623,0.00023285596185845654,0.00015915978530381373,0.00011581608608941654,9.338611653058621e-05,8.975637744384618e-05,0.00011860353870291344
0.001,0.0007149845005557793,0.0005544340272448129,0.0003538205364097734,0.0002321478356456351,0.0001585210263398076,0.00011519722952770958,9.269884816673769e-05,8.880548985453175e-05,0.00011670336266552508
0.001,0.0007143011352806332,0.0005537290222260827,0.0003530496254918224,0.00023144685778402562,0.00015788868071804074,0.00011458468167101622,9.20191492389152e-05,8.786712068874325e-05,0.00011483685132763588
0.001,0.0007136243377311475,0.0005530309085687206,0.00035228649684153725,0.0002307529751854999,0.00015726269010384348,0.00011397837465469773,9.134692457668887e-05,8.694108196461404e-05,0.00011300335424584403
0.001,0.0007129540935643617,0.0005523396647985742,0.000351531107363628,0.0002300661353432777,0.0001566429968410848,0.00011337824146720777,9.06820803490277e-05,8.602718880727694e-05,0.00011120223452206596
0.001,0.0007122949300063586,0.0005516609446370161,0.0003507932546232374,0.0002293990178082647,0.00015604454205901748,0.00011280134646728481,9.004396195380538e-05,8.514641523915274e-05,0.00010944396621311202
0.001,0.0007116422850379047,0.0005509890404263221,0.00035006301886912226,0.00022873877079420107,0.00015545216193435095,0.00011223032450910806,8.941277122627028e-05,8.427699754143763e-05,0.00010771649233683978
0.001,0.0007109961448775265,0.0005503239315436604,0.00034934035900275196,0.00022808534468017605,0.00015486580256638324,0.00011166511373672321,8.878842266662507e-05,8.341876815036907e-05,0.00010601922394974779
0.001,0.0007103566138672342,0.0005496657159311855,0.0003486253516297722,0.00022743878433373037,0.00015428548213839886,0.00011110570832676001,8.81708780194749e-05,8.25716070442755e-05,0.00010435164299643007
0.001,0.0007097236782517396,0.0005490143729973408,0.0003479179557857281,0.0002267990403962617,0.0001537111471536449,0.00011055204708289399,8.756005313455197e-05,8.173535064610718e-05,0.0001027131817052566
0.001,0.0007090973244087274,0.0005483698823458906,0.00034721813091834777,0.000226166064037726,0.00015314274472297157,0.00011000406955950422,8.695586501935841e-05,8.090983803329783e-05,0.00010110328401062253
0.001,0.0007084775388425413,0.0005477322237660661,0.0003465258368613831,0.00022553980691704316,0.00015258022251510344,0.00010946171600087524,8.635823175652435e-05,8.00949107862898e-05,9.952140501322636e-05
0.001,0.0007078645400735427,0.0005471016129101978,0.0003458412757255009,0.00022492042013778988,0.00015202368335334558,0.00010892504915290583,8.57671759148139e-05,7.929051589048381e-05,9.796715152670613e-05
0.001,0.0007072583145347741,0.0005464780293804963,0.00034516440688163317,0.00022430785483116316,0.0001514730744232032,0.00010839400891826328,8.518261565996433e-05,7.84964968569563e-05,9.643999410136803e-05
0.001,0.0007066588487940405,0.000545861452976259,0.0003444951901125997,0.00022370206265319418,0.00015092834351042303,0.00010786853593723236,8.460447028623623e-05,7.771269974698105e-05,9.493941424410264e-05
0.001,0.0007060768113835355,0.0005452653567881146,0.00034385780916102886,0.0002231355522451839,0.0001504295746545273,0.00010739737531972382,8.409424224945842e-05,7.702434963545377e-05,9.360618912201228e-05
0.001,0.0007055014939207988,0.0005446762036784223,0.00034322791998477503,0.0002225755642266546,0.00014993632274793293,0.00010693123855410087,8.358951092264173e-05,7.634435339541097e-05,9.22944227993744e-05
0.001,0.0007049328836329239,0.0005440939744776738,0.0003426054850001757,0.00022202205441602206,0.000149448541485554,0.00010647007505716636,8.309021096715739e-05,7.567259318109089e-05,9.100372969350909e-05
0.001,0.0007043664108869901,0.0005435140913972429,0.00034198598587466614,0.00022147141590047654,0.00014896349766232102,0.00010601178096740148,8.259459730216135e-05,7.500736724232048e-05,8.973176442333615e-05
0.001,0.0007038020712072354,0.0005429365478183962,0.00034136940918446675,0.0002209236320980648,0.00014848117283038098,0.00010555633431743894,8.210263744821714e-05,7.434860458126827e-05,8.847824135377829e-05
0.001,0.0007032398600991381,0.0005423613371043419,0.00034075574151016483,0.0002203786864681782,0.00014800154862415601,0.00010510371328265478,8.161429921011451e-05,7.369623501807121e-05,8.724287943554497e-05
0.001,0.0007026797730466592,0.0005417884525961108,0.00034014496942632764,0.0002198365624959981,0.00014752460674093983,0.00010465389615779026,8.112955064604149e-05,7.305018913687007e-05,8.602540201539488e-05
0.001,0.0007021196874055633,0.0005412157406692665,0.0003395348927353949,0.00021929545761274023,0.00014704895219343257,0.00010420578859113516,8.064746506639534e-05,7.240953347459202e-05,8.482441661675139e-05
0.001,0.0007015596012323657,0.0005406431992153213,0.0003389255082691921,0.00021875536780717296,0.00014657457987728414,0.00010375938295149973,8.016802726693694e-05,7.17742234562459e-05,8.363970356449741e-05
0.001,0.0007009995125587165,0.0005400708260946051,0.0003383168128172846,0.00021821628903476192,0.00014610148467187763,0.0001033146716169485,7.969122211456026e-05,7.114421486558773e-05,8.247104609297546e-05
0.001,0.000700426120570031,0.0005394817717340144,0.00033767827777106695,0.00021763678242090514,0.00014557802543177205,0.00010280805245363877,7.913535785684264e-05,7.040274681183516e-05,8.111172191387726e-05
0.001,0.0006998527383823768,0.0005388929110101418,0.0003370405259007354,0.00021705847496470142,0.00014505616500334602,0.00010230367256069614,7.858312049704058e-05,6.966868896041247e-05,7.977423771714316e-05
0.0010496228983614124,0.002020602352332682,0.0024834354692445607,0.004712247621156641,0.00854174709233096,0.015197203876184536,0.027142477151470907,0.049749449744480465,0.09589624880110185,0.2
0.004235602571438949,0.007336805952289255,0.008714058005603317,0.015024716476258112,0.025061770718850837,0.04079161627542227,0.0649508755581543,0.10074574737193842,0.14993445055894863,0.206
0 km,7 km,10 km,20 km,30 km,40 km,50 km,60 km,70 km,80 km
0.001,0.0007654185419972524,0.0006073276056093792,0.0004146475603472041,0.0002902671662170687,0.00021391771777705748,0.0001725335650783217,0.0001619576961300996,0.00019613348481478226,0.00036856555154569
0.001,0.0007648265274364283,0.0006066999211698721,0.00041390447843586643,0.00028954214777674505,0.00021321488386807227,0.000171794621873672,0.00016105212098646378,0.00019472570335261124,0.00036543839103292923
0.001,0.00076423475082742,0.0006060726714187721,0.00041316253063080743,0.0002888187769396436,0.00021251421079625184,0.0001710586847350929,0.00016015140443848455,0.0001933277019274264,0.0003623371672096105
0.001,0.0007636432110143774,0.0006054458552058583,0.0004124217148997164,0.0002880970500399001,0.00021181569222935437,0.00017032574197864756,0.00015925552136261768,0.00019193941431515274,0.0003592616661738057
0.001,0.00076303338083269,0.0006047950045143256,0.0004116319711720434,0.0002873006965446473,0.00021101094555209704,0.00016943701776024394,0.00015810165194844262,0.00019000410483730154,0.00035435344277520014
0.001,0.0007624238065102939,0.0006041446264165162,0.00041084352013847123,0.0002865063493191246,0.0002102090638489634,0.00016855270795343295,0.00015695583271993784,0.000188087762219128,0.00034951092824224374
0.001,0.0007618144867783217,0.0006034947195801519,0.00041005635912737644,0.00028571400313117073,0.000209410037075066,0.00016767279125308264,0.000155818009114819,0.0001861902048930817,0.00034473325633896016
0.001,0.0007612032230964268,0.0006028430274261829,0.0004092680923152776,0.00028492160640338084,0.00020861217469969167,0.00016679580316719344,0.00015468672086849377,0.00018430951195784153,0.0003400162401556392
0.001,0.0007605900180176352,0.0006021895546863309,0.000408478730269415,0.00028412917095061395,0.00020781548628341263,0.00016592174578786424,0.0001535619455802766,0.00018244555944842464,0.000335359176825339
0.001,0.0007599713504055552,0.0006015295991965402,0.0004076783487865176,0.0002833211587561824,0.00020699731581240013,0.00016501652229006483,0.00015238542164450143,0.000180469716663273,0.00033030742335106797
0.001,0.0007593507507343548,0.0006008678808679657,0.00040687692763931326,0.0002825132124386522,0.00020618050489600874,0.00016411458466993175,0.0001512162128542595,0.00017851301079839705,0.00032532712476693115
0.001,0.0007587233815624382,0.0006001993719156019,0.00040606894689472706,0.0002817004901671922,0.0002053609939218913,0.0001632123763493078,0.00015005076311129325,0.00017657081573262424,0.0003204083683965919
0.001,0.0007580892517126006,0.0005995240885208491,0.0004052544459439752,0.0002808830430533993,0.00020453883912382008,0.0001623099555953223,0.0001488891244397257,0.00017464312199372379,0.0003155506430768726
0.001,0.000757448370179369,0.0005988420470784952,0.00040443346443882024,0.0002800609223493252,0.00020371409666633197,0.00016140738029416416,0.00014773134796391561,0.00017272991838834854,0.0003107534371554913
0.001,0.0007567998780637095,0.00059815208713495,0.0004036034596839685,0.0002792300099339312,0.0002028805779162198,0.0001604950646725177,0.00014656055358564036,0.0001707926621492761,0.00030587527063737443
0.001,0.0007561446539823046,0.0005974554049330684,0.00040276706435836743,0.0002783945504517164,0.00020204463288750894,0.00015958281494627715,0.00014539398266818048,0.00016887071348766508,0.00030106092293455183
0.001,0.0007554827075416216,0.0005967520176577599,0.00040192431930056663,0.00027755459621831854,0.00020120631834502002,0.0001586706886366497,0.00014423168344504801,0.00016696404870095068,0.0002963098069760517
0.001,0.0007548142866478835,0.0005960421864035,0.00040107552190864405,0.000276710416864016,0.00020036586735025836,0.00015775889202640647,0.00014307384532883863,0.00016507281278915244,0.00029162164835553234
0.001,0.0007541394007727726,0.0005953259280357876,0.00040022071194032425,0.0002758620629396957,0.00019952333420039184,0.0001568474791446172,0.00014192051114461952,0.000163196972716382,0.0002869958456117749
0.001,0.000753453261276124,0.0005945968692177485,0.0003993465628625302,0.0002749888554209862,0.00019864889698783253,0.00015589225679197793,0.00014069786108208423,0.00016117883466097707,0.0002818995386546663
0.001,0.0007527606830746849,0.0005938614307668164,0.00039846653446453577,0.00027411169702333635,0.00019777273283424246,0.00015493803621995225,0.00013948100714945055,0.00015917971666279146,0.00027688213338452353
0.001,0.000752061800251107,0.000593119758904669,0.0003975808078042764,0.0002732307613051971,0.00019689499757748,0.00015398495670235495,0.00013827006619590224,0.00015719963654088831,0.0002719428500764955
0.001,0.0007513566228984858,0.0005923718712186205,0.00039668942343994645,0.00027234609917798486,0.0001960157448213401,0.0001530330687596212,0.0001370650679700252,0.0001552385042294358,0.000267080708365827
0.001,0.0007506451612836396,0.000591617785508762,0.0003957924221725467,0.000271457761656054,0.00019513502804513515,0.00015208242246717618,0.00013586604131538964,0.00015329622856198138,0.00026229473523033993
0.001,0.0007499410764512782,0.0005908750616328752,0.0003949229270536377,0.00027061232560569935,0.0001943133661054677,0.00015121214860141992,0.00013478433495717895,0.0001515553239579192,0.0002579720674546429
0.001,0.0007492307077939692,0.0005901261380362599,0.0003940477612542949,0.0002697630351391033,0.0001934898396676657,0.00015034229582385722,0.00013370682839182124,0.00014982878466439454,0.0002537103994437239
0.001,0.0007485140657428474,0.0005893710325813375,0.00039316696481225496,0.0002689099395032721,0.00019266450005914697,0.0001494729137699088,0.00013263355942168804,0.00014811657325897344,0.00024950907434075407
0.001,0.0007477920374988207,0.0005886106575770754,0.00039228150952041026,0.0002680538698732277,0.00019183802609277662,0.00014860457389983926,0.00013156505071301006,0.00014641921273032577,0.00024536841469387607
0.001,0.0007470646318417684,0.000587845028280153,0.00039139142972943226,0.00026719486815718823,0.00019101046063687028,0.0001477373157547231,0.00013050132642612272,0.00014473664329931894,0.00024128771968956965
0.001,0.000746331857690334,0.0005870741601150847,0.0003904967599732611,0.0002663329763359202,0.00019018184646592208,0.0001468711785583918,0.00012944241008601634,0.0001430688043627681,0.00023726629318772418
0.001,0.000745593724114763,0.0005862980686936137,0.0003895975350198339,0.0002654682365419898,0.00018935222636504533,0.00014600620135329296,0.00012838832478192589,0.0001414156348862137,0.00023330344508078714
0.001,0.0007448503634609417,0.0005855168970231048,0.00038869392700388675,0.0002646008091121948,0.00018852173980288115,0.00014514250481571783,0.00012733917050730646,0.00013977716467553823,0.00022939865638927297
0.001,0.0007441017848559784,0.0005847306606783223,0.0003877859701983709,0.00026373073520765555,0.0001876904281105713,0.0001442801258881357,0.00012629496716723198,0.0001381533278738466,0.00022555123779529113
0.001,0.000743347997566111,0.0005839393754013221,0.00038687369905472224,0.00026285805605533836,0.00018685833252122952,0.0001434191012016364,0.000125255734067765,0.0001365440579330561,0.0002217605049922782
0.001,0.0007425980122165197,0.0005831545190886928,0.0003859781684512971,0.00026201154253776947,0.00018606159531590292,0.00014260456502787665,0.00012428053620243385,0.0001350337902936029,0.00021815009586241928
0.001,0.0007418428222422646,0.0005823646190291856,0.00038507830193089523,0.00026116232813230903,0.0001852638537460305,0.00014179094397584395,0.00012330941740530514,0.00013353605951814913,0.000214590937375532
0.001,0.0007410824370750857,0.0005815696910727474,0.00038417413352571667,0.0002603104530145326,0.00018446514774054143,0.00014097827417406666,0.00012234240064855456,0.00013205082038162874,0.00021108244611026217
0.001,0.0007403184660014679,0.0005807713776603622,0.0003832673750805624,0.0002594573523562161,0.0001836666246937272,0.00014016749938812904,0.00012138033426810311,0.00013057895028626532,0.00020762556561303502
0.001,0.0007395509147560407,0.0005799696890514251,0.0003823580493090658,0.0002586030525652665,0.00018286830960336872,0.00013935863904919696,0.00012042322007081454,0.00012912037080446074,0.00020421964337946413
0.001,0.0007387797891584386,0.0005791646356057247,0.0003814461790231548,0.0002577475800751799,0.00018207022739706005,0.00013855171240478834,0.00011947105956106815,0.0001276750034397535,0.00020086403326178727
0.001,0.0007380050951127038,0.000578356227782297,0.00038053178712941366,0.00025689096133950617,0.0001812724029256328,0.00013774673851177748,0.00011852385393388548,0.0001262427696188339,0.00019755809538624924
0.001,0.0007372289278765602,0.0005775466274590334,0.00037961719344922816,0.00025603518246549605,0.00018047644930614432,0.00013694506185961904,0.00011758283148187963,0.00012482499369662246,0.0001943036135491255
0.001,0.0007364512893389424,0.0005767358384619004,0.0003787024060562486,0.0002551802511391958,0.00017968237057615404,0.0001361466779099092,0.00011664796319397039,0.00012342154884218158,0.00019109983808810176
0.001,0.0007356721814267267,0.0005759238646613067,0.0003777874330677233,0.0002543261750635963,0.00017889017076266666,0.00013535158210437542,0.00011571922013388507,0.00012203230915507028,0.00018794602945024216
0.001,0.0007348903474707337,0.0005751089853685418,0.00037686841880625214,0.0002534666634479025,0.00017809042928748983,0.00013454542482553396,0.00011477223754870921,0.00012060527355137842,0.0001846722184263047
0.001,0.0007341070502230424,0.0005742929332546843,0.0003759492523595486,0.00025260806222015907,0.0001772926545344648,0.0001337427099649026,0.00011383170595735486,0.00011919336498115804,0.00018145260378874068
0.001,0.0007333222916846016,0.0005734757122629472,0.0003750299418068227,0.0002517503788238516,0.00017649684991694604,0.00013294343155185963,0.00011289759243683735,0.00011779644164652425,0.00017828633792123003
0.001,0.0007325378931581444,0.0005726591695542582,0.00037411237735305734,0.00025089517102575937,0.00017570423657326553,0.00013214856737581396,0.00011197073980433406,0.0001164153090011861,0.00017517406255147756
0.001,0.0007317538520017976,0.0005718433021851622,0.00037319655361857124,0.00025004243032543557,0.00017491480109484205,0.00013135809328305347,0.0001110510931582075,0.00011504979334922632,0.00017211487548789828
0.001,0.0007309701656016873,0.0005710281072505973,0.0003722824652942578,0.0002491921483105776,0.0001741285301842189,0.000130571985300518,0.00011013859805243972,0.00011369972292133188,0.00016910788945367707
0.001,0.0007301868313673829,0.0005702135818768351,0.00037137010712276296,0.0002483443166280691,0.00017334541061775574,0.0001297902195887095,0.00010923320042963165,0.00011236492773944517,0.00016615223146969552
0.001,0.0007294056858799279,0.0005694016103111181,0.00037046146816096116,0.0002475006124214696,0.00017256678052747222,0.0001290138836109195,0.0001083358528422491,0.00011104635018836138,0.0001632488500459303
0.001,0.0007286267228265342,0.0005685921836368309,0.00036955653001307385,0.0002466610110284357,0.00017179260894632618,0.00012824293390221287,0.00010744647704539295,0.00010974378427192081,0.00016039680402653037
0.001,0.0007278499359259242,0.0005677852929874075,0.0003686552744110329,0.000245825487979439,0.00017102286517266867,0.00012747732740860064,0.00010656499564424898,0.00010845702677323144,0.00015759516965436614
0.001,0.0007270741396329974,0.0005669793834682747,0.00036775459243596013,0.0002449894231786493,0.00017025120181982169,0.00012670823171859124,0.00010567792500018758,0.00010716091111285436,0.00015477474449137119
0.001,0.000726300509089127,0.0005661759961906673,0.0003668575707603942,0.00024415741777526555,0.00016948395998088835,0.00012594449635600327,0.000104798812682607,0.00010588078664841973,0.00015200532201362785
0.001,0.0007255290381246482,0.0005653751224576382,0.0003659641914980988,0.00024332944777626794,0.00016872110941070693,0.00012518607857232714,0.00010392758109688598,0.00010461644792633948,0.00014928596543342006
0.001,0.0007247617567123682,0.0005645788092050789,0.0003650765144822908,0.0002425071844547339,0.00016796393694001768,0.00012443398389681975,0.0001030650652169494,0.00010336864256044427,0.00014661715384500229
0.001,0.0007239986535454607,0.0005637870401634551,0.0003641945072810511,0.0002416905868396016,0.00016721239470100498,0.00012368815096486452,0.00010221116577265065,0.00010213713571582715,0.00014399790845116419
0.001,0.0007232397173862652,0.0005629997991705343,0.0003633181377200508,0.00024087961432750444,0.00016646643530137355,0.0001229485190910589,0.00010136578475280116,0.00010092169616032506,0.00014142727026178776
0.001,0.00072248493705675,0.0005622170701566371,0.0003624473738436701,0.00024007422662323307,0.0001657260117481481,0.0001222150281737581,0.00010052882527084345,9.972209600365954e-05,0.000138904299062937
0.001,0.0007217358950348228,0.000561440466555814,0.00036158388844431124,0.00023927581064585389,0.0001649922088518066,0.00012148853502428482,9.97010025298723e-05,9.853897375975792e-05,0.00013642939611266722
0.001,0.0007209925771752469,0.0005606699674539418,0.0003607276390906435,0.00023848431321443392,0.00016426496576549843,0.00012076896452456461,9.888220185750974e-05,9.737207727303015e-05,0.00013400158668478175
0.001,0.0007202549694492843,0.0005599055521123883,0.0003598785837495114,0.00023769968169456287,0.0001635442223215586,0.00012005624248053424,9.807231018575002e-05,9.622115859912247e-05,0.0001316199170239902
0.001,0.0007195323462520794,0.0005591590509921624,0.0003590585920958888,0.00023695215697134095,0.00016286848728581805,0.00011939925459233543,9.733714368639992e-05,9.518785816120323e-05,0.00012948993319015237
0.001,0.0007188153904868624,0.0005584185656809617,0.00035824561959240325,0.0002362112130369942,0.00016219882234612553,0.00011874843483873407,9.660966052802588e-05,9.416779973181015e-05,0.00012739732395025585
0.001,0.0007181040886926203,0.0005576840763431772,0.00035743962664792336,0.00023547680133784063,0.00016153517356182933,0.00011810371926813217,9.588976814961258e-05,9.316079161517574e-05,0.00012534138272701054
0.001,0.0007173985458519898,0.0005569556823713467,0.0003566406932084415,0.00023474897015812488,0.0001608775616408074,0.00011746510277705029,9.517742467544867e-05,9.216669491688869e-05,0.00012332148630987257
0.001,0.0007166987484521553,0.0005562333638566226,0.00035584877964252954,0.00023402767102794237,0.00016022593289484238,0.00011683252196707568,9.447253888812898e-05,9.118532235085734e-05,0.00012133695300052025
0.001,0.0007160046830928351,0.0005555171010581067,0.00035506384668924896,0.00023331285597027454,0.00015958023422419515,0.00011620591419889337,9.377502080118898e-05,9.021648961473911e-05,0.0001193871149139895
0.001,0.0007153163364777631,0.0005548068743897313,0.0003542858554234702,0.00023260447744820426,0.00015894041305074621,0.00011558521750971036,9.308478154551746e-05,8.926001517936315e-05,0.00011747131722415646
0.001,0.0007146345569433116,0.0005541035424399441,0.0003535156771553805,0.00023190324345165713,0.00015830701004295562,0.00011497084410199294,9.240214376206843e-05,8.831614266750221e-05,0.00011558953011398195
0.001,0.0007139593299513231,0.0005534070835269872,0.0003527532683936443,0.00023120910091256188,0.0001576799668132194,0.0001143627259393922,9.172701183766888e-05,8.738468264977303e-05,0.00011374109491336212
0.001,0.0007132906411062882,0.000552717476178626,0.00035199858609393853,0.00023052199734406963,0.00015705922565321226,0.00011376079584113645,9.105929150577112e-05,8.646544883197101e-05,0.0001119253667056674
0.001,0.0007126330184449588,0.0005520403753247726,0.0003512614302897459,0.0002298546155988536,0.00015645973111213718,0.0001131821199461313,9.041832213305081e-05,8.557937250804453e-05,0.00011015252685143603
0.001,0.000711981898998139,0.0005513700720769836,0.0003505318788510462,0.00022919410061472063,0.0001558663157908185,0.00011260933085632868,8.978431049296584e-05,8.47047300887107e-05,0.00010841080451458245
0.001,0.0007113372689341813,0.0005507065458152156,0.0003498098907291114,0.00022854040278969112,0.00015527892573799634,0.00011204236655473188,8.91571706762786e-05,8.384135267939557e-05,0.00010669960309782175
0.001,0.0007106992322019796,0.0005500498941226498,0.0003490955423571875,0.00022789356692450827,0.00015469757908825738,0.00011148122111140715,8.85368641132709e-05,8.298911908997276e-05,0.00010501839736063321
0.001,0.0007100677749962943,0.0005494000964108962,0.0003483887928208825,0.00022725354367970012,0.00015412222229517684,0.0001109258331719869,8.792330625417495e-05,8.214786445649906e-05,0.00010336661223747767
0.001,0.0007094428836454011,0.0005487571322870243,0.0003476896016176379,0.00022662028424420426,0.00015355280242059424,0.00011037614213504096,8.731641371338838e-05,8.131742659415625e-05,0.00010174368455214035
0.001,0.000708824544604701,0.0005481209815436059,0.0003469979286303459,0.00022599374029548395,0.00015298926708448145,0.00010983208809074389,8.671610418600222e-05,8.049764584384383e-05,0.0001001490624678555
0.001,0.0007082129757140411,0.0005474918591435615,0.0003463139755716002,0.00022537406278014643,0.00015243171907300512,0.00010929373376222763,8.612240008214866e-05,7.968846833775761e-05,9.858234685897841e-05
0.001,0.000707608163356494,0.0005468697446924577,0.00034563770186245746,0.00022476120284855867,0.000151880105523236,0.00010876101889898551,8.55352191851817e-05,7.888973637819775e-05,9.704300162684373e-05
0.001,0.0007070100940503908,0.0005462546179930401,0.0003449690673354809,0.0002241551121757662,0.0001513343741731098,0.00010823388399029377,8.495448041312896e-05,7.810129484091103e-05,9.553050179700698e-05
0.001,0.0007064294568015821,0.0005456599791780414,0.0003443323098548347,0.00022358838010950836,0.00015083471987353974,0.00010776122599922914,8.444190686735427e-05,7.7408734986085e-05,9.418640444056476e-05
0.001,0.0007058555225588962,0.0005450722639773927,0.0003437030311737585,0.0002230281662249932,0.00015034058581471813,0.00010729360256509277,8.39348527119689e-05,7.67245852554126e-05,9.28639870067709e-05
0.001,0.0007052882785030611,0.0005444914532267761,0.0003430811937591523,0.00022247442636251605,0.00014985192565331347,0.00010683096298015644,8.343325230960875e-05,7.604872690242875e-05,9.156285904414627e-05
0.001,0.0007047231683832071,0.0005439129831785586,0.00034246228783126086,0.00022192355689618922,0.00014936600614401393,0.00010637120139586071,8.293535717958106e-05,7.537945268589432e-05,9.028066182205625e-05
0.001,0.0007041601877072604,0.0005433368472132987,0.00034184629997988753,0.0002213755412469509,0.00014888280881520869,0.00010591429577334988,8.244113465160048e-05,7.471669094184598e-05,8.901710564172274e-05
0.001,0.0007035993319644686,0.0005427630386936696,0.0003412332167993905,0.00022083036287728357,0.0001484023152778868,0.00010546022421726945,8.195055234184008e-05,7.406037083397318e-05,8.777190547391773e-05
0.001,0.0007030405966226531,0.0005421915509602746,0.00034062302487816926,0.00022028800527546067,0.00014792450720603156,0.00010500896495215848,8.146357812174912e-05,7.341042229889045e-05,8.65447807653603e-05
0.001,0.000702481864866424,0.0005416202367428493,0.000340013528083159,0.00021974666745789773,0.00014744798951136416,0.00010455942245749231,8.097928325582809e-05,7.276590831707151e-05,8.53343290345859e-05
0.001,0.0007019231347536531,0.000541049093933996,0.00033940472324505365,0.0002192063454080809,0.00014697275707368812,0.00010411158905958576,8.049765241221972e-05,7.212678380437272e-05,8.414032725111873e-05
0.001,0.0007013644043173649,0.0005404781203952333,0.00033879660715245314,0.0002186670350763442,0.0001464988047567028,0.00010366545709431046,8.001867033124847e-05,7.149300404124133e-05,8.296255535497e-05
0.001,0.0007007923380838431,0.0005398904209305891,0.0003381585602637609,0.00021808716235465733,0.0001459743062317574,0.00010315717126101123,7.946027734643345e-05,7.0747191644443e-05,8.159291401029592e-05
0.001,0.0007002202839606736,0.0005393029161815334,0.0003375212965814363,0.0002175084901000057,0.0001454514108138073,0.00010265113449578299,7.890553328521924e-05,7.000884795811205e-05,8.02453392500888e-05
0.0010564983206625808,0.0020323156209598047,0.0024972245821602065,0.004735193374982383,0.008578320915529132,0.015253393937469889,0.027225142859919765,0.049861478431656114,0.09601482521493776,0.2
0.004249939542299966,0.007357791565894658,0.008737301696751656,0.01505607870396766,0.02510093603015811,0.040835074437955504,0.0649892582783015,0.10076225398432796,0.14991538310282454,0.206
1 0.001 0 km 0.0007651928200015371 7 km 0.0006070713937965498 10 km 0.00041423535558437785 20 km 0.0002897888610631573 30 km 0.00021340907299884933 40 km 0.00017198131811953097 50 km 0.00016127923791982795 60 km 0.00019503601408127412 70 km 0.00036549739730595273 80 km
2 0.001 0.0007645995806173374 0.0007654185419972524 0.0006064422887178694 0.0006073276056093792 0.00041349144049413134 0.0004146475603472041 0.00028906380160320487 0.0002902671662170687 0.00021270693331134475 0.00021391771777705748 0.0001712438796411692 0.0001725335650783217 0.0001603765556252246 0.0001619576961300996 0.00019363496213474675 0.00019613348481478226 0.00036239423700181427 0.00036856555154569
3 0.001 0.0007640065772643761 0.0007648265274364283 0.0006058136176614386 0.0006066999211698721 0.00041274866023030733 0.00041390447843586643 0.0002883403899406645 0.00028954214777674505 0.0002120069527025505 0.00021321488386807227 0.00017050944162049183 0.000171794621873672 0.000159478716966613 0.00016105212098646378 0.00019224364342300643 0.00019472570335261124 0.0003593168093314386 0.00036543839103292923
4 0.001 0.0007634138087852742 0.00076423475082742 0.000605185379478 0.0006060726714187721 0.0004120070127662441 0.00041316253063080743 0.0002876186224176594 0.0002888187769396436 0.00021130912485491145 0.00021251421079625184 0.00016977799240843955 0.0001710586847350929 0.0001585856969223786 0.00016015140443848455 0.00019086199210672448 0.0001933277019274264 0.0003562649023666937 0.0003623371672096105
5 0.001 0.0007628028346998721 0.0007636432110143774 0.0006045332187986192 0.0006054458552058583 0.0004112166712442958 0.0004124217148997164 0.0002868226029691562 0.0002880970500399001 0.00021050564591298308 0.00021181569222935437 0.0001688917074786142 0.00017032574197864756 0.00015743651373617922 0.00015925552136261768 0.00018893812235512526 0.00019193941431515274 0.0003514029291704815 0.0003592616661738057
6 0.001 0.0007621921143131398 0.00076303338083269 0.0006038815297458003 0.0006047950045143256 0.00041042762231867933 0.0004116319711720434 0.00028602858816935265 0.0002873006965446473 0.00020970502628600424 0.00021101094555209704 0.00016800982241073787 0.00016943701776024394 0.00015629534163924753 0.00015810165194844262 0.00018703308452519017 0.00019000410483730154 0.00034660591682276115 0.00035435344277520014
7 0.001 0.0007615816463554626 0.0007624238065102939 0.0006032303109890501 0.0006041446264165162 0.0004096398633263614 0.00041084352013847123 0.0002852365728026657 0.0002865063493191246 0.00020890725596775628 0.0002102090638489634 0.00016713231600712825 0.00016855270795343295 0.00015516212643578583 0.00015695583271993784 0.00018514669874176095 0.000188087762219128 0.00034187301148734186 0.00034951092824224374
8 0.001 0.0007609692265548555 0.0007618144867783217 0.000602577299493926 0.0006034947195801519 0.0004088509941253184 0.00041005635912737644 0.00028444450359523985 0.00028571400313117073 0.00020811064471691694 0.000209410037075066 0.00016625772561605027 0.00016767279125308264 0.00015403541161623416 0.000155818009114819 0.00018327705284413884 0.0001861902048930817 0.00033720006213702974 0.00034473325633896016
9 0.001 0.0007603548574442921 0.0007612032230964268 0.0006019224999904981 0.0006028430274261829 0.0004080610253035772 0.0004092680923152776 0.00028365239238410656 0.00028492160640338084 0.0002073152021201705 0.00020861217469969167 0.00016538605339556675 0.00016679580316719344 0.00015291517504370476 0.00015468672086849377 0.00018142402424673905 0.00018430951195784153 0.0003325863766610152 0.0003400162401556392
10 0.001 0.0007597350402439383 0.0007605900180176352 0.0006012612395706585 0.0006021895546863309 0.0004072600935672035 0.000408478730269415 0.0002828447987841907 0.00028412917095061395 0.00020649842223713097 0.00020781548628341263 0.00016448344741808307 0.00016592174578786424 0.00015174362495246272 0.0001535619455802766 0.00017946021794659197 0.00018244555944842464 0.00032758319657592714 0.000335359176825339
11 0.001 0.0007591132829776185 0.0007599713504055552 0.0006005982088110791 0.0006015295991965402 0.0004064581175876688 0.0004076783487865176 0.00028203726728774387 0.0002833211587561824 0.00020568299547110922 0.00020699731581240013 0.00016358411213968798 0.00016501652229006483 0.00015057934813125987 0.00015238542164450143 0.00017751539893581778 0.000180469716663273 0.00032265060787650516 0.00033030742335106797
12 0.001 0.000758484736453085 0.0007593507507343548 0.0005999283660908604 0.0006008678808679657 0.0004056495676510805 0.00040687692763931326 0.00028122495212139567 0.0002825132124386522 0.00020486486304104927 0.00020618050489600874 0.00016268449575399985 0.00016411458466993175 0.00014941879820841596 0.0001512162128542595 0.00017558496339953558 0.00017851301079839705 0.0003177787884410679 0.00032532712476693115
13 0.001 0.0007578494094215417 0.0007587233815624382 0.0005992517275730322 0.0006001993719156019 0.0004048344831924046 0.00040606894689472706 0.000280407904430663 0.0002817004901671922 0.00020404408117776887 0.0002053609939218913 0.0001617846565020927 0.0001632123763493078 0.00014826202727426984 0.00015005076311129325 0.00017366890284920263 0.00017657081573262424 0.0003129672376410902 0.0003204083683965919
14 0.001 0.0007572073108060312 0.0007580892517126006 0.0005985683096346821 0.0005995240885208491 0.0004040129039083478 0.0004052544459439752 0.0002795861755026316 0.0002808830430533993 0.00020322070604404603 0.00020453883912382008 0.00016088465224596546 0.0001623099555953223 0.00014710908652278506 0.0001488891244397257 0.00017176720707727308 0.00017464312199372379 0.00030821545426856767 0.0003155506430768726
15 0.001 0.0007565575890478602 0.000757448370179369 0.00059787696153193 0.0005988420470784952 0.0004031823074325593 0.00040443346443882024 0.00027875567967892653 0.0002800609223493252 0.00020238859856737548 0.00020371409666633197 0.00015997497741322437 0.00016140738029416416 0.00014594324831107206 0.00014773134796391561 0.00016984173084389243 0.00017272991838834854 0.0003033838449669414 0.0003107534371554913
16 0.001 0.0007559011152632264 0.0007567998780637095 0.0005971788697390111 0.00059815208713495 0.00040234530612592536 0.0004036034596839685 0.0002779206290242912 0.0002792300099339312 0.00020155405878687617 0.0002028805779162198 0.00015906535701622418 0.0001604950646725177 0.0001447815990558725 0.00014656055358564036 0.00016793142878541938 0.0001707926621492761 0.0002986152551090434 0.00030587527063737443
17 0.001 0.000755237898986442 0.0007561446539823046 0.000596474051424026 0.0005974554049330684 0.00040150194087318277 0.00040276706435836743 0.00027708107588917086 0.0002783945504517164 0.00020071714346489746 0.00020204463288750894 0.00015815584855490808 0.00015958281494627715 0.00014362418708307366 0.00014539398266818048 0.00016603627832169687 0.00016887071348766508 0.00029390910930431773 0.00030106092293455183
18 0.001 0.0007545681886825906 0.0007554827075416216 0.0005957627683701927 0.0005967520176577599 0.00040065250958751827 0.00040192431930056663 0.00027623729012494873 0.00027755459621831854 0.00019987808563904174 0.00020120631834502002 0.00015724665811831285 0.0001586706886366497 0.0001424712015659587 0.00014423168344504801 0.00016415642490307197 0.00016696404870095068 0.0002892651425802985 0.0002963098069760517
19 0.001 0.0007538919937536639 0.0007548142866478835 0.0005950450374279253 0.0005960421864035 0.0003997970520738093 0.00040107552190864405 0.0002753893223189692 0.000276710416864016 0.00019903693960802692 0.00020036586735025836 0.00015633783972296886 0.00015775889202640647 0.0001413226854400146 0.00014307384532883863 0.00016229183664828758 0.00016507281278915244 0.0002846827650697017 0.00029162164835553234
20 0.001 0.0007532045557665671 0.0007541394007727726 0.0005943145247994342 0.0005953259280357876 0.0003989223236188871 0.00040022071194032425 0.00027451662339635243 0.0002758620629396957 0.0001981640806362608 0.00019952333420039184 0.00015538551594067732 0.0001568474791446172 0.00014010540813129958 0.00014192051114461952 0.00016028630721570607 0.000163196972716382 0.00027963581042999 0.0002869958456117749
21 0.001 0.0007525106592079478 0.000753453261276124 0.0005935776116184588 0.0005945968692177485 0.00039804170193550713 0.0003993465628625302 0.0002736399653899091 0.0002749888554209862 0.00019728948692008958 0.00019864889698783253 0.00015443417816766013 0.00015589225679197793 0.00013889388158999866 0.00014069786108208423 0.0001582996284854468 0.00016117883466097707 0.0002746667454821644 0.0002818995386546663
22 0.001 0.0007518104383956622 0.0007527606830746849 0.000592834444449282 0.0005938614307668164 0.0003971553683797481 0.00039846653446453577 0.0002727595219957832 0.00027411169702333635 0.00019641331428482412 0.00019777273283424246 0.00015348396557824612 0.00015493803621995225 0.00013768822268133468 0.00013948100714945055 0.000156331819705631 0.00015917971666279146 0.00026977480754699626 0.00027688213338452353
23 0.001 0.0007511039033537896 0.000752061800251107 0.0005920850408658466 0.000593119758904669 0.0003962633635582371 0.0003975808078042764 0.00027187534416274955 0.0002732307613051971 0.00019553561634171146 0.00019689499757748 0.00015253492870981108 0.00015398495670235495 0.00013648846139846028 0.00013827006619590224 0.00015438279270990136 0.00015719963654088831 0.0002649590347362105 0.0002719428500764955
24 0.001 0.0007503910642803073 0.0007513566228984858 0.0005913294186556257 0.0005923718712186205 0.0003953657283217157 0.00039668942343994645 0.0002709874829437419 0.00027234609917798486 0.00019465644657888978 0.0001960157448213401 0.0001515871176567501 0.0001530330687596212 0.0001352946268320504 0.0001370650679700252 0.0001524524582210848 0.0001552385042294358 0.0002602184722292356 0.000267080708365827
25 0.001 0.0007496855573046408 0.0007506451612836396 0.0005905851062898704 0.000591617785508762 0.00039449552403657745 0.0003957924221725467 0.00027014241927282736 0.000271457761656054 0.0001938361803657908 0.00019513502804513515 0.0001507194393001951 0.00015208242246717618 0.00013421767536698768 0.00013586604131538964 0.000150722476765932 0.00015329622856198138 0.0002559376038022294 0.00026229473523033993
26 0.001 0.0007489737467556278 0.0007499410764512782 0.0005898345737440663 0.0005908750616328752 0.000393619635985906 0.0003949229270536377 0.00026929349394052985 0.00027061232560569935 0.00019301404332913125 0.0001943133661054677 0.00014985216957655317 0.00015121214860141992 0.00013314488789598826 0.00013478433495717895 0.00014900672746282064 0.0001515553239579192 0.00025171693602497907 0.0002579720674546429
27 0.001 0.0007482556429977025 0.0007492307077939692 0.0005890778388714725 0.0005901261380362599 0.00039273810426086416 0.0003940477612542949 0.0002684407562332248 0.0002697630351391033 0.0001921900867993824 0.0001934898396676657 0.00014898535811302548 0.00015034229582385722 0.00013207630234912348 0.00013370682839182124 0.00014730517414690737 0.00014982878466439454 0.000247555825445753 0.0002537103994437239
28 0.001 0.000747532135526673 0.0007485140657428474 0.0005883158165865031 0.0005893710325813375 0.0003918519024244402 0.00039316696481225496 0.00026758503804540166 0.0002689099395032721 0.0001913649895279964 0.00019266450005914697 0.00014811957577380352 0.0001494729137699088 0.00013101244041258906 0.00013263355942168804 0.0001456183389249714 0.00014811657325897344 0.00024345460151209766 0.00024950907434075407
29 0.001 0.0007468032330641541 0.0007477920374988207 0.0005875485221384682 0.0005886106575770754 0.0003909610648762846 0.00039228150952041026 0.00026672638132361175 0.0002680538698732277 0.0001905387943939666 0.00019183802609277662 0.00014725486211264363 0.00014860457389983926 0.00012995332641946747 0.00013156505071301006 0.00014394616337354944 0.00014641921273032577 0.00023941257691738652 0.00024536841469387607
30 0.001 0.0007460689444707028 0.0007470646318417684 0.0005867759709451519 0.000587845028280153 0.0003900656262003575 0.00039139142972943226 0.00026586482808789615 0.00026719486815718823 0.00018971154418348472 0.00019101046063687028 0.00014639125636754904 0.0001477373157547231 0.00012889898406950181 0.00013050132642612272 0.00014228858823944247 0.00014473664329931894 0.00023542906884335907 0.00024128771968956965
31 0.001 0.0007453292787585437 0.000746331857690334 0.0005859981786120694 0.0005870741601150847 0.0003891656212152682 0.0003904967599732611 0.00026500042051039684 0.0002663329763359202 0.000188883281693472 0.00019018184646592208 0.0001455287975953345 0.0001468711785583918 0.000127849436626481 0.00012944241008601634 0.0001406455538271199 0.0001430688043627681 0.00023150340029334736 0.00023726629318772418
32 0.001 0.0007445843685250069 0.000745593724114763 0.0005852152884984452 0.0005862980686936137 0.0003882612223549495 0.0003895975350198339 0.00026413331906842847 0.0002654682365419898 0.00018805414639063353 0.00018935222636504533 0.00014466760638632992 0.00014600620135329296 0.00012680478406473458 0.00012838832478192589 0.00013901709088191773 0.0001414156348862137 0.00022763506393382832 0.00023330344508078714
33 0.001 0.0007438342228409441 0.0007448503634609417 0.0005844273161744179 0.0005855168970231048 0.0003873524639441998 0.00038869392700388675 0.00026326356496406687 0.0002646008091121948 0.00018722417962072503 0.00018852173980288115 0.0001438077197030893 0.00014514250481571783 0.00012576504647438162 0.00012733917050730646 0.00013740313489262333 0.00013977716467553823 0.00022382338328436597 0.00022939865638927297
34 0.001 0.0007430788509165626 0.0007441017848559784 0.0005836342773781009 0.0005847306606783223 0.0003864393804873395 0.0003877859701983709 0.0002623911994661588 0.00026373073520765555 0.00018639342263244998 0.0001876904281105713 0.00014294917419819004 0.0001442801258881357 0.000124730243348245 0.00012629496716723198 0.00013580362065026603 0.0001381533278738466 0.00022006768669446508 0.00022555123779529113
35 0.001 0.000742327254060605 0.000743347997566111 0.0005828476385639736 0.0005839393754013221 0.00038554300530339766 0.00038687369905472224 0.00026154496076193957 0.00026285805605533836 0.00018559797011481673 0.00018685833252122952 0.0001421370333657246 0.0001434191012016364 0.00012375932796391997 0.000125255734067765 0.00013430279846409174 0.0001365440579330561 0.00021649152387618443 0.0002217605049922782
36 0.001 0.0007415704350109161 0.0007425980122165197 0.0005820559385468977 0.0005831545190886928 0.00038464228372291103 0.0003859781684512971 0.0002606960153281244 0.00026201154253776947 0.00018480150743526303 0.00018606159531590292 0.00014132579578003348 0.00014260456502787665 0.000122792459010487 0.00012428053620243385 0.0001328143978658426 0.0001350337902936029 0.0002129659469511457 0.00021815009586241928
37 0.001 0.0007408084031449065 0.0007418428222422646 0.0005812591931755618 0.0005823646190291856 0.00038373724983374976 0.00038507830193089523 0.00025984440338310303 0.00026116232813230903 0.0001840040745362742 0.0001852638537460305 0.0001405154975809745 0.00014179094397584395 0.00012182965960439977 0.00012330941740530514 0.00013133837476817992 0.00013353605951814913 0.00020949038404752677 0.000214590937375532
38 0.001 0.0007400427720784002 0.0007410824370750857 0.0005804590496942265 0.0005815696910727474 0.00038282961864956994 0.00038417413352571667 0.0002589915613698488 0.0002603104530145326 0.00018320681873232144 0.00018446514774054143 0.00013970708155515462 0.00014097827417406666 0.00012087177639736769 0.00012234240064855456 0.00012987560432955444 0.00013205082038162874 0.00020606578076074432 0.00021108244611026217
39 0.001 0.0007392735475065714 0.0007403184660014679 0.0005796555183614057 0.0005807713776603622 0.00038191941292656456 0.0003832673750805624 0.0002581375157328154 0.0002594573523562161 0.0001824097650442608 0.0001836666246937272 0.00013890056717630873 0.00014016749938812904 0.00011991881140841177 0.00012138033426810311 0.0001284260094133047 0.00013057895028626532 0.00020269149646849757 0.00020762556561303502
40 0.001 0.0007385007352097838 0.0007395509147560407 0.0005788486095364762 0.0005799696890514251 0.00038100665551987393 0.0003823580493090658 0.00025728229294257515 0.0002586030525652665 0.00018161293842329387 0.00018286830960336872 0.00013809597373520515 0.00013935863904919696 0.00011897076635433426 0.00012042322007081454 0.0001269895128043655 0.00012912037080446074 0.00019936689671873207 0.00020421964337946413
41 0.001 0.0007377243410529983 0.0007387797891584386 0.0005780383336785572 0.0005791646356057247 0.0003800913693799712 0.0003814461790231548 0.0002564259194903244 0.0002577475800751799 0.00018081636374445108 0.00018207022739706005 0.00013729332033271256 0.00013855171240478834 0.00011802764264291933 0.00011947105956106815 0.00012556603720150224 0.0001276750034397535 0.00019609135315036536 0.00020086403326178727
42 0.001 0.0007369464655998592 0.0007380050951127038 0.0005772268587748353 0.000578356227782297 0.0003791758785432219 0.00038053178712941366 0.0002555703831979673 0.00025689096133950617 0.00018002165393456068 0.0001812724029256328 0.00013649394990366146 0.00013774673851177748 0.00011709066577140669 0.00011852385393388548 0.00012415690240967774 0.0001262427696188339 0.0001928666431485617 0.00019755809538624924
43 0.001 0.0007361671107233329 0.0007372289278765602 0.000576414188654825 0.0005775466274590334 0.000378260191109379 0.00037961719344922816 0.00025471569177879693 0.00025603518246549605 0.0001792288130669198 0.00018047644930614432 0.00013569785799734456 0.00013694506185961904 0.00011615980704210183 0.00011758283148187963 0.00012276198311838844 0.00012482499369662246 0.00018969202938803596 0.0001943036135491255
44 0.001 0.0007353862783344302 0.0007364512893389424 0.000575600327192691 0.0005767358384619004 0.00037734431522203 0.0003787024060562486 0.00025386185296321013 0.0002551802511391958 0.00017843784520433673 0.00017968237057615404 0.00013490504014296103 0.0001361466779099092 0.00011523503783001357 0.00011664796319397039 0.00012138115492992521 0.00012342154884218158 0.0001865667844236815 0.00019109983808810176
45 0.001 0.0007346027258369329 0.0007356721814267267 0.0005747835721418604 0.0005759238646613067 0.00037642443290667116 0.0003777874330677233 0.0002530026346493095 0.0002543261750635963 0.000177639416207763 0.00017889017076266666 0.0001341012793025371 0.00013535158210437542 0.0001142922256260196 0.00011571922013388507 0.00011996295037667013 0.00012203230915507028 0.00018332302768968173 0.00018794602945024216
46 0.001 0.0007338177018431625 0.0007348903474707337 0.0005739656376861859 0.0005751089853685418 0.00037550439543261463 0.00037686841880625214 0.0002521443237629474 0.0002534666634479025 0.00017684294734265143 0.00017809042928748983 0.00013330094534015117 0.00013454542482553396 0.00011335582519792064 0.00011477223754870921 0.00011855974750452474 0.00012060527355137842 0.00018013280630154984 0.0001846722184263047
47 0.001 0.0007330312083387708 0.0007341070502230424 0.0005731465277735759 0.0005742929332546843 0.000374584210907019 0.0003759492523595486 0.00025128692777751636 0.00025260806222015907 0.0001760484420635206 0.0001772926545344648 0.00013250403238709868 0.0001337427099649026 0.00011242580398299235 0.00011383170595735486 0.00011717140625198769 0.00011919336498115804 0.000176995286763841 0.00018145260378874068
48 0.001 0.0007322450716827681 0.0007333222916846016 0.0005723280950701311 0.0005734757122629472 0.00037366577307640326 0.0003750299418068227 0.00025043200586833656 0.0002517503788238516 0.00017525712146802507 0.00017649684991694604 0.00013171151729665014 0.00013294343155185963 0.00011150300328069361 0.00011289759243683735 0.00011579873047427355 0.00011779644164652425 0.00017391111613739919 0.00017828633792123003
49 0.001 0.0007314592892342591 0.0007325378931581444 0.0005715103366354928 0.0005726591695542582 0.0003727490765712826 0.00037411237735305734 0.00024957954955556494 0.00025089517102575937 0.0001744689721973381 0.00017570423657326553 0.00013092337604814113 0.00013214856737581396 0.00011058736861417956 0.00011197073980433406 0.00011444154833756723 0.0001164153090011861 0.0001708794064250159 0.00017517406255147756
50 0.001 0.0007306738583803173 0.0007317538520017976 0.0005706932495677312 0.0005718433021851622 0.00037183411609277345 0.00037319655361857124 0.00024872955044744495 0.00025004243032543557 0.00017368398100343736 0.00017491480109484205 0.0001301395848004509 0.00013135809328305347 0.00010967884595770732 0.0001110510931582075 0.00011309968990727626 0.00011504979334922632 0.00016789928423747183 0.00017211487548789828
51 0.001 0.0007298887765314699 0.0007309701656016873 0.0005698768309963597 0.0005710281072505973 0.00037092088639398746 0.0003722824652942578 0.0002478820002115871 0.0002491921483105776 0.00017290213471209804 0.0001741285301842189 0.00012936011984533696 0.000130571985300518 0.0001087773816703527 0.00011013859805243972 0.00011177298701463364 0.00011369972292133188 0.00016496989019036454 0.00016910788945367707
52 0.001 0.0007291058850619836 0.0007301868313673829 0.0005690629705872476 0.0005702135818768351 0.0003700113801847071 0.00037137010712276296 0.0002470385774678141 0.0002483443166280691 0.00017212477134492983 0.00017334541061775574 0.0001285860674779147 0.0001297902195887095 0.00010788392632853856 0.00010923320042963165 0.00011046237940908493 0.00011236492773944517 0.00016209217355659912 0.00016615223146969552
53 0.001 0.0007283251776795193 0.0007294056858799279 0.0005682516594285885 0.0005694016103111181 0.0003691055790623401 0.00037046146816096116 0.0002461992575642169 0.0002475006124214696 0.00017135185999287266 0.00017256678052747222 0.00012781738439880834 0.0001290138836109195 0.00010699840217906239 0.0001083358528422491 0.00010916766306641233 0.00011104635018836138 0.00015926520709064215 0.0001632488500459303
54 0.001 0.000727546648123048 0.0007286267228265342 0.000567442888658507 0.0005685921836368309 0.0003682034647519281 0.00036955653001307385 0.00024536401604150686 0.0002466610110284357 0.00017058337001160307 0.00017179260894632618 0.00012705402771768452 0.00012824293390221287 0.00010612073231230378 0.00010744647704539295 0.0001078886367084761 0.00010974378427192081 0.00015648808062028533 0.00016039680402653037
55 0.001 0.0007267691175258129 0.0007278499359259242 0.0005666351120658079 0.0005677852929874075 0.00036730194585451363 0.0003686552744110329 0.00024452825978826814 0.000245825487979439 0.00016981299319253088 0.00017102286517266867 0.00012628722374912656 0.00012747732740860064 0.00010523753204397677 0.00010656499564424898 0.00010660034638564814 0.00010845702677323144 0.00015369233245141463 0.00015759516965436614
56 0.001 0.0007259937543683618 0.0007270741396329974 0.0005658298620581495 0.0005669793834682747 0.00036640409142867466 0.00036775459243596013 0.00024369656281803695 0.0002449894231786493 0.0001690470312136919 0.00017025120181982169 0.00012552576286196436 0.00012670823171859124 0.00010436224908854787 0.00010567792500018758 0.00010532792661952348 0.00010716091111285436 0.00015094700928094292 0.00015477474449137119
57 0.001 0.0007252205525006216 0.000726300509089127 0.0005650271299429238 0.0005661759961906673 0.0003655098835814395 0.0003668575707603942 0.0002428689011484816 0.00024415741777526555 0.0001682854538881413 0.00016948395998088835 0.00012476960247399048 0.00012594449635600327 0.00010349480634605481 0.000104798812682607 0.00010407117393308648 0.00010588078664841973 0.00014825118806841486 0.00015200532201362785
58 0.001 0.0007244515476870691 0.0007255290381246482 0.0005642289688561167 0.0005653751224576382 0.00036462138604045246 0.0003659641914980988 0.00024204694758546622 0.00024332944777626794 0.00016752954803985582 0.00016872110941070693 0.00012401974721449815 0.00012518607857232714 0.00010263603739686231 0.00010392758109688598 0.00010283083470852359 0.00010461644792633948 0.0001456053538142381 0.00014928596543342006
59 0.001 0.0007236867286572494 0.0007247617567123682 0.0005634353625294562 0.0005645788092050789 0.0003637385663464586 0.0003650765144822908 0.00024123066115747858 0.0002425071844547339 0.00016677926586679636 0.00016796393694001768 0.00012327613591461942 0.00012443398389681975 0.00010178584352378332 0.0001030650652169494 0.00010160667618634935 0.00010336864256044427 0.0001430085413998934 0.00014661715384500229
60 0.001 0.0007229260842094953 0.0007239986535454607 0.0005626462948017631 0.0005637870401634551 0.0003628613922977866 0.0003641945072810511 0.00024042000126051454 0.0002416905868396016 0.00016603456004153966 0.00016721239470100498 0.00012253870808207087 0.00012368815096486452 0.0001009441272602465 0.00010221116577265065 0.00010039846917127745 0.00010213713571582715 0.000140459805170444 0.00014399790845116419
61 0.001 0.0007221696032014468 0.0007232397173862652 0.000561861749604344 0.0005629997991705343 0.00036198983191176377 0.0003633181377200508 0.0002396149275989645 0.00024087961432750444 0.00016529538363567852 0.00016646643530137355 0.00012180740380654271 0.0001229485190910589 0.00010011079225737115 0.00010136578475280116 9.920598777483068e-05 0.00010092169616032506 0.00013795821792425024 0.00014142727026178776
62 0.001 0.0007214188723728384 0.00072248493705675 0.00056108334509554 0.0005622170701566371 0.0003611255610840681 0.0003624473738436701 0.0002388168283348348 0.00024007422662323307 0.00016456282140960994 0.0001657260117481481 0.00012108307905286178 0.0001222150281737581 9.928655238677393e-05 0.00010052882527084345 9.802986918413655e-05 9.972209600365954e-05 0.0001355041849544529 0.000138904299062937
63 0.001 0.0007206738776295639 0.0007217358950348228 0.0005603110603628828 0.000561440466555814 0.0003602685373417506 0.00036158388844431124 0.00023802565027806571 0.00023927581064585389 0.00016383681258690845 0.0001649922088518066 0.00012036565891864721 0.00012148853502428482 9.847129356381268e-05 9.97010025298723e-05 9.686986333449523e-05 9.853897375975792e-05 0.0001330967445342526 0.00013642939611266722
64 0.001 0.0007199346049934109 0.0007209925771752469 0.0005595448746691314 0.0005606699674539418 0.00035941871861020354 0.0003607276390906435 0.00023724134078502595 0.00023848431321443392 0.00016311729706930416 0.00016426496576549843 0.00011965506942237431 0.00012076896452456461 9.7664903298557e-05 9.888220185750974e-05 9.57257243308077e-05 9.737207727303015e-05 0.00013073495556510661 0.00013400158668478175
65 0.001 0.0007192103057281418 0.0007202549694492843 0.0005587965882928195 0.0005599055521123883 0.000358597914203722 0.0003598785837495114 0.00023649404923234267 0.00023769968169456287 0.0001624426539507404 0.0001635442223215586 0.00011900000933912548 0.00012005624248053424 9.693290327537121e-05 9.807231018575002e-05 9.469853254875163e-05 9.622115859912247e-05 0.0001286228242214262 0.0001316199170239902
66 0.001 0.0007184916860834766 0.0007195323462520794 0.000558054333130965 0.0005591590509921624 0.0003577841401235257 0.0003590585920958888 0.0002357533416394368 0.00023695215697134095 0.00016177407584741055 0.00016286848728581805 0.00011835110239617177 0.00011939925459233543 9.620855295571759e-05 9.733714368639992e-05 9.368449216343134e-05 9.518785816120323e-05 0.0001265476735456528 0.00012948993319015237
67 0.001 0.000717778732645577 0.0007188153904868624 0.0005573180893469085 0.0005584185656809617 0.0003569773567342285 0.00035824561959240325 0.0002350191694371068 0.0002362112130369942 0.0001611115088719043 0.00016219882234612553 0.00011770828481211398 0.00011874843483873407 9.549176022876216e-05 9.660966052802588e-05 9.268341301362701e-05 9.416779973181015e-05 0.00012450880618841231 0.00012739732395025585
68 0.001 0.0007170715507844816 0.0007181040886926203 0.0005565879566941514 0.0005576840763431772 0.0003561776441627035 0.00035743962664792336 0.00023429158098135867 0.00023547680133784063 0.00016045497378223205 0.00016153517356182933 0.00011707155159443024 0.00011810371926813217 9.47824835635146e-05 9.588976814961258e-05 9.169515755193108e-05 9.316079161517574e-05 0.00012250560759307665 0.00012534138272701054
69 0.001 0.0007163701270344053 0.0007173985458519898 0.0005558639152622166 0.0005569556823713467 0.0003553849627325309 0.0003566406932084415 0.00023357052778616886 0.00023474897015812488 0.00015980441694230793 0.0001608775616408074 0.00011644083951173604 0.00011746510277705029 9.408063218207804e-05 9.517742467544867e-05 9.071953997714039e-05 9.216669491688869e-05 0.00012053740486430812 0.00012332148630987257
70 0.001 0.0007156744480415676 0.0007166987484521553 0.0005551459453084167 0.0005562333638566226 0.00035459927313802623 0.00035584877964252954 0.00023285596185845654 0.00023402767102794237 0.00015915978530381373 0.00016022593289484238 0.00011581608608941654 0.00011683252196707568 9.338611653058621e-05 9.447253888812898e-05 8.975637744384618e-05 9.118532235085734e-05 0.00011860353870291344 0.00012133695300052025
71 0.001 0.0007149845005557793 0.0007160046830928351 0.0005544340272448129 0.0005555171010581067 0.0003538205364097734 0.00035506384668924896 0.0002321478356456351 0.00023331285597027454 0.0001585210263398076 0.00015958023422419515 0.00011519722952770958 0.00011620591419889337 9.269884816673769e-05 9.377502080118898e-05 8.880548985453175e-05 9.021648961473911e-05 0.00011670336266552508 0.0001193871149139895
72 0.001 0.0007143011352806332 0.0007153163364777631 0.0005537290222260827 0.0005548068743897313 0.0003530496254918224 0.0003542858554234702 0.00023144685778402562 0.00023260447744820426 0.00015788868071804074 0.00015894041305074621 0.00011458468167101622 0.00011558521750971036 9.20191492389152e-05 9.308478154551746e-05 8.786712068874325e-05 8.926001517936315e-05 0.00011483685132763588 0.00011747131722415646
73 0.001 0.0007136243377311475 0.0007146345569433116 0.0005530309085687206 0.0005541035424399441 0.00035228649684153725 0.0003535156771553805 0.0002307529751854999 0.00023190324345165713 0.00015726269010384348 0.00015830701004295562 0.00011397837465469773 0.00011497084410199294 9.134692457668887e-05 9.240214376206843e-05 8.694108196461404e-05 8.831614266750221e-05 0.00011300335424584403 0.00011558953011398195
74 0.001 0.0007129540935643617 0.0007139593299513231 0.0005523396647985742 0.0005534070835269872 0.000351531107363628 0.0003527532683936443 0.0002300661353432777 0.00023120910091256188 0.0001566429968410848 0.0001576799668132194 0.00011337824146720777 0.0001143627259393922 9.06820803490277e-05 9.172701183766888e-05 8.602718880727694e-05 8.738468264977303e-05 0.00011120223452206596 0.00011374109491336212
75 0.001 0.0007122949300063586 0.0007132906411062882 0.0005516609446370161 0.000552717476178626 0.0003507932546232374 0.00035199858609393853 0.0002293990178082647 0.00023052199734406963 0.00015604454205901748 0.00015705922565321226 0.00011280134646728481 0.00011376079584113645 9.004396195380538e-05 9.105929150577112e-05 8.514641523915274e-05 8.646544883197101e-05 0.00010944396621311202 0.0001119253667056674
76 0.001 0.0007116422850379047 0.0007126330184449588 0.0005509890404263221 0.0005520403753247726 0.00035006301886912226 0.0003512614302897459 0.00022873877079420107 0.0002298546155988536 0.00015545216193435095 0.00015645973111213718 0.00011223032450910806 0.0001131821199461313 8.941277122627028e-05 9.041832213305081e-05 8.427699754143763e-05 8.557937250804453e-05 0.00010771649233683978 0.00011015252685143603
77 0.001 0.0007109961448775265 0.000711981898998139 0.0005503239315436604 0.0005513700720769836 0.00034934035900275196 0.0003505318788510462 0.00022808534468017605 0.00022919410061472063 0.00015486580256638324 0.0001558663157908185 0.00011166511373672321 0.00011260933085632868 8.878842266662507e-05 8.978431049296584e-05 8.341876815036907e-05 8.47047300887107e-05 0.00010601922394974779 0.00010841080451458245
78 0.001 0.0007103566138672342 0.0007113372689341813 0.0005496657159311855 0.0005507065458152156 0.0003486253516297722 0.0003498098907291114 0.00022743878433373037 0.00022854040278969112 0.00015428548213839886 0.00015527892573799634 0.00011110570832676001 0.00011204236655473188 8.81708780194749e-05 8.91571706762786e-05 8.25716070442755e-05 8.384135267939557e-05 0.00010435164299643007 0.00010669960309782175
79 0.001 0.0007097236782517396 0.0007106992322019796 0.0005490143729973408 0.0005500498941226498 0.0003479179557857281 0.0003490955423571875 0.0002267990403962617 0.00022789356692450827 0.0001537111471536449 0.00015469757908825738 0.00011055204708289399 0.00011148122111140715 8.756005313455197e-05 8.85368641132709e-05 8.173535064610718e-05 8.298911908997276e-05 0.0001027131817052566 0.00010501839736063321
80 0.001 0.0007090973244087274 0.0007100677749962943 0.0005483698823458906 0.0005494000964108962 0.00034721813091834777 0.0003483887928208825 0.000226166064037726 0.00022725354367970012 0.00015314274472297157 0.00015412222229517684 0.00011000406955950422 0.0001109258331719869 8.695586501935841e-05 8.792330625417495e-05 8.090983803329783e-05 8.214786445649906e-05 0.00010110328401062253 0.00010336661223747767
81 0.001 0.0007084775388425413 0.0007094428836454011 0.0005477322237660661 0.0005487571322870243 0.0003465258368613831 0.0003476896016176379 0.00022553980691704316 0.00022662028424420426 0.00015258022251510344 0.00015355280242059424 0.00010946171600087524 0.00011037614213504096 8.635823175652435e-05 8.731641371338838e-05 8.00949107862898e-05 8.131742659415625e-05 9.952140501322636e-05 0.00010174368455214035
82 0.001 0.0007078645400735427 0.000708824544604701 0.0005471016129101978 0.0005481209815436059 0.0003458412757255009 0.0003469979286303459 0.00022492042013778988 0.00022599374029548395 0.00015202368335334558 0.00015298926708448145 0.00010892504915290583 0.00010983208809074389 8.57671759148139e-05 8.671610418600222e-05 7.929051589048381e-05 8.049764584384383e-05 9.796715152670613e-05 0.0001001490624678555
83 0.001 0.0007072583145347741 0.0007082129757140411 0.0005464780293804963 0.0005474918591435615 0.00034516440688163317 0.0003463139755716002 0.00022430785483116316 0.00022537406278014643 0.0001514730744232032 0.00015243171907300512 0.00010839400891826328 0.00010929373376222763 8.518261565996433e-05 8.612240008214866e-05 7.84964968569563e-05 7.968846833775761e-05 9.643999410136803e-05 9.858234685897841e-05
84 0.001 0.0007066588487940405 0.000707608163356494 0.000545861452976259 0.0005468697446924577 0.0003444951901125997 0.00034563770186245746 0.00022370206265319418 0.00022476120284855867 0.00015092834351042303 0.000151880105523236 0.00010786853593723236 0.00010876101889898551 8.460447028623623e-05 8.55352191851817e-05 7.771269974698105e-05 7.888973637819775e-05 9.493941424410264e-05 9.704300162684373e-05
85 0.001 0.0007060768113835355 0.0007070100940503908 0.0005452653567881146 0.0005462546179930401 0.00034385780916102886 0.0003449690673354809 0.0002231355522451839 0.0002241551121757662 0.0001504295746545273 0.0001513343741731098 0.00010739737531972382 0.00010823388399029377 8.409424224945842e-05 8.495448041312896e-05 7.702434963545377e-05 7.810129484091103e-05 9.360618912201228e-05 9.553050179700698e-05
86 0.001 0.0007055014939207988 0.0007064294568015821 0.0005446762036784223 0.0005456599791780414 0.00034322791998477503 0.0003443323098548347 0.0002225755642266546 0.00022358838010950836 0.00014993632274793293 0.00015083471987353974 0.00010693123855410087 0.00010776122599922914 8.358951092264173e-05 8.444190686735427e-05 7.634435339541097e-05 7.7408734986085e-05 9.22944227993744e-05 9.418640444056476e-05
87 0.001 0.0007049328836329239 0.0007058555225588962 0.0005440939744776738 0.0005450722639773927 0.0003426054850001757 0.0003437030311737585 0.00022202205441602206 0.0002230281662249932 0.000149448541485554 0.00015034058581471813 0.00010647007505716636 0.00010729360256509277 8.309021096715739e-05 8.39348527119689e-05 7.567259318109089e-05 7.67245852554126e-05 9.100372969350909e-05 9.28639870067709e-05
88 0.001 0.0007043664108869901 0.0007052882785030611 0.0005435140913972429 0.0005444914532267761 0.00034198598587466614 0.0003430811937591523 0.00022147141590047654 0.00022247442636251605 0.00014896349766232102 0.00014985192565331347 0.00010601178096740148 0.00010683096298015644 8.259459730216135e-05 8.343325230960875e-05 7.500736724232048e-05 7.604872690242875e-05 8.973176442333615e-05 9.156285904414627e-05
89 0.001 0.0007038020712072354 0.0007047231683832071 0.0005429365478183962 0.0005439129831785586 0.00034136940918446675 0.00034246228783126086 0.0002209236320980648 0.00022192355689618922 0.00014848117283038098 0.00014936600614401393 0.00010555633431743894 0.00010637120139586071 8.210263744821714e-05 8.293535717958106e-05 7.434860458126827e-05 7.537945268589432e-05 8.847824135377829e-05 9.028066182205625e-05
90 0.001 0.0007032398600991381 0.0007041601877072604 0.0005423613371043419 0.0005433368472132987 0.00034075574151016483 0.00034184629997988753 0.0002203786864681782 0.0002213755412469509 0.00014800154862415601 0.00014888280881520869 0.00010510371328265478 0.00010591429577334988 8.161429921011451e-05 8.244113465160048e-05 7.369623501807121e-05 7.471669094184598e-05 8.724287943554497e-05 8.901710564172274e-05
91 0.001 0.0007026797730466592 0.0007035993319644686 0.0005417884525961108 0.0005427630386936696 0.00034014496942632764 0.0003412332167993905 0.0002198365624959981 0.00022083036287728357 0.00014752460674093983 0.0001484023152778868 0.00010465389615779026 0.00010546022421726945 8.112955064604149e-05 8.195055234184008e-05 7.305018913687007e-05 7.406037083397318e-05 8.602540201539488e-05 8.777190547391773e-05
92 0.001 0.0007021196874055633 0.0007030405966226531 0.0005412157406692665 0.0005421915509602746 0.0003395348927353949 0.00034062302487816926 0.00021929545761274023 0.00022028800527546067 0.00014704895219343257 0.00014792450720603156 0.00010420578859113516 0.00010500896495215848 8.064746506639534e-05 8.146357812174912e-05 7.240953347459202e-05 7.341042229889045e-05 8.482441661675139e-05 8.65447807653603e-05
93 0.001 0.0007015596012323657 0.000702481864866424 0.0005406431992153213 0.0005416202367428493 0.0003389255082691921 0.000340013528083159 0.00021875536780717296 0.00021974666745789773 0.00014657457987728414 0.00014744798951136416 0.00010375938295149973 0.00010455942245749231 8.016802726693694e-05 8.097928325582809e-05 7.17742234562459e-05 7.276590831707151e-05 8.363970356449741e-05 8.53343290345859e-05
94 0.001 0.0007009995125587165 0.0007019231347536531 0.0005400708260946051 0.000541049093933996 0.0003383168128172846 0.00033940472324505365 0.00021821628903476192 0.0002192063454080809 0.00014610148467187763 0.00014697275707368812 0.0001033146716169485 0.00010411158905958576 7.969122211456026e-05 8.049765241221972e-05 7.114421486558773e-05 7.212678380437272e-05 8.247104609297546e-05 8.414032725111873e-05
95 0.001 0.000700426120570031 0.0007013644043173649 0.0005394817717340144 0.0005404781203952333 0.00033767827777106695 0.00033879660715245314 0.00021763678242090514 0.0002186670350763442 0.00014557802543177205 0.0001464988047567028 0.00010280805245363877 0.00010366545709431046 7.913535785684264e-05 8.001867033124847e-05 7.040274681183516e-05 7.149300404124133e-05 8.111172191387726e-05 8.296255535497e-05
96 0.001 0.0006998527383823768 0.0007007923380838431 0.0005388929110101418 0.0005398904209305891 0.0003370405259007354 0.0003381585602637609 0.00021705847496470142 0.00021808716235465733 0.00014505616500334602 0.0001459743062317574 0.00010230367256069614 0.00010315717126101123 7.858312049704058e-05 7.946027734643345e-05 6.966868896041247e-05 7.0747191644443e-05 7.977423771714316e-05 8.159291401029592e-05
97 0.0010496228983614124 0.001 0.002020602352332682 0.0007002202839606736 0.0024834354692445607 0.0005393029161815334 0.004712247621156641 0.0003375212965814363 0.00854174709233096 0.0002175084901000057 0.015197203876184536 0.0001454514108138073 0.027142477151470907 0.00010265113449578299 0.049749449744480465 7.890553328521924e-05 0.09589624880110185 7.000884795811205e-05 0.2 8.02453392500888e-05
98 0.004235602571438949 0.0010564983206625808 0.007336805952289255 0.0020323156209598047 0.008714058005603317 0.0024972245821602065 0.015024716476258112 0.004735193374982383 0.025061770718850837 0.008578320915529132 0.04079161627542227 0.015253393937469889 0.0649508755581543 0.027225142859919765 0.10074574737193842 0.049861478431656114 0.14993445055894863 0.09601482521493776 0.206 0.2
99 0.004249939542299966 0.007357791565894658 0.008737301696751656 0.01505607870396766 0.02510093603015811 0.040835074437955504 0.0649892582783015 0.10076225398432796 0.14991538310282454 0.206

View File

@@ -1,97 +1,97 @@
signal,ase,nli
0.000325019416624,3.8827360617812335e-08,2.397604591245591e-07
0.0003222815415358,3.8702821151814216e-08,2.4267833614138976e-07
0.0003195661748689,3.8578942925493807e-08,2.455296149641726e-07
0.000316873132879,3.8455721305309324e-08,2.483151861322029e-07
0.0003125687708988,3.815158818797417e-08,2.497308542349044e-07
0.0003083216327341,3.784989647314237e-08,2.5106122773764815e-07
0.0003041309702107,3.755062053762566e-08,2.523083160653813e-07
0.0002999931829076,3.725370771318225e-08,2.534716728592015e-07
0.0002959076621852,3.695913382975532e-08,2.545532047834699e-07
0.0002914749637887,3.6620413511505286e-08,2.5520557429118934e-07
0.0002871045786391,3.62847038107824e-08,2.557776344401253e-07
0.0002827879891071,3.5951828869209396e-08,2.5626453052593257e-07
0.0002785247470154,3.562176113110911e-08,2.5666832208790035e-07
0.0002743144039041,3.5294473123494e-08,2.569910409348857e-07
0.000270032675166,3.4954880805048256e-08,2.571167784361306e-07
0.0002658067200554,3.4618272391047544e-08,2.571652788509227e-07
0.000261636025157,3.428461757057609e-08,2.5713860104931033e-07
0.00025752034599,3.395388872366444e-08,2.570390408700655e-07
0.000253459157096,3.362605558722993e-08,2.5284986247287787e-07
0.000248983782073,3.3242702224575744e-08,2.48252059976888e-07
0.0002445773493265,3.286328176612301e-08,2.437277481862015e-07
0.0002402391773459,3.2487750441670215e-08,2.392761376865807e-07
0.0002359684123723,3.2116061418127753e-08,2.3489626905665574e-07
0.0002317642070805,3.174816817069829e-08,2.3058719110264335e-07
0.0002279695550926,3.1424928539548144e-08,2.2668986526609113e-07
0.0002242281358436,3.1104729317697146e-08,2.228495045304229e-07
0.0002205393783222,3.078753835343166e-08,2.190654562751529e-07
0.0002169035545525,3.047333197100547e-08,2.1533790605165431e-07
0.0002133200561122,3.01620779209974e-08,2.1166616520930645e-07
0.0002097882786443,2.9853744125792176e-08,2.080495504306458e-07
0.0002063076230434,2.9548298767727423e-08,2.0448738489666716e-07
0.0002028776374913,2.9245712991289203e-08,2.009791389793126e-07
0.0001994977236946,2.8945955168147914e-08,1.975241389908885e-07
0.0001961672877059,2.8648993828553545e-08,1.9412171682473827e-07
0.0001929967738963,2.8368195292008612e-08,1.9088102669437356e-07
0.0001898709450753,2.8090002575266257e-08,1.8768789971552863e-07
0.0001867892958482,2.7814389032455363e-08,1.8454176486632323e-07
0.000183752636707,2.754134148447891e-08,1.8115002092564538e-07
0.0001807604032471,2.7270832946920812e-08,1.7781492252546064e-07
0.0001778120365192,2.7002836607760232e-08,1.745356369687972e-07
0.0001749069829579,2.673732582084065e-08,1.7131134159682263e-07
0.0001720467771106,2.6474316260529432e-08,1.6814325920632144e-07
0.0001692307716138,2.6213779758633963e-08,1.6503047175593728e-07
0.0001664583277393,2.5955688359138642e-08,1.619720751255672e-07
0.0001635796256227,2.5677295228672648e-08,1.588223280583729e-07
0.0001607481963598,2.540169810843596e-08,1.557306487644946e-07
0.0001579633073114,2.512886316325068e-08,1.526960267832303e-07
0.0001552255108883,2.4858770138402143e-08,1.4971869736122287e-07
0.000152534027681,2.4591385101783997e-08,1.467976093017761e-07
0.0001498880910245,2.432667443532368e-08,1.439317302908228e-07
0.0001472869464661,2.4064604800471338e-08,1.411200462508912e-07
0.0001447314108795,2.3805175801260087e-08,1.3836305172259211e-07
0.0001422206714078,2.3548353146553164e-08,1.3565967973526553e-07
0.0001397539300508,2.3294102880186107e-08,1.3300888438790536e-07
0.0001372700286953,2.3032485432340423e-08,1.3035230831596558e-07
0.0001348306664569,2.2773547798807564e-08,1.277485195296911e-07
0.0001324350333325,2.2517253805739807e-08,1.2505815113074245e-07
0.0001300835425363,2.2263580536243144e-08,1.2242454150816991e-07
0.0001277753479236,2.2012491805819457e-08,1.1984647647989558e-07
0.0001255096202792,2.1763951788812352e-08,1.1732276843747534e-07
0.0001232855464269,2.1517924960982367e-08,1.148522552473446e-07
0.0001211034718808,2.1274400813402842e-08,1.1243486085670634e-07
0.0001189625537742,2.1033343271785093e-08,1.100694052812587e-07
0.0001168619671686,2.0794716623616593e-08,1.0775473577456182e-07
0.0001149842862687,2.0591381044652174e-08,1.056582342233035e-07
0.0001131392424142,2.038998454906055e-08,1.0360354473279054e-07
0.0001113262252932,2.0190503422606346e-08,1.0158979943539652e-07
0.0001095446965516,1.9992914861970927e-08,9.961620365200192e-08
0.0001077940670993,1.9797195630879305e-08,9.768192356581421e-08
0.0001060737596438,1.9603322741072024e-08,9.578614349620901e-08
0.0001043832080373,1.9411273409584944e-08,9.392806512410292e-08
0.0001027223865858,1.922103688152168e-08,9.210738192714242e-08
0.0001010907257366,1.9032590330084783e-08,9.032330177845482e-08
9.948766769187398e-05,1.8845911172333032e-08,8.857505025129074e-08
9.792267601599324e-05,1.8663442661346744e-08,8.687075031773093e-08
9.638489299064336e-05,1.848276820506329e-08,8.550652733411691e-08
9.48738026587305e-05,1.830386814585904e-08,8.416598440502352e-08
9.338895072626004e-05,1.8126723701740663e-08,8.284871850980459e-08
9.192983962632808e-05,1.7951315790883015e-08,8.155428823884958e-08
9.049598195913348e-05,1.7777625631449783e-08,8.028226120215297e-08
8.908690001727453e-05,1.7605634715742614e-08,7.903221360818749e-08
8.77022482135352e-05,1.743532764682425e-08,7.780383887402493e-08
8.634156228069215e-05,1.7266686393258476e-08,7.659672513140668e-08
8.50043874741986e-05,1.7099693224424935e-08,7.541046895998541e-08
8.381694660770028e-05,1.6962933489525264e-08,7.43570471865261e-08
8.26484651987276e-05,1.682764479561346e-08,7.33204450340972e-08
8.149860566615124e-05,1.6693821025332528e-08,7.230036302225977e-08
8.036532369463753e-05,1.6561436760581683e-08,7.129498756488483e-08
7.924836834130927e-05,1.6430487594212236e-08,7.030409604146297e-08
7.814749266035204e-05,1.6300969571299207e-08,6.932746937742372e-08
7.706245353522453e-05,1.6172879193985398e-08,6.836489189528336e-08
7.599203524832233e-05,1.6046190191322708e-08,6.741528508795074e-08
7.493604414299442e-05,1.5920900877281144e-08,6.647847715560108e-08
7.389428911314724e-05,1.57970100612018e-08,6.555429856110159e-08
7.268136514077581e-05,1.5628904744452727e-08,6.447826980203191e-08
7.148784598320314e-05,1.5462487634551132e-08,6.341945575654982e-08
0.0003277611420723,3.899470345438449e-08,2.4249796960234704e-07
0.0003250017686895,3.88695612548288e-08,2.454439759471401e-07
0.0003222650868463,3.8745084795940443e-08,2.483227752372772e-07
0.0003195509110308,3.8621269402790665e-08,2.5113526636955305e-07
0.0003152051917212,3.831511482545576e-08,2.525571834385986e-07
0.0003109173643927,3.801142847546096e-08,2.538929936309988e-07
0.0003066866698276,3.7710184357421544e-08,2.551447305997623e-07
0.0003025094755105,3.74113291159896e-08,2.5631194688927884e-07
0.0002983851632227,3.711483823464807e-08,2.57396572290435e-07
0.0002939090370085,3.677384148134545e-08,2.580457272005108e-07
0.0002894959951166,3.6435889805735655e-08,2.586138532899247e-07
0.0002851374388563,3.6100804786136576e-08,2.590960415051975e-07
0.0002808329106728,3.5768558450009235e-08,2.594943775098954e-07
0.0002765819528091,3.543912291177373e-08,2.5981091869063053e-07
0.0002722585970856,3.509728654683229e-08,2.599278683420713e-07
0.0002679917286135,3.475846792019279e-08,2.5996691909916645e-07
0.0002637808235807,3.44226362592242e-08,2.599301554005377e-07
0.000259625629125,3.4089763516669025e-08,2.598199006832183e-07
0.0002555256094681,3.375981897519707e-08,2.555756892447018e-07
0.0002510061132968,3.3373930606403456e-08,2.509166795385623e-07
0.0002465564627785,3.299202134196193e-08,2.463324441551975e-07
0.0002421759612383,3.2614046686258965e-08,2.418221717126139e-07
0.0002378637384678,3.2239959043845714e-08,2.373848791838885e-07
0.0002336189309368,3.18697111382095e-08,2.3301959212527745e-07
0.000229786907623,3.154429519674801e-08,2.290704910449234e-07
0.0002260088301865,3.1221956560459585e-08,2.251793706228873e-07
0.0002222841156937,3.090266251951521e-08,2.213455610060874e-07
0.0002186130300924,3.058638893853768e-08,2.175692384572231e-07
0.000214994952946,3.027310301755256e-08,2.138496969887665e-07
0.0002114292680468,2.9962772135295886e-08,2.1018623618806562e-07
0.0002079153646262,2.9655363939172943e-08,2.0657816240778285e-07
0.0002044527805171,2.9350849083358333e-08,2.0302493091347645e-07
0.0002010409060047,2.904919541568693e-08,1.995258515561229e-07
0.0001976791358816,2.8750370949174832e-08,1.9608024000424985e-07
0.0001944779969388,2.8467714690234763e-08,1.9279758501200657e-07
0.0001913221363037,2.8187696076865265e-08,1.895633279917293e-07
0.0001882110383135,2.7910287978744905e-08,1.8637688328585562e-07
0.0001851455117447,2.763547687941092e-08,1.8294394600063082e-07
0.000182124981625,2.7363235313116972e-08,1.795685295609545e-07
0.0001791488786026,2.7093535992876882e-08,1.762497841686646e-07
0.0001762166388716,2.6826351803791374e-08,1.729868703567211e-07
0.0001733298028653,2.6561698509687352e-08,1.6978101465406346e-07
0.0001704877122406,2.6299547455845844e-08,1.666312813274778e-07
0.0001676897174922,2.603987020688793e-08,1.635367489137303e-07
0.0001647841340631,2.575975887106765e-08,1.603495310656704e-07
0.0001619264140112,2.5482476734612484e-08,1.57221255401216e-07
0.0001591158121254,2.520798936957748e-08,1.541508918468439e-07
0.0001563528761692,2.493627607244877e-08,1.5113866658054666e-07
0.0001536368140911,2.4667302328210823e-08,1.4818350881997277e-07
0.0001509668468559,2.4401033945674264e-08,1.452843671077152e-07
0.0001483422079002,2.4137437022238145e-08,1.4244020864846993e-07
0.0001457637135497,2.3876511018332856e-08,1.3965152374161321e-07
0.0001432305385497,2.3618221073161605e-08,1.369172264569389e-07
0.0001407418727912,2.3362532671027093e-08,1.342362523931659e-07
0.0001382358967136,2.3099449050292612e-08,1.3154948565189317e-07
0.0001357749763134,2.283907541163823e-08,1.2891625322154978e-07
0.0001333582893299,2.2581374993581207e-08,1.2619656354429104e-07
0.0001309862438042,2.232632442642508e-08,1.2353438214155152e-07
0.0001286579813897,2.2073886950323847e-08,1.2092847534724114e-07
0.000126372660974,2.182402617504561e-08,1.1837763658356932e-07
0.0001241294577704,2.1576706021416435e-08,1.1588068523754277e-07
0.0001219287137845,2.1331915734067192e-08,1.1343753674855828e-07
0.0001197695745451,2.108961868593061e-08,1.110469928559736e-07
0.0001176512038143,2.08497786224886e-08,1.0870788304064741e-07
0.0001157575507964,2.064536482973696e-08,1.0658919731348233e-07
0.0001138968874049,2.0442910777630443e-08,1.0451285530046546e-07
0.0001120685950893,2.0242392369145183e-08,1.0247797592009348e-07
0.0001102721277733,2.0043786431072003e-08,1.004837520181078e-07
0.0001085068885057,1.9847069357675e-08,9.852933720632749e-08
0.0001067722923259,1.96522177979178e-08,9.661390355735894e-08
0.0001050677655983,1.9459208611917452e-08,9.473664081358061e-08
0.0001033932787473,1.9268030831168163e-08,9.289723486055733e-08
0.000101748254869,1.9078661277163014e-08,9.109488193990664e-08
0.0001001321289996,1.8891077021770737e-08,8.932879630040843e-08
9.855410305682533e-05,1.8707685556144628e-08,8.760688138727519e-08
9.70035750524988e-05,1.8526106268805162e-08,8.622858338902384e-08
9.54800221910602e-05,1.834631916025987e-08,8.487426418079828e-08
9.398298376195116e-05,1.816830511796191e-08,8.35435142269833e-08
9.251195567959074e-05,1.7992044730451886e-08,8.223588543496443e-08
9.106644418852578e-05,1.7817518892375448e-08,8.095093889480209e-08
8.964596537975902e-05,1.7644708778076547e-08,7.968824444928503e-08
8.825016836609303e-05,1.7473598709850392e-08,7.844749018716727e-08
8.687858293497841e-05,1.7304170348281186e-08,7.722825812630736e-08
8.553074854577241e-05,1.7136405660531677e-08,7.603013888213162e-08
8.433358305815234e-05,1.6998940860777966e-08,7.496595249494088e-08
8.315557511358139e-05,1.6862959916000355e-08,7.39187956635932e-08
8.199638277812437e-05,1.6728456488525712e-08,7.28883644355918e-08
8.085394966108952e-05,1.6595404781975636e-08,7.187283084061544e-08
7.972802118918304e-05,1.6463800186495995e-08,7.087196858293762e-08
7.861834686065792e-05,1.6333638547854104e-08,6.988555498611813e-08
7.752468007410017e-05,1.6204916172056103e-08,6.891337084080734e-08
7.644579608395804e-05,1.607760634807453e-08,6.795432744410053e-08
7.538149823706338e-05,1.5951707212505497e-08,6.700824998672802e-08
7.433159248509273e-05,1.5827217400105257e-08,6.607496597492307e-08
7.310944660054646e-05,1.5658417045863033e-08,6.498857397068902e-08
7.190690836035234e-05,1.5491319571073834e-08,6.391961162711614e-08
1 signal ase nli
2 0.000325019416624 0.0003277611420723 3.8827360617812335e-08 3.899470345438449e-08 2.397604591245591e-07 2.4249796960234704e-07
3 0.0003222815415358 0.0003250017686895 3.8702821151814216e-08 3.88695612548288e-08 2.4267833614138976e-07 2.454439759471401e-07
4 0.0003195661748689 0.0003222650868463 3.8578942925493807e-08 3.8745084795940443e-08 2.455296149641726e-07 2.483227752372772e-07
5 0.000316873132879 0.0003195509110308 3.8455721305309324e-08 3.8621269402790665e-08 2.483151861322029e-07 2.5113526636955305e-07
6 0.0003125687708988 0.0003152051917212 3.815158818797417e-08 3.831511482545576e-08 2.497308542349044e-07 2.525571834385986e-07
7 0.0003083216327341 0.0003109173643927 3.784989647314237e-08 3.801142847546096e-08 2.5106122773764815e-07 2.538929936309988e-07
8 0.0003041309702107 0.0003066866698276 3.755062053762566e-08 3.7710184357421544e-08 2.523083160653813e-07 2.551447305997623e-07
9 0.0002999931829076 0.0003025094755105 3.725370771318225e-08 3.74113291159896e-08 2.534716728592015e-07 2.5631194688927884e-07
10 0.0002959076621852 0.0002983851632227 3.695913382975532e-08 3.711483823464807e-08 2.545532047834699e-07 2.57396572290435e-07
11 0.0002914749637887 0.0002939090370085 3.6620413511505286e-08 3.677384148134545e-08 2.5520557429118934e-07 2.580457272005108e-07
12 0.0002871045786391 0.0002894959951166 3.62847038107824e-08 3.6435889805735655e-08 2.557776344401253e-07 2.586138532899247e-07
13 0.0002827879891071 0.0002851374388563 3.5951828869209396e-08 3.6100804786136576e-08 2.5626453052593257e-07 2.590960415051975e-07
14 0.0002785247470154 0.0002808329106728 3.562176113110911e-08 3.5768558450009235e-08 2.5666832208790035e-07 2.594943775098954e-07
15 0.0002743144039041 0.0002765819528091 3.5294473123494e-08 3.543912291177373e-08 2.569910409348857e-07 2.5981091869063053e-07
16 0.000270032675166 0.0002722585970856 3.4954880805048256e-08 3.509728654683229e-08 2.571167784361306e-07 2.599278683420713e-07
17 0.0002658067200554 0.0002679917286135 3.4618272391047544e-08 3.475846792019279e-08 2.571652788509227e-07 2.5996691909916645e-07
18 0.000261636025157 0.0002637808235807 3.428461757057609e-08 3.44226362592242e-08 2.5713860104931033e-07 2.599301554005377e-07
19 0.00025752034599 0.000259625629125 3.395388872366444e-08 3.4089763516669025e-08 2.570390408700655e-07 2.598199006832183e-07
20 0.000253459157096 0.0002555256094681 3.362605558722993e-08 3.375981897519707e-08 2.5284986247287787e-07 2.555756892447018e-07
21 0.000248983782073 0.0002510061132968 3.3242702224575744e-08 3.3373930606403456e-08 2.48252059976888e-07 2.509166795385623e-07
22 0.0002445773493265 0.0002465564627785 3.286328176612301e-08 3.299202134196193e-08 2.437277481862015e-07 2.463324441551975e-07
23 0.0002402391773459 0.0002421759612383 3.2487750441670215e-08 3.2614046686258965e-08 2.392761376865807e-07 2.418221717126139e-07
24 0.0002359684123723 0.0002378637384678 3.2116061418127753e-08 3.2239959043845714e-08 2.3489626905665574e-07 2.373848791838885e-07
25 0.0002317642070805 0.0002336189309368 3.174816817069829e-08 3.18697111382095e-08 2.3058719110264335e-07 2.3301959212527745e-07
26 0.0002279695550926 0.000229786907623 3.1424928539548144e-08 3.154429519674801e-08 2.2668986526609113e-07 2.290704910449234e-07
27 0.0002242281358436 0.0002260088301865 3.1104729317697146e-08 3.1221956560459585e-08 2.228495045304229e-07 2.251793706228873e-07
28 0.0002205393783222 0.0002222841156937 3.078753835343166e-08 3.090266251951521e-08 2.190654562751529e-07 2.213455610060874e-07
29 0.0002169035545525 0.0002186130300924 3.047333197100547e-08 3.058638893853768e-08 2.1533790605165431e-07 2.175692384572231e-07
30 0.0002133200561122 0.000214994952946 3.01620779209974e-08 3.027310301755256e-08 2.1166616520930645e-07 2.138496969887665e-07
31 0.0002097882786443 0.0002114292680468 2.9853744125792176e-08 2.9962772135295886e-08 2.080495504306458e-07 2.1018623618806562e-07
32 0.0002063076230434 0.0002079153646262 2.9548298767727423e-08 2.9655363939172943e-08 2.0448738489666716e-07 2.0657816240778285e-07
33 0.0002028776374913 0.0002044527805171 2.9245712991289203e-08 2.9350849083358333e-08 2.009791389793126e-07 2.0302493091347645e-07
34 0.0001994977236946 0.0002010409060047 2.8945955168147914e-08 2.904919541568693e-08 1.975241389908885e-07 1.995258515561229e-07
35 0.0001961672877059 0.0001976791358816 2.8648993828553545e-08 2.8750370949174832e-08 1.9412171682473827e-07 1.9608024000424985e-07
36 0.0001929967738963 0.0001944779969388 2.8368195292008612e-08 2.8467714690234763e-08 1.9088102669437356e-07 1.9279758501200657e-07
37 0.0001898709450753 0.0001913221363037 2.8090002575266257e-08 2.8187696076865265e-08 1.8768789971552863e-07 1.895633279917293e-07
38 0.0001867892958482 0.0001882110383135 2.7814389032455363e-08 2.7910287978744905e-08 1.8454176486632323e-07 1.8637688328585562e-07
39 0.000183752636707 0.0001851455117447 2.754134148447891e-08 2.763547687941092e-08 1.8115002092564538e-07 1.8294394600063082e-07
40 0.0001807604032471 0.000182124981625 2.7270832946920812e-08 2.7363235313116972e-08 1.7781492252546064e-07 1.795685295609545e-07
41 0.0001778120365192 0.0001791488786026 2.7002836607760232e-08 2.7093535992876882e-08 1.745356369687972e-07 1.762497841686646e-07
42 0.0001749069829579 0.0001762166388716 2.673732582084065e-08 2.6826351803791374e-08 1.7131134159682263e-07 1.729868703567211e-07
43 0.0001720467771106 0.0001733298028653 2.6474316260529432e-08 2.6561698509687352e-08 1.6814325920632144e-07 1.6978101465406346e-07
44 0.0001692307716138 0.0001704877122406 2.6213779758633963e-08 2.6299547455845844e-08 1.6503047175593728e-07 1.666312813274778e-07
45 0.0001664583277393 0.0001676897174922 2.5955688359138642e-08 2.603987020688793e-08 1.619720751255672e-07 1.635367489137303e-07
46 0.0001635796256227 0.0001647841340631 2.5677295228672648e-08 2.575975887106765e-08 1.588223280583729e-07 1.603495310656704e-07
47 0.0001607481963598 0.0001619264140112 2.540169810843596e-08 2.5482476734612484e-08 1.557306487644946e-07 1.57221255401216e-07
48 0.0001579633073114 0.0001591158121254 2.512886316325068e-08 2.520798936957748e-08 1.526960267832303e-07 1.541508918468439e-07
49 0.0001552255108883 0.0001563528761692 2.4858770138402143e-08 2.493627607244877e-08 1.4971869736122287e-07 1.5113866658054666e-07
50 0.000152534027681 0.0001536368140911 2.4591385101783997e-08 2.4667302328210823e-08 1.467976093017761e-07 1.4818350881997277e-07
51 0.0001498880910245 0.0001509668468559 2.432667443532368e-08 2.4401033945674264e-08 1.439317302908228e-07 1.452843671077152e-07
52 0.0001472869464661 0.0001483422079002 2.4064604800471338e-08 2.4137437022238145e-08 1.411200462508912e-07 1.4244020864846993e-07
53 0.0001447314108795 0.0001457637135497 2.3805175801260087e-08 2.3876511018332856e-08 1.3836305172259211e-07 1.3965152374161321e-07
54 0.0001422206714078 0.0001432305385497 2.3548353146553164e-08 2.3618221073161605e-08 1.3565967973526553e-07 1.369172264569389e-07
55 0.0001397539300508 0.0001407418727912 2.3294102880186107e-08 2.3362532671027093e-08 1.3300888438790536e-07 1.342362523931659e-07
56 0.0001372700286953 0.0001382358967136 2.3032485432340423e-08 2.3099449050292612e-08 1.3035230831596558e-07 1.3154948565189317e-07
57 0.0001348306664569 0.0001357749763134 2.2773547798807564e-08 2.283907541163823e-08 1.277485195296911e-07 1.2891625322154978e-07
58 0.0001324350333325 0.0001333582893299 2.2517253805739807e-08 2.2581374993581207e-08 1.2505815113074245e-07 1.2619656354429104e-07
59 0.0001300835425363 0.0001309862438042 2.2263580536243144e-08 2.232632442642508e-08 1.2242454150816991e-07 1.2353438214155152e-07
60 0.0001277753479236 0.0001286579813897 2.2012491805819457e-08 2.2073886950323847e-08 1.1984647647989558e-07 1.2092847534724114e-07
61 0.0001255096202792 0.000126372660974 2.1763951788812352e-08 2.182402617504561e-08 1.1732276843747534e-07 1.1837763658356932e-07
62 0.0001232855464269 0.0001241294577704 2.1517924960982367e-08 2.1576706021416435e-08 1.148522552473446e-07 1.1588068523754277e-07
63 0.0001211034718808 0.0001219287137845 2.1274400813402842e-08 2.1331915734067192e-08 1.1243486085670634e-07 1.1343753674855828e-07
64 0.0001189625537742 0.0001197695745451 2.1033343271785093e-08 2.108961868593061e-08 1.100694052812587e-07 1.110469928559736e-07
65 0.0001168619671686 0.0001176512038143 2.0794716623616593e-08 2.08497786224886e-08 1.0775473577456182e-07 1.0870788304064741e-07
66 0.0001149842862687 0.0001157575507964 2.0591381044652174e-08 2.064536482973696e-08 1.056582342233035e-07 1.0658919731348233e-07
67 0.0001131392424142 0.0001138968874049 2.038998454906055e-08 2.0442910777630443e-08 1.0360354473279054e-07 1.0451285530046546e-07
68 0.0001113262252932 0.0001120685950893 2.0190503422606346e-08 2.0242392369145183e-08 1.0158979943539652e-07 1.0247797592009348e-07
69 0.0001095446965516 0.0001102721277733 1.9992914861970927e-08 2.0043786431072003e-08 9.961620365200192e-08 1.004837520181078e-07
70 0.0001077940670993 0.0001085068885057 1.9797195630879305e-08 1.9847069357675e-08 9.768192356581421e-08 9.852933720632749e-08
71 0.0001060737596438 0.0001067722923259 1.9603322741072024e-08 1.96522177979178e-08 9.578614349620901e-08 9.661390355735894e-08
72 0.0001043832080373 0.0001050677655983 1.9411273409584944e-08 1.9459208611917452e-08 9.392806512410292e-08 9.473664081358061e-08
73 0.0001027223865858 0.0001033932787473 1.922103688152168e-08 1.9268030831168163e-08 9.210738192714242e-08 9.289723486055733e-08
74 0.0001010907257366 0.000101748254869 1.9032590330084783e-08 1.9078661277163014e-08 9.032330177845482e-08 9.109488193990664e-08
75 9.948766769187398e-05 0.0001001321289996 1.8845911172333032e-08 1.8891077021770737e-08 8.857505025129074e-08 8.932879630040843e-08
76 9.792267601599324e-05 9.855410305682533e-05 1.8663442661346744e-08 1.8707685556144628e-08 8.687075031773093e-08 8.760688138727519e-08
77 9.638489299064336e-05 9.70035750524988e-05 1.848276820506329e-08 1.8526106268805162e-08 8.550652733411691e-08 8.622858338902384e-08
78 9.48738026587305e-05 9.54800221910602e-05 1.830386814585904e-08 1.834631916025987e-08 8.416598440502352e-08 8.487426418079828e-08
79 9.338895072626004e-05 9.398298376195116e-05 1.8126723701740663e-08 1.816830511796191e-08 8.284871850980459e-08 8.35435142269833e-08
80 9.192983962632808e-05 9.251195567959074e-05 1.7951315790883015e-08 1.7992044730451886e-08 8.155428823884958e-08 8.223588543496443e-08
81 9.049598195913348e-05 9.106644418852578e-05 1.7777625631449783e-08 1.7817518892375448e-08 8.028226120215297e-08 8.095093889480209e-08
82 8.908690001727453e-05 8.964596537975902e-05 1.7605634715742614e-08 1.7644708778076547e-08 7.903221360818749e-08 7.968824444928503e-08
83 8.77022482135352e-05 8.825016836609303e-05 1.743532764682425e-08 1.7473598709850392e-08 7.780383887402493e-08 7.844749018716727e-08
84 8.634156228069215e-05 8.687858293497841e-05 1.7266686393258476e-08 1.7304170348281186e-08 7.659672513140668e-08 7.722825812630736e-08
85 8.50043874741986e-05 8.553074854577241e-05 1.7099693224424935e-08 1.7136405660531677e-08 7.541046895998541e-08 7.603013888213162e-08
86 8.381694660770028e-05 8.433358305815234e-05 1.6962933489525264e-08 1.6998940860777966e-08 7.43570471865261e-08 7.496595249494088e-08
87 8.26484651987276e-05 8.315557511358139e-05 1.682764479561346e-08 1.6862959916000355e-08 7.33204450340972e-08 7.39187956635932e-08
88 8.149860566615124e-05 8.199638277812437e-05 1.6693821025332528e-08 1.6728456488525712e-08 7.230036302225977e-08 7.28883644355918e-08
89 8.036532369463753e-05 8.085394966108952e-05 1.6561436760581683e-08 1.6595404781975636e-08 7.129498756488483e-08 7.187283084061544e-08
90 7.924836834130927e-05 7.972802118918304e-05 1.6430487594212236e-08 1.6463800186495995e-08 7.030409604146297e-08 7.087196858293762e-08
91 7.814749266035204e-05 7.861834686065792e-05 1.6300969571299207e-08 1.6333638547854104e-08 6.932746937742372e-08 6.988555498611813e-08
92 7.706245353522453e-05 7.752468007410017e-05 1.6172879193985398e-08 1.6204916172056103e-08 6.836489189528336e-08 6.891337084080734e-08
93 7.599203524832233e-05 7.644579608395804e-05 1.6046190191322708e-08 1.607760634807453e-08 6.741528508795074e-08 6.795432744410053e-08
94 7.493604414299442e-05 7.538149823706338e-05 1.5920900877281144e-08 1.5951707212505497e-08 6.647847715560108e-08 6.700824998672802e-08
95 7.389428911314724e-05 7.433159248509273e-05 1.57970100612018e-08 1.5827217400105257e-08 6.555429856110159e-08 6.607496597492307e-08
96 7.268136514077581e-05 7.310944660054646e-05 1.5628904744452727e-08 1.5658417045863033e-08 6.447826980203191e-08 6.498857397068902e-08
97 7.148784598320314e-05 7.190690836035234e-05 1.5462487634551132e-08 1.5491319571073834e-08 6.341945575654982e-08 6.391961162711614e-08

View File

@@ -4,6 +4,121 @@ WARNING gnpy.tools.json_io:json_io.py
default value is type_variety = default
INFO gnpy.tools.json_io:json_io.py Automatically converting requests from XLS to JSON
INFO gnpy.tools.worker_utils:worker_utils.py List of disjunctions:
[Disjunction 3
relaxable: false
link-diverse: True
node-diverse: True
request-id-numbers: ['3', '1']
, Disjunction 4
relaxable: false
link-diverse: True
node-diverse: True
request-id-numbers: ['4', '5']
]
INFO gnpy.tools.worker_utils:worker_utils.py Aggregating similar requests
INFO gnpy.tools.worker_utils:worker_utils.py The following services have been requested:
[PathRequest 0
source: trx Lorient_KMA
destination: trx Vannes_KBE
trx type: Voyager
trx mode: None
baud_rate: None Gbaud
bit_rate: None Gb/s
spacing: 50.0 GHz
power: 1.0 dBm
tx_power_dbm: 0.0 dBm
nb channels: 80
path_bandwidth: 100.0 Gbit/s
nodes-list: []
loose-list: []
, PathRequest 1
source: trx Brest_KLA
destination: trx Vannes_KBE
trx type: Voyager
trx mode: mode 1
baud_rate: 32.0 Gbaud
bit_rate: 100.0 Gb/s
spacing: 50.0 GHz
power: 1.0 dBm
tx_power_dbm: 0.0 dBm
nb channels: 95
path_bandwidth: 200.0 Gbit/s
nodes-list: ['roadm Brest_KLA', 'roadm Lannion_CAS', 'roadm Lorient_KMA', 'roadm Vannes_KBE']
loose-list: ['LOOSE', 'LOOSE', 'LOOSE', 'LOOSE']
, PathRequest 3
source: trx Lannion_CAS
destination: trx Rennes_STA
trx type: vendorA_trx-type1
trx mode: mode 1
baud_rate: 32.0 Gbaud
bit_rate: 100.0 Gb/s
spacing: 50.0 GHz
power: 0.0 dBm
tx_power_dbm: 0.0 dBm
nb channels: 95
path_bandwidth: 60.0 Gbit/s
nodes-list: []
loose-list: []
, PathRequest 4
source: trx Rennes_STA
destination: trx Lannion_CAS
trx type: vendorA_trx-type1
trx mode: None
baud_rate: None Gbaud
bit_rate: None Gb/s
spacing: 75.0 GHz
power: 3.0 dBm
tx_power_dbm: 0.0 dBm
nb channels: 63
path_bandwidth: 150.0 Gbit/s
nodes-list: []
loose-list: []
, PathRequest 5
source: trx Rennes_STA
destination: trx Lannion_CAS
trx type: vendorA_trx-type1
trx mode: mode 2
baud_rate: 66.0 Gbaud
bit_rate: 200.0 Gb/s
spacing: 75.0 GHz
power: 3.0 dBm
tx_power_dbm: 0.0 dBm
nb channels: 63
path_bandwidth: 20.0 Gbit/s
nodes-list: []
loose-list: []
, PathRequest 7 | 6
source: trx Lannion_CAS
destination: trx Lorient_KMA
trx type: Voyager
trx mode: mode 1
baud_rate: 32.0 Gbaud
bit_rate: 100.0 Gb/s
spacing: 50.0 GHz
power: 0.0 dBm
tx_power_dbm: 0.0 dBm
nb channels: 76
path_bandwidth: 700.0 Gbit/s
nodes-list: []
loose-list: []
, PathRequest 7b
source: trx Lannion_CAS
destination: trx Lorient_KMA
trx type: Voyager
trx mode: mode 1
baud_rate: 32.0 Gbaud
bit_rate: 100.0 Gb/s
spacing: 75.0 GHz
power: 0.0 dBm
tx_power_dbm: 0.0 dBm
nb channels: 50
path_bandwidth: 400.0 Gbit/s
nodes-list: []
loose-list: []
]
INFO gnpy.tools.worker_utils:worker_utils.py Propagating on selected path
WARNING gnpy.topology.request:request.py Redesign the network for each request channel, using the request channel as the reference channel for the design.
INFO gnpy.topology.request:request.py
request 0
Computing path from trx Lorient_KMA to trx Vannes_KBE

View File

@@ -3,6 +3,26 @@ WARNING gnpy.tools.json_io:json_io.py
WARNING missing type_variety attribute in eqpt_config.json[Roadm]
default value is type_variety = default
INFO gnpy.tools.worker_utils:worker_utils.py List of disjunctions:
[]
INFO gnpy.tools.worker_utils:worker_utils.py Aggregating similar requests
INFO gnpy.tools.worker_utils:worker_utils.py The following services have been requested:
[PathRequest 0
source: trx Abilene
destination: trx Albany
trx type: Voyager
trx mode: mode 3
baud_rate: 44.0 Gbaud
bit_rate: 300.0 Gb/s
spacing: 62.50000000000001 GHz
power: 0.0 dBm
tx_power_dbm: 0.0 dBm
nb channels: 76
path_bandwidth: 100.0 Gbit/s
nodes-list: []
loose-list: []
]
INFO gnpy.tools.worker_utils:worker_utils.py Propagating on selected path
INFO gnpy.topology.request:request.py
request 0
Computing path from trx Abilene to trx Albany

View File

@@ -2,8 +2,8 @@ WARNING gnpy.tools.json_io:json_io.py
WARNING missing type_variety attribute in eqpt_config.json[Roadm]
default value is type_variety = default
INFO gnpy.tools.cli_examples:cli_examples.py source = 'brest'
INFO gnpy.tools.cli_examples:cli_examples.py destination = 'rennes'
INFO gnpy.tools.cli_examples:cli_examples.py source = 'trx Brest_KLA'
INFO gnpy.tools.cli_examples:cli_examples.py destination = 'trx Rennes_STA'
WARNING gnpy.core.network:network.py
WARNING: target gain and power in node west edfa in Lorient_KMA to Loudeac
is beyond all available amplifiers capabilities and/or extended_gain_range:
@@ -309,3 +309,70 @@ WARNING gnpy.core.network:network.py
is beyond all available amplifiers capabilities and/or extended_gain_range:
a power reduction of -1.78 is applied
INFO gnpy.tools.worker_utils:worker_utils.py Power mode is set to True=> it can be modified in eqpt_config.json - Span
INFO gnpy.tools.worker_utils:worker_utils.py Now propagating between trx Brest_KLA and trx Rennes_STA
INFO gnpy.tools.worker_utils:worker_utils.py
Channels propagating: (Input optical power deviation in span = 0.00dB,
spacing = 50.00GHz,
transceiver output power = 3.00dBm,
nb_channels = 95)
INFO gnpy.tools.worker_utils:worker_utils.py
Channels propagating: (Input optical power deviation in span = 0.00dB,
spacing = 50.00GHz,
transceiver output power = 3.00dBm,
nb_channels = 95)
INFO gnpy.tools.worker_utils:worker_utils.py
Channels propagating: (Input optical power deviation in span = 0.00dB,
spacing = 50.00GHz,
transceiver output power = 3.00dBm,
nb_channels = 95)
INFO gnpy.tools.worker_utils:worker_utils.py
Channels propagating: (Input optical power deviation in span = 0.00dB,
spacing = 50.00GHz,
transceiver output power = 3.00dBm,
nb_channels = 95)
INFO gnpy.tools.worker_utils:worker_utils.py
Channels propagating: (Input optical power deviation in span = 0.00dB,
spacing = 50.00GHz,
transceiver output power = 3.00dBm,
nb_channels = 95)
INFO gnpy.tools.worker_utils:worker_utils.py
Channels propagating: (Input optical power deviation in span = 0.00dB,
spacing = 50.00GHz,
transceiver output power = 3.00dBm,
nb_channels = 95)
INFO gnpy.tools.worker_utils:worker_utils.py
Channels propagating: (Input optical power deviation in span = 0.00dB,
spacing = 50.00GHz,
transceiver output power = 3.00dBm,
nb_channels = 95)
INFO gnpy.tools.worker_utils:worker_utils.py
Channels propagating: (Input optical power deviation in span = 0.00dB,
spacing = 50.00GHz,
transceiver output power = 3.00dBm,
nb_channels = 95)
INFO gnpy.tools.worker_utils:worker_utils.py
Channels propagating: (Input optical power deviation in span = 0.00dB,
spacing = 50.00GHz,
transceiver output power = 3.00dBm,
nb_channels = 95)
INFO gnpy.tools.worker_utils:worker_utils.py
Channels propagating: (Input optical power deviation in span = 0.00dB,
spacing = 50.00GHz,
transceiver output power = 3.00dBm,
nb_channels = 95)
INFO gnpy.tools.worker_utils:worker_utils.py
Channels propagating: (Input optical power deviation in span = 0.00dB,
spacing = 50.00GHz,
transceiver output power = 3.00dBm,
nb_channels = 95)
INFO gnpy.tools.worker_utils:worker_utils.py
Channels propagating: (Input optical power deviation in span = 0.00dB,
spacing = 50.00GHz,
transceiver output power = 3.00dBm,
nb_channels = 95)
INFO gnpy.tools.worker_utils:worker_utils.py
Channels propagating: (Input optical power deviation in span = 0.00dB,
spacing = 50.00GHz,
transceiver output power = 3.00dBm,
nb_channels = 95)

View File

@@ -2,8 +2,8 @@ WARNING gnpy.tools.json_io:json_io.py
WARNING missing type_variety attribute in eqpt_config.json[Roadm]
default value is type_variety = default
INFO gnpy.tools.cli_examples:cli_examples.py source = 'lannion'
INFO gnpy.tools.cli_examples:cli_examples.py destination = 'lorient'
INFO gnpy.tools.cli_examples:cli_examples.py source = 'trx Lannion_CAS'
INFO gnpy.tools.cli_examples:cli_examples.py destination = 'trx Lorient_KMA'
WARNING gnpy.core.network:network.py
WARNING: target gain and power in node west edfa in Lorient_KMA to Loudeac
is beyond all available amplifiers capabilities and/or extended_gain_range:
@@ -309,3 +309,10 @@ WARNING gnpy.core.network:network.py
is beyond all available amplifiers capabilities and/or extended_gain_range:
a power reduction of -1.82 is applied
INFO gnpy.tools.worker_utils:worker_utils.py Power mode is set to True=> it can be modified in eqpt_config.json - Span
INFO gnpy.tools.worker_utils:worker_utils.py Now propagating between trx Lannion_CAS and trx Lorient_KMA
INFO gnpy.tools.worker_utils:worker_utils.py
Channels propagating: (Input optical power deviation in span = 0.00dB,
spacing = 50.00GHz,
transceiver output power = 3.00dBm,
nb_channels = 96)

View File

@@ -0,0 +1,294 @@
User input for spectrum used for propagation instead of SI
Power mode is set to True
=> it can be modified in eqpt_config.json - Span
There are 3 fiber spans over 240 km between trx Site_A and trx Site_D
Now propagating between trx Site_A and trx Site_D:
Reference used for design: (Input optical power reference in span = 0.00dBm,
spacing = 50.00GHz
nb_channels = 76)
Channels propagating: (Input optical power deviation in span = cband: 0.00, lband: 0.00dB,
spacing = cband: 50.00, lband: 50.00GHz,
transceiver output power = cband: 0.00, lband: 0.00dBm,
nb_channels = 149)
Input optical power reference in span = 0.00 dBm:
Transceiver trx Site_A
GSNR (0.1nm, dB): cband: 40.00, lband: 40.00
GSNR (signal bw, dB): cband: 35.92, lband: 35.92
OSNR ASE (0.1nm, dB): cband: 40.00, lband: 40.00
OSNR ASE (signal bw, dB): cband: 35.92, lband: 35.92
CD (ps/nm): 0.00
PMD (ps): 0.00
PDL (dB): 0.00
Latency (ms): 0.00
Actual pch out (dBm): cband: 0.00, lband: 0.00
Roadm roadm Site_A
Type_variety: default
Reference loss (dB): 20.00
Actual loss (dB): cband: 20.00, lband: 20.00
Reference pch out (dBm): -20.00
Actual pch out (dBm): cband: -20.00, lband: -20.00
Multiband_amplifier east edfa in Site_A to Site_B
type_variety: std_medium_gain_multiband
type_variety: std_medium_gain_C type_variety: std_medium_gain_L
effective gain(dB): 20.90 effective gain(dB): 22.19
(before att_in and before output VOA) (before att_in and before output VOA)
tilt-target(dB) 0.00 tilt-target(dB) 0.00
noise figure (dB): 6.38 noise figure (dB): 6.19
(including att_in) (including att_in)
pad att_in (dB): 0.00 pad att_in (dB): 0.00
Power In (dBm): -1.08 Power In (dBm): -1.49
Power Out (dBm): 19.83 Power Out (dBm): 20.71
Delta_P (dB): 0.90 Delta_P (dB): 2.19
target pch (dBm): 0.90 target pch (dBm): 3.00
actual pch out (dBm): -2.09 actual pch out (dBm): -0.80
output VOA (dB): 3.00 output VOA (dB): 3.00
Fiber fiber (Site_A → Site_B)-
type_variety: SSMF
length (km): 75.00
pad att_in (dB): 0.00
total loss (dB): 15.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): -17.10
actual pch out (dBm): cband: -17.09, lband: -15.80
Multiband_amplifier east edfa in Site_B to Site_C
type_variety: std_medium_gain_multiband
type_variety: std_medium_gain_C type_variety: std_medium_gain_L
effective gain(dB): 18.00 effective gain(dB): 18.00
(before att_in and before output VOA) (before att_in and before output VOA)
tilt-target(dB) 0.00 tilt-target(dB) 0.00
noise figure (dB): 7.38 noise figure (dB): 7.38
(including att_in) (including att_in)
pad att_in (dB): 0.00 pad att_in (dB): 0.00
Power In (dBm): 1.83 Power In (dBm): 2.71
Power Out (dBm): 19.84 Power Out (dBm): 20.72
Delta_P (dB): 0.90 Delta_P (dB): 2.19
target pch (dBm): 0.90 target pch (dBm): 3.00
actual pch out (dBm): -2.09 actual pch out (dBm): -0.79
output VOA (dB): 3.00 output VOA (dB): 3.00
Fiber fiber (Site_B → Site_C)-
type_variety: SSMF
length (km): 80.00
pad att_in (dB): 0.00
total loss (dB): 16.80
(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): -18.90
actual pch out (dBm): cband: -18.88, lband: -17.59
Multiband_amplifier east edfa in Site_C to Site_D
type_variety: std_medium_gain_multiband
type_variety: std_medium_gain_C type_variety: std_medium_gain_L
effective gain(dB): 19.80 effective gain(dB): 19.80
(before att_in and before output VOA) (before att_in and before output VOA)
tilt-target(dB) 0.00 tilt-target(dB) 0.00
noise figure (dB): 6.63 noise figure (dB): 6.63
(including att_in) (including att_in)
pad att_in (dB): 0.00 pad att_in (dB): 0.00
Power In (dBm): 0.04 Power In (dBm): 0.92
Power Out (dBm): 19.84 Power Out (dBm): 20.72
Delta_P (dB): 0.90 Delta_P (dB): 2.19
target pch (dBm): 0.90 target pch (dBm): 3.00
actual pch out (dBm): -2.08 actual pch out (dBm): -0.79
output VOA (dB): 3.00 output VOA (dB): 3.00
Fiber fiber (Site_C → Site_D)-
type_variety: SSMF
length (km): 85.00
pad att_in (dB): 0.00
total loss (dB): 18.70
(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): -20.80
actual pch out (dBm): cband: -20.78, lband: -19.49
Multiband_amplifier west edfa in Site_D to Site_C
type_variety: std_medium_gain_multiband
type_variety: std_medium_gain_C type_variety: std_medium_gain_L
effective gain(dB): 21.70 effective gain(dB): 21.70
(before att_in and before output VOA) (before att_in and before output VOA)
tilt-target(dB) 0.00 tilt-target(dB) 0.00
noise figure (dB): 6.25 noise figure (dB): 6.25
(including att_in) (including att_in)
pad att_in (dB): 0.00 pad att_in (dB): 0.00
Power In (dBm): -1.85 Power In (dBm): -0.97
Power Out (dBm): 19.85 Power Out (dBm): 20.73
Delta_P (dB): 0.90 Delta_P (dB): 2.19
target pch (dBm): 0.90 target pch (dBm): 3.00
actual pch out (dBm): -2.07 actual pch out (dBm): -0.78
output VOA (dB): 3.00 output VOA (dB): 3.00
Roadm roadm Site_D
Type_variety: default
Reference loss (dB): 17.90
Actual loss (dB): cband: 17.93, lband: 19.22
Reference pch out (dBm): -20.00
Actual pch out (dBm): cband: -20.00, lband: -20.00
Transceiver trx Site_D
GSNR (0.1nm, dB): cband: 24.89, lband: 25.36
GSNR (signal bw, dB): cband: 20.80, lband: 21.28
OSNR ASE (0.1nm, dB): cband: 25.55, lband: 26.51
OSNR ASE (signal bw, dB): cband: 21.47, lband: 22.43
CD (ps/nm): 4008.00
PMD (ps): 0.62
PDL (dB): 0.00
Latency (ms): 1.18
Actual pch out (dBm): cband: 0.00, lband: 0.00
Transmission result for input optical power reference in span = 0.00 dBm:
Final GSNR (0.1 nm): 25.11 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 186.55000 -20.03 22.46 29.10 21.61
2 186.60000 -20.03 22.46 28.59 21.51
3 186.65000 -20.03 22.46 28.36 21.47
4 186.70000 -20.03 22.46 28.22 21.44
5 186.75000 -20.03 22.46 28.12 21.41
6 186.80000 -20.03 22.46 28.04 21.40
7 186.85000 -20.03 22.46 27.98 21.38
8 186.90000 -20.03 22.45 27.92 21.37
9 186.95000 -20.03 22.45 27.88 21.36
10 187.00000 -20.03 22.45 27.84 21.35
11 187.05000 -20.03 22.45 27.80 21.34
12 187.10000 -20.03 22.45 27.77 21.33
13 187.15000 -20.03 22.45 27.74 21.32
14 187.20000 -20.03 22.45 27.71 21.32
15 187.25000 -20.03 22.45 27.69 21.31
16 187.30000 -20.03 22.45 27.67 21.31
17 187.35000 -20.03 22.45 27.65 21.30
18 187.40000 -20.03 22.44 27.63 21.29
19 187.45000 -20.03 22.44 27.61 21.29
20 187.50000 -20.03 22.44 27.60 21.29
21 187.55000 -20.03 22.44 27.58 21.28
22 187.60000 -20.03 22.44 27.57 21.28
23 187.65000 -20.03 22.44 27.55 21.27
24 187.70000 -20.03 22.44 27.54 21.27
25 187.75000 -20.03 22.44 27.53 21.27
26 187.80000 -20.03 22.44 27.52 21.26
27 187.85000 -20.03 22.44 27.51 21.26
28 187.90000 -20.03 22.43 27.50 21.26
29 187.95000 -20.03 22.43 27.49 21.25
30 188.00000 -20.03 22.43 27.48 21.25
31 188.05000 -20.03 22.43 27.47 21.25
32 188.10000 -20.03 22.43 27.47 21.25
33 188.15000 -20.03 22.43 27.46 21.24
34 188.20000 -20.03 22.43 27.45 21.24
35 188.25000 -20.03 22.43 27.45 21.24
36 188.30000 -20.03 22.43 27.44 21.24
37 188.35000 -20.03 22.43 27.44 21.23
38 188.40000 -20.03 22.42 27.43 21.23
39 188.45000 -20.03 22.42 27.43 21.23
40 188.50000 -20.03 22.42 27.43 21.23
41 188.55000 -20.03 22.42 27.42 21.23
42 188.60000 -20.03 22.42 27.42 21.23
43 188.65000 -20.03 22.42 27.42 21.23
44 188.70000 -20.03 22.42 27.42 21.22
45 188.75000 -20.03 22.42 27.42 21.22
46 188.80000 -20.03 22.42 27.42 21.22
47 188.85000 -20.03 22.41 27.42 21.22
48 188.90000 -20.03 22.41 27.42 21.22
49 188.95000 -20.03 22.41 27.42 21.22
50 189.00000 -20.03 22.41 27.43 21.22
51 189.05000 -20.03 22.41 27.43 21.22
52 189.10000 -20.03 22.41 27.44 21.22
53 189.15000 -20.03 22.41 27.44 21.22
54 189.20000 -20.03 22.41 27.45 21.22
55 189.25000 -20.03 22.41 27.46 21.23
56 189.30000 -20.03 22.41 27.46 21.23
57 189.35000 -20.03 22.40 27.47 21.23
58 189.40000 -20.03 22.40 27.49 21.23
59 189.45000 -20.03 22.40 27.50 21.23
60 189.50000 -20.03 22.40 27.51 21.24
61 189.55000 -20.03 22.40 27.53 21.24
62 189.60000 -20.03 22.40 27.55 21.24
63 189.65000 -20.03 22.40 27.58 21.25
64 189.70000 -20.03 22.40 27.60 21.25
65 189.75000 -20.03 22.40 27.63 21.26
66 189.80000 -20.03 22.40 27.67 21.27
67 189.85000 -20.03 22.39 27.72 21.28
68 189.90000 -20.03 22.39 27.78 21.29
69 189.95000 -20.03 22.39 27.86 21.31
70 190.00000 -20.03 22.39 27.97 21.33
71 190.05000 -20.03 22.39 28.21 21.38
72 191.25000 -20.03 21.51 28.66 20.74
73 191.30000 -20.03 21.51 28.96 20.79
74 191.35000 -20.03 21.51 29.16 20.82
75 191.40000 -20.03 21.50 29.32 20.84
76 191.45000 -20.03 21.50 29.51 20.87
77 191.50000 -20.03 21.50 29.75 20.90
78 191.55000 -20.03 21.50 30.22 20.95
79 191.60000 -20.03 21.50 30.96 21.03
80 191.65000 -20.03 21.50 30.46 20.98
81 191.70000 -20.03 21.50 30.23 20.95
82 191.75000 -20.03 21.50 30.08 20.93
83 191.80000 -20.03 21.50 29.97 20.92
84 191.85000 -20.03 21.50 29.88 20.91
85 191.90000 -20.03 21.49 29.81 20.90
86 191.95000 -20.03 21.49 29.75 20.89
87 192.00000 -20.03 21.49 29.70 20.88
88 192.05000 -20.03 21.49 29.65 20.87
89 192.10000 -20.03 21.49 29.61 20.87
90 192.15000 -20.03 21.49 29.57 20.86
91 192.20000 -20.03 21.49 29.54 20.86
92 192.25000 -20.03 21.49 29.50 20.85
93 192.30000 -20.03 21.49 29.47 20.85
94 192.35000 -20.03 21.49 29.44 20.84
95 192.40000 -20.03 21.48 29.42 20.84
96 192.45000 -20.03 21.48 29.39 20.83
97 192.50000 -20.03 21.48 29.37 20.83
98 192.55000 -20.03 21.48 29.35 20.82
99 192.60000 -20.03 21.48 29.33 20.82
100 192.65000 -20.03 21.48 29.31 20.82
101 192.70000 -20.03 21.48 29.29 20.81
102 192.75000 -20.03 21.48 29.27 20.81
103 192.80000 -20.03 21.48 29.25 20.81
104 192.85000 -20.03 21.47 29.23 20.80
105 192.90000 -20.03 21.47 29.22 20.80
106 192.95000 -20.03 21.47 29.20 20.80
107 193.00000 -20.03 21.47 29.18 20.79
108 193.05000 -20.03 21.47 29.17 20.79
109 193.10000 -20.03 21.47 29.16 20.79
110 193.15000 -20.03 21.47 29.14 20.78
111 193.20000 -20.03 21.47 29.13 20.78
112 193.25000 -20.03 21.47 29.12 20.78
113 193.30000 -20.03 21.47 29.10 20.78
114 193.35000 -20.03 21.46 29.09 20.77
115 193.40000 -20.03 21.46 29.08 20.77
116 193.45000 -20.03 21.46 29.07 20.77
117 193.50000 -20.03 21.46 29.06 20.77
118 193.55000 -20.03 21.46 29.05 20.76
119 193.60000 -20.03 21.46 29.04 20.76
120 193.65000 -20.03 21.46 29.03 20.76
121 193.70000 -20.03 21.46 29.02 20.76
122 193.75000 -20.03 21.46 29.01 20.75
123 193.80000 -20.03 21.46 29.00 20.75
124 193.85000 -20.03 21.45 28.99 20.75
125 193.90000 -20.03 21.45 28.99 20.75
126 193.95000 -20.03 21.45 28.98 20.75
127 194.00000 -20.03 21.45 28.97 20.74
128 194.05000 -20.03 21.45 28.97 20.74
129 194.10000 -20.03 21.45 28.96 20.74
130 194.15000 -20.03 21.45 28.96 20.74
131 194.20000 -20.03 21.45 28.96 20.74
132 194.25000 -20.03 21.45 28.95 20.74
133 194.30000 -20.03 21.45 28.95 20.74
134 194.35000 -20.03 21.44 28.95 20.73
135 194.40000 -20.03 21.44 28.95 20.73
136 194.45000 -20.03 21.44 28.95 20.73
137 194.50000 -20.03 21.44 28.96 20.73
138 194.55000 -20.03 21.44 28.96 20.73
139 194.60000 -20.03 21.44 28.97 20.73
140 194.65000 -20.03 21.44 28.98 20.73
141 194.70000 -20.03 21.44 28.99 20.74
142 194.75000 -20.03 21.44 29.01 20.74
143 194.80000 -20.03 21.44 29.04 20.74
144 194.85000 -20.03 21.43 29.07 20.74
145 194.90000 -20.03 21.43 29.12 20.75
146 194.95000 -20.03 21.43 29.18 20.76
147 195.00000 -20.03 21.43 29.28 20.77
148 195.05000 -20.03 21.43 29.44 20.79
149 195.10000 -20.03 21.43 29.84 20.84
(Invalid source node 'Site_A' replaced with trx Site_A)
(Invalid destination node 'Site_D' replaced with trx Site_D)

View File

@@ -1,12 +1,18 @@
There are 96 channels propagating
Power mode is set to True
=> it can be modified in eqpt_config.json - Span
There are 6 fiber spans over 500 km between trx_Stockholm and trx_Gothenburg
Now propagating between trx_Stockholm and trx_Gothenburg:
Reference used for design: (Input optical power reference in span = 2.00dBm,
spacing = 50.00GHz
nb_channels = 96)
Propagating with input power = 2.00 dBm:
Channels propagating: (Input optical power deviation in span = 0.00dB,
spacing = 50.00GHz,
transceiver output power = 2.00dBm,
nb_channels = 96)
Input optical power reference in span = 2.00 dBm:
Transceiver trx_Stockholm
GSNR (0.1nm, dB): 35.00
GSNR (signal bw, dB): 30.98
@@ -27,6 +33,7 @@ Edfa Edfa_booster_roadm_Stockholm_to_fiber (Stockholm → Norrköping)_(1/2)
type_variety: openroadm_mw_mw_booster
effective gain(dB): 22.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): -inf
(including att_in)
pad att_in (dB): 0.00
@@ -49,6 +56,7 @@ Edfa Edfa_fiber (Stockholm → Norrköping)_(1/2)
type_variety: openroadm_ila_low_noise
effective gain(dB): 16.33
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.01
(including att_in)
pad att_in (dB): 0.00
@@ -71,6 +79,7 @@ Edfa Edfa_preamp_roadm_Norrköping_from_fiber (Stockholm → Norrköping)_(2/2)
type_variety: openroadm_mw_mw_preamp
effective gain(dB): 16.33
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 12.59
(including att_in)
pad att_in (dB): 0.00
@@ -90,6 +99,7 @@ Edfa Edfa_booster_roadm_Norrköping_to_fiber (Norrköping → Linköping)
type_variety: openroadm_mw_mw_booster
effective gain(dB): 22.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): -inf
(including att_in)
pad att_in (dB): 0.00
@@ -112,6 +122,7 @@ Edfa Edfa_preamp_roadm_Linköping_from_fiber (Norrköping → Linköping)
type_variety: openroadm_mw_mw_preamp
effective gain(dB): 11.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 16.00
(including att_in)
pad att_in (dB): 0.00
@@ -131,6 +142,7 @@ Edfa Edfa_booster_roadm_Linköping_to_fiber (Linköping → Jönköping)
type_variety: openroadm_mw_mw_booster
effective gain(dB): 22.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): -inf
(including att_in)
pad att_in (dB): 0.00
@@ -153,6 +165,7 @@ Edfa Edfa_preamp_roadm_Jönköping_from_fiber (Linköping → Jönköping)
type_variety: openroadm_mw_mw_preamp
effective gain(dB): 26.80
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.09
(including att_in)
pad att_in (dB): 0.00
@@ -172,6 +185,7 @@ Edfa Edfa_booster_roadm_Jönköping_to_fiber (Jönköping → Borås)
type_variety: openroadm_mw_mw_booster
effective gain(dB): 22.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): -inf
(including att_in)
pad att_in (dB): 0.00
@@ -194,6 +208,7 @@ Edfa Edfa_preamp_roadm_Borås_from_fiber (Jönköping → Borås)
type_variety: openroadm_mw_mw_preamp
effective gain(dB): 17.82
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 11.94
(including att_in)
pad att_in (dB): 0.00
@@ -213,6 +228,7 @@ Edfa Edfa_booster_roadm_Borås_to_fiber (Borås → Gothenburg)
type_variety: openroadm_mw_mw_booster
effective gain(dB): 22.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): -inf
(including att_in)
pad att_in (dB): 0.00
@@ -235,6 +251,7 @@ Edfa Edfa_preamp_roadm_Gothenburg_from_fiber (Borås → Gothenburg)
type_variety: openroadm_mw_mw_preamp
effective gain(dB): 13.53
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 13.78
(including att_in)
pad att_in (dB): 0.00
@@ -261,7 +278,7 @@ Transceiver trx_Gothenburg
Latency (ms): 2.45
Actual pch out (dBm): 2.00
Transmission result for input power = 2.00 dBm:
Transmission result for input optical power reference in span = 2.00 dBm:
Final GSNR (0.1 nm): 18.89 dB
(No source node specified: picked trx_Stockholm)

View File

@@ -1,12 +1,18 @@
There are 96 channels propagating
Power mode is set to True
=> it can be modified in eqpt_config.json - Span
There are 6 fiber spans over 500 km between trx_Stockholm and trx_Gothenburg
Now propagating between trx_Stockholm and trx_Gothenburg:
Reference used for design: (Input optical power reference in span = 2.00dBm,
spacing = 50.00GHz
nb_channels = 96)
Propagating with input power = 2.00 dBm:
Channels propagating: (Input optical power deviation in span = 0.00dB,
spacing = 50.00GHz,
transceiver output power = 2.00dBm,
nb_channels = 96)
Input optical power reference in span = 2.00 dBm:
Transceiver trx_Stockholm
GSNR (0.1nm, dB): 35.00
GSNR (signal bw, dB): 30.98
@@ -27,6 +33,7 @@ Edfa Edfa_booster_roadm_Stockholm_to_fiber (Stockholm → Norrköping)_(1/2)
type_variety: openroadm_mw_mw_booster
effective gain(dB): 22.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): -inf
(including att_in)
pad att_in (dB): 0.00
@@ -49,6 +56,7 @@ Edfa Edfa_fiber (Stockholm → Norrköping)_(1/2)
type_variety: openroadm_ila_low_noise
effective gain(dB): 16.33
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.01
(including att_in)
pad att_in (dB): 0.00
@@ -71,6 +79,7 @@ Edfa Edfa_preamp_roadm_Norrköping_from_fiber (Stockholm → Norrköping)_(2/2)
type_variety: openroadm_mw_mw_preamp_worstcase_ver5
effective gain(dB): 16.33
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 11.43
(including att_in)
pad att_in (dB): 0.00
@@ -90,6 +99,7 @@ Edfa Edfa_booster_roadm_Norrköping_to_fiber (Norrköping → Linköping)
type_variety: openroadm_mw_mw_booster
effective gain(dB): 22.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): -inf
(including att_in)
pad att_in (dB): 0.00
@@ -112,6 +122,7 @@ Edfa Edfa_preamp_roadm_Linköping_from_fiber (Norrköping → Linköping)
type_variety: openroadm_mw_mw_preamp_worstcase_ver5
effective gain(dB): 11.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 16.00
(including att_in)
pad att_in (dB): 0.00
@@ -131,6 +142,7 @@ Edfa Edfa_booster_roadm_Linköping_to_fiber (Linköping → Jönköping)
type_variety: openroadm_mw_mw_booster
effective gain(dB): 22.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): -inf
(including att_in)
pad att_in (dB): 0.00
@@ -153,6 +165,7 @@ Edfa Edfa_preamp_roadm_Jönköping_from_fiber (Linköping → Jönköping)
type_variety: openroadm_mw_mw_preamp_worstcase_ver5
effective gain(dB): 26.80
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.01
(including att_in)
pad att_in (dB): 0.00
@@ -172,6 +185,7 @@ Edfa Edfa_booster_roadm_Jönköping_to_fiber (Jönköping → Borås)
type_variety: openroadm_mw_mw_booster
effective gain(dB): 22.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): -inf
(including att_in)
pad att_in (dB): 0.00
@@ -194,6 +208,7 @@ Edfa Edfa_preamp_roadm_Borås_from_fiber (Jönköping → Borås)
type_variety: openroadm_mw_mw_preamp_worstcase_ver5
effective gain(dB): 17.82
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 10.54
(including att_in)
pad att_in (dB): 0.00
@@ -213,6 +228,7 @@ Edfa Edfa_booster_roadm_Borås_to_fiber (Borås → Gothenburg)
type_variety: openroadm_mw_mw_booster
effective gain(dB): 22.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): -inf
(including att_in)
pad att_in (dB): 0.00
@@ -235,6 +251,7 @@ Edfa Edfa_preamp_roadm_Gothenburg_from_fiber (Borås → Gothenburg)
type_variety: openroadm_mw_mw_preamp_worstcase_ver5
effective gain(dB): 13.53
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 13.54
(including att_in)
pad att_in (dB): 0.00
@@ -261,7 +278,7 @@ Transceiver trx_Gothenburg
Latency (ms): 2.45
Actual pch out (dBm): 2.00
Transmission result for input power = 2.00 dBm:
Transmission result for input optical power reference in span = 2.00 dBm:
Final GSNR (0.1 nm): 19.25 dB
(No source node specified: picked trx_Stockholm)

View File

@@ -10,7 +10,6 @@
node-diverse: True
request-id-numbers: ['4', '5']
]
Aggregating similar requests
The following services have been requested:
[PathRequest 0
source: trx Lorient_KMA
@@ -82,7 +81,7 @@
path_bandwidth: 20.0 Gbit/s
nodes-list: []
loose-list: []
, PathRequest 7 | 6
, PathRequest 6
source: trx Lannion_CAS
destination: trx Lorient_KMA
trx type: Voyager
@@ -93,7 +92,21 @@
power: 0.0 dBm
tx_power_dbm: 0.0 dBm
nb channels: 76
path_bandwidth: 700.0 Gbit/s
path_bandwidth: 300.0 Gbit/s
nodes-list: []
loose-list: []
, PathRequest 7
source: trx Lannion_CAS
destination: trx Lorient_KMA
trx type: Voyager
trx mode: mode 1
baud_rate: 32.0 Gbaud
bit_rate: 100.0 Gb/s
spacing: 50.0 GHz
power: 0.0 dBm
tx_power_dbm: 0.0 dBm
nb channels: 76
path_bandwidth: 400.0 Gbit/s
nodes-list: []
loose-list: []
, PathRequest 7b
@@ -111,8 +124,6 @@
nodes-list: []
loose-list: []
]
Computing all paths with constraints
Propagating on selected path
Result summary
req id demand GSNR@bandwidth A-Z (Z-A) GSNR@0.1nm A-Z (Z-A) Receiver minOSNR mode Gbit/s nb of tsp pairs N,M or blocking reason
0 trx Lorient_KMA to trx Vannes_KBE : 24.83 28.92 14 mode 1 100.0 1 ([-284],[4])

View File

@@ -1,6 +1,5 @@
List of disjunctions
[]
Aggregating similar requests
The following services have been requested:
[PathRequest 0
source: trx Abilene
@@ -17,8 +16,6 @@
nodes-list: []
loose-list: []
]
Computing all paths with constraints
Propagating on selected path
Result summary
req id demand GSNR@bandwidth A-Z (Z-A) GSNR@0.1nm A-Z (Z-A) Receiver minOSNR mode Gbit/s nb of tsp pairs N,M or blocking reason
0 trx Abilene to trx Albany : 9.04 14.5 - mode 3 100.0 - MODE_NOT_FEASIBLE

View File

@@ -1,12 +1,18 @@
There are 95 channels propagating
Power mode is set to True
=> it can be modified in eqpt_config.json - Span
There are 4 fiber spans over 200 km between trx Brest_KLA and trx Rennes_STA
Now propagating between trx Brest_KLA and trx Rennes_STA:
Reference used for design: (Input optical power reference in span = 3.00dBm,
spacing = 50.00GHz
nb_channels = 95)
Propagating with input power = -3.00 dBm:
Channels propagating: (Input optical power deviation in span = 0.00dB,
spacing = 50.00GHz,
transceiver output power = 3.00dBm,
nb_channels = 95)
Input optical power reference in span = -3.00 dBm:
Transceiver trx Rennes_STA
GSNR (0.1nm, dB): 23.73
GSNR (signal bw, dB): 19.65
@@ -17,8 +23,7 @@ Transceiver trx Rennes_STA
PDL (dB): 0.00
Latency (ms): 0.98
Actual pch out (dBm): 3.00
Propagating with input power = -2.50 dBm:
Input optical power reference in span = -2.50 dBm:
Transceiver trx Rennes_STA
GSNR (0.1nm, dB): 24.01
GSNR (signal bw, dB): 19.93
@@ -29,8 +34,7 @@ Transceiver trx Rennes_STA
PDL (dB): 0.00
Latency (ms): 0.98
Actual pch out (dBm): 3.00
Propagating with input power = -2.00 dBm:
Input optical power reference in span = -2.00 dBm:
Transceiver trx Rennes_STA
GSNR (0.1nm, dB): 24.25
GSNR (signal bw, dB): 20.17
@@ -41,8 +45,7 @@ Transceiver trx Rennes_STA
PDL (dB): 0.00
Latency (ms): 0.98
Actual pch out (dBm): 3.00
Propagating with input power = -1.50 dBm:
Input optical power reference in span = -1.50 dBm:
Transceiver trx Rennes_STA
GSNR (0.1nm, dB): 24.44
GSNR (signal bw, dB): 20.36
@@ -53,8 +56,7 @@ Transceiver trx Rennes_STA
PDL (dB): 0.00
Latency (ms): 0.98
Actual pch out (dBm): 3.00
Propagating with input power = -1.00 dBm:
Input optical power reference in span = -1.00 dBm:
Transceiver trx Rennes_STA
GSNR (0.1nm, dB): 24.57
GSNR (signal bw, dB): 20.49
@@ -65,8 +67,7 @@ Transceiver trx Rennes_STA
PDL (dB): 0.00
Latency (ms): 0.98
Actual pch out (dBm): 3.00
Propagating with input power = -0.50 dBm:
Input optical power reference in span = -0.50 dBm:
Transceiver trx Rennes_STA
GSNR (0.1nm, dB): 24.63
GSNR (signal bw, dB): 20.55
@@ -77,8 +78,7 @@ Transceiver trx Rennes_STA
PDL (dB): 0.00
Latency (ms): 0.98
Actual pch out (dBm): 3.00
Propagating with input power = -0.00 dBm:
Input optical power reference in span = -0.00 dBm:
Transceiver trx Rennes_STA
GSNR (0.1nm, dB): 24.60
GSNR (signal bw, dB): 20.52
@@ -89,8 +89,7 @@ Transceiver trx Rennes_STA
PDL (dB): 0.00
Latency (ms): 0.98
Actual pch out (dBm): 3.00
Propagating with input power = 0.50 dBm:
Input optical power reference in span = 0.50 dBm:
Transceiver trx Rennes_STA
GSNR (0.1nm, dB): 24.42
GSNR (signal bw, dB): 20.34
@@ -101,8 +100,7 @@ Transceiver trx Rennes_STA
PDL (dB): 0.00
Latency (ms): 0.98
Actual pch out (dBm): 3.00
Propagating with input power = 1.00 dBm:
Input optical power reference in span = 1.00 dBm:
Transceiver trx Rennes_STA
GSNR (0.1nm, dB): 24.16
GSNR (signal bw, dB): 20.08
@@ -113,8 +111,7 @@ Transceiver trx Rennes_STA
PDL (dB): 0.00
Latency (ms): 0.98
Actual pch out (dBm): 3.00
Propagating with input power = 1.50 dBm:
Input optical power reference in span = 1.50 dBm:
Transceiver trx Rennes_STA
GSNR (0.1nm, dB): 24.02
GSNR (signal bw, dB): 19.93
@@ -125,8 +122,7 @@ Transceiver trx Rennes_STA
PDL (dB): 0.00
Latency (ms): 0.98
Actual pch out (dBm): 3.00
Propagating with input power = 2.00 dBm:
Input optical power reference in span = 2.00 dBm:
Transceiver trx Rennes_STA
GSNR (0.1nm, dB): 24.02
GSNR (signal bw, dB): 19.93
@@ -137,8 +133,7 @@ Transceiver trx Rennes_STA
PDL (dB): 0.00
Latency (ms): 0.98
Actual pch out (dBm): 3.00
Propagating with input power = 2.50 dBm:
Input optical power reference in span = 2.50 dBm:
Transceiver trx Rennes_STA
GSNR (0.1nm, dB): 24.02
GSNR (signal bw, dB): 19.93
@@ -149,8 +144,7 @@ Transceiver trx Rennes_STA
PDL (dB): 0.00
Latency (ms): 0.98
Actual pch out (dBm): 3.00
Propagating with input power = 3.00 dBm:
Input optical power reference in span = 3.00 dBm:
Transceiver trx Rennes_STA
GSNR (0.1nm, dB): 24.02
GSNR (signal bw, dB): 19.93

View File

@@ -1,13 +1,19 @@
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:
Reference used for design: (Input optical power reference in span = 0.00dBm,
spacing = 50.00GHz
nb_channels = 76)
Propagating with input power = 0.00 dBm:
Channels propagating: (Input optical power deviation in span = 0.00dB,
spacing = 50.00GHz,
transceiver output power = 0.00dBm,
nb_channels = 76)
Input optical power reference in span = 0.00 dBm:
Transceiver trx Lannion_CAS
GSNR (0.1nm, dB): 40.00
GSNR (signal bw, dB): 35.92
@@ -28,6 +34,7 @@ Edfa east edfa in Lannion_CAS to Corlay
type_variety: std_medium_gain
effective gain(dB): 21.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 6.36
(including att_in)
pad att_in (dB): 0.00
@@ -72,6 +79,7 @@ Edfa west edfa in Lorient_KMA to Loudeac
type_variety: std_high_gain
effective gain(dB): 28.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 5.92
(including att_in)
pad att_in (dB): 0.00
@@ -98,7 +106,7 @@ Transceiver trx Lorient_KMA
Latency (ms): 0.64
Actual pch out (dBm): 0.00
Transmission result for input power = 0.00 dBm:
Transmission result for input optical power reference in span = 0.00 dBm:
Final GSNR (0.1 nm): 23.61 dB
(No source node specified: picked trx Lannion_CAS)

View File

@@ -1,13 +1,19 @@
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:
Reference used for design: (Input optical power reference in span = 0.00dBm,
spacing = 50.00GHz
nb_channels = 76)
Propagating with input power = 0.00 dBm:
Channels propagating: (Input optical power deviation in span = mode_1: 0.00, mode_2: 0.00dB,
spacing = mode_1: 50.00, mode_2: 75.00GHz,
transceiver output power = mode_1: 0.00, mode_2: 0.00dBm,
nb_channels = 60)
Input optical power reference in span = 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
@@ -28,6 +34,7 @@ Edfa east edfa in Lannion_CAS to Corlay
type_variety: std_medium_gain
effective gain(dB): 21.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 6.36
(including att_in)
pad att_in (dB): 0.00
@@ -72,6 +79,7 @@ Edfa west edfa in Lorient_KMA to Loudeac
type_variety: std_high_gain
effective gain(dB): 28.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 5.92
(including att_in)
pad att_in (dB): 0.00
@@ -98,7 +106,7 @@ Transceiver trx Lorient_KMA
Latency (ms): 0.64
Actual pch out (dBm): mode_1: 0.00, mode_2: 0.00
Transmission result for input power = 0.00 dBm:
Transmission result for input optical power reference in span = 0.00 dBm:
Final GSNR (0.1 nm): 23.72 dB
The GSNR per channel at the end of the line is:

View File

@@ -1,13 +1,19 @@
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 15 fiber spans over 1200 km between Site_A and Site_B
Now propagating between Site_A and Site_B:
Reference used for design: (Input optical power reference in span = 0.00dBm,
spacing = 50.00GHz
nb_channels = 96)
Propagating with input power = 0.00 dBm:
Channels propagating: (Input optical power deviation in span = mode_1: 0.00, mode_2: 0.00dB,
spacing = mode_1: 50.00, mode_2: 75.00GHz,
transceiver output power = mode_1: 0.00, mode_2: 0.00dBm,
nb_channels = 60)
Input optical power reference in span = 0.00 dBm:
Transceiver Site_A
GSNR (0.1nm, dB): mode_1: 40.00, mode_2: 40.00
GSNR (signal bw, dB): mode_1: 35.92, mode_2: 32.91
@@ -28,6 +34,7 @@ Edfa booster A
type_variety: std_medium_gain
effective gain(dB): 20.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 6.58
(including att_in)
pad att_in (dB): 0.00
@@ -50,6 +57,7 @@ Edfa Edfa1
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -72,6 +80,7 @@ Edfa Edfa2
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -94,6 +103,7 @@ Edfa Edfa3
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -116,6 +126,7 @@ Edfa Edfa4
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -138,6 +149,7 @@ Edfa Edfa5
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -157,6 +169,7 @@ Edfa booster C
type_variety: std_medium_gain
effective gain(dB): 20.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 6.58
(including att_in)
pad att_in (dB): 0.00
@@ -179,6 +192,7 @@ Edfa Edfa6
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -201,6 +215,7 @@ Edfa Edfa7
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -223,6 +238,7 @@ Edfa Edfa8
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -245,6 +261,7 @@ Edfa Edfa9
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -267,6 +284,7 @@ Edfa Edfa10
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -286,6 +304,7 @@ Edfa booster D
type_variety: std_medium_gain
effective gain(dB): 20.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 6.58
(including att_in)
pad att_in (dB): 0.00
@@ -308,6 +327,7 @@ Edfa Edfa11
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -330,6 +350,7 @@ Edfa Edfa12
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -349,6 +370,7 @@ Edfa booster E
type_variety: std_medium_gain
effective gain(dB): 20.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 6.58
(including att_in)
pad att_in (dB): 0.00
@@ -371,6 +393,7 @@ Edfa Edfa13
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -393,6 +416,7 @@ Edfa Edfa14
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -415,6 +439,7 @@ Edfa Edfa15
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -441,7 +466,7 @@ Transceiver Site_B
Latency (ms): 5.88
Actual pch out (dBm): mode_1: 0.00, mode_2: 0.00
Transmission result for input power = 0.00 dBm:
Transmission result for input optical power reference in span = 0.00 dBm:
Final GSNR (0.1 nm): 18.56 dB
(No source node specified: picked Site_A)

View File

@@ -1,13 +1,19 @@
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 15 fiber spans over 1200 km between Site_A and Site_B
Now propagating between Site_A and Site_B:
Reference used for design: (Input optical power reference in span = 0.00dBm,
spacing = 50.00GHz
nb_channels = 95)
Propagating with input power = 0.00 dBm:
Channels propagating: (Input optical power deviation in span = mode_1: 0.00, mode_2: 0.00dB,
spacing = mode_1: 50.00, mode_2: 75.00GHz,
transceiver output power = mode_1: 0.00, mode_2: 0.00dBm,
nb_channels = 60)
Input optical power reference in span = 0.00 dBm:
Transceiver Site_A
GSNR (0.1nm, dB): mode_1: 40.00, mode_2: 40.00
GSNR (signal bw, dB): mode_1: 35.92, mode_2: 32.91
@@ -28,6 +34,7 @@ Edfa booster A
type_variety: std_medium_gain
effective gain(dB): 20.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 6.58
(including att_in)
pad att_in (dB): 0.00
@@ -50,6 +57,7 @@ Edfa Edfa1
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -72,6 +80,7 @@ Edfa Edfa2
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -94,6 +103,7 @@ Edfa Edfa3
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -116,6 +126,7 @@ Edfa Edfa4
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -138,6 +149,7 @@ Edfa Edfa5
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -157,6 +169,7 @@ Edfa booster C
type_variety: std_medium_gain
effective gain(dB): 20.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 6.58
(including att_in)
pad att_in (dB): 0.00
@@ -179,6 +192,7 @@ Edfa Edfa6
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -201,6 +215,7 @@ Edfa Edfa7
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -223,6 +238,7 @@ Edfa Edfa8
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -245,6 +261,7 @@ Edfa Edfa9
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -267,6 +284,7 @@ Edfa Edfa10
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -286,6 +304,7 @@ Edfa booster D
type_variety: std_medium_gain
effective gain(dB): 20.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 6.58
(including att_in)
pad att_in (dB): 0.00
@@ -308,6 +327,7 @@ Edfa Edfa11
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -330,6 +350,7 @@ Edfa Edfa12
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -349,6 +370,7 @@ Edfa booster E
type_variety: std_medium_gain
effective gain(dB): 20.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 6.58
(including att_in)
pad att_in (dB): 0.00
@@ -371,6 +393,7 @@ Edfa Edfa13
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -393,6 +416,7 @@ Edfa Edfa14
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -415,6 +439,7 @@ Edfa Edfa15
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -441,7 +466,7 @@ Transceiver Site_B
Latency (ms): 5.88
Actual pch out (dBm): mode_1: 0.00, mode_2: 0.00
Transmission result for input power = 0.00 dBm:
Transmission result for input optical power reference in span = 0.00 dBm:
Final GSNR (0.1 nm): 18.94 dB
(No source node specified: picked Site_A)

View File

@@ -1,13 +1,19 @@
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 15 fiber spans over 1200 km between Site_A and Site_B
Now propagating between Site_A and Site_B:
Reference used for design: (Input optical power reference in span = 0.00dBm,
spacing = 50.00GHz
nb_channels = 95)
Propagating with input power = 0.00 dBm:
Channels propagating: (Input optical power deviation in span = mode_1: 0.00, mode_2: 0.00dB,
spacing = mode_1: 50.00, mode_2: 75.00GHz,
transceiver output power = mode_1: 0.00, mode_2: 0.00dBm,
nb_channels = 60)
Input optical power reference in span = 0.00 dBm:
Transceiver Site_A
GSNR (0.1nm, dB): mode_1: 40.00, mode_2: 40.00
GSNR (signal bw, dB): mode_1: 35.92, mode_2: 32.91
@@ -28,6 +34,7 @@ Edfa booster A
type_variety: std_medium_gain
effective gain(dB): 20.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 6.58
(including att_in)
pad att_in (dB): 0.00
@@ -50,6 +57,7 @@ Edfa Edfa1
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -72,6 +80,7 @@ Edfa Edfa2
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -94,6 +103,7 @@ Edfa Edfa3
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -116,6 +126,7 @@ Edfa Edfa4
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -138,6 +149,7 @@ Edfa Edfa5
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -157,6 +169,7 @@ Edfa booster C
type_variety: std_medium_gain
effective gain(dB): 20.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 6.58
(including att_in)
pad att_in (dB): 0.00
@@ -179,6 +192,7 @@ Edfa Edfa6
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -201,6 +215,7 @@ Edfa Edfa7
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -223,6 +238,7 @@ Edfa Edfa8
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -245,6 +261,7 @@ Edfa Edfa9
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -267,6 +284,7 @@ Edfa Edfa10
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -286,6 +304,7 @@ Edfa booster D
type_variety: std_medium_gain
effective gain(dB): 20.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 6.58
(including att_in)
pad att_in (dB): 0.00
@@ -308,6 +327,7 @@ Edfa Edfa11
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -330,6 +350,7 @@ Edfa Edfa12
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -349,6 +370,7 @@ Edfa booster E
type_variety: std_medium_gain
effective gain(dB): 20.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 6.58
(including att_in)
pad att_in (dB): 0.00
@@ -371,6 +393,7 @@ Edfa Edfa13
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -393,6 +416,7 @@ Edfa Edfa14
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -415,6 +439,7 @@ Edfa Edfa15
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -441,7 +466,7 @@ Transceiver Site_B
Latency (ms): 5.88
Actual pch out (dBm): mode_1: 0.00, mode_2: 0.00
Transmission result for input power = 0.00 dBm:
Transmission result for input optical power reference in span = 0.00 dBm:
Final GSNR (0.1 nm): 18.94 dB
(No source node specified: picked Site_A)

View File

@@ -1,12 +1,18 @@
There are 76 channels propagating
Power mode is set to True
=> it can be modified in eqpt_config.json - Span
There are 1 fiber spans over 80 km between Site_A and Site_B
Now propagating between Site_A and Site_B:
Reference used for design: (Input optical power reference in span = 0.00dBm,
spacing = 50.00GHz
nb_channels = 76)
Propagating with input power = 0.00 dBm:
Channels propagating: (Input optical power deviation in span = 0.00dB,
spacing = 50.00GHz,
transceiver output power = 0.00dBm,
nb_channels = 76)
Input optical power reference in span = 0.00 dBm:
Transceiver Site_A
GSNR (0.1nm, dB): 40.00
GSNR (signal bw, dB): 35.92
@@ -30,6 +36,7 @@ Edfa Edfa1
type_variety: std_low_gain
effective gain(dB): 15.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 6.62
(including att_in)
pad att_in (dB): 0.00
@@ -50,7 +57,7 @@ Transceiver Site_B
Latency (ms): 0.39
Actual pch out (dBm): 0.00
Transmission result for input power = 0.00 dBm:
Transmission result for input optical power reference in span = 0.00 dBm:
Final GSNR (0.1 nm): 31.18 dB
(No source node specified: picked Site_A)

View File

@@ -1,12 +1,18 @@
There are 76 channels propagating
Power mode is set to True
=> it can be modified in eqpt_config.json - Span
There are 1 fiber spans over 80 km between Site_A and Site_B
Now propagating between Site_A and Site_B:
Reference used for design: (Input optical power reference in span = 0.00dBm,
spacing = 50.00GHz
nb_channels = 76)
Propagating with input power = 0.00 dBm:
Channels propagating: (Input optical power deviation in span = 0.00dB,
spacing = 50.00GHz,
transceiver output power = 0.00dBm,
nb_channels = 76)
Input optical power reference in span = 0.00 dBm:
Transceiver Site_A
GSNR (0.1nm, dB): 40.00
GSNR (signal bw, dB): 35.92
@@ -34,6 +40,7 @@ Edfa Edfa1
type_variety: std_low_gain
effective gain(dB): 5.26
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 13.74
(including att_in)
pad att_in (dB): 2.74
@@ -54,7 +61,7 @@ Transceiver Site_B
Latency (ms): 0.39
Actual pch out (dBm): 0.00
Transmission result for input power = 0.00 dBm:
Transmission result for input optical power reference in span = 0.00 dBm:
Final GSNR (0.1 nm): 31.44 dB
The GSNR per channel at the end of the line is:

View File

@@ -1,12 +1,18 @@
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:
Reference used for design: (Input optical power reference in span = 0.00dBm,
spacing = 50.00GHz
nb_channels = 96)
Propagating with input power = 0.00 dBm:
Channels propagating: (Input optical power deviation in span = 0.00dB,
spacing = 50.00GHz,
transceiver output power = 0.00dBm,
nb_channels = 96)
Input optical power reference in span = 0.00 dBm:
Transceiver Site_A
GSNR (0.1nm, dB): 100.00
GSNR (signal bw, dB): 95.92
@@ -27,6 +33,7 @@ Edfa booster A
type_variety: std_medium_gain
effective gain(dB): 20.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 6.58
(including att_in)
pad att_in (dB): 0.00
@@ -49,6 +56,7 @@ Edfa Edfa1
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -71,6 +79,7 @@ Edfa Edfa2
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -93,6 +102,7 @@ Edfa Edfa3
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -115,6 +125,7 @@ Edfa Edfa4
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -137,6 +148,7 @@ Edfa Edfa5
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -156,6 +168,7 @@ Edfa booster C
type_variety: std_medium_gain
effective gain(dB): 20.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 6.58
(including att_in)
pad att_in (dB): 0.00
@@ -178,6 +191,7 @@ Edfa Edfa6
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -200,6 +214,7 @@ Edfa Edfa7
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -222,6 +237,7 @@ Edfa Edfa8
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -244,6 +260,7 @@ Edfa Edfa9
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -266,6 +283,7 @@ Edfa Edfa10
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -285,6 +303,7 @@ Edfa booster D
type_variety: std_medium_gain
effective gain(dB): 20.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 6.58
(including att_in)
pad att_in (dB): 0.00
@@ -307,6 +326,7 @@ Edfa Edfa11
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -329,6 +349,7 @@ Edfa Edfa12
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -348,6 +369,7 @@ Edfa booster E
type_variety: std_medium_gain
effective gain(dB): 20.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 6.58
(including att_in)
pad att_in (dB): 0.00
@@ -370,6 +392,7 @@ Edfa Edfa13
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -392,6 +415,7 @@ Edfa Edfa14
type_variety: test_fixed_gain
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 9.00
(including att_in)
pad att_in (dB): 4.00
@@ -414,6 +438,7 @@ Edfa Edfa15
type_variety: test
effective gain(dB): 16.00
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 8.86
(including att_in)
pad att_in (dB): 0.00
@@ -440,7 +465,7 @@ Transceiver Site_B
Latency (ms): 5.88
Actual pch out (dBm): 0.00
Transmission result for input power = 0.00 dBm:
Transmission result for input optical power reference in span = 0.00 dBm:
Final GSNR (0.1 nm): 17.84 dB
(No source node specified: picked Site_A)

View File

@@ -1,12 +1,18 @@
There are 96 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:
Reference used for design: (Input optical power reference in span = 3.00dBm,
spacing = 50.00GHz
nb_channels = 96)
Propagating with input power = 3.00 dBm:
Channels propagating: (Input optical power deviation in span = 0.00dB,
spacing = 50.00GHz,
transceiver output power = 3.00dBm,
nb_channels = 96)
Input optical power reference in span = 3.00 dBm:
Transceiver trx Lannion_CAS
GSNR (0.1nm, dB): 100.00
GSNR (signal bw, dB): 95.92
@@ -27,6 +33,7 @@ Edfa east edfa in Lannion_CAS to Corlay
type_variety: test
effective gain(dB): 21.18
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 6.13
(including att_in)
pad att_in (dB): 0.00
@@ -71,6 +78,7 @@ Edfa west edfa in Lorient_KMA to Loudeac
type_variety: std_medium_gain
effective gain(dB): 27.99
(before att_in and before output VOA)
tilt-target(dB) 0.00
noise figure (dB): 5.98
(including att_in)
pad att_in (dB): 0.00
@@ -97,7 +105,7 @@ Transceiver trx Lorient_KMA
Latency (ms): 0.64
Actual pch out (dBm): 3.00
Transmission result for input power = 3.00 dBm:
Transmission result for input optical power reference in span = 3.00 dBm:
Final GSNR (0.1 nm): 23.77 dB
(Invalid source node 'lannion' replaced with trx Lannion_CAS)

View File

@@ -9,7 +9,7 @@ from gnpy.core.elements import Transceiver, Edfa, Fiber
from gnpy.core.utils import automatic_fmax, lin2db, db2lin, merge_amplifier_restrictions, dbm2watt, watt2dbm
from gnpy.core.info import create_input_spectral_information, create_arbitrary_spectral_information
from gnpy.core.network import build_network, set_amplifier_voa
from gnpy.tools.json_io import load_network, load_equipment, network_from_json
from gnpy.tools.json_io import load_network, load_equipment, load_json, _equipment_from_json, network_from_json
from pathlib import Path
import pytest
@@ -251,35 +251,35 @@ def test_amp_behaviour(tilt_target, delta_p):
else:
if delta_p != 2:
expected_sig_out = [
-32.00529182, -31.93540907, -31.86554231, -31.79417979, -31.71903263,
-31.6424009, -31.56531159, -31.48775435, -31.41468382, -31.35973323,
-31.32286555, -31.28602346, -31.2472908, -31.20086569, -31.14671746,
-31.08702653, -31.01341963, -30.93430243, -30.87791656, -30.84413339,
-30.81605918, -30.78824936, -30.76071036, -30.73319161, -30.70494101,
-30.67368479, -30.63941012, -30.60178381, -30.55585766, -30.5066561,
-30.43426575, -30.33848379, -30.24471112, -30.18220815, -30.15076699,
-30.11934744, -30.08776718, -30.05548097, -30.02250068, -29.98954302,
-29.95661362, -29.92370274, -29.8854762, -29.84193785, -29.79238328,
-29.72452662, -29.6385071, -29.54788144, -29.44581202, -29.33924103,
-29.23276107, -29.10289365, -28.91425473, -28.70204648, -28.50670713,
-28.3282514, -28.15895225, -28.009065, -27.87864672, -27.76315964,
-27.68523133, -27.62260405, -27.58076622]
-31.95025022, -31.88168886, -31.81178634, -31.73838831, -31.66318631,
-31.58762141, -31.51156294, -31.43760161, -31.38124626, -31.34245197,
-31.30629475, -31.26970711, -31.22566555, -31.17412914, -31.11806869,
-31.05122228, -30.97358131, -30.90658619, -30.86616148, -30.83854197,
-30.81115028, -30.78403337, -30.7570206, -30.73002834, -30.70088634,
-30.66844432, -30.63427939, -30.59364514, -30.54659009, -30.49180643,
-30.41406352, -30.31434813, -30.22984104, -30.18249387, -30.1516453,
-30.12082034, -30.08970494, -30.05779424, -30.02543415, -29.99309889,
-29.96078803, -29.92798594, -29.89002127, -29.84689015, -29.79726968,
-29.72927112, -29.64485972, -29.55578693, -29.45569694, -29.35111795,
-29.24662471, -29.12148491, -28.94244964, -28.73421833, -28.53930479,
-28.36231261, -28.19361236, -28.04376778, -27.91280403, -27.79433658,
-27.7065072, -27.64495288, -27.59798975]
else:
expected_sig_out = [
-30.00529182, -29.93540907, -29.86554231, -29.79417979, -29.71903263,
-29.6424009, -29.56531159, -29.48775435, -29.41468382, -29.35973323,
-29.32286555, -29.28602346, -29.2472908, -29.20086569, -29.14671746,
-29.08702653, -29.01341963, -28.93430243, -28.87791656, -28.84413339,
-28.81605918, -28.78824936, -28.76071036, -28.73319161, -28.70494101,
-28.67368479, -28.63941012, -28.60178381, -28.55585766, -28.5066561,
-28.43426575, -28.33848379, -28.24471112, -28.18220815, -28.15076699,
-28.11934744, -28.08776718, -28.05548097, -28.02250068, -27.98954302,
-27.95661362, -27.92370274, -27.8854762, -27.84193785, -27.79238328,
-27.72452662, -27.6385071, -27.54788144, -27.44581202, -27.33924103,
-27.23276107, -27.10289365, -26.91425473, -26.70204648, -26.50670713,
-26.3282514, -26.15895225, -26.009065, -25.87864672, -25.76315964,
-25.68523133, -25.62260405, -25.58076622]
-29.95025022, -29.88168886, -29.81178634, -29.73838831, -29.66318631,
-29.58762141, -29.51156294, -29.43760161, -29.38124626, -29.34245197,
-29.30629475, -29.26970711, -29.22566555, -29.17412914, -29.11806869,
-29.05122228, -28.97358131, -28.90658619, -28.86616148, -28.83854197,
-28.81115028, -28.78403337, -28.7570206, -28.73002834, -28.70088634,
-28.66844432, -28.63427939, -28.59364514, -28.54659009, -28.49180643,
-28.41406352, -28.31434813, -28.22984104, -28.18249387, -28.1516453,
-28.12082034, -28.08970494, -28.05779424, -28.02543415, -27.99309889,
-27.96078803, -27.92798594, -27.89002127, -27.84689015, -27.79726968,
-27.72927112, -27.64485972, -27.55578693, -27.45569694, -27.35111795,
-27.24662471, -27.12148491, -26.94244964, -26.73421833, -26.53930479,
-26.36231261, -26.19361236, -26.04376778, -25.91280403, -25.79433658,
-25.7065072, -25.64495288, -25.59798975]
print(sig_out)
assert_allclose(sig_out, expected_sig_out, rtol=1e-9)
@@ -365,3 +365,143 @@ def test_set_out_voa():
assert amp.out_voa == 4.0
assert amp.effective_gain == 20.0 + 4.0
assert amp.delta_p == -3.0 + 4.0
def test_multiband():
equipment_json = load_json(eqpt_library)
# add some multiband amplifiers
amps = [
{
"type_variety": "std_medium_gain_C",
"f_min": 191.25e12,
"f_max": 196.15e12,
"type_def": "variable_gain",
"gain_flatmax": 26,
"gain_min": 15,
"p_max": 21,
"nf_min": 6,
"nf_max": 10,
"out_voa_auto": False,
"allowed_for_design": True},
{
"type_variety": "std_medium_gain_L",
"f_min": 186.55e12,
"f_max": 190.05e12,
"type_def": "variable_gain",
"gain_flatmax": 26,
"gain_min": 15,
"p_max": 21,
"nf_min": 6,
"nf_max": 10,
"out_voa_auto": False,
"allowed_for_design": True},
{
"type_variety": "std_medium_gain_multiband",
"type_def": "multi_band",
"amplifiers": [
"std_medium_gain_C",
"std_medium_gain_L"
],
"allowed_for_design": False
}
]
equipment_json['Edfa'].extend(amps)
equipment = _equipment_from_json(equipment_json, eqpt_library)
el_config = {
"uid": "Edfa1",
"type": "Multiband_amplifier",
"type_variety": "std_medium_gain_multiband",
"amplifiers": [
{
"type_variety": "std_medium_gain_C",
"operational": {
"gain_target": 22.55,
"delta_p": 0.9,
"out_voa": 3.0,
"tilt_target": 0.0,
}
},
{
"type_variety": "std_medium_gain_L",
"operational": {
"gain_target": 21,
"delta_p": 3.0,
"out_voa": 3.0,
"tilt_target": 0.0,
}
}
]
}
fused_config = {
"uid": "[83/WR-2-4-SIG=>930/WRT-1-2-SIG]-Tl/9300",
"type": "Fused",
"params": {
"loss": 20
}
}
json_data = {
"elements": [
el_config,
fused_config
],
"connections": []
}
network = network_from_json(json_data, equipment)
amp = next(n for n in network.nodes() if n.uid == 'Edfa1')
fused = next(n for n in network.nodes() if n.uid == '[83/WR-2-4-SIG=>930/WRT-1-2-SIG]-Tl/9300')
si = create_input_spectral_information(f_min=186e12, f_max=196e12, roll_off=0.15, baud_rate=32e9, tx_power=1e-3,
spacing=50e9, tx_osnr=40.0)
assert si.number_of_channels == 200
si = fused(si)
si = amp(si)
# assert nb of channel after mux/demux
assert si.number_of_channels == 164 # computed based on amp bands
# Check that multiband amp is correctly created with correct __str__
actual_c_amp = amp.amplifiers["CBAND"].__str__()
expected_c_amp = '\n'.join([
'Edfa Edfa1',
' type_variety: std_medium_gain_C',
' effective gain(dB): 21.22',
' (before att_in and before output VOA)',
' tilt-target(dB) 0.00',
' noise figure (dB): 6.32',
' (including att_in)',
' pad att_in (dB): 0.00',
' Power In (dBm): -0.22',
' Power Out (dBm): 21.01',
' Delta_P (dB): 0.90',
' target pch (dBm): None',
' actual pch out (dBm): -1.77',
' output VOA (dB): 3.00'])
assert actual_c_amp == expected_c_amp
actual_l_amp = amp.amplifiers["LBAND"].__str__()
expected_l_amp = '\n'.join([
'Edfa Edfa1',
' type_variety: std_medium_gain_L',
' effective gain(dB): 21.00',
' (before att_in and before output VOA)',
' tilt-target(dB) 0.00',
' noise figure (dB): 6.36',
' (including att_in)',
' pad att_in (dB): 0.00',
' Power In (dBm): -1.61',
' Power Out (dBm): 19.40',
' Delta_P (dB): 3.00',
' target pch (dBm): None',
' actual pch out (dBm): -1.99',
' output VOA (dB): 3.00'])
assert actual_l_amp == expected_l_amp
# check that f_min, f_max of si are within amp band
assert amp.amplifiers["LBAND"].params.f_min == 186.55e12
assert si.frequency[0] >= amp.amplifiers["LBAND"].params.f_min
assert amp.amplifiers["CBAND"].params.f_max == 196.15e12
assert si.frequency[-1] <= amp.amplifiers["CBAND"].params.f_max
for freq in si.frequency:
if freq > 190.05e12:
assert freq >= 191.25e12
if freq < 191.25e12:
assert freq <= 190.25e12

View File

@@ -72,7 +72,8 @@ def test_equalization_combination_degree(delta_pdb_per_channel, degree, equaliza
"preamp_variety_list": [],
"booster_variety_list": []
},
"roadm-path-impairments": []
"roadm-path-impairments": [],
"design_bands": None
}
}
roadm = Roadm(**roadm_config)
@@ -124,7 +125,8 @@ def test_wrong_element_config(equalization_type):
"restrictions": {
"preamp_variety_list": [],
"booster_variety_list": []
}
},
"design_bands": None
},
"metadata": {
"location": {
@@ -236,7 +238,8 @@ def test_low_input_power(target_out, delta_pdb_per_channel, correction):
"preamp_variety_list": [],
"booster_variety_list": []
},
"roadm-path-impairments": []
"roadm-path-impairments": [],
"design_bands": None
},
"metadata": {
"location": {
@@ -290,7 +293,8 @@ def test_2low_input_power(target_out, delta_pdb_per_channel, correction):
"preamp_variety_list": [],
"booster_variety_list": []
},
"roadm-path-impairments": []
"roadm-path-impairments": [],
"design_bands": None
},
"metadata": {
"location": {

View File

@@ -14,7 +14,7 @@ SRC_ROOT = Path(__file__).parent.parent
('transmission_main_example', None, transmission_main_example, []),
('transmission_saturated', 'logs_transmission_saturated', transmission_main_example,
['tests/data/testTopology_expected.json', 'lannion', 'lorient', '-e', 'tests/data/eqpt_config.json', '--pow', '3']),
('path_requests_run', 'logs_path_request', path_requests_run, ['-v']),
('path_requests_run', 'logs_path_request', path_requests_run, ['--redesign-per-request', '-v']),
('transmission_main_example__raman', None, transmission_main_example,
['gnpy/example-data/raman_edfa_example_network.json', '--sim', 'gnpy/example-data/sim_params.json', '--show-channels', ]),
('openroadm-v4-Stockholm-Gothenburg', None, transmission_main_example,
@@ -37,6 +37,9 @@ SRC_ROOT = Path(__file__).parent.parent
['-e', 'tests/data/eqpt_config_psd.json', 'tests/data/test_long_network.json', '--spectrum', 'gnpy/example-data/initial_spectrum2.json', ]),
('transmission_long_psw', None, transmission_main_example,
['-e', 'tests/data/eqpt_config_psw.json', 'tests/data/test_long_network.json', '--spectrum', 'gnpy/example-data/initial_spectrum2.json', ]),
('multiband_transmission', None, transmission_main_example,
['gnpy/example-data/multiband_example_network.json', 'Site_A', 'Site_D', '-e', 'gnpy/example-data/eqpt_config_multiband.json',
'--spectrum', 'gnpy/example-data/multiband_spectrum.json', '--show-channels'])
))
def test_example_invocation(capfd, caplog, output, log, handler, args):
"""Make sure that our examples produce useful output"""

View File

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

View File

@@ -6,15 +6,20 @@
from pathlib import Path
import pytest
from gnpy.core.exceptions import NetworkTopologyError
from gnpy.core.network import span_loss, build_network
from gnpy.tools.json_io import load_equipment, load_network, network_from_json
from gnpy.core.utils import lin2db, automatic_nch
from gnpy.core.elements import Fiber, Edfa
from numpy.testing import assert_allclose
from gnpy.core.exceptions import NetworkTopologyError, ConfigurationError
from gnpy.core.network import span_loss, build_network, select_edfa, get_node_restrictions, \
estimate_srs_power_deviation, add_missing_elements_in_network, get_next_node
from gnpy.tools.json_io import load_equipment, load_network, network_from_json, load_json
from gnpy.core.utils import lin2db, automatic_nch, merge_amplifier_restrictions
from gnpy.core.elements import Fiber, Edfa, Roadm, Multiband_amplifier
from gnpy.core.parameters import SimParams, EdfaParams, MultiBandParams
TEST_DIR = Path(__file__).parent
EQPT_FILENAME = TEST_DIR / 'data/eqpt_config.json'
EQPT_MULTBAND_FILENAME = TEST_DIR / 'data/eqpt_config_multiband.json'
NETWORK_FILENAME = TEST_DIR / 'data/bugfixiteratortopo.json'
@@ -241,3 +246,506 @@ def test_design_non_amplified_link(elem1, elem2, expected_gain, expected_delta_p
assert amp.delta_p == expected_delta_p
# max power of std_low_gain is 21 dBm
assert amp.effective_gain == expected_gain
def network_base(case, site_type, length=50.0, amplifier_type='Multiband_amplifier'):
base_network = {
'elements': [
{
'uid': 'trx SITE1',
'type': 'Transceiver'
},
{
'uid': 'trx SITE2',
'type': 'Transceiver'
},
{
'uid': 'roadm SITE1',
'type': 'Roadm'
},
{
'uid': 'roadm SITE2',
'type': 'Roadm'
},
{
'uid': 'fiber (SITE1 → ILA1)',
'type': 'Fiber',
'type_variety': 'SSMF',
'params': {
'length': length,
'loss_coef': 0.2,
'length_units': 'km'
}
},
{
'uid': 'fiber (ILA1 → ILA2)',
'type': 'Fiber',
'type_variety': 'SSMF',
'params': {
'length': 50.0,
'loss_coef': 0.2,
'length_units': 'km'
}
},
{
'uid': 'fiber (ILA2 → SITE2)',
'type': 'Fiber',
'type_variety': 'SSMF',
'params': {
'length': 50.0,
'loss_coef': 0.2,
'length_units': 'km'
}
},
{
'uid': 'east edfa in SITE1 to ILA1',
'type': amplifier_type
},
{
'uid': 'east edfa or fused in ILA1',
'type': site_type
},
{
'uid': 'east edfa in ILA2',
'type': amplifier_type
}, {
'uid': 'west edfa in SITE2 to ILA1',
'type': amplifier_type
}
],
'connections': [
{
'from_node': 'trx SITE1',
'to_node': 'roadm SITE1'
},
{
'from_node': 'roadm SITE1',
'to_node': 'east edfa in SITE1 to ILA1'
},
{
'from_node': 'east edfa in SITE1 to ILA1',
'to_node': 'fiber (SITE1 → ILA1)'
},
{
'from_node': 'fiber (SITE1 → ILA1)',
'to_node': 'east edfa or fused in ILA1'
},
{
'from_node': 'east edfa or fused in ILA1',
'to_node': 'fiber (ILA1 → ILA2)'
},
{
'from_node': 'fiber (ILA1 → ILA2)',
'to_node': 'east edfa in ILA2'
},
{
'from_node': 'east edfa in ILA2',
'to_node': 'fiber (ILA2 → SITE2)'
},
{
'from_node': 'fiber (ILA2 → SITE2)',
'to_node': 'west edfa in SITE2 to ILA1'
},
{
'from_node': 'west edfa in SITE2 to ILA1',
'to_node': 'roadm SITE2'
},
{
'from_node': 'roadm SITE2',
'to_node': 'trx SITE2'
}
]
}
multiband_amps = [e for e in base_network['elements'] if e['type'] == 'Multiband_amplifier']
edfa2 = next(e for e in base_network['elements'] if e['uid'] == 'east edfa in ILA2')
roadm1 = next(e for e in base_network['elements'] if e['uid'] == 'roadm SITE1')
fused = [e for e in base_network['elements'] if e['type'] == 'Fused']
if case == 'monoband_no_design_band':
pass
elif case == 'monoband_roadm':
roadm1['params'] = {
'design_bands': [
{'f_min': 192.3e12, 'f_max': 196.0e12}
]
}
elif case == 'monoband_per_degree':
roadm1['params'] = {
'per_degree_design_bands': {
'east edfa in SITE1 to ILA1': [
{'f_min': 191.5e12, 'f_max': 195.0e12}
]
}
}
elif case == 'monoband_design':
edfa2['type_variety'] = 'std_medium_gain'
elif case == 'design':
for elem in multiband_amps:
elem['type_variety'] = 'std_medium_gain_multiband'
elem['amplifiers'] = [{
'type_variety': 'std_medium_gain',
'operational': {
'delta_p': 0,
'tilt_target': 0
}
}, {
'type_variety': 'std_medium_gain_L',
'operational': {
'delta_p': -1,
'tilt_target': 0
}
}]
for elem in fused:
elem['params'] = {'loss': 0.0}
elif case == 'no_design':
# user must indicate the bands otherwise SI band (single band is assumed) and this is not
# consistent with multiband amps.
roadm1['params'] = {
'per_degree_design_bands': {
'east edfa in SITE1 to ILA1': [
{'f_min': 191.3e12, 'f_max': 196.0e12},
{'f_min': 187.0e12, 'f_max': 190.0e12}
]
}
}
elif case == 'type_variety':
# bands are implicit based on amplifiers type_varieties
for elem in multiband_amps:
elem['type_variety'] = 'std_medium_gain_multiband'
return base_network
@pytest.mark.parametrize('case, site_type, amplifier_type, expected_design_bands, expected_per_degree_design_bands', [
('monoband_no_design_band', 'Edfa', 'Edfa',
[{'f_min': 191.3e12, 'f_max': 196.1e12}], [{'f_min': 191.3e12, 'f_max': 196.1e12}]),
('monoband_roadm', 'Edfa', 'Edfa',
[{'f_min': 192.3e12, 'f_max': 196.0e12}], [{'f_min': 192.3e12, 'f_max': 196.0e12}]),
('monoband_per_degree', 'Edfa', 'Edfa',
[{'f_min': 191.3e12, 'f_max': 196.1e12}], [{'f_min': 191.5e12, 'f_max': 195.0e12}]),
('monoband_design', 'Edfa', 'Edfa',
[{'f_min': 191.3e12, 'f_max': 196.1e12}], [{'f_min': 191.3e12, 'f_max': 196.1e12}]),
('design', 'Fused', 'Multiband_amplifier',
[{'f_min': 191.3e12, 'f_max': 196.1e12}],
[{'f_min': 186.55e12, 'f_max': 190.05e12}, {'f_min': 191.25e12, 'f_max': 196.15e12}]),
('no_design', 'Fused', 'Multiband_amplifier',
[{'f_min': 191.3e12, 'f_max': 196.1e12}],
[{'f_min': 187.0e12, 'f_max': 190.0e12}, {'f_min': 191.3e12, 'f_max': 196.0e12}])])
def test_design_band(case, site_type, amplifier_type, expected_design_bands, expected_per_degree_design_bands):
"""Check design_band is the one defined:
- in SI if nothing is defined,
- in ROADM if no design_band is defined for degree
- in per_degree
- if no design is defined,
- if type variety is defined: use it for determining bands
- if no type_variety autodesign is as expected, design uses OMS defined set of bands
EOL is added only once on spans. One span can be one fiber or several fused fibers
EOL is then added on the first fiber only.
"""
json_data = network_base(case, site_type, amplifier_type=amplifier_type)
equipment = load_equipment(EQPT_MULTBAND_FILENAME)
network = network_from_json(json_data, equipment)
p_db = equipment['SI']['default'].power_dbm
p_total_db = p_db + lin2db(automatic_nch(equipment['SI']['default'].f_min,
equipment['SI']['default'].f_max, equipment['SI']['default'].spacing))
build_network(network, equipment, p_db, p_total_db)
roadm1 = next(n for n in network.nodes() if n.uid == 'roadm SITE1')
assert roadm1.design_bands == expected_design_bands
assert roadm1.per_degree_design_bands['east edfa in SITE1 to ILA1'] == expected_per_degree_design_bands
@pytest.mark.parametrize('raman_allowed, gain_target, power_target, target_extended_gain, warning, expected_selection', [
(False, 20, 20, 3, False, ('test_fixed_gain', 0)),
(False, 20, 25, 3, False, ('test_fixed_gain', -4)),
(False, 10, 15, 3, False, ('std_low_gain_bis', 0)),
(False, 5, 15, 3, "is below all available amplifiers min gain", ('std_low_gain_bis', 0)),
(False, 30, 15, 3, "is beyond all available amplifiers capabilities", ('std_medium_gain', -1)),
])
def test_select_edfa(caplog, raman_allowed, gain_target, power_target, target_extended_gain, warning, expected_selection):
"""
"""
equipment = load_equipment(EQPT_MULTBAND_FILENAME)
edfa_eqpt = {n: a for n, a in equipment['Edfa'].items() if a.type_def != 'multi_band'}
selection = select_edfa(raman_allowed, gain_target, power_target, edfa_eqpt, "toto", target_extended_gain, verbose=True)
assert selection == expected_selection
if warning:
assert warning in caplog.text
@pytest.mark.parametrize('cls, defaultparams, variety_list, booster_list, band, expected_restrictions', [
(Edfa, EdfaParams, [], [],
{'LBAND': {'f_min': 187.0e12, 'f_max': 190.0e12}},
['std_medium_gain_L', 'std_low_gain_L_ter', 'std_low_gain_L']),
(Edfa, EdfaParams, [], [],
{'CBAND': {'f_min': 191.3e12, 'f_max': 196.0e12}},
['CienaDB_medium_gain', 'std_medium_gain', 'std_low_gain', 'std_low_gain_bis', 'test', 'test_fixed_gain']),
(Edfa, EdfaParams, ['std_medium_gain', 'std_high_gain'], [],
{'CBAND': {'f_min': 191.3e12, 'f_max': 196.0e12}},
['std_medium_gain']), # name in variety list does not exist in library
(Edfa, EdfaParams, ['std_medium_gain', 'std_high_gain'], [],
{'LBAND': {'f_min': 187.0e12, 'f_max': 190.0e12}},
[]), # restrictions inconsistency with bands
(Edfa, EdfaParams, ['std_medium_gain', 'std_high_gain'], ['std_booster'],
{'CBAND': {'f_min': 191.3e12, 'f_max': 196.0e12}},
['std_medium_gain']), # variety list takes precedence over booster constraint
(Edfa, EdfaParams, [], ['std_booster'],
{'CBAND': {'f_min': 191.3e12, 'f_max': 196.0e12}},
['std_booster']),
(Multiband_amplifier, MultiBandParams, [], [],
{'CBAND': {'f_min': 191.3e12, 'f_max': 196.0e12}, 'LBAND': {'f_min': 187.0e12, 'f_max': 190.0e12}},
['std_medium_gain_multiband', 'std_low_gain_multiband_bis']),
(Multiband_amplifier, MultiBandParams, [], ['std_booster_multiband', 'std_booster'],
{'CBAND': {'f_min': 191.3e12, 'f_max': 196.0e12}, 'LBAND': {'f_min': 187.0e12, 'f_max': 190.0e12}},
['std_booster_multiband'])
])
def test_get_node_restrictions(cls, defaultparams, variety_list, booster_list, band, expected_restrictions):
"""Check that all combinations of restrictions are correctly captured
"""
equipment = load_equipment(EQPT_MULTBAND_FILENAME)
edfa_config = {"uid": "Edfa1"}
if cls == Multiband_amplifier:
edfa_config['amplifiers'] = {}
edfa_config['params'] = defaultparams.default_values
edfa_config['variety_list'] = variety_list
node = cls(**edfa_config)
roadm_config = {
"uid": "roadm Brest_KLA",
"params": {
"per_degree_pch_out_db": {},
"target_pch_out_dbm": -18,
"add_drop_osnr": 38,
"pmd": 0,
"pdl": 0,
"restrictions": {
"preamp_variety_list": [],
"booster_variety_list": booster_list
},
"roadm-path-impairments": []
},
"metadata": {
"location": {
"city": "Brest_KLA",
"region": "RLD",
"latitude": 4.0,
"longitude": 0.0
}
}
}
prev_node = Roadm(**roadm_config)
fiber_config = {
"uid": "fiber (SITE1 → ILA1)",
"type_variety": "SSMF",
"params": {
"length": 100.0,
"loss_coef": 0.2,
"length_units": "km"
}
}
extra_params = equipment['Fiber']['SSMF'].__dict__
fiber_config['params'] = merge_amplifier_restrictions(fiber_config['params'], extra_params)
next_node = Fiber(**fiber_config)
restrictions = get_node_restrictions(node, prev_node, next_node, equipment, band)
assert restrictions == expected_restrictions
@pytest.mark.usefixtures('set_sim_params')
@pytest.mark.parametrize('case, site_type, band, expected_gain, expected_tilt, expected_variety, sim_params', [
('design', 'Multiband_amplifier', 'LBAND', 10.0, 0.0, 'std_medium_gain_multiband', False),
('no_design', 'Multiband_amplifier', 'LBAND', 10.0, 0.0, 'std_low_gain_multiband_bis', False),
('type_variety', 'Multiband_amplifier', 'LBAND', 10.0, 0.0, 'std_medium_gain_multiband', False),
('design', 'Multiband_amplifier', 'LBAND', 9.344985, 0.0, 'std_medium_gain_multiband', True),
('no_design', 'Multiband_amplifier', 'LBAND', 9.344985, -0.938676, 'std_low_gain_multiband_bis', True),
('no_design', 'Multiband_amplifier', 'CBAND', 10.977065, -1.600193, 'std_low_gain_multiband_bis', True),
('no_design', 'Fused', 'LBAND', 21.0, 0.0, 'std_medium_gain_multiband', False),
('no_design', 'Fused', 'LBAND', 20.344985, -0.819176, 'std_medium_gain_multiband', True),
('no_design', 'Fused', 'CBAND', 21.770319, -1.40032, 'std_medium_gain_multiband', True),
('design', 'Fused', 'CBAND', 21.21108, 0.0, 'std_medium_gain_multiband', True),
('design', 'Multiband_amplifier', 'CBAND', 11.041037, 0.0, 'std_medium_gain_multiband', True)])
def test_multiband(case, site_type, band, expected_gain, expected_tilt, expected_variety, sim_params):
"""Check:
- if amplifiers are defined in multiband they are used for design,
- if no design is defined,
- if type variety is defined: use it for determining bands
- if no type_variety autodesign is as expected, design uses OMS defined set of bands
EOL is added only once on spans. One span can be one fiber or several fused fibers
EOL is then added on the first fiber only.
"""
json_data = network_base(case, site_type)
equipment = load_equipment(EQPT_MULTBAND_FILENAME)
network = network_from_json(json_data, equipment)
p_db = equipment['SI']['default'].power_dbm
p_total_db = p_db + lin2db(automatic_nch(equipment['SI']['default'].f_min,
equipment['SI']['default'].f_max, equipment['SI']['default'].spacing))
if sim_params:
SimParams.set_params(load_json(TEST_DIR / 'data' / 'sim_params.json'))
build_network(network, equipment, p_db, p_total_db)
amp2 = next(n for n in network.nodes() if n.uid == 'east edfa in ILA2')
# restore simParams
save_sim_params = {"raman_params": SimParams._shared_dict['raman_params'].to_json(),
"nli_params": SimParams._shared_dict['nli_params'].to_json()}
SimParams.set_params(save_sim_params)
print(amp2.to_json)
assert_allclose(amp2.amplifiers[band].effective_gain, expected_gain, atol=1e-5)
assert_allclose(amp2.amplifiers[band].tilt_target, expected_tilt, atol=1e-5)
assert amp2.type_variety == expected_variety
def test_tilt_fused():
"""check that computed tilt is the same for one span 100km as 2 spans 30 +70 km
"""
design_bands = {'CBAND': {'f_min': 191.3e12, 'f_max': 196.0e12},
'LBAND': {'f_min': 187.0e12, 'f_max': 190.0e12}}
save_sim_params = {"raman_params": SimParams._shared_dict['raman_params'].to_json(),
"nli_params": SimParams._shared_dict['nli_params'].to_json()}
SimParams.set_params(load_json(TEST_DIR / 'data' / 'sim_params.json'))
input_powers = {'CBAND': 0.001, 'LBAND': 0.001}
json_data = network_base("design", "Multiband_amplifier", length=100)
equipment = load_equipment(EQPT_MULTBAND_FILENAME)
network = network_from_json(json_data, equipment)
node = next(n for n in network.nodes() if n.uid == 'fiber (SITE1 → ILA1)')
tilt_db, tilt_target = estimate_srs_power_deviation(network, node, equipment, design_bands, input_powers)
json_data = network_base("design", "Fused", length=50)
equipment = load_equipment(EQPT_MULTBAND_FILENAME)
network = network_from_json(json_data, equipment)
node = next(n for n in network.nodes() if n.uid == 'fiber (ILA1 → ILA2)')
fused_tilt_db, fused_tilt_target = \
estimate_srs_power_deviation(network, node, equipment, design_bands, input_powers)
# restore simParams
SimParams.set_params(save_sim_params)
for key in tilt_db:
assert_allclose(tilt_db[key], fused_tilt_db[key], rtol=1e-3)
for key in tilt_target:
assert_allclose(tilt_target[key], fused_tilt_target[key], rtol=1e-3)
def network_wo_booster(site_type, bands):
return {
'elements': [
{
'uid': 'trx SITE1',
'type': 'Transceiver'
},
{
'uid': 'trx SITE2',
'type': 'Transceiver'
},
{
'uid': 'roadm SITE1',
'params': {
'design_bands': bands
},
'type': 'Roadm'
},
{
'uid': 'roadm SITE2',
'type': 'Roadm'
},
{
'uid': 'fiber (SITE1 → ILA1)',
'type': 'Fiber',
'type_variety': 'SSMF',
'params': {
'length': 50.0,
'loss_coef': 0.2,
'length_units': 'km'
}
},
{
'uid': 'fiber (ILA1 → ILA2)',
'type': 'Fiber',
'type_variety': 'SSMF',
'params': {
'length': 50.0,
'loss_coef': 0.2,
'length_units': 'km'
}
},
{
'uid': 'fiber (ILA2 → SITE2)',
'type': 'Fiber',
'type_variety': 'SSMF',
'params': {
'length': 50.0,
'loss_coef': 0.2,
'length_units': 'km'
}
},
{
'uid': 'east edfa or fused in ILA1',
'type': site_type
}
],
'connections': [
{
'from_node': 'trx SITE1',
'to_node': 'roadm SITE1'
},
{
'from_node': 'roadm SITE1',
'to_node': 'fiber (SITE1 → ILA1)'
},
{
'from_node': 'fiber (SITE1 → ILA1)',
'to_node': 'east edfa or fused in ILA1'
},
{
'from_node': 'east edfa or fused in ILA1',
'to_node': 'fiber (ILA1 → ILA2)'
},
{
'from_node': 'fiber (ILA1 → ILA2)',
'to_node': 'fiber (ILA2 → SITE2)'
},
{
'from_node': 'fiber (ILA2 → SITE2)',
'to_node': 'roadm SITE2'
},
{
'from_node': 'roadm SITE2',
'to_node': 'trx SITE2'
}
]
}
@pytest.mark.parametrize('site_type, expected_type, bands, expected_bands', [
('Multiband_amplifier', Multiband_amplifier,
[{'f_min': 187.0e12, 'f_max': 190.0e12}, {'f_min': 191.3e12, 'f_max': 196.0e12}],
[{'f_min': 187.0e12, 'f_max': 190.0e12}, {'f_min': 191.3e12, 'f_max': 196.0e12}]),
('Edfa', Edfa,
[{'f_min': 191.4e12, 'f_max': 196.1e12}],
[{'f_min': 191.4e12, 'f_max': 196.1e12}]),
('Edfa', Edfa,
[{'f_min': 191.2e12, 'f_max': 196.0e12}],
[]),
('Fused', Multiband_amplifier,
[{'f_min': 187.0e12, 'f_max': 190.0e12}, {'f_min': 191.3e12, 'f_max': 196.0e12}],
[{'f_min': 187.0e12, 'f_max': 190.0e12}, {'f_min': 191.3e12, 'f_max': 196.0e12}]),
('Fused', Edfa,
[{'f_min': 191.3e12, 'f_max': 196.0e12}],
[{'f_min': 191.3e12, 'f_max': 196.0e12}])])
def test_insert_amp(site_type, expected_type, bands, expected_bands):
"""Check:
- if amplifiers are defined in multiband they are used for design,
- if no design is defined,
- if type variety is defined: use it for determining bands
- if no type_variety autodesign is as expected, design uses OMS defined set of bands
EOL is added only once on spans. One span can be one fiber or several fused fibers
EOL is then added on the first fiber only.
"""
json_data = network_wo_booster(site_type, bands)
equipment = load_equipment(EQPT_MULTBAND_FILENAME)
network = network_from_json(json_data, equipment)
p_db = equipment['SI']['default'].power_dbm
p_total_db = p_db + lin2db(automatic_nch(equipment['SI']['default'].f_min,
equipment['SI']['default'].f_max, equipment['SI']['default'].spacing))
add_missing_elements_in_network(network, equipment)
if not expected_bands:
with pytest.raises(ConfigurationError):
build_network(network, equipment, p_db, p_total_db)
else:
build_network(network, equipment, p_db, p_total_db)
roadm1 = next(n for n in network.nodes() if n.uid == 'roadm SITE1')
amp1 = get_next_node(roadm1, network)
assert isinstance(amp1, expected_type)
assert roadm1.per_degree_design_bands['Edfa_booster_roadm SITE1_to_fiber (SITE1 → ILA1)'] == expected_bands

View File

@@ -232,7 +232,7 @@ def test_json_response_generation(xls_input, expected_response_file):
rqs, dsjn = requests_aggregation(rqs, dsjn)
pths = compute_path_dsjctn(network, equipment, rqs, dsjn)
propagatedpths, reversed_pths, reversed_propagatedpths = \
compute_path_with_disjunction(network, equipment, rqs, pths)
compute_path_with_disjunction(network, equipment, rqs, pths, redesign=True)
pth_assign_spectrum(pths, rqs, oms_list, reversed_pths)
result = []

View File

@@ -596,11 +596,19 @@ def test_roadm_per_degree_impairments(type_variety, from_degree, to_degree, impa
{
"roadm-path-impairments-id": 1,
"roadm-add-path": [{
"frequency-range": {
"lower-frequency": 191.3e12,
"upper-frequency": 196.1e12
},
"roadm-osnr": 41,
}]
}, {
"roadm-path-impairments-id": 3,
"roadm-add-path": [{
"frequency-range": {
"lower-frequency": 191.3e12,
"upper-frequency": 196.1e12
},
"roadm-inband-crosstalk": 0,
"roadm-osnr": 20,
"roadm-noise-figure": 23
@@ -657,14 +665,15 @@ def test_wrong_roadm_per_degree_impairments(from_degree, to_degree, impairment_i
build_network(network, equipment, 0.0, 20.0)
@pytest.mark.parametrize('path_type, type_variety, expected_pmd, expected_pdl, expected_osnr', [
('express', 'default', 5.0e-12, 0.5, None), # roadm instance parameters pre-empts library
('express', 'example_test', 5.0e-12, 0.5, None),
('express', 'example_detailed_impairments', 0, 0, None), # detailed parameters pre-empts global instance ones
('add', 'default', 5.0e-12, 0.5, None),
('add', 'example_test', 5.0e-12, 0.5, None),
('add', 'example_detailed_impairments', 0, 0, 41)])
def test_impairment_initialization(path_type, type_variety, expected_pmd, expected_pdl, expected_osnr):
@pytest.mark.parametrize('path_type, type_variety, expected_pmd, expected_pdl, expected_osnr, freq', [
('express', 'default', 5.0e-12, 0.5, None, [191.3e12]), # roadm instance parameters pre-empts library
('express', 'example_test', 5.0e-12, 0.5, None, [191.3e12]),
('express', 'example_detailed_impairments', 0, 0, None, [191.3e12]), # detailed parameters pre-empts global ones
('add', 'default', 5.0e-12, 0.5, None, [191.3e12]),
('add', 'example_test', 5.0e-12, 0.5, None, [191.3e12]),
('add', 'example_detailed_impairments', 0, 0, 41, [191.3e12]),
('add', 'example_detailed_impairments', [0, 0], [0.5, 0], [35, 41], [188.5e12, 191.3e12])])
def test_impairment_initialization(path_type, type_variety, expected_pmd, expected_pdl, expected_osnr, freq):
"""Check that impairments are correctly initialized, with this order:
- use equipment roadm impairments if no impairment are set in the ROADM instance
- use roadm global impairment if roadm global impairment are set
@@ -687,13 +696,16 @@ def test_impairment_initialization(path_type, type_variety, expected_pmd, expect
roadm = Roadm(**roadm_config)
roadm.set_roadm_paths(from_degree='tata', to_degree='toto', path_type=path_type)
assert roadm.get_roadm_path(from_degree='tata', to_degree='toto').path_type == path_type
assert roadm.get_roadm_path(from_degree='tata', to_degree='toto').impairment.pmd == expected_pmd
assert roadm.get_roadm_path(from_degree='tata', to_degree='toto').impairment.pdl == expected_pdl
assert_allclose(roadm.get_impairment('roadm-pmd', freq, from_degree='tata', degree='toto'),
expected_pmd, rtol=1e-12)
assert_allclose(roadm.get_impairment('roadm-pdl', freq, from_degree='tata', degree='toto'),
expected_pdl, rtol=1e-12)
if path_type == 'add':
# we assume for simplicity that add contribution is the same as drop contribution
# add_drop_osnr_db = 10log10(1/add_osnr + 1/drop_osnr)
if type_variety in ['default', 'example_test']:
assert roadm.get_roadm_path(from_degree='tata',
to_degree='toto').impairment.osnr == roadm.params.add_drop_osnr + lin2db(2)
assert_allclose(roadm.get_impairment('roadm-osnr', freq, from_degree='tata', degree='toto'),
roadm.params.add_drop_osnr + lin2db(2), rtol=1e-12)
else:
assert roadm.get_roadm_path(from_degree='tata', to_degree='toto').impairment.osnr == expected_osnr
assert_allclose(roadm.get_impairment('roadm-osnr', freq, from_degree='tata', degree='toto'),
expected_osnr, rtol=1e-12)

View File

@@ -10,6 +10,7 @@ from pathlib import Path
from pandas import read_csv
from numpy.testing import assert_allclose
from numpy import array
from copy import deepcopy
import pytest
from gnpy.core.info import create_input_spectral_information, create_arbitrary_spectral_information
@@ -22,6 +23,7 @@ from gnpy.core.science_utils import RamanSolver
TEST_DIR = Path(__file__).parent
@pytest.mark.usefixtures('set_sim_params')
def test_fiber():
"""Test the accuracy of propagating the Fiber."""
fiber = Fiber(**load_json(TEST_DIR / 'data' / 'test_science_utils_fiber_config.json'))
@@ -50,8 +52,7 @@ def test_fiber():
signal=signal, baud_rate=baud_rate, roll_off=0.15,
delta_pdb_per_channel=delta_pdb_per_channel,
tx_osnr=40.0, tx_power=1e-3)
# propagation
# propagation without Raman
spectral_info_out = fiber(spectral_info_input)
p_signal = spectral_info_out.signal
@@ -61,6 +62,17 @@ def test_fiber():
assert_allclose(p_signal, expected_results['signal'], rtol=1e-3)
assert_allclose(p_nli, expected_results['nli'], rtol=1e-3)
# propagation with Raman
SimParams.set_params({'raman_params': {'flag': True}})
spectral_info_out = fiber(spectral_info_input)
p_signal = spectral_info_out.signal
p_nli = spectral_info_out.nli
expected_results = read_csv(TEST_DIR / 'data' / 'test_fiber_flex_expected_with_raman_results.csv')
assert_allclose(p_signal, expected_results['signal'], rtol=1e-3)
assert_allclose(p_nli, expected_results['nli'], rtol=1e-3)
@pytest.mark.usefixtures('set_sim_params')
def test_raman_fiber():
@@ -70,6 +82,7 @@ def test_raman_fiber():
baud_rate=32e9, spacing=50e9, tx_osnr=40.0,
tx_power=1e-3)
SimParams.set_params(load_json(TEST_DIR / 'data' / 'sim_params.json'))
SimParams().raman_params.solver_spatial_resolution = 5
fiber = RamanFiber(**load_json(TEST_DIR / 'data' / 'test_science_utils_fiber_config.json'))
fiber.ref_pch_in_dbm = 0.0
# propagation
@@ -108,23 +121,22 @@ def test_fiber_lumped_losses_srs(set_sim_params):
baud_rate=32e9, spacing=50e9, tx_osnr=40.0,
tx_power=1e-3)
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'))
raman_fiber = RamanFiber(**load_json(TEST_DIR / 'data' / 'test_lumped_losses_raman_fiber_config.json'))
# propagation
# without Raman pumps
stimulated_raman_scattering = RamanSolver.calculate_stimulated_raman_scattering(
spectral_info_input, fiber)
SimParams.set_params({'raman_params': {'flag': True, 'order': 2}})
stimulated_raman_scattering = RamanSolver.calculate_stimulated_raman_scattering(spectral_info_input, fiber)
power_profile = stimulated_raman_scattering.power_profile
expected_power_profile = read_csv(TEST_DIR / 'data' / 'test_lumped_losses_fiber_no_pumps.csv', header=None)
expected_power_profile = read_csv(TEST_DIR / 'data' / 'test_lumped_losses_fiber_no_pumps.csv').values
assert_allclose(power_profile, expected_power_profile, rtol=1e-3)
# with Raman pumps
expected_power_profile = read_csv(TEST_DIR / 'data' / 'test_lumped_losses_raman_fiber.csv', header=None)
stimulated_raman_scattering = RamanSolver.calculate_stimulated_raman_scattering(
spectral_info_input, raman_fiber)
SimParams.set_params({'raman_params': {'flag': True, 'order': 1, 'solver_spatial_resolution': 5}})
stimulated_raman_scattering = RamanSolver.calculate_stimulated_raman_scattering(spectral_info_input, raman_fiber)
power_profile = stimulated_raman_scattering.power_profile
expected_power_profile = read_csv(TEST_DIR / 'data' / 'test_lumped_losses_raman_fiber.csv').values
assert_allclose(power_profile, expected_power_profile, rtol=1e-3)
# without Stimulated Raman Scattering
@@ -132,3 +144,26 @@ def test_fiber_lumped_losses_srs(set_sim_params):
stimulated_raman_scattering = RamanSolver.calculate_attenuation_profile(spectral_info_input, fiber)
power_profile = stimulated_raman_scattering.power_profile
assert_allclose(power_profile, expected_power_profile, rtol=1e-3)
@pytest.mark.usefixtures('set_sim_params')
def test_nli_solver():
"""Test the accuracy of NLI solver."""
fiber = Fiber(**load_json(TEST_DIR / 'data' / 'test_science_utils_fiber_config.json'))
fiber.ref_pch_in_dbm = 0.0
# 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, spacing=50e9, tx_osnr=40.0,
tx_power=1e-3)
SimParams.set_params(load_json(TEST_DIR / 'data' / 'sim_params.json'))
sim_params = SimParams()
spectral_info_output = fiber(deepcopy(spectral_info_input))
sim_params.nli_params.method = 'ggn_approx'
sim_params.raman_params.result_spatial_resolution = 10e3
spectral_info_output_approx = fiber(deepcopy(spectral_info_input))
assert_allclose(spectral_info_output.nli, spectral_info_output_approx.nli, rtol=1e-1)

View File

@@ -33,7 +33,7 @@ SERVICE_FILENAME = DATA_DIR / 'testTopology_services_expected.json'
grid = 0.00625e12
slot = 0.0125e12
guardband = 0.15e12
guardband = 25.0e9
cband_freq_min = 191.3e12
cband_freq_max = 196.1e12
@@ -101,14 +101,15 @@ def test_wrong_values(nval, mval, setup):
def test_aligned(nmin, nmax, setup):
"""Checks that the OMS grid is correctly aligned
Note that bitmap index uses guardband on both ends so that if nmin, nmax = -200, +200,
Note that bitmap index uses guardband on both ends so that if center frequencies nmin, nmax = -200, +200,
min/max navalue in bitmap are -224, +223, which makes 223 -(-224) +1 frequencies.
"""
network, oms_list = setup
nguard = guardband / grid
center = 193.1e12
freq_min = center + nmin * grid
freq_max = center + nmax * grid
# amplification band
freq_min = center + nmin * grid - guardband
freq_max = center + nmax * grid + guardband
random_oms = oms_list[10]
# We're always starting with full C-band
@@ -116,9 +117,9 @@ def test_aligned(nmin, nmax, setup):
assert pytest.approx(nvalue_to_frequency(random_oms.spectrum_bitmap.freq_index_max) * 1e-12, abs=1e-12) == 196.1
ind_max = len(random_oms.spectrum_bitmap.bitmap) - 1
# "inner" frequencies, without the guard baand
# "inner" frequencies, without the guard band
inner_n_min = random_oms.spectrum_bitmap.getn(0) + nguard
inner_n_max = random_oms.spectrum_bitmap.getn(ind_max) - nguard + 1
inner_n_max = random_oms.spectrum_bitmap.getn(ind_max) - nguard
assert inner_n_min == random_oms.spectrum_bitmap.freq_index_min
assert inner_n_max == random_oms.spectrum_bitmap.freq_index_max
assert inner_n_min == -288
@@ -136,7 +137,7 @@ def test_aligned(nmin, nmax, setup):
ind_max = len(random_oms.spectrum_bitmap.bitmap) - 1
inner_n_min = random_oms.spectrum_bitmap.getn(0) + nguard
inner_n_max = random_oms.spectrum_bitmap.getn(ind_max) - nguard + 1
inner_n_max = random_oms.spectrum_bitmap.getn(ind_max) - nguard
assert inner_n_min == random_oms.spectrum_bitmap.freq_index_min
assert inner_n_max == random_oms.spectrum_bitmap.freq_index_max
@@ -198,18 +199,20 @@ def test_assign_and_sum(nval1, nval2, setup):
def test_bitmap_assignment(setup):
"""test that a bitmap can be assigned"""
network, oms_list = setup
_, oms_list = setup
random_oms = oms_list[2]
random_oms.assign_spectrum(13, 7)
btmp = deepcopy(random_oms.spectrum_bitmap.bitmap)
# try a first assignment that must pass
spectrum_btmp = Bitmap(cband_freq_min, cband_freq_max, grid=0.00625e12, guardband=0.15e12, bitmap=btmp)
freq_min = nvalue_to_frequency(random_oms.spectrum_bitmap.n_min)
freq_max = nvalue_to_frequency(random_oms.spectrum_bitmap.n_max)
_ = Bitmap(freq_min, freq_max, grid=0.00625e12, guardband=guardband, bitmap=btmp)
# try a wrong assignment that should not pass
btmp = btmp[1:-1]
with pytest.raises(SpectrumError):
spectrum_btmp = Bitmap(cband_freq_min, cband_freq_max, grid=0.00625e12, guardband=0.15e12, bitmap=btmp)
_ = Bitmap(cband_freq_min, cband_freq_max, grid=0.00625e12, guardband=guardband, bitmap=btmp)
@pytest.fixture()