new: interactive edit
This commit is contained in:
parent
d99771045e
commit
e5db3cd694
5 changed files with 153 additions and 1 deletions
|
@ -12,6 +12,8 @@ FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549"
|
||||||
GLMakie = "e9467ef8-e4e7-5192-8a1a-b1aee30e663a"
|
GLMakie = "e9467ef8-e4e7-5192-8a1a-b1aee30e663a"
|
||||||
Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a"
|
Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a"
|
||||||
MakieCore = "20f20a25-4f0e-4fdf-b5d1-57303727442b"
|
MakieCore = "20f20a25-4f0e-4fdf-b5d1-57303727442b"
|
||||||
|
Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7"
|
||||||
|
Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
|
||||||
YAML = "ddb6d928-2868-570f-bddf-ab3f9cf99eb6"
|
YAML = "ddb6d928-2868-570f-bddf-ab3f9cf99eb6"
|
||||||
|
|
||||||
[extras]
|
[extras]
|
||||||
|
|
|
@ -9,6 +9,40 @@ Documentation for CoordVisualize.jl
|
||||||
## Tutorial
|
## Tutorial
|
||||||
Readers are expected to be familiar with basics of julia.
|
Readers are expected to be familiar with basics of julia.
|
||||||
|
|
||||||
|
### Preparing
|
||||||
|
This will take a few minutes.
|
||||||
|
|
||||||
|
```juliarepl
|
||||||
|
julia> # type ]
|
||||||
|
|
||||||
|
(@v1.10) Pkg> activate .
|
||||||
|
|
||||||
|
(CoordVisualize) Pkg> instantiate
|
||||||
|
```
|
||||||
|
|
||||||
|
### Parse log
|
||||||
|
```juliarepl
|
||||||
|
julia> using CoordVisualize
|
||||||
|
|
||||||
|
julia> interactive_edit_log("coord_log_1.txt", "coord_log_2.txt")
|
||||||
|
...
|
||||||
|
Follow the instruction
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
### CoordVisualize
|
||||||
|
Get map image file and place it as "map.png".
|
||||||
|
|
||||||
|
```juliarepl
|
||||||
|
julia> using GLMakie, CoordVisualize
|
||||||
|
|
||||||
|
julia> tlog = include("<exported log file>");
|
||||||
|
|
||||||
|
julia> include("<path to root>/interactive_viz.jl")
|
||||||
|
```
|
||||||
|
|
||||||
|
## Low level
|
||||||
|
|
||||||
### Log structure
|
### Log structure
|
||||||
CoordVisualize.jl treats coordination trace log with some additional information,
|
CoordVisualize.jl treats coordination trace log with some additional information,
|
||||||
datetime when log was taken and supplemental note to annotate the log.
|
datetime when log was taken and supplemental note to annotate the log.
|
||||||
|
|
|
@ -106,7 +106,7 @@ fig[1:2, 2] = grid!(
|
||||||
width = options_width,
|
width = options_width,
|
||||||
)
|
)
|
||||||
|
|
||||||
tlog = vcat(CoordVisualize.parse_log.(["coord_log_5.txt", "coord_log_6.txt"])...)
|
# tlog = vcat(CoordVisualize.parse_log.(["coord_log_5.txt", "coord_log_6.txt"])...)
|
||||||
|
|
||||||
# Main
|
# Main
|
||||||
heatmap!(
|
heatmap!(
|
||||||
|
|
|
@ -3,11 +3,13 @@ module CoordVisualize
|
||||||
using Dates
|
using Dates
|
||||||
|
|
||||||
export CoordLog
|
export CoordLog
|
||||||
|
export interactive_edit_log
|
||||||
export ColorMapFuncs
|
export ColorMapFuncs
|
||||||
|
|
||||||
include("typedef.jl")
|
include("typedef.jl")
|
||||||
include("parser.jl")
|
include("parser.jl")
|
||||||
include("edit.jl")
|
include("edit.jl")
|
||||||
|
include("interactive_edit.jl")
|
||||||
include("print.jl")
|
include("print.jl")
|
||||||
include("recipes.jl")
|
include("recipes.jl")
|
||||||
include("visualize.jl")
|
include("visualize.jl")
|
||||||
|
|
114
src/interactive_edit.jl
Normal file
114
src/interactive_edit.jl
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
using Statistics
|
||||||
|
using Dates
|
||||||
|
using Printf
|
||||||
|
|
||||||
|
function interactive_edit_log(filenames...; writetofile = true)
|
||||||
|
printstyled(stdout, "[CoordLog Editor] \n", color = :blue, bold = true)
|
||||||
|
logs = CoordLog[]
|
||||||
|
printstyled(stdout, "loading log files\n", color = :blue)
|
||||||
|
for file in filenames
|
||||||
|
append!(logs, parse_log(file))
|
||||||
|
end
|
||||||
|
printstyled(stdout, "all files loaded\n", color = :blue)
|
||||||
|
edited_logs = CoordLog[]
|
||||||
|
for (i, log) in enumerate(logs)
|
||||||
|
printstyled(stdout, "LogEdit: editing log $(i) / $(length(logs))\n", color = :blue)
|
||||||
|
printstyled(stdout, "summary\n", color = :cyan)
|
||||||
|
println(
|
||||||
|
stdout,
|
||||||
|
"""
|
||||||
|
mean : $(mean(eachrow(log.coords)) .|> round |> Tuple)
|
||||||
|
start : $(log.coords[1, :] .|> round |> Tuple)
|
||||||
|
end : $(log.coords[end, :] .|> round |> Tuple)
|
||||||
|
datetime : $(Dates.format(log.logdate, DateFormat("yyyy-mm-dd HH:MM:SS")))
|
||||||
|
number of coords: $(size(log.coords)[1])
|
||||||
|
""",
|
||||||
|
)
|
||||||
|
@label ask
|
||||||
|
printstyled(stdout, "split log?(y/N): ", color = :green, italic = true)
|
||||||
|
ans = readline(stdin)
|
||||||
|
if ans == "y" || ans == "Y"
|
||||||
|
while true
|
||||||
|
maximum = size(log.coords)[1]
|
||||||
|
printstyled(
|
||||||
|
stdout,
|
||||||
|
"split at where (1 to n, n to end), max = $(maximum): ",
|
||||||
|
color = :green,
|
||||||
|
italic = true,
|
||||||
|
)
|
||||||
|
at = try
|
||||||
|
parse(UInt64, readline(stdin))
|
||||||
|
catch
|
||||||
|
printstyled("invalid input, please type number\n", color = :red)
|
||||||
|
continue
|
||||||
|
end
|
||||||
|
if at ≥ maximum
|
||||||
|
printstyled("too large number; max = $(maximum)\n", color = :red)
|
||||||
|
continue
|
||||||
|
end
|
||||||
|
if at == 0
|
||||||
|
printstyled("must be larger than 0\n", color = :red)
|
||||||
|
continue
|
||||||
|
end
|
||||||
|
print("""
|
||||||
|
summary of the first log:
|
||||||
|
mean : $(mean(eachrow(log.coords)[1:at]) .|> round |> Tuple)
|
||||||
|
start : $(log.coords[1, :] .|> round |> Tuple)
|
||||||
|
end : $(log.coords[at, :] .|> round |> Tuple)
|
||||||
|
""")
|
||||||
|
printstyled("note for the first log: ", color = :green, italic = true)
|
||||||
|
note_1 = readline(stdin)
|
||||||
|
new_log, log = split_log(log, at, note_1, "")
|
||||||
|
push!(edited_logs, new_log)
|
||||||
|
print("""
|
||||||
|
summary of the remaining log:
|
||||||
|
mean : $(mean(eachrow(log.coords)) .|> round |> Tuple)
|
||||||
|
start : $(log.coords[1, :] .|> round |> Tuple)
|
||||||
|
end : $(log.coords[end, :] .|> round |> Tuple)
|
||||||
|
datetime : $(Dates.format(log.logdate, DateFormat("yyyy-mm-dd HH:MM:SS")))
|
||||||
|
number of coords: $(size(log.coords)[1])
|
||||||
|
""")
|
||||||
|
@goto ask
|
||||||
|
end
|
||||||
|
elseif ans == "n" || ans == "N" || ans == ""
|
||||||
|
printstyled("note for the log: ", color = :green, italic = true)
|
||||||
|
note = readline()
|
||||||
|
assign_note!(log, note)
|
||||||
|
push!(edited_logs, log)
|
||||||
|
else
|
||||||
|
printstyled("invalid ans; type y or n\n", color = :red)
|
||||||
|
@goto ask
|
||||||
|
end
|
||||||
|
end
|
||||||
|
println()
|
||||||
|
printstyled("Finish editing\n", color = :blue, bold = true)
|
||||||
|
printstyled("number of logs: $(length(edited_logs))\n", color = :cyan)
|
||||||
|
printstyled("summary: length, note\n", color = :cyan)
|
||||||
|
len_ncoords = maximum(ndigits.(n_coords.(edited_logs)))
|
||||||
|
for log in edited_logs
|
||||||
|
println(" ", lpad(n_coords(log), len_ncoords), " ", log.note)
|
||||||
|
end
|
||||||
|
if writetofile
|
||||||
|
printstyled("Writing to file\n", color = :blue, bold = true)
|
||||||
|
printstyled("filename: ", color = :green, italic = true)
|
||||||
|
filename = readline()
|
||||||
|
if filename in readdir()
|
||||||
|
printstyled("$(filename) already exists.", color = :magenta)
|
||||||
|
printstyled("Are you sure to overwrite? (y/N)", color = :magenta, italic = true)
|
||||||
|
ans = readline()
|
||||||
|
if ans == "y" || ans == "Y"
|
||||||
|
elseif ans == "n" || ans == "N" || ans == ""
|
||||||
|
printstyled("Skip exporting to a file. Please export the returned log manually.\n", color = :magenta)
|
||||||
|
@goto finish
|
||||||
|
end
|
||||||
|
end
|
||||||
|
open(filename, "w") do f
|
||||||
|
println(f, "using Dates")
|
||||||
|
println(f, export_log(edited_logs))
|
||||||
|
end
|
||||||
|
printstyled("Exported log to the file: $(filename)\n", color = :blue)
|
||||||
|
end
|
||||||
|
@label finish
|
||||||
|
printstyled("Edit completed.\n", color = :blue, bold = true)
|
||||||
|
return edited_logs
|
||||||
|
end
|
Loading…
Reference in a new issue