Commit d6477dad authored by jayd1860's avatar jayd1860
Browse files

v1.35.3

-- Fix Rob Luke's https://github.com/rob-luke/BIDS-NIRS-Tapping dataset not being loaded correctly probe lacks sourcePos2D and detectorPos2D. It has sourcePos3D and detectorPos3D so we project 3D to 2D if the 2D fields are empty. If landmarks are missing then we use crude default 3D-to-2D projection algorithm. If landmarks are available then we use another algorithm that Sreekanth Kura and David Boas are developing
parent bae29b46
Loading
Loading
Loading
Loading
+24 −1
Original line number Diff line number Diff line
@@ -124,6 +124,27 @@ classdef ProbeClass < FileLoadSaveClass

        
        
        % -------------------------------------------------------
        function Project_3D_to_2D(obj) 
            if isempty(obj.landmarkPos3D)
                
                % When 3D landmarks aren't available use crude default 3D-to-2D projection algorithm 
                if isempty(obj.sourcePos2D)
                    obj.sourcePos2D = project_3D_to_2D(obj.sourcePos3D);
                end
                if isempty(obj.detectorPos2D)
                    obj.detectorPos2D = project_3D_to_2D(obj.detectorPos3D);
                end
                
            else

                % 3D landmarks are available, use ...

            end
        end

        
        
        % -------------------------------------------------------
        function err = LoadHdf5(obj, fileobj, location)
            err = 0;
@@ -174,6 +195,8 @@ classdef ProbeClass < FileLoadSaveClass
                obj.detectorLabels            = HDF5_DatasetLoad(gid, 'detectorLabels', obj.detectorLabels);
                obj.landmarkLabels            = HDF5_DatasetLoad(gid, 'landmarkLabels', obj.landmarkLabels);
                
                obj.Project_3D_to_2D();
                
                % Close group
                HDF5_GroupClose(fileobj, gid, fid);
                
+62 −0
Original line number Diff line number Diff line
function  p2 = project_3D_to_2D(p3)
d = distmatrix(p3);
p2_0 = p3(:,1:2);
fun = @(x)myfunc(x,d);
p2 = fsolve(fun, p2_0);


% -------------------------------------------------------
function  F = myfunc(p, d)
F = [];
kk = 1;
c = 1.2;
for ii = 1:size(d,1)
    for jj = 1:size(d,2)
        if d(ii,jj) == 0
            continue
        end
        F(kk) = sqrt((p(ii,1) - p(jj,1))^2 + (p(ii,2) - p(jj,2))^2) - d(ii,jj)*c;
        kk = kk+1;
    end
end



% -------------------------------------------------------------------
function d = distmatrix(varargin)

d=[];

v1 = double(varargin{1});
if size(v1,2) == 2
    v1 = [v1, zeros(size(v1,1),1)];
end

if length(varargin)==1
    
    n = size(v1,1);
    d = zeros(n);
    for i = 1:n
        for j = i+1:n        
            d(i,j) = ((v1(i,1) - v1(j,1))^2 + ...
                      (v1(i,2) - v1(j,2))^2 + ...
                      (v1(i,3) - v1(j,3))^2)^0.5;
        end     
    end

elseif length(varargin)==2

    v2 = double(varargin{2});
    m = size(v1,1);
    n = size(v2,1);
    d = zeros(m,n);    
    for i = 1:m
        for j=1:n
            d(i,j) = ((v1(i,1) - v2(j,1))^2 + ...
                      (v1(i,2) - v2(j,2))^2 + ...
                      (v1(i,3) - v2(j,3))^2)^0.5;
        end     
    end    

end
+1 −1
Original line number Diff line number Diff line
1.35.2
1.35.3