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 36133fc3692f66547aca8217b453beba2ee0a0cd Author: Alexandre Gramfort <[email protected]> Date: Thu Aug 11 14:46:31 2011 -0400 FIX : less code duplication in write of meas info between raw and evoked (WIP) --- mne/fiff/meas_info.py | 4 +- mne/fiff/raw.py | 129 ++++++++++++++------------------------------------ mne/fiff/write.py | 2 +- 3 files changed, 39 insertions(+), 96 deletions(-) diff --git a/mne/fiff/meas_info.py b/mne/fiff/meas_info.py index e1a0aeb..9f5b097 100644 --- a/mne/fiff/meas_info.py +++ b/mne/fiff/meas_info.py @@ -232,7 +232,7 @@ def read_meas_info(fid, tree): return info, meas -def write_meas_info(fid, info): +def write_meas_info(fid, info, data_type=None): """Write measurement info in fif file.""" # Measurement info @@ -262,6 +262,8 @@ def write_meas_info(fid, info): write_float(fid, FIFF.FIFF_HIGHPASS, info['highpass']) write_float(fid, FIFF.FIFF_LOWPASS, info['lowpass']) write_int(fid, FIFF.FIFF_NCHAN, info['nchan']) + if data_type is not None: + write_int(fid, FIFF.FIFF_DATA_PACK, data_type) if info['meas_date'] is not None: write_int(fid, FIFF.FIFF_MEAS_DATE, info['meas_date']) diff --git a/mne/fiff/raw.py b/mne/fiff/raw.py index f90d8e6..410ab5a 100644 --- a/mne/fiff/raw.py +++ b/mne/fiff/raw.py @@ -9,7 +9,7 @@ import numpy as np from .constants import FIFF from .open import fiff_open -from .evoked import read_meas_info +from .meas_info import read_meas_info, write_meas_info from .tree import dir_tree_find from .tag import read_tag @@ -498,13 +498,13 @@ def start_writing_raw(name, info, sel=None): # # We will always write floats # - if sel is None: - chs = info['chs'] - nchan = len(chs) - else: - chs = [info['chs'][k] for k in sel] - nchan = len(sel) - data_type = 4 + # if sel is None: + # chs = info['chs'] + # nchan = len(chs) + # else: + # chs = [info['chs'][k] for k in sel] + # nchan = len(sel) + # data_type = 4 # # Create the file and save the essentials # @@ -516,65 +516,13 @@ def start_writing_raw(name, info, sel=None): # # Measurement info # - start_block(fid, FIFF.FIFFB_MEAS_INFO) - # - # Blocks from the original - # - blocks = [FIFF.FIFFB_SUBJECT, FIFF.FIFFB_HPI_MEAS, FIFF.FIFFB_HPI_RESULT, - FIFF.FIFFB_ISOTRAK, FIFF.FIFFB_PROCESSING_HISTORY] - have_hpi_result = False - have_isotrak = False - if len(blocks) > 0 and 'filename' in info and info['filename'] is not None: - fid2, tree, _ = fiff_open(info['filename']) - for b in blocks: - nodes = dir_tree_find(tree, b) - copy_tree(fid2, tree['id'], nodes, fid) - if b == FIFF.FIFFB_HPI_RESULT and len(nodes) > 0: - have_hpi_result = True - if b == FIFF.FIFFB_ISOTRAK and len(nodes) > 0: - have_isotrak = True - fid2.close() - - # - # megacq parameters - # - if info['acq_pars'] is not None or info['acq_stim'] is not None: - start_block(fid, FIFF.FIFFB_DACQ_PARS) - if info['acq_pars'] is not None: - write_string(fid, FIFF.FIFF_DACQ_PARS, info['acq_pars']) - - if info['acq_stim'] is not None: - write_string(fid, FIFF.FIFF_DACQ_STIM, info['acq_stim']) - - end_block(fid, FIFF.FIFFB_DACQ_PARS) - # - # Coordinate transformations if the HPI result block was not there - # - if not have_hpi_result: - if info['dev_head_t'] is not None: - write_coord_trans(fid, info['dev_head_t']) - - if info['ctf_head_t'] is not None: - write_coord_trans(fid, info['ctf_head_t']) - # - # Polhemus data - # - if info['dig'] is not None and not have_isotrak: - start_block(fid, FIFF.FIFFB_ISOTRAK) - for dig_point in info['dig']: - write_dig_point(fid, dig_point) - end_block(fid, FIFF.FIFFB_ISOTRAK) - # - # Projectors - # - write_proj(fid, info['projs']) - # - # CTF compensation info - # - comps = info['comps'] if sel is not None: - ch_names = [c['ch_name'] for c in chs] # name of good channels - comps = copy.deepcopy(comps) + info = copy.deepcopy(info) + info['chs'] = [info['chs'][k] for k in sel] + info['nchan'] = len(sel) + + ch_names = [c['ch_name'] for c in info['chs']] # name of good channels + comps = copy.deepcopy(info['comps']) for c in comps: row_idx = [k for k, n in enumerate(c['data']['row_names']) if n in ch_names] @@ -584,38 +532,31 @@ def start_writing_raw(name, info, sel=None): c['data']['nrow'] = len(row_names) c['data']['row_names'] = row_names c['data']['data'] = c['data']['data'][row_idx] - write_ctf_comp(fid, comps) - # - # Bad channels - # - if len(info['bads']) > 0: - start_block(fid, FIFF.FIFFB_MNE_BAD_CHANNELS) - write_name_list(fid, FIFF.FIFF_MNE_CH_NAME_LIST, info['bads']) - end_block(fid, FIFF.FIFFB_MNE_BAD_CHANNELS) - # - # General - # - write_float(fid, FIFF.FIFF_SFREQ, info['sfreq']) - write_float(fid, FIFF.FIFF_HIGHPASS, info['highpass']) - write_float(fid, FIFF.FIFF_LOWPASS, info['lowpass']) - write_int(fid, FIFF.FIFF_NCHAN, nchan) - write_int(fid, FIFF.FIFF_DATA_PACK, data_type) - if info['meas_date'] is not None: - write_int(fid, FIFF.FIFF_MEAS_DATE, info['meas_date']) - # - # Channel info - # + info['comps'] = comps + cals = [] - for k in range(nchan): + for k in range(info['nchan']): # # Scan numbers may have been messed up # - chs[k]['scanno'] = k + 1 # scanno starts at 1 in FIF format - chs[k]['range'] = 1.0 - cals.append(chs[k]['cal']) - write_ch_info(fid, chs[k]) - - end_block(fid, FIFF.FIFFB_MEAS_INFO) + info['chs'][k]['scanno'] = k + 1 # scanno starts at 1 in FIF format + info['chs'][k]['range'] = 1.0 + cals.append(info['chs'][k]['cal']) + + write_meas_info(fid, info, data_type=4) + + # # + # # megacq parameters + # # + # if info['acq_pars'] is not None or info['acq_stim'] is not None: + # start_block(fid, FIFF.FIFFB_DACQ_PARS) + # if info['acq_pars'] is not None: + # write_string(fid, FIFF.FIFF_DACQ_PARS, info['acq_pars']) + # + # if info['acq_stim'] is not None: + # write_string(fid, FIFF.FIFF_DACQ_STIM, info['acq_stim']) + # + # end_block(fid, FIFF.FIFFB_DACQ_PARS) # # Start the raw data # diff --git a/mne/fiff/write.py b/mne/fiff/write.py index d255944..6349ed5 100644 --- a/mne/fiff/write.py +++ b/mne/fiff/write.py @@ -194,7 +194,7 @@ def write_coord_trans(fid, trans): fid.write(np.array(move, dtype='>f4').tostring()) # ...and its inverse - trans_inv = linalg.inv(trans.trans) + trans_inv = linalg.inv(trans['trans']) rot = trans_inv[:3, :3] move = trans_inv[:3, 3] fid.write(np.array(rot, dtype='>f4').tostring()) -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/python-mne.git _______________________________________________ debian-med-commit mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/debian-med-commit
