Source code for cell_analysis_tools.io.load_sdt

import zipfile

import numpy
import numpy as np
import tifffile
from matplotlib import pyplot as plt
from read_roi import read_roi_zip
from skimage.draw import polygon2mask


[docs] def load_sdt_file(file_path): """ Loads an sdt file and attemps to reshape the data into a cube corresponding to common file shapes. Parameters ----------- file_path : pathlib path Path path to the sdt file Returns ------- image : np.ndarray A 3d-array representation of image. """ with zipfile.ZipFile(file_path) as myzip: z1 = myzip.infolist()[ 0 ] # "data_block" or sdt bruker uses "data_block001" for multi-sdt" with myzip.open(z1.filename) as myfile: data = myfile.read() data = np.frombuffer(data, np.uint16) # format == [channel, x, y, num_timebins] # todo """ figure out how to extract this info from sdt file""" img_1_256_256_256 = 16777216 img_1_512_512_256 = 67108864 img_2_512_512_256 = 134217728 # array size img_3_512_512_256 = 201326592 img_2_256_256_256 = 2 * 256 * 256 * 256 if len(data) == img_2_512_512_256: c, x, y, z = (2, 512, 512, 256) if len(data) == img_1_256_256_256: c, x, y, z = (1, 256, 256, 256) if len(data) == img_1_512_512_256: c, x, y, z = (1, 512, 512, 256) if len(data) == img_3_512_512_256: c, x, y, z = (3, 512, 512, 256) if len(data) == img_2_256_256_256: c, x, y, z = (2, 256, 256, 256) # if c == 1: # ''' order is [XYT] ''' # numpy_image = np.reshape(data, (x, y, z)) # # if debug: tif.imshow(np.sum(image,axis=2)) # return numpy_image # else: """ order is [CXYT] """ numpy_image = np.reshape(data, (c, x, y, z)) return np.float32(numpy_image)
[docs] def load_sdt_data(filepath): """ Loads the data of an SDT file, reshaping the output is necessary as this outputs a 1d array. .. code-block::python An image of length 16777216 should be reshaped to (1, 256,256,256) >>> image = np.reshape(data, (1, 256, 256, 256)) ### 2 Channel An image of length 33554432 should be reshaped to (2 ch, 256,256,256) >>> image = np.reshape(data, (2, 256, 256, 256)) Parameters ---------- filepath : string, pathlib path path to the input image Returns ------- data : np.ndarray 1D array containing all channel and pixel data """ with zipfile.ZipFile(filepath) as myzip: z1 = myzip.infolist()[0] # "data_block" or sdt bruker uses "data_block001" for multi-sdt" with myzip.open(z1.filename) as myfile: data = myfile.read() data = np.frombuffer(data, np.uint16) return data