Skip to content
Snippets Groups Projects
run.m 3.86 KiB
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, ...
        'soundsource file' ...
        % 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, ...
    trajectoryVelocities, ...
    trajectoryTimeDivergenceToGps ...
] = artoa.float.calculateTrajectory( ...
    artoaWorkspace.float, ...
    pressureAndDate, ...
    artoaWorkspace.toaData, ...
    artoaWorkspace.filteredSoundsources, ...
    artoaWorkspace.trackParameter, ...
    soundVelocity, ...
    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

%% Setup trajectory object
trajectoryObject = struct();
trajectoryObject.trackParameter = artoaWorkspace.trackParameter;
% trajectory contains [lat lon]
trajectoryObject.latitude = trajectory(:, 1);
trajectoryObject.longitude = trajectory(:, 2);
trajectoryObject.date = trajectoryDates;
trajectoryObject.clockError = trajectoryClockError;
trajectoryObject.residuals = trajectoryResiduals;
trajectoryObject.velocities = trajectoryVelocities;
trajectoryObject.timeDivergenceToGps = trajectoryTimeDivergenceToGps;

%% Generate trajectory id
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