Finish Activity 10

This commit is contained in:
Sylvain Tricot 2025-07-21 17:17:58 +02:00
parent 38c9f4a9ed
commit 444efc3320
4 changed files with 535 additions and 6 deletions

View File

@ -9,12 +9,97 @@
] ]
}, },
{ {
"cell_type": "code", "cell_type": "markdown",
"execution_count": null, "id": "1dccb5e3-1cd3-4732-a7ba-81a8a94c89dc",
"id": "526d98f6-5a18-4ed9-9870-29b08b54e073",
"metadata": {}, "metadata": {},
"outputs": [], "source": [
"source": [] "As you can see from the previous examples, a complete simulation may require several multiple scattering calculations, for instance to calculate the total intensity of a substrate or to optimize the geometry of a system. As the calculations are often time consuming, it can be useful to distribute these tasks over several processors to make the most of hardware resources.\n",
"Although MsSpec is not fully parallelized, the code does offer a number of features, which we will explore here.\n",
"\n",
"## Matrix inversion parallelization\n",
"\n",
"When available during installation, MsSpec will link with the system lapack library. It will be used to invert the matrix in the `inversion` option of the MsSpec `calculator`. To allow MsSpec to use this shared memory parallelism, you need to set the number of cores to be used in the `OMP_NUM_THREADS` environment variable.\n",
"\n",
"You can set this variable just for the execution of your script. For example:\n",
"\n",
"```sh\n",
"$ OMP_NUM_THREADS=12 python my_script.py\n",
"```\n",
"\n",
"will use 12 cores for inverting the matrix in your script.\n",
"\n",
"It is also possible to set environment variable inside your python script.\n",
"\n",
"```python\n",
"import os\n",
"\n",
"os.environ['OMP_NUM_THREADS'] = 12\n",
"```\n",
"\n",
"It may be useful for technical reasons or to use different number of cores in some parts of your script.\n",
"\n",
"## Process-based parallelism\n",
"\n",
"Another kind of parallelization used in MsSpec is multiprocessing. Quite often, you need to run different *independent* calculations. MsSpec provides a simple *looper* that can be useful for multiprocessing. Let's demonstrate it with the previous example CO/Fe(001).\n",
"\n",
"[This script](COFe_mp.py) is the multiprocessed version of the previous one. You can see that the previous nested for loops are now replaced by some declarative content (lines 63-67) and the definition of a `process` function (whose name \n",
"can be changed).\n",
"\n",
"With the `msspec.looper` package, the user define `Sweep` objects that are parameters of the calculation or of the cluster. The `process` function must accept as many arguments as parameters to sweep (+ the `**kwargs`).\n",
"\n",
"A `Looper` object is created (line 76) and the `process` function is set to its `pipeline` attribute (line 77). When MsSpec will run the `looper`, it will combine all parameters values to unique individual sets and MsSpec will distribute the calculations over the number of processors specified in the `ncpu` option.\n",
"\n",
":::{literalinclude} COFe_mp.py\n",
":lineno-start: 63\n",
":linenos: true\n",
":lines: 63-84\n",
":::\n",
"\n",
"\n",
"::::{tab-set}\n",
"\n",
":::{tab-item} <i class=\"fa-solid fa-circle-question\"></i> Quiz\n",
"In the paper discussed in {ref}`RFactor`, experimental values of the anisotropy suggest an adsorption height between 0.2 and 0.6 Å. Modify the script to add another sweep for variying the adsorption height of the CO molecule.\n",
":::\n",
"\n",
"::::"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "9da716db-069f-422b-a5fd-2c2b509eb621",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Å\n"
]
}
],
"source": [
"print('\\U0000212B')"
]
},
{
"cell_type": "markdown",
"id": "0a1fabce-c42d-4cb4-9720-bcd21ff0cd09",
"metadata": {},
"source": [
"```{toggle}\n",
"\n",
":::{literalinclude} COFe_mp_completed.py\n",
":lineno-start: 63\n",
":linenos: true\n",
":lines: 63-86\n",
":emphasize-lines: 6,7, 9,10, 18\n",
":::\n",
"\n",
"\n",
"```"
]
} }
], ],
"metadata": { "metadata": {
@ -33,7 +118,7 @@
"name": "python", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.11.13" "version": "3.11.3"
} }
}, },
"nbformat": 4, "nbformat": 4,

View File

