function [offsetTable] = generateOffsetTable(pFloatDetails, pSoundsources) %GETDEFAULTOFFSETTABLE Summary of this function goes here % Detailed explanation goes here %% Get required variables variableNames = artoa.offsets.getDefaultVariableNames(); %% Initialize return variable offsetTable = cell2table( ... artoa.offsets.getDefaultRowValues(), ... 'VariableNames', variableNames ... ); %% Setup rows % float offsetTable.Properties.RowNames(1) = {'Float'}; floatOffsets = artoa.data.getMember(pFloatDetails, {'offset'}, false); startDate = NaN; endDate = NaN; startOffset = NaN; endOffset = NaN; drift = NaN; if ~islogical(floatOffsets) sizeOffsets = size(floatOffsets); if sizeOffsets(1) >= 1 && sizeOffsets(2) >= 3 % start date can be calculated startDate = artoa.convert.dmy2rd( ... floatOffsets(1, 3), ... floatOffsets(1, 2), ... floatOffsets(1, 1) ... ); end if sizeOffsets(1) >= 2 && sizeOffsets(2) >= 3 % end date can be calculated endDate = artoa.convert.dmy2rd( ... floatOffsets(2, 3), ... floatOffsets(2, 2), ... floatOffsets(2, 1) ... ); end if sizeOffsets(1) >= 1 && sizeOffsets(2) >= 7 % start offset can be stored startOffset = floatOffsets(1, 7); end if sizeOffsets(1) >= 2 && sizeOffsets(2) >= 7 % end offset can be stored and drift can be calculated endOffset = floatOffsets(2, 7); % calculate drift per day drift = (endOffset - startOffset) / (endDate - startDate); end end offsetTable{1, variableNames{1}} = startDate; offsetTable{1, variableNames{2}} = startOffset; offsetTable{1, variableNames{3}} = endDate; offsetTable{1, variableNames{4}} = endOffset; offsetTable{1, variableNames{5}} = drift; clear startDate startOffset endDate endOffset drift; if nargin == 1 return; end if iscell(pSoundsources) for i = 1:length(pSoundsources) offsetTable(i + 1, :) = artoa.offsets.getDefaultRowValues(); offsetTable.Properties.RowNames(i + 1) = {pSoundsources{i}.sourcename}; offsetTable{i + 1, variableNames{1}} = artoa.convert.dmy2rd(pSoundsources{i}.offset(3), pSoundsources{i}.offset(2), pSoundsources{i}.offset(1)); offsetTable{i + 1, variableNames{2}} = pSoundsources{i}.offset(4); offsetTable{i + 1, variableNames{3}} = artoa.convert.dmy2rd(pSoundsources{i}.rcv_offset(3), pSoundsources{i}.rcv_offset(2), pSoundsources{i}.rcv_offset(1)); offsetTable{i + 1, variableNames{4}} = pSoundsources{i}.rcv_offset(4); offsetTable{i + 1, variableNames{5}} = pSoundsources{i}.drift; offsetTable{i + 1, variableNames{8}} = pSoundsources{i}.empiric_offset(4); offsetTable{i + 1, variableNames{9}} = pSoundsources{i}.empiric_drift; end end if isstruct(pSoundsources) fnames = fieldnames(pSoundsources); for i = 1:length(fnames) offsetTable(i + 1, :) = artoa.offsets.getDefaultRowValues(); offsetTable.Properties.RowNames(i + 1) = {pSoundsources.(fnames{i}).sourcename}; offsetTable{i + 1, variableNames{1}} = artoa.convert.dmy2rd(pSoundsources.(fnames{i}).offset(3), pSoundsources.(fnames{i}).offset(2), pSoundsources.(fnames{i}).offset(1)); offsetTable{i + 1, variableNames{2}} = pSoundsources.(fnames{i}).offset(4); offsetTable{i + 1, variableNames{3}} = artoa.convert.dmy2rd(pSoundsources.(fnames{i}).rcv_offset(3), pSoundsources.(fnames{i}).rcv_offset(2), pSoundsources.(fnames{i}).rcv_offset(1)); offsetTable{i + 1, variableNames{4}} = pSoundsources.(fnames{i}).rcv_offset(4); offsetTable{i + 1, variableNames{5}} = pSoundsources.(fnames{i}).drift; offsetTable{i + 1, variableNames{8}} = pSoundsources.(fnames{i}).empiric_offset(4); offsetTable{i + 1, variableNames{9}} = pSoundsources.(fnames{i}).empiric_drift; end end end