diff --git a/classes/DataWrapper.m b/classes/DataWrapper.m index 3fa54c678173b1ecbbce4cdee89e04f995674ec1..6d484e266694e71cfd7d196163a7167963f06402 100644 --- a/classes/DataWrapper.m +++ b/classes/DataWrapper.m @@ -51,6 +51,16 @@ classdef DataWrapper < handle obj.data(obj.counter + 1) = data; end + function out = getData(obj, startIdx) + % detData - Reads data from wrapper + % This action will NOT reset cache + arguments + obj + startIdx = 1 + end + out = obj.data(startIdx:obj.counter); + end + function setData(obj) % setData - Promoted current data stored in cache % promoted data will be saved until wrapper is reset @@ -71,16 +81,6 @@ classdef DataWrapper < handle obj.reset(); end - function out = getData(obj, startIdx) - % detData - Reads data from wrapper - % This action will NOT reset cache - arguments - obj - startIdx = 1 - end - out = obj.data(startIdx:obj.counter); - end - function obj = reset(obj) % reset - Resets cache to starting conditions @@ -106,7 +106,7 @@ classdef DataWrapper < handle currentValue = [data.(currentField)]; if isstruct(currentValue) - out.(currentField) = DataWrapper.packageData([data.(currentField)]); + out.(currentField) = DataWrapper.packageData(currentValue); else sz = size(data(1).(currentField)); if all(sz > 1) diff --git a/functions/miscellaneous/getOdeFcn.m b/functions/miscellaneous/getOdeFcn.m index d8dbc0c40c6442f4d669948d95d19ab142846972..3b23cd91d87ac4a4d6a10f829fe27a1c7a08916d 100644 --- a/functions/miscellaneous/getOdeFcn.m +++ b/functions/miscellaneous/getOdeFcn.m @@ -1,11 +1,11 @@ function out = getOdeFcn(solution, startIdx) arguments - solution - startIdx = 1 + solution (1, :) struct + startIdx (1, 1) double = 1 end % recallOdeFcn - This function allows to compute some parameters used % inside the ODE integrations. -% +% % INPUTS: % - fun, function, ode function used; % - T, double [n° variation, 1], integration time vector; @@ -17,18 +17,33 @@ end % * m , total mass; % * (Ixx Iyy Izz), Inertias; % * (q0 q1 q2 q3), attitude unit quaternion. -% +% % OUTPUTS: % - allSteps, struct, which contains all the parameters needed. -args = solution.extdata.varargin; -fun = solution.extdata.odefun; +if length(solution) == 1 + args = solution.extdata.varargin; + fun = solution.extdata.odefun; -wrapper = args{end}; -data = wrapper.getData(startIdx); + wrapper = args{end}; + data = wrapper.getData(startIdx); -%% Fixing points at t = 0, t = end + %% Fixing points at t = 0, t = end + + [~, data(1)] = fun(solution.x(startIdx), solution.y(:,startIdx), args{1:end-1}); + [~, data(end)] = fun(solution.x(end), solution.y(:,end), args{1:end-1}); +else + extData = [solution.extdata]; + startFun = extData(1).odefun; + startArgs = extData(1).varargin; + endFun = extData(end).odefun; + endArgs = extData(end).varargin; + + wrapper = endArgs{end}; + data = wrapper.getData(startIdx); + + [~, data(1)] = startFun(solution(1).x(startIdx), solution(1).y(:,startIdx), startArgs{1:end-1}); + [~, data(end)] = endFun(solution(end).x(end), solution(end).y(:,end), endArgs{1:end-1}); +end -[~, data(1)] = fun(solution.x(startIdx), solution.y(:,startIdx), args{1:end-1}); -[~, data(end)] = fun(solution.x(end), solution.y(:,end), args{1:end-1}); out = wrapper.packageData(data); \ No newline at end of file