(src, mri_resolution=True)
| 965 | |
| 966 | |
| 967 | def _get_src_data(src, mri_resolution=True): |
| 968 | # copy data to avoid conflicts |
| 969 | _validate_type( |
| 970 | src, |
| 971 | (_BaseSurfaceSourceEstimate, "path-like", SourceSpaces), |
| 972 | "src", |
| 973 | "source space or surface source estimate", |
| 974 | ) |
| 975 | if isinstance(src, _BaseSurfaceSourceEstimate): |
| 976 | src_t = [dict(vertno=src.vertices[0]), dict(vertno=src.vertices[1])] |
| 977 | src_kind = "surface" |
| 978 | src_subject = src.subject |
| 979 | else: |
| 980 | src_t = _ensure_src(src).copy() |
| 981 | src_kind = src_t.kind |
| 982 | src_subject = src_t._subject |
| 983 | del src |
| 984 | _check_option("src kind", src_kind, ("surface", "volume", "mixed")) |
| 985 | |
| 986 | # extract all relevant data for volume operations |
| 987 | src_data = dict() |
| 988 | if src_kind in ("volume", "mixed"): |
| 989 | use_src = src_t[-1] |
| 990 | shape = use_src["shape"] |
| 991 | start = 0 if src_kind == "volume" else 2 |
| 992 | for si, s in enumerate(src_t[start:], start): |
| 993 | if s.get("interpolator", None) is None: |
| 994 | if mri_resolution: |
| 995 | raise RuntimeError( |
| 996 | f"MRI interpolator not present in src[{si}], " |
| 997 | "cannot use mri_resolution=True" |
| 998 | ) |
| 999 | interpolator = None |
| 1000 | break |
| 1001 | else: |
| 1002 | interpolator = sum((s["interpolator"] for s in src_t[start:]), 0.0) |
| 1003 | inuses = [s["inuse"] for s in src_t[start:]] |
| 1004 | src_data.update( |
| 1005 | { |
| 1006 | "src_shape": (shape[2], shape[1], shape[0]), # SAR |
| 1007 | "src_affine_vox": use_src["vox_mri_t"]["trans"], |
| 1008 | "src_affine_src": use_src["src_mri_t"]["trans"], |
| 1009 | "src_affine_ras": use_src["mri_ras_t"]["trans"], |
| 1010 | "src_shape_full": ( # SAR |
| 1011 | use_src["mri_height"], |
| 1012 | use_src["mri_depth"], |
| 1013 | use_src["mri_width"], |
| 1014 | ), |
| 1015 | "interpolator": interpolator, |
| 1016 | "inuse": inuses, |
| 1017 | "to_vox_map": None, |
| 1018 | } |
| 1019 | ) |
| 1020 | if src_kind in ("surface", "mixed"): |
| 1021 | src_data.update(vertices_from=[s["vertno"].copy() for s in src_t[:2]]) |
| 1022 | |
| 1023 | # delete copy |
| 1024 | return src_data, src_kind, src_subject |
no test coverage detected