Created
January 12, 2018 21:10
-
-
Save RyanHope/a34adb0a799afa106000ffd7eadaa1e2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
""" | |
Parse a SF logfile and BDF file and generate EEGLAB compat event file | |
""" | |
from __future__ import print_function, division | |
import sys, os | |
import csv | |
import glob | |
import mne | |
import argparse | |
import operator | |
import json | |
import numpy as np | |
import zlib | |
if __name__ == '__main__': | |
parser = argparse.ArgumentParser() | |
parser.add_argument('subject_dir') | |
parser.add_argument('output_dir') | |
args = parser.parse_args() | |
if os.path.isdir(args.subject_dir): | |
base, sid = os.path.split(args.subject_dir) | |
base, _ = os.path.split(base) | |
base, _ = os.path.split(base) | |
bdf_file = os.path.join(base,'raw-eeg','%s.bdf' % sid) | |
print(bdf_file) | |
has_bdf = os.path.isfile(bdf_file) | |
if has_bdf: | |
raw = mne.io.read_raw_edf(bdf_file, stim_channel=-1) | |
eeg_events = mne.find_events(raw, stim_channel='STI 014', shortest_event=1) | |
start_times = [] | |
for e in eeg_events: | |
if e[1]==0 and e[2]==1: | |
start_times.append([e[0], e[0]/raw.info["sfreq"]]) | |
game_events2 = [] | |
death_times = [] | |
for f in glob.glob("%s/*.evt" % args.subject_dir): | |
g = int(os.path.split(f)[-1].split(".")[0].split("-")[-1]) | |
ueid = 0 | |
with open(f, "r") as fin: | |
lines = [l.strip().split(" ") for l in fin.readlines()] | |
gs = float(lines[0][1]) | |
N = len(lines) | |
# epoch = 0 | |
for i in range(N): | |
e = lines[i] | |
game_marker = None | |
et = float(e[1]) - gs | |
if i == 0: | |
game_marker = "game-start" | |
elif i == (N-1): | |
game_marker = "game-end" | |
if game_marker != None: | |
if len(e) < 3: | |
e.append(game_marker) | |
else: | |
e[2] = "%s,%s" % (e[2], game_marker) | |
if len(e) == 3: | |
for ee in e[2].split(","): | |
ueid += 1 | |
if has_bdf: | |
game_events2.append([et+start_times[g-1][1], g, ee, ueid, e[0]]) | |
else: | |
game_events2.append([et, g, ee, ueid, e[0]]) | |
game_events2 = sorted(game_events2, key=operator.itemgetter(0, 1)) | |
if not os.path.isdir(args.output_dir): | |
os.makedirs(args.output_dir) | |
with open(os.path.join(args.output_dir, "%s.ext" % (sid)), "w") as fout: | |
writer = csv.writer(fout, delimiter="\t") | |
writer.writerow(["latency","game","type","euid","gametime"]) | |
for ge in game_events2: | |
writer.writerow(ge) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment