function [toaData] = recalculate(pFloat, pToaData, pAppliedSoundsources, pOffsetsTable) %RECALCULATETOADATA Summary of this function goes here % Detailed explanation goes here %% Prepare return variable toaData = pToaData; %% Add float offset floatLaunchRafosTime = artoa.convert.dmy2rd( ... pFloat.launchtime(3), ... pFloat.launchtime(2), ... pFloat.launchtime(1) ... ) ... + artoa.convert.hms2rd( ... pFloat.launchtime(4), ... pFloat.launchtime(5), ... 0 ... ); %% Add drift for every phase stepSize = length(toaData.toa) / pFloat.toaperphase; for i = 1:stepSize:length(toaData.toa) startIndex = i; endIndex = i + stepSize - 1; toaData.toa(startIndex:endIndex) = artoa.toa.addDrift( ... toaData.toa(startIndex:endIndex), ... pOffsetsTable{'Float', 'offset'}, ... pOffsetsTable{'Float', 'drift'}, ... floor(min(toaData.toaDate) - floatLaunchRafosTime) ... ); end %% Calculate soundsources fnames = fieldnames(pAppliedSoundsources); for i = 1:length(fnames) % get rafos start date rafosBeginEmission = artoa.convert.dmy2rd( ... pAppliedSoundsources.(fnames{i}).begemis(3), ... pAppliedSoundsources.(fnames{i}).begemis(2), ... pAppliedSoundsources.(fnames{i}).begemis(1) ... ) ... + artoa.convert.hms2rd( ... pAppliedSoundsources.(fnames{i}).begemis(4), ... pAppliedSoundsources.(fnames{i}).begemis(5), ... 0 ... ); toaLogical = strcmp(fnames{i}, toaData.soundSource); toaDate = toaData.toaDate(toaLogical); toa = toaData.toa(toaLogical); [toaDate, sortedDates] = sort(toaDate); toa = toa(sortedDates); % calculate drift of soundsource toa = artoa.toa.addDrift( ... toa, ... pOffsetsTable{fnames{i}, 'offset'}, ... pOffsetsTable{fnames{i}, 'drift'}, ... floor(toaDate - rafosBeginEmission) ... ); % undo sorting toa(sortedDates) = toa; toaData.toa(toaLogical) = toa; end end