From 40c0565d02d628cd49d480ebb50bc599e9abb3f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Coussat?= Date: Thu, 2 Apr 2020 19:18:53 +0200 Subject: [PATCH] ENH: filters check whether their geometry is set --- ...MTotalVariationConeBeamReconstructionFilter.h | 4 ++++ ...otalVariationConeBeamReconstructionFilter.hxx | 10 ++++++++++ ...ADMMTotalVariationConjugateGradientOperator.h | 4 ++++ ...MMTotalVariationConjugateGradientOperator.hxx | 10 ++++++++++ ...rtkADMMWaveletsConeBeamReconstructionFilter.h | 4 ++++ ...kADMMWaveletsConeBeamReconstructionFilter.hxx | 10 ++++++++++ include/rtkBackProjectionImageFilter.h | 4 ++++ include/rtkBackProjectionImageFilter.hxx | 10 ++++++++++ ...njugateGradientConeBeamReconstructionFilter.h | 4 ++++ ...ugateGradientConeBeamReconstructionFilter.hxx | 11 +++++++++++ include/rtkDisplacedDetectorImageFilter.h | 4 ++++ include/rtkDisplacedDetectorImageFilter.hxx | 10 ++++++++++ include/rtkFDKConeBeamReconstructionFilter.h | 4 ++++ include/rtkFDKConeBeamReconstructionFilter.hxx | 10 ++++++++++ include/rtkFDKWeightProjectionFilter.h | 4 ++++ include/rtkFDKWeightProjectionFilter.hxx | 11 +++++++++++ include/rtkFieldOfViewImageFilter.h | 3 +++ include/rtkFieldOfViewImageFilter.hxx | 10 ++++++++++ include/rtkForwardProjectionImageFilter.h | 3 +++ include/rtkForwardProjectionImageFilter.hxx | 10 ++++++++++ ...njugateGradientConeBeamReconstructionFilter.h | 3 +++ ...ugateGradientConeBeamReconstructionFilter.hxx | 11 +++++++++++ ...rtkFourDROOSTERConeBeamReconstructionFilter.h | 3 +++ ...kFourDROOSTERConeBeamReconstructionFilter.hxx | 10 ++++++++++ ...ourDReconstructionConjugateGradientOperator.h | 3 +++ ...rDReconstructionConjugateGradientOperator.hxx | 10 ++++++++++ .../rtkFourDSARTConeBeamReconstructionFilter.h | 3 +++ .../rtkFourDSARTConeBeamReconstructionFilter.hxx | 16 ++++++++++------ ...rtkIterativeFDKConeBeamReconstructionFilter.h | 3 +++ ...kIterativeFDKConeBeamReconstructionFilter.hxx | 15 ++++++++++----- include/rtkMaskCollimationImageFilter.h | 3 +++ include/rtkMaskCollimationImageFilter.hxx | 10 ++++++++++ ...kMechlemOneStepSpectralReconstructionFilter.h | 3 +++ ...echlemOneStepSpectralReconstructionFilter.hxx | 10 ++++++++++ include/rtkOSEMConeBeamReconstructionFilter.h | 3 +++ include/rtkOSEMConeBeamReconstructionFilter.hxx | 16 ++++++++++------ include/rtkParkerShortScanImageFilter.h | 3 +++ include/rtkParkerShortScanImageFilter.hxx | 10 ++++++++++ include/rtkProjectGeometricPhantomImageFilter.h | 3 +++ .../rtkProjectGeometricPhantomImageFilter.hxx | 10 ++++++++++ include/rtkProjectionStackToFourDImageFilter.h | 3 +++ include/rtkProjectionStackToFourDImageFilter.hxx | 11 +++++++++++ include/rtkRayConvexIntersectionImageFilter.h | 3 +++ include/rtkRayConvexIntersectionImageFilter.hxx | 10 ++++++++++ .../rtkReconstructionConjugateGradientOperator.h | 3 +++ ...tkReconstructionConjugateGradientOperator.hxx | 11 +++++++++++ ...njugateGradientConeBeamReconstructionFilter.h | 3 +++ ...ugateGradientConeBeamReconstructionFilter.hxx | 10 ++++++++++ include/rtkReorderProjectionsImageFilter.h | 3 +++ include/rtkReorderProjectionsImageFilter.hxx | 10 ++++++++++ include/rtkSARTConeBeamReconstructionFilter.h | 3 +++ include/rtkSARTConeBeamReconstructionFilter.hxx | 16 ++++++++++------ include/rtkSubSelectImageFilter.h | 3 +++ include/rtkSubSelectImageFilter.hxx | 10 ++++++++++ 54 files changed, 364 insertions(+), 23 deletions(-) diff --git a/include/rtkADMMTotalVariationConeBeamReconstructionFilter.h b/include/rtkADMMTotalVariationConeBeamReconstructionFilter.h index 75d7502f8..24d405b0e 100644 --- a/include/rtkADMMTotalVariationConeBeamReconstructionFilter.h +++ b/include/rtkADMMTotalVariationConeBeamReconstructionFilter.h @@ -214,6 +214,10 @@ class ADMMTotalVariationConeBeamReconstructionFilter ADMMTotalVariationConeBeamReconstructionFilter(); ~ADMMTotalVariationConeBeamReconstructionFilter() override = default; + /** Checks that inputs are correctly set. */ + void + VerifyPreconditions() ITKv5_CONST override; + /** Does the real work. */ void GenerateData() override; diff --git a/include/rtkADMMTotalVariationConeBeamReconstructionFilter.hxx b/include/rtkADMMTotalVariationConeBeamReconstructionFilter.hxx index d09352db6..dc2c40ccb 100644 --- a/include/rtkADMMTotalVariationConeBeamReconstructionFilter.hxx +++ b/include/rtkADMMTotalVariationConeBeamReconstructionFilter.hxx @@ -163,6 +163,16 @@ ADMMTotalVariationConeBeamReconstructionFilterSetRequestedRegion(inputPtr1->GetLargestPossibleRegion()); } +template +void +ADMMTotalVariationConeBeamReconstructionFilter::VerifyPreconditions() ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_Geometry.IsNull()) + itkExceptionMacro(<< "Geometry has not been set."); +} + template void ADMMTotalVariationConeBeamReconstructionFilter::GenerateOutputInformation() diff --git a/include/rtkADMMTotalVariationConjugateGradientOperator.h b/include/rtkADMMTotalVariationConjugateGradientOperator.h index a9ca8968e..34d219e8b 100644 --- a/include/rtkADMMTotalVariationConjugateGradientOperator.h +++ b/include/rtkADMMTotalVariationConjugateGradientOperator.h @@ -162,6 +162,10 @@ class ADMMTotalVariationConjugateGradientOperator : public ConjugateGradientOper ADMMTotalVariationConjugateGradientOperator(); ~ADMMTotalVariationConjugateGradientOperator() override = default; + /** Checks that inputs are correctly set. */ + void + VerifyPreconditions() ITKv5_CONST override; + /** Does the real work. */ void GenerateData() override; diff --git a/include/rtkADMMTotalVariationConjugateGradientOperator.hxx b/include/rtkADMMTotalVariationConjugateGradientOperator.hxx index 071617ba6..ef78dbf90 100644 --- a/include/rtkADMMTotalVariationConjugateGradientOperator.hxx +++ b/include/rtkADMMTotalVariationConjugateGradientOperator.hxx @@ -94,6 +94,16 @@ ADMMTotalVariationConjugateGradientOperator: this->Modified(); } +template +void +ADMMTotalVariationConjugateGradientOperator::VerifyPreconditions() ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_Geometry.IsNull()) + itkExceptionMacro(<< "Geometry has not been set."); +} + template void ADMMTotalVariationConjugateGradientOperator::GenerateInputRequestedRegion() diff --git a/include/rtkADMMWaveletsConeBeamReconstructionFilter.h b/include/rtkADMMWaveletsConeBeamReconstructionFilter.h index 72f99b3cf..538e90e43 100644 --- a/include/rtkADMMWaveletsConeBeamReconstructionFilter.h +++ b/include/rtkADMMWaveletsConeBeamReconstructionFilter.h @@ -214,6 +214,10 @@ class ADMMWaveletsConeBeamReconstructionFilter ADMMWaveletsConeBeamReconstructionFilter(); ~ADMMWaveletsConeBeamReconstructionFilter() override = default; + /** Checks that inputs are correctly set. */ + void + VerifyPreconditions() ITKv5_CONST override; + /** Does the real work. */ void GenerateData() override; diff --git a/include/rtkADMMWaveletsConeBeamReconstructionFilter.hxx b/include/rtkADMMWaveletsConeBeamReconstructionFilter.hxx index 31b965da0..a5ba32fc8 100644 --- a/include/rtkADMMWaveletsConeBeamReconstructionFilter.hxx +++ b/include/rtkADMMWaveletsConeBeamReconstructionFilter.hxx @@ -97,6 +97,16 @@ ADMMWaveletsConeBeamReconstructionFilter::SetBackProjectionFilter( } } +template +void +ADMMWaveletsConeBeamReconstructionFilter::VerifyPreconditions() ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_Geometry.IsNull()) + itkExceptionMacro(<< "Geometry has not been set."); +} + template void ADMMWaveletsConeBeamReconstructionFilter::GenerateInputRequestedRegion() diff --git a/include/rtkBackProjectionImageFilter.h b/include/rtkBackProjectionImageFilter.h index 8d147e814..4f300ce5a 100644 --- a/include/rtkBackProjectionImageFilter.h +++ b/include/rtkBackProjectionImageFilter.h @@ -90,6 +90,10 @@ class BackProjectionImageFilter : public itk::InPlaceImageFilter::GenerateInputRequestedRegi } } +template +void +BackProjectionImageFilter::VerifyPreconditions() ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_Geometry.IsNull()) + itkExceptionMacro(<< "Geometry has not been set."); +} + template void BackProjectionImageFilter::BeforeThreadedGenerateData() diff --git a/include/rtkConjugateGradientConeBeamReconstructionFilter.h b/include/rtkConjugateGradientConeBeamReconstructionFilter.h index a0cb83206..7c7344841 100644 --- a/include/rtkConjugateGradientConeBeamReconstructionFilter.h +++ b/include/rtkConjugateGradientConeBeamReconstructionFilter.h @@ -217,6 +217,10 @@ class ConjugateGradientConeBeamReconstructionFilter : public IterativeConeBeamRe ConjugateGradientConeBeamReconstructionFilter(); ~ConjugateGradientConeBeamReconstructionFilter() override = default; + /** Checks that inputs are correctly set. */ + void + VerifyPreconditions() ITKv5_CONST override; + /** Does the real work. */ void GenerateData() override; diff --git a/include/rtkConjugateGradientConeBeamReconstructionFilter.hxx b/include/rtkConjugateGradientConeBeamReconstructionFilter.hxx index ef15aa48f..d8cc8795b 100644 --- a/include/rtkConjugateGradientConeBeamReconstructionFilter.hxx +++ b/include/rtkConjugateGradientConeBeamReconstructionFilter.hxx @@ -150,6 +150,17 @@ ConjugateGradientConeBeamReconstructionFilter +void +ConjugateGradientConeBeamReconstructionFilter::VerifyPreconditions() + ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_Geometry.IsNull()) + itkExceptionMacro(<< "Geometry has not been set."); +} + template void ConjugateGradientConeBeamReconstructionFilter:: diff --git a/include/rtkDisplacedDetectorImageFilter.h b/include/rtkDisplacedDetectorImageFilter.h index d8d15e5c2..063ca8f2f 100644 --- a/include/rtkDisplacedDetectorImageFilter.h +++ b/include/rtkDisplacedDetectorImageFilter.h @@ -117,6 +117,10 @@ class ITK_EXPORT DisplacedDetectorImageFilter : public itk::InPlaceImageFilter::SetOffsets(double minOf } } +template +void +DisplacedDetectorImageFilter::VerifyPreconditions() ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_Geometry.IsNull()) + itkExceptionMacro(<< "Geometry has not been set."); +} + /** * Account for the padding computed in GenerateOutputInformation to propagate the * requested region. diff --git a/include/rtkFDKConeBeamReconstructionFilter.h b/include/rtkFDKConeBeamReconstructionFilter.h index 17fe182fa..0d4634b25 100644 --- a/include/rtkFDKConeBeamReconstructionFilter.h +++ b/include/rtkFDKConeBeamReconstructionFilter.h @@ -122,6 +122,10 @@ class ITK_EXPORT FDKConeBeamReconstructionFilter : public itk::InPlaceImageFilte FDKConeBeamReconstructionFilter(); ~FDKConeBeamReconstructionFilter() override = default; + /** Checks that inputs are correctly set. */ + void + VerifyPreconditions() ITKv5_CONST override; + void GenerateInputRequestedRegion() override; diff --git a/include/rtkFDKConeBeamReconstructionFilter.hxx b/include/rtkFDKConeBeamReconstructionFilter.hxx index 48ce0adbb..2fecabb85 100644 --- a/include/rtkFDKConeBeamReconstructionFilter.hxx +++ b/include/rtkFDKConeBeamReconstructionFilter.hxx @@ -54,6 +54,16 @@ FDKConeBeamReconstructionFilter::FDKCo #endif } +template +void +FDKConeBeamReconstructionFilter::VerifyPreconditions() ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_Geometry.IsNull()) + itkExceptionMacro(<< "Geometry has not been set."); +} + template void FDKConeBeamReconstructionFilter::GenerateInputRequestedRegion() diff --git a/include/rtkFDKWeightProjectionFilter.h b/include/rtkFDKWeightProjectionFilter.h index 5bd8ec3dc..279d43ae6 100644 --- a/include/rtkFDKWeightProjectionFilter.h +++ b/include/rtkFDKWeightProjectionFilter.h @@ -78,6 +78,10 @@ class ITK_EXPORT FDKWeightProjectionFilter : public itk::InPlaceImageFilter +void +FDKWeightProjectionFilter::VerifyPreconditions() ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_Geometry.IsNull()) + itkExceptionMacro(<< "Geometry has not been set."); +} + template void FDKWeightProjectionFilter::BeforeThreadedGenerateData() diff --git a/include/rtkFieldOfViewImageFilter.h b/include/rtkFieldOfViewImageFilter.h index 7a8673660..4be48471a 100644 --- a/include/rtkFieldOfViewImageFilter.h +++ b/include/rtkFieldOfViewImageFilter.h @@ -114,6 +114,9 @@ class ITK_EXPORT FieldOfViewImageFilter : public itk::InPlaceImageFilter::ComputeFOVRadius(const FOVRad return true; } +template +void +FieldOfViewImageFilter::VerifyPreconditions() ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_Geometry.IsNull()) + itkExceptionMacro(<< "Geometry has not been set."); +} + template void FieldOfViewImageFilter::BeforeThreadedGenerateData() diff --git a/include/rtkForwardProjectionImageFilter.h b/include/rtkForwardProjectionImageFilter.h index 42bdfda4b..40d246264 100644 --- a/include/rtkForwardProjectionImageFilter.h +++ b/include/rtkForwardProjectionImageFilter.h @@ -65,6 +65,9 @@ class ForwardProjectionImageFilter : public itk::InPlaceImageFilter +void +ForwardProjectionImageFilter::VerifyPreconditions() ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_Geometry.IsNull()) + itkExceptionMacro(<< "Geometry has not been set."); +} + template void ForwardProjectionImageFilter::GenerateInputRequestedRegion() diff --git a/include/rtkFourDConjugateGradientConeBeamReconstructionFilter.h b/include/rtkFourDConjugateGradientConeBeamReconstructionFilter.h index ae3079be8..942f1d4b8 100644 --- a/include/rtkFourDConjugateGradientConeBeamReconstructionFilter.h +++ b/include/rtkFourDConjugateGradientConeBeamReconstructionFilter.h @@ -187,6 +187,9 @@ class ITK_EXPORT FourDConjugateGradientConeBeamReconstructionFilter FourDConjugateGradientConeBeamReconstructionFilter(); ~FourDConjugateGradientConeBeamReconstructionFilter() override = default; + /** Checks that inputs are correctly set. */ + void VerifyPreconditions() ITKv5_CONST override; + void GenerateOutputInformation() override; diff --git a/include/rtkFourDConjugateGradientConeBeamReconstructionFilter.hxx b/include/rtkFourDConjugateGradientConeBeamReconstructionFilter.hxx index 29e3805f9..cffb9d0d7 100644 --- a/include/rtkFourDConjugateGradientConeBeamReconstructionFilter.hxx +++ b/include/rtkFourDConjugateGradientConeBeamReconstructionFilter.hxx @@ -152,6 +152,17 @@ FourDConjugateGradientConeBeamReconstructionFilterModified(); } +template +void +FourDConjugateGradientConeBeamReconstructionFilter::VerifyPreconditions() + ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_Geometry.IsNull()) + itkExceptionMacro(<< "Geometry has not been set."); +} + template void FourDConjugateGradientConeBeamReconstructionFilter::GenerateOutputInformation() diff --git a/include/rtkFourDROOSTERConeBeamReconstructionFilter.h b/include/rtkFourDROOSTERConeBeamReconstructionFilter.h index cc9b74b6d..2e7f13d1b 100644 --- a/include/rtkFourDROOSTERConeBeamReconstructionFilter.h +++ b/include/rtkFourDROOSTERConeBeamReconstructionFilter.h @@ -398,6 +398,9 @@ class FourDROOSTERConeBeamReconstructionFilter FourDROOSTERConeBeamReconstructionFilter(); ~FourDROOSTERConeBeamReconstructionFilter() override = default; + /** Checks that inputs are correctly set. */ + void VerifyPreconditions() ITKv5_CONST override; + /** Does the real work. */ void GenerateData() override; diff --git a/include/rtkFourDROOSTERConeBeamReconstructionFilter.hxx b/include/rtkFourDROOSTERConeBeamReconstructionFilter.hxx index 207e0da63..fba1bda9b 100644 --- a/include/rtkFourDROOSTERConeBeamReconstructionFilter.hxx +++ b/include/rtkFourDROOSTERConeBeamReconstructionFilter.hxx @@ -200,6 +200,16 @@ FourDROOSTERConeBeamReconstructionFilter: this->Modified(); } +template +void +FourDROOSTERConeBeamReconstructionFilter::VerifyPreconditions() ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_Geometry.IsNull()) + itkExceptionMacro(<< "Geometry has not been set."); +} + template void FourDROOSTERConeBeamReconstructionFilter::GenerateInputRequestedRegion() diff --git a/include/rtkFourDReconstructionConjugateGradientOperator.h b/include/rtkFourDReconstructionConjugateGradientOperator.h index 6cf6dc114..549edb0db 100644 --- a/include/rtkFourDReconstructionConjugateGradientOperator.h +++ b/include/rtkFourDReconstructionConjugateGradientOperator.h @@ -228,6 +228,9 @@ class FourDReconstructionConjugateGradientOperator : public ConjugateGradientOpe FourDReconstructionConjugateGradientOperator(); ~FourDReconstructionConjugateGradientOperator() override = default; + /** Checks that inputs are correctly set. */ + void VerifyPreconditions() ITKv5_CONST override; + /** Builds the pipeline and computes output information */ void GenerateOutputInformation() override; diff --git a/include/rtkFourDReconstructionConjugateGradientOperator.hxx b/include/rtkFourDReconstructionConjugateGradientOperator.hxx index 416acbe9f..e01e2214f 100644 --- a/include/rtkFourDReconstructionConjugateGradientOperator.hxx +++ b/include/rtkFourDReconstructionConjugateGradientOperator.hxx @@ -154,6 +154,16 @@ FourDReconstructionConjugateGradientOperatorReleaseDataFlagOn(); } +template +void +FourDReconstructionConjugateGradientOperator::VerifyPreconditions() ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_Geometry.IsNull()) + itkExceptionMacro(<< "Geometry has not been set."); +} + template void FourDReconstructionConjugateGradientOperator::GenerateOutputInformation() diff --git a/include/rtkFourDSARTConeBeamReconstructionFilter.h b/include/rtkFourDSARTConeBeamReconstructionFilter.h index 93edf90c0..d391035eb 100644 --- a/include/rtkFourDSARTConeBeamReconstructionFilter.h +++ b/include/rtkFourDSARTConeBeamReconstructionFilter.h @@ -220,6 +220,9 @@ class ITK_EXPORT FourDSARTConeBeamReconstructionFilter FourDSARTConeBeamReconstructionFilter(); ~FourDSARTConeBeamReconstructionFilter() override = default; + /** Checks that inputs are correctly set. */ + void VerifyPreconditions() ITKv5_CONST override; + void GenerateInputRequestedRegion() override; diff --git a/include/rtkFourDSARTConeBeamReconstructionFilter.hxx b/include/rtkFourDSARTConeBeamReconstructionFilter.hxx index 4bed7cbb7..565f41eaa 100644 --- a/include/rtkFourDSARTConeBeamReconstructionFilter.hxx +++ b/include/rtkFourDSARTConeBeamReconstructionFilter.hxx @@ -157,6 +157,16 @@ FourDSARTConeBeamReconstructionFilter::Se this->Modified(); } +template +void +FourDSARTConeBeamReconstructionFilter::VerifyPreconditions() ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_Geometry.IsNull()) + itkExceptionMacro(<< "Geometry has not been set."); +} + template void FourDSARTConeBeamReconstructionFilter::GenerateInputRequestedRegion() @@ -234,12 +244,6 @@ FourDSARTConeBeamReconstructionFilter::Ge m_SubtractFilter->SetInput2(m_FourDToProjectionStackFilter->GetOutput()); m_SubtractFilter->SetInput1(m_ExtractFilter->GetOutput()); - // For the same reason, set geometry now - // Check and set geometry - if (this->GetGeometry() == nullptr) - { - itkGenericExceptionMacro(<< "The geometry of the reconstruction has not been set"); - } m_FourDToProjectionStackFilter->SetGeometry(this->m_Geometry); m_ProjectionStackToFourDFilter->SetGeometry(this->m_Geometry); m_DisplacedDetectorFilter->SetGeometry(this->m_Geometry); diff --git a/include/rtkIterativeFDKConeBeamReconstructionFilter.h b/include/rtkIterativeFDKConeBeamReconstructionFilter.h index 16ec9f6de..8de77b82d 100644 --- a/include/rtkIterativeFDKConeBeamReconstructionFilter.h +++ b/include/rtkIterativeFDKConeBeamReconstructionFilter.h @@ -191,6 +191,9 @@ class ITK_EXPORT IterativeFDKConeBeamReconstructionFilter IterativeFDKConeBeamReconstructionFilter(); ~IterativeFDKConeBeamReconstructionFilter() override = default; + /** Checks that inputs are correctly set. */ + void VerifyPreconditions() ITKv5_CONST override; + void GenerateInputRequestedRegion() override; diff --git a/include/rtkIterativeFDKConeBeamReconstructionFilter.hxx b/include/rtkIterativeFDKConeBeamReconstructionFilter.hxx index 0406b4328..5f4884a17 100644 --- a/include/rtkIterativeFDKConeBeamReconstructionFilter.hxx +++ b/include/rtkIterativeFDKConeBeamReconstructionFilter.hxx @@ -69,6 +69,16 @@ IterativeFDKConeBeamReconstructionFilter +void +IterativeFDKConeBeamReconstructionFilter::VerifyPreconditions() ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_Geometry.IsNull()) + itkExceptionMacro(<< "Geometry has not been set."); +} + template void IterativeFDKConeBeamReconstructionFilter::GenerateInputRequestedRegion() @@ -133,11 +143,6 @@ IterativeFDKConeBeamReconstructionFilterSetInput1(m_MultiplyFilter->GetOutput()); m_DivideFilter->SetInput2(m_RayBoxFilter->GetOutput()); - // Check and set geometry - if (this->GetGeometry() == nullptr) - { - itkGenericExceptionMacro(<< "The geometry of the reconstruction has not been set"); - } m_DisplacedDetectorFilter->SetGeometry(m_Geometry); m_ParkerFilter->SetGeometry(m_Geometry); m_FDKFilter->SetGeometry(m_Geometry); diff --git a/include/rtkMaskCollimationImageFilter.h b/include/rtkMaskCollimationImageFilter.h index 2f8cab85f..33b8e15ff 100644 --- a/include/rtkMaskCollimationImageFilter.h +++ b/include/rtkMaskCollimationImageFilter.h @@ -67,6 +67,9 @@ class ITK_EXPORT MaskCollimationImageFilter : public itk::InPlaceImageFilter::MaskCollimationImageFilte : m_Geometry(nullptr) {} +template +void +MaskCollimationImageFilter::VerifyPreconditions() ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_Geometry.IsNull()) + itkExceptionMacro(<< "Geometry has not been set."); +} + template void MaskCollimationImageFilter::BeforeThreadedGenerateData() diff --git a/include/rtkMechlemOneStepSpectralReconstructionFilter.h b/include/rtkMechlemOneStepSpectralReconstructionFilter.h index 6d58dd2ad..b50e8916f 100644 --- a/include/rtkMechlemOneStepSpectralReconstructionFilter.h +++ b/include/rtkMechlemOneStepSpectralReconstructionFilter.h @@ -291,6 +291,9 @@ class MechlemOneStepSpectralReconstructionFilter MechlemOneStepSpectralReconstructionFilter(); ~MechlemOneStepSpectralReconstructionFilter() override = default; + /** Checks that inputs are correctly set. */ + void VerifyPreconditions() ITKv5_CONST override; + /** Does the real work. */ void GenerateData() override; diff --git a/include/rtkMechlemOneStepSpectralReconstructionFilter.hxx b/include/rtkMechlemOneStepSpectralReconstructionFilter.hxx index a27595999..5d24edd67 100644 --- a/include/rtkMechlemOneStepSpectralReconstructionFilter.hxx +++ b/include/rtkMechlemOneStepSpectralReconstructionFilter.hxx @@ -277,6 +277,16 @@ MechlemOneStepSpectralReconstructionFilterSetBinnedDetectorResponse(detResp); } +template +void +MechlemOneStepSpectralReconstructionFilter::VerifyPreconditions() ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_Geometry.IsNull()) + itkExceptionMacro(<< "Geometry has not been set."); +} + template void MechlemOneStepSpectralReconstructionFilter::GenerateInputRequestedRegion() diff --git a/include/rtkOSEMConeBeamReconstructionFilter.h b/include/rtkOSEMConeBeamReconstructionFilter.h index 3376394a8..a14d6cc48 100644 --- a/include/rtkOSEMConeBeamReconstructionFilter.h +++ b/include/rtkOSEMConeBeamReconstructionFilter.h @@ -176,6 +176,9 @@ class ITK_EXPORT OSEMConeBeamReconstructionFilter OSEMConeBeamReconstructionFilter(); ~OSEMConeBeamReconstructionFilter() override = default; + /** Checks that inputs are correctly set. */ + void VerifyPreconditions() ITKv5_CONST override; + void GenerateInputRequestedRegion() override; diff --git a/include/rtkOSEMConeBeamReconstructionFilter.hxx b/include/rtkOSEMConeBeamReconstructionFilter.hxx index 2b1288597..59075df28 100644 --- a/include/rtkOSEMConeBeamReconstructionFilter.hxx +++ b/include/rtkOSEMConeBeamReconstructionFilter.hxx @@ -85,6 +85,16 @@ OSEMConeBeamReconstructionFilter::SetBackProject } } +template +void +OSEMConeBeamReconstructionFilter::VerifyPreconditions() ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_Geometry.IsNull()) + itkExceptionMacro(<< "Geometry has not been set."); +} + template void OSEMConeBeamReconstructionFilter::GenerateInputRequestedRegion() @@ -230,12 +240,6 @@ OSEMConeBeamReconstructionFilter::GenerateOutput m_DivideProjectionFilter->SetInput2(m_ForwardProjectionFilter->GetOutput()); m_DivideProjectionFilter->SetConstant(0); - // For the same reason, set geometry now - // Check and set geometry - if (this->GetGeometry() == nullptr) - { - itkGenericExceptionMacro(<< "The geometry of the reconstruction has not been set"); - } m_ForwardProjectionFilter->SetGeometry(this->m_Geometry); m_BackProjectionFilter->SetGeometry(this->m_Geometry); m_BackProjectionNormalizationFilter->SetGeometry(this->m_Geometry); diff --git a/include/rtkParkerShortScanImageFilter.h b/include/rtkParkerShortScanImageFilter.h index 0b156585e..d26cfaf36 100644 --- a/include/rtkParkerShortScanImageFilter.h +++ b/include/rtkParkerShortScanImageFilter.h @@ -83,6 +83,9 @@ class ITK_EXPORT ParkerShortScanImageFilter : public itk::InPlaceImageFilter::ParkerShortScanImageFilte this->SetInPlace(true); } +template +void +ParkerShortScanImageFilter::VerifyPreconditions() ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_Geometry.IsNull()) + itkExceptionMacro(<< "Geometry has not been set."); +} + template void ParkerShortScanImageFilter::DynamicThreadedGenerateData( diff --git a/include/rtkProjectGeometricPhantomImageFilter.h b/include/rtkProjectGeometricPhantomImageFilter.h index deacebd68..98c9bba06 100644 --- a/include/rtkProjectGeometricPhantomImageFilter.h +++ b/include/rtkProjectGeometricPhantomImageFilter.h @@ -105,6 +105,9 @@ class ProjectGeometricPhantomImageFilter : public itk::InPlaceImageFilter::ProjectGeometricP m_RotationMatrix.SetIdentity(); } +template +void +ProjectGeometricPhantomImageFilter::VerifyPreconditions() ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_Geometry.IsNull()) + itkExceptionMacro(<< "Geometry has not been set."); +} + template void ProjectGeometricPhantomImageFilter::GenerateData() diff --git a/include/rtkProjectionStackToFourDImageFilter.h b/include/rtkProjectionStackToFourDImageFilter.h index 505f602fc..4d4be2646 100644 --- a/include/rtkProjectionStackToFourDImageFilter.h +++ b/include/rtkProjectionStackToFourDImageFilter.h @@ -185,6 +185,9 @@ class ProjectionStackToFourDImageFilter : public itk::ImageToImageFilterReleaseDataFlagOn(); } +template +void +ProjectionStackToFourDImageFilter::VerifyPreconditions() + ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_Geometry.IsNull()) + itkExceptionMacro(<< "Geometry has not been set."); +} + template void ProjectionStackToFourDImageFilter::GenerateOutputInformation() diff --git a/include/rtkRayConvexIntersectionImageFilter.h b/include/rtkRayConvexIntersectionImageFilter.h index c1f16da64..4c16f3c70 100644 --- a/include/rtkRayConvexIntersectionImageFilter.h +++ b/include/rtkRayConvexIntersectionImageFilter.h @@ -95,6 +95,9 @@ class RayConvexIntersectionImageFilter : public itk::InPlaceImageFilter::BeforeThreadedGener itkExceptionMacro(<< "ConvexShape has not been set."); } +template +void +RayConvexIntersectionImageFilter::VerifyPreconditions() ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_Geometry.IsNull()) + itkExceptionMacro(<< "Geometry has not been set."); +} + template void RayConvexIntersectionImageFilter::DynamicThreadedGenerateData( diff --git a/include/rtkReconstructionConjugateGradientOperator.h b/include/rtkReconstructionConjugateGradientOperator.h index 609c02751..fa3f8e54b 100644 --- a/include/rtkReconstructionConjugateGradientOperator.h +++ b/include/rtkReconstructionConjugateGradientOperator.h @@ -197,6 +197,9 @@ class ReconstructionConjugateGradientOperator : public ConjugateGradientOperator ReconstructionConjugateGradientOperator(); ~ReconstructionConjugateGradientOperator() override = default; + /** Checks that inputs are correctly set. */ + void VerifyPreconditions() ITKv5_CONST override; + /** Does the real work. */ void GenerateData() override; diff --git a/include/rtkReconstructionConjugateGradientOperator.hxx b/include/rtkReconstructionConjugateGradientOperator.hxx index 2a634957e..642de81f5 100644 --- a/include/rtkReconstructionConjugateGradientOperator.hxx +++ b/include/rtkReconstructionConjugateGradientOperator.hxx @@ -133,6 +133,17 @@ ReconstructionConjugateGradientOperator +void +ReconstructionConjugateGradientOperator::VerifyPreconditions() + ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_Geometry.IsNull()) + itkExceptionMacro(<< "Geometry has not been set."); +} + template void ReconstructionConjugateGradientOperator:: diff --git a/include/rtkRegularizedConjugateGradientConeBeamReconstructionFilter.h b/include/rtkRegularizedConjugateGradientConeBeamReconstructionFilter.h index 98a059b8f..a826e1343 100644 --- a/include/rtkRegularizedConjugateGradientConeBeamReconstructionFilter.h +++ b/include/rtkRegularizedConjugateGradientConeBeamReconstructionFilter.h @@ -233,6 +233,9 @@ class RegularizedConjugateGradientConeBeamReconstructionFilter RegularizedConjugateGradientConeBeamReconstructionFilter(); ~RegularizedConjugateGradientConeBeamReconstructionFilter() override = default; + /** Checks that inputs are correctly set. */ + void VerifyPreconditions() ITKv5_CONST override; + /** Does the real work. */ void GenerateData() override; diff --git a/include/rtkRegularizedConjugateGradientConeBeamReconstructionFilter.hxx b/include/rtkRegularizedConjugateGradientConeBeamReconstructionFilter.hxx index f75a87f63..840f60199 100644 --- a/include/rtkRegularizedConjugateGradientConeBeamReconstructionFilter.hxx +++ b/include/rtkRegularizedConjugateGradientConeBeamReconstructionFilter.hxx @@ -145,6 +145,16 @@ RegularizedConjugateGradientConeBeamReconstructionFilter::SetBackProject } } +template +void +RegularizedConjugateGradientConeBeamReconstructionFilter::VerifyPreconditions() ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_Geometry.IsNull()) + itkExceptionMacro(<< "Geometry has not been set."); +} + template void RegularizedConjugateGradientConeBeamReconstructionFilter::GenerateInputRequestedRegion() diff --git a/include/rtkReorderProjectionsImageFilter.h b/include/rtkReorderProjectionsImageFilter.h index ecfcf3cc2..178ec3405 100644 --- a/include/rtkReorderProjectionsImageFilter.h +++ b/include/rtkReorderProjectionsImageFilter.h @@ -88,6 +88,9 @@ class ITK_EXPORT ReorderProjectionsImageFilter : public itk::ImageToImageFilter< ~ReorderProjectionsImageFilter() override = default; + /** Checks that inputs are correctly set. */ + void VerifyPreconditions() ITKv5_CONST override; + void GenerateData() override; diff --git a/include/rtkReorderProjectionsImageFilter.hxx b/include/rtkReorderProjectionsImageFilter.hxx index b67ff8ae8..2bc38ca46 100644 --- a/include/rtkReorderProjectionsImageFilter.hxx +++ b/include/rtkReorderProjectionsImageFilter.hxx @@ -54,6 +54,16 @@ ReorderProjectionsImageFilter::GetOutputSignal() return m_OutputSignal; } +template +void +ReorderProjectionsImageFilter::VerifyPreconditions() ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_InputGeometry.IsNull() || this->m_OutputGeometry.IsNull()) + itkExceptionMacro(<< "Geometries have not been set."); +} + template void ReorderProjectionsImageFilter::GenerateData() diff --git a/include/rtkSARTConeBeamReconstructionFilter.h b/include/rtkSARTConeBeamReconstructionFilter.h index 0af0c58f0..c3dd1d981 100644 --- a/include/rtkSARTConeBeamReconstructionFilter.h +++ b/include/rtkSARTConeBeamReconstructionFilter.h @@ -213,6 +213,9 @@ class ITK_EXPORT SARTConeBeamReconstructionFilter SARTConeBeamReconstructionFilter(); ~SARTConeBeamReconstructionFilter() override = default; + /** Checks that inputs are correctly set. */ + void VerifyPreconditions() ITKv5_CONST override; + void GenerateInputRequestedRegion() override; diff --git a/include/rtkSARTConeBeamReconstructionFilter.hxx b/include/rtkSARTConeBeamReconstructionFilter.hxx index 99a33cf22..0c1c7b2d9 100644 --- a/include/rtkSARTConeBeamReconstructionFilter.hxx +++ b/include/rtkSARTConeBeamReconstructionFilter.hxx @@ -119,6 +119,16 @@ SARTConeBeamReconstructionFilter::SetGatingWeigh m_IsGated = true; } +template +void +SARTConeBeamReconstructionFilter::VerifyPreconditions() ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_Geometry.IsNull()) + itkExceptionMacro(<< "Geometry has not been set."); +} + template void SARTConeBeamReconstructionFilter::GenerateInputRequestedRegion() @@ -183,12 +193,6 @@ SARTConeBeamReconstructionFilter::GenerateOutput m_ExtractFilter->SetInput(this->GetInput(1)); m_SubtractFilter->SetInput(1, m_ForwardProjectionFilter->GetOutput()); - // For the same reason, set geometry now - // Check and set geometry - if (this->GetGeometry() == nullptr) - { - itkGenericExceptionMacro(<< "The geometry of the reconstruction has not been set"); - } m_ForwardProjectionFilter->SetGeometry(this->m_Geometry); m_BackProjectionFilter->SetGeometry(this->m_Geometry); m_BackProjectionNormalizationFilter->SetGeometry(this->m_Geometry); diff --git a/include/rtkSubSelectImageFilter.h b/include/rtkSubSelectImageFilter.h index 67a8fe129..222cff31c 100644 --- a/include/rtkSubSelectImageFilter.h +++ b/include/rtkSubSelectImageFilter.h @@ -97,6 +97,9 @@ class SubSelectImageFilter : public itk::ImageToImageFilter::GetInputProjectionStack() return static_cast(this->itk::ProcessObject::GetInput(0)); } +template +void +SubSelectImageFilter::VerifyPreconditions() ITKv5_CONST +{ + this->Superclass::VerifyPreconditions(); + + if (this->m_InputGeometry.IsNull() || this->m_OutputGeometry.IsNull()) + itkExceptionMacro(<< "Geometries have not been set."); +} + template void SubSelectImageFilter::GenerateInputRequestedRegion()