summaryrefslogtreecommitdiffstats
path: root/python/astra/data2d_c.pyx
diff options
context:
space:
mode:
authorWillem Jan Palenstijn <wjp@usecode.org>2015-03-03 13:25:47 +0100
committerWillem Jan Palenstijn <wjp@usecode.org>2015-03-03 13:25:47 +0100
commite2e6509d04a329a6990ba43385fbc2bdfff31840 (patch)
tree1befc23a27af3d671f8d68828011ff1f9bd4457a /python/astra/data2d_c.pyx
parentd908869566862da4632a84c65474dd056e3fd749 (diff)
parent46eb9cce2bc172514096c761cd50b0fc74e6c8e6 (diff)
downloadastra-e2e6509d04a329a6990ba43385fbc2bdfff31840.tar.gz
astra-e2e6509d04a329a6990ba43385fbc2bdfff31840.tar.bz2
astra-e2e6509d04a329a6990ba43385fbc2bdfff31840.tar.xz
astra-e2e6509d04a329a6990ba43385fbc2bdfff31840.zip
Merge pull request #25 from dmpelt/python-get-geometry
Make Python get_geometry code match Matlab (after 03a9dd9)
Diffstat (limited to 'python/astra/data2d_c.pyx')
-rw-r--r--python/astra/data2d_c.pyx60
1 files changed, 26 insertions, 34 deletions
diff --git a/python/astra/data2d_c.pyx b/python/astra/data2d_c.pyx
index ec1b478..b9c105e 100644
--- a/python/astra/data2d_c.pyx
+++ b/python/astra/data2d_c.pyx
@@ -47,10 +47,8 @@ from .PyIncludes cimport *
cimport utils
from .utils import wrap_from_bytes
-
cdef CData2DManager * man2d = <CData2DManager * >PyData2DManager.getSingletonPtr()
-
def clear():
man2d.clear()
@@ -64,25 +62,22 @@ def delete(ids):
def create(datatype, geometry, data=None):
- cdef XMLDocument * xml
- cdef Config cfg
+ cdef Config *cfg
cdef CVolumeGeometry2D * pGeometry
cdef CProjectionGeometry2D * ppGeometry
cdef CFloat32Data2D * pDataObject2D
if datatype == '-vol':
- xml = utils.dict2XML(six.b('VolumeGeometry'), geometry)
- cfg.self = xml.getRootNode()
+ cfg = utils.dictToConfig(six.b('VolumeGeometry'), geometry)
pGeometry = new CVolumeGeometry2D()
- if not pGeometry.initialize(cfg):
- del xml
+ if not pGeometry.initialize(cfg[0]):
+ del cfg
del pGeometry
raise Exception('Geometry class not initialized.')
pDataObject2D = <CFloat32Data2D * > new CFloat32VolumeData2D(pGeometry)
- del xml
+ del cfg
del pGeometry
elif datatype == '-sino':
- 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 == 'sparse_matrix'):
ppGeometry = <CProjectionGeometry2D * >new CSparseMatrixProjectionGeometry2D()
@@ -92,13 +87,13 @@ def create(datatype, geometry, data=None):
ppGeometry = <CProjectionGeometry2D * >new CFanFlatVecProjectionGeometry2D()
else:
ppGeometry = <CProjectionGeometry2D * >new CParallelProjectionGeometry2D()
- if not ppGeometry.initialize(cfg):
- del xml
+ if not ppGeometry.initialize(cfg[0]):
+ del cfg
del ppGeometry
raise Exception('Geometry class not initialized.')
pDataObject2D = <CFloat32Data2D * > new CFloat32ProjectionData2D(ppGeometry)
del ppGeometry
- del xml
+ del cfg
else:
raise Exception("Invalid datatype. Please specify '-vol' or '-sino'.")
@@ -151,29 +146,27 @@ def get_geometry(i):
cdef CFloat32Data2D * pDataObject = getObject(i)
cdef CFloat32ProjectionData2D * pDataObject2
cdef CFloat32VolumeData2D * pDataObject3
- if pDataObject.getType() == PROJECTION:
+ if pDataObject.getType() == TWOPROJECTION:
pDataObject2 = <CFloat32ProjectionData2D * >pDataObject
- geom = utils.createProjectionGeometryStruct(pDataObject2.getGeometry())
- elif pDataObject.getType() == VOLUME:
+ geom = utils.configToDict(pDataObject2.getGeometry().getConfiguration())
+ elif pDataObject.getType() == TWOVOLUME:
pDataObject3 = <CFloat32VolumeData2D * >pDataObject
- geom = utils.createVolumeGeometryStruct(pDataObject3.getGeometry())
+ geom = utils.configToDict(pDataObject3.getGeometry().getConfiguration())
else:
raise Exception("Not a known data object")
return geom
def change_geometry(i, geom):
- cdef XMLDocument * xml
- cdef Config cfg
+ cdef Config *cfg
cdef CVolumeGeometry2D * pGeometry
cdef CProjectionGeometry2D * ppGeometry
cdef CFloat32Data2D * pDataObject = getObject(i)
cdef CFloat32ProjectionData2D * pDataObject2
cdef CFloat32VolumeData2D * pDataObject3
- if pDataObject.getType() == PROJECTION:
+ if pDataObject.getType() == TWOPROJECTION:
pDataObject2 = <CFloat32ProjectionData2D * >pDataObject
- xml = utils.dict2XML(six.b('ProjectionGeometry'), geom)
- cfg.self = xml.getRootNode()
+ cfg = utils.dictToConfig(six.b('ProjectionGeometry'), geom)
tpe = wrap_from_bytes(cfg.self.getAttribute(six.b('type')))
if (tpe == 'sparse_matrix'):
ppGeometry = <CProjectionGeometry2D * >new CSparseMatrixProjectionGeometry2D()
@@ -183,34 +176,33 @@ def change_geometry(i, geom):
ppGeometry = <CProjectionGeometry2D * >new CFanFlatVecProjectionGeometry2D()
else:
ppGeometry = <CProjectionGeometry2D * >new CParallelProjectionGeometry2D()
- if not ppGeometry.initialize(cfg):
- del xml
+ if not ppGeometry.initialize(cfg[0]):
+ del cfg
del ppGeometry
raise Exception('Geometry class not initialized.')
if (ppGeometry.getDetectorCount() != pDataObject2.getDetectorCount() or ppGeometry.getProjectionAngleCount() != pDataObject2.getAngleCount()):
del ppGeometry
- del xml
+ del cfg
raise Exception(
"The dimensions of the data do not match those specified in the geometry.")
pDataObject2.changeGeometry(ppGeometry)
del ppGeometry
- del xml
- elif pDataObject.getType() == VOLUME:
+ del cfg
+ elif pDataObject.getType() == TWOVOLUME:
pDataObject3 = <CFloat32VolumeData2D * >pDataObject
- xml = utils.dict2XML(six.b('VolumeGeometry'), geom)
- cfg.self = xml.getRootNode()
+ cfg = utils.dictToConfig(six.b('VolumeGeometry'), geom)
pGeometry = new CVolumeGeometry2D()
- if not pGeometry.initialize(cfg):
- del xml
+ if not pGeometry.initialize(cfg[0]):
+ del cfg
del pGeometry
raise Exception('Geometry class not initialized.')
if (pGeometry.getGridColCount() != pDataObject3.getWidth() or pGeometry.getGridRowCount() != pDataObject3.getHeight()):
- del xml
+ del cfg
del pGeometry
raise Exception(
'The dimensions of the data do not match those specified in the geometry.')
pDataObject3.changeGeometry(pGeometry)
- del xml
+ del cfg
del pGeometry
else:
raise Exception("Not a known data object")