Skip to content

Latest commit

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Imaging Pipeline

Overview

This pipeline reads microscopy image data from disk, stores it in Zarr format, and processes it. The pipeline supports two experiment types:

  • A time-lapse experiment. This is one acquisition folder with one frame subfolder for each time point.
  • An ISS experiment. This is a parent folder that contains many round folders. Each round folder is one acquisition folder.

Installation

I have two install options: the first is the lightweight metadata handler and file transfer pipeline, which is the "core" pipeline. If you need segmentation of your images, Cellpose is available for segmentation using the .[segmentation] option during install.

# core onlypipinstall .
# with segmentation supportpipinstall".[segmentation]"# editable install for developmentpipinstall-e".[segmentation]"

Folder Structure

Single Acquisition Folder

A single acquisition folder has this structure:

<acqdir>/
0/, 1/, 2/, ... <- frame subfolders (T dimension)
acquisition.yaml
coordinates.csv

Each numbered subfolder holds the images for one time point. The file acquisition.yaml holds acquisition metadata. The file coordinates.csv holds well and position data.

ISS Experiment Folder

An ISS experiment folder has this structure:

<expdir>/
Round_1_<timestamp>/ <- one acquisition folder
Round_2_<timestamp>/ <- one acquisition folder
...

Each round folder is a single acquisition folder, as described above. In an ISS experiment, each round has exactly one frame subfolder. The pipeline treats each round as one time point.

Metadata Classes

AcquisitionMetadata

AcquisitionMetadata reads one acquisition folder. It reads the well list, the position count, the Z count, and the channel list. It also finds the image size.

Use this class for a single time-lapse experiment through the TimeLapseMetadata subclass.

TimeLapseMetadata

TimeLapseMetadata extends AcquisitionMetadata. It adds a Zarr file name based on the acquisition start time.

Create a TimeLapseMetadata object with one call:

meta=TimeLapseMetadata(expdir)

ISSMetadata

ISSMetadata reads an ISS experiment folder. It creates one AcquisitionMetadata object for each round folder. It sorts the rounds by acquisition start time. It checks that all rounds share the same wells, channels, and Z count. If a round does not match, ISSMetadata raises a ValueError.

Create an ISSMetadata object with one call:

meta=ISSMetadata(expdir)

Common Interface

Both TimeLapseMetadata and ISSMetadata expose the same attributes and methods. This lets the pipeline functions work with either class.

Attributes:

  • wells: list of well names
  • T, P, Z, C, H, W: array dimensions
  • zarrfile: output Zarr file name
  • zarr_attrs: metadata to store in the Zarr file

Methods:

  • image_path(well, T, P, Z, C): return the file path for one image
  • path_dataframe(): return a table of every image coordinate and path
  • _size(): return the shape (T, P, Z, C, H, W)

Pipeline Functions

make_zarr(meta)

make_zarr builds a Zarr store from a metadata object. It creates one group for each well. Each group holds an images array. The function reads each TIFF file and writes it into the array.

If an expected image file does not exist, make_zarr raises a FileNotFoundError.

make_zarr(meta)

register_plate(meta)

register_plate finds the frame-to-frame jitter for each well and position. It uses the nuclear channel to estimate the shift. It stores the shifts in an offsets array in the Zarr store.

register_plate(meta)

calculate_shift(movie, nuclear_channel, channel_axis=1, time_axis=0, reference="first")

calculate_shift estimates the pixel shift between frames in a movie. It uses phase cross-correlation on the nuclear channel.

Set reference to "first" to compare each frame to the first frame. Set reference to "previous" to compare each frame to the frame before it. Use "first" for slow drift. Use "previous" for large cumulative drift.

The function returns an array of shape (T, n_spatial_dims).

crop_to_common_overlap(frames, offsets)

crop_to_common_overlap crops a stack of frames to the area that is in view at every time point. It uses the offsets from calculate_shift.

If the offsets are larger than the frame, the function raises a ValueError.

segment_plate(meta)

segment_plate runs Cellpose on each well, position, and time point. It creates two masks for each image: a nuclear mask and a cytoplasm mask. It stores the masks in a masks array in the Zarr store.

segment_plate(meta)

voronoi_mask(centroids, shape)

voronoi_mask builds a Voronoi label mask from a list of centroids. For each pixel, the function finds the nearest centroid. The function returns an array of centroid indices with shape shape.

Typical Workflow

  1. Create a metadata object for your experiment.
  2. Call make_zarr(meta) to build the Zarr store from the source images.
  3. Call register_plate(meta) to compute frame alignment offsets.
  4. Call segment_plate(meta) to compute nuclear and cytoplasm masks.
  5. Use crop_to_common_overlap and voronoi_mask as needed for downstream analysis.

Example for a time-lapse experiment:

meta=TimeLapseMetadata(expdir)
make_zarr(meta)
register_plate(meta)
segment_plate(meta)

Example for an ISS experiment:

meta=ISSMetadata(expdir)
make_zarr(meta)
register_plate(meta)
segment_plate(meta)

Dependencies

  • numpy
  • scikit-image
  • pyyaml
  • zarr
  • tifffile
  • pandas
  • tqdm
  • cellpose
  • scipy
  • matplotlib

About

for parsing data from squid+

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - samholtzen/squidparse: for parsing data from squid+ · GitHub
Skip to content

