Easily parse/access a subset of data from a <=6D folder of TIFFs
Project description
tifffolder
Lazily read a subset of data from a folder of images using numpy slicing syntax. Includes simplified but robust file pattern matching syntax and multithreaded file reading.
Install with pip
$ pip install tifffolder
Install with conda
$ conda install -c talley tifffolder
Usage
>>> from tifffolder import TiffFolder
>>> tf = TiffFolder('/folder/of/tiffs', patterns={'t': '_stack{d4}', 'c': '_ch{d1}'})
# get dataset shape and order of axes
>>> tf.shape
(10, 2, 65, 184, 157) # (nt, nc, nz, ny, nx)
>>> tf.axes
'tczyx'
# example:
# get the last 10 Z planes from every other timepoint,
# in the first channel cropping to the middle half in Y
>>> data = tf[::2, 0, -10:, tf.shape[-2] * 1 // 4 : tf.shape[-2] * 3 // 4 ]
>>> data.shape
(5, 10, 92, 157) # (nt, nz, ny, nx)
# Can also be used as an iterator/generator for lazily reading data
>>> for timepoint in tf:
>>> do_something(timepoint)
# or just load the whole thing
>>> alldata = tf.asarray()
>>> alldata.shape == tf.shape
True
# Or just to select filenames along certain axes:
>>> tf.select_filenames(t=range(1,10,2), c=0)
['./test_ch0_stack0001_488nm.tif',
'./test_ch0_stack0003_488nm.tif',
'./test_ch0_stack0005_488nm.tif',
'./test_ch0_stack0007_488nm.tif',
'./test_ch0_stack0009_488nm.tif']
Specifying filename patterns:
tifffolder converts a simplified regex syntax into relatively robust lookahead regex that will match patterns in any order in the filename or fail elegantly.
The TiffFolder class accepts a patterns
parameter (dict or list of two-tuples). For each (key, value) in the patterns
dict:
- key = the axes name (
'x', 'y', 'z', 'c', 't', 's'
are recognized) - value = the simplified regex where:
- things in brackets
{}
will be captured - things outside of brackest will be required to match
{d}
means match any number of digits{D}
means match any number of NON-digits{}
means match any alphanumeric character (excluding underscore){d2}
will match exactly two digits
- things in brackets
For example:
>>> patterns = {
'rel': '_{d7}msec',
'w': '_{d3}nm',
't': '_stack{d4}',
'c': '_ch{d1}',
'cam': 'Cam{D1}'
}
>>> tf = TiffFolder('/folder/of/tiffs', patterns)
>>> tf._parse_filename('cell1_ch0_stack0009_488nm_0034829msec.tif')
{'rel': 34829, 'w': 488, 't': 9, 'c': 0, 'cam': None}
>>> tf._parse_filename('cell1_CamA_ch2_stack0001_560nm_0034829msec.tif')
{'rel': 34829, 'w': 560, 't': 1, 'c': 2, 'cam': 'A'}
>>> tifffolder.build_regex('cam', 'Cam{}')
'(?=.*Cam(?P<cam>[a-zA-Z0-9]+))?'
>>> tifffolder.build_regex('c', '_ch{d1}')
'(?=.*_ch(?P<c>\\d{1}))?'
todo
- check axis reordering
- check z planes across files
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
tifffolder-0.1.5.tar.gz
(8.8 kB
view details)
File details
Details for the file tifffolder-0.1.5.tar.gz
.
File metadata
- Download URL: tifffolder-0.1.5.tar.gz
- Upload date:
- Size: 8.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8c068e6bb3de6df35e1487e3be641bfbb85cd1ae7839aaac82622894b76f1ced |
|
MD5 | dd17c62a9093e4d90e3a51c59d7d18e3 |
|
BLAKE2b-256 | b6754ac09a3c15acea7ec5c84a1fd8eb0948272dcc73c04f29457779be37ef3c |