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); 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(); // ------- 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..52449b82c3d 100644 --- a/Modules/Registration/GPUPDEDeformable/include/itkGPUPDEDeformableRegistrationFilter.hxx +++ b/Modules/Registration/GPUPDEDeformable/include/itkGPUPDEDeformableRegistrationFilter.hxx @@ -83,36 +83,65 @@ 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); + itkPrintSelfObjectMacro(GPUImageSizes); os << indent << "SmoothDisplacementFieldGPUKernelHandle: " << m_SmoothDisplacementFieldGPUKernelHandle << std::endl; }