Skip to content
Snippets Groups Projects
Select Git revision
  • master
1 result

MatchFilename.m

Blame
  • MatchFilename.m 1.98 KiB
    function outNames = MatchFilename(parseStruct, camera,frame,channel)
        outNames = {};
    
        bValidStacks = checkNonemptyField(parseStruct, 'stack');
        if (bValidStacks)
            useStacks = true;
            numStacks = max(vertcat(parseStruct.stack))+1;
        else
            useStacks = false;
            numStacks = [];
        end
        
        bValidIter = checkNonemptyField(parseStruct, 'iter');
        if ( bValidIter )
            useIter = true;
        else
            useIter = false;
        end
    
        bValidCam = checkNonemptyField(parseStruct, 'cam');
        if ( bValidCam )
            unqCams = unique({parseStruct.cam}.');
            if (length(unqCams)>1)
                useCams = true;
            else
                if ( ~isempty(camera) && all(unqCams~=camera) )
                    return
                end
                useCams = false;
            end
        else
            if ( ~isempty(camera) )
                return
            end
            useCams = false;
        end
        
        if ( useIter )
            if ( useStacks )
                iterIdx = floor((frame) / numStacks);
                stackIdx = frame - iterIdx*numStacks;
                timeMask = (vertcat(parseStruct.stack) == stackIdx) & (vertcat(parseStruct.iter) == iterIdx);
            else
                timeMask = (vertcat(parseStruct.iter) == frame);
            end
        else
            timeMask = (vertcat(parseStruct.stack) == frame);
        end
        
        name = {};
        if ( ~isempty(camera) && useCams )
            camChanMask = ( strcmpi(camera,{parseStruct.cam}.') & (vertcat(parseStruct.chan)==channel) );
            if (any(camChanMask))
                name = {parseStruct(timeMask & camChanMask).name}.';
            end
        elseif (~isempty(channel))
            chanMask = (vertcat(parseStruct.chans) == channel);
            if (any(chanMask))
                name = {parseStruct(timeMask & chanMask).name}.';
            end
        else
            name ={parseStruct(timeMask).name}.';
        end
        
        outNames = name;
    end
    
    function bNonempty = checkNonemptyField(parseStruct, fieldname)
        bNonempty = all(arrayfun(@(x)(~isempty(x.(fieldname))), parseStruct));
    end