Repository: KitwareMedical/HASI (language: python)

Issue:
CI Failures in `build-linux-python-packages`
## Overview

`build-linux-python-packages` checks for Python 3.6-3.9 are failing in `master`.

## Description

CI build script attempts to remove a DOxygen archive and fails. Could the archive location have changed in `dockcross-manylinux-download-cache-and-build-module-wheels.sh`?

Issue first appeared in [06167b](https://github.com/KitwareMedical/HASI/commit/06167bb7f78bded3fb91a6457591629c571a47f6) which made unrelated changes to pure-Python testing check.

## Expected behavior
No failures in CI.

## Observed behavior
> + rm dist/itk_boneenhancement-0.4.1-cp36-cp36m-linux_x86_64.whl
~/work/HASI/HASI
rm: cannot remove './ITKBoneEnhancement/doxygen-1.8.11.linux.bin.tar.gz': No such file or directory
Error: Process completed with exit code 1.


Discussion / hints:
Maybe the docker image was updated? If so, looking there for [a change](https://github.com/dockcross/dockcross/commits/master) is probably the best.
We can remove this line in the HASI CI configuration:

https://github.com/KitwareMedical/HASI/blob/88041b83975a77a4810f2f7c46f5b554afef5ada/.github/workflows/build-test-package.yml#L173

Fix patch:
diff --git a/examples/MeshToMeshRegistration.ipynb b/examples/MeshToMeshRegistration.ipynb
index 4adb644..e6f756a 100644
--- a/examples/MeshToMeshRegistration.ipynb
+++ b/examples/MeshToMeshRegistration.ipynb
@@ -236,7 +236,7 @@
    "outputs": [],
    "source": [
     "# Must instantiate a registration object to initialize optimizers\n",
-    "registrar = MeanSquaresRegistrar()"
+    "registrar = MeanSquaresRegistrar(verbose=True)"
    ]
   },
   {
@@ -249,12 +249,12 @@
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "bdbb3ffb7b034043b9e4e7d2ab76bb14",
+       "model_id": "39d18570592d4af9a466642a8c82e3c6",
        "version_major": 2,
        "version_minor": 0
       },
       "text/plain": [
-       "HBox(children=(Label(value='Register images'), FloatProgress(value=0.0, max=150.0)))"
+       "HBox(children=(Label(value='Register images'), FloatProgress(value=0.0, max=21.0)))"
       ]
      },
      "metadata": {},
