summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakob Jorgensen <jakob.jorgensen@manchester.ac.uk>2018-03-07 10:02:03 +0000
committerJakob Jorgensen <jakob.jorgensen@manchester.ac.uk>2018-03-07 10:02:03 +0000
commit1d0e10be49f157d4f68bba54c0395d84fafd98a3 (patch)
tree0dfeed105d5b57c700041f8f81386a49fa79b002
parent5386d63eb97d96e727d68107c9c705f5598101cf (diff)
downloadframework-1d0e10be49f157d4f68bba54c0395d84fafd98a3.tar.gz
framework-1d0e10be49f157d4f68bba54c0395d84fafd98a3.tar.bz2
framework-1d0e10be49f157d4f68bba54c0395d84fafd98a3.tar.xz
framework-1d0e10be49f157d4f68bba54c0395d84fafd98a3.zip
Extended geoms with channels attribute, added experimental mc demo script
-rw-r--r--Wrappers/Python/ccpi/reconstruction/geoms.py45
-rw-r--r--Wrappers/Python/test/simple_mc_demo.py43
2 files changed, 68 insertions, 20 deletions
diff --git a/Wrappers/Python/ccpi/reconstruction/geoms.py b/Wrappers/Python/ccpi/reconstruction/geoms.py
index edce3b3..9f81fa0 100644
--- a/Wrappers/Python/ccpi/reconstruction/geoms.py
+++ b/Wrappers/Python/ccpi/reconstruction/geoms.py
@@ -1,16 +1,17 @@
class VolumeGeometry:
- def __init__(self, \
- voxel_num_x=None, \
- voxel_num_y=None, \
- voxel_num_z=None, \
- voxel_size_x=None, \
- voxel_size_y=None, \
- voxel_size_z=None, \
- center_x=0, \
- center_y=0, \
- center_z=0):
+ def __init__(self,
+ voxel_num_x=None,
+ voxel_num_y=None,
+ voxel_num_z=None,
+ voxel_size_x=None,
+ voxel_size_y=None,
+ voxel_size_z=None,
+ center_x=0,
+ center_y=0,
+ center_z=0,
+ channels=1):
self.voxel_num_x = voxel_num_x
self.voxel_num_y = voxel_num_y
@@ -21,6 +22,7 @@ class VolumeGeometry:
self.center_x = center_x
self.center_y = center_y
self.center_z = center_z
+ self.channels = channels
def getMinX(self):
return self.center_x - 0.5*self.voxel_num_x*self.voxel_size_x
@@ -43,16 +45,17 @@ class VolumeGeometry:
class SinogramGeometry:
- def __init__(self, \
- geom_type, \
- dimension, \
- angles, \
- pixel_num_h=None, \
- pixel_size_h=1, \
- pixel_num_v=None, \
- pixel_size_v=1, \
- dist_source_center=None, \
- dist_center_detector=None, \
+ def __init__(self,
+ geom_type,
+ dimension,
+ angles,
+ pixel_num_h=None,
+ pixel_size_h=1,
+ pixel_num_v=None,
+ pixel_size_v=1,
+ dist_source_center=None,
+ dist_center_detector=None,
+ channels=1
):
"""
General inputs for standard type projection geometries
@@ -91,6 +94,8 @@ class SinogramGeometry:
self.pixel_size_h = pixel_size_h
self.pixel_num_v = pixel_num_v
self.pixel_size_v = pixel_size_v
+
+ self.channels = channels
diff --git a/Wrappers/Python/test/simple_mc_demo.py b/Wrappers/Python/test/simple_mc_demo.py
new file mode 100644
index 0000000..ca6a89e
--- /dev/null
+++ b/Wrappers/Python/test/simple_mc_demo.py
@@ -0,0 +1,43 @@
+
+
+import sys
+
+sys.path.append("..")
+
+from ccpi.framework import *
+from ccpi.reconstruction.algs import *
+from ccpi.reconstruction.funcs import *
+from ccpi.reconstruction.ops import *
+from ccpi.reconstruction.astra_ops import *
+from ccpi.reconstruction.geoms import *
+
+import numpy as np
+import matplotlib.pyplot as plt
+
+test_case = 2 # 1=parallel2D, 2=cone2D
+
+# Set up phantom
+N = 128
+
+numchannels = 3
+
+x = np.zeros((N,N,numchannels))
+
+x[round(N/4):round(3*N/4),round(N/4):round(3*N/4),0] = 1.0
+x[round(N/8):round(7*N/8),round(3*N/8):round(5*N/8),0] = 2.0
+
+x[round(N/4):round(3*N/4),round(N/4):round(3*N/4),1] = 0.7
+x[round(N/8):round(7*N/8),round(3*N/8):round(5*N/8),1] = 1.2
+
+x[round(N/4):round(3*N/4),round(N/4):round(3*N/4),2] = 1.5
+x[round(N/8):round(7*N/8),round(3*N/8):round(5*N/8),2] = 2.2
+
+f, axarr = plt.subplots(1,numchannels)
+for k in numpy.arange(3):
+ axarr[k].imshow(x[:,:,k],vmin=0,vmax=2.5)
+plt.show()
+
+vg = VolumeGeometry(N,N,None, 1,1,None,channels=numchannels)
+
+
+Phantom = VolumeData(x,geometry=vg) \ No newline at end of file