示例#1
0
    def _load_annotation_table(self, *args, filename=None):
        """Load annotations."""
        # Get file name :
        if filename is None:
            filename = dialog_load(
                self, "Import annotations", '',
                "CSV file (*.csv);;Text file (*.txt);;"
                "All files (*.*)")
        # Clean annotations :
        self._AnnotateTable.setRowCount(0)
        start, end, annot = annotations_to_array(filename)

        # Fill table :
        self._AnnotateTable.setRowCount(len(start))
        # File the table :
        for k, (s, e, a) in enumerate(zip(start, end, annot)):
            # Starting index :
            self._AnnotateTable.setItem(k, 0,
                                        QtWidgets.QTableWidgetItem(str(s)))
            # Ending index :
            self._AnnotateTable.setItem(k, 1,
                                        QtWidgets.QTableWidgetItem(str(e)))
            # Text :
            self._AnnotateTable.setItem(k, 2,
                                        QtWidgets.QTableWidgetItem(str(a)))
            # Set the current tab to the annotation tab :
            self.QuickSettings.setCurrentIndex(5)
        # Set markers :
        middle = (start.astype(np.float32) + end.astype(np.float32)) / 2
        self._annot_mark = middle
        self._fcn_slider_move()
示例#2
0
    def _load_annotation_table(self, *args, filename=None):
        """Load annotations."""
        # Get file name :
        if filename is None:
            filename = dialog_load(self, "Import annotations", '',
                                   "CSV file (*.csv);;Text file (*.txt);;"
                                   "All files (*.*)")
        # Clean annotations :
        self._AnnotateTable.setRowCount(0)
        start, end, annot = annotations_to_array(filename)

        # Fill table :
        self._AnnotateTable.setRowCount(len(start))
        # File the table :
        for k, (s, e, a) in enumerate(zip(start, end, annot)):
            # Starting index :
            self._AnnotateTable.setItem(
                k, 0, QtWidgets.QTableWidgetItem(str(s)))
            # Ending index :
            self._AnnotateTable.setItem(
                k, 1, QtWidgets.QTableWidgetItem(str(e)))
            # Text :
            self._AnnotateTable.setItem(
                k, 2, QtWidgets.QTableWidgetItem(str(a)))
            # Set the current tab to the annotation tab :
            self.QuickSettings.setCurrentIndex(5)
        # Set markers :
        middle = (start.astype(np.float32) + end.astype(np.float32)) / 2
        self._annot_mark = middle
        self._fcn_slider_move()
示例#3
0
 def _load_detect_select(self, *args, filename=None):
     """Load a specific detection."""
     # Get file name :
     if filename is None:
         filename = dialog_load(
             self, "Import table", '',
             "CSV file (*.csv);;Text file (*.txt);;"
             "All files (*.*)")
     if filename:
         # Get channel / method from file name :
         (chan, meth) = filename.split('_')[-1].split('.')[0].split('-')
         # Load the file :
         (st, end) = np.genfromtxt(filename,
                                   delimiter=',',
                                   encoding='utf-8')[3::, 0:2].T
         # Sort by starting index :
         idxsort = np.argsort(st)
         st, end = st[idxsort], end[idxsort]
         # Concatenate (starting, ending) index :
         index = np.c_[st, end]
         # Convert into index :
         index = np.round(index * self._sf).astype(int)
         # Set index :
         self._detect[(chan, meth)]['index'] = index
         # Plot update :
         self._fcn_slider_move()
         self._loc_line_report()
         self._check_detect_menu()
示例#4
0
 def _load_detect_select(self, *args, filename=None):
     """Load a specific detection."""
     # Get file name :
     if filename is None:
         filename = dialog_load(self, "Import table", '',
                                "CSV file (*.csv);;Text file (*.txt);;"
                                "All files (*.*)")
     if filename:
         # Get channel / method from file name :
         (chan, meth) = filename.split('_')[-1].split('.')[0].split('-')
         # Load the file :
         (st, end) = np.genfromtxt(filename, delimiter=',',
                                   encoding='utf-8')[3::, 0:2].T
         # Sort by starting index :
         idxsort = np.argsort(st)
         st, end = st[idxsort], end[idxsort]
         # Concatenate (starting, ending) index :
         index = np.c_[st, end]
         # Convert into index :
         index = np.round(index * self._sf).astype(int)
         # Set index :
         self._detect[(chan, meth)]['index'] = index
         # Plot update :
         self._fcn_slider_move()
         self._loc_line_report()
         self._check_detect_menu()
