Skip to content

Commit 0b0ed31

Browse files
committed
Fix of #6, minor improvement JSON generation.
1 parent 502344d commit 0b0ed31

File tree

7 files changed

+86
-55
lines changed

7 files changed

+86
-55
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "SignalTables"
22
uuid = "3201582d-3078-4276-ba5d-0a1254d79d7c"
33
authors = ["Martin.Otter@dlr.de <Martin.Otter@dlr.de>"]
4-
version = "0.4.1"
4+
version = "0.4.2"
55

66
[deps]
77
DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"

docs/src/index.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,13 @@ are different to the Python 2.x version.
188188

189189
## Release Notes
190190

191+
### Version 0.4.2
192+
193+
- Fix issue [#6](https://github.com/ModiaSim/SignalTables.jl/issues/6):
194+
signalTableToDataFrame(..) is now working if the first signal is not a Var(..).
195+
196+
- Minor improvement in JSON generation.
197+
191198
### Version 0.4.1
192199

193200
- getSignalNames(signalTable; getVar=true, getPar=true, getMap=true): New keyword arguments

src/ExampleSignalTables.jl

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
"""
77
getSignalTableExample(signalTableName::String; logTitle=true, logShowInfo=true)
8-
8+
99
Return an example signal table.
1010
"""
1111
function getSignalTableExample(signalTableName::String; logTitle=true, logShowInfo=true)::SignalTable
@@ -15,18 +15,18 @@ if logTitle
1515
end
1616

1717
if signalTableName == "OneScalarSignal"
18-
18+
1919
t = range(0.0, stop=10.0, length=100)
20-
20+
2121
sigTable = SignalTable(
2222
"time" => Var(values = t, independent=true),
2323
"phi" => Var(values = sin.(t))
2424
)
2525

2626
elseif signalTableName == "OneScalarSignalWithUnit"
27-
27+
2828
t = range(0.0, stop=10.0, length=100)
29-
29+
3030
sigTable = SignalTable(
3131
"time" => Var(values = t, unit="s", independent=true),
3232
"phi" => Var(values = sin.(t), unit="rad")
@@ -40,46 +40,46 @@ elseif signalTableName == "OneVectorSignalWithUnit"
4040
"r" => Var(values = [0.4*cos.(t) 0.5*sin.(t) 0.3*cos.(t)], unit="m"),
4141
)
4242

43-
elseif signalTableName == "OneMatrixSignal"
44-
43+
elseif signalTableName == "OneMatrixSignal"
44+
4545
t = range(0.0, stop=1.0, length=10)
46-
46+
4747
offset = Float64[11 12 13;
4848
21 22 23]
4949
matrix = Array{Float64,3}(undef,length(t),2,3)
5050
for i = 1:length(t), j = 1:2, k=1:3
5151
matrix[i,j,k] = offset[j,k] + 0.3*sin(t[i])
5252
end
53-
54-
sigTable = SignalTable(
53+
54+
sigTable = SignalTable(
5555
"time" => Var(values = t, independent=true),
5656
"matrix" => Var(values = matrix)
5757
)
58-
59-
elseif signalTableName == "OneMatrixSignalWithMatrixUnits"
60-
58+
59+
elseif signalTableName == "OneMatrixSignalWithMatrixUnits"
60+
6161
t = range(0.0, stop=1.0, length=10)
62-
62+
6363
offset = Float64[11 12 13;
6464
21 22 23]
6565
matrix = Array{Float64,3}(undef,length(t),2,3)
6666
for i = 1:length(t), j = 1:2, k=1:3
6767
matrix[i,j,k] = offset[j,k] + 0.3*sin(t[i])
6868
end
69-
70-
sigTable = SignalTable(
69+
70+
sigTable = SignalTable(
7171
"time" => Var(values = t, unit="s", independent=true),
7272
"matrix" => Var(values = matrix, unit=["m" "m/s" "m/s^2";
7373
"rad" "rad/s" "rad/s^2"])
7474
)
7575

7676
elseif signalTableName == "ConstantSignals"
77-
77+
7878
t = range(0.0, stop=1.0, length=5)
79-
79+
8080
matrix = Float64[11 12 13;
8181
21 22 23]
82-
82+
8383
sigTable = SignalTable(
8484
"time" => Var(values = t, unit="s", independent=true),
8585
"phi_max" => Par(value = 1.1f0, unit="rad"),
@@ -97,35 +97,36 @@ elseif signalTableName == "MissingValues"
9797
time1 = 0.0 : 0.1 : 3.0
9898
time2 = 3.0 : 0.1 : 11.0
9999
time3 = 11.0 : 0.1 : 15
100-
t = vcat(time1,time2,time3)
100+
t = vcat(time1,time2,time3)
101101
sigC = vcat(fill(missing,length(time1)), 0.6*cos.(time2.+0.5), fill(missing,length(time3)))
102-
102+
103103
function sigD(t, time1, time2)
104104
sig = Vector{Union{Missing,Float64}}(undef, length(t))
105-
105+
106106
j = 1
107107
for i = length(time1)+1:length(time1)+length(time2)
108-
if j == 1
108+
if j == 1
109109
sig[i] = 0.5*cos(t[i])
110110
end
111111
j = j > 3 ? 1 : j+1
112112
end
113113
return sig
114114
end
115-
115+
116116
sigTable = SignalTable(
117117
"time" => Var(values=t, unit="s", independent=true),
118-
"load.r" => Var(values=0.4*[sin.(t) cos.(t) sin.(t)], unit="m"),
118+
"load.r" => Var(values=0.4*[sin.(t) cos.(t) sin.(t)], unit="m"),
119119
"sigA" => Var(values=0.5*sin.(t), unit="m"),
120120
"sigB" => Var(values=1.1*sin.(t), unit="m/s"),
121121
"sigC" => Var(values=sigC, unit="N*m"),
122-
"sigD" => Var(values=sigD(t, time1, time2), unit="rad/s", variability="clocked", info="Motor angular velocity")
123-
)
124-
122+
"sigD" => Var(values=sigD(t, time1, time2), unit="rad/s", variability="clocked", info="Motor angular velocity")
123+
)
124+
125125
elseif signalTableName == "VariousTypes"
126-
126+
127127
t = 0.0:0.1:0.5
128128
sigTable = SignalTable(
129+
"_attributes" => Map(experiment=Map(stoptime=0.5, interval=0.01)),
129130
"time" => Var(values= t, unit="s", independent=true),
130131
"load.r" => Var(values= [sin.(t) cos.(t) sin.(t)], unit="m"),
131132
"motor.angle" => Var(values= sin.(t), unit="rad", state=true, der="motor.w"),
@@ -135,17 +136,16 @@ elseif signalTableName == "VariousTypes"
135136
"wm" => Var(alias = "motor.w"),
136137
"ref.clock" => Var(values= [true, missing, missing, true, missing, missing],
137138
variability="clock"),
138-
139+
139140
"motor.w_c" => Var(values= [0.6, missing, missing, 0.8, missing, missing],
140141
variability="clocked", clock="ref.clock"),
141-
142+
142143
"motor.inertia" => Par(value = 0.02f0, unit="kg*m/s^2"),
143-
"motor.data" => Par(value = "resources/motorMap.json"),
144-
"attributes" => Map(experiment=Map(stoptime=0.5, interval=0.01))
144+
"motor.data" => Par(value = "resources/motorMap.json")
145145
)
146-
146+
147147
else
148-
error("getSignalTableExample(\"$signalTableName\"): unknown name.")
148+
error("getSignalTableExample(\"$signalTableName\"): unknown name.")
149149
end
150150

151151
if logShowInfo

src/SignalTableFunctions.jl

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -754,11 +754,20 @@ function encodeSignalTableElement(path, element; log=false)
754754
else
755755
elunit = unitAsParseableString(element)
756756
if elunit == ""
757-
jdict = OrderedDict{String,Any}("_class" => "Array",
758-
"eltype" => replace(string(eltype(element)), " " => ""),
759-
"size" => Int[i for i in size(element)],
760-
"layout" => "column-major",
761-
"values" => reshape(element, length(element)))
757+
if ndims(element) == 1
758+
jdict = OrderedDict{String,Any}("_class" => "Array",
759+
"eltype" => replace(string(eltype(element)), " " => ""),
760+
"size" => Int[i for i in size(element)],
761+
"values" => element
762+
)
763+
else
764+
jdict = OrderedDict{String,Any}("_class" => "Array",
765+
"eltype" => replace(string(eltype(element)), " " => ""),
766+
"size" => Int[i for i in size(element)],
767+
"layout" => "column-major",
768+
"values" => reshape(element, length(element))
769+
)
770+
end
762771
else
763772
element = ustrip.(element)
764773
jdict = OrderedDict{String,Any}("_class" => "Array",

src/SignalTableInterface_DataFrames.jl

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,17 @@ hasSignal( obj::DataFrames.DataFrame, name::String) = haskey(obj, name)
1414
Returns a signal table as [DataFrame](https://github.com/JuliaData/DataFrames.jl) object.
1515
"""
1616
function signalTableToDataFrame(sigTable)::DataFrames.DataFrame
17-
names = getSignalNames(sigTable)
17+
names = getSignalNames(sigTable; getPar=false, getMap=false)
1818
name = names[1]
1919
df = DataFrames.DataFrame(name = getSignal(sigTable,name)[:values])
2020
for i in 2:length(names)
2121
name = names[i]
2222
sig = getSignal(sigTable,name)
23-
if isVar(sig)
24-
sigValues = sig[:values]
25-
if typeof(sigValues) <: AbstractVector
26-
df[!,name] = sig[:values]
27-
else
28-
@info "$name::$(typeof(sigValues)) is ignored, because no Vector"
29-
end
30-
elseif isPar(sig)
31-
@info "$name is ignored, because Par(..) signal."
32-
else
33-
@info "$name::$(typeof(sig)) is ignored, because no Var(..) signal"
23+
sigValues = sig[:values]
24+
if typeof(sigValues) <: AbstractVector
25+
df[!,name] = sig[:values]
26+
else
27+
@info "$name::$(typeof(sigValues)) is ignored, because no Vector"
3428
end
3529
end
3630
return df

src/SignalTables.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
module SignalTables
22

33
const path = dirname(dirname(@__FILE__))
4-
const version = "0.4.1"
5-
const version_SignalTable_JSON = "0.4.1" # version tag to be stored in JSON files
4+
const version = "0.4.2"
5+
const version_SignalTable_JSON = "0.4.2" # version tag to be stored in JSON files
66

77
using OrderedCollections
88
using Unitful

test/SignalTableFunctions/test_json.jl

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,25 @@ signalTable1 = SignalTable(
2727

2828
writeSignalTable("test_json_signalTable1.json", signalTable1, log=true, indent=2)
2929

30+
31+
t = 0.0:0.1:10.0
32+
tc = [rem(i,5) == 0 ? div(i,5)+1 : missing for i in 0:length(t)-1]
33+
sigTable2 = SignalTable(
34+
"_attributes" => Map(experiment=Map(stopTime=10.0, interval=0.1)),
35+
"time" => Var(values = t, unit="s", independent=true),
36+
"motor.angle" => Var(values = sin.(t), unit="rad", der="motor.w"),
37+
"motor.w" => Var(values = cos.(t), unit="rad/s"),
38+
"motor.w_ref" => Var(values = 0.9*cos.(t), unit="rad/s"),
39+
"baseClock" => Var(values = tc, variability="clock"),
40+
"motor.w_c" => Var(values = 1.2*cos.((tc.-1)/2), unit="rad/s",
41+
variability="clocked", clock="baseClock"),
42+
"motor.file" => Par(value = "motormap.json",
43+
info = "File name of motor characteristics")
44+
)
45+
showInfo(sigTable2)
46+
@usingPlotPackage
47+
plot(sigTable2, ("motor.w", "motor.w_c"), figure=2)
48+
plot(sigTable2, "motor.w_c", xAxis="baseClock", figure=3)
49+
writeSignalTable("sigTable2.json", sigTable2, log=true, indent=2)
50+
3051
end

0 commit comments

Comments
 (0)