@@ -264,7 +264,7 @@
    "source": [
     "progress = FloatProgress(\n",
     "        min=0.0,\n",
-    "        max=150.0,\n",
+    "        max=21.0,\n",
     "        step=1\n",
     "    )\n",
     "box = HBox([\n",
@@ -282,7 +282,7 @@
     {
      "data": {
       "text/plain": [
-       "0"
+       "1"
       ]
      },
      "execution_count": 16,
@@ -307,375 +307,61 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "0 0.4953344442828443 0.0\n",
-      "0 0.3679928041625301 0.0\n",
-      "0 0.3679928041625301 0.0\n",
-      "1 0.1382597111142386 0.002047170989457994\n",
-      "1 0.1382597111142386 0.002047170989457994\n",
-      "2 0.09620259423214085 0.001261876484024073\n",
-      "2 0.09620259423214085 0.001261876484024073\n",
-      "3 0.0810644365222312 0.0011402423999786182\n",
-      "3 0.0810644365222312 0.0011402423999786182\n",
-      "4 0.05506265821062781 0.0008026746053761812\n",
-      "4 0.05506265821062781 0.0008026746053761812\n",
-      "5 0.036229100368238225 0.0005999657307756083\n",
-      "5 0.036229100368238225 0.0005999657307756083\n",
-      "6 0.02201122948495042 0.0006569240263049952\n",
-      "6 0.02201122948495042 0.0006569240263049952\n",
-      "7 0.019790912974060545 0.000227595005185355\n",
-      "7 0.019790912974060545 0.000227595005185355\n",
-      "8 0.017138213201441897 0.00012848767601378967\n",
-      "8 0.017138213201441897 0.00012848767601378967\n",
-      "9 0.01643926158089219 0.00011380109594120822\n",
-      "9 0.01643926158089219 0.00011380109594120822\n",
-      "10 0.015742424102559768 0.000229305332514829\n",
-      "10 0.015742424102559768 0.000229305332514829\n",
-      "11 0.015332139820951112 9.86042590450415e-05\n",
-      "11 0.015332139820951112 9.86042590450415e-05\n",
-      "12 0.014893029866989713 9.041142269583126e-05\n",
-      "12 0.014893029866989713 9.041142269583126e-05\n",
-      "13 0.014155799479607961 8.750465542941682e-05\n",
-      "13 0.014155799479607961 8.750465542941682e-05\n",
-      "14 0.013727488501522448 8.1341387937945e-05\n",
-      "14 0.013727488501522448 8.1341387937945e-05\n",
-      "15 0.013269794609552825 0.00015860022289330145\n",
-      "15 0.013269794609552825 0.00015860022289330145\n",
-      "16 0.013082032206910437 0.00010944034907393472\n",
-      "16 0.013082032206910437 0.00010944034907393472\n",
-      "17 0.01251044810222833 8.291646063426698e-05\n",
-      "17 0.01251044810222833 8.291646063426698e-05\n",
-      "18 0.01216931779260898 9.827412298789554e-05\n",
-      "18 0.01216931779260898 9.827412298789554e-05\n",
-      "19 0.011936519135127685 5.2764813925673704e-05\n",
-      "19 0.011936519135127685 5.2764813925673704e-05\n",
-      "20 0.011692025245038271 9.881889798097749e-05\n",
-      "20 0.011692025245038271 9.881889798097749e-05\n",
-      "21 0.011584744320551963 3.0638833099466936e-05\n",
-      "21 0.011584744320551963 3.0638833099466936e-05\n",
-      "22 0.011499418044855193 5.4884179008701964e-05\n",
-      "22 0.011499418044855193 5.4884179008701964e-05\n",
-      "23 0.011408912708628424 3.96479919688926e-05\n",
-      "23 0.011408912708628424 3.96479919688926e-05\n",
-      "24 0.011261919662260091 9.409888235831367e-05\n",
-      "24 0.011261919662260091 9.409888235831367e-05\n",
-      "25 0.011192329996511602 3.236863250123196e-05\n",
-      "25 0.011192329996511602 3.236863250123196e-05\n",
-      "26 0.01105992167128116 4.378784817256321e-05\n",
-      "26 0.01105992167128116 4.378784817256321e-05\n",
-      "27 0.01088082368350916 6.434523495538358e-05\n",
-      "27 0.01088082368350916 6.434523495538358e-05\n",
-      "28 0.010978620514308769 4.499498468178417e-05\n",
-      "28 0.010834026336961896 4.499498468178417e-05\n",
-      "28 0.010834026336961896 4.499498468178417e-05\n",
-      "29 0.01054629125094956 4.888180731835083e-05\n",
-      "29 0.01054629125094956 4.888180731835083e-05\n",
-      "30 0.010472910880529568 4.556718164119873e-05\n",
-      "30 0.010472910880529568 4.556718164119873e-05\n",
-      "31 0.01034479605323999 8.209078109574368e-05\n",
-      "31 0.01034479605323999 8.209078109574368e-05\n",
-      "32 0.010264614933950623 3.137408178480389e-05\n",
-      "32 0.010264614933950623 3.137408178480389e-05\n",
-      "33 0.010204296807786969 4.733677252011162e-05\n",
-      "33 0.010204296807786969 4.733677252011162e-05\n",
-      "34 0.009992550649973385 6.0253659748602986e-05\n",
-      "34 0.009992550649973385 6.0253659748602986e-05\n",
-      "35 0.010149883592432032 6.932356875539139e-05\n",
-      "35 0.00996673510806663 6.932356875539139e-05\n",
-      "35 0.00996673510806663 6.932356875539139e-05\n",
-      "36 0.009771758775772245 6.434244422616243e-05\n",
-      "36 0.009771758775772245 6.434244422616243e-05\n",
-      "37 0.009680622126752615 4.739137088572842e-05\n",
-      "37 0.009680622126752615 4.739137088572842e-05\n",
-      "38 0.00953966160023658 5.0348316129894147e-05\n",
-      "38 0.00953966160023658 5.0348316129894147e-05\n",
-      "39 0.009452931239035978 3.669586197180567e-05\n",
-      "39 0.009452931239035978 3.669586197180567e-05\n",
-      "40 0.009375135180258657 6.112229570148756e-05\n",
-      "40 0.009375135180258657 6.112229570148756e-05\n",
-      "41 0.009288507072512043 7.426253796648828e-05\n",
-      "41 0.009288507072512043 7.426253796648828e-05\n",
-      "42 0.009236091847800328 2.786245695607031e-05\n",
-      "42 0.009236091847800328 2.786245695607031e-05\n",
-      "43 0.009203703234421849 2.6589340804209085e-05\n",
-      "43 0.009203703234421849 2.6589340804209085e-05\n",
-      "44 0.009090550388100983 3.098411231579932e-05\n",
-      "44 0.009090550388100983 3.098411231579932e-05\n",
-      "45 0.008994762991222933 8.108102843987183e-05\n",
-      "45 0.008994762991222933 8.108102843987183e-05\n",
-      "46 0.00894930234454477 3.5929830273143356e-05\n",
-      "46 0.00894930234454477 3.5929830273143356e-05\n",
-      "47 0.008896935566258164 2.0517093748910894e-05\n",
-      "47 0.008896935566258164 2.0517093748910894e-05\n",
-      "48 0.008840230089485363 2.411787228273566e-05\n",
-      "48 0.008840230089485363 2.411787228273566e-05\n",
-      "49 0.008843778126340116 2.651645036646369e-05\n",
-      "49 0.00878600804897994 2.651645036646369e-05\n",
-      "49 0.00878600804897994 2.651645036646369e-05\n",
-      "50 0.008663744958734374 3.075233086757118e-05\n",
-      "50 0.008663744958734374 3.075233086757118e-05\n",
-      "51 0.00858029703835026 2.6096992855318125e-05\n",
-      "51 0.00858029703835026 2.6096992855318125e-05\n",
-      "52 0.00849808286382445 5.2428568157961034e-05\n",
-      "52 0.00849808286382445 5.2428568157961034e-05\n",
-      "53 0.0084311865606934 3.110082585917601e-05\n",
-      "53 0.0084311865606934 3.110082585917601e-05\n",
-      "54 0.008469160781041877 2.3628487907287144e-05\n",
-      "54 0.008429657068086953 2.3628487907287144e-05\n",
-      "54 0.008429633238494815 2.3628487907287144e-05\n",
-      "54 0.00842452140329135 2.3628487907287144e-05\n",
-      "54 0.00842452140329135 2.3628487907287144e-05\n",
-      "55 0.008399001670554898 3.9366654239575135e-05\n",
-      "55 0.008399001670554898 3.9366654239575135e-05\n",
-      "56 0.008347946237368054 2.4969898159560703e-05\n",
-      "56 0.008347946237368054 2.4969898159560703e-05\n",
-      "57 0.008322913236623573 2.5659150960235024e-05\n",
-      "57 0.008322913236623573 2.5659150960235024e-05\n",
-      "58 0.008422824216586603 2.1110137727141652e-05\n",
-      "58 0.008321857115080359 2.1110137727141652e-05\n",
-      "58 0.008321837954727476 2.1110137727141652e-05\n",
-      "58 0.008326045991301212 2.1110137727141652e-05\n",
-      "58 0.008316981146605328 2.1110137727141652e-05\n",
-      "58 0.008316981146605328 2.1110137727141652e-05\n",
-      "59 0.008282782476874157 2.570044401236628e-05\n",
-      "59 0.008282782476874157 2.570044401236628e-05\n",
-      "60 0.008229035538848984 1.783370149175122e-05\n",
-      "60 0.008229035538848984 1.783370149175122e-05\n",
-      "61 0.008213307088518064 1.0943318038239426e-05\n",
-      "61 0.008182018965223586 1.0943318038239426e-05\n",
-      "61 0.008182018965223586 1.0943318038239426e-05\n",
-      "62 0.008135785859730587 3.077269430331884e-05\n",
-      "62 0.008135785859730587 3.077269430331884e-05\n",
-      "63 0.008124762016025355 7.570452454387976e-06\n",
-      "63 0.008124762016025355 7.570452454387976e-06\n",
-      "64 0.008074153788821637 7.356778136182289e-06\n",
-      "64 0.008074153788821637 7.356778136182289e-06\n",
-      "65 0.008025145997764995 3.926742677485001e-05\n",
-      "65 0.008025145997764995 3.926742677485001e-05\n",
-      "66 0.007997284303098673 5.564382047368013e-05\n",
-      "66 0.007997284303098673 5.564382047368013e-05\n",
-      "67 0.007971629994096875 2.0129993079425408e-05\n",
-      "67 0.007971629994096875 2.0129993079425408e-05\n",
-      "68 0.007956401943364232 1.6567825990922607e-05\n",
-      "68 0.007956401943364232 1.6567825990922607e-05\n",
-      "69 0.007927623977229592 1.666606182150069e-05\n",
-      "69 0.007927623977229592 1.666606182150069e-05\n",
-      "70 0.007907569585921252 4.8052590276346085e-05\n",
-      "70 0.007907569585921252 4.8052590276346085e-05\n",
-      "71 0.007889517131288874 3.0861221646258586e-05\n",
-      "71 0.007889517131288874 3.0861221646258586e-05\n",
-      "72 0.007863764348805957 2.528912721972446e-05\n",
-      "72 0.007863764348805957 2.528912721972446e-05\n",
-      "73 0.007821154979787021 1.7321362884631597e-05\n",
-      "73 0.007821154979787021 1.7321362884631597e-05\n",
-      "74 0.007763490187889342 3.79285688115533e-05\n",
-      "74 0.007763490187889342 3.79285688115533e-05\n",
-      "75 0.008501899389444283 3.9308217910504444e-05\n",
-      "75 0.007762479845291295 3.9308217910504444e-05\n",
-      "75 0.007762481816105364 3.9308217910504444e-05\n",
-      "75 0.007762479845291295 3.9308217910504444e-05\n",
-      "75 0.007762479845291295 3.9308217910504444e-05\n",
-      "76 0.007706124202376704 4.011227459111868e-05\n",
-      "76 0.007706124202376704 4.011227459111868e-05\n",
-      "77 0.007643249542302154 3.812042881102074e-05\n",
-      "77 0.007643249542302154 3.812042881102074e-05\n",
-      "78 0.0076374050898542194 2.7506928343006316e-05\n",
-      "78 0.0076374050898542194 2.7506928343006316e-05\n",
-      "79 0.007597507530029497 3.1323331488238204e-05\n",
-      "79 0.007597507530029497 3.1323331488238204e-05\n",
-      "80 0.007572346700243544 2.455894364272711e-05\n",
-      "80 0.007572346700243544 2.455894364272711e-05\n",
-      "81 0.007520532045830169 1.6722298504156347e-05\n",
-      "81 0.007520532045830169 1.6722298504156347e-05\n",
-      "82 0.007496204494400662 2.145744788084462e-05\n",
-      "82 0.007496204494400662 2.145744788084462e-05\n",
-      "83 0.0074811158791582 1.5008337816102934e-05\n",
-      "83 0.0074811158791582 1.5008337816102934e-05\n",
-      "84 0.0074789443799353995 1.1559679125293296e-05\n",
-      "84 0.0074789443799353995 1.1559679125293296e-05\n",
-      "85 0.007466480349147129 2.8673738103356187e-05\n",
-      "85 0.007466480349147129 2.8673738103356187e-05\n",
-      "86 0.007455651454044548 1.2555313572291277e-05\n",
-      "86 0.007455651454044548 1.2555313572291277e-05\n",
-      "87 0.007443458390336381 1.2135363966877872e-05\n",
-      "87 0.007443458390336381 1.2135363966877872e-05\n",
-      "88 0.007421295199720124 1.69563937727003e-05\n",
-      "88 0.007421295199720124 1.69563937727003e-05\n",
-      "89 0.0074065328314374575 2.3692074024967043e-05\n",
-      "89 0.0074065328314374575 2.3692074024967043e-05\n",
-      "90 0.0073756674981810206 4.538548411873412e-05\n",
-      "90 0.0073756674981810206 4.538548411873412e-05\n",
-      "91 0.007363257854279923 1.9147804906267893e-05\n",
-      "91 0.007363257854279923 1.9147804906267893e-05\n",
-      "92 0.007345440915245218 1.7007489292620826e-05\n",
-      "92 0.007345440915245218 1.7007489292620826e-05\n",
-      "93 0.007325397499277214 1.335820934171656e-05\n",
-      "93 0.007325397499277214 1.335820934171656e-05\n",
-      "94 0.00730068238837525 1.711951226003885e-05\n",
-      "94 0.00730068238837525 1.711951226003885e-05\n",
-      "95 0.007286634647401836 1.4900414989017023e-05\n",
-      "95 0.007286634647401836 1.4900414989017023e-05\n",
-      "96 0.007267497084220146 2.4489398654370944e-05\n",
-      "96 0.007267497084220146 2.4489398654370944e-05\n",
-      "97 0.0072219101707040635 1.4782738878880614e-05\n",
-      "97 0.0072219101707040635 1.4782738878880614e-05\n",
-      "98 0.007199046139925055 1.8787955215174196e-05\n",
-      "98 0.007199046139925055 1.8787955215174196e-05\n",
-      "99 0.007195817326799256 1.0986885153408575e-05\n",
-      "99 0.007195817326799256 1.0986885153408575e-05\n"
-     ]
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "100 0.007166497278198204 3.225428203746481e-05\n",
-      "100 0.007166497278198204 3.225428203746481e-05\n",
-      "101 0.007149650939008197 1.2455706971964613e-05\n",
-      "101 0.007149650939008197 1.2455706971964613e-05\n",
-      "102 0.007121663744128236 1.2982402927792889e-05\n",
-      "102 0.007121663744128236 1.2982402927792889e-05\n",
-      "103 0.007107483587565755 1.609346523245832e-05\n",
-      "103 0.007107483587565755 1.609346523245832e-05\n",
-      "104 0.007092042896733735 2.3113347269329504e-05\n",
-      "104 0.007092042896733735 2.3113347269329504e-05\n",
-      "105 0.0070876421136930245 3.544249173464179e-05\n",
-      "105 0.0070876421136930245 3.544249173464179e-05\n",
-      "106 0.0070856698373387254 1.011908203672434e-05\n",
-      "106 0.0070856698373387254 1.011908203672434e-05\n",
-      "107 0.007076003884998143 9.5015908970922e-06\n",
-      "107 0.007076003884998143 9.5015908970922e-06\n",
-      "108 0.0070623753300841675 1.2760766981931491e-05\n",
-      "108 0.0070623753300841675 1.2760766981931491e-05\n",
-      "109 0.007066499924291111 1.4079264563422209e-05\n",
-      "109 0.007056548175037092 1.4079264563422209e-05\n",
-      "109 0.007056548175037092 1.4079264563422209e-05\n",
-      "110 0.007037978881019787 1.1488434088636761e-05\n",
-      "110 0.007037978881019787 1.1488434088636761e-05\n",
-      "111 0.00702760730869007 6.3582768272514185e-06\n",
-      "111 0.00702760730869007 6.3582768272514185e-06\n",
-      "112 0.007017559171493912 7.7341781113317e-06\n",
-      "112 0.007017559171493912 7.7341781113317e-06\n",
-      "113 0.007006719912436902 1.0895078259670994e-05\n",
-      "113 0.007006719912436902 1.0895078259670994e-05\n",
-      "114 0.006998337701865199 9.222730483132603e-06\n",
-      "114 0.006998337701865199 9.222730483132603e-06\n",
-      "115 0.00698923895951724 1.3731236775889773e-05\n",
-      "115 0.00698923895951724 1.3731236775889773e-05\n",
-      "116 0.006980559128734795 1.2157931788970403e-05\n",
-      "116 0.006980559128734795 1.2157931788970403e-05\n",
-      "117 0.006968647744847032 1.0019414749749783e-05\n",
-      "117 0.006968647744847032 1.0019414749749783e-05\n",
-      "118 0.006950864126224456 1.1447581912624156e-05\n",
-      "118 0.006950864126224456 1.1447581912624156e-05\n",
-      "119 0.006904038906913671 1.733178366727899e-05\n",
-      "119 0.006904038906913671 1.733178366727899e-05\n",
-      "120 0.006989541125465205 2.7818348257224467e-05\n",
-      "120 0.00690183522818204 2.7818348257224467e-05\n",
-      "120 0.0069018362317889125 2.7818348257224467e-05\n",
-      "120 0.00690183522818204 2.7818348257224467e-05\n",
-      "120 0.00690183522818204 2.7818348257224467e-05\n",
-      "121 0.006854316979788766 2.7208804529338977e-05\n",
-      "121 0.006854316979788766 2.7208804529338977e-05\n",
-      "122 0.006839640183574746 1.120738073916866e-05\n",
-      "122 0.006839640183574746 1.120738073916866e-05\n",
-      "123 0.0068303247354693526 1.8804359022624816e-05\n",
-      "123 0.00682703540496823 1.8804359022624816e-05\n",
-      "123 0.00682703540496823 1.8804359022624816e-05\n",
-      "124 0.006821805064326131 1.708728259343721e-05\n",
-      "124 0.006821805064326131 1.708728259343721e-05\n",
-      "125 0.006818061156210745 5.563064508119619e-06\n",
-      "125 0.006818061156210745 5.563064508119619e-06\n",
-      "126 0.006805705870020436 5.455219717343591e-06\n",
-      "126 0.006805705870020436 5.455219717343591e-06\n",
-      "127 0.006792326705089109 7.469014611838136e-06\n",
-      "127 0.006792326705089109 7.469014611838136e-06\n",
-      "128 0.006794627121736496 8.118194772183019e-06\n",
-      "128 0.006789688853207264 8.118194772183019e-06\n",
-      "128 0.006789688853207264 8.118194772183019e-06\n",
-      "129 0.006778750016340056 9.203569744562623e-06\n",
-      "129 0.006778750016340056 9.203569744562623e-06\n",
-      "130 0.006769196400969824 8.639048228352184e-06\n",
-      "130 0.006768060013003316 8.639048228352184e-06\n",
-      "130 0.006768060013003316 8.639048228352184e-06\n",
-      "131 0.006761776671455152 1.3870162066247481e-05\n",
-      "131 0.006761776671455152 1.3870162066247481e-05\n",
-      "132 0.006753691375657348 1.2824645924878621e-05\n",
-      "132 0.006753691375657348 1.2824645924878621e-05\n",
-      "133 0.006759700128445566 2.2430259617262693e-05\n",
-      "133 0.0067534214682156354 2.2430259617262693e-05\n",
-      "133 0.006753403710146149 2.2430259617262693e-05\n",
-      "133 0.006753376039107974 2.2430259617262693e-05\n",
-      "133 0.006753376039107974 2.2430259617262693e-05\n",
-      "134 0.006750889809804785 7.775483680203163e-06\n",
-      "134 0.006750889809804785 7.775483680203163e-06\n",
-      "135 0.00674017628355803 7.32387656909453e-06\n",
-      "135 0.00674017628355803 7.32387656909453e-06\n",
-      "136 0.006732164255682712 6.069493702324855e-06\n",
-      "136 0.006732164255682712 6.069493702324855e-06\n",
-      "137 0.0067211297236298454 9.757791589064984e-06\n",
-      "137 0.0067211297236298454 9.757791589064984e-06\n",
-      "138 0.006717098651228022 1.2041608605872674e-05\n",
-      "138 0.006717098651228022 1.2041608605872674e-05\n",
-      "139 0.006718463671012811 5.349036906125493e-06\n",
-      "139 0.006717160204133975 5.349036906125493e-06\n",
-      "139 0.00671705851989211 5.349036906125493e-06\n",
-      "139 0.006717058218620014 5.349036906125493e-06\n",
-      "139 0.006717051339262478 5.349036906125493e-06\n",
-      "139 0.006717168572688233 5.349036906125493e-06\n",
-      "139 0.006717049453657966 5.349036906125493e-06\n",
-      "139 0.0067170494279413726 5.349036906125493e-06\n",
-      "139 0.006717054126788867 5.349036906125493e-06\n",
-      "139 0.006717041225631278 5.349036906125493e-06\n",
-      "139 0.006717041152728799 5.349036906125493e-06\n",
-      "139 0.006717038553608116 5.349036906125493e-06\n",
-      "139 0.006717038553608116 5.349036906125493e-06\n",
-      "139 0.006717038553608116 5.349036906125493e-06\n",
-      "140 0.006715494004161791 5.2431820946171614e-06\n",
-      "140 0.006715494004161791 5.2431820946171614e-06\n",
-      "141 0.006734972031417804 5.45552536814513e-06\n",
-      "141 0.006715427057098203 5.45552536814513e-06\n",
-      "141 0.006715424167380551 5.45552536814513e-06\n",
-      "141 0.006719977888717279 5.45552536814513e-06\n",
-      "141 0.006715375963626654 5.45552536814513e-06\n",
-      "141 0.006715382706250082 5.45552536814513e-06\n",
-      "141 0.006715375963626654 5.45552536814513e-06\n",
-      "141 0.006715375963626654 5.45552536814513e-06\n",
-      "142 0.006714985495635859 5.278585267226589e-06\n",
-      "142 0.006714985495635859 5.278585267226589e-06\n",
-      "143 0.006712052475368237 9.113469267013013e-06\n",
-      "143 0.006712052475368237 9.113469267013013e-06\n",
-      "144 0.00673563756063786 8.760730084397205e-06\n",
-      "144 0.006712015817161406 8.760730084397205e-06\n",
-      "144 0.006712010020097472 8.760730084397205e-06\n",
-      "144 0.0067155257008589195 8.760730084397205e-06\n",
-      "144 0.006711909187716084 8.760730084397205e-06\n",
-      "144 0.006711905414442329 8.760730084397205e-06\n",
-      "144 0.006711661128753058 8.760730084397205e-06\n",
-      "144 0.006711661128753058 8.760730084397205e-06\n",
-      "145 0.006704922683743936 1.5187248974958503e-05\n",
-      "145 0.006704922683743936 1.5187248974958503e-05\n",
-      "146 0.006700554770200055 6.113111182326539e-06\n",
-      "146 0.006700554770200055 6.113111182326539e-06\n",
-      "147 0.006696953681020588 3.817161286439158e-06\n",
-      "147 0.006696953681020588 3.817161286439158e-06\n",
-      "148 0.006694090226778213 5.181995026274401e-06\n",
-      "148 0.006694090226778213 5.181995026274401e-06\n",
-      "149 0.006689947854068674 6.95561844702273e-06\n",
-      "149 0.006689947854068674 6.95561844702273e-06\n",
-      "150 0.006685415757432949 7.04080609330246e-06\n",
-      "150 0.006685415757432949 7.04080609330246e-06\n",
-      "151 0.0066871846265897286 1.3103762631823296e-05\n",
-      "Solution = [0.07115104005745672, 0.24921803497648082, 0.33500027239475205, 0.054289395463418634, 0.5484387111429057, 0.3652969433877641, 1.2976972471493189, 0.4556214285321452, 0.5100947440022903, -1.3628875634073006, -0.9828648596654762, 0.31378730414599304, 0.10348369366392857, 0.04064594088948826, -0.2229308881446078, 0.009834879785222152, 1.0553001508991753, -0.9771401146886487, -2.090318535628118, 0.2238877365119036, 8.55118399594736, -3.6984805166879133, 3.400156346124313, 5.194186373662376, 9.428822160391828, -3.347824660771831, 1.285504900063243, 5.526560454127317, 1.992021968738934, 3.478056232116614, -1.2357215230911665, 0.27552263484091044, 0.7808488519208224, -2.674349102664282, -3.0737807340722645, 0.17640486375915906, 8.013358929776635, -4.039972290355492, 10.776806720484489, 6.238739769143441, 11.171696045385836, -3.7164253662604643, 3.434763444396605, 6.55132859934864, 2.380488800315714, 2.2692965265348346, -3.166634533788592, 0.261574470435091, -0.002166979443055729, -0.10948420635571118, 0.23774653765977657, 0.05632922528119854, 0.4287630405926005, 0.5504847582001137, 3.8655032822185853, 0.8124657345838298, 1.0318729548960703, -1.4688284595879608, -0.4513684664760511, 0.6160487101447254, 0.2143250571045179, -0.27600187570823803, -0.7600867194655274, 0.0061065827125970145, 0.03613426473746012, -0.2548941585084273, -0.7806716667169893, -0.0933851972463494, 0.5861930460725199, 2.729101322016986, -0.6884109900846709, -0.2320517478407594, 0.5672247573336274, 4.068844311275237, 2.004916017602021, 0.20078743541444205, 0.04879089397303579, 0.3998872979114026, 0.22914708502660291, 0.036217449556557944, 0.37895152415308603, 2.5479909795988984, 0.236031744011659, -0.3693293822897417, 2.0914270249791778, 0.34401014167091737, -0.49289186488207903, 0.6572486034843324, 3.5046996858433195, 0.6109159528894802, -1.7086815144365133, 4.182150411314072, 0.47575209427793086, 0.5992909175558009, -1.013241373057925, 0.5295776582639428, 0.21940635670945924, 4.232334790176415, 2.610738657801662, -0.26045544799627873, 1.0360869950366063, -3.941125316935136, 2.733935721154174, 1.6640688390918832, 4.699549091238799, -1.0155457804439778, 1.6546084239933028, 6.344974354720267, 0.6916621758970061, -0.2040927622786738, -1.7695620679385777, 0.7542446979816613, 0.031610485135072725, 0.36946751017326435, -0.22939157722597175, -0.08303363609370218, 0.4886068852952999, 1.3729789626423143, -1.3616333672942396, -0.07883141353220598, 0.7810863385804115, 0.46334166855594466, -0.2984881607833991, 0.6632309838464736, 0.07641353358370764, -0.29618366199395557, -0.3756198997292512, 0.08399146889011785, -0.07719001706270516, -0.8161441571399539, -0.8301696225077465, -0.08341911757141732, -0.1738041088635052, 0.699500597122375, -0.04956316224541235, -0.449772733915107, -0.46787751400929645, -0.7940378145400644, -0.2072676898987381, -0.3838810367496932, -0.12530355769510937, -0.7324608627365733, -0.4028711926019476, -0.04069889936257189, -0.13884818389224765, -2.587354767475563, -2.7905550922581708, -0.3944700452714093, -0.874347763624928, -0.35740595920105434, 0.19027621213807516, -3.0743023950671975, -2.1577957066180526, 1.4964625436889392, -1.674075621982205, -3.9220997736955994, -0.3872110526944963, -0.07812088282241864, -0.7664056941425686, -0.44042719768602695, 0.5073610100473688, 0.9379247335728718, 1.0522842242181658, 0.14022166435266475, 1.6868110135116658, -2.3683997854305434, 0.35429200514057235, -0.16541519715015687, -0.3136866658273052, 2.4560054732335357, -5.163895519826935, -2.1025470382000906, 0.023518695278417916, 2.43782214093873, -0.060294391785356796, -0.32574818516635257, 0.08053690767511397, 0.10796741835070581, 0.21143207103023987, 0.05607463126433006, 0.47553101056071845, 0.968787793379407, 0.6620956008787486, 0.3026854478792361, 0.1610315444683168, 0.8465060464903814, -0.7776418893676387, 0.03373960491046226, 0.02077644882976242, 0.1704933453618954, -0.19168645311625748, -0.020497987553671767]\n",
-      "Wrote resulting mesh to Output/901-meansquares-registered.obj\n"
+      "Iteration: 0 Metric: 0.4953344442828443 Infinity Norm: 0.0\n",
+      "Iteration: 0 Metric: 0.3679928041625301 Infinity Norm: 0.0\n",
+      "Iteration: 0 Metric: 0.3679928041625301 Infinity Norm: 0.0\n",
+      "Iteration: 1 Metric: 0.1382597111142386 Infinity Norm: 0.002047170989457994\n",
+      "Iteration: 1 Metric: 0.1382597111142386 Infinity Norm: 0.002047170989457994\n",
+      "Iteration: 2 Metric: 0.09620259423214085 Infinity Norm: 0.001261876484024073\n",
+      "Iteration: 2 Metric: 0.09620259423214085 Infinity Norm: 0.001261876484024073\n",
+      "Iteration: 3 Metric: 0.0810644365222312 Infinity Norm: 0.0011402423999786182\n",
+      "Iteration: 3 Metric: 0.0810644365222312 Infinity Norm: 0.0011402423999786182\n",
+      "Iteration: 4 Metric: 0.05506265821062781 Infinity Norm: 0.0008026746053761812\n",
+      "Iteration: 4 Metric: 0.05506265821062781 Infinity Norm: 0.0008026746053761812\n",
+      "Iteration: 5 Metric: 0.036229100368238225 Infinity Norm: 0.0005999657307756083\n",
+      "Iteration: 5 Metric: 0.036229100368238225 Infinity Norm: 0.0005999657307756083\n",
+      "Iteration: 6 Metric: 0.02201122948495042 Infinity Norm: 0.0006569240263049952\n",
+      "Iteration: 6 Metric: 0.02201122948495042 Infinity Norm: 0.0006569240263049952\n",
+      "Iteration: 7 Metric: 0.019790912974060545 Infinity Norm: 0.000227595005185355\n",
+      "Iteration: 7 Metric: 0.019790912974060545 Infinity Norm: 0.000227595005185355\n",
+      "Iteration: 8 Metric: 0.017138213201441897 Infinity Norm: 0.00012848767601378967\n",
+      "Iteration: 8 Metric: 0.017138213201441897 Infinity Norm: 0.00012848767601378967\n",
+      "Iteration: 9 Metric: 0.01643926158089219 Infinity Norm: 0.00011380109594120822\n",
+      "Iteration: 9 Metric: 0.01643926158089219 Infinity Norm: 0.00011380109594120822\n",
+      "Iteration: 10 Metric: 0.015742424102559768 Infinity Norm: 0.000229305332514829\n",
+      "Iteration: 10 Metric: 0.015742424102559768 Infinity Norm: 0.000229305332514829\n",
+      "Iteration: 11 Metric: 0.015332139820951112 Infinity Norm: 9.86042590450415e-05\n",
+      "Iteration: 11 Metric: 0.015332139820951112 Infinity Norm: 9.86042590450415e-05\n",
+      "Iteration: 12 Metric: 0.014893029866989713 Infinity Norm: 9.041142269583126e-05\n",
+      "Iteration: 12 Metric: 0.014893029866989713 Infinity Norm: 9.041142269583126e-05\n",
+      "Iteration: 13 Metric: 0.014155799479607961 Infinity Norm: 8.750465542941682e-05\n",
+      "Iteration: 13 Metric: 0.014155799479607961 Infinity Norm: 8.750465542941682e-05\n",
+      "Iteration: 14 Metric: 0.013727488501522448 Infinity Norm: 8.1341387937945e-05\n",
+      "Iteration: 14 Metric: 0.013727488501522448 Infinity Norm: 8.1341387937945e-05\n",
+      "Iteration: 15 Metric: 0.013269794609552825 Infinity Norm: 0.00015860022289330145\n",
+      "Iteration: 15 Metric: 0.013269794609552825 Infinity Norm: 0.00015860022289330145\n",
+      "Iteration: 16 Metric: 0.013082032206910437 Infinity Norm: 0.00010944034907393472\n",
+      "Iteration: 16 Metric: 0.013082032206910437 Infinity Norm: 0.00010944034907393472\n",
+      "Iteration: 17 Metric: 0.01251044810222833 Infinity Norm: 8.291646063426698e-05\n",
+      "Iteration: 17 Metric: 0.01251044810222833 Infinity Norm: 8.291646063426698e-05\n",
+      "Iteration: 18 Metric: 0.01216931779260898 Infinity Norm: 9.827412298789554e-05\n",
+      "Iteration: 18 Metric: 0.01216931779260898 Infinity Norm: 9.827412298789554e-05\n",
+      "Iteration: 19 Metric: 0.011936519135127685 Infinity Norm: 5.2764813925673704e-05\n",
+      "Iteration: 19 Metric: 0.011936519135127685 Infinity Norm: 5.2764813925673704e-05\n",
+      "Iteration: 20 Metric: 0.011692025245038271 Infinity Norm: 9.881889798097749e-05\n",
+      "Iteration: 20 Metric: 0.011692025245038271 Infinity Norm: 9.881889798097749e-05\n",
+      "Iteration: 21 Metric: 0.011584744320551963 Infinity Norm: 3.0638833099466936e-05\n",
+      "Iteration: 21 Metric: 0.011584744320551963 Infinity Norm: 3.0638833099466936e-05\n"
      ]
     }
    ],
    "source": [
     "(transform_result, mesh_result) = registrar.register(template_mesh,\n",
-    "                                             target_mesh,\n",
-    "                                             filepath=MEANSQUARES_OUTPUT_FILE,\n",
-    "                                             verbose=True,\n",
-    "                                             num_iterations=200)"
+    "                                                     target_mesh,\n",
+    "                                                     num_iterations=200,\n",
+    "                                                     convergence_factor=5e11,\n",
+    "                                                     gradient_convergence_tolerance=1e-35)\n",
+    "itk.meshwrite(mesh_result, MEANSQUARES_OUTPUT_FILE)"
    ]
   },
   {
@@ -722,7 +408,7 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "registrar = DiffeoRegistrar()"
+    "registrar = DiffeoRegistrar(verbose=True)"
    ]
   },
   {
@@ -733,7 +419,7 @@
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "91d9979c87a3433e85956e06ea22dd1e",
+       "model_id": "d254a6e11a9d4ff78b3c1fe7a3c86c5c",
        "version_major": 2,
        "version_minor": 0
       },
