|
1 | 1 | clc
|
2 | 2 | clear
|
3 | 3 |
|
4 |
| -% fname = cell(3,1); |
5 |
| -fname{1}{1} = '../../outputs/gre_m1_0.dat'; |
6 |
| -fname{1}{2} = '../../outputs/gre_m1_1.dat'; |
7 |
| - |
8 |
| -fname{2}{1} = '../../outputs/se_m1_0.dat'; |
9 |
| -fname{2}{2} = '../../outputs/se_m1_1.dat'; |
10 |
| - |
11 |
| -fname{3}{1} = '../../outputs/ssfp_m1_0.dat'; |
12 |
| -fname{3}{2} = '../../outputs/ssfp_m1_1.dat'; |
13 |
| - |
14 |
| -% fname{4}{1} = '../../outputs/grase_m1_0.dat'; |
15 |
| -% fname{4}{2} = '../../outputs/grase_m1_1.dat'; |
16 |
| - |
| 4 | +file_fieldmap = '../../field_maps/fieldmap_0.dat'; |
| 5 | + |
| 6 | +file_m1{1}{1} = '../../outputs/gre_m1_fieldmap_0.dat'; |
| 7 | +file_m1{1}{2} = '../../outputs/gre_m1_fieldmap_1.dat'; |
| 8 | +file_m1{2}{1} = '../../outputs/se_m1_fieldmap_0.dat'; |
| 9 | +file_m1{2}{2} = '../../outputs/se_m1_fieldmap_1.dat'; |
| 10 | +file_m1{3}{1} = '../../outputs/ssfp_m1_fieldmap_0.dat'; |
| 11 | +file_m1{3}{2} = '../../outputs/ssfp_m1_fieldmap_1.dat'; |
| 12 | + |
| 13 | +file_xyz1{1}{1} = '../../outputs/gre_xyz1_fieldmap_0.dat'; |
| 14 | +file_xyz1{1}{2} = '../../outputs/gre_xyz1_fieldmap_1.dat'; |
| 15 | +file_xyz1{2}{1} = '../../outputs/se_xyz1_fieldmap_0.dat'; |
| 16 | +file_xyz1{2}{2} = '../../outputs/se_xyz1_fieldmap_1.dat'; |
| 17 | +file_xyz1{3}{1} = '../../outputs/ssfp_xyz1_fieldmap_0.dat'; |
| 18 | +file_xyz1{3}{2} = '../../outputs/ssfp_xyz1_fieldmap_1.dat'; |
| 19 | + |
| 20 | +dim_xyz = 1; |
17 | 21 | dim_echo = 2;
|
18 | 22 | dim_spin = 3;
|
19 | 23 | dim_vessel_size = 4;
|
20 | 24 | rad_ref_um = 53.367;
|
21 | 25 |
|
22 |
| -TR = 0.2; |
23 |
| -EcoSpc = 0.005; |
| 26 | +tissue_type = 0; % 0 = extra-vascular, 1 = intra-vascular, [0,1] = combined |
| 27 | +[~, mask, fov] = read_fieldmap(file_fieldmap); |
24 | 28 |
|
25 |
| -signal_magnitude = cell(numel(fname), 1); |
26 |
| -for seq = 1:numel(fname) |
27 |
| - spins_xy = []; |
28 |
| - for i=1:numel(fname{seq}) |
29 |
| - [m_xyz, dims, scales] = read_spinwalk(fname{seq}{i}); |
| 29 | +signal_magnitude = cell(numel(file_m1), numel(file_m1{1})); |
| 30 | +for seq = 1:numel(file_m1) |
| 31 | + for i=1:numel(file_m1{seq}) |
| 32 | + [m1, dims, scales] = read_spinwalk(file_m1{seq}{i}); |
| 33 | + [xyz1, ~, ~] = read_spinwalk(file_xyz1{seq}{i}); |
30 | 34 | if dims(4) ~= numel(scales)
|
31 | 35 | warning('Header info is confusing here?')
|
32 | 36 | end
|
33 |
| - spins_xy = cat(ndims(m_xyz)+1, spins_xy, m_xyz); |
| 37 | + |
| 38 | + m1_t = zeros(numel(scales), 1); |
| 39 | + for s=1:numel(scales) |
| 40 | + m1_f = filter_spinwalk(m1(:,end,:,s), xyz1(:,end,:,s), tissue_type, mask, fov * scales(s)); |
| 41 | + m1_t(s) = abs(complex(sum(m1_f(1,:)), sum(m1_f(2,:)))); |
| 42 | + end |
| 43 | + signal_magnitude{seq, i} = m1_t; |
34 | 44 | end
|
35 |
| - |
36 |
| - spins_xy = complex(sum(spins_xy(1,:,:,:,:), dim_spin), sum(spins_xy(2,:,:,:,:), dim_spin) ); |
37 |
| - signal_magnitude{seq} = abs(spins_xy); |
38 | 45 | end
|
39 | 46 |
|
40 | 47 | clf
|
41 | 48 | vessel_radius = rad_ref_um * scales;
|
42 |
| -for seq = 1:numel(fname) |
43 |
| -% if seq ~= numel(fname) |
44 |
| -% subplot(2,1,1); |
45 |
| - relative_signal = 100 * (1 - signal_magnitude{seq}(:,:,:,:,1)./ signal_magnitude{seq}(:,:,:,:,2)); |
46 |
| - relative_signal = squeeze(relative_signal); |
47 |
| - h = semilogx(vessel_radius, relative_signal); xlabel('Vessel radius (um)'); ylabel('BOLD Signal %'); |
48 |
| - hold on; |
49 |
| - ylim([0, 7]) |
50 |
| -% else |
| 49 | +for seq = 1:numel(file_m1) |
| 50 | + relative_signal = 100 * (1 - signal_magnitude{seq, 1} ./ signal_magnitude{seq, 2}); |
| 51 | + h = semilogx(vessel_radius, relative_signal); xlabel('Vessel radius (um)'); ylabel('BOLD Signal %'); |
| 52 | + hold on; |
| 53 | + ylim([0, 7]) |
| 54 | +end |
| 55 | +legend('GRE', 'SE', 'SSFP') |
| 56 | + |
| 57 | + |
| 58 | +%% grase sequence |
| 59 | + |
| 60 | +% file_m1{4}{1} = '../../outputs/grase_m1_0.dat'; |
| 61 | +% file_m1{4}{2} = '../../outputs/grase_m1_1.dat'; |
| 62 | +TR = 0.2; |
| 63 | +EcoSpc = 0.005; |
51 | 64 | % subplot(2,1,2)
|
52 | 65 | % relative_signal = signal_magnitude{seq}(:,:,:,:,2) - signal_magnitude{seq}(:,:,:,:,1);
|
53 | 66 | % relative_signal = 100 * (1 - signal_magnitude{seq}(:,:,:,:,1)./ signal_magnitude{seq}(:,:,:,:,2));
|
|
67 | 80 | % % title('BOLD Signal')
|
68 | 81 | % colormap(inferno);
|
69 | 82 | % colorbar
|
70 |
| -% end |
71 |
| -end |
72 |
| -legend('GRE', 'SE', 'SSFP') |
73 | 83 |
|
74 | 84 | %% stimulated echo
|
75 | 85 | clc
|
76 | 86 | % clear
|
77 |
| -fname{1} = '/DATA/aaghaeifar/Nextcloud/Projects/microvascular/outputs/ste_m1_0.dat'; |
78 |
| -fname{2} = '/DATA/aaghaeifar/Nextcloud/Projects/microvascular/outputs/ste_m1_1.dat'; |
| 87 | +file_m1{1} = '/DATA/aaghaeifar/Nextcloud/Projects/microvascular/outputs/ste_m1_0.dat'; |
| 88 | +file_m1{2} = '/DATA/aaghaeifar/Nextcloud/Projects/microvascular/outputs/ste_m1_1.dat'; |
79 | 89 |
|
80 | 90 | dim_echo = 2;
|
81 | 91 | dim_spin = 3;
|
|
84 | 94 |
|
85 | 95 |
|
86 | 96 | spins_xyz = [];
|
87 |
| -for i=1:numel(fname) |
88 |
| - [m_xyz, dims, scales] = read_spinwalk(fname{i}); |
| 97 | +for i=1:numel(file_m1) |
| 98 | + [m_xyz, dims, scales] = read_spinwalk(file_m1{i}); |
89 | 99 | spins_xyz = cat(ndims(m_xyz)+1, spins_xyz, m_xyz);
|
90 | 100 | end
|
91 | 101 | vessel_radius = rad_ref_um * scales;
|
|
124 | 134 | hold off
|
125 | 135 | legend('STE Rest', 'STE Act', 'SE Rest', 'SE Act')
|
126 | 136 |
|
| 137 | +%% random-walk trajectory |
| 138 | +clear |
| 139 | +clc; |
| 140 | +filename = '../../outputs/gre_trajectory_xyz1_fieldmap_0.dat'; |
| 141 | +[xyz_all, dims, hdr_extra] = read_spinwalk(filename); |
| 142 | +size(xyz_all) |
| 143 | +xyz_all = xyz_all * 1e6; |
| 144 | +n_spins = size(xyz_all, 3); |
| 145 | +for s=round(linspace(1, n_spins, 10)) |
| 146 | + xyz = xyz_all(:,:,s,2); |
| 147 | + plot3(xyz(1,:), xyz(2,:), xyz(3,:)) |
| 148 | + hold on; |
| 149 | +end |
| 150 | +hold off |
127 | 151 |
|
128 |
| - |
129 |
| - |
130 |
| - |
| 152 | +% nonzeros(xyz_all) |
0 commit comments