Latest commit

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Imaging Pipeline

Overview

This pipeline reads microscopy image data from disk, stores it in Zarr format, and processes it. The pipeline supports two experiment types:

  • A time-lapse experiment. This is one acquisition folder with one frame subfolder for each time point.
  • An ISS experiment. This is a parent folder that contains many round folders. Each round folder is one acquisition folder.

Installation

I have two install options: the first is the lightweight metadata handler and file transfer pipeline, which is the "core" pipeline. If you need segmentation of your images, Cellpose is available for segmentation using the .[segmentation] option during install.

# core onlypipinstall .
# with segmentation supportpipinstall".[segmentation]"# editable install for developmentpipinstall-e".[segmentation]"

Folder Structure

Single Acquisition Folder

A single acquisition folder has this structure:

<acqdir>/
0/, 1/, 2/, ... <- frame subfolders (T dimension)
acquisition.yaml
coordinates.csv

Each numbered subfolder holds the images for one time point. The file acquisition.yaml holds acquisition metadata. The file coordinates.csv holds well and position data.

ISS Experiment Folder

An ISS experiment folder has this structure:

<expdir>/
Round_1_<timestamp>/ <- one acquisition folder
Round_2_<timestamp>/ <- one acquisition folder
...

Each round folder is a single acquisition folder, as described above. In an ISS experiment, each round has exactly one frame subfolder. The pipeline treats each round as one time point.

Metadata Classes

AcquisitionMetadata

AcquisitionMetadata reads one acquisition folder. It reads the well list, the position count, the Z count, and the channel list. It also finds the image size.

Use this class for a single time-lapse experiment through the TimeLapseMetadata subclass.

TimeLapseMetadata

TimeLapseMetadata extends AcquisitionMetadata. It adds a Zarr file name based on the acquisition start time.

Create a TimeLapseMetadata object with one call:

meta=TimeLapseMetadata(expdir)

ISSMetadata

ISSMetadata reads an ISS experiment folder. It creates one AcquisitionMetadata object for each round folder. It sorts the rounds by acquisition start time. It checks that all rounds share the same wells, channels, and Z count. If a round does not match, ISSMetadata raises a ValueError.

Create an ISSMetadata object with one call:

meta=ISSMetadata(expdir)

Common Interface

Both TimeLapseMetadata and ISSMetadata expose the same attributes and methods. This lets the pipeline functions work with either class.

Attributes:

  • wells: list of well names
  • T, P, Z, C, H, W: array dimensions
  • zarrfile: output Zarr file name
  • zarr_attrs: metadata to store in the Zarr file

Methods:

  • image_path(well, T, P, Z, C): return the file path for one image
  • path_dataframe(): return a table of every image coordinate and path
  • _size(): return the shape (T, P, Z, C, H, W)

Pipeline Functions

make_zarr(meta)

make_zarr builds a Zarr store from a metadata object. It creates one group for each well. Each group holds an images array. The function reads each TIFF file and writes it into the array.

If an expected image file does not exist, make_zarr raises a FileNotFoundError.

make_zarr(meta)

register_plate(meta)

register_plate finds the frame-to-frame jitter for each well and position. It uses the nuclear channel to estimate the shift. It stores the shifts in an offsets array in the Zarr store.

register_plate(meta)

calculate_shift(movie, nuclear_channel, channel_axis=1, time_axis=0, reference="first")

calculate_shift estimates the pixel shift between frames in a movie. It uses phase cross-correlation on the nuclear channel.

Set reference to "first" to compare each frame to the first frame. Set reference to "previous" to compare each frame to the frame before it. Use "first" for slow drift. Use "previous" for large cumulative drift.

The function returns an array of shape (T, n_spatial_dims).

crop_to_common_overlap(frames, offsets)

crop_to_common_overlap crops a stack of frames to the area that is in view at every time point. It uses the offsets from calculate_shift.

If the offsets are larger than the frame, the function raises a ValueError.

segment_plate(meta)

segment_plate runs Cellpose on each well, position, and time point. It creates two masks for each image: a nuclear mask and a cytoplasm mask. It stores the masks in a masks array in the Zarr store.

segment_plate(meta)

voronoi_mask(centroids, shape)

voronoi_mask builds a Voronoi label mask from a list of centroids. For each pixel, the function finds the nearest centroid. The function returns an array of centroid indices with shape shape.

Typical Workflow

  1. Create a metadata object for your experiment.
  2. Call make_zarr(meta) to build the Zarr store from the source images.
  3. Call register_plate(meta) to compute frame alignment offsets.
  4. Call segment_plate(meta) to compute nuclear and cytoplasm masks.
  5. Use crop_to_common_overlap and voronoi_mask as needed for downstream analysis.

Example for a time-lapse experiment:

meta=TimeLapseMetadata(expdir)
make_zarr(meta)
register_plate(meta)
segment_plate(meta)

Example for an ISS experiment:

meta=ISSMetadata(expdir)
make_zarr(meta)
register_plate(meta)
segment_plate(meta)

Dependencies

  • numpy
  • scikit-image
  • pyyaml
  • zarr
  • tifffile
  • pandas
  • tqdm
  • cellpose
  • scipy
  • matplotlib

About

for parsing data from squid+

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - samholtzen/squidparse: for parsing data from squid+ · GitHub
Skip to content

