Code covered by the BSD License  

Highlights from
TDMS Reader

TDMS Reader

by

 

13 Jan 2011 (Updated )

Read TDMS files v1 & v2 without DLL Current Version: 2.5

TDMS_dataToGroupChanStruct_v4(inputStruct,varargin)
function output = TDMS_dataToGroupChanStruct_v4(inputStruct,varargin)
%TDMS_dataToGroupChanStruct_v4  
%
%   NOTE: This reproduces the data structure for the old lab functionality 
%   of the function getStructTDM
%   
%   See Also: TDMS_genvarname2, TDMS_readTDMSFile

REPLACE_STR = '_';
PREPEND_STR = 'p_';
PREPEND_GRP_STRING = 'g_';
PREPEND_CHAN_STRING = 'c_';
ALWAYS_PREPEND = false;
PROP_NAME = 'Props';

propNames    = inputStruct.propNames;
propValues   = inputStruct.propValues;
groupIndices = inputStruct.groupIndices;
groupNames   = inputStruct.groupNames;
chanIndices  = inputStruct.chanIndices;
chanNames    = inputStruct.chanNames;
rootIndex    = inputStruct.rootIndex;
data         = inputStruct.data;

groupNames = cellfun(@(x) TDMS_genvarname2(x,REPLACE_STR,PREPEND_GRP_STRING,ALWAYS_PREPEND),groupNames,'UniformOutput',false);



rootPropStruct = propsToStruct(propNames{rootIndex},propValues{rootIndex},REPLACE_STR,PREPEND_STR,ALWAYS_PREPEND);
output = struct(PROP_NAME,rootPropStruct);

for iGroup = 1:length(groupIndices)
    curGroupIndex = groupIndices(iGroup);
    curChanIndices = chanIndices{iGroup};
    curChanNames   = chanNames{iGroup};
    
    curChanNames = cellfun(@(x) TDMS_genvarname2(x,REPLACE_STR,PREPEND_CHAN_STRING,ALWAYS_PREPEND),curChanNames,'UniformOutput',false);
    
    groupPropStruct = propsToStruct(propNames{curGroupIndex},propValues{curGroupIndex},REPLACE_STR,PREPEND_STR,ALWAYS_PREPEND);
    groupStruct = struct('name',groupNames(iGroup),PROP_NAME,groupPropStruct);
    for iChan = 1:length(curChanIndices)
        curChanIndex = curChanIndices(iChan);
        chanPropStruct = propsToStruct(propNames{curChanIndex},propValues{curChanIndex},REPLACE_STR,PREPEND_STR,ALWAYS_PREPEND);
        chanStruct =  struct('name',curChanNames{iChan},PROP_NAME,chanPropStruct,...
            'data',[]);
        chanStruct.data = data{curChanIndex};
        %NOTE: I had a case statement in case the data type was a string,
        %which would change the interpretation of the struct input
        if strcmp(chanStruct.name,'name')
            error('The variable "name" for a channel is off limits, need a different conversion wrapper (probably 2)')
        end
        groupStruct.(TDMS_genvarname2(chanStruct.name,...
            REPLACE_STR,PREPEND_STR,ALWAYS_PREPEND)) = chanStruct;
    end
    output.(TDMS_genvarname2(groupStruct.name,...
        REPLACE_STR,PREPEND_STR,ALWAYS_PREPEND)) = groupStruct;
end
end

function propStruct = propsToStruct(names,values,REPLACE_STR,PREPEND_STR,ALWAYS_PREPEND)
propStruct = struct([]);
for iProp = 1:length(names)
   propStruct(1).(TDMS_genvarname2(names{iProp},REPLACE_STR,PREPEND_STR,ALWAYS_PREPEND)) = values{iProp}; 
end
end

Contact us