Source code for pwspy.utility.acquisition

# Copyright 2018-2020 Nick Anthony, Backman Biophotonics Lab, Northwestern University
#
# This file is part of PWSpy.
#
# PWSpy is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# PWSpy is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with PWSpy.  If not, see <https://www.gnu.org/licenses/>.

"""
This package includes functionality for loading experiment information saved by the PWS "Acquisition Sequencer" which is part of the PWS plugin
for Micro-Manager.

Functions
----------
.. autosummary::
   :toctree: generated/

   loadDirectory

Classes
---------
.. autosummary::
   :toctree: generated/

   RuntimeSequenceSettings
   SequenceAcquisition
   SequencerCoordinate
   SequencerCoordinateRange
   SequencerStep
   IterableSequencerStep
   ZStackStep
   TimeStep
   PositionsStep
   ContainerStep

Inheritance
-------------
.. inheritance-diagram:: TreeItem SequencerStep IterableSequencerStep ZStackStep TimeStep PositionsStep ContainerStep RuntimeSequenceSettings SequenceAcquisition SequencerCoordinate SequencerCoordinateRange
    :parts: 1

"""

import typing as t_
import warnings

from pwspy.utility.acquisition.steps import RuntimeSequenceSettings

from .steps import SequencerStep, IterableSequencerStep, ZStackStep, TimeStep, PositionsStep, ContainerStep
from ._treeItem import TreeItem
from .sequencerCoordinate import SequenceAcquisition, SequencerCoordinate, SequencerCoordinateRange
import os
import pwspy.dataTypes as pwsdt
from glob import glob


[docs]def loadDirectory(directory: os.PathLike) -> t_.Tuple[SequencerStep, t_.List[SequenceAcquisition]]: """ If `directory` contains a dataset acquired with the acquisition sequencer then this function will return a python object representing the sequence settings and a list of references to the acquisitions that are part of the sequence. Args: directory: The file path to the dataset directory. Returns: A tuple containing: The Root `SequencerStep` of the acquisition sequence. A list of `SequenceAcquisition` objects belonging to the sequence. """ rtSeq = RuntimeSequenceSettings.fromJsonFile(directory) if rtSeq.uuid is None: warnings.warn("Old acquisition sequence file must have been loaded. No UUID found. Acquisitions returned by this function may not actually belong to this sequence.") files = glob(os.path.join(directory, '**', 'Cell[0-9]*'), recursive=True) acqs = [] for f in files: try: acqs.append(SequenceAcquisition(pwsdt.Acquisition(f))) except FileNotFoundError: pass # There may be "Cell" folders that don't contain a sequencer coordinate. acqs = [acq for acq in acqs if acq.sequencerCoordinate.uuid == rtSeq.uuid] # Filter out acquisitions that don't have a matching UUID to the sequence file. # TODO verify that all expected acquisitions were found. return rtSeq.rootStep, acqs