Latest commit

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Imaging Pipeline

Overview

This pipeline reads microscopy image data from disk, stores it in Zarr format, and processes it. The pipeline supports two experiment types:

  • A time-lapse experiment. This is one acquisition folder with one frame subfolder for each time point.
  • An ISS experiment. This is a parent folder that contains many round folders. Each round folder is one acquisition folder.

Installation

I have two install options: the first is the lightweight metadata handler and file transfer pipeline, which is the "core" pipeline. If you need segmentation of your images, Cellpose is available for segmentation using the .[segmentation] option during install.

# core onlypipinstall .
# with segmentation supportpipinstall".[segmentation]"# editable install for developmentpipinstall-e".[segmentation]"

Folder Structure

Single Acquisition Folder

A single acquisition folder has this structure:

<acqdir>/
0/, 1/, 2/, ... <- frame subfolders (T dimension)
acquisition.yaml
coordinates.csv

Each numbered subfolder holds the images for one time point. The file acquisition.yaml holds acquisition metadata. The file coordinates.csv holds well and position data.

ISS Experiment Folder

An ISS experiment folder has this structure:

<expdir>/
Round_1_<timestamp>/ <- one acquisition folder
Round_2_<timestamp>/ <- one acquisition folder
...

Each round folder is a single acquisition folder, as described above. In an ISS experiment, each round has exactly one frame subfolder. The pipeline treats each round as one time point.

Metadata Classes

AcquisitionMetadata

AcquisitionMetadata reads one acquisition folder. It reads the well list, the position count, the Z count, and the channel list. It also finds the image size.

Use this class for a single time-lapse experiment through the TimeLapseMetadata subclass.

TimeLapseMetadata

TimeLapseMetadata extends AcquisitionMetadata. It adds a Zarr file name based on the acquisition start time.

Create a TimeLapseMetadata object with one call:

meta=TimeLapseMetadata(expdir)

ISSMetadata

ISSMetadata reads an ISS experiment folder. It creates one AcquisitionMetadata object for each round folder. It sorts the rounds by acquisition start time. It checks that all rounds share the same wells, channels, and Z count. If a round does not match, ISSMetadata raises a ValueError.

Create an ISSMetadata object with one call:

meta=ISSMetadata(expdir)

Common Interface

Both TimeLapseMetadata and ISSMetadata expose the same attributes and methods. This lets the pipeline functions work with either class.

Attributes:

  • wells: list of well names
  • T, P, Z, C, H, W: array dimensions
  • zarrfile: output Zarr file name
  • zarr_attrs: metadata to store in the Zarr file

Methods:

  • image_path(well, T, P, Z, C): return the file path for one image
  • path_dataframe(): return a table of every image coordinate and path
  • _size(): return the shape (T, P, Z, C, H, W)

Pipeline Functions

make_zarr(meta)

make_zarr builds a Zarr store from a metadata object. It creates one group for each well. Each group holds an images array. The function reads each TIFF file and writes it into the array.

If an expected image file does not exist, make_zarr raises a FileNotFoundError.

make_zarr(meta)

register_plate(meta)

register_plate finds the frame-to-frame jitter for each well and position. It uses the nuclear channel to estimate the shift. It stores the shifts in an offsets array in the Zarr store.

register_plate(meta)

calculate_shift(movie, nuclear_channel, channel_axis=1, time_axis=0, reference="first")

calculate_shift estimates the pixel shift between frames in a movie. It uses phase cross-correlation on the nuclear channel.

Set reference to "first" to compare each frame to the first frame. Set reference to "previous" to compare each frame to the frame before it. Use "first" for slow drift. Use "previous" for large cumulative drift.

The function returns an array of shape (T, n_spatial_dims).

crop_to_common_overlap(frames, offsets)

crop_to_common_overlap crops a stack of frames to the area that is in view at every time point. It uses the offsets from calculate_shift.

If the offsets are larger than the frame, the function raises a ValueError.

segment_plate(meta)

segment_plate runs Cellpose on each well, position, and time point. It creates two masks for each image: a nuclear mask and a cytoplasm mask. It stores the masks in a masks array in the Zarr store.

segment_plate(meta)

voronoi_mask(centroids, shape)

voronoi_mask builds a Voronoi label mask from a list of centroids. For each pixel, the function finds the nearest centroid. The function returns an array of centroid indices with shape shape.

Typical Workflow

  1. Create a metadata object for your experiment.
  2. Call make_zarr(meta) to build the Zarr store from the source images.
  3. Call register_plate(meta) to compute frame alignment offsets.
  4. Call segment_plate(meta) to compute nuclear and cytoplasm masks.
  5. Use crop_to_common_overlap and voronoi_mask as needed for downstream analysis.

Example for a time-lapse experiment:

meta=TimeLapseMetadata(expdir)
make_zarr(meta)
register_plate(meta)
segment_plate(meta)

Example for an ISS experiment:

meta=ISSMetadata(expdir)
make_zarr(meta)
register_plate(meta)
segment_plate(meta)

Dependencies

  • numpy
  • scikit-image
  • pyyaml
  • zarr
  • tifffile
  • pandas
  • tqdm
  • cellpose
  • scipy
  • matplotlib

About

for parsing data from squid+

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - samholtzen/squidparse: for parsing data from squid+ · GitHub
Skip to content

Latest commit

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Imaging Pipeline

Overview

This pipeline reads microscopy image data from disk, stores it in Zarr format, and processes it. The pipeline supports two experiment types:

  • A time-lapse experiment. This is one acquisition folder with one frame subfolder for each time point.
  • An ISS experiment. This is a parent folder that contains many round folders. Each round folder is one acquisition folder.

Installation

I have two install options: the first is the lightweight metadata handler and file transfer pipeline, which is the "core" pipeline. If you need segmentation of your images, Cellpose is available for segmentation using the .[segmentation] option during install.

# core onlypipinstall .
# with segmentation supportpipinstall".[segmentation]"# editable install for developmentpipinstall-e".[segmentation]"

Folder Structure

Single Acquisition Folder

A single acquisition folder has this structure:

<acqdir>/
0/, 1/, 2/, ... <- frame subfolders (T dimension)
acquisition.yaml
coordinates.csv

Each numbered subfolder holds the images for one time point. The file acquisition.yaml holds acquisition metadata. The file coordinates.csv holds well and position data.

ISS Experiment Folder

An ISS experiment folder has this structure:

<expdir>/
Round_1_<timestamp>/ <- one acquisition folder
Round_2_<timestamp>/ <- one acquisition folder
...

Each round folder is a single acquisition folder, as described above. In an ISS experiment, each round has exactly one frame subfolder. The pipeline treats each round as one time point.

Metadata Classes

AcquisitionMetadata

AcquisitionMetadata reads one acquisition folder. It reads the well list, the position count, the Z count, and the channel list. It also finds the image size.

Use this class for a single time-lapse experiment through the TimeLapseMetadata subclass.

TimeLapseMetadata

TimeLapseMetadata extends AcquisitionMetadata. It adds a Zarr file name based on the acquisition start time.

Create a TimeLapseMetadata object with one call:

meta=TimeLapseMetadata(expdir)

ISSMetadata

ISSMetadata reads an ISS experiment folder. It creates one AcquisitionMetadata object for each round folder. It sorts the rounds by acquisition start time. It checks that all rounds share the same wells, channels, and Z count. If a round does not match, ISSMetadata raises a ValueError.

Create an ISSMetadata object with one call:

meta=ISSMetadata(expdir)

Common Interface

Both TimeLapseMetadata and ISSMetadata expose the same attributes and methods. This lets the pipeline functions work with either class.

Attributes:

  • wells: list of well names
  • T, P, Z, C, H, W: array dimensions
  • zarrfile: output Zarr file name
  • zarr_attrs: metadata to store in the Zarr file

Methods:

  • image_path(well, T, P, Z, C): return the file path for one image
  • path_dataframe(): return a table of every image coordinate and path
  • _size(): return the shape (T, P, Z, C, H, W)

Pipeline Functions

make_zarr(meta)

make_zarr builds a Zarr store from a metadata object. It creates one group for each well. Each group holds an images array. The function reads each TIFF file and writes it into the array.

If an expected image file does not exist, make_zarr raises a FileNotFoundError.

make_zarr(meta)

register_plate(meta)

register_plate finds the frame-to-frame jitter for each well and position. It uses the nuclear channel to estimate the shift. It stores the shifts in an offsets array in the Zarr store.

register_plate(meta)

calculate_shift(movie, nuclear_channel, channel_axis=1, time_axis=0, reference="first")

calculate_shift estimates the pixel shift between frames in a movie. It uses phase cross-correlation on the nuclear channel.

Set reference to "first" to compare each frame to the first frame. Set reference to "previous" to compare each frame to the frame before it. Use "first" for slow drift. Use "previous" for large cumulative drift.

The function returns an array of shape (T, n_spatial_dims).

crop_to_common_overlap(frames, offsets)

crop_to_common_overlap crops a stack of frames to the area that is in view at every time point. It uses the offsets from calculate_shift.

If the offsets are larger than the frame, the function raises a ValueError.

segment_plate(meta)

segment_plate runs Cellpose on each well, position, and time point. It creates two masks for each image: a nuclear mask and a cytoplasm mask. It stores the masks in a masks array in the Zarr store.

segment_plate(meta)

voronoi_mask(centroids, shape)

voronoi_mask builds a Voronoi label mask from a list of centroids. For each pixel, the function finds the nearest centroid. The function returns an array of centroid indices with shape shape.

Typical Workflow

  1. Create a metadata object for your experiment.
  2. Call make_zarr(meta) to build the Zarr store from the source images.
  3. Call register_plate(meta) to compute frame alignment offsets.
  4. Call segment_plate(meta) to compute nuclear and cytoplasm masks.
  5. Use crop_to_common_overlap and voronoi_mask as needed for downstream analysis.

Example for a time-lapse experiment:

meta=TimeLapseMetadata(expdir)
make_zarr(meta)
register_plate(meta)
segment_plate(meta)

Example for an ISS experiment:

meta=ISSMetadata(expdir)
make_zarr(meta)
register_plate(meta)
segment_plate(meta)

Dependencies

  • numpy
  • scikit-image
  • pyyaml
  • zarr
  • tifffile
  • pandas
  • tqdm
  • cellpose
  • scipy
  • matplotlib

About

for parsing data from squid+

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - samholtzen/squidparse: for parsing data from squid+ · GitHub
Skip to content

