Skip to main content

Tiff reader for ScanImage BigTiff files.

Reason this release was yanked:

revert version

Project description

scanreader

Python TIFF Stack Reader for ScanImage 5 scans (including multiROI).

We treat a scan as a collection of recording fields: rectangular planes at a given x, y, z position in the scan recorded in a number of channels during a preset amount of time. All fields have the same number of channels (or z-planes) and number of frames/timesteps.

Installation

Install the latest version with pip

pip3 install git+https://github.com/MillerBrainObservatory/scanreader.git

Usage

import scanreader

scan = scanreader.read_scan('/data/my_scan_*.tif')

print(scan.version)
print(scan.num_frames)
print(scan.num_channels)
print(scan.num_fields)

x = scan[:]  # 5D array [ROI, X, Y, Z, T]
y = scan[:, :, :, 0:4, -1000:]  # last 1000 frames of first 4 planes
z = scan[1]  # 4-d array: the second ROI (over all z-plane and time)

scan = scanreader.read_scan('/data/my_scan_*.tif', dtype=np.float32, join_contiguous=True)

Scan object indexes can be:

  • integers
  • slice objects (:)
  • lists/tuples/arrays of integers

No boolean indexing is yet supported.

Details on data loading (for future developers)

Preamble

Matlab stores data column by column ("Fortran order"), while NumPy by default stores them row by row ("C order"). This doesn't affect indexing, but may affect performance. For example, in Matlab efficient loop will be over columns (e.g. for n = 1:10 a(:, n) end), while in NumPy it's preferable to iterate over rows (e.g. for n in range(10): a[n, :] -- note n in the first position, not the last).

As of this version, scanreader relies on tifffile to read the underlying tiff files.

Reading a scan happens in three stages:

  1. scan = scanreader.read_scan(filename) will create a list of tifffile.TiffFiles, one per each tiff file in the scan. This entails opening a file handle and reading the tags of the first page of each; tags for the rest of pages are ignored (they have the same info).
  2. scan.num_frames, scan.shape or another operation that requires the number of frames in the scan---which includes the first stage of any data loading operation---will need the number of pages in each tiff file. tifffile was designed for files with pages of varying shapes so it iterates over each page looking for its offset (number of bytes from the start of the file until the very first byte of the page), which it saves to use for reading. After this operation, it knows the number of pages per file.
  3. Once the file has been opened and the offset to each page has been calculated we can load the actual data. We load each page sequentially and take care of reformatting them to match the desired output.

This reader and documentation are based off of is based on a previous version developed by atlab.

Some of the older scans have been removed for general cleanliness. These can be reimplemented by cherry-picking the commit. See documentation on git reflog to find the commits you want and git cherry-pick to apply changes that were introduced by those commits.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

scanreader-0.6.0.tar.gz (26.1 kB view details)

Uploaded Source

Built Distribution

scanreader-0.6.0-py3-none-any.whl (25.7 kB view details)

Uploaded Python 3

File details

Details for the file scanreader-0.6.0.tar.gz.

File metadata

  • Download URL: scanreader-0.6.0.tar.gz
  • Upload date:
  • Size: 26.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.8

File hashes

Hashes for scanreader-0.6.0.tar.gz
Algorithm Hash digest
SHA256 8c51d255a2d4cebf694acfa6dfdf0720b421500ed7d1ecae7b86ecc1cb365b33
MD5 6b5856c67d7f734940fff413db29dc6d
BLAKE2b-256 6a702d1d48f05c09eaba99f7c85ccb29d35e2a62297530469e621bf0246788dd

See more details on using hashes here.

File details

Details for the file scanreader-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: scanreader-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 25.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.8

File hashes

Hashes for scanreader-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 67e933413383131e5663ded5acca7a7be5d0da4182b19a38f0e530aed0657e40
MD5 43fc45e7085d2fc6e9d2d5d1abdd1550
BLAKE2b-256 10d385277a3ab3769cf072ebeb11e992a799d62fc4cfcbb082e71f52a3b97a44

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page