Ejemplo n.º 1
0
def load_data(band):
    dfs = []
    data = []
    for subj in cfg.subjects:
        tfr_path = bp.tfr_av.fpath(subject=subj, acquisition=band)
        tfr = read_tfrs(tfr_path)[0]["confidence < 100 and confidence > 0"]
        df = tfr.metadata.copy()
        data.append(tfr.pick_types(meg="grad").data[:, :, 0, :])
        df["subject"] = subj
        dfs.append(df)
    return dfs, data
Ejemplo n.º 2
0
def read_tfrs_from_path(tfrs_path: str, pattern: str) -> List[AverageTFR]:
    """
    Reads TFR files from path with a given pattern to look for within the file name. I.e.
    used for separating conditions (e.g. H, L).
    Parameters
    ----------
    tfrs_path
    pattern

    Returns
    -------

    """
    files = sorted([
        f for f in os.listdir(tfrs_path)
        if pattern.lower() in f.lower() and not f.startswith(".")
    ])
    tfrs = [read_tfrs(os.path.join(tfrs_path, f))[0] for f in files]

    return tfrs
Ejemplo n.º 3
0
    'CS-1',
    'CS-2',
    'CS+',
    'CS-E',
]
anova_data = []
data = dict()
gavg = dict()
for cond in conditions:
    pdat = []
    data[cond] = []

    for p in part:
        data[cond].append(
            read_tfrs(
                opj('/data/derivatives', p, 'eeg',
                    p + '_task-fearcond_' + cond + '_avg-tfr.h5'))[0])
        data[cond][-1].apply_baseline(mode='logratio', baseline=(-0.2, 0))

        data[cond][-1].crop(tmin=0, tmax=1)

        pdat.append(np.float32(data[cond][-1].data))

    anova_data.append(np.stack(pdat))
    gavg[cond] = mne.grand_average(data[cond])

anova_data = np.stack(anova_data)

# # Take difference of interest for each part
diff_data = np.empty((2, ) + anova_data.shape[1:])
for s in range(anova_data.shape[1]):
Ejemplo n.º 4
0
        "epochs",
        "All_%d-sss_%s-epo.fif" % (params.lp_cut, subject),
    )
    epochs = read_epochs(ep_fname)
    epochs = epochs["tone"]
    epochs.pick_types(meg="grad")
    epochs.crop(-0.2, 1.3).apply_baseline()
    epochs.resample(200.0, npad="auto")
    epochs.drop_bad()
    evoked = epochs.average()
    if np.isnan(evoked.data).any():
        xs.append(subject.split("_")[1])
        continue
    evokeds.append(evoked)
    if op.isfile(out):
        tfrs.append(read_tfrs(out))
    else:
        print("computing TFRAverage data for %s: " % subject)
        tfr = tfr_stockwell(epochs,
                            fmin=fmin,
                            fmax=fmax,
                            n_jobs=12,
                            return_itc=True)
        write_tfrs(out, tfr, overwrite=write)

# %%
# partition around 4mos
out = features["id"].isin(xs)
features = features[~out]
ix = np.where(features["age"].values == 120)[0][0]
aix = np.argpartition(features["age"].values, ix)
Ejemplo n.º 5
0
# Despine
plt.rc("axes.spines", top=False, right=False)
plt.rcParams['font.family'] = 'Arial Narrow'

###############################
# Load data
##############################
betas = np.load(opj(outpath, 'ols_2ndlevel_allbetas.npy'))

pvals = np.load(opj(outpath, 'ols_2ndlevel_tfr_pvals.npy'))
tvals = np.load(opj(outpath, 'ols_2ndlevel_tfr_tvals.npy'))

# Mock  info
epo = read_tfrs(
    opj('/data/derivatives', part[0], 'eeg',
        part[0] + '_task-fearcond_epochs-tfr.h5'))[0]

epo.apply_baseline(mode='logratio', baseline=(-0.2, 0))

# epo.crop(tmin=0, tmax=1)

regvarsnames = ['Expectation', 'Irr. uncertainty', 'Est. uncertainty']

# ###########################################################################
# Make plot
###############################################################################

