From 99e5fec9999a5f00e31a567df7dd98cd69e30880 Mon Sep 17 00:00:00 2001
From: algol <dkazanc@hotmail.com>
Date: Thu, 22 Feb 2018 15:27:33 +0000
Subject: some changes

---
 data/IP_data70channels.mat                  | Bin 0 -> 8710147 bytes
 data/__pycache__/read_IPdata.cpython-35.pyc | Bin 0 -> 1674 bytes
 data/read_IPdata.py                         |  58 ++++++++++++++++++++++++++++
 3 files changed, 58 insertions(+)
 create mode 100644 data/IP_data70channels.mat
 create mode 100644 data/__pycache__/read_IPdata.cpython-35.pyc
 create mode 100644 data/read_IPdata.py

(limited to 'data')

diff --git a/data/IP_data70channels.mat b/data/IP_data70channels.mat
new file mode 100644
index 0000000..19b9421
Binary files /dev/null and b/data/IP_data70channels.mat differ
diff --git a/data/__pycache__/read_IPdata.cpython-35.pyc b/data/__pycache__/read_IPdata.cpython-35.pyc
new file mode 100644
index 0000000..b062cf9
Binary files /dev/null and b/data/__pycache__/read_IPdata.cpython-35.pyc differ
diff --git a/data/read_IPdata.py b/data/read_IPdata.py
new file mode 100644
index 0000000..2e6a525
--- /dev/null
+++ b/data/read_IPdata.py
@@ -0,0 +1,58 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""
+function to read IP data and provide a dictionary with data and parameters as an output
+"""
+from scipy import io
+import numpy as np
+from collections import defaultdict
+
+def read_IPdata():
+    # read data from mat file (specify the location)
+    alldata = io.loadmat('IP_data70channels.mat')
+    data_raw = alldata.get('Data_raw') # here is raw projection data
+    Phantom_ideal = alldata.get('Phantom_ideal') # here is 70 channels ideal phantom
+    Photon_flux = alldata.get('Photon_flux') # photon flux for normalization
+    del alldata
+
+    # extract geometry-related parameters
+    proj_numb,detectors_numb,channels = np.shape(data_raw)
+    im_size  = np.size(Phantom_ideal,1)
+
+    theta = np.linspace(0,proj_numb-1,proj_numb)*360/proj_numb   # projection angles
+    dom_width   = 1.0       # width of domain in cm
+    src_to_rotc = 3.0       # dist. from source to rotation center
+    src_to_det  = 5.0       # dist. from source to detector
+    det_width   = 2.0       # detector width
+
+    # negative log normalisation of the raw data (avoiding of log(0))
+    data_norm = np.zeros(np.shape(data_raw))
+    for i in range(0,channels):
+        slice1 = data_raw[:,:,i]
+        indx = np.nonzero(slice1>0)
+        slice2 = np.zeros((proj_numb,detectors_numb), 'float32')
+        slice2[indx] = -np.log(slice1[indx]/Photon_flux[i])
+        indx2 = np.nonzero(slice1==0)
+        slice3 = np.zeros((proj_numb,detectors_numb), 'float32')
+        slice3[indx2] = np.log(slice2[indx2]+Photon_flux[i])
+        data_norm[:,:,i] = slice2 + slice3
+        del indx, indx2, slice1, slice2, slice3
+    data_norm = np.float32(data_norm*(im_size/dom_width))
+    
+    #build a dictionary for data and related parameters
+    dataDICT = defaultdict(list)
+    dataDICT['data_norm'].append(data_norm)
+    dataDICT['data_raw'].append(data_raw)
+    dataDICT['Photon_flux'].append(Photon_flux)
+    dataDICT['Phantom_ideal'].append(Phantom_ideal)
+    dataDICT['theta'].append(theta)
+    dataDICT['proj_numb'].append(proj_numb)
+    dataDICT['detectors_numb'].append(detectors_numb)
+    dataDICT['channels'].append(channels)
+    dataDICT['im_size'].append(im_size)
+    dataDICT['dom_width'].append(dom_width)
+    dataDICT['src_to_rotc'].append(src_to_rotc)
+    dataDICT['src_to_det'].append(src_to_det)
+    dataDICT['det_width'].append(det_width)
+    
+    return (dataDICT)
\ No newline at end of file
-- 
cgit v1.2.3