annotate tiling_pyhist.py @ 0:c051e9688932 draft default tip

planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
author goeckslab
date Thu, 03 Jul 2025 23:48:01 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
1 import argparse
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
2 import logging
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
3 import os
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
4 import subprocess
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
5 import sys
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
6 import tempfile
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
7 import zipfile
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
8 from concurrent.futures import ProcessPoolExecutor
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
9 from pathlib import Path
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
10 from typing import Tuple
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
11
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
12 import openslide
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
13 import psutil
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
14 from pyhist import PySlide, TileGenerator
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
15 from src import utility_functions
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
16
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
17 # Configure logging to stdout
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
18 logging.basicConfig(
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
19 stream=sys.stdout,
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
20 format="%(asctime)s - %(levelname)s - %(message)s",
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
21 level=logging.INFO,
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
22 )
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
23
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
24 # Constants
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
25 SEGMENT_BINARY_PATH = "/pyhist/src/graph_segmentation/segment"
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
26 DEFAULT_PATCH_SIZE = 256
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
27 DEFAULT_DOWNSCALE_FACTOR = 8
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
28 TILE_FORMAT = "png"
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
29 MEMORY_PER_WORKER = 1 # GB, estimated memory per worker process
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
30
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
31
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
32 def log_memory_usage() -> None:
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
33 """Log the current memory usage of the process in megabytes."""
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
34 process = psutil.Process(os.getpid())
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
35 mem_info = process.memory_info()
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
36 logging.info(
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
37 "Memory usage: RSS=%.2f MB, VMS=%.2f MB",
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
38 mem_info.rss / 1024 / 1024,
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
39 mem_info.vms / 1024 / 1024
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
40 )
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
41
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
42
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
43 def validate_slide(image_path: Path) -> None:
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
44 """Validate the input image using OpenSlide."""
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
45 try:
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
46 with openslide.OpenSlide(str(image_path)):
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
47 logging.info("Validated input file with OpenSlide: %s", image_path)
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
48 except openslide.OpenSlideError as error:
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
49 raise RuntimeError("Invalid input file: %s", error) from error
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
50
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
51
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
52 def check_segmentation_binary() -> bool:
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
53 """Check if the segmentation binary exists and is executable."""
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
54 if os.path.exists(SEGMENT_BINARY_PATH) and os.access(SEGMENT_BINARY_PATH, os.X_OK):
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
55 logging.info("Segmentation executable found: %s", SEGMENT_BINARY_PATH)
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
56 return True
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
57 logging.warning("Segmentation executable missing, using Otsu method")
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
58 return False
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
59
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
60
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
61 def build_pyhist_config(image_path: Path, output_dir: Path) -> dict:
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
62 """Build the configuration dictionary for PyHIST processing."""
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
63 return {
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
64 "svs": str(image_path),
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
65 "patch_size": DEFAULT_PATCH_SIZE,
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
66 "method": "otsu",
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
67 "thres": 0.1,
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
68 "output_downsample": DEFAULT_DOWNSCALE_FACTOR,
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
69 "mask_downsample": DEFAULT_DOWNSCALE_FACTOR,
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
70 "borders": "0000",
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
71 "corners": "1010",
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
72 "pct_bc": 1,
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
73 "k_const": 1000,
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
74 "minimum_segmentsize": 1000,
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
75 "save_patches": True,
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
76 "save_blank": False,
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
77 "save_nonsquare": False,
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
78 "save_tilecrossed_image": False,
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
79 "save_mask": True,
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
80 "save_edges": False,
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
81 "info": "verbose",
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
82 "output": str(output_dir),
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
83 "format": TILE_FORMAT,
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
84 }
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
85
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
86
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
87 def process_image_with_pyhist(
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
88 image_path: Path, output_dir: Path, original_name: str
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
89 ) -> Path:
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
90 """Process a single image with PyHIST and return the tile directory."""
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
91 logging.info("Processing image: %s", image_path)
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
92 log_memory_usage()
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
93
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
94 # Validate input
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
95 validate_slide(image_path)
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
96
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
97 # Check segmentation method
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
98 check_segmentation_binary()
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
99
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
100 # Prepare PyHIST configuration
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
101 config = build_pyhist_config(image_path, output_dir)
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
102
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
103 # Set logging level based on config
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
104 log_levels = {
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
105 "default": logging.INFO,
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
106 "verbose": logging.DEBUG,
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
107 "silent": logging.CRITICAL,
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
108 }
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
109 logging.getLogger().setLevel(log_levels[config["info"]])
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
110
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
111 # Process the slide
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
112 utility_functions.check_image(config["svs"])
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
113 slide = PySlide(config)
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
114 logging.info("Slide loaded: %s", slide)
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
115
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
116 tile_generator = TileGenerator(slide)
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
117 logging.info("Tile generator initialized: %s", tile_generator)
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
118
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
119 try:
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
120 tile_generator.execute()
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
121 except subprocess.CalledProcessError as error:
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
122 raise RuntimeError("Tile extraction failed: %s", error) from error
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
123
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
124 tile_dir = Path(slide.tile_folder)
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
125 tiles = list(tile_dir.glob(f"*.{TILE_FORMAT}"))
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
126 logging.info("Found %d tiles in %s", len(tiles), tile_dir)
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
127
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
128 utility_functions.clean(slide)
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
129 return tile_dir
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
130
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
131
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
132 def append_tiles_to_zip(
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
133 zip_file: zipfile.ZipFile,
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
134 original_name: str,
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
135 tile_dir: Path
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
136 ) -> None:
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
137 """Append PNG tiles from the tile directory to the ZIP file."""
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
138 original_base = Path(original_name).stem
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
139 tiles = list(tile_dir.glob(f"*.{TILE_FORMAT}"))
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
140
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
141 for tile in tiles:
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
142 tile_number = tile.stem.split("_")[-1]
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
143 arcname = f"{original_base}/{original_base}_{tile_number}.{TILE_FORMAT}"
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
144 zip_file.write(tile, arcname)
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
145
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
146 logging.info("Appended %d tiles from %s", len(tiles), tile_dir)
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
147
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
148
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
149 def process_single_image(task: Tuple[Path, str, Path]) -> Path:
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
150 """Process a single image and return the tile directory."""
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
151 image_path, original_name, output_dir = task
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
152 try:
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
153 tile_dir = process_image_with_pyhist(
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
154 image_path,
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
155 output_dir,
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
156 original_name
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
157 )
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
158 return tile_dir
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
159 except Exception as error:
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
160 logging.error("Error processing %s: %s", image_path, error)
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
161 raise
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
162
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
163
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
164 def get_max_workers() -> int:
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
165 """Determine the maximum number of worker processes based on available resources."""
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
166 cpu_cores = psutil.cpu_count(logical=False) # Physical CPU cores
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
167 available_memory = psutil.virtual_memory().available / (1024 ** 3) # in GB
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
168 max_workers_memory = available_memory // MEMORY_PER_WORKER
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
169 max_workers = min(cpu_cores, max_workers_memory)
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
170 return max(1, int(max_workers))
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
171
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
172
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
173 def parse_arguments() -> argparse.Namespace:
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
174 """Parse command-line arguments."""
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
175 parser = argparse.ArgumentParser(description="Tile extraction for Galaxy")
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
176 parser.add_argument(
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
177 "--input",
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
178 action="append",
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
179 help="Input image paths",
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
180 default=[]
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
181 )
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
182 parser.add_argument(
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
183 "--original_name",
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
184 action="append",
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
185 help="Original file names",
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
186 default=[]
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
187 )
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
188 parser.add_argument(
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
189 "--output_zip",
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
190 required=True,
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
191 help="Output ZIP file path"
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
192 )
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
193 return parser.parse_args()
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
194
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
195
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
196 def main() -> None:
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
197 """Main function to orchestrate tile extraction and ZIP creation with dynamic multiprocessing."""
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
198 # Removed os.chdir("/pyhist") to stay in Galaxy's working directory
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
199 logging.info("Working directory: %s", os.getcwd())
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
200
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
201 args = parse_arguments()
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
202
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
203 if len(args.input) != len(args.original_name):
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
204 raise ValueError("Mismatch between input paths and original names")
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
205
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
206 # Create a temporary directory using tempfile
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
207 with tempfile.TemporaryDirectory(prefix="pyhist_tiles_", dir=os.getcwd()) as temp_dir_path:
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
208 temp_dir = Path(temp_dir_path)
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
209 logging.info("Created temporary directory: %s", temp_dir)
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
210
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
211 # Prepare tasks with unique output directories
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
212 tasks = [
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
213 (Path(image_path), original_name, temp_dir / Path(original_name).stem)
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
214 for image_path, original_name in zip(args.input, args.original_name)
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
215 ]
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
216
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
217 # Determine the number of worker processes based on available resources
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
218 max_workers = get_max_workers()
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
219 logging.info("Using %d worker processes", max_workers)
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
220
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
221 # Process images in parallel
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
222 with ProcessPoolExecutor(max_workers=max_workers) as executor:
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
223 tile_dirs = list(executor.map(process_single_image, tasks))
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
224
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
225 # Create the ZIP file and append all tiles
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
226 with zipfile.ZipFile(args.output_zip, "w", zipfile.ZIP_DEFLATED) as zip_file:
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
227 for (image_path, original_name, output_dir), tile_dir in zip(tasks, tile_dirs):
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
228 append_tiles_to_zip(zip_file, original_name, tile_dir)
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
229
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
230 logging.info("Final ZIP size: %d bytes", Path(args.output_zip).stat().st_size)
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
231 # No need for shutil.rmtree as TemporaryDirectory cleans up automatically
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
232 logging.info("Temporary directory cleaned up")
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
233
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
234
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
235 if __name__ == "__main__":
c051e9688932 planemo upload for repository https://github.com/goeckslab/gleam.git commit 11356473f09dd54d86af28b74bd9ed097d07ca04
goeckslab
parents:
diff changeset
236 main()