Add dataFrame as output format
parent
9d26c6569f
commit
8a97de3fdf
120
src/output.jl
120
src/output.jl
|
@ -5,26 +5,33 @@
|
||||||
# __copyright__ = "2020-2022"
|
# __copyright__ = "2020-2022"
|
||||||
# __license__ = "ISC"
|
# __license__ = "ISC"
|
||||||
|
|
||||||
|
using DataFrames
|
||||||
|
|
||||||
function createOutput(train::Train, settings::Settings, path::Path, movingSection::Dict, drivingCourse::Vector{Dict})
|
function createOutput(train::Train, settings::Settings, path::Path, movingSection::Dict, drivingCourse::Vector{Dict})
|
||||||
if settings.outputDetail == :running_time
|
if settings.outputDetail == :running_time
|
||||||
output = movingSection[:t] # TODO: or use drivingCourse[end][:t]
|
output = drivingCourse[end][:t]
|
||||||
|
|
||||||
elseif settings.outputDetail == :points_of_interest
|
elseif settings.outputDetail == :points_of_interest
|
||||||
# add points of interest
|
# add points of interest
|
||||||
if !isempty(path.poi)
|
if !isempty(path.poi)
|
||||||
|
|
||||||
# for elem in 1:length(driving_course)
|
# output = Dict[]
|
||||||
|
# POI = 1
|
||||||
|
# i = 1
|
||||||
|
# while POI <= length(path.poi) && i <= drivingCourse[end][:i]
|
||||||
|
# if path.poi[POI][:station] == drivingCourse[i][:s]
|
||||||
|
# push!(output, drivingCourse[i])
|
||||||
|
# POI = POI+1
|
||||||
|
# end
|
||||||
|
# i = i+1
|
||||||
# end
|
# end
|
||||||
|
|
||||||
|
# get only the driving course's data points with POI labels
|
||||||
output = Dict[]
|
output = Dict[]
|
||||||
POI = 1
|
for point in 1:length(drivingCourse)
|
||||||
i = 1
|
if point[:label] != ""
|
||||||
while POI <= length(path.poi) && i <= drivingCourse[end][:i]
|
push!(output, point)
|
||||||
if path.poi[POI][:station] == drivingCourse[i][:s]
|
|
||||||
push!(output, drivingCourse[i])
|
|
||||||
POI = POI+1
|
|
||||||
end
|
end
|
||||||
i = i+1
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -37,74 +44,61 @@ function createOutput(train::Train, settings::Settings, path::Path, movingSectio
|
||||||
|
|
||||||
|
|
||||||
# add moving section and driving courses
|
# add moving section and driving courses
|
||||||
if settings[:operationModeMinimumRunningTime] == true
|
merge!(output, Dict(:movingSection => movingSection,
|
||||||
merge!(output, Dict(:movingSectionMinimumRunningTime => movingSection,
|
:drivingCourse => drivingCourse))
|
||||||
:drivingCourseMinimumRunningTime => drivingCourse))
|
|
||||||
elseif settings[:operationModeMinimumEnergyConsumption] == true
|
|
||||||
merge!(output, Dict(:movingSectionMinimumEnergyConsumption => movingSection,
|
|
||||||
:drivingCourseMinimumEnergyConsumption => drivingCourse))
|
|
||||||
end
|
|
||||||
|
|
||||||
# add points of interest
|
# add points of interest
|
||||||
if !isempty(path.poi)
|
if !isempty(path.poi)
|
||||||
pointsOfInterest = Vector{Dict}()
|
pointsOfInterest = Dict[]
|
||||||
POI = 1
|
# get only the driving course's data points with POI labels
|
||||||
i = 1
|
output = Dict[]
|
||||||
while POI <= length(path.poi) && i <= drivingCourse[end][:i]
|
for point in 1:length(drivingCourse)
|
||||||
if path.poi[POI] == drivingCourse[i][:s]
|
if point[:label] != ""
|
||||||
push!(pointsOfInterest, drivingCourse[i])
|
push!(pointsOfInterest, point)
|
||||||
POI = POI+1
|
|
||||||
end
|
end
|
||||||
i = i+1
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if settings[:operationModeMinimumRunningTime] == true
|
merge!(output, Dict(:pointsOfInterest => pointsOfInterest))
|
||||||
merge!(output, Dict(:pointsOfInterestMinimumRunningTime => pointsOfInterest))
|
|
||||||
elseif settings[:operationModeMinimumEnergyConsumption] == true
|
|
||||||
merge!(output, Dict(:pointsOfInterestMinimumEnergyConsumption => pointsOfInterest))
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if settings.outputFormat == :dataframe
|
||||||
|
return createDataFrameForDataPoints(output[:drivingCourse])
|
||||||
else
|
else
|
||||||
output = nothing
|
|
||||||
end
|
|
||||||
return output
|
return output
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if settings.outputFormat == :dataframe
|
||||||
|
return createDataFrame(output)
|
||||||
|
else
|
||||||
|
return output
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
#=
|
|
||||||
function createOutputDict(train::Train, settings::Settings, path::Path, movingSection::Dict, drivingCourse::Vector{Dict})
|
|
||||||
outputDict = Dict{Symbol,Any}()
|
|
||||||
merge!(outputDict, Dict(:train => train, :path => path, :settings => settings))
|
|
||||||
|
|
||||||
|
function createDataFrame(runningTime::AbstractFloat)
|
||||||
|
# create DataFrame with running time information
|
||||||
|
dataFrame = DataFrame(column1=["t (in s)", runningTime])
|
||||||
|
end
|
||||||
|
|
||||||
# add moving section and driving courses
|
function createDataFrame(dataPoints::Vector{Dict})
|
||||||
if settings[:operationModeMinimumRunningTime] == true
|
header = ["i", "behavior", "station label", "Δs (in m)", "s (in m)", "Δt (in s)","t (in s)","Δv (in m/s)","v (in m/s)","F_T (in N)","F_R (in N)","R_path (in N)","R_train (in N)","R_traction (in N)","R_wagons (in N)","a (in m/s^2)"]
|
||||||
merge!(outputDict, Dict(:movingSectionMinimumRunningTime => movingSection,
|
columnSymbols = [:i, :behavior, :label, :Δs, :s, :Δt, :t, :Δv, :v, :F_T, :F_R, :R_path, :R_train, :R_traction, :R_wagons, :a]
|
||||||
:drivingCourseMinimumRunningTime => drivingCourse))
|
|
||||||
elseif settings[:operationModeMinimumEnergyConsumption] == true
|
|
||||||
merge!(outputDict, Dict(:movingSectionMinimumEnergyConsumption => movingSection,
|
|
||||||
:drivingCourseMinimumEnergyConsumption => drivingCourse))
|
|
||||||
end
|
|
||||||
|
|
||||||
# add points of interest
|
allColumns = Array{Any,1}[]
|
||||||
if !isempty(path.poi)
|
for column in 1:length(header)
|
||||||
pointsOfInterest = Vector{Dict}()
|
currentColumn = Any[]
|
||||||
POI = 1
|
push!(currentColumn, header[column])
|
||||||
i = 1
|
for point in dataPoints
|
||||||
while POI <= length(path.poi) && i <= drivingCourse[end][:i]
|
push!(currentColumn, point[columnSymbols[column]])
|
||||||
if path.poi[POI] == drivingCourse[i][:s]
|
|
||||||
push!(pointsOfInterest, drivingCourse[i])
|
|
||||||
POI = POI+1
|
|
||||||
end
|
|
||||||
i = i+1
|
|
||||||
end
|
end
|
||||||
|
push!(allColumns, currentColumn)
|
||||||
|
end # for
|
||||||
|
|
||||||
if settings[:operationModeMinimumRunningTime] == true
|
# combine the columns in a data frame
|
||||||
merge!(outputDict, Dict(:pointsOfInterestMinimumRunningTime => pointsOfInterest))
|
dataFrame = DataFrame(c1=allColumns[1], c2=allColumns[2],c3=allColumns[3], c4=allColumns[4], c5=allColumns[5], c6=allColumns[6], c7=allColumns[7], c8=allColumns[8], c9=allColumns[9], c10=allColumns[10], c11=allColumns[11], c12=allColumns[12], c13=allColumns[13], c14=allColumns[14], c15=allColumns[15], c16=allColumns[16])
|
||||||
elseif settings[:operationModeMinimumEnergyConsumption] == true
|
|
||||||
merge!(outputDict, Dict(:pointsOfInterestMinimumEnergyConsumption => pointsOfInterest))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return outputDict
|
return dataFrame
|
||||||
end # function createOutputDict
|
end #createDataFrameForDrivingCourse
|
||||||
=#
|
|
||||||
|
|
Loading…
Reference in New Issue