@@ -761,6 +447,29 @@
   {
    "cell_type": "code",
    "execution_count": 22,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "1"
+      ]
+     },
+     "execution_count": 22,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "def update_diff_progress():\n",
+    "    diffeoProgress.value = registrar.filter.GetElapsedIterations()\n",
+    "\n",
+    "registrar.filter.AddObserver(itk.IterationEvent(),update_diff_progress)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 23,
    "metadata": {
     "scrolled": true
    },
@@ -769,221 +478,222 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "1.7976931348623157e+308\n",
-      "0.4953344445027531\n",
-      "0.4919978146151957\n",
-      "0.49014250375875607\n",
-      "0.4883152615673534\n",
-      "0.4876264321046578\n",
-      "0.4863758875349746\n",
-      "0.4848329850901018\n",
-      "0.4832380374425963\n",
-      "0.4816613820019586\n",
-      "0.47992311701764906\n",
-      "0.47819615858812126\n",
-      "0.4764180158719083\n",
-      "0.4746375325575763\n",
-      "0.4725753735317665\n",
-      "0.47054456107198983\n",
-      "0.4683531446736118\n",
-      "0.46619317072217226\n",
-      "0.4638398448774739\n",
-      "0.4617263143098048\n",
-      "0.45963088709668165\n",
-      "0.45765992990626214\n",
-      "0.45564904932109535\n",
-      "0.45405493940994296\n",
-      "0.4526567041931353\n",
-      "0.45126435618474847\n",
-      "0.4499785970781415\n",
-      "0.4486827830549383\n",
-      "0.4475157724666353\n",
-      "0.44628145441325595\n",
-      "0.4450578744943134\n",
-      "0.4438195343732895\n",
-      "0.4425877546195735\n",
-      "0.441339593969622\n",
-      "0.4401098214527867\n",
-      "0.4388818595160368\n",
-      "0.43749092474381784\n",
-      "0.43564875311473567\n",
-      "0.43370194230716685\n",
-      "0.4311092442088367\n",
-      "0.4285241607433405\n",
-      "0.42582081376755554\n",
-      "0.4231977163312322\n",
-      "0.4205323448942155\n",
-      "0.4176938430560469\n",
-      "0.41429447935831476\n",
-      "0.4105150579147669\n",
-      "0.4078069432083754\n",
-      "0.4054533839896938\n",
-      "0.4031936651465812\n",
-      "0.4008872988176601\n",
-      "0.3986160926514004\n",
-      "0.39624739897277567\n",
-      "0.3937444942614091\n",
-      "0.39142684097183883\n",
-      "0.3888736380851286\n",
-      "0.38647104795916287\n",
-      "0.3838115395510912\n",
-      "0.3819106714852723\n",
-      "0.38005191392866544\n",
-      "0.37840599643381206\n",
-      "0.3767361061953014\n",
-      "0.37520073799037557\n",
-      "0.3736390135166056\n",
-      "0.37224199228563565\n",
-      "0.3708283543384422\n",
-      "0.36955409393095806\n",
-      "0.36820492209572653\n",
-      "0.36693894773573643\n",
-      "0.36563207568944156\n",
-      "0.3643753329917615\n",
-      "0.36309944285660034\n",
-      "0.3618618156964645\n",
-      "0.36058982853399046\n",
-      "0.3593911320087198\n",
-      "0.35814933814557476\n",
-      "0.35696433938565914\n",
-      "0.35572616825340947\n",
-      "0.3545850773672667\n",
-      "0.3533477608371418\n",
-      "0.3522046830793003\n",
-      "0.3509778929588278\n",
-      "0.3498223422266538\n",
-      "0.348636249224488\n",
-      "0.34748682321573315\n",
-      "0.3462540591739775\n",
-      "0.3451638389679117\n",
-      "0.34390766216059593\n",
-      "0.34277981765802756\n",
-      "0.34155683829745537\n",
-      "0.34044678126808625\n",
-      "0.3392237698626274\n",
-      "0.33806360068684266\n",
-      "0.3368715299954688\n",
-      "0.3357172110686938\n",
-      "0.33448527280040957\n",
-      "0.33337040646754934\n",
-      "0.3321366779605495\n",
-      "0.33105257093318263\n",
-      "0.32988403768813646\n",
-      "0.32877781546814727\n",
-      "0.32744532557938544\n",
-      "0.3261351815006039\n",
-      "0.32462848784993825\n",
-      "0.32324707171062944\n",
-      "0.32160789329570005\n",
-      "0.3201537792371008\n",
-      "0.31848174537413965\n",
-      "0.31694841527660333\n",
-      "0.3153411767661876\n",
-      "0.31389361671181426\n",
-      "0.31231257635811444\n",
-      "0.31088386551649144\n",
-      "0.30930307494294157\n",
-      "0.3079271212860861\n",
-      "0.30635523013014443\n",
-      "0.30499025708048805\n",
-      "0.3034550585458994\n",
-      "0.3020681634478834\n",
-      "0.300560266296785\n",
-      "0.29916000458928577\n",
-      "0.2976003670321141\n",
-      "0.29616745186846516\n",
-      "0.29463981478595247\n",
-      "0.29330725350155584\n",
-      "0.29182044336183477\n",
-      "0.2904149012459004\n",
-      "0.2889734213584738\n",
-      "0.2876461505163362\n",
-      "0.2862065581167292\n",
-      "0.28492282697308635\n",
-      "0.28356707857364727\n",
-      "0.2822305427119003\n",
-      "0.28084097066701685\n",
-      "0.2795866877233823\n",
-      "0.27836656180310443\n",
-      "0.27713435621034765\n",
-      "0.27583387053784514\n",
-      "0.2746968251734438\n",
-      "0.2734203666547468\n",
-      "0.27224886053737285\n",
-      "0.27103645256473186\n",
-      "0.2698826819333694\n",
-      "0.268693028645874\n",
-      "0.2675167968669246\n",
-      "0.2663056592967879\n",
-      "0.2651996791466983\n",
-      "0.2639680091206827\n",
-      "0.2628748240016037\n",
-      "0.2617141640038354\n",
-      "0.26058676758318333\n",
-      "0.2594228787630591\n",
-      "0.2583679813529645\n",
-      "0.257165498085168\n",
-      "0.2560586166869107\n",
-      "0.2549233683909337\n",
-      "0.25384179907127813\n",
-      "0.2526225385749604\n",
-      "0.25159123352841334\n",
-      "0.25040812314896677\n",
-      "0.24932287213260088\n",
-      "0.24817321725862043\n",
-      "0.24713188460405375\n",
-      "0.24604618671451567\n",
-      "0.24507035916772127\n",
-      "0.24402454194468443\n",
-      "0.24306522360088845\n",
-      "0.24208588115963428\n",
-      "0.24116273576327335\n",
-      "0.24013373945037847\n",
-      "0.23909636965860864\n",
-      "0.23797010646174024\n",
-      "0.23693655406603367\n",
-      "0.2358273707371063\n",
-      "0.23479936586677852\n",
-      "0.23361482561427235\n",
-      "0.23254034105040916\n",
-      "0.23135991436209297\n",
-      "0.2302512178375026\n",
-      "0.22908973519363007\n",
-      "0.2280640509771637\n",
-      "0.22696698547508024\n",
-      "0.225985195270083\n",
-      "0.22490153102271226\n",
-      "0.22384800639162722\n",
-      "0.22277246692525707\n",
-      "0.2218236568443007\n",
-      "0.2206727118494763\n",
-      "0.21959788470408684\n",
-      "0.21848051608249017\n",
-      "0.21748572771363336\n",
-      "0.216447916080071\n",
-      "0.21550298025238596\n",
-      "0.21446590463692342\n",
-      "0.21354760998075492\n",
-      "0.21246583540106467\n",
-      "0.2115308264450099\n",
-      "0.21059702986891277\n",
-      "0.20961285299385649\n",
-      "0.20865738944815707\n",
-      "0.2077904178923979\n",
-      "Wrote resulting mesh to Output/901-diffeo-registered.obj\n"
+      "Iteration: 0 Metric: 1.7976931348623157e+308 RMS Change: 1.7976931348623157e+308\n",
+      "Iteration: 1 Metric: 0.49533444450275316 RMS Change: 0.013359611954732018\n",
+      "Iteration: 2 Metric: 0.4919978146151957 RMS Change: 0.013039523388312891\n",
+      "Iteration: 3 Metric: 0.4901425037587561 RMS Change: 0.012588951149819737\n",
+      "Iteration: 4 Metric: 0.48831526156735333 RMS Change: 0.012125892645666199\n",
+      "Iteration: 5 Metric: 0.48762643210465784 RMS Change: 0.0117265151362644\n",
+      "Iteration: 6 Metric: 0.4863758875349746 RMS Change: 0.011475353166185287\n",
+      "Iteration: 7 Metric: 0.48483298509010175 RMS Change: 0.011286081549756901\n",
+      "Iteration: 8 Metric: 0.48323803744259636 RMS Change: 0.01110896155680142\n",
+      "Iteration: 9 Metric: 0.4816613820019587 RMS Change: 0.010905596244263766\n",
+      "Iteration: 10 Metric: 0.47992311701764906 RMS Change: 0.010695953163007688\n",
+      "Iteration: 11 Metric: 0.47819615858812137 RMS Change: 0.010497861548657563\n",
+      "Iteration: 12 Metric: 0.4764180158719084 RMS Change: 0.01032998778603012\n",
+      "Iteration: 13 Metric: 0.4746375325575763 RMS Change: 0.010193145157335156\n",
+      "Iteration: 14 Metric: 0.4725753735317666 RMS Change: 0.010085778528113432\n",
+      "Iteration: 15 Metric: 0.4705445610719899 RMS Change: 0.00998306210135484\n",
+      "Iteration: 16 Metric: 0.4683531446736118 RMS Change: 0.009870206391886457\n",
+      "Iteration: 17 Metric: 0.4661931707221723 RMS Change: 0.009734936839479302\n",
+      "Iteration: 18 Metric: 0.4638398448774739 RMS Change: 0.009610781030472214\n",
+      "Iteration: 19 Metric: 0.4617263143098048 RMS Change: 0.009517145154083553\n",
+      "Iteration: 20 Metric: 0.45963088709668176 RMS Change: 0.00943975534109862\n",
+      "Iteration: 21 Metric: 0.45765992990626214 RMS Change: 0.009356962692324744\n",
+      "Iteration: 22 Metric: 0.4556490493210952 RMS Change: 0.009255841179589937\n",
+      "Iteration: 23 Metric: 0.4540549394099431 RMS Change: 0.009126666058239185\n",
+      "Iteration: 24 Metric: 0.4526567041931353 RMS Change: 0.008996198569406281\n",
+      "Iteration: 25 Metric: 0.45126435618474847 RMS Change: 0.008874723883875012\n",
+      "Iteration: 26 Metric: 0.44997859707814153 RMS Change: 0.00875590057998006\n",
+      "Iteration: 27 Metric: 0.4486827830549383 RMS Change: 0.008652919645094053\n",
+      "Iteration: 28 Metric: 0.4475157724666353 RMS Change: 0.00855390234257343\n",
+      "Iteration: 29 Metric: 0.44628145441325595 RMS Change: 0.008471322866461394\n",
+      "Iteration: 30 Metric: 0.44505787449431333 RMS Change: 0.00839418271893196\n",
+      "Iteration: 31 Metric: 0.4438195343732896 RMS Change: 0.008326982533882693\n",
+      "Iteration: 32 Metric: 0.44258775461957356 RMS Change: 0.008263291458922541\n",
+      "Iteration: 33 Metric: 0.4413395939696221 RMS Change: 0.008205181358236129\n",
+      "Iteration: 34 Metric: 0.4401098214527867 RMS Change: 0.00814792258899901\n",
+      "Iteration: 35 Metric: 0.43888185951603675 RMS Change: 0.008095010513203316\n",
+      "Iteration: 36 Metric: 0.43749092474381784 RMS Change: 0.008043100444020878\n",
+      "Iteration: 37 Metric: 0.4356487531147356 RMS Change: 0.008001337488979209\n",
+      "Iteration: 38 Metric: 0.4337019423071669 RMS Change: 0.007956409132000538\n",
+      "Iteration: 39 Metric: 0.4311092442088366 RMS Change: 0.00791950022909736\n",
+      "Iteration: 40 Metric: 0.42852416074334043 RMS Change: 0.007883946134578351\n",
+      "Iteration: 41 Metric: 0.42582081376755554 RMS Change: 0.007852169469502636\n",
+      "Iteration: 42 Metric: 0.4231977163312322 RMS Change: 0.007819974800232004\n",
+      "Iteration: 43 Metric: 0.4205323448942155 RMS Change: 0.00779192034075132\n",
+      "Iteration: 44 Metric: 0.417693843056047 RMS Change: 0.007764015569610968\n",
+      "Iteration: 45 Metric: 0.41429447935831476 RMS Change: 0.007736153265900176\n",
+      "Iteration: 46 Metric: 0.4105150579147668 RMS Change: 0.007714538044809253\n",
+      "Iteration: 47 Metric: 0.40780694320837557 RMS Change: 0.00769052696362138\n",
+      "Iteration: 48 Metric: 0.40545338398969394 RMS Change: 0.007667410831468288\n",
+      "Iteration: 49 Metric: 0.4031936651465811 RMS Change: 0.007642652354453806\n",
+      "Iteration: 50 Metric: 0.4008872988176601 RMS Change: 0.007620560144435727\n",
+      "Iteration: 51 Metric: 0.39861609265140036 RMS Change: 0.007594070215487369\n",
+      "Iteration: 52 Metric: 0.3962473989727755 RMS Change: 0.007565579062730043\n",
+      "Iteration: 53 Metric: 0.3937444942614091 RMS Change: 0.007547903159101403\n",
+      "Iteration: 54 Metric: 0.3914268409718389 RMS Change: 0.007519902689929016\n",
+      "Iteration: 55 Metric: 0.3888736380851286 RMS Change: 0.007507550349672869\n",
+      "Iteration: 56 Metric: 0.38647104795916287 RMS Change: 0.007487763411360684\n",
+      "Iteration: 57 Metric: 0.38381153955109115 RMS Change: 0.007480174592254754\n",
+      "Iteration: 58 Metric: 0.3819106714852723 RMS Change: 0.0074620476547658495\n",
+      "Iteration: 59 Metric: 0.38005191392866544 RMS Change: 0.007454257338282007\n",
+      "Iteration: 60 Metric: 0.3784059964338122 RMS Change: 0.007438790696220938\n",
+      "Iteration: 61 Metric: 0.3767361061953015 RMS Change: 0.0074334690962882905\n",
+      "Iteration: 62 Metric: 0.37520073799037557 RMS Change: 0.00742114071974977\n",
+      "Iteration: 63 Metric: 0.37363901351660567 RMS Change: 0.007415608772603905\n",
+      "Iteration: 64 Metric: 0.37224199228563565 RMS Change: 0.007406645011065641\n",
+      "Iteration: 65 Metric: 0.3708283543384422 RMS Change: 0.007402438926265713\n",
+      "Iteration: 66 Metric: 0.36955409393095817 RMS Change: 0.007393899812572415\n",
+      "Iteration: 67 Metric: 0.36820492209572653 RMS Change: 0.0073889599515244144\n",
+      "Iteration: 68 Metric: 0.36693894773573643 RMS Change: 0.007380716190409425\n",
+      "Iteration: 69 Metric: 0.3656320756894416 RMS Change: 0.007377744756573956\n",
+      "Iteration: 70 Metric: 0.3643753329917615 RMS Change: 0.007368622974328965\n",
+      "Iteration: 71 Metric: 0.3630994428566003 RMS Change: 0.007366491308226954\n",
+      "Iteration: 72 Metric: 0.36186181569646453 RMS Change: 0.007360136650111157\n",
+      "Iteration: 73 Metric: 0.36058982853399046 RMS Change: 0.0073554943540550715\n",
+      "Iteration: 74 Metric: 0.35939113200871986 RMS Change: 0.007349169935406191\n",
+      "Iteration: 75 Metric: 0.35814933814557476 RMS Change: 0.00734580746173212\n",
+      "Iteration: 76 Metric: 0.35696433938565914 RMS Change: 0.007339786094847547\n",
+      "Iteration: 77 Metric: 0.3557261682534096 RMS Change: 0.00733622844495894\n",
+      "Iteration: 78 Metric: 0.3545850773672666 RMS Change: 0.007329007156496723\n",
+      "Iteration: 79 Metric: 0.35334776083714176 RMS Change: 0.0073273335956979555\n",
+      "Iteration: 80 Metric: 0.3522046830793003 RMS Change: 0.007321508484029454\n",
+      "Iteration: 81 Metric: 0.35097789295882786 RMS Change: 0.007321327495913644\n",
+      "Iteration: 82 Metric: 0.3498223422266538 RMS Change: 0.007314152272226366\n",
+      "Iteration: 83 Metric: 0.348636249224488 RMS Change: 0.007313151598658789\n",
+      "Iteration: 84 Metric: 0.34748682321573315 RMS Change: 0.0073077353339975485\n",
+      "Iteration: 85 Metric: 0.3462540591739775 RMS Change: 0.0073097556480534835\n",
+      "Iteration: 86 Metric: 0.34516383896791164 RMS Change: 0.007302037085969709\n",
+      "Iteration: 87 Metric: 0.34390766216059593 RMS Change: 0.007302791925778989\n",
+      "Iteration: 88 Metric: 0.3427798176580276 RMS Change: 0.007297662825029363\n",
+      "Iteration: 89 Metric: 0.3415568382974554 RMS Change: 0.007299129737522347\n",
+      "Iteration: 90 Metric: 0.34044678126808625 RMS Change: 0.007292092179718333\n",
+      "Iteration: 91 Metric: 0.3392237698626274 RMS Change: 0.007293723018239292\n",
+      "Iteration: 92 Metric: 0.33806360068684266 RMS Change: 0.007286576763981694\n",
+      "Iteration: 93 Metric: 0.3368715299954687 RMS Change: 0.0072887990149214064\n",
+      "Iteration: 94 Metric: 0.3357172110686938 RMS Change: 0.0072805999374824905\n",
+      "Iteration: 95 Metric: 0.3344852728004095 RMS Change: 0.007283677210701344\n",
+      "Iteration: 96 Metric: 0.33337040646754934 RMS Change: 0.007274849946512961\n",
+      "Iteration: 97 Metric: 0.3321366779605495 RMS Change: 0.007279168552592468\n",
+      "Iteration: 98 Metric: 0.3310525709331826 RMS Change: 0.007271092149149361\n",
+      "Iteration: 99 Metric: 0.32988403768813646 RMS Change: 0.0072721416420762275\n",
+      "Iteration: 100 Metric: 0.32877781546814727 RMS Change: 0.007264694378902668\n",
+      "Iteration: 101 Metric: 0.3274453255793856 RMS Change: 0.007268470552590831\n",
+      "Iteration: 102 Metric: 0.3261351815006038 RMS Change: 0.007259974873316029\n",
+      "Iteration: 103 Metric: 0.3246284878499383 RMS Change: 0.007266212160013481\n",
+      "Iteration: 104 Metric: 0.3232470717106295 RMS Change: 0.007256335621336796\n",
+      "Iteration: 105 Metric: 0.32160789329570005 RMS Change: 0.007263003705962943\n",
+      "Iteration: 106 Metric: 0.32015377923710076 RMS Change: 0.0072561837812650885\n",
+      "Iteration: 107 Metric: 0.31848174537413965 RMS Change: 0.007260544958387898\n",
+      "Iteration: 108 Metric: 0.31694841527660333 RMS Change: 0.007253256742711291\n",
+      "Iteration: 109 Metric: 0.3153411767661876 RMS Change: 0.00726078764121433\n",
+      "Iteration: 110 Metric: 0.31389361671181426 RMS Change: 0.007250439338191659\n",
+      "Iteration: 111 Metric: 0.31231257635811444 RMS Change: 0.007257080091007016\n",
+      "Iteration: 112 Metric: 0.3108838655164915 RMS Change: 0.007250065474695517\n",
+      "Iteration: 113 Metric: 0.30930307494294157 RMS Change: 0.007255277688424457\n",
+      "Iteration: 114 Metric: 0.30792712128608607 RMS Change: 0.007246969450142895\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Iteration: 115 Metric: 0.3063552301301444 RMS Change: 0.0072544715577085635\n",
+      "Iteration: 116 Metric: 0.30499025708048805 RMS Change: 0.007245972988814546\n",
+      "Iteration: 117 Metric: 0.3034550585458994 RMS Change: 0.007252260081452726\n",
+      "Iteration: 118 Metric: 0.3020681634478834 RMS Change: 0.007245775136241464\n",
+      "Iteration: 119 Metric: 0.300560266296785 RMS Change: 0.007251024131039496\n",
+      "Iteration: 120 Metric: 0.2991600045892858 RMS Change: 0.007245469877084948\n",
+      "Iteration: 121 Metric: 0.2976003670321141 RMS Change: 0.0072504201340405396\n",
+      "Iteration: 122 Metric: 0.29616745186846516 RMS Change: 0.007244353701644031\n",
+      "Iteration: 123 Metric: 0.29463981478595247 RMS Change: 0.007251717901203141\n",
+      "Iteration: 124 Metric: 0.2933072535015559 RMS Change: 0.00724372394648649\n",
+      "Iteration: 125 Metric: 0.29182044336183477 RMS Change: 0.0072486780913258815\n",
+      "Iteration: 126 Metric: 0.29041490124590047 RMS Change: 0.007244446345622724\n",
+      "Iteration: 127 Metric: 0.2889734213584738 RMS Change: 0.00724890730423646\n",
+      "Iteration: 128 Metric: 0.28764615051633624 RMS Change: 0.00724311186768436\n",
+      "Iteration: 129 Metric: 0.2862065581167292 RMS Change: 0.007248489786743753\n",
+      "Iteration: 130 Metric: 0.28492282697308635 RMS Change: 0.0072423039047224535\n",
+      "Iteration: 131 Metric: 0.2835670785736472 RMS Change: 0.007248034538782019\n",
+      "Iteration: 132 Metric: 0.2822305427119003 RMS Change: 0.007241422486828033\n",
+      "Iteration: 133 Metric: 0.28084097066701685 RMS Change: 0.007245928110497088\n",
+      "Iteration: 134 Metric: 0.2795866877233823 RMS Change: 0.007241495645726199\n",
+      "Iteration: 135 Metric: 0.27836656180310454 RMS Change: 0.007246621585775774\n",
+      "Iteration: 136 Metric: 0.27713435621034765 RMS Change: 0.0072405601334853955\n",
+      "Iteration: 137 Metric: 0.2758338705378451 RMS Change: 0.0072460555433496165\n",
+      "Iteration: 138 Metric: 0.27469682517344385 RMS Change: 0.0072417365679518335\n",
+      "Iteration: 139 Metric: 0.27342036665474684 RMS Change: 0.007246275438769508\n",
+      "Iteration: 140 Metric: 0.2722488605373728 RMS Change: 0.007242423534036323\n",
+      "Iteration: 141 Metric: 0.27103645256473174 RMS Change: 0.007246366833299396\n",
+      "Iteration: 142 Metric: 0.2698826819333694 RMS Change: 0.007242148091993577\n",
+      "Iteration: 143 Metric: 0.26869302864587397 RMS Change: 0.007247880995653785\n",
+      "Iteration: 144 Metric: 0.2675167968669246 RMS Change: 0.007242380647410754\n",
+      "Iteration: 145 Metric: 0.2663056592967879 RMS Change: 0.007247958419038935\n",
+      "Iteration: 146 Metric: 0.26519967914669834 RMS Change: 0.007243560014650869\n",
+      "Iteration: 147 Metric: 0.2639680091206827 RMS Change: 0.00725002906738741\n",
+      "Iteration: 148 Metric: 0.26287482400160367 RMS Change: 0.00724397419637968\n",
+      "Iteration: 149 Metric: 0.26171416400383535 RMS Change: 0.0072501575885044935\n",
+      "Iteration: 150 Metric: 0.2605867675831833 RMS Change: 0.0072466940837689975\n",
+      "Iteration: 151 Metric: 0.2594228787630591 RMS Change: 0.0072513871902247905\n",
+      "Iteration: 152 Metric: 0.25836798135296446 RMS Change: 0.007246892136425043\n",
+      "Iteration: 153 Metric: 0.257165498085168 RMS Change: 0.00725330095587031\n",
+      "Iteration: 154 Metric: 0.2560586166869107 RMS Change: 0.007248910563806884\n",
+      "Iteration: 155 Metric: 0.25492336839093366 RMS Change: 0.007254724513138399\n",
+      "Iteration: 156 Metric: 0.25384179907127813 RMS Change: 0.007250019454147409\n",
+      "Iteration: 157 Metric: 0.2526225385749604 RMS Change: 0.007256465370614507\n",
+      "Iteration: 158 Metric: 0.25159123352841334 RMS Change: 0.007251530703712058\n",
+      "Iteration: 159 Metric: 0.25040812314896677 RMS Change: 0.007258887011597402\n",
+      "Iteration: 160 Metric: 0.24932287213260088 RMS Change: 0.007253096121812246\n",
+      "Iteration: 161 Metric: 0.24817321725862046 RMS Change: 0.007258907475157262\n",
+      "Iteration: 162 Metric: 0.24713188460405375 RMS Change: 0.007255392376622654\n",
+      "Iteration: 163 Metric: 0.24604618671451567 RMS Change: 0.007259534295265225\n",
+      "Iteration: 164 Metric: 0.24507035916772127 RMS Change: 0.00725714967950749\n",
+      "Iteration: 165 Metric: 0.24402454194468443 RMS Change: 0.007261922374269905\n",
+      "Iteration: 166 Metric: 0.24306522360088845 RMS Change: 0.007258264855013469\n",
+      "Iteration: 167 Metric: 0.24208588115963428 RMS Change: 0.007263033825305917\n",
+      "Iteration: 168 Metric: 0.24116273576327332 RMS Change: 0.007259503395582826\n",
+      "Iteration: 169 Metric: 0.24013373945037847 RMS Change: 0.007264246403620821\n",
+      "Iteration: 170 Metric: 0.23909636965860862 RMS Change: 0.007260822686780239\n",
+      "Iteration: 171 Metric: 0.23797010646174024 RMS Change: 0.007264678889267011\n",
+      "Iteration: 172 Metric: 0.23693655406603367 RMS Change: 0.007262377817969602\n",
+      "Iteration: 173 Metric: 0.2358273707371063 RMS Change: 0.0072681685751745774\n",
+      "Iteration: 174 Metric: 0.23479936586677852 RMS Change: 0.007264486981465544\n",
+      "Iteration: 175 Metric: 0.23361482561427235 RMS Change: 0.00726898228239211\n",
+      "Iteration: 176 Metric: 0.23254034105040916 RMS Change: 0.007268459415183135\n",
+      "Iteration: 177 Metric: 0.23135991436209297 RMS Change: 0.007271204157589504\n",
+      "Iteration: 178 Metric: 0.23025121783750255 RMS Change: 0.007269941802228063\n",
+      "Iteration: 179 Metric: 0.22908973519363007 RMS Change: 0.0072747459457669274\n",
+      "Iteration: 180 Metric: 0.2280640509771637 RMS Change: 0.007271693012734939\n",
+      "Iteration: 181 Metric: 0.22696698547508024 RMS Change: 0.007277363210255256\n",
+      "Iteration: 182 Metric: 0.225985195270083 RMS Change: 0.007274013549699206\n",
+      "Iteration: 183 Metric: 0.22490153102271226 RMS Change: 0.007279400809991705\n",
+      "Iteration: 184 Metric: 0.22384800639162722 RMS Change: 0.007277154569733688\n",
+      "Iteration: 185 Metric: 0.22277246692525712 RMS Change: 0.00728161041957055\n",
+      "Iteration: 186 Metric: 0.2218236568443007 RMS Change: 0.007279387622324302\n",
+      "Iteration: 187 Metric: 0.2206727118494763 RMS Change: 0.007284679368396651\n",
+      "Iteration: 188 Metric: 0.21959788470408684 RMS Change: 0.007282069619720847\n",
+      "Iteration: 189 Metric: 0.2184805160824901 RMS Change: 0.007287939934177383\n",
+      "Iteration: 190 Metric: 0.2174857277136334 RMS Change: 0.007285615705340575\n",
+      "Iteration: 191 Metric: 0.216447916080071 RMS Change: 0.007290172423395469\n",
+      "Iteration: 192 Metric: 0.21550298025238596 RMS Change: 0.007287574340426355\n",
+      "Iteration: 193 Metric: 0.21446590463692342 RMS Change: 0.007293780740670499\n",
+      "Iteration: 194 Metric: 0.21354760998075492 RMS Change: 0.00728938482645177\n",
+      "Iteration: 195 Metric: 0.2124658354010647 RMS Change: 0.007295743989977221\n",
+      "Iteration: 196 Metric: 0.21153082644500987 RMS Change: 0.0072931141990843044\n",
+      "Iteration: 197 Metric: 0.21059702986891282 RMS Change: 0.00729618264184148\n",
+      "Iteration: 198 Metric: 0.20961285299385646 RMS Change: 0.007296276942151117\n",
+      "Iteration: 199 Metric: 0.20865738944815707 RMS Change: 0.007299741411534927\n",
+      "Iteration: 200 Metric: 0.2077904178923979 RMS Change: 0.007297045101247399\n"
      ]
     }
    ],
    "source": [
-    "def update_diff_progress():\n",
-    "    diffeoProgress.value = registrar.filter.GetElapsedIterations()\n",
-    "\n",
-    "registrar.filter.AddObserver(itk.IterationEvent(),update_diff_progress)\n",
-    "\n",
     "(transform_result, mesh_result) = registrar.register(template_mesh,\n",
     "                                        target_mesh,\n",
-    "                                        filepath=DIFFEO_OUTPUT_FILE,\n",
-    "                                        verbose=True)"
+    "                                        max_rms_error=1e-3,\n",
+    "                                        verbose=True)\n",
+    "itk.meshwrite(mesh_result, DIFFEO_OUTPUT_FILE)"
    ]
   },
   {
@@ -995,7 +705,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 23,
+   "execution_count": 24,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -1013,23 +723,23 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 24,
+   "execution_count": 25,
    "metadata": {},
    "outputs": [],
    "source": [
     "from src.hasi.hasi.pointsetentropyregistrar import PointSetEntropyRegistrar\n",
-    "registrar = PointSetEntropyRegistrar()"
+    "registrar = PointSetEntropyRegistrar(verbose=True)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 25,
+   "execution_count": 26,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "85d5f2525bfb4e28b18750c02df2adff",
+       "model_id": "b42ebec87a0d4e47a06a30138459e2c9",
        "version_major": 2,
        "version_minor": 0
       },
@@ -1042,44 +752,44 @@
     }
    ],
    "source": [
-    "progress = FloatProgress(\n",
+    "entropyProgress = FloatProgress(\n",
     "        min=0.0,\n",
     "        max=2000.0,\n",
     "        step=1\n",
     "    )\n",
     "progressBox = HBox([\n",
     "    Label('Register images'),\n",
-    "    progress\n",
+    "    entropyProgress\n",
     "])\n",
     "progressBox"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 26,
+   "execution_count": 27,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "0"
+       "1"
       ]
      },