Latest commit

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Imaging Pipeline

Overview

This pipeline reads microscopy image data from disk, stores it in Zarr format, and processes it. The pipeline supports two experiment types:

  • A time-lapse experiment. This is one acquisition folder with one frame subfolder for each time point.
  • An ISS experiment. This is a parent folder that contains many round folders. Each round folder is one acquisition folder.

Installation

I have two install options: the first is the lightweight metadata handler and file transfer pipeline, which is the "core" pipeline. If you need segmentation of your images, Cellpose is available for segmentation using the .[segmentation] option during install.

# core onlypipinstall .
# with segmentation supportpipinstall".[segmentation]"# editable install for developmentpipinstall-e".[segmentation]"

Folder Structure

Single Acquisition Folder

A single acquisition folder has this structure:

<acqdir>/
0/, 1/, 2/, ... <- frame subfolders (T dimension)
acquisition.yaml
coordinates.csv

Each numbered subfolder holds the images for one time point. The file acquisition.yaml holds acquisition metadata. The file coordinates.csv holds well and position data.

ISS Experiment Folder

An ISS experiment folder has this structure:

<expdir>/
Round_1_<timestamp>/ <- one acquisition folder
Round_2_<timestamp>/ <- one acquisition folder
...

Each round folder is a single acquisition folder, as described above. In an ISS experiment, each round has exactly one frame subfolder. The pipeline treats each round as one time point.

Metadata Classes

AcquisitionMetadata

AcquisitionMetadata reads one acquisition folder. It reads the well list, the position count, the Z count, and the channel list. It also finds the image size.

Use this class for a single time-lapse experiment through the TimeLapseMetadata subclass.

TimeLapseMetadata

TimeLapseMetadata extends AcquisitionMetadata. It adds a Zarr file name based on the acquisition start time.

Create a TimeLapseMetadata object with one call:

meta=TimeLapseMetadata(expdir)

ISSMetadata

ISSMetadata reads an ISS experiment folder. It creates one AcquisitionMetadata object for each round folder. It sorts the rounds by acquisition start time. It checks that all rounds share the same wells, channels, and Z count. If a round does not match, ISSMetadata raises a ValueError.

Create an ISSMetadata object with one call:

meta=ISSMetadata(expdir)

Common Interface

Both TimeLapseMetadata and ISSMetadata expose the same attributes and methods. This lets the pipeline functions work with either class.

Attributes:

  • wells: list of well names
  • T, P, Z, C, H, W: array dimensions
  • zarrfile: output Zarr file name
  • zarr_attrs: metadata to store in the Zarr file

Methods:

  • image_path(well, T, P, Z, C): return the file path for one image
  • path_dataframe(): return a table of every image coordinate and path
  • _size(): return the shape (T, P, Z, C, H, W)

Pipeline Functions

make_zarr(meta)

make_zarr builds a Zarr store from a metadata object. It creates one group for each well. Each group holds an images array. The function reads each TIFF file and writes it into the array.

If an expected image file does not exist, make_zarr raises a FileNotFoundError.

make_zarr(meta)

register_plate(meta)

register_plate finds the frame-to-frame jitter for each well and position. It uses the nuclear channel to estimate the shift. It stores the shifts in an offsets array in the Zarr store.

register_plate(meta)

calculate_shift(movie, nuclear_channel, channel_axis=1, time_axis=0, reference="first")

calculate_shift estimates the pixel shift between frames in a movie. It uses phase cross-correlation on the nuclear channel.

Set reference to "first" to compare each frame to the first frame. Set reference to "previous" to compare each frame to the frame before it. Use "first" for slow drift. Use "previous" for large cumulative drift.

The function returns an array of shape (T, n_spatial_dims).

crop_to_common_overlap(frames, offsets)

crop_to_common_overlap crops a stack of frames to the area that is in view at every time point. It uses the offsets from calculate_shift.

If the offsets are larger than the frame, the function raises a ValueError.

segment_plate(meta)

segment_plate runs Cellpose on each well, position, and time point. It creates two masks for each image: a nuclear mask and a cytoplasm mask. It stores the masks in a masks array in the Zarr store.

segment_plate(meta)

voronoi_mask(centroids, shape)

voronoi_mask builds a Voronoi label mask from a list of centroids. For each pixel, the function finds the nearest centroid. The function returns an array of centroid indices with shape shape.

Typical Workflow

  1. Create a metadata object for your experiment.
  2. Call make_zarr(meta) to build the Zarr store from the source images.
  3. Call register_plate(meta) to compute frame alignment offsets.
  4. Call segment_plate(meta) to compute nuclear and cytoplasm masks.
  5. Use crop_to_common_overlap and voronoi_mask as needed for downstream analysis.

Example for a time-lapse experiment:

meta=TimeLapseMetadata(expdir)
make_zarr(meta)
register_plate(meta)
segment_plate(meta)

Example for an ISS experiment:

meta=ISSMetadata(expdir)
make_zarr(meta)
register_plate(meta)
segment_plate(meta)

Dependencies

  • numpy
  • scikit-image
  • pyyaml
  • zarr
  • tifffile
  • pandas
  • tqdm
  • cellpose
  • scipy
  • matplotlib

About

for parsing data from squid+

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - samholtzen/squidparse: for parsing data from squid+ · GitHub
Skip to content

