Repository: PyEllips/pyElli (language: python)

Issue:
dispersions examples
Dear pyElli's,

Not sure this is the right place where to post this message/request. If that is the case, please excuse me.
In the Basic usage example I suspect there is a small error in the declaration of the lmfit params, the SiO2_d param is not declared.
Also, could you please provide short examples for a few more dispersion models?
I am trying to run a LorentzEnergy dispersion model (with isotropic material for now) but I keep getting an error saying " InvalidParameters: Too many parameters".

Here is the way I did building on the basic usage example

Parameters definition:
params = ParamsHist()
params.add("layer1_A", value=250, min=0, max=1000, vary=False)
params.add("layer1_E", value=57.0, min=5, max=100, vary=False)
params.add("layer1_gamma", value=5, min=1, max=7, vary=False)
params.add("layer1_t", value=230, min=200, max=260, vary=False)

Dispersion 
@fit(psi_delta_1, params)
def model(lbda, params):
    BTO = elli.LorentzEnergy(
        params["layer1_A"],
        params["layer1_E"],
        params["layer1_gamma"],
    ).get_mat()
    structure = elli.Structure(
        elli.AIR, 
        [elli.Layer(layer1, params["layer1_t"])],  
        Si,
    )
    return structure.evaluate(lbda, angle, solver=elli.Solver2x2)

Hope you can help.
Thank you for your great job!

Ruggero


Discussion / hints:
Hey Ruggero,