-     "execution_count": 26,
+     "execution_count": 27,
      "metadata": {},
      "output_type": "execute_result"
     }
    ],
    "source": [
     "def update_progress():\n",
-    "    progressBox.value = registrar.optimizer.GetCurrentIteration()\n",
+    "    entropyProgress.value = registrar.optimizer.GetCurrentIteration()\n",
     "\n",
     "registrar.optimizer.AddObserver(itk.IterationEvent(),update_progress)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 27,
+   "execution_count": 28,
    "metadata": {
     "scrolled": true
    },
@@ -1088,314 +798,203 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "0 0.0\n",
-      "0 0.18402767981233376\n",
-      "1 0.13636549597252293\n",
-      "2 0.1136153451996774\n",
-      "3 0.10070102504901322\n",
-      "4 0.0921356833845075\n",
-      "5 0.08639007757362922\n",
-      "6 0.08227116489324207\n",
-      "7 0.07907374804042967\n",
-      "8 0.07637873779025549\n",
-      "9 0.07405272544249199\n",
-      "10 0.0719671439265937\n",
-      "11 0.07005118273844133\n",
-      "12 0.06828105853186942\n",
-      "13 0.06660776118233713\n",
-      "14 0.06498893467311129\n",
-      "15 0.06343569110339238\n",
-      "16 0.06194662338114907\n",
-      "17 0.06055190889404482\n",
-      "18 0.059165763253996674\n",
-      "19 0.05782261337640995\n",
-      "20 0.05652837680168472\n",
-      "21 0.05530507143716108\n",
-      "22 0.054134602834920165\n",
-      "23 0.053020636495240706\n",
-      "24 0.051944194750049855\n",
-      "25 0.05091371680519884\n",
-      "26 0.04990854226515862\n",
-      "27 0.048950925455557744\n",
-      "28 0.048024307153977146\n",
-      "29 0.04712948446720358\n",
-      "30 0.0462846441709203\n",
-      "31 0.04545128218920508\n",
-      "32 0.044643358857768024\n",
-      "33 0.043888957619121746\n",
-      "34 0.04316445250215185\n",
-      "35 0.04248362994983003\n",
-      "36 0.04183262747532614\n",
-      "37 0.0412037429531749\n",
-      "38 0.04059294224542183\n",
-      "39 0.040016154126255296\n",
-      "40 0.03945396290133864\n",
-      "41 0.03892002005470285\n",
-      "42 0.03840443107046075\n",
-      "43 0.03791056816607884\n",
-      "44 0.037459777174137766\n",
-      "45 0.03701969721014922\n",
-      "46 0.03658629120129073\n",
-      "47 0.036148671462410145\n",
-      "48 0.03571479106454752\n",
-      "49 0.035295001371293634\n",
-      "50 0.034907069624876136\n",
-      "51 0.03453613144565263\n",
-      "52 0.03417757083123989\n",
-      "53 0.03382311711899252\n",
-      "54 0.03348168950333608\n",
-      "55 0.03316049376927745\n",
-      "56 0.032854504731590364\n",
-      "57 0.03257361869598419\n",
-      "58 0.0323092692810875\n",
-      "59 0.03205047461546761\n",
-      "60 0.03179900730212333\n",
-      "61 0.03154807758579675\n",
-      "62 0.03128955525259092\n",
-      "63 0.031031266067091168\n",
-      "64 0.0307914884795602\n",
-      "65 0.030563173149740608\n",
-      "66 0.030350547461453388\n",
-      "67 0.030142253805310115\n",
-      "68 0.02994255382189799\n",
-      "69 0.02974295236977903\n",
-      "70 0.029546454083031515\n",
-      "71 0.029353613918214175\n",
-      "72 0.029176655608014523\n",
-      "73 0.02900495709415009\n",
-      "74 0.028833241261115253\n",
-      "75 0.02866841099200312\n",
-      "76 0.02851848145912843\n",
-      "77 0.0283712340287105\n",
-      "78 0.028230380322573304\n",
-      "79 0.028095750075436212\n",
-      "80 0.027961613232161852\n",
-      "81 0.027824980354412124\n",
-      "82 0.027689411876232813\n",
-      "83 0.027556395188551245\n",
-      "84 0.027428622992412974\n",
-      "85 0.027303406081203404\n",
-      "86 0.027186117232923704\n",
-      "87 0.027075258495759858\n",
-      "88 0.026965938095766064\n",
-      "89 0.026862171444398442\n",
-      "90 0.02676113508640635\n",
-      "91 0.026658520164617016\n",
-      "92 0.02655655109006952\n",
-      "93 0.026460628740804664\n",
-      "94 0.026370572332453213\n",
-      "95 0.02628404695256076\n",
-      "96 0.026201904741376496\n",
-      "97 0.026117630173188012\n",
-      "98 0.026031621135564214\n",
-      "99 0.025945551150562032\n",
-      "100 0.02586712635392992\n",
-      "101 0.025791748067019032\n",
-      "102 0.025720664700857238\n",
-      "103 0.025649681459085194\n",
-      "104 0.025575052378321538\n",
-      "105 0.025501953968138983\n",
-      "106 0.02543213911567575\n",
-      "107 0.0253693540814346\n",
-      "108 0.025310507143506158\n",
-      "109 0.025255749849054102\n",
-      "110 0.025206912561183778\n",
-      "111 0.02515718284278915\n",
-      "112 0.025107656792173236\n",
-      "113 0.025057741287912962\n",
-      "114 0.025010688978617465\n",
-      "115 0.024964973881096884\n",
-      "116 0.02491822486369632\n",
-      "117 0.024871389282046276\n",
-      "118 0.024826145186941734\n",
-      "119 0.024779736450485656\n",
-      "120 0.024733731527519724\n",
-      "121 0.024688514996213995\n",
-      "122 0.024644659156440134\n",
-      "123 0.024601106594520736\n",
-      "124 0.024559033817192162\n",
-      "125 0.02451921839639598\n",
-      "126 0.02448143950882282\n",
-      "127 0.024446486754136826\n",
-      "128 0.024413773193221765\n",
-      "129 0.024381921902966806\n",
-      "130 0.024351333496826694\n",
-      "131 0.02432167726832519\n",
-      "132 0.024292232577790777\n",
-      "133 0.02426293830106277\n",
-      "134 0.02423350002594374\n",
-      "135 0.02420389743056043\n",
-      "136 0.024173685843396894\n",
-      "137 0.024145668193371675\n",
-      "138 0.024119650869516295\n",
-      "139 0.024094390673283866\n",
-      "140 0.02407021831117784\n",
-      "141 0.02404671926774642\n",
-      "142 0.02402348568517847\n",
-      "143 0.02400032375702212\n",
-      "144 0.023978599124547646\n",
-      "145 0.02395686599034836\n",
-      "146 0.023936004803659736\n",
-      "147 0.02391535751448654\n",
-      "148 0.023896039696370868\n",
-      "149 0.023877271561901437\n",
-      "150 0.023859596760080138\n",
-      "151 0.023843542241006963\n",
-      "152 0.023829314267910733\n",
-      "153 0.02381631617010177\n",
-      "154 0.02380405611697416\n",
-      "155 0.023791822981691937\n",
-      "156 0.023780564646966897\n",
-      "157 0.023770233505179744\n",
-      "158 0.02376066053938431\n",
-      "159 0.023751984091467386\n",
-      "160 0.023745017582532793\n",
-      "161 0.023738465826114687\n",
-      "162 0.023732203575458848\n",
-      "163 0.023726327142139993\n",
-      "164 0.02372052286522561\n",
-      "165 0.023715209337304487\n",
-      "166 0.023708716031133385\n",
-      "167 0.023702164892591367\n",
-      "168 0.02369610797126128\n",
-      "169 0.02369003172957132\n",
-      "170 0.023684307632522928\n",
-      "171 0.023678529485915218\n",
-      "172 0.023672232162141038\n",
-      "173 0.023665952940276604\n",
-      "174 0.023660048099062577\n",
-      "175 0.023653658924159666\n",
-      "176 0.02364728016950504\n",
-      "177 0.023641139704051736\n",
-      "178 0.023634456561241544\n",
-      "179 0.02362778478883809\n",
-      "180 0.023622004225594594\n",
-      "181 0.02361640735124622\n",
-      "182 0.023610557208121108\n",
-      "183 0.023604903292065976\n",
-      "184 0.023599869985642317\n",
-      "185 0.023594848208174625\n",
-      "186 0.023589932624246416\n",
-      "187 0.023585486818561107\n",
-      "188 0.023581392658915984\n",
-      "189 0.02357749771357438\n",
-      "190 0.0235736810098832\n",
-      "191 0.02357037489278345\n",
-      "192 0.023567166572818047\n",
-      "193 0.02356417037589649\n",
-      "194 0.02356141705213307\n",
-      "195 0.023558923946442437\n",
-      "196 0.02355641715580542\n",
-      "197 0.02355448470169577\n",
-      "198 0.02355284331258703\n",
-      "199 0.02355117997038823\n",
-      "200 0.023549778146149038\n",
-      "201 0.023548574589539\n",
-      "202 0.023547655687764853\n",
-      "203 0.02354671080489152\n",
-      "204 0.023545823510536176\n",
-      "205 0.023545012263308795\n",
-      "206 0.023544180183673536\n",
-      "207 0.023543364780252204\n",
-      "208 0.023542638908129698\n",
-      "209 0.023541739547997632\n",
-      "210 0.023541058166644726\n",
-      "211 0.023540455130880048\n",
-      "212 0.023539775911267078\n",
-      "213 0.02353940107044854\n",
-      "214 0.02353871629517248\n",
-      "215 0.023538320702483143\n",
-      "216 0.023538233945271766\n",
-      "217 0.023538264333384087\n",
-      "218 0.0235380408763558\n",
-      "219 0.023538051770734\n",
-      "220 0.023538113151052052\n",
-      "221 0.02353829012698744\n",
-      "222 0.023538330266459857\n",
-      "223 0.023537942590845896\n",
-      "224 0.023537849099749587\n",
-      "225 0.02353797711784183\n",
-      "226 0.02353824653518615\n",
-      "227 0.02353851649247712\n",
-      "228 0.02353856777075446\n",
-      "229 0.023538671979303084\n",
-      "230 0.023538654496289363\n",
-      "231 0.023538605287764015\n",
-      "232 0.02353867564605884\n",
-      "233 0.023538950215695742\n",
-      "234 0.02353915019489484\n",
-      "235 0.023539314552600502\n",
-      "236 0.023539816753211852\n",
-      "237 0.023540306174864814\n",
-      "238 0.02354094686632577\n",
-      "239 0.02354158200141846\n",
-      "240 0.023542299882528497\n",
-      "241 0.0235428434205618\n",
-      "242 0.023542999278756374\n",
-      "243 0.023543139591858414\n",
-      "244 0.023543409647219862\n",
-      "245 0.023543295492146246\n",
-      "246 0.023542829660729753\n",
-      "247 0.02354251010263475\n",
-      "248 0.023542298854126658\n",
-      "249 0.023542625046210387\n",
-      "250 0.023543038691496695\n",
-      "251 0.023543380031989813\n",
-      "252 0.0235436050933445\n",
-      "253 0.02354377322842745\n",
-      "254 0.023543825519793407\n",
-      "255 0.023544176854224642\n",
-      "256 0.023544153961364455\n",
-      "257 0.023543894569445913\n",
-      "258 0.02354361835550088\n",
-      "259 0.02354316646083936\n",
-      "260 0.023542650029766084\n",
-      "261 0.023542244715486018\n",
-      "262 0.02354157223778362\n",
-      "263 0.023540710503219448\n",
-      "264 0.023539985047202276\n",
-      "265 0.023539294664399434\n",
-      "266 0.02353804096826517\n",
-      "267 0.0235371019323782\n",
-      "268 0.02353624268299268\n",
-      "269 0.023535375939018357\n",
-      "270 0.02353452406067056\n",
-      "271 0.02353356056214122\n",
-      "272 0.023532717772086906\n",
-      "273 0.023532169486755634\n",
-      "274 0.02353161493611594\n",
-      "275 0.02353122816777471\n",
-      "276 0.023530836024985298\n",
-      "277 0.02353044411353049\n",
-      "278 0.023530199612167162\n",
-      "279 0.023529853976976413\n",
-      "280 0.02352954081042309\n",
-      "281 0.023529082377530614\n",
-      "282 0.023528025187164587\n",
-      "283 0.023527095870827422\n",
-      "284 0.02352638401910551\n",
-      "285 0.023525682008909133\n",
-      "286 0.023525320116500728\n",
-      "287 0.023524462235438522\n",
-      "288 0.023523631942113297\n",
-      "289 0.023523218985221014\n",
-      "290 0.023522863474644624\n",
-      "291 0.02352261442901094\n",
-      "292 0.023522546059854557\n",
-      "293 0.02352235049520703\n",
-      "294 0.023521963579332977\n",
-      "295 0.02352156507039554\n",
-      "296 0.02352111666172619\n",
-      "297 0.023520858904054483\n",
-      "298 0.023520628076733732\n",
-      "299 0.02352043074943916\n",
-      "300 0.02352043074943916\n",
-      "Number of iterations run: 300\n",
-      "Final metric value: 0.02352043074943916\n",
-      "Final transform position: [1.0096817112862029, -0.01925155462836343, 0.12903629899351138, 0.0416768919453609, 1.0124782951074331, -0.14153299119235824, -0.11065600116707777, 0.17059161697543043, 0.992381482061887, -0.20390178598320807, 0.04741098381044752, -0.35108988072009056]\n",
+      "Iteration: 0 Metric: 0.0\n",
+      "Iteration: 0 Metric: 0.0\n",
+      "Iteration: 0 Metric: 0.0\n",
+      "Iteration: 0 Metric: 0.0\n",
+      "Iteration: 0 Metric: 0.0\n",
+      "Iteration: 0 Metric: 0.0\n",
+      "Iteration: 0 Metric: 0.18402767981233376\n",
+      "Iteration: 1 Metric: 0.13636549597252293\n",
+      "Iteration: 2 Metric: 0.1136153451996774\n",
+      "Iteration: 3 Metric: 0.10070102504901322\n",
+      "Iteration: 4 Metric: 0.0921356833845075\n",
+      "Iteration: 5 Metric: 0.08639007757362922\n",
+      "Iteration: 6 Metric: 0.08227116489324207\n",
+      "Iteration: 7 Metric: 0.07907374804042967\n",
+      "Iteration: 8 Metric: 0.07637873779025549\n",
+      "Iteration: 9 Metric: 0.07405272544249199\n",
+      "Iteration: 10 Metric: 0.0719671439265937\n",
+      "Iteration: 11 Metric: 0.07005118273844133\n",
+      "Iteration: 12 Metric: 0.06828105853186942\n",
+      "Iteration: 13 Metric: 0.06660776118233713\n",
+      "Iteration: 14 Metric: 0.06498893467311129\n",
+      "Iteration: 15 Metric: 0.06343569110339238\n",
+      "Iteration: 16 Metric: 0.06194662338114907\n",
+      "Iteration: 17 Metric: 0.06055190889404482\n",
+      "Iteration: 18 Metric: 0.059165763253996674\n",
+      "Iteration: 19 Metric: 0.05782261337640995\n",
+      "Iteration: 20 Metric: 0.05652837680168472\n",
+      "Iteration: 21 Metric: 0.05530507143716108\n",
+      "Iteration: 22 Metric: 0.054134602834920165\n",
+      "Iteration: 23 Metric: 0.053020636495240706\n",
+      "Iteration: 24 Metric: 0.051944194750049855\n",
+      "Iteration: 25 Metric: 0.05091371680519884\n",
+      "Iteration: 26 Metric: 0.04990854226515862\n",
+      "Iteration: 27 Metric: 0.048950925455557744\n",
+      "Iteration: 28 Metric: 0.048024307153977146\n",
+      "Iteration: 29 Metric: 0.04712948446720358\n",
+      "Iteration: 30 Metric: 0.0462846441709203\n",
+      "Iteration: 31 Metric: 0.04545128218920508\n",
+      "Iteration: 32 Metric: 0.044643358857768024\n",
+      "Iteration: 33 Metric: 0.043888957619121746\n",
+      "Iteration: 34 Metric: 0.04316445250215185\n",
+      "Iteration: 35 Metric: 0.04248362994983003\n",
+      "Iteration: 36 Metric: 0.04183262747532614\n",
+      "Iteration: 37 Metric: 0.0412037429531749\n",
+      "Iteration: 38 Metric: 0.04059294224542183\n",
+      "Iteration: 39 Metric: 0.040016154126255296\n",
+      "Iteration: 40 Metric: 0.03945396290133864\n",
+      "Iteration: 41 Metric: 0.03892002005470285\n",
+      "Iteration: 42 Metric: 0.03840443107046075\n",
+      "Iteration: 43 Metric: 0.03791056816607884\n",
+      "Iteration: 44 Metric: 0.037459777174137766\n",
+      "Iteration: 45 Metric: 0.03701969721014922\n",
+      "Iteration: 46 Metric: 0.03658629120129073\n",
+      "Iteration: 47 Metric: 0.036148671462410145\n",
+      "Iteration: 48 Metric: 0.03571479106454752\n",
+      "Iteration: 49 Metric: 0.035295001371293634\n",
+      "Iteration: 50 Metric: 0.034907069624876136\n",
+      "Iteration: 51 Metric: 0.03453613144565263\n",
+      "Iteration: 52 Metric: 0.03417757083123989\n",
+      "Iteration: 53 Metric: 0.03382311711899252\n",
+      "Iteration: 54 Metric: 0.03348168950333608\n",
+      "Iteration: 55 Metric: 0.03316049376927745\n",
+      "Iteration: 56 Metric: 0.032854504731590364\n",
+      "Iteration: 57 Metric: 0.03257361869598419\n",
+      "Iteration: 58 Metric: 0.0323092692810875\n",
+      "Iteration: 59 Metric: 0.03205047461546761\n",
+      "Iteration: 60 Metric: 0.03179900730212333\n",
+      "Iteration: 61 Metric: 0.03154807758579675\n",
+      "Iteration: 62 Metric: 0.03128955525259092\n",
+      "Iteration: 63 Metric: 0.031031266067091168\n",
+      "Iteration: 64 Metric: 0.0307914884795602\n",
+      "Iteration: 65 Metric: 0.030563173149740608\n",
+      "Iteration: 66 Metric: 0.030350547461453388\n",
+      "Iteration: 67 Metric: 0.030142253805310115\n",
+      "Iteration: 68 Metric: 0.02994255382189799\n",
+      "Iteration: 69 Metric: 0.02974295236977903\n",
+      "Iteration: 70 Metric: 0.029546454083031515\n",
+      "Iteration: 71 Metric: 0.029353613918214175\n",
+      "Iteration: 72 Metric: 0.029176655608014523\n",
+      "Iteration: 73 Metric: 0.02900495709415009\n",
+      "Iteration: 74 Metric: 0.028833241261115253\n",
+      "Iteration: 75 Metric: 0.02866841099200312\n",
+      "Iteration: 76 Metric: 0.02851848145912843\n",
+      "Iteration: 77 Metric: 0.0283712340287105\n",
+      "Iteration: 78 Metric: 0.028230380322573304\n",
+      "Iteration: 79 Metric: 0.028095750075436212\n",
+      "Iteration: 80 Metric: 0.027961613232161852\n",
+      "Iteration: 81 Metric: 0.027824980354412124\n",
+      "Iteration: 82 Metric: 0.027689411876232813\n",
+      "Iteration: 83 Metric: 0.027556395188551245\n",
+      "Iteration: 84 Metric: 0.027428622992412974\n",
+      "Iteration: 85 Metric: 0.027303406081203404\n",
+      "Iteration: 86 Metric: 0.027186117232923704\n",
+      "Iteration: 87 Metric: 0.027075258495759858\n",
+      "Iteration: 88 Metric: 0.026965938095766064\n",
+      "Iteration: 89 Metric: 0.026862171444398442\n",
+      "Iteration: 90 Metric: 0.02676113508640635\n",
+      "Iteration: 91 Metric: 0.026658520164617016\n",
+      "Iteration: 92 Metric: 0.02655655109006952\n",
+      "Iteration: 93 Metric: 0.026460628740804664\n",
+      "Iteration: 94 Metric: 0.026370572332453213\n",
+      "Iteration: 95 Metric: 0.02628404695256076\n",
+      "Iteration: 96 Metric: 0.026201904741376496\n",
+      "Iteration: 97 Metric: 0.026117630173188012\n",
+      "Iteration: 98 Metric: 0.026031621135564214\n",
+      "Iteration: 99 Metric: 0.025945551150562032\n",
+      "Iteration: 100 Metric: 0.02586712635392992\n",
+      "Iteration: 101 Metric: 0.025791748067019032\n",
+      "Iteration: 102 Metric: 0.025720664700857238\n",
+      "Iteration: 103 Metric: 0.025649681459085194\n",
+      "Iteration: 104 Metric: 0.025575052378321538\n",
+      "Iteration: 105 Metric: 0.025501953968138983\n",
+      "Iteration: 106 Metric: 0.02543213911567575\n",
+      "Iteration: 107 Metric: 0.0253693540814346\n",
+      "Iteration: 108 Metric: 0.025310507143506158\n",
+      "Iteration: 109 Metric: 0.025255749849054102\n",
+      "Iteration: 110 Metric: 0.025206912561183778\n",
+      "Iteration: 111 Metric: 0.02515718284278915\n",
+      "Iteration: 112 Metric: 0.025107656792173236\n",
+      "Iteration: 113 Metric: 0.025057741287912962\n",
+      "Iteration: 114 Metric: 0.025010688978617465\n",
+      "Iteration: 115 Metric: 0.024964973881096884\n",
+      "Iteration: 116 Metric: 0.02491822486369632\n",
+      "Iteration: 117 Metric: 0.024871389282046276\n",
+      "Iteration: 118 Metric: 0.024826145186941734\n",
+      "Iteration: 119 Metric: 0.024779736450485656\n",
+      "Iteration: 120 Metric: 0.024733731527519724\n",
+      "Iteration: 121 Metric: 0.024688514996213995\n",
+      "Iteration: 122 Metric: 0.024644659156440134\n",
+      "Iteration: 123 Metric: 0.024601106594520736\n",
+      "Iteration: 124 Metric: 0.024559033817192162\n",
+      "Iteration: 125 Metric: 0.02451921839639598\n",
+      "Iteration: 126 Metric: 0.02448143950882282\n",
+      "Iteration: 127 Metric: 0.024446486754136826\n",
+      "Iteration: 128 Metric: 0.024413773193221765\n",
+      "Iteration: 129 Metric: 0.024381921902966806\n",
+      "Iteration: 130 Metric: 0.024351333496826694\n",
+      "Iteration: 131 Metric: 0.02432167726832519\n",
+      "Iteration: 132 Metric: 0.024292232577790777\n",
+      "Iteration: 133 Metric: 0.02426293830106277\n",
+      "Iteration: 134 Metric: 0.02423350002594374\n",
+      "Iteration: 135 Metric: 0.02420389743056043\n",
+      "Iteration: 136 Metric: 0.024173685843396894\n",
+      "Iteration: 137 Metric: 0.024145668193371675\n",
+      "Iteration: 138 Metric: 0.024119650869516295\n",
+      "Iteration: 139 Metric: 0.024094390673283866\n",
+      "Iteration: 140 Metric: 0.02407021831117784\n",
+      "Iteration: 141 Metric: 0.02404671926774642\n",
+      "Iteration: 142 Metric: 0.02402348568517847\n",
+      "Iteration: 143 Metric: 0.02400032375702212\n",
+      "Iteration: 144 Metric: 0.023978599124547646\n",
+      "Iteration: 145 Metric: 0.02395686599034836\n",
+      "Iteration: 146 Metric: 0.023936004803659736\n",
+      "Iteration: 147 Metric: 0.02391535751448654\n",
+      "Iteration: 148 Metric: 0.023896039696370868\n",
+      "Iteration: 149 Metric: 0.023877271561901437\n",
+      "Iteration: 150 Metric: 0.023859596760080138\n",
+      "Iteration: 151 Metric: 0.023843542241006963\n",
+      "Iteration: 152 Metric: 0.023829314267910733\n",
+      "Iteration: 153 Metric: 0.02381631617010177\n",
+      "Iteration: 154 Metric: 0.02380405611697416\n",
+      "Iteration: 155 Metric: 0.023791822981691937\n",
+      "Iteration: 156 Metric: 0.023780564646966897\n",
+      "Iteration: 157 Metric: 0.023770233505179744\n",
+      "Iteration: 158 Metric: 0.02376066053938431\n",
+      "Iteration: 159 Metric: 0.023751984091467386\n",
+      "Iteration: 160 Metric: 0.023745017582532793\n",
+      "Iteration: 161 Metric: 0.023738465826114687\n",
+      "Iteration: 162 Metric: 0.023732203575458848\n",
+      "Iteration: 163 Metric: 0.023726327142139993\n",
+      "Iteration: 164 Metric: 0.02372052286522561\n",
+      "Iteration: 165 Metric: 0.023715209337304487\n",
+      "Iteration: 166 Metric: 0.023708716031133385\n",
+      "Iteration: 167 Metric: 0.023702164892591367\n",
+      "Iteration: 168 Metric: 0.02369610797126128\n",
+      "Iteration: 169 Metric: 0.02369003172957132\n",
+      "Iteration: 170 Metric: 0.023684307632522928\n",
+      "Iteration: 171 Metric: 0.023678529485915218\n",
+      "Iteration: 172 Metric: 0.023672232162141038\n",
+      "Iteration: 173 Metric: 0.023665952940276604\n",
+      "Iteration: 174 Metric: 0.023660048099062577\n",
+      "Iteration: 175 Metric: 0.023653658924159666\n",
+      "Iteration: 176 Metric: 0.02364728016950504\n",
+      "Iteration: 177 Metric: 0.023641139704051736\n",
+      "Iteration: 178 Metric: 0.023634456561241544\n",
+      "Iteration: 179 Metric: 0.02362778478883809\n",
+      "Iteration: 180 Metric: 0.023622004225594594\n",
+      "Iteration: 181 Metric: 0.02361640735124622\n",
+      "Iteration: 182 Metric: 0.023610557208121108\n",
+      "Iteration: 183 Metric: 0.023604903292065976\n",
+      "Iteration: 184 Metric: 0.023599869985642317\n",
+      "Iteration: 185 Metric: 0.023599869985642317\n",
+      "Number of iterations run: 185\n",
+      "Final metric value: 0.023599869985642317\n",
+      "Final transform position: [1.0106625225070383, -0.02275704571888098, 0.12374059701277136, 0.04097965683098047, 1.0140192795610004, -0.13518422332905158, -0.11392776422934717, 0.16289349012456367, 0.9931393057995168, -0.19910442594468017, 0.04431398224202008, -0.34451813263325887]\n",
       "Optimizer scales: [11.744144658808226, 4.475390574611993, 2.5780283025156336, 11.744144658808226, 4.475390574611993, 2.5780283025156336, 11.744144658808226, 4.475390574611993, 2.5780283025156336, 1.0000000000000018, 1.0000000000000018, 1.0000000000000018]\n",
-      "Optimizer learning rate: 1.0\n",
-      "Wrote resulting point set to Output/901-pointset-registered.obj\n"
+      "Optimizer learning rate: 1.0\n"
      ]
     }
    ],
