<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
</head>
<body style="word-wrap:break-word; color:rgb(0,0,0); font-size:14px; font-family:Calibri,sans-serif">
<div>All,</div>
<div><br>
</div>
<div>Ali is working on a solution that works similar to the Image readers/writers so that.</div>
<div><br>
</div>
<div>I would argue that the old code in the example is an example of what was possible, but only in the most limited of uses. &nbsp;</div>
<div><br>
</div>
<div>It is very unlikely that this code exists in end users applications because transforms with floating point were not possible from the registration framework, and could not have been used in any of the optimizers, or in anything that used the Get/SetParameters
 or Get/SetFixedParameters API. &nbsp;Additionally, the files written to disk would have been written and read as double precision numbers.</div>
<div><br>
</div>
<div>In short, the only transforms that could exists in float are those that are manually initialized, and then they could only be used for transforming points. &nbsp;All other update or optimization operations would have (and did) give compiler errors.</div>
<div><br>
</div>
<div>====================================</div>
<div><br>
</div>
<div>Over the past year there has been much discussion of the need for being able to do registrations in floating point (especially under the ITKv4 registration framework), and this looks like the only way that we (several people have looked at this) could
 see for moving forward.</div>
<div><br>
</div>
<div>I welcome any suggestions on how to preserve backwards compatibility, but I agree with Matt that the previous behavior was not correct, and I would rather not continue to provide that wrong behavior. &nbsp;In my mind this is an example of:&nbsp;PREFER COMPILE TIME
 ERROR TO RUNTIME ERROR.</div>
