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