setu-neural-eeg / scripts /verify_original.py
arushsinghal's picture
Add files using upload-large-folder tool
4fcc185 verified
Raw History Blame Contribute Delete
1.62 kB
import json,pathlib,urllib.request,hashlib,sys
import scipy.io,numpy as np
from bci_data import load
root=pathlib.Path('datasets/original');root.mkdir(exist_ok=True)
u='https://api.osf.io/v2/nodes/pq7vb/files/osfstorage/5e94806fd69735038fbdd2c8/'
j=json.load(urllib.request.urlopen(u));json.dump(j,open('reports/osf_training_files.json','w'),indent=2);e=next(d for d in j['data'] if d['attributes']['name']=='Data_Sample01.mat');p=root/'Data_Sample01.mat'
if not p.exists():urllib.request.urlretrieve(e['links']['download'],p)
assert p.stat().st_size==e['attributes']['size']
actual=hashlib.sha256(p.read_bytes()).hexdigest();expected=e['attributes']['extra']['hashes'].get('sha256')
if expected:assert actual==expected
m=scipy.io.loadmat(p);epo=m['epo_train'];x=epo['x'][0,0].transpose(2,1,0);y=epo['y'][0,0].argmax(0);a,b,n=load(1,'train')
r={'original_shape':list(x.shape),'converted_shape':list(a.shape),'label_match':bool(np.array_equal(y,b)),'max_absolute_error_microvolts':float(np.max(abs(x-a))),'relative_rmse':float(np.sqrt(np.mean((x-a)**2))/x.std()),'original_time_start_end':np.asarray(epo['t'][0,0]).ravel()[[0,-1]].tolist(),'fields':list(epo.dtype.names),'original_sha256':actual,'upstream_sha256':expected}
assert r['label_match'] and r['relative_rmse']<.001
assert np.array_equal(epo['t'][0,0].ravel()[[128,640]],np.array([0.,2000.]))
json.dump(r,open('reports/original_conversion_check.json','w'),indent=2)
pdf=pathlib.Path('reports/bci_official_description.pdf')
if not pdf.exists():urllib.request.urlretrieve('https://osf.io/download/ymvjz/',pdf)
print('Original MATLAB / EDF comparison passed',r)