Source code for sas.sascalc.dataloader.readers.tiff_reader
#####################################################################
#This software was developed by the University of Tennessee as part of the
#Distributed Data Analysis of Neutron Scattering Experiments (DANSE)
#project funded by the US National Science Foundation.
#See the license text in license.txt
#copyright 2008, University of Tennessee
######################################################################
"""
Image reader. Untested.
"""
#TODO: load and check data and orientation of the image (needs rendering)
import math
import logging
import os
import numpy as np
from sas.sascalc.dataloader.data_info import Data2D
from sas.sascalc.dataloader.manipulations import reader2D_converter
logger = logging.getLogger(__name__)
[docs]class Reader:
"""
Example data manipulation
"""
## File type
type_name = "TIF"
## Wildcards
type = ["TIF files (*.tif)|*.tif",
"TIFF files (*.tiff)|*.tiff",
]
## Extension
ext = ['.tif', '.tiff']
[docs] def read(self, filename=None):
"""
Open and read the data in a file
:param file: path of the file
"""
try:
import Image
import TiffImagePlugin
Image._initialized=2
except:
msg = "tiff_reader: could not load file. Missing Image module."
raise RuntimeError(msg)
# Instantiate data object
output = Data2D()
output.filename = os.path.basename(filename)
# Read in the image
try:
im = Image.open(filename)
except:
raise RuntimeError("cannot open %s"%(filename))
data = im.getdata()
# Initiazed the output data object
output.data = np.zeros([im.size[0], im.size[1]])
output.err_data = np.zeros([im.size[0], im.size[1]])
output.mask = np.ones([im.size[0], im.size[1]], dtype=bool)
# Initialize
x_vals = []
y_vals = []
# x and y vectors
for i_x in range(im.size[0]):
x_vals.append(i_x)
itot = 0
for i_y in range(im.size[1]):
y_vals.append(i_y)
for val in data:
try:
value = float(val)
except:
logger.error("tiff_reader: had to skip a non-float point")
continue
# Get bin number
if math.fmod(itot, im.size[0]) == 0:
i_x = 0
i_y += 1
else:
i_x += 1
output.data[im.size[1] - 1 - i_y][i_x] = value
itot += 1
output.xbins = im.size[0]
output.ybins = im.size[1]
output.x_bins = x_vals
output.y_bins = y_vals
output.qx_data = np.array(x_vals)
output.qy_data = np.array(y_vals)
output.xmin = 0
output.xmax = im.size[0] - 1
output.ymin = 0
output.ymax = im.size[0] - 1
# Store loading process information
output.meta_data['loader'] = self.type_name
output = reader2D_converter(output)
return output