[med-svn] [python-mne] 53/376: a bit of reorganization + pep8
Yaroslav Halchenko
debian at onerussian.com
Fri Nov 27 17:22:05 UTC 2015
This is an automated email from the git hooks/post-receive script.
yoh pushed a commit to annotated tag v0.1
in repository python-mne.
commit f898d94770b02ae5afd0e74ba8546478c50243e4
Author: Alexandre Gramfort <alexandre.gramfort at inria.fr>
Date: Thu Jan 27 10:56:57 2011 -0500
a bit of reorganization + pep8
---
mne/compensator.py | 178 ++++++++++++++++++++++++++++++++++++++++++++++++++
mne/fiff/ctf.py | 6 +-
mne/fiff/meas_info.py | 16 -----
mne/fiff/proj.py | 1 +
mne/fiff/raw.py | 115 --------------------------------
5 files changed, 182 insertions(+), 134 deletions(-)
diff --git a/mne/compensator.py b/mne/compensator.py
new file mode 100644
index 0000000..8290f73
--- /dev/null
+++ b/mne/compensator.py
@@ -0,0 +1,178 @@
+import numpy as np
+
+from .constants import FIFF
+
+
+def get_current_comp(info):
+ """Get the current compensation in effect in the data
+ """
+ comp = 0
+ first_comp = -1
+ for k, chan in enumerate(info['chs']):
+ if chan.kind == FIFF.FIFFV_MEG_CH:
+ comp = int(chan['coil_type']) >> 16
+ if first_comp < 0:
+ first_comp = comp
+ elif comp != first_comp:
+ raise ValueError, ('Compensation is not set equally on '
+ 'all MEG channels')
+
+ return comp
+
+
+def findall(L, value, start=0):
+ """Returns indices of all occurence of value in list L starting from start
+ """
+ c = L.count(value)
+ if c == 0:
+ return list()
+ else:
+ ind = list()
+ i = start-1
+ for _ in range(c):
+ i = L.index(value, i+1)
+ ind.append(i)
+ return ind
+
+
+def _make_compensator(info, kind):
+ """Auxiliary function for make_compensator
+ """
+ for k in range(len(info['comps'])):
+ if info['comps'][k]['kind'] == kind:
+ this_data = info['comps'][k]['data']
+
+ # Create the preselector
+ presel = np.zeros((this_data['ncol'], info['nchan']))
+ for col, col_name in enumerate(this_data['col_names']):
+ ind = findall(info['ch_names'], col_name)
+ if len(ind) == 0:
+ raise ValueError, 'Channel %s is not available in data' % \
+ col_name
+ elif len(ind) > 1:
+ raise ValueError, 'Ambiguous channel %s' % col_name
+ presel[col, ind] = 1.0
+
+ # Create the postselector
+ postsel = np.zeros((info['nchan'], this_data['nrow']))
+ for c, ch_name in enumerate(info['ch_names']):
+ ind = findall(this_data['row_names'], ch_name)
+ if len(ind) > 1:
+ raise ValueError, 'Ambiguous channel %s' % ch_name
+ elif len(ind) == 1:
+ postsel[c, ind] = 1.0
+
+ this_comp = np.dot(postsel, np.dot(this_data['data'], presel))
+ return this_comp
+
+ return []
+
+
+def make_compensator(info, from_, to, exclude_comp_chs=False):
+ """ XXX : bug !!! 2 make_compensator functions
+ %
+ % [comp] = mne_make_compensator(info,from,to,exclude_comp_chs)
+ %
+ % info - measurement info as returned by the fif reading routines
+ % from - compensation in the input data
+ % to - desired compensation in the output
+ % exclude_comp_chs - exclude compensation channels from the output (optional)
+ %
+
+ %
+ % Create a compensation matrix to bring the data from one compensation
+ % state to another
+ %
+ """
+
+ if from_ == to:
+ comp = np.zeros((info['nchan'], info['nchan']))
+ return comp
+
+ if from_ == 0:
+ C1 = np.zeros((info['nchan'], info['nchan']))
+ else:
+ try:
+ C1 = _make_compensator(info, from_)
+ except Exception as inst:
+ raise ValueError, 'Cannot create compensator C1 (%s)' % inst
+
+ if len(C1) == 0:
+ raise ValueError, ('Desired compensation matrix (kind = %d) not'
+ ' found' % from_)
+
+
+ if to == 0:
+ C2 = np.zeros((info['nchan'], info['nchan']))
+ else:
+ try:
+ C2 = _make_compensator(info, to)
+ except Exception as inst:
+ raise ValueError, 'Cannot create compensator C2 (%s)' % inst
+
+ if len(C2) == 0:
+ raise ValueError, ('Desired compensation matrix (kind = %d) not '
+ 'found' % to)
+
+
+ # s_orig = s_from + C1*s_from = (I + C1)*s_from
+ # s_to = s_orig - C2*s_orig = (I - C2)*s_orig
+ # s_to = (I - C2)*(I + C1)*s_from = (I + C1 - C2 - C2*C1)*s_from
+ comp = np.eye(info['nchan']) + C1 - C2 - C2*C1
+
+ if exclude_comp_chs:
+ pick = np.zeros((info['nchan'], info['nchan']))
+ npick = 0
+ for k, chan in info['chs']:
+ if chan['kind'] != FIFF.FIFFV_REF_MEG_CH:
+ npick += 1
+ pick[npick] = k
+
+ if npick == 0:
+ raise ValueError, ('Nothing remains after excluding the '
+ 'compensation channels')
+
+ comp = comp[pick[1:npick], :]
+
+ return comp
+
+
+def compensate_to(data, to):
+ """
+ %
+ % [newdata] = mne_compensate_to(data,to)
+ %
+ % Apply compensation to the data as desired
+ %
+ """
+
+ newdata = data.copy()
+ now = get_current_comp(newdata['info'])
+
+ # Are we there already?
+ if now == to:
+ print 'Data are already compensated as desired'
+
+ # Make the compensator and apply it to all data sets
+ comp = make_compensator(newdata['info'], now, to)
+ for k in range(len(newdata['evoked'])):
+ newdata['evoked'][k]['epochs'] = np.dot(comp,
+ newdata['evoked'][k]['epochs'])
+
+ # Update the compensation info in the channel descriptors
+ newdata['info']['chs'] = set_current_comp(newdata['info']['chs'], to)
+ return newdata
+
+
+def set_current_comp(chs, value):
+ """Set the current compensation value in the channel info structures
+ """
+ new_chs = chs
+
+ lower_half = int('FFFF', 16) # hex2dec('FFFF')
+ for k in range(len(chs)):
+ if chs[k].kind == FIFF.FIFFV_MEG_CH:
+ coil_type = float(chs[k]['coil_type']) & lower_half
+ new_chs[k]['coil_type'] = int(coil_type | (value << 16))
+
+ return new_chs
diff --git a/mne/fiff/ctf.py b/mne/fiff/ctf.py
index 7111a90..dcf358c 100644
--- a/mne/fiff/ctf.py
+++ b/mne/fiff/ctf.py
@@ -125,11 +125,11 @@ def read_ctf_comp(fid, node, chs):
one = dict(ctfkind=tag.data, kind=-1)
del tag
- if one.ctfkind == hex2dec('47314252'):
+ if one.ctfkind == int('47314252', 16): # hex2dec('47314252'):
one.kind = 1
- elif one.ctfkind == hex2dec('47324252'):
+ elif one.ctfkind == int('47324252', 16): # hex2dec('47324252'):
one.kind = 2
- elif one.ctfkind == hex2dec('47334252'):
+ elif one.ctfkind == int('47334252', 16): # hex2dec('47334252'):
one.kind = 3
else:
one.kind = one.ctfkind
diff --git a/mne/fiff/meas_info.py b/mne/fiff/meas_info.py
index 2501125..8e1f936 100644
--- a/mne/fiff/meas_info.py
+++ b/mne/fiff/meas_info.py
@@ -257,19 +257,3 @@ def read_meas_info(source, tree=None):
return info, meas
-
-def get_current_comp(info):
- """Get the current compensation in effect in the data
- """
- comp = 0;
- first_comp = -1;
- for k, chan in enumerate(info['chs']):
- if chan.kind == FIFF.FIFFV_MEG_CH:
- comp = int(chan['coil_type']) >> 16
- if first_comp < 0:
- first_comp = comp;
- elif comp != first_comp:
- raise ValueError, ('Compensation is not set equally on '
- 'all MEG channels')
-
- return comp
diff --git a/mne/fiff/proj.py b/mne/fiff/proj.py
index 8a5a6c2..b3b7685 100644
--- a/mne/fiff/proj.py
+++ b/mne/fiff/proj.py
@@ -263,3 +263,4 @@ def make_projector_info(info):
"""
proj, nproj, _ = make_projector(info['projs'], info['ch_names'], info['bads'])
return proj, nproj
+
diff --git a/mne/fiff/raw.py b/mne/fiff/raw.py
index 6d8a0f9..f90cfd2 100644
--- a/mne/fiff/raw.py
+++ b/mne/fiff/raw.py
@@ -566,118 +566,3 @@ def finish_writing_raw(fid):
end_block(fid, FIFF.FIFFB_MEAS)
end_file(fid)
-###############################################################################
-# misc
-
-def findall(L, value, start=0):
- """Returns indices of all occurence of value in list L starting from start
- """
- c = L.count(value)
- if c == 0:
- return list()
- else:
- ind = list()
- i = start-1
- for _ in range(c):
- i = L.index(value, i+1)
- ind.append(i)
- return ind
-
-
-def _make_compensator(info, kind):
- """Auxiliary function for make_compensator
- """
- for k in range(len(info['comps'])):
- if info['comps'][k]['kind'] == kind:
- this_data = info['comps'][k]['data'];
-
- # Create the preselector
- presel = np.zeros((this_data['ncol'], info['nchan']))
- for col, col_name in enumerate(this_data['col_names']):
- ind = findall(info['ch_names'], col_name)
- if len(ind) == 0:
- raise ValueError, 'Channel %s is not available in data' % \
- col_name
- elif len(ind) > 1:
- raise ValueError, 'Ambiguous channel %s' % col_name
- presel[col, ind] = 1.0
-
- # Create the postselector
- postsel = np.zeros((info['nchan'], this_data['nrow']))
- for c, ch_name in enumerate(info['ch_names']):
- ind = findall(this_data['row_names'], ch_name)
- if len(ind) > 1:
- raise ValueError, 'Ambiguous channel %s' % ch_name
- elif len(ind) == 1:
- postsel[c, ind] = 1.0
-
- this_comp = postsel*this_data['data']*presel;
- return this_comp
-
- return []
-
-
-def make_compensator(info, from_, to, exclude_comp_chs=False):
- """ XXX : bug !!! 2 make_compensator functions
- %
- % [comp] = mne_make_compensator(info,from,to,exclude_comp_chs)
- %
- % info - measurement info as returned by the fif reading routines
- % from - compensation in the input data
- % to - desired compensation in the output
- % exclude_comp_chs - exclude compensation channels from the output (optional)
- %
-
- %
- % Create a compensation matrix to bring the data from one compensation
- % state to another
- %
- """
-
- if from_ == to:
- comp = np.zeros((info['nchan'], info['nchan']))
- return comp
-
- if from_ == 0:
- C1 = np.zeros((info['nchan'], info['nchan']))
- else:
- try:
- C1 = _make_compensator(info, from_)
- except Exception as inst:
- raise ValueError, 'Cannot create compensator C1 (%s)' % inst
-
- if len(C1) == 0:
- raise ValueError, 'Desired compensation matrix (kind = %d) not found' % from_
-
-
- if to == 0:
- C2 = np.zeros((info['nchan'], info['nchan']))
- else:
- try:
- C2 = _make_compensator(info, to)
- except Exception as inst:
- raise ValueError, 'Cannot create compensator C2 (%s)' % inst
-
- if len(C2) == 0:
- raise ValueError, 'Desired compensation matrix (kind = %d) not found' % to
-
-
- # s_orig = s_from + C1*s_from = (I + C1)*s_from
- # s_to = s_orig - C2*s_orig = (I - C2)*s_orig
- # s_to = (I - C2)*(I + C1)*s_from = (I + C1 - C2 - C2*C1)*s_from
- comp = np.eye(info['nchan']) + C1 - C2 - C2*C1;
-
- if exclude_comp_chs:
- pick = np.zeros((info['nchan'], info['nchan']))
- npick = 0
- for k, chan in info['chs']:
- if chan['kind'] != FIFF.FIFFV_REF_MEG_CH:
- npick += 1
- pick[npick] = k
-
- if npick == 0:
- raise ValueError, 'Nothing remains after excluding the compensation channels'
-
- comp = comp[pick[1:npick], :]
-
- return comp
--
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