epicure.start_epicuring
Start EpiCure plugin
Open the interface to select the movie and associated segmentation to process
1""" 2 **Start EpiCure plugin** 3 4 Open the interface to select the movie and associated segmentation to process 5""" 6 7from napari import current_viewer 8from magicgui import magicgui 9from napari.utils.history import get_save_history, update_save_history 10from napari.utils import progress 11import pathlib 12import epicure.Utils as ut 13from epicure.epicuring import EpiCure 14import multiprocessing 15import logging 16 17 18def start_from_layers(): 19 """ Start EpiCure from already opened image and segmentation layers """ 20 from typing import Union 21 hist = get_save_history() 22 cdir = hist[0] 23 24 def show_doc(): 25 """ Open the online documentation """ 26 ut.show_documentation_page( "Start-epicure#start-from-opened-layers" ) 27 28 @magicgui(call_button="Use selected layers", 29 __ = {"widget_type": "Label"}, 30 go_help = {"widget_type": "PushButton", "label": "Help"}, 31 ) 32 def select_layer(movie: Union["napari.layers.Image", None], movie_path: pathlib.Path, 33 segmentation: Union["napari.layers.Layer", None], 34 __ ="", 35 go_help=False): 36 """ GUI to choose the layers to use """ 37 if movie == "None": 38 movie = None 39 segmented = segmentation 40 if segmentation == "None": 41 segmented = None 42 ut.remove_all_widgets(viewer) 43 #ut.remove_widget(viewer, "Start from opened layers") 44 start_epi, epicure_instance = gui_files(movie=movie, movie_path=movie_path, segmented=segmented) 45 viewer.window.add_dock_widget(start_epi) 46 return start_epi 47 48 viewer = current_viewer() 49 wid = viewer.window.add_dock_widget(select_layer) 50 select_layer.go_help.clicked.connect( show_doc ) 51 return wid 52 53 54 55def start_epicure(): 56 """ Start EpiCure from scratch """ 57 gui, epicure = gui_files(movie=None, movie_path ="", segmented=None) 58 return gui 59 60def gui_files(movie=None, movie_path="", segmented=None): 61 """ GUI to choose files and parameters """ 62 hist = get_save_history() 63 cdir = hist[0] 64 viewer = current_viewer() 65 Epic = EpiCure(viewer) 66 caxis = None 67 cval = 0 68 ncpus = int(multiprocessing.cpu_count()*0.5) 69 70 def set_visibility(): 71 """ Visibility of the parameters in the GUI """ 72 if movie is not None: 73 get_files.image_file.visible = False 74 if segmented is not None: 75 get_files.segmentation_file.visible = False 76 get_files.segment_with_epyseg.visible = False 77 advanced_visibility() 78 79 def advanced_visibility(): 80 """ Handle the visibility of the advanced parameters """ 81 get_files.output_dirname.visible = get_files.advanced_parameters.value 82 get_files.show_other_chanels.visible = get_files.advanced_parameters.value 83 get_files.process_frames_parallel.visible = get_files.advanced_parameters.value 84 get_files.nbparallel_threads.visible = get_files.advanced_parameters.value 85 get_files.junction_half_thickness.visible = get_files.advanced_parameters.value 86 get_files.verbose_level.visible = get_files.advanced_parameters.value 87 get_files.allow_gaps.visible = get_files.advanced_parameters.value 88 get_files.show_scale_bar.visible = get_files.advanced_parameters.value 89 get_files.epithelial_cells.visible = get_files.advanced_parameters.value 90 91 def load_movie_from_layers(movie, movie_path, segmented): 92 """ Load and display the selected layers """ 93 start_time = ut.start_time() 94 nonlocal caxis, cval 95 caxis, cval = Epic.movie_from_layer(movie, movie_path) 96 imgdir = ut.get_directory(movie_path) 97 98 if segmented is None: 99 get_files.segmentation_file.visible = True 100 get_files.segmentation_file.value = pathlib.Path(imgdir) 101 get_files.segment_with_epyseg.visible = True 102 103 labname = Epic.suggest_segfile( get_files.output_dirname.value ) 104 Epic.set_names( get_files.output_dirname.value ) 105 if labname is not None: 106 get_files.segmentation_file.value = pathlib.Path(labname) 107 Epic.read_epicure_metadata() 108 if caxis is not None: 109 get_files.junction_chanel.max = cval-1 110 get_files.junction_chanel.visible = True 111 set_chanel() 112 show_metatdata(show=True) 113 get_files.allow_gaps.value = bool(Epic.epi_metadata["Allow gaps"]) 114 get_files.verbose_level.value = int(Epic.epi_metadata["Verbose"]) 115 get_files.call_button.enabled = True 116 if "MainChannel" in Epic.epi_metadata: 117 get_files.junction_chanel.value = int(Epic.epi_metadata["MainChannel"]) 118 119 def show_metatdata(show=True): 120 """ Show or update the metadata parameters """ 121 get_files.scale_xy.value = Epic.epi_metadata["ScaleXY"] 122 get_files.timeframe.value = Epic.epi_metadata["ScaleT"] 123 get_files.unit_xy.value = Epic.epi_metadata["UnitXY"] 124 get_files.unit_t.value = Epic.epi_metadata["UnitT"] 125 get_files.scale_xy.visible = show 126 get_files.unit_xy.visible = show 127 get_files.timeframe.visible = show 128 get_files.unit_t.visible = show 129 130 def load_movie(): 131 """ Load and display the selected movie """ 132 start_time = ut.start_time() 133 nonlocal caxis, cval 134 image_file = get_files.image_file.value 135 caxis, cval = Epic.load_movie(image_file) 136 imgdir = ut.get_directory(image_file) 137 get_files.segmentation_file.visible = True 138 get_files.segmentation_file.value = pathlib.Path(imgdir) 139 labname = Epic.suggest_segfile( get_files.output_dirname.value ) 140 Epic.set_names( get_files.output_dirname.value ) 141 if labname is not None: 142 get_files.segmentation_file.value = pathlib.Path(labname) 143 Epic.read_epicure_metadata() 144 if caxis is not None: 145 get_files.junction_chanel.max = cval-1 146 get_files.junction_chanel.visible = True 147 set_chanel() 148 show_metatdata(show=True) 149 get_files.segment_with_epyseg.visible = True 150 get_files.allow_gaps.value = bool(Epic.epi_metadata["Allow gaps"]) 151 get_files.verbose_level.value = int(Epic.epi_metadata["Verbose"]) 152 if "MainChannel" in Epic.epi_metadata: 153 get_files.junction_chanel.value = int(Epic.epi_metadata["MainChannel"]) 154 get_files.call_button.enabled = True 155 ut.show_duration(start_time, header="Movie loaded in ") 156 157 def show_others(): 158 """ Display other chanels from the initial movie """ 159 for ochan in range(cval): 160 ut.remove_layer(viewer, "MovieChannel_"+str(ochan)) 161 if get_files.show_other_chanels.value == True: 162 Epic.add_other_chanels(int(get_files.junction_chanel.value), caxis) 163 164 def set_chanel(): 165 """ Set the correct chanel that contains the junction signal """ 166 start_time = ut.start_time() 167 Epic.set_chanel( int(get_files.junction_chanel.value), caxis ) 168 show_others() 169 ut.show_duration(start_time, header="Movie chanel loaded in ") 170 171 def show_documentation(): 172 """ Open the online documentation """ 173 ut.show_documentation_page( "Start-epicure" ) 174 175 def launch_napari_epyseg(): 176 """ Open napari-epyseg plugin to segment the intensity channel movie """ 177 print("Running EpySeg with default parameters on the movie. To change the settings, use the napari-epyseg plugin outside of EpiCure or EpySeg module directly") 178 parameters = {"tile_width":256, "tile_height":256, "overlap_width":32, "overlap_height":32, "model":"epyseg default(v2)", "norm_min":0, "norm_max":1} 179 ut.show_progress( viewer, True ) 180 progress_bar = progress( len(Epic.img) ) 181 progress_bar.set_description( "Running epyseg on all frames..." ) 182 progress_bar.update(0) 183 try: 184 from epicure.appose_epyseg import go_epyseg 185 class LogHandler(logging.Handler): 186 def emit(self, record): 187 msg = self.format(record) 188 progress_bar.set_description( msg ) 189 190 def setup_logger( name="epyseg_seg" ): 191 logger = logging.getLogger(name) 192 handler = LogHandler() 193 formatter = logging.Formatter('[EpiCure] %(message)s') 194 handler.setFormatter( formatter ) 195 logger.addHandler(handler) 196 logger.setLevel( logging.INFO ) 197 return logger 198 199 logger = setup_logger() 200 segres = go_epyseg( Epic.img, parameters, progress_bar=None, logger=logger ) 201 #segres = appose_epyseg.go_epyseg( Epic.img, parameters, progress_bar=progress_bar ) 202 except Exception as e: 203 ut.show_error( "This option requires the plugin napari-epyseg that is missing.\nInstall it and restart" ) 204 print(e) 205 return 206 ut.show_progress( viewer, False ) 207 segname = str(get_files.image_file.value)+"_epyseg.tif" 208 ut.writeTif( segres, segname, 1.0, "uint8", what="Epyseg results saved in " ) 209 get_files.segmentation_file.value = segname 210 get_files.segment_with_epyseg.visible = False 211 212 213 @magicgui(call_button="START CURE", 214 junction_chanel={"widget_type": "Slider", "min":0, "max": 0}, 215 _ = {"widget_type": "Label"}, 216 scale_xy = {"widget_type": "LiteralEvalLineEdit"}, 217 timeframe = {"widget_type": "LiteralEvalLineEdit"}, 218 __ = {"widget_type": "Label"}, 219 _____ = {"widget_type": "Label"}, 220 ______ = {"widget_type": "Label"}, 221 segment_with_epyseg = {"widget_type": "PushButton", "label": "Segment now with EpySeg"}, 222 ___ = {"widget_type": "Label"}, 223 junction_half_thickness={"widget_type": "LiteralEvalLineEdit"}, 224 nbparallel_threads = {"widget_type": "LiteralEvalLineEdit"}, 225 verbose_level={"widget_type": "Slider", "min":0, "max": 3}, 226 go_help = {"widget_type": "PushButton", "label": "Help"}, 227 ) 228 def get_files( 229 image_file = pathlib.Path(cdir), 230 junction_chanel = 0, 231 _ = "Image metadata", 232 scale_xy = 1, 233 unit_xy = "um", 234 timeframe = 1, 235 unit_t = "min", 236 __ = "\nSegmentation\n", 237 _____ = "Load segmentation or TrackMateXML file", 238 segmentation_file = pathlib.Path(cdir), 239 ______ = "OR\t\t", 240 segment_with_epyseg = False, 241 ___ = "\n", 242 advanced_parameters = False, 243 show_other_chanels = True, 244 show_scale_bar = True, 245 allow_gaps = True, 246 epithelial_cells = True, 247 process_frames_parallel = False, 248 nbparallel_threads = ncpus, 249 junction_half_thickness = 1, 250 output_dirname = "epics", 251 verbose_level = 1, 252 go_help = False, 253 ): 254 255 print("Starting") 256 imname, imdir, outdir = ut.extract_names( image_file, output_dirname ) 257 update_save_history(imdir) 258 #ut.remove_widget(viewer, "Start EpiCure (epicure)") 259 ut.remove_all_widgets( viewer ) 260 Epic.process_parallel = process_frames_parallel 261 Epic.set_verbose( verbose_level ) 262 Epic.nparallel = nbparallel_threads 263 #Epic.load_segmentation(segmentation_file) 264 #Epic.check_shape() 265 Epic.set_thickness( junction_half_thickness ) 266 Epic.set_scales(scale_xy, timeframe, unit_xy, unit_t) 267 Epic.set_scalebar( show_scale_bar ) 268 Epic.set_gaps_option( allow_gaps ) 269 Epic.set_epithelia( epithelial_cells ) 270 ## to handle segmentation from layer or from file 271 segmentation_input = {"File":segmentation_file} 272 if segmented is not None: 273 segmentation_input["Layer"]=segmented 274 275 Epic.go_epicure(outdir, segmentation_input) 276 277 set_visibility() 278 get_files.call_button.enabled = False 279 get_files.segmentation_file.visible = False 280 get_files.segment_with_epyseg.visible = False 281 get_files.scale_xy.visible = False 282 get_files.unit_xy.visible = False 283 get_files.timeframe.visible = False 284 get_files.unit_t.visible = False 285 if movie is not None: 286 load_movie_from_layers(movie, movie_path, segmented) 287 get_files.image_file.value = movie_path 288 show_metatdata(show=True) 289 if segmented is not None: 290 get_files.call_button.enabled = True 291 get_files.junction_chanel.visible = False 292 get_files.advanced_parameters.clicked.connect(set_visibility) 293 get_files.show_other_chanels.clicked.connect(show_others) 294 get_files.image_file.changed.connect(load_movie) 295 get_files.junction_chanel.changed.connect(set_chanel) 296 get_files.segment_with_epyseg.clicked.connect( launch_napari_epyseg ) 297 get_files.go_help.clicked.connect( show_documentation ) 298 return get_files, Epic
def
start_from_layers():
19def start_from_layers(): 20 """ Start EpiCure from already opened image and segmentation layers """ 21 from typing import Union 22 hist = get_save_history() 23 cdir = hist[0] 24 25 def show_doc(): 26 """ Open the online documentation """ 27 ut.show_documentation_page( "Start-epicure#start-from-opened-layers" ) 28 29 @magicgui(call_button="Use selected layers", 30 __ = {"widget_type": "Label"}, 31 go_help = {"widget_type": "PushButton", "label": "Help"}, 32 ) 33 def select_layer(movie: Union["napari.layers.Image", None], movie_path: pathlib.Path, 34 segmentation: Union["napari.layers.Layer", None], 35 __ ="", 36 go_help=False): 37 """ GUI to choose the layers to use """ 38 if movie == "None": 39 movie = None 40 segmented = segmentation 41 if segmentation == "None": 42 segmented = None 43 ut.remove_all_widgets(viewer) 44 #ut.remove_widget(viewer, "Start from opened layers") 45 start_epi, epicure_instance = gui_files(movie=movie, movie_path=movie_path, segmented=segmented) 46 viewer.window.add_dock_widget(start_epi) 47 return start_epi 48 49 viewer = current_viewer() 50 wid = viewer.window.add_dock_widget(select_layer) 51 select_layer.go_help.clicked.connect( show_doc ) 52 return wid
Start EpiCure from already opened image and segmentation layers
def
start_epicure():
56def start_epicure(): 57 """ Start EpiCure from scratch """ 58 gui, epicure = gui_files(movie=None, movie_path ="", segmented=None) 59 return gui
Start EpiCure from scratch
def
gui_files(movie=None, movie_path='', segmented=None):
61def gui_files(movie=None, movie_path="", segmented=None): 62 """ GUI to choose files and parameters """ 63 hist = get_save_history() 64 cdir = hist[0] 65 viewer = current_viewer() 66 Epic = EpiCure(viewer) 67 caxis = None 68 cval = 0 69 ncpus = int(multiprocessing.cpu_count()*0.5) 70 71 def set_visibility(): 72 """ Visibility of the parameters in the GUI """ 73 if movie is not None: 74 get_files.image_file.visible = False 75 if segmented is not None: 76 get_files.segmentation_file.visible = False 77 get_files.segment_with_epyseg.visible = False 78 advanced_visibility() 79 80 def advanced_visibility(): 81 """ Handle the visibility of the advanced parameters """ 82 get_files.output_dirname.visible = get_files.advanced_parameters.value 83 get_files.show_other_chanels.visible = get_files.advanced_parameters.value 84 get_files.process_frames_parallel.visible = get_files.advanced_parameters.value 85 get_files.nbparallel_threads.visible = get_files.advanced_parameters.value 86 get_files.junction_half_thickness.visible = get_files.advanced_parameters.value 87 get_files.verbose_level.visible = get_files.advanced_parameters.value 88 get_files.allow_gaps.visible = get_files.advanced_parameters.value 89 get_files.show_scale_bar.visible = get_files.advanced_parameters.value 90 get_files.epithelial_cells.visible = get_files.advanced_parameters.value 91 92 def load_movie_from_layers(movie, movie_path, segmented): 93 """ Load and display the selected layers """ 94 start_time = ut.start_time() 95 nonlocal caxis, cval 96 caxis, cval = Epic.movie_from_layer(movie, movie_path) 97 imgdir = ut.get_directory(movie_path) 98 99 if segmented is None: 100 get_files.segmentation_file.visible = True 101 get_files.segmentation_file.value = pathlib.Path(imgdir) 102 get_files.segment_with_epyseg.visible = True 103 104 labname = Epic.suggest_segfile( get_files.output_dirname.value ) 105 Epic.set_names( get_files.output_dirname.value ) 106 if labname is not None: 107 get_files.segmentation_file.value = pathlib.Path(labname) 108 Epic.read_epicure_metadata() 109 if caxis is not None: 110 get_files.junction_chanel.max = cval-1 111 get_files.junction_chanel.visible = True 112 set_chanel() 113 show_metatdata(show=True) 114 get_files.allow_gaps.value = bool(Epic.epi_metadata["Allow gaps"]) 115 get_files.verbose_level.value = int(Epic.epi_metadata["Verbose"]) 116 get_files.call_button.enabled = True 117 if "MainChannel" in Epic.epi_metadata: 118 get_files.junction_chanel.value = int(Epic.epi_metadata["MainChannel"]) 119 120 def show_metatdata(show=True): 121 """ Show or update the metadata parameters """ 122 get_files.scale_xy.value = Epic.epi_metadata["ScaleXY"] 123 get_files.timeframe.value = Epic.epi_metadata["ScaleT"] 124 get_files.unit_xy.value = Epic.epi_metadata["UnitXY"] 125 get_files.unit_t.value = Epic.epi_metadata["UnitT"] 126 get_files.scale_xy.visible = show 127 get_files.unit_xy.visible = show 128 get_files.timeframe.visible = show 129 get_files.unit_t.visible = show 130 131 def load_movie(): 132 """ Load and display the selected movie """ 133 start_time = ut.start_time() 134 nonlocal caxis, cval 135 image_file = get_files.image_file.value 136 caxis, cval = Epic.load_movie(image_file) 137 imgdir = ut.get_directory(image_file) 138 get_files.segmentation_file.visible = True 139 get_files.segmentation_file.value = pathlib.Path(imgdir) 140 labname = Epic.suggest_segfile( get_files.output_dirname.value ) 141 Epic.set_names( get_files.output_dirname.value ) 142 if labname is not None: 143 get_files.segmentation_file.value = pathlib.Path(labname) 144 Epic.read_epicure_metadata() 145 if caxis is not None: 146 get_files.junction_chanel.max = cval-1 147 get_files.junction_chanel.visible = True 148 set_chanel() 149 show_metatdata(show=True) 150 get_files.segment_with_epyseg.visible = True 151 get_files.allow_gaps.value = bool(Epic.epi_metadata["Allow gaps"]) 152 get_files.verbose_level.value = int(Epic.epi_metadata["Verbose"]) 153 if "MainChannel" in Epic.epi_metadata: 154 get_files.junction_chanel.value = int(Epic.epi_metadata["MainChannel"]) 155 get_files.call_button.enabled = True 156 ut.show_duration(start_time, header="Movie loaded in ") 157 158 def show_others(): 159 """ Display other chanels from the initial movie """ 160 for ochan in range(cval): 161 ut.remove_layer(viewer, "MovieChannel_"+str(ochan)) 162 if get_files.show_other_chanels.value == True: 163 Epic.add_other_chanels(int(get_files.junction_chanel.value), caxis) 164 165 def set_chanel(): 166 """ Set the correct chanel that contains the junction signal """ 167 start_time = ut.start_time() 168 Epic.set_chanel( int(get_files.junction_chanel.value), caxis ) 169 show_others() 170 ut.show_duration(start_time, header="Movie chanel loaded in ") 171 172 def show_documentation(): 173 """ Open the online documentation """ 174 ut.show_documentation_page( "Start-epicure" ) 175 176 def launch_napari_epyseg(): 177 """ Open napari-epyseg plugin to segment the intensity channel movie """ 178 print("Running EpySeg with default parameters on the movie. To change the settings, use the napari-epyseg plugin outside of EpiCure or EpySeg module directly") 179 parameters = {"tile_width":256, "tile_height":256, "overlap_width":32, "overlap_height":32, "model":"epyseg default(v2)", "norm_min":0, "norm_max":1} 180 ut.show_progress( viewer, True ) 181 progress_bar = progress( len(Epic.img) ) 182 progress_bar.set_description( "Running epyseg on all frames..." ) 183 progress_bar.update(0) 184 try: 185 from epicure.appose_epyseg import go_epyseg 186 class LogHandler(logging.Handler): 187 def emit(self, record): 188 msg = self.format(record) 189 progress_bar.set_description( msg ) 190 191 def setup_logger( name="epyseg_seg" ): 192 logger = logging.getLogger(name) 193 handler = LogHandler() 194 formatter = logging.Formatter('[EpiCure] %(message)s') 195 handler.setFormatter( formatter ) 196 logger.addHandler(handler) 197 logger.setLevel( logging.INFO ) 198 return logger 199 200 logger = setup_logger() 201 segres = go_epyseg( Epic.img, parameters, progress_bar=None, logger=logger ) 202 #segres = appose_epyseg.go_epyseg( Epic.img, parameters, progress_bar=progress_bar ) 203 except Exception as e: 204 ut.show_error( "This option requires the plugin napari-epyseg that is missing.\nInstall it and restart" ) 205 print(e) 206 return 207 ut.show_progress( viewer, False ) 208 segname = str(get_files.image_file.value)+"_epyseg.tif" 209 ut.writeTif( segres, segname, 1.0, "uint8", what="Epyseg results saved in " ) 210 get_files.segmentation_file.value = segname 211 get_files.segment_with_epyseg.visible = False 212 213 214 @magicgui(call_button="START CURE", 215 junction_chanel={"widget_type": "Slider", "min":0, "max": 0}, 216 _ = {"widget_type": "Label"}, 217 scale_xy = {"widget_type": "LiteralEvalLineEdit"}, 218 timeframe = {"widget_type": "LiteralEvalLineEdit"}, 219 __ = {"widget_type": "Label"}, 220 _____ = {"widget_type": "Label"}, 221 ______ = {"widget_type": "Label"}, 222 segment_with_epyseg = {"widget_type": "PushButton", "label": "Segment now with EpySeg"}, 223 ___ = {"widget_type": "Label"}, 224 junction_half_thickness={"widget_type": "LiteralEvalLineEdit"}, 225 nbparallel_threads = {"widget_type": "LiteralEvalLineEdit"}, 226 verbose_level={"widget_type": "Slider", "min":0, "max": 3}, 227 go_help = {"widget_type": "PushButton", "label": "Help"}, 228 ) 229 def get_files( 230 image_file = pathlib.Path(cdir), 231 junction_chanel = 0, 232 _ = "Image metadata", 233 scale_xy = 1, 234 unit_xy = "um", 235 timeframe = 1, 236 unit_t = "min", 237 __ = "\nSegmentation\n", 238 _____ = "Load segmentation or TrackMateXML file", 239 segmentation_file = pathlib.Path(cdir), 240 ______ = "OR\t\t", 241 segment_with_epyseg = False, 242 ___ = "\n", 243 advanced_parameters = False, 244 show_other_chanels = True, 245 show_scale_bar = True, 246 allow_gaps = True, 247 epithelial_cells = True, 248 process_frames_parallel = False, 249 nbparallel_threads = ncpus, 250 junction_half_thickness = 1, 251 output_dirname = "epics", 252 verbose_level = 1, 253 go_help = False, 254 ): 255 256 print("Starting") 257 imname, imdir, outdir = ut.extract_names( image_file, output_dirname ) 258 update_save_history(imdir) 259 #ut.remove_widget(viewer, "Start EpiCure (epicure)") 260 ut.remove_all_widgets( viewer ) 261 Epic.process_parallel = process_frames_parallel 262 Epic.set_verbose( verbose_level ) 263 Epic.nparallel = nbparallel_threads 264 #Epic.load_segmentation(segmentation_file) 265 #Epic.check_shape() 266 Epic.set_thickness( junction_half_thickness ) 267 Epic.set_scales(scale_xy, timeframe, unit_xy, unit_t) 268 Epic.set_scalebar( show_scale_bar ) 269 Epic.set_gaps_option( allow_gaps ) 270 Epic.set_epithelia( epithelial_cells ) 271 ## to handle segmentation from layer or from file 272 segmentation_input = {"File":segmentation_file} 273 if segmented is not None: 274 segmentation_input["Layer"]=segmented 275 276 Epic.go_epicure(outdir, segmentation_input) 277 278 set_visibility() 279 get_files.call_button.enabled = False 280 get_files.segmentation_file.visible = False 281 get_files.segment_with_epyseg.visible = False 282 get_files.scale_xy.visible = False 283 get_files.unit_xy.visible = False 284 get_files.timeframe.visible = False 285 get_files.unit_t.visible = False 286 if movie is not None: 287 load_movie_from_layers(movie, movie_path, segmented) 288 get_files.image_file.value = movie_path 289 show_metatdata(show=True) 290 if segmented is not None: 291 get_files.call_button.enabled = True 292 get_files.junction_chanel.visible = False 293 get_files.advanced_parameters.clicked.connect(set_visibility) 294 get_files.show_other_chanels.clicked.connect(show_others) 295 get_files.image_file.changed.connect(load_movie) 296 get_files.junction_chanel.changed.connect(set_chanel) 297 get_files.segment_with_epyseg.clicked.connect( launch_napari_epyseg ) 298 get_files.go_help.clicked.connect( show_documentation ) 299 return get_files, Epic
GUI to choose files and parameters