thank you for your report. However, I had a look at the Basic Usage example and found the SiO2_d parameter correctly declared (see [the docs](https://pyelli.readthedocs.io/en/stable/auto_examples/plot_01_basic_usage.html#sphx-glr-auto-examples-plot-01-basic-usage-py) or [ipynb example](https://github.com/PyEllips/pyElli/blob/master/examples/Basic%20Usage/Basic%20Usage.ipynb)) and the example works for me, too. Can you maybe point me to the exact example you were using?

Regarding your LorentzEnergy example:
You need to slightly change how you set the model. We distinguish between parameter you can give to a model only once and parameters you can add multiple times (as the oscillators of LorentzEnergy).
In the [general introduction](https://pyelli.readthedocs.io/en/stable/dispersions.html#dispersions) for dispersions you find more information how this is implemented.
For your example you need to change
```
BTO = elli.LorentzEnergy(
  params["layer1_A"],
  params["layer1_E"],
  params["layer1_gamma"],
).get_mat()
```

to

```
BTO = elli.LorentzEnergy().add(
  params["layer1_A"],
  params["layer1_E"],
  params["layer1_gamma"],
).get_mat()
```
and it should work.
Hey, I just had another look at your example and found another problem. You built the layer with `elli.Layer(layer1, params["layer1_t"])`. You, however, defined the `layer1` only as a prefix for your parameters but you have to pass the dispersive material from the assignment 
```
BTO = elli.LorentzEnergy().add(
 ...
).get_mat()
```
to the `Layer`. I know it is a bit confusing since lmfit uses this prefix notation. The full example would look now like:
```
@fit(psi_delta_1, params)
def model(lbda, params):
    BTO = elli.LorentzEnergy(
        params["layer1_A"],
        params["layer1_E"],
        params["layer1_gamma"],
    ).get_mat()
    structure = elli.Structure(
        elli.AIR,
        [elli.Layer(BTO, params["layer1_t"])],
        Si,
    )
    return structure.evaluate(lbda, angle, solver=elli.Solver2x2)
```
This should work now. But please feel free to ask if you still have problems with this.

I think we will also provide a second example where we show a model with multiple input parameter sets through the `.add(...)` method.

Regarding on your concern for the right channel: Typically, these issues are used to point out bugs or feature requests for pyelli. However, since we do not have any channel to post usage questions (i.e. mailing list or a forum) it is fine to post those questions here for now, too. Eventually, we will put up another channel where people can ask such questions.
Hi,

thank you.
You are right about the basic usage example, I see both sources correct now. Not sure anymore where I was reading.
About the Lorentz model, it works now. Yes, I pasted only  was incomplete.
I am now trying to reproduce the results obtained with the Woollam software on the same dataset, but couldn't so far. 
Did you do some sort of benchmarking with any existing software?
Thanks!

Yes we did benchmark for a part of the models but mainly with spectraray, which is a software for sentech ellipsometers. Often models are slightly different and the parameters need to be adapted. We mainly use the formulas from the book Spectroscopic Ellipsometry by Fujiwara. However, you can just have a look at the formulas in the documentation and compare them to the ones Woolam provides (they are written in their manual). If I have a bit of time tomorrow I'll have a look at woolams formula and can give you guidance to adapt your params.
Hey, I had a look at the Woollam [manual](https://physlab.lums.edu.pk/images/f/f4/Ellipsometry_manual.pdf) and I've seen that they use the formula

$$
\epsilon_\text{Lorentz} = \frac{\text{Amp}_n \text{Br}_n E_n}{E_n^2 - E^2 - i \cdot E \cdot \text{Br}_n}
$$

However, [the formula we use](https://pyelli.readthedocs.io/en/stable/dispersions.html#id1) is slightly different. Basically, the parameter $A = \text{Amp}_n * \text{Br}_n$ and `gamma = Br_n`.

Could you test to change it and see if it works then?
Hi, thanks! 
Do you mean adapt the parameters or change the equation?
First attempt adapting the parameters improved significantly but the model is not yet on the data.
In pyElli/Fujiwara eq. there is also a "+1" term...not sure how this is accounted for.
Moreover I could have a look at the way the fit was done on the Wollam, there is also a e1(inf) parameter which is not described in the manual. It seems to be a freq. independent term. 
Sorry, I know all this may be confusing, nevertheless I am trying to use your code as it looks good and useful for me. Hope can make things working soon.
Hey,

I meant to adapt the parameters. You can use the parameters from your Woollam program and just calculate the ones pyElli uses.

Yes, typically models vary in constant offset. We decided to use just `+1` and allow adding an epsilon infinity constant to the model (see [here](https://pyelli.readthedocs.io/en/stable/dispersions.html#elli.dispersions.EpsilonInf)).
You can just add dispersions together, e.g. for your example it could look like the following:
```
BTO = (elli.LorentzEnergy().add(
        params["layer1_A"],
        params["layer1_E"],
        params["layer1_gamma"],
    ) + elli.EpsilonInf(params["layer1_eps_inf"])).get_mat()
```
Here, you'd need to introduce the additional parameter `layer1_eps_inf`. Please note that it would actually evaluate to 1 + eps_inf, because Lorentz already contains the offset of 1 (sorry for the confusion but we did not want to change the model as it is used in Fujiwara and force the users to always add an `EpsilonInf(1)`).

Don't worry about your questions. It is valuable input for us, too. So we know whether we should extent and clarify the documentation somewhere or provide more examples regarding a certain topic. So please feel free to point out problems/unclear explanations in the docs as well.
Thanks,

After removing the second parenthesis before .get_mat(), as it didn't match, I get

AttributeError: 'DispersionSum' object has no attribute 'get_tensor'.



The second parenthesis is important, please not that there is an open parenthesis before `elli.LorentzEnergy` now, which you probably forgot. Here I added a few newlines for clarity:
```
BTO = (
   elli.LorentzEnergy().add(
        params["layer1_A"],
        params["layer1_E"],
        params["layer1_gamma"],
    ) 
   + elli.EpsilonInf(params["layer1_eps_inf"])
).get_mat()
```

However, adding a material and a dispersion should be an error, I will also add a proper error handling to that, so that the error message is clearer (see Issue #99)
I just added a proper error handling for this case and found that we also have a short-hand notation for adding epsilon infinity I forgot about. You can also write:
```
BTO = (
   elli.LorentzEnergy().add(
        params["layer1_A"],
        params["layer1_E"],
        params["layer1_gamma"],
    ) 
   + params["layer1_eps_inf"]
).get_mat()
```
to add a constant offset and the `EpsilonInf` class will be automatically created for you.
Thanks!! 
Things works and I will have a closer look in the next days. 
One more thing is about the usage of the refractive index database.
I have a dataset from 600 to 1700 nm, but I did not find a database entry for Silicon covering the entire range.  Is it possible to merge different entries to cover a larger spectral range? 
I know the database values may be different,  however how can handle such situation?
Hey,

nice that it works now!

In principle it should be possible to merge different entries together, but probably requires some manual concatenating of arrays. I never really tested it but I think it is an interesting use case. I'll later prepare a small example how this could look like.
Hey,

I created a quick example:
```
import elli

rii = elli.db.RII()
si = rii.load_dispersion("Si", "Aspnes")
si2 = rii.load_dispersion("Si", "Schinke")

si_concat = si.single_params['n'].combine_first(si2.single_params['n'])
si_disp = elli.table_index.Table(lbda=si_concat.index, n=si_concat.values)
```

From which you could use the Si dispersion as a material with `si_disp.get_mat()` or view the dispersion in a plot with `si_disp.get_dielectric_df(si_concat.index).plot()` to see if there are any jumps or other inconsistencies in the data.
Please note that accessing the `single_params` dict directly is not the best approach here. For example, if you load a dispersion which is not tabulated as nk values you would need to use `.single_params['eps']` or other fields, which depends on the particular tabulated dataset being used. I think eventually it would be nice to have support for adding tabulated datasets together, i.e. simply doing `si + si2` from the above example (which actually works but gives an error if we use the whole integration range, because internally there are still two different interpolation ranges).

If you let me know which literature sets you'd like to use I can also check the specific example for you. For the above example it actually works quite nicely without any major jumps or irregularities (there are a few fluctuations in the regions where the two dispersion overlap, though - an option could also be to not let them overlap but just use either one of the dispersions in this regions).

Edit: I added an issue for supporting adding of tabulated datasets. See #100 .
Hi, many thanks!

what is "conc" in the last line?
maybe I'm again doing a mistake?


Sorry, my bad. This is `si_concat`. I renamed it while copying it over to be more clear but forgot to rename it (I should just not do this). I edited the post above.
I just ran the "basic usage" example with the si_disp and the fit does not works as good, is for the overlaps you mentioned, i gues (?)
As I have to fit a dataset up to 1700 nm, so merging the "Schinke" entry with "Salzberg and Villa" should work. The latter has only n, but k=0. 
I am not sure how to merge only specific ranges of two entries. Could you please help here?
Yes, there you already have to approach it differently since `Salzberg and Villa` is not tabulated but is a Sellmeier function. Therefore, you can provide it a range to calculate your desired wavelength range directly. Here is a snippet how this can look like:

```python
import elli
from elli.fitting import ParamsHist, fit
import numpy as np

rii = elli.db.RII()
si_schinke = rii.load_dispersion("Si", "Schinke")
si_salzberg = rii.load_dispersion("Si", "Salzberg")


# This builds the Salzberg dispersion from the highest lambda in the Schinke tabulated data
# with 1000 points until 1700 nm. You may change the values according to your needs.
min_wavelength = si_schinke.single_params['lbda'][-1]
max_wavelength = 1700
no_points = 1000

wavelengths = np.linspace(min_wavelength, max_wavelength, no_points)
si_salzberg_table = si_salzberg.get_refractive_index(wavelengths)

# I refined this so you can select which dispersion to use when they overlap
# Here it selects the Schinke dispersion for overlapping values
si_concat = si_schinke.single_params['n'].combine(
    si_salzberg_table,
    lambda schinke, salzberg: schinke
)

elli.table_index.Table(lbda=si_concat.index, n=si_concat.values).get_dielectric_df(si_concat.index).plot()
```

Pleas note that this still is somewhat hacked together and eventually we will support these cases properly. But this may easily fail for different combinations of dispersions. But for this specific case it should work fine.
Hi, thanks. 
If I plot I see that the si_concat data go up to 1470, not 1700. 

It seems to me that between your Lorentz oscillator formula in the documentation and Fujiwara's (eq. 5.9) there is a sign change at the denominator for the E's (real part).
But the source code [https://pyelli.readthedocs.io/en/stable/_modules/elli/dispersions/lorentz_energy.html#LorentzEnergy](url) is different. Compared to Woollam it has a sign change in the Im part.
Comparing with Woollam, the denominator is the samem while at numerator A_j = Amp_j Br_j E_j.
Do you agree? ( I'm bit confused : - ) )
I see. The `combine` function is not doing what I expected it only takes the value from the second dataframe if it already exists in the first one.
I rewrote the part such that the full snippet now looks like this:
```python
import elli
from elli.fitting import ParamsHist, fit
import numpy as np
import pandas as pd

rii = elli.db.RII()
si_schinke = rii.load_dispersion("Si", "Schinke")
si_salzberg = rii.load_dispersion("Si", "Salzberg")


# This builds the Salzberg dispersion from the highest lambda in the Schinke tabulated data
# with 1000 points until 1700 nm. You may change the values according to your needs.
min_wavelength = si_schinke.single_params['lbda'][-1]
max_wavelength = 1700
no_points = 1000

wavelengths = np.linspace(min_wavelength, max_wavelength, no_points)
si_salzberg_table = si_salzberg.get_refractive_index(wavelengths)

# Concatenate the two dataframes
si_concat = pd.concat(
    [pd.DataFrame(si_schinke.single_params['n']),
    pd.DataFrame(si_salzberg_table, index=wavelengths)]
)
# Remove duplicates and keep the first occurence
si_concat = si_concat[~si_concat.index.duplicated(keep='first')]

elli.table_index.Table(lbda=si_concat.index, n=si_concat.values[:,0]).get_dielectric_df(si_concat.index).plot()
```

Yes, there may be a sign change, because this depends on the convention being used. You can either write your dispersions in the `n + ik` or `n - ik` convention. Woollam probably uses the other convention as we do.

Yes, I see that there is some wrong sign in the documentation. However, I had a look at the code and it is the other way around there. This is the actual code being used:
```python
c.get("A") / (c.get("E") ** 2 - energy**2 - 1j * c.get("gamma") * energy)
```

Thank you for pointing it out. I'll correct the documentation (actually we're still in the phase of checking the dispersions and their dispersions for errors - see #55 ).
thanks. The interpolation give still error. It seems that the number of points in along x and y is different.
ValueError: x and y arrays must be equal in length along interpolation axis.

Another question on the dispersion models, What would be a convenient way to include an exponential tail (Urbach tail) into a Cauchy model? 
Ah yes, you need to change the last line to:
```
elli.table_index.Table(lbda=si_concat.index, n=si_concat.values[:,0]).get_dielectric_df(si_concat.index).plot()
```
to use `si_concat.values[:,0]` instead of `si_concat.values`. I corrected it in the above example, too.

I'm not sure if it is the best approach to include an Urbach tail into a Cauchy model, since this already models the part far away from any resonance and does not include a parameter for the actual bandgap of the material. Maybe it is better to directly use a Cody-Lorentz function which already includes an Urbach tail. If you really want to model a Cauchy + exponential you could create an exponential dispersion model similar to the [Poles](https://pyelli.readthedocs.io/en/stable/dispersions.html#elli.dispersions.Poles) which we already provide. I could also assist you in creating such a model.
Thanks. it works now.

I see your point, thanks.
The reason is that I am trying to benchmark and the results obtained with the Woollam software for an oxide film on Silicon. The model includes also the SiO2 on top of Si (so that air, oxide, sio2, si) where the SiO2 is modelled with Cauchy and Urbach tail. Was thinking to model correction/improvement as a second step. 
So, I think I will try create an "Urbach tail" class (following the Poles example).  Thanks for the offer of support, I will need it : - )
Hey,

I had a look at the Woollam manual. You are referring to the Cauchy_Extended model, right? The problem is that they don't provide the formula for this model. If you can share your data + theoretical curve + model parameters I could have a look and see if I could reverse engineer this model. From their manual it seems to be a combination of an IR pole and a Cody part accounting for the Urbach tail (similar to the Cody-Lorentz model but just using a Cauchy to model the resonance instead of a Lorentz oscillator).

Would it generally of interest for you if we provided the Woollam models as well? For example in some submodule like `elli.dispersions.woollam` or so.
I refer to the Cauchy model, eq. 8-1 and 8-2 (p. 9-288).
Yes, in general  it could be useful having a Woollam submodule. 
Right now I aim only at reproducing a result, and that Urbach tail is the most significant difference I see (beside the slight difference in the definition of the Lorentz model). I would proceed step-wise, unless for you is easy and fast to implement the Wollam submodule.
Hey, no unfortunately we would also need to implement the models by hand. I was rather asking if it would be beneficial for you in the long term to have a special module from which you can access the exact same function as Woollam provides.

It would also be nice if you would contribute your model as soon as you get it working.
Would implementing a "cauchy_urbach" dispersion with n, k given by Fujiwara's eq. 7.6a, 7.6b a possibility?
Hi Ruggero, 
I appreciate all of your feedback and am very interested how pyelli compares with the woolam software.
I can add the CauchyUrbach dispersion.

Marius
This should work for now. I will include it in the package, but writing tests and documentation takes some more time.

    import elli
    import numpy as np

    class CauchyUrbach(elli.Dispersion):
        r"""Cauchy dispersion, with an Urbach Tail absorption.

        Single parameters:
            :n0: Defaults to 1.5.
            :B: Defaults to 0. Unit in 1/eV\ :sup:`2`.
            :C: Defaults to 0. Unit in 1/eV\ :sup:`4`.
            :D: Defaults to 0.
            :Eg: Defaults to 0. Unit in eV.
            :Eu: Defaults to 1. Unit in eV.
    
        Repeated parameters:
            --

        Output:
        """

        single_params_template = {"n0": 1.5, "B": 0, "C": 0, "D": 0, "Eg": 0, "Eu": 1}
        rep_params_template = {}

        def dielectric_function(self, lbda):
            energy = elli.utils.conversion_wavelength_energy(lbda)
            refr_index = (
                self.single_params.get("n0")
                + self.single_params.get("B") * energy**2
                + self.single_params.get("C") * energy**4
                + 1j
                * self.single_params.get("D")
                * np.exp(
                    (energy - self.single_params.get("Eg")) / self.single_params.get("Eu")
                )
            )
            return refr_index**2

Fix patch:
diff --git a/docs/dispersions.rst b/docs/dispersions.rst
index 13ffb0a3..69a32e3e 100644
--- a/docs/dispersions.rst
+++ b/docs/dispersions.rst
@@ -69,6 +69,15 @@ Cauchy
    fig.data[1].visible = "legendonly"
    fig.update_layout(title="Cauchy dispersion with n0=1.45 and n1=36")
 
+.. autoclass:: elli.dispersions.CauchyUrbach
+
+.. plotly::
+
+   fig = elli.CauchyUrbach(n0=1.45, B=0.005, D=0.0001).get_dielectric_df().plot(backend="plotly")
+   fig.update_xaxes(title="Wavelength (nm)")
+   fig.update_yaxes(title="Dielectric function")
+   fig.update_layout(title="CauchyUrbach dispersion with n0=1.45, B=0.005, D=0.0001, Eg=2 and Eu=0.5")
+
 .. autoclass:: elli.dispersions.CauchyCustomExponent
 
 Sellmeier
diff --git a/src/elli/dispersions/__init__.py b/src/elli/dispersions/__init__.py
index 16e3f253..a29bf0a1 100644
--- a/src/elli/dispersions/__init__.py
+++ b/src/elli/dispersions/__init__.py
@@ -1,6 +1,7 @@
 # Encoding: utf-8
 from .cauchy import Cauchy
 from .cauchy_custom import CauchyCustomExponent
+from .cauchy_urbach import CauchyUrbach
 from .constant_refractive_index import ConstantRefractiveIndex
 from .drude_energy import DrudeEnergy
 from .drude_resistivity import DrudeResistivity
diff --git a/src/elli/dispersions/cauchy_urbach.py b/src/elli/dispersions/cauchy_urbach.py
new file mode 100644
index 00000000..58564c77
--- /dev/null
+++ b/src/elli/dispersions/cauchy_urbach.py
@@ -0,0 +1,49 @@
+# Encoding: utf-8
+"""Cauchy dispersion, with Urbach tail."""
+import numpy as np
+import numpy.typing as npt
+
+from .base_dispersion import IndexDispersion
+from ..utils import conversion_wavelength_energy
+
+
+class CauchyUrbach(IndexDispersion):
+    r"""Cauchy dispersion, with an Urbach Tail absorption.
+
+    Single parameters:
+        :n0: Defaults to 1.5.
+        :B: Defaults to 0. Unit in 1/eV\ :sup:`2`.
+        :C: Defaults to 0. Unit in 1/eV\ :sup:`4`.
+        :D: Defaults to 0.
+        :Eg: Defaults to 0. Unit in eV.
+        :Eu: Defaults to 1. Unit in eV.
+
+    Repeated parameters:
+        --
+
+    Output:
+        .. math::
+            n(E) =
+            \boldsymbol{n_0} + \boldsymbol{B} E^2 + \boldsymbol{C} E^4
+            + i \boldsymbol{D} \exp (\frac{E - \boldsymbol{E_g}}{\boldsymbol{E_u}})
+
+    References:
+        * Fujiwara: Spectroscopic Ellipsometry: Principles and Applications,
+          John Wiley & Sons Ltd, 2007, p. 258
+    """
+
+    single_params_template = {"n0": 1.5, "B": 0, "C": 0, "D": 0, "Eg": 2, "Eu": 0.5}
+    rep_params_template = {}
+
+    def refractive_index(self, lbda: npt.ArrayLike) -> npt.NDArray:
+        energy = conversion_wavelength_energy(lbda)
+        return (
+            self.single_params.get("n0")
+            + self.single_params.get("B") * energy**2
+            + self.single_params.get("C") * energy**4
+            + 1j
+            * self.single_params.get("D")
+            * np.exp(
+                (energy - self.single_params.get("Eg")) / self.single_params.get("Eu")
+            )
+        )


Test patch:
diff --git a/tests/create_dispersion_prototypes.py b/tests/create_dispersion_prototypes.py
index c46ea725..c040424a 100644
--- a/tests/create_dispersion_prototypes.py
+++ b/tests/create_dispersion_prototypes.py
@@ -16,6 +16,7 @@ def execute_and_save(dispersion, identifier, rep_params, *args, **kwargs):
 def loop_dispersions_default():
     dispersions = [
         "Cauchy",
+        "CauchyUrbach",
         "DrudeEnergy",
         "DrudeResistivity",
         "Gaussian",
@@ -47,6 +48,18 @@ def loop_dispersions_custom_values():
             },
             "rep_params": [],
         },
+        {
+            "name": "CauchyUrbach",
+            "single_params": {
+                "n0": 1.5,
+                "B": 0.005,
+                "C": 0.0001,
+                "D": 0.0001,
+                "Eg": 3,
+                "Eu": 0.4,
+            },
+            "rep_params": [],
+        },
         {
             "name": "DrudeEnergy",
             "single_params": {"A": 100, "gamma": 0.5},
diff --git a/tests/test_dispersions.py b/tests/test_dispersions.py
index fedc8e68..3ddb107c 100644
--- a/tests/test_dispersions.py
+++ b/tests/test_dispersions.py
@@ -49,6 +49,7 @@ def test_regression_dispersions_default(datadir):
     """Test dispersions against their prior values"""
     dispersions = [
         "Cauchy",
+        "CauchyUrbach",
         "DrudeEnergy",
         "DrudeResistivity",
         "Gaussian",
@@ -85,6 +86,18 @@ def test_regression_dispersions_custom_values(datadir):
             },
             "rep_params": [],
         },
+        {
+            "name": "CauchyUrbach",
+            "single_params": {
+                "n0": 1.5,
+                "B": 0.005,
+                "C": 0.0001,
+                "D": 0.0001,
+                "Eg": 3,
+                "Eu": 0.4,
+            },
+            "rep_params": [],
+        },
         {
             "name": "DrudeEnergy",
             "single_params": {"A": 100, "gamma": 0.5},
diff --git a/tests/test_dispersions/CauchyUrbach_custom_values.csv b/tests/test_dispersions/CauchyUrbach_custom_values.csv
new file mode 100644
index 00000000..2e596514
--- /dev/null
+++ b/tests/test_dispersions/CauchyUrbach_custom_values.csv
@@ -0,0 +1,501 @@
+Wavelength,ϵ1,ϵ2
+400.0,2.425084410892506,0.0003995196444084635
+401.2024048096192,2.4238460243760045,0.00039024850526549757
+402.40480961923845,2.4226210653384372,0.0003812464248346464
+403.60721442885773,2.4214093378039085,0.0003725042038628299
+404.80961923847696,2.4202106493776196,0.00036401300187845556
+406.0120240480962,2.4190248111675676,0.00035576432156120155
+407.2144288577154,2.417851637708252,0.00034774999386113657
+408.4168336673347,2.4166909468862863,0.00033996216382807705
+409.6192384769539,2.415542559867901,0.00033239327711429695
+410.82164328657313,2.4144063010282597,0.00032503606711575854
+412.02404809619236,2.4132819978825437,0.0003178835427189899
+413.22645290581164,2.412169481018753,0.00031092897662255233
+414.42885771543087,2.4110685840321824,0.00030416589420376064
+415.6312625250501,2.409979143461512,0.0002975880629029325
+416.8336673346693,2.4089009987264838,0.0002911894820989784
+418.0360721442886,2.407833992067099,0.00028496437345155583
+419.2384769539078,2.4067779684843136,0.0002789071716863682
+420.44088176352705,2.4057327756821816,0.0002730125158014616
+421.64328657314627,2.4046982640114027,0.00026727524067356265
+422.84569138276555,2.4036742864142395,0.00026169036904462745
+424.0480961923848,2.4026606983707706,0.0002562531038698347
+425.250501002004,2.4016573578464304,0.00025095882100925127
+426.4529058116232,2.4006641252408145,0.0002458030622463574
+427.6553106212425,2.3996808633377134,0.00024078152861748325
+428.85771543086173,2.398707437256324,0.00023589007403707014
+430.06012024048096,2.3977437144036364,0.00023112469920445066
+431.2625250501002,2.396789564427939,0.0002264815457785926
+432.46492985971946,2.395844859173425,0.00022195689080794972
+433.6673346693387,2.394909472635864,0.00021754714140324522
+434.8697394789579,2.393983280919319,0.00021324882964162022
+436.07214428857714,2.3930661621938656,0.00020905860769119292
+437.2745490981964,2.392157996654313,0.00020497324314562557
+438.47695390781564,2.391258666479861,0.00020098961455883028
+439.67935871743487,2.3903680557947102,0.00019710470717044013
+440.8817635270541,2.3894860506295763,0.00019331560881315947
+442.0841683366734,2.3886125388840767,0.0001896195059935407
+443.2865731462926,2.387747410290003,0.00018601368013816954
+444.4889779559118,2.38689055637541,0.00018249550399763333
+445.69138276553105,2.386041870429537,0.00017906243820103995
+446.8937875751503,2.38520124746852,0.00017571202795419456
+448.09619238476955,2.3843685842018822,0.00017244189987490464
+449.2985971943888,2.383543778999777,0.00016924975895918492
+450.501002004008,2.3827267318609713,0.00016613338567245283
+451.7034068136273,2.381917344381545,0.00016309063316009126
+452.9058116232465,2.3811155197242897,0.000160119424572022
+454.10821643286573,2.380321162588794,0.0001572177504962041
+455.31062124248496,2.3795341791821807,0.00015438366649621002
+456.51302605210424,2.3787544771905087,0.00015161529074826543
+457.71543086172346,2.3779819657507915,0.00014891080177336624
+458.9178356713427,2.3772165554236384,0.00014626843626028765
+460.1202404809619,2.3764581581664985,0.00014368648697550635
+461.32264529058114,2.37570668730748,0.00014116330075624082
+462.5250501002004,2.3749620575197503,0.00013869727658299828
+463.72745490981964,2.374224184796485,0.00013628686372818145
+464.92985971943887,2.3734929864263665,0.0001339305599774755
+466.13226452905815,2.372768380969605,0.0001316269099208871
+467.3346693386774,2.3720502882344796,0.00012937450331044836
+468.5370741482966,2.371338629254383,0.00012717197348174634
+469.7394789579158,2.370633326265356,0.0001250179958365616
+470.94188376753505,2.3699343026841047,0.00012291128638402743
+472.1442885771543,2.3692414830864763,0.00012085060033784321
+473.34669338677355,2.368554793186407,0.00011883473076718248
+474.5490981963928,2.367874159815299,0.00011686250729904725
+475.75150300601206,2.36719951090184,0.00011493279486992254
+476.9539078156313,2.366530775452253,0.00011304449252468005
+478.1563126252505,2.3658678835309432,0.00011119653226077456
+479.35871743486973,2.3652107662415665,0.00010938787791586137
+480.56112224448896,2.3645593557084816,0.0001076175240970515
+481.76352705410824,2.3639135850585946,0.00010588449515009605
+482.96593186372746,2.3632733884035715,0.00010418784416687117
+484.1683366733467,2.3626387008224263,0.00010252665202960254
+485.37074148296597,2.3620094583444615,0.00010090002649034312
+486.5731462925852,2.3613855979325633,9.930710128427809e-05
+487.7755511022044,2.360767057466836,9.774703527549488e-05
+488.97795591182364,2.360153775728568,9.621901163391793e-05
+490.18036072144287,2.359545692384535,9.47222370421608e-05
+491.38276553106215,2.358942747971603,9.325594093110578e-05
+492.5851703406814,2.3583448838816654,9.181937474306863e-05
+493.7875751503006,2.357752042346864,9.041181122145981e-05
+494.9899799599199,2.35716416642512,8.903254372589708e-05
+496.1923847695391,2.356581199985951,8.768088557176871e-05
+497.3947895791583,2.35600308769657,8.635616939329287e-05
+498.59719438877755,2.3554297750082647,8.505774652915578e-05
+499.7995991983968,2.3548612081430447,8.378498642984882e-05
+501.00200400801606,2.354297334080562,8.253727608586883e-05
+502.2044088176353,2.353738100545274,8.131401947597296e-05
+503.4068136272545,2.3531834559938787,8.01146370347165e-05
+504.6092184368738,2.3526333496029808,7.89385651385371e-05
+505.811623246493,2.352087731257009,7.778525560967523e-05
+507.01402805611224,2.3515465515363694,7.665417523725078e-05
+508.21643286573146,2.351009761705825,7.554480531484775e-05
+509.4188376753507,2.3504773137031054,7.445664119398027e-05
+510.62124248496997,2.349949160127737,7.338919185284242e-05
+511.8236472945892,2.3494252542300837,7.234197947976847e-05
+513.0260521042085,2.348905549900611,7.131453907085104e-05
+514.2284569138277,2.3483900016593453,7.030641804119179e-05
+515.4308617234469,2.347878564645537,6.931717584927487e-05
+516.6332665330661,2.347371194607529,6.834638363397866e-05
+517.8356713426854,2.3468678478928093,6.739362386375891e-05
+519.0380761523046,2.3463684814382604,6.64584899975546e-05
+520.2404809619238,2.345873052760585,6.554058615698627e-05
+521.442885771543,2.3453815199469252,6.463952680943513e-05
+522.6452905811623,2.3448938416456464,6.375493646160536e-05
+523.8476953907816,2.3444099770573,6.288644936318817e-05
+525.0501002004008,2.3439298859257605,6.203370922026446e-05
+526.2525050100201,2.3434535285295164,6.11963689180907e-05
+527.4549098196393,2.342980865673139,6.03740902529342e-05
+528.6573146292585,2.342511858678896,5.9566543672631476e-05
+529.8597194388777,2.3420464693785306,5.87734080255576e-05
+531.062124248497,2.341584660105187,5.799437031770799e-05
+532.2645290581163,2.341126393685491,5.72291254776047e-05
+533.4669338677355,2.340671633431767,5.647737612874843e-05
+534.6693386773547,2.3402203431344097,5.573883236935224e-05
+535.871743486974,2.339772487054387,5.5013211559100076e-05
+537.0741482965932,2.3393280299158845,5.4300238112682964e-05
+538.2765531062124,2.3388869368990797,5.3599643299877777e-05
+539.4789579158316,2.3384491736330526,5.291116505193937e-05
+540.681362725451,2.3380147061888237,5.2234547774086624e-05
+541.8837675350701,2.3375835010725132,5.156954216387363e-05
+543.0861723446894,2.3371555252186313,5.091590503523958e-05
+544.2885771543087,2.3367307459834836,5.027339914804581e-05
+545.4909819639279,2.336309131138695,4.9641793042908315e-05
+546.6933867735471,2.3358906488648543,4.9020860881147823e-05
+547.8957915831663,2.335475267745268,4.841038228968058e-05
+549.0981963927856,2.3350629567598262,4.781014221068395e-05
+550.3006012024048,2.334653685278977,4.721993075587362e-05
+551.5030060120241,2.334247423057812,4.663954306523806e-05
+552.7054108216433,2.333844140230248,4.606877917007969e-05
+553.9078156312626,2.3334438073033192,4.550744386021719e-05
+555.1102204408818,2.3330463951515688,4.495534655521252e-05
+556.312625250501,2.3326518750115315,4.441230117948534e-05
+557.5150300601202,2.3322602184763235,4.387812604118807e-05
+558.7174348697395,2.3318713974903194,4.335264371471544e-05
+559.9198396793587,2.331485384343921,4.2835680926729274e-05
+561.1222444889779,2.3311021516684276,4.232706844558233e-05
+562.3246492985973,2.3307216724309776,4.182664097403002e-05
+563.5270541082165,2.330343919929595,4.133423704512178e-05
+564.7294589178357,2.329968867788312,4.084969892116893e-05
+565.9318637274549,2.329596489952375,4.0372872495688266e-05
+567.1342685370741,2.329226760683537,3.990360719822602e-05
+568.3366733466934,2.3288596545554276,3.944175590196714e-05
+569.5390781563126,2.3284951464490016,3.8987174834042024e-05
+570.7414829659319,2.328133211548073,3.853972348844288e-05
+571.943887775551,2.3277738253349094,3.809926454146639e-05
+573.1462925851704,2.327416963585918,3.766566376960144e-05
+574.3486973947896,2.327062602367388,3.723878996978543e-05
+575.5511022044088,2.3267107180313245,3.681851488195189e-05
+576.7535070140281,2.3263612872113297,3.640471311379823e-05
+577.9559118236473,2.3260142868185762,3.5997262067703626e-05
+579.1583166332665,2.325669694037826,3.559604186972806e-05
+580.3607214428857,2.325327486323534,3.520093530062864e-05
+581.5631262525051,2.324987641396003,3.4811827728828976e-05
+582.7655310621243,2.3246501372376147,3.442860704528118e-05
+583.9679358717435,2.324314952089112,3.405116360016148e-05
+585.1703406813627,2.3239820644459503,3.367939014134236e-05
+586.372745490982,2.323651453054703,3.3313181754586856e-05
+587.5751503006012,2.3233230969095344,3.295243580541083e-05
+588.7775551102204,2.3229969752487247,3.2597051882563045e-05
+589.9799599198398,2.322673067551247,3.2246931743072354e-05
+591.1823647294589,2.3223513535334157,3.1901979258815426e-05
+592.3847695390782,2.3220318131455735,3.1562100364556544e-05
+593.5871743486974,2.3217144265688394,3.1227203007417494e-05
+594.7895791583167,2.3213991742119133,3.089719709773127e-05
+595.9919839679359,2.3210860367079227,3.057199446123991e-05
+597.1943887775551,2.3207749949113277,3.0251508792594965e-05
+598.3967935871743,2.320466029894877,2.9935655610121524e-05
+599.5991983967936,2.3201591229466034,2.962435221180816e-05
+600.8016032064129,2.31985425556688,2.931751763248582e-05
+602.0040080160321,2.319551409465513,2.9015072602160455e-05
+603.2064128256513,2.3192505665588885,2.8716939505465e-05
+604.4088176352706,2.318951708967157,2.8423042342197445e-05
+605.6112224448898,2.3186548190114737,2.813330668891316e-05
+606.813627254509,2.318359879211268,2.7847659661539883e-05
+608.0160320641282,2.318066872281572,2.756602987898608e-05
+609.2184368737476,2.3177757811303796,2.7288347427712474e-05
+610.4208416833667,2.3174865888560503,2.701454382723979e-05
+611.623246492986,2.3171992787447553,2.674455199656428e-05
+612.8256513026053,2.316913834267965,2.647830622145584e-05
+614.0280561122245,2.3166302390799682,2.6215742122611745e-05
+615.2304609218437,2.3163484770154437,2.5956796624642432e-05
+616.4328657314629,2.316068532087053,2.570140792586476e-05
+617.6352705410821,2.315790388483086,2.5449515468879633e-05
+618.8376753507014,2.3155140305651276,2.520105991191155e-05
+620.0400801603207,2.31523944286578,2.495598310088802e-05
+621.2424849699399,2.3149666100863993,2.4714228042238597e-05
+622.4448897795592,2.3146955170948815,2.447573887639143e-05
+623.6472945891784,2.314426148923477,2.4240460851949367e-05
+624.8496993987976,2.3141584907666384,2.400834030052527e-05
+626.0521042084168,2.313892527978903,2.3779324612218152e-05
+627.2545090180361,2.3136282460728066,2.3553362211712165e-05
+628.4569138276554,2.31336563071683,2.333040253498123e-05
+629.6593186372745,2.3131046677333704,2.3110396006581728e-05
+630.8617234468938,2.3128453430967606,2.2893294017517367e-05
+632.0641282565131,2.312587642931294,2.2679048903660202e-05
+633.2665330661323,2.312331553509302,2.246761392471215e-05
+634.4689378757515,2.312077061249242,2.225894324369222e-05
+635.6713426853707,2.3118241527138297,2.205299190693493e-05
+636.87374749499,2.3115728146081898,2.1849715824585656e-05
+638.0761523046092,2.3113230337780326,2.1649071751579513e-05
+639.2785571142285,2.311074797207869,2.1451017269090368e-05
+640.4809619238476,2.310828092019242,2.1255510766437116e-05
+641.683366733467,2.310582905468985,2.10625114234347e-05
+642.8857715430862,2.310339224947514,2.0871979193178242e-05
+644.0881763527054,2.3100970379771346,2.0683874785247626e-05
+645.2905811623247,2.309856332210383,2.049815964932223e-05
+646.4929859719439,2.3096170954283854,2.0314795959193855e-05
+647.6953907815631,2.309379315539244,2.0133746597167737e-05
+648.8977955911823,2.3091429805764454,1.9954975138840893e-05
+650.1002004008017,2.3089080786972946,1.9778445838247715e-05
+651.3026052104209,2.3086745981813723,1.9604123613363364e-05
+652.5050100200401,2.3084425274290084,1.9431974031954808e-05
+653.7074148296593,2.308211854959786,1.9261963297770887e-05
+654.9098196392786,2.307982569411062,1.909405823706212e-05
+656.1122244488978,2.3077546595365095,1.8928226285421464e-05
+657.314629258517,2.307528114204684,1.876443547493778e-05
+658.5170340681364,2.30730292239761,1.8602654421653694e-05
+659.7194388777555,2.3070790732093807,1.844285231331981e-05
+660.9218436873748,2.30685655584479,1.8284998897437506e-05
+662.124248496994,2.306635359617975,1.812906446958316e-05
+663.3266533066133,2.3064154739510787,1.7975019862005713e-05
+664.5290581162325,2.306196888372941,1.7822836432491293e-05
+665.7314629258517,2.305979592517791,1.7672486053487483e-05
+666.933867735471,2.305763576123976,1.752394110148066e-05
+668.1362725450902,2.305548829032696,1.7377174446619964e-05
+669.3386773547095,2.305335341186765,1.7232159442581334e-05
+670.5410821643286,2.3051231026293806,1.708886991666585e-05
+671.7434869739479,2.3049121035029185,1.6947280160125776e-05
+672.9458917835672,2.304702334047743,1.6807364918713367e-05
+674.1482965931864,2.3044937846010294,1.6669099383445733e-05
+675.3507014028056,2.304286445595605,1.653245918158123e-05
+676.5531062124248,2.304080307558814,1.6397420367801334e-05
+677.7555110220442,2.3038753611113836,1.6263959415593222e-05
+678.9579158316633,2.303671596966321,1.613205320882783e-05
+680.1603206412826,2.30346900592781,1.6001679033528365e-05
+681.3627254509018,2.3032675788901424,1.5872814569824932e-05
+682.5651302605211,2.303067306836643,1.5745437884089956e-05
+683.7675350701403,2.3028681808386287,1.561952742125053e-05
+684.9699398797595,2.302670192054365,1.549506199727285e-05
+686.1723446893789,2.3024733317280486,1.5372020791814686e-05
+687.374749498998,2.302277591188805,1.5250383341041703e-05
+688.5771543086173,2.302082961849686,1.5130129530603351e-05
+689.7795591182364,2.301889435206696,1.5011239588764891e-05
+690.9819639278558,2.3016970028378245,1.4893694079691036e-05
+692.184368737475,2.301505656402092,1.4777473896878234e-05
+693.3867735470942,2.3013153876386117,1.4662560256731273e-05
+694.5891783567134,2.301126188365658,1.4548934692281155e-05
+695.7915831663327,2.300938050479758,1.4436579047040569e-05
+696.993987975952,2.3007509659547836,1.4325475468993783e-05
+698.1963927855711,2.3005649268410626,1.4215606404717422e-05
+699.3987975951904,2.3003799252645005,1.4106954593629283e-05
+700.6012024048097,2.3001959534257153,1.3999503062361952e-05
+701.8036072144289,2.300013003599181,1.389323511925815e-05
+703.0060120240481,2.2998310681323852,1.3788134348984997e-05
+704.2084168336673,2.2996501394449944,1.368418460726435e-05
+705.4108216432867,2.299470210028036,1.3581370015716318e-05
+706.6132264529058,2.299291272443087,1.3479674956813435e-05
+707.8156312625251,2.2991133193214743,1.3379084068942612e-05
+709.0180360721442,2.2989363433634846,1.3279582241572682e-05
+710.2204408817636,2.298760337337591,1.3181154610524558e-05
+711.4228456913828,2.298585294079678,1.3083786553342093e-05
+712.625250501002,2.2984112064922875,1.2987463684760768e-05
+713.8276553106213,2.2982380675438705,1.289217185227237e-05
+715.0300601202405,2.29806587026805,1.2797897131783034e-05
+716.2324649298598,2.297894607762888,1.2704625823362693e-05
+717.4348697394789,2.297724273190172,1.26123444470838e-05
+718.6372745490983,2.2975548597747015,1.2521039738946948e-05
+719.8396793587174,2.297386360803592,1.2430698646891912e-05
+721.0420841683367,2.2972187696255757,1.2341308326891494e-05
+722.2444889779559,2.2970520796503284,1.2252856139126858e-05
+723.4468937875752,2.2968862843477917,1.2165329644241958e-05
+724.6492985971944,2.2967213772475077,1.207871659967568e-05
+725.8517034068136,2.296557351937963,1.1993004956069521e-05
+727.054108216433,2.2963942020659434,1.1908182853749349e-05
+728.2565130260521,2.296231921335892,1.1824238619279547e-05
+729.4589178356714,2.29607050350928,1.1741160762087519e-05
+730.6613226452906,2.2959099424039793,1.1658937971157644e-05
+731.8637274549098,2.295750231893656,1.1577559111792306e-05
+733.0661322645291,2.2955913659071525,1.149701322243909e-05
+734.2685370741483,2.295433338427898,1.1417289511582375e-05
+735.4709418837676,2.2952761434933073,1.133837735469792e-05
+736.6733466933867,2.295119775194204,1.1260266291269047e-05
+737.8757515030061,2.2949642276742406,1.1182946021862913e-05
+739.0781563126252,2.2948094951293267,1.110640640526584e-05
+740.2805611222445,2.2946555718070694,1.1030637455675884e-05
+741.4829659318638,2.2945024520062174,1.0955629339951982e-05
+742.685370741483,2.2943501300761127,1.0881372374917791e-05
+743.8877755511022,2.294198600416147,1.0807857024719487e-05
+745.0901803607214,2.2940478574752285,1.0735073898236087e-05
+746.2925851703408,2.2938978957512557,1.0663013746541162e-05
+747.4949899799599,2.293748709790591,1.0591667460414891e-05
+748.6973947895792,2.2936002941875517,1.0521026067905218e-05
+749.8997995991984,2.293452643583896,1.045108073193719e-05
+751.1022044088177,2.2933057526683234,1.038182274796929e-05
+752.3046092184369,2.2931596161759806,1.0313243541695748e-05
+753.5070140280561,2.2930142288879676,1.0245334666793931e-05
+754.7094188376755,2.2928695856308536,1.0178087802715725e-05
+755.9118236472946,2.2927256812762047,1.0111494752521995e-05
+757.1142284569139,2.2925825107401057,1.0045547440759146e-05
+758.316633266533,2.2924400689826974,9.980237911377044e-06
+759.5190380761524,2.2922983510077164,9.915558325687028e-06
+760.7214428857716,2.2921573518620355,9.851500960359688e-06
+761.9238476953908,2.2920170666352218,9.788058205461e-06
+763.12625250501,2.2918774904590844,9.72522256252641e-06
+764.3286573146293,2.2917386185072446,9.66298664267187e-06
+765.5310621242486,2.291600445994697,9.601343164741022e-06
+766.7334669338677,2.2914629681773824,9.540284953487859e-06
+767.935871743487,2.2913261803517657,9.479804937793965e-06
+769.1382765531063,2.2911900778544187,9.419896148919853e-06
+770.3406813627255,2.2910546560616103,9.360551718789324e-06
+771.5430861723447,2.2909199103888938,9.30176487830648e-06
+772.7454909819639,2.2907858362907034,9.243528955704491e-06
+773.9478957915833,2.290652429259964,9.18583737492555e-06
+775.1503006012024,2.2905196848276925,9.12868365403133e-06
+776.3527054108217,2.2903875985626088,9.07206140364326e-06
+777.5551102204408,2.290256166070755,9.015964325412148e-06
+778.7575150300602,2.2901253829951145,8.9603862105163e-06
+779.9599198396794,2.289995245015238,8.905320938187781e-06
+781.1623246492986,2.2898657478468714,8.850762474266076e-06
+782.3647294589179,2.2897368872415935,8.796704869778605e-06
+783.5671342685371,2.289608658986453,8.743142259547677e-06
+784.7695390781564,2.2894810589036094,8.690068860823082e-06
+785.9719438877755,2.2893540828499814,8.637478971940085e-06
+787.1743486973949,2.2892277267168994,8.585366971001955e-06
+788.376753507014,2.289101986429758,8.533727314586983e-06
+789.5791583166333,2.288976857947677,8.482554536478963e-06
+790.7815631262525,2.288852337263165,8.431843246421121e-06
+791.9839679358718,2.2887284204017844,8.3815881288927e-06
+793.186372745491,2.288605103421826,8.331783941907904e-06
+794.3887775551102,2.2884823824139824,8.28242551583666e-06
+795.5911823647295,2.2883602535010232,8.233507752246827e-06
+796.7935871743487,2.2882387128374826,8.18502562276739e-06
+797.995991983968,2.288117756609344,8.136974167972126e-06
+799.1983967935872,2.287997381033726,8.08934849628358e-06
+800.4008016032064,2.2878775823585835,8.042143782896564e-06
+801.6032064128257,2.2877583568623954,7.995355268721187e-06
+802.8056112224449,2.2876397008538722,7.94897825934474e-06
+804.0080160320642,2.2875216106716563,7.903008124012148e-06
+805.2104208416833,2.2874040826840303,7.857440294624696e-06
+806.4128256513027,2.287287113288627,7.812270264756546e-06
+807.6152304609218,2.2871706989121425,7.767493588688771e-06
+808.8176352705411,2.2870548360100544,7.723105880460463e-06
+810.0200400801604,2.286939521066345,7.679102812936789e-06
+811.2224448897796,2.286824750593217,7.635480116893352e-06
+812.4248496993988,2.286710521130828,7.592233580116819e-06
+813.627254509018,2.286596829247019,7.549359046521337e-06
+814.8296593186374,2.2864836715370394,7.506852415280445e-06
+816.0320641282565,2.286371044623295,7.464709639974278e-06
+817.2344689378758,2.286258945155079,7.4229267277515755e-06
+818.436873747495,2.2861473698083135,7.38149973850645e-06
+819.6392785571143,2.286036315285298,7.340424784069393e-06
+820.8416833667335,2.285925778314455,7.299698027412398e-06
+822.0440881763527,2.2858157556500798,7.259315681867861e-06
+823.246492985972,2.2857062440720948,7.2192740103610105e-06
+824.4488977955912,2.2855972403858056,7.179569324655625e-06
+825.6513026052105,2.2854887414216574,7.14019798461269e-06
+826.8537074148296,2.2853807440349985,7.101156397461921e-06
+828.056112224449,2.285273245105845,7.062441017085686e-06
+829.2585170340682,2.2851662415386436,7.0240483433152976e-06
+830.4609218436874,2.285059730262046,6.9859749212392975e-06
+831.6633266533066,2.2849537082286746,6.948217340523539e-06
+832.8657314629259,2.284848172414903,6.910772234742906e-06
+834.0681362725452,2.2847431198206296,6.873636280724349e-06
+835.2705410821643,2.2846385474690547,6.8368061979011125e-06
+836.4729458917836,2.2845344524064664,6.800278747677827e-06
+837.6753507014029,2.284430831702021,6.764050732806457e-06
+838.8777555110221,2.2843276824475334,6.728118996772651e-06
+840.0801603206413,2.284225001757262,6.692480423192511e-06
+841.2825651302605,2.2841227867676994,6.657131935219448e-06
+842.4849699398799,2.2840210346373717,6.622070494961022e-06
+843.687374749499,2.2839197425466256,6.58729310290553e-06
+844.8897795591183,2.2838189076974333,6.552796797358135e-06
+846.0921843687374,2.2837185273131886,6.518578653886495e-06
+847.2945891783568,2.28361859863851,6.48463578477549e-06
+848.496993987976,2.2835191189390445,6.4509653384911216e-06
+849.6993987975952,2.283420085501275,6.41756449915321e-06
+850.9018036072144,2.2833214956323302,6.384430486016875e-06
+852.1042084168337,2.283223346659789,6.351560552962535e-06
+853.306613226453,2.283125635931502,6.318951987994347e-06
+854.5090180360721,2.283028360815397,6.286602112746876e-06
+855.7114228456915,2.282931518699305,6.254508281999845e-06
+856.9138276553107,2.2828351069907677,6.222667883200883e-06
+858.1162324649299,2.2827391231168694,6.191078335996033e-06
+859.3186372745491,2.282643564524052,6.159737091767937e-06
+860.5210420841684,2.2825484286779396,6.128641633181545e-06
+861.7234468937876,2.282453713063169,6.097789473737224e-06
+862.9258517034068,2.2823594151832145,6.0671781573310895e-06
+864.1282565130261,2.2822655325602157,6.036805257822464e-06
+865.3306613226453,2.282172062734815,6.006668378608361e-06
+866.5330661322646,2.2820790032659866,5.976765152204765e-06
+867.7354709418838,2.2819863517308714,5.947093239834753e-06
+868.937875751503,2.281894105724616,5.91765033102313e-06
+870.1402805611223,2.2818022628602126,5.888434143197642e-06
+871.3426853707415,2.281710820768331,5.859442421296537e-06
+872.5450901803608,2.281619777097176,5.830672937382415e-06
+873.7474949899799,2.2815291295123137,5.8021234902622365e-06
+874.9498997995993,2.2814388756965283,5.773791905113352e-06
+876.1523046092184,2.2813490133496654,5.745676033115531e-06
+877.3547094188377,2.2812595401884805,5.717773751088746e-06
+878.557114228457,2.281170453946489,5.690082961136794e-06
+879.7595190380762,2.281081752373818,5.662601590296448e-06
+880.9619238476954,2.280993433237058,5.635327590192195e-06
+882.1643286573146,2.280905494319121,5.608258936696423e-06
+883.366733466934,2.280817933419094,5.581393629594891e-06
+884.5691382765531,2.2807307483520964,5.554729692257503e-06
+885.7715430861724,2.280643936949141,5.528265171314189e-06
+886.9739478957916,2.2805574970569924,5.501998136335896e-06
+888.1763527054109,2.280471426538031,5.475926679520515e-06
+889.3787575150301,2.280385723270115,5.450048915383715e-06
+890.5811623246493,2.2803003851464467,5.424362980454569e-06
+891.7835671342687,2.2802154100754355,5.398867032975925e-06
+892.9859719438878,2.2801307959805706,5.373559252609393e-06
+894.1883767535071,2.280046540800285,5.348437840144879e-06
+895.3907815631262,2.279962642487827,5.323501017214654e-06
+896.5931863727455,2.279879099011136,5.2987470260117465e-06
+897.7955911823648,2.2797959083527086,5.274174129012727e-06
+898.997995991984,2.279713068509476,5.249780608704724e-06
+900.2004008016032,2.2796305774926826,5.225564767316582e-06
+901.4028056112224,2.279548433327755,5.201524926554212e-06
+902.6052104208418,2.2794666340541885,5.177659427339892e-06
+903.8076152304609,2.2793851777254206,5.153966629555587e-06
+905.0100200400802,2.279304062408713,5.130444911790148e-06
+906.2124248496995,2.279223286185033,5.107092671090365e-06
+907.4148296593187,2.2791428471489366,5.0839083227157895e-06
+908.6172344689379,2.2790627434084523,5.0608902998972245e-06
+909.8196392785571,2.2789829730849664,5.038037053598917e-06
+911.0220440881765,2.27890353431311,5.015347052284284e-06
+912.2244488977956,2.2788244252406433,4.992818781685203e-06
+913.4268537074149,2.278745644028348,4.9704507445746984e-06
+914.6292585170341,2.2786671888499144,4.948241460543135e-06
+915.8316633266534,2.278589057891833,4.926189465777657e-06
+917.0340681362726,2.2785112493532864,4.904293312844968e-06
+918.2364729458918,2.2784337614460433,4.882551570477352e-06
+919.438877755511,2.278356592394347,4.86096282336186e-06
+920.6412825651303,2.2782797404348187,4.839525671932652e-06
+921.8436873747495,2.278203203816346,4.818238732166348e-06
+923.0460921843688,2.2781269807999873,4.7971006353805195e-06
+924.248496993988,2.278051069658862,4.7761100280350505e-06
+925.4509018036073,2.2779754686780533,4.755265571536469e-06
+926.6533066132265,2.277900176154511,4.734565942045187e-06
+927.8557114228457,2.2778251903969475,4.7140098302855225e-06
+929.058116232465,2.277750509725742,4.693595941358526e-06
+930.2605210420842,2.277676132472845,4.673322994557564e-06
+931.4629258517034,2.2776020569816793,4.65318972318656e-06
+932.6653306613227,2.277528281607047,4.633194874380934e-06
+933.867735470942,2.277454804715032,4.613337208931096e-06
+935.0701402805612,2.2773816246829126,4.59361550110856e-06
+936.2725450901804,2.2773087398990635,4.574028538494533e-06
+937.4749498997996,2.2772361487628663,4.554575121811019e-06
+938.6773547094189,2.277163849684617,4.535254064754332e-06
+939.8797595190381,2.277091841085444,4.516064193831069e-06
+941.0821643286573,2.2770201213972046,4.497004348196385e-06
+942.2845691382765,2.276948689062413,4.478073379494617e-06
+943.4869739478959,2.2768775425341405,4.459270151702211e-06
+944.6893787575151,2.276806680275938,4.440593540972888e-06
+945.8917835671343,2.2767361007617444,4.422042435485018e-06
+947.0941883767536,2.2766658024758026,4.403615735291179e-06
+948.2965931863728,2.2765957839125806,4.385312352169876e-06
+949.498997995992,2.2765260435766828,4.36713120947935e-06
+950.7014028056112,2.2764565799827707,4.349071242013479e-06
+951.9038076152304,2.2763873916554784,4.331131395859705e-06
+953.1062124248498,2.2763184771293363,4.3133106282589895e-06
+954.308617234469,2.2762498349486857,4.295607907467756e-06
+955.5110220440882,2.2761814636676054,4.278022212621757e-06
+956.7134268537075,2.276113361849828,4.260552533601865e-06
+957.9158316633267,2.276045528068666,4.243197870901773e-06
+959.1182364729459,2.2759779609069293,4.225957235497521e-06
+960.3206412825651,2.275910658956859,4.208829648718888e-06
+961.5230460921844,2.2758436208200403,4.191814142122525e-06
+962.7254509018037,2.2757768451073335,4.174909757366937e-06
+963.9278557114229,2.2757103304388013,4.158115546089148e-06
+965.1302605210421,2.275644075443632,4.141430569783104e-06
+966.3326653306614,2.2755780787600672,4.1248538996797675e-06
+967.5350701402806,2.27551233903533,4.108384616628882e-06
+968.7374749498998,2.275446854925556,4.092021810982351e-06
+969.939879759519,2.2753816250957204,4.075764582479263e-06
+971.1422845691383,2.2753166482195644,4.059612040132465e-06
+972.3446893787576,2.2752519229795323,4.043563302116732e-06
+973.5470941883768,2.275187448066698,4.027617495658459e-06
+974.749498997996,2.2751232221807,4.011773756926877e-06
+975.9519038076153,2.2750592440296717,3.996031230926747e-06
+977.1543086172345,2.274995512330175,3.980389071392529e-06
+978.3567134268537,2.274932025807133,3.96484644068402e-06
+979.559118236473,2.2748687831937664,3.949402509683366e-06
+980.7615230460922,2.274805783231527,3.934056457693523e-06
+981.9639278557115,2.274743024670035,3.918807472338085e-06
+983.1663326653307,2.27468050626701,3.903654749462469e-06
+984.36873747495,2.2746182267882156,3.888597493036414e-06
+985.5711422845692,2.2745561850073885,3.8736349150578695e-06
+986.7735470941884,2.2744943797061836,3.858766235458089e-06
+987.9759519038076,2.274432809674106,3.843990682008085e-06
+989.1783567134269,2.2743714737084546,3.829307490226301e-06
+990.3807615230461,2.27431037061426,3.814715903287531e-06
+991.5831663326654,2.2742494992042244,3.800215171933059e-06
+992.7855711422847,2.274188858298662,3.7858045543820293e-06
+993.9879759519039,2.27412844672544,3.7714833162439436e-06
+995.1903807615231,2.2740682633199216,3.7572507304324025e-06
+996.3927855711423,2.274008306924907,3.7431060770799338e-06
+997.5951903807616,2.2739485763905787,3.729048643453985e-06
+998.7975951903808,2.273889070574438,3.7150777238740203e-06
+1000.0,2.273829788341256,3.701192619629735e-06
diff --git a/tests/test_dispersions/CauchyUrbach_default.csv b/tests/test_dispersions/CauchyUrbach_default.csv
new file mode 100644
index 00000000..e1dfec3f
--- /dev/null
+++ b/tests/test_dispersions/CauchyUrbach_default.csv
@@ -0,0 +1,501 @@
+Wavelength,ϵ1,ϵ2
+400.0,2.25,0.0
+401.2024048096192,2.25,0.0
+402.40480961923845,2.25,0.0
+403.60721442885773,2.25,0.0
+404.80961923847696,2.25,0.0
+406.0120240480962,2.25,0.0
+407.2144288577154,2.25,0.0
+408.4168336673347,2.25,0.0
+409.6192384769539,2.25,0.0
+410.82164328657313,2.25,0.0
+412.02404809619236,2.25,0.0
+413.22645290581164,2.25,0.0
+414.42885771543087,2.25,0.0
+415.6312625250501,2.25,0.0
+416.8336673346693,2.25,0.0
+418.0360721442886,2.25,0.0
+419.2384769539078,2.25,0.0
+420.44088176352705,2.25,0.0
+421.64328657314627,2.25,0.0
+422.84569138276555,2.25,0.0
+424.0480961923848,2.25,0.0
+425.250501002004,2.25,0.0
+426.4529058116232,2.25,0.0
+427.6553106212425,2.25,0.0
+428.85771543086173,2.25,0.0
+430.06012024048096,2.25,0.0
+431.2625250501002,2.25,0.0
+432.46492985971946,2.25,0.0
+433.6673346693387,2.25,0.0
+434.8697394789579,2.25,0.0
+436.07214428857714,2.25,0.0
+437.2745490981964,2.25,0.0
+438.47695390781564,2.25,0.0
+439.67935871743487,2.25,0.0
+440.8817635270541,2.25,0.0
+442.0841683366734,2.25,0.0
+443.2865731462926,2.25,0.0
+444.4889779559118,2.25,0.0
+445.69138276553105,2.25,0.0
+446.8937875751503,2.25,0.0
+448.09619238476955,2.25,0.0
+449.2985971943888,2.25,0.0
+450.501002004008,2.25,0.0
+451.7034068136273,2.25,0.0
+452.9058116232465,2.25,0.0
+454.10821643286573,2.25,0.0
+455.31062124248496,2.25,0.0
+456.51302605210424,2.25,0.0
+457.71543086172346,2.25,0.0
+458.9178356713427,2.25,0.0
+460.1202404809619,2.25,0.0
+461.32264529058114,2.25,0.0
+462.5250501002004,2.25,0.0
+463.72745490981964,2.25,0.0
+464.92985971943887,2.25,0.0
+466.13226452905815,2.25,0.0
+467.3346693386774,2.25,0.0
+468.5370741482966,2.25,0.0
+469.7394789579158,2.25,0.0
+470.94188376753505,2.25,0.0
+472.1442885771543,2.25,0.0
+473.34669338677355,2.25,0.0
+474.5490981963928,2.25,0.0
+475.75150300601206,2.25,0.0
+476.9539078156313,2.25,0.0
+478.1563126252505,2.25,0.0
+479.35871743486973,2.25,0.0
+480.56112224448896,2.25,0.0
+481.76352705410824,2.25,0.0
+482.96593186372746,2.25,0.0
+484.1683366733467,2.25,0.0
+485.37074148296597,2.25,0.0
+486.5731462925852,2.25,0.0
+487.7755511022044,2.25,0.0
+488.97795591182364,2.25,0.0
+490.18036072144287,2.25,0.0
+491.38276553106215,2.25,0.0
+492.5851703406814,2.25,0.0
+493.7875751503006,2.25,0.0
+494.9899799599199,2.25,0.0
+496.1923847695391,2.25,0.0
+497.3947895791583,2.25,0.0
+498.59719438877755,2.25,0.0
+499.7995991983968,2.25,0.0
+501.00200400801606,2.25,0.0
+502.2044088176353,2.25,0.0
+503.4068136272545,2.25,0.0
+504.6092184368738,2.25,0.0
+505.811623246493,2.25,0.0
+507.01402805611224,2.25,0.0
+508.21643286573146,2.25,0.0
+509.4188376753507,2.25,0.0
+510.62124248496997,2.25,0.0
+511.8236472945892,2.25,0.0
+513.0260521042085,2.25,0.0
+514.2284569138277,2.25,0.0
+515.4308617234469,2.25,0.0
+516.6332665330661,2.25,0.0
+517.8356713426854,2.25,0.0
+519.0380761523046,2.25,0.0
+520.2404809619238,2.25,0.0
+521.442885771543,2.25,0.0
+522.6452905811623,2.25,0.0
+523.8476953907816,2.25,0.0
+525.0501002004008,2.25,0.0
+526.2525050100201,2.25,0.0
+527.4549098196393,2.25,0.0
+528.6573146292585,2.25,0.0
+529.8597194388777,2.25,0.0
+531.062124248497,2.25,0.0
+532.2645290581163,2.25,0.0
+533.4669338677355,2.25,0.0
+534.6693386773547,2.25,0.0
+535.871743486974,2.25,0.0
+537.0741482965932,2.25,0.0
+538.2765531062124,2.25,0.0
+539.4789579158316,2.25,0.0
+540.681362725451,2.25,0.0
+541.8837675350701,2.25,0.0
+543.0861723446894,2.25,0.0
+544.2885771543087,2.25,0.0
+545.4909819639279,2.25,0.0
+546.6933867735471,2.25,0.0
+547.8957915831663,2.25,0.0
+549.0981963927856,2.25,0.0
+550.3006012024048,2.25,0.0
+551.5030060120241,2.25,0.0
+552.7054108216433,2.25,0.0
+553.9078156312626,2.25,0.0
+555.1102204408818,2.25,0.0
+556.312625250501,2.25,0.0
+557.5150300601202,2.25,0.0
+558.7174348697395,2.25,0.0
+559.9198396793587,2.25,0.0
+561.1222444889779,2.25,0.0
+562.3246492985973,2.25,0.0
+563.5270541082165,2.25,0.0
+564.7294589178357,2.25,0.0
+565.9318637274549,2.25,0.0
+567.1342685370741,2.25,0.0
+568.3366733466934,2.25,0.0
+569.5390781563126,2.25,0.0
+570.7414829659319,2.25,0.0
+571.943887775551,2.25,0.0
+573.1462925851704,2.25,0.0
+574.3486973947896,2.25,0.0
+575.5511022044088,2.25,0.0
+576.7535070140281,2.25,0.0
+577.9559118236473,2.25,0.0
+579.1583166332665,2.25,0.0
+580.3607214428857,2.25,0.0
+581.5631262525051,2.25,0.0
+582.7655310621243,2.25,0.0
+583.9679358717435,2.25,0.0
+585.1703406813627,2.25,0.0
+586.372745490982,2.25,0.0
+587.5751503006012,2.25,0.0
+588.7775551102204,2.25,0.0
+589.9799599198398,2.25,0.0
+591.1823647294589,2.25,0.0
+592.3847695390782,2.25,0.0
+593.5871743486974,2.25,0.0
+594.7895791583167,2.25,0.0
+595.9919839679359,2.25,0.0
+597.1943887775551,2.25,0.0
+598.3967935871743,2.25,0.0
+599.5991983967936,2.25,0.0
+600.8016032064129,2.25,0.0
+602.0040080160321,2.25,0.0
+603.2064128256513,2.25,0.0
+604.4088176352706,2.25,0.0
+605.6112224448898,2.25,0.0
+606.813627254509,2.25,0.0
+608.0160320641282,2.25,0.0
+609.2184368737476,2.25,0.0
+610.4208416833667,2.25,0.0
+611.623246492986,2.25,0.0
+612.8256513026053,2.25,0.0
+614.0280561122245,2.25,0.0
+615.2304609218437,2.25,0.0
+616.4328657314629,2.25,0.0
+617.6352705410821,2.25,0.0
+618.8376753507014,2.25,0.0
+620.0400801603207,2.25,0.0
+621.2424849699399,2.25,0.0
+622.4448897795592,2.25,0.0
+623.6472945891784,2.25,0.0
+624.8496993987976,2.25,0.0
+626.0521042084168,2.25,0.0
+627.2545090180361,2.25,0.0
+628.4569138276554,2.25,0.0
+629.6593186372745,2.25,0.0
+630.8617234468938,2.25,0.0
+632.0641282565131,2.25,0.0
+633.2665330661323,2.25,0.0
+634.4689378757515,2.25,0.0
+635.6713426853707,2.25,0.0
+636.87374749499,2.25,0.0
+638.0761523046092,2.25,0.0
+639.2785571142285,2.25,0.0
+640.4809619238476,2.25,0.0
+641.683366733467,2.25,0.0
+642.8857715430862,2.25,0.0
+644.0881763527054,2.25,0.0
+645.2905811623247,2.25,0.0
+646.4929859719439,2.25,0.0
+647.6953907815631,2.25,0.0
+648.8977955911823,2.25,0.0
+650.1002004008017,2.25,0.0
+651.3026052104209,2.25,0.0
+652.5050100200401,2.25,0.0
+653.7074148296593,2.25,0.0
+654.9098196392786,2.25,0.0
+656.1122244488978,2.25,0.0
+657.314629258517,2.25,0.0
+658.5170340681364,2.25,0.0
+659.7194388777555,2.25,0.0
+660.9218436873748,2.25,0.0
+662.124248496994,2.25,0.0
+663.3266533066133,2.25,0.0
+664.5290581162325,2.25,0.0
+665.7314629258517,2.25,0.0
+666.933867735471,2.25,0.0
+668.1362725450902,2.25,0.0
+669.3386773547095,2.25,0.0
+670.5410821643286,2.25,0.0
+671.7434869739479,2.25,0.0
+672.9458917835672,2.25,0.0
+674.1482965931864,2.25,0.0
+675.3507014028056,2.25,0.0
+676.5531062124248,2.25,0.0
+677.7555110220442,2.25,0.0
+678.9579158316633,2.25,0.0
+680.1603206412826,2.25,0.0
+681.3627254509018,2.25,0.0
+682.5651302605211,2.25,0.0
+683.7675350701403,2.25,0.0
+684.9699398797595,2.25,0.0
+686.1723446893789,2.25,0.0
+687.374749498998,2.25,0.0
+688.5771543086173,2.25,0.0
+689.7795591182364,2.25,0.0
+690.9819639278558,2.25,0.0
+692.184368737475,2.25,0.0
+693.3867735470942,2.25,0.0
+694.5891783567134,2.25,0.0
+695.7915831663327,2.25,0.0
+696.993987975952,2.25,0.0
+698.1963927855711,2.25,0.0
+699.3987975951904,2.25,0.0
+700.6012024048097,2.25,0.0
+701.8036072144289,2.25,0.0
+703.0060120240481,2.25,0.0
+704.2084168336673,2.25,0.0
+705.4108216432867,2.25,0.0
+706.6132264529058,2.25,0.0
+707.8156312625251,2.25,0.0
+709.0180360721442,2.25,0.0
+710.2204408817636,2.25,0.0
+711.4228456913828,2.25,0.0
+712.625250501002,2.25,0.0
+713.8276553106213,2.25,0.0
+715.0300601202405,2.25,0.0
+716.2324649298598,2.25,0.0
+717.4348697394789,2.25,0.0
+718.6372745490983,2.25,0.0
+719.8396793587174,2.25,0.0
+721.0420841683367,2.25,0.0
+722.2444889779559,2.25,0.0
+723.4468937875752,2.25,0.0
+724.6492985971944,2.25,0.0
+725.8517034068136,2.25,0.0
+727.054108216433,2.25,0.0
+728.2565130260521,2.25,0.0
+729.4589178356714,2.25,0.0
+730.6613226452906,2.25,0.0
+731.8637274549098,2.25,0.0
+733.0661322645291,2.25,0.0
+734.2685370741483,2.25,0.0
+735.4709418837676,2.25,0.0
+736.6733466933867,2.25,0.0
+737.8757515030061,2.25,0.0
+739.0781563126252,2.25,0.0
+740.2805611222445,2.25,0.0
+741.4829659318638,2.25,0.0
+742.685370741483,2.25,0.0
+743.8877755511022,2.25,0.0
+745.0901803607214,2.25,0.0
+746.2925851703408,2.25,0.0
+747.4949899799599,2.25,0.0
+748.6973947895792,2.25,0.0
+749.8997995991984,2.25,0.0
+751.1022044088177,2.25,0.0
+752.3046092184369,2.25,0.0
+753.5070140280561,2.25,0.0
+754.7094188376755,2.25,0.0
+755.9118236472946,2.25,0.0
+757.1142284569139,2.25,0.0
+758.316633266533,2.25,0.0
+759.5190380761524,2.25,0.0
+760.7214428857716,2.25,0.0
+761.9238476953908,2.25,0.0
+763.12625250501,2.25,0.0
+764.3286573146293,2.25,0.0
+765.5310621242486,2.25,0.0
+766.7334669338677,2.25,0.0
+767.935871743487,2.25,0.0
+769.1382765531063,2.25,0.0
+770.3406813627255,2.25,0.0
+771.5430861723447,2.25,0.0
+772.7454909819639,2.25,0.0
+773.9478957915833,2.25,0.0
+775.1503006012024,2.25,0.0
+776.3527054108217,2.25,0.0
+777.5551102204408,2.25,0.0
+778.7575150300602,2.25,0.0
+779.9599198396794,2.25,0.0
+781.1623246492986,2.25,0.0
+782.3647294589179,2.25,0.0
+783.5671342685371,2.25,0.0
+784.7695390781564,2.25,0.0
+785.9719438877755,2.25,0.0
+787.1743486973949,2.25,0.0
+788.376753507014,2.25,0.0
+789.5791583166333,2.25,0.0
+790.7815631262525,2.25,0.0
+791.9839679358718,2.25,0.0
+793.186372745491,2.25,0.0
+794.3887775551102,2.25,0.0
+795.5911823647295,2.25,0.0
+796.7935871743487,2.25,0.0
+797.995991983968,2.25,0.0
+799.1983967935872,2.25,0.0
+800.4008016032064,2.25,0.0
+801.6032064128257,2.25,0.0
+802.8056112224449,2.25,0.0
+804.0080160320642,2.25,0.0
+805.2104208416833,2.25,0.0
+806.4128256513027,2.25,0.0
+807.6152304609218,2.25,0.0
+808.8176352705411,2.25,0.0
+810.0200400801604,2.25,0.0
+811.2224448897796,2.25,0.0
+812.4248496993988,2.25,0.0
+813.627254509018,2.25,0.0
+814.8296593186374,2.25,0.0
+816.0320641282565,2.25,0.0
+817.2344689378758,2.25,0.0
+818.436873747495,2.25,0.0
+819.6392785571143,2.25,0.0
+820.8416833667335,2.25,0.0
+822.0440881763527,2.25,0.0
+823.246492985972,2.25,0.0
+824.4488977955912,2.25,0.0
+825.6513026052105,2.25,0.0
+826.8537074148296,2.25,0.0
+828.056112224449,2.25,0.0
+829.2585170340682,2.25,0.0
+830.4609218436874,2.25,0.0
+831.6633266533066,2.25,0.0
+832.8657314629259,2.25,0.0
+834.0681362725452,2.25,0.0
+835.2705410821643,2.25,0.0
+836.4729458917836,2.25,0.0
+837.6753507014029,2.25,0.0
+838.8777555110221,2.25,0.0
+840.0801603206413,2.25,0.0
+841.2825651302605,2.25,0.0
+842.4849699398799,2.25,0.0
+843.687374749499,2.25,0.0
+844.8897795591183,2.25,0.0
+846.0921843687374,2.25,0.0
+847.2945891783568,2.25,0.0
+848.496993987976,2.25,0.0
+849.6993987975952,2.25,0.0
+850.9018036072144,2.25,0.0
+852.1042084168337,2.25,0.0
+853.306613226453,2.25,0.0
+854.5090180360721,2.25,0.0
+855.7114228456915,2.25,0.0
+856.9138276553107,2.25,0.0
+858.1162324649299,2.25,0.0
+859.3186372745491,2.25,0.0
+860.5210420841684,2.25,0.0
+861.7234468937876,2.25,0.0
+862.9258517034068,2.25,0.0
+864.1282565130261,2.25,0.0
+865.3306613226453,2.25,0.0
+866.5330661322646,2.25,0.0
+867.7354709418838,2.25,0.0
+868.937875751503,2.25,0.0
+870.1402805611223,2.25,0.0
+871.3426853707415,2.25,0.0
+872.5450901803608,2.25,0.0
+873.7474949899799,2.25,0.0
+874.9498997995993,2.25,0.0
+876.1523046092184,2.25,0.0
+877.3547094188377,2.25,0.0
+878.557114228457,2.25,0.0
+879.7595190380762,2.25,0.0
+880.9619238476954,2.25,0.0
+882.1643286573146,2.25,0.0
+883.366733466934,2.25,0.0
+884.5691382765531,2.25,0.0
+885.7715430861724,2.25,0.0
+886.9739478957916,2.25,0.0
+888.1763527054109,2.25,0.0
+889.3787575150301,2.25,0.0
+890.5811623246493,2.25,0.0
+891.7835671342687,2.25,0.0
+892.9859719438878,2.25,0.0
+894.1883767535071,2.25,0.0
+895.3907815631262,2.25,0.0
+896.5931863727455,2.25,0.0
+897.7955911823648,2.25,0.0
+898.997995991984,2.25,0.0
+900.2004008016032,2.25,0.0
+901.4028056112224,2.25,0.0
+902.6052104208418,2.25,0.0
+903.8076152304609,2.25,0.0
+905.0100200400802,2.25,0.0
+906.2124248496995,2.25,0.0
+907.4148296593187,2.25,0.0
+908.6172344689379,2.25,0.0
+909.8196392785571,2.25,0.0
+911.0220440881765,2.25,0.0
+912.2244488977956,2.25,0.0
+913.4268537074149,2.25,0.0
+914.6292585170341,2.25,0.0
+915.8316633266534,2.25,0.0
+917.0340681362726,2.25,0.0
+918.2364729458918,2.25,0.0
+919.438877755511,2.25,0.0
+920.6412825651303,2.25,0.0
+921.8436873747495,2.25,0.0
+923.0460921843688,2.25,0.0
+924.248496993988,2.25,0.0
+925.4509018036073,2.25,0.0
+926.6533066132265,2.25,0.0
+927.8557114228457,2.25,0.0
+929.058116232465,2.25,0.0
+930.2605210420842,2.25,0.0
+931.4629258517034,2.25,0.0
+932.6653306613227,2.25,0.0
+933.867735470942,2.25,0.0
+935.0701402805612,2.25,0.0
+936.2725450901804,2.25,0.0
+937.4749498997996,2.25,0.0
+938.6773547094189,2.25,0.0
+939.8797595190381,2.25,0.0
+941.0821643286573,2.25,0.0
+942.2845691382765,2.25,0.0
+943.4869739478959,2.25,0.0
+944.6893787575151,2.25,0.0
+945.8917835671343,2.25,0.0
+947.0941883767536,2.25,0.0
+948.2965931863728,2.25,0.0
+949.498997995992,2.25,0.0
+950.7014028056112,2.25,0.0
+951.9038076152304,2.25,0.0
+953.1062124248498,2.25,0.0
+954.308617234469,2.25,0.0
+955.5110220440882,2.25,0.0
+956.7134268537075,2.25,0.0
+957.9158316633267,2.25,0.0
+959.1182364729459,2.25,0.0
+960.3206412825651,2.25,0.0
+961.5230460921844,2.25,0.0
+962.7254509018037,2.25,0.0
+963.9278557114229,2.25,0.0
+965.1302605210421,2.25,0.0
+966.3326653306614,2.25,0.0
+967.5350701402806,2.25,0.0
+968.7374749498998,2.25,0.0
+969.939879759519,2.25,0.0
+971.1422845691383,2.25,0.0
+972.3446893787576,2.25,0.0
+973.5470941883768,2.25,0.0
+974.749498997996,2.25,0.0
+975.9519038076153,2.25,0.0
+977.1543086172345,2.25,0.0
+978.3567134268537,2.25,0.0
+979.559118236473,2.25,0.0
+980.7615230460922,2.25,0.0
+981.9639278557115,2.25,0.0
+983.1663326653307,2.25,0.0
+984.36873747495,2.25,0.0
+985.5711422845692,2.25,0.0
+986.7735470941884,2.25,0.0
+987.9759519038076,2.25,0.0
+989.1783567134269,2.25,0.0
+990.3807615230461,2.25,0.0
+991.5831663326654,2.25,0.0
+992.7855711422847,2.25,0.0
+993.9879759519039,2.25,0.0
+995.1903807615231,2.25,0.0
+996.3927855711423,2.25,0.0
+997.5951903807616,2.25,0.0
+998.7975951903808,2.25,0.0
+1000.0,2.25,0.0