summaryrefslogtreecommitdiffstats
path: root/python/astra/data3d_c.pyx
diff options
context:
space:
mode:
authorDaniel M. Pelt <D.M.Pelt@cwi.nl>2015-03-02 17:22:42 +0100
committerDaniel M. Pelt <D.M.Pelt@cwi.nl>2015-03-03 12:11:51 +0100
commit46eb9cce2bc172514096c761cd50b0fc74e6c8e6 (patch)
treeea54ff6dc4b1c8bb759fee58181904b81c1054e2 /python/astra/data3d_c.pyx
parente468c6c546dbb4d9665ccb95b1571a160753d50e (diff)
downloadastra-46eb9cce2bc172514096c761cd50b0fc74e6c8e6.tar.gz
astra-46eb9cce2bc172514096c761cd50b0fc74e6c8e6.tar.bz2
astra-46eb9cce2bc172514096c761cd50b0fc74e6c8e6.tar.xz
astra-46eb9cce2bc172514096c761cd50b0fc74e6c8e6.zip
Make Python get_geometry code match Matlab (after 03a9dd972ada50eedb83386910cecf02fe8d0e35)
Diffstat (limited to 'python/astra/data3d_c.pyx')
-rw-r--r--python/astra/data3d_c.pyx41
1 files changed, 25 insertions, 16 deletions
diff --git a/python/astra/data3d_c.pyx b/python/astra/data3d_c.pyx
index f821aaf..4b069f7 100644
--- a/python/astra/data3d_c.pyx
+++ b/python/astra/data3d_c.pyx
@@ -51,26 +51,23 @@ cdef extern from *:
CFloat32Data3DMemory * dynamic_cast_mem "dynamic_cast<astra::CFloat32Data3DMemory*>" (CFloat32Data3D * ) except NULL
def create(datatype,geometry,data=None):
- cdef XMLDocument * xml
- cdef Config cfg
+ cdef Config *cfg
cdef CVolumeGeometry3D * pGeometry
cdef CProjectionGeometry3D * ppGeometry
cdef CFloat32Data3DMemory * pDataObject3D
cdef CConeProjectionGeometry3D* pppGeometry
if datatype == '-vol':
- xml = utils.dict2XML(six.b('VolumeGeometry'), geometry)
- cfg.self = xml.getRootNode()
+ cfg = utils.dictToConfig(six.b('VolumeGeometry'), geometry)
pGeometry = new CVolumeGeometry3D()
- if not pGeometry.initialize(cfg):
- del xml
+ if not pGeometry.initialize(cfg[0]):
+ del cfg
del pGeometry
raise Exception('Geometry class not initialized.')
pDataObject3D = <CFloat32Data3DMemory * > new CFloat32VolumeData3DMemory(pGeometry)
- del xml
+ del cfg
del pGeometry
elif datatype == '-sino' or datatype == '-proj3d':
- xml = utils.dict2XML(six.b('ProjectionGeometry'), geometry)
- cfg.self = xml.getRootNode()
+ cfg = utils.dictToConfig(six.b('ProjectionGeometry'), geometry)
tpe = wrap_from_bytes(cfg.self.getAttribute(six.b('type')))
if (tpe == "parallel3d"):
ppGeometry = <CProjectionGeometry3D*> new CParallelProjectionGeometry3D();
@@ -83,19 +80,18 @@ def create(datatype,geometry,data=None):
else:
raise Exception("Invalid geometry type.")
- if not ppGeometry.initialize(cfg):
- del xml
+ if not ppGeometry.initialize(cfg[0]):
+ del cfg
del ppGeometry
raise Exception('Geometry class not initialized.')
pDataObject3D = <CFloat32Data3DMemory * > new CFloat32ProjectionData3DMemory(ppGeometry)
del ppGeometry
- del xml
+ del cfg
elif datatype == "-sinocone":
- xml = utils.dict2XML(six.b('ProjectionGeometry'), geometry)
- cfg.self = xml.getRootNode()
+ cfg = utils.dictToConfig(six.b('ProjectionGeometry'), geometry)
pppGeometry = new CConeProjectionGeometry3D()
- if not pppGeometry.initialize(cfg):
- del xml
+ if not pppGeometry.initialize(cfg[0]):
+ del cfg
del pppGeometry
raise Exception('Geometry class not initialized.')
pDataObject3D = <CFloat32Data3DMemory * > new CFloat32ProjectionData3DMemory(pppGeometry)
@@ -112,6 +108,19 @@ def create(datatype,geometry,data=None):
return man3d.store(<CFloat32Data3D*>pDataObject3D)
+def get_geometry(i):
+ cdef CFloat32Data3DMemory * pDataObject = dynamic_cast_mem(getObject(i))
+ cdef CFloat32ProjectionData3DMemory * pDataObject2
+ cdef CFloat32VolumeData3DMemory * pDataObject3
+ if pDataObject.getType() == THREEPROJECTION:
+ pDataObject2 = <CFloat32ProjectionData3DMemory * >pDataObject
+ geom = utils.configToDict(pDataObject2.getGeometry().getConfiguration())
+ elif pDataObject.getType() == THREEVOLUME:
+ pDataObject3 = <CFloat32VolumeData3DMemory * >pDataObject
+ geom = utils.configToDict(pDataObject3.getGeometry().getConfiguration())
+ else:
+ raise Exception("Not a known data object")
+ return geom
cdef fillDataObject(CFloat32Data3DMemory * obj, data):
if data is None: