Author: smr Date: 2012-10-27 13:14:56 +0000 (Sat, 27 Oct 2012) New Revision: 12481
Added: trunk/packages/insighttoolkit/trunk/debian/patches/DRtest-1.diff trunk/packages/insighttoolkit/trunk/debian/patches/DRtest-2.diff Modified: trunk/packages/insighttoolkit/trunk/debian/changelog trunk/packages/insighttoolkit/trunk/debian/patches/series Log: Add patches to fix i386 build errors in DigitallyReconstructedRadiograph1Test. Modified: trunk/packages/insighttoolkit/trunk/debian/changelog =================================================================== --- trunk/packages/insighttoolkit/trunk/debian/changelog 2012-10-27 13:14:21 UTC (rev 12480) +++ trunk/packages/insighttoolkit/trunk/debian/changelog 2012-10-27 13:14:56 UTC (rev 12481) @@ -1,3 +1,11 @@ +insighttoolkit4 (4.2.1-2) unstable; urgency=low + + * patches/DRtest-1.diff: + * patches/DRtest-2.diff: New. Fixes DigitallyReconstructedRadiograph + generation on i386. + + -- Steve M. Robbins <[email protected]> Sat, 27 Oct 2012 08:13:31 -0500 + insighttoolkit4 (4.2.1-1) unstable; urgency=low * New upstream version. Added: trunk/packages/insighttoolkit/trunk/debian/patches/DRtest-1.diff =================================================================== --- trunk/packages/insighttoolkit/trunk/debian/patches/DRtest-1.diff (rev 0) +++ trunk/packages/insighttoolkit/trunk/debian/patches/DRtest-1.diff 2012-10-27 13:14:56 UTC (rev 12481) @@ -0,0 +1,69 @@ +From b6d0a549bd94bdb2b4c9a32fce6acd7ef9f011e0 Mon Sep 17 00:00:00 2001 +From: Matt McCormick <[email protected]> +Date: Fri, 26 Oct 2012 02:23:04 -0400 +Subject: [PATCH] ENH: Add operator=( FloatType & rhs ) to + CompensatedSummation. + +Change-Id: I0d81b71046ec317b33a09ddabf619a49344676de +--- + Modules/Core/Common/include/itkCompensatedSummation.h | 3 +++ + Modules/Core/Common/include/itkCompensatedSummation.hxx | 11 +++++++++++ + Modules/Core/Common/test/itkCompensatedSummationTest.cxx | 7 +++++++ + 3 files changed, 21 insertions(+) + +diff --git a/Modules/Core/Common/include/itkCompensatedSummation.h b/Modules/Core/Common/include/itkCompensatedSummation.h +index fab8aee..ad919f6 100644 +--- a/Modules/Core/Common/include/itkCompensatedSummation.h ++++ b/Modules/Core/Common/include/itkCompensatedSummation.h +@@ -98,6 +98,9 @@ public: + /** Reset the sum and compensation to zero. */ + void ResetToZero(); + ++ /** Reset the sum to the given value and the compensation to zero. */ ++ Self & operator=( const FloatType & rhs ); ++ + /** Get the sum. */ + const AccumulateType & GetSum() const; + +diff --git a/Modules/Core/Common/include/itkCompensatedSummation.hxx b/Modules/Core/Common/include/itkCompensatedSummation.hxx +index 1e90d13..909c288 100644 +--- a/Modules/Core/Common/include/itkCompensatedSummation.hxx ++++ b/Modules/Core/Common/include/itkCompensatedSummation.hxx +@@ -142,6 +142,17 @@ CompensatedSummation< TFloat > + } + + template < class TFloat > ++CompensatedSummation< TFloat > & ++CompensatedSummation< TFloat > ++::operator=( const FloatType & rhs ) ++{ ++ this->m_Sum = rhs; ++ this->m_Compensation = NumericTraits< AccumulateType >::Zero; ++ ++ return *this; ++} ++ ++template < class TFloat > + const typename CompensatedSummation< TFloat >::AccumulateType & + CompensatedSummation< TFloat > + ::GetSum() const +diff --git a/Modules/Core/Common/test/itkCompensatedSummationTest.cxx b/Modules/Core/Common/test/itkCompensatedSummationTest.cxx +index a9b646b..2d83fe3 100644 +--- a/Modules/Core/Common/test/itkCompensatedSummationTest.cxx ++++ b/Modules/Core/Common/test/itkCompensatedSummationTest.cxx +@@ -104,5 +104,12 @@ int itkCompensatedSummationTest( int, char * [] ) + return EXIT_FAILURE; + } + ++ floatAccumulator = 2.0; ++ if( floatAccumulator.GetSum() != 2.0 ) ++ { ++ std::cerr << "operator= did not set the value." << std::endl; ++ return EXIT_FAILURE; ++ } ++ + return EXIT_SUCCESS; + } +-- +1.7.10.4 + Added: trunk/packages/insighttoolkit/trunk/debian/patches/DRtest-2.diff =================================================================== --- trunk/packages/insighttoolkit/trunk/debian/patches/DRtest-2.diff (rev 0) +++ trunk/packages/insighttoolkit/trunk/debian/patches/DRtest-2.diff 2012-10-27 13:14:56 UTC (rev 12481) @@ -0,0 +1,175 @@ +From dfd007fac96f5d11e55ec4de6abc99c209c2268b Mon Sep 17 00:00:00 2001 +From: Matt McCormick <[email protected]> +Date: Fri, 26 Oct 2012 02:24:58 -0400 +Subject: [PATCH] BUG: Improve robustness of RayCastInterpolateImageFunction. + +The robustness of RayCastInterpolationImageFunction is improved by using +CompensatedSummation. This fixes failures of +DigitallyReconstructedRadiograph1Test on some 32-bit platforms. + +Also add minor style improvements. + +Change-Id: Id0a7cf5124db026d402113fda3ef1265d098f56e +--- + .../include/itkRayCastInterpolateImageFunction.hxx | 54 +++++++++++--------- + 1 file changed, 29 insertions(+), 25 deletions(-) + +diff --git a/Modules/Core/ImageFunction/include/itkRayCastInterpolateImageFunction.hxx b/Modules/Core/ImageFunction/include/itkRayCastInterpolateImageFunction.hxx +index c8745b5..c97c5ac 100644 +--- a/Modules/Core/ImageFunction/include/itkRayCastInterpolateImageFunction.hxx ++++ b/Modules/Core/ImageFunction/include/itkRayCastInterpolateImageFunction.hxx +@@ -18,6 +18,7 @@ + #ifndef __itkRayCastInterpolateImageFunction_hxx + #define __itkRayCastInterpolateImageFunction_hxx + ++#include "itkCompensatedSummation.h" + #include "itkRayCastInterpolateImageFunction.h" + + #include "vnl/vnl_math.h" +@@ -57,6 +58,8 @@ public: + typedef typename InputImageType::PixelType PixelType; + typedef typename InputImageType::IndexType IndexType; + ++ typedef itk::CompensatedSummation< double > CompensatedSummationType; ++ + /** + * Set the image class + */ +@@ -68,12 +71,12 @@ public: + /** + * Initialise the ray using the position and direction of a line. + * +- * \param RayPosn The position of the ray in 3D (mm). +- * \param RayDirn The direction of the ray in 3D (mm). ++ * \param rayPosition The position of the ray in 3D (mm). ++ * \param rayDirection The direction of the ray in 3D (mm). + * + * \return True if this is a valid ray. + */ +- bool SetRay(OutputPointType RayPosn, DirectionType RayDirn); ++ bool SetRay(const OutputPointType & rayPosition, const DirectionType & rayDirection); + + /** \brief + * Integrate the interpolated intensities above a given threshold, +@@ -226,7 +229,7 @@ protected: + * voxel. This enables indices of the neighbouring voxels within the plane + * to be determined by simply casting to 'int' and optionally adding 1. + */ +- double m_Position3Dvox[3]; ++ CompensatedSummationType m_Position3Dvox[3]; + + /** The incremental direction vector of the ray in voxels. */ + double m_VoxelIncrement[3]; +@@ -667,7 +670,7 @@ RayCastHelper< TInputImage, TCoordRep > + template< class TInputImage, class TCoordRep > + bool + RayCastHelper< TInputImage, TCoordRep > +-::SetRay(OutputPointType RayPosn, DirectionType RayDirn) ++::SetRay(const OutputPointType & rayPosition, const DirectionType & rayDirection) + { + // Store the position and direction of the ray + typename TInputImage::SpacingType spacing = this->m_Image->GetSpacing(); +@@ -683,17 +686,17 @@ RayCastHelper< TInputImage, TCoordRep > + m_VoxelDimensionInZ = spacing[2]; + + m_CurrentRayPositionInMM[0] = +- RayPosn[0] + 0.5 * m_VoxelDimensionInX * (double)m_NumberOfVoxelsInX; ++ rayPosition[0] + 0.5 * m_VoxelDimensionInX * (double)m_NumberOfVoxelsInX; + + m_CurrentRayPositionInMM[1] = +- RayPosn[1] + 0.5 * m_VoxelDimensionInY * (double)m_NumberOfVoxelsInY; ++ rayPosition[1] + 0.5 * m_VoxelDimensionInY * (double)m_NumberOfVoxelsInY; + + m_CurrentRayPositionInMM[2] = +- RayPosn[2] + 0.5 * m_VoxelDimensionInZ * (double)m_NumberOfVoxelsInZ; ++ rayPosition[2] + 0.5 * m_VoxelDimensionInZ * (double)m_NumberOfVoxelsInZ; + +- m_RayDirectionInMM[0] = RayDirn[0]; +- m_RayDirectionInMM[1] = RayDirn[1]; +- m_RayDirectionInMM[2] = RayDirn[2]; ++ m_RayDirectionInMM[0] = rayDirection[0]; ++ m_RayDirectionInMM[1] = rayDirection[1]; ++ m_RayDirectionInMM[2] = rayDirection[2]; + + // Compute the ray path for this coordinate in mm + +@@ -1208,17 +1211,17 @@ void + RayCastHelper< TInputImage, TCoordRep > + ::IncrementVoxelPointers(void) + { +- double xBefore = m_Position3Dvox[0]; +- double yBefore = m_Position3Dvox[1]; +- double zBefore = m_Position3Dvox[2]; ++ double xBefore = m_Position3Dvox[0].GetSum(); ++ double yBefore = m_Position3Dvox[1].GetSum(); ++ double zBefore = m_Position3Dvox[2].GetSum(); + + m_Position3Dvox[0] += m_VoxelIncrement[0]; + m_Position3Dvox[1] += m_VoxelIncrement[1]; + m_Position3Dvox[2] += m_VoxelIncrement[2]; + +- int dx = ( (int)m_Position3Dvox[0] ) - ( (int)xBefore ); +- int dy = ( (int)m_Position3Dvox[1] ) - ( (int)yBefore ); +- int dz = ( (int)m_Position3Dvox[2] ) - ( (int)zBefore ); ++ int dx = ( (int)m_Position3Dvox[0].GetSum() ) - ( (int)xBefore ); ++ int dy = ( (int)m_Position3Dvox[1].GetSum() ) - ( (int)yBefore ); ++ int dz = ( (int)m_Position3Dvox[2].GetSum() ) - ( (int)zBefore ); + + m_RayIntersectionVoxelIndex[0] += dx; + m_RayIntersectionVoxelIndex[1] += dy; +@@ -1258,20 +1261,20 @@ RayCastHelper< TInputImage, TCoordRep > + { + case TRANSVERSE_IN_X: + { +- y = m_Position3Dvox[1] - vcl_floor(m_Position3Dvox[1]); +- z = m_Position3Dvox[2] - vcl_floor(m_Position3Dvox[2]); ++ y = m_Position3Dvox[1].GetSum() - vcl_floor(m_Position3Dvox[1].GetSum()); ++ z = m_Position3Dvox[2].GetSum() - vcl_floor(m_Position3Dvox[2].GetSum()); + break; + } + case TRANSVERSE_IN_Y: + { +- y = m_Position3Dvox[0] - vcl_floor(m_Position3Dvox[0]); +- z = m_Position3Dvox[2] - vcl_floor(m_Position3Dvox[2]); ++ y = m_Position3Dvox[0].GetSum() - vcl_floor(m_Position3Dvox[0].GetSum()); ++ z = m_Position3Dvox[2].GetSum() - vcl_floor(m_Position3Dvox[2].GetSum()); + break; + } + case TRANSVERSE_IN_Z: + { +- y = m_Position3Dvox[0] - vcl_floor(m_Position3Dvox[0]); +- z = m_Position3Dvox[1] - vcl_floor(m_Position3Dvox[1]); ++ y = m_Position3Dvox[0].GetSum() - vcl_floor(m_Position3Dvox[0].GetSum()); ++ z = m_Position3Dvox[1].GetSum() - vcl_floor(m_Position3Dvox[1].GetSum()); + break; + } + default: +@@ -1301,7 +1304,7 @@ RayCastHelper< TInputImage, TCoordRep > + + // double posn3D_x, posn3D_y, posn3D_z; + +- integral = 0.; ++ CompensatedSummationType sum; + + // Check if this is a valid ray + +@@ -1320,7 +1323,7 @@ RayCastHelper< TInputImage, TCoordRep > + + if ( intensity > threshold ) + { +- integral += intensity - threshold; ++ sum += intensity - threshold; + } + this->IncrementVoxelPointers(); + } +@@ -1329,6 +1332,7 @@ RayCastHelper< TInputImage, TCoordRep > + however, if its moving diagonally the ray points will be further + apart so account for this by scaling by the distance moved. */ + ++ integral = sum.GetSum(); + integral *= this->GetRayPointSpacing(); + + return true; +-- +1.7.10.4 + Modified: trunk/packages/insighttoolkit/trunk/debian/patches/series =================================================================== --- trunk/packages/insighttoolkit/trunk/debian/patches/series 2012-10-27 13:14:21 UTC (rev 12480) +++ trunk/packages/insighttoolkit/trunk/debian/patches/series 2012-10-27 13:14:56 UTC (rev 12481) @@ -0,0 +1,2 @@ +DRtest-1.diff +DRtest-2.diff _______________________________________________ debian-med-commit mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/debian-med-commit
