[Insight-developers] Integrating the New Statistics framework into ITK
Karthik Krishnan
karthik.krishnan at kitware.com
Thu Apr 9 14:19:34 EDT 2009
On Sat, Apr 4, 2009 at 3:37 PM, Bill Lorensen <bill.lorensen at gmail.com>wrote:
> Why not 2 directories with separate namespaces.
> Why not leave Statistics with its current namespace and do something
> like StatisticsV2 for the new one.
>
A significant bit of user code written to use the statistics framework will
stay the same. This will not be possible if we put the new classes in a new
namespace. Besides, is there something to be gained from placing them in a
separate namespace ? Only one of them will be compiled / installed since the
filenames are the same.
Migration to the new framework should, for a user expend the least amount of
work.
I think from developer feedback, Option A has the widest support. Is that
the general consensus ?
Thanks
--
karthik
>
> On Sat, Apr 4, 2009 at 12:05 PM, Karthik Krishnan
> <karthik.krishnan at kitware.com> 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
> >
> > _______________________________________________
> > 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
> >
> >
>
--
Karthik Krishnan
R&D Engineer,
Kitware Inc.
Ph: 518 881 4919
Fax: 518 371 4573
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/mailman/private/insight-developers/attachments/20090409/82cd4174/attachment.htm>
More information about the Insight-developers
mailing list