@@ -1406,16 +1005,16 @@
     "                       template_mesh=template_mesh,\n",
     "                       target_mesh=target_mesh,\n",
     "                       metric=metric,\n",
-    "                       filepath=POINTSET_OUTPUT_FILE,\n",
-    "                       verbose=True,\n",
     "                       learning_rate=1.0,\n",
-    "                       max_iterations=300,\n",
-    "                       resample_from_target=False)"
+    "                       minimum_convergence_value=1e-6,\n",
+    "                       convergence_window_size=3,\n",
+    "                       max_iterations=300)\n",
+    "itk.meshwrite(mesh_result, POINTSET_OUTPUT_FILE)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 28,
+   "execution_count": 29,
    "metadata": {
     "scrolled": true
    },
@@ -1435,7 +1034,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 30,
    "metadata": {
     "scrolled": true
    },
@@ -1449,7 +1048,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 31,
    "metadata": {
     "scrolled": false
    },
@@ -1460,7 +1059,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 32,
    "metadata": {
     "scrolled": true
    },
diff --git a/src/hasi/hasi/align.py b/src/hasi/hasi/align.py
index a575295..c027441 100644
--- a/src/hasi/hasi/align.py
+++ b/src/hasi/hasi/align.py
@@ -205,7 +205,7 @@ def register_template_to_sample(template_mesh:itk.Mesh,
                                 verbose=False):
     from .pointsetentropyregistrar import PointSetEntropyRegistrar
 
