Source code for ramutils.stim_artifact

import ramutils.powers
import scipy.stats
import cmlreaders
import json
import pandas as pd


def get_tstats(stim_events, pairs, start_time, duration, return_pvalues=False, before_experiment=True,):
    """
    Computes ttest on the average EEG value pre-stim vs post-stim.
    TODO: import from artdet; define parameters centrally

    Parameters
    ----------
    stim_events: np.rec.array
      Stimulation events for a session
    pairs: dict
      bipolar pairs
    start_time: float
      time after stim offset/before stim onset to begin (seconds)
    duration: float
      Length of eeg to evaluate (seconds)
    return_pvalues: bool
      If `true`, return p-values along with t-statistics
    before_experiment:
      If `true`, only include stim events before the first list
    Returns
    -------
    t: np.ndarray
      T-statistics by channel
    p: np.ndarray
      p-values by channel
    """

    stim_duration = 0.500

    if before_experiment:
        # Only use stim events from artifact detection period
        stim_events = stim_events[stim_events['list'] == -999]
        if len(stim_events) < 30: #TODO: MAKE THIS A CONFIG PARAMETER -- SEE TICL_FR expconf generator
            return (None, None) if return_pvalues else None

    pre_stim_eeg = ramutils.powers.load_eeg(
        stim_events,
        start_time=-(start_time+duration),
        end_time=-start_time,
        bipolar_pairs=pairs
    )
    post_stim_eeg = ramutils.powers.load_eeg(
        stim_events,
        start_time=stim_duration+start_time,
        end_time=stim_duration+start_time+duration,
        bipolar_pairs=pairs
    )

    means = [interval.mean(-1) for interval in [post_stim_eeg, pre_stim_eeg]]
    t, p = scipy.stats.ttest_rel(*means, axis=1)
    if return_pvalues:
        return t, p
    else:
        return t


def get_artifact_detection_info(subject,experiment,session, paths):
    """
    Loads artifact detection information from Ramulator event log

    Parameters
    ----------
    subject
    experiment
    session
    paths

    Returns
    -------
    artifact_info: dict

    Notes
    -----
    Requires cmlreaders
    """

    finder = cmlreaders.PathFinder(subject, experiment, session,
                                   rootdir=paths.root)
    with open(finder.find('event_log')) as event_log_file:
        event_log = json.load(event_log_file)
    event_df = pd.DataFrame.from_records(event_log['events'])
    artifact_rows = event_df.loc[event_df.event_label.apply(
        lambda x: x.startswith('ARTIFACT_DETECTION'))].set_index('event_label')
    artifact_rows.index = [x.remove('ARTIFACT_DETECTION_').lower()
                           for x in artifact_rows.index]
    return artifact_rows.T.loc['msg_stub'].to_dict()