@ -0,0 +1,96 @@
from ase import Atoms
from ase.build import add_adsorbate, bulk
from msspec.calculator import MSSPEC, RFACTOR
from msspec.utils import hemispherical_cluster
from msspec.looper import Sweep, Looper
import numpy as np
def create_cluster(height=1., theta=45, phi=0, bond_length=1.15):
# Fill the body of this function. The 'cluster' object in built according to
# values provided by the keyword arguments:
# height (in angströms): the 'z' distance between the Fe surface and the C atom
# theta and phi (in degrees): the polar and azimuthal orientation of the CP molecule
# (theta=0° aligns the molecule withe the surface normal
# phi=0° corresponds to the [100] direction of iron)
# bond_length (in angströms): the C-O distance
iron = bulk('Fe', cubic=True)
cluster = hemispherical_cluster(iron, diameter=5, planes=2, emitter_plane=1)
t = np.radians(theta)
p = np.radians(phi)
z = bond_length * np.cos(t)
x = bond_length * np.sin(t) * np.cos(p)
y = bond_length * np.sin(t) * np.sin(p)
CO=Atoms('CO',positions=[(0,0,0),(x,y,z)])
add_adsorbate(cluster,CO, height=height)
# Keep those 2 lines at the end of your function
# Store some information in the cluster object
cluster.info.update(adsorbate={'theta': theta, 'phi': phi, 'height': height,
'bond_length': bond_length})
return cluster
def compute_polar_scan(cluster, folder='calc'):
calc = MSSPEC(spectroscopy='PED', algorithm='expansion', folder=folder)
calc.set_atoms(cluster)
# SSC calculations
calc.calculation_parameters.scattering_order = 1
# Add temperature effects
[atom.set('mean_square_vibration', 0.005) for atom in cluster]
calc.calculation_parameters.vibrational_damping = 'averaged_tl'
polar_angles = np.arange(-5, 85, 0.5)
# set the Carbon as absorber and compute the polar scan
cluster.absorber = cluster.get_chemical_symbols().index('C')
data = calc.get_theta_scan(level='1s', theta=polar_angles, kinetic_energy=1202)
calc.shutdown()
return data
###############################################################################
# Main part
###############################################################################
# 1) Multiprocess calculations
theta = Sweep(key='theta', comments="The molecule tilt angle",
start=50, stop=60, step=1, unit='degree')
phi = Sweep(key='phi', comments="The molecule azimuthal angle",
values=[0,45], unit='degree')
def process(theta, phi, **kwargs):
cluster = create_cluster(theta=theta, phi=phi, height=0.6, bond_length=1.157)
i = kwargs.get('sweep_index')
data = compute_polar_scan(cluster, folder=f'calc_{i:d}')
dset = data[-1]
return dset.theta, dset.cross_section
looper = Looper()
looper.pipeline = process
df = looper.run(theta, phi, ncpu=4)
# Black magic to convert the pandas dataframe object 'df' to the
# parameters dict and the resulst list (will be easier in a future
# version ;-) ).
parameters = df.to_dict('list')
results = np.reshape(parameters.pop('output'), (df.shape[0]*2,-1))
# 2) R-Factor analysis
# Load the experimental data
exp_data = np.loadtxt('experimental_data.txt')
# Create an R-Factor calculator
rfc = RFACTOR()
rfc.set_references(exp_data[:,0], exp_data[:,1])
# Perform the R-Factor analysis
data = rfc.run(*results, **parameters)
data.view()

View File

