Optimized incremental fitting using the same sensors and BEM.
| 979 | |
| 980 | |
| 981 | class _ForwardModeler: |
| 982 | """Optimized incremental fitting using the same sensors and BEM.""" |
| 983 | |
| 984 | @verbose |
| 985 | def __init__( |
| 986 | self, |
| 987 | info, |
| 988 | trans, |
| 989 | bem, |
| 990 | *, |
| 991 | mindist=0.0, |
| 992 | n_jobs=1, |
| 993 | verbose=None, |
| 994 | ): |
| 995 | self.mri_head_t, _ = _get_trans(trans) |
| 996 | self.mindist = mindist |
| 997 | self.n_jobs = n_jobs |
| 998 | src = SourceSpaces([]) |
| 999 | self.sensors, _, _, self.update_kwargs, self.bem = _prepare_for_forward( |
| 1000 | src, |
| 1001 | self.mri_head_t, |
| 1002 | info, |
| 1003 | bem, |
| 1004 | mindist, |
| 1005 | n_jobs, |
| 1006 | bem_extra="", |
| 1007 | trans="", |
| 1008 | info_extra="", |
| 1009 | meg=True, |
| 1010 | eeg=True, |
| 1011 | ignore_ref=False, |
| 1012 | ) |
| 1013 | self.fwd_data = _prep_field_computation( |
| 1014 | sensors=self.sensors, |
| 1015 | bem=self.bem, |
| 1016 | n_jobs=self.n_jobs, |
| 1017 | ) |
| 1018 | if self.bem["is_sphere"]: |
| 1019 | self.check_inside = _CheckInsideSphere(self.bem) |
| 1020 | else: |
| 1021 | self.check_inside = _CheckInside(_bem_find_surface(self.bem, "inner_skull")) |
| 1022 | |
| 1023 | def compute(self, src): |
| 1024 | src = _ensure_src(src).copy() |
| 1025 | src._transform_to("head", self.mri_head_t) |
| 1026 | _filter_source_spaces( |
| 1027 | self.check_inside, |
| 1028 | n_jobs=self.n_jobs, |
| 1029 | limit=self.mindist, |
| 1030 | mri_head_t=self.mri_head_t, |
| 1031 | src=src, |
| 1032 | ) |
| 1033 | rr = np.concatenate([s["rr"][s["vertno"]] for s in src]) |
| 1034 | if len(rr) < 1: |
| 1035 | raise RuntimeError( |
| 1036 | "No points left in source space after excluding " |
| 1037 | "points close to inner skull." |
| 1038 | ) |
no outgoing calls