summaryrefslogtreecommitdiffstats
path: root/cuda/3d
diff options
context:
space:
mode:
Diffstat (limited to 'cuda/3d')
-rw-r--r--cuda/3d/algo3d.cu12
-rw-r--r--cuda/3d/algo3d.h71
-rw-r--r--cuda/3d/arith3d.cu5
-rw-r--r--cuda/3d/arith3d.h79
-rw-r--r--cuda/3d/astra3d.cu25
-rw-r--r--cuda/3d/astra3d.h314
-rw-r--r--cuda/3d/cgls3d.cu10
-rw-r--r--cuda/3d/cgls3d.h112
-rw-r--r--cuda/3d/cone_bp.cu16
-rw-r--r--cuda/3d/cone_bp.h45
-rw-r--r--cuda/3d/cone_fp.cu14
-rw-r--r--cuda/3d/cone_fp.h45
-rw-r--r--cuda/3d/darthelper3d.cu7
-rw-r--r--cuda/3d/darthelper3d.h42
-rw-r--r--cuda/3d/dims3d.h77
-rw-r--r--cuda/3d/fdk.cu25
-rw-r--r--cuda/3d/fdk.h50
-rw-r--r--cuda/3d/mem3d.cu25
-rw-r--r--cuda/3d/mem3d.h105
-rw-r--r--cuda/3d/par3d_bp.cu16
-rw-r--r--cuda/3d/par3d_bp.h46
-rw-r--r--cuda/3d/par3d_fp.cu15
-rw-r--r--cuda/3d/par3d_fp.h50
-rw-r--r--cuda/3d/sirt3d.cu14
-rw-r--r--cuda/3d/sirt3d.h121
-rw-r--r--cuda/3d/util3d.cu10
-rw-r--r--cuda/3d/util3d.h68
27 files changed, 99 insertions, 1320 deletions
diff --git a/cuda/3d/algo3d.cu b/cuda/3d/algo3d.cu
index ee7a23b..b4a435b 100644
--- a/cuda/3d/algo3d.cu
+++ b/cuda/3d/algo3d.cu
@@ -25,13 +25,13 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
-#include <cassert>
+#include "astra/cuda/3d/algo3d.h"
+#include "astra/cuda/3d/cone_fp.h"
+#include "astra/cuda/3d/cone_bp.h"
+#include "astra/cuda/3d/par3d_fp.h"
+#include "astra/cuda/3d/par3d_bp.h"
-#include "algo3d.h"
-#include "cone_fp.h"
-#include "cone_bp.h"
-#include "par3d_fp.h"
-#include "par3d_bp.h"
+#include <cassert>
namespace astraCUDA3d {
diff --git a/cuda/3d/algo3d.h b/cuda/3d/algo3d.h
deleted file mode 100644
index f5fd207..0000000
--- a/cuda/3d/algo3d.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
------------------------------------------------------------------------
-Copyright: 2010-2018, imec Vision Lab, University of Antwerp
- 2014-2018, CWI, Amsterdam
-
-Contact: astra@astra-toolbox.com
-Website: http://www.astra-toolbox.com/
-
-This file is part of the ASTRA Toolbox.
-
-
-The ASTRA Toolbox is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-The ASTRA Toolbox is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-
------------------------------------------------------------------------
-*/
-
-#ifndef _CUDA_ALGO_H
-#define _CUDA_ALGO_H
-
-#include "dims3d.h"
-#include "util3d.h"
-
-namespace astraCUDA3d {
-
-class _AstraExport ReconAlgo3D {
-public:
- ReconAlgo3D();
- ~ReconAlgo3D();
-
- bool setConeGeometry(const SDimensions3D& dims, const SConeProjection* projs, const SProjectorParams3D& params);
- bool setPar3DGeometry(const SDimensions3D& dims, const SPar3DProjection* projs, const SProjectorParams3D& params);
-
- void signalAbort() { shouldAbort = true; }
-
-protected:
- void reset();
-
- bool callFP(cudaPitchedPtr& D_volumeData,
- cudaPitchedPtr& D_projData,
- float outputScale);
- bool callBP(cudaPitchedPtr& D_volumeData,
- cudaPitchedPtr& D_projData,
- float outputScale);
-
- SDimensions3D dims;
- SProjectorParams3D params;
- SConeProjection* coneProjs;
- SPar3DProjection* par3DProjs;
-
- float fOutputScale;
-
- volatile bool shouldAbort;
-
-};
-
-
-}
-
-#endif
-
diff --git a/cuda/3d/arith3d.cu b/cuda/3d/arith3d.cu
index 05b94ce..2f4054e 100644
--- a/cuda/3d/arith3d.cu
+++ b/cuda/3d/arith3d.cu
@@ -25,8 +25,9 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
-#include "util3d.h"
-#include "arith3d.h"
+#include "astra/cuda/3d/util3d.h"
+#include "astra/cuda/3d/arith3d.h"
+
#include <cassert>
namespace astraCUDA3d {
diff --git a/cuda/3d/arith3d.h b/cuda/3d/arith3d.h
deleted file mode 100644
index fa9f3a1..0000000
--- a/cuda/3d/arith3d.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
------------------------------------------------------------------------
-Copyright: 2010-2018, imec Vision Lab, University of Antwerp
- 2014-2018, CWI, Amsterdam
-
-Contact: astra@astra-toolbox.com
-Website: http://www.astra-toolbox.com/
-
-This file is part of the ASTRA Toolbox.
-
-
-The ASTRA Toolbox is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-The ASTRA Toolbox is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-
------------------------------------------------------------------------
-*/
-
-#ifndef _CUDA_ARITH3D_H
-#define _CUDA_ARITH3D_H
-
-#include <cuda.h>
-
-namespace astraCUDA3d {
-
-struct opAddScaled;
-struct opScaleAndAdd;
-struct opAddMulScaled;
-struct opAddMul;
-struct opAdd;
-struct opMul;
-struct opMul2;
-struct opDividedBy;
-struct opInvert;
-struct opSet;
-struct opClampMin;
-struct opClampMax;
-
-enum VolType {
- SINO = 0,
- VOL = 1
-};
-
-
-template<typename op, VolType t> void processVol(CUdeviceptr* out, unsigned int pitch, unsigned int width, unsigned int height);
-template<typename op, VolType t> void processVol(CUdeviceptr* out, float fParam, unsigned int pitch, unsigned int width, unsigned int height);
-template<typename op, VolType t> void processVol(CUdeviceptr* out, const CUdeviceptr* in, unsigned int pitch, unsigned int width, unsigned int height);
-template<typename op, VolType t> void processVol(CUdeviceptr* out, const CUdeviceptr* in, float fParam, unsigned int pitch, unsigned int width, unsigned int height);
-template<typename op, VolType t> void processVol(CUdeviceptr* out, const CUdeviceptr* in1, const CUdeviceptr* in2, float fParam, unsigned int pitch, unsigned int width, unsigned int height);
-template<typename op, VolType t> void processVol(CUdeviceptr* out, const CUdeviceptr* in1, const CUdeviceptr* in2, unsigned int pitch, unsigned int width, unsigned int height);
-
-template<typename op> void processVol3D(cudaPitchedPtr& out, const SDimensions3D& dims);
-template<typename op> void processVol3D(cudaPitchedPtr& out, float fParam, const SDimensions3D& dims);
-template<typename op> void processVol3D(cudaPitchedPtr& out, const cudaPitchedPtr& in, const SDimensions3D& dims);
-template<typename op> void processVol3D(cudaPitchedPtr& out, const cudaPitchedPtr& in, float fParam, const SDimensions3D& dims);
-template<typename op> void processVol3D(cudaPitchedPtr& out, const cudaPitchedPtr& in1, const cudaPitchedPtr& in2, float fParam, const SDimensions3D& dims);
-template<typename op> void processVol3D(cudaPitchedPtr& out, const cudaPitchedPtr& in1, const cudaPitchedPtr& in2, const SDimensions3D& dims);
-
-template<typename op> void processSino3D(cudaPitchedPtr& out, const SDimensions3D& dims);
-template<typename op> void processSino3D(cudaPitchedPtr& out, float fParam, const SDimensions3D& dims);
-template<typename op> void processSino3D(cudaPitchedPtr& out, const cudaPitchedPtr& in, const SDimensions3D& dims);
-template<typename op> void processSino3D(cudaPitchedPtr& out, const cudaPitchedPtr& in, float fParam, const SDimensions3D& dims);
-template<typename op> void processSino3D(cudaPitchedPtr& out, const cudaPitchedPtr& in1, const cudaPitchedPtr& in2, float fParam, const SDimensions3D& dims);
-template<typename op> void processSino3D(cudaPitchedPtr& out, const cudaPitchedPtr& in1, const cudaPitchedPtr& in2, const SDimensions3D& dims);
-
-
-
-}
-
-#endif
diff --git a/cuda/3d/astra3d.cu b/cuda/3d/astra3d.cu
index c0f4c4a..23af36a 100644
--- a/cuda/3d/astra3d.cu
+++ b/cuda/3d/astra3d.cu
@@ -25,19 +25,16 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
-#include <cstdio>
-#include <cassert>
-
-#include "cgls3d.h"
-#include "sirt3d.h"
-#include "util3d.h"
-#include "cone_fp.h"
-#include "cone_bp.h"
-#include "par3d_fp.h"
-#include "par3d_bp.h"
-#include "fdk.h"
-#include "arith3d.h"
-#include "astra3d.h"
+#include "astra/cuda/3d/cgls3d.h"
+#include "astra/cuda/3d/sirt3d.h"
+#include "astra/cuda/3d/util3d.h"
+#include "astra/cuda/3d/cone_fp.h"
+#include "astra/cuda/3d/cone_bp.h"
+#include "astra/cuda/3d/par3d_fp.h"
+#include "astra/cuda/3d/par3d_bp.h"
+#include "astra/cuda/3d/fdk.h"
+#include "astra/cuda/3d/arith3d.h"
+#include "astra/cuda/3d/astra3d.h"
#include "astra/ParallelProjectionGeometry3D.h"
#include "astra/ParallelVecProjectionGeometry3D.h"
@@ -46,6 +43,8 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
#include "astra/VolumeGeometry3D.h"
#include <iostream>
+#include <cstdio>
+#include <cassert>
using namespace astraCUDA3d;
diff --git a/cuda/3d/astra3d.h b/cuda/3d/astra3d.h
deleted file mode 100644
index 0ea752d..0000000
--- a/cuda/3d/astra3d.h
+++ /dev/null
@@ -1,314 +0,0 @@
-/*
------------------------------------------------------------------------
-Copyright: 2010-2018, imec Vision Lab, University of Antwerp
- 2014-2018, CWI, Amsterdam
-
-Contact: astra@astra-toolbox.com
-Website: http://www.astra-toolbox.com/
-
-This file is part of the ASTRA Toolbox.
-
-
-The ASTRA Toolbox is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-The ASTRA Toolbox is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-
------------------------------------------------------------------------
-*/
-
-#ifndef _CUDA_ASTRA3D_H
-#define _CUDA_ASTRA3D_H
-
-#include "dims3d.h"
-
-namespace astra {
-
-
-// TODO: Switch to a class hierarchy as with the 2D algorithms
-
-
-class CProjectionGeometry3D;
-class CParallelProjectionGeometry3D;
-class CParallelVecProjectionGeometry3D;
-class CConeProjectionGeometry3D;
-class CConeVecProjectionGeometry3D;
-class CVolumeGeometry3D;
-class AstraSIRT3d_internal;
-
-using astraCUDA3d::Cuda3DProjectionKernel;
-using astraCUDA3d::ker3d_default;
-using astraCUDA3d::ker3d_sum_square_weights;
-
-
-class _AstraExport AstraSIRT3d {
-public:
-
- AstraSIRT3d();
- ~AstraSIRT3d();
-
- // Set the volume and projection geometry
- bool setGeometry(const CVolumeGeometry3D* pVolGeom,
- const CProjectionGeometry3D* pProjGeom);
-
- // Enable supersampling.
- //
- // The number of rays used in FP is the square of iDetectorSuperSampling.
- // The number of rays used in BP is the cube of iVoxelSuperSampling.
- bool enableSuperSampling(unsigned int iVoxelSuperSampling,
- unsigned int iDetectorSuperSampling);
-
- void setRelaxation(float r);
-
- // Enable volume/sinogram masks
- //
- // This may optionally be called before init().
- // If it is called, setVolumeMask()/setSinogramMask() must be called between
- // setSinogram() and iterate().
- bool enableVolumeMask();
- bool enableSinogramMask();
-
- // Set GPU index
- //
- // This should be called before init(). Note that setting the GPU index
- // in a thread which has already used the GPU may not work.
- bool setGPUIndex(int index);
-
- // Allocate GPU buffers and
- // precompute geometry-specific data.
- //
- // This must be called after calling setReconstructionGeometry() and
- // setProjectionGeometry() or setFanProjectionGeometry().
- bool init();
-
- // Setup input sinogram for a slice.
- // pfSinogram must be a float array of size XXX
- // NB: iSinogramPitch is measured in floats, not in bytes.
- //
- // This must be called after init(), and before iterate(). It may be
- // called again after iterate()/getReconstruction() to start a new slice.
- //
- // pfSinogram will only be read from during this call.
- bool setSinogram(const float* pfSinogram, unsigned int iSinogramPitch);
-
- // Setup volume mask for a slice.
- // pfMask must be a float array of size XXX
- // NB: iMaskPitch is measured in floats, not in bytes.
- //
- // It may only contain the exact values 0.0f and 1.0f. Only volume pixels
- // for which pfMask[z] is 1.0f are processed.
- bool setVolumeMask(const float* pfMask, unsigned int iMaskPitch);
-
- // Setup sinogram mask for a slice.
- // pfMask must be a float array of size XXX
- // NB: iMaskPitch is measured in floats, not in bytes.
- //
- // It may only contain the exact values 0.0f and 1.0f. Only sinogram pixels
- // for which pfMask[z] is 1.0f are processed.
- bool setSinogramMask(const float* pfMask, unsigned int iMaskPitch);
-
- // Set the starting reconstruction for SIRT.
- // pfReconstruction must be a float array of size XXX
- // NB: iReconstructionPitch is measured in floats, not in bytes.
- //
- // This may be called between setSinogram() and iterate().
- // If this function is not called before iterate(), SIRT will start
- // from a zero reconstruction.
- //
- // pfReconstruction will only be read from during this call.
- bool setStartReconstruction(const float* pfReconstruction,
- unsigned int iReconstructionPitch);
-
- // Enable min/max constraint.
- //
- // These may optionally be called between init() and iterate()
- bool setMinConstraint(float fMin);
- bool setMaxConstraint(float fMax);
-
- // Perform a number of (additive) SIRT iterations.
- // This must be called after setSinogram().
- //
- // If called multiple times, without calls to setSinogram() or
- // setStartReconstruction() in between, iterate() will continue from
- // the result of the previous call.
- // Calls to getReconstruction() are allowed between calls to iterate() and
- // do not change the state.
- bool iterate(unsigned int iIterations);
-
- // Get the reconstructed slice.
- // pfReconstruction must be a float array of size XXX
- // NB: iReconstructionPitch is measured in floats, not in bytes.
- //
- // This may be called after iterate().
- bool getReconstruction(float* pfReconstruction,
- unsigned int iReconstructionPitch) const;
-
- // Compute the norm of the difference of the FP of the current
- // reconstruction and the sinogram. (This performs one FP.)
- // It can be called after iterate().
- float computeDiffNorm();
-
- // Signal the algorithm that it should abort after the current iteration.
- // This is intended to be called from another thread.
- void signalAbort();
-
-protected:
- AstraSIRT3d_internal *pData;
-};
-
-
-class AstraCGLS3d_internal;
-
-
-class _AstraExport AstraCGLS3d {
-public:
-
- AstraCGLS3d();
- ~AstraCGLS3d();
-
- // Set the volume and projection geometry
- bool setGeometry(const CVolumeGeometry3D* pVolGeom,
- const CProjectionGeometry3D* pProjGeom);
-
- // Enable supersampling.
- //
- // The number of rays used in FP is the square of iDetectorSuperSampling.
- // The number of rays used in BP is the cube of iVoxelSuperSampling.
- bool enableSuperSampling(unsigned int iVoxelSuperSampling,
- unsigned int iDetectorSuperSampling);
-
- // Enable volume/sinogram masks
- //
- // This may optionally be called before init().
- // If it is called, setVolumeMask()/setSinogramMask() must be called between
- // setSinogram() and iterate().
- bool enableVolumeMask();
- //bool enableSinogramMask();
-
- // Set GPU index
- //
- // This should be called before init(). Note that setting the GPU index
- // in a thread which has already used the GPU may not work.
- bool setGPUIndex(int index);
-
- // Allocate GPU buffers and
- // precompute geometry-specific data.
- //
- // This must be called after calling setReconstructionGeometry() and
- // setProjectionGeometry() or setFanProjectionGeometry().
- bool init();
-
- // Setup input sinogram for a slice.
- // pfSinogram must be a float array of size XXX
- // NB: iSinogramPitch is measured in floats, not in bytes.
- //
- // This must be called after init(), and before iterate(). It may be
- // called again after iterate()/getReconstruction() to start a new slice.
- //
- // pfSinogram will only be read from during this call.
- bool setSinogram(const float* pfSinogram, unsigned int iSinogramPitch);
-
- // Setup volume mask for a slice.
- // pfMask must be a float array of size XXX
- // NB: iMaskPitch is measured in floats, not in bytes.
- //
- // It may only contain the exact values 0.0f and 1.0f. Only volume pixels
- // for which pfMask[z] is 1.0f are processed.
- bool setVolumeMask(const float* pfMask, unsigned int iMaskPitch);
-
- // Setup sinogram mask for a slice.
- // pfMask must be a float array of size XXX
- // NB: iMaskPitch is measured in floats, not in bytes.
- //
- // It may only contain the exact values 0.0f and 1.0f. Only sinogram pixels
- // for which pfMask[z] is 1.0f are processed.
- //bool setSinogramMask(const float* pfMask, unsigned int iMaskPitch);
-
- // Set the starting reconstruction for SIRT.
- // pfReconstruction must be a float array of size XXX
- // NB: iReconstructionPitch is measured in floats, not in bytes.
- //
- // This may be called between setSinogram() and iterate().
- // If this function is not called before iterate(), SIRT will start
- // from a zero reconstruction.
- //
- // pfReconstruction will only be read from during this call.
- bool setStartReconstruction(const float* pfReconstruction,
- unsigned int iReconstructionPitch);
-
- // Enable min/max constraint.
- //
- // These may optionally be called between init() and iterate()
- //bool setMinConstraint(float fMin);
- //bool setMaxConstraint(float fMax);
-
- // Perform a number of (additive) SIRT iterations.
- // This must be called after setSinogram().
- //
- // If called multiple times, without calls to setSinogram() or
- // setStartReconstruction() in between, iterate() will continue from
- // the result of the previous call.
- // Calls to getReconstruction() are allowed between calls to iterate() and
- // do not change the state.
- bool iterate(unsigned int iIterations);
-
- // Get the reconstructed slice.
- // pfReconstruction must be a float array of size XXX
- // NB: iReconstructionPitch is measured in floats, not in bytes.
- //
- // This may be called after iterate().
- bool getReconstruction(float* pfReconstruction,
- unsigned int iReconstructionPitch) const;
-
- // Compute the norm of the difference of the FP of the current
- // reconstruction and the sinogram. (This performs one FP.)
- // It can be called after iterate().
- float computeDiffNorm();
-
- // Signal the algorithm that it should abort after the current iteration.
- // This is intended to be called from another thread.
- void signalAbort();
-
-protected:
- AstraCGLS3d_internal *pData;
-};
-
-bool convertAstraGeometry_dims(const CVolumeGeometry3D* pVolGeom,
- const CProjectionGeometry3D* pProjGeom,
- astraCUDA3d::SDimensions3D& dims);
-
-bool convertAstraGeometry(const CVolumeGeometry3D* pVolGeom,
- const CProjectionGeometry3D* pProjGeom,
- SPar3DProjection*& pParProjs,
- SConeProjection*& pConeProjs,
- astraCUDA3d::SProjectorParams3D& params);
-
-_AstraExport bool astraCudaFP(const float* pfVolume, float* pfProjections,
- const CVolumeGeometry3D* pVolGeom,
- const CProjectionGeometry3D* pProjGeom,
- int iGPUIndex, int iDetectorSuperSampling,
- Cuda3DProjectionKernel projKernel);
-
-
-_AstraExport bool astraCudaBP(float* pfVolume, const float* pfProjections,
- const CVolumeGeometry3D* pVolGeom,
- const CProjectionGeometry3D* pProjGeom,
- int iGPUIndex, int iVoxelSuperSampling);
-
-_AstraExport bool astraCudaBP_SIRTWeighted(float* pfVolume, const float* pfProjections,
- const CVolumeGeometry3D* pVolGeom,
- const CProjectionGeometry3D* pProjGeom,
- int iGPUIndex, int iVoxelSuperSampling);
-
-}
-
-
-#endif
diff --git a/cuda/3d/cgls3d.cu b/cuda/3d/cgls3d.cu
index 7e31749..0df10f0 100644
--- a/cuda/3d/cgls3d.cu
+++ b/cuda/3d/cgls3d.cu
@@ -25,14 +25,14 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
+#include "astra/cuda/3d/cgls3d.h"
+#include "astra/cuda/3d/util3d.h"
+#include "astra/cuda/3d/arith3d.h"
+#include "astra/cuda/3d/cone_fp.h"
+
#include <cstdio>
#include <cassert>
-#include "cgls3d.h"
-#include "util3d.h"
-#include "arith3d.h"
-#include "cone_fp.h"
-
#ifdef STANDALONE
#include "testutil.h"
#endif
diff --git a/cuda/3d/cgls3d.h b/cuda/3d/cgls3d.h
deleted file mode 100644
index b9b9e3a..0000000
--- a/cuda/3d/cgls3d.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
------------------------------------------------------------------------
-Copyright: 2010-2018, imec Vision Lab, University of Antwerp
- 2014-2018, CWI, Amsterdam
-
-Contact: astra@astra-toolbox.com
-Website: http://www.astra-toolbox.com/
-
-This file is part of the ASTRA Toolbox.
-
-
-The ASTRA Toolbox is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-The ASTRA Toolbox is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-
------------------------------------------------------------------------
-*/
-
-#ifndef _CUDA_CGLS3D_H
-#define _CUDA_CGLS3D_H
-
-#include "algo3d.h"
-
-namespace astraCUDA3d {
-
-class _AstraExport CGLS : public ReconAlgo3D {
-public:
- CGLS();
- ~CGLS();
-
-// bool setConeGeometry(const SDimensions3D& dims, const SConeProjection* projs);
-
-
- bool enableVolumeMask();
- bool enableSinogramMask();
-
- // init should be called after setting all geometry
- bool init();
-
- // setVolumeMask should be called after init and before iterate,
- // but only if enableVolumeMask was called before init.
- // It may be called again after iterate.
- bool setVolumeMask(cudaPitchedPtr& D_maskData);
-
- // setSinogramMask should be called after init and before iterate,
- // but only if enableSinogramMask was called before init.
- // It may be called again after iterate.
- bool setSinogramMask(cudaPitchedPtr& D_smaskData);
-
-
- // setBuffers should be called after init and before iterate.
- // It may be called again after iterate.
- bool setBuffers(cudaPitchedPtr& D_volumeData,
- cudaPitchedPtr& D_projData);
-
-
- // set Min/Max constraints. They may be called at any time, and will affect
- // any iterate() calls afterwards.
- bool setMinConstraint(float fMin) { return false; }
- bool setMaxConstraint(float fMax) { return false; }
-
- // iterate should be called after init and setBuffers.
- // It may be called multiple times.
- bool iterate(unsigned int iterations);
-
- // Compute the norm of the difference of the FP of the current reconstruction
- // and the sinogram. (This performs one FP.)
- // It can be called after iterate.
- float computeDiffNorm();
-
-protected:
- void reset();
-
- bool useVolumeMask;
- bool useSinogramMask;
-
- cudaPitchedPtr D_maskData;
- cudaPitchedPtr D_smaskData;
-
- // Input/output
- cudaPitchedPtr D_sinoData;
- cudaPitchedPtr D_volumeData;
-
- // Temporary buffers
- cudaPitchedPtr D_r;
- cudaPitchedPtr D_w;
- cudaPitchedPtr D_z;
- cudaPitchedPtr D_p;
-
- float gamma;
-
- bool sliceInitialized;
-};
-
-_AstraExport bool doCGLS(cudaPitchedPtr D_volumeData, unsigned int volumePitch,
- cudaPitchedPtr D_projData, unsigned int projPitch,
- cudaPitchedPtr D_maskData, unsigned int maskPitch,
- const SDimensions3D& dims, const SConeProjection* projs,
- unsigned int iterations);
-
-}
-
-#endif
diff --git a/cuda/3d/cone_bp.cu b/cuda/3d/cone_bp.cu
index 2d12d00..feebda2 100644
--- a/cuda/3d/cone_bp.cu
+++ b/cuda/3d/cone_bp.cu
@@ -25,20 +25,20 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
+#include "astra/cuda/3d/util3d.h"
+#include "astra/cuda/3d/dims3d.h"
+
+#ifdef STANDALONE
+#include "astra/cuda/3d/cone_fp.h"
+#include "testutil.h"
+#endif
+
#include <cstdio>
#include <cassert>
#include <iostream>
#include <list>
#include <cuda.h>
-#include "util3d.h"
-
-#ifdef STANDALONE
-#include "cone_fp.h"
-#include "testutil.h"
-#endif
-
-#include "dims3d.h"
typedef texture<float, 3, cudaReadModeElementType> texture3D;
diff --git a/cuda/3d/cone_bp.h b/cuda/3d/cone_bp.h
deleted file mode 100644
index 6dcadb1..0000000
--- a/cuda/3d/cone_bp.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
------------------------------------------------------------------------
-Copyright: 2010-2018, imec Vision Lab, University of Antwerp
- 2014-2018, CWI, Amsterdam
-
-Contact: astra@astra-toolbox.com
-Website: http://www.astra-toolbox.com/
-
-This file is part of the ASTRA Toolbox.
-
-
-The ASTRA Toolbox is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-The ASTRA Toolbox is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-
------------------------------------------------------------------------
-*/
-
-#ifndef _CUDA_CONE_BP_H
-#define _CUDA_CONE_BP_H
-
-namespace astraCUDA3d {
-
-_AstraExport bool ConeBP_Array(cudaPitchedPtr D_volumeData,
- cudaArray *D_projArray,
- const SDimensions3D& dims, const SConeProjection* angles,
- const SProjectorParams3D& params);
-
-_AstraExport bool ConeBP(cudaPitchedPtr D_volumeData,
- cudaPitchedPtr D_projData,
- const SDimensions3D& dims, const SConeProjection* angles,
- const SProjectorParams3D& params);
-
-}
-
-#endif
diff --git a/cuda/3d/cone_fp.cu b/cuda/3d/cone_fp.cu
index 21598d0..7e0fae8 100644
--- a/cuda/3d/cone_fp.cu
+++ b/cuda/3d/cone_fp.cu
@@ -25,19 +25,19 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
+#include "astra/cuda/3d/util3d.h"
+#include "astra/cuda/3d/dims3d.h"
+
+#ifdef STANDALONE
+#include "testutil.h"
+#endif
+
#include <cstdio>
#include <cassert>
#include <iostream>
#include <list>
#include <cuda.h>
-#include "util3d.h"
-
-#ifdef STANDALONE
-#include "testutil.h"
-#endif
-
-#include "dims3d.h"
typedef texture<float, 3, cudaReadModeElementType> texture3D;
diff --git a/cuda/3d/cone_fp.h b/cuda/3d/cone_fp.h
deleted file mode 100644
index 4da72d4..0000000
--- a/cuda/3d/cone_fp.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
------------------------------------------------------------------------
-Copyright: 2010-2018, imec Vision Lab, University of Antwerp
- 2014-2018, CWI, Amsterdam
-
-Contact: astra@astra-toolbox.com
-Website: http://www.astra-toolbox.com/
-
-This file is part of the ASTRA Toolbox.
-
-
-The ASTRA Toolbox is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-The ASTRA Toolbox is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-
------------------------------------------------------------------------
-*/
-
-#ifndef _CUDA_CONE_FP_H
-#define _CUDA_CONE_FP_H
-
-namespace astraCUDA3d {
-
-_AstraExport bool ConeFP_Array(cudaArray *D_volArray,
- cudaPitchedPtr D_projData,
- const SDimensions3D& dims, const SConeProjection* angles,
- const SProjectorParams3D& params);
-
-_AstraExport bool ConeFP(cudaPitchedPtr D_volumeData,
- cudaPitchedPtr D_projData,
- const SDimensions3D& dims, const SConeProjection* angles,
- const SProjectorParams3D& params);
-
-}
-
-#endif
diff --git a/cuda/3d/darthelper3d.cu b/cuda/3d/darthelper3d.cu
index 473199a..d8ccfa6 100644
--- a/cuda/3d/darthelper3d.cu
+++ b/cuda/3d/darthelper3d.cu
@@ -25,9 +25,10 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
-#include "util3d.h"
-#include "dims3d.h"
-#include "darthelper3d.h"
+#include "astra/cuda/3d/util3d.h"
+#include "astra/cuda/3d/dims3d.h"
+#include "astra/cuda/3d/darthelper3d.h"
+
#include <cassert>
namespace astraCUDA3d {
diff --git a/cuda/3d/darthelper3d.h b/cuda/3d/darthelper3d.h
deleted file mode 100644
index 385e48e..0000000
--- a/cuda/3d/darthelper3d.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
------------------------------------------------------------------------
-Copyright: 2010-2018, imec Vision Lab, University of Antwerp
- 2014-2018, CWI, Amsterdam
-
-Contact: astra@astra-toolbox.com
-Website: http://www.astra-toolbox.com/
-
-This file is part of the ASTRA Toolbox.
-
-
-The ASTRA Toolbox is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-The ASTRA Toolbox is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-
------------------------------------------------------------------------
-*/
-
-#ifndef _CUDA_DARTHELPER3_H
-#define _CUDA_DARTHELPER3_H
-
-#include "dims3d.h"
-
-namespace astraCUDA3d {
-
- void dartSmoothing(float* out, const float* in, float b, unsigned int radius, SDimensions3D dims);
- void dartMasking(float* out, const float* in, unsigned int conn, unsigned int radius, unsigned int threshold, SDimensions3D dims);
-
- bool setGPUIndex(int index);
-
-}
-
-#endif
diff --git a/cuda/3d/dims3d.h b/cuda/3d/dims3d.h
deleted file mode 100644
index ef4ea78..0000000
--- a/cuda/3d/dims3d.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
------------------------------------------------------------------------
-Copyright: 2010-2018, imec Vision Lab, University of Antwerp
- 2014-2018, CWI, Amsterdam
-
-Contact: astra@astra-toolbox.com
-Website: http://www.astra-toolbox.com/
-
-This file is part of the ASTRA Toolbox.
-
-
-The ASTRA Toolbox is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-The ASTRA Toolbox is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-
------------------------------------------------------------------------
-*/
-
-#ifndef _CUDA_CONE_DIMS_H
-#define _CUDA_CONE_DIMS_H
-
-#include "astra/GeometryUtil3D.h"
-
-
-namespace astraCUDA3d {
-
-using astra::SConeProjection;
-using astra::SPar3DProjection;
-
-
-enum Cuda3DProjectionKernel {
- ker3d_default = 0,
- ker3d_sum_square_weights
-};
-
-
-struct SDimensions3D {
- unsigned int iVolX;
- unsigned int iVolY;
- unsigned int iVolZ;
- unsigned int iProjAngles;
- unsigned int iProjU; // number of detectors in the U direction
- unsigned int iProjV; // number of detectors in the V direction
-};
-
-struct SProjectorParams3D {
- SProjectorParams3D() :
- iRaysPerDetDim(1), iRaysPerVoxelDim(1),
- fOutputScale(1.0f),
- fVolScaleX(1.0f), fVolScaleY(1.0f), fVolScaleZ(1.0f),
- ker(ker3d_default),
- bFDKWeighting(false)
- { }
-
- unsigned int iRaysPerDetDim;
- unsigned int iRaysPerVoxelDim;
- float fOutputScale;
- float fVolScaleX;
- float fVolScaleY;
- float fVolScaleZ;
- Cuda3DProjectionKernel ker;
- bool bFDKWeighting;
-};
-
-}
-
-#endif
-
diff --git a/cuda/3d/fdk.cu b/cuda/3d/fdk.cu
index 48194c4..8aea84d 100644
--- a/cuda/3d/fdk.cu
+++ b/cuda/3d/fdk.cu
@@ -25,25 +25,26 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
-#include <cstdio>
-#include <cassert>
-#include <iostream>
-#include <list>
+#include "astra/cuda/3d/util3d.h"
+#include "astra/cuda/3d/dims3d.h"
+#include "astra/cuda/3d/arith3d.h"
+#include "astra/cuda/3d/cone_bp.h"
-#include <cuda.h>
-#include "util3d.h"
+#include "astra/cuda/2d/fft.h"
#ifdef STANDALONE
-#include "cone_fp.h"
+#include "astra/cuda/3d/cone_fp.h"
#include "testutil.h"
#endif
-#include "dims3d.h"
-#include "arith3d.h"
-#include "cone_bp.h"
-#include "../2d/fft.h"
+#include "astra/Logging.h"
-#include "../../include/astra/Logging.h"
+#include <cstdio>
+#include <cassert>
+#include <iostream>
+#include <list>
+
+#include <cuda.h>
namespace astraCUDA3d {
diff --git a/cuda/3d/fdk.h b/cuda/3d/fdk.h
deleted file mode 100644
index 6f6e73b..0000000
--- a/cuda/3d/fdk.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
------------------------------------------------------------------------
-Copyright: 2010-2018, imec Vision Lab, University of Antwerp
- 2014-2018, CWI, Amsterdam
-
-Contact: astra@astra-toolbox.com
-Website: http://www.astra-toolbox.com/
-
-This file is part of the ASTRA Toolbox.
-
-
-The ASTRA Toolbox is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-The ASTRA Toolbox is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-
------------------------------------------------------------------------
-*/
-
-#ifndef _CUDA_FDK_H
-#define _CUDA_FDK_H
-
-#include "dims3d.h"
-
-namespace astraCUDA3d {
-
-bool FDK_PreWeight(cudaPitchedPtr D_projData,
- float fSrcOrigin, float fDetOrigin,
- float fZShift,
- float fDetUSize, float fDetVSize, float fVoxSize,
- bool bShortScan,
- const SDimensions3D& dims, const float* angles);
-
-bool FDK(cudaPitchedPtr D_volumeData,
- cudaPitchedPtr D_projData,
- const SConeProjection* angles,
- const SDimensions3D& dims, SProjectorParams3D params, bool bShortScan,
- const float* filter);
-
-}
-
-#endif
diff --git a/cuda/3d/mem3d.cu b/cuda/3d/mem3d.cu
index 4a26921..fe3e723 100644
--- a/cuda/3d/mem3d.cu
+++ b/cuda/3d/mem3d.cu
@@ -25,23 +25,22 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
-#include <cstdio>
-#include <cassert>
+#include "astra/cuda/3d/util3d.h"
+#include "astra/cuda/3d/mem3d.h"
+#include "astra/cuda/3d/astra3d.h"
+#include "astra/cuda/3d/cone_fp.h"
+#include "astra/cuda/3d/cone_bp.h"
+#include "astra/cuda/3d/par3d_fp.h"
+#include "astra/cuda/3d/par3d_bp.h"
+#include "astra/cuda/3d/fdk.h"
-#include "util3d.h"
+#include "astra/cuda/2d/astra.h"
-#include "mem3d.h"
-
-#include "../2d/astra.h"
+#include "astra/Logging.h"
-#include "astra3d.h"
-#include "cone_fp.h"
-#include "cone_bp.h"
-#include "par3d_fp.h"
-#include "par3d_bp.h"
-#include "fdk.h"
+#include <cstdio>
+#include <cassert>
-#include "astra/Logging.h"
namespace astraCUDA3d {
diff --git a/cuda/3d/mem3d.h b/cuda/3d/mem3d.h
deleted file mode 100644
index 78e1294..0000000
--- a/cuda/3d/mem3d.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
------------------------------------------------------------------------
-Copyright: 2010-2018, imec Vision Lab, University of Antwerp
- 2014-2018, CWI, Amsterdam
-
-Contact: astra@astra-toolbox.com
-Website: http://www.astra-toolbox.com/
-
-This file is part of the ASTRA Toolbox.
-
-
-The ASTRA Toolbox is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-The ASTRA Toolbox is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-
------------------------------------------------------------------------
-*/
-
-#ifndef _CUDA_MEM3D_H
-#define _CUDA_MEM3D_H
-
-#include <boost/shared_ptr.hpp>
-
-#include "astra3d.h"
-
-namespace astra {
-class CVolumeGeometry3D;
-class CProjectionGeometry3D;
-}
-
-namespace astraCUDA3d {
-
-// TODO: Make it possible to delete these handles when they're no longer
-// necessary inside the FP/BP
-//
-// TODO: Add functions for querying capacity
-
-struct SMemHandle3D_internal;
-
-struct MemHandle3D {
- boost::shared_ptr<SMemHandle3D_internal> d;
- operator bool() const { return (bool)d; }
-};
-
-struct SSubDimensions3D {
- unsigned int nx;
- unsigned int ny;
- unsigned int nz;
- unsigned int pitch;
- unsigned int subnx;
- unsigned int subny;
- unsigned int subnz;
- unsigned int subx;
- unsigned int suby;
- unsigned int subz;
-};
-
-/*
-// Useful or not?
-enum Mem3DCopyMode {
- MODE_SET,
- MODE_ADD
-};
-*/
-
-enum Mem3DZeroMode {
- INIT_NO,
- INIT_ZERO
-};
-
-int maxBlockDimension();
-
-_AstraExport MemHandle3D wrapHandle(float *D_ptr, unsigned int x, unsigned int y, unsigned int z, unsigned int pitch);
-
-MemHandle3D allocateGPUMemory(unsigned int x, unsigned int y, unsigned int z, Mem3DZeroMode zero);
-
-bool copyToGPUMemory(const float *src, MemHandle3D dst, const SSubDimensions3D &pos);
-
-bool copyFromGPUMemory(float *dst, MemHandle3D src, const SSubDimensions3D &pos);
-
-bool freeGPUMemory(MemHandle3D handle);
-
-bool zeroGPUMemory(MemHandle3D handle, unsigned int x, unsigned int y, unsigned int z);
-
-bool setGPUIndex(int index);
-
-
-bool FP(const astra::CProjectionGeometry3D* pProjGeom, MemHandle3D projData, const astra::CVolumeGeometry3D* pVolGeom, MemHandle3D volData, int iDetectorSuperSampling, astra::Cuda3DProjectionKernel projKernel);
-
-bool BP(const astra::CProjectionGeometry3D* pProjGeom, MemHandle3D projData, const astra::CVolumeGeometry3D* pVolGeom, MemHandle3D volData, int iVoxelSuperSampling, bool bFDKWeighting);
-
-bool FDK(const astra::CProjectionGeometry3D* pProjGeom, MemHandle3D projData, const astra::CVolumeGeometry3D* pVolGeom, MemHandle3D volData, bool bShortScan, const float *pfFilter = 0);
-
-}
-
-#endif
diff --git a/cuda/3d/par3d_bp.cu b/cuda/3d/par3d_bp.cu
index 6f76d22..3656f78 100644
--- a/cuda/3d/par3d_bp.cu
+++ b/cuda/3d/par3d_bp.cu
@@ -25,20 +25,20 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
+#include "astra/cuda/3d/util3d.h"
+#include "astra/cuda/3d/dims3d.h"
+
+#ifdef STANDALONE
+#include "astra/cuda/3d/par3d_fp.h"
+#include "testutil.h"
+#endif
+
#include <cstdio>
#include <cassert>
#include <iostream>
#include <list>
#include <cuda.h>
-#include "util3d.h"
-
-#ifdef STANDALONE
-#include "par3d_fp.h"
-#include "testutil.h"
-#endif
-
-#include "dims3d.h"
typedef texture<float, 3, cudaReadModeElementType> texture3D;
diff --git a/cuda/3d/par3d_bp.h b/cuda/3d/par3d_bp.h
deleted file mode 100644
index b4ec6a3..0000000
--- a/cuda/3d/par3d_bp.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
------------------------------------------------------------------------
-Copyright: 2010-2018, imec Vision Lab, University of Antwerp
- 2014-2018, CWI, Amsterdam
-
-Contact: astra@astra-toolbox.com
-Website: http://www.astra-toolbox.com/
-
-This file is part of the ASTRA Toolbox.
-
-
-The ASTRA Toolbox is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-The ASTRA Toolbox is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-
------------------------------------------------------------------------
-*/
-
-#ifndef _CUDA_PAR3D_BP_H
-#define _CUDA_PAR3D_BP_H
-
-namespace astraCUDA3d {
-
-_AstraExport bool Par3DBP_Array(cudaPitchedPtr D_volumeData,
- cudaArray *D_projArray,
- const SDimensions3D& dims, const SPar3DProjection* angles,
- const SProjectorParams3D& params);
-
-_AstraExport bool Par3DBP(cudaPitchedPtr D_volumeData,
- cudaPitchedPtr D_projData,
- const SDimensions3D& dims, const SPar3DProjection* angles,
- const SProjectorParams3D& params);
-
-
-}
-
-#endif
diff --git a/cuda/3d/par3d_fp.cu b/cuda/3d/par3d_fp.cu
index 8e2a2d0..515b1ba 100644
--- a/cuda/3d/par3d_fp.cu
+++ b/cuda/3d/par3d_fp.cu
@@ -25,19 +25,20 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
+#include "astra/cuda/3d/util3d.h"
+#include "astra/cuda/3d/dims3d.h"
+
+#ifdef STANDALONE
+#include "testutil.h"
+#endif
+
+
#include <cstdio>
#include <cassert>
#include <iostream>
#include <list>
#include <cuda.h>
-#include "util3d.h"
-
-#ifdef STANDALONE
-#include "testutil.h"
-#endif
-
-#include "dims3d.h"
typedef texture<float, 3, cudaReadModeElementType> texture3D;
diff --git a/cuda/3d/par3d_fp.h b/cuda/3d/par3d_fp.h
deleted file mode 100644
index 18f5f2e..0000000
--- a/cuda/3d/par3d_fp.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
------------------------------------------------------------------------
-Copyright: 2010-2018, imec Vision Lab, University of Antwerp
- 2014-2018, CWI, Amsterdam
-
-Contact: astra@astra-toolbox.com
-Website: http://www.astra-toolbox.com/
-
-This file is part of the ASTRA Toolbox.
-
-
-The ASTRA Toolbox is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-The ASTRA Toolbox is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-
------------------------------------------------------------------------
-*/
-
-#ifndef _CUDA_PAR3D_FP_H
-#define _CUDA_PAR3D_FP_H
-
-namespace astraCUDA3d {
-
-_AstraExport bool Par3DFP_Array(cudaArray *D_volArray,
- cudaPitchedPtr D_projData,
- const SDimensions3D& dims, const SPar3DProjection* angles,
- const SProjectorParams3D& params);
-
-_AstraExport bool Par3DFP(cudaPitchedPtr D_volumeData,
- cudaPitchedPtr D_projData,
- const SDimensions3D& dims, const SPar3DProjection* angles,
- const SProjectorParams3D& params);
-
-_AstraExport bool Par3DFP_SumSqW(cudaPitchedPtr D_volumeData,
- cudaPitchedPtr D_projData,
- const SDimensions3D& dims, const SPar3DProjection* angles,
- const SProjectorParams3D& params);
-
-}
-
-#endif
diff --git a/cuda/3d/sirt3d.cu b/cuda/3d/sirt3d.cu
index 14f5768..332589e 100644
--- a/cuda/3d/sirt3d.cu
+++ b/cuda/3d/sirt3d.cu
@@ -25,18 +25,18 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
-#include <cstdio>
-#include <cassert>
-
-#include "sirt3d.h"
-#include "util3d.h"
-#include "arith3d.h"
-#include "cone_fp.h"
+#include "astra/cuda/3d/sirt3d.h"
+#include "astra/cuda/3d/util3d.h"
+#include "astra/cuda/3d/arith3d.h"
+#include "astra/cuda/3d/cone_fp.h"
#ifdef STANDALONE
#include "testutil.h"
#endif
+#include <cstdio>
+#include <cassert>
+
namespace astraCUDA3d {
SIRT::SIRT() : ReconAlgo3D()
diff --git a/cuda/3d/sirt3d.h b/cuda/3d/sirt3d.h
deleted file mode 100644
index 7c9a7c0..0000000
--- a/cuda/3d/sirt3d.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
------------------------------------------------------------------------
-Copyright: 2010-2018, imec Vision Lab, University of Antwerp
- 2014-2018, CWI, Amsterdam
-
-Contact: astra@astra-toolbox.com
-Website: http://www.astra-toolbox.com/
-
-This file is part of the ASTRA Toolbox.
-
-
-The ASTRA Toolbox is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-The ASTRA Toolbox is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-
------------------------------------------------------------------------
-*/
-
-#ifndef _CUDA_SIRT3D_H
-#define _CUDA_SIRT3D_H
-
-#include "algo3d.h"
-
-namespace astraCUDA3d {
-
-class _AstraExport SIRT : public ReconAlgo3D {
-public:
- SIRT();
- ~SIRT();
-
-// bool setConeGeometry(const SDimensions3D& dims, const SConeProjection* projs);
-
-
- bool enableVolumeMask();
- bool enableSinogramMask();
-
- // init should be called after setting all geometry
- bool init();
-
- // Set relaxation factor. This may be called after init and before iterate.
- void setRelaxation(float r) { fRelaxation = r; }
-
- // setVolumeMask should be called after init and before iterate,
- // but only if enableVolumeMask was called before init.
- // It may be called again after iterate.
- bool setVolumeMask(cudaPitchedPtr& D_maskData);
-
- // setSinogramMask should be called after init and before iterate,
- // but only if enableSinogramMask was called before init.
- // It may be called again after iterate.
- bool setSinogramMask(cudaPitchedPtr& D_smaskData);
-
-
- // setBuffers should be called after init and before iterate.
- // It may be called again after iterate.
- bool setBuffers(cudaPitchedPtr& D_volumeData,
- cudaPitchedPtr& D_projData);
-
-
- // set Min/Max constraints. They may be called at any time, and will affect
- // any iterate() calls afterwards.
- bool setMinConstraint(float fMin);
- bool setMaxConstraint(float fMax);
-
- // iterate should be called after init and setBuffers.
- // It may be called multiple times.
- bool iterate(unsigned int iterations);
-
- // Compute the norm of the difference of the FP of the current reconstruction
- // and the sinogram. (This performs one FP.)
- // It can be called after iterate.
- float computeDiffNorm();
-
-protected:
- void reset();
- bool precomputeWeights();
-
- bool useVolumeMask;
- bool useSinogramMask;
-
- bool useMinConstraint;
- bool useMaxConstraint;
- float fMinConstraint;
- float fMaxConstraint;
-
- float fRelaxation;
-
- cudaPitchedPtr D_maskData;
- cudaPitchedPtr D_smaskData;
-
- // Input/output
- cudaPitchedPtr D_sinoData;
- cudaPitchedPtr D_volumeData;
-
- // Temporary buffers
- cudaPitchedPtr D_projData;
- cudaPitchedPtr D_tmpData;
-
- // Geometry-specific precomputed data
- cudaPitchedPtr D_lineWeight;
- cudaPitchedPtr D_pixelWeight;
-};
-
-bool doSIRT(cudaPitchedPtr D_volumeData, unsigned int volumePitch,
- cudaPitchedPtr D_projData, unsigned int projPitch,
- cudaPitchedPtr D_maskData, unsigned int maskPitch,
- const SDimensions3D& dims, const SConeProjection* projs,
- unsigned int iterations);
-
-}
-
-#endif
diff --git a/cuda/3d/util3d.cu b/cuda/3d/util3d.cu
index 1f436d8..90aa5ea 100644
--- a/cuda/3d/util3d.cu
+++ b/cuda/3d/util3d.cu
@@ -25,12 +25,14 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
+#include "astra/cuda/3d/util3d.h"
+
+#include "astra/cuda/2d/util.h"
+
+#include "astra/Logging.h"
+
#include <cstdio>
#include <cassert>
-#include "util3d.h"
-#include "../2d/util.h"
-
-#include "../../include/astra/Logging.h"
namespace astraCUDA3d {
diff --git a/cuda/3d/util3d.h b/cuda/3d/util3d.h
deleted file mode 100644
index 17eb31e..0000000
--- a/cuda/3d/util3d.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
------------------------------------------------------------------------
-Copyright: 2010-2018, imec Vision Lab, University of Antwerp
- 2014-2018, CWI, Amsterdam
-
-Contact: astra@astra-toolbox.com
-Website: http://www.astra-toolbox.com/
-
-This file is part of the ASTRA Toolbox.
-
-
-The ASTRA Toolbox is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-The ASTRA Toolbox is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-
------------------------------------------------------------------------
-*/
-
-#ifndef _CUDA_UTIL3D_H
-#define _CUDA_UTIL3D_H
-
-#include <cuda.h>
-#include "dims3d.h"
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-#include "../2d/util.h"
-
-namespace astraCUDA3d {
-
-cudaPitchedPtr allocateVolumeData(const SDimensions3D& dims);
-cudaPitchedPtr allocateProjectionData(const SDimensions3D& dims);
-bool zeroVolumeData(cudaPitchedPtr& D_data, const SDimensions3D& dims);
-bool zeroProjectionData(cudaPitchedPtr& D_data, const SDimensions3D& dims);
-bool copyVolumeToDevice(const float* data, cudaPitchedPtr& D_data, const SDimensions3D& dims, unsigned int pitch = 0);
-bool copyProjectionsToDevice(const float* data, cudaPitchedPtr& D_data, const SDimensions3D& dims, unsigned int pitch = 0);
-bool copyVolumeFromDevice(float* data, const cudaPitchedPtr& D_data, const SDimensions3D& dims, unsigned int pitch = 0);
-bool copyProjectionsFromDevice(float* data, const cudaPitchedPtr& D_data, const SDimensions3D& dims, unsigned int pitch = 0);
-bool duplicateVolumeData(cudaPitchedPtr& D_dest, const cudaPitchedPtr& D_src, const SDimensions3D& dims);
-bool duplicateProjectionData(cudaPitchedPtr& D_dest, const cudaPitchedPtr& D_src, const SDimensions3D& dims);
-
-
-bool transferProjectionsToArray(cudaPitchedPtr D_projData, cudaArray* array, const SDimensions3D& dims);
-bool transferVolumeToArray(cudaPitchedPtr D_volumeData, cudaArray* array, const SDimensions3D& dims);
-bool zeroProjectionArray(cudaArray* array, const SDimensions3D& dims);
-bool zeroVolumeArray(cudaArray* array, const SDimensions3D& dims);
-cudaArray* allocateProjectionArray(const SDimensions3D& dims);
-cudaArray* allocateVolumeArray(const SDimensions3D& dims);
-
-bool cudaTextForceKernelsCompletion();
-
-float dotProduct3D(cudaPitchedPtr data, unsigned int x, unsigned int y, unsigned int z);
-
-int calcNextPowerOfTwo(int _iValue);
-
-}
-
-#endif