summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWillem Jan Palenstijn <wjp@usecode.org>2015-06-26 12:00:20 +0200
committerWillem Jan Palenstijn <wjp@usecode.org>2015-06-26 12:00:20 +0200
commit62f3aa5792011792db866ce0841c8d164aa9a34d (patch)
tree8f494a765a3607afd1c9bac9c592f30536b950a1
parent8ad46dc9cb28067047838e06770707cf86ef6e56 (diff)
parent9e3472ea9041b8755050427d8bdb8a4701019c55 (diff)
downloadastra-62f3aa5792011792db866ce0841c8d164aa9a34d.tar.gz
astra-62f3aa5792011792db866ce0841c8d164aa9a34d.tar.bz2
astra-62f3aa5792011792db866ce0841c8d164aa9a34d.tar.xz
astra-62f3aa5792011792db866ce0841c8d164aa9a34d.zip
Merge pull request #76 from dmpelt/projector-configuration-fix
Configuration fixes
-rw-r--r--matlab/mex/astra_mex_projector3d_c.cpp8
-rw-r--r--matlab/mex/astra_mex_projector_c.cpp9
-rw-r--r--matlab/mex/mexHelpFunctions.cpp6
-rw-r--r--python/astra/projector3d_c.pyx10
-rw-r--r--python/astra/projector_c.pyx10
-rw-r--r--python/astra/utils.pyx5
-rw-r--r--src/ParallelProjectionGeometry2D.cpp5
7 files changed, 42 insertions, 11 deletions
diff --git a/matlab/mex/astra_mex_projector3d_c.cpp b/matlab/mex/astra_mex_projector3d_c.cpp
index c3b547f..e25802c 100644
--- a/matlab/mex/astra_mex_projector3d_c.cpp
+++ b/matlab/mex/astra_mex_projector3d_c.cpp
@@ -137,7 +137,9 @@ void astra_mex_projector3d_get_projection_geometry(int nlhs, mxArray* plhs[], in
// step3: get projection_geometry and turn it into a MATLAB struct
if (1 <= nlhs) {
- plhs[0] = configToStruct(pProjector->getProjectionGeometry()->getConfiguration());
+ Config *cfg = pProjector->getProjectionGeometry()->getConfiguration();
+ plhs[0] = configToStruct(cfg);
+ delete cfg;
}
}
@@ -163,7 +165,9 @@ void astra_mex_projector3d_get_volume_geometry(int nlhs, mxArray* plhs[], int nr
// step3: get projection_geometry and turn it into a MATLAB struct
if (1 <= nlhs) {
- plhs[0] = configToStruct(pProjector->getVolumeGeometry()->getConfiguration());
+ Config *cfg = pProjector->getVolumeGeometry()->getConfiguration();
+ plhs[0] = configToStruct(cfg);
+ delete cfg;
}
}
diff --git a/matlab/mex/astra_mex_projector_c.cpp b/matlab/mex/astra_mex_projector_c.cpp
index 204ba8e..bf701af 100644
--- a/matlab/mex/astra_mex_projector_c.cpp
+++ b/matlab/mex/astra_mex_projector_c.cpp
@@ -160,7 +160,9 @@ void astra_mex_projector_projection_geometry(int nlhs, mxArray* plhs[], int nrhs
// step3: get projection_geometry and turn it into a MATLAB struct
if (1 <= nlhs) {
- plhs[0] = configToStruct(pProjector->getProjectionGeometry()->getConfiguration());
+ Config *cfg = pProjector->getProjectionGeometry()->getConfiguration();
+ plhs[0] = configToStruct(cfg);
+ delete cfg;
}
}
@@ -189,8 +191,9 @@ void astra_mex_projector_volume_geometry(int nlhs, mxArray* plhs[], int nrhs, co
// step3: get projection_geometry and turn it into a MATLAB struct
if (1 <= nlhs) {
- plhs[0] = configToStruct(pProjector->getVolumeGeometry()->getConfiguration());
-
+ Config *cfg = pProjector->getVolumeGeometry()->getConfiguration();
+ plhs[0] = configToStruct(cfg);
+ delete cfg;
}
}
diff --git a/matlab/mex/mexHelpFunctions.cpp b/matlab/mex/mexHelpFunctions.cpp
index 87a9672..58e84d2 100644
--- a/matlab/mex/mexHelpFunctions.cpp
+++ b/matlab/mex/mexHelpFunctions.cpp
@@ -336,7 +336,11 @@ mxArray* XMLNodeToStruct(astra::XMLNode node)
// option
if (subnode.getName() == "Option") {
- mOptions[subnode.getAttribute("key")] = stringToMxArray(subnode.getAttribute("value"));
+ if(subnode.hasAttribute("value")){
+ mOptions[subnode.getAttribute("key")] = stringToMxArray(subnode.getAttribute("value"));
+ }else{
+ mOptions[subnode.getAttribute("key")] = stringToMxArray(subnode.getContent());
+ }
}
// regular content
diff --git a/python/astra/projector3d_c.pyx b/python/astra/projector3d_c.pyx
index 8b978d7..aec9cde 100644
--- a/python/astra/projector3d_c.pyx
+++ b/python/astra/projector3d_c.pyx
@@ -87,12 +87,18 @@ cdef CProjector3D * getObject(i) except NULL:
def projection_geometry(i):
cdef CProjector3D * proj = getObject(i)
- return utils.configToDict(proj.getProjectionGeometry().getConfiguration())
+ cdef Config * cfg = proj.getProjectionGeometry().getConfiguration()
+ dct = utils.configToDict(cfg)
+ del cfg
+ return dct
def volume_geometry(i):
cdef CProjector3D * proj = getObject(i)
- return utils.configToDict(proj.getVolumeGeometry().getConfiguration())
+ cdef Config * cfg = proj.getVolumeGeometry().getConfiguration()
+ dct = utils.configToDict(cfg)
+ del cfg
+ return dct
def weights_single_ray(i, projection_index, detector_index):
diff --git a/python/astra/projector_c.pyx b/python/astra/projector_c.pyx
index 9aa868e..77c64a4 100644
--- a/python/astra/projector_c.pyx
+++ b/python/astra/projector_c.pyx
@@ -91,12 +91,18 @@ cdef CProjector2D * getObject(i) except NULL:
def projection_geometry(i):
cdef CProjector2D * proj = getObject(i)
- return utils.configToDict(proj.getProjectionGeometry().getConfiguration())
+ cdef Config * cfg = proj.getProjectionGeometry().getConfiguration()
+ dct = utils.configToDict(cfg)
+ del cfg
+ return dct
def volume_geometry(i):
cdef CProjector2D * proj = getObject(i)
- return utils.configToDict(proj.getVolumeGeometry().getConfiguration())
+ cdef Config * cfg = proj.getVolumeGeometry().getConfiguration()
+ dct = utils.configToDict(cfg)
+ del cfg
+ return dct
def weights_single_ray(i, projection_index, detector_index):
diff --git a/python/astra/utils.pyx b/python/astra/utils.pyx
index a8e9e4e..260c308 100644
--- a/python/astra/utils.pyx
+++ b/python/astra/utils.pyx
@@ -204,7 +204,10 @@ cdef XMLNode2dict(XMLNode node):
while it != nodes.end():
subnode = deref(it)
if castString(subnode.getName())=="Option":
- opts[castString(subnode.getAttribute('key'))] = stringToPythonValue(subnode.getAttribute('value'))
+ if subnode.hasAttribute('value'):
+ opts[castString(subnode.getAttribute('key'))] = stringToPythonValue(subnode.getAttribute('value'))
+ else:
+ opts[castString(subnode.getAttribute('key'))] = stringToPythonValue(subnode.getContent())
else:
dct[castString(subnode.getName())] = stringToPythonValue(subnode.getContent())
inc(it)
diff --git a/src/ParallelProjectionGeometry2D.cpp b/src/ParallelProjectionGeometry2D.cpp
index 699e141..7260b83 100644
--- a/src/ParallelProjectionGeometry2D.cpp
+++ b/src/ParallelProjectionGeometry2D.cpp
@@ -180,6 +180,11 @@ Config* CParallelProjectionGeometry2D::getConfiguration() const
cfg->self.addChildNode("DetectorCount", getDetectorCount());
cfg->self.addChildNode("DetectorWidth", getDetectorWidth());
cfg->self.addChildNode("ProjectionAngles", m_pfProjectionAngles, m_iProjectionAngleCount);
+ if(m_pfExtraDetectorOffset!=NULL){
+ XMLNode opt = cfg->self.addChildNode("Option");
+ opt.addAttribute("key","ExtraDetectorOffset");
+ opt.setContent(m_pfExtraDetectorOffset, m_iProjectionAngleCount);
+ }
return cfg;
}
//----------------------------------------------------------------------------------------