Source code for hnccorr.utils

# Copyright © 2017. Regents of the University of California (Regents). All Rights
# Reserved.
#
# Permission to use, copy, modify, and distribute this software and its documentation
# for educational, research, and not-for-profit purposes, without fee and without a
# signed licensing agreement, is hereby granted, provided that the above copyright
# notice, this paragraph and the following two paragraphs appear in all copies,
# modifications, and distributions. Contact The Office of Technology Licensing, UC
# Berkeley, 2150 Shattuck Avenue, Suite 510, Berkeley, CA 94720-1620, (510) 643-7201,
# for commercial licensing opportunities. Created by Quico Spaen, Roberto Asín-Achá,
# and Dorit S. Hochbaum, Department of Industrial Engineering and Operations Research,
# University of California, Berkeley.
#
# IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL,
# INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE
# OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS BEEN ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
# REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
# SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED HEREUNDER IS PROVIDED "AS
# IS". REGENTS HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
# ENHANCEMENTS, OR MODIFICATIONS.
"""Helper functions for HNCcorr."""

import glob
import os
from itertools import product


[docs]def add_offset_set_coordinates(iterable, offset): """Adds a fixed offset to all pixel coordinates in a set. Args: coordinates (set): Set of pixel coordinates. Each pixel coordinate is a tuple. offset (tuple): Offset to add to each pixel coordinate. Tuple should be of the same length as the tuples in `coordinates`. Returns: set: Set of updated coordinates. Example: .. code-block:: python >>> add_offset_set_coordinates({(5, 2), (4, 7)}, (2, 2)) {(7, 4), (6, 9)} """ return set(add_offset_to_coordinate(c, offset) for c in iterable)
[docs]def add_offset_to_coordinate(coordinate, offset): """Offsets pixel coordinate by another coordinate. Args: coordinate (tuple): Pixel coordinate to offset. offset (tuple): Offset to add to coordinate. Must be of the same length. Example: .. code-block:: python >>> add_offset_to_coordinate((5, 3, 4), (1, -1, 3)) (6, 2, 7) """ return tuple(a + b for a, b in zip(coordinate, offset))
[docs]def add_time_index(index): """Inserts a full slice as the first dimension of an index for e.g. numpy. Args: index (tuple): Index for e.g. numpy array. Returns: tuple: New index with additional dimension. Example: .. code-block:: python >>> add_time_index((5, :3)) (:, 5, :3) """ return (slice(None, None),) + index
[docs]def list_images(folder): """Lists and sorts tiff images in a folder. Images are sorted in ascending order based on filename. Caution: Filenames are sorted as strings. Note that ``200.tiff`` is sorted before ``5.tiff``. Pad image filenames with zeros to prevent this: ``005.tiff``. Args: folder: folder containing tiff image files. Returns: list: Sorted list of paths of tiff files in folder. """ files_tif = glob.glob(os.path.join(folder, "*.tiff")) return sorted(files_tif)
[docs]def four_neighborhood(num_dims): """Returns all neighboring pixels of zero that differ in at most one coordinate. Includes zero coordinate itself. Args: num_dims (int): Number of dimensions for the coordinates. Returns: set: Set of pixel coordinates. Example: .. code-block:: python >>> four_neighborhood(1) [(-1,), (0,), (1,)] >>> eight_neighborhood(2) [(-1, 0), (0, -1), (0, 0), (0, 1), (1, 0)] """ neighbors = [] for dim, change in product(range(num_dims), (-1, 0, 1)): shift = [0] * num_dims shift[dim] = change neighbors.append(tuple(shift)) return set(neighbors)
[docs]def eight_neighborhood(num_dims, max_radius): """Returns all coordinates within a given L-infinity distance of zero. Includes zero coordinate itself. Args: num_dims (int): Number of dimensions for the coordinates. max_radius (int): Largest L-infinity distance allowed. Returns: set: Set of pixel coordinates. Example: .. code-block:: python >>> eight_neighborhood(1, 1) [(-1,), (0,), (1,)] >>> eight_neighborhood(2, 1) [ (-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 0), (0, 1), (1, -1), (1, 0), (1, 1) ] """ return set(product(range(-max_radius, max_radius + 1), repeat=num_dims))
[docs]def generate_pixels(shape): """Enumerate all pixel coordinates for a movie/patch. Args: shape (tuple): Shape of movie. Number of pixels in each dimension. Returns: Iterator: Iterates over all pixels. Example: .. code-block:: python >>> generate_pixels((2,2)) [(0, 0), (0, 1), (1, 0), (1, 1)] """ return product(*[range(n) for n in shape])