Calculate a forward solution for a subject.
(
info, trans, src, bem, dev_head_ts, mindist, n_jobs, forward, picks
)
| 787 | |
| 788 | |
| 789 | def _iter_forward_solutions( |
| 790 | info, trans, src, bem, dev_head_ts, mindist, n_jobs, forward, picks |
| 791 | ): |
| 792 | """Calculate a forward solution for a subject.""" |
| 793 | logger.info("Setting up forward solutions") |
| 794 | info = pick_info(info, picks) |
| 795 | with info._unlock(): |
| 796 | info.update(projs=[], bads=[]) # Ensure no 'projs' or 'bads' |
| 797 | mri_head_t, trans = _get_trans(trans) |
| 798 | sensors, rr, info, update_kwargs, bem = _prepare_for_forward( |
| 799 | src, |
| 800 | mri_head_t, |
| 801 | info, |
| 802 | bem, |
| 803 | mindist, |
| 804 | n_jobs, |
| 805 | allow_bem_none=True, |
| 806 | verbose=_verbose_safe_false(), |
| 807 | ) |
| 808 | del (src, mindist) |
| 809 | |
| 810 | eegnames = sensors.get("eeg", dict()).get("ch_names", []) |
| 811 | if not len(eegnames): |
| 812 | eegfwd = None |
| 813 | elif forward is not None: |
| 814 | eegfwd = pick_channels_forward(forward, eegnames, verbose=False) |
| 815 | else: |
| 816 | eegels = sensors.get("eeg", dict()).get("defs", []) |
| 817 | this_sensors = dict(eeg=dict(ch_names=eegnames, defs=eegels)) |
| 818 | eegfwd = _compute_forwards( |
| 819 | rr, bem=bem, sensors=this_sensors, n_jobs=n_jobs, verbose=False |
| 820 | )["eeg"] |
| 821 | eegfwd = _to_forward_dict(eegfwd, eegnames) |
| 822 | del eegels |
| 823 | del eegnames |
| 824 | |
| 825 | # short circuit here if there are no MEG channels (don't need to iterate) |
| 826 | if "meg" not in sensors: |
| 827 | eegfwd.update(**update_kwargs) |
| 828 | for _ in dev_head_ts: |
| 829 | yield eegfwd |
| 830 | yield eegfwd |
| 831 | return |
| 832 | |
| 833 | coord_frame = FIFF.FIFFV_COORD_HEAD |
| 834 | if bem is not None and not bem["is_sphere"]: |
| 835 | idx = np.where( |
| 836 | np.array([s["id"] for s in bem["surfs"]]) == FIFF.FIFFV_BEM_SURF_ID_BRAIN |
| 837 | )[0] |
| 838 | assert len(idx) == 1 |
| 839 | # make a copy so it isn't mangled in use |
| 840 | bem_surf = transform_surface_to( |
| 841 | bem["surfs"][idx[0]], coord_frame, mri_head_t, copy=True |
| 842 | ) |
| 843 | megcoils = sensors["meg"]["defs"] |
| 844 | if "eeg" in sensors: |
| 845 | del sensors["eeg"] |
| 846 | megnames = sensors["meg"]["ch_names"] |
no test coverage detected