chans_to_plot = ['Pz', 'POz', 'CPz', 'Cz', 'Fz']
for idx, regvar in enumerate(regvarsnames):
Ejemplo n.º 6
0
def load_patient_tfr(deriv_path, subject, band, task=None, verbose=True):
    from mne.time_frequency import read_tfrs, AverageTFR

    if task is not None:
        search_str = f"*sub-{subject}_*task-{task}*.h5"
    else:
        search_str = f"*sub-{subject}_*.h5"

    deriv_files = [f.as_posix() for f in Path(deriv_path).rglob(search_str)]

    if band == "delta":
        fmin, fmax = 0.5, 5
    elif band == "theta":
        fmin, fmax = 5, 10
    elif band == "alpha":
        fmin, fmax = 10, 16
    elif band == "beta":
        fmin, fmax = 16, 30
    elif band == "gamma":
        fmin, fmax = 30, 90
    elif band == "highgamma":
        fmin, fmax = 90, 300
    else:
        raise ValueError("kwarg 'band' can only be prespecified set of values")

    # print(deriv_files)
    patient_tfrs = []
    for deriv_fpath in deriv_files:
        # print(f"Loading {deriv_fpath}")
        avg_tfr = read_tfrs(deriv_fpath)[0]

        # print(avg_tfr.freqs)
        # only obtain the Band TFR for that subject
        freq_inds = np.where((avg_tfr.freqs >= fmin) & (avg_tfr.freqs < fmax))[0]
        # print(freq_inds)
        band_data = np.mean(avg_tfr.data[:, freq_inds, :], axis=1, keepdims=True)
        band_tfr = AverageTFR(
            avg_tfr.info,
            data=band_data,
            freqs=[fmin],
            nave=1,
            times=avg_tfr.times,
            verbose=0,
        )

        json_fpath = deriv_fpath.replace(".h5", ".json")
        with open(json_fpath, "r") as fin:
            sidecar_json = json.load(fin)

        # obtain the event IDs for the markers of interest
        sz_onset_id = sidecar_json.get("sz_onset_event_id", None)
        sz_offset_id = sidecar_json.get("sz_offset_event_id")
        clin_onset_id = sidecar_json.get("clin_onset_event_id")

        # events array
        events = sidecar_json["events"]

        # obtain onset/offset event markers
        sz_onset_win = _get_onset_event_id(events, sz_onset_id)
        sz_offset_win = _get_onset_event_id(events, sz_offset_id)
        clin_onset_win = _get_onset_event_id(events, clin_onset_id)

        # set those windows
        sidecar_json["sz_onset_win"] = sz_onset_win
        sidecar_json["sz_offset_win"] = sz_offset_win
        sidecar_json["clin_onset_win"] = clin_onset_win
        sidecar_json["freq_band"] = (fmin, fmax)

        # create a Result object
        band_tfr = Result(
            Normalize.compute_fragilitymetric(band_data.squeeze(), invert=True),
            info=avg_tfr.info,
            metadata=sidecar_json,
        )
        # band_tfr.metadata.save(json_fpath)

        if np.isnan(band_data).any():
            print(f"Skipping {deriv_fpath} due to nans")
            continue

        if sz_onset_win is None:
            print(f"Skipping {deriv_fpath}")
            continue

        patient_tfrs.append(band_tfr)
    return patient_tfrs
Ejemplo n.º 7
0
from mne.time_frequency import read_tfrs
from config import subjects, bp_epochs, bp_tfr, bp_tfr_av

band = "alphabeta"
for subj in subjects:
    print(subj)
    tfr_path = bp_tfr_av.fpath(subject=subj, acquisition=band)
    tfr = read_tfrs(tfr_path)[0]["confidence < 100 and confidence > 0"]
    # tfr = read_tfrs(tfr_path)[0]
    df = tfr.metadata.copy()
    df["subject"] = subj
Ejemplo n.º 8
0
"""Compute power time course in target frequency bins"""
from argparse import ArgumentParser
import numpy as np
from mne.time_frequency import read_tfrs

from metacog import bp
from metacog.config_parser import cfg

parser = ArgumentParser(__doc__)
parser.add_argument("subject", help="subject id")
subj = parser.parse_args().subject

tfr_path = bp.tfr.fpath(subject=subj)
tfr = read_tfrs(tfr_path)[0]
fr = tfr.freqs
for band in cfg.target_bands:
    fr_inds = np.logical_and(fr >= cfg.target_bands[band][0],
                             fr <= cfg.target_bands[band][1])
    data = tfr.data[:, :, fr_inds, :].mean(axis=2, keepdims=True)
    tfr_band = tfr.copy()
    tfr_band.data = data
    tfr_band.freqs = [cfg.target_bands[band][0]]
    tfr_av_path = bp.tfr_av.fpath(subject=subj, acquisition=band)
    tfr_av_path.parent.mkdir(exist_ok=True, parents=True)
    tfr_band.save(tfr_av_path, overwrite=True)