summaryrefslogtreecommitdiffstats
path: root/src/CudaProjector3D.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/CudaProjector3D.cpp')
-rw-r--r--src/CudaProjector3D.cpp153
1 files changed, 153 insertions, 0 deletions
diff --git a/src/CudaProjector3D.cpp b/src/CudaProjector3D.cpp
new file mode 100644
index 0000000..4687825
--- /dev/null
+++ b/src/CudaProjector3D.cpp
@@ -0,0 +1,153 @@
+/*
+-----------------------------------------------------------------------
+Copyright 2012 iMinds-Vision Lab, University of Antwerp
+
+Contact: astra@ua.ac.be
+Website: http://astra.ua.ac.be
+
+
+This file is part of the
+All Scale Tomographic Reconstruction Antwerp Toolbox ("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/>.
+
+-----------------------------------------------------------------------
+$Id$
+*/
+
+#include "astra/CudaProjector3D.h"
+
+
+namespace astra
+{
+
+// type of the projector, needed to register with CProjectorFactory
+std::string CCudaProjector3D::type = "cuda3d";
+
+
+//----------------------------------------------------------------------------------------
+// Default constructor
+CCudaProjector3D::CCudaProjector3D()
+{
+ _clear();
+}
+
+//----------------------------------------------------------------------------------------
+// Destructor
+CCudaProjector3D::~CCudaProjector3D()
+{
+ if (m_bIsInitialized) clear();
+}
+
+//----------------------------------------------------------------------------------------
+// Clear for constructors
+void CCudaProjector3D::_clear()
+{
+ m_pProjectionGeometry = NULL;
+ m_pVolumeGeometry = NULL;
+ m_bIsInitialized = false;
+
+ m_projectionKernel = ker3d_default;
+}
+
+//----------------------------------------------------------------------------------------
+// Clear
+void CCudaProjector3D::clear()
+{
+ ASTRA_DELETE(m_pProjectionGeometry);
+ ASTRA_DELETE(m_pVolumeGeometry);
+ m_bIsInitialized = false;
+}
+
+//----------------------------------------------------------------------------------------
+// Check
+bool CCudaProjector3D::_check()
+{
+ // projection geometry
+ ASTRA_CONFIG_CHECK(m_pProjectionGeometry, "CudaProjector3D", "ProjectionGeometry3D not initialized.");
+ ASTRA_CONFIG_CHECK(m_pProjectionGeometry->isInitialized(), "CudaProjector3D", "ProjectionGeometry3D not initialized.");
+
+ // volume geometry
+ ASTRA_CONFIG_CHECK(m_pVolumeGeometry, "CudaProjector3D", "VolumeGeometry3D not initialized.");
+ ASTRA_CONFIG_CHECK(m_pVolumeGeometry->isInitialized(), "CudaProjector3D", "VolumeGeometry3D not initialized.");
+
+ return true;
+}
+
+//---------------------------------------------------------------------------------------
+// Initialize, use a Config object
+bool CCudaProjector3D::initialize(const Config& _cfg)
+{
+ assert(_cfg.self);
+ ConfigStackCheck<CProjector3D> CC("CudaProjector3D", this, _cfg);
+
+ // if already initialized, clear first
+ if (m_bIsInitialized) {
+ clear();
+ }
+
+ // initialization of parent class
+ if (!CProjector3D::initialize(_cfg)) {
+ return false;
+ }
+
+ // TODO: These should go to the parent.
+
+ // ProjectionGeometry
+ XMLNode* node = _cfg.self->getSingleNode("ProjectionGeometry");
+ // TODO: Implement
+ ASTRA_DELETE(node);
+ CC.markNodeParsed("ProjectionGeometry");
+
+ // ReconstructionGeometry
+ node = _cfg.self->getSingleNode("VolumeGeometry");
+ // TODO: Implement
+ ASTRA_DELETE(node);
+ CC.markNodeParsed("VolumeGeometry");
+
+ node = _cfg.self->getSingleNode("ProjectionKernel");
+ m_projectionKernel = ker3d_default;
+ if (node) {
+ std::string sProjKernel = node->getContent();
+
+ if (sProjKernel == "default") {
+
+ } else if (sProjKernel == "sum_square_weights") {
+ m_projectionKernel = ker3d_sum_square_weights;
+ } else {
+ return false;
+ }
+ }
+ ASTRA_DELETE(node);
+ CC.markNodeParsed("ProjectionKernel");
+
+ m_bIsInitialized = _check();
+ return m_bIsInitialized;
+}
+
+/*
+bool CProjector3D::initialize(astra::CProjectionGeometry3D *, astra::CVolumeGeometry3D *)
+{
+ ASTRA_ASSERT(false);
+
+ return false;
+}
+*/
+
+std::string CCudaProjector3D::description() const
+{
+ return "";
+}
+
+} // end namespace