-    registrar = PointSetEntropyRegistrar()
+    registrar = PointSetEntropyRegistrar(verbose=verbose)
     metric = itk.EuclideanDistancePointSetToPointSetMetricv4[itk.PointSet[itk.F,3]].New()
     transform = itk.Euler3DTransform[itk.D].New()
 
@@ -218,8 +218,7 @@ def register_template_to_sample(template_mesh:itk.Mesh,
                                                     metric=metric,
                                                     transform=transform,
                                                     learning_rate=learning_rate,
-                                                    max_iterations=max_iterations,
-                                                    verbose=verbose)
+                                                    max_iterations=max_iterations)
     return deformed_mesh
 
 
diff --git a/src/hasi/hasi/diffeoregistrar.py b/src/hasi/hasi/diffeoregistrar.py
index 259c663..e643db3 100644
--- a/src/hasi/hasi/diffeoregistrar.py
+++ b/src/hasi/hasi/diffeoregistrar.py
@@ -27,9 +27,7 @@
 
 class DiffeoRegistrar(MeshToMeshRegistrar):
     
-    # Common definitions
-    MAX_ITERATIONS = 200
-
+    # Type definitions for function annotations
     Dimension = 3
     PixelType = itk.F
     ImageType = itk.Image[PixelType, Dimension]
