Commit ab92b120 authored by Alexandre Bône's avatar Alexandre Bône

Add new test configurations for the parallel transport and shooting.

parent 3c6ac02d
......@@ -13,7 +13,7 @@ from launch.estimate_longitudinal_atlas import estimate_longitudinal_atlas
from launch.estimate_longitudinal_metric_model import estimate_longitudinal_metric_model
from launch.estimate_longitudinal_metric_registration import estimate_longitudinal_metric_registration
from launch.estimate_longitudinal_registration import estimate_longitudinal_registration
from launch.run_shooting import run_shooting
from launch.compute_shooting import run_shooting
from support.utilities.general_settings import Settings
......
......@@ -37,11 +37,13 @@ def compute_parallel_transport(xml_parameters):
control_points_torch = torch.from_numpy(control_points).type(Settings().tensor_scalar_type)
initial_momenta_torch = torch.from_numpy(initial_momenta).type(Settings().tensor_scalar_type)
initial_momenta_to_transport_torch = torch.from_numpy(initial_momenta_to_transport).type(Settings().tensor_scalar_type)
initial_momenta_to_transport_torch = torch.from_numpy(initial_momenta_to_transport).type(
Settings().tensor_scalar_type)
# We start by projecting the initial momenta if they are not carried at the reference progression control points.
if need_to_project_initial_momenta:
control_points_to_transport_torch = torch.from_numpy(control_points_to_transport).type(Settings().tensor_scalar_type)
control_points_to_transport_torch = torch.from_numpy(control_points_to_transport).type(
Settings().tensor_scalar_type)
velocity = kernel.convolve(control_points_torch, control_points_to_transport_torch,
initial_momenta_to_transport_torch)
kernel_matrix = kernel.get_kernel_matrix(control_points_torch)
......@@ -66,6 +68,9 @@ def _exp_parallelize(control_points, initial_momenta, projected_momenta, xml_par
template_points = {key: torch.from_numpy(value).type(Settings().tensor_scalar_type)
for key, value in template_points.items()}
template_data = template.get_data()
template_data = {key: torch.from_numpy(value).type(Settings().tensor_scalar_type)
for key, value in template_data.items()}
geodesic = Geodesic()
geodesic.concentration_of_time_points = xml_parameters.concentration_of_time_points
......@@ -91,7 +96,7 @@ def _exp_parallelize(control_points, initial_momenta, projected_momenta, xml_par
geodesic.update()
# We write the flow of the geodesic
geodesic.write("Regression", objects_name, objects_name_extension, template, template.get_data())
geodesic.write("Regression", objects_name, objects_name_extension, template, template_data)
# Now we transport!
parallel_transport_trajectory = geodesic.parallel_transport(projected_momenta)
......@@ -108,14 +113,14 @@ def _exp_parallelize(control_points, initial_momenta, projected_momenta, xml_par
exponential.set_use_rk2_for_shoot(True)
exponential.set_use_rk2_for_flow(xml_parameters.use_rk2_for_flow)
# We save the parallel trajectory
for i, (time, cp, mom, transported_mom) in enumerate(
zip(times, control_points_traj, momenta_traj, parallel_transport_trajectory)):
# Writing the momenta/cps
write_2D_array(cp.data.numpy(), "ControlPoints_tp_{0:d}__age_{1:.2f}.txt".format(i, time))
write_3D_array(mom.data.numpy(), "Momenta_tp_{0:d}__age_{1:.2f}.txt".format(i, time))
write_3D_array(transported_mom.data.numpy(), "Transported_Momenta_tp_{0:d}__age_{1:.2f}.txt".format(i, time))
write_2D_array(cp.detach().cpu().numpy(), "ControlPoints_tp_{0:d}__age_{1:.2f}.txt".format(i, time))
write_3D_array(mom.detach().cpu().numpy(), "Momenta_tp_{0:d}__age_{1:.2f}.txt".format(i, time))
write_3D_array(transported_mom.detach().cpu().numpy(),
"Transported_Momenta_tp_{0:d}__age_{1:.2f}.txt".format(i, time))
deformed_points = geodesic.get_template_points(time)
......@@ -125,14 +130,11 @@ def _exp_parallelize(control_points, initial_momenta, projected_momenta, xml_par
exponential.set_initial_momenta(transported_mom)
exponential.update()
parallel_points = exponential.get_template_points()
parallel_data = template.get_deformed_data(parallel_points, template.get_data())
parallel_data = template.get_deformed_data(parallel_points, template_data)
names = [
objects_name[k] + "_parallel_curve_tp_{0:d}__age_{1:.2f}".format(i, time) + objects_name_extension[k]
for k in range(len(objects_name))]
template.write(names, {key: value.data.cpu().numpy() for key, value in parallel_data.items()})
template.write(names, {key: value.detach().cpu().numpy() for key, value in parallel_data.items()})
......@@ -6,34 +6,34 @@ from in_out.dataset_functions import create_template_metadata
from support.utilities.general_settings import *
import torch
def run_shooting(xml_parameters):
def run_shooting(xml_parameters):
import logging
logger = logging.getLogger(__name__)
print('[ run_shooting function ]')
print('')
"""
Create the template object
"""
t_list, t_name, t_name_extension, t_noise_variance, multi_object_attachment = \
create_template_metadata(xml_parameters.template_specifications)
template = DeformableMultiObject()
template.object_list = t_list
template.update()
"""
Reading Control points and momenta
"""
if not xml_parameters.initial_control_points is None:
control_points = read_2D_array(xml_parameters.initial_control_points)
else:
raise ArgumentError('Please specify a path to control points to perform a shooting')
if not xml_parameters.initial_momenta is None:
momenta = read_3D_array(xml_parameters.initial_momenta)
else:
......@@ -41,11 +41,15 @@ def run_shooting(xml_parameters):
_, b = control_points.shape
assert Settings().dimension == b, 'Please set the correct dimension in the model.xml file.'
momenta_torch = torch.from_numpy(momenta)
control_points_torch = torch.from_numpy(control_points)
template_points = {key: torch.from_numpy(value).type(Settings().tensor_scalar_type) for key, value in template.get_points().items()}
momenta_torch = torch.from_numpy(momenta).type(Settings().tensor_scalar_type)
control_points_torch = torch.from_numpy(control_points).type(Settings().tensor_scalar_type)
template_points = {key: torch.from_numpy(value).type(Settings().tensor_scalar_type)
for key, value in template.get_points().items()}
template_data = {key: torch.from_numpy(value).type(Settings().tensor_scalar_type)
for key, value in template.get_data().items()}
geodesic = Geodesic()
......@@ -67,14 +71,15 @@ def run_shooting(xml_parameters):
else:
geodesic.tmin = xml_parameters.tmin
assert geodesic.tmax >= geodesic.t0, 'The max time {} for the shooting should be larger than t0 {}'\
assert geodesic.tmax >= geodesic.t0, 'The max time {} for the shooting should be larger than t0 {}' \
.format(geodesic.tmax, geodesic.t0)
assert geodesic.tmin <= geodesic.t0, 'The min time for the shooting should be lower than t0.'\
assert geodesic.tmin <= geodesic.t0, 'The min time for the shooting should be lower than t0.' \
.format(geodesic.tmin, geodesic.t0)
geodesic.set_control_points_t0(control_points_torch)
geodesic.concentration_of_time_points = xml_parameters.concentration_of_time_points
geodesic.set_kernel(kernel_factory.factory(xml_parameters.deformation_kernel_type, xml_parameters.deformation_kernel_width))
geodesic.set_kernel(
kernel_factory.factory(xml_parameters.deformation_kernel_type, xml_parameters.deformation_kernel_width))
geodesic.set_use_rk2_for_shoot(xml_parameters.use_rk2_for_shoot)
geodesic.set_use_rk2_for_flow(xml_parameters.use_rk2_for_flow)
geodesic.set_template_points_t0(template_points)
......@@ -84,7 +89,7 @@ def run_shooting(xml_parameters):
geodesic.set_momenta_t0(momenta_torch)
geodesic.update()
names = [elt for elt in t_name]
geodesic.write('Shooting', names, t_name_extension, template, template.get_data(),
geodesic.write('Shooting', names, t_name_extension, template, template_data,
write_adjoint_parameters=True)
# Several shootings to compute
......@@ -93,20 +98,5 @@ def run_shooting(xml_parameters):
geodesic.set_momenta_t0(momenta_torch[i])
geodesic.update()
names = [elt for elt in t_name]
geodesic.write('Shooting' + "_" + str(i), names, t_name_extension, template, template.get_data(),
geodesic.write('Shooting' + "_" + str(i), names, t_name_extension, template, template_data,
write_adjoint_parameters=True)
<?xml version="1.0"?>
<optimization-parameters deformetrica-min-version="3.0.0">
<use-rk2>On</use-rk2>
<use-rk2-for-shoot>On</use-rk2-for-shoot>
</optimization-parameters>
1 60 2
-0.011748183300368064 -0.016604688421522414
0.0025405589962937923 -0.06597769808287936
0.04174343542696522 -0.1083713168778814
0.06371027677160972 -0.026490772634068738
-0.0333048621655612 -0.1278743436636074
0.07432841410870968 -0.05991864116020652
-0.04800919257117421 -0.055244441554593966
0.051783320363692584 0.14430732530269805
0.03404332236151453 1.2320026262454333
-0.34044509650242266 0.9687340264171198
0.16171550593830603 0.37947833885867777
-0.1884181098028632 0.13461213490328314
0.03847940300760547 0.14653672831276063
-0.1088943814251311 0.04684169977282768
0.0011955493804251087 -0.014484067741119037
0.11953917217843837 0.07329659115809713
1.2038921232411144 0.9948537890373149
0.28319705965088376 2.4789620406104236
-0.01174818330036804 -0.016604688421522375
0.0025405589962937646 -0.06597769808287944
0.041743435426964945 -0.10837131687788126
0.06371027677161015 -0.026490772634068932
-0.03330486216556124 -0.1278743436636072
0.07432841410870959 -0.05991864116020644
-0.048009192571174225 -0.055244441554593925
0.05178332036369211 0.1443073253026979
0.034043322361514916 1.232002626245432
-0.34044509650242333 0.9687340264171196
0.16171550593830647 0.37947833885867754
-0.1884181098028623 0.13461213490328158
0.03847940300760612 0.14653672831276052
-0.10889438142513107 0.04684169977282762
0.001195549380425022 -0.01448406774111876
0.11953917217843807 0.07329659115809711
1.203892123241114 0.9948537890373149
0.2831970596508836 2.4789620406104236
-3.0629546349886083 2.7967311043241363
-3.7081019312661954 0.13193771125013282
2.3481120906860737 1.3809903776053694
-1.1652975039511428 0.10416184425270103
0.07643198588301436 1.0638823526036547
-0.01653993796952398 0.027911834491608542
0.5724198163365342 0.01760079716094531
1.7465749240354942 -0.001812399599372655
0.29813513392877017 0.23627688959058854
-2.03899624746177 0.6943383317680263
-3.594092888825614 -2.7398695184490993
-3.7324444849336804 2.2967944420454574
1.0402180928295945 -0.823365361815898
-0.15807354327386192 0.3903833146519197
0.649525537198695 0.006926891298897064
0.38801994919650695 -0.11273408838303528
1.7573918438944505 -1.5597788132000776
0.3290952990173348 -2.3003559990978655
-3.7081019312661905 0.1319377112501418
2.3481120906860933 1.3809903776053556
-1.1652975039511486 0.10416184425270192
0.07643198588301393 1.0638823526036516
-0.016539937969524007 0.027911834491607307
0.5724198163365338 0.017600797160945335
1.7465749240354942 -0.001812399599372544
0.2981351339287698 0.23627688959058835
-2.0389962474617715 0.6943383317680258
-3.5940928888255845 -2.739869518449102
-3.7324444849337053 2.2967944420454787
1.040218092829608 -0.8233653618158994
-0.15807354327386602 0.39038331465192494
0.6495255371986928 0.0069268912988964815
0.3880199491965069 -0.112734088383035
1.75739184389445 -1.5597788132000767
0.3290952990173347 -2.300355999097865
-3.7068778930894135 -2.3060058816370246
-4.760899206434386 3.108183930915904
2.099598619144567 -2.761594876151088
-0.9557176059795578 0.4924614004800649
0.36912962937469573 -1.0722476746774496
0.26162207881019706 -0.047377128574106586
-0.023405036028888493 0.06801139404895026
0.45552000686680605 -0.7080419571244504
0.12496018919372429 -3.0311715826071217
-1.453261169168329 -2.4250326609820694
-0.8730644632138282 -0.8576565901492366
-0.03999536980563756 -0.9460760599888381
-0.0622135275063847 0.18120344140341058
-0.11959202075974038 -0.3560279821464034
-0.06614607468052419 0.06459188774674599
-0.02440655706824834 0.046190590148559064
-0.0066308114088956815 0.15262039452047935
0.07592354414136578 0.2242385166512441
0.15284416457281771 -0.010370571583031063
0.09768880989048512 0.006816960897103361
-0.020016848030629274 0.25050278885783606
0.052536560154035725 0.01612279402356541
0.015832291333532915 0.11356305067273852
0.01962640505322855 -0.0033874302541329563
-4.760899206434406 3.1081839309159047
2.099598619144551 -2.7615948761511153
-0.9557176059795709 0.4924614004800787
0.36912962937469684 -1.0722476746774483
0.26162207881019595 -0.047377128574106586
-0.023405036028888535 0.06801139404895026
0.45552000686680594 -0.7080419571244505
0.12496018919372451 -3.031171582607122
-1.4532611691683295 -2.425032660982069
-0.8730644632138262 -0.8576565901492357
-0.03999536980563759 -0.9460760599888359
-0.06221352750638451 0.18120344140341163
-0.11959202075974038 -0.35602798214640274
-0.06614607468052403 0.0645918877467459
-0.024406557068248277 0.04619059014855903
-0.00663081140889564 0.15262039452047937
0.07592354414136566 0.22423851665124517
0.1528441645728173 -0.01037057158303123
0.09768880989048476 0.006816960897103874
-0.020016848030629066 0.2505027888578358
0.052536560154035655 0.01612279402356527
0.015832291333532866 0.11356305067273838
0.01962640505322846 -0.0033874302541328487
......@@ -56,7 +56,7 @@
0.056404420460093384 0.1393496061786578
0.10681344825343195 -0.024372710028854383
0.07582425360346261 0.08948592572509566
0.024384023150136616 0.05536484684069781
0.024384023150136394 0.05536484684069781
0.032172903741810935 0.09547959689470437
0.017958644694071296 0.07248441726818794
0.01082723016267819 0.016840371559018193
1 60 2
-0.008625393627710483 -0.012304770800382725
-0.007591353442151175 -0.0562767996811854
0.036515353553550636 -0.08353559001157015
0.0300608824550176 -0.03155647479964861
0.01107418512097819 -0.08397914478720424
0.05021542508316053 -0.02000431219905023
-0.048461632375360955 -0.05642070612069532
0.07113700260090357 0.12799988788010527
0.007433193409625852 1.0227114283288856
-0.3126769753734328 0.8202838239879175
-0.006501272983435183 0.2545140572928222
-0.058339212484924685 0.12220753009870748
-0.008625393627710483 -0.012304770800382728
-0.007591353442151207 -0.05627679968118539
0.036515353553550636 -0.08353559001157007
0.030060882455017826 -0.031556474799648404
0.011074185120978193 -0.08397914478720411
0.05021542508316047 -0.02000431219905026
-0.04846163237536096 -0.056420706120695385
0.07113700260090358 0.12799988788010527
0.00743319340962597 1.0227114283288856
-0.3126769753734337 0.8202838239879175
-0.006501272983436057 0.2545140572928221
-0.058339212484924685 0.12220753009870745
0.013137651543241646 0.1588666695999048
-0.07960618277386655 0.05695976326191461
0.0017023240992468484 -0.020657658304538314
-0.07960618277386654 0.05695976326191461
0.0017023240992467964 -0.020657658304538536
0.1186286501059755 0.057836130819357345
1.0553061340171404 0.9879076218598717
0.130556082660266 2.6805972316820004
-3.1016807703415687 2.6161183414162275
-2.597213314885226 -0.35267185285041197
0.23933466756471533 0.6891375376901747
-0.41747528272341144 0.6733886152833515
-0.20277559944892815 0.8941163228508466
0.006355364577604786 0.08040952479891957
0.5495628180484136 0.011682487481530182
1.7761987926618767 0.031110568927105037
0.2952373679135675 0.3168376792989467
-2.6960883566339926 0.6035256995798269
-3.9467663877485744 -1.0436076612459906
-0.6081612381298107 0.5175112343981607
-0.01347905037152472 -0.06396243723433548
0.07613166244897906 0.33743546947980285
0.5931316779952149 0.02671603500118075
0.3634906856607957 -0.12487241729335687
1.62484935210938 -1.5839935654679023
1.0553061340171406 0.9879076218598719
0.13055608266026605 2.680597231682001
-3.1016807703415683 2.616118341416228
-2.597213314885226 -0.3526718528504138
0.23933466756471355 0.6891375376901783
-0.41747528272341233 0.6733886152833533
-0.20277559944892837 0.8941163228508457
0.006355364577605008 0.08040952479891958
0.5495628180484136 0.011682487481530071
1.7761987926618765 0.031110568927105064
0.2952373679135676 0.3168376792989467
-2.6960883566339917 0.603525699579827
-3.946766387748575 -1.043607661245991
-0.6081612381298072 0.5175112343981574
-0.013479050371522916 -0.06396243723433659
0.07613166244897884 0.33743546947980296
0.5931316779952145 0.026716035001181096
0.3634906856607957 -0.12487241729335664
1.6248493521093805 -1.5839935654679023
0.23640258789538915 -2.7288461374802004
-3.851655693615884 -2.372805311265758
-4.010557625754448 1.8427286556018223
-0.10346963458348779 -1.0327560164193113
-0.22022059292908042 -0.4579188307125126
0.11278593821028604 -0.9582939664485399
0.26053478601336344 -0.07659717466298901
-0.02117434524749688 0.05871068409807212
0.38297664275989507 -0.6366493498000187
0.0012037018170761304 -2.617797432944649
-1.3793825573707106 -2.0033983179383226
-0.7454303231274502 -0.5961003323777125
0.02113196948811208 -0.3050295968132739
-0.03771906908007899 -0.24574264274742863
-0.12777375050545745 -0.23333618271025902
-0.04426909705131793 0.01747123078125465
-0.02156948577129854 0.04332348188768937
-0.007068676708042086 0.1274567096290323
0.05954215320179573 0.15650518049212422
0.11422581119498938 -0.03528844080968352
0.07857226638864499 0.09545963302153117
0.017396722750091805 0.07601960432858376
-3.8516556936158843 -2.372805311265758
-4.010557625754448 1.8427286556018205
-0.10346963458349134 -1.0327560164193108
-0.22022059292908208 -0.4579188307125124
0.11278593821028587 -0.958293966448539
0.26053478601336333 -0.07659717466298949
-0.021174345247496888 0.058710684098072126
0.38297664275989485 -0.6366493498000189
0.0012037018170759362 -2.617797432944649
-1.3793825573707115 -2.0033983179383226
-0.7454303231274502 -0.5961003323777117
0.02113196948811205 -0.3050295968132757
-0.03771906908007855 -0.24574264274742863
-0.1277737505054576 -0.2333361827102589
-0.04426909705131793 0.017471230781254635
-0.021569485771298483 0.04332348188768948
-0.007068676708042031 0.12745670962903233
0.059542153201795844 0.15650518049212425
0.1142258111949894 -0.03528844080968391
0.078572266388645 0.09545963302153118
0.017396722750091916 0.07601960432858354
0.03517919552322683 0.08663443669719378
0.018234947062844724 0.0761618959303137
0.011958310919969666 0.014892781626558363
0.018234947062844717 0.0761618959303137
0.011958310919969663 0.014892781626558252
1 60 2
-0.011075314738403157 -0.015574693029250684
0.0001637380796463521 -0.06360525998382645
0.04122546531982471 -0.10353614564476546
0.0547317110376617 -0.024524487423325775
-0.025785412116935927 -0.12191384033508305
0.073192462387483 -0.048357411364341074
-0.048008957073928854 -0.05573873365566424
0.05587488222364155 0.14067861755619426
0.028243086220916452 1.188957066038399
-0.3330580728167414 0.9327785337947181
0.13008176492387274 0.3596986284972929
-0.17643368877793314 0.1255085094337168
0.03980919399236332 0.15220735238806005
-0.10539039807477057 0.04822948716443235
0.0022119925527602086 -0.015725596805639085
0.1192496943531191 0.07038910083176253
1.1762461866198937 0.9946541980185442
0.26127801501584585 2.5207035380723957
-3.078049426614 2.774160185734167
-3.407209661143866 0.02293214022856177
1.607500921487815 1.144682050874703
-0.9049070247969204 0.28462497828050903
0.009698519267617042 1.0194677560715109
-0.010945236905918837 0.039901019923383366
0.5677287231170054 0.016379026805709875
1.751563743179092 0.004417796011406655
0.2984516736063676 0.24645903976979922
-0.011075314738403163 -0.015574693029250698
0.00016373807964636944 -0.06360525998382643
0.041225465319824746 -0.10353614564476535
0.05473171103766169 -0.024524487423325678
-0.025785412116935857 -0.12191384033508333
0.07319246238748302 -0.04835741136434121
-0.048008957073928826 -0.0557387336556642
0.05587488222364156 0.14067861755619435
0.028243086220916397 1.1889570660383988
-0.3330580728167415 0.9327785337947181
0.1300817649238727 0.35969862849729334
-0.17643368877793336 0.12550850943371739
0.03980919399236332 0.1522073523880601
-0.10539039807477077 0.04822948716443239
0.0022119925527602953 -0.015725596805639126
0.11924969435311915 0.07038910083176256
1.1762461866198934 0.9946541980185439
0.2612780150158458 2.5207035380723952
-3.0780494266139997 2.774160185734166
-3.407209661143866 0.02293214022856166
1.6075009214878158 1.1446820508747053
-0.9049070247969175 0.28462497828050615
0.009698519267617195 1.019467756071513
-0.01094523690591881 0.03990101992338284
0.5677287231170055 0.016379026805709847
1.751563743179092 0.004417796011406516
0.29845167360636776 0.24645903976979922
-2.1750919991227082 0.6753530414618277
-3.746111775678611 -2.242451465194808
-2.490777070214305 1.7818986484706691
0.6245356870836704 -0.6283670331605881
-0.09515029194821323 0.3900745632436697
0.6339940878733705 0.008441787302320009
0.38312417753595585 -0.1147971704803318
1.7340669059209244 -1.5656845226616842
-3.746111775678611 -2.2424514651948084
-2.4907770702143064 1.7818986484706714
0.6245356870836847 -0.6283670331605928
-0.095150291948214 0.3900745632436701
0.6339940878733723 0.008441787302319703
0.383124177535956 -0.11479717048033183
1.7340669059209244 -1.5656845226616845
0.3206263646133025 -2.3765106797104503
-3.737696337480879 -2.336293753604002
-4.55745617613161 2.7675707337651354
1.2546831671189267 -2.2895919377838756
-0.6771843949481811 0.2578191580714231
0.30826584208543295 -1.0645707401318365
0.2618282238954307 -0.04913194104154581
-0.023012378349376937 0.06565469431643228
0.44036545397536175 -0.6926315461759016
0.10078243144924398 -2.9524261191294876
-1.4404732925455592 -2.3288464423375164
-0.850289177526288 -0.8471653105239838
-0.014367831005184656 -0.7291326263025117
-0.05508117556235392 0.048306516391696086
-0.12333350833725079 -0.3155626703401153
-0.06050453636798539 0.05097108661343527
-0.023774153110523288 0.045809846635549906
-0.006509527992959438 0.14599540574968398
0.07290864362673588 0.21372539941790905
0.14378492795118525 -0.02775598902578985
0.09381985374253532 0.039673355372290726
-0.011879441256244724 0.21151911767731327
0.04823301093043322 0.03129049925610872
0.01717432962226948 0.10415075552246865
0.01761913961458581 0.001313814521122782
-3.7376963374808785 -2.3362937536040014
-4.5574561761316135 2.7675707337651367
1.2546831671189271 -2.2895919377838756
-0.6771843949481886 0.25781915807142375
0.30826584208543384 -1.0645707401318383
0.26182822389543137 -0.049131941041545196
-0.023012378349376902 0.06565469431643225
0.4403654539753617 -0.6926315461759017
0.10078243144924395 -2.952426119129487
-1.4404732925455592 -2.328846442337516
-0.8502891775262879 -0.8471653105239845
-0.014367831005184586 -0.7291326263025126
-0.05508117556235495 0.04830651639169581
-0.12333350833725112 -0.31556267034011487
-0.0605045363679855 0.05097108661343532
-0.023774153110523284 0.045809846635549926
-0.0065095279929593824 0.1459954057496839
0.07290864362673594 0.21372539941790883
0.14378492795118517 -0.02775598902579013
0.093819853742535 0.03967335537229067
-0.011879441256244766 0.2115191176773135
0.048233010930433265 0.03129049925610883
0.017174329622269453 0.10415075552246862
0.017619139614585822 0.0013138145211229017