@ -0,0 +1,98 @@
from ase import Atoms
from ase.build import add_adsorbate, bulk
from msspec.calculator import MSSPEC, RFACTOR
from msspec.utils import hemispherical_cluster
from msspec.looper import Sweep, Looper
import numpy as np
def create_cluster(height=1., theta=45, phi=0, bond_length=1.15):
# Fill the body of this function. The 'cluster' object in built according to
# values provided by the keyword arguments:
# height (in angströms): the 'z' distance between the Fe surface and the C atom
# theta and phi (in degrees): the polar and azimuthal orientation of the CP molecule
# (theta=0° aligns the molecule withe the surface normal
# phi=0° corresponds to the [100] direction of iron)
# bond_length (in angströms): the C-O distance
iron = bulk('Fe', cubic=True)
cluster = hemispherical_cluster(iron, diameter=5, planes=2, emitter_plane=1)
t = np.radians(theta)
p = np.radians(phi)
z = bond_length * np.cos(t)
x = bond_length * np.sin(t) * np.cos(p)
y = bond_length * np.sin(t) * np.sin(p)
CO=Atoms('CO',positions=[(0,0,0),(x,y,z)])
add_adsorbate(cluster,CO, height=height)
# Keep those 2 lines at the end of your function
# Store some information in the cluster object
cluster.info.update(adsorbate={'theta': theta, 'phi': phi, 'height': height,
'bond_length': bond_length})
return cluster
def compute_polar_scan(cluster, folder='calc'):
calc = MSSPEC(spectroscopy='PED', algorithm='expansion', folder=folder)
calc.set_atoms(cluster)
# SSC calculations
calc.calculation_parameters.scattering_order = 1
# Add temperature effects
[atom.set('mean_square_vibration', 0.005) for atom in cluster]
calc.calculation_parameters.vibrational_damping = 'averaged_tl'
polar_angles = np.arange(-5, 85, 0.5)
# set the Carbon as absorber and compute the polar scan
cluster.absorber = cluster.get_chemical_symbols().index('C')
data = calc.get_theta_scan(level='1s', theta=polar_angles, kinetic_energy=1202)
calc.shutdown()
return data
###############################################################################
# Main part
###############################################################################
# 1) Multiprocess calculations
theta = Sweep(key='theta', comments="The molecule tilt angle",
start=50, stop=60, step=1, unit='degree')
phi = Sweep(key='phi', comments="The molecule azimuthal angle",
values=[0,45], unit='degree')
height = Sweep(key='height', comments="The molecule adsorption height",
start=0.2, stop=0.6, num=3, unit='angström')
def process(theta, phi, height, **kwargs):
cluster = create_cluster(theta=theta, phi=phi, height=height, bond_length=1.157)
i = kwargs.get('sweep_index')
data = compute_polar_scan(cluster, folder=f'calc_{i:d}')
dset = data[-1]
return dset.theta, dset.cross_section
looper = Looper()
looper.pipeline = process
df = looper.run(theta, phi, height, ncpu=4)
# Black magic to convert the pandas dataframe object 'df' to the
# parameters dict and the resulst list (will be easier in a future
# version ;-) ).
parameters = df.to_dict('list')
results = np.reshape(parameters.pop('output'), (df.shape[0]*2,-1))
# 2) R-Factor analysis
# Load the experimental data
exp_data = np.loadtxt('experimental_data.txt')
# Create an R-Factor calculator
rfc = RFACTOR()
rfc.set_references(exp_data[:,0], exp_data[:,1])
# Perform the R-Factor analysis
data = rfc.run(*results, **parameters)
data.view()

View File

