Newer
Older
function [] = run(~, ~)
%RUN Summary of this function goes here
% Detailed explanation goes here
global artoaWorkspace artoaDataInput;
%% Validate soundsource table input
[success, message] = artoa.controller.track.parameter.validateCombinationsInput( ...
artoaWorkspace.trackParameter.soundsourceCombinations ...
);
if ~success
errordlg(message, 'Input error');
return;
end
%% Prepare variable if required
if ~artoa.data.hasMember(artoaWorkspace, {'trajectoryOutput', 'trajectories'})
artoaWorkspace.trajectoryOutput.trajectories = {};
end
%% Prepare sound velocity
soundVelocity = NaN( ...
size(artoaWorkspace.trackParameter.soundsourceCombinations, 1), ...
3 ...
);
%% Get sound velocity
for i = 1:size(soundVelocity, 1)
if strcmpi( ...
artoaWorkspace.trackParameter.soundspeedMethodString, ...
'manual' ...
)
soundVelocity(i, :) = [ ...
artoaWorkspace.trackParameter.soundsourceCombinations.soundspeed1(i), ...
artoaWorkspace.trackParameter.soundsourceCombinations.soundspeed2(i), ...
artoaWorkspace.trackParameter.soundsourceCombinations.soundspeed3(i) ...
];
elseif strcmpi( ...
artoaWorkspace.trackParameter.soundspeedMethodString, ...
% get soundsource names
soundsourceNames = strsplit(artoaWorkspace.trackParameter.soundsourceCombinations.soundsources{i});
% get soundspeed for every soundsource
for oName = 1:length(soundsourceNames)
soundVelocity(i, oName) = ...
artoaWorkspace.filteredSoundsources.(soundsourceNames{oName}).sound_speed;
end
else
soundVelocity(i, :) = artoa.data.calculateSoundVelocity( ...
artoaWorkspace.temperature(artoaWorkspace.statusTemperature == 1), ...
artoaWorkspace.pressure(artoaWorkspace.statusPressure == 1), ...
artoaWorkspace.trackParameter.soundspeedMethodString ...
%% Calculate and append track
pressureAndDate = { ...
artoaWorkspace.pressure(artoaWorkspace.statusPressure == 1), ...
artoaWorkspace.rafosDate(artoaWorkspace.statusPressure == 1) ...
};
[ ...
trajectory, ...
trajectoryDates, ...
trajectoryClockError, ...
trajectoryResiduals, ...
leprob001
committed
trajectoryVelocities, ...
trajectoryTimeDivergenceToGps ...
artoaWorkspace.float, ...
leprob001
committed
artoaWorkspace.satData, ...
artoaWorkspace.toaData, ...
artoaWorkspace.filteredSoundsources, ...
artoaWorkspace.trackParameter, ...
artoaDataInput.ini.leapseconds ...
);
if trajectory == false
errordlg( [ ...
'The trajectory could not be calculated. ' ...
'Please check the inputs of the tracking parameter window and make sure ' ...
' the combinations you chose have applied TOAs!' ...
], ...
'Trajectory error' ...
);
return;
end
trajectoryObject = struct();
trajectoryObject.trackParameter = artoaWorkspace.trackParameter;
% trajectory contains [lat lon]
trajectoryObject.latitude = trajectory(:, 1);
trajectoryObject.longitude = trajectory(:, 2);
trajectoryObject.clockError = trajectoryClockError;
trajectoryObject.residuals = trajectoryResiduals;
trajectoryObject.velocities = trajectoryVelocities;
leprob001
committed
trajectoryObject.timeDivergenceToGps = trajectoryTimeDivergenceToGps;
if isempty(artoaWorkspace.trajectoryOutput.trajectories)
trajectoryObject.id = 1;
else
trajectoryObject.id = artoaWorkspace.trajectoryOutput.trajectories{end}.id + 1;
end
trajectoryObject.hidden = false;
% store to workspace
artoaWorkspace.trajectoryOutput.trajectories{end + 1} = trajectoryObject;
%% Open track gui
artoa.controller.track.trajectoryOutput.open();
end