def test_chpi_adjust(): """Test cHPI logging and adjustment.""" raw = read_raw_fif(chpi_fif_fname, allow_maxshield='yes') with catch_logging() as log: _get_hpi_initial_fit(raw.info, adjust=True, verbose='debug') _get_hpi_info(raw.info, verbose='debug') # Ran MaxFilter (with -list, -v, -movecomp, etc.), and got: msg = [ 'HPIFIT: 5 coils digitized in order 5 1 4 3 2', 'HPIFIT: 3 coils accepted: 1 2 4', 'Hpi coil moments (3 5):', '2.08542e-15 -1.52486e-15 -1.53484e-15', '2.14516e-15 2.09608e-15 7.30303e-16', '-3.2318e-16 -4.25666e-16 2.69997e-15', '5.21717e-16 1.28406e-15 1.95335e-15', '1.21199e-15 -1.25801e-19 1.18321e-15', 'HPIFIT errors: 0.3, 0.3, 5.3, 0.4, 3.2 mm.', 'HPI consistency of isotrak and hpifit is OK.', 'HP fitting limits: err = 5.0 mm, gval = 0.980.', 'Using 5 HPI coils: 83 143 203 263 323 Hz', # actually came earlier ] log = log.getvalue().splitlines() assert set(log) == set(msg), '\n' + '\n'.join(set(msg) - set(log)) # Then took the raw file, did this: raw.info['dig'][5]['r'][2] += 1. # And checked the result in MaxFilter, which changed the logging as: msg = msg[:8] + [ 'HPIFIT errors: 0.3, 0.3, 5.3, 999.7, 3.2 mm.', 'Note: HPI coil 3 isotrak is adjusted by 5.3 mm!', 'Note: HPI coil 5 isotrak is adjusted by 3.2 mm!' ] + msg[-2:] with catch_logging() as log: _get_hpi_initial_fit(raw.info, adjust=True, verbose='debug') _get_hpi_info(raw.info, verbose='debug') log = log.getvalue().splitlines() assert set(log) == set(msg), '\n' + '\n'.join(set(msg) - set(log))
def test_chpi_adjust(): """Test cHPI logging and adjustment.""" raw = read_raw_fif(chpi_fif_fname, allow_maxshield='yes') with catch_logging() as log: _get_hpi_initial_fit(raw.info, adjust=True, verbose='debug') _get_hpi_info(raw.info, verbose='debug') # Ran MaxFilter (with -list, -v, -movecomp, etc.), and got: msg = ['HPIFIT: 5 coils digitized in order 5 1 4 3 2', 'HPIFIT: 3 coils accepted: 1 2 4', 'Hpi coil moments (3 5):', '2.08542e-15 -1.52486e-15 -1.53484e-15', '2.14516e-15 2.09608e-15 7.30303e-16', '-3.2318e-16 -4.25666e-16 2.69997e-15', '5.21717e-16 1.28406e-15 1.95335e-15', '1.21199e-15 -1.25801e-19 1.18321e-15', 'HPIFIT errors: 0.3, 0.3, 5.3, 0.4, 3.2 mm.', 'HPI consistency of isotrak and hpifit is OK.', 'HP fitting limits: err = 5.0 mm, gval = 0.980.', 'Using 5 HPI coils: 83 143 203 263 323 Hz', # actually came earlier ] log = log.getvalue().splitlines() assert_true(set(log) == set(msg), '\n' + '\n'.join(set(msg) - set(log))) # Then took the raw file, did this: raw.info['dig'][5]['r'][2] += 1. # And checked the result in MaxFilter, which changed the logging as: msg = msg[:8] + [ 'HPIFIT errors: 0.3, 0.3, 5.3, 999.7, 3.2 mm.', 'Note: HPI coil 3 isotrak is adjusted by 5.3 mm!', 'Note: HPI coil 5 isotrak is adjusted by 3.2 mm!'] + msg[-2:] with catch_logging() as log: _get_hpi_initial_fit(raw.info, adjust=True, verbose='debug') _get_hpi_info(raw.info, verbose='debug') log = log.getvalue().splitlines() assert_true(set(log) == set(msg), '\n' + '\n'.join(set(msg) - set(log)))
def _check_dists(info, cHPI_digs, n_bad=0, bad_low=0.02, bad_high=0.04): __tracebackhide__ = True orig = _get_hpi_initial_fit(info) hpi_coil_distances = cdist(orig, orig) new_pos = np.array([d['r'] for d in cHPI_digs]) mask, distances = _compute_good_distances(hpi_coil_distances, new_pos) good_idx = np.where(mask)[0] assert len(good_idx) >= 3 meds = np.empty(len(orig)) for ii in range(len(orig)): idx = np.setdiff1d(good_idx, ii) meds[ii] = np.median(distances[ii][idx]) meds = np.array(meds) assert_array_less(meds[good_idx], 0.003) bad_idx = np.where(~mask)[0] if len(bad_idx): bads = meds[bad_idx] assert_array_less(bad_low, bads) assert_array_less(bads, bad_high)