Source code for ewoksfluo.tasks.pick_scans
from typing import List, Sequence, Tuple
from ewokscore import Task
[docs]
class PickScans(
Task,
input_names=["filenames", "scan_ranges"],
optional_input_names=["exclude_scans"],
output_names=["scan_uris"],
):
[docs]
def run(self):
filenames: Sequence[str] = self.inputs.filenames
scan_ranges: Sequence[Tuple[int, int]] = self.inputs.scan_ranges
exclude_scans: Sequence[Sequence[int]] = self.get_input_value(
"exclude_scans", []
)
exclude_scans += [[]] * max(0, len(filenames) - len(exclude_scans))
scan_uris: List[str] = []
for filename, scan_range, excluded_scans in zip(
filenames, scan_ranges, exclude_scans
):
scan_min, scan_max = scan_range
excluded_scans = excluded_scans if excluded_scans else []
for scan_number in range(scan_min, scan_max + 1):
if scan_number in excluded_scans:
continue
scan_uris.append(f"{filename}::/{scan_number}.1")
self.outputs.scan_uris = scan_uris