Latest commit

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Imaging Pipeline

Overview

This pipeline reads microscopy image data from disk, stores it in Zarr format, and processes it. The pipeline supports two experiment types:

  • A time-lapse experiment. This is one acquisition folder with one frame subfolder for each time point.
  • An ISS experiment. This is a parent folder that contains many round folders. Each round folder is one acquisition folder.

Installation

I have two install options: the first is the lightweight metadata handler and file transfer pipeline, which is the "core" pipeline. If you need segmentation of your images, Cellpose is available for segmentation using the .[segmentation] option during install.

# core onlypipinstall .
# with segmentation supportpipinstall".[segmentation]"# editable install for developmentpipinstall-e".[segmentation]"

Folder Structure

Single Acquisition Folder

A single acquisition folder has this structure:

<acqdir>/
0/, 1/, 2/, ... <- frame subfolders (T dimension)
acquisition.yaml
coordinates.csv

Each numbered subfolder holds the images for one time point. The file acquisition.yaml holds acquisition metadata. The file coordinates.csv holds well and position data.

ISS Experiment Folder

An ISS experiment folder has this structure:

<expdir>/
Round_1_<timestamp>/ <- one acquisition folder
Round_2_<timestamp>/ <- one acquisition folder
...

Each round folder is a single acquisition folder, as described above. In an ISS experiment, each round has exactly one frame subfolder. The pipeline treats each round as one time point.

Metadata Classes

AcquisitionMetadata

AcquisitionMetadata reads one acquisition folder. It reads the well list, the position count, the Z count, and the channel list. It also finds the image size.

Use this class for a single time-lapse experiment through the TimeLapseMetadata subclass.

TimeLapseMetadata

TimeLapseMetadata extends AcquisitionMetadata. It adds a Zarr file name based on the acquisition start time.

Create a TimeLapseMetadata object with one call:

meta=TimeLapseMetadata(expdir)

ISSMetadata

ISSMetadata reads an ISS experiment folder. It creates one AcquisitionMetadata object for each round folder. It sorts the rounds by acquisition start time. It checks that all rounds share the same wells, channels, and Z count. If a round does not match, ISSMetadata raises a ValueError.

Create an ISSMetadata object with one call:

meta=ISSMetadata(expdir)

Common Interface

Both TimeLapseMetadata and ISSMetadata expose the same attributes and methods. This lets the pipeline functions work with either class.

Attributes:

  • wells: list of well names
  • T, P, Z, C, H, W: array dimensions
  • zarrfile: output Zarr file name
  • zarr_attrs: metadata to store in the Zarr file

Methods:

  • image_path(well, T, P, Z, C): return the file path for one image
  • path_dataframe(): return a table of every image coordinate and path
  • _size(): return the shape (T, P, Z, C, H, W)

Pipeline Functions

make_zarr(meta)

make_zarr builds a Zarr store from a metadata object. It creates one group for each well. Each group holds an images array. The function reads each TIFF file and writes it into the array.

If an expected image file does not exist, make_zarr raises a FileNotFoundError.

make_zarr(meta)

register_plate(meta)

register_plate finds the frame-to-frame jitter for each well and position. It uses the nuclear channel to estimate the shift. It stores the shifts in an offsets array in the Zarr store.

register_plate(meta)

calculate_shift(movie, nuclear_channel, channel_axis=1, time_axis=0, reference="first")

calculate_shift estimates the pixel shift between frames in a movie. It uses phase cross-correlation on the nuclear channel.

Set reference to "first" to compare each frame to the first frame. Set reference to "previous" to compare each frame to the frame before it. Use "first" for slow drift. Use "previous" for large cumulative drift.

The function returns an array of shape (T, n_spatial_dims).

crop_to_common_overlap(frames, offsets)

crop_to_common_overlap crops a stack of frames to the area that is in view at every time point. It uses the offsets from calculate_shift.

If the offsets are larger than the frame, the function raises a ValueError.

segment_plate(meta)

segment_plate runs Cellpose on each well, position, and time point. It creates two masks for each image: a nuclear mask and a cytoplasm mask. It stores the masks in a masks array in the Zarr store.

segment_plate(meta)

voronoi_mask(centroids, shape)

voronoi_mask builds a Voronoi label mask from a list of centroids. For each pixel, the function finds the nearest centroid. The function returns an array of centroid indices with shape shape.

Typical Workflow

  1. Create a metadata object for your experiment.
  2. Call make_zarr(meta) to build the Zarr store from the source images.
  3. Call register_plate(meta) to compute frame alignment offsets.
  4. Call segment_plate(meta) to compute nuclear and cytoplasm masks.
  5. Use crop_to_common_overlap and voronoi_mask as needed for downstream analysis.

Example for a time-lapse experiment:

meta=TimeLapseMetadata(expdir)
make_zarr(meta)
register_plate(meta)
segment_plate(meta)

Example for an ISS experiment:

meta=ISSMetadata(expdir)
make_zarr(meta)
register_plate(meta)
segment_plate(meta)

Dependencies

  • numpy
  • scikit-image
  • pyyaml
  • zarr
  • tifffile
  • pandas
  • tqdm
  • cellpose
  • scipy
  • matplotlib

About

