diff --git a/examples/interactive_spp.py b/examples/interactive_spp.py new file mode 100644 index 0000000..c01d38f --- /dev/null +++ b/examples/interactive_spp.py @@ -0,0 +1,237 @@ +import os +import zarr +import napari +import numpy as np +import copick +import copick_utils +from magicgui import magicgui +from napari.types import ImageData, LabelsData +from pathlib import Path +from cellcanvas_spp.segmentation import superpixels +import pandas as pd +from skimage.measure import regionprops_table +from skimage.morphology import ball, disk +import matplotlib.cm as cm +import matplotlib.colors as colors + +try: + # DATA_DIR = Path("/Users/kharrington/git/cellcanvas/superpixels/notebooks/my_synthetic_data_10439_dataportal.json") + DATA_DIR = Path(os.environ["COPICK_DATA"]) +except KeyError: + raise ValueError( + "Please set the COPICK_DATA environment variable to point to the data directory\n\n" + "$ export COPICK_DATA=" + ) + +@magicgui(auto_call=True, sigma={"widget_type": "FloatSlider", "min": 0, "max": 10}, h_minima={"widget_type": "FloatSlider", "min": 0, "max": 50}) +def _spp_widget(image: ImageData, sigma: float = 4, h_minima: float = 0.001) -> LabelsData: + return superpixels(image, sigma=sigma, h_minima=h_minima) + +_spp_widget.h_minima._widget._readout_widget.setDecimals(4) + +def get_segmentation_array(copick_run, segmentation_name, voxel_spacing=10, is_multilabel=True): + seg = copick_run.get_segmentations(is_multilabel=is_multilabel, name=segmentation_name, voxel_size=voxel_spacing) + if len(seg) == 0: + return None + segmentation = zarr.open(seg[0].zarr().path, mode="r")['0'] + return segmentation[:] + +def segment_superpixels(example_run, voxel_spacing=10, interactive: bool = False): + """ + This function handles the segmentation logic. If the segmentation exists in copick, it will be skipped. + """ + segmentation_name = "superpixelSegmentation" + + # Check if the segmentation already exists + seg = get_segmentation_array(example_run, segmentation_name, voxel_spacing=voxel_spacing, is_multilabel=True) + if seg is not None: + print(f"Segmentation '{segmentation_name}' already exists. Skipping segmentation.") + return seg + + # Proceed with superpixel segmentation if it does not exist + tomo_type = "wbp" + tomogram = example_run.voxel_spacings[0].tomograms[0] + + # Open zarr + z = zarr.open(tomogram.zarr()) + img = z["0"] # Get the highest resolution scale + + if interactive: + img = img[50:100, 180:360, 210:430] # Cropping for interactive mode + + print("Loading image into memory ...") + img = np.asarray(img) # Loading into memory + + print("Segmenting superpixels ...") + segm = superpixels(img, sigma=4, h_minima=0.0025) + print("Done ...") + + # Save segmentation into copick + print("Saving segmentation to copick...") + new_seg = example_run.new_segmentation(voxel_spacing, segmentation_name, session_id="0", is_multilabel=True, user_id="cellcanvasSPP") + segmentation_group = zarr.open_group(new_seg.path, mode="a") + segmentation_group["0"] = segm + print("Segmentation saved.") + + return segm + +def prepare_and_run_segmentation(interactive: bool = False): + """ + Prepare and run the segmentation by fetching data from copick. + """ + config_file = DATA_DIR + root = copick.from_file(config_file) + + run_name = "16193" + example_run = root.get_run(run_name) + voxel_spacing = 10 + + # Check for existing segmentation or run segmentation if not found + seg = segment_superpixels(example_run, voxel_spacing, interactive) + + # Open viewer and add image + viewer = napari.Viewer() + img = np.asarray(zarr.open(example_run.voxel_spacings[0].tomograms[0].zarr())["0"]) # Load image + viewer.add_image(img, name='Image') + + # Compute a comprehensive set of region properties for the segmentation labels + print("Computing region properties for segmentation...") + properties = [ + 'label', + 'area', + 'bbox', + 'bbox_area', + 'centroid', + 'equivalent_diameter', + 'euler_number', + 'extent', + 'filled_area', + 'major_axis_length', + 'max_intensity', + 'mean_intensity', + 'min_intensity', + 'std_intensity', + ] + props = regionprops_table(seg, intensity_image=img, properties=properties) + props_df = pd.DataFrame(props) + print("Comprehensive region properties computed.") + + # Initialize the 'painted_label' column with zeros (unpainted) + props_df['painted_label'] = 0 + + # Add the labels layer with features + label_layer = viewer.add_labels( + seg, + name="Superpixels", + features=props_df, + ) + + # Function to update color mapping based on 'painted_label' + def update_color_mapping(): + painted_labels = label_layer.features['painted_label'].values + labels = label_layer.features['label'].values + + # Identify painted labels (painted_labels != 0) + painted_mask = painted_labels != 0 + painted_labels_filled = painted_labels[painted_mask] + labels_painted = labels[painted_mask] + + if painted_labels_filled.size == 0: + return # No painted labels to update + + unique_painted_labels = np.unique(painted_labels_filled) + + # Create a colormap + norm = colors.Normalize(vmin=unique_painted_labels.min(), vmax=unique_painted_labels.max()) + colormap = cm.ScalarMappable(norm=norm, cmap='viridis') + + # Map 'painted_label' to colors + painted_label_to_color = { + painted_label: colormap.to_rgba(painted_label) + for painted_label in unique_painted_labels + } + + # Map label ids to colors + label_color_mapping = {} + for label_id, painted_label in zip(labels, painted_labels): + if painted_label != 0: + label_color_mapping[label_id] = painted_label_to_color[painted_label] + else: + label_color_mapping[label_id] = (0, 0, 0, 0) # Transparent color for unpainted labels + + # Update the labels layer with the new color mapping + label_layer.color_mode = 'direct' + label_layer.color = label_color_mapping + + # Initial color mapping + update_color_mapping() + + # Define the custom painting function + def custom_paint(layer, event): + """Custom painting function that updates features DataFrame and color mapping.""" + # On press + _update_paint(layer, event) + yield + + # On move + while event.type == 'mouse_move': + _update_paint(layer, event) + yield + + def _update_paint(layer, event): + # Get the coordinates in data space + data_coordinates = layer.world_to_data(event.position).astype(int) + # Get the brush size + brush_size = layer.brush_size + # Get the brush footprint + if layer.ndim == 3: + brush_radius = int(np.round(brush_size / 2)) + brush_footprint = ball(brush_radius) + else: + brush_radius = int(np.round(brush_size / 2)) + brush_footprint = disk(brush_radius) + # Get the indices of the footprint + offsets = np.argwhere(brush_footprint) - brush_radius + # Get the coordinates being painted + coords_painted = data_coordinates + offsets + # Ensure the coordinates are within the image bounds + coords_painted = coords_painted[ + np.all((coords_painted >= 0) & (coords_painted < np.array(layer.data.shape)), axis=1) + ] + # Now, get the previous labels at those coordinates + coords_tuple = tuple(coords_painted.T) + prev_labels = layer.data[coords_tuple] + # Now, get the unique previous labels + unique_prev_labels = np.unique(prev_labels) + # Now, paint the new label at those coordinates + layer.data[coords_tuple] = layer.selected_label + # Now, for each unique previous label, update the features DataFrame directly + for prev_label in unique_prev_labels: + # Get the index positions where 'label' equals 'prev_label' + idx = label_layer.features['label'].values == prev_label + # Modify 'painted_label' directly using the underlying NumPy array + label_layer.features['painted_label'].values[idx] = layer.selected_label + + # Now, update the color mapping + update_color_mapping() + + # Connect the custom painting function to the labels layer + label_layer.mouse_drag_callbacks.append(custom_paint) + + # Add ground truth + base_seg = np.zeros_like(zarr.open(example_run.segmentations[0].zarr())["0"]) + for idx, segm in enumerate(example_run.segmentations): + z = zarr.open(segm.zarr())["0"][:] + base_seg = base_seg + (idx + 1) * z + viewer.add_labels(base_seg, name="Ground Truth") + + # If interactive mode, show the widget + if interactive: + viewer.window.add_dock_widget(_spp_widget, area="right") + + # Return the viewer for further interaction + return viewer + +# Run segmentation directly +viewer = prepare_and_run_segmentation(interactive=False) +napari.run() diff --git a/notebooks/demo_spp_and_gt.ipynb b/notebooks/demo_spp_and_gt.ipynb new file mode 100644 index 0000000..eb10271 --- /dev/null +++ b/notebooks/demo_spp_and_gt.ipynb @@ -0,0 +1,164 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Segmentation 'superpixelSegmentation' already exists. Skipping segmentation.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/kharrington/.album/micromamba/envs/nesoi/lib/python3.10/site-packages/morphometrics_engine/measure.py:4: TqdmExperimentalWarning: Using `tqdm.autonotebook.tqdm` in notebook mode. Use `tqdm.tqdm` instead to force console mode (e.g. in jupyter console)\n", + " from tqdm.autonotebook import tqdm\n" + ] + } + ], + "source": [ + "import os\n", + "import zarr\n", + "import napari\n", + "import numpy as np\n", + "import copick\n", + "import copick_utils\n", + "from magicgui import magicgui\n", + "from napari.types import ImageData, LabelsData\n", + "from pathlib import Path\n", + "from cellcanvas_spp.segmentation import superpixels\n", + "\n", + "try:\n", + " # DATA_DIR = Path(\"/Users/kharrington/git/cellcanvas/superpixels/notebooks/my_synthetic_data_10439_dataportal.json\")\n", + " DATA_DIR = Path(os.environ[\"COPICK_DATA\"])\n", + "except KeyError:\n", + " raise ValueError(\n", + " \"Please set the COPICK_DATA environment variable to point to the data directory\\n\\n\"\n", + " \"$ export COPICK_DATA=\"\n", + " )\n", + "\n", + "@magicgui(auto_call=True, sigma={\"widget_type\": \"FloatSlider\", \"min\": 0, \"max\": 10}, h_minima={\"widget_type\": \"FloatSlider\", \"min\": 0, \"max\": 50})\n", + "def _spp_widget(image: ImageData, sigma: float = 4, h_minima: float = 0.001) -> LabelsData:\n", + " return superpixels(image, sigma=sigma, h_minima=h_minima)\n", + "\n", + "_spp_widget.h_minima._widget._readout_widget.setDecimals(4)\n", + "\n", + "def get_segmentation_array(copick_run, segmentation_name, voxel_spacing=10, is_multilabel=True):\n", + " seg = copick_run.get_segmentations(is_multilabel=is_multilabel, name=segmentation_name, voxel_size=voxel_spacing)\n", + " if len(seg) == 0:\n", + " return None\n", + " segmentation = zarr.open(seg[0].zarr().path, mode=\"r\")['0']\n", + " return segmentation[:]\n", + "\n", + "def segment_superpixels(example_run, voxel_spacing=10, interactive: bool = False):\n", + " \"\"\"\n", + " This function handles the segmentation logic. If the segmentation exists in copick, it will be skipped.\n", + " \"\"\"\n", + " segmentation_name = \"superpixelSegmentation\"\n", + "\n", + " # Check if the segmentation already exists\n", + " seg = get_segmentation_array(example_run, segmentation_name, voxel_spacing=voxel_spacing, is_multilabel=True)\n", + " if seg is not None:\n", + " print(f\"Segmentation '{segmentation_name}' already exists. Skipping segmentation.\")\n", + " return seg\n", + "\n", + " # Proceed with superpixel segmentation if it does not exist\n", + " tomo_type = \"wbp\"\n", + " tomogram = example_run.voxel_spacings[0].tomograms[0]\n", + "\n", + " # Open zarr\n", + " z = zarr.open(tomogram.zarr())\n", + " img = z[\"0\"] # Get the highest resolution scale\n", + "\n", + " if interactive:\n", + " img = img[50:100, 180:360, 210:430] # Cropping for interactive mode\n", + "\n", + " print(\"Loading image into memory ...\")\n", + " img = np.asarray(img) # Loading into memory\n", + "\n", + " print(\"Segmenting superpixels ...\")\n", + " segm = superpixels(img, sigma=4, h_minima=0.0025)\n", + " print(\"Done ...\")\n", + "\n", + " # Save segmentation into copick\n", + " print(\"Saving segmentation to copick...\")\n", + " new_seg = example_run.new_segmentation(voxel_spacing, segmentation_name, session_id=\"0\", is_multilabel=True, user_id=\"cellcanvasSPP\")\n", + " segmentation_group = zarr.open_group(new_seg.path, mode=\"a\")\n", + " segmentation_group[\"0\"] = segm\n", + " print(\"Segmentation saved.\")\n", + "\n", + " return segm\n", + "\n", + "def prepare_and_run_segmentation(interactive: bool = False):\n", + " \"\"\"\n", + " Prepare and run the segmentation by fetching data from copick.\n", + " \"\"\"\n", + " config_file = DATA_DIR\n", + " root = copick.from_file(config_file)\n", + "\n", + " run_name = \"16193\"\n", + " example_run = root.get_run(run_name)\n", + " voxel_spacing = 10\n", + "\n", + " # Check for existing segmentation or run segmentation if not found\n", + " seg = segment_superpixels(example_run, voxel_spacing, interactive)\n", + "\n", + " # Open viewer and add image\n", + " viewer = napari.Viewer()\n", + " img = np.asarray(zarr.open(example_run.voxel_spacings[0].tomograms[0].zarr())[\"0\"]) # Load image\n", + " viewer.add_image(img)\n", + " viewer.add_labels(seg, name=\"Superpixels\")\n", + "\n", + " # Add ground truth\n", + " base_seg = np.zeros_like(zarr.open(example_run.segmentations[0].zarr())[\"0\"])\n", + " for idx, seg in enumerate(example_run.segmentations):\n", + " z = zarr.open(seg.zarr())[\"0\"][:]\n", + " base_seg = base_seg + (idx + 1) * z\n", + " viewer.add_labels(base_seg)\n", + "\n", + " # If interactive mode, show the widget\n", + " if interactive:\n", + " viewer.window.add_dock_widget(_spp_widget, area=\"right\")\n", + "\n", + " # napari.run()\n", + " return viewer\n", + "\n", + "# Run segmentation directly in a Jupyter notebook\n", + "viewer = prepare_and_run_segmentation(interactive=False)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.8" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/diy_interactive_segmentation.ipynb b/notebooks/diy_interactive_segmentation.ipynb new file mode 100644 index 0000000..ec6a91d --- /dev/null +++ b/notebooks/diy_interactive_segmentation.ipynb @@ -0,0 +1,1236 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 33, + "id": "51e65670", + "metadata": {}, + "outputs": [], + "source": [ + "# painting pixels\n", + "\n", + "import os\n", + "import zarr\n", + "import napari\n", + "import numpy as np\n", + "import copick\n", + "from pathlib import Path\n", + "from cellcanvas_spp.segmentation import superpixels\n", + "from skimage.feature import multiscale_basic_features\n", + "from sklearn.ensemble import RandomForestClassifier\n", + "from skimage import future\n", + "from functools import partial\n", + "import threading\n", + "import toolz as tz\n", + "from psygnal import debounced\n", + "from superqt import ensure_main_thread\n", + "from qtpy.QtWidgets import (\n", + " QVBoxLayout,\n", + " QHBoxLayout,\n", + " QComboBox,\n", + " QLabel,\n", + " QCheckBox,\n", + " QDoubleSpinBox,\n", + " QGroupBox,\n", + " QWidget,\n", + ")\n", + "from appdirs import user_data_dir\n", + "import logging\n", + "\n", + "# Set up logging\n", + "logging.basicConfig(level=logging.ERROR)\n", + "logger = logging.getLogger(__name__)\n", + "\n", + "# Set up the data directory\n", + "DATA_DIR = Path(\"/Users/kharrington/git/cellcanvas/superpixels/notebooks/my_synthetic_data_10439_dataportal.json\")\n", + "\n", + "# Load the tomogram\n", + "def load_tomogram():\n", + " config_file = DATA_DIR\n", + " root = copick.from_file(config_file)\n", + " run_name = \"16193\"\n", + " example_run = root.get_run(run_name)\n", + " tomogram = example_run.voxel_spacings[0].tomograms[0]\n", + " z = zarr.open(tomogram.zarr())\n", + " img = z[\"0\"] # Get the highest resolution scale\n", + " return np.asarray(img)\n", + "\n", + "# Load and crop the tomogram\n", + "full_tomogram = load_tomogram()\n", + "crop_3D = full_tomogram[50:100, 180:360, 210:430] # Adjust crop as needed\n", + "\n", + "# Compute superpixels\n", + "superpixel_seg = superpixels(crop_3D, sigma=4, h_minima=0.0025)\n", + "\n", + "# Set up Napari viewer\n", + "viewer = napari.Viewer()\n", + "scale = (1, 1, 1) # Adjust scale if needed\n", + "contrast_limits = (crop_3D.min(), crop_3D.max())\n", + "\n", + "# Add layers\n", + "data_layer = viewer.add_image(crop_3D, scale=scale, contrast_limits=contrast_limits, name=\"Tomogram\")\n", + "superpixel_layer = viewer.add_labels(superpixel_seg, scale=scale, name=\"Superpixels\", opacity=0.5)\n", + "\n", + "# Set up zarr for prediction and painting layers\n", + "zarr_path = os.path.join(user_data_dir(\"napari_dl_at_mbl_2024\", \"napari\"), \"diy_segmentation.zarr\")\n", + "prediction_data = zarr.open(f\"{zarr_path}/prediction\", mode='a', shape=crop_3D.shape, dtype='i4', dimension_separator=\"/\")\n", + "painting_data = zarr.open(f\"{zarr_path}/painting\", mode='a', shape=crop_3D.shape, dtype='i4', dimension_separator=\"/\")\n", + "\n", + "prediction_layer = viewer.add_labels(prediction_data, name=\"Prediction\", scale=scale)\n", + "painting_layer = viewer.add_labels(painting_data, name=\"Painting\", scale=scale)\n", + "\n", + "# Feature extraction function\n", + "def extract_features(image, feature_params):\n", + " features_func = partial(\n", + " multiscale_basic_features,\n", + " intensity=feature_params[\"intensity\"],\n", + " edges=feature_params[\"edges\"],\n", + " texture=feature_params[\"texture\"],\n", + " sigma_min=feature_params[\"sigma_min\"],\n", + " sigma_max=feature_params[\"sigma_max\"],\n", + " channel_axis=None,\n", + " )\n", + " features = features_func(image)\n", + " return features\n", + "\n", + "# Model update and prediction functions\n", + "def update_model(labels, features, model_type):\n", + " logger.debug(f\"Labels shape: {labels.shape}, Features shape: {features.shape}\")\n", + " logger.debug(f\"Unique labels: {np.unique(labels)}\")\n", + " \n", + " # Flatten the labels and features\n", + " labels_flat = labels.ravel()\n", + " features_flat = features.reshape(-1, features.shape[-1])\n", + " \n", + " # Filter out background (label 0)\n", + " mask = labels_flat > 0\n", + " filtered_features = features_flat[mask]\n", + " filtered_labels = labels_flat[mask] - 1\n", + " \n", + " logger.debug(f\"Filtered labels shape: {filtered_labels.shape}, Filtered features shape: {filtered_features.shape}\")\n", + " logger.debug(f\"Unique filtered labels: {np.unique(filtered_labels)}\")\n", + " \n", + " if filtered_labels.size == 0:\n", + " logger.warning(\"No non-background labels found. Skipping model update.\")\n", + " return None\n", + " \n", + " if model_type == \"Random Forest\":\n", + " clf = RandomForestClassifier(n_estimators=50, n_jobs=-1, max_depth=10, max_samples=0.05)\n", + " \n", + " try:\n", + " clf.fit(filtered_features, filtered_labels)\n", + " logger.info(\"Model successfully updated\")\n", + " return clf\n", + " except Exception as e:\n", + " logger.error(f\"Error updating model: {str(e)}\")\n", + " return None\n", + "\n", + "# Update the predict function to handle flattened input\n", + "def predict(model, features, model_type):\n", + " features_flat = features.reshape(-1, features.shape[-1])\n", + " prediction_flat = model.predict(features_flat)\n", + " return prediction_flat.reshape(features.shape[:-1]) + 1\n", + "\n", + "# Napari ML Widget\n", + "class NapariMLWidget(QWidget):\n", + " def __init__(self, parent=None):\n", + " super(NapariMLWidget, self).__init__(parent)\n", + " self.initUI()\n", + "\n", + " def initUI(self):\n", + " layout = QVBoxLayout()\n", + "\n", + " model_label = QLabel(\"Select Model\")\n", + " self.model_dropdown = QComboBox()\n", + " self.model_dropdown.addItems([\"Random Forest\"])\n", + " model_layout = QHBoxLayout()\n", + " model_layout.addWidget(model_label)\n", + " model_layout.addWidget(self.model_dropdown)\n", + " layout.addLayout(model_layout)\n", + "\n", + " self.sigma_start_spinbox = QDoubleSpinBox()\n", + " self.sigma_start_spinbox.setRange(0, 10)\n", + " self.sigma_start_spinbox.setValue(1)\n", + "\n", + " self.sigma_end_spinbox = QDoubleSpinBox()\n", + " self.sigma_end_spinbox.setRange(0, 10)\n", + " self.sigma_end_spinbox.setValue(5)\n", + "\n", + " sigma_layout = QHBoxLayout()\n", + " sigma_layout.addWidget(QLabel(\"Sigma Range: From\"))\n", + " sigma_layout.addWidget(self.sigma_start_spinbox)\n", + " sigma_layout.addWidget(QLabel(\"To\"))\n", + " sigma_layout.addWidget(self.sigma_end_spinbox)\n", + " layout.addLayout(sigma_layout)\n", + "\n", + " self.intensity_checkbox = QCheckBox(\"Intensity\")\n", + " self.intensity_checkbox.setChecked(True)\n", + " self.edges_checkbox = QCheckBox(\"Edges\")\n", + " self.texture_checkbox = QCheckBox(\"Texture\")\n", + " self.texture_checkbox.setChecked(True)\n", + "\n", + " features_group = QGroupBox(\"Features\")\n", + " features_layout = QVBoxLayout()\n", + " features_layout.addWidget(self.intensity_checkbox)\n", + " features_layout.addWidget(self.edges_checkbox)\n", + " features_layout.addWidget(self.texture_checkbox)\n", + " features_group.setLayout(features_layout)\n", + " layout.addWidget(features_group)\n", + "\n", + " self.live_fit_checkbox = QCheckBox(\"Live Model Fitting\")\n", + " self.live_fit_checkbox.setChecked(True)\n", + " layout.addWidget(self.live_fit_checkbox)\n", + "\n", + " self.live_pred_checkbox = QCheckBox(\"Live Prediction\")\n", + " self.live_pred_checkbox.setChecked(True)\n", + " layout.addWidget(self.live_pred_checkbox)\n", + "\n", + " self.setLayout(layout)\n", + "\n", + "# Add widget to Napari\n", + "widget = NapariMLWidget()\n", + "viewer.window.add_dock_widget(widget, name=\"Interactive Segmentation\")\n", + "\n", + "# Event listener\n", + "model = None\n", + "\n", + "@tz.curry\n", + "def on_data_change(event, viewer=None, widget=None):\n", + " painting_layer.refresh()\n", + "\n", + " thread = threading.Thread(\n", + " target=threaded_on_data_change,\n", + " args=(\n", + " event,\n", + " viewer.dims,\n", + " widget.model_dropdown.currentText(),\n", + " {\n", + " \"sigma_min\": widget.sigma_start_spinbox.value(),\n", + " \"sigma_max\": widget.sigma_end_spinbox.value(),\n", + " \"intensity\": widget.intensity_checkbox.isChecked(),\n", + " \"edges\": widget.edges_checkbox.isChecked(),\n", + " \"texture\": widget.texture_checkbox.isChecked(),\n", + " },\n", + " widget.live_fit_checkbox.isChecked(),\n", + " widget.live_pred_checkbox.isChecked(),\n", + " ),\n", + " )\n", + " thread.start()\n", + " thread.join()\n", + "\n", + " prediction_layer.refresh()\n", + "\n", + "def threaded_on_data_change(\n", + " event,\n", + " dims,\n", + " model_type,\n", + " feature_params,\n", + " live_fit,\n", + " live_prediction,\n", + "):\n", + " global model, crop_3D, painting_data\n", + " \n", + " # Ensure consistent shapes\n", + " min_shape = [min(s1, s2) for s1, s2 in zip(crop_3D.shape, painting_data.shape)]\n", + " active_image = crop_3D[:min_shape[0], :min_shape[1], :min_shape[2]]\n", + " active_labels = painting_data[:min_shape[0], :min_shape[1], :min_shape[2]]\n", + "\n", + " logger.debug(f\"Active image shape: {active_image.shape}, Active labels shape: {active_labels.shape}\")\n", + "\n", + " training_features = extract_features(active_image, feature_params)\n", + " training_labels = active_labels\n", + "\n", + " logger.debug(f\"Training features shape: {training_features.shape}, Training labels shape: {training_labels.shape}\")\n", + "\n", + " if np.any(training_labels > 0) and live_fit:\n", + " model = update_model(training_labels, training_features, model_type)\n", + "\n", + " if live_prediction and model is not None:\n", + " try:\n", + " prediction = predict(model, training_features, model_type)\n", + " prediction_layer.data[:min_shape[0], :min_shape[1], :min_shape[2]] = prediction\n", + " logger.info(\"Prediction updated successfully\")\n", + " except Exception as e:\n", + " logger.error(f\"Error during prediction: {str(e)}\")\n", + "\n", + "# Connect event listeners\n", + "for listener in [viewer.dims.events, painting_layer.events.paint]:\n", + " listener.connect(\n", + " debounced(\n", + " ensure_main_thread(\n", + " on_data_change(viewer=viewer, widget=widget)\n", + " ),\n", + " timeout=1000,\n", + " )\n", + " )\n", + "\n", + "napari.run()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "bc8c8cf6", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "DEBUG:gql.dsl:Creating >)\n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating >)\n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Added arguments {'where': {'id': {'_eq': 10439}}} in field )\n", + "DEBUG:gql.dsl:Added fields: (, , , , , , , , , , , , , , , , , , , , , , , , , , , ) in \n", + "DEBUG:gql.dsl:Added fields: (,) in \n", + "INFO:gql.transport.requests:>>> {\"query\": \"{\\n datasets(where: {id: {_eq: 10439}}) {\\n id\\n cell_component_id\\n cell_component_name\\n cell_name\\n cell_strain_id\\n cell_strain_name\\n cell_type_id\\n dataset_citations\\n dataset_publications\\n deposition_date\\n description\\n grid_preparation\\n https_prefix\\n key_photo_thumbnail_url\\n key_photo_url\\n last_modified_date\\n organism_name\\n organism_taxid\\n other_setup\\n related_database_entries\\n related_database_links\\n release_date\\n s3_prefix\\n sample_preparation\\n sample_type\\n tissue_id\\n tissue_name\\n title\\n }\\n}\"}\n", + "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): graphql.cryoetdataportal.cziscience.com:443\n", + "DEBUG:urllib3.connectionpool:https://graphql.cryoetdataportal.cziscience.com:443 \"POST /v1/graphql HTTP/11\" 200 657\n", + "INFO:gql.transport.requests:<<< {\"data\":{\"datasets\":[{\"id\":10439,\"cell_component_id\":null,\"cell_component_name\":null,\"cell_name\":null,\"cell_strain_id\":null,\"cell_strain_name\":null,\"cell_type_id\":null,\"dataset_citations\":null,\"dataset_publications\":\"10.1109/TMI.2024.3398401\",\"deposition_date\":\"2024-08-21\",\"description\":\"This dataset is comprised of simulated tiltseries, tomograms and ground truth annotations for the purpose of benchmarking and training particle picking algorithms for cryoET. The data was simulated using polnet.\",\"grid_preparation\":\"\",\"https_prefix\":\"https://files.cryoetdataportal.cziscience.com/10439/\",\"key_photo_thumbnail_url\":\"https://files.cryoetdataportal.cziscience.com/10439/Images/thumbnail.png\",\"key_photo_url\":\"https://files.cryoetdataportal.cziscience.com/10439/Images/snapshot.png\",\"last_modified_date\":\"2024-08-21\",\"organism_name\":null,\"organism_taxid\":null,\"other_setup\":null,\"related_database_entries\":\"PDB-6MRD, PDB-1ZEF, PDB-6UPH, PDB-7TM3, PDB-7PKZ, PDB-6NK5\",\"related_database_links\":null,\"release_date\":\"2024-08-21\",\"s3_prefix\":\"s3://cryoet-data-portal-public/10439/\",\"sample_preparation\":\"Simulation of 3D volumes with polnet + projection using IMOD's xyzproj + addition of noise + reconstruction with IMOD's tilt\",\"sample_type\":\"in_silico\",\"tissue_id\":null,\"tissue_name\":null,\"title\":\"CZ Imaging Institute simulated dataset 1\"}]}}\n", + "DEBUG:gql.dsl:Creating >)\n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating >)\n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Added arguments {'where': {'id': {'_eq': 16193}}} in field )\n", + "DEBUG:gql.dsl:Added fields: (, , , , ) in \n", + "DEBUG:gql.dsl:Added fields: (,) in \n", + "INFO:gql.transport.requests:>>> {\"query\": \"{\\n runs(where: {id: {_eq: 16193}}) {\\n id\\n dataset_id\\n https_prefix\\n name\\n s3_prefix\\n }\\n}\"}\n", + "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): graphql.cryoetdataportal.cziscience.com:443\n", + "DEBUG:urllib3.connectionpool:https://graphql.cryoetdataportal.cziscience.com:443 \"POST /v1/graphql HTTP/11\" 200 197\n", + "INFO:gql.transport.requests:<<< {\"data\":{\"runs\":[{\"id\":16193,\"dataset_id\":10439,\"https_prefix\":\"https://files.cryoetdataportal.cziscience.com/10439/TS_4/\",\"name\":\"TS_4\",\"s3_prefix\":\"s3://cryoet-data-portal-public/10439/TS_4/\"}]}}\n", + "DEBUG:gql.dsl:Creating >)\n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating >)\n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Added arguments {'where': {'run_id': {'_eq': 16193}}} in field )\n", + "DEBUG:gql.dsl:Added fields: (, , , , ) in \n", + "DEBUG:gql.dsl:Added fields: (,) in \n", + "INFO:gql.transport.requests:>>> {\"query\": \"{\\n tomogram_voxel_spacings(where: {run_id: {_eq: 16193}}) {\\n id\\n https_prefix\\n run_id\\n s3_prefix\\n voxel_spacing\\n }\\n}\"}\n", + "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): graphql.cryoetdataportal.cziscience.com:443\n", + "DEBUG:urllib3.connectionpool:https://graphql.cryoetdataportal.cziscience.com:443 \"POST /v1/graphql HTTP/11\" 200 277\n", + "INFO:gql.transport.requests:<<< {\"data\":{\"tomogram_voxel_spacings\":[{\"id\":16398,\"https_prefix\":\"https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/\",\"run_id\":16193,\"s3_prefix\":\"s3://cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/\",\"voxel_spacing\":10.0}]}}\n", + "DEBUG:gql.dsl:Creating >)\n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating >)\n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Added arguments {'where': {'tomogram_voxel_spacing_id': {'_eq': 16398}}} in field )\n", + "DEBUG:gql.dsl:Added fields: (, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ) in \n", + "DEBUG:gql.dsl:Added fields: (,) in \n", + "INFO:gql.transport.requests:>>> {\"query\": \"{\\n tomograms(where: {tomogram_voxel_spacing_id: {_eq: 16398}}) {\\n id\\n affine_transformation_matrix\\n ctf_corrected\\n deposition_id\\n fiducial_alignment_status\\n https_mrc_scale0\\n https_omezarr_dir\\n is_canonical\\n key_photo_thumbnail_url\\n key_photo_url\\n name\\n neuroglancer_config\\n offset_x\\n offset_y\\n offset_z\\n processing\\n processing_software\\n reconstruction_method\\n reconstruction_software\\n s3_mrc_scale0\\n s3_omezarr_dir\\n scale0_dimensions\\n scale1_dimensions\\n scale2_dimensions\\n size_x\\n size_y\\n size_z\\n tomogram_version\\n tomogram_voxel_spacing_id\\n type\\n voxel_spacing\\n }\\n}\"}\n", + "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): graphql.cryoetdataportal.cziscience.com:443\n", + "DEBUG:urllib3.connectionpool:https://graphql.cryoetdataportal.cziscience.com:443 \"POST /v1/graphql HTTP/11\" 200 1913\n", + "INFO:gql.transport.requests:<<< {\"data\":{\"tomograms\":[{\"id\":16485,\"affine_transformation_matrix\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"ctf_corrected\":true,\"deposition_id\":10309,\"fiducial_alignment_status\":\"NON_FIDUCIAL\",\"https_mrc_scale0\":\"https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.mrc\",\"https_omezarr_dir\":\"https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr\",\"is_canonical\":true,\"key_photo_thumbnail_url\":\"https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/KeyPhotos/key-photo-thumbnail.png\",\"key_photo_url\":\"https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/KeyPhotos/key-photo-snapshot.png\",\"name\":\"TS_4\",\"neuroglancer_config\":\"{\\\"dimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"crossSectionScale\\\":1.575,\\\"projectionOrientation\\\":[0.3826834323650898,0.0,0.0,0.9238795325112867],\\\"layers\\\":[{\\\"type\\\":\\\"image\\\",\\\"name\\\":\\\"TS_4\\\",\\\"source\\\":{\\\"url\\\":\\\"zarr://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"opacity\\\":0.51,\\\"tab\\\":\\\"rendering\\\",\\\"visible\\\":true,\\\"shader\\\":\\\"#uicontrol invlerp contrast\\\\n#uicontrol bool invert_contrast checkbox\\\\n\\\\nfloat get_contrast() {\\\\n return invert_contrast ? 1.0 - contrast() : contrast();\\\\n}\\\\n\\\\nvoid main() {\\\\n float outputValue;\\\\n outputValue = get_contrast();\\\\n emitGrayscale(outputValue);\\\\n}\\\",\\\"shaderControls\\\":{\\\"contrast\\\":{\\\"range\\\":[-5.978126147761941,5.961846014484763],\\\"window\\\":[-7.1721233639866115,7.155843230709434]}},\\\"_position\\\":[315.0,315.0,100.0],\\\"_crossSectionScale\\\":1.575,\\\"_projectionScale\\\":693.0},{\\\"type\\\":\\\"segmentation\\\",\\\"name\\\":\\\"100 membrane segmentation\\\",\\\"source\\\":{\\\"url\\\":\\\"precomputed://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/NeuroglancerPrecompute/100-membrane-1.0_segmentationmask\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"tab\\\":\\\"rendering\\\",\\\"selectedAlpha\\\":1,\\\"hoverHighlight\\\":false,\\\"segments\\\":[1],\\\"segmentDefaultColor\\\":\\\"#fa72b0\\\",\\\"visible\\\":true},{\\\"type\\\":\\\"segmentation\\\",\\\"name\\\":\\\"101 GroEL-GroES complex segmentation\\\",\\\"source\\\":{\\\"url\\\":\\\"precomputed://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/NeuroglancerPrecompute/101-groel_groes_complex-1.0_segmentationmask\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"tab\\\":\\\"rendering\\\",\\\"selectedAlpha\\\":1,\\\"hoverHighlight\\\":false,\\\"segments\\\":[1],\\\"segmentDefaultColor\\\":\\\"#00ff00\\\",\\\"visible\\\":true},{\\\"type\\\":\\\"annotation\\\",\\\"name\\\":\\\"101 GroEL-GroES complex point\\\",\\\"source\\\":{\\\"url\\\":\\\"precomputed://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/NeuroglancerPrecompute/101-groel_groes_complex-1.0_orientedpoint\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"tab\\\":\\\"rendering\\\",\\\"visible\\\":true,\\\"shader\\\":\\\"#uicontrol float pointScale slider(min=0.01, max=2.0, step=0.01)\\\\n#uicontrol float opacity slider(min=0.0, max=1.0, step=0.01)\\\\n#uicontrol vec3 color color\\\\n\\\\nvoid main() {\\\\n if (opacity == 0.0) discard;\\\\n setColor(vec4(color, opacity));\\\\n setPointMarkerSize(pointScale * prop_diameter());\\\\n setPointMarkerBorderWidth(0.1);\\\\n setPointMarkerBorderColor(vec4(0.0, 0.0, 0.0, opacity));\\\\n}\\\",\\\"shaderControls\\\":{\\\"pointScale\\\":1.0,\\\"opacity\\\":1.0,\\\"color\\\":\\\"#0000ff\\\"}},{\\\"type\\\":\\\"segmentation\\\",\\\"name\\\":\\\"102 Alkaline phosphatase, placental type segmentation\\\",\\\"source\\\":{\\\"url\\\":\\\"precomputed://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/NeuroglancerPrecompute/102-alkaline_phosphatase__placental_type-1.0_segmentationmask\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"tab\\\":\\\"rendering\\\",\\\"selectedAlpha\\\":1,\\\"hoverHighlight\\\":false,\\\"segments\\\":[1],\\\"segmentDefaultColor\\\":\\\"#00ffff\\\",\\\"visible\\\":true},{\\\"type\\\":\\\"annotation\\\",\\\"name\\\":\\\"102 Alkaline phosphatase, placental type point\\\",\\\"source\\\":{\\\"url\\\":\\\"precomputed://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/NeuroglancerPrecompute/102-alkaline_phosphatase__placental_type-1.0_orientedpoint\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"tab\\\":\\\"rendering\\\",\\\"visible\\\":true,\\\"shader\\\":\\\"#uicontrol float pointScale slider(min=0.01, max=2.0, step=0.01)\\\\n#uicontrol float opacity slider(min=0.0, max=1.0, step=0.01)\\\\n#uicontrol vec3 color color\\\\n\\\\nvoid main() {\\\\n if (opacity == 0.0) discard;\\\\n setColor(vec4(color, opacity));\\\\n setPointMarkerSize(pointScale * prop_diameter());\\\\n setPointMarkerBorderWidth(0.1);\\\\n setPointMarkerBorderColor(vec4(0.0, 0.0, 0.0, opacity));\\\\n}\\\",\\\"shaderControls\\\":{\\\"pointScale\\\":1.0,\\\"opacity\\\":1.0,\\\"color\\\":\\\"#ffff00\\\"}},{\\\"type\\\":\\\"segmentation\\\",\\\"name\\\":\\\"103 nucleosome segmentation\\\",\\\"source\\\":{\\\"url\\\":\\\"precomputed://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/NeuroglancerPrecompute/103-nucleosome-1.0_segmentationmask\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"tab\\\":\\\"rendering\\\",\\\"selectedAlpha\\\":1,\\\"hoverHighlight\\\":false,\\\"segments\\\":[1],\\\"segmentDefaultColor\\\":\\\"#ff0000\\\",\\\"visible\\\":true},{\\\"type\\\":\\\"annotation\\\",\\\"name\\\":\\\"103 nucleosome point\\\",\\\"source\\\":{\\\"url\\\":\\\"precomputed://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/NeuroglancerPrecompute/103-nucleosome-1.0_orientedpoint\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"tab\\\":\\\"rendering\\\",\\\"visible\\\":true,\\\"shader\\\":\\\"#uicontrol float pointScale slider(min=0.01, max=2.0, step=0.01)\\\\n#uicontrol float opacity slider(min=0.0, max=1.0, step=0.01)\\\\n#uicontrol vec3 color color\\\\n\\\\nvoid main() {\\\\n if (opacity == 0.0) discard;\\\\n setColor(vec4(color, opacity));\\\\n setPointMarkerSize(pointScale * prop_diameter());\\\\n setPointMarkerBorderWidth(0.1);\\\\n setPointMarkerBorderColor(vec4(0.0, 0.0, 0.0, opacity));\\\\n}\\\",\\\"shaderControls\\\":{\\\"pointScale\\\":1.0,\\\"opacity\\\":1.0,\\\"color\\\":\\\"#008080\\\"}},{\\\"type\\\":\\\"segmentation\\\",\\\"name\\\":\\\"104 cytosolic ribosome segmentation\\\",\\\"source\\\":{\\\"url\\\":\\\"precomputed://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/NeuroglancerPrecompute/104-cytosolic_ribosome-1.0_segmentationmask\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"tab\\\":\\\"rendering\\\",\\\"selectedAlpha\\\":1,\\\"hoverHighlight\\\":false,\\\"segments\\\":[1],\\\"segmentDefaultColor\\\":\\\"#9c7b01\\\",\\\"visible\\\":true},{\\\"type\\\":\\\"annotation\\\",\\\"name\\\":\\\"104 cytosolic ribosome point\\\",\\\"source\\\":{\\\"url\\\":\\\"precomputed://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/NeuroglancerPrecompute/104-cytosolic_ribosome-1.0_orientedpoint\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"tab\\\":\\\"rendering\\\",\\\"visible\\\":true,\\\"shader\\\":\\\"#uicontrol float pointScale slider(min=0.01, max=2.0, step=0.01)\\\\n#uicontrol float opacity slider(min=0.0, max=1.0, step=0.01)\\\\n#uicontrol vec3 color color\\\\n\\\\nvoid main() {\\\\n if (opacity == 0.0) discard;\\\\n setColor(vec4(color, opacity));\\\\n setPointMarkerSize(pointScale * prop_diameter());\\\\n setPointMarkerBorderWidth(0.1);\\\\n setPointMarkerBorderColor(vec4(0.0, 0.0, 0.0, opacity));\\\\n}\\\",\\\"shaderControls\\\":{\\\"pointScale\\\":1.0,\\\"opacity\\\":1.0,\\\"color\\\":\\\"#800080\\\"}},{\\\"type\\\":\\\"segmentation\\\",\\\"name\\\":\\\"105 Major vault protein segmentation\\\",\\\"source\\\":{\\\"url\\\":\\\"precomputed://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/NeuroglancerPrecompute/105-major_vault_protein-1.0_segmentationmask\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"tab\\\":\\\"rendering\\\",\\\"selectedAlpha\\\":1,\\\"hoverHighlight\\\":false,\\\"segments\\\":[1],\\\"segmentDefaultColor\\\":\\\"#80ff80\\\",\\\"visible\\\":true},{\\\"type\\\":\\\"annotation\\\",\\\"name\\\":\\\"105 Major vault protein point\\\",\\\"source\\\":{\\\"url\\\":\\\"precomputed://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/NeuroglancerPrecompute/105-major_vault_protein-1.0_orientedpoint\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"tab\\\":\\\"rendering\\\",\\\"visible\\\":true,\\\"shader\\\":\\\"#uicontrol float pointScale slider(min=0.01, max=2.0, step=0.01)\\\\n#uicontrol float opacity slider(min=0.0, max=1.0, step=0.01)\\\\n#uicontrol vec3 color color\\\\n\\\\nvoid main() {\\\\n if (opacity == 0.0) discard;\\\\n setColor(vec4(color, opacity));\\\\n setPointMarkerSize(pointScale * prop_diameter());\\\\n setPointMarkerBorderWidth(0.1);\\\\n setPointMarkerBorderColor(vec4(0.0, 0.0, 0.0, opacity));\\\\n}\\\",\\\"shaderControls\\\":{\\\"pointScale\\\":1.0,\\\"opacity\\\":1.0,\\\"color\\\":\\\"#6881fc\\\"}},{\\\"type\\\":\\\"segmentation\\\",\\\"name\\\":\\\"106 virus-like capsid segmentation\\\",\\\"source\\\":{\\\"url\\\":\\\"precomputed://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/NeuroglancerPrecompute/106-chikungunya_vlp-1.0_segmentationmask\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"tab\\\":\\\"rendering\\\",\\\"selectedAlpha\\\":1,\\\"hoverHighlight\\\":false,\\\"segments\\\":[1],\\\"segmentDefaultColor\\\":\\\"#ff00ff\\\",\\\"visible\\\":true},{\\\"type\\\":\\\"annotation\\\",\\\"name\\\":\\\"106 virus-like capsid point\\\",\\\"source\\\":{\\\"url\\\":\\\"precomputed://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/NeuroglancerPrecompute/106-chikungunya_vlp-1.0_orientedpoint\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"tab\\\":\\\"rendering\\\",\\\"visible\\\":true,\\\"shader\\\":\\\"#uicontrol float pointScale slider(min=0.01, max=2.0, step=0.01)\\\\n#uicontrol float opacity slider(min=0.0, max=1.0, step=0.01)\\\\n#uicontrol vec3 color color\\\\n\\\\nvoid main() {\\\\n if (opacity == 0.0) discard;\\\\n setColor(vec4(color, opacity));\\\\n setPointMarkerSize(pointScale * prop_diameter());\\\\n setPointMarkerBorderWidth(0.1);\\\\n setPointMarkerBorderColor(vec4(0.0, 0.0, 0.0, opacity));\\\\n}\\\",\\\"shaderControls\\\":{\\\"pointScale\\\":1.0,\\\"opacity\\\":1.0,\\\"color\\\":\\\"#008000\\\"}}],\\\"selectedLayer\\\":{\\\"visible\\\":true,\\\"layer\\\":\\\"TS_4\\\"},\\\"crossSectionBackgroundColor\\\":\\\"#000000\\\",\\\"layout\\\":\\\"4panel\\\",\\\"position\\\":[315.0,315.0,100.0],\\\"projectionScale\\\":693.0,\\\"deposition_id\\\":10309,\\\"last_updated_at\\\":1724697119}\",\"offset_x\":0,\"offset_y\":0,\"offset_z\":0,\"processing\":\"raw\",\"processing_software\":null,\"reconstruction_method\":\"WBP\",\"reconstruction_software\":\"IMOD\",\"s3_mrc_scale0\":\"s3://cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.mrc\",\"s3_omezarr_dir\":\"s3://cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr\",\"scale0_dimensions\":\"630,630,200\",\"scale1_dimensions\":\"315,315,100\",\"scale2_dimensions\":\"158,158,50\",\"size_x\":630,\"size_y\":630,\"size_z\":200,\"tomogram_version\":\"1\",\"tomogram_voxel_spacing_id\":16398,\"type\":\"CANONICAL\",\"voxel_spacing\":10.0}]}}\n", + "DEBUG:s3fs:CALL: head_object - ({},) - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.HeadObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=HeadObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray', 'query_string': {}, 'method': 'HEAD', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.HeadObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-request-id': 'CH1DPM33TXTHWVTD', 'x-amz-id-2': 'fcFWv7KdZq7qYzt2COS0OyB5lUkhZhxRvcGsu1DiUvs5zwP8XzhPOoHtUkiZHy2812dxKaCEtC0=', 'content-type': 'application/xml', 'date': 'Thu, 19 Sep 2024 17:19:27 GMT', 'server': 'AmazonS3'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "b''\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.HeadObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.HeadObject: calling handler >\n", + "DEBUG:s3fs:Client error (maybe retryable): An error occurred (404) when calling the HeadObject operation: Not Found\n", + "DEBUG:s3fs:CALL: list_objects_v2 - ({},) - {'Bucket': 'cryoet-data-portal-public', 'Prefix': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray/', 'Delimiter': '/', 'MaxKeys': 1}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.ListObjectsV2: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.ListObjectsV2: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Prefix': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray/', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.ListObjectsV2: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=ListObjectsV2) with params: {'url_path': '?list-type=2', 'query_string': {'prefix': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray/', 'delimiter': '/', 'max-keys': 1, 'encoding-type': 'url'}, 'method': 'GET', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/?list-type=2&prefix=10439%2FTS_4%2FTomograms%2FVoxelSpacing10.000%2FCanonicalTomogram%2FTS_4.zarr%2F.zarray%2F&delimiter=%2F&max-keys=1&encoding-type=url', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 'encoding_type_auto_set': True, 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Prefix': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray/', 'Delimiter': '/', 'MaxKeys': 1, 'EncodingType': 'url'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Prefix': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray/'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.ListObjectsV2: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.ListObjectsV2: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': 'DVhY9HX14Xj3q/TqWEQB5RVsWB088xrHbQtcVO4BzVLG9H0zkyIEHd7mLT4VQEkGJX+ijbJj4wY=', 'x-amz-request-id': 'CH199VNTX2PR3STH', 'date': 'Thu, 19 Sep 2024 17:19:29 GMT', 'x-amz-bucket-region': 'us-west-2', 'content-type': 'application/xml', 'transfer-encoding': 'chunked', 'server': 'AmazonS3'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "b'\\ncryoet-data-portal-public10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray/01/urlfalse'\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.ListObjectsV2: calling handler >\n", + "DEBUG:botocore.hooks:Event after-call.s3.ListObjectsV2: calling handler \n", + "DEBUG:s3fs:CALL: head_object - ({},) - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.HeadObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=HeadObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup', 'query_string': {}, 'method': 'HEAD', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.HeadObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': 'eboYdt2zAjX3cuSOD2VuVT3YGPfXem46vKFfCE31dnthBUG2x+GYvxn7pZxK6hpCHF2gjRG61Eo=', 'x-amz-request-id': 'CH19TPTN575RBN1D', 'date': 'Thu, 19 Sep 2024 17:19:29 GMT', 'last-modified': 'Mon, 26 Aug 2024 20:21:43 GMT', 'etag': '\"e20297935e73dd0154104d4ea53040ab\"', 'x-amz-server-side-encryption': 'AES256', 'x-amz-version-id': 'Fu3v_bl7apvC68jUKAu.1GAj6NM.A7IB', 'accept-ranges': 'bytes', 'content-type': 'binary/octet-stream', 'server': 'AmazonS3', 'content-length': '24'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "b''\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.HeadObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.HeadObject: calling handler >\n", + "DEBUG:s3fs:CALL: head_object - ({},) - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.HeadObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=HeadObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray', 'query_string': {}, 'method': 'HEAD', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.HeadObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-request-id': 'CH14Y06F2CN9KDRJ', 'x-amz-id-2': 'VUwj8Po1UWfJAJj0YP5wmNJ7q7jy1oRfwmCKeQNkfyvI2/Lm/ow9gY3jOyKoFfYjIwbeLnj4lrA=', 'content-type': 'application/xml', 'date': 'Thu, 19 Sep 2024 17:19:28 GMT', 'server': 'AmazonS3'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "b''\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.HeadObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.HeadObject: calling handler >\n", + "DEBUG:s3fs:Client error (maybe retryable): An error occurred (404) when calling the HeadObject operation: Not Found\n", + "DEBUG:s3fs:CALL: list_objects_v2 - ({},) - {'Bucket': 'cryoet-data-portal-public', 'Prefix': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray/', 'Delimiter': '/', 'MaxKeys': 1}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.ListObjectsV2: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.ListObjectsV2: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Prefix': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray/', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.ListObjectsV2: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=ListObjectsV2) with params: {'url_path': '?list-type=2', 'query_string': {'prefix': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray/', 'delimiter': '/', 'max-keys': 1, 'encoding-type': 'url'}, 'method': 'GET', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/?list-type=2&prefix=10439%2FTS_4%2FTomograms%2FVoxelSpacing10.000%2FCanonicalTomogram%2FTS_4.zarr%2F.zarray%2F&delimiter=%2F&max-keys=1&encoding-type=url', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 'encoding_type_auto_set': True, 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Prefix': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray/', 'Delimiter': '/', 'MaxKeys': 1, 'EncodingType': 'url'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Prefix': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray/'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.ListObjectsV2: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.ListObjectsV2: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': 'SCZNBWCGZdAoIZhWnmwt6PMjhwow8dt8mzskJEbFBjM8nRwyE1po0y1DmiVVtKJip2xkuuLOx/E=', 'x-amz-request-id': 'ATNR2CTZ8ZXQMHBN', 'date': 'Thu, 19 Sep 2024 17:19:30 GMT', 'x-amz-bucket-region': 'us-west-2', 'content-type': 'application/xml', 'transfer-encoding': 'chunked', 'server': 'AmazonS3'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "b'\\ncryoet-data-portal-public10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray/01/urlfalse'\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.ListObjectsV2: calling handler >\n", + "DEBUG:botocore.hooks:Event after-call.s3.ListObjectsV2: calling handler \n", + "DEBUG:s3fs:CALL: get_object - () - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=GetObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup', 'query_string': {}, 'method': 'GET', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': '93HmSn4gZMSFwYwhiZFNQWnWkXfe5WUy2vFTldz+F1eZB3ETVHkNpXdVTLW9hrrqfyrE3utw7Z0=', 'x-amz-request-id': 'ATNW9CP0099EHW12', 'date': 'Thu, 19 Sep 2024 17:19:30 GMT', 'last-modified': 'Mon, 26 Aug 2024 20:21:43 GMT', 'etag': '\"e20297935e73dd0154104d4ea53040ab\"', 'x-amz-server-side-encryption': 'AES256', 'x-amz-version-id': 'Fu3v_bl7apvC68jUKAu.1GAj6NM.A7IB', 'accept-ranges': 'bytes', 'content-type': 'binary/octet-stream', 'server': 'AmazonS3', 'content-length': '24'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler >\n", + "DEBUG:s3fs:CALL: get_object - () - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/.zarray'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/.zarray', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=GetObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/.zarray', 'query_string': {}, 'method': 'GET', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/.zarray', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/.zarray', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/.zarray'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/.zarray'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': 'U+VQ82Fq0PSL/XOKRY32JnMouwCY87gzs0gQJIg0ECPTW2F3LEeYJcrFoJwfkocZZ/Wtl+py5e8=', 'x-amz-request-id': 'ATNS0WQRDQKCZDS4', 'date': 'Thu, 19 Sep 2024 17:19:30 GMT', 'last-modified': 'Mon, 26 Aug 2024 20:21:43 GMT', 'etag': '\"cbb5884c0f249cd6bc817d0ad4a20db6\"', 'x-amz-server-side-encryption': 'AES256', 'x-amz-version-id': 'QjrulEKMovt.7Il_soOyVZPKhrCteP8I', 'accept-ranges': 'bytes', 'content-type': 'binary/octet-stream', 'server': 'AmazonS3', 'content-length': '399'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler >\n", + "DEBUG:s3fs:CALL: get_object - () - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/0'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/0', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=GetObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/0', 'query_string': {}, 'method': 'GET', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/0', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/0', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/0'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/0'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:s3fs:CALL: get_object - () - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/1'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/1', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=GetObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/1', 'query_string': {}, 'method': 'GET', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/1', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/1', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/1'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/1'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:s3fs:CALL: get_object - () - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/2'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/2', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=GetObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/2', 'query_string': {}, 'method': 'GET', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/2', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/2', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/2'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/2'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:s3fs:CALL: get_object - () - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/0'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/0', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=GetObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/0', 'query_string': {}, 'method': 'GET', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/0', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/0', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/0'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/0'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:s3fs:CALL: get_object - () - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/1'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/1', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=GetObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/1', 'query_string': {}, 'method': 'GET', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/1', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/1', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/1'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/1'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:s3fs:CALL: get_object - () - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/2'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/2', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=GetObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/2', 'query_string': {}, 'method': 'GET', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/2', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/2', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/2'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/2'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:s3fs:CALL: get_object - () - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/0'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/0', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=GetObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/0', 'query_string': {}, 'method': 'GET', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/0', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/0', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/0'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/0'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:s3fs:CALL: get_object - () - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/1'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/1', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=GetObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/1', 'query_string': {}, 'method': 'GET', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/1', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/1', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/1'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/1'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:s3fs:CALL: get_object - () - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/2'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/2', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=GetObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/2', 'query_string': {}, 'method': 'GET', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/2', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/2', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/2'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/2'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': 'JrHtpmfOzaWm03v8ie30sMYxuvHZwFTNX5xq9jpRSNjsQxF5+QjziEuJrDsNvBIqGdCl0xEY9Sk=', 'x-amz-request-id': 'ATNYQHZ4AXSZW1RH', 'date': 'Thu, 19 Sep 2024 17:19:30 GMT', 'last-modified': 'Mon, 26 Aug 2024 20:21:43 GMT', 'etag': '\"3820d846b6e043b8bee440413994a74d-6\"', 'x-amz-server-side-encryption': 'AES256', 'x-amz-version-id': 'gZ.bdmAltrLFoXKiAogeIC4VwphlCacE', 'accept-ranges': 'bytes', 'content-type': 'binary/octet-stream', 'server': 'AmazonS3', 'content-length': '49084500'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler >\n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': 'eD0WK5ZwVa9zupHoZE0j9tB1ka0X7iVmyvlOG1qxGZpqSn697Kr5xBF6oCgwfz/oUcgcX81jdJg=', 'x-amz-request-id': 'TD92N05TRHJJ61XY', 'date': 'Thu, 19 Sep 2024 17:19:31 GMT', 'last-modified': 'Mon, 26 Aug 2024 20:21:44 GMT', 'etag': '\"de60bd1925d74762d7d83da965e3d10a-3\"', 'x-amz-server-side-encryption': 'AES256', 'x-amz-version-id': '560JvnTN0FltaQM0C0DgdqR.Bdo3UKVT', 'accept-ranges': 'bytes', 'content-type': 'binary/octet-stream', 'server': 'AmazonS3', 'content-length': '24077977'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler >\n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': 'BAbUlta1eU0Wv56/RweWUpFPGpoS7ILPnHJ09CW9dOsh37fvI+kJjxALk0L8El7irP0mgsg+3nQ=', 'x-amz-request-id': 'TD902CYKPMGVS7S1', 'date': 'Thu, 19 Sep 2024 17:19:31 GMT', 'last-modified': 'Mon, 26 Aug 2024 20:21:43 GMT', 'etag': '\"18d770042ccb9ac55897de3837229933-6\"', 'x-amz-server-side-encryption': 'AES256', 'x-amz-version-id': 'XMu6B0PqsVUONC6MhnujmGUaTmX9iiG5', 'accept-ranges': 'bytes', 'content-type': 'binary/octet-stream', 'server': 'AmazonS3', 'content-length': '49095219'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler >\n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': '+SzWDTEVA5t7S2uLjdVNfxVFvQQBeXvMXnUhp6rnvRFGzW4WSXcsVXZ+m2DvTNiJWqwr+0r67/o=', 'x-amz-request-id': 'TD91PMW5CEB2DEXH', 'date': 'Thu, 19 Sep 2024 17:19:31 GMT', 'last-modified': 'Mon, 26 Aug 2024 20:21:45 GMT', 'etag': '\"311a9f7858a62f3515cbb56e3d9f73ac-2\"', 'x-amz-server-side-encryption': 'AES256', 'x-amz-version-id': 'z_v.KXmPfRq66T9sj7j6pyuqhkTaSoPZ', 'accept-ranges': 'bytes', 'content-type': 'binary/octet-stream', 'server': 'AmazonS3', 'content-length': '11377194'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler >\n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': 'LV6/fw8jzfYTv+e/vc0SU40MoDAorGjZUUx/gOJRJIFFPkvGCXwuZ8RdTi5WtmDpcHBr8giqwRk=', 'x-amz-request-id': 'TD9CWB6T8AR90X3Y', 'date': 'Thu, 19 Sep 2024 17:19:31 GMT', 'last-modified': 'Mon, 26 Aug 2024 20:21:44 GMT', 'etag': '\"1c2c99accdebb831ca45263030fde531-3\"', 'x-amz-server-side-encryption': 'AES256', 'x-amz-version-id': '0_KxSYLeXbujPSAD3F3Kqen4vIEiMRGP', 'accept-ranges': 'bytes', 'content-type': 'binary/octet-stream', 'server': 'AmazonS3', 'content-length': '23015342'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler >\n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': 'DbWZQMLApgWFzaAJL5Qh+qDkTlwk4qrU6sSXj2wQB2M8VxP9mzc3z4WQKmBIVid0698pDoeI1FM=', 'x-amz-request-id': 'TD9A6Y14MSTS3C4Q', 'date': 'Thu, 19 Sep 2024 17:19:31 GMT', 'last-modified': 'Mon, 26 Aug 2024 20:21:43 GMT', 'etag': '\"a21f1cbed95c60ef28089bdb68e2cc6b-6\"', 'x-amz-server-side-encryption': 'AES256', 'x-amz-version-id': 'DJ6rx3L7cF74IMXDBqc9v59CQiM_7S.7', 'accept-ranges': 'bytes', 'content-type': 'binary/octet-stream', 'server': 'AmazonS3', 'content-length': '49082049'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler >\n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': 'wQHDD+5li//CePks44Rf74a/87WfVZUK2jPnizGLzYBwK9fMmIkpEqWg0DCZa1ZZlZ8d+IA7Cng=', 'x-amz-request-id': 'TD91JKJ30JJWACAS', 'date': 'Thu, 19 Sep 2024 17:19:31 GMT', 'last-modified': 'Mon, 26 Aug 2024 20:21:45 GMT', 'etag': '\"855fb6c0e2ea65711343bca05a670557-3\"', 'x-amz-server-side-encryption': 'AES256', 'x-amz-version-id': 'uWD0Te7f6RXovjGU3Cm8yRssVyQqDb2B', 'accept-ranges': 'bytes', 'content-type': 'binary/octet-stream', 'server': 'AmazonS3', 'content-length': '23014218'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler >\n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': 'WaEuO84YUZ5h5OMCL7ndX/dV3jAcN+YBvWclPox+cpxiAbDTbc3UFvPhLWXEKUvjnz4ZpDL6E0w=', 'x-amz-request-id': 'TD9CBBRET63XD7G1', 'date': 'Thu, 19 Sep 2024 17:19:31 GMT', 'last-modified': 'Mon, 26 Aug 2024 20:21:43 GMT', 'etag': '\"a04a0af0d3fbdd50889afaa242ab1849-3\"', 'x-amz-server-side-encryption': 'AES256', 'x-amz-version-id': 'HRNmXey_bbG3hSLZ9F6iDGBBuCcrCpo0', 'accept-ranges': 'bytes', 'content-type': 'binary/octet-stream', 'server': 'AmazonS3', 'content-length': '24073951'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler >\n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': 'sgns18FBWfh0reoukNm6++tnw/IOQ7EPPvIkC4IwhF5Ef5ef3W5MGF6Kw9NkKPgbqT0f8Tw+yyE=', 'x-amz-request-id': 'TD9920NGTKVK49FP', 'date': 'Thu, 19 Sep 2024 17:19:31 GMT', 'last-modified': 'Mon, 26 Aug 2024 20:21:43 GMT', 'etag': '\"fa64c374fece66b1b59a1972c494ca0f-6\"', 'x-amz-server-side-encryption': 'AES256', 'x-amz-version-id': 'nB7SZzKOzy.yhbx2kLhp5Zt86HVcWpLl', 'accept-ranges': 'bytes', 'content-type': 'binary/octet-stream', 'server': 'AmazonS3', 'content-length': '49074515'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler >\n", + "DEBUG:napari._qt.menus.plugins_menu:QtPluginDialog not available\n", + "Traceback (most recent call last):\n", + " File \"/Users/kharrington/git/kephale/nesoi/repos/napari/napari/_qt/menus/plugins_menu.py\", line 124, in _plugin_manager_dialog_cls\n", + " from napari_plugin_manager.qt_plugin_dialog import QtPluginDialog\n", + "ModuleNotFoundError: No module named 'napari_plugin_manager'\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Tomogram\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=49.0, step=1.0), RangeTuple(start=0.0, stop=179.0, step=1.0), RangeTuple(start=0.0, stop=219.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(0.0, 0.0, 0.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=49.0, step=1.0), RangeTuple(start=0.0, stop=179.0, step=1.0), RangeTuple(start=0.0, stop=219.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(0.0, 0.0, 0.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=49.0, step=1.0), RangeTuple(start=0.0, stop=179.0, step=1.0), RangeTuple(start=0.0, stop=219.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(24.0, 89.0, 109.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=49.0, step=1.0), RangeTuple(start=0.0, stop=179.0, step=1.0), RangeTuple(start=0.0, stop=219.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(24.0, 89.0, 109.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Tomogram\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=49.0, step=1.0), RangeTuple(start=0.0, stop=179.0, step=1.0), RangeTuple(start=0.0, stop=219.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(24.0, 89.0, 109.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=49.0, step=1.0), RangeTuple(start=0.0, stop=179.0, step=1.0), RangeTuple(start=0.0, stop=219.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(24.0, 89.0, 109.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Superpixels\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=49.0, step=1.0), RangeTuple(start=0.0, stop=179.0, step=1.0), RangeTuple(start=0.0, stop=219.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(24.0, 89.0, 109.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Superpixels\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Superpixels, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=49.0, step=1.0), RangeTuple(start=0.0, stop=179.0, step=1.0), RangeTuple(start=0.0, stop=219.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(24.0, 89.0, 109.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=49.0, step=1.0), RangeTuple(start=0.0, stop=179.0, step=1.0), RangeTuple(start=0.0, stop=219.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(24.0, 89.0, 109.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=49.0, step=1.0), RangeTuple(start=0.0, stop=179.0, step=1.0), RangeTuple(start=0.0, stop=219.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(24.0, 89.0, 109.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Painting\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "zarr path: /Users/kharrington/Library/Application Support/napari_dl_at_mbl_2024/diy_segmentation.zarr\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=49.0, step=1.0), RangeTuple(start=0.0, stop=179.0, step=1.0), RangeTuple(start=0.0, stop=219.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(24.0, 89.0, 109.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=49.0, step=1.0), RangeTuple(start=0.0, stop=179.0, step=1.0), RangeTuple(start=0.0, stop=219.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(24.0, 89.0, 109.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "DEBUG:napari.layers.base.base:Layer.refresh: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Superpixels\n", + "DEBUG:in_n_out:Executing @injected activate_labels_paint_mode(layer: napari.layers.labels.labels.Labels) with args: (,), kwargs: {}\n", + "DEBUG:in_n_out: Calling activate_labels_paint_mode with {'layer': } (injected set())\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Painting\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:__main__:min_shape: [50, 180, 220]\n", + "DEBUG:__main__:Number of painted superpixels: 47\n", + "DEBUG:__main__:X shape: (47, 20), y shape: (47,)\n", + "DEBUG:__main__:X shape: (47, 20)\n", + "DEBUG:__main__:y shape: (47,)\n", + "DEBUG:__main__:Unique labels: [1 2]\n", + "INFO:__main__:Model successfully updated\n", + "DEBUG:__main__:Prediction (painted labels) updated successfully\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Painting\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:__main__:min_shape: [50, 180, 220]\n", + "DEBUG:__main__:Number of painted superpixels: 54\n", + "DEBUG:__main__:X shape: (54, 20), y shape: (54,)\n", + "DEBUG:__main__:X shape: (54, 20)\n", + "DEBUG:__main__:y shape: (54,)\n", + "DEBUG:__main__:Unique labels: [1 2]\n", + "INFO:__main__:Model successfully updated\n", + "DEBUG:__main__:Prediction (painted labels) updated successfully\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:in_n_out:Executing @injected reset_scroll_progress(viewer: napari.viewer.Viewer) with args: (Viewer(camera=Camera(center=(0.0, 82.32274855051404, 109.97160756573726), zoom=5.0925852846035005, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=False, mouse_zoom=True), cursor=Cursor(position=(24.0, 88.21366816714531, 143.84438842033066), scaled=True, style=, size=3.0), dims=Dims(ndim=3, ndisplay=2, order=(0, 1, 2), axis_labels=('0', '1', '2'), range=(RangeTuple(start=0.0, stop=49.0, step=1.0), RangeTuple(start=0.0, stop=179.0, step=1.0), RangeTuple(start=0.0, stop=219.0, step=1.0)), margin_left=(0.0, 0.0, 0.0), margin_right=(0.0, 0.0, 0.0), point=(24.0, 89.0, 109.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[, , , ], help='use <6> for pan/zoom, use <7> for transform, use <1> for activate the label eraser, use <3> for activate the polygon tool, use <4> for activate the fill bucket, use <5> for pick mode', status={'layer_base': 'Painting', 'source_type': '', 'plugin': '', 'coordinates': ' [24 88 144]: 2'}, tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=True, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={}),), kwargs: {}\n", + "DEBUG:in_n_out: Calling reset_scroll_progress with {'viewer': Viewer(camera=Camera(center=(0.0, 82.32274855051404, 109.97160756573726), zoom=5.0925852846035005, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=False, mouse_zoom=True), cursor=Cursor(position=(24.0, 88.21366816714531, 143.84438842033066), scaled=True, style=, size=3.0), dims=Dims(ndim=3, ndisplay=2, order=(0, 1, 2), axis_labels=('0', '1', '2'), range=(RangeTuple(start=0.0, stop=49.0, step=1.0), RangeTuple(start=0.0, stop=179.0, step=1.0), RangeTuple(start=0.0, stop=219.0, step=1.0)), margin_left=(0.0, 0.0, 0.0), margin_right=(0.0, 0.0, 0.0), point=(24.0, 89.0, 109.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[, , , ], help='use <6> for pan/zoom, use <7> for transform, use <1> for activate the label eraser, use <3> for activate the polygon tool, use <4> for activate the fill bucket, use <5> for pick mode', status={'layer_base': 'Painting', 'source_type': '', 'plugin': '', 'coordinates': ' [24 88 144]: 2'}, tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=True, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})} (injected set())\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Painting\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Painting\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:__main__:min_shape: [50, 180, 220]\n", + "DEBUG:__main__:Number of painted superpixels: 54\n", + "DEBUG:__main__:X shape: (54, 20), y shape: (54,)\n", + "DEBUG:__main__:X shape: (54, 20)\n", + "DEBUG:__main__:y shape: (54,)\n", + "DEBUG:__main__:Unique labels: [1 2]\n", + "INFO:__main__:Model successfully updated\n", + "DEBUG:__main__:Prediction (painted labels) updated successfully\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:in_n_out:Executing @injected reset_scroll_progress(viewer: napari.viewer.Viewer) with args: (Viewer(camera=Camera(center=(0.0, 82.32274855051404, 109.97160756573726), zoom=5.0925852846035005, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=False, mouse_zoom=True), cursor=Cursor(position=(24.0, 38.533594945657384, 43.10969449691828), scaled=True, style=, size=3.0), dims=Dims(ndim=3, ndisplay=2, order=(0, 1, 2), axis_labels=('0', '1', '2'), range=(RangeTuple(start=0.0, stop=49.0, step=1.0), RangeTuple(start=0.0, stop=179.0, step=1.0), RangeTuple(start=0.0, stop=219.0, step=1.0)), margin_left=(0.0, 0.0, 0.0), margin_right=(0.0, 0.0, 0.0), point=(24.0, 89.0, 109.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[, , , ], help='', status='', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={}),), kwargs: {}\n", + "DEBUG:in_n_out: Calling reset_scroll_progress with {'viewer': Viewer(camera=Camera(center=(0.0, 82.32274855051404, 109.97160756573726), zoom=5.0925852846035005, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=False, mouse_zoom=True), cursor=Cursor(position=(24.0, 38.533594945657384, 43.10969449691828), scaled=True, style=, size=3.0), dims=Dims(ndim=3, ndisplay=2, order=(0, 1, 2), axis_labels=('0', '1', '2'), range=(RangeTuple(start=0.0, stop=49.0, step=1.0), RangeTuple(start=0.0, stop=179.0, step=1.0), RangeTuple(start=0.0, stop=219.0, step=1.0)), margin_left=(0.0, 0.0, 0.0), margin_right=(0.0, 0.0, 0.0), point=(24.0, 89.0, 109.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[, , , ], help='', status='', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})} (injected set())\n" + ] + } + ], + "source": [ + "# painting superpixels\n", + "\n", + "import os\n", + "import zarr\n", + "import napari\n", + "import numpy as np\n", + "import pandas as pd\n", + "import copick\n", + "from pathlib import Path\n", + "from cellcanvas_spp.segmentation import superpixels\n", + "from skimage.measure import regionprops_table\n", + "from scipy import stats\n", + "from sklearn.ensemble import RandomForestClassifier\n", + "from skimage import future\n", + "from functools import partial\n", + "import threading\n", + "import toolz as tz\n", + "from psygnal import debounced\n", + "from superqt import ensure_main_thread\n", + "from qtpy.QtWidgets import (\n", + " QVBoxLayout,\n", + " QHBoxLayout,\n", + " QComboBox,\n", + " QLabel,\n", + " QCheckBox,\n", + " QDoubleSpinBox,\n", + " QGroupBox,\n", + " QWidget,\n", + ")\n", + "from appdirs import user_data_dir\n", + "import logging\n", + "\n", + "# Set up logging\n", + "logging.basicConfig(level=logging.DEBUG)\n", + "logger = logging.getLogger(__name__)\n", + "\n", + "# Set up the data directory\n", + "DATA_DIR = Path(\"/Users/kharrington/git/cellcanvas/superpixels/notebooks/my_synthetic_data_10439_dataportal.json\")\n", + "\n", + "# Load the tomogram\n", + "def load_tomogram():\n", + " config_file = DATA_DIR\n", + " root = copick.from_file(config_file)\n", + " run_name = \"16193\"\n", + " example_run = root.get_run(run_name)\n", + " tomogram = example_run.voxel_spacings[0].tomograms[0]\n", + " z = zarr.open(tomogram.zarr())\n", + " img = z[\"0\"] # Get the highest resolution scale\n", + " return np.asarray(img)\n", + "\n", + "# Load and crop the tomogram\n", + "full_tomogram = load_tomogram()\n", + "crop_3D = full_tomogram[50:100, 180:360, 210:430] # Adjust crop as needed\n", + "\n", + "# Compute superpixels\n", + "superpixel_seg = superpixels(crop_3D, sigma=4, h_minima=0.0025)\n", + "\n", + "# Set up Napari viewer\n", + "viewer = napari.Viewer()\n", + "scale = (1, 1, 1) # Adjust scale if needed\n", + "contrast_limits = (crop_3D.min(), crop_3D.max())\n", + "\n", + "# Add layers\n", + "data_layer = viewer.add_image(crop_3D, scale=scale, contrast_limits=contrast_limits, name=\"Tomogram\")\n", + "superpixel_layer = viewer.add_labels(superpixel_seg, scale=scale, name=\"Superpixels\", opacity=0.5)\n", + "\n", + "# Set up zarr for prediction and painting layers\n", + "zarr_path = os.path.join(user_data_dir(\"napari_dl_at_mbl_2024\", \"napari\"), \"diy_segmentation.zarr\")\n", + "print(f\"zarr path: {zarr_path}\")\n", + "prediction_data = zarr.open(f\"{zarr_path}/prediction\", mode='a', shape=crop_3D.shape, dtype='i4', dimension_separator=\"/\")\n", + "painting_data = zarr.open(f\"{zarr_path}/painting\", mode='a', shape=crop_3D.shape, dtype='i4', dimension_separator=\"/\")\n", + "\n", + "prediction_layer = viewer.add_labels(prediction_data, name=\"Prediction\", scale=scale)\n", + "painting_layer = viewer.add_labels(painting_data, name=\"Painting\", scale=scale)\n", + "\n", + "# Precompute regionprops features for each superpixel\n", + "def compute_superpixel_features(image, superpixels):\n", + " props = regionprops_table(superpixels, intensity_image=image,\n", + " properties=('label', \n", + " 'area', \n", + " 'bbox',\n", + " 'bbox_area',\n", + " 'centroid',\n", + " 'equivalent_diameter',\n", + " 'euler_number',\n", + " 'extent',\n", + " 'filled_area',\n", + " 'major_axis_length',\n", + " 'max_intensity',\n", + " 'mean_intensity',\n", + " 'min_intensity',\n", + " 'std_intensity',))\n", + " return props\n", + "\n", + "superpixel_features = compute_superpixel_features(crop_3D, superpixel_seg)\n", + "\n", + "def update_model(y, X, model_type):\n", + " logger.debug(f\"X shape: {X.shape}\")\n", + " logger.debug(f\"y shape: {y.shape}\")\n", + " logger.debug(f\"Unique labels: {np.unique(y)}\")\n", + " \n", + " if y.size == 0:\n", + " logger.warning(\"No labeled data found. Skipping model update.\")\n", + " return None\n", + " \n", + " if model_type == \"Random Forest\":\n", + " clf = RandomForestClassifier(n_estimators=50, n_jobs=-1, max_depth=10, max_samples=0.05)\n", + " \n", + " try:\n", + " clf.fit(X, y)\n", + " logger.info(\"Model successfully updated\")\n", + " return clf\n", + " except Exception as e:\n", + " logger.error(f\"Error updating model: {str(e)}\")\n", + " return None\n", + "\n", + "def predict(model, superpixel_features):\n", + " features = np.array([[superpixel_features[prop][i] for prop in superpixel_features.keys() if prop != 'label'] \n", + " for i in range(len(superpixel_features['label']))])\n", + " prediction = model.predict(features)\n", + " return prediction\n", + "\n", + "# Napari ML Widget\n", + "class NapariMLWidget(QWidget):\n", + " def __init__(self, parent=None):\n", + " super(NapariMLWidget, self).__init__(parent)\n", + " self.initUI()\n", + "\n", + " def initUI(self):\n", + " layout = QVBoxLayout()\n", + "\n", + " model_label = QLabel(\"Select Model\")\n", + " self.model_dropdown = QComboBox()\n", + " self.model_dropdown.addItems([\"Random Forest\"])\n", + " model_layout = QHBoxLayout()\n", + " model_layout.addWidget(model_label)\n", + " model_layout.addWidget(self.model_dropdown)\n", + " layout.addLayout(model_layout)\n", + "\n", + " self.live_fit_checkbox = QCheckBox(\"Live Model Fitting\")\n", + " self.live_fit_checkbox.setChecked(True)\n", + " layout.addWidget(self.live_fit_checkbox)\n", + "\n", + " self.live_pred_checkbox = QCheckBox(\"Live Prediction\")\n", + " self.live_pred_checkbox.setChecked(True)\n", + " layout.addWidget(self.live_pred_checkbox)\n", + "\n", + " self.setLayout(layout)\n", + "\n", + "# Add widget to Napari\n", + "widget = NapariMLWidget()\n", + "viewer.window.add_dock_widget(widget, name=\"Interactive Segmentation\")\n", + "\n", + "# Event listener\n", + "model = None\n", + "\n", + "@tz.curry\n", + "def on_data_change(event, viewer=None, widget=None):\n", + " painting_layer.refresh()\n", + "\n", + " thread = threading.Thread(\n", + " target=threaded_on_data_change,\n", + " args=(\n", + " event,\n", + " viewer.dims,\n", + " widget.model_dropdown.currentText(),\n", + " widget.live_fit_checkbox.isChecked(),\n", + " widget.live_pred_checkbox.isChecked(),\n", + " ),\n", + " )\n", + " thread.start()\n", + " thread.join()\n", + "\n", + " prediction_layer.refresh()\n", + "\n", + "def threaded_on_data_change(\n", + " event,\n", + " dims,\n", + " model_type,\n", + " live_fit,\n", + " live_prediction,\n", + "):\n", + " global model, crop_3D, painting_data, superpixel_seg, superpixel_features\n", + " \n", + " # Ensure consistent shapes\n", + " min_shape = [min(s1, s2, s3) for s1, s2, s3 in zip(crop_3D.shape, painting_data.shape, superpixel_seg.shape)]\n", + " logger.debug(f\"min_shape: {min_shape}\")\n", + " \n", + " active_labels = painting_data[:min_shape[0], :min_shape[1], :min_shape[2]]\n", + " crop_3D_subset = crop_3D[:min_shape[0], :min_shape[1], :min_shape[2]]\n", + " superpixel_seg_subset = superpixel_seg[:min_shape[0], :min_shape[1], :min_shape[2]]\n", + "\n", + " # Recompute superpixel features\n", + " superpixel_features = compute_superpixel_features(crop_3D_subset, superpixel_seg_subset)\n", + " \n", + " # Create a mask of painted pixels\n", + " painted_mask = active_labels > 0\n", + " \n", + " if live_fit:\n", + " # Prepare features and labels for training\n", + " X = []\n", + " y = []\n", + " for label in superpixel_features['label']:\n", + " mask = superpixel_seg_subset == label\n", + " if np.any(painted_mask[mask]): # Check if any pixel in this superpixel is painted\n", + " feature_vector = [superpixel_features[prop][superpixel_features['label'] == label][0] \n", + " for prop in superpixel_features.keys() if prop != 'label']\n", + " X.append(feature_vector)\n", + " y.append(stats.mode(active_labels[mask][painted_mask[mask]], axis=None)[0])\n", + " \n", + " X = np.array(X)\n", + " y = np.array(y)\n", + " \n", + " logger.debug(f\"Number of painted superpixels: {len(X)}\")\n", + " logger.debug(f\"X shape: {X.shape}, y shape: {y.shape}\")\n", + " \n", + " if len(X) > 0:\n", + " model = update_model(y, X, model_type)\n", + " else:\n", + " logger.warning(\"No painted superpixels found. Skipping model update.\")\n", + "\n", + " if live_prediction and model is not None:\n", + " try:\n", + " superpixel_predictions = predict(model, superpixel_features)\n", + " prediction = np.zeros_like(superpixel_seg_subset)\n", + " for i, label in enumerate(superpixel_features['label']):\n", + " prediction[superpixel_seg_subset == label] = superpixel_predictions[i]\n", + " prediction_layer.data[:min_shape[0], :min_shape[1], :min_shape[2]] = prediction\n", + " logger.debug(\"Prediction updated successfully\")\n", + " except Exception as e:\n", + " logger.error(f\"Error during prediction: {str(e)}\")\n", + "\n", + "# Connect event listeners\n", + "for listener in [viewer.dims.events, painting_layer.events.paint]:\n", + " listener.connect(\n", + " debounced(\n", + " ensure_main_thread(\n", + " on_data_change(viewer=viewer, widget=widget)\n", + " ),\n", + " timeout=1000,\n", + " )\n", + " )\n", + "\n", + "napari.run()" + ] + } + ], + "metadata": { + "jupytext": { + "formats": "ipynb,md:myst" + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/interactive_spp_v2.ipynb b/notebooks/interactive_spp_v2.ipynb new file mode 100644 index 0000000..4d31f40 --- /dev/null +++ b/notebooks/interactive_spp_v2.ipynb @@ -0,0 +1,1714 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "DEBUG:gql.dsl:Creating >)\n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating >)\n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Added arguments {'where': {'id': {'_eq': 10439}}} in field )\n", + "DEBUG:gql.dsl:Added fields: (, , , , , , , , , , , , , , , , , , , , , , , , , , , ) in \n", + "DEBUG:gql.dsl:Added fields: (,) in \n", + "INFO:gql.transport.requests:>>> {\"query\": \"{\\n datasets(where: {id: {_eq: 10439}}) {\\n id\\n cell_component_id\\n cell_component_name\\n cell_name\\n cell_strain_id\\n cell_strain_name\\n cell_type_id\\n dataset_citations\\n dataset_publications\\n deposition_date\\n description\\n grid_preparation\\n https_prefix\\n key_photo_thumbnail_url\\n key_photo_url\\n last_modified_date\\n organism_name\\n organism_taxid\\n other_setup\\n related_database_entries\\n related_database_links\\n release_date\\n s3_prefix\\n sample_preparation\\n sample_type\\n tissue_id\\n tissue_name\\n title\\n }\\n}\"}\n", + "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): graphql.cryoetdataportal.cziscience.com:443\n", + "DEBUG:urllib3.connectionpool:https://graphql.cryoetdataportal.cziscience.com:443 \"POST /v1/graphql HTTP/11\" 200 657\n", + "INFO:gql.transport.requests:<<< {\"data\":{\"datasets\":[{\"id\":10439,\"cell_component_id\":null,\"cell_component_name\":null,\"cell_name\":null,\"cell_strain_id\":null,\"cell_strain_name\":null,\"cell_type_id\":null,\"dataset_citations\":null,\"dataset_publications\":\"10.1109/TMI.2024.3398401\",\"deposition_date\":\"2024-08-21\",\"description\":\"This dataset is comprised of simulated tiltseries, tomograms and ground truth annotations for the purpose of benchmarking and training particle picking algorithms for cryoET. The data was simulated using polnet.\",\"grid_preparation\":\"\",\"https_prefix\":\"https://files.cryoetdataportal.cziscience.com/10439/\",\"key_photo_thumbnail_url\":\"https://files.cryoetdataportal.cziscience.com/10439/Images/thumbnail.png\",\"key_photo_url\":\"https://files.cryoetdataportal.cziscience.com/10439/Images/snapshot.png\",\"last_modified_date\":\"2024-08-21\",\"organism_name\":null,\"organism_taxid\":null,\"other_setup\":null,\"related_database_entries\":\"PDB-6MRD, PDB-1ZEF, PDB-6UPH, PDB-7TM3, PDB-7PKZ, PDB-6NK5\",\"related_database_links\":null,\"release_date\":\"2024-08-21\",\"s3_prefix\":\"s3://cryoet-data-portal-public/10439/\",\"sample_preparation\":\"Simulation of 3D volumes with polnet + projection using IMOD's xyzproj + addition of noise + reconstruction with IMOD's tilt\",\"sample_type\":\"in_silico\",\"tissue_id\":null,\"tissue_name\":null,\"title\":\"CZ Imaging Institute simulated dataset 1\"}]}}\n", + "DEBUG:gql.dsl:Creating >)\n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating >)\n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Added arguments {'where': {'id': {'_eq': 16193}}} in field )\n", + "DEBUG:gql.dsl:Added fields: (, , , , ) in \n", + "DEBUG:gql.dsl:Added fields: (,) in \n", + "INFO:gql.transport.requests:>>> {\"query\": \"{\\n runs(where: {id: {_eq: 16193}}) {\\n id\\n dataset_id\\n https_prefix\\n name\\n s3_prefix\\n }\\n}\"}\n", + "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): graphql.cryoetdataportal.cziscience.com:443\n", + "DEBUG:urllib3.connectionpool:https://graphql.cryoetdataportal.cziscience.com:443 \"POST /v1/graphql HTTP/11\" 200 197\n", + "INFO:gql.transport.requests:<<< {\"data\":{\"runs\":[{\"id\":16193,\"dataset_id\":10439,\"https_prefix\":\"https://files.cryoetdataportal.cziscience.com/10439/TS_4/\",\"name\":\"TS_4\",\"s3_prefix\":\"s3://cryoet-data-portal-public/10439/TS_4/\"}]}}\n", + "DEBUG:gql.dsl:Creating >)\n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating >)\n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Added arguments {'where': {'run_id': {'_eq': 16193}}} in field )\n", + "DEBUG:gql.dsl:Added fields: (, , , , ) in \n", + "DEBUG:gql.dsl:Added fields: (,) in \n", + "INFO:gql.transport.requests:>>> {\"query\": \"{\\n tomogram_voxel_spacings(where: {run_id: {_eq: 16193}}) {\\n id\\n https_prefix\\n run_id\\n s3_prefix\\n voxel_spacing\\n }\\n}\"}\n", + "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): graphql.cryoetdataportal.cziscience.com:443\n", + "DEBUG:urllib3.connectionpool:https://graphql.cryoetdataportal.cziscience.com:443 \"POST /v1/graphql HTTP/11\" 200 277\n", + "INFO:gql.transport.requests:<<< {\"data\":{\"tomogram_voxel_spacings\":[{\"id\":16398,\"https_prefix\":\"https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/\",\"run_id\":16193,\"s3_prefix\":\"s3://cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/\",\"voxel_spacing\":10.0}]}}\n", + "DEBUG:gql.dsl:Creating >)\n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Creating >)\n", + "DEBUG:gql.dsl:Creating \n", + "DEBUG:gql.dsl:Added arguments {'where': {'tomogram_voxel_spacing_id': {'_eq': 16398}}} in field )\n", + "DEBUG:gql.dsl:Added fields: (, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ) in \n", + "DEBUG:gql.dsl:Added fields: (,) in \n", + "INFO:gql.transport.requests:>>> {\"query\": \"{\\n tomograms(where: {tomogram_voxel_spacing_id: {_eq: 16398}}) {\\n id\\n affine_transformation_matrix\\n ctf_corrected\\n deposition_id\\n fiducial_alignment_status\\n https_mrc_scale0\\n https_omezarr_dir\\n is_canonical\\n key_photo_thumbnail_url\\n key_photo_url\\n name\\n neuroglancer_config\\n offset_x\\n offset_y\\n offset_z\\n processing\\n processing_software\\n reconstruction_method\\n reconstruction_software\\n s3_mrc_scale0\\n s3_omezarr_dir\\n scale0_dimensions\\n scale1_dimensions\\n scale2_dimensions\\n size_x\\n size_y\\n size_z\\n tomogram_version\\n tomogram_voxel_spacing_id\\n type\\n voxel_spacing\\n }\\n}\"}\n", + "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): graphql.cryoetdataportal.cziscience.com:443\n", + "DEBUG:urllib3.connectionpool:https://graphql.cryoetdataportal.cziscience.com:443 \"POST /v1/graphql HTTP/11\" 200 1913\n", + "INFO:gql.transport.requests:<<< {\"data\":{\"tomograms\":[{\"id\":16485,\"affine_transformation_matrix\":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],\"ctf_corrected\":true,\"deposition_id\":10309,\"fiducial_alignment_status\":\"NON_FIDUCIAL\",\"https_mrc_scale0\":\"https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.mrc\",\"https_omezarr_dir\":\"https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr\",\"is_canonical\":true,\"key_photo_thumbnail_url\":\"https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/KeyPhotos/key-photo-thumbnail.png\",\"key_photo_url\":\"https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/KeyPhotos/key-photo-snapshot.png\",\"name\":\"TS_4\",\"neuroglancer_config\":\"{\\\"dimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"crossSectionScale\\\":1.575,\\\"projectionOrientation\\\":[0.3826834323650898,0.0,0.0,0.9238795325112867],\\\"layers\\\":[{\\\"type\\\":\\\"image\\\",\\\"name\\\":\\\"TS_4\\\",\\\"source\\\":{\\\"url\\\":\\\"zarr://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"opacity\\\":0.51,\\\"tab\\\":\\\"rendering\\\",\\\"visible\\\":true,\\\"shader\\\":\\\"#uicontrol invlerp contrast\\\\n#uicontrol bool invert_contrast checkbox\\\\n\\\\nfloat get_contrast() {\\\\n return invert_contrast ? 1.0 - contrast() : contrast();\\\\n}\\\\n\\\\nvoid main() {\\\\n float outputValue;\\\\n outputValue = get_contrast();\\\\n emitGrayscale(outputValue);\\\\n}\\\",\\\"shaderControls\\\":{\\\"contrast\\\":{\\\"range\\\":[-5.978126147761941,5.961846014484763],\\\"window\\\":[-7.1721233639866115,7.155843230709434]}},\\\"_position\\\":[315.0,315.0,100.0],\\\"_crossSectionScale\\\":1.575,\\\"_projectionScale\\\":693.0},{\\\"type\\\":\\\"segmentation\\\",\\\"name\\\":\\\"100 membrane segmentation\\\",\\\"source\\\":{\\\"url\\\":\\\"precomputed://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/NeuroglancerPrecompute/100-membrane-1.0_segmentationmask\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"tab\\\":\\\"rendering\\\",\\\"selectedAlpha\\\":1,\\\"hoverHighlight\\\":false,\\\"segments\\\":[1],\\\"segmentDefaultColor\\\":\\\"#fa72b0\\\",\\\"visible\\\":true},{\\\"type\\\":\\\"segmentation\\\",\\\"name\\\":\\\"101 GroEL-GroES complex segmentation\\\",\\\"source\\\":{\\\"url\\\":\\\"precomputed://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/NeuroglancerPrecompute/101-groel_groes_complex-1.0_segmentationmask\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"tab\\\":\\\"rendering\\\",\\\"selectedAlpha\\\":1,\\\"hoverHighlight\\\":false,\\\"segments\\\":[1],\\\"segmentDefaultColor\\\":\\\"#00ff00\\\",\\\"visible\\\":true},{\\\"type\\\":\\\"annotation\\\",\\\"name\\\":\\\"101 GroEL-GroES complex point\\\",\\\"source\\\":{\\\"url\\\":\\\"precomputed://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/NeuroglancerPrecompute/101-groel_groes_complex-1.0_orientedpoint\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"tab\\\":\\\"rendering\\\",\\\"visible\\\":true,\\\"shader\\\":\\\"#uicontrol float pointScale slider(min=0.01, max=2.0, step=0.01)\\\\n#uicontrol float opacity slider(min=0.0, max=1.0, step=0.01)\\\\n#uicontrol vec3 color color\\\\n\\\\nvoid main() {\\\\n if (opacity == 0.0) discard;\\\\n setColor(vec4(color, opacity));\\\\n setPointMarkerSize(pointScale * prop_diameter());\\\\n setPointMarkerBorderWidth(0.1);\\\\n setPointMarkerBorderColor(vec4(0.0, 0.0, 0.0, opacity));\\\\n}\\\",\\\"shaderControls\\\":{\\\"pointScale\\\":1.0,\\\"opacity\\\":1.0,\\\"color\\\":\\\"#0000ff\\\"}},{\\\"type\\\":\\\"segmentation\\\",\\\"name\\\":\\\"102 Alkaline phosphatase, placental type segmentation\\\",\\\"source\\\":{\\\"url\\\":\\\"precomputed://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/NeuroglancerPrecompute/102-alkaline_phosphatase__placental_type-1.0_segmentationmask\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"tab\\\":\\\"rendering\\\",\\\"selectedAlpha\\\":1,\\\"hoverHighlight\\\":false,\\\"segments\\\":[1],\\\"segmentDefaultColor\\\":\\\"#00ffff\\\",\\\"visible\\\":true},{\\\"type\\\":\\\"annotation\\\",\\\"name\\\":\\\"102 Alkaline phosphatase, placental type point\\\",\\\"source\\\":{\\\"url\\\":\\\"precomputed://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/NeuroglancerPrecompute/102-alkaline_phosphatase__placental_type-1.0_orientedpoint\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"tab\\\":\\\"rendering\\\",\\\"visible\\\":true,\\\"shader\\\":\\\"#uicontrol float pointScale slider(min=0.01, max=2.0, step=0.01)\\\\n#uicontrol float opacity slider(min=0.0, max=1.0, step=0.01)\\\\n#uicontrol vec3 color color\\\\n\\\\nvoid main() {\\\\n if (opacity == 0.0) discard;\\\\n setColor(vec4(color, opacity));\\\\n setPointMarkerSize(pointScale * prop_diameter());\\\\n setPointMarkerBorderWidth(0.1);\\\\n setPointMarkerBorderColor(vec4(0.0, 0.0, 0.0, opacity));\\\\n}\\\",\\\"shaderControls\\\":{\\\"pointScale\\\":1.0,\\\"opacity\\\":1.0,\\\"color\\\":\\\"#ffff00\\\"}},{\\\"type\\\":\\\"segmentation\\\",\\\"name\\\":\\\"103 nucleosome segmentation\\\",\\\"source\\\":{\\\"url\\\":\\\"precomputed://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/NeuroglancerPrecompute/103-nucleosome-1.0_segmentationmask\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"tab\\\":\\\"rendering\\\",\\\"selectedAlpha\\\":1,\\\"hoverHighlight\\\":false,\\\"segments\\\":[1],\\\"segmentDefaultColor\\\":\\\"#ff0000\\\",\\\"visible\\\":true},{\\\"type\\\":\\\"annotation\\\",\\\"name\\\":\\\"103 nucleosome point\\\",\\\"source\\\":{\\\"url\\\":\\\"precomputed://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/NeuroglancerPrecompute/103-nucleosome-1.0_orientedpoint\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"tab\\\":\\\"rendering\\\",\\\"visible\\\":true,\\\"shader\\\":\\\"#uicontrol float pointScale slider(min=0.01, max=2.0, step=0.01)\\\\n#uicontrol float opacity slider(min=0.0, max=1.0, step=0.01)\\\\n#uicontrol vec3 color color\\\\n\\\\nvoid main() {\\\\n if (opacity == 0.0) discard;\\\\n setColor(vec4(color, opacity));\\\\n setPointMarkerSize(pointScale * prop_diameter());\\\\n setPointMarkerBorderWidth(0.1);\\\\n setPointMarkerBorderColor(vec4(0.0, 0.0, 0.0, opacity));\\\\n}\\\",\\\"shaderControls\\\":{\\\"pointScale\\\":1.0,\\\"opacity\\\":1.0,\\\"color\\\":\\\"#008080\\\"}},{\\\"type\\\":\\\"segmentation\\\",\\\"name\\\":\\\"104 cytosolic ribosome segmentation\\\",\\\"source\\\":{\\\"url\\\":\\\"precomputed://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/NeuroglancerPrecompute/104-cytosolic_ribosome-1.0_segmentationmask\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"tab\\\":\\\"rendering\\\",\\\"selectedAlpha\\\":1,\\\"hoverHighlight\\\":false,\\\"segments\\\":[1],\\\"segmentDefaultColor\\\":\\\"#9c7b01\\\",\\\"visible\\\":true},{\\\"type\\\":\\\"annotation\\\",\\\"name\\\":\\\"104 cytosolic ribosome point\\\",\\\"source\\\":{\\\"url\\\":\\\"precomputed://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/NeuroglancerPrecompute/104-cytosolic_ribosome-1.0_orientedpoint\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"tab\\\":\\\"rendering\\\",\\\"visible\\\":true,\\\"shader\\\":\\\"#uicontrol float pointScale slider(min=0.01, max=2.0, step=0.01)\\\\n#uicontrol float opacity slider(min=0.0, max=1.0, step=0.01)\\\\n#uicontrol vec3 color color\\\\n\\\\nvoid main() {\\\\n if (opacity == 0.0) discard;\\\\n setColor(vec4(color, opacity));\\\\n setPointMarkerSize(pointScale * prop_diameter());\\\\n setPointMarkerBorderWidth(0.1);\\\\n setPointMarkerBorderColor(vec4(0.0, 0.0, 0.0, opacity));\\\\n}\\\",\\\"shaderControls\\\":{\\\"pointScale\\\":1.0,\\\"opacity\\\":1.0,\\\"color\\\":\\\"#800080\\\"}},{\\\"type\\\":\\\"segmentation\\\",\\\"name\\\":\\\"105 Major vault protein segmentation\\\",\\\"source\\\":{\\\"url\\\":\\\"precomputed://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/NeuroglancerPrecompute/105-major_vault_protein-1.0_segmentationmask\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"tab\\\":\\\"rendering\\\",\\\"selectedAlpha\\\":1,\\\"hoverHighlight\\\":false,\\\"segments\\\":[1],\\\"segmentDefaultColor\\\":\\\"#80ff80\\\",\\\"visible\\\":true},{\\\"type\\\":\\\"annotation\\\",\\\"name\\\":\\\"105 Major vault protein point\\\",\\\"source\\\":{\\\"url\\\":\\\"precomputed://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/NeuroglancerPrecompute/105-major_vault_protein-1.0_orientedpoint\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"tab\\\":\\\"rendering\\\",\\\"visible\\\":true,\\\"shader\\\":\\\"#uicontrol float pointScale slider(min=0.01, max=2.0, step=0.01)\\\\n#uicontrol float opacity slider(min=0.0, max=1.0, step=0.01)\\\\n#uicontrol vec3 color color\\\\n\\\\nvoid main() {\\\\n if (opacity == 0.0) discard;\\\\n setColor(vec4(color, opacity));\\\\n setPointMarkerSize(pointScale * prop_diameter());\\\\n setPointMarkerBorderWidth(0.1);\\\\n setPointMarkerBorderColor(vec4(0.0, 0.0, 0.0, opacity));\\\\n}\\\",\\\"shaderControls\\\":{\\\"pointScale\\\":1.0,\\\"opacity\\\":1.0,\\\"color\\\":\\\"#6881fc\\\"}},{\\\"type\\\":\\\"segmentation\\\",\\\"name\\\":\\\"106 virus-like capsid segmentation\\\",\\\"source\\\":{\\\"url\\\":\\\"precomputed://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/NeuroglancerPrecompute/106-chikungunya_vlp-1.0_segmentationmask\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"tab\\\":\\\"rendering\\\",\\\"selectedAlpha\\\":1,\\\"hoverHighlight\\\":false,\\\"segments\\\":[1],\\\"segmentDefaultColor\\\":\\\"#ff00ff\\\",\\\"visible\\\":true},{\\\"type\\\":\\\"annotation\\\",\\\"name\\\":\\\"106 virus-like capsid point\\\",\\\"source\\\":{\\\"url\\\":\\\"precomputed://https://files.cryoetdataportal.cziscience.com/10439/TS_4/Tomograms/VoxelSpacing10.000/NeuroglancerPrecompute/106-chikungunya_vlp-1.0_orientedpoint\\\",\\\"transform\\\":{\\\"outputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]},\\\"inputDimensions\\\":{\\\"x\\\":[1e-09,\\\"m\\\"],\\\"y\\\":[1e-09,\\\"m\\\"],\\\"z\\\":[1e-09,\\\"m\\\"]}}},\\\"tab\\\":\\\"rendering\\\",\\\"visible\\\":true,\\\"shader\\\":\\\"#uicontrol float pointScale slider(min=0.01, max=2.0, step=0.01)\\\\n#uicontrol float opacity slider(min=0.0, max=1.0, step=0.01)\\\\n#uicontrol vec3 color color\\\\n\\\\nvoid main() {\\\\n if (opacity == 0.0) discard;\\\\n setColor(vec4(color, opacity));\\\\n setPointMarkerSize(pointScale * prop_diameter());\\\\n setPointMarkerBorderWidth(0.1);\\\\n setPointMarkerBorderColor(vec4(0.0, 0.0, 0.0, opacity));\\\\n}\\\",\\\"shaderControls\\\":{\\\"pointScale\\\":1.0,\\\"opacity\\\":1.0,\\\"color\\\":\\\"#008000\\\"}}],\\\"selectedLayer\\\":{\\\"visible\\\":true,\\\"layer\\\":\\\"TS_4\\\"},\\\"crossSectionBackgroundColor\\\":\\\"#000000\\\",\\\"layout\\\":\\\"4panel\\\",\\\"position\\\":[315.0,315.0,100.0],\\\"projectionScale\\\":693.0,\\\"deposition_id\\\":10309,\\\"last_updated_at\\\":1724697119}\",\"offset_x\":0,\"offset_y\":0,\"offset_z\":0,\"processing\":\"raw\",\"processing_software\":null,\"reconstruction_method\":\"WBP\",\"reconstruction_software\":\"IMOD\",\"s3_mrc_scale0\":\"s3://cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.mrc\",\"s3_omezarr_dir\":\"s3://cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr\",\"scale0_dimensions\":\"630,630,200\",\"scale1_dimensions\":\"315,315,100\",\"scale2_dimensions\":\"158,158,50\",\"size_x\":630,\"size_y\":630,\"size_z\":200,\"tomogram_version\":\"1\",\"tomogram_voxel_spacing_id\":16398,\"type\":\"CANONICAL\",\"voxel_spacing\":10.0}]}}\n", + "DEBUG:asyncio:Using selector: KqueueSelector\n", + "DEBUG:s3fs:Setting up s3fs instance\n", + "DEBUG:botocore.hooks:Changing event name from creating-client-class.iot-data to creating-client-class.iot-data-plane\n", + "DEBUG:botocore.hooks:Changing event name from before-call.apigateway to before-call.api-gateway\n", + "DEBUG:botocore.hooks:Changing event name from request-created.machinelearning.Predict to request-created.machine-learning.Predict\n", + "DEBUG:botocore.hooks:Changing event name from before-parameter-build.autoscaling.CreateLaunchConfiguration to before-parameter-build.auto-scaling.CreateLaunchConfiguration\n", + "DEBUG:botocore.hooks:Changing event name from before-parameter-build.route53 to before-parameter-build.route-53\n", + "DEBUG:botocore.hooks:Changing event name from request-created.cloudsearchdomain.Search to request-created.cloudsearch-domain.Search\n", + "DEBUG:botocore.hooks:Changing event name from docs.*.autoscaling.CreateLaunchConfiguration.complete-section to docs.*.auto-scaling.CreateLaunchConfiguration.complete-section\n", + "DEBUG:botocore.hooks:Changing event name from before-parameter-build.logs.CreateExportTask to before-parameter-build.cloudwatch-logs.CreateExportTask\n", + "DEBUG:botocore.hooks:Changing event name from docs.*.logs.CreateExportTask.complete-section to docs.*.cloudwatch-logs.CreateExportTask.complete-section\n", + "DEBUG:botocore.hooks:Changing event name from before-parameter-build.cloudsearchdomain.Search to before-parameter-build.cloudsearch-domain.Search\n", + "DEBUG:botocore.hooks:Changing event name from docs.*.cloudsearchdomain.Search.complete-section to docs.*.cloudsearch-domain.Search.complete-section\n", + "DEBUG:s3fs:RC: caching enabled? False (explicit option is False)\n", + "DEBUG:botocore.loaders:Loading JSON file: /Users/kharrington/.album/micromamba/envs/nesoi/lib/python3.10/site-packages/botocore/data/endpoints.json\n", + "DEBUG:botocore.loaders:Loading JSON file: /Users/kharrington/.album/micromamba/envs/nesoi/lib/python3.10/site-packages/botocore/data/sdk-default-configuration.json\n", + "DEBUG:botocore.hooks:Event choose-service-name: calling handler \n", + "DEBUG:botocore.loaders:Loading JSON file: /Users/kharrington/.album/micromamba/envs/nesoi/lib/python3.10/site-packages/botocore/data/s3/2006-03-01/service-2.json\n", + "DEBUG:botocore.loaders:Loading JSON file: /Users/kharrington/.album/micromamba/envs/nesoi/lib/python3.10/site-packages/botocore/data/s3/2006-03-01/endpoint-rule-set-1.json\n", + "DEBUG:botocore.loaders:Loading JSON file: /Users/kharrington/.album/micromamba/envs/nesoi/lib/python3.10/site-packages/botocore/data/partitions.json\n", + "DEBUG:botocore.hooks:Event creating-client-class.s3: calling handler \n", + "DEBUG:botocore.hooks:Event creating-client-class.s3: calling handler \n", + "DEBUG:botocore.configprovider:Looking for endpoint for s3 via: environment_service\n", + "DEBUG:botocore.configprovider:Looking for endpoint for s3 via: environment_global\n", + "DEBUG:botocore.configprovider:Looking for endpoint for s3 via: config_service\n", + "DEBUG:botocore.configprovider:Looking for endpoint for s3 via: config_global\n", + "DEBUG:botocore.configprovider:No configured endpoint found.\n", + "DEBUG:botocore.endpoint:Setting s3 timeout as (5, 15)\n", + "DEBUG:botocore.loaders:Loading JSON file: /Users/kharrington/.album/micromamba/envs/nesoi/lib/python3.10/site-packages/botocore/data/_retry.json\n", + "DEBUG:botocore.client:Registering retry handlers for service: s3\n", + "DEBUG:botocore.utils:Registering S3 region redirector handler\n", + "DEBUG:botocore.utils:Registering S3Express Identity Resolver\n", + "DEBUG:s3fs:CALL: head_object - ({},) - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.HeadObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=HeadObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray', 'query_string': {}, 'method': 'HEAD', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.HeadObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:botocore.httpsession:Certificate path: /Users/kharrington/.album/micromamba/envs/nesoi/lib/python3.10/site-packages/certifi/cacert.pem\n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-request-id': '36RN3H5R3P261C5B', 'x-amz-id-2': 'MfdwEks2fQ72/OyeTnaGN7YYN4TXV9uzrVWmKk1HQ2XPu+KDhMlrW+EJ58z1GOK14RtGoDORwLs=', 'content-type': 'application/xml', 'date': 'Thu, 19 Sep 2024 18:26:25 GMT', 'server': 'AmazonS3'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "b''\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.HeadObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.HeadObject: calling handler >\n", + "DEBUG:s3fs:Client error (maybe retryable): An error occurred (404) when calling the HeadObject operation: Not Found\n", + "DEBUG:s3fs:CALL: list_objects_v2 - ({},) - {'Bucket': 'cryoet-data-portal-public', 'Prefix': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray/', 'Delimiter': '/', 'MaxKeys': 1}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.ListObjectsV2: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.ListObjectsV2: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Prefix': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray/', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.ListObjectsV2: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=ListObjectsV2) with params: {'url_path': '?list-type=2', 'query_string': {'prefix': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray/', 'delimiter': '/', 'max-keys': 1, 'encoding-type': 'url'}, 'method': 'GET', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/?list-type=2&prefix=10439%2FTS_4%2FTomograms%2FVoxelSpacing10.000%2FCanonicalTomogram%2FTS_4.zarr%2F.zarray%2F&delimiter=%2F&max-keys=1&encoding-type=url', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 'encoding_type_auto_set': True, 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Prefix': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray/', 'Delimiter': '/', 'MaxKeys': 1, 'EncodingType': 'url'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Prefix': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray/'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.ListObjectsV2: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.ListObjectsV2: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': 'WaQEWBOFiQ6X1y7JzIbDltAKmItvdLa7BD+Kbkb2KgO+dNFWNYopAAN+aZmMjjngD+zDBSFBkMs=', 'x-amz-request-id': 'YCRDA8X3HMXYXMHT', 'date': 'Thu, 19 Sep 2024 18:26:27 GMT', 'x-amz-bucket-region': 'us-west-2', 'content-type': 'application/xml', 'transfer-encoding': 'chunked', 'server': 'AmazonS3'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "b'\\ncryoet-data-portal-public10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray/01/urlfalse'\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.ListObjectsV2: calling handler >\n", + "DEBUG:botocore.hooks:Event after-call.s3.ListObjectsV2: calling handler \n", + "DEBUG:s3fs:CALL: head_object - ({},) - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.HeadObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=HeadObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup', 'query_string': {}, 'method': 'HEAD', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.HeadObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': 'Y08TgSlj7ov7O0sVFyoPuENlmpZ7+/uYFyZGVmPQ9f1DCLLl1sTdEgy2hTa37GlmmpNwD0ERRsk=', 'x-amz-request-id': 'YCRA5Q7SW2TBPJ28', 'date': 'Thu, 19 Sep 2024 18:26:27 GMT', 'last-modified': 'Mon, 26 Aug 2024 20:21:43 GMT', 'etag': '\"e20297935e73dd0154104d4ea53040ab\"', 'x-amz-server-side-encryption': 'AES256', 'x-amz-version-id': 'Fu3v_bl7apvC68jUKAu.1GAj6NM.A7IB', 'accept-ranges': 'bytes', 'content-type': 'binary/octet-stream', 'server': 'AmazonS3', 'content-length': '24'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "b''\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.HeadObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.HeadObject: calling handler >\n", + "DEBUG:s3fs:CALL: head_object - ({},) - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.HeadObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=HeadObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray', 'query_string': {}, 'method': 'HEAD', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.HeadObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.HeadObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.HeadObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-request-id': 'YCR9AYXVPM0QTSDY', 'x-amz-id-2': 'e3sWym3PUc7YMTloxR3+1Nzl9LVyJsICj23C5F4ba1bPJ+1kgoalIMRdDcotAQlDKwmoI5h8Wxo=', 'content-type': 'application/xml', 'date': 'Thu, 19 Sep 2024 18:26:26 GMT', 'server': 'AmazonS3'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "b''\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.HeadObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.HeadObject: calling handler >\n", + "DEBUG:s3fs:Client error (maybe retryable): An error occurred (404) when calling the HeadObject operation: Not Found\n", + "DEBUG:s3fs:CALL: list_objects_v2 - ({},) - {'Bucket': 'cryoet-data-portal-public', 'Prefix': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray/', 'Delimiter': '/', 'MaxKeys': 1}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.ListObjectsV2: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.ListObjectsV2: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Prefix': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray/', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.ListObjectsV2: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=ListObjectsV2) with params: {'url_path': '?list-type=2', 'query_string': {'prefix': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray/', 'delimiter': '/', 'max-keys': 1, 'encoding-type': 'url'}, 'method': 'GET', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/?list-type=2&prefix=10439%2FTS_4%2FTomograms%2FVoxelSpacing10.000%2FCanonicalTomogram%2FTS_4.zarr%2F.zarray%2F&delimiter=%2F&max-keys=1&encoding-type=url', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 'encoding_type_auto_set': True, 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Prefix': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray/', 'Delimiter': '/', 'MaxKeys': 1, 'EncodingType': 'url'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Prefix': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray/'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.ListObjectsV2: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.ListObjectsV2: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': '+zY+EhiHtbJl+krXnGSD+OgqYdSE08zCFrORsH9fH+JK6iXsCEDpIckWK2y2NvZYH2QSo+2GB2Y=', 'x-amz-request-id': 'YCR3Y44V9T3SZW22', 'date': 'Thu, 19 Sep 2024 18:26:27 GMT', 'x-amz-bucket-region': 'us-west-2', 'content-type': 'application/xml', 'transfer-encoding': 'chunked', 'server': 'AmazonS3'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "b'\\ncryoet-data-portal-public10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zarray/01/urlfalse'\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.ListObjectsV2: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.ListObjectsV2: calling handler >\n", + "DEBUG:botocore.hooks:Event after-call.s3.ListObjectsV2: calling handler \n", + "DEBUG:s3fs:CALL: get_object - () - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=GetObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup', 'query_string': {}, 'method': 'GET', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/.zgroup'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': '1QapWg79O7UZMd5s4WkNcXSXetbkxMVKxc1pcom1N98GG90LuPIqFKGf5WXAWInOLtQxUfMMCtk=', 'x-amz-request-id': 'YCRFSZ0T08K09QAV', 'date': 'Thu, 19 Sep 2024 18:26:27 GMT', 'last-modified': 'Mon, 26 Aug 2024 20:21:43 GMT', 'etag': '\"e20297935e73dd0154104d4ea53040ab\"', 'x-amz-server-side-encryption': 'AES256', 'x-amz-version-id': 'Fu3v_bl7apvC68jUKAu.1GAj6NM.A7IB', 'accept-ranges': 'bytes', 'content-type': 'binary/octet-stream', 'server': 'AmazonS3', 'content-length': '24'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler >\n", + "DEBUG:s3fs:CALL: get_object - () - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/.zarray'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/.zarray', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=GetObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/.zarray', 'query_string': {}, 'method': 'GET', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/.zarray', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/.zarray', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/.zarray'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/.zarray'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': 'e7Gq6oduOj82K8HzGfi0m8L//7FjGsT9Yr7rliaEwUxNDI3pelHGjy6GC3cgU7I9ybIM8NJ71D4=', 'x-amz-request-id': 'YCR6RHKP57KHASM0', 'date': 'Thu, 19 Sep 2024 18:26:27 GMT', 'last-modified': 'Mon, 26 Aug 2024 20:21:43 GMT', 'etag': '\"cbb5884c0f249cd6bc817d0ad4a20db6\"', 'x-amz-server-side-encryption': 'AES256', 'x-amz-version-id': 'QjrulEKMovt.7Il_soOyVZPKhrCteP8I', 'accept-ranges': 'bytes', 'content-type': 'binary/octet-stream', 'server': 'AmazonS3', 'content-length': '399'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler >\n", + "DEBUG:s3fs:CALL: get_object - () - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/0'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/0', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=GetObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/0', 'query_string': {}, 'method': 'GET', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/0', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/0', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/0'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/0'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:s3fs:CALL: get_object - () - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/1'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/1', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=GetObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/1', 'query_string': {}, 'method': 'GET', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/1', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/1', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/1'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/1'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:s3fs:CALL: get_object - () - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/2'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/2', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=GetObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/2', 'query_string': {}, 'method': 'GET', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/2', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/2', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/2'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/0/2'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:s3fs:CALL: get_object - () - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/0'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/0', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=GetObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/0', 'query_string': {}, 'method': 'GET', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/0', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/0', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/0'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/0'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:s3fs:CALL: get_object - () - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/1'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/1', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=GetObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/1', 'query_string': {}, 'method': 'GET', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/1', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/1', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/1'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/1'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:s3fs:CALL: get_object - () - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/2'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/2', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=GetObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/2', 'query_string': {}, 'method': 'GET', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/2', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/2', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/2'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/1/2'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:s3fs:CALL: get_object - () - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/0'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/0', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=GetObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/0', 'query_string': {}, 'method': 'GET', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/0', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/0', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/0'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/0'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:s3fs:CALL: get_object - () - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/1'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/1', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=GetObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/1', 'query_string': {}, 'method': 'GET', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/1', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/1', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/1'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/1'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:s3fs:CALL: get_object - () - {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/2'}\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-parameter-build.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler \n", + "DEBUG:botocore.hooks:Event before-endpoint-resolution.s3: calling handler >\n", + "DEBUG:aiobotocore.regions:Calling endpoint provider with parameters: {'Bucket': 'cryoet-data-portal-public', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'ForcePathStyle': False, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/2', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True}\n", + "DEBUG:aiobotocore.regions:Endpoint provider result: https://cryoet-data-portal-public.s3.amazonaws.com\n", + "DEBUG:botocore.regions:Selecting from endpoint provider's list of auth schemes: \"sigv4\". User selected auth scheme is: \"\"\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-call.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Making request for OperationModel(name=GetObject) with params: {'url_path': '/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/2', 'query_string': {}, 'method': 'GET', 'headers': {'User-Agent': 'aiobotocore/2.13.3 md/Botocore#1.34.162 ua/2.0 os/macos#23.6.0 md/arch#x86_64 lang/python#3.10.8 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.34.162'}, 'body': b'', 'auth_path': '/cryoet-data-portal-public/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/2', 'url': 'https://cryoet-data-portal-public.s3.amazonaws.com/10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/2', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': False, 'auth_type': 'none', 's3_redirect': {'redirected': False, 'bucket': 'cryoet-data-portal-public', 'params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/2'}}, 'input_params': {'Bucket': 'cryoet-data-portal-public', 'Key': '10439/TS_4/Tomograms/VoxelSpacing10.000/CanonicalTomogram/TS_4.zarr/0/0/2/2'}, 'signing': {}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}}\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event choose-signer.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler \n", + "DEBUG:botocore.hooks:Event before-sign.s3.GetObject: calling handler >\n", + "DEBUG:botocore.hooks:Event request-created.s3.GetObject: calling handler \n", + "DEBUG:botocore.endpoint:Sending http request: \n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': 'NWJ9EKJzhb/wWgymoLYVWDCT0kxSPzTUizuXs4QSAooPN+WIeVQGDvRQWTz9ZfPGrwR9Qy6Xgpg=', 'x-amz-request-id': '80VJ06S4Y6P635SS', 'date': 'Thu, 19 Sep 2024 18:26:28 GMT', 'last-modified': 'Mon, 26 Aug 2024 20:21:43 GMT', 'etag': '\"3820d846b6e043b8bee440413994a74d-6\"', 'x-amz-server-side-encryption': 'AES256', 'x-amz-version-id': 'gZ.bdmAltrLFoXKiAogeIC4VwphlCacE', 'accept-ranges': 'bytes', 'content-type': 'binary/octet-stream', 'server': 'AmazonS3', 'content-length': '49084500'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler >\n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': 't7dRU2zGCgda9/3cIkuf4yBvvCoSpTGUb+CwkmE29/EL0QhmNt/Ncqnd3gwoG7BBvET2CvS+Qb8=', 'x-amz-request-id': '80VG4447KB1SMNEQ', 'date': 'Thu, 19 Sep 2024 18:26:28 GMT', 'last-modified': 'Mon, 26 Aug 2024 20:21:45 GMT', 'etag': '\"855fb6c0e2ea65711343bca05a670557-3\"', 'x-amz-server-side-encryption': 'AES256', 'x-amz-version-id': 'uWD0Te7f6RXovjGU3Cm8yRssVyQqDb2B', 'accept-ranges': 'bytes', 'content-type': 'binary/octet-stream', 'server': 'AmazonS3', 'content-length': '23014218'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler >\n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': '02R/LvGMY0+hgnxiWK8UZgijdNSO3tBPaV7rJuCcD6Q1V1FDDsdCHsbo3ZsyzlOWG35pYGNtu8I=', 'x-amz-request-id': '80VY4G02C73H6R20', 'date': 'Thu, 19 Sep 2024 18:26:28 GMT', 'last-modified': 'Mon, 26 Aug 2024 20:21:43 GMT', 'etag': '\"a04a0af0d3fbdd50889afaa242ab1849-3\"', 'x-amz-server-side-encryption': 'AES256', 'x-amz-version-id': 'HRNmXey_bbG3hSLZ9F6iDGBBuCcrCpo0', 'accept-ranges': 'bytes', 'content-type': 'binary/octet-stream', 'server': 'AmazonS3', 'content-length': '24073951'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler >\n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': 'iuBLogG9z58knsxwqOb7hstqwzC/Fn7lzussdiq4uyLcgiG/Icub13lFWTvdlyn4T6o3G6r+FPE=', 'x-amz-request-id': '80VHPJS044AWZ8Q1', 'date': 'Thu, 19 Sep 2024 18:26:28 GMT', 'last-modified': 'Mon, 26 Aug 2024 20:21:44 GMT', 'etag': '\"1c2c99accdebb831ca45263030fde531-3\"', 'x-amz-server-side-encryption': 'AES256', 'x-amz-version-id': '0_KxSYLeXbujPSAD3F3Kqen4vIEiMRGP', 'accept-ranges': 'bytes', 'content-type': 'binary/octet-stream', 'server': 'AmazonS3', 'content-length': '23015342'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler >\n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': 'sceI569Vgxe+8Huo4eXSKuuD+qMgJCII/PmCDSQQu1rM11s1BaveZZyB+/jq5vGhxcVsuS89JCk=', 'x-amz-request-id': '80VRV36KJJTKX1TS', 'date': 'Thu, 19 Sep 2024 18:26:28 GMT', 'last-modified': 'Mon, 26 Aug 2024 20:21:43 GMT', 'etag': '\"18d770042ccb9ac55897de3837229933-6\"', 'x-amz-server-side-encryption': 'AES256', 'x-amz-version-id': 'XMu6B0PqsVUONC6MhnujmGUaTmX9iiG5', 'accept-ranges': 'bytes', 'content-type': 'binary/octet-stream', 'server': 'AmazonS3', 'content-length': '49095219'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler >\n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': 'peKCrVuU+gtiQW3TFX0CwSaCPTGyR5yfse3UFxSx1TYGwwKwbKuTSuKndGswymFZ2BQf4To922s=', 'x-amz-request-id': '80VV9660NMYP8ZX3', 'date': 'Thu, 19 Sep 2024 18:26:28 GMT', 'last-modified': 'Mon, 26 Aug 2024 20:21:43 GMT', 'etag': '\"fa64c374fece66b1b59a1972c494ca0f-6\"', 'x-amz-server-side-encryption': 'AES256', 'x-amz-version-id': 'nB7SZzKOzy.yhbx2kLhp5Zt86HVcWpLl', 'accept-ranges': 'bytes', 'content-type': 'binary/octet-stream', 'server': 'AmazonS3', 'content-length': '49074515'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler >\n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': 'vX5NJ186o5LuAghRovDbSa1LiIJ4kL/QiQmePxvsASmb7k+uFxkEMuuuwutQJs3KOy6G62UH1q4=', 'x-amz-request-id': '80VNP96YBFMNW6MH', 'date': 'Thu, 19 Sep 2024 18:26:28 GMT', 'last-modified': 'Mon, 26 Aug 2024 20:21:45 GMT', 'etag': '\"311a9f7858a62f3515cbb56e3d9f73ac-2\"', 'x-amz-server-side-encryption': 'AES256', 'x-amz-version-id': 'z_v.KXmPfRq66T9sj7j6pyuqhkTaSoPZ', 'accept-ranges': 'bytes', 'content-type': 'binary/octet-stream', 'server': 'AmazonS3', 'content-length': '11377194'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler >\n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': 'ShgvwraA/4Gx5iglIsUwNHxcmVKO/xXsoarG7dhqGA2/huzLchGoyFXizjSTUMHby0nqkmGZBAA=', 'x-amz-request-id': '80VPTHAWV7D77MCG', 'date': 'Thu, 19 Sep 2024 18:26:28 GMT', 'last-modified': 'Mon, 26 Aug 2024 20:21:44 GMT', 'etag': '\"de60bd1925d74762d7d83da965e3d10a-3\"', 'x-amz-server-side-encryption': 'AES256', 'x-amz-version-id': '560JvnTN0FltaQM0C0DgdqR.Bdo3UKVT', 'accept-ranges': 'bytes', 'content-type': 'binary/octet-stream', 'server': 'AmazonS3', 'content-length': '24077977'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler >\n", + "DEBUG:botocore.parsers:Response headers: HTTPHeaderDict({'x-amz-id-2': 'z6PxLMoaUXNX3xDeWhu7psk58zS+kth2SP0tIPPScFukgAVS+59jgmJmbFfpJMvUTXn3VWstEx0=', 'x-amz-request-id': '80VTFTS68A7KWS1C', 'date': 'Thu, 19 Sep 2024 18:26:28 GMT', 'last-modified': 'Mon, 26 Aug 2024 20:21:43 GMT', 'etag': '\"a21f1cbed95c60ef28089bdb68e2cc6b-6\"', 'x-amz-server-side-encryption': 'AES256', 'x-amz-version-id': 'DJ6rx3L7cF74IMXDBqc9v59CQiM_7S.7', 'accept-ranges': 'bytes', 'content-type': 'binary/octet-stream', 'server': 'AmazonS3', 'content-length': '49082049'})\n", + "DEBUG:botocore.parsers:Response body:\n", + "\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler \n", + "DEBUG:botocore.retryhandler:No retry needed.\n", + "DEBUG:botocore.hooks:Event needs-retry.s3.GetObject: calling handler >\n", + "INFO:OpenGL.acceleratesupport:No OpenGL_accelerate module loaded: No module named 'OpenGL_accelerate'\n", + "DEBUG:in_n_out:Registering provider of : (weight: 0, subclassable: True)\n", + "DEBUG:in_n_out:Registering provider of : (weight: 0, subclassable: True)\n", + "DEBUG:in_n_out:Registering provider of : (weight: 0, subclassable: True)\n", + "DEBUG:in_n_out:Registering processor of napari.types.LayerDataTuple: (weight: 0, subclassable: False)\n", + "DEBUG:in_n_out:Registering processor of typing.List[napari.types.LayerDataTuple]: (weight: 0, subclassable: False)\n", + "DEBUG:in_n_out:Registering processor of : (weight: 0, subclassable: True)\n", + "DEBUG:in_n_out:Registering processor of napari.types.ImageData: functools.partial(, return_type=napari.types.ImageData) (weight: 0, subclassable: False)\n", + "DEBUG:in_n_out:Registering processor of concurrent.futures._base.Future[napari.types.ImageData]: functools.partial(, return_type=napari.types.ImageData, _from_tuple=False) (weight: 0, subclassable: False)\n", + "DEBUG:in_n_out:Registering processor of napari.types.LabelsData: functools.partial(, return_type=napari.types.LabelsData) (weight: 0, subclassable: False)\n", + "DEBUG:in_n_out:Registering processor of concurrent.futures._base.Future[napari.types.LabelsData]: functools.partial(, return_type=napari.types.LabelsData, _from_tuple=False) (weight: 0, subclassable: False)\n", + "DEBUG:in_n_out:Registering processor of napari.types.PointsData: functools.partial(, return_type=napari.types.PointsData) (weight: 0, subclassable: False)\n", + "DEBUG:in_n_out:Registering processor of concurrent.futures._base.Future[napari.types.PointsData]: functools.partial(, return_type=napari.types.PointsData, _from_tuple=False) (weight: 0, subclassable: False)\n", + "DEBUG:in_n_out:Registering processor of napari.types.ShapesData: functools.partial(, return_type=napari.types.ShapesData) (weight: 0, subclassable: False)\n", + "DEBUG:in_n_out:Registering processor of concurrent.futures._base.Future[napari.types.ShapesData]: functools.partial(, return_type=napari.types.ShapesData, _from_tuple=False) (weight: 0, subclassable: False)\n", + "DEBUG:in_n_out:Registering processor of napari.types.SurfaceData: functools.partial(, return_type=napari.types.SurfaceData) (weight: 0, subclassable: False)\n", + "DEBUG:in_n_out:Registering processor of concurrent.futures._base.Future[napari.types.SurfaceData]: functools.partial(, return_type=napari.types.SurfaceData, _from_tuple=False) (weight: 0, subclassable: False)\n", + "DEBUG:in_n_out:Registering processor of napari.types.TracksData: functools.partial(, return_type=napari.types.TracksData) (weight: 0, subclassable: False)\n", + "DEBUG:in_n_out:Registering processor of concurrent.futures._base.Future[napari.types.TracksData]: functools.partial(, return_type=napari.types.TracksData, _from_tuple=False) (weight: 0, subclassable: False)\n", + "DEBUG:in_n_out:Registering processor of napari.types.VectorsData: functools.partial(, return_type=napari.types.VectorsData) (weight: 0, subclassable: False)\n", + "DEBUG:in_n_out:Registering processor of concurrent.futures._base.Future[napari.types.VectorsData]: functools.partial(, return_type=napari.types.VectorsData, _from_tuple=False) (weight: 0, subclassable: False)\n", + "DEBUG:in_n_out:Registering processor of napari._qt.qthreading.FunctionWorker[napari.types.LayerDataTuple]: (weight: 0, subclassable: False)\n", + "DEBUG:in_n_out:Registering processor of napari._qt.qthreading.FunctionWorker[typing.List[napari.types.LayerDataTuple]]: (weight: 0, subclassable: False)\n", + "DEBUG:in_n_out:Registering processor of napari._qt.qthreading.FunctionWorker[napari.types.VectorsData]: (weight: 0, subclassable: False)\n", + "DEBUG:in_n_out:Registering processor of napari._qt.qthreading.FunctionWorker[napari.types.ShapesData]: (weight: 0, subclassable: False)\n", + "DEBUG:in_n_out:Registering processor of napari._qt.qthreading.FunctionWorker[napari.types.LabelsData]: (weight: 0, subclassable: False)\n", + "DEBUG:in_n_out:Registering processor of napari._qt.qthreading.FunctionWorker[napari.types.SurfaceData]: (weight: 0, subclassable: False)\n", + "DEBUG:in_n_out:Registering processor of napari._qt.qthreading.FunctionWorker[napari.types.TracksData]: (weight: 0, subclassable: False)\n", + "DEBUG:in_n_out:Registering processor of napari._qt.qthreading.FunctionWorker[napari.types.ImageData]: (weight: 0, subclassable: False)\n", + "DEBUG:in_n_out:Registering processor of napari._qt.qthreading.FunctionWorker[napari.types.PointsData]: (weight: 0, subclassable: False)\n", + "/Users/kharrington/.album/micromamba/envs/nesoi/lib/python3.10/site-packages/morphometrics_engine/measure.py:4: TqdmExperimentalWarning: Using `tqdm.autonotebook.tqdm` in notebook mode. Use `tqdm.tqdm` instead to force console mode (e.g. in jupyter console)\n", + " from tqdm.autonotebook import tqdm\n", + "DEBUG:matplotlib:CACHEDIR=/Users/kharrington/.matplotlib\n", + "DEBUG:matplotlib.font_manager:Using fontManager instance from /Users/kharrington/.matplotlib/fontlist-v390.json\n", + "DEBUG:h5py._conv:Creating converter from 7 to 5\n", + "DEBUG:h5py._conv:Creating converter from 5 to 7\n", + "DEBUG:h5py._conv:Creating converter from 7 to 5\n", + "DEBUG:h5py._conv:Creating converter from 5 to 7\n", + "DEBUG:in_n_out:Registering provider of : ._provide_window at 0x1c6aacd30> (weight: 0, subclassable: True)\n", + "DEBUG:in_n_out:Registering provider of : ._provide_qt_viewer at 0x1c7c43010> (weight: 0, subclassable: True)\n", + "DEBUG:in_n_out:Executing @injected ViewerToggleAction.__init__..get_current(viewer: napari.viewer.Viewer) with args: (), kwargs: {}\n", + "DEBUG:in_n_out:Rebuilding provider map cache\n", + "DEBUG:in_n_out: injecting viewer: = Viewer(camera=Camera(center=(0.0, 0.0, 0.0), zoom=1.0, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=True, mouse_zoom=True), cursor=Cursor(position=(1.0, 1.0), scaled=True, style=, size=1.0), dims=Dims(ndim=2, ndisplay=2, order=(0, 1), axis_labels=('0', '1'), range=(RangeTuple(start=0.0, stop=2.0, step=1.0), RangeTuple(start=0.0, stop=2.0, step=1.0)), margin_left=(0.0, 0.0), margin_right=(0.0, 0.0), point=(0.0, 0.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[], help='', status='Ready', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})\n", + "DEBUG:in_n_out: Calling ViewerToggleAction.__init__..get_current with {'viewer': Viewer(camera=Camera(center=(0.0, 0.0, 0.0), zoom=1.0, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=True, mouse_zoom=True), cursor=Cursor(position=(1.0, 1.0), scaled=True, style=, size=1.0), dims=Dims(ndim=2, ndisplay=2, order=(0, 1), axis_labels=('0', '1'), range=(RangeTuple(start=0.0, stop=2.0, step=1.0), RangeTuple(start=0.0, stop=2.0, step=1.0)), margin_left=(0.0, 0.0), margin_right=(0.0, 0.0), point=(0.0, 0.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[], help='', status='Ready', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})} (injected {'viewer'})\n", + "DEBUG:in_n_out:Executing @injected ViewerToggleAction.__init__..get_current(viewer: napari.viewer.Viewer) with args: (), kwargs: {}\n", + "DEBUG:in_n_out: injecting viewer: = Viewer(camera=Camera(center=(0.0, 0.0, 0.0), zoom=1.0, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=True, mouse_zoom=True), cursor=Cursor(position=(1.0, 1.0), scaled=True, style=, size=1.0), dims=Dims(ndim=2, ndisplay=2, order=(0, 1), axis_labels=('0', '1'), range=(RangeTuple(start=0.0, stop=2.0, step=1.0), RangeTuple(start=0.0, stop=2.0, step=1.0)), margin_left=(0.0, 0.0), margin_right=(0.0, 0.0), point=(0.0, 0.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[], help='', status='Ready', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})\n", + "DEBUG:in_n_out: Calling ViewerToggleAction.__init__..get_current with {'viewer': Viewer(camera=Camera(center=(0.0, 0.0, 0.0), zoom=1.0, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=True, mouse_zoom=True), cursor=Cursor(position=(1.0, 1.0), scaled=True, style=, size=1.0), dims=Dims(ndim=2, ndisplay=2, order=(0, 1), axis_labels=('0', '1'), range=(RangeTuple(start=0.0, stop=2.0, step=1.0), RangeTuple(start=0.0, stop=2.0, step=1.0)), margin_left=(0.0, 0.0), margin_right=(0.0, 0.0), point=(0.0, 0.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[], help='', status='Ready', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})} (injected {'viewer'})\n", + "DEBUG:in_n_out:Executing @injected ViewerToggleAction.__init__..get_current(viewer: napari.viewer.Viewer) with args: (), kwargs: {}\n", + "DEBUG:in_n_out: injecting viewer: = Viewer(camera=Camera(center=(0.0, 0.0, 0.0), zoom=1.0, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=True, mouse_zoom=True), cursor=Cursor(position=(1.0, 1.0), scaled=True, style=, size=1.0), dims=Dims(ndim=2, ndisplay=2, order=(0, 1), axis_labels=('0', '1'), range=(RangeTuple(start=0.0, stop=2.0, step=1.0), RangeTuple(start=0.0, stop=2.0, step=1.0)), margin_left=(0.0, 0.0), margin_right=(0.0, 0.0), point=(0.0, 0.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[], help='', status='Ready', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})\n", + "DEBUG:in_n_out: Calling ViewerToggleAction.__init__..get_current with {'viewer': Viewer(camera=Camera(center=(0.0, 0.0, 0.0), zoom=1.0, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=True, mouse_zoom=True), cursor=Cursor(position=(1.0, 1.0), scaled=True, style=, size=1.0), dims=Dims(ndim=2, ndisplay=2, order=(0, 1), axis_labels=('0', '1'), range=(RangeTuple(start=0.0, stop=2.0, step=1.0), RangeTuple(start=0.0, stop=2.0, step=1.0)), margin_left=(0.0, 0.0), margin_right=(0.0, 0.0), point=(0.0, 0.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[], help='', status='Ready', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})} (injected {'viewer'})\n", + "DEBUG:in_n_out:Executing @injected ViewerToggleAction.__init__..get_current(viewer: napari.viewer.Viewer) with args: (), kwargs: {}\n", + "DEBUG:in_n_out: injecting viewer: = Viewer(camera=Camera(center=(0.0, 0.0, 0.0), zoom=1.0, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=True, mouse_zoom=True), cursor=Cursor(position=(1.0, 1.0), scaled=True, style=, size=1.0), dims=Dims(ndim=2, ndisplay=2, order=(0, 1), axis_labels=('0', '1'), range=(RangeTuple(start=0.0, stop=2.0, step=1.0), RangeTuple(start=0.0, stop=2.0, step=1.0)), margin_left=(0.0, 0.0), margin_right=(0.0, 0.0), point=(0.0, 0.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[], help='', status='Ready', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})\n", + "DEBUG:in_n_out: Calling ViewerToggleAction.__init__..get_current with {'viewer': Viewer(camera=Camera(center=(0.0, 0.0, 0.0), zoom=1.0, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=True, mouse_zoom=True), cursor=Cursor(position=(1.0, 1.0), scaled=True, style=, size=1.0), dims=Dims(ndim=2, ndisplay=2, order=(0, 1), axis_labels=('0', '1'), range=(RangeTuple(start=0.0, stop=2.0, step=1.0), RangeTuple(start=0.0, stop=2.0, step=1.0)), margin_left=(0.0, 0.0), margin_right=(0.0, 0.0), point=(0.0, 0.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[], help='', status='Ready', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})} (injected {'viewer'})\n", + "DEBUG:in_n_out:Executing @injected ViewerToggleAction.__init__..get_current(viewer: napari.viewer.Viewer) with args: (), kwargs: {}\n", + "DEBUG:in_n_out: injecting viewer: = Viewer(camera=Camera(center=(0.0, 0.0, 0.0), zoom=1.0, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=True, mouse_zoom=True), cursor=Cursor(position=(1.0, 1.0), scaled=True, style=, size=1.0), dims=Dims(ndim=2, ndisplay=2, order=(0, 1), axis_labels=('0', '1'), range=(RangeTuple(start=0.0, stop=2.0, step=1.0), RangeTuple(start=0.0, stop=2.0, step=1.0)), margin_left=(0.0, 0.0), margin_right=(0.0, 0.0), point=(0.0, 0.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[], help='', status='Ready', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})\n", + "DEBUG:in_n_out: Calling ViewerToggleAction.__init__..get_current with {'viewer': Viewer(camera=Camera(center=(0.0, 0.0, 0.0), zoom=1.0, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=True, mouse_zoom=True), cursor=Cursor(position=(1.0, 1.0), scaled=True, style=, size=1.0), dims=Dims(ndim=2, ndisplay=2, order=(0, 1), axis_labels=('0', '1'), range=(RangeTuple(start=0.0, stop=2.0, step=1.0), RangeTuple(start=0.0, stop=2.0, step=1.0)), margin_left=(0.0, 0.0), margin_right=(0.0, 0.0), point=(0.0, 0.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[], help='', status='Ready', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})} (injected {'viewer'})\n", + "DEBUG:in_n_out:Executing @injected ViewerToggleAction.__init__..get_current(viewer: napari.viewer.Viewer) with args: (), kwargs: {}\n", + "DEBUG:in_n_out: injecting viewer: = Viewer(camera=Camera(center=(0.0, 0.0, 0.0), zoom=1.0, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=True, mouse_zoom=True), cursor=Cursor(position=(1.0, 1.0), scaled=True, style=, size=1.0), dims=Dims(ndim=2, ndisplay=2, order=(0, 1), axis_labels=('0', '1'), range=(RangeTuple(start=0.0, stop=2.0, step=1.0), RangeTuple(start=0.0, stop=2.0, step=1.0)), margin_left=(0.0, 0.0), margin_right=(0.0, 0.0), point=(0.0, 0.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[], help='', status='Ready', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})\n", + "DEBUG:in_n_out: Calling ViewerToggleAction.__init__..get_current with {'viewer': Viewer(camera=Camera(center=(0.0, 0.0, 0.0), zoom=1.0, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=True, mouse_zoom=True), cursor=Cursor(position=(1.0, 1.0), scaled=True, style=, size=1.0), dims=Dims(ndim=2, ndisplay=2, order=(0, 1), axis_labels=('0', '1'), range=(RangeTuple(start=0.0, stop=2.0, step=1.0), RangeTuple(start=0.0, stop=2.0, step=1.0)), margin_left=(0.0, 0.0), margin_right=(0.0, 0.0), point=(0.0, 0.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[], help='', status='Ready', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})} (injected {'viewer'})\n", + "DEBUG:in_n_out:Executing @injected ViewerToggleAction.__init__..get_current(viewer: napari.viewer.Viewer) with args: (), kwargs: {}\n", + "DEBUG:in_n_out: injecting viewer: = Viewer(camera=Camera(center=(0.0, 0.0, 0.0), zoom=1.0, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=True, mouse_zoom=True), cursor=Cursor(position=(1.0, 1.0), scaled=True, style=, size=1.0), dims=Dims(ndim=2, ndisplay=2, order=(0, 1), axis_labels=('0', '1'), range=(RangeTuple(start=0.0, stop=2.0, step=1.0), RangeTuple(start=0.0, stop=2.0, step=1.0)), margin_left=(0.0, 0.0), margin_right=(0.0, 0.0), point=(0.0, 0.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[], help='', status='Ready', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})\n", + "DEBUG:in_n_out: Calling ViewerToggleAction.__init__..get_current with {'viewer': Viewer(camera=Camera(center=(0.0, 0.0, 0.0), zoom=1.0, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=True, mouse_zoom=True), cursor=Cursor(position=(1.0, 1.0), scaled=True, style=, size=1.0), dims=Dims(ndim=2, ndisplay=2, order=(0, 1), axis_labels=('0', '1'), range=(RangeTuple(start=0.0, stop=2.0, step=1.0), RangeTuple(start=0.0, stop=2.0, step=1.0)), margin_left=(0.0, 0.0), margin_right=(0.0, 0.0), point=(0.0, 0.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[], help='', status='Ready', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})} (injected {'viewer'})\n", + "DEBUG:in_n_out:Executing @injected ViewerToggleAction.__init__..get_current(viewer: napari.viewer.Viewer) with args: (), kwargs: {}\n", + "DEBUG:in_n_out: injecting viewer: = Viewer(camera=Camera(center=(0.0, 0.0, 0.0), zoom=1.0, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=True, mouse_zoom=True), cursor=Cursor(position=(1.0, 1.0), scaled=True, style=, size=1.0), dims=Dims(ndim=2, ndisplay=2, order=(0, 1), axis_labels=('0', '1'), range=(RangeTuple(start=0.0, stop=2.0, step=1.0), RangeTuple(start=0.0, stop=2.0, step=1.0)), margin_left=(0.0, 0.0), margin_right=(0.0, 0.0), point=(0.0, 0.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[], help='', status='Ready', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})\n", + "DEBUG:in_n_out: Calling ViewerToggleAction.__init__..get_current with {'viewer': Viewer(camera=Camera(center=(0.0, 0.0, 0.0), zoom=1.0, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=True, mouse_zoom=True), cursor=Cursor(position=(1.0, 1.0), scaled=True, style=, size=1.0), dims=Dims(ndim=2, ndisplay=2, order=(0, 1), axis_labels=('0', '1'), range=(RangeTuple(start=0.0, stop=2.0, step=1.0), RangeTuple(start=0.0, stop=2.0, step=1.0)), margin_left=(0.0, 0.0), margin_right=(0.0, 0.0), point=(0.0, 0.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[], help='', status='Ready', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})} (injected {'viewer'})\n", + "DEBUG:in_n_out:Executing @injected _get_current_fullscreen_status(window: napari._qt.qt_main_window.Window) with args: (), kwargs: {}\n", + "DEBUG:in_n_out: injecting window: = \n", + "DEBUG:in_n_out: Calling _get_current_fullscreen_status with {'window': } (injected {'window'})\n", + "DEBUG:in_n_out:Executing @injected _get_current_menubar_status(window: napari._qt.qt_main_window.Window) with args: (), kwargs: {}\n", + "DEBUG:in_n_out: injecting window: = \n", + "DEBUG:in_n_out: Calling _get_current_menubar_status with {'window': } (injected {'window'})\n", + "DEBUG:in_n_out:Executing @injected _get_current_play_status(qt_viewer: napari._qt.qt_viewer.QtViewer) with args: (), kwargs: {}\n", + "DEBUG:in_n_out: injecting qt_viewer: = \n", + "DEBUG:in_n_out: Calling _get_current_play_status with {'qt_viewer': } (injected {'qt_viewer'})\n", + "DEBUG:in_n_out:Executing @injected _get_current_activity_dock_status(window: napari._qt.qt_main_window.Window) with args: (), kwargs: {}\n", + "DEBUG:in_n_out: injecting window: = \n", + "DEBUG:in_n_out: Calling _get_current_activity_dock_status with {'window': } (injected {'window'})\n", + "DEBUG:napari._qt.menus.plugins_menu:QtPluginDialog not available\n", + "Traceback (most recent call last):\n", + " File \"/Users/kharrington/git/kephale/nesoi/repos/napari/napari/_qt/menus/plugins_menu.py\", line 124, in _plugin_manager_dialog_cls\n", + " from napari_plugin_manager.qt_plugin_dialog import QtPluginDialog\n", + "ModuleNotFoundError: No module named 'napari_plugin_manager'\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Tomogram\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(0.0, 0.0, 0.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(0.0, 0.0, 0.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(99.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(99.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Tomogram\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(99.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(99.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Superpixels\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(99.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Superpixels\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Superpixels, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(99.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(99.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(99.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Painting\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(99.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "zarr path: /Users/kharrington/Library/Application Support/napari_dl_at_mbl_2024/diy_segmentation.zarr\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(99.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "DEBUG:in_n_out:Executing @injected activate_labels_paint_mode(layer: napari.layers.labels.labels.Labels) with args: (,), kwargs: {}\n", + "DEBUG:in_n_out: Calling activate_labels_paint_mode with {'layer': } (injected set())\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Painting\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:__main__:min_shape: [200, 630, 630]\n", + "DEBUG:__main__:active_labels\n", + "DEBUG:__main__:crop subset\n", + "DEBUG:__main__:superpixel subset\n", + "DEBUG:__main__:painted mask\n", + "DEBUG:__main__:preparing live fit\n", + "DEBUG:__main__:data prepared for live fit\n", + "DEBUG:__main__:Number of painted superpixels: 7\n", + "DEBUG:__main__:X shape: (7, 20), y shape: (7,)\n", + "DEBUG:__main__:X shape: (7, 20)\n", + "DEBUG:__main__:y shape: (7,)\n", + "DEBUG:__main__:Unique labels: [1]\n", + "INFO:__main__:Model successfully updated\n", + "DEBUG:__main__:Starting prediction\n", + "DEBUG:__main__:Prediction updated successfully\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Painting\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:__main__:min_shape: [200, 630, 630]\n", + "DEBUG:__main__:active_labels\n", + "DEBUG:__main__:crop subset\n", + "DEBUG:__main__:superpixel subset\n", + "DEBUG:__main__:painted mask\n", + "DEBUG:__main__:preparing live fit\n", + "DEBUG:__main__:data prepared for live fit\n", + "DEBUG:__main__:Number of painted superpixels: 11\n", + "DEBUG:__main__:X shape: (11, 20), y shape: (11,)\n", + "DEBUG:__main__:X shape: (11, 20)\n", + "DEBUG:__main__:y shape: (11,)\n", + "DEBUG:__main__:Unique labels: [1 2]\n", + "INFO:__main__:Model successfully updated\n", + "DEBUG:__main__:Starting prediction\n", + "DEBUG:__main__:Prediction updated successfully\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:in_n_out:Executing @injected reset_scroll_progress(viewer: napari.viewer.Viewer) with args: (Viewer(camera=Camera(center=(0.0, 267.76655893912755, 228.96937087959103), zoom=2.93126943935211, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=False, mouse_zoom=True), cursor=Cursor(position=(99.0, 123.46048239740344, 99.84442677639476), scaled=True, style=, size=2.0), dims=Dims(ndim=3, ndisplay=2, order=(0, 1, 2), axis_labels=('0', '1', '2'), range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)), margin_left=(0.0, 0.0, 0.0), margin_right=(0.0, 0.0, 0.0), point=(99.0, 314.0, 314.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[, , , ], help='use <6> for pan/zoom, use <7> for transform, use <1> for activate the label eraser, use <3> for activate the polygon tool, use <4> for activate the fill bucket, use <5> for pick mode', status='', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={}),), kwargs: {}\n", + "DEBUG:in_n_out: Calling reset_scroll_progress with {'viewer': Viewer(camera=Camera(center=(0.0, 267.76655893912755, 228.96937087959103), zoom=2.93126943935211, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=False, mouse_zoom=True), cursor=Cursor(position=(99.0, 123.46048239740344, 99.84442677639476), scaled=True, style=, size=2.0), dims=Dims(ndim=3, ndisplay=2, order=(0, 1, 2), axis_labels=('0', '1', '2'), range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)), margin_left=(0.0, 0.0, 0.0), margin_right=(0.0, 0.0, 0.0), point=(99.0, 314.0, 314.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[, , , ], help='use <6> for pan/zoom, use <7> for transform, use <1> for activate the label eraser, use <3> for activate the polygon tool, use <4> for activate the fill bucket, use <5> for pick mode', status='', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})} (injected set())\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Painting\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:__main__:min_shape: [200, 630, 630]\n", + "DEBUG:__main__:active_labels\n", + "DEBUG:__main__:crop subset\n", + "DEBUG:__main__:superpixel subset\n", + "DEBUG:__main__:painted mask\n", + "DEBUG:__main__:preparing live fit\n", + "DEBUG:__main__:data prepared for live fit\n", + "DEBUG:__main__:Number of painted superpixels: 14\n", + "DEBUG:__main__:X shape: (14, 20), y shape: (14,)\n", + "DEBUG:__main__:X shape: (14, 20)\n", + "DEBUG:__main__:y shape: (14,)\n", + "DEBUG:__main__:Unique labels: [1 2]\n", + "INFO:__main__:Model successfully updated\n", + "DEBUG:__main__:Starting prediction\n", + "DEBUG:__main__:Prediction updated successfully\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:in_n_out:Executing @injected reset_scroll_progress(viewer: napari.viewer.Viewer) with args: (Viewer(camera=Camera(center=(0.0, 254.48096097222805, 218.51374178609714), zoom=3.254601336841471, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=False, mouse_zoom=True), cursor=Cursor(position=(99.0, 134.34336115566083, 83.47416159962059), scaled=True, style=, size=2.0), dims=Dims(ndim=3, ndisplay=2, order=(0, 1, 2), axis_labels=('0', '1', '2'), range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)), margin_left=(0.0, 0.0, 0.0), margin_right=(0.0, 0.0, 0.0), point=(99.0, 314.0, 314.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[, , , ], help='use <6> for pan/zoom, use <7> for transform, use <1> for activate the label eraser, use <3> for activate the polygon tool, use <4> for activate the fill bucket, use <5> for pick mode', status='', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={}),), kwargs: {}\n", + "DEBUG:in_n_out: Calling reset_scroll_progress with {'viewer': Viewer(camera=Camera(center=(0.0, 254.48096097222805, 218.51374178609714), zoom=3.254601336841471, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=False, mouse_zoom=True), cursor=Cursor(position=(99.0, 134.34336115566083, 83.47416159962059), scaled=True, style=, size=2.0), dims=Dims(ndim=3, ndisplay=2, order=(0, 1, 2), axis_labels=('0', '1', '2'), range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)), margin_left=(0.0, 0.0, 0.0), margin_right=(0.0, 0.0, 0.0), point=(99.0, 314.0, 314.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[, , , ], help='use <6> for pan/zoom, use <7> for transform, use <1> for activate the label eraser, use <3> for activate the polygon tool, use <4> for activate the fill bucket, use <5> for pick mode', status='', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})} (injected set())\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Painting\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:__main__:min_shape: [200, 630, 630]\n", + "DEBUG:__main__:active_labels\n", + "DEBUG:__main__:crop subset\n", + "DEBUG:__main__:superpixel subset\n", + "DEBUG:__main__:painted mask\n", + "DEBUG:__main__:preparing live fit\n", + "DEBUG:__main__:data prepared for live fit\n", + "DEBUG:__main__:Number of painted superpixels: 16\n", + "DEBUG:__main__:X shape: (16, 20), y shape: (16,)\n", + "DEBUG:__main__:X shape: (16, 20)\n", + "DEBUG:__main__:y shape: (16,)\n", + "DEBUG:__main__:Unique labels: [1 2 3]\n", + "INFO:__main__:Model successfully updated\n", + "DEBUG:__main__:Starting prediction\n", + "DEBUG:__main__:Prediction updated successfully\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Painting\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:__main__:min_shape: [200, 630, 630]\n", + "DEBUG:__main__:active_labels\n", + "DEBUG:__main__:crop subset\n", + "DEBUG:__main__:superpixel subset\n", + "DEBUG:__main__:painted mask\n", + "DEBUG:__main__:preparing live fit\n", + "DEBUG:__main__:data prepared for live fit\n", + "DEBUG:__main__:Number of painted superpixels: 48\n", + "DEBUG:__main__:X shape: (48, 20), y shape: (48,)\n", + "DEBUG:__main__:X shape: (48, 20)\n", + "DEBUG:__main__:y shape: (48,)\n", + "DEBUG:__main__:Unique labels: [1 2 3]\n", + "INFO:__main__:Model successfully updated\n", + "DEBUG:__main__:Starting prediction\n", + "DEBUG:__main__:Prediction updated successfully\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Superpixels\n", + "DEBUG:in_n_out:Executing @injected activate_labels_pan_zoom_mode(layer: napari.layers.labels.labels.Labels) with args: (,), kwargs: {}\n", + "DEBUG:in_n_out: Calling activate_labels_pan_zoom_mode with {'layer': } (injected set())\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Superpixels\n", + "DEBUG:in_n_out:Executing @injected activate_labels_paint_mode(layer: napari.layers.labels.labels.Labels) with args: (,), kwargs: {}\n", + "DEBUG:in_n_out: Calling activate_labels_paint_mode with {'layer': } (injected set())\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Painting\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:__main__:min_shape: [200, 630, 630]\n", + "DEBUG:__main__:active_labels\n", + "DEBUG:__main__:crop subset\n", + "DEBUG:__main__:superpixel subset\n", + "DEBUG:__main__:painted mask\n", + "DEBUG:__main__:preparing live fit\n", + "DEBUG:__main__:data prepared for live fit\n", + "DEBUG:__main__:Number of painted superpixels: 57\n", + "DEBUG:__main__:X shape: (57, 20), y shape: (57,)\n", + "DEBUG:__main__:X shape: (57, 20)\n", + "DEBUG:__main__:y shape: (57,)\n", + "DEBUG:__main__:Unique labels: [1 2 3 4]\n", + "INFO:__main__:Model successfully updated\n", + "DEBUG:__main__:Starting prediction\n", + "DEBUG:__main__:Prediction updated successfully\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(98.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(98.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(98.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(98.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(98.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(98.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(98.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(98.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(92.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(92.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(92.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(92.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(92.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(92.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(92.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(92.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(91.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(91.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(91.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(91.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(91.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(91.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(91.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(91.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(78.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(78.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(78.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(78.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(78.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(78.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(78.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(78.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(76.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(76.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(76.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(76.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(76.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(76.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(76.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(76.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(64.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(64.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(64.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(64.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(64.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(64.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(64.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(64.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(63.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(63.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(63.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(63.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(63.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(63.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(63.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(63.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(45.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(45.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(45.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(45.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(45.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(45.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(45.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(45.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(40.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(40.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(40.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(40.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(40.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(40.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(40.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(40.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(41.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(41.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(41.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(41.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(41.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(41.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(41.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(41.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(42.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(42.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(42.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(42.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(42.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(42.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(42.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(42.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(43.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(43.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(43.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(43.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(43.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(43.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(43.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(43.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(44.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(44.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(44.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(44.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(44.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(44.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(44.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(44.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(43.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(43.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(43.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(43.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(43.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(43.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(43.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(43.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(24.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(24.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(24.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(24.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(24.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(24.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(24.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(24.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(23.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(23.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(23.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(23.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(23.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(23.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(23.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(23.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(24.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(24.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(24.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(24.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(24.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(24.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(24.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(24.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(29.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(29.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(29.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(29.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(29.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(29.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(29.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(29.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(30.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(30.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(30.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(30.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(30.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(30.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(30.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(30.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(34.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(34.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(34.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(34.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(34.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(34.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(34.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(34.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(38.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(38.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(38.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(38.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(38.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(38.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(38.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(38.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(39.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(39.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Tomogram\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(39.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(39.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:napari.components._layer_slicer:_LayerSlicer.submit: layers=[, , , ], dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(39.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Tomogram\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Prediction\n", + "DEBUG:napari.components._layer_slicer:Sync slicing for Painting\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Tomogram, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(39.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Prediction, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(39.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer._slice_dims: Painting, dims=ndim=3 ndisplay=2 order=(0, 1, 2) axis_labels=('0', '1', '2') range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)) margin_left=(0.0, 0.0, 0.0) margin_right=(0.0, 0.0, 0.0) point=(39.0, 314.0, 314.0) last_used=0, force=False\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Painting\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:__main__:min_shape: [200, 630, 630]\n", + "DEBUG:__main__:active_labels\n", + "DEBUG:__main__:crop subset\n", + "DEBUG:__main__:superpixel subset\n", + "DEBUG:__main__:painted mask\n", + "DEBUG:__main__:preparing live fit\n", + "DEBUG:__main__:data prepared for live fit\n", + "DEBUG:__main__:Number of painted superpixels: 57\n", + "DEBUG:__main__:X shape: (57, 20), y shape: (57,)\n", + "DEBUG:__main__:X shape: (57, 20)\n", + "DEBUG:__main__:y shape: (57,)\n", + "DEBUG:__main__:Unique labels: [1 2 3 4]\n", + "INFO:__main__:Model successfully updated\n", + "DEBUG:__main__:Starting prediction\n", + "DEBUG:__main__:Prediction updated successfully\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:in_n_out:Executing @injected reset_scroll_progress(viewer: napari.viewer.Viewer) with args: (Viewer(camera=Camera(center=(0.0, 44.531128057650676, 390.16229341195395), zoom=0.8985877242862453, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=False, mouse_zoom=True), cursor=Cursor(position=(39.0, 366.1469385372584, 250.4986948619642), scaled=True, style=, size=2.0), dims=Dims(ndim=3, ndisplay=2, order=(0, 1, 2), axis_labels=('0', '1', '2'), range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)), margin_left=(0.0, 0.0, 0.0), margin_right=(0.0, 0.0, 0.0), point=(39.0, 314.0, 314.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[, , , ], help='use <6> for pan/zoom, use <7> for transform, use <1> for activate the label eraser, use <3> for activate the polygon tool, use <4> for activate the fill bucket, use <5> for pick mode', status={'layer_base': 'Painting', 'source_type': '', 'plugin': '', 'coordinates': ' [39 366 250]: 0'}, tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=True, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={}),), kwargs: {}\n", + "DEBUG:in_n_out: Calling reset_scroll_progress with {'viewer': Viewer(camera=Camera(center=(0.0, 44.531128057650676, 390.16229341195395), zoom=0.8985877242862453, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=False, mouse_zoom=True), cursor=Cursor(position=(39.0, 366.1469385372584, 250.4986948619642), scaled=True, style=, size=2.0), dims=Dims(ndim=3, ndisplay=2, order=(0, 1, 2), axis_labels=('0', '1', '2'), range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)), margin_left=(0.0, 0.0, 0.0), margin_right=(0.0, 0.0, 0.0), point=(39.0, 314.0, 314.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[, , , ], help='use <6> for pan/zoom, use <7> for transform, use <1> for activate the label eraser, use <3> for activate the polygon tool, use <4> for activate the fill bucket, use <5> for pick mode', status={'layer_base': 'Painting', 'source_type': '', 'plugin': '', 'coordinates': ' [39 366 250]: 0'}, tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=True, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})} (injected set())\n" + ] + } + ], + "source": [ + "# painting superpixels\n", + "\n", + "import os\n", + "import zarr\n", + "import napari\n", + "import numpy as np\n", + "import pandas as pd\n", + "import copick\n", + "from pathlib import Path\n", + "from cellcanvas_spp.segmentation import superpixels\n", + "from skimage.measure import regionprops_table\n", + "from scipy import stats\n", + "from sklearn.ensemble import RandomForestClassifier\n", + "from skimage import future\n", + "from functools import partial\n", + "import threading\n", + "import toolz as tz\n", + "from psygnal import debounced\n", + "from superqt import ensure_main_thread\n", + "from qtpy.QtWidgets import (\n", + " QVBoxLayout,\n", + " QHBoxLayout,\n", + " QComboBox,\n", + " QLabel,\n", + " QCheckBox,\n", + " QDoubleSpinBox,\n", + " QGroupBox,\n", + " QWidget,\n", + ")\n", + "from appdirs import user_data_dir\n", + "import logging\n", + "import tifffile\n", + "\n", + "# Set up logging\n", + "logging.basicConfig(level=logging.DEBUG)\n", + "logger = logging.getLogger(__name__)\n", + "\n", + "# Set up the data directory\n", + "DATA_DIR = Path(\"/Users/kharrington/git/cellcanvas/superpixels/notebooks/my_synthetic_data_10439_dataportal.json\")\n", + "\n", + "# Load the tomogram\n", + "def load_tomogram():\n", + " config_file = DATA_DIR\n", + " root = copick.from_file(config_file)\n", + " run_name = \"16193\"\n", + " example_run = root.get_run(run_name)\n", + " tomogram = example_run.voxel_spacings[0].tomograms[0]\n", + " z = zarr.open(tomogram.zarr())\n", + " img = z[\"0\"] # Get the highest resolution scale\n", + " return np.asarray(img)\n", + "\n", + "# Load and crop the tomogram\n", + "full_tomogram = load_tomogram()\n", + "# crop_3D = full_tomogram[50:100, 180:360, 210:430] # Adjust crop as needed\n", + "crop_3D = full_tomogram[:]\n", + "\n", + "# Compute superpixels\n", + "# superpixel_seg = superpixels(crop_3D, sigma=4, h_minima=0.0025)\n", + "superpixel_seg = tifffile.imread('/Users/kharrington/Downloads/segm_16193.tif')\n", + "\n", + "# Set up Napari viewer\n", + "viewer = napari.Viewer()\n", + "scale = (1, 1, 1) # Adjust scale if needed\n", + "contrast_limits = (crop_3D.min(), crop_3D.max())\n", + "\n", + "# Add layers\n", + "data_layer = viewer.add_image(crop_3D, scale=scale, contrast_limits=contrast_limits, name=\"Tomogram\")\n", + "superpixel_layer = viewer.add_labels(superpixel_seg, scale=scale, name=\"Superpixels\", opacity=0.5)\n", + "\n", + "# Set up zarr for prediction and painting layers\n", + "zarr_path = os.path.join(user_data_dir(\"napari_dl_at_mbl_2024\", \"napari\"), \"diy_segmentation.zarr\")\n", + "print(f\"zarr path: {zarr_path}\")\n", + "prediction_data = zarr.open(f\"{zarr_path}/prediction\", mode='a', shape=crop_3D.shape, dtype='i4', dimension_separator=\"/\")\n", + "painting_data = zarr.open(f\"{zarr_path}/painting\", mode='a', shape=crop_3D.shape, dtype='i4', dimension_separator=\"/\")\n", + "\n", + "prediction_layer = viewer.add_labels(prediction_data, name=\"Prediction\", scale=scale)\n", + "painting_layer = viewer.add_labels(painting_data, name=\"Painting\", scale=scale)\n", + "\n", + "# Precompute regionprops features for each superpixel\n", + "def compute_superpixel_features(image, superpixels):\n", + " props = regionprops_table(superpixels, intensity_image=image,\n", + " properties=('label', \n", + " 'area', \n", + " 'bbox',\n", + " 'bbox_area',\n", + " 'centroid',\n", + " 'equivalent_diameter',\n", + " 'euler_number',\n", + " 'extent',\n", + " 'filled_area',\n", + " 'major_axis_length',\n", + " 'max_intensity',\n", + " 'mean_intensity',\n", + " 'min_intensity',\n", + " 'std_intensity',))\n", + " return props\n", + "\n", + "superpixel_features = compute_superpixel_features(crop_3D, superpixel_seg)\n", + "\n", + "def update_model(y, X, model_type):\n", + " logger.debug(f\"X shape: {X.shape}\")\n", + " logger.debug(f\"y shape: {y.shape}\")\n", + " logger.debug(f\"Unique labels: {np.unique(y)}\")\n", + " \n", + " if y.size == 0:\n", + " logger.warning(\"No labeled data found. Skipping model update.\")\n", + " return None\n", + " \n", + " if model_type == \"Random Forest\":\n", + " clf = RandomForestClassifier(n_estimators=50, n_jobs=-1, max_depth=10, max_samples=0.05)\n", + " \n", + " try:\n", + " clf.fit(X, y)\n", + " logger.info(\"Model successfully updated\")\n", + " return clf\n", + " except Exception as e:\n", + " logger.error(f\"Error updating model: {str(e)}\")\n", + " return None\n", + "\n", + "def predict(model, superpixel_features):\n", + " features = np.array([[superpixel_features[prop][i] for prop in superpixel_features.keys() if prop != 'label'] \n", + " for i in range(len(superpixel_features['label']))])\n", + " prediction = model.predict(features)\n", + " return prediction\n", + "\n", + "# Napari ML Widget\n", + "class NapariMLWidget(QWidget):\n", + " def __init__(self, parent=None):\n", + " super(NapariMLWidget, self).__init__(parent)\n", + " self.initUI()\n", + "\n", + " def initUI(self):\n", + " layout = QVBoxLayout()\n", + "\n", + " model_label = QLabel(\"Select Model\")\n", + " self.model_dropdown = QComboBox()\n", + " self.model_dropdown.addItems([\"Random Forest\"])\n", + " model_layout = QHBoxLayout()\n", + " model_layout.addWidget(model_label)\n", + " model_layout.addWidget(self.model_dropdown)\n", + " layout.addLayout(model_layout)\n", + "\n", + " self.live_fit_checkbox = QCheckBox(\"Live Model Fitting\")\n", + " self.live_fit_checkbox.setChecked(True)\n", + " layout.addWidget(self.live_fit_checkbox)\n", + "\n", + " self.live_pred_checkbox = QCheckBox(\"Live Prediction\")\n", + " self.live_pred_checkbox.setChecked(True)\n", + " layout.addWidget(self.live_pred_checkbox)\n", + "\n", + " self.setLayout(layout)\n", + "\n", + "# Add widget to Napari\n", + "widget = NapariMLWidget()\n", + "viewer.window.add_dock_widget(widget, name=\"Interactive Segmentation\")\n", + "\n", + "# Event listener\n", + "model = None\n", + "\n", + "@tz.curry\n", + "def on_data_change(event, viewer=None, widget=None):\n", + " painting_layer.refresh()\n", + "\n", + " thread = threading.Thread(\n", + " target=threaded_on_data_change,\n", + " args=(\n", + " event,\n", + " viewer.dims,\n", + " widget.model_dropdown.currentText(),\n", + " widget.live_fit_checkbox.isChecked(),\n", + " widget.live_pred_checkbox.isChecked(),\n", + " ),\n", + " )\n", + " thread.start()\n", + " thread.join()\n", + "\n", + " prediction_layer.refresh()\n", + "\n", + "def threaded_on_data_change(\n", + " event,\n", + " dims,\n", + " model_type,\n", + " live_fit,\n", + " live_prediction,\n", + "):\n", + " global model, crop_3D, painting_data, superpixel_seg, superpixel_features\n", + " \n", + " # Ensure consistent shapes\n", + " min_shape = [min(s1, s2, s3) for s1, s2, s3 in zip(crop_3D.shape, painting_data.shape, superpixel_seg.shape)]\n", + " logger.debug(f\"min_shape: {min_shape}\")\n", + " \n", + " active_labels = painting_data[:min_shape[0], :min_shape[1], :min_shape[2]]\n", + " logger.debug(\"active_labels\")\n", + " crop_3D_subset = crop_3D[:min_shape[0], :min_shape[1], :min_shape[2]]\n", + " logger.debug(\"crop subset\")\n", + " superpixel_seg_subset = superpixel_seg[:min_shape[0], :min_shape[1], :min_shape[2]]\n", + " logger.debug(\"superpixel subset\")\n", + "\n", + " # Recompute superpixel features\n", + " # logger.debug(f\"computing superpixel shapes\")\n", + " # superpixel_features = compute_superpixel_features(crop_3D_subset, superpixel_seg_subset)\n", + " \n", + " # Create a mask of painted pixels\n", + " painted_mask = active_labels > 0\n", + " \n", + " logger.debug(\"painted mask\")\n", + "\n", + " if live_fit:\n", + " logger.debug(\"preparing live fit\")\n", + " \n", + " # Create a mask of painted pixels\n", + " painted_mask = active_labels > 0\n", + " \n", + " # Get unique superpixel labels in the painted areas\n", + " painted_superpixels = np.unique(superpixel_seg_subset[painted_mask])\n", + " \n", + " # Prepare features and labels for training\n", + " X = []\n", + " y = []\n", + " \n", + " for label in painted_superpixels:\n", + " mask = superpixel_seg_subset == label\n", + " painted_pixels = active_labels[mask & painted_mask]\n", + " \n", + " if painted_pixels.size > 0:\n", + " feature_vector = [superpixel_features[prop][superpixel_features['label'] == label][0] \n", + " for prop in superpixel_features.keys() if prop != 'label']\n", + " X.append(feature_vector)\n", + " y.append(stats.mode(painted_pixels, axis=None)[0])\n", + "\n", + " X = np.array(X)\n", + " y = np.array(y)\n", + " logger.debug(\"data prepared for live fit\")\n", + " \n", + " logger.debug(f\"Number of painted superpixels: {len(X)}\")\n", + " logger.debug(f\"X shape: {X.shape}, y shape: {y.shape}\")\n", + " \n", + " if len(X) > 0:\n", + " model = update_model(y, X, model_type)\n", + " else:\n", + " logger.warning(\"No painted superpixels found. Skipping model update.\")\n", + "\n", + " if live_prediction and model is not None:\n", + " try:\n", + " logger.debug(\"Starting prediction\")\n", + " \n", + " # Prepare features for all superpixels\n", + " features = np.array([\n", + " [superpixel_features[prop][i] for prop in superpixel_features.keys() if prop != 'label']\n", + " for i in range(len(superpixel_features['label']))\n", + " ])\n", + " \n", + " logger.debug(\"Starting actual prediction\")\n", + " # Predict for all superpixels\n", + " superpixel_predictions = model.predict(features)\n", + " \n", + " logger.debug(\"Creating mapping\")\n", + " # Create a mapping from superpixel label to prediction\n", + " label_to_prediction = dict(zip(superpixel_features['label'], superpixel_predictions))\n", + " \n", + " # Use numpy vectorize to apply the mapping efficiently\n", + " prediction_func = np.vectorize(lambda x: label_to_prediction.get(x, 0))\n", + " prediction = prediction_func(superpixel_seg_subset)\n", + " \n", + " # Ensure prediction has the correct shape and dtype\n", + " prediction = prediction.astype(prediction_layer.data.dtype)\n", + " \n", + " logger.debug(\"Updating layer\")\n", + " # Update the prediction layer data\n", + " prediction_layer.data[:min_shape[0], :min_shape[1], :min_shape[2]] = prediction\n", + " \n", + " logger.debug(\"Prediction updated successfully\")\n", + " except Exception as e:\n", + " logger.error(f\"Error during prediction: {str(e)}\")\n", + " logger.exception(\"Detailed traceback:\")\n", + "\n", + "# Connect event listeners\n", + "for listener in [painting_layer.events.paint]:\n", + " listener.connect(\n", + " debounced(\n", + " ensure_main_thread(\n", + " on_data_change(viewer=viewer, widget=widget)\n", + " ),\n", + " timeout=1000,\n", + " )\n", + " )\n", + "\n", + "napari.run()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['label', 'area', 'bbox-0', 'bbox-1', 'bbox-2', 'bbox-3', 'bbox-4', 'bbox-5', 'bbox_area', 'centroid-0', 'centroid-1', 'centroid-2', 'equivalent_diameter', 'euler_number', 'extent', 'filled_area', 'major_axis_length', 'max_intensity', 'mean_intensity', 'min_intensity', 'std_intensity'])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "DEBUG:in_n_out:Executing @injected reset_scroll_progress(viewer: napari.viewer.Viewer) with args: (Viewer(camera=Camera(center=(0.0, 44.531128057650676, 390.16229341195395), zoom=0.8985877242862453, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=False, mouse_zoom=True), cursor=Cursor(position=(39.0, 366.1469385372584, 250.4986948619642), scaled=True, style=, size=2.0), dims=Dims(ndim=3, ndisplay=2, order=(0, 1, 2), axis_labels=('0', '1', '2'), range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)), margin_left=(0.0, 0.0, 0.0), margin_right=(0.0, 0.0, 0.0), point=(39.0, 314.0, 314.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[, , , ], help='use <6> for pan/zoom, use <7> for transform, use <1> for activate the label eraser, use <3> for activate the polygon tool, use <4> for activate the fill bucket, use <5> for pick mode', status='', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={}),), kwargs: {}\n", + "DEBUG:in_n_out: Calling reset_scroll_progress with {'viewer': Viewer(camera=Camera(center=(0.0, 44.531128057650676, 390.16229341195395), zoom=0.8985877242862453, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=False, mouse_zoom=True), cursor=Cursor(position=(39.0, 366.1469385372584, 250.4986948619642), scaled=True, style=, size=2.0), dims=Dims(ndim=3, ndisplay=2, order=(0, 1, 2), axis_labels=('0', '1', '2'), range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)), margin_left=(0.0, 0.0, 0.0), margin_right=(0.0, 0.0, 0.0), point=(39.0, 314.0, 314.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[, , , ], help='use <6> for pan/zoom, use <7> for transform, use <1> for activate the label eraser, use <3> for activate the polygon tool, use <4> for activate the fill bucket, use <5> for pick mode', status='', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})} (injected set())\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Painting\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Painting\n", + "DEBUG:__main__:min_shape: [200, 630, 630]\n", + "DEBUG:__main__:active_labels\n", + "DEBUG:__main__:crop subset\n", + "DEBUG:__main__:superpixel subset\n", + "DEBUG:__main__:painted mask\n", + "DEBUG:__main__:preparing live fit\n", + "DEBUG:__main__:data prepared for live fit\n", + "DEBUG:__main__:Number of painted superpixels: 65\n", + "DEBUG:__main__:X shape: (65, 20), y shape: (65,)\n", + "DEBUG:__main__:X shape: (65, 20)\n", + "DEBUG:__main__:y shape: (65,)\n", + "DEBUG:__main__:Unique labels: [1 2 3 4]\n", + "INFO:__main__:Model successfully updated\n", + "DEBUG:__main__:Starting prediction\n", + "DEBUG:__main__:Prediction updated successfully\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Prediction\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Prediction\n", + "DEBUG:in_n_out:Executing @injected reset_scroll_progress(viewer: napari.viewer.Viewer) with args: (Viewer(camera=Camera(center=(0.0, 271.6590793629689, 374.7762589079424), zoom=4.1113557947097465, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=False, mouse_zoom=True), cursor=Cursor(position=(39.0, 255.6059854295999, 271.76886660825886), scaled=True, style=, size=2.0), dims=Dims(ndim=3, ndisplay=2, order=(0, 1, 2), axis_labels=('0', '1', '2'), range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)), margin_left=(0.0, 0.0, 0.0), margin_right=(0.0, 0.0, 0.0), point=(39.0, 314.0, 314.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[, , , ], help='use <6> for pan/zoom, use <7> for transform, use <1> for activate the label eraser, use <3> for activate the polygon tool, use <4> for activate the fill bucket, use <5> for pick mode', status='', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={}),), kwargs: {}\n", + "DEBUG:in_n_out: Calling reset_scroll_progress with {'viewer': Viewer(camera=Camera(center=(0.0, 271.6590793629689, 374.7762589079424), zoom=4.1113557947097465, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=False, mouse_zoom=True), cursor=Cursor(position=(39.0, 255.6059854295999, 271.76886660825886), scaled=True, style=, size=2.0), dims=Dims(ndim=3, ndisplay=2, order=(0, 1, 2), axis_labels=('0', '1', '2'), range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)), margin_left=(0.0, 0.0, 0.0), margin_right=(0.0, 0.0, 0.0), point=(39.0, 314.0, 314.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[, , , ], help='use <6> for pan/zoom, use <7> for transform, use <1> for activate the label eraser, use <3> for activate the polygon tool, use <4> for activate the fill bucket, use <5> for pick mode', status='', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})} (injected set())\n", + "DEBUG:in_n_out:Executing @injected reset_scroll_progress(viewer: napari.viewer.Viewer) with args: (Viewer(camera=Camera(center=(0.0, 271.6590793629689, 374.7762589079424), zoom=4.1113557947097465, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=False, mouse_zoom=True), cursor=Cursor(position=(39.0, 255.6059854295999, 271.76886660825886), scaled=True, style=, size=2.0), dims=Dims(ndim=3, ndisplay=2, order=(0, 1, 2), axis_labels=('0', '1', '2'), range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)), margin_left=(0.0, 0.0, 0.0), margin_right=(0.0, 0.0, 0.0), point=(39.0, 314.0, 314.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[, , , ], help='use <6> for pan/zoom, use <7> for transform, use <1> for activate the label eraser, use <3> for activate the polygon tool, use <4> for activate the fill bucket, use <5> for pick mode', status='', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={}),), kwargs: {}\n", + "DEBUG:in_n_out: Calling reset_scroll_progress with {'viewer': Viewer(camera=Camera(center=(0.0, 271.6590793629689, 374.7762589079424), zoom=4.1113557947097465, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=False, mouse_zoom=True), cursor=Cursor(position=(39.0, 255.6059854295999, 271.76886660825886), scaled=True, style=, size=2.0), dims=Dims(ndim=3, ndisplay=2, order=(0, 1, 2), axis_labels=('0', '1', '2'), range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)), margin_left=(0.0, 0.0, 0.0), margin_right=(0.0, 0.0, 0.0), point=(39.0, 314.0, 314.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[, , , ], help='use <6> for pan/zoom, use <7> for transform, use <1> for activate the label eraser, use <3> for activate the polygon tool, use <4> for activate the fill bucket, use <5> for pick mode', status='', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})} (injected set())\n", + "DEBUG:in_n_out:Executing @injected activate_labels_pan_zoom_mode(layer: napari.layers.labels.labels.Labels) with args: (,), kwargs: {}\n", + "DEBUG:in_n_out: Calling activate_labels_pan_zoom_mode with {'layer': } (injected set())\n", + "DEBUG:in_n_out:Executing @injected Window.clipboard(self: napari._qt.qt_main_window.Window, flash=True, canvas_only=False) with args: (), kwargs: {}\n", + "DEBUG:in_n_out: injecting self: = \n", + "DEBUG:in_n_out: Calling Window.clipboard with {'flash': True, 'canvas_only': False, 'self': } (injected {'self'})\n", + "DEBUG:in_n_out:Executing @injected reset_scroll_progress(viewer: napari.viewer.Viewer) with args: (Viewer(camera=Camera(center=(0.0, 255.41374316478976, 317.01640676581684), zoom=1.3050800651879002, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=True, mouse_zoom=True), cursor=Cursor(position=(39.0, -15.833980236220981, 92.12599018707405), scaled=True, style=, size=2.0), dims=Dims(ndim=3, ndisplay=2, order=(0, 1, 2), axis_labels=('0', '1', '2'), range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)), margin_left=(0.0, 0.0, 0.0), margin_right=(0.0, 0.0, 0.0), point=(39.0, 314.0, 314.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[, , , ], help='use <7> for transform, use <1> for activate the label eraser, use <2> for activate the paint brush, use <3> for activate the polygon tool, use <4> for activate the fill bucket, use <5> for pick mode', status='', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={}),), kwargs: {}\n", + "DEBUG:in_n_out: Calling reset_scroll_progress with {'viewer': Viewer(camera=Camera(center=(0.0, 255.41374316478976, 317.01640676581684), zoom=1.3050800651879002, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=True, mouse_zoom=True), cursor=Cursor(position=(39.0, -15.833980236220981, 92.12599018707405), scaled=True, style=, size=2.0), dims=Dims(ndim=3, ndisplay=2, order=(0, 1, 2), axis_labels=('0', '1', '2'), range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)), margin_left=(0.0, 0.0, 0.0), margin_right=(0.0, 0.0, 0.0), point=(39.0, 314.0, 314.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[, , , ], help='use <7> for transform, use <1> for activate the label eraser, use <2> for activate the paint brush, use <3> for activate the polygon tool, use <4> for activate the fill bucket, use <5> for pick mode', status='', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})} (injected set())\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer.refresh: Superpixels\n", + "DEBUG:napari.layers.base.base:Layer._refresh_sync: Superpixels\n", + "DEBUG:in_n_out:Executing @injected reset_scroll_progress(viewer: napari.viewer.Viewer) with args: (Viewer(camera=Camera(center=(0.0, 255.41374316478976, 317.01640676581684), zoom=1.3050800651879002, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=True, mouse_zoom=True), cursor=Cursor(position=(39.0, 538.1550234042347, 174.87953429934132), scaled=True, style=, size=2.0), dims=Dims(ndim=3, ndisplay=2, order=(0, 1, 2), axis_labels=('0', '1', '2'), range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)), margin_left=(0.0, 0.0, 0.0), margin_right=(0.0, 0.0, 0.0), point=(39.0, 314.0, 314.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[, , , ], help='use <7> for transform, use <1> for activate the label eraser, use <2> for activate the paint brush, use <3> for activate the polygon tool, use <4> for activate the fill bucket, use <5> for pick mode', status={'layer_base': 'Painting', 'source_type': '', 'plugin': '', 'coordinates': ' [39 538 175]: 0'}, tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=True, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={}),), kwargs: {}\n", + "DEBUG:in_n_out: Calling reset_scroll_progress with {'viewer': Viewer(camera=Camera(center=(0.0, 255.41374316478976, 317.01640676581684), zoom=1.3050800651879002, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=True, mouse_zoom=True), cursor=Cursor(position=(39.0, 538.1550234042347, 174.87953429934132), scaled=True, style=, size=2.0), dims=Dims(ndim=3, ndisplay=2, order=(0, 1, 2), axis_labels=('0', '1', '2'), range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)), margin_left=(0.0, 0.0, 0.0), margin_right=(0.0, 0.0, 0.0), point=(39.0, 314.0, 314.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[, , , ], help='use <7> for transform, use <1> for activate the label eraser, use <2> for activate the paint brush, use <3> for activate the polygon tool, use <4> for activate the fill bucket, use <5> for pick mode', status={'layer_base': 'Painting', 'source_type': '', 'plugin': '', 'coordinates': ' [39 538 175]: 0'}, tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=True, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})} (injected set())\n", + "DEBUG:in_n_out:Executing @injected Window.clipboard(self: napari._qt.qt_main_window.Window, flash=True, canvas_only=False) with args: (), kwargs: {}\n", + "DEBUG:in_n_out: injecting self: = \n", + "DEBUG:in_n_out: Calling Window.clipboard with {'flash': True, 'canvas_only': False, 'self': } (injected {'self'})\n", + "DEBUG:in_n_out:Executing @injected reset_scroll_progress(viewer: napari.viewer.Viewer) with args: (Viewer(camera=Camera(center=(0.0, 255.41374316478976, 317.01640676581684), zoom=1.3050800651879002, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=True, mouse_zoom=True), cursor=Cursor(position=(39.0, 191.04988004444732, -18.97830514884034), scaled=True, style=, size=10.0), dims=Dims(ndim=3, ndisplay=2, order=(0, 1, 2), axis_labels=('0', '1', '2'), range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)), margin_left=(0.0, 0.0, 0.0), margin_right=(0.0, 0.0, 0.0), point=(39.0, 314.0, 314.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[, , , ], help='use <7> for transform, use <1> for activate the label eraser, use <2> for activate the paint brush, use <3> for activate the polygon tool, use <4> for activate the fill bucket, use <5> for pick mode', status='', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={}),), kwargs: {}\n", + "DEBUG:in_n_out: Calling reset_scroll_progress with {'viewer': Viewer(camera=Camera(center=(0.0, 255.41374316478976, 317.01640676581684), zoom=1.3050800651879002, angles=(0.0, 0.0, 90.0), perspective=0.0, mouse_pan=True, mouse_zoom=True), cursor=Cursor(position=(39.0, 191.04988004444732, -18.97830514884034), scaled=True, style=, size=10.0), dims=Dims(ndim=3, ndisplay=2, order=(0, 1, 2), axis_labels=('0', '1', '2'), range=(RangeTuple(start=0.0, stop=199.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0), RangeTuple(start=0.0, stop=629.0, step=1.0)), margin_left=(0.0, 0.0, 0.0), margin_right=(0.0, 0.0, 0.0), point=(39.0, 314.0, 314.0), last_used=0), grid=GridCanvas(stride=1, shape=(-1, -1), enabled=False), layers=[, , , ], help='use <7> for transform, use <1> for activate the label eraser, use <2> for activate the paint brush, use <3> for activate the polygon tool, use <4> for activate the fill bucket, use <5> for pick mode', status='', tooltip=Tooltip(visible=False, text=''), theme='dark', title='napari', mouse_over_canvas=False, mouse_move_callbacks=[], mouse_drag_callbacks=[], mouse_double_click_callbacks=[], mouse_wheel_callbacks=[], _persisted_mouse_event={}, _mouse_drag_gen={}, _mouse_wheel_gen={}, _keymap={})} (injected set())\n" + ] + } + ], + "source": [ + "superpixel_features.keys()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.8" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}