From 99094e2ecd6cad062fe5ce04a45386d16863ed32 Mon Sep 17 00:00:00 2001 From: Wataru Otsubo Date: Wed, 2 Oct 2024 23:37:28 +0900 Subject: [PATCH] new: notebook: stats on psboards with multiple skew measurements --- docs/src/assets/skew_multimeasure_stats.html | 17 + examples/clock_skew_stats.svg | 922 +++++++++++++++++++ examples/skew_multimeasure_stats.jl | 279 ++++++ 3 files changed, 1218 insertions(+) create mode 100644 docs/src/assets/skew_multimeasure_stats.html create mode 100644 examples/clock_skew_stats.svg create mode 100644 examples/skew_multimeasure_stats.jl diff --git a/docs/src/assets/skew_multimeasure_stats.html b/docs/src/assets/skew_multimeasure_stats.html new file mode 100644 index 0000000..d7a6705 --- /dev/null +++ b/docs/src/assets/skew_multimeasure_stats.html @@ -0,0 +1,17 @@ + + + + + + + +
\ No newline at end of file diff --git a/examples/clock_skew_stats.svg b/examples/clock_skew_stats.svg new file mode 100644 index 0000000..db3a99c --- /dev/null +++ b/examples/clock_skew_stats.svg @@ -0,0 +1,922 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/skew_multimeasure_stats.jl b/examples/skew_multimeasure_stats.jl new file mode 100644 index 0000000..a87a381 --- /dev/null +++ b/examples/skew_multimeasure_stats.jl @@ -0,0 +1,279 @@ +### A Pluto.jl notebook ### +# v0.19.46 + +using Markdown +using InteractiveUtils + +# โ•”โ•โ•ก 7c69d12c-80a5-11ef-2674-e155a3483342 +begin + using Pkg + Pkg.activate("..") + Pkg.status() + true || include("../src/PSBoardDataBase.jl") +end + +# โ•”โ•โ•ก effa7ed9-2ac4-4468-a474-e2bb662580fe +begin + using PSBoardDataBase + using SQLite + using DataFrames + using DBInterface + using Tables + using CairoMakie + using Statistics + using PlutoUI +end + +# โ•”โ•โ•ก f25e7e08-8a73-4cac-ac7c-d310725c558d +md""" +# Detailed research on clock skew measurement +- distribution of clock skews +- consistency of multiple measurement on the same board +""" + +# โ•”โ•โ•ก 1a6322d4-9deb-4709-aa2e-df7d8be5b16f +TableOfContents() + +# โ•”โ•โ•ก 11537f91-e16b-45f0-9768-6df842371d36 +db = SQLite.DB("../psboard_qaqc.db") + +# โ•”โ•โ•ก 268d3015-b8d3-48d9-b74a-062e258e0ec1 +SQLite.tables(db) + +# โ•”โ•โ•ก 62105832-df1f-4834-8da6-c542e22207d1 +md""" +## Single runs +""" + +# โ•”โ•โ•ก dea6f143-7916-4765-92f6-2bfb97a72835 +qaqc_single_results = + DBInterface.execute(db, sql"select * from qaqc_single_run_results") |> DataFrame + +# โ•”โ•โ•ก 41543c0c-d7c4-447b-a268-0d356c88d92c +md""" +## PS Board list +""" + +# โ•”โ•โ•ก 633ecdee-7e2f-4de8-833a-21cd0351c1f1 +DBInterface.execute( + db, + sql""" + select * from ps_boards + """, +) |> DataFrame + +# โ•”โ•โ•ก 87f1966e-3b07-4f9d-8fc4-7b7aa4319d50 +md""" +## Run list +""" + +# โ•”โ•โ•ก f379d43c-9300-41f4-b0fc-3c9d749e3105 +qaqc_runs = DBInterface.execute(db, sql"select * from qaqc_runs") |> DataFrame + +# โ•”โ•โ•ก 33e099bc-ac4b-4b5f-88e7-20f4463c98ef +md""" +## Positions +""" + +# โ•”โ•โ•ก 0e13f848-0efb-4775-9e3e-518b32588a79 +qaqc_positions = DBInterface.execute(db, sql"select * from qaqc_positions") |> DataFrame + +# โ•”โ•โ•ก 181c3fe6-d087-42e2-b175-3fb84c42e3e8 +position_id_skew_map = select(qaqc_positions, [:id, :rising_ns]) |> Tables.rowtable |> Dict + +# โ•”โ•โ•ก 322cb530-65a5-4973-86f8-01ccc2439cc4 +md""" +# Clock Analysis +main part +""" + +# โ•”โ•โ•ก c1caca5f-4cfd-4f22-82b4-7925002359e6 +clk_files = + readdir("../test/input/slavelogs/main/", join = true) |> + filter(endswith("_clk.txt")) |> + filter(!contains("nagoya")) |> + filter(!contains("630_190")) + +# โ•”โ•โ•ก 3e5607fd-2a8a-4a1a-9e7b-3f23ef216fad +""" +Get `(psbid, runid)`. +""" +function parse_filename(filename::AbstractString) + m = match(r"(?\d+)_(?\d+)_clk\.txt", filename) + parse(Int64, m[:psbid]), parse(Int64, m[:runid]) +end + +# โ•”โ•โ•ก c1b9c0c3-00f8-4199-b07f-8888f1be625c +parse_filename("190_23_clk.txt") + +# โ•”โ•โ•ก d6d04013-e0e4-49d5-a450-07ae164bfaa3 +# Get skew and rise up time from clock measurement files +# Use measurements recorded in qaqc_single_results +df_rawskews = + clk_files .|> + ( + file -> begin + skew_width = PSBoardDataBase.ClockParser.get_skew_and_riseup(file) + psbid, runid = parse_filename(file) + (psbid = psbid, runid = runid, skew = skew_width[1], width = skew_width[2]) + end + ) |> + filter( + x -> + filter( + [:psboard_id, :runid] => + ((psbid, runid) -> (psbid == x.psbid && runid == x.runid)), + qaqc_single_results, + ) |> !isempty, + ) |> + DataFrame + +# โ•”โ•โ•ก d7541b93-4c49-4dcd-bda0-91e447f44596 +# substract result of measurements of position dependency +df_skews = let + df = leftjoin( + df_rawskews, + @view(qaqc_single_results[!, [:psboard_id, :runid, :position]]), + on = [:psbid => :psboard_id, :runid], + ) + leftjoin!(df, @view(qaqc_positions[!, [:id, :rising_ns]]), on = [:position => :id]) + transform!(df, [:skew, :rising_ns] => ByRow((x, y) -> x - y) => :skew) + select!(df, Not(:rising_ns)) + select!(df, Not(:position)) +end + +# โ•”โ•โ•ก 420dce0e-4757-48d9-84ec-7ddfac2fdff6 +stephist(df_skews.width |> skipmissing |> collect) + +# โ•”โ•โ•ก d082e07c-3b42-4362-bebf-63356979a49b +gdf_skews_on_psbid = groupby(df_skews, :psbid) + +# โ•”โ•โ•ก 25688d24-5aee-43d3-aff9-b9efa0556070 +combine(nrow, gdf_skews_on_psbid) + +# โ•”โ•โ•ก 239a808c-0411-4542-ae68-6ae6af333bd2 +df_nrow_ordered = let + df = combine(nrow, gdf_skews_on_psbid) + sort!(df, :nrow, rev = true) +end + +# โ•”โ•โ•ก 8e57bde1-5f97-483d-906e-8ebfb65016d0 +@view(df_nrow_ordered[findall(>(1), df_nrow_ordered.nrow), :]) + +# โ•”โ•โ•ก 92c2ac3f-8034-4e9e-aadb-8bb166fbc948 +df_skew_stats = let + df = combine( + gdf_skews_on_psbid, + sdf -> begin + if nrow(sdf) == 1 + (; mean_skew = mean(sdf.skew), std_skew = missing, n = 1) + else + (; mean_skew = mean(sdf.skew), std_skew = std(sdf.skew), n = nrow(sdf)) + end + end, + ) + dropmissing!(df) + df +end + +# โ•”โ•โ•ก 893253c3-f0b2-401f-b892-b23291bcf5c1 +fig_skew_stats = let + fig, ax, sc = scatter( + df_skew_stats.mean_skew, + df_skew_stats.std_skew, + marker = :x, + color = (Makie.wong_colors()[1], 0.8), + axis = (title = "skew mean vs std", xlabel = "mean", ylabel = "std"), + ) + text!( + ax, + df_skew_stats.mean_skew, + df_skew_stats.std_skew, + text = string.(df_skew_stats.psbid), + color = (:gray, 0.5), + ) + fig +end + +# โ•”โ•โ•ก 6467dcaa-6bd6-45c7-8c08-b310a09b8b0b +save("clock_skew_stats.svg", fig_skew_stats) + +# โ•”โ•โ•ก 79e2f5d8-4609-4e9f-949e-6dc1f88c0b19 +df_skew_stats_abnormals = + filter([:mean_skew, :std_skew] => ((m, s) -> m > -5 && s > 1), df_skew_stats) + +# โ•”โ•โ•ก d607e10e-854f-4652-9a34-9e22a188e315 +let + df = df_skew_stats_abnormals + fig, ax, sc = scatter( + df.mean_skew, + df.std_skew, + marker = :x, + color = (Makie.wong_colors()[1], 0.8), + axis = (title = "skew mean vs std", xlabel = "mean", ylabel = "std"), + ) + text!( + ax, + df.mean_skew, + df.std_skew, + text = string.(df.psbid) .* "," .* string.(df.n), + color = (:gray, 0.7), + ) + fig +end + +# โ•”โ•โ•ก 2795fd06-2f59-4e5b-829d-a8e428646790 +md""" +## ๅˆ†ๆ•ฃใŒ็•ฐๅธธใซๅคงใใ„ใ‚„ใค +ๅŸบๆœฌ็š„ใซไบˆๆƒณ้€šใ‚Šใ€ๅˆ†ๆ•ฃใฏๅฐใ•ใ่ค‡ๆ•ฐๅ›žใฎๆธฌๅฎšใงๆ•ดๅˆ็š„ใช็ตๆžœใŒๅพ—ใ‚‰ใ‚Œใฆใ„ใ‚‹ใŒใ€ใ„ใใคใ‹ไพ‹ๅค–ใŒใ‚ใฃใŸใ€‚ + +ใฏใ˜ใ‚ใฏpsbid 127(4ๅ›žๆธฌๅฎš)ใŒๅซใพใ‚Œใฆใ„ใŸใŒใ€ใ“ใ‚Œใฏใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใฎ็ทจ้›†ใƒŸใ‚นใงใ‚ใ‚‹ใ“ใจใŒใ‚ใ‹ใ‚Šใ€ไฟฎๆญฃใ—ใŸ็ตๆžœใ€ๆถˆใˆใŸใ€‚ + +### psbid: 291 +- run: 83, 94 +- 83ใงcommunication error(SFPๅŠๆŠœใ‘) +### psbid: 460 +- run: 105, 132 +- psbid 444ใจๅŒใ˜ใ้›ปๆบใฎๆŠœใๅทฎใ—ใซใ‚ˆใฃใฆใ‚ฏใƒญใƒƒใ‚ฏใฎ0ใจ1000ใŒ็นฐใ‚Š่ฟ”ใ•ใ‚ŒใŸใƒ‘ใ‚ฟใƒผใƒณ +- ่ฟฝ่ฉฆใซ้€ใ‚‰ใ‚Œใฆใ‚‹ +### psbid: 545 (**ๅ•้กŒใฎ**) +- run: 126, 132 +- ใฉใกใ‚‰ใ‚‚ๆธฌๅฎš็ตๆžœ่‡ชไฝ“ใซใฏๅค‰ใชใจใ“ใ‚ใฏใชใ„ + - ใฉใกใ‚‰ใ‚‚1ๅ›žใ ใ‘็ซ‹ใกไธŠใŒใ‚ŠใŒใ‚ใ‚‹ + - ็ซ‹ใกไธŠใŒใ‚Šใ‚‚ใใ‚Œใปใฉ้•ทใใชใ„ +- 126ใŒ้›ปๆบใŒไธๅฎ‰ๅฎšใชใจใใ ใฃใŸใ‹ใ‚‚ใ—ใ‚Œใชใ„ใŒใ€่จ˜้ŒฒใŒใชใ„ +""" + +# โ•”โ•โ•ก Cell order: +# โ•Ÿโ”€f25e7e08-8a73-4cac-ac7c-d310725c558d +# โ• โ•7c69d12c-80a5-11ef-2674-e155a3483342 +# โ• โ•effa7ed9-2ac4-4468-a474-e2bb662580fe +# โ• โ•1a6322d4-9deb-4709-aa2e-df7d8be5b16f +# โ• โ•11537f91-e16b-45f0-9768-6df842371d36 +# โ• โ•268d3015-b8d3-48d9-b74a-062e258e0ec1 +# โ•Ÿโ”€62105832-df1f-4834-8da6-c542e22207d1 +# โ• โ•dea6f143-7916-4765-92f6-2bfb97a72835 +# โ•Ÿโ”€41543c0c-d7c4-447b-a268-0d356c88d92c +# โ• โ•633ecdee-7e2f-4de8-833a-21cd0351c1f1 +# โ•Ÿโ”€87f1966e-3b07-4f9d-8fc4-7b7aa4319d50 +# โ• โ•f379d43c-9300-41f4-b0fc-3c9d749e3105 +# โ•Ÿโ”€33e099bc-ac4b-4b5f-88e7-20f4463c98ef +# โ• โ•0e13f848-0efb-4775-9e3e-518b32588a79 +# โ• โ•181c3fe6-d087-42e2-b175-3fb84c42e3e8 +# โ•Ÿโ”€322cb530-65a5-4973-86f8-01ccc2439cc4 +# โ• โ•c1caca5f-4cfd-4f22-82b4-7925002359e6 +# โ• โ•3e5607fd-2a8a-4a1a-9e7b-3f23ef216fad +# โ• โ•c1b9c0c3-00f8-4199-b07f-8888f1be625c +# โ• โ•d6d04013-e0e4-49d5-a450-07ae164bfaa3 +# โ• โ•d7541b93-4c49-4dcd-bda0-91e447f44596 +# โ• โ•420dce0e-4757-48d9-84ec-7ddfac2fdff6 +# โ• โ•d082e07c-3b42-4362-bebf-63356979a49b +# โ• โ•25688d24-5aee-43d3-aff9-b9efa0556070 +# โ• โ•239a808c-0411-4542-ae68-6ae6af333bd2 +# โ• โ•8e57bde1-5f97-483d-906e-8ebfb65016d0 +# โ• โ•92c2ac3f-8034-4e9e-aadb-8bb166fbc948 +# โ• โ•893253c3-f0b2-401f-b892-b23291bcf5c1 +# โ• โ•6467dcaa-6bd6-45c7-8c08-b310a09b8b0b +# โ• โ•79e2f5d8-4609-4e9f-949e-6dc1f88c0b19 +# โ• โ•d607e10e-854f-4652-9a34-9e22a188e315 +# โ• โ•2795fd06-2f59-4e5b-829d-a8e428646790