<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Change SYSTEM "https://itk.org/migrationv4/ITKMigration.dtd">

<!--**
**
** MakeKernelBaseTemplated.xml
** Please, make sure this file validates the following w3c test before committing it: http://validator.w3.org
**-->
<Change>
    <!--**
    ** Title for the online migration page
    **-->
    <Title>
      Make Kernel Base Templated
    </Title>

    <!--**
    ** The author of the change
    **-->
    <Author>
      Hans Johnson
    </Author>

    <!--**
    ** Date of creation for the XML document
    **-->
    <Date>
      2011-11-29
    </Date>

    <!--**
    ** Plain text description of the change
    ** Extracted from git commit messages
    **-->
    <Description>
      <![CDATA[
      ENH: Made the KernelFunction base class templated
      It is currently hard-coded to type double, but in some cases it makes
      sense to use single precision for these kernel operations.
      This was identified in the itkMattesMutualInformationImageToImageMetric
      where the kernel is repeated computed in double precision, but then
      typecast the input and the outputs to be double from the more
      naturual single precision.

      ISSUE: ITK-2848
      ]]>
    </Description>

    <!--**
    ** Sample code snippets
    ** Extracted from git diff of changed files in Examples and Testing
    **-->
    <SampleCode>
      <Old>
        <![CDATA[
        typedef itk::KernelFunction KernelFunctionType;
        ]]>
      </Old>

      <New>
        <![CDATA[
        typedef itk::KernelFunctionBase<double> KernelFunctionType;
        ]]>
      </New>

    </SampleCode>

    <!--**
    ** The change-ids for all commits in the topic branch
    **-->
    <Gerrit-ChangeId>
      I8f39b7aa3e7fec9641eabd0849d599ea80e6401f
    </Gerrit-ChangeId>

    <!--**
    ** List of all changed files from the topic branch
    **-->
    <FileList>
      Modules/Core/Common/include/itkBSplineDerivativeKernelFunction.h
      Modules/Core/Common/include/itkBSplineKernelFunction.h
      Modules/Core/Common/include/itkGaussianKernelFunction.h
      Modules/Core/Common/include/itkKernelFunctionBase.h
      Modules/Core/Common/src/CMakeLists.txt
      Modules/Core/Common/src/itkGaussianKernelFunction.cxx
      Modules/Core/Common/src/itkKernelFunction.cxx
      Modules/Filtering/ImageGrid/include/itkCoxDeBoorBSplineKernelFunction.h
      Modules/Filtering/ImageGrid/include/itkCoxDeBoorBSplineKernelFunction.hxx
      Modules/Filtering/ImageSource/CMakeLists.txt
      Modules/Filtering/ImageSource/include/itkGaborImageSource.hxx
      Modules/Filtering/ImageSource/include/itkGaborKernelFunction.h
      Modules/Filtering/ImageSource/include/itkGridImageSource.h
      Modules/Filtering/ImageSource/include/itkGridImageSource.hxx
      Modules/Filtering/ImageSource/src/CMakeLists.txt
      Modules/Filtering/ImageSource/src/itkGaborKernelFunction.cxx
      Modules/Filtering/ImageSource/test/itkGaborImageSourceTest.cxx
      Modules/Nonunit/IntegratedTest/test/itkCommonPrintTest.cxx
      Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.h
      Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx
      Modules/Registration/Common/test/itkMutualInformationMetricTest.cxx
      Modules/Segmentation/LevelSets/include/itkShapePriorMAPCostFunction.h
      Modules/Segmentation/LevelSets/include/itkShapePriorMAPCostFunction.hxx
    </FileList>

    <!--**
    ** If the migration can be accomplished by a simple string
    ** substitution, then use the following construct to define
    ** the substitution rule.
    **
    ** <MigrationFix-Automatic>
    **   <Old>
    **     <![CDATA[MipsleledName]]>
    **   </Old>
    **   <New>
    **     <![CDATA[MisspelledName]]>
    **   </New>
    ** </MigrationFix-Automatic>
    **-->

    <!--**
    ** If the migration can NOT be accomplished by a simple string
    ** substitution, but potential problem spots can be identified,
    ** use the following construct to define a migration flag rule.
    **
    ** <MigrationFix-Manual>
    **   OldFunctionName
    ** </MigrationFix-Manual>
    **-->

</Change>
