[med-svn] [python-mne] 18/353: ENH: support loading of .w files for SourceEstimate
Yaroslav Halchenko
debian at onerussian.com
Fri Nov 27 17:24:25 UTC 2015
This is an automated email from the git hooks/post-receive script.
yoh pushed a commit to tag 0.4
in repository python-mne.
commit 7befeb085eb9140c3f8624e2ece4c1979ccd1e07
Author: Martin Luessi <mluessi at nmr.mgh.harvard.edu>
Date: Fri Dec 2 10:38:51 2011 -0500
ENH: support loading of .w files for SourceEstimate
---
mne/source_estimate.py | 76 +++++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 72 insertions(+), 4 deletions(-)
diff --git a/mne/source_estimate.py b/mne/source_estimate.py
index 1f6a315..089df7e 100644
--- a/mne/source_estimate.py
+++ b/mne/source_estimate.py
@@ -103,10 +103,64 @@ def write_stc(filename, tmin, tstep, vertices, data):
fid.close()
+def _read_3(fid):
+ """ Read 3 byte integer from file
+ """
+ data = np.fromfile(fid, dtype=np.uint8, count=3).astype(np.int32)
+
+ out = np.left_shift(data[0], 16) + np.left_shift(data[1], 8) + data[2]
+
+ return out
+
+
+def read_w(filename):
+ """Read a w file
+
+ w files contain activations or source reconstructions for a single time
+ point
+
+ Parameters
+ ----------
+ filename: string
+ The name of the w file
+
+ Returns
+ -------
+ data: dict
+ The w structure. It has the following keys:
+ vertices vertex indices (0 based)
+ data The data matrix (nvert)
+ """
+ fid = open(filename, 'rb')
+
+ # skip first 2 bytes
+ fid.read(2)
+
+ # read number of vertices/sources (3 byte integer)
+ vertices_n = int(_read_3(fid))
+
+ vertices = np.zeros((vertices_n), dtype=np.int32)
+ data = np.zeros((vertices_n), dtype=np.float32)
+
+ # read the data
+ for i in range(vertices_n):
+ vertices[i] = _read_3(fid)
+ data[i] = np.fromfile(fid, dtype=">f4", count=1)
+
+ w = dict()
+ w['vertices'] = vertices
+ w['data'] = data
+
+ # close the file
+ fid.close()
+ return w
+
+
class SourceEstimate(object):
"""SourceEstimate container
- Can be saved and loaded from .stc files
+ Can be saved and loaded from .stc files. Loading of .w files is supported
+ as well.
Attributes
----------
@@ -127,9 +181,9 @@ class SourceEstimate(object):
self.times = self.tmin + (self.tstep *
np.arange(self.data.shape[1]))
self.vertno = [vl['vertices']]
- else: # surface source spaces
- if fname.endswith('-lh.stc') or fname.endswith('-rh.stc'):
- fname = fname[:-7]
+ elif fname.endswith('-lh.stc') or fname.endswith('-rh.stc'):
+ # stc file with surface source spaces
+ fname = fname[:-7]
lh = read_stc(fname + '-lh.stc')
rh = read_stc(fname + '-rh.stc')
self.data = np.r_[lh['data'], rh['data']]
@@ -140,6 +194,20 @@ class SourceEstimate(object):
self.times = self.tmin + (self.tstep *
np.arange(self.data.shape[1]))
self.vertno = [lh['vertices'], rh['vertices']]
+ elif fname.endswith('-lh.w') or fname.endswith('-rh.w'):
+ # w file with surface source spaces
+ fname = fname[:-5]
+ lh = read_w(fname + '-lh.w')
+ rh = read_w(fname + '-rh.w')
+ self.data = np.atleast_2d(np.r_[lh['data'], rh['data']]).T
+
+ # w files only have a single time point
+ self.tmin = 0.0
+ self.tstep = 1.0
+ self.times = np.array([0.0])
+ self.vertno = [lh['vertices'], rh['vertices']]
+ else:
+ raise ValueError('file type not supported')
def _init_times(self):
"""create self.times"""
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/python-mne.git
More information about the debian-med-commit
mailing list