diff options
author | Willem Jan Palenstijn <wjp@usecode.org> | 2015-03-03 13:25:47 +0100 |
---|---|---|
committer | Willem Jan Palenstijn <wjp@usecode.org> | 2015-03-03 13:25:47 +0100 |
commit | e2e6509d04a329a6990ba43385fbc2bdfff31840 (patch) | |
tree | 1befc23a27af3d671f8d68828011ff1f9bd4457a /python/astra/data2d_c.pyx | |
parent | d908869566862da4632a84c65474dd056e3fd749 (diff) | |
parent | 46eb9cce2bc172514096c761cd50b0fc74e6c8e6 (diff) | |
download | astra-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.pyx | 60 |
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") |