0001 function [connect, count, fiber_length, mfiber_length, Noverlap, track_parm] = ...
0002 calc_connection(dir_name, trackfile, ofile)
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026 Ntrack=0;
0027 load(ofile, 'mcoord', 'label', 'Nlabel');
0028 connect = cell(Ntrack,1);
0029 count = zeros(Nlabel,1);
0030 fiber_length = zeros(Ntrack,1);
0031 mfiber_length = zeros(Nlabel,1);
0032 Noverlap = zeros(Ntrack,1);
0033 track_parm = [];
0034
0035
0036 filename = fullfile(dir_name, filesep, trackfile);
0037 d = dir(filename);
0038 if length(d)==1 && d.bytes > 0
0039 tracks = read_mrtrix_tracks(filename);
0040 else
0041 return;
0042 end
0043
0044
0045 Ntrack = length(tracks.data);
0046
0047
0048 endcoord = zeros(Ntrack,3);
0049 if Ntrack ~= 0
0050 for ii = 1:Ntrack
0051 if ~isempty(tracks.data{ii})
0052 endcoord(ii,:) = tracks.data{ii}(end,:);
0053 end
0054 end
0055 end
0056
0057
0058 mcoord = [mcoord(:,1)-1 mcoord(:,2)+1 mcoord(:,3)+1];
0059
0060
0061 step_size = str2num(tracks.step_size);
0062
0063
0064 connect = cell(Ntrack,1);
0065 count = zeros(Nlabel,1);
0066 fiber_length = zeros(Ntrack,1);
0067 mfiber_length = zeros(Nlabel,1);
0068 Noverlap = zeros(Ntrack,1);
0069
0070 if Ntrack ~= 0
0071 for ii = 1:Ntrack
0072
0073 [inda, indb] = sort(sum((mcoord - repmat(endcoord(ii,:),[size(mcoord,1) 1])).^2,2));
0074
0075 Noverlap(ii) = find(diff(inda)~=0,1);
0076
0077 connect{ii} = label(indb(1:Noverlap(ii)));
0078
0079 count(connect{ii}) = count(connect{ii}) + 1/length(connect{ii});
0080
0081 fiber_length(ii) = step_size * size(tracks.data{ii},1);
0082
0083 mfiber_length(connect{ii}) ...
0084 = mfiber_length(connect{ii}) + fiber_length(ii)/length(connect{ii});
0085 end
0086 tmp = count;
0087 tmp(count==0) = 1;
0088
0089 mfiber_length = mfiber_length./tmp; clear tmp;
0090 end
0091
0092
0093 track_parm = tracks;
0094 track_parm.data = [];