You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The exact command that failed. This is what you typed at the command line, including any options.
TopoStats version, this is reported by topostats --version
Operating System and Python Version
Describe the bug
While processing the image files, some grains were masked but not traced, resulting in their data being absent in the all_statistics files. For instance, in image 002, there were two grains, but data for only one of them was available in the all_stats file. Similarly, in image 003, three grains were present, but data for only two grains appeared in the all_stats file. However, this issue was not consistent across all images. In some cases, all grains in an image were successfully masked, traced, and included in the all_stats file. For example, image 011 had two grains, both of which were masked, traced, and recorded in the all_stats file.
The error showed in conda is:
Disordered tracing of grain 0 failed. Consider raising an issue on GitHub. Error:
Traceback (most recent call last): line 326, in _delete_pixel_subit1
self.p7, self.p8, self.p9, self.p6, self.p2, self.p5, self.p4, self.p3 = self.get_local_pixels_binary(
ValueError: not enough values to unpack (expected 8, got 5)
# Config file generated 2024-11-24 11:34:54# # For more information on configuration and how to use it:# https://afm-spm.github.io/TopoStats/main/configuration.htmlbase_dir: C:\Users\marin\TopoStats\Training_material\test_dpi # Directory in which to search for data filesoutput_dir: C:\Users\marin\TopoStats\Training_material\test_dpi # Directory to output results tolog_level: info # Verbosity of output. Options: warning, error, info, debugcores: 2# Number of CPU cores to utilise for processing multiple files simultaneously.file_ext: .spm # File extension of the data files.loading:
channel: Height # Channel to pull data from in the data files.filter:
run: true # Options : true, false row_alignment_quantile: 0.5# lower values may improve flattening of larger features threshold_method: std_dev # Options : otsu, std_dev, absolute otsu_threshold_multiplier: 1.0 threshold_std_dev:
below: 10.0# Threshold for data below the image background above: 1.0# Threshold for data above the image background threshold_absolute:
below: -1.0# Threshold for data below the image background above: 1.0# Threshold for data above the image background gaussian_size: 1.0121397464510862# Gaussian blur intensity in px gaussian_mode: nearest # Mode for Gaussian blurring. Options : nearest, reflect, constant, mirror, wrap# Scar remvoal parameters. Be careful with editing these as making the algorithm too sensitive may# result in ruining legitimate data. remove_scars:
run: false removal_iterations: 2# Number of times to run scar removal. threshold_low: 0.250# lower values make scar removal more sensitive threshold_high: 0.666# lower values make scar removal more sensitive max_scar_width: 4# Maximum thickness of scars in pixels. min_scar_length: 16# Minimum length of scars in pixels.grains:
run: true # Options : true, false# Thresholding by height threshold_method: std_dev # Options : std_dev, otsu, absolute, unet otsu_threshold_multiplier: 1.0 threshold_std_dev:
below: 10.0# Threshold for grains below the image background above: 1.0# Threshold for grains above the image background threshold_absolute:
below: -1.0# Threshold for grains below the image background above: 0.8# Threshold for grains above the image background direction: above # Options: above, below, both (defines whether to look for grains above or below thresholds or both)# Thresholding by area smallest_grain_size_nm2: 200# Size in nm^2 of tiny grains/blobs (noise) to remove, must be > 0.0 absolute_area_threshold:
above: [1300, 10500] # above surface [Low, High] in nm^2 (also takes null) below: [null, null] # below surface [Low, High] in nm^2 (also takes null) remove_edge_intersecting_grains: true # Whether or not to remove grains that touch the image border unet_config:
model_path: null # Path to a trained U-Net model grain_crop_padding: 2# Padding to apply to the grain crop bounding box upper_norm_bound: 5.0# Upper bound for normalisation of input data. This should be slightly higher than the maximum desired / expected height of grains. lower_norm_bound: -1.0# Lower bound for normalisation of input data. This should be slightly lower than the minimum desired / expected height of the background. vetting:
class_conversion_size_thresholds: null # Class conversion size thresholds, list of tuples of 3 integers and 2 integers, ie list[tuple[tuple[int, int, int], tuple[int, int]]] eg [[[1, 2, 3], [5, 10]]] for each region of class 1 to convert to 2 if smaller than 5 nm^2 and to class 3 if larger than 10 nm^2. class_region_number_thresholds: null # Class region number thresholds, list of lists, ie [[class, low, high],] eg [[1, 2, 4], [2, 1, 1]] for class 1 to have 2-4 regions and class 2 to have 1 region. Can use None to not set an upper/lower bound. class_size_thresholds: null # Class size thresholds (nm^2), list of tuples of 3 integers, ie [[class, low, high],] eg [[1, 100, 1000], [2, 1000, None]] for class 1 to have 100-1000 nm^2 and class 2 to have 1000-any nm^2. Can use None to not set an upper/lower bound. nearby_conversion_classes_to_convert: null # Class conversion for nearby regions, list of tuples of two-integer tuples, eg [[[1, 2], [3, 4]]] to convert class 1 to 2 and 3 to 4 for small touching regions class_touching_threshold: 5# Number of dilation steps to use for detecting touching regions keep_largest_labelled_regions_classes: null # Classes to keep the only largest regions for, list of integers eg [1, 2] to keep only the largest regions of class 1 and 2 class_connection_point_thresholds: null # Class connection point thresholds, [[[class_1, class_2], [min, max]]] eg [[[1, 2], [1, 1]]] for class 1 to have 1 connection point with class 2grainstats:
run: true # Options : true, false edge_detection_method: binary_erosion # Options: canny, binary erosion. Do not change this unless you are sure of what this will do. cropped_size: -1# Length (in nm) of square cropped images (can take -1 for grain-sized box) extract_height_profile: true # Extract height profiles along maximum feret of moleculesdisordered_tracing:
run: true # Options : true, false min_skeleton_size: 10# Minimum number of pixels in a skeleton for it to be retained. pad_width: 5# Pixels to pad grains by when tracing mask_smoothing_params:
gaussian_sigma: 4# Gaussian smoothing parameter 'sigma' in pixels. dilation_iterations: 4# Number of dilation iterations to use for grain smoothing. holearea_min_max: [0, null] # Range (min, max) of a hole area in nm to refill in the smoothed masks. skeletonisation_params:
method: topostats # Options : zhang | lee | thin | topostats height_bias: 0.6# Percentage of lowest pixels to remove each skeletonisation iteration. 1 equates to zhang. pruning_params:
method: topostats # Method to clean branches of the skeleton. Options : topostats max_length: 10.0# Maximum length in nm to remove a branch containing an endpoint. height_threshold: # The height to remove branches below. method_values: mid # The method to obtain a branch's height for pruning. Options : min | median | mid. method_outlier: mean_abs # The method to prune branches based on height. Options : abs | mean_abs | iqr.nodestats:
run: true # Options : true, false node_joining_length: 7.0# The distance in nanometres over which to join nearby crossing points. node_extend_dist: 14.0# The distance in nanometres over which to join nearby odd-branched nodes. branch_pairing_length: 20.0# The length in nanometres from the crossing point to pair and trace, obtaining FWHM's. pair_odd_branches: false # Whether to try and pair odd-branched nodes. Options: true and false. pad_width: 5# Pixels to pad grains by when tracing (should be the same as disordered_tracing).ordered_tracing:
run: true ordering_method: nodestats # The method of ordering the disordered traces. pad_width: 5# Pixels to pad grains by when tracing (should be the same as disordered_tracing).splining:
run: true # Options : true, false method: "rolling_window"# Options : "spline", "rolling_window" rolling_window_size: 20.0e-9# size in nm of the rolling window. spline_step_size: 7.0e-9# The sampling rate of the spline in metres. spline_linear_smoothing: 5.0# The amount of smoothing to apply to linear features. spline_circular_smoothing: 5.0# The amount of smoothing to apply to circular features. spline_degree: 3# The polynomial degree of the spline.curvature:
run: true # Options : true, false colourmap_normalisation_bounds: [-0.5, 0.5] # Radians per nm to normalise the colourmap to.plotting:
run: true # Options : true, false style: topostats.mplstyle # Options : topostats.mplstyle or path to a matplotlibrc params file savefig_format: null # Options : null, png, svg or pdf. tif is also available although no metadata will be saved. (defaults to png) See https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.savefig.html savefig_dpi: 600# Options : null (defaults to the value in topostats/plotting_dictionary.yaml), see https://afm-spm.github.io/TopoStats/main/configuration.html#further-customisation and https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.savefig.html pixel_interpolation: null # Options : https://matplotlib.org/stable/gallery/images_contours_and_fields/interpolation_methods.html image_set: all # Options : all, core zrange: [-2, 3] # low and high height range for core images (can take [null, null]). low <= high colorbar: true # Options : true, false axes: true # Options : true, false (due to off being a bool when parsed) num_ticks: [null, null] # Number of ticks to have along the x and y axes. Options : null (auto) or integer > 1 cmap: null # Colormap/colourmap to use (default is 'nanoscope' which is used if null, other options are 'afmhot', 'viridis' etc.) mask_cmap: blue_purple_green # Options : blu, jet_r and any in matplotlib histogram_log_axis: false # Options : true, falsesummary_stats:
run: true # Whether to make summary plots for output data config: null
To Reproduce
Reproduce using file and the above config file.
Force termination of certain grains during the DNA tracing steps i.e. if grain number = 5 ; assert false
Checklist
topostats process --core 1
.topostats --version
Describe the bug
While processing the image files, some grains were masked but not traced, resulting in their data being absent in the all_statistics files. For instance, in image 002, there were two grains, but data for only one of them was available in the all_stats file. Similarly, in image 003, three grains were present, but data for only two grains appeared in the all_stats file. However, this issue was not consistent across all images. In some cases, all grains in an image were successfully masked, traced, and included in the all_stats file. For example, image 011 had two grains, both of which were masked, traced, and recorded in the all_stats file.
The error showed in conda is:
Config file generated 2024.docx
Copy of the output
Printscreen of all_stats file with image 2 and 3
Printscreen of all_stats file with image 11
Include the configuration file
Config file generated 2024.docx
To Reproduce
Reproduce using file and the above config file.
Force termination of certain grains during the DNA tracing steps i.e. if grain number = 5 ; assert false
TopoStats Version
Git main branch
Python Version
3.1
Operating System
Windows
Python Packages
The text was updated successfully, but these errors were encountered: