From d32df3bcd1910f56195e828a0f7fba8fc04b90ab Mon Sep 17 00:00:00 2001
From: Willem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl>
Date: Thu, 12 Jul 2018 12:11:52 +0200
Subject: Refactor filter config

---
 cuda/2d/fbp.cu | 32 ++++++++++++++++----------------
 cuda/2d/fft.cu |  8 ++++----
 2 files changed, 20 insertions(+), 20 deletions(-)

(limited to 'cuda/2d')

diff --git a/cuda/2d/fbp.cu b/cuda/2d/fbp.cu
index 7a8d2e9..1574ccc 100644
--- a/cuda/2d/fbp.cu
+++ b/cuda/2d/fbp.cu
@@ -88,7 +88,7 @@ bool FBP::init()
 	return true;
 }
 
-bool FBP::setFilter(astra::E_FBPFILTER _eFilter, const float * _pfHostFilter /* = NULL */, int _iFilterWidth /* = 0 */, float _fD /* = 1.0f */, float _fFilterParameter /* = -1.0f */)
+bool FBP::setFilter(const astra::SFilterConfig &_cfg)
 {
 	if (D_filter)
 	{
@@ -96,7 +96,7 @@ bool FBP::setFilter(astra::E_FBPFILTER _eFilter, const float * _pfHostFilter /*
 		D_filter = 0;
 	}
 
-	if (_eFilter == astra::FILTER_NONE)
+	if (_cfg.m_eType == astra::FILTER_NONE)
 		return true; // leave D_filter set to 0
 
 
@@ -108,7 +108,7 @@ bool FBP::setFilter(astra::E_FBPFILTER _eFilter, const float * _pfHostFilter /*
 
 	allocateComplexOnDevice(dims.iProjAngles, iFreqBinCount, (cufftComplex**)&D_filter);
 
-	switch(_eFilter)
+	switch(_cfg.m_eType)
 	{
 		case astra::FILTER_NONE:
 			// handled above
@@ -130,7 +130,7 @@ bool FBP::setFilter(astra::E_FBPFILTER _eFilter, const float * _pfHostFilter /*
 		case astra::FILTER_FLATTOP:
 		case astra::FILTER_PARZEN:
 		{
-			genCuFFTFilter(_eFilter, _fD, dims.iProjAngles, pHostFilter, iFFTRealDetCount, iFreqBinCount, _fFilterParameter);
+			genCuFFTFilter(_cfg, dims.iProjAngles, pHostFilter, iFFTRealDetCount, iFreqBinCount);
 			uploadComplexArrayToDevice(dims.iProjAngles, iFreqBinCount, pHostFilter, (cufftComplex*)D_filter);
 
 			break;
@@ -138,11 +138,11 @@ bool FBP::setFilter(astra::E_FBPFILTER _eFilter, const float * _pfHostFilter /*
 		case astra::FILTER_PROJECTION:
 		{
 			// make sure the offered filter has the correct size
-			assert(_iFilterWidth == iFreqBinCount);
+			assert(_cfg.m_iCustomFilterWidth == iFreqBinCount);
 
 			for(int iFreqBinIndex = 0; iFreqBinIndex < iFreqBinCount; iFreqBinIndex++)
 			{
-				float fValue = _pfHostFilter[iFreqBinIndex];
+				float fValue = _cfg.m_pfCustomFilter[iFreqBinIndex];
 
 				for(int iProjectionIndex = 0; iProjectionIndex < (int)dims.iProjAngles; iProjectionIndex++)
 				{
@@ -156,13 +156,13 @@ bool FBP::setFilter(astra::E_FBPFILTER _eFilter, const float * _pfHostFilter /*
 		case astra::FILTER_SINOGRAM:
 		{
 			// make sure the offered filter has the correct size
-			assert(_iFilterWidth == iFreqBinCount);
+			assert(_cfg.m_iCustomFilterWidth == iFreqBinCount);
 
 			for(int iFreqBinIndex = 0; iFreqBinIndex < iFreqBinCount; iFreqBinIndex++)
 			{
 				for(int iProjectionIndex = 0; iProjectionIndex < (int)dims.iProjAngles; iProjectionIndex++)
 				{
-					float fValue = _pfHostFilter[iFreqBinIndex + iProjectionIndex * _iFilterWidth];
+					float fValue = _cfg.m_pfCustomFilter[iFreqBinIndex + iProjectionIndex * _cfg.m_iCustomFilterWidth];
 
 					pHostFilter[iFreqBinIndex + iProjectionIndex * iFreqBinCount].x = fValue;
 					pHostFilter[iFreqBinIndex + iProjectionIndex * iFreqBinCount].y = 0.0f;
@@ -178,16 +178,16 @@ bool FBP::setFilter(astra::E_FBPFILTER _eFilter, const float * _pfHostFilter /*
 			float * pfHostRealFilter = new float[iRealFilterElementCount];
 			memset(pfHostRealFilter, 0, sizeof(float) * iRealFilterElementCount);
 
-			int iUsedFilterWidth = min(_iFilterWidth, iFFTRealDetCount);
-			int iStartFilterIndex = (_iFilterWidth - iUsedFilterWidth) / 2;
+			int iUsedFilterWidth = min(_cfg.m_iCustomFilterWidth, iFFTRealDetCount);
+			int iStartFilterIndex = (_cfg.m_iCustomFilterWidth - iUsedFilterWidth) / 2;
 			int iMaxFilterIndex = iStartFilterIndex + iUsedFilterWidth;
 
-			int iFilterShiftSize = _iFilterWidth / 2;
+			int iFilterShiftSize = _cfg.m_iCustomFilterWidth / 2;
 
 			for(int iDetectorIndex = iStartFilterIndex; iDetectorIndex < iMaxFilterIndex; iDetectorIndex++)
 			{
 				int iFFTInFilterIndex = (iDetectorIndex + iFFTRealDetCount - iFilterShiftSize) % iFFTRealDetCount;
-				float fValue = _pfHostFilter[iDetectorIndex];
+				float fValue = _cfg.m_pfCustomFilter[iDetectorIndex];
 
 				for(int iProjectionIndex = 0; iProjectionIndex < (int)dims.iProjAngles; iProjectionIndex++)
 				{
@@ -213,11 +213,11 @@ bool FBP::setFilter(astra::E_FBPFILTER _eFilter, const float * _pfHostFilter /*
 			float* pfHostRealFilter = new float[iRealFilterElementCount];
 			memset(pfHostRealFilter, 0, sizeof(float) * iRealFilterElementCount);
 
-			int iUsedFilterWidth = min(_iFilterWidth, iFFTRealDetCount);
-			int iStartFilterIndex = (_iFilterWidth - iUsedFilterWidth) / 2;
+			int iUsedFilterWidth = min(_cfg.m_iCustomFilterWidth, iFFTRealDetCount);
+			int iStartFilterIndex = (_cfg.m_iCustomFilterWidth - iUsedFilterWidth) / 2;
 			int iMaxFilterIndex = iStartFilterIndex + iUsedFilterWidth;
 
-			int iFilterShiftSize = _iFilterWidth / 2;
+			int iFilterShiftSize = _cfg.m_iCustomFilterWidth / 2;
 
 			for(int iDetectorIndex = iStartFilterIndex; iDetectorIndex < iMaxFilterIndex; iDetectorIndex++)
 			{
@@ -225,7 +225,7 @@ bool FBP::setFilter(astra::E_FBPFILTER _eFilter, const float * _pfHostFilter /*
 
 				for(int iProjectionIndex = 0; iProjectionIndex < (int)dims.iProjAngles; iProjectionIndex++)
 				{
-					float fValue = _pfHostFilter[iDetectorIndex + iProjectionIndex * _iFilterWidth];
+					float fValue = _cfg.m_pfCustomFilter[iDetectorIndex + iProjectionIndex * _cfg.m_iCustomFilterWidth];
 					pfHostRealFilter[iFFTInFilterIndex + iProjectionIndex * iFFTRealDetCount] = fValue;
 				}
 			}
diff --git a/cuda/2d/fft.cu b/cuda/2d/fft.cu
index 4454746..864e325 100644
--- a/cuda/2d/fft.cu
+++ b/cuda/2d/fft.cu
@@ -300,13 +300,13 @@ void genIdenFilter(int _iProjectionCount, cufftComplex * _pFilter,
 	}
 }
 
-void genCuFFTFilter(E_FBPFILTER _eFilter, float _fD, int _iProjectionCount,
+void genCuFFTFilter(const SFilterConfig &_cfg, int _iProjectionCount,
                cufftComplex * _pFilter, int _iFFTRealDetectorCount,
-               int _iFFTFourierDetectorCount, float _fParameter /* = -1.0f */)
+               int _iFFTFourierDetectorCount)
 {
-	float * pfFilt = astra::genFilter(_eFilter, _fD, _iProjectionCount,
+	float * pfFilt = astra::genFilter(_cfg, _iProjectionCount,
 	                                  _iFFTRealDetectorCount,
-	                                  _iFFTFourierDetectorCount, _fParameter);
+	                                  _iFFTFourierDetectorCount);
 
 	for(int iDetectorIndex = 0; iDetectorIndex < _iFFTFourierDetectorCount; iDetectorIndex++)
 	{
-- 
cgit v1.2.3