[Insight-developers] Integrating the New Statistics framework into ITK
Gaëtan Lehmann
gaetan.lehmann at jouy.inra.fr
Sun Apr 5 03:07:25 EDT 2009
Hi,
There is also a third option:
Option C
- Take advantage of ITK 4.0 to integrate the New Statistics framework
as is
The advantages over A and B
- no code duplication at all
- no surprise
- no additional cmake option, with all the advantages discussed here
some time ago, including
- cleaner code
- easier to test
- can't confuse the user
And of course the disadvantage - can't see any other one
- break backward compatibility - should be acceptable if done not so
often and comes with many enhancements for the user
Regards,
Gaëtan
Le 4 avr. 09 à 23:03, Luis Ibanez a écrit :
> Just to better organize this discussion we are gathering these options
> in the following Wiki page:
>
> http://www.itk.org/Wiki/Proposals:Refactoring_Statistics_Framework_2007_Transition_Plan
>
> This page is linked from
> http://www.itk.org/Wiki/
> Proposals:Refactoring_Statistics_Framework_2007
>
>
> Please feel free to edit and correct if I missed anything,
>
>
> Thanks
>
>
> Luis
>
>
> ----------------------------------------------------------------------------------------------------
> On Sat, Apr 4, 2009 at 3:46 PM, Bradley Lowekamp <blowekamp at mail.nih.gov
> > wrote:
>> I am not sure how you will be using an anonymous name space such as
>> the
>> following with what you suggested:
>> namespace
>> {
>> }
>> I would think you would just need something similar to:
>> namespace itk
>> namespace Statistics
>> {
>> #ifdef ITK_USE_DEPRECATED_STATISTICS_FRAMEWORK
>> using namespace ::itk::StatisticsDeprecated;
>> #else
>> using namespace ::itk::StatisticsNew;
>> #endif
>> }
>> }
>> If this using is done in a common header file, it might never be
>> known that
>> the current Statistics name space was renames, no messy anonymous
>> names
>> spaces would be used.
>> I am just not clear of the downside to option B yet.
>>
>> On Apr 4, 2009, at 3:05 PM, Karthik Krishnan wrote:
>>
>> I forgot to mention the reason for giving you 2 options. I've tried
>> to weigh
>> both the options below :
>>
>> Option A vs B
>> ---------------------
>>
>> 1. Code duplication:
>>
>> With A, if a file remains unchanged, it has to be duplicated
>> (and maintained, at least as long as Bill is around) in both
>> directories.
>>
>> With B, we have to worry only about the classes which need
>> refactoring. Even refactoried files, where changes are minimal,
>> you can even code of the form:
>>
>> namespace Statistics{
>> class Blah {
>> #ifdef ITK_USE_DEPRECATED_STAT
>> void SetInputSample( ListSampleType * );
>> #else
>> void SetInput( ListSampleType * );
>> #endif
>> }
>> }
>>
>>
>> 2. Code separation and readability
>>
>> A separates the classes clearly in two directories. The
>> statistics
>> library will be devoid of ugly ifdefs. If we decide to drop the
>> deprecated version at some point, we simply have to terminate
>> a directory.
>>
>> We can do the same with Option B, in a less obvious way, by
>> separating the classes in two files, for instance :
>>
>> File StatistiitkSample.h:
>> #include "StatisticsDeprecated/itkSample.h"
>> #include "StatisticsNew/itkSample.h"
>>
>> File StatisticsDeprecated/itkSample.h
>> namespace StatisticsDeprecated
>> {
>> class Sample : public Object { ... }
>> }
>>
>> File StatisticsNew/itkSample.h
>> namespace StatisticsNew
>> {
>> class Sample : public DataObject { ... }
>> }
>>
>>
>> 3. Surprises
>>
>> With A there are no surprises. I suspect that with B, using
>> anonymized namespaces etc, in several translation units,
>> some compiler might scream ? I tried to verify it with minimal
>> C++ code on gcc4.3, but I feel uneasy about it.
>>
>>
>> Please let us know your thoughts.
>> Regards
>> --
>> karthik
>>
>> On Sat, Apr 4, 2009 at 11:57 AM, Karthik Krishnan
>> <karthik.krishnan at kitware.com> wrote:
>>>
>>> Hello:
>>>
>>> As you may know, the ITK statistics framework have been revamped.
>>> The new
>>> framework follows ITK pipeline mechanics, removes redundant
>>> classes and
>>> provides a consistent API. The new classes are not backwards
>>> compatible. For
>>> details, please visit
>>>
>>>
>>> http://www.itk.org/Wiki/Proposals:Refactoring_Statistics_Framework_2007_Migration_Users_Guide
>>>
>>> We would like to integrate the new statistics framework into ITK.
>>> Given
>>> that there are numerous API changes, to keep things backward
>>> compatible, we
>>> are considering taking one of the following approaches :
>>>
>>>
>>> --------------
>>> Option A
>>>
>>> - Rename the existing Statistics/ directory in ITK to
>>> StatisticsDeprecated/
>>>
>>> - Create a parallel directory Statistics/ containing the new
>>> classes.
>>>
>>> - Add an ITK_USE_DEPRECATED_STATITSTICS_FRAMEWORK option at
>>> configure time
>>> to toggle between the usage of the deprecated and the new
>>> framework. The
>>> option will cause (a) the right directory to be compiled (b)
>>> headers from
>>> there right directory to be installed (c) the right directory to
>>> be added to
>>> the include dirs.
>>>
>>> - All existing code in the toolkit using the statistics framework
>>> will be
>>> ifdef'ed to work with both the new and the old framework. For
>>> instance :
>>>
>>> #ifdef ITK_USE_DEPRECATED_STATISTICS_FRAMEWORK
>>> calculator = Statistics::CovarianceCalculator< ListSampleType
>>> >::New();
>>> calculator->SetInputSample(sample);
>>> calculator->Update();
>>> #else
>>> filter = Statistics::CovarianceFilter< ListSampleType >::New();
>>> filter->SetInput( sampleGenerator->GetOutput() );
>>> filter->Update();
>>> #endif
>>>
>>>
>>> --------------------------------------------------
>>>
>>> Option B
>>>
>>> - Keep all files in a single directory but use two different
>>> namespaces.
>>>
>>> For instance the file itkSample.h would look like :
>>>
>>> namespace itk
>>> {
>>> namespace StatisticsDeprecated
>>> {
>>> class Sample : public Object { ... }
>>> }
>>>
>>> namespace StatisticsNew
>>> {
>>> class Sample : public DataObject { ... }
>>> }
>>> }
>>>
>>> - The ITK_USE_DEPRECATED_STATITSTICS_FRAMEWORK option redefines
>>> the unused
>>> namespace to be an anonymous namespace. The used namespace to
>>> "Statistics".
>>> For instance :
>>>
>>> #ifdef ITK_USE_DEPRECATED_STATITSTICS_FRAMEWORK
>>> #define StatisticsDeprecated Statistics
>>> #define StatisticsNew
>>> #else
>>> #define StatisticsNew Statistics
>>> #define StatisticsDeprecated
>>> #endif
>>>
>>> User code still looks the same :
>>>
>>> #ifdef ITK_USE_DEPRECATED_STATISTICS_FRAMEWORK
>>> calculator = Statistics::CovarianceCalculator< ListSampleType
>>> >::New();
>>> calculator->SetInputSample(sample);
>>> calculator->Update();
>>> #else
>>> filter = Statistics::CovarianceFilter< ListSampleType >::New();
>>> filter->SetInput( sampleGenerator->GetOutput() );
>>> filter->Update();
>>> #endif
>>>
>>> -----------------------------------------
>>>
>>> Any thoughts the developers have on this issue.
>>>
>>> We have gathered a wikipage to assemble ideas:
>>> http://www.itk.org/Wiki/Proposals:Refactoring_Statistics_Framework_2007
>>>
>>> The refactored code is in the NAMIC sandbox.
>>>
>>>
>>>
>>> Thanks
>>> Regards
>>>
>>> --
>>> Karthik Krishnan
>>> R&D Engineer,
>>> Kitware Inc.
>>> Ph: 518 881 4919
>>> Fax: 518 371 4573
>>
>>
>>
>> --
>> Karthik Krishnan
>> R&D Engineer,
>> Kitware Inc.
>> Ph: 518 881 4919
>> Fax: 518 371 4573
>> <ATT00001.txt>
>>
>> _______________________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> 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
>>
>>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>
> 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
--
Gaëtan Lehmann
Biologie du Développement et de la Reproduction
INRA de Jouy-en-Josas (France)
tel: +33 1 34 65 29 66 fax: 01 34 65 29 09
http://voxel.jouy.inra.fr http://www.mandriva.org
http://www.itk.org http://www.clavier-dvorak.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: PGP.sig
Type: application/pgp-signature
Size: 186 bytes
Desc: Ceci est une signature ?lectronique PGP
URL: <http://www.itk.org/mailman/private/insight-developers/attachments/20090405/8a7834a8/attachment.pgp>
More information about the Insight-developers
mailing list