-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathOSimSTO.m
79 lines (65 loc) · 2.41 KB
/
OSimSTO.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
classdef OSimSTO < Source
methods
function name = srcname_default(obj)
name = 'sto';
end
function ext = srcext(obj)
ext = srcext@Source(obj);
if isempty(ext)
ext = '.sto';
end
end
function deps = dependencies(obj)
deps = {OSimModel(), OSimMotion()};
end
function data = readsource(obj, varargin)
import org.opensim.modeling.*
if endsWith(obj.path, 'OutputsVec3.sto')
data = TimeSeriesTableVec3(obj.path);
else
data = TimeSeriesTableVec3(obj.path);
end
end
function src = generatesource(obj, trial, deps, varargin)
p = inputParser;
addRequired(p, 'obj');
addRequired(p, 'trial', @(x) isa(x, 'Trial'));
addRequired(p, 'deps');
addOptional(p, 'SetupFile', '');
addOptional(p, 'StartTime', -Inf);
addOptional(p, 'FinishTime', Inf);
parse(p, obj, trial, deps, varargin{:});
setupfile = p.Results.SetupFile;
starttime = p.Results.StartTime;
finishtime = p.Results.FinishTime;
[objdir,~,~] = fileparts(obj.path);
if ~isdir(objdir)
mkdir(objdir);
end
import org.opensim.modeling.*
modelsrc = deps(cellfun(@(x) isa(x, 'OSimModel'), deps));
modelsrc = getsource(trial, modelsrc{1});
model = Model(modelsrc.path);
state = model.initSystem();
motsrc = deps(cellfun(@(x) isa(x, 'OSimMotion'), deps));
mot = getsource(trial, motsrc{1});
if isempty(setupfile)
atool = AnalyzeTool();
else
atool = AnalyzeTool(setupfile, false);
end
atool.setModel(model);
atool.setModelFilename(model.getInputFileName())
atool.setName(trial.name);
atool.setCoordinatesFileName(mot.path);
atool.setInitialTime(starttime);
atool.setFinalTime(finishtime);
atool.setResultsDir(objdir);
xmlfn = [tempname '.xml'];
atool.print(xmlfn);
status = system(['opensim-cmd --log error run-tool ' xmlfn]);
assert(status == 0)
src = obj;
end
end
end