<div><br>
</div>
<div>To make the old code work, you now would need to specify that you wish to write the transform as float</div>
<div><br>
</div>
<div>TranformWriterTemplate&lt;float&gt; &nbsp;and the code would now have the correct behavior.</div>
<div><br>
</div>
<div>It is backwards compatible with double (the most common and previously correct case) because TransformWriter is an alias to TrasnformWriterTemplate&lt;double&gt;</div>
<div><br>
</div>
<div>Modules/IO/TransformBase/test/itkTransformFileWriterTemplateTest.cxx: &nbsp;typedef itk::TransformFileWriterTemplate&lt;double&gt; &nbsp; &nbsp; &nbsp;TransformWriterType;</div>
<div><br>
</div>
<div>Hans</div>
<div><br>
</div>
<div><br>
</div>
<span id="OLK_SRC_BODY_SECTION">
<div style="font-family:Calibri; font-size:11pt; text-align:left; color:black; border-bottom:medium none; border-left:medium none; padding-bottom:0in; padding-left:0in; padding-right:0in; border-top:#b5c4df 1pt solid; border-right:medium none; padding-top:3pt">
<span style="font-weight:bold">From: </span>Bill Lorensen &lt;<a href="mailto:bill.lorensen@gmail.com">bill.lorensen@gmail.com</a>&gt;<br>
<span style="font-weight:bold">Date: </span>Friday, July 26, 2013 1:37 PM<br>
<span style="font-weight:bold">To: </span>Matt McCormick &lt;<a href="mailto:matt.mccormick@kitware.com">matt.mccormick@kitware.com</a>&gt;<br>
<span style="font-weight:bold">Cc: </span>Ali Ghayoor &lt;<a href="mailto:ali-ghayoor@uiowa.edu">ali-ghayoor@uiowa.edu</a>&gt;, ITK &lt;<a href="mailto:insight-developers@itk.org">insight-developers@itk.org</a>&gt;, Hans Johnson &lt;<a href="mailto:hans-johnson@uiowa.edu">hans-johnson@uiowa.edu</a>&gt;<br>
<span style="font-weight:bold">Subject: </span>Re: [Insight-developers] Recent changes to Transforms break ITK's API<br>
</div>
<div><br>
</div>
<div>
<div>
<div dir="ltr">
<div>
<div>My main concern is that old code generates a compiler error that gives no clue as to what is wrong.<br>
</div>
What info can we provide to the customer to help fix this error. I see nothing in the migration guide. In fact, that guide has not been updated since last November.<br>
<br>
</div>
Even a warning would be useful with explicit instructions on what to change. My case was simple for me to fix because I knew something had changed in the transforms and the code base was small. Pity thepoor customer with a large investment in using ITK code.<br>
</div>
<div class="gmail_extra"><br>
<br>
<div class="gmail_quote">On Fri, Jul 26, 2013 at 2:16 PM, Matt McCormick <span dir="ltr">
&lt;<a href="mailto:matt.mccormick@kitware.com" target="_blank">matt.mccormick@kitware.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex; border-left:1px #ccc solid; padding-left:1ex">
Hi Ali,<br>
<br>
If a float transform was saved as a double on disk, that could be<br>
considered a bug and I do not think there is harm in fixing the<br>
behavior. &nbsp;We still should fix the compliation IMHO.<br>
<br>
Thanks,<br>
Matt<br>
<div class="HOEnZb">
<div class="h5"><br>
On Fri, Jul 26, 2013 at 1:37 PM, Ghayoor, Ali &lt;<a href="mailto:ali-ghayoor@uiowa.edu">ali-ghayoor@uiowa.edu</a>&gt; wrote:<br>
&gt; Hello All,<br>
&gt;<br>
&gt; As Bill Lorensen has proven in his example, the new changes to ITK, due to<br>
&gt; the &quot;ENH: Support single precision registration&quot; patch, break API of<br>
&gt; &quot;itkTransformFileReader/Writer&quot; filters.<br>
&gt;<br>
&gt; In attached report file, I have explained about the importance of new<br>
&gt; changes, and the current backward compatibility issues that they cause.<br>
&gt; Also, it is shown that the old functionality had a bug in it, and moving<br>
&gt; forward this bug should not be re-introduced.<br>
&gt;<br>
&gt; I really appreciate if you ITK gurus take a look at this report and tell<br>
&gt; your ideas about the new changes.<br>
&gt;<br>
&gt; Thank you,<br>
&gt; Ali<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; From: Bill Lorensen &lt;<a href="mailto:bill.lorensen@gmail.com">bill.lorensen@gmail.com</a>&gt;<br>
&gt; Date: Sunday, July 14, 2013 10:31 AM<br>
&gt; To: ITK &lt;<a href="mailto:insight-developers@itk.org">insight-developers@itk.org</a>&gt;<br>
&gt; Subject: [Insight-developers] Recent changes to Transforms break ITK's API<br>
&gt;<br>
&gt; Folks,<br>
&gt;<br>
&gt; When I compile the following code I get this compilation error:<br>
&gt;<br>
&gt; /home/lorensen/ProjectsGIT/ITKGerrit/Modules/Remote/WikiExamples/IO/TransformFileWriter.cxx:<br>
&gt; In function ‘int main(int, char**)’:<br>
&gt; /home/lorensen/ProjectsGIT/ITKGerrit/Modules/Remote/WikiExamples/IO/TransformFileWriter.cxx:20:<br>
&gt; error: no matching function for call to<br>
&gt; ‘itk::TransformFileWriterTemplate&lt;double&gt;::SetInput(itk::SmartPointer&lt;itk::Rigid2DTransform&lt;float&gt;<br>
&gt;&gt;&amp;)’<br>
&gt; /home/lorensen/ProjectsGIT/ITKGerrit/Modules/IO/TransformBase/include/itkTransformFileWriter.hxx:78:<br>
&gt; note: candidates are: void<br>
&gt; itk::TransformFileWriterTemplate&lt;ScalarType&gt;::SetInput(const<br>
&gt; itk::TransformBaseTemplate&lt;TScalarType&gt;*) [with ScalarType = double]<br>
&gt;<br>
&gt; ---------------------------------------------------------------------------------------------------<br>
&gt; #include &quot;itkRigid2DTransform.h&quot;<br>
&gt; #include &quot;itkTransformFileWriter.h&quot;<br>
&gt;<br>
&gt; int main(int argc, char *argv[])<br>
&gt; {<br>
&gt; &nbsp; std::string fileName;<br>
&gt; &nbsp; if(argc == 1) // No arguments were provided<br>
&gt; &nbsp; {<br>
&gt; &nbsp; &nbsp; fileName = &quot;test.tfm&quot;;<br>
&gt; &nbsp; }<br>
&gt; &nbsp; else<br>
&gt; &nbsp; {<br>
&gt; &nbsp; &nbsp; fileName = argv[1];<br>
&gt; &nbsp; }<br>
&gt;<br>
&gt; &nbsp; typedef itk::Rigid2DTransform&lt; float &gt; TransformType;<br>
&gt; &nbsp; TransformType::Pointer transform = TransformType::New();<br>
&gt;<br>
&gt; &nbsp; itk::TransformFileWriter::Pointer writer =<br>
&gt; itk::TransformFileWriter::New();<br>
&gt; &nbsp; writer-&gt;SetInput(transform);<br>
&gt; &nbsp; writer-&gt;SetFileName(fileName);<br>
&gt; &nbsp; writer-&gt;Update();<br>
&gt;<br>
&gt; &nbsp; return EXIT_SUCCESS;<br>
&gt; }<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; ________________________________<br>
&gt; Notice: This UI Health Care e-mail (including attachments) is covered by the<br>
&gt; Electronic Communications Privacy Act, 18 U.S.C. 2510-2521, is confidential<br>
&gt; and may be legally privileged. &nbsp;If you are not the intended recipient, you<br>
&gt; are hereby notified that any retention, dissemination, distribution, or<br>
&gt; copying of this communication is strictly prohibited. &nbsp;Please reply to the<br>
&gt; sender that you have received the message in error, then delete it. &nbsp;Thank<br>
&gt; you.<br>
&gt; ________________________________<br>
</div>
</div>
</blockquote>
</div>
<br>
<br clear="all">
<br>
-- <br>
Unpaid intern in BillsBasement at noware dot com<br>
</div>
</div>
</div>
</span><br>
<br>
<hr>
Notice: This UI Health Care e-mail (including attachments) is covered by the Electronic Communications Privacy Act, 18 U.S.C. 2510-2521, is confidential and may be legally privileged.&nbsp; If you are not the intended recipient, you are hereby notified that any
 retention, dissemination, distribution, or copying of this communication is strictly prohibited.&nbsp; Please reply to the sender that you have received the message in error, then delete it.&nbsp; Thank you.
<hr>
</body>
</html>