From 9b3dc51574a260ba8866550136175ccefa07bfb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=20Haitz=20Legarreta=20Gorro=C3=B1o?= Date: Wed, 15 Feb 2023 16:51:41 -0500 Subject: [PATCH 1/5] COMP: Restore `PrintSelf` in itkGPUPDEDeformableRegistrationFilter.h Restore the `PrintSelf` method override in `itkGPUPDEDeformableRegistrationFilter.h`. Fixes: ``` GPUPDEDeformableRegistrationFilterKernel.cxx Modules\Registration\GPUPDEDeformable\include\itkGPUPDEDeformableRegistrationFilter.hxx(78,104): error C2995: 'void itk::GPUDenseFiniteDifferenceImageFilter::PrintSelf(std::ostream &,itk::Indent) const': function template has already been defined Modules\Core\GPUFiniteDifference\include\itkGPUDenseFiniteDifferenceImageFilter.h(105): message : see declaration of 'itk::GPUDenseFiniteDifferenceImageFilter::PrintSelf' Modules\Registration\GPUPDEDeformable\include\itkGPUPDEDeformableRegistrationFilter.hxx(118,1): error C2977: 'itk::GPUDenseFiniteDifferenceImageFilter': too many template arguments ``` Removed inadvertently in commit c44f9c1b39e627c5ef7fabec252232a92d570565. Fix the associated compilation errors in the `PrintSelf` method implementation. --- .../itkGPUPDEDeformableRegistrationFilter.h | 3 ++ .../itkGPUPDEDeformableRegistrationFilter.hxx | 49 +++++++++++++++---- 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/Modules/Registration/GPUPDEDeformable/include/itkGPUPDEDeformableRegistrationFilter.h b/Modules/Registration/GPUPDEDeformable/include/itkGPUPDEDeformableRegistrationFilter.h index 360665784ac..3280487f956 100644 --- a/Modules/Registration/GPUPDEDeformable/include/itkGPUPDEDeformableRegistrationFilter.h +++ b/Modules/Registration/GPUPDEDeformable/include/itkGPUPDEDeformableRegistrationFilter.h @@ -144,6 +144,9 @@ class ITK_TEMPLATE_EXPORT GPUPDEDeformableRegistrationFilter GPUPDEDeformableRegistrationFilter(); ~GPUPDEDeformableRegistrationFilter() override = default; + void + PrintSelf(std::ostream & os, Indent indent) const override; + /** Copy the data from the input to the output. * * If the input does not exist, a zero field is written to the output. */ diff --git a/Modules/Registration/GPUPDEDeformable/include/itkGPUPDEDeformableRegistrationFilter.hxx b/Modules/Registration/GPUPDEDeformable/include/itkGPUPDEDeformableRegistrationFilter.hxx index d73618016a1..207c4d23eab 100644 --- a/Modules/Registration/GPUPDEDeformable/include/itkGPUPDEDeformableRegistrationFilter.hxx +++ b/Modules/Registration/GPUPDEDeformable/include/itkGPUPDEDeformableRegistrationFilter.hxx @@ -83,34 +83,63 @@ GPUPDEDeformableRegistrationFilter::PrintType>(*m_SmoothingKernels); + for (unsigned d = 0; d < ImageDimension; ++d) + { + os << indent.GetNextIndent() << m_SmoothingKernels[d] << std::endl; + } } - os << std::endl; - itkPrintSelfObjectMacro(GPUSmoothingKernels); + os << indent << "GPUSmoothingKernels: "; + if (m_GPUSmoothingKernels != nullptr) + { + for (unsigned d = 0; d < ImageDimension; ++d) + { + os << indent.GetNextIndent() << m_GPUSmoothingKernels[d] << std::endl; + } + } - os << indent << "UpdateFieldSmoothingKernelSizes: " << m_UpdateFieldSmoothingKernelSizes << std::endl; + os << indent << "UpdateFieldSmoothingKernelSizes: "; + for (unsigned d = 0; d < ImageDimension; ++d) + { + os << indent.GetNextIndent() << m_UpdateFieldSmoothingKernelSizes[d] << std::endl; + } os << indent << "UpdateFieldSmoothingKernels: "; if (m_UpdateFieldSmoothingKernels != nullptr) { - os << static_cast::PrintType>(*m_UpdateFieldSmoothingKernels); + for (unsigned d = 0; d < ImageDimension; ++d) + { + os << indent.GetNextIndent() << m_UpdateFieldSmoothingKernels[d] << std::endl; + } } - os << std::endl; - itkPrintSelfObjectMacro(UpdateFieldGPUSmoothingKernels); + os << indent << "UpdateFieldGPUSmoothingKernels: "; + if (m_UpdateFieldGPUSmoothingKernels != nullptr) + { + for (unsigned d = 0; d < ImageDimension; ++d) + { + os << indent.GetNextIndent() << m_UpdateFieldGPUSmoothingKernels[d] << std::endl; + } + } os << indent << "ImageSizes: "; if (m_ImageSizes != nullptr) { - os << *m_ImageSizes; + os << *m_ImageSizes << std::endl; + } + else + { + os << "(null)" << std::endl; } - os << std::endl; itkPrintSelfObjectMacro(m_GPUImageSizes); From b603cfc5d516f9b80feb4ba7413c9ebbbcae16af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=20Haitz=20Legarreta=20Gorro=C3=B1o?= Date: Wed, 15 Feb 2023 17:13:31 -0500 Subject: [PATCH 2/5] COMP: Provide prefix-less member name to `itkPrintSelfObjectMacro` Provide prefix-less member name as the argument to the `itkPrintSelfObjectMacro` macro in `itkGPUPDEDeformableRegistrationFilter.hxx`. Introduced inadvertently in commit c47ed1c1b3e26051de655f7ad03e975fae93b73b. --- .../include/itkGPUPDEDeformableRegistrationFilter.hxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/Registration/GPUPDEDeformable/include/itkGPUPDEDeformableRegistrationFilter.hxx b/Modules/Registration/GPUPDEDeformable/include/itkGPUPDEDeformableRegistrationFilter.hxx index 207c4d23eab..52449b82c3d 100644 --- a/Modules/Registration/GPUPDEDeformable/include/itkGPUPDEDeformableRegistrationFilter.hxx +++ b/Modules/Registration/GPUPDEDeformable/include/itkGPUPDEDeformableRegistrationFilter.hxx @@ -141,7 +141,7 @@ GPUPDEDeformableRegistrationFilter Date: Wed, 15 Feb 2023 18:21:54 -0500 Subject: [PATCH 3/5] COMP: Fix boolean member print statement in `itk::GPUDataManager` Fix boolean member print statement in `itk::GPUDataManager`: add missing opening parenthesis. Missed inadvertently in commit c47ed1c1b3e26051de655f7ad03e975fae93b73b. --- Modules/Core/GPUCommon/src/itkGPUDataManager.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/Core/GPUCommon/src/itkGPUDataManager.cxx b/Modules/Core/GPUCommon/src/itkGPUDataManager.cxx index 1e9bc5237e6..8c1109a9eb9 100644 --- a/Modules/Core/GPUCommon/src/itkGPUDataManager.cxx +++ b/Modules/Core/GPUCommon/src/itkGPUDataManager.cxx @@ -273,7 +273,7 @@ GPUDataManager::PrintSelf(std::ostream & os, Indent indent) const os << indent << "GPUBuffer: " << m_GPUBuffer << std::endl; os << indent << "CPUBuffer: " << m_CPUBuffer << std::endl; os << indent << "IsGPUBufferDirty: " << (m_IsGPUBufferDirty ? "On" : "Off") << std::endl; - os << indent << "IsCPUBufferDirty: " << m_IsCPUBufferDirty ? "On" : "Off") << std::endl; + os << indent << "IsCPUBufferDirty: " << (m_IsCPUBufferDirty ? "On" : "Off") << std::endl; } } // namespace itk From dfb7fca9413a50b4931412188318611d7806b3c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=20Haitz=20Legarreta=20Gorro=C3=B1o?= Date: Wed, 15 Feb 2023 20:00:18 -0500 Subject: [PATCH 4/5] ENH: Provide with printing ability to time resource classes Provide with printing ability to time resource classes. Fixes: ``` Modules\Core\GPUFiniteDifference\include\itkGPUFiniteDifferenceImageFilter.hxx(298,1): error C2679: binary '<<': no operator found which takes a right-hand operand of type 'itk::TimeProbe' (or there is no acceptable conversion) ``` --- .../Core/Common/include/itkResourceProbe.h | 5 +++ .../Core/Common/include/itkResourceProbe.hxx | 36 +++++++++++++++++++ Modules/Core/Common/include/itkTimeProbe.h | 5 +++ Modules/Core/Common/src/itkTimeProbe.cxx | 8 +++++ .../itkGPUFiniteDifferenceImageFilter.hxx | 16 ++++----- 5 files changed, 62 insertions(+), 8 deletions(-) diff --git a/Modules/Core/Common/include/itkResourceProbe.h b/Modules/Core/Common/include/itkResourceProbe.h index a0ce1201d57..7c937decc77 100644 --- a/Modules/Core/Common/include/itkResourceProbe.h +++ b/Modules/Core/Common/include/itkResourceProbe.h @@ -19,6 +19,7 @@ #define itkResourceProbe_h #include "itkMacro.h" +#include "itkIndent.h" #include "itkIntTypes.h" #include // For cout. @@ -179,6 +180,10 @@ class ITK_TEMPLATE_EXPORT ResourceProbe /** Obsolete member function from ITK 4.8 - 4.13. Does not do anything anymore. */ itkLegacyMacro(virtual void GetSystemInformation()); + /** Cause the object to print itself out. */ + virtual void + Print(std::ostream & os, Indent indent) const; + private: ValueType m_StartValue{}; ValueType m_TotalValue{}; diff --git a/Modules/Core/Common/include/itkResourceProbe.hxx b/Modules/Core/Common/include/itkResourceProbe.hxx index b9276808590..6b2d15dbd51 100644 --- a/Modules/Core/Common/include/itkResourceProbe.hxx +++ b/Modules/Core/Common/include/itkResourceProbe.hxx @@ -39,6 +39,7 @@ #include "itksys/SystemInformation.hxx" #include "itkMath.h" #include "itkIsNumber.h" +#include "itkPrintHelper.h" namespace itk { @@ -51,6 +52,41 @@ ResourceProbe::ResourceProbe(std::string type, std::string this->Reset(); } +template +void +ResourceProbe::Print(std::ostream & os, Indent indent) const +{ + using namespace print_helper; + + os << indent << "StartValue: " << static_cast::PrintType>(m_StartValue) + << std::endl; + os << indent << "TotalValue: " << static_cast::PrintType>(m_TotalValue) + << std::endl; + os << indent << "MinimumValue: " << static_cast::PrintType>(m_MinimumValue) + << std::endl; + os << indent << "MaximumValue: " << static_cast::PrintType>(m_MaximumValue) + << std::endl; + os << indent + << "StandardDeviation: " << static_cast::PrintType>(m_StandardDeviation) + << std::endl; + os << indent << "StandardError: " << static_cast::PrintType>(m_StandardError) + << std::endl; + + os << indent << "NumberOfStarts: " << static_cast::PrintType>(m_NumberOfStarts) + << std::endl; + os << indent << "NumberOfStops: " << static_cast::PrintType>(m_NumberOfStops) + << std::endl; + os << indent + << "NumberOfIteration: " << static_cast::PrintType>(m_NumberOfIteration) + << std::endl; + + os << indent << "ProbeValueList: " << m_ProbeValueList << std::endl; + + os << indent << "NameOfProbe: " << m_NameOfProbe << std::endl; + os << indent << "TypeString: " << m_TypeString << std::endl; + os << indent << "UnitString: " << m_UnitString << std::endl; +} + template void ResourceProbe::Reset() diff --git a/Modules/Core/Common/include/itkTimeProbe.h b/Modules/Core/Common/include/itkTimeProbe.h index f94c027b005..32ce6b18ac1 100644 --- a/Modules/Core/Common/include/itkTimeProbe.h +++ b/Modules/Core/Common/include/itkTimeProbe.h @@ -44,6 +44,8 @@ namespace itk class ITKCommon_EXPORT TimeProbe : public ResourceProbe { public: + using Superclass = ResourceProbe; + /** Type for counting how many times the probe has been started and stopped. */ using CountType = unsigned long; @@ -59,6 +61,9 @@ class ITKCommon_EXPORT TimeProbe : public ResourceProbe::P { GPUSuperclass::PrintSelf(os, indent); - os << indent << "InitTime: " << static_cast::PrintType>(m_InitTime) << std::endl; - os << indent - << "ComputeUpdateTime: " << static_cast::PrintType>(m_ComputeUpdateTime) - << std::endl; - os << indent << "ApplyUpdateTime: " << static_cast::PrintType>(m_ApplyUpdateTime) - << std::endl; - os << indent << "SmoothFieldTime: " << static_cast::PrintType>(m_SmoothFieldTime) - << std::endl; + os << indent << "InitTime: " << std::endl; + m_InitTime.Print(os, indent.GetNextIndent()); + os << indent << "ComputeUpdateTime: " << std::endl; + m_ComputeUpdateTime.Print(os, indent.GetNextIndent()); + os << indent << "ApplyUpdateTime: " << std::endl; + m_ApplyUpdateTime.Print(os, indent.GetNextIndent()); + os << indent << "SmoothFieldTime: " << std::endl; + m_SmoothFieldTime.Print(os, indent.GetNextIndent()); itkPrintSelfObjectMacro(DifferenceFunction); From b3139d110cd34b5792a067e93261376b9384e971 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C5=BEenan=20Zuki=C4=87?= Date: Fri, 17 Feb 2023 18:21:44 -0500 Subject: [PATCH 5/5] COMP: Add Superclass alias to GPUGradientAnisotropicDiffusionImageFilter Provide with the `Superclass` type alias to `itk::GPUGradientAnisotropicDiffusionImageFilter`. Exercise the basic object methods. --- .../include/itkGPUGradientAnisotropicDiffusionImageFilter.h | 1 + .../itkGPUGradientAnisotropicDiffusionImageFilterTest.cxx | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/Modules/Filtering/GPUAnisotropicSmoothing/include/itkGPUGradientAnisotropicDiffusionImageFilter.h b/Modules/Filtering/GPUAnisotropicSmoothing/include/itkGPUGradientAnisotropicDiffusionImageFilter.h index 3700e3e02f3..dc01c7caa56 100644 --- a/Modules/Filtering/GPUAnisotropicSmoothing/include/itkGPUGradientAnisotropicDiffusionImageFilter.h +++ b/Modules/Filtering/GPUAnisotropicSmoothing/include/itkGPUGradientAnisotropicDiffusionImageFilter.h @@ -54,6 +54,7 @@ class GPUGradientAnisotropicDiffusionImageFilter /** Standard class type aliases. */ using Self = GPUGradientAnisotropicDiffusionImageFilter; + using Superclass = GPUAnisotropicDiffusionImageFilter; using GPUSuperclass = GPUAnisotropicDiffusionImageFilter; using Pointer = SmartPointer; using ConstPointer = SmartPointer; diff --git a/Modules/Filtering/GPUAnisotropicSmoothing/test/itkGPUGradientAnisotropicDiffusionImageFilterTest.cxx b/Modules/Filtering/GPUAnisotropicSmoothing/test/itkGPUGradientAnisotropicDiffusionImageFilterTest.cxx index f88eba78078..36776b951c6 100644 --- a/Modules/Filtering/GPUAnisotropicSmoothing/test/itkGPUGradientAnisotropicDiffusionImageFilterTest.cxx +++ b/Modules/Filtering/GPUAnisotropicSmoothing/test/itkGPUGradientAnisotropicDiffusionImageFilterTest.cxx @@ -24,6 +24,7 @@ #include "itkGradientAnisotropicDiffusionImageFilter.h" #include "itkTimeProbe.h" #include "itkImageRegionIterator.h" +#include "itkTestingMacros.h" #include "itkOpenCLUtil.h" #include "itkGPUImage.h" @@ -58,6 +59,9 @@ runGPUGradientAnisotropicDiffusionImageFilterTest(const std::string & inFile, co auto CPUFilter = CPUAnisoDiffFilterType::New(); auto GPUFilter = GPUAnisoDiffFilterType::New(); + ITK_EXERCISE_BASIC_OBJECT_METHODS( + GPUFilter, GPUGradientAnisotropicDiffusionImageFilter, GPUAnisotropicDiffusionImageFilter); + reader->Update(); // -------