Hi! Alex and Richard,
I think I kind of found a solution to process my flash images. The reason for the recon-all didn’t process my flash images might be they are multi-echo Flash sequence (MEF) data while FreeSurfer is not optimized for the processing of MEF data yet, but it did give two solutions here MEF - Free Surfer Wiki
and I used the second one from step1-3. and then use the mne.bem.make_flash_bem(subject, overwrite=False, show=True, subjects_dir=subjects_dir, flash_path=None, copy=False, verbose=None)
, it created the inner skull, outer skull and outer skin surface file, but something went wrong when plot the bem, here is output folder structure and the verbose:
Processing the flash MRI data to produce BEM meshes with the following parameters:
SUBJECTS_DIR = /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all
SUBJECT = sub-41-1
Result dir = /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/bem/flash
---- Registering flash 5 with MPRAGE ----
Registered flash 5 image is already there
---- Converting flash5 volume into COR format ----
Running subprocess: mri_convert /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/mri/flash/parameter_maps/flash5_reg.mgz /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/mri/flash5
mri_convert.bin /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/mri/flash/parameter_maps/flash5_reg.mgz /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/mri/flash5
$Id: mri_convert.c,v 1.226 2016/02/26 16:15:24 mreuter Exp $
reading from /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/mri/flash/parameter_maps/flash5_reg.mgz...
TR=2530.00, TE=0.00, TI=0.00, flip angle=0.00
i_ras = (-1, 9.84528e-11, 0)
j_ras = (0, 0, -1)
k_ras = (1.34378e-10, 1, 3.63798e-12)
changing data type from float to uchar (noscale = 0)...
MRIchangeType: Building histogram
writing to /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/mri/flash5...
---- Converting T1 volume into COR format ----
Running subprocess: mri_convert /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/mri/T1.mgz /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/mri/T1
mri_convert.bin /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/mri/T1.mgz /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/mri/T1
$Id: mri_convert.c,v 1.226 2016/02/26 16:15:24 mreuter Exp $
reading from /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/mri/T1.mgz...
TR=2530.00, TE=0.00, TI=0.00, flip angle=0.00
i_ras = (-1, 9.84528e-11, 0)
j_ras = (0, 0, -1)
k_ras = (1.34378e-10, 1, 3.63798e-12)
writing to /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/mri/T1...
---- Converting brain volume into COR format ----
Running subprocess: mri_convert /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/mri/brain.mgz /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/mri/brain
mri_convert.bin /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/mri/brain.mgz /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/mri/brain
$Id: mri_convert.c,v 1.226 2016/02/26 16:15:24 mreuter Exp $
reading from /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/mri/brain.mgz...
TR=2530.00, TE=0.00, TI=0.00, flip angle=0.00
i_ras = (-1, 9.84528e-11, 0)
j_ras = (0, 0, -1)
k_ras = (1.34378e-10, 1, 3.63798e-12)
writing to /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/mri/brain...
---- Creating the BEM surfaces ----
Running subprocess: mri_make_bem_surfaces sub-41-1
nvertices=2562, nfaces=5120
mri_strip_skull: triangle file /opt/software/freesurfer-Linux-centos6_x86_64-stable-pub-v6.0.0/freesurfer/lib/bem/ic4.tri read
mri_strip_skull: images /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/mri/brain/COR- read
xlo=-71.000000, xhi=70.000000, ylo=-84.000000, yhi=76.000000, zlo=-34.000000, zhi=103.000000
0: sval=84.06,sinval=84.06,soutval=84.06
10: sval=69.20,sinval=69.20,soutval=69.20
20: sval=30.72,sinval=30.72,soutval=30.72
30: sval=14.96,sinval=14.96,soutval=14.96
40: sval=13.41,sinval=13.41,soutval=13.41
50: sval=13.98,sinval=13.98,soutval=13.98
60: sval=14.17,sinval=14.17,soutval=14.17
70: sval=13.52,sinval=13.52,soutval=13.52
80: sval=13.51,sinval=13.51,soutval=13.51
90: sval=13.45,sinval=13.45,soutval=13.45
0: ad=0.520972, dmax=1.000000, nclip=0
1: ad=0.478029, dmax=1.000000, nclip=0
2: ad=0.488134, dmax=1.000000, nclip=0
3: ad=0.501572, dmax=1.000000, nclip=0
4: ad=0.490254, dmax=1.000000, nclip=0
5: ad=0.473747, dmax=1.000000, nclip=0
6: ad=0.483116, dmax=1.000000, nclip=0
7: ad=0.491565, dmax=1.000000, nclip=0
8: ad=0.488759, dmax=1.000000, nclip=0
9: ad=0.480460, dmax=1.000000, nclip=0
10: ad=0.497451, dmax=1.000000, nclip=0
11: ad=0.512828, dmax=1.000000, nclip=0
12: ad=0.508317, dmax=1.000000, nclip=0
13: ad=0.502193, dmax=1.000000, nclip=0
14: ad=0.526212, dmax=1.000000, nclip=0
15: ad=0.540898, dmax=1.000000, nclip=0
16: ad=0.524475, dmax=1.000000, nclip=0
17: ad=0.531350, dmax=1.000000, nclip=0
18: ad=0.563880, dmax=1.000000, nclip=0
19: ad=0.560443, dmax=1.000000, nclip=0
20: ad=0.543994, dmax=1.000000, nclip=0
21: ad=0.564087, dmax=1.000000, nclip=0
22: ad=0.594574, dmax=1.000000, nclip=0
23: ad=0.576289, dmax=1.000000, nclip=0
24: ad=0.564603, dmax=1.000000, nclip=0
25: ad=0.596765, dmax=1.000000, nclip=0
26: ad=0.614337, dmax=1.000000, nclip=0
27: ad=0.588984, dmax=1.000000, nclip=0
28: ad=0.588496, dmax=1.000000, nclip=0
29: ad=0.619174, dmax=1.000000, nclip=0
30: ad=0.627111, dmax=1.000000, nclip=0
31: ad=0.597021, dmax=1.000000, nclip=0
32: ad=0.610698, dmax=1.000000, nclip=0
33: ad=0.634660, dmax=1.000000, nclip=0
34: ad=0.632556, dmax=1.000000, nclip=0
35: ad=0.611053, dmax=1.000000, nclip=0
36: ad=0.631502, dmax=1.000000, nclip=0
37: ad=0.644499, dmax=1.000000, nclip=0
38: ad=0.634269, dmax=1.000000, nclip=0
39: ad=0.626527, dmax=1.000000, nclip=0
40: ad=0.644340, dmax=1.000000, nclip=0
41: ad=0.648393, dmax=1.000000, nclip=0
42: ad=0.634235, dmax=1.000000, nclip=0
43: ad=0.640851, dmax=1.000000, nclip=0
44: ad=0.653961, dmax=1.000000, nclip=0
45: ad=0.650836, dmax=1.000000, nclip=0
46: ad=0.636601, dmax=1.000000, nclip=0
47: ad=0.652522, dmax=1.000000, nclip=0
48: ad=0.660308, dmax=1.000000, nclip=0
49: ad=0.651074, dmax=1.000000, nclip=0
0: sval=29.99,sinval=29.99,soutval=29.99
10: sval=14.10,sinval=14.10,soutval=14.10
20: sval=13.84,sinval=13.84,soutval=13.84
30: sval=13.31,sinval=13.31,soutval=13.31
40: sval=13.14,sinval=13.14,soutval=13.14
50: sval=13.90,sinval=13.90,soutval=13.90
60: sval=13.67,sinval=13.67,soutval=13.67
70: sval=13.92,sinval=13.92,soutval=13.92
80: sval=13.24,sinval=13.24,soutval=13.24
90: sval=13.85,sinval=13.85,soutval=13.85
0: ad=0.407971, dmax=1.000000, nclip=0
1: ad=0.228519, dmax=1.000000, nclip=0
2: ad=0.100772, dmax=0.958336, nclip=0
3: ad=0.077238, dmax=0.762616, nclip=0
4: ad=0.054178, dmax=0.687747, nclip=0
5: ad=0.046000, dmax=0.597683, nclip=0
6: ad=0.039925, dmax=0.528905, nclip=0
7: ad=0.035881, dmax=0.477430, nclip=0
8: ad=0.032955, dmax=0.434377, nclip=0
9: ad=0.030635, dmax=0.396509, nclip=0
mri_strip_skull: triangle file /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/bem/inner_skull_tmp.tri written
nvertices=2562, nfaces=5120
mri_strip_skull: triangle file /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/bem/inner_skull_tmp.tri read
mri_strip_skull: images /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/mri/flash5/COR- read
0: sval=73.94,sinval=73.94,soutval=73.94
10: sval= 0.00,sinval= 0.00,soutval= 0.00
20: sval= 0.00,sinval= 0.00,soutval= 0.00
30: sval= 0.00,sinval= 0.00,soutval= 0.00
mri_strip_skull: triangle file /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/bem/inner_skull.tri written
mri_strip_skull: triangle file /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/bem/outer_skull.tri written
nvertices=2562, nfaces=5120
mri_strip_skull: triangle file /opt/software/freesurfer-Linux-centos6_x86_64-stable-pub-v6.0.0/freesurfer/lib/bem/ic4.tri read
mri_strip_skull: images /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/mri/T1/COR- read
xlo=-82.000000, xhi=79.000000, ylo=-94.000000, yhi=102.000000, zlo=-102.000000, zhi=103.000000
0: sval= 4.89,sinval= 4.89,soutval= 4.89
10: sval= 5.85,sinval= 5.85,soutval= 5.85
20: sval= 7.32,sinval= 7.32,soutval= 7.32
30: sval=10.84,sinval=10.84,soutval=10.84
40: sval=28.12,sinval=28.12,soutval=28.12
50: sval=45.18,sinval=45.18,soutval=45.18
60: sval=58.08,sinval=58.08,soutval=58.08
70: sval=65.99,sinval=65.99,soutval=65.99
80: sval=70.12,sinval=70.12,soutval=70.12
90: sval=71.47,sinval=71.47,soutval=71.47
100: sval=70.91,sinval=70.91,soutval=70.91
110: sval=71.80,sinval=71.80,soutval=71.80
120: sval=71.57,sinval=71.57,soutval=71.57
130: sval=71.73,sinval=71.73,soutval=71.73
140: sval=71.31,sinval=71.31,soutval=71.31
150: sval=71.03,sinval=71.03,soutval=71.03
160: sval=70.77,sinval=70.77,soutval=70.77
170: sval=70.74,sinval=70.74,soutval=70.74
180: sval=70.79,sinval=70.79,soutval=70.79
190: sval=70.80,sinval=70.80,soutval=70.80
0: sval=71.49,sinval=71.49,soutval=71.49
10: sval=66.57,sinval=66.57,soutval=66.57
20: sval=66.01,sinval=66.01,soutval=66.01
30: sval=65.63,sinval=65.63,soutval=65.63
40: sval=66.25,sinval=66.25,soutval=66.25
50: sval=66.34,sinval=66.34,soutval=66.34
60: sval=65.21,sinval=65.21,soutval=65.21
70: sval=65.40,sinval=65.40,soutval=65.40
80: sval=65.13,sinval=65.13,soutval=65.13
90: sval=65.33,sinval=65.33,soutval=65.33
mri_strip_skull: triangle file /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/bem/outer_skin.tri written
---- Converting the tri files into surf files ----
Loaded surface from /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/bem/flash/inner_skull.tri with 2562 nodes and 5120 triangles.
Node normals were not included in the source file.
Loaded surface from /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/bem/flash/outer_skull.tri with 2562 nodes and 5120 triangles.
Node normals were not included in the source file.
Loaded surface from /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/bem/flash/outer_skin.tri with 2562 nodes and 5120 triangles.
Node normals were not included in the source file.
---- Cleaning up ----
Deleted the T1 COR volume
Deleted the brain COR volume
Deleted the flash5 COR volume
---- Creating symbolic links ----
Symbolic links to .surf files created in bem folder
Thank you for waiting.
The BEM triangulations for this subject are now available at:
/brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/bem.
We hope the BEM meshes created will facilitate your MEG and EEG data analyses.
Using surface: /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/bem/inner_skull.surf
Using surface: /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/bem/outer_skull.surf
Using surface: /brain/guixue/zhouyu/proj01/mri/freesurfer/recon_all/sub-41-1/bem/outer_skin.surf
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Input In [21], in <cell line: 1>()
----> 1 mne.bem.make_flash_bem(subject, overwrite=False, show=True, subjects_dir=subjects_dir, flash_path=None, copy=False, verbose=None)
File <decorator-gen-76>:12, in make_flash_bem(subject, overwrite, show, subjects_dir, flash_path, copy, verbose)
File ~/.conda/envs/mne/lib/python3.9/site-packages/mne/bem.py:2003, in make_flash_bem(subject, overwrite, show, subjects_dir, flash_path, copy, verbose)
2001 # Show computed BEM surfaces
2002 if show:
-> 2003 plot_bem(subject=subject, subjects_dir=subjects_dir,
2004 orientation='coronal', slices=None, show=True)
File ~/.conda/envs/mne/lib/python3.9/site-packages/mne/viz/misc.py:600, in plot_bem(subject, subjects_dir, orientation, slices, brain_surfaces, src, show, show_indices, mri, show_orientation)
596 raise IOError('No surface files found. Surface files must end with '
597 'inner_skull.surf, outer_skull.surf or outer_skin.surf')
599 # Plot the contours
--> 600 fig = _plot_mri_contours(
601 mri_fname=mri_fname, surfaces=surfaces, src=src,
602 orientation=orientation, slices=slices, show=show,
603 show_indices=show_indices, show_orientation=show_orientation,
604 slices_as_subplots=True
605 )
606 return fig
File ~/.conda/envs/mne/lib/python3.9/site-packages/mne/viz/misc.py:434, in _plot_mri_contours(mri_fname, surfaces, src, orientation, slices, show, show_indices, show_orientation, width, slices_as_subplots)
432 with warnings.catch_warnings(record=True): # ignore contour warn
433 warnings.simplefilter('ignore')
--> 434 ax.tricontour(surf['rr'][:, x], surf['rr'][:, y],
435 surf['tris'], surf['rr'][:, axis],
436 levels=[sl], colors=color, linewidths=1.0,
437 zorder=1)
439 if len(sources):
440 in_slice = (sources[:, axis] >= lower) & (sources[:, axis] < upper)
File ~/.conda/envs/mne/lib/python3.9/site-packages/matplotlib/tri/tricontour.py:281, in tricontour(ax, *args, **kwargs)
258 """
259 %(_tricontour_doc)s
260
(...)
278 number of contour levels it will be repeated as necessary.
279 """
280 kwargs['filled'] = False
--> 281 return TriContourSet(ax, *args, **kwargs)
File ~/.conda/envs/mne/lib/python3.9/site-packages/matplotlib/tri/tricontour.py:29, in TriContourSet.__init__(self, ax, *args, **kwargs)
19 def __init__(self, ax, *args, **kwargs):
20 """
21 Draw triangular grid contour lines or filled regions,
22 depending on whether keyword arg 'filled' is False
(...)
27 are described in the docstring of `~.Axes.tricontour`.
28 """
---> 29 super().__init__(ax, *args, **kwargs)
File ~/.conda/envs/mne/lib/python3.9/site-packages/matplotlib/contour.py:812, in ContourSet.__init__(self, ax, levels, filled, linewidths, linestyles, hatches, alpha, origin, extent, cmap, colors, norm, vmin, vmax, extend, antialiased, nchunk, locator, transform, *args, **kwargs)
808 self.origin = mpl.rcParams['image.origin']
810 self._transform = transform
--> 812 kwargs = self._process_args(*args, **kwargs)
813 self._process_levels()
815 self._extend_min = self.extend in ['min', 'both']
File ~/.conda/envs/mne/lib/python3.9/site-packages/matplotlib/tri/tricontour.py:45, in TriContourSet._process_args(self, *args, **kwargs)
43 else:
44 from matplotlib import _tri
---> 45 tri, z = self._contour_args(args, kwargs)
46 C = _tri.TriContourGenerator(tri.get_cpp_triangulation(), z)
47 self._mins = [tri.x.min(), tri.y.min()]
File ~/.conda/envs/mne/lib/python3.9/site-packages/matplotlib/tri/tricontour.py:72, in TriContourSet._contour_args(self, args, kwargs)
69 raise ValueError('z must not contain masked points within the '
70 'triangulation')
71 if not np.isfinite(z_check).all():
---> 72 raise ValueError('z array must not contain non-finite values '
73 'within the triangulation')
75 z = np.ma.masked_invalid(z, copy=False)
76 self.zmax = float(z_check.max())
ValueError: z array must not contain non-finite values within the triangulation