summaryrefslogtreecommitdiffstats
path: root/cuda/2d
diff options
context:
space:
mode:
Diffstat (limited to 'cuda/2d')
-rw-r--r--cuda/2d/algo.cu18
-rw-r--r--cuda/2d/algo.h173
-rw-r--r--cuda/2d/arith.cu5
-rw-r--r--cuda/2d/arith.h85
-rw-r--r--cuda/2d/astra.cu42
-rw-r--r--cuda/2d/astra.h127
-rw-r--r--cuda/2d/cgls.cu12
-rw-r--r--cuda/2d/cgls.h90
-rw-r--r--cuda/2d/darthelper.cu5
-rw-r--r--cuda/2d/darthelper.h41
-rw-r--r--cuda/2d/dims.h68
-rw-r--r--cuda/2d/em.cu12
-rw-r--r--cuda/2d/em.h75
-rw-r--r--cuda/2d/fan_bp.cu12
-rw-r--r--cuda/2d/fan_bp.h52
-rw-r--r--cuda/2d/fan_fp.cu14
-rw-r--r--cuda/2d/fan_fp.h40
-rw-r--r--cuda/2d/fbp.cu12
-rw-r--r--cuda/2d/fbp.h97
-rw-r--r--cuda/2d/fbp_filters.h61
-rw-r--r--cuda/2d/fft.cu14
-rw-r--r--cuda/2d/fft.h72
-rw-r--r--cuda/2d/par_bp.cu12
-rw-r--r--cuda/2d/par_bp.h47
-rw-r--r--cuda/2d/par_fp.cu17
-rw-r--r--cuda/2d/par_fp.h40
-rw-r--r--cuda/2d/sart.cu16
-rw-r--r--cuda/2d/sart.h87
-rw-r--r--cuda/2d/sirt.cu12
-rw-r--r--cuda/2d/sirt.h96
-rw-r--r--cuda/2d/util.cu7
-rw-r--r--cuda/2d/util.h84
32 files changed, 103 insertions, 1442 deletions
diff --git a/cuda/2d/algo.cu b/cuda/2d/algo.cu
index 02790f0..f809c23 100644
--- a/cuda/2d/algo.cu
+++ b/cuda/2d/algo.cu
@@ -25,16 +25,16 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
-#include <cassert>
+#include "astra/cuda/2d/algo.h"
+#include "astra/cuda/2d/par_fp.h"
+#include "astra/cuda/2d/fan_fp.h"
+#include "astra/cuda/2d/par_bp.h"
+#include "astra/cuda/2d/fan_bp.h"
+#include "astra/cuda/2d/util.h"
+#include "astra/cuda/2d/arith.h"
+#include "astra/cuda/2d/astra.h"
-#include "algo.h"
-#include "par_fp.h"
-#include "fan_fp.h"
-#include "par_bp.h"
-#include "fan_bp.h"
-#include "util.h"
-#include "arith.h"
-#include "astra.h"
+#include <cassert>
namespace astraCUDA {
diff --git a/cuda/2d/algo.h b/cuda/2d/algo.h
deleted file mode 100644
index 2ce929c..0000000
--- a/cuda/2d/algo.h
+++ /dev/null
@@ -1,173 +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 "astra/Globals.h"
-#include "dims.h"
-
-namespace astra {
-
-class CParallelProjectionGeometry2D;
-class CParallelVecProjectionGeometry2D;
-class CFanFlatProjectionGeometry2D;
-class CFanFlatVecProjectionGeometry2D;
-class CVolumeGeometry2D;
-class CProjectionGeometry2D;
-
-}
-
-namespace astraCUDA {
-
-class _AstraExport ReconAlgo {
-public:
- ReconAlgo();
- virtual ~ReconAlgo();
-
- bool setGPUIndex(int iGPUIndex);
-
- bool setGeometry(const astra::CVolumeGeometry2D* pVolGeom,
- const astra::CProjectionGeometry2D* pProjGeom);
-
- bool setSuperSampling(int raysPerDet, int raysPerPixelDim);
-
- void signalAbort() { shouldAbort = true; }
-
- virtual bool enableVolumeMask();
- virtual bool enableSinogramMask();
-
- // init should be called after setting all geometry
- virtual bool init() = 0;
-
- // 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(float* D_maskData, unsigned int maskPitch);
-
- // 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(float* D_smaskData, unsigned int smaskPitch);
-
-
- // setBuffers should be called after init and before iterate.
- // It may be called again after iterate.
- virtual bool setBuffers(float* D_volumeData, unsigned int volumePitch,
- float* D_projData, unsigned int projPitch);
-
-
- // instead of calling setBuffers, you can also call allocateBuffers
- // to let ReconAlgo manage its own GPU memory
- virtual bool allocateBuffers();
-
- // copy data to GPU. This must be called after allocateBuffers.
- // pfSinogram, pfReconstruction, pfVolMask, pfSinoMask are the
- // sinogram, reconstruction, volume mask and sinogram mask in system RAM,
- // respectively. The corresponding pitch variables give the pitches
- // of these buffers, measured in floats.
- // The sinogram is multiplied by fSinogramScale after uploading it.
- virtual bool copyDataToGPU(const float* pfSinogram, unsigned int iSinogramPitch, float fSinogramScale,
- const float* pfReconstruction, unsigned int iReconstructionPitch,
- const float* pfVolMask, unsigned int iVolMaskPitch,
- const float* pfSinoMask, unsigned int iSinoMaskPitch);
-
-
-
- // set Min/Max constraints. They may be called at any time, and will affect
- // any iterate() calls afterwards.
- virtual bool setMinConstraint(float fMin);
- virtual bool setMaxConstraint(float fMax);
-
-
- // iterate should be called after init and setBuffers.
- // It may be called multiple times.
- virtual bool iterate(unsigned int iterations) = 0;
-
- // 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.
- virtual float computeDiffNorm() = 0;
- // TODO: computeDiffNorm shouldn't be virtual, but for it to be
- // implemented in ReconAlgo, it needs a way to get a suitable
- // temporary sinogram buffer.
-
- bool getReconstruction(float* pfReconstruction,
- unsigned int iReconstructionPitch) const;
-
-
-
-protected:
- void reset();
-
- bool callFP(float* D_volumeData, unsigned int volumePitch,
- float* D_projData, unsigned int projPitch,
- float outputScale);
- bool callBP(float* D_volumeData, unsigned int volumePitch,
- float* D_projData, unsigned int projPitch,
- float outputScale);
-
-
- SDimensions dims;
- SParProjection* parProjs;
- SFanProjection* fanProjs;
- float fOutputScale;
-
- volatile bool shouldAbort;
-
- bool freeGPUMemory;
-
- // Input/output
- float* D_sinoData;
- unsigned int sinoPitch;
-
- float* D_volumeData;
- unsigned int volumePitch;
-
- // Masks
- bool useVolumeMask;
- bool useSinogramMask;
-
- float* D_maskData;
- unsigned int maskPitch;
- float* D_smaskData;
- unsigned int smaskPitch;
-
- // Min/max
- bool useMinConstraint;
- bool useMaxConstraint;
- float fMinConstraint;
- float fMaxConstraint;
-
-
-};
-
-
-}
-
-#endif
-
diff --git a/cuda/2d/arith.cu b/cuda/2d/arith.cu
index 0ff4aa0..62eb8c2 100644
--- a/cuda/2d/arith.cu
+++ b/cuda/2d/arith.cu
@@ -25,8 +25,9 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
-#include "util.h"
-#include "arith.h"
+#include "astra/cuda/2d/util.h"
+#include "astra/cuda/2d/arith.h"
+
#include <cassert>
namespace astraCUDA {
diff --git a/cuda/2d/arith.h b/cuda/2d/arith.h
deleted file mode 100644
index e18bb1b..0000000
--- a/cuda/2d/arith.h
+++ /dev/null
@@ -1,85 +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_ARITH_H
-#define _CUDA_ARITH_H
-
-#include <cuda.h>
-
-namespace astraCUDA {
-
-
-struct opAddScaled;
-struct opScaleAndAdd;
-struct opAddMulScaled;
-struct opAddMul;
-struct opAdd;
-struct opAdd2;
-struct opMul;
-struct opDiv;
-struct opMul2;
-struct opDividedBy;
-struct opInvert;
-struct opSet;
-struct opClampMin;
-struct opClampMax;
-struct opClampMinMask;
-struct opClampMaxMask;
-struct opSegmentAndMask;
-struct opSetMaskedValues;
-
-struct opMulMask;
-
-
-template<typename op> void processVolCopy(float* out, const SDimensions& dims);
-template<typename op> void processVolCopy(float* out, float param, const SDimensions& dims);
-template<typename op> void processVolCopy(float* out1, float* out2, float param1, float param2, const SDimensions& dims);
-template<typename op> void processVolCopy(float* out, const float* in, const SDimensions& dims);
-template<typename op> void processVolCopy(float* out, const float* in, float param, const SDimensions& dims);
-template<typename op> void processVolCopy(float* out, const float* in1, const float* in2, const SDimensions& dims);
-template<typename op> void processVolCopy(float* out, const float* in1, const float* in2, float param, const SDimensions& dims);
-
-template<typename op> void processVol(float* out, unsigned int pitch, const SDimensions& dims);
-template<typename op> void processVol(float* out, float fParam, unsigned int pitch, const SDimensions& dims);
-template<typename op> void processVol(float* out1, float* out2, float fParam1, float fParam2, unsigned int pitch, const SDimensions& dims);
-template<typename op> void processVol(float* out, const float* in, unsigned int pitch, const SDimensions& dims);
-template<typename op> void processVol(float* out, const float* in, float fParam, unsigned int pitch, const SDimensions& dims);
-template<typename op> void processVol(float* out, const float* in1, const float* in2, float fParam, unsigned int pitch, const SDimensions& dims);
-template<typename op> void processVol(float* out, const float* in1, const float* in2, unsigned int pitch, const SDimensions& dims);
-
-template<typename op> void processSino(float* out, unsigned int pitch, const SDimensions& dims);
-template<typename op> void processSino(float* out, float fParam, unsigned int pitch, const SDimensions& dims);
-template<typename op> void processSino(float* out1, float* out2, float fParam1, float fParam2, unsigned int pitch, const SDimensions& dims);
-template<typename op> void processSino(float* out, const float* in, unsigned int pitch, const SDimensions& dims);
-template<typename op> void processSino(float* out, const float* in, float fParam, unsigned int pitch, const SDimensions& dims);
-template<typename op> void processSino(float* out, const float* in1, const float* in2, float fParam, unsigned int pitch, const SDimensions& dims);
-template<typename op> void processSino(float* out, const float* in1, const float* in2, unsigned int pitch, const SDimensions& dims);
-
-
-}
-
-#endif
diff --git a/cuda/2d/astra.cu b/cuda/2d/astra.cu
index 2ee469c..ec03517 100644
--- a/cuda/2d/astra.cu
+++ b/cuda/2d/astra.cu
@@ -25,33 +25,31 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
-#include <cstdio>
-#include <cassert>
+#include "astra/cuda/2d/util.h"
+#include "astra/cuda/2d/par_fp.h"
+#include "astra/cuda/2d/fan_fp.h"
+#include "astra/cuda/2d/par_bp.h"
+#include "astra/cuda/2d/fan_bp.h"
+#include "astra/cuda/2d/arith.h"
+#include "astra/cuda/2d/astra.h"
+#include "astra/cuda/2d/fft.h"
-#include "util.h"
-#include "par_fp.h"
-#include "fan_fp.h"
-#include "par_bp.h"
-#include "fan_bp.h"
-#include "arith.h"
-#include "astra.h"
+// For fan beam FBP weighting
+#include "astra/cuda/3d/fdk.h"
-#include "fft.h"
+#include "astra/GeometryUtil2D.h"
+#include "astra/VolumeGeometry2D.h"
+#include "astra/ParallelProjectionGeometry2D.h"
+#include "astra/ParallelVecProjectionGeometry2D.h"
+#include "astra/FanFlatProjectionGeometry2D.h"
+#include "astra/FanFlatVecProjectionGeometry2D.h"
+#include "astra/Logging.h"
+#include <cstdio>
+#include <cassert>
#include <fstream>
-#include <cuda.h>
-
-#include "../../include/astra/GeometryUtil2D.h"
-#include "../../include/astra/VolumeGeometry2D.h"
-#include "../../include/astra/ParallelProjectionGeometry2D.h"
-#include "../../include/astra/ParallelVecProjectionGeometry2D.h"
-#include "../../include/astra/FanFlatProjectionGeometry2D.h"
-#include "../../include/astra/FanFlatVecProjectionGeometry2D.h"
-
-#include "../../include/astra/Logging.h"
-// For fan beam FBP weighting
-#include "../3d/fdk.h"
+#include <cuda.h>
using namespace astraCUDA;
using namespace std;
diff --git a/cuda/2d/astra.h b/cuda/2d/astra.h
deleted file mode 100644
index 6f0e2f0..0000000
--- a/cuda/2d/astra.h
+++ /dev/null
@@ -1,127 +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_ASTRA_H
-#define _CUDA_ASTRA_H
-
-#include "fbp_filters.h"
-#include "dims.h"
-#include "algo.h"
-
-using astraCUDA::SFanProjection;
-
-namespace astra {
-
-enum Cuda2DProjectionKernel {
- ker2d_default = 0
-};
-
-class CParallelProjectionGeometry2D;
-class CParallelVecProjectionGeometry2D;
-class CFanFlatProjectionGeometry2D;
-class CFanFlatVecProjectionGeometry2D;
-class CVolumeGeometry2D;
-class CProjectionGeometry2D;
-
-
-class _AstraExport BPalgo : public astraCUDA::ReconAlgo {
-public:
- BPalgo();
- ~BPalgo();
-
- virtual bool init();
-
- virtual bool iterate(unsigned int iterations);
-
- virtual float computeDiffNorm();
-};
-
-
-
-
-// TODO: Clean up this interface to FP
-
-// Do a single forward projection
-_AstraExport bool astraCudaFP(const float* pfVolume, float* pfSinogram,
- unsigned int iVolWidth, unsigned int iVolHeight,
- unsigned int iProjAngles, unsigned int iProjDets,
- const SParProjection *pAngles,
- unsigned int iDetSuperSampling = 1,
- float fOutputScale = 1.0f, int iGPUIndex = 0);
-
-_AstraExport bool astraCudaFanFP(const float* pfVolume, float* pfSinogram,
- unsigned int iVolWidth, unsigned int iVolHeight,
- unsigned int iProjAngles, unsigned int iProjDets,
- const SFanProjection *pAngles,
- unsigned int iDetSuperSampling = 1,
- float fOutputScale = 1.0f, int iGPUIndex = 0);
-
-
-_AstraExport bool convertAstraGeometry(const CVolumeGeometry2D* pVolGeom,
- const CParallelProjectionGeometry2D* pProjGeom,
- astraCUDA::SParProjection*& pProjs,
- float& fOutputScale);
-
-_AstraExport bool convertAstraGeometry(const CVolumeGeometry2D* pVolGeom,
- const CParallelVecProjectionGeometry2D* pProjGeom,
- astraCUDA::SParProjection*& pProjs,
- float& fOutputScale);
-
-
-_AstraExport bool convertAstraGeometry(const CVolumeGeometry2D* pVolGeom,
- const CFanFlatProjectionGeometry2D* pProjGeom,
- astraCUDA::SFanProjection*& pProjs,
- float& outputScale);
-
-_AstraExport bool convertAstraGeometry(const CVolumeGeometry2D* pVolGeom,
- const CFanFlatVecProjectionGeometry2D* pProjGeom,
- astraCUDA::SFanProjection*& pProjs,
- float& outputScale);
-
-_AstraExport bool convertAstraGeometry_dims(const CVolumeGeometry2D* pVolGeom,
- const CProjectionGeometry2D* pProjGeom,
- astraCUDA::SDimensions& dims);
-
-_AstraExport bool convertAstraGeometry(const CVolumeGeometry2D* pVolGeom,
- const CProjectionGeometry2D* pProjGeom,
- astraCUDA::SParProjection*& pParProjs,
- astraCUDA::SFanProjection*& pFanProjs,
- float& outputScale);
-}
-
-namespace astraCUDA {
-
-// Return string with CUDA device number, name and memory size.
-// Use device == -1 to get info for the current device.
-_AstraExport std::string getCudaDeviceString(int device);
-
-_AstraExport bool setGPUIndex(int index);
-
-_AstraExport size_t availableGPUMemory();
-
-}
-#endif
diff --git a/cuda/2d/cgls.cu b/cuda/2d/cgls.cu
index f9fd6c1..696a0c1 100644
--- a/cuda/2d/cgls.cu
+++ b/cuda/2d/cgls.cu
@@ -25,17 +25,17 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
-#include <cstdio>
-#include <cassert>
-
-#include "cgls.h"
-#include "util.h"
-#include "arith.h"
+#include "astra/cuda/2d/cgls.h"
+#include "astra/cuda/2d/util.h"
+#include "astra/cuda/2d/arith.h"
#ifdef STANDALONE
#include "testutil.h"
#endif
+#include <cstdio>
+#include <cassert>
+
namespace astraCUDA {
CGLS::CGLS() : ReconAlgo()
diff --git a/cuda/2d/cgls.h b/cuda/2d/cgls.h
deleted file mode 100644
index 375a425..0000000
--- a/cuda/2d/cgls.h
+++ /dev/null
@@ -1,90 +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_CGLS_H
-#define _CUDA_CGLS_H
-
-#include "algo.h"
-
-namespace astraCUDA {
-
-class _AstraExport CGLS : public ReconAlgo {
-public:
- CGLS();
- virtual ~CGLS();
-
- // disable some features
- virtual bool enableSinogramMask() { return false; }
- virtual bool setMinConstraint(float) { return false; }
- virtual bool setMaxConstraint(float) { return false; }
-
- virtual bool init();
-
- virtual bool setBuffers(float* D_volumeData, unsigned int volumePitch,
- float* D_projData, unsigned int projPitch);
-
- virtual bool copyDataToGPU(const float* pfSinogram, unsigned int iSinogramPitch, float fSinogramScale,
- const float* pfReconstruction, unsigned int iReconstructionPitch,
- const float* pfVolMask, unsigned int iVolMaskPitch,
- const float* pfSinoMask, unsigned int iSinoMaskPitch);
-
-
- virtual bool iterate(unsigned int iterations);
-
- virtual float computeDiffNorm();
-
-protected:
- void reset();
-
- bool sliceInitialized;
-
- // Buffers
- float* D_r;
- unsigned int rPitch;
-
- float* D_w;
- unsigned int wPitch;
-
- float* D_z;
- unsigned int zPitch;
-
- float* D_p;
- unsigned int pPitch;
-
-
- float gamma;
-};
-
-
-_AstraExport bool doCGLS(float* D_volumeData, unsigned int volumePitch,
- float* D_projData, unsigned int projPitch,
- const SDimensions& dims, const float* angles,
- const float* TOffsets, unsigned int iterations);
-
-}
-
-#endif
diff --git a/cuda/2d/darthelper.cu b/cuda/2d/darthelper.cu
index 4041d79..b466840 100644
--- a/cuda/2d/darthelper.cu
+++ b/cuda/2d/darthelper.cu
@@ -25,8 +25,9 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
-#include "util.h"
-#include "darthelper.h"
+#include "astra/cuda/2d/util.h"
+#include "astra/cuda/2d/darthelper.h"
+
#include <cassert>
namespace astraCUDA {
diff --git a/cuda/2d/darthelper.h b/cuda/2d/darthelper.h
deleted file mode 100644
index 3c2f83c..0000000
--- a/cuda/2d/darthelper.h
+++ /dev/null
@@ -1,41 +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_ARITH2_H
-#define _CUDA_ARITH2_H
-
-#include "astra/Globals.h"
-
-namespace astraCUDA {
-
- void roiSelect(float* out, float radius, unsigned int width, unsigned int height);
- void dartMask(float* out, const float* in, unsigned int conn, unsigned int radius, unsigned int threshold, unsigned int width, unsigned int height);
- void dartSmoothing(float* out, const float* in, float b, unsigned int radius, unsigned int width, unsigned int height);
-
-}
-
-#endif
diff --git a/cuda/2d/dims.h b/cuda/2d/dims.h
deleted file mode 100644
index 0bdefa9..0000000
--- a/cuda/2d/dims.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_DIMS_H
-#define _CUDA_DIMS_H
-
-#include "astra/GeometryUtil2D.h"
-
-
-namespace astraCUDA {
-
-using astra::SParProjection;
-using astra::SFanProjection;
-
-
-
-struct SDimensions {
- // Width, height of reconstruction volume
- unsigned int iVolWidth;
- unsigned int iVolHeight;
-
- // Number of projection angles
- unsigned int iProjAngles;
-
- // Number of detector pixels
- unsigned int iProjDets;
-
- // in FP, number of rays to trace per detector pixel.
- // This should usually be set to 1.
- // If fDetScale > 1, this should be set to an integer of roughly
- // the same size as fDetScale.
- unsigned int iRaysPerDet;
-
- // in BP, square root of number of rays to trace per volume pixel
- // This should usually be set to 1.
- // If fDetScale < 1, this should be set to an integer of roughly
- // the same size as 1 / fDetScale.
- unsigned int iRaysPerPixelDim;
-};
-
-}
-
-#endif
-
diff --git a/cuda/2d/em.cu b/cuda/2d/em.cu
index cf67f9b..ca09d31 100644
--- a/cuda/2d/em.cu
+++ b/cuda/2d/em.cu
@@ -25,17 +25,17 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
-#include <cstdio>
-#include <cassert>
-
-#include "em.h"
-#include "util.h"
-#include "arith.h"
+#include "astra/cuda/2d/em.h"
+#include "astra/cuda/2d/util.h"
+#include "astra/cuda/2d/arith.h"
#ifdef STANDALONE
#include "testutil.h"
#endif
+#include <cstdio>
+#include <cassert>
+
namespace astraCUDA {
diff --git a/cuda/2d/em.h b/cuda/2d/em.h
deleted file mode 100644
index 3ffe01b..0000000
--- a/cuda/2d/em.h
+++ /dev/null
@@ -1,75 +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_EM_H
-#define _CUDA_EM_H
-
-#include "algo.h"
-
-namespace astraCUDA {
-
-class _AstraExport EM : public ReconAlgo {
-public:
- EM();
- virtual ~EM();
-
- // disable some features
- virtual bool enableSinogramMask() { return false; }
- virtual bool enableVolumeMask() { return false; }
- virtual bool setMinConstraint(float) { return false; }
- virtual bool setMaxConstraint(float) { return false; }
-
- virtual bool init();
-
- virtual bool iterate(unsigned int iterations);
-
- virtual float computeDiffNorm();
-
-protected:
- void reset();
- bool precomputeWeights();
-
- // Temporary buffers
- float* D_projData;
- unsigned int projPitch;
-
- float* D_tmpData;
- unsigned int tmpPitch;
-
- // Geometry-specific precomputed data
- float* D_pixelWeight;
- unsigned int pixelPitch;
-};
-
-_AstraExport bool doEM(float* D_volumeData, unsigned int volumePitch,
- float* D_projData, unsigned int projPitch,
- const SDimensions& dims, const float* angles,
- const float* TOffsets, unsigned int iterations);
-
-}
-
-#endif
diff --git a/cuda/2d/fan_bp.cu b/cuda/2d/fan_bp.cu
index 793b5f4..dac3ac2 100644
--- a/cuda/2d/fan_bp.cu
+++ b/cuda/2d/fan_bp.cu
@@ -25,18 +25,16 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
-#include <cstdio>
-#include <cassert>
-#include <iostream>
-
-#include "util.h"
-#include "arith.h"
+#include "astra/cuda/2d/util.h"
+#include "astra/cuda/2d/arith.h"
#ifdef STANDALONE
#include "testutil.h"
#endif
-#define PIXELTRACE
+#include <cstdio>
+#include <cassert>
+#include <iostream>
typedef texture<float, 2, cudaReadModeElementType> texture2D;
diff --git a/cuda/2d/fan_bp.h b/cuda/2d/fan_bp.h
deleted file mode 100644
index 22349b0..0000000
--- a/cuda/2d/fan_bp.h
+++ /dev/null
@@ -1,52 +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_FAN_BP_H
-#define _CUDA_FAN_BP_H
-
-namespace astraCUDA {
-
-_AstraExport bool FanBP(float* D_volumeData, unsigned int volumePitch,
- float* D_projData, unsigned int projPitch,
- const SDimensions& dims, const SFanProjection* angles,
- float fOutputScale);
-
-_AstraExport bool FanBP_SART(float* D_volumeData, unsigned int volumePitch,
- float* D_projData, unsigned int projPitch,
- unsigned int angle,
- const SDimensions& dims, const SFanProjection* angles,
- float fOutputScale);
-
-_AstraExport bool FanBP_FBPWeighted(float* D_volumeData, unsigned int volumePitch,
- float* D_projData, unsigned int projPitch,
- const SDimensions& dims, const SFanProjection* angles,
- float fOutputScale);
-
-
-}
-
-#endif
diff --git a/cuda/2d/fan_fp.cu b/cuda/2d/fan_fp.cu
index f08a681..3479650 100644
--- a/cuda/2d/fan_fp.cu
+++ b/cuda/2d/fan_fp.cu
@@ -25,18 +25,18 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
-#include <cstdio>
-#include <cassert>
-#include <iostream>
-#include <list>
-
-#include "util.h"
-#include "arith.h"
+#include "astra/cuda/2d/util.h"
+#include "astra/cuda/2d/arith.h"
#ifdef STANDALONE
#include "testutil.h"
#endif
+#include <cstdio>
+#include <cassert>
+#include <iostream>
+#include <list>
+
typedef texture<float, 2, cudaReadModeElementType> texture2D;
diff --git a/cuda/2d/fan_fp.h b/cuda/2d/fan_fp.h
deleted file mode 100644
index 3e8f1e4..0000000
--- a/cuda/2d/fan_fp.h
+++ /dev/null
@@ -1,40 +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_FAN_FP_H
-#define _CUDA_FAN_FP_H
-
-namespace astraCUDA {
-
-_AstraExport bool FanFP(float* D_volumeData, unsigned int volumePitch,
- float* D_projData, unsigned int projPitch,
- const SDimensions& dims, const SFanProjection* angles,
- float outputScale);
-
-}
-
-#endif
diff --git a/cuda/2d/fbp.cu b/cuda/2d/fbp.cu
index ecaf544..48fb7dc 100644
--- a/cuda/2d/fbp.cu
+++ b/cuda/2d/fbp.cu
@@ -25,14 +25,14 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
-#include "fbp.h"
-#include "fft.h"
-#include "par_bp.h"
-#include "fan_bp.h"
-#include "util.h"
+#include "astra/cuda/2d/fbp.h"
+#include "astra/cuda/2d/fft.h"
+#include "astra/cuda/2d/par_bp.h"
+#include "astra/cuda/2d/fan_bp.h"
+#include "astra/cuda/2d/util.h"
// For fan-beam preweighting
-#include "../3d/fdk.h"
+#include "astra/cuda/3d/fdk.h"
#include "astra/Logging.h"
diff --git a/cuda/2d/fbp.h b/cuda/2d/fbp.h
deleted file mode 100644
index 8666646..0000000
--- a/cuda/2d/fbp.h
+++ /dev/null
@@ -1,97 +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/>.
-
------------------------------------------------------------------------
-*/
-
-#include "algo.h"
-#include "fbp_filters.h"
-
-namespace astraCUDA {
-
-class _AstraExport FBP : public ReconAlgo {
-public:
- FBP();
- ~FBP();
-
- virtual bool useSinogramMask() { return false; }
- virtual bool useVolumeMask() { return false; }
-
- // Returns the required size of a filter in the fourier domain
- // when multiplying it with the fft of the projection data.
- // Its value is equal to the smallest power of two larger than
- // or equal to twice the number of detectors in the spatial domain.
- //
- // _iDetectorCount is the number of detectors in the spatial domain.
- static int calcFourierFilterSize(int _iDetectorCount);
-
- // Sets the filter type. Some filter types require the user to supply an
- // array containing the filter.
- // The number of elements in a filter in the fourier domain should be equal
- // to the value returned by calcFourierFilterSize().
- // The following types require a filter:
- //
- // - FILTER_PROJECTION:
- // The filter size should be equal to the output of
- // calcFourierFilterSize(). The filtered sinogram is
- // multiplied with the supplied filter.
- //
- // - FILTER_SINOGRAM:
- // Same as FILTER_PROJECTION, but now the filter should contain a row for
- // every projection direction.
- //
- // - FILTER_RPROJECTION:
- // The filter should now contain one kernel (= ifft of filter), with the
- // peak in the center. The filter width
- // can be any value. If odd, the peak is assumed to be in the center, if
- // even, it is assumed to be at floor(filter-width/2).
- //
- // - FILTER_RSINOGRAM
- // Same as FILTER_RPROJECTION, but now the supplied filter should contain a
- // row for every projection direction.
- //
- // A large number of other filters (FILTER_RAMLAK, FILTER_SHEPPLOGAN,
- // FILTER_COSINE, FILTER_HAMMING, and FILTER_HANN)
- // have a D variable, which gives the cutoff point in the frequency domain.
- // Setting this value to 1.0 will include the whole filter
- bool setFilter(astra::E_FBPFILTER _eFilter,
- const float * _pfHostFilter = NULL,
- int _iFilterWidth = 0, float _fD = 1.0f, float _fFilterParameter = -1.0f);
-
- bool setShortScan(bool ss) { m_bShortScan = ss; return true; }
-
- virtual bool init();
-
- virtual bool iterate(unsigned int iterations);
-
- virtual float computeDiffNorm() { return 0.0f; } // TODO
-
-protected:
- void reset();
-
- void* D_filter; // cufftComplex*
- bool m_bShortScan;
-};
-
-}
diff --git a/cuda/2d/fbp_filters.h b/cuda/2d/fbp_filters.h
deleted file mode 100644
index 7c1121a..0000000
--- a/cuda/2d/fbp_filters.h
+++ /dev/null
@@ -1,61 +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 FBP_FILTERS_H
-#define FBP_FILTERS_H
-
-namespace astra {
-
-enum E_FBPFILTER
-{
- FILTER_NONE, //< no filter (regular BP)
- FILTER_RAMLAK, //< default FBP filter
- FILTER_SHEPPLOGAN, //< Shepp-Logan
- FILTER_COSINE, //< Cosine
- FILTER_HAMMING, //< Hamming filter
- FILTER_HANN, //< Hann filter
- FILTER_TUKEY, //< Tukey filter
- FILTER_LANCZOS, //< Lanczos filter
- FILTER_TRIANGULAR, //< Triangular filter
- FILTER_GAUSSIAN, //< Gaussian filter
- FILTER_BARTLETTHANN, //< Bartlett-Hann filter
- FILTER_BLACKMAN, //< Blackman filter
- FILTER_NUTTALL, //< Nuttall filter, continuous first derivative
- FILTER_BLACKMANHARRIS, //< Blackman-Harris filter
- FILTER_BLACKMANNUTTALL, //< Blackman-Nuttall filter
- FILTER_FLATTOP, //< Flat top filter
- FILTER_KAISER, //< Kaiser filter
- FILTER_PARZEN, //< Parzen filter
- FILTER_PROJECTION, //< all projection directions share one filter
- FILTER_SINOGRAM, //< every projection direction has its own filter
- FILTER_RPROJECTION, //< projection filter in real space (as opposed to fourier space)
- FILTER_RSINOGRAM, //< sinogram filter in real space
-};
-
-}
-
-#endif /* FBP_FILTERS_H */
diff --git a/cuda/2d/fft.cu b/cuda/2d/fft.cu
index a1b1b93..bd8cab5 100644
--- a/cuda/2d/fft.cu
+++ b/cuda/2d/fft.cu
@@ -25,16 +25,18 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
-#include "fft.h"
-#include "util.h"
+#include "astra/cuda/2d/fft.h"
+#include "astra/cuda/2d/util.h"
+
+#include "astra/Logging.h"
+#include "astra/Fourier.h"
-#include <cufft.h>
#include <iostream>
-#include <cuda.h>
#include <fstream>
-#include "../../include/astra/Logging.h"
-#include "../../include/astra/Fourier.h"
+#include <cufft.h>
+#include <cuda.h>
+
using namespace astra;
diff --git a/cuda/2d/fft.h b/cuda/2d/fft.h
deleted file mode 100644
index d36cae2..0000000
--- a/cuda/2d/fft.h
+++ /dev/null
@@ -1,72 +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 FFT_H
-#define FFT_H
-
-#include <cufft.h>
-#include <cuda.h>
-
-#include "fbp_filters.h"
-
-namespace astraCUDA {
-
-bool allocateComplexOnDevice(int _iProjectionCount,
- int _iDetectorCount,
- cufftComplex ** _ppDevComplex);
-
-bool freeComplexOnDevice(cufftComplex * _pDevComplex);
-
-bool uploadComplexArrayToDevice(int _iProjectionCount, int _iDetectorCount,
- cufftComplex * _pHostComplexSource,
- cufftComplex * _pDevComplexTarget);
-
-bool runCudaFFT(int _iProjectionCount, const float * _pfDevRealSource,
- int _iSourcePitch, int _iProjDets,
- int _iFFTRealDetectorCount, int _iFFTFourierDetectorCount,
- cufftComplex * _pDevTargetComplex);
-
-bool runCudaIFFT(int _iProjectionCount, const cufftComplex* _pDevSourceComplex,
- float * _pfRealTarget,
- int _iTargetPitch, int _iProjDets,
- int _iFFTRealDetectorCount, int _iFFTFourierDetectorCount);
-
-void applyFilter(int _iProjectionCount, int _iFreqBinCount,
- cufftComplex * _pSinogram, cufftComplex * _pFilter);
-
-int calcFFTFourierSize(int _iFFTRealSize);
-
-void genFilter(astra::E_FBPFILTER _eFilter, float _fD, int _iProjectionCount,
- cufftComplex * _pFilter, int _iFFTRealDetectorCount,
- int _iFFTFourierDetectorCount, float _fParameter = -1.0f);
-
-void genIdenFilter(int _iProjectionCount, cufftComplex * _pFilter,
- int _iFFTRealDetectorCount, int _iFFTFourierDetectorCount);
-
-}
-
-#endif /* FFT_H */
diff --git a/cuda/2d/par_bp.cu b/cuda/2d/par_bp.cu
index a894f3f..09a6554 100644
--- a/cuda/2d/par_bp.cu
+++ b/cuda/2d/par_bp.cu
@@ -25,18 +25,16 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
-#include <cstdio>
-#include <cassert>
-#include <iostream>
-
-#include "util.h"
-#include "arith.h"
+#include "astra/cuda/2d/util.h"
+#include "astra/cuda/2d/arith.h"
#ifdef STANDALONE
#include "testutil.h"
#endif
-#define PIXELTRACE
+#include <cstdio>
+#include <cassert>
+#include <iostream>
typedef texture<float, 2, cudaReadModeElementType> texture2D;
diff --git a/cuda/2d/par_bp.h b/cuda/2d/par_bp.h
deleted file mode 100644
index c8dfab8..0000000
--- a/cuda/2d/par_bp.h
+++ /dev/null
@@ -1,47 +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_PAR_BP_H
-#define _CUDA_PAR_BP_H
-
-#include "dims.h"
-
-namespace astraCUDA {
-
-_AstraExport bool BP(float* D_volumeData, unsigned int volumePitch,
- float* D_projData, unsigned int projPitch,
- const SDimensions& dims, const SParProjection* angles,
- float fOutputScale);
-
-_AstraExport bool BP_SART(float* D_volumeData, unsigned int volumePitch,
- float* D_projData, unsigned int projPitch,
- unsigned int angle, const SDimensions& dims,
- const SParProjection* angles, float fOutputScale);
-
-}
-
-#endif
diff --git a/cuda/2d/par_fp.cu b/cuda/2d/par_fp.cu
index 427a4e8..0835301 100644
--- a/cuda/2d/par_fp.cu
+++ b/cuda/2d/par_fp.cu
@@ -25,21 +25,18 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
-#include <cstdio>
-#include <cassert>
-#include <iostream>
-#include <list>
-#include <cmath>
-
-#include "util.h"
-#include "arith.h"
+#include "astra/cuda/2d/util.h"
+#include "astra/cuda/2d/arith.h"
#ifdef STANDALONE
#include "testutil.h"
#endif
-#define PIXELTRACE
-
+#include <cstdio>
+#include <cassert>
+#include <iostream>
+#include <list>
+#include <cmath>
typedef texture<float, 2, cudaReadModeElementType> texture2D;
diff --git a/cuda/2d/par_fp.h b/cuda/2d/par_fp.h
deleted file mode 100644
index 62277a1..0000000
--- a/cuda/2d/par_fp.h
+++ /dev/null
@@ -1,40 +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_PAR_FP_H
-#define _CUDA_PAR_FP_H
-
-namespace astraCUDA {
-
-_AstraExport bool FP(float* D_volumeData, unsigned int volumePitch,
- float* D_projData, unsigned int projPitch,
- const SDimensions& dims, const SParProjection* angles,
- float fOutputScale);
-
-}
-
-#endif
diff --git a/cuda/2d/sart.cu b/cuda/2d/sart.cu
index 8b6f50e..cf9babc 100644
--- a/cuda/2d/sart.cu
+++ b/cuda/2d/sart.cu
@@ -25,17 +25,17 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
+#include "astra/cuda/2d/sart.h"
+#include "astra/cuda/2d/util.h"
+#include "astra/cuda/2d/arith.h"
+#include "astra/cuda/2d/fan_fp.h"
+#include "astra/cuda/2d/fan_bp.h"
+#include "astra/cuda/2d/par_fp.h"
+#include "astra/cuda/2d/par_bp.h"
+
#include <cstdio>
#include <cassert>
-#include "sart.h"
-#include "util.h"
-#include "arith.h"
-#include "fan_fp.h"
-#include "fan_bp.h"
-#include "par_fp.h"
-#include "par_bp.h"
-
namespace astraCUDA {
// FIXME: Remove these functions. (Outdated)
diff --git a/cuda/2d/sart.h b/cuda/2d/sart.h
deleted file mode 100644
index 6c0e547..0000000
--- a/cuda/2d/sart.h
+++ /dev/null
@@ -1,87 +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_SART_H
-#define _CUDA_SART_H
-
-#include "algo.h"
-
-namespace astraCUDA {
-
-class _AstraExport SART : public ReconAlgo {
-public:
- SART();
- ~SART();
-
- // disable some features
- virtual bool enableSinogramMask() { return false; }
-
- virtual bool init();
-
- virtual bool setProjectionOrder(int* projectionOrder, int projectionCount);
-
- virtual bool iterate(unsigned int iterations);
-
- virtual float computeDiffNorm();
-
- void setRelaxation(float r) { fRelaxation = r; }
-
-protected:
- void reset();
- bool precomputeWeights();
-
- bool callFP_SART(float* D_volumeData, unsigned int volumePitch,
- float* D_projData, unsigned int projPitch,
- unsigned int angle, float outputScale);
- bool callBP_SART(float* D_volumeData, unsigned int volumePitch,
- float* D_projData, unsigned int projPitch,
- unsigned int angle, float outputScale);
-
-
- // projection angle variables
- bool customOrder;
- int* projectionOrder;
- int projectionCount;
- int iteration;
-
- // Temporary buffers
- float* D_projData;
- unsigned int projPitch;
-
- float* D_tmpData; // Only used when there's a volume mask
- unsigned int tmpPitch;
-
- // Geometry-specific precomputed data
- float* D_lineWeight;
- unsigned int linePitch;
-
- float fRelaxation;
-};
-
-}
-
-#endif
diff --git a/cuda/2d/sirt.cu b/cuda/2d/sirt.cu
index faba7a7..7ec377c 100644
--- a/cuda/2d/sirt.cu
+++ b/cuda/2d/sirt.cu
@@ -25,17 +25,17 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
-#include <cstdio>
-#include <cassert>
-
-#include "sirt.h"
-#include "util.h"
-#include "arith.h"
+#include "astra/cuda/2d/sirt.h"
+#include "astra/cuda/2d/util.h"
+#include "astra/cuda/2d/arith.h"
#ifdef STANDALONE
#include "testutil.h"
#endif
+#include <cstdio>
+#include <cassert>
+
namespace astraCUDA {
SIRT::SIRT() : ReconAlgo()
diff --git a/cuda/2d/sirt.h b/cuda/2d/sirt.h
deleted file mode 100644
index 434a07c..0000000
--- a/cuda/2d/sirt.h
+++ /dev/null
@@ -1,96 +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_SIRT_H
-#define _CUDA_SIRT_H
-
-#include "algo.h"
-
-namespace astraCUDA {
-
-class _AstraExport SIRT : public ReconAlgo {
-public:
- SIRT();
- ~SIRT();
-
- virtual bool init();
-
- // Do optional long-object compensation. See the comments in sirt.cu.
- // Call this after init(). It can not be used in combination with masks.
- bool doSlabCorrections();
-
- // Set min/max masks to existing GPU memory buffers
- bool setMinMaxMasks(float* D_minMaskData, float* D_maxMaskData,
- unsigned int pitch);
-
- // Set min/max masks from RAM buffers
- bool uploadMinMaxMasks(const float* minMaskData, const float* maxMaskData,
- unsigned int pitch);
-
- void setRelaxation(float r) { fRelaxation = r; }
-
- virtual bool iterate(unsigned int iterations);
-
- virtual float computeDiffNorm();
-
-protected:
- void reset();
- bool precomputeWeights();
-
- // Temporary buffers
- float* D_projData;
- unsigned int projPitch;
-
- float* D_tmpData;
- unsigned int tmpPitch;
-
- // Geometry-specific precomputed data
- float* D_lineWeight;
- unsigned int linePitch;
-
- float* D_pixelWeight;
- unsigned int pixelPitch;
-
- // Masks
- bool freeMinMaxMasks;
- float* D_minMaskData;
- unsigned int minMaskPitch;
- float* D_maxMaskData;
- unsigned int maxMaskPitch;
-
- float fRelaxation;
-};
-
-bool doSIRT(float* D_volumeData, unsigned int volumePitch,
- float* D_projData, unsigned int projPitch,
- float* D_maskData, unsigned int maskPitch,
- const SDimensions& dims, const float* angles,
- const float* TOffsets, unsigned int iterations);
-
-}
-
-#endif
diff --git a/cuda/2d/util.cu b/cuda/2d/util.cu
index dfc5de9..533b86c 100644
--- a/cuda/2d/util.cu
+++ b/cuda/2d/util.cu
@@ -25,11 +25,12 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------
*/
+#include "astra/cuda/2d/util.h"
+
+#include "astra/Logging.h"
+
#include <cstdio>
#include <cassert>
-#include "util.h"
-
-#include "../../include/astra/Logging.h"
namespace astraCUDA {
diff --git a/cuda/2d/util.h b/cuda/2d/util.h
deleted file mode 100644
index 70e7c86..0000000
--- a/cuda/2d/util.h
+++ /dev/null
@@ -1,84 +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_UTIL_H
-#define _CUDA_UTIL_H
-
-#include <cuda.h>
-#include <driver_types.h>
-#include <string>
-
-#include "astra/Globals.h"
-
-#include "dims.h"
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-#define ASTRA_CUDA_ASSERT(err) do { if (err != cudaSuccess) { astraCUDA::reportCudaError(err); assert(err == cudaSuccess); } } while(0)
-
-
-namespace astraCUDA {
-
-bool copyVolumeToDevice(const float* in_data, unsigned int in_pitch,
- const SDimensions& dims,
- float* outD_data, unsigned int out_pitch);
-bool copyVolumeFromDevice(float* out_data, unsigned int out_pitch,
- const SDimensions& dims,
- float* inD_data, unsigned int in_pitch);
-bool copySinogramFromDevice(float* out_data, unsigned int out_pitch,
- const SDimensions& dims,
- float* inD_data, unsigned int in_pitch);
-bool copySinogramToDevice(const float* in_data, unsigned int in_pitch,
- const SDimensions& dims,
- float* outD_data, unsigned int out_pitch);
-
-bool allocateVolume(float*& D_ptr, unsigned int width, unsigned int height, unsigned int& pitch);
-void zeroVolume(float* D_data, unsigned int pitch, unsigned int width, unsigned int height);
-
-bool allocateVolumeData(float*& D_ptr, unsigned int& pitch, const SDimensions& dims);
-bool allocateProjectionData(float*& D_ptr, unsigned int& pitch, const SDimensions& dims);
-void zeroVolumeData(float* D_ptr, unsigned int pitch, const SDimensions& dims);
-void zeroProjectionData(float* D_ptr, unsigned int pitch, const SDimensions& dims);
-
-void duplicateVolumeData(float* D_dst, float* D_src, unsigned int pitch, const SDimensions& dims);
-void duplicateProjectionData(float* D_dst, float* D_src, unsigned int pitch, const SDimensions& dims);
-
-
-
-bool cudaTextForceKernelsCompletion();
-void reportCudaError(cudaError_t err);
-
-
-
-float dotProduct2D(float* D_data, unsigned int pitch,
- unsigned int width, unsigned int height);
-
-}
-
-#endif