@@ -41,48 +39,50 @@ class DiffeoRegistrar(MeshToMeshRegistrar):
     FixedPointSetType = itk.PointSet[itk.F, Dimension]
 
     MeshType = itk.Mesh[itk.F, Dimension]
-
-    # Definitions for diffeometric registration
+    TransformType = itk.DisplacementFieldTransform[itk.F, Dimension]
+    
+    VectorPixelType = itk.Vector[itk.F, Dimension]
+    DisplacementFieldType = itk.Image[VectorPixelType, Dimension]
+    DiffeoRegistrationFilterType = \
+        itk.DiffeomorphicDemonsRegistrationFilter[ImageType,
+                                                    ImageType,
+                                                    DisplacementFieldType]
+
+    # Default function values
+    MAX_ITERATIONS = 200
     STANDARD_DEVIATIONS = 1.0
-    TransformType = \
-        itk.DisplacementFieldTransform[itk.F, Dimension]
-
+    MAX_RMS_ERROR = 0.0
 
-    def __init__(self):
-        self.initialize()
+    def __init__(self, verbose:bool=False):
+        super(self.__class__,self).__init__(verbose=verbose)
 
     # Expose method to reset persistent objects as desired
     def initialize(self):
-        VectorPixelType = itk.Vector[itk.F, self.Dimension]
-        DisplacementFieldType = itk.Image[VectorPixelType, self.Dimension]
-        DiffeoRegistrationFilterType = \
-            itk.DiffeomorphicDemonsRegistrationFilter[self.ImageType,
-                                                      self.ImageType,
-                                                      DisplacementFieldType]
-        self.filter = DiffeoRegistrationFilterType.New(
+        self.filter = self.DiffeoRegistrationFilterType.New(
             StandardDeviations=self.STANDARD_DEVIATIONS)
 
+        # Print iteration updates
+        if(self.verbose):
+            def print_iteration():
+                print(f'Iteration: {self.filter.GetElapsedIterations()}'
+                      f' Metric: {self.filter.GetMetric()}'
+                      f' RMS Change: {self.filter.GetRMSChange()}')
+            self.filter.AddObserver(itk.ProgressEvent(),print_iteration)
+
     # Register meshes with diffeomorphic demons algorithm
     def register(self,
                  template_mesh:MeshType,
                  target_mesh:MeshType,
-                 filepath:str=None,
-                 verbose=False,
-                 max_iterations=MAX_ITERATIONS) -> (TransformType, MeshType):
+                 max_iterations:int=MAX_ITERATIONS,
+                 max_rms_error:float=MAX_RMS_ERROR,
+                 verbose=False) -> (TransformType, MeshType):
 
         (template_image, target_image) = self.mesh_to_image([template_mesh, target_mesh])
 
         self.filter.SetFixedImage(template_image)
         self.filter.SetMovingImage(target_image)
-
         self.filter.SetNumberOfIterations(max_iterations)
-      
-        def print_iteration():
-            metric = self.filter.GetMetric()
-            print(f'{metric}')
-
-        if(verbose):
-            self.filter.AddObserver(itk.ProgressEvent(),print_iteration)
+        self.filter.SetMaximumRMSError(max_rms_error)
 
         # Run registration
         self.filter.Update()
@@ -100,9 +100,4 @@ def print_iteration():
             Transform=transform)
         transform_filter.Update()
 
-        if filepath is not None:
-            itk.meshwrite(transform_filter.GetOutput(),filepath)
-            if(verbose):
-                print(f'Wrote resulting mesh to {filepath}')
-
         return (transform, transform_filter.GetOutput())
diff --git a/src/hasi/hasi/meansquaresregistrar.py b/src/hasi/hasi/meansquaresregistrar.py
index 748ddde..bf46e2c 100644
--- a/src/hasi/hasi/meansquaresregistrar.py
+++ b/src/hasi/hasi/meansquaresregistrar.py
@@ -26,9 +26,7 @@
 from .meshtomeshregistrar import MeshToMeshRegistrar
 
 class MeanSquaresRegistrar(MeshToMeshRegistrar):
-    # Common definitions
-    MAX_ITERATIONS = 200
-
+    # Type definitions for function annotations
     Dimension = 3
     PixelType = itk.F
     ImageType = itk.Image[PixelType, Dimension]
@@ -41,7 +39,8 @@ class MeanSquaresRegistrar(MeshToMeshRegistrar):
 
     MeshType = itk.Mesh[itk.F, Dimension]
 
-    # Definitions for default registration
+    # Default function values
+    MAX_ITERATIONS = 200
     V_SPLINE_ORDER = 3
     GRID_NODES_IN_ONE_DIMENSION = 4
 
@@ -56,26 +55,32 @@ class MeanSquaresRegistrar(MeshToMeshRegistrar):
 
     TransformType = itk.BSplineTransform[itk.D, Dimension, V_SPLINE_ORDER]
     
-
-    def __init__(self):
-        super(self.__class__,self).__init__()
+    def __init__(self, verbose:bool=False):
+        super(self.__class__,self).__init__(verbose=verbose)
 
     def initialize(self):
         # Optimizer is exposed so that calling scripts can reference with custom observers
-        self.optimizer = itk.LBFGSBOptimizerv4.New(CostFunctionConvergenceFactor=self.COST_FN_CONVERGENCE_FACTOR,
-            GradientConvergenceTolerance=self.GRADIENT_CONVERGENCE_TOLERANCE,
+        self.optimizer = itk.LBFGSBOptimizerv4.New(
             MaximumNumberOfFunctionEvaluations=self.MAX_FUNCTION_EVALUATIONS,
             MaximumNumberOfCorrections=self.MAX_CORRECTIONS)
-        # TODO initialize verbose output with observer
 
+        # Monitor optimization via observer
+        if(self.verbose):
+            def print_iteration():
+                print(f'Iteration: {self.optimizer.GetCurrentIteration()}'
+                      f' Metric: {self.optimizer.GetCurrentMetricValue()}'
+                      f' Infinity Norm: {self.optimizer.GetInfinityNormOfProjectedGradient()}')
+            self.optimizer.AddObserver(itk.IterationEvent(),
+                                            print_iteration)
 
     # Register two 3D images with an LBFGSB optimizer
     def register(self,
                  template_mesh:MeshType,
                  target_mesh:MeshType,
-                 filepath:str=None,
-                 verbose=False,
-                 num_iterations=MAX_ITERATIONS) -> (TransformType, MeshType):
+                 num_iterations:int=MAX_ITERATIONS,
+                 convergence_factor:float=COST_FN_CONVERGENCE_FACTOR,
+                 gradient_convergence_tolerance:float=GRADIENT_CONVERGENCE_TOLERANCE) \
+                     -> (TransformType, MeshType):
 
         (template_image, target_image) = self.mesh_to_image([template_mesh, target_mesh])
 
