diff options
| author | Willem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl> | 2015-12-02 15:29:58 +0100 | 
|---|---|---|
| committer | Willem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl> | 2015-12-02 15:29:58 +0100 | 
| commit | f637af457985fbcf6be5641e98df6d87ca622d24 (patch) | |
| tree | 4c015188c6b5e33c1a9d88032f61a434063259fb /src/CudaForwardProjectionAlgorithm.cpp | |
| parent | e48d0a53730bb7faa2463a64db0989ba341e12b8 (diff) | |
| parent | 6d57f7874713e6632c2e49590538c6a48ddcc311 (diff) | |
| download | astra-f637af457985fbcf6be5641e98df6d87ca622d24.tar.gz astra-f637af457985fbcf6be5641e98df6d87ca622d24.tar.bz2 astra-f637af457985fbcf6be5641e98df6d87ca622d24.tar.xz astra-f637af457985fbcf6be5641e98df6d87ca622d24.zip  | |
Merge branch 'master' into volgeom3d
Diffstat (limited to 'src/CudaForwardProjectionAlgorithm.cpp')
| -rw-r--r-- | src/CudaForwardProjectionAlgorithm.cpp | 60 | 
1 files changed, 34 insertions, 26 deletions
diff --git a/src/CudaForwardProjectionAlgorithm.cpp b/src/CudaForwardProjectionAlgorithm.cpp index b382f2e..9ca13ae 100644 --- a/src/CudaForwardProjectionAlgorithm.cpp +++ b/src/CudaForwardProjectionAlgorithm.cpp @@ -38,8 +38,11 @@ $Id$  #include <boost/lexical_cast.hpp>  #include "astra/AstraObjectManager.h" +#include "astra/ParallelProjectionGeometry2D.h"  #include "astra/FanFlatProjectionGeometry2D.h"  #include "astra/FanFlatVecProjectionGeometry2D.h" +#include "astra/Float32ProjectionData2D.h" +#include "astra/Float32VolumeData2D.h"  #include "astra/CudaProjector2D.h"  #include "astra/Logging.h" @@ -66,6 +69,24 @@ CCudaForwardProjectionAlgorithm::~CCudaForwardProjectionAlgorithm()  }  //--------------------------------------------------------------------------------------- +void CCudaForwardProjectionAlgorithm::initializeFromProjector() +{ +	m_iDetectorSuperSampling = 1; +	m_iGPUIndex = -1; + +	// Projector +	CCudaProjector2D* pCudaProjector = dynamic_cast<CCudaProjector2D*>(m_pProjector); +	if (!pCudaProjector) { +		if (m_pProjector) { +			ASTRA_WARN("non-CUDA Projector2D passed to FP_CUDA"); +		} +	} else { +		m_iDetectorSuperSampling = pCudaProjector->getDetectorSuperSampling(); +		m_iGPUIndex = pCudaProjector->getGPUIndex(); +	} +} + +//---------------------------------------------------------------------------------------  // Initialize - Config  bool CCudaForwardProjectionAlgorithm::initialize(const Config& _cfg)  { @@ -74,14 +95,9 @@ bool CCudaForwardProjectionAlgorithm::initialize(const Config& _cfg)  	// Projector  	XMLNode node = _cfg.self.getSingleNode("ProjectorId"); -	CCudaProjector2D* pCudaProjector = 0;  	if (node) {  		int id = boost::lexical_cast<int>(node.getContent()); -		CProjector2D *projector = CProjector2DManager::getSingleton().get(id); -		pCudaProjector = dynamic_cast<CCudaProjector2D*>(projector); -		if (!pCudaProjector) { -			ASTRA_WARN("non-CUDA Projector2D passed to FP_CUDA"); -		} +		m_pProjector = CProjector2DManager::getSingleton().get(id);  	}  	CC.markNodeParsed("ProjectorId"); @@ -101,22 +117,18 @@ bool CCudaForwardProjectionAlgorithm::initialize(const Config& _cfg)  	m_pVolume = dynamic_cast<CFloat32VolumeData2D*>(CData2DManager::getSingleton().get(id));  	CC.markNodeParsed("VolumeDataId"); +	initializeFromProjector(); + +	// Deprecated options +	m_iDetectorSuperSampling = (int)_cfg.self.getOptionNumerical("DetectorSuperSampling", m_iDetectorSuperSampling); +	CC.markOptionParsed("DetectorSuperSampling");  	// GPU number  	m_iGPUIndex = (int)_cfg.self.getOptionNumerical("GPUindex", -1);  	m_iGPUIndex = (int)_cfg.self.getOptionNumerical("GPUIndex", m_iGPUIndex); -	CC.markOptionParsed("GPUindex"); -	if (!_cfg.self.hasOption("GPUindex")) -		CC.markOptionParsed("GPUIndex"); +	CC.markOptionParsed("GPUIndex"); +	if (!_cfg.self.hasOption("GPUIndex")) +		CC.markOptionParsed("GPUindex"); -	// Detector supersampling factor -	m_iDetectorSuperSampling = 1; -	if (pCudaProjector) { -		// New interface -		m_iDetectorSuperSampling = pCudaProjector->getDetectorSuperSampling(); -	} -	// Deprecated option -	m_iDetectorSuperSampling = (int)_cfg.self.getOptionNumerical("DetectorSuperSampling", m_iDetectorSuperSampling); -	CC.markOptionParsed("DetectorSuperSampling");  	// return success @@ -125,20 +137,16 @@ bool CCudaForwardProjectionAlgorithm::initialize(const Config& _cfg)  //----------------------------------------------------------------------------------------  // Initialize - C++ -bool CCudaForwardProjectionAlgorithm::initialize(CProjectionGeometry2D* _pProjectionGeometry, -												 CVolumeGeometry2D* _pReconstructionGeometry, +bool CCudaForwardProjectionAlgorithm::initialize(CProjector2D* _pProjector,  												 CFloat32VolumeData2D* _pVolume, -												 CFloat32ProjectionData2D* _pSinogram, -												 int _iGPUindex, int _iDetectorSuperSampling) +												 CFloat32ProjectionData2D* _pSinogram)  {  	// store classes -	//m_pProjectionGeometry = _pProjectionGeometry; -	//m_pReconstructionGeometry = _pReconstructionGeometry; +	m_pProjector = _pProjector;  	m_pVolume = _pVolume;  	m_pSinogram = _pSinogram; -	m_iDetectorSuperSampling = _iDetectorSuperSampling; -	m_iGPUIndex = _iGPUindex; +	initializeFromProjector();  	// return success  	return check();  | 