示例#5
0
 def _load_detect_all(self, *args, filename=None):
     """Load all detections."""
     # Dialog window for detection file :
     if filename is None:
         filename = dialog_load(self, "Import detections", '',
                                "NumPy (*.npy);;All files (*.*)")
     self._detect.dict = np.ndarray.tolist(np.load(filename))
     # Made canvas visbles :
     for k in self._detect:
         if self._detect[k]['index'].size:
             # Get channel number :
             idx = self._channels.index(k[0])
             self._canvas_set_visible(idx, True)
             self._chan.visible[idx] = True
     # Plot update :
     self._fcn_slider_move()
     self._loc_line_report()
     self._check_detect_menu()
示例#6
0
 def _load_detect_all(self, *args, filename=None):
     """Load all detections."""
     # Dialog window for detection file :
     if filename is None:
         filename = dialog_load(self, "Import detections", '',
                                "NumPy (*.npy);;All files (*.*)")
     self._detect.dict = np.ndarray.tolist(np.load(filename))
     # Made canvas visbles :
     for k in self._detect:
         if self._detect[k]['index'].size:
             # Get channel number :
             idx = self._channels.index(k[0])
             self._canvas_set_visible(idx, True)
             self._chan.visible[idx] = True
     # Plot update :
     self._fcn_slider_move()
     self._loc_line_report()
     self._check_detect_menu()
示例#7
0
    def _fcn_load_annotations(self, *args, filename=None):
        """Load annotations."""
        # Get file name :
        if filename is None:
            filename = dialog_load(self, "Import annotations", '',
                                   "CSV file (*.csv);;Text file (*.txt);;"
                                   "All files (*.*)")
        # Clean annotations :
        self._annot_table.setRowCount(0)
        # Load the file :
        if isinstance(filename, str):  # 'file.txt'
            # Get starting/ending/annotation :
            time, amp, signal, text = np.genfromtxt(filename, delimiter='_',
                                                    dtype=str).T
            coords = np.c_[time, amp].astype(float)

        # Fill table :
        self._signal.clean_annotations()
        self._annot_table.setRowCount(0)
        # File the table :
        for k in range(len(signal)):
            self._annotate_event(signal[k], coords[k, :], text=text[k])
示例#8
0
 def _load_hypno(self, *args, filename=None):
     """Load a hypnogram."""
     # Define default filename for the hypnogram :
     if not isinstance(self._file, str):
         hyp_file = 'hypno'
     else:
         hyp_file = os.path.basename(self._file) + '_hypno'
     # Get filename :
     if filename is None:
         filename = dialog_load(self, 'Load hypnogram File', hyp_file,
                                "Text file (*.txt);;CSV file (*.csv);;"
                                "Elan file (*.hyp);;Excel file (*.xlsx);;"
                                "All files (*.*)")
     if filename:
         # Load the hypnogram :
         self._hypno, _ = read_hypno(filename, time=self._time)
         self._hypno = oversample_hypno(self._hypno, self._N)[::self._dsf]
         self._hyp.set_data(self._sf, self._hypno, self._time)
         # Update info table :
         self._fcn_info_update()
         # Update scoring table :
         self._fcn_hypno_to_score()
         self._fcn_score_to_hypno()
示例#9
0
    def _fcn_load_annotations(self, *args, filename=None):
        """Load annotations."""
        # Get file name :
        if filename is None:
            filename = dialog_load(
                self, "Import annotations", '',
                "CSV file (*.csv);;Text file (*.txt);;"
                "All files (*.*)")
        # Clean annotations :
        self._annot_table.setRowCount(0)
        # Load the file :
        if isinstance(filename, str):  # 'file.txt'
            # Get starting/ending/annotation :
            time, amp, signal, text = np.genfromtxt(filename,
                                                    delimiter='_',
                                                    dtype=str).T
            coords = np.c_[time, amp].astype(float)

        # Fill table :
        self._signal.clean_annotations()
        self._annot_table.setRowCount(0)
        # File the table :
        for k in range(len(signal)):
            self._annotate_event(signal[k], coords[k, :], text=text[k])
示例#10
0
 def _load_hypno(self, *args, filename=None):
     """Load a hypnogram."""
     # Define default filename for the hypnogram :
     if not isinstance(self._file, str):
         hyp_file = 'hypno'
     else:
         hyp_file = os.path.basename(self._file) + '_hypno'
     # Get filename :
     if filename is None:
         filename = dialog_load(
             self, 'Load hypnogram File', hyp_file,
             "Text file (*.txt);;CSV file (*.csv);;"
             "Elan file (*.hyp);;Excel file (*.xlsx);;"
             "All files (*.*)")
     if filename:
         # Load the hypnogram :
         self._hypno, _ = read_hypno(filename, time=self._time)
         self._hypno = oversample_hypno(self._hypno, self._N)[::self._dsf]
         self._hyp.set_data(self._sf, self._hypno, self._time)
         # Update info table :
         self._fcn_info_update()
         # Update scoring table :
         self._fcn_hypno_to_score()
         self._fcn_score_to_hypno()
示例#11
0
    def _load_config(self, *args, filename=None):
        """Load a config file (.json) containing several display parameters."""
        import json
        if not filename:
            filename = dialog_load(
                self, 'Load config File', 'config',
                "JSON file (*.json);;Text files (*.txt);;"
                "All files (*.*)")
        if filename:
            with open(filename) as f:
                # Load the configuration file :
                config = json.load(f)

                def _try(string, self=self, config=config):
                    """Execute the string.

                    This function insure backward compatibility for loading the
                    configuration file.
                    """
                    try:
                        exec(string)
                    except:
                        pass

                # Channels
                for i, k in enumerate(self._chanChecks):
                    self._chanChecks[i].setChecked(
                        config['Channel_Visible'][i])
                    self._ymaxSpin[i].setValue(config['Channel_Amplitude'][i])
                # Amplitudes :
                # _try("self._PanAllAmpMin.setValue(config['AllAmpMin'])")
                # _try("self._PanAllAmpMax.setValue(config['AllAmpMax'])")
                _try("self._PanAmpSym.setChecked(config['SymAmp'])")
                _try("self._PanAmpAuto.setChecked(config['AutoAmp'])")
                # Spectrogram
                _try("self.menuDispSpec.setChecked(config['Spec_Visible'])")
                _try("self._PanSpecMethod.setCurrentIndex("
                     "config['Spec_Method'])")
                _try("self._PanSpecNfft.setValue(config['Spec_Length'])")
                _try("self._PanSpecStep.setValue(config['Spec_Overlap'])")
                _try("self._PanSpecCmap.setCurrentIndex(config['Spec_Cmap'])")
                _try("self._PanSpecCmapInv.setChecked(config['Spec_CmapInv'])")
                _try("self._PanSpecChan.setCurrentIndex(config['Spec_Chan'])")
                _try("self._PanSpecFstart.setValue(config['Spec_Fstart'])")
                _try("self._PanSpecFend.setValue(config['Spec_Fend'])")
                _try("self._PanSpecCon.setValue(config['Spec_Con'])")
                _try("self._PanSpecInterp.setCurrentIndex("
                     "config['Spec_Interp'])")
                # Hypnogram/time axis/navigation/topo/indic/zoom :
                _try("self.menuDispHypno.setChecked(config['Hyp_Visible'])")
                _try("self.menuDispTimeax.setChecked(config['Time_Visible'])")
                _try("self.menuDispTopo.setChecked(config['Topo_Visible'])")
                _try("self.menuDispNavbar.setChecked(config['Nav_Visible'])")
                _try("self.menuDispIndic.setChecked(config['Indic_Visible'])")
                _try("self._PanHypnoLw.setValue(config['Hyp_Lw'])")
                _try("self._PanHypnoColor.setChecked(config['Hyp_Color'])")
                # Navigation bar properties :
                _try("self._SlVal.setValue(config['Slider'])")
                _try("self._SigSlStep.setValue(config['Step'])")
                _try("self._SigWin.setValue(config['Display_Window'])")
                _try("self._ScorWin.setValue(config['Scoring_Window'])")
                _try("self._SlGoto.setValue(config['Goto'])")
                _try("self._slMagnify.setChecked(config['Magnify'])")
                _try("self._slAbsTime.setChecked(config['AbsTime'])")
                _try("self._slGrid.setChecked(config['Grid'])")
                _try("self._ScorWinVisible.setChecked("
                     "config['Display_Scoring_Window'])")
                _try("self._slRules.setCurrentIndex(config['Unit'])")
                # Update display
                self._fcn_chan_viz()
                self._fcn_chan_amplitude()
                self._fcn_spec_set_data()
                self._disptog_spec()
                self._disptog_hyp()
                self._disptog_timeax()
                self._disptog_topo()
                self._disptog_indic()
                self._disptog_zoom()
                self._fcn_grid_toggle()
                self._fcn_scorwin_indicator_toggle()
                self._fcn_update_amp_info()
                self._fcn_chan_auto_amp()
                self._fcn_chan_sym_amp()
                self._fcn_set_hypno_lw()
                self._fcn_set_hypno_color()
示例#12
0
    def _fcn_load_config(self, _, filename=None):
        """Load the configuration."""
        if not filename:
            filename = dialog_load(self, 'Load config File', 'config',
                                   "Text file (*.txt);;All files (*.*)")
        if filename:
            config = load_config_json(filename)

            def _try(string, self=self, config=config):
                """Execute the string.

                This function insure backward compatibility for loading the
                configuration file.
                """
                try:
                    exec(string)
                except:
                    warn("Cannot execute for loading the config : " + string)

            # ----------------- VISIBLE OBJECTS -----------------
            # Settings :
            _try("self.menuDispQuickSettings.setChecked("
                 "config['SettingViz'])")
            _try("self._fcn_menu_disp_set()")
            # Engram :
            _try("self.menuDispEngram.setChecked(config['EngramViz'])")
            _try("self._fcn_menu_disp_engram()")
            # Sources
            _try("self.menuDispSources.setChecked(config['SourcesViz'])")
            _try("self._fcn_menu_disp_sources()")
            # Connect :
            _try("self.menuDispConnect.setChecked(config['ConnectViz'])")
            _try("self._fcn_menu_disp_connect()")
            # ROI :
            _try("self.menuDispROI.setChecked(config['ROIViz'])")
            _try("self._fcn_menu_disp_roi()")
            # Cbar :
            _try("self.menuDispCbar.setChecked(config['CbarViz'])")
            _try("self._fcn_menu_disp_cbar()")

            # ----------------- CAMERA -----------------
            _try("self.view.wc.camera.set_state(config['CamState'])")
            _try("self.cbqt.cbviz._wc.camera.rect=config['CamCbState']")

            # ----------------- BRAIN -----------------
            # Surroundings :
            _try("self._engram_translucent.setChecked(config['EngramTransp'])")
            _try("self._engramPickHemi.setCurrentIndex(config["
                 "'EngramHemi'])")
            _try("self._engramTemplate.setCurrentIndex(config["
                 "'EngramTemplate'])")
            _try("self._engram_control()")
            _try("self._light_reflection()")
            # ROIs :
            _try("self._roiTransp.setChecked(config['RoiTransp'])")
            _try("self._roiDiv.setCurrentIndex(config['RoiAnat'])")
            _try("self._roiSmooth.setValue(config['RoiSmooth'])")
            _try("self._roiToAdd.clear()")
            _try("self._fcn_build_roi_list()")
            _try("self._fcn_set_selected_rois(config['RoiStruct'])")
            _try("self._fcn_update_list()")
            # Cross-sections :
            _try("self._csSagit.setValue(config['CsSagit'])")
            _try("self._csCoron.setValue(config['CsCoron'])")
            _try("self._csAxial.setValue(config['CsAxial'])")
            _try("self._csDiv.setCurrentIndex(config['CsDiv'])")
            _try("self._csCmap.setCurrentIndex(config['CsCmap'])")
            _try("self._csTransp.setChecked(config['CsTransp'])")
            _try("self._csSplit.setChecked(config['CsSplit'])")
            _try("self.grpSec.setChecked(config['CsGrp'])")
            _try("self._fcn_crossec_change()")
            _try("self._fcn_crossec_split()")
            # Volume :
            _try("self._volDiv.setCurrentIndex(config['VolDiv'])")
            _try("self._volRendering.setCurrentIndex(config['VolRendering'])")
            _try("self._volCmap.setCurrentIndex(config['VolCmap'])")
            _try("self._volIsoTh.setValue(config['VolTh'])")
            _try("self.grpVol.setChecked(config['VolGrp'])")
            _try("self._fcn_vol_change()")

            # ----------------- SOURCES -----------------
            # Sources object :
            _try("self._sourcesPickdisp.setCurrentIndex(config["
                 "'SourcesDisp'])")
            _try("self._fcn_sources_display()")
            _try("self.s_Symbol.setCurrentIndex(config['SourcesSym'])")
            _try("self.s_EdgeColor.setText(str(config['SourcesEcol']))")
            _try("self.s_EdgeWidth.setValue(config['SourcesEw'])")
            _try("self._fcn_sources_look()")
            _try("self.s_radiusMin.setValue(config['SourcesRm'])")
            _try("self.s_radiusMax.setValue(config['SourcesRM'])")
            _try("self.s_Scaling.setChecked(config['SourcesScale'])")
            _try("self._fcn_sources_radius()")
            # Source's text :
            _try("self.grpText.setChecked(config['StextShow'])")
            _try("self.q_stextsize.setValue(config['StextSz'])")
            _try("self.q_stextcolor.setText(str(config['StextCol']))")
            _try("self.x_text.setValue(config['StextXYZ'][0])")
            _try("self.y_text.setValue(config['StextXYZ'][1])")
            _try("self.z_text.setValue(config['StextXYZ'][2])")
            # Source's projection settings :
            _try("self._uitRadius.setValue(config['SprojRad'])")
            _try("self._uitPickProj.setCurrentIndex(config['SprojType'])")
            _try("self._uitProjectOn.setCurrentIndex(config['SprojOn'])")
            _try("self._uitContribute.setChecked(config['SprojCon'])")
            # Source's time-series :
            _try("self._tsWidth.setValue(config['StsWidth'])")
            _try("self._tsAmp.setValue(config['StsAmp'])")
            _try("self._tsLw.setValue(config['StsLw'])")
            _try("self._tsDx.setValue(config['StsDxyz'][0])")
            _try("self._tsDy.setValue(config['StsDxyz'][1])")
            _try("self._tsDz.setValue(config['StsDxyz'][2])")
            _try("self._tsColor.setText(str(config['StsColor']))")
            _try("self._fcn_ts_update()")

            # ----------------- CONNECTIVITY -----------------
            _try("self.uiConnect_colorby.setCurrentIndex(config["
                 "'ConnectCby'])")
            _try("self._connectStaDynTransp.setCurrentIndex(config["
                 "'ConnectAlp'])")
            _try("self.uiConnect_dynMin.setValue(config['ConnectMin'])")
            _try("self.uiConnect_dynMax.setValue(config['ConnectMax'])")
            _try("self._densityRadius.setValue(config['ConnectRad'])")
            _try("self.uiConnect_lw.setValue(config['ConnectLw'])")
            _try("self._conBlEnable.setChecked(config['ConnectBun'])")
            _try("self._conBlRadius.setValue(config['ConnectBunRad'])")
            _try("self._conBlDxyz.setValue(config['ConnectBunDxyz'])")

            # ----------------- GUI SETTINGS -----------------
            # Background color :
            rgb = config['BcgColor']
            _try("self.bgd_red.setValue(" + str(rgb[0]) + ")")
            _try("self.bgd_green.setValue(" + str(rgb[1]) + ")")
            _try("self.bgd_blue.setValue(" + str(rgb[2]) + ")")
            _try("self._fcn_bgd_color()")
            # Tab :
            _try("self.QuickSettings.setCurrentIndex(config[" "'CurrentTab'])")

            # ----------------- CBAR -----------------
            # Cbar visual :
            _try("self.cbqt.cbobjs.from_dict(config['Cbar'])")
            _try("self.cbqt._disconnect()")
            _try("self.cbqt._initialize()")
            _try("self.cbqt._connect()")
            _try("self.cbqt.link('Projection', self._fcn_link_proj, "
                 "self._fcn_minmax_proj)")
            _try("self.cbqt.link('Connectivity', self._fcn_link_connect, "
                 "self._fcn_minmax_connect)")
示例#13
0
    def _load_config(self, *args, filename=None):
        """Load a config file (.json) containing several display parameters."""
        import json
        if not filename:
            filename = dialog_load(self, 'Load config File', 'config',
                                   "JSON file (*.json);;Text files (*.txt);;"
                                   "All files (*.*)")
        if filename:
            with open(filename) as f:
                # Load the configuration file :
                config = json.load(f)

                def _try(string, self=self, config=config):
                    """Execute the string.

                    This function insure backward compatibility for loading the
                    configuration file.
                    """
                    try:
                        exec(string)
                    except:
                        pass

                # Channels
                for i, k in enumerate(self._chanChecks):
                    self._chanChecks[i].setChecked(
                        config['Channel_Visible'][i])
                    self._ymaxSpin[i].setValue(config['Channel_Amplitude'][i])
                # Amplitudes :
                # _try("self._PanAllAmpMin.setValue(config['AllAmpMin'])")
                # _try("self._PanAllAmpMax.setValue(config['AllAmpMax'])")
                _try("self._PanAmpSym.setChecked(config['SymAmp'])")
                _try("self._PanAmpAuto.setChecked(config['AutoAmp'])")
                # Spectrogram
                _try("self.menuDispSpec.setChecked(config['Spec_Visible'])")
                _try("self._PanSpecMethod.setCurrentIndex("
                     "config['Spec_Method'])")
                _try("self._PanSpecNfft.setValue(config['Spec_Length'])")
                _try("self._PanSpecStep.setValue(config['Spec_Overlap'])")
                _try("self._PanSpecCmap.setCurrentIndex(config['Spec_Cmap'])")
                _try("self._PanSpecCmapInv.setChecked(config['Spec_CmapInv'])")
                _try("self._PanSpecChan.setCurrentIndex(config['Spec_Chan'])")
                _try("self._PanSpecFstart.setValue(config['Spec_Fstart'])")
                _try("self._PanSpecFend.setValue(config['Spec_Fend'])")
                _try("self._PanSpecCon.setValue(config['Spec_Con'])")
                _try("self._PanSpecInterp.setCurrentIndex("
                     "config['Spec_Interp'])")
                # Hypnogram/time axis/navigation/topo/indic/zoom :
                _try("self.menuDispHypno.setChecked(config['Hyp_Visible'])")
                _try("self.menuDispTimeax.setChecked(config['Time_Visible'])")
                _try("self.menuDispTopo.setChecked(config['Topo_Visible'])")
                _try("self.menuDispNavbar.setChecked(config['Nav_Visible'])")
                _try("self.menuDispIndic.setChecked(config['Indic_Visible'])")
                _try("self._PanHypnoLw.setValue(config['Hyp_Lw'])")
                _try("self._PanHypnoColor.setChecked(config['Hyp_Color'])")
                # Navigation bar properties :
                _try("self._SlVal.setValue(config['Slider'])")
                _try("self._SigSlStep.setValue(config['Step'])")
                _try("self._SigWin.setValue(config['Window'])")
                _try("self._SlGoto.setValue(config['Goto'])")
                _try("self._slMagnify.setChecked(config['Magnify'])")
                _try("self._slAbsTime.setChecked(config['AbsTime'])")
                _try("self._slGrid.setChecked(config['Grid'])")
                _try("self._slRules.setCurrentIndex(config['Unit'])")
                # Update display
                self._fcn_chan_viz()
                self._fcn_chan_amplitude()
                self._fcn_spec_set_data()
                self._disptog_spec()
                self._disptog_hyp()
                self._disptog_timeax()
                self._disptog_topo()
                self._disptog_indic()
                self._disptog_zoom()
                self._fcn_grid_toggle()
                self._fcn_update_amp_info()
                self._fcn_chan_auto_amp()
                self._fcn_chan_sym_amp()
                self._fcn_set_hypno_lw()
                self._fcn_set_hypno_color()