@@ -103,18 +108,8 @@ def register(self,
         self.optimizer.SetUpperBound([0] * number_of_parameters)
         self.optimizer.SetLowerBound([0] * number_of_parameters)
 
-        # Monitor optimization via observer
-        def print_iteration():
-            iteration = self.optimizer.GetCurrentIteration()
-            metric = self.optimizer.GetCurrentMetricValue()
-            infnorm = self.optimizer.GetInfinityNormOfProjectedGradient()
-            print(f'{iteration} {metric} {infnorm}')
-
-        # FIXME adds a duplicate observer if multiple calls without re-initialization
-        if(verbose):
-            self.optimizer.AddObserver(itk.IterationEvent(),
-                                            print_iteration)
-
+        self.optimizer.SetCostFunctionConvergenceFactor(convergence_factor)
+        self.optimizer.SetGradientConvergenceTolerance(gradient_convergence_tolerance)
         self.optimizer.SetNumberOfIterations(num_iterations)
 
         # Define object to handle image registration
@@ -138,19 +133,7 @@ def print_iteration():
         #     Registration likely attempts to set scales by default,
         #     no observed impact on performance from this warning
         registration.Update()
-
-        # Report results
-        if(verbose):
-            print('Solution = ' + str(list(transform.GetParameters())))
         
         # Update template
         transformed_mesh = itk.transform_mesh_filter(template_mesh, transform=transform)
-
-        # Write out
-        # TODO move away from monolithic design, leave write responsibility to user
-        if filepath is not None:
-            itk.meshwrite(transformed_mesh, filepath)
-            if(verbose):
-                print(f'Wrote resulting mesh to {filepath}')
-
         return (transform, transformed_mesh)
diff --git a/src/hasi/hasi/meshtomeshregistrar.py b/src/hasi/hasi/meshtomeshregistrar.py
index 69b044f..1ebc842 100644
--- a/src/hasi/hasi/meshtomeshregistrar.py
+++ b/src/hasi/hasi/meshtomeshregistrar.py
@@ -40,7 +40,8 @@ class MeshToMeshRegistrar:
     MeshType = itk.Mesh[itk.F, Dimension]
     PointSetType = itk.PointSet[itk.F, Dimension]
 
-    def __init__(self):
+    def __init__(self,verbose:bool=False):
+        self.verbose = verbose
         self.initialize()
 
     # Abstract method for developer to explicitly reset internal state objects
diff --git a/src/hasi/hasi/pointsetentropyregistrar.py b/src/hasi/hasi/pointsetentropyregistrar.py
index f6c3462..00ec4cb 100644
--- a/src/hasi/hasi/pointsetentropyregistrar.py
+++ b/src/hasi/hasi/pointsetentropyregistrar.py
@@ -26,9 +26,7 @@
 from .meshtomeshregistrar import MeshToMeshRegistrar
 
 class PointSetEntropyRegistrar(MeshToMeshRegistrar):
-    # Common definitions
-    MAX_ITERATIONS = 200
-
+    # Type definitions for function annotations
     Dimension = 3
     PixelType = itk.F
     ImageType = itk.Image[PixelType, Dimension]
@@ -36,13 +34,17 @@ class PointSetEntropyRegistrar(MeshToMeshRegistrar):
     TargetImageType = ImageType
 
     MeshType = itk.Mesh[itk.F, Dimension]
-
-    # Class definitions
     PointSetType = itk.PointSet[itk.F,Dimension]
     TransformType = itk.AffineTransform[itk.D, Dimension]
 
-    def __init__(self):
-        super(self.__class__,self).__init__()
+    # Default function values
+    MAX_ITERATIONS = 200
+    LEARNING_RATE = 1.0
+    CONVERGENCE_WINDOW_SIZE = 1
+    MINIMUM_CONVERGENCE_VALUE = 1.0
+
+    def __init__(self,verbose:bool=False):
+        super(self.__class__,self).__init__(verbose=verbose)
 
     def initialize(self):
         # Optimizer is exposed so that calling scripts can reference with custom observers
@@ -53,55 +55,38 @@ def initialize(self):
             DoEstimateLearningRateOnce=False,
             DoEstimateLearningRateAtEachIteration=False,
             ReturnBestParametersAndValue=True)
+        
+        if self.verbose:
+            def print_iteration():
+                print(f'Iteration: {self.optimizer.GetCurrentIteration()} Metric: {self.optimizer.GetCurrentMetricValue()}')
+            self.optimizer.AddObserver(itk.AnyEvent(), print_iteration)
 
     def register(self,
                  template_mesh:MeshType=None,
-                 template_point_set:PointSetType=None,
                  target_mesh:MeshType=None,
-                 target_point_set:PointSetType=None,
-                 filepath:str=None,
-                 verbose=False,
                  metric=None,
                  transform=None,
-                 resample_rate=1.0,
-                 max_iterations=MAX_ITERATIONS,
-                 learning_rate=1.0,
-                 resample_from_target=False) -> (TransformType, PointSetType):
+                 max_iterations:int=MAX_ITERATIONS,
+                 learning_rate:float=LEARNING_RATE,
+                 minimum_convergence_value:float=MINIMUM_CONVERGENCE_VALUE,
+                 convergence_window_size:int=CONVERGENCE_WINDOW_SIZE,
+                 resample_from_target:bool=False) \
+                     -> (TransformType, PointSetType):
 
         # Verify a template and target were passed in
         if(not (template_mesh or template_point_set) or not (target_mesh or target_point_set)):
             raise Exception('Registration requires both a template and a target!')
 
         # Need both a mesh and a point set representing the template and the transform
-        if(not template_mesh):
-            template_mesh = self.MeshType.New(Points=template_point_set.GetPoints())
-        else:
-            template_point_set = self.PointSetType.New(Points=template_mesh.GetPoints())
-
-        if(not target_mesh):
-            target_mesh = self.MeshType.New(Points=target_point_set.GetPoints())
-        else:
-            target_point_set = self.PointSetType.New(Points=target_mesh.GetPoints())
-
-        # Optionally resample to improve performance
-        if(resample_rate != 1.0):
-            template_point_set = self.randomly_sample_mesh_points(mesh=template_point_set, sampling_rate=resample_rate)
-            target_point_set = self.randomly_sample_mesh_points(mesh=target_point_set, sampling_rate=resample_rate)
+        template_point_set = self.PointSetType.New(Points=template_mesh.GetPoints())
+        target_point_set = self.PointSetType.New(Points=target_mesh.GetPoints())
 
         # Define registration components
         if not transform:
             transform = self.TransformType.New()
             transform.SetIdentity()
-        
-        #template_image = self.mesh_to_image(template_mesh)
-        # Set physical dimensions for transform
-        #fixed_physical_dimensions = list()
-        #fixed_origin = list(template_image.GetOrigin())
-
-        #for i in range(0, self.Dimension):
-        #    fixed_physical_dimensions.append(template_image.GetSpacing()[i] * \
-        #        (template_image.GetLargestPossibleRegion().GetSize()[i] - 1))
 
+        # Default to JHCT point set entropy metric
         if not metric:
             metric = itk.JensenHavrdaCharvatTsallisPointSetToPointSetMetricv4[self.PointSetType].New(
                 FixedPointSet=template_point_set,
@@ -113,12 +98,10 @@ def register(self,
                 CovarianceKNeighborhood=5,
                 EvaluationKNeighborhood=10,
                 Alpha=1.1)
-            #metric.SetVirtualDomainFromImage( template_image );
 
         metric.SetFixedPointSet(template_point_set)
         metric.SetMovingPointSet(target_point_set)
         metric.SetMovingTransform(transform)
-
         metric.Initialize()
 
         # Define scales to guide gradient descent steps
@@ -129,19 +112,15 @@ def register(self,
             VirtualDomainPointSet=metric.GetVirtualTransformedPointSet())
 
         self.optimizer.SetMetric(metric)
-        self.optimizer.SetNumberOfIterations(max_iterations)
         self.optimizer.SetScalesEstimator(shift_scale_estimator)
         self.optimizer.SetLearningRate(learning_rate)
-
-        def print_iteration():
-            print(f'{self.optimizer.GetCurrentIteration()} {self.optimizer.GetCurrentMetricValue()}')
-
-        if verbose:
-            self.optimizer.AddObserver(itk.AnyEvent(), print_iteration)
+        self.optimizer.SetMinimumConvergenceValue(minimum_convergence_value)
+        self.optimizer.SetConvergenceWindowSize(convergence_window_size)
+        self.optimizer.SetNumberOfIterations(max_iterations)
 
         self.optimizer.StartOptimization()
 
-        if(verbose):
+        if(self.verbose):
             print(f'Number of iterations run: {self.optimizer.GetCurrentIteration()}')
             print(f'Final metric value: {self.optimizer.GetCurrentMetricValue()}')
             print(f'Final transform position: {list(self.optimizer.GetCurrentPosition())}')
@@ -155,10 +134,4 @@ def print_iteration():
         if(resample_from_target):
             registered_template_mesh = self.resample_template_from_target(registered_template_mesh, target_mesh)
 
-        # Write out
-        if filepath is not None:
-            itk.meshwrite(registered_template_mesh,filepath)
-            if(verbose):
-                print(f'Wrote resulting point set to {filepath}')
-
         return (transform, registered_template_mesh)


Test patch:
diff --git a/.github/workflows/build-test-package.yml b/.github/workflows/build-test-package.yml
index 8165efb..d785974 100644
--- a/.github/workflows/build-test-package.yml
+++ b/.github/workflows/build-test-package.yml
@@ -170,10 +170,8 @@ jobs:
         ./dockcross-manylinux-download-cache-and-build-module-wheels.sh cp${{ matrix.python-version }}
         popd
         cp ITKBoneEnhancement/include/* include/
-        rm ./ITKBoneEnhancement/doxygen-1.8.11.linux.bin.tar.gz
         rm ./ITKBoneEnhancement/ITKPythonBuilds-linux.tar.zst
         mv ./ITKBoneEnhancement/ITKPythonPackage .
-        mv ./ITKBoneEnhancement/tools .
         ./ITKPythonPackage/scripts/dockcross-manylinux-build-module-wheels.sh cp${{ matrix.python-version }}
 
     - name: Publish Python package as GitHub Artifact
diff --git a/src/hasi/test_align.py b/src/hasi/test_align.py
index f2f789a..2340753 100644
--- a/src/hasi/test_align.py
+++ b/src/hasi/test_align.py
@@ -30,9 +30,8 @@
 
 import itk
 
-MEANSQUARES_METRIC_MAXIMUM_THRESHOLD = 0.015
-DIFFEO_METRIC_MAXIMUM_THRESHOLD = 0.25
-POINT_SET_METRIC_MAXIMUM_THRESHOLD = 0.0001
+MIN_REFINE_DISTANCE = 0.1
+MAX_REFINE_DISTANCE = 1.0
 MAX_ITERATIONS = 200
 
 TEMPLATE_MESH_FILE = 'test/Input/906-R-atlas.obj'
@@ -182,4 +181,4 @@ def test_refine_template_from_population():
 
     # Distance matches expectation
     distance = get_pairwise_hausdorff_distance(mesh_result, template_mesh)
-    assert(distance > 0.7 and distance < 1.0)
+    assert(MIN_REFINE_DISTANCE < distance < MAX_REFINE_DISTANCE)
diff --git a/src/hasi/test_registrars.py b/src/hasi/test_registrars.py
index 9ad476f..a3e70f9 100644
--- a/src/hasi/test_registrars.py
+++ b/src/hasi/test_registrars.py
@@ -32,7 +32,7 @@
 
 MEANSQUARES_METRIC_MAXIMUM_THRESHOLD = 0.015
 DIFFEO_METRIC_MAXIMUM_THRESHOLD = 0.25
-POINT_SET_METRIC_MAXIMUM_THRESHOLD = 0.0001
+POINT_SET_METRIC_MAXIMUM_THRESHOLD = 0.0236
 MAX_ITERATIONS = 200
 
 TEMPLATE_MESH_FILE = 'test/Input/906-R-atlas.obj'
@@ -55,8 +55,6 @@
 
 # Test registration with mean squares image metric
 def test_meansquares_registration():
-    MESH_OUTPUT_FILE = 'test/Output/testMeanSquaresRegisterOutput.vtk'
-
     # Class is imported
     from hasi.meansquaresregistrar import MeanSquaresRegistrar
 
@@ -65,8 +63,7 @@ def test_meansquares_registration():
 
     # Registration executes
     (transform, template_output_mesh) = registrar.register(template_mesh=template_mesh,
-                                            target_mesh=target_mesh,
-                                            filepath=MESH_OUTPUT_FILE)
+                                            target_mesh=target_mesh)
 
     # Mesh was generated
     assert(type(template_output_mesh) == type(template_mesh))
@@ -85,26 +82,11 @@ def test_meansquares_registration():
     # Transform was output
     assert(type(transform) == registrar.TransformType)
 
-    # Mesh was output
-    assert(os.path.isfile(MESH_OUTPUT_FILE))
-
-    # File output matches mesh
-    output_mesh = itk.meshread(MESH_OUTPUT_FILE)
-    assert(output_mesh.GetNumberOfPoints() == \
-        template_output_mesh.GetNumberOfPoints())
-    assert(all(output_mesh.GetPoint(i) == template_output_mesh.GetPoint(i)
-                for i in range(0,output_mesh.GetNumberOfPoints())))
-
     # Resample template
     template_resampled = registrar.resample_template_from_target(template_output_mesh, target_mesh)
 
-    # Clean up
-    os.remove(MESH_OUTPUT_FILE)
-
 # Test registration with diffeomorphic demons image registration
 def test_diffeo_registration():
-    MESH_OUTPUT_FILE = 'test/Output/testDiffeoRegisterOutput.vtk'
-
     # Class is imported
     from hasi.diffeoregistrar import DiffeoRegistrar
 
@@ -113,8 +95,7 @@ def test_diffeo_registration():
 
     # Registration executes without error
     (transform, template_output_mesh) = registrar.register(template_mesh=template_mesh,
-                                                           target_mesh=target_mesh,
-                                                           filepath=MESH_OUTPUT_FILE)
+                                                           target_mesh=target_mesh)
     
     # Transform was output
     assert(type(transform) == registrar.TransformType)
@@ -126,9 +107,6 @@ def test_diffeo_registration():
     assert(template_output_mesh.GetNumberOfPoints() == \
         template_mesh.GetNumberOfPoints())
 
-    # Mesh was output
-    assert(os.path.isfile(MESH_OUTPUT_FILE))
-
     # Optimization converged
     assert(registrar.filter.GetMetric() <
             DIFFEO_METRIC_MAXIMUM_THRESHOLD)
@@ -136,13 +114,7 @@ def test_diffeo_registration():
     # Optimization did not exceed allowable iterations
     assert(registrar.filter.GetElapsedIterations() <= MAX_ITERATIONS)
 
-    # Clean up
-    os.remove(MESH_OUTPUT_FILE)
-
 def test_pointset_registration():
-    MESH_OUTPUT_FILE = 'test/Output/testPointSetRegistrarOutput.vtk'
-    RESAMPLED_OUTPUT_FILE = 'test/Output/testPointSetResampledOutput.vtk'
-
     # Class is imported
     from hasi.pointsetentropyregistrar import PointSetEntropyRegistrar
 
@@ -150,10 +122,12 @@ def test_pointset_registration():
     registrar = PointSetEntropyRegistrar()
 
     # Registration executes without error
+    metric = itk.EuclideanDistancePointSetToPointSetMetricv4[itk.PointSet[itk.F,3]].New()
     (transform, template_output_mesh) = registrar.register(template_mesh=template_mesh,
-                               target_mesh=target_mesh,
-                               filepath=MESH_OUTPUT_FILE,
-                               resample_from_target=False)
+                                                           target_mesh=target_mesh,
+                                                           metric=metric,
+                                                           minimum_convergence_value=1e-6,
+                                                           convergence_window_size=3)
     
     # Transform was output
     assert(type(transform) == registrar.TransformType)
@@ -165,9 +139,6 @@ def test_pointset_registration():
     assert(template_output_mesh.GetNumberOfPoints() == \
         template_mesh.GetNumberOfPoints())
 
-    # Mesh was output
-    assert(os.path.isfile(MESH_OUTPUT_FILE))
-
     # Optimization converged
     assert(registrar.optimizer.GetCurrentMetricValue() <
            POINT_SET_METRIC_MAXIMUM_THRESHOLD)
@@ -182,6 +153,3 @@ def test_pointset_registration():
     # Mesh is a transformation of the original template
     assert(template_resampled.GetNumberOfPoints() == \
         template_mesh.GetNumberOfPoints())
-
-    # Clean up
-    os.remove(MESH_OUTPUT_FILE)