Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def _update_elp(self):
if self.elp_obj is not None:
self.elp_obj.points = apply_trans(self.model.head_dev_trans,
self.model.elp)
for loc in locs:
locs[loc] = apply_trans(trans, locs[loc])
info['dig'] = []
point_dict = {}
point_dict['coord_frame'] = FIFF.FIFFV_COORD_HEAD
point_dict['ident'] = FIFF.FIFFV_POINT_NASION
point_dict['kind'] = FIFF.FIFFV_POINT_CARDINAL
point_dict['r'] = apply_trans(trans, locs['2'])
info['dig'].append(point_dict)
point_dict = {}
point_dict['coord_frame'] = FIFF.FIFFV_COORD_HEAD
point_dict['ident'] = FIFF.FIFFV_POINT_LPA
point_dict['kind'] = FIFF.FIFFV_POINT_CARDINAL
point_dict['r'] = apply_trans(trans, locs['1'])
info['dig'].append(point_dict)
point_dict = {}
point_dict['coord_frame'] = FIFF.FIFFV_COORD_HEAD
point_dict['ident'] = FIFF.FIFFV_POINT_RPA
point_dict['kind'] = FIFF.FIFFV_POINT_CARDINAL
point_dict['r'] = apply_trans(trans, locs['3'])
info['dig'].append(point_dict)
else:
locs = {}
locs = [locs[ch_name.lower()] if ch_name.lower() in locs.keys()
else (0, 0, 0) for ch_name in ch_names]
sensor_locs = np.array(locs)
# Creates a list of dicts of eeg channels for raw.info
def _dup_coil_set(coils, coord_frame, t):
"""Make a duplicate."""
if t is not None and coord_frame != t['from']:
raise RuntimeError('transformation frame does not match the coil set')
coils = deepcopy(coils)
if t is not None:
coord_frame = t['to']
for coil in coils:
for key in ('ex', 'ey', 'ez'):
if key in coil:
coil[key] = apply_trans(t['trans'], coil[key], False)
coil['r0'] = apply_trans(t['trans'], coil['r0'])
coil['rmag'] = apply_trans(t['trans'], coil['rmag'])
coil['cosmag'] = apply_trans(t['trans'], coil['cosmag'], False)
coil['coord_frame'] = t['to']
return coils, coord_frame
def _apply_quat(quat, pts, move=True):
"""Apply MaxFilter-formatted head position parameters to points."""
trans = np.concatenate(
(quat_to_rot(quat[:3]),
quat[3:][:, np.newaxis]), axis=1)
return(apply_trans(trans, pts, move=move))
if len(picks) > 0:
logger.info('Using MEG channels')
else:
logger.info('Using EEG channels')
picks = pick_types(info, eeg=True)
src_pos = np.vstack([
apply_trans(src_trans, s['rr'][s['inuse'].astype(np.bool)])
for s in src
])
sensor_pos = []
for ch in picks:
# MEG channels are in device coordinates, translate them to head
if channel_type(info, ch) in ['mag', 'grad']:
sensor_pos.append(apply_trans(dev_to_head,
info['chs'][ch]['loc'][:3]))
else:
sensor_pos.append(info['chs'][ch]['loc'][:3])
sensor_pos = np.array(sensor_pos)
# Find vertices that are within range of a sensor. We use a KD-tree for
# speed.
logger.info('Finding vertices within sensor range...')
tree = cKDTree(sensor_pos)
distances, _ = tree.query(src_pos, distance_upper_bound=dist)
# Vertices out of range are flagged as np.inf
src_sel = np.isfinite(distances)
logger.info('[done]')
if indices:
def _cut_coords_to_ijk(cut_coords, img):
ijk = apply_trans(linalg.inv(img.affine), cut_coords)
ijk = np.clip(np.round(ijk).astype(int), 0, np.array(img.shape[:3]) - 1)
return ijk
# combine transforms, from HEAD to MRI_VOXEL
affine = combine_transforms(head_mri_t, affine,
'head', 'mri_voxel')
# loop through the surface source spaces
if include_surfaces:
# get the surface names (assumes left, right order. may want
# to add these names during source space generation
surf_names = ['Left-Cerebral-Cortex', 'Right-Cerebral-Cortex']
for i, surf in enumerate(src_types['surface']):
# convert vertex positions from their native space
# (either HEAD or MRI) to MRI_VOXEL space
srf_rr = apply_trans(affine['trans'], surf['rr'])
# convert to numeric indices
ix_orig, iy_orig, iz_orig = srf_rr.T.round().astype(int)
# clip indices outside of volume space
ix_clip = np.maximum(np.minimum(ix_orig, shape3d[2] - 1),
0)
iy_clip = np.maximum(np.minimum(iy_orig, shape3d[1] - 1),
0)
iz_clip = np.maximum(np.minimum(iz_orig, shape3d[0] - 1),
0)
# compare original and clipped indices
n_diff = np.array((ix_orig != ix_clip, iy_orig != iy_clip,
iz_orig != iz_clip)).any(0).sum()
# generate use warnings for clipping
if n_diff > 0:
warn('%s surface vertices lay outside of volume space.'
' Consider using a larger volume space.' % n_diff)
def _get_nearest_transformed_high_res_mri_idx_lpa(self):
return self.nearest_calc.query(
apply_trans(self.head_mri_t, self.hsp.lpa))[1]
break
else:
raise RuntimeError('Desired coil definition not found '
'(type = %d acc = %d)' % (ch['coil_type'], acc))
# Apply a coordinate transformation if so desired
coil_trans = _loc_to_coil_trans(ch['loc'])
# Create the result
res = dict(chname=ch['ch_name'], coil_class=coil['coil_class'],
accuracy=coil['accuracy'], base=coil['base'], size=coil['size'],
type=ch['coil_type'], w=coil['w'], desc=coil['desc'],
coord_frame=FIFF.FIFFV_COORD_DEVICE, rmag_orig=coil['rmag'],
cosmag_orig=coil['cosmag'], coil_trans_orig=coil_trans,
r0=coil_trans[:3, 3],
rmag=apply_trans(coil_trans, coil['rmag']),
cosmag=apply_trans(coil_trans, coil['cosmag'], False))
if do_es:
r0_exey = (np.dot(coil['rmag'][:, :2], coil_trans[:3, :2].T) +
coil_trans[:3, 3])
res.update(ex=coil_trans[:3, 0], ey=coil_trans[:3, 1],
ez=coil_trans[:3, 2], r0_exey=r0_exey)
return res
# A word on terminology used here:
# Sources produce light
# Detectors measure light
# Sources and detectors are both called optodes
# Each source - detector pair produces a channel
# Channels are defined as the midpoint between source and detector
mat_data = read_mat(files['probeInfo.mat'], uint16_codec=None)
requested_channels = mat_data['probeInfo']['probes']['index_c']
src_locs = mat_data['probeInfo']['probes']['coords_s3'] / 100.
det_locs = mat_data['probeInfo']['probes']['coords_d3'] / 100.
ch_locs = mat_data['probeInfo']['probes']['coords_c3'] / 100.
# These are all in MNI coordinates, so let's transform them to
# the Neuromag head coordinate frame
mri_head_t, _ = _get_trans('fsaverage', 'mri', 'head')
src_locs = apply_trans(mri_head_t, src_locs)
det_locs = apply_trans(mri_head_t, det_locs)
ch_locs = apply_trans(mri_head_t, ch_locs)
# Set up digitization
dig = get_mni_fiducials('fsaverage', verbose=False)
for fid in dig:
fid['r'] = apply_trans(mri_head_t, fid['r'])
fid['coord_frame'] = FIFF.FIFFV_COORD_HEAD
for ii, ch_loc in enumerate(ch_locs, 1):
dig.append(dict(
kind=FIFF.FIFFV_POINT_EEG, # misnomer but probably okay
r=ch_loc,
ident=ii,
coord_frame=FIFF.FIFFV_COORD_HEAD,
))
dig = _format_dig_points(dig)