[Insight-developers] Recent changes to Transforms break ITK's API

Jean-Christophe Fillion-Robin jchris.fillionr at kitware.com
Fri Jul 26 15:37:45 EDT 2013


Regarding Slicer, couldn't find any occurrences of "TranformWriter" string
in the code base.
Jc


On Fri, Jul 26, 2013 at 3:25 PM, Bill Lorensen <bill.lorensen at gmail.com>wrote:

> I guess I can put an ITK version #ifdef guard around the code.
>
> I don't want to be a PITA about this. But a non-sophisticated customer
> would not have a clue how to change their code by looking at the compiler
> errors.
>
> Is there something we could do with partial specialization? If the code
> uses a bad type, we could put a warning pragma of runtime warning that
> tells the user explicitly what to do.
>
> Also, it would be great if the migration guide was up-to-date and kept
> up-to-date.
>
>
>
>
>
> On Fri, Jul 26, 2013 at 3:02 PM, Johnson, Hans J <hans-johnson at uiowa.edu>wrote:
>
>>  All,
>>
>>  Ali is working on a solution that works similar to the Image
>> readers/writers so that.
>>
>>  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.
>>
>>  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.  Additionally, the files written to disk would
>> have been written and read as double precision numbers.
>>
>>  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.  All other update or optimization operations would have (and did)
>> give compiler errors.
>>
>>  ====================================
>>
>>  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.
>>
>>  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.  In my mind this
>> is an example of: PREFER COMPILE TIME ERROR TO RUNTIME ERROR.
>>
>>  To make the old code work, you now would need to specify that you wish
>> to write the transform as float
>>
>>  TranformWriterTemplate<float>  and the code would now have the correct
>> behavior.
>>
>>  It is backwards compatible with double (the most common and previously
>> correct case) because TransformWriter is an alias to
>> TrasnformWriterTemplate<double>
>>
>>  Modules/IO/TransformBase/test/itkTransformFileWriterTemplateTest.cxx:
>>  typedef itk::TransformFileWriterTemplate<double>      TransformWriterType;
>>
>>  Hans
>>
>>
>>   From: Bill Lorensen <bill.lorensen at gmail.com>
>> Date: Friday, July 26, 2013 1:37 PM
>> To: Matt McCormick <matt.mccormick at kitware.com>
>> Cc: Ali Ghayoor <ali-ghayoor at uiowa.edu>, ITK <insight-developers at itk.org>,
>> Hans Johnson <hans-johnson at uiowa.edu>
>> Subject: Re: [Insight-developers] Recent changes to Transforms break
>> ITK's API
>>
>>    My main concern is that old code generates a compiler error that
>> gives no clue as to what is wrong.
>>  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.
>>
>>  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.
>>
>>
>> On Fri, Jul 26, 2013 at 2:16 PM, Matt McCormick <
>> matt.mccormick at kitware.com> wrote:
>>
>>> Hi Ali,
>>>
>>> If a float transform was saved as a double on disk, that could be
>>> considered a bug and I do not think there is harm in fixing the
>>> behavior.  We still should fix the compliation IMHO.
>>>
>>> Thanks,
>>> Matt
>>>
>>> On Fri, Jul 26, 2013 at 1:37 PM, Ghayoor, Ali <ali-ghayoor at uiowa.edu>
>>> wrote:
>>> > Hello All,
>>> >
>>> > As Bill Lorensen has proven in his example, the new changes to ITK,
>>> due to
>>> > the "ENH: Support single precision registration" patch, break API of
>>> > "itkTransformFileReader/Writer" filters.
>>> >
>>> > In attached report file, I have explained about the importance of new
>>> > changes, and the current backward compatibility issues that they cause.
>>> > Also, it is shown that the old functionality had a bug in it, and
>>> moving
>>> > forward this bug should not be re-introduced.
>>> >
>>> > I really appreciate if you ITK gurus take a look at this report and
>>> tell
>>> > your ideas about the new changes.
>>> >
>>> > Thank you,
>>> > Ali
>>> >
>>> >
>>> >
>>> > From: Bill Lorensen <bill.lorensen at gmail.com>
>>> > Date: Sunday, July 14, 2013 10:31 AM
>>> > To: ITK <insight-developers at itk.org>
>>> > Subject: [Insight-developers] Recent changes to Transforms break ITK's
>>> API
>>> >
>>> > Folks,
>>> >
>>> > When I compile the following code I get this compilation error:
>>> >
>>> >
>>> /home/lorensen/ProjectsGIT/ITKGerrit/Modules/Remote/WikiExamples/IO/TransformFileWriter.cxx:
>>> > In function ‘int main(int, char**)’:
>>> >
>>> /home/lorensen/ProjectsGIT/ITKGerrit/Modules/Remote/WikiExamples/IO/TransformFileWriter.cxx:20:
>>> > error: no matching function for call to
>>> >
>>> ‘itk::TransformFileWriterTemplate<double>::SetInput(itk::SmartPointer<itk::Rigid2DTransform<float>
>>> >>&)’
>>> >
>>> /home/lorensen/ProjectsGIT/ITKGerrit/Modules/IO/TransformBase/include/itkTransformFileWriter.hxx:78:
>>> > note: candidates are: void
>>> > itk::TransformFileWriterTemplate<ScalarType>::SetInput(const
>>> > itk::TransformBaseTemplate<TScalarType>*) [with ScalarType = double]
>>> >
>>> >
>>> ---------------------------------------------------------------------------------------------------
>>> > #include "itkRigid2DTransform.h"
>>> > #include "itkTransformFileWriter.h"
>>> >
>>> > int main(int argc, char *argv[])
>>> > {
>>> >   std::string fileName;
>>> >   if(argc == 1) // No arguments were provided
>>> >   {
>>> >     fileName = "test.tfm";
>>> >   }
>>> >   else
>>> >   {
>>> >     fileName = argv[1];
>>> >   }
>>> >
>>> >   typedef itk::Rigid2DTransform< float > TransformType;
>>> >   TransformType::Pointer transform = TransformType::New();
>>> >
>>> >   itk::TransformFileWriter::Pointer writer =
>>> > itk::TransformFileWriter::New();
>>> >   writer->SetInput(transform);
>>> >   writer->SetFileName(fileName);
>>> >   writer->Update();
>>> >
>>> >   return EXIT_SUCCESS;
>>> > }
>>> >
>>> >
>>> >
>>> > ________________________________
>>> > 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.  If you are not the intended recipient,
>>> you
>>> > are hereby notified that any retention, dissemination, distribution, or
>>> > copying of this communication is strictly prohibited.  Please reply to
>>> the
>>> > sender that you have received the message in error, then delete it.
>>>  Thank
>>> > you.
>>> > ________________________________
>>>
>>
>>
>>
>> --
>> Unpaid intern in BillsBasement at noware dot com
>>
>>
>> ------------------------------
>> 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.  If you are not the intended
>> recipient, you are hereby notified that any retention, dissemination,
>> distribution, or copying of this communication is strictly prohibited.
>> Please reply to the sender that you have received the message in error,
>> then delete it.  Thank you.
>> ------------------------------
>>
>
>
>
> --
> Unpaid intern in BillsBasement at noware dot com
>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://kitware.com/products/protraining.php
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.itk.org/mailman/listinfo/insight-developers
>
>


-- 
+1 919 869 8849
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-developers/attachments/20130726/80b2a5e5/attachment-0001.htm>


More information about the Insight-developers mailing list