@ -0,0 +1,250 @@
# Polar angle (°) C1s/O1s Signal (a.u.)
-5.163000000000000256e+00 3.649999999999999911e-01
-4.858999999999990216e+00 3.639999999999999902e-01
-4.556000000000000050e+00 3.629999999999999893e-01
-4.251999999999999780e+00 3.619999999999999885e-01
-3.947999999999990184e+00 3.609999999999999876e-01
-3.677999999999999936e+00 3.599999999999999867e-01
-3.375000000000000000e+00 3.579999999999999849e-01
-3.104999999999999982e+00 3.569999999999999840e-01
-2.766999999999999904e+00 3.559999999999999831e-01
-2.462999999999989864e+00 3.549999999999999822e-01
-2.193000000000000060e+00 3.539999999999999813e-01
-1.991000000000000103e+00 3.529999999999999805e-01
-1.754999999999999893e+00 3.519999999999999796e-01
-1.519000000000009898e+00 3.509999999999999787e-01
-1.215000000000000080e+00 3.499999999999999778e-01
-1.012000000000000011e+00 3.499999999999999778e-01
-6.749999999999970468e-01 3.499999999999999778e-01
-4.389999999999930069e-01 3.509999999999999787e-01
-1.009999999999989934e-01 3.519999999999999796e-01
2.019999999999979867e-01 3.529999999999999805e-01
5.739999999999979563e-01 3.529999999999999805e-01
9.789999999999989821e-01 3.539999999999999813e-01
1.417000000000000037e+00 3.539999999999999813e-01
1.956999999999990081e+00 3.539999999999999813e-01
2.327999999999999847e+00 3.549999999999999822e-01
2.564999999999999947e+00 3.559999999999999831e-01
2.766999999999999904e+00 3.579999999999999849e-01
2.970000000000000195e+00 3.589999999999999858e-01
3.071000000000000174e+00 3.609999999999999876e-01
3.239999999999989999e+00 3.619999999999999885e-01
3.407999999999999918e+00 3.629999999999999893e-01
3.576999999999999957e+00 3.649999999999999911e-01
3.712000000000000188e+00 3.659999999999999920e-01
3.813000000000000167e+00 3.679999999999999938e-01
3.880999999999999783e+00 3.679999999999999938e-01
3.947999999999990184e+00 3.699999999999999956e-01
4.352999999999989988e+00 3.699999999999999956e-01
4.758000000000000007e+00 3.709999999999999964e-01
5.197000000000000064e+00 3.709999999999999964e-01
5.602000000000000313e+00 3.719999999999999973e-01
5.972999999999999865e+00 3.719999999999999973e-01
6.243000000000000327e+00 3.729999999999999982e-01
6.479000000000000092e+00 3.739999999999999991e-01
6.682000000000000384e+00 3.750000000000000000e-01
6.884000000000000341e+00 3.760000000000000009e-01
6.985000000000000320e+00 3.770000000000000018e-01
7.187999999999999723e+00 3.780000000000000027e-01
7.322999999999989740e+00 3.790000000000000036e-01
7.389999999999999680e+00 3.810000000000000053e-01
7.491999999999999993e+00 3.820000000000000062e-01
7.727999999999989988e+00 3.830000000000000071e-01
8.064999999999999503e+00 3.830000000000000071e-01
8.403000000000009351e+00 3.840000000000000080e-01
8.808000000000010488e+00 3.840000000000000080e-01
9.212999999999990308e+00 3.850000000000000089e-01
9.618000000000000327e+00 3.840000000000000080e-01
9.921000000000010033e+00 3.830000000000000071e-01
1.025900000000000034e+01 3.830000000000000071e-01
1.063000000000000078e+01 3.820000000000000062e-01
1.103500000000000014e+01 3.810000000000000053e-01
1.143999999999999950e+01 3.800000000000000044e-01
1.174399999999999977e+01 3.800000000000000044e-01
1.208099999999999952e+01 3.790000000000000036e-01
1.245199999999999996e+01 3.790000000000000036e-01
1.289100000000000001e+01 3.790000000000000036e-01
1.316099999999999959e+01 3.800000000000000044e-01
1.343099999999999916e+01 3.810000000000000053e-01
1.366699999999999982e+01 3.820000000000000062e-01
1.400399999999999956e+01 3.830000000000000071e-01
1.430799999999999983e+01 3.850000000000000089e-01
1.454400000000000048e+01 3.860000000000000098e-01
1.471299999999999919e+01 3.870000000000000107e-01
1.508399999999999963e+01 3.870000000000000107e-01
1.562400000000000055e+01 3.870000000000000107e-01
1.612999999999999901e+01 3.880000000000000115e-01
1.663700000000000045e+01 3.880000000000000115e-01
1.704200000000000159e+01 3.880000000000000115e-01
1.744699999999999918e+01 3.880000000000000115e-01
1.791900000000000048e+01 3.890000000000000124e-01
1.825600000000000023e+01 3.900000000000000133e-01
1.855999999999999872e+01 3.900000000000000133e-01
1.889799999999999969e+01 3.920000000000000151e-01
1.910000000000000142e+01 3.930000000000000160e-01
1.933599999999999852e+01 3.930000000000000160e-01
1.953900000000000148e+01 3.950000000000000178e-01
1.987600000000000122e+01 3.960000000000000187e-01
2.011199999999999832e+01 3.950000000000000178e-01
2.048400000000000176e+01 3.940000000000000169e-01
2.078699999999999903e+01 3.930000000000000160e-01
2.112500000000000000e+01 3.920000000000000151e-01
2.149599999999999866e+01 3.910000000000000142e-01
2.190099999999999980e+01 3.900000000000000133e-01
2.227199999999999847e+01 3.890000000000000124e-01
2.264300000000000068e+01 3.880000000000000115e-01
2.314999999999999858e+01 3.870000000000000107e-01
2.362199999999999989e+01 3.860000000000000098e-01
2.409400000000000119e+01 3.850000000000000089e-01
2.460099999999999909e+01 3.850000000000000089e-01
2.520799999999999841e+01 3.840000000000000080e-01
2.578200000000000003e+01 3.830000000000000071e-01
2.632199999999999918e+01 3.820000000000000062e-01
2.692899999999999849e+01 3.820000000000000062e-01
2.746900000000000119e+01 3.810000000000000053e-01
2.810999999999999943e+01 3.800000000000000044e-01
2.871799999999999997e+01 3.800000000000000044e-01
2.922400000000000020e+01 3.790000000000000036e-01
2.973000000000000043e+01 3.790000000000000036e-01
3.016900000000000048e+01 3.780000000000000027e-01
3.067500000000000071e+01 3.770000000000000018e-01
3.128200000000000003e+01 3.770000000000000018e-01
3.155199999999999960e+01 3.780000000000000027e-01
3.195700000000000074e+01 3.800000000000000044e-01
3.219299999999999784e+01 3.820000000000000062e-01
3.246300000000000097e+01 3.840000000000000080e-01
3.280100000000000193e+01 3.850000000000000089e-01
3.324000000000000199e+01 3.870000000000000107e-01
3.354299999999999926e+01 3.890000000000000124e-01
3.388100000000000023e+01 3.900000000000000133e-01
3.431900000000000261e+01 3.920000000000000151e-01
3.469100000000000250e+01 3.940000000000000169e-01
3.502799999999999869e+01 3.960000000000000187e-01
3.546699999999999875e+01 3.970000000000000195e-01
3.580400000000000205e+01 3.990000000000000213e-01
3.610799999999999699e+01 4.010000000000000231e-01
3.637800000000000011e+01 4.030000000000000249e-01
3.661399999999999721e+01 4.040000000000000258e-01
3.691799999999999926e+01 4.060000000000000275e-01
3.722200000000000131e+01 4.079999999999999738e-01
3.742399999999999949e+01 4.099999999999999756e-01
3.762700000000000244e+01 4.109999999999999765e-01
3.779500000000000171e+01 4.119999999999999774e-01
3.803099999999999881e+01 4.139999999999999791e-01
3.830100000000000193e+01 4.149999999999999800e-01
3.850399999999999778e+01 4.159999999999999809e-01
3.867300000000000182e+01 4.179999999999999827e-01
3.890899999999999892e+01 4.189999999999999836e-01
3.921300000000000097e+01 4.199999999999999845e-01
3.938100000000000023e+01 4.209999999999999853e-01
3.965100000000000335e+01 4.229999999999999871e-01
3.988799999999999812e+01 4.239999999999999880e-01
4.009000000000000341e+01 4.249999999999999889e-01
4.039399999999999835e+01 4.259999999999999898e-01
4.073100000000000165e+01 4.269999999999999907e-01
4.103499999999999659e+01 4.279999999999999916e-01
4.130499999999999972e+01 4.299999999999999933e-01
4.160900000000000176e+01 4.309999999999999942e-01
4.187899999999999778e+01 4.319999999999999951e-01
4.221600000000000108e+01 4.329999999999999960e-01
4.248599999999999710e+01 4.329999999999999960e-01
4.275600000000000023e+01 4.339999999999999969e-01
4.295799999999999841e+01 4.349999999999999978e-01
4.322800000000000153e+01 4.359999999999999987e-01
4.346500000000000341e+01 4.380000000000000004e-01
4.376800000000000068e+01 4.390000000000000013e-01
4.403799999999999670e+01 4.400000000000000022e-01
4.424099999999999966e+01 4.420000000000000040e-01
4.444299999999999784e+01 4.430000000000000049e-01
4.461200000000000188e+01 4.440000000000000058e-01
4.478099999999999881e+01 4.450000000000000067e-01
4.494899999999999807e+01 4.460000000000000075e-01
4.521900000000000119e+01 4.470000000000000084e-01
4.545600000000000307e+01 4.480000000000000093e-01
4.582699999999999818e+01 4.480000000000000093e-01
4.619800000000000040e+01 4.480000000000000093e-01
4.650200000000000244e+01 4.490000000000000102e-01
4.683899999999999864e+01 4.490000000000000102e-01
4.724399999999999977e+01 4.500000000000000111e-01
4.751400000000000290e+01 4.510000000000000120e-01
4.775000000000000000e+01 4.510000000000000120e-01
4.808800000000000097e+01 4.520000000000000129e-01
4.852600000000000335e+01 4.530000000000000138e-01
4.886399999999999721e+01 4.540000000000000147e-01
4.923499999999999943e+01 4.540000000000000147e-01
4.964000000000000057e+01 4.540000000000000147e-01
5.001100000000000279e+01 4.530000000000000138e-01
5.034899999999999665e+01 4.530000000000000138e-01
5.071999999999999886e+01 4.540000000000000147e-01
5.102400000000000091e+01 4.540000000000000147e-01
5.136099999999999710e+01 4.550000000000000155e-01
5.173199999999999932e+01 4.560000000000000164e-01
5.210300000000000153e+01 4.570000000000000173e-01
5.254200000000000159e+01 4.580000000000000182e-01
5.281199999999999761e+01 4.580000000000000182e-01
5.314999999999999858e+01 4.580000000000000182e-01
5.352100000000000080e+01 4.570000000000000173e-01
5.382500000000000284e+01 4.570000000000000173e-01
5.422899999999999920e+01 4.570000000000000173e-01
5.466799999999999926e+01 4.570000000000000173e-01
5.503900000000000148e+01 4.580000000000000182e-01
5.541100000000000136e+01 4.580000000000000182e-01
5.581600000000000250e+01 4.600000000000000200e-01
5.618699999999999761e+01 4.600000000000000200e-01
5.655799999999999983e+01 4.600000000000000200e-01
5.696300000000000097e+01 4.600000000000000200e-01
5.743500000000000227e+01 4.590000000000000191e-01
5.794200000000000017e+01 4.590000000000000191e-01
5.848100000000000165e+01 4.600000000000000200e-01
5.912299999999999756e+01 4.600000000000000200e-01
5.946000000000000085e+01 4.590000000000000191e-01
5.986500000000000199e+01 4.590000000000000191e-01
6.013499999999999801e+01 4.580000000000000182e-01
6.040500000000000114e+01 4.560000000000000164e-01
6.074199999999999733e+01 4.550000000000000155e-01
6.107999999999999829e+01 4.540000000000000147e-01
6.138400000000000034e+01 4.530000000000000138e-01
6.185600000000000165e+01 4.520000000000000129e-01
6.236200000000000188e+01 4.520000000000000129e-01
6.283500000000000085e+01 4.520000000000000129e-01
6.330700000000000216e+01 4.510000000000000120e-01
6.371200000000000330e+01 4.500000000000000111e-01
6.398199999999999932e+01 4.490000000000000102e-01
6.428600000000000136e+01 4.480000000000000093e-01
6.469100000000000250e+01 4.470000000000000084e-01
6.496099999999999852e+01 4.450000000000000067e-01
6.533199999999999363e+01 4.440000000000000058e-01
6.566899999999999693e+01 4.420000000000000040e-01
6.604000000000000625e+01 4.410000000000000031e-01
6.634399999999999409e+01 4.400000000000000022e-01
6.674899999999999523e+01 4.380000000000000004e-01
6.712000000000000455e+01 4.369999999999999996e-01
6.755899999999999750e+01 4.359999999999999987e-01
6.806499999999999773e+01 4.349999999999999978e-01
6.857099999999999795e+01 4.339999999999999969e-01
6.897599999999999909e+01 4.329999999999999960e-01
6.917900000000000205e+01 4.319999999999999951e-01
6.958400000000000318e+01 4.299999999999999933e-01
6.995499999999999829e+01 4.289999999999999925e-01
7.035999999999999943e+01 4.269999999999999907e-01
7.076500000000000057e+01 4.249999999999999889e-01
7.117000000000000171e+01 4.229999999999999871e-01
7.157500000000000284e+01 4.209999999999999853e-01
7.194599999999999795e+01 4.189999999999999836e-01
7.238500000000000512e+01 4.179999999999999827e-01
7.299200000000000443e+01 4.169999999999999818e-01
7.370099999999999341e+01 4.169999999999999818e-01
7.430800000000000693e+01 4.159999999999999809e-01
7.491599999999999682e+01 4.159999999999999809e-01
7.545600000000000307e+01 4.139999999999999791e-01
7.612999999999999545e+01 4.129999999999999782e-01
7.670399999999999352e+01 4.109999999999999765e-01
7.717700000000000671e+01 4.099999999999999756e-01
7.771699999999999875e+01 4.099999999999999756e-01
7.818899999999999295e+01 4.109999999999999765e-01
7.886400000000000432e+01 4.129999999999999782e-01
7.970799999999999841e+01 4.139999999999999791e-01
8.055100000000000193e+01 4.159999999999999809e-01
8.139499999999999602e+01 4.179999999999999827e-01
8.220499999999999829e+01 4.209999999999999853e-01
8.291299999999999670e+01 4.219999999999999862e-01