# Copyright CNRS/Inria/UNS # Contributor(s): Eric Debreuve (since 2019), Morgane Nadal (2020) # # eric.debreuve@cnrs.fr # # This software is governed by the CeCILL license under French law and # abiding by the rules of distribution of free software. You can use, # modify and/ or redistribute the software under the terms of the CeCILL # license as circulated by CEA, CNRS and INRIA at the following URL # "http://www.cecill.info". # # As a counterpart to the access to the source code and rights to copy, # modify and redistribute granted by the license, users are provided only # with a limited warranty and the software's author, the holder of the # economic rights, and the successive licensors have only limited # liability. # # In this respect, the user's attention is drawn to the risks associated # with loading, using, modifying and/or developing or reproducing the # software by the user in light of its specific status of free software, # that may mean that it is complicated to manipulate, and that also # therefore means that it is reserved for developers and experienced # professionals having in-depth computer knowledge. Users are therefore # encouraged to load and test the software's suitability as regards their # requirements in conditions enabling the security of their systems and/or # data to be ensured and, more generally, to use and operate it in the # same conditions as regards security. # # The fact that you are presently reading this means that you have had # knowledge of the CeCILL license and that you accept its terms. import configparser from typing import Any, Union def NutrimorphArguments(parameter_file): """""" parameters = configparser.ConfigParser( allow_no_value=True, inline_comment_prefixes=";" ) parameters.read(parameter_file) # [Input] data_path = parameters["Input"]["data_path"] channel = parameters["Input"]["channel"] size_voxel_in_micron = PreferentiallyAsFloat( parameters, "Input", "size_voxel_in_micron" ) dilatation_erosion = parameters.getboolean("Input", "dilatation_erosion") save_images = parameters["Input"]["save_images"] save_csv = parameters["Input"]["save_csv"] save_features_analysis = parameters["Input"]["save_features_analysis"] statistical_analysis = parameters.getboolean("Input", "statistical_analysis") # [Somas] soma_low_c = PreferentiallyAsFloat(parameters, "Somas", "soma_low_c") soma_high_c = PreferentiallyAsFloat(parameters, "Somas", "soma_high_c") soma_selem_micron_c = PreferentiallyAsFloat( parameters, "Somas", "soma_selem_micron_c" ) soma_min_area_c = PreferentiallyAsFloat(parameters, "Somas", "soma_min_area_c") soma_max_area_c = PreferentiallyAsFloat(parameters, "Somas", "soma_max_area_c") # [Extensions] adapt_hist_equalization = parameters.getboolean( "Extensions", "adapt_hist_equalization" ) ext_low_c = PreferentiallyAsFloat(parameters, "Extensions", "ext_low_c") ext_high_c = PreferentiallyAsFloat(parameters, "Extensions", "ext_high_c") ext_selem_micron_c = PreferentiallyAsFloat( parameters, "Extensions", "ext_selem_micron_c" ) ext_min_area_c = PreferentiallyAsFloat(parameters, "Extensions", "ext_min_area_c") # [Connexions] max_straight_sq_dist_c = PreferentiallyAsFloat( parameters, "Connexions", "max_straight_sq_dist_c" ) max_weighted_length_c = PreferentiallyAsFloat( parameters, "Connexions", "max_weighted_length_c" ) # [Frangi] scale_range = PreferentiallyAsFloat(parameters, "Frangi", "scale_range") scale_step = PreferentiallyAsFloat(parameters, "Frangi", "scale_step") alpha = PreferentiallyAsFloat(parameters, "Frangi", "alpha") beta = PreferentiallyAsFloat(parameters, "Frangi", "beta") frangi_c = PreferentiallyAsFloat(parameters, "Frangi", "frangi_c") diff_mode = parameters["Frangi"]["diff_mode"] bright_on_dark = parameters.getboolean("Frangi", "bright_on_dark") method = parameters["Frangi"]["method"] # [Features Extraction] hist_min_length = PreferentiallyAsFloat( parameters, "Features Extraction", "hist_min_length" ) hist_step_length = PreferentiallyAsFloat( parameters, "Features Extraction", "hist_step_length" ) number_of_bins_length = PreferentiallyAsFloat( parameters, "Features Extraction", "number_of_bins_length" ) hist_bins_borders_length = PreferentiallyAsFloat( parameters, "Features Extraction", "hist_bins_borders_length" ) hist_min_curvature = PreferentiallyAsFloat( parameters, "Features Extraction", "hist_min_curvature" ) hist_step_curvature = PreferentiallyAsFloat( parameters, "Features Extraction", "hist_step_curvature" ) number_of_bins_curvature = PreferentiallyAsFloat( parameters, "Features Extraction", "number_of_bins_curvature" ) hist_bins_borders_curvature = PreferentiallyAsFloat( parameters, "Features Extraction", "hist_bins_borders_curvature" ) # [Program running] with_plot = parameters.getboolean("Program Running", "with_plot") interactive = parameters.getboolean("Program Running", "interactive") in_parallel = parameters.getboolean("Program Running", "in_parallel") # data_path = "./data/DIO_6H_6_1.70bis_2.2_3.tif" # channel = 'G' # size_voxel_in_micron = None # -> list [X,Y,Z] # with_plot = False # # soma_low_c = 0.15 # soma_high_c = 0.7126 # ext_low_c = 0.2 #3 #1e-7 ##0.2 # 0.02 # 0.2 # ext_low_c = 9.0e-4 # ext_high_c = 0.6 #1e-10 #1.2e-7 ##0.6 # 0.04 # 0.6 # high_ext = 8.0e-3 # # # soma_selem_c = mp_.disk(2) # # ext_selem_c = mp_.disk(1) # soma_selem_micron_c = 0.24050024 * 2 # ext_selem_micron_c = 0.24050024 * 1 # # max_straight_sq_dist_c = (30 ** 2) * 0.24050024 # max_weighted_length_c = 20.0 * 0.24050024 # # soma_min_area_c = 1000 * (0.24050024 ** 2) # ext_min_area_c = 100 * (0.24050024 ** 2) # # soma_min_area_c = 1000 # # ext_min_area_c = 100 # # in_parallel = False arguments = { "channel": channel, "dilatation_erosion": dilatation_erosion, "size_voxel_in_micron": size_voxel_in_micron, "soma_low_c": soma_low_c, "soma_high_c": soma_high_c, "soma_selem_micron_c": soma_selem_micron_c, "soma_min_area_c": soma_min_area_c, "soma_max_area_c": soma_max_area_c, "adapt_hist_equalization": adapt_hist_equalization, "ext_low_c": ext_low_c, "ext_high_c": ext_high_c, "ext_selem_micron_c": ext_selem_micron_c, "ext_min_area_c": ext_min_area_c, "max_straight_sq_dist_c": max_straight_sq_dist_c, "max_weighted_length_c": max_weighted_length_c, "scale_range": scale_range, "scale_step": scale_step, "alpha": alpha, "beta": beta, "frangi_c": frangi_c, "diff_mode": diff_mode, "bright_on_dark": bright_on_dark, "method": method, "hist_min_length": hist_min_length, "hist_step_length": hist_step_length, "number_of_bins_length": number_of_bins_length, "hist_bins_borders_length": hist_bins_borders_length, "hist_min_curvature": hist_min_curvature, "hist_step_curvature": hist_step_curvature, "number_of_bins_curvature": number_of_bins_curvature, "hist_bins_borders_curvature": hist_bins_borders_curvature, "with_plot": with_plot, "interactive": interactive, "in_parallel": in_parallel, } return ( data_path, save_images, save_csv, save_features_analysis, statistical_analysis, arguments, ) def PreferentiallyAsFloat( parameters, section: str, key: str ) -> Union[Union[float, str], Any]: """""" if (value := parameters.get(section, key)) is None: return None try: output = parameters.getfloat(section, key) except: output = eval(value) return output