for parsing data from squid+

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - samholtzen/squidparse: for parsing data from squid+ · GitHub
Skip to content

Latest commit

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Imaging Pipeline

Overview

This pipeline reads microscopy image data from disk, stores it in Zarr format, and processes it. The pipeline supports two experiment types:

  • A time-lapse experiment. This is one acquisition folder with one frame subfolder for each time point.
  • An ISS experiment. This is a parent folder that contains many round folders. Each round folder is one acquisition folder.

Installation

I have two install options: the first is the lightweight metadata handler and file transfer pipeline, which is the "core" pipeline. If you need segmentation of your images, Cellpose is available for segmentation using the .[segmentation] option during install.

# core onlypipinstall .
# with segmentation supportpipinstall".[segmentation]"# editable install for developmentpipinstall-e".[segmentation]"

Folder Structure

Single Acquisition Folder

A single acquisition folder has this structure:

<acqdir>/
0/, 1/, 2/, ... <- frame subfolders (T dimension)
acquisition.yaml
coordinates.csv

Each numbered subfolder holds the images for one time point. The file acquisition.yaml holds acquisition metadata. The file coordinates.csv holds well and position data.

ISS Experiment Folder

An ISS experiment folder has this structure:

<expdir>/
Round_1_<timestamp>/ <- one acquisition folder
Round_2_<timestamp>/ <- one acquisition folder
...

Each round folder is a single acquisition folder, as described above. In an ISS experiment, each round has exactly one frame subfolder. The pipeline treats each round as one time point.

Metadata Classes

AcquisitionMetadata

AcquisitionMetadata reads one acquisition folder. It reads the well list, the position count, the Z count, and the channel list. It also finds the image size.

Use this class for a single time-lapse experiment through the TimeLapseMetadata subclass.

TimeLapseMetadata

TimeLapseMetadata extends AcquisitionMetadata. It adds a Zarr file name based on the acquisition start time.

Create a TimeLapseMetadata object with one call:

meta=TimeLapseMetadata(expdir)

ISSMetadata

ISSMetadata reads an ISS experiment folder. It creates one AcquisitionMetadata object for each round folder. It sorts the rounds by acquisition start time. It checks that all rounds share the same wells, channels, and Z count. If a round does not match, ISSMetadata raises a ValueError.

Create an ISSMetadata object with one call:

meta=ISSMetadata(expdir)

Common Interface

Both TimeLapseMetadata and ISSMetadata expose the same attributes and methods. This lets the pipeline functions work with either class.

Attributes:

  • wells: list of well names
  • T, P, Z, C, H, W: array dimensions
  • zarrfile: output Zarr file name
  • zarr_attrs: metadata to store in the Zarr file

Methods:

  • image_path(well, T, P, Z, C): return the file path for one image
  • path_dataframe(): return a table of every image coordinate and path
  • _size(): return the shape (T, P, Z, C, H, W)

Pipeline Functions

make_zarr(meta)

make_zarr builds a Zarr store from a metadata object. It creates one group for each well. Each group holds an images array. The function reads each TIFF file and writes it into the array.

If an expected image file does not exist, make_zarr raises a FileNotFoundError.

make_zarr(meta)

register_plate(meta)

register_plate finds the frame-to-frame jitter for each well and position. It uses the nuclear channel to estimate the shift. It stores the shifts in an offsets array in the Zarr store.

register_plate(meta)

calculate_shift(movie, nuclear_channel, channel_axis=1, time_axis=0, reference="first")

calculate_shift estimates the pixel shift between frames in a movie. It uses phase cross-correlation on the nuclear channel.

Set reference to "first" to compare each frame to the first frame. Set reference to "previous" to compare each frame to the frame before it. Use "first" for slow drift. Use "previous" for large cumulative drift.

The function returns an array of shape (T, n_spatial_dims).

crop_to_common_overlap(frames, offsets)

crop_to_common_overlap crops a stack of frames to the area that is in view at every time point. It uses the offsets from calculate_shift.

If the offsets are larger than the frame, the function raises a ValueError.

segment_plate(meta)

segment_plate runs Cellpose on each well, position, and time point. It creates two masks for each image: a nuclear mask and a cytoplasm mask. It stores the masks in a masks array in the Zarr store.

segment_plate(meta)

voronoi_mask(centroids, shape)

voronoi_mask builds a Voronoi label mask from a list of centroids. For each pixel, the function finds the nearest centroid. The function returns an array of centroid indices with shape shape.

Typical Workflow

  1. Create a metadata object for your experiment.
  2. Call make_zarr(meta) to build the Zarr store from the source images.
  3. Call register_plate(meta) to compute frame alignment offsets.
  4. Call segment_plate(meta) to compute nuclear and cytoplasm masks.
  5. Use crop_to_common_overlap and voronoi_mask as needed for downstream analysis.

Example for a time-lapse experiment:

meta=TimeLapseMetadata(expdir)
make_zarr(meta)
register_plate(meta)
segment_plate(meta)

Example for an ISS experiment:

meta=ISSMetadata(expdir)
make_zarr(meta)
register_plate(meta)
segment_plate(meta)

Dependencies

  • numpy
  • scikit-image
  • pyyaml
  • zarr
  • tifffile
  • pandas
  • tqdm
  • cellpose
  • scipy
  • matplotlib

About

for parsing data from squid+

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - samholtzen/squidparse: for parsing data from squid+ · GitHub
Skip to content

Latest commit

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Imaging Pipeline

Overview

This pipeline reads microscopy image data from disk, stores it in Zarr format, and processes it. The pipeline supports two experiment types:

  • A time-lapse experiment. This is one acquisition folder with one frame subfolder for each time point.
  • An ISS experiment. This is a parent folder that contains many round folders. Each round folder is one acquisition folder.

Installation

I have two install options: the first is the lightweight metadata handler and file transfer pipeline, which is the "core" pipeline. If you need segmentation of your images, Cellpose is available for segmentation using the .[segmentation] option during install.

# core onlypipinstall .
# with segmentation supportpipinstall".[segmentation]"# editable install for developmentpipinstall-e".[segmentation]"

Folder Structure

Single Acquisition Folder

A single acquisition folder has this structure:

<acqdir>/
0/, 1/, 2/, ... <- frame subfolders (T dimension)
acquisition.yaml
coordinates.csv

Each numbered subfolder holds the images for one time point. The file acquisition.yaml holds acquisition metadata. The file coordinates.csv holds well and position data.

ISS Experiment Folder

An ISS experiment folder has this structure:

<expdir>/
Round_1_<timestamp>/ <- one acquisition folder
Round_2_<timestamp>/ <- one acquisition folder
...

Each round folder is a single acquisition folder, as described above. In an ISS experiment, each round has exactly one frame subfolder. The pipeline treats each round as one time point.

Metadata Classes

AcquisitionMetadata

AcquisitionMetadata reads one acquisition folder. It reads the well list, the position count, the Z count, and the channel list. It also finds the image size.

Use this class for a single time-lapse experiment through the TimeLapseMetadata subclass.

TimeLapseMetadata

TimeLapseMetadata extends AcquisitionMetadata. It adds a Zarr file name based on the acquisition start time.

Create a TimeLapseMetadata object with one call:

meta=TimeLapseMetadata(expdir)

ISSMetadata

ISSMetadata reads an ISS experiment folder. It creates one AcquisitionMetadata object for each round folder. It sorts the rounds by acquisition start time. It checks that all rounds share the same wells, channels, and Z count. If a round does not match, ISSMetadata raises a ValueError.

Create an ISSMetadata object with one call:

meta=ISSMetadata(expdir)

Common Interface

Both TimeLapseMetadata and ISSMetadata expose the same attributes and methods. This lets the pipeline functions work with either class.

Attributes:

  • wells: list of well names
  • T, P, Z, C, H, W: array dimensions
  • zarrfile: output Zarr file name
  • zarr_attrs: metadata to store in the Zarr file

Methods:

  • image_path(well, T, P, Z, C): return the file path for one image
  • path_dataframe(): return a table of every image coordinate and path
  • _size(): return the shape (T, P, Z, C, H, W)

Pipeline Functions

make_zarr(meta)

make_zarr builds a Zarr store from a metadata object. It creates one group for each well. Each group holds an images array. The function reads each TIFF file and writes it into the array.

If an expected image file does not exist, make_zarr raises a FileNotFoundError.

make_zarr(meta)

register_plate(meta)

register_plate finds the frame-to-frame jitter for each well and position. It uses the nuclear channel to estimate the shift. It stores the shifts in an offsets array in the Zarr store.

register_plate(meta)

calculate_shift(movie, nuclear_channel, channel_axis=1, time_axis=0, reference="first")

calculate_shift estimates the pixel shift between frames in a movie. It uses phase cross-correlation on the nuclear channel.

Set reference to "first" to compare each frame to the first frame. Set reference to "previous" to compare each frame to the frame before it. Use "first" for slow drift. Use "previous" for large cumulative drift.

The function returns an array of shape (T, n_spatial_dims).

crop_to_common_overlap(frames, offsets)

crop_to_common_overlap crops a stack of frames to the area that is in view at every time point. It uses the offsets from calculate_shift.

If the offsets are larger than the frame, the function raises a ValueError.

segment_plate(meta)

segment_plate runs Cellpose on each well, position, and time point. It creates two masks for each image: a nuclear mask and a cytoplasm mask. It stores the masks in a masks array in the Zarr store.

segment_plate(meta)

voronoi_mask(centroids, shape)

voronoi_mask builds a Voronoi label mask from a list of centroids. For each pixel, the function finds the nearest centroid. The function returns an array of centroid indices with shape shape.

Typical Workflow

  1. Create a metadata object for your experiment.
  2. Call make_zarr(meta) to build the Zarr store from the source images.
  3. Call register_plate(meta) to compute frame alignment offsets.
  4. Call segment_plate(meta) to compute nuclear and cytoplasm masks.
  5. Use crop_to_common_overlap and voronoi_mask as needed for downstream analysis.

Example for a time-lapse experiment:

meta=TimeLapseMetadata(expdir)
make_zarr(meta)
register_plate(meta)
segment_plate(meta)

Example for an ISS experiment:

meta=ISSMetadata(expdir)
make_zarr(meta)
register_plate(meta)
segment_plate(meta)

Dependencies

  • numpy
  • scikit-image
  • pyyaml
  • zarr
  • tifffile
  • pandas
  • tqdm
  • cellpose
  • scipy
  • matplotlib

About

for parsing data from squid+

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages