示例#1
0
def apply_interpolate_bads(raw_fname, raw=None, **cfg):
    """

    :param raw_fname:
    :param raw:
    :param cfg:
    :return:
     filename,raw-obj
    """
    fname_out = None
    logger.info("  -> apply_interpolate_bad file name: {}".format(raw_fname))
    logger.debug("  -> config parameter:\n{}".format(cfg))
    jb.verbose = cfg.get("verbose")

    if not jb.check_file_extention(fname=raw_fname,
                                   file_extention=cfg.get("file_extention")):
        return
    #--- return raw_fname,raw
    if not cfg.get("run"):
        return jb.update_and_save_raw(raw,
                                      fin=raw_fname,
                                      fout=None,
                                      save=False,
                                      update_raw_filenname=True,
                                      postfix=cfg.get("postfix", "int"),
                                      overwrite=cfg.get("overwrite", True))

    raw, raw_fname = jb.get_raw_obj(raw_fname, raw=raw)

    if raw:
        logger.info("fname: {}".format(raw_fname))
        #--- Interpolate bad channels using jumeg
        with jumeg_logger.StreamLoggerSTD(label="interpolate_bads"):
            raw = jumeg_interpolate_bads(
                raw
            )  #,**cfg.get("parameter"))  #,origin=cfg.get("origin",None),reset_bads=cfg.get("reset_bads",True) )

    #-- check results
        if cfg.get("plot_block"):
            raw.plot(block=cfg.get("plot_block"))

    #--- update filename in raw and save if save
    fname_out, raw = jb.update_and_save_raw(raw,
                                            fin=raw_fname,
                                            fout=None,
                                            save=cfg.get("save"),
                                            postfix=cfg.get("postfix", "int"),
                                            overwrite=cfg.get(
                                                "overwrite", True))

    if fname_out:
        return fname_out, raw
    else:
        raise Exception("---> ERROR file name not defined !!!")
示例#2
0
def apply_suggest_bads(raw_fname, raw=None, **cfg):
    """

    :param raw_fname:
    :param raw:
    :param cfg:
    :return:
     filename,raw-obj
    """
    fname_out = None
    logger.info("  -> apply_suggest_bads file name: {}".format(raw_fname))
    logger.debug("  -> config parameter:\n{}".format(cfg))

    if not jb.check_file_extention(fname=raw_fname,
                                   file_extention=cfg.get("file_extention")):
        return

        #--- return raw_fname,raw
    if not cfg.get("run"):
        return jb.update_and_save_raw(raw,
                                      fin=raw_fname,
                                      fout=None,
                                      save=False,
                                      postfix=cfg.get("postfix", "bcc"),
                                      overwrite=cfg.get("overwrite", True))

    raw_changed = True
    jb.verbose = cfg.get("verbose")
    raw, raw_fname = jb.get_raw_obj(raw_fname, raw=raw)

    if raw:
        with jumeg_logger.StreamLoggerSTD(label="suggest_bads"):
            marked, raw = suggest_bads(
                raw)  #,**cfg["parameter"]) #show_raw=cfg.get("show_raw") )

    fname_out, raw = jb.update_and_save_raw(raw,
                                            fin=raw_fname,
                                            fout=None,
                                            save=cfg.get("save"),
                                            update_raw_filenname=True,
                                            postfix=cfg.get("postfix", "bcc"),
                                            overwrite=cfg.get(
                                                "overwrite", True))

    if fname_out:
        return fname_out, raw
    else:
        raise Exception("---> ERROR file name not defined !!!")
示例#3
0
def apply_resample(raw_fname, raw=None, **cfg):
    """

    :param raw_fname:
    :param raw:
    :param cfg:
    :return:
     filename,raw-obj
    """
    return
    logger.info("  -> apply_resample file name: {}".format(raw_fname))
    logger.debug("  -> config parameter:\n{}".format(cfg))

    if not jb.check_file_extention(fname=raw_fname,
                                   file_extention=cfg.get("file_extention")):
        return
        #--- return raw_fname,raw
    if not cfg.get("run"):
        return jb.update_and_save_raw(raw,
                                      fin=raw_fname,
                                      fout=None,
                                      save=False,
                                      postfix=cfg.get("postfix", "res"),
                                      overwrite=cfg.get("overwrite", True))

#--- catch stdout,stderr
#jumeg_logger.log_stdout(label="filter")
#jumeg_logger.log_stderr(label="filter")

    jb.verbose = cfg.get("verbose")
    raw, raw_fname = jb.get_raw_obj(raw_fname, raw=raw)

    #--- ToDo setup  resampling
    #raw,raw_fname = jumeg_mne_fileter(raw)
    raw_changed = True

    #--- save and update filename in raw
    #if raw_changed:
    #    fname_out,raw = jb.update_and_save_raw(raw,fin=raw_fname,fout=None,save=cfg.get("save"),update_raw_filenname=True,
    #                                          postfix=cfg.get("postfix","bcc"),overwrite=cfg.get("overwrite",True))

    #--- return back stdout/stderr from logger
    #jumeg_logger.log_stdout(reset=True)
    #jumeg_logger.log_stderr(reset=True)

    return fname_out, raw
示例#4
0
def apply_noise_reducer(raw_fname, raw=None, **cfg):
    '''
    apply <magic ee noise reducer> thrice to reference channels with different freq parameters
    save PSD plot in subfolder /plots
   
    !!! overwrite raw-obj, works inplace !!!
  
    0) reset bads and check for dead channels
    1) apply nr low pass filter for freq below e.g.: 5Hz  <reflp>
    2) apply nr high pass filter if defined               <reflp>
    3) apply nr notch filter to remove power line noise   <refnotch>
    4) save PSD plot
    
    Parameter:
    -----------
    <noise_reducer> parameter used in this function :
     fname_raw  : input raw filename
     raw        : <None>\n
     cfg        : dict, part of config file <None>
        from config file <noise_reducer> part\n
        reflp      : <None>\n
        refhp      : <None>\n
        refnotch   : <None>\n
        
        plot: True
        plot_show : True
        plot_dir   : subdir to save plots
       
        postfix       : "nr"
        file_extention: ["meeg-raw.fif","rfDC-empty.fif"]
        
        run      : True
        save     : True
        overwrite: True
        
    ToDo add parameter extended
    <noise_reducer> parameter extended
       signals=[], noiseref=[], detrending=None,
       tmin=None, tmax=None,
       exclude_artifacts=True, checkresults=True, return_raw=False,
       complementary_signal=False, fnout=None, verbose=False

    Return:
    --------
     filename,raw-obj
    '''

    #--- init plot
    fname_out = None
    logger.info("  -> apply_noise_reducer file name: {}".format(raw_fname))
    logger.debug("  -> config parameter:\n{}".format(cfg))

    if not jb.check_file_extention(fname=raw_fname,
                                   file_extention=cfg.get("file_extention")):
        return

    if not cfg.get("run"):
        #--- return raw_fname,raw
        return jb.update_and_save_raw(raw,
                                      fin=raw_fname,
                                      fout=None,
                                      save=False,
                                      postfix=cfg.get("postfix", "nr"),
                                      overwrite=cfg.get("overwrite", True))

    logger.info(
        " --> preproc noise_reducer for raw file: {}".format(raw_fname))

    #--- noise reduction
    # apply noise reducer thrice to reference channels with different freq parameters
    # !!! overwrite raw-obj !!!
    save = False
    raw_changed = False
    jb.verbose = cfg.get("verbose")

    #--- load raw, reset bads
    raw, raw_fname = jb.get_raw_obj(raw_fname, raw=raw, reset_bads=True)

    #--- check dead channes and mark them as bad
    jb.picks.check_dead_channels(raw=raw)

    #--- start plot denoising orig raw psd, avoid reloading raw data
    if cfg.get("plot"):
        jplt = JuMEG_PLOT_PSD(n_plots=2, name="denoising", verbose=True)
        jplt.plot(raw,
                  title="orig: " + os.path.basename(raw_fname),
                  check_dead_channels=False)

#--- with redirect stdout/err
    with jumeg_logger.StreamLoggerSTD(label="noise_reducer"):
        #--- 1 nr low pass filter for freq below 5 hz
        if cfg.get("reflp"):
            raw = noise_reducer(None,
                                raw=raw,
                                reflp=cfg.get("reflp"),
                                return_raw=True,
                                verbose=cfg.get("verbose"),
                                exclude_artifacts=False)
            raw_changed = True
    #--- 2 nr high pass filter
        if cfg.get("refhp"):
            raw = noise_reducer(None,
                                raw=raw,
                                reflp=cfg.get("refhp"),
                                return_raw=True,
                                verbose=cfg.get("verbose"),
                                exclude_artifacts=False)
            raw_changed = True
    #--- 3  nr notch filter to remove power line noise
        if cfg.get("refnotch"):
            raw = noise_reducer(None,
                                raw=raw,
                                refnotch=cfg.get("refnotch"),
                                fnout=None,
                                return_raw=True,
                                verbose=cfg.get("verbose"),
                                exclude_artifacts=False)
            raw_changed = True

#--- save and update filename in raw
    if cfg.get("save"):
        save = raw_changed

    #--- update filename in raw and save if save
    fname_out, raw = jb.update_and_save_raw(raw,
                                            fin=raw_fname,
                                            fout=None,
                                            save=save,
                                            update_raw_filenname=True,
                                            postfix=cfg.get("postfix", "nr"),
                                            overwrite=cfg.get(
                                                "overwrite", True))

    #--- plot results, avoid reloading raw data
    if cfg.get("plot"):
        jplt.plot(raw,
                  title="denoised: " + os.path.basename(fname_out),
                  check_dead_channels=False)
        if cfg.get("plot_show"):
            jplt.show()
        jplt.save(fname=fname_out, plot_dir=cfg.get("plor_dir", "plots"))

    if fname_out:
        return fname_out, raw
    else:
        raise Exception("---> ERROR file name not defined !!!")
    def _on_enter(self, **kwargs):
        """
        :return:
         raw_fname, raw obj
        """
        self._update_from_kwargs(**kwargs)

        #print(Fore.GREEN)
        logger.info("Start: < {} > file name: {}".format(
            self.label, self._raw_fname))
        #print(Style.RESET_ALL)

        if self._debug:
            logger.debug("config parameter:\n{}".format(self._cfg))

    # self._raw = None
        self._run = True
        self._fname_out = None

        #--- check file extention in list
        if not jb.check_file_extention(
                fname=self._raw_fname,
                file_extention=self._cfg.get("file_extention")):
            logger.info(
                "preproc {}:  SKIPPED : <file extention not in extention list>\n"
                .format(self.label) + self.info())
            self._run = False
            self._raw = None
            return None, None

        self._fname_out, self._raw = jb.update_and_save_raw(
            self._raw,
            fin=self._raw_fname,
            fout=None,
            save=False,
            postfix=self.postfix,
            overwrite=False)
        #--- return raw_fname,raw
        if not self._cfg.get("run"):
            logger.info(
                "preproc {}:  SKIPPED : <run> is False\n".format(self.label) +
                self.info())
            self._run = False
            self._raw = None
            return self._raw_fname, None

        #--- if file exist and do not overwrite
        if os.path.isfile(self._fname_out) and (self._cfg.get(
                "overwrite", False) == False):
            logger.info(
                "preproc {}: SKIPPED : do not overwrite existing output file\n"
                .format(self.label) + self.info())
            self._run = False
            self._raw = None
            return self._fname_out, None

        #--- OK load raw, reset bads
        self._raw, self._raw_fname = jb.get_raw_obj(
            self._raw_fname, raw=self._raw, reset_bads=self._reset_bads)
        logger.info("preproc {}\n".format(self.label) + self.info())
        return self._raw_fname, self._raw