Axon Diameter Mapping From Myelin Water Diffusion MRI.
The 16 matches
- [1] § Methods › Diffusion Simulations in Cylindrical Shells With Caliber Variations and Undulations ↔ demo_4_bead_undulation_RD_AD.m, lines 18–156 · score 0.91 · undulation wavelength, bead width, undulation amplitude, axon skeleton, caliber variations, axon length
- [2] § Methods › Diffusion Simulations in Cylindrical Shells With Caliber Variations and Undulations ↔ demo_5_bead_undulation_ADM.m, lines 65–107 · score 0.91 · undulation wavelength, bead width, undulation amplitude, axon skeleton, caliber variations, axon length
- [3] § Results › Diffusion Simulations of ADM ↔ demo_3_cylinder_shell_ADM.m, lines 493–588 · score 0.74 · log linear, Gamma distribution, axon diameter, inner radius, histology, radii
- [4] § Methods › Diffusion Simulations of RD: Two-Dimensional Ring ↔ demo_6_GPA.m, lines 12–102 · score 0.70 · zero thickness, layer thickness, finite thickness, cylindrical surface, cylindrical shell, myelin layer
- [5] § Methods › Diffusion Simulations of ADM: Three-Dimensional Shells ↔ demo_3_cylinder_shell_ADM.m, lines 175–246 · score 0.70 · volume weighted, axial diffusivity, narrow pulse solution, gradient directions, wide pulse, spherical
- [6] § Methods › Diffusion Simulations of ADM: Three-Dimensional Shells ↔ demo_5_bead_undulation_ADM.m, lines 289–360 · score 0.70 · volume weighted, axial diffusivity, narrow pulse solution, gradient directions, wide pulse, spherical
- [7] § Methods › Diffusion Simulations of ADM: Three-Dimensional Shells ↔ demo_3_cylinder_shell_ADM.m, lines 493–588 · score 0.67 · log linear, inner diameter, myelin layers, histological, ratio, outer
- [8] § Methods › Diffusion Simulations of ADM: Three-Dimensional Shells ↔ demo_3_cylinder_shell_ADM.m, lines 175–246 · score 0.66 · Rician noise floor, noise ratio, SNR, signals, ADM, Shells
- [9] § Methods › Diffusion Simulations of ADM: Three-Dimensional Shells ↔ demo_5_bead_undulation_ADM.m, lines 289–360 · score 0.66 · Rician noise floor, noise ratio, SNR, signals, ADM, Shells
- [10] § Methods › Diffusion Simulations in Cylindrical Shells With Caliber Variations and Undulations ↔ lib/rms/main_PGSE_stringbead.cu, lines 484–524 · score 0.65 · periodic boundary, rejection sampling, walkers, membranes, layer
- [11] § Methods › Diffusion Simulations in Cylindrical Shells With Caliber Variations and Undulations ↔ demo_4_bead_undulation_RD_AD.m, lines 18–156 · score 0.64 · caliber variations, random walker, intrinsic diffusivity, frustums, undulations, CUDA
- [12] § Methods › Diffusion Simulations of RD: One-Dimensional Circle ↔ demo_1_cylindrical_surface_RD.m, lines 9–45 · score 0.60 · Monte Carlo simulations, cylindrical surface, intrinsic diffusivity, walkers, radius
- [13] § Results › Diffusion Simulations of RD ↔ demo_6_GPA.m, lines 12–102 · score 0.59 · radius ratio, finite thickness, cylindrical surface, cylindrical shell, narrow pulse, wide pulse
- [14] § Methods › Diffusion Simulations of RD: Two-Dimensional Ring ↔ demo_1_cylindrical_surface_RD.m, lines 9–45 · score 0.58 · Monte Carlo simulations, random walker, intrinsic diffusivity, cylindrical, radius
- [15] § Methods › Diffusion Simulations of ADM: Three-Dimensional Shells ↔ demo_3_cylinder_shell_ADM.m, lines 18–108 · score 0.56 · permeable membranes, random walkers, intrinsic diffusivity, myelin layer, ADM, Shells
- [16] § Methods › Diffusion Simulations of RD: Two-Dimensional Ring ↔ demo_2_cylinder_shell_RD.m, lines 18–105 · score 0.56 · random walker, inner radius, intrinsic diffusivity, myelin layer, CUDA, thickness
Paper
Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC
The paper is loaded when this pane is shown.
The authors' code
MATLAB · 590 lines · 18 KB · MIT · 5 matches
- % ********** Setup the directory on your computer **********
- % demo 3: MC simulations of SMT in coaxial cylindrical shells of finite
- % thickness, permeable membrane
- clear
- restoredefaultpath
- filePath = matlab.desktop.editor.getActiveFilename;
- root0 = fileparts(filePath);
- addpath(genpath(fullfile(root0,'lib')));
- root = fullfile(root0,'data');
- root_cuda = fullfile(root0,'lib','rms');
- % project name
- projname = 'coaxial_cyliner_shell_ADM';
- mkdir(fullfile(root,projname));
- %% Generate packing, permeable membrane
- % inner radius, um
- r = 0.1:0.1:5;
- % thickness of each myelin layer, um
- % myelin layer thickness lm should be larger than the step size sqrt(4*D0*dt)
- lm = 12/1e3;
- % # myelin layers
- C0 = 0.35/lm;
- C1 = 0.006/lm;
- C2 = 0.024/lm;
- Nm = round(C0 + C1*2*r + C2*log(2*r));
- % permeability, um/ms
- kappa = 6.7e-3;
- % pulse width, ms
- Td = 6;
- % diffusion time, ms
- TD = 13;
- % b-value, ms/um2
- bval = [50 350 800 1500 2400 3450 4750 6000]/1e3;
- % gradient direction, 64 directions per b-shell
- % requirement: MRtrix3
- bvec = dirgen(64);
- % simulation parameters
- dt = 1e-6; % time step, ms
- TN = ceil(max(TD+Td)/dt)+100; % # steps
- NPar = 1e4; % # random walkers
- D0 = 0.8; % intrinsic diffusivity, um2/ms
- threadpb = 256; % thread per block for CUDA
- seed = 0;
- for i = 1:numel(r)
- seed = seed + 1;
- target = fullfile(root,projname,sprintf('CoCyl_%04u',seed));
- mkdir(target);
- % field of view, um
- res = 2*(r(i)+Nm(i)*lm)*1.05;
- % save simulation parameters
- fileID = fopen(fullfile(target,'simParamInput.txt'),'w');
- fprintf(fileID,sprintf('%g\n%u\n%u\n%g\n%g\n%u\n%g\n%g\n%u\n%g\n',...
- dt, TN, NPar, D0, kappa, threadpb, ...
- r(i)/res, lm/res, Nm(i), res));
- fclose(fileID);
- % save diffusion time and pulse width
- NDelta = numel(TD);
- DELdel = zeros(NDelta,2);
- for iii = 1:numel(TD)
- DELdel(iii,:) = [TD(iii), Td(iii)];
- end
- DELdel = DELdel.';
- DELdel = DELdel(:);
- fid = fopen(fullfile(target,'gradient_NDelta.txt'),'w');
- fprintf(fid,sprintf('%u\n',NDelta));
- fclose(fid);
- fid = fopen(fullfile(target,'gradient_DELdel.txt'),'w');
- fprintf(fid,sprintf('%.8f\n',DELdel));
- fclose(fid);
- % save b-table
- ig = 0;
- btab = zeros(numel(bval)*size(bvec,1),4);
- for jjj = 1:numel(bval)
- bvalj = bval(jjj);
- for kkk = 1:size(bvec,1)
- ig = ig+1;
- bveck = bvec(kkk,:);
- btab(ig,:) = [bvalj bveck];
- end
- end
- btab = btab.';
- btab = btab(:);
- fid = fopen(fullfile(target,'gradient_Nbtab.txt'),'w');
- fprintf(fid,sprintf('%u\n',numel(bval)*size(bvec,1)));
- fclose(fid);
- fid = fopen(fullfile(target,'gradient_btab.txt'),'w');
- fprintf(fid,sprintf('%.8f\n',btab));
- fclose(fid);
- end
- %% Create a shell script to run the codes
- fileID = fopen(fullfile(root,projname,'job.sh'),'w');
- fprintf(fileID,'#!/bin/bash\n');
- for j = 1:50
- target = fullfile(root,projname,sprintf('CoCyl_%04u',j));
- fprintf(fileID,sprintf('cd %s\n',target));
- fprintf(fileID,sprintf('cp -a %s .\n',fullfile(root_cuda,'main_PGSE_perm_cuda')));
- fprintf(fileID,'./main_PGSE_perm_cuda\n');
- end
- fclose(fileID);
- % Open the terminal window in the project folder and run "sh job.sh"
- % You may need to open the terminal in the root_cuda folder and compile the
- % CUDA code using "nvcc main_PGSE_perm.cu -o main_PGSE_perm_cuda"
- %% Plot simulation results
- Nr = 50; % # cylinder radius
- Nbval = 8; % # b-value
- Nbvec = 64; % # gradient direction
- % direction dependent diffusion signals
- S_dir = zeros(Nr, Nbval, Nbvec);
- for i = 1:Nr
- rms = simul3DcoCyl_cuda_pgse_bvec(fullfile(root,projname,sprintf('CoCyl_%04u',i)));
- sigi = rms.sig;
- bval = unique(rms.bval);
- sigi = reshape(sigi,Nbvec,[]);
- S_dir(i,:,:) = sigi.';
- end
- % effective radius of the n-th order, um
- % n = 0, <r> mean radius
- % n = 1, <r^2>/<r> volume weighted averaged radius
- % n = 2, (<r^3>/<r>)^(1/2) effective radius for narrow-pulse
- % n = 4, (<r^5>/<r>)^(1/4) effective radius for wide-pulse
- n = [0 1 2 4];
- r_mom = zeros(Nr, numel(n));
- vol = zeros(Nr, 1); % ~volume, um2
- Nm = zeros(Nr, 1); % # myelin layer
- for i = 1:Nr
- rms = simul3DcoCyl_cuda_pgse_bvec(fullfile(root,projname,sprintf('CoCyl_%04u',i)));
- % cylindrical shell radius at the middle thickness, um
- r = rms.rCir + (1:rms.Nm - 1/2)*rms.lm;
- % inner radius, um
- ri = rms.rCir;
- % outer radius, um
- ro = rms.rCir + rms.Nm*rms.lm;
- vol(i) = pi*(ro^2 - ri^2);
- Nm(i) = rms.Nm;
- for k = 1:numel(n)
- ni = n(k);
- if ni==0
- r_mom(i,k) = sum(r);
- else
- r_mom(i,k) = sum(r.^(ni+1));
- end
- end
- end
- %% MyeCaliber
- % Gamma distribution for axon radius
- ri_mean = (0.25:0.05:1).'; % mean, um
- ri_var = (ri_mean/2).^2; % variance, um2
- b = ri_var./ri_mean; % scale parameter, um
- a = ri_mean./b; % shape parameter
- x = (0.1:0.1:5).'; % sampled axon radius, um
- Nbval = 8; % # b-value
- Nbvec = 64; % # gradient direction per b-shell
- SNR = [Inf 50 20 10]; % signal-to-noise ratio for Rician noise
- % fitted parameters: radius, axial diffusivity, their standard deviations
- r_fit = zeros(numel(ri_mean), numel(SNR), 2);
- D_fit = zeros(numel(ri_mean), numel(SNR), 2);
- r_std = zeros(numel(ri_mean), numel(SNR), 2);
- D_std = zeros(numel(ri_mean), numel(SNR), 2);
- % spherical mean signal with noise for the fitting
- S_fit = zeros(numel(ri_mean), numel(SNR), Nbval);
- % model selection
- % narrow: narrow-pulse solution (Canales-Rodriguez et al. 2005)
- % wide: wide-pulse solution
- pulsetype = {'narrow', 'wide'};
- tic;
- for j = 1:numel(ri_mean)
- % direction-dependent diffusion signals from axons with radii in Gamma
- % distribution
- Ni = gampdf(x, a(j), b(j));
- Si = sum(Ni.*vol.*S_dir)/sum(Ni.*vol);
- Si = squeeze(Si);
- for i = 1:numel(SNR)
- % apply Rician noise to direction-dependent diffusion signals
- sigma = 1/SNR(i);
- Sj = abs( Si + sigma*randn(Nbval, Nbvec) + 1j*sigma*randn(Nbval, Nbvec) );
- % calculate spherical mean signal
- Sj = mean(Sj, 2);
- % Rician noise floor correction
- Sj = sqrt(max(Sj.^2-sigma^2, 0));
- % model fitting
- S_fit(j,i,:) = Sj;
- for k = 1:numel(pulsetype)
- [r_fit(j,i,k), D_fit(j,i,k), r_std(j,i,k), D_std(j,i,k)] = myelinADMfit(Sj, bval, rms.del, rms.Del, pulsetype{k});
- end
- end
- end
- toc;
- % effective radius of the n-th order with axon radius distribution, um
- % n = 0, <r> mean radius
- % n = 1, <r^2>/<r> volume weighted averaged radius
- % n = 2, (<r^3>/<r>)^(1/2) effective radius for narrow-pulse
- % n = 4, (<r^5>/<r>)^(1/4) effective radius for wide-pulse
- n = [0 1 2 4];
- r_eff = zeros(numel(ri_mean), numel(n));
- for j = 1:numel(ri_mean)
- Ni = gampdf(x, a(j), b(j));
- for i = 1:numel(n)
- ni = n(i);
- if ni==0
- r_eff(j,i) = sum(Ni.*r_mom(:,i))/sum(Ni.*Nm);
- else
- I = find(n==0);
- r_eff(j,i) = ( sum(Ni.*r_mom(:,i))/sum(Ni.*r_mom(:,I)) ).^(1/ni);
- end
- end
- end
- %% Canales-Rodriguez et al. 2025, full solution fitting
- % build training data for random forest regression
- rCR = 0.01:0.01:3; % axon radius, um
- DCR = 0.01:0.01:1.6; % intrinsic diffusivity, um2/ms
- % normalized spherical mean signal
- SCR = zeros(numel(bval),numel(rCR),numel(DCR));
- option = 'fast';
- tic;
- if strcmpi(option, 'slow')
- for i = 1:numel(bval)
- SCR(i,:,:) = myelinADMmodelCR(rCR(:), bval(i), rms.del, rms.Del, DCR(:).','slow');
- end
- else
- for i = 1:numel(bval)
- for j = 1:numel(DCR)
- SCR(i,:,j) = myelinADMmodelCR(rCR(:), bval(i), rms.del, rms.Del, DCR(j),'fast');
- end
- end
- end
- toc;
- % random forest regression for each SNR
- X = permute(SCR, [2, 3, 1]);
- X = reshape(X, [], 8);
- Y = repmat(rCR(:),numel(DCR),1);
- r_fit_CR = zeros(numel(ri_mean), numel(SNR));
- tic;
- for i = 1:numel(SNR)
- % apply Rician noise
- sigma = 1/SNR(i);
- Xi = abs( X + sigma*randn([size(X), Nbvec]) + 1j*sigma*randn([size(X), Nbvec]) );
- Xi = mean(Xi, 3);
- % Rician noise floor correction
- Xi = sqrt(max(Xi.^2-sigma^2, 0));
- % model fitting
- Mdl = TreeBagger(10,Xi,Y,'Method','regression','OOBPrediction','On');
- for j = 1:numel(ri_mean)
- r_fit_CR(j,i) = predict(Mdl,squeeze(S_fit(j,i,:)).');
- end
- end
- toc;
- %% Plot normalized spherical mean signal
- figure('unit','inch','position',[0 0 18 4]);
- cmap = colormap('lines');
- mk = {'o','v','s'};
- for i = 1:numel(SNR)
- subplot(1,numel(SNR),i)
- clear h lgtxt
- hold on;
- list = [1 numel(ri_mean)];
- for j = 1:numel(list)
- Si = S_fit(list(j),i,:);
- Si = squeeze(Si);
- h(j) = plot(1./sqrt(bval), Si, mk{j}, 'markersize', 6, 'linewidth', 1, 'color', cmap(j,:));
- bval_plot = 1./linspace(0.01, 5, 1000).^2;
- S_WP = myelinADMmodel(r_fit(list(j),i,2), bval_plot, rms.del, rms.Del, D_fit(list(j),i,2), 'wide');
- plot(1./sqrt(bval_plot), S_WP, '-' , 'linewidth', 1, 'color', cmap(j,:));
- lgtxt{j} = sprintf('$2\\bar{r}_i=$%.1f $\\mu$m', ri_mean(list(j))*2);
- end
- h(3) = plot(-1, -1, 'k-', 'linewidth', 1);
- lgtxt{3} = 'fitting';
- xlim([0 2]);
- ylim([0 1]);
- pbaspect([1 1 1]);
- xlabel('$1/\sqrt{b}$, $\mu$m$\cdot$ms$^{-1/2}$', 'interpreter', 'latex', 'fontsize', 20)
- if i==1, ylabel('$\bar{S}(b)$', 'interpreter', 'latex', 'fontsize', 20); end
- title(sprintf('SNR=%u',SNR(i)),'interpreter','latex','fontsize',20)
- box on; grid on;
- legend(h, lgtxt,'interpreter','latex','fontsize',16,'box','off','location','southeast')
- end
- %% Resolution limit
- D0 = rms.Din; % intrinsic diffusivity, um2/ms
- Da = rms.Din; % axial diffusivity, um2/ms
- za = 1.64; % z-score at alpha = 0.05
- Nav = 64; % # gradient direction per b-shell
- r_min_NP = zeros(numel(SNR), 1)-1; % resolution limit of narrow-pulse
- r_min_WP = zeros(numel(SNR), 1)-1; % resolution limit of wide-pulse
- for j = 1:numel(SNR)
- r_min_NP(j) = myelinADMrmin(max(bval), rms.del, rms.Del, D0, Da, za, SNR(j), Nav, 'narrow');
- r_min_WP(j) = myelinADMrmin(max(bval), rms.del, rms.Del, D0, Da, za, SNR(j), Nav, 'wide');
- end
- %% Plot figure, Canales-Rodriguez et al. 2005, narrow pulse solution
- figure('unit','inch','position',[0 0 18 4]);
- cmap = colormap('lines');
- mk = {'o','v','s','^','d'};
- clear h hx lgtxt
- for i = 1:numel(n)
- subplot(1,4,i)
- hold on;
- for j = numel(SNR):-1:1
- plotstd(2*r_eff(:,i), 2*r_fit(:,j,1), 2*r_std(:,j,1), cmap(j,:), 0.3, 'area');
- end
- end
- for i = 1:numel(n)
- subplot(1,4,i)
- hold on;
- for j = 1:numel(SNR)
- if j==3
- h(j) = plot(r_eff(:,i)*2, r_fit(:,j,1)*2, mk{j}, 'color', cmap(j,:)*0.85,'linewidth',1);
- else
- h(j) = plot(r_eff(:,i)*2, r_fit(:,j,1)*2, mk{j}, 'color', cmap(j,:),'linewidth',1);
- end
- if ~isinf(SNR(j))
- if j==3
- hx = xline(r_min_NP(j)*2); set(hx, 'color', cmap(j,:)*0.85, 'linestyle', '--','linewidth',1);
- else
- hx = xline(r_min_NP(j)*2); set(hx, 'color', cmap(j,:), 'linestyle', '--','linewidth',1);
- end
- end
- lgtxt{j} = sprintf('SNR=%u', SNR(j));
- end
- xlim([0 4]);
- ylim([0 4]);
- yticks(0:4);
- hr = refline(1); set(hr, 'color', 'k');
- hl = plot(-1, -1, 'k--', 'linewidth', 1); lgtxt{numel(SNR)+1} = '2$r_{\rm min,NP}$';
- hg = legend([h hl], lgtxt, 'interpreter', 'latex', 'location', 'northwest', 'box', 'on', 'fontsize', 12);
- box on;
- pbaspect([1 1 1])
- switch n(i)
- case 0
- xlabel('2$\langle r\rangle$, $\mu$m', 'interpreter', 'latex', 'fontsize',20);
- case 1
- xlabel('2$r_{\rm vwa}$, $\mu$m', 'interpreter', 'latex', 'fontsize',20);
- case 2
- xlabel('2$r_{\rm eff, NP}$, $\mu$m', 'interpreter', 'latex', 'fontsize',20);
- case 4
- xlabel('2$r_{\rm eff, WP}$, $\mu$m', 'interpreter', 'latex', 'fontsize',20);
- end
- if i==1
- ylabel('fitted 2$r$, $\mu$m', 'interpreter', 'latex', 'fontsize',20);
- end
- end
- %% Plot figure, wide-pulse solution
- figure('unit','inch','position',[0 0 18 4]);
- cmap = colormap('lines');
- mk = {'o','v','s','^','d'};
- clear h hx lgtxt
- for i = 1:numel(n)
- subplot(1,4,i)
- hold on;
- for j = numel(SNR):-1:1
- plotstd(2*r_eff(:,i), 2*r_fit(:,j,2), 2*r_std(:,j,2), cmap(j,:), 0.3, 'area');
- end
- end
- for i = 1:numel(n)
- subplot(1,4,i)
- hold on;
- for j = 1:numel(SNR)
- if j==3
- h(j) = plot(2*r_eff(:,i), 2*r_fit(:,j,2), mk{j}, 'color', cmap(j,:)*0.85,'linewidth',1);
- else
- h(j) = plot(2*r_eff(:,i), 2*r_fit(:,j,2), mk{j}, 'color', cmap(j,:),'linewidth',1);
- end
- if ~isinf(SNR(j))
- if j==3
- hx = xline(2*r_min_WP(j)); set(hx, 'color', cmap(j,:)*0.85, 'linestyle', '--','linewidth',1);
- else
- hx = xline(2*r_min_WP(j)); set(hx, 'color', cmap(j,:), 'linestyle', '--','linewidth',1);
- end
- end
- lgtxt{j} = sprintf('SNR=%u', SNR(j));
- end
- xlim([0 4]);
- ylim([0 4]);
- yticks(0:4);
- hr = refline(1); set(hr, 'color', 'k');
- hl = plot(-1, -1, 'k--', 'linewidth', 1); lgtxt{numel(SNR)+1} = '2$r_{\rm min,WP}$';
- if i==1
- hg = legend([h hl], lgtxt, 'interpreter', 'latex', 'location', 'southeast', 'box', 'on', 'fontsize', 12);
- else
- hg = legend([h hl], lgtxt, 'interpreter', 'latex', 'location', 'northwest', 'box', 'on', 'fontsize', 12);
- end
- box on;
- pbaspect([1 1 1])
- switch n(i)
- case 0
- xlabel('2$\langle r\rangle$, $\mu$m', 'interpreter', 'latex', 'fontsize',20);
- case 1
- xlabel('2$r_{\rm vwa}$, $\mu$m', 'interpreter', 'latex', 'fontsize',20);
- case 2
- xlabel('2$r_{\rm eff, NP}$, $\mu$m', 'interpreter', 'latex', 'fontsize',20);
- case 4
- xlabel('2$r_{\rm eff, WP}$, $\mu$m', 'interpreter', 'latex', 'fontsize',20);
- end
- if i==1
- ylabel('fitted 2$r$, $\mu$m', 'interpreter', 'latex', 'fontsize',20);
- end
- end
- %% Plot figure, Canales Rodriguez et al. 2005, narrow-pulse full solution
- figure('unit','inch','position',[0 0 18 4]);
- cmap = colormap('lines');
- mk = {'o','v','s','^','d'};
- clear h hx lgtxt
- for i = 1:numel(n)
- subplot(1,4,i)
- hold on;
- for j = 1:numel(SNR)
- h(j) = plot(2*r_eff(:,i), 2*r_fit_CR(:,j), mk{j}, 'color', cmap(j,:),'linewidth',1);
- if ~isinf(SNR(j))
- if j==3
- hx = xline(2*r_min_NP(j)); set(hx, 'color', cmap(j,:)*0.85, 'linestyle', '--','linewidth',1);
- else
- hx = xline(2*r_min_NP(j)); set(hx, 'color', cmap(j,:), 'linestyle', '--','linewidth',1);
- end
- end
- lgtxt{j} = sprintf('SNR=%u', SNR(j));
- end
- xlim([0 4]);
- ylim([0 4]);
- hr = refline(1); set(hr, 'color', 'k');
- hl = plot(-1, -1, 'k--', 'linewidth', 1); lgtxt{numel(SNR)+1} = '2$r_{\rm min,NP}$';
- if i==1
- hg = legend([h hl], lgtxt, 'interpreter', 'latex', 'location', 'northwest', 'box', 'on', 'fontsize', 12);
- else
- hg = legend([h hl], lgtxt, 'interpreter', 'latex', 'location', 'northwest', 'box', 'on', 'fontsize', 12);
- end
- box on;
- pbaspect([1 1 1])
- switch n(i)
- case 0
- xlabel('2$\langle r\rangle$, $\mu$m', 'interpreter', 'latex', 'fontsize',20);
- case 1
- xlabel('2$r_{\rm vwa}$, $\mu$m', 'interpreter', 'latex', 'fontsize',20);
- case 2
- xlabel('2$r_{\rm eff, NP}$, $\mu$m', 'interpreter', 'latex', 'fontsize',20);
- case 4
- xlabel('2$r_{\rm eff, WP}$, $\mu$m', 'interpreter', 'latex', 'fontsize',20);
- end
- if i==1
- ylabel('fitted 2$r$, $\mu$m', 'interpreter', 'latex', 'fontsize',20);
- end
- end
- %% Plot histology information
- % inner radius, um
- r = 0.1:0.1:5;
- r = r(:);
- % thickness of myelin layer, um
- lm = 12/1e3;
- % # myelin layers
- C0 = 0.35/lm;
- C1 = 0.006/lm;
- C2 = 0.024/lm;
- Nm = round(C0 + C1*2*r + C2*log(2*r));
- % Total myelin thickness, um
- Lm = Nm*lm;
- % g-ratio: ratio of inner to outer radii
- gratio = r./(r+Lm);
- figure('unit','inch','position',[0 0 15 5])
- % plot inner diameter vs g-ratio
- subplot(131)
- hold on;
- hp = plot(2*r, gratio, 'o', 'linewidth', 1);
- xx = linspace(0, 10, 100);
- yy = C0 + C1*xx + C2*log(xx);
- yy = xx./(xx + 2*yy*lm);
- hh = plot(xx, yy, '-', 'linewidth', 1);
- legend([hh, hp], {'log-linear', 'numerical phantom'}, 'interpreter', 'latex', ...
- 'box', 'off', 'location', 'southeast', 'fontsize', 14)
- pbaspect([1 1 1]);
- xlabel('inner diameter 2$r_i$, $\mu$m', 'interpreter', 'latex', 'fontsize', 20);
- ylabel('$g$-ratio', 'interpreter', 'latex', 'fontsize', 20)
- xlim([0 10]);
- ylim([0 1]);
- yticks(0:0.2:1);
- box on;
- % plot inner diameter vs # myelin layers
- subplot(132)
- hold on;
- hp = plot(2*r, Nm, 'o', 'linewidth', 1);
- xx = linspace(0, 10, 100);
- yy = C0 + C1*xx + C2*log(xx);
- hh =plot(xx, yy, '-', 'linewidth', 1);
- legend([hh, hp], {'log-linear', 'numerical phantom'}, 'interpreter', 'latex', ...
- 'box', 'off', 'location', 'southeast', 'fontsize', 14)
- pbaspect([1 1 1]);
- xlabel('inner diameter 2$r_i$, $\mu$m', 'interpreter', 'latex', 'fontsize', 20);
- ylabel('\# myelin layers $N_m$', 'interpreter', 'latex', 'fontsize', 20)
- xlim([0 10]); ylim([25 40])
- box on;
- % plot axon diameter distribution in Gamma distribution
- di_mean = 2*(0.25:0.05:1).';
- di_var = (di_mean/2).^2;
- b = di_var./di_mean;
- a = di_mean./b;
- di = 2*(0.1:0.1:5); di = di(:);
- Ni = zeros(numel(di), numel(di_mean));
- for j = 1:numel(di_mean)
- Ni(:,j) = gampdf(di, a(j), b(j));
- end
- ax = subplot(133);
- hold on;
- plot([2.5 2.5], [0.9 1.9], 'k-', 'linewidth', 1.5)
- text(1.5, 1.4, '2$\bar{r}_i$', 'interpreter', 'latex', 'fontsize', 14);
- cmap = colormap('parula');
- list = 1:numel(di_mean);
- Pi = Ni./sum(Ni,1)/mean(diff(di));
- clear h lgtxt
- for i = 1:numel(list)
- h(i) = plot(di, Pi(:,list(i)), '.-', 'color', cmap(i*floor(size(cmap,1)/numel(list)),:));
- end
- pbaspect([1 1 1]);
- box on;
- xlabel('inner diameter 2$r_i$, $\mu$m', 'interpreter', 'latex', 'fontsize', 20);
- ylabel('PDF, $\mu$m$^{-1}$', 'interpreter', 'latex', 'fontsize', 20)
- for i = 1:numel(list)
- lgtxt{i} = sprintf('%.2f $\\mu$m', di_mean(list(i)));
- end
- legend(h, lgtxt, 'interpreter','latex','fontsize',12, 'box', 'off', ...
- 'NumColumns',2);
- xlim([0 10]);
- ylim([0 2]);
- yticks(0:5)
demo_3_cylinder_shell_ADM.m at commit 9de680c, under MIT · at the source
Overview
- Department of Radiology, Athinoula A. Martinos Center for Biomedical Imaging, Massachusetts General Hospital, Charlestown, MA 02129 USA, and also with the Harvard Medical School, Boston, MA 02115 USA
- Center for Advanced Imaging Innovation and Research, New York, NY 10016 USA, and also with the Department of Radiology, New York University School of Medicine, New York, NY 10016 USA
Abstract
Probing diffusion in myelin water using diffusion-weighted T1-/
Reproduced under the paper's license (CC BY), from the paper cited above.
Repository
Its files are read in the Code ↔ Paper reader above, with 16 matches between paragraphs and lines of code.
Connectome20/MyCaliber
9de680c81bfa1180ab3af722c203496535e405c6, 25 February 2026Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
25 files
- demo_1_cylindrical_surfa
ce_RD.m , MATLAB, 126 lines, 2 matches - demo_2_cylinder_shell_RD
.m , MATLAB, 235 lines, 1 match - demo_3_cylinder_shell_AD
M.m , MATLAB, 590 lines, 5 matches - demo_4_bead_undulation_R
D_AD.m , MATLAB, 494 lines, 2 matches - demo_5_bead_undulation_A
DM.m , MATLAB, 607 lines, 3 matches - demo_6_GPA.m, MATLAB, 104 lines, 2 matches
- lib/
analysis/ , MATLAB, 72 linesMCMCmyelinADMfit.m - lib/
analysis/ , MATLAB, 49 linescoCylRDmodel.m - lib/
analysis/ , MATLAB, 63 linescylinderSurfaceSimulatio n.m - lib/
analysis/ , MATLAB, 83 linesmyelinADMfit.m - lib/
analysis/ , MATLAB, 92 linesmyelinADMfitCR.m - lib/
analysis/ , MATLAB, 14 linesmyelinADMmodel.m - lib/
analysis/ , MATLAB, 90 linesmyelinADMmodelCR.m - lib/
analysis/ , MATLAB, 37 linesmyelinADMrmin.m - lib/
analysis/ , MATLAB, 34 linesmyelinRDfit.m - lib/
analysis/ , MATLAB, 13 linesmyelinRDmodel.m - lib/
analysis/ , MATLAB, 21 linesplotstd.m - lib/
analysis/ , MATLAB, 144 linessimul3DcoCyl_cuda_pgse_b vec.m - lib/
dirgen/ , MATLAB, 17 linesdirgen.m - lib/
packing/ , MATLAB, 428 linesrandstick.m - lib/
rms/ , CUDA, 796 linesmain_PGSE.cu - lib/
rms/ , CUDA, 827 linesmain_PGSE_perm.cu - lib/
rms/ , CUDA, 824 lines, 1 matchmain_PGSE_stringbead.cu - LICENSE, License, 18 lines
- README.md, Text, 24 lines
Tracing map
Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.
What the map holds:
- 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 23 scripts, each with its path and the digest of its content;
- 16 matches between paragraphs of the paper and lines of the code (method lexical-v1);
- neither the text of the paper nor the code itself.
Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.
Data
No dataset and no data link were found in the paper.
Versions
The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.
Version 2, 28 September 2026
- Publisher: n/a → Institute of Electrical and Electronics Engineers
Version 1, 27 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 5 authors, 5 keywords, 10 MeSH terms, 6 funders, 91 references.
Cite
This paper
Lee, H.-H., Chan, K.-S., Novikov, D. S., Fieremans, E., & Huang, S. Y. (2026). Axon Diameter Mapping From Myelin Water Diffusion MRI. IEEE transactions on medical imaging, 45(6), 2883-2896. https://
BibTeX
@article{lee2026axon,
author = {Lee, Hong-Hsi and Chan, Kwok-Shing and Novikov, Dmitry S. and Fieremans, Els and Huang, Susie Y.},
title = {{Axon Diameter Mapping From Myelin Water Diffusion MRI}},
journal = {IEEE transactions on medical imaging},
year = {2026},
month = jun,
volume = {45},
number = {6},
pages = {2883--2896},
publisher = {Institute of Electrical and Electronics Engineers},
issn = {0278-0062},
doi = {10.1109/
url = {https://
pmid = {41686667},
pmcid = {PMC13387500}
}
RIS
TY - JOUR
AU - Lee, Hong-Hsi
AU - Chan, Kwok-Shing
AU - Novikov, Dmitry S.
AU - Fieremans, Els
AU - Huang, Susie Y.
TI - Axon Diameter Mapping From Myelin Water Diffusion MRI
T2 - IEEE transactions on medical imaging
J2 - IEEE Trans Med Imaging
PY - 2026
DA - 2026/
VL - 45
IS - 6
SP - 2883
EP - 2896
SN - 0278-0062
PB - Institute of Electrical and Electronics Engineers
DO - 10.1109/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1109/
"type": "article-journal",
"title": "Axon Diameter Mapping From Myelin Water Diffusion MRI",
"container-title": "IEEE transactions on medical imaging",
"author": [
{
"family": "Lee",
"given": "Hong-Hsi"
},
{
"family": "Chan",
"given": "Kwok-Shing"
},
{
"family": "Novikov",
"given": "Dmitry S."
},
{
"family": "Fieremans",
"given": "Els"
},
{
"family": "Huang",
"given": "Susie Y."
}
],
"container-title-short":
"volume": "45",
"issue": "6",
"page": "2883-2896",
"DOI": "10.1109/
"PMID": "41686667",
"PMCID": "PMC13387500",
"ISSN": "0278-0062",
"publisher": "Institute of Electrical and Electronics Engineers",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
6,
1
]
]
}
}
The tracing map gets a citation of its own once an author has validated it and it has a DOI.
Similar papers
The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.
- [1] doi:10.1002/hbm.70553 [code]
- Axon Diameter Mapping in the Living Human Brain with Ultra-High-Gradient Diffusion MRI at 500 mT/
m Gradient Strength. Journal: Human brain mappingIn common: MRtrix3, Optimization Toolbox, Image Processing Toolbox, 1 other tool, structural MRI / diffusion, 23 references, 2 authors - [2] doi:10.1002/mrm.70490 [code]
- Dependence of the Extra-Cellular Diffusion Coefficient on the Fractions of Neurites and Cell Bodies in Gray Matter.Journal: Magnetic resonance in medicineIn common: structural MRI / diffusion, cellular / molecular, 22 references, author Hong‐Hsi Lee
- [3] doi:10.1371/journal.pbio.3003861
- Learning engages transient and sustained cellular mechanisms in the human brain.Journal: PLoS biologyIn common: structural MRI / diffusion, cellular / molecular, 10 references
- [4] doi:10.1002/mrm.70336 [code]
- Offline Reconstruction of Diffusion MRI Acquisitions for Comparison Between Complex PCA-Based and AI-Based Denoising.Journal: Magnetic resonance in medicineIn common: MRtrix3, Optimization Toolbox, Image Processing Toolbox, 1 other tool, structural MRI / diffusion, 5 references
- [5] doi:10.1038/s41598-026-39162-7 [code]
- White matter microstructure differences in obstructive sleep apnea severity groups assessed by diffusion tensor metrics and biophysical modeling.Journal: Scientific reportsIn common: MRtrix3, structural MRI / diffusion, 7 references
- [6] doi:10.1002/mrm.70378 [code]
- Investigating the Sensitivity of the Diffusion MRI Signal to Magnetization Transfer and Permeability via Monte-Carlo Simulations.Journal: Magnetic resonance in medicineIn common: structural MRI / diffusion, 8 references
- [7] doi:10.1038/s41467-026-70018-w [code]
- Geometry of the cumulant series in diffusion MRI.Journal: Nature communicationsIn common: Statistics and Machine Learning Toolbox, structural MRI / diffusion, 7 references
- [8] doi:10.1038/s41598-026-51531-w [code]
- Multimodal age-dependent diffusion-MRI analysis of the neocortex in a rat model of cortical dysplasia.Journal: Scientific reportsIn common: MRtrix3, Image Processing Toolbox, Statistics and Machine Learning Toolbox, structural MRI / diffusion, 4 references
- [9] doi: [code]
- Diffusion-relaxation MRI as virtual histology: separable microstructural signatures of AD pathology in ex vivo human brainJournal: Research squareIn common: Image Processing Toolbox, Statistics and Machine Learning Toolbox, structural MRI / diffusion, cellular / molecular, 3 references
- [10] doi:10.7554/elife.107661 [code]
- In vivo mapping of striatal neurodegeneration in Huntington's disease with Soma and Neurite Density Imaging.Journal: eLifeIn common: Optimization Toolbox, Image Processing Toolbox, Statistics and Machine Learning Toolbox, structural MRI / diffusion, 3 references
Contribute
The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.
Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.
Claim this paper
Correct its record
Say what each link of this record is, remove the ones that are not the paper's, add the ones that are missing. The correction becomes a new version of the record, in its Versions section.
Validate its tracing map
You validate the map as this page shows it: 1 repository of the authors' code, each at its verified commit and with its license, 23 scripts, and 16 matches between paragraphs and code (see the Code and Map sections). It then receives a DOI on Zenodo, with you (your ORCID iD) and OSCR as its creators; the code itself is not deposited.
The map's fingerprint: sha256:f4353d55b4dd1439…
Add the badge to its README
The badge links the code to this page. Copy one of these into the README of the paper's code: only you decide where it goes, and nothing is changed for you.
Markdown
[, paste the snippet at the top, then “Commit changes…” and, to review it first, “Create a new branch and start a pull request”. You open the pull request; OSCR asks for no permission.
Request its removal
To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).
Discussion, reproductions, activity
Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.
Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.
Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.
