import%20marimo%0A%0A__generated_with%20%3D%20%220.20.4%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22%2C%20auto_download%3D%5B%22html%22%5D)%0A%0Awith%20app.setup%3A%0A%20%20%20%20import%20samidare_lib%20as%20dev%0A%20%20%20%20import%20sys%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20pathlib%0A%0A%20%20%20%20this_file_path%20%3D%20pathlib.Path(__file__).parent%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20%E8%A7%A3%E6%9E%90%E6%96%B9%E6%B3%95%E3%81%AE%E3%83%87%E3%83%A2%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20marimo_lib.util%20as%20molib%0A%20%20%20%20import%20subprocess%2C%20marimo%20as%20mo%0A%0A%20%20%20%20return%20mo%2C%20molib%2C%20subprocess%0A%0A%0A%40app.function%0Adef%20comandline_arg(text%3D'test.py%20--test%201%20--debug%202')%3A%0A%20%20%20%20return%20text.split('%20')%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%81%93%E3%81%AE%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF%E3%81%A7%E3%81%AF%60samidare-lib%60%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E8%A7%A3%E6%9E%90%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E4%B8%80%E4%BE%8B%E3%82%92%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E3%83%87%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E9%9A%9B%E3%81%AB%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AF%60src%2Fsamidare_lib%2Fcore%2Fdecoder.py%60%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E3%81%93%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AF%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3%E5%BC%95%E6%95%B0%E3%81%A7%E3%80%81%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%83%87%E3%82%B3%E3%83%BC%E3%83%80%E3%83%BC%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E3%83%87%E3%82%B3%E3%83%BC%E3%83%80%E3%83%BC%E3%81%AE%E7%A8%AE%E9%A1%9E%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%81%AF%E4%BB%A5%E4%B8%8B%E3%81%A7%E7%A2%BA%E8%AA%8D%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo%2C%20subprocess)%3A%0A%20%20%20%20_result%20%3D%20subprocess.run(%0A%20%20%20%20%20%20%20%20comandline_arg(%22uv%20run%20src%2Fsamidare_lib%2Fcore%2Fdecoder.py%20--help%22)%2C%0A%20%20%20%20%20%20%20%20cwd%3Dstr(this_file_path.parent)%2C%0A%20%20%20%20%20%20%20%20check%3DTrue%2C%0A%20%20%20%20%20%20%20%20text%3DTrue%2C%0A%20%20%20%20%20%20%20%20capture_output%3DTrue%2C%0A%20%20%20%20)%0A%0A%20%20%20%20mo.md(f%22%60%60%60text%5Cn%7B_result.stdout%7D%5Cn%60%60%60%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E4%B8%8A%E8%A8%98%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%60event%60%2C%20%60pulse%60%2C%20%60v0%60%2C%20%60v1%60%E3%81%8C%E3%81%82%E3%82%8A%E3%80%81%E5%AF%BE%E5%BF%9C%E3%81%AF%E4%BB%A5%E4%B8%8B%E3%81%AE%E9%80%9A%E3%82%8A%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20%7C%20option%20%20%7C%20description%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%7C%20%3A----%3A%20%20%7C%20%3A----------------------------------------%3A%20%7C%0A%20%20%20%20%7C%20%60event%60%20%7C%20%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%83%93%E3%83%AB%E3%83%89%E7%94%A8%E3%82%B3%E3%83%BC%E3%83%89(spark%E3%81%8C%E5%BF%85%E8%A6%81)%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80%20%20%7C%0A%20%20%20%20%7C%20%60pulse%60%20%7C%20%E6%B3%A2%E5%BD%A2%E6%8A%BD%E5%87%BA%E3%82%B3%E3%83%BC%E3%83%89(spark%E3%81%8C%E5%BF%85%E8%A6%81)%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80%20%E3%80%80%E3%80%80%E3%80%80%20%7C%0A%20%20%20%20%7C%20%60v1%60%20%20%20%20%7C%20%E7%94%9F%E3%83%87%E3%83%BC%E3%82%BF%E3%83%87%E3%82%B3%E3%83%BC%E3%83%80%E3%83%BC%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80%20%7C%0A%20%20%20%20%7C%20%60v0%60%20%20%20%20%7C%20%E3%83%97%E3%83%AD%E3%83%88%E3%82%BF%E3%82%A4%E3%83%97%E7%94%9F%E3%83%87%E3%83%BC%E3%82%BF%E3%83%87%E3%82%B3%E3%83%BC%E3%83%80%E3%83%BC%EF%BC%88%E7%8F%BE%E5%9C%A8%E3%81%AF%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%AA%E3%81%84%EF%BC%89%20%7C%0A%0A%20%20%20%20%E3%81%93%E3%82%8C%E3%82%89%E3%81%AE%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%9F%E5%BE%8C%E3%81%AB%60--help%60%E3%81%BE%E3%81%9F%E3%81%AF%60-h%60%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E3%81%9D%E3%82%8C%E3%81%9E%E3%82%8C%E3%81%AE%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E5%BC%95%E6%95%B0%E3%82%82%E7%A2%BA%E8%AA%8D%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo%2C%20subprocess)%3A%0A%20%20%20%20_result%20%3D%20subprocess.run(%0A%20%20%20%20%20%20%20%20comandline_arg(%22uv%20run%20src%2Fsamidare_lib%2Fcore%2Fdecoder.py%20v1%20--help%22)%2C%0A%20%20%20%20%20%20%20%20cwd%3Dstr(this_file_path.parent)%2C%0A%20%20%20%20%20%20%20%20check%3DTrue%2C%0A%20%20%20%20%20%20%20%20text%3DTrue%2C%0A%20%20%20%20%20%20%20%20capture_output%3DTrue%2C%0A%20%20%20%20)%0A%0A%20%20%20%20mo.md(f%22%60%60%60text%5Cn%7B_result.stdout%7D%5Cn%60%60%60%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E7%94%9F%E3%83%87%E3%83%BC%E3%82%BF%E3%83%87%E3%82%B3%E3%83%BC%E3%83%89%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%81%BE%E3%81%9A%E7%94%9F%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E3%83%87%E3%82%B3%E3%83%BC%E3%83%89%E3%81%A7%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%81%AF%60README.md%60%E3%81%AB%E6%9B%B8%E3%81%84%E3%81%9F%E4%BB%A5%E4%B8%8B%E3%81%AE%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8C%E3%81%B0%E8%89%AF%E3%81%84%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20%60%60%60zsh%0A%20%20%20%20uv%20run%20python%20src%2Fsamidare_lib%2Fcore%2Fdecoder.py%20v1%20-f%20%5BFILE_PATH%5D%20%20--save%0A%20%20%20%20%60%60%60%0A%0A%20%20%20%20%E3%81%93%E3%81%AE%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF%E3%81%A7%E3%81%AF%E4%BB%A5%E4%B8%8B%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%AB%E3%81%A6%E5%90%8C%E7%AD%89%E3%81%AE%E6%93%8D%E4%BD%9C%E3%82%92%E8%A1%8C%E3%81%86%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%EF%BC%88%E5%AE%9F%E9%9A%9B%E3%81%AB%E8%A1%8C%E3%81%86%E9%9A%9B%E3%81%AF%60if%200%60%E3%82%92%60if%201%60%E3%81%B8%E5%A4%89%E6%9B%B4%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%EF%BC%89%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20binary_file_path%20%3D%20pathlib.Path('src%2Fsamidare_lib%2Fexample%2Fminitpc_demo.bin')%0A%20%20%20%20parquet_filename%20%3D%20'output%2F'%20%2B%20%20binary_file_path.stem%20%0A%20%20%20%20return%20binary_file_path%2C%20parquet_filename%0A%0A%0A%40app.cell%0Adef%20_(binary_file_path%2C%20subprocess)%3A%0A%20%20%20%20if%200%3A%0A%20%20%20%20%20%20%20%20_result%20%3D%20subprocess.run(%0A%20%20%20%20%20%20%20%20%20%20%20%20comandline_arg(f%22uv%20run%20python%20src%2Fsamidare_lib%2Fcore%2Fdecoder.py%20v1%20-f%20%7Bbinary_file_path%7D%20--save%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20cwd%3Dstr(this_file_path.parent)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20check%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20capture_output%3DTrue%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%82%A2%E3%82%A6%E3%83%88%E3%83%97%E3%83%83%E3%83%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AF%60.parquet%60%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E3%81%93%E3%81%93%E3%81%A7%E3%81%AF%60PySpark%60%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E9%96%8B%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%EF%BC%88%E3%82%82%E3%81%A1%E3%82%8D%E3%82%93%E3%81%AA%E3%81%8F%E3%81%A6%E3%82%82%E9%96%8B%E3%81%8F%E3%81%93%E3%81%A8%E3%81%AF%E5%8F%AF%E8%83%BD%E3%81%A7%E3%81%99%E3%80%82%EF%BC%89%0A%0A%20%20%20%20%E3%81%BE%E3%81%9A%E4%B8%8B%E8%A8%98%E3%81%AE%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E7%AB%8B%E3%81%A6%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20spark%20%3D%20dev.core.pulse_finder.get_spark_session()%0A%20%20%20%20return%20(spark%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%81%9D%E3%81%97%E3%81%A6%E4%BB%A5%E4%B8%8B%E3%81%AE%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%93%E3%81%A7%E4%B8%AD%E8%BA%AB%E3%81%AE%E4%B8%80%E9%83%A8%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(parquet_filename%2C%20spark)%3A%0A%20%20%20%20_df%20%3D%20dev.core.pulse_finder.load_parquet(%0A%20%20%20%20%20%20%20%20spark%2C%0A%20%20%20%20%20%20%20%20parquet_filename%20%2B%20'_raw.parquet'%0A%20%20%20%20)%0A%0A%20%20%20%20dev.util.parquetinfo.md_dump_parquet(_df%2C%20n%3D10)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E4%B8%8A%E8%A8%98%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E6%9C%80%E5%88%9D%E3%81%AE%E6%95%B0%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%81%AF%E3%82%82%E3%81%A8%E3%82%82%E3%81%A8Buffer%E3%81%AB%E5%85%A5%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E3%81%8C%E6%B5%81%E3%82%8C%E3%81%A6%E3%81%8F%E3%82%8B%E3%81%AE%E3%81%A7%E3%80%81timestamp%E3%82%92%E8%A6%8B%E3%81%A6%E3%83%AA%E3%82%BB%E3%83%83%E3%83%88%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%81%BE%E3%81%A7%E3%82%B9%E3%82%AD%E3%83%83%E3%83%97%E3%81%97%E3%81%A6%E8%AA%AD%E3%81%BF%E5%87%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20start%E3%81%8C%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%81%AE%E9%96%8B%E5%A7%8B%E4%BD%8D%E7%BD%AE%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%E4%BB%A5%E4%B8%8B%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E3%81%97%E3%81%A6%E8%AA%AD%E3%81%BF%E9%A3%9B%E3%81%B0%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(parquet_filename%2C%20spark)%3A%0A%20%20%20%20df_raw%20%3D%20dev.core.pulse_finder.load_parquet(%0A%20%20%20%20%20%20%20%20spark%2C%0A%20%20%20%20%20%20%20%20parquet_filename%20%2B%20'_raw.parquet'%2C%0A%20%20%20%20%20%20%20%20start%3D256%0A%20%20%20%20)%0A%0A%20%20%20%20dev.util.parquetinfo.md_dump_parquet(df_raw%2C%20n%3D10)%0A%20%20%20%20return%20(df_raw%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E4%B8%8A%E8%A8%98%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E7%94%9F%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E3%83%87%E3%82%B3%E3%83%BC%E3%83%89%E3%81%A7%E3%81%AF%E3%80%811%E8%A1%8C1%E3%83%87%E3%83%BC%E3%82%BF%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%81%AB%E5%AF%BE%E5%BF%9C%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%60values%60%E3%81%AE%E5%80%A4%E3%81%AF%E5%90%84%E3%83%81%E3%83%A3%E3%83%B3%E3%83%8D%E3%83%AB%E3%81%AE1%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%81%A7%E3%81%82%E3%82%8A%E3%80%81%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E7%95%AA%E5%8F%B7%E3%81%AFsample%E3%81%AB%E6%A0%BC%E7%B4%8D%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E3%81%9D%E3%81%AE%E3%81%9F%E3%82%81%E6%8F%8F%E7%94%BB%E3%81%AB%E9%9A%9B%E3%81%97%E3%80%81%E4%BB%A5%E4%B8%8B%E3%81%AE%E5%87%A6%E7%90%86%E3%82%92%E8%A1%8C%E3%81%84%E3%80%81%E5%9B%B3%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(df_raw%2C%20molib)%3A%0A%20%20%20%20_nmax%20%3D%20100000%0A%0A%20%20%20%20_df%20%3D%20df_raw.select(%22values%22%2C%22sample%22).limit(_nmax).toPandas()%0A%0A%20%20%20%20_arr_obj%20%3D_df%5B%22values%22%5D.to_numpy()%0A%20%20%20%20_sam_obj%20%3D_df%5B%22sample%22%5D.to_numpy()%0A%0A%20%20%20%20_lengths%20%3D%20np.fromiter((len(_v)%20for%20_v%20in%20_arr_obj)%2C%20dtype%3Dnp.int64%2C%20count%3Dlen(_arr_obj))%0A%20%20%20%20_inds%20%3D%20np.repeat(_sam_obj%2C%20_lengths)%0A%20%20%20%20_vals%20%3D%20np.stack(_arr_obj.tolist()).ravel()%20%0A%0A%0A%20%20%20%20%23%23%23%23%23%23%23%23%23%23%23%23%23%23%20plot%20%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%0A%20%20%20%20_fig%20%3D%20molib.plot.get_subplots_object(1%2C1)%0A%0A%20%20%20%20molib.plot.add_sub_plot(%0A%20%20%20%20%20%20%20%20_fig%2C%201%2C%201%2C%0A%20%20%20%20%20%20%20%20data%3D%5B_inds%2C%20_vals%5D%2C%0A%20%20%20%20%20%20%20%20axes_title%3D%5B'index'%2C%20'sample'%5D%2C%0A%20%20%20%20%20%20%20%20func%3Dmolib.plot.go_Heatmap%2C%0A%20%20%20%20%20%20%20%20bins%3D%5B64%2C100%5D%2C%0A%20%20%20%20%20%20%20%20xrange%3D%5B0%2C64%5D%2C%0A%20%20%20%20%20%20%20%20yrange%3D%5B0%2C1025%5D%2C%0A%20%20%20%20%20%20%20%20logz_option%3DTrue%0A%20%20%20%20)%0A%0A%20%20%20%20_fig.update_layout(height%3D500%2C%20width%3D1000)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20Pulse%E5%88%87%E3%82%8A%E5%87%BA%E3%81%97%E8%A7%A3%E6%9E%90%0A%0A%20%20%20%20%E6%AC%A1%E3%81%AB%E6%B3%A2%E5%BD%A2%E3%81%AB%E5%88%87%E3%82%8A%E5%87%BA%E3%81%97%E6%89%8B%E6%B3%95%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%A6%E3%81%84%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo%2C%20subprocess)%3A%0A%20%20%20%20_result%20%3D%20subprocess.run(%0A%20%20%20%20%20%20%20%20comandline_arg(%22uv%20run%20src%2Fsamidare_lib%2Fcore%2Fdecoder.py%20pulse%20--help%22)%2C%0A%20%20%20%20%20%20%20%20cwd%3Dstr(this_file_path.parent)%2C%0A%20%20%20%20%20%20%20%20check%3DTrue%2C%0A%20%20%20%20%20%20%20%20text%3DTrue%2C%0A%20%20%20%20%20%20%20%20capture_output%3DTrue%2C%0A%20%20%20%20)%0A%0A%20%20%20%20mo.md(f%22%60%60%60text%5Cn%7B_result.stdout%7D%5Cn%60%60%60%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%81%93%E3%81%A1%E3%82%89%E3%82%82%E5%90%8C%E6%A7%98%E3%81%AB%E3%83%87%E3%82%B3%E3%83%BC%E3%83%89%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(binary_file_path%2C%20subprocess)%3A%0A%20%20%20%20if%200%3A%0A%20%20%20%20%20%20%20%20_result%20%3D%20subprocess.run(%0A%20%20%20%20%20%20%20%20%20%20%20%20comandline_arg(f%22uv%20run%20python%20src%2Fsamidare_lib%2Fcore%2Fdecoder.py%20pulse%20-f%20%7Bbinary_file_path%7D%20--save%20--start-pos%20256%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20cwd%3Dstr(this_file_path.parent)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20check%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20capture_output%3DTrue%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(parquet_filename%2C%20spark)%3A%0A%20%20%20%20df_pulse%20%3D%20%20spark.read.parquet(%0A%20%20%20%20%20%20%20%20parquet_filename%20%2B%20'_pulse.parquet'%2C%0A%20%20%20%20)%0A%0A%20%20%20%20dev.util.parquetinfo.md_dump_parquet(df_pulse%2C%20n%3D10)%0A%20%20%20%20return%20(df_pulse%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E8%A9%A6%E3%81%97%E3%81%AB%E5%88%87%E3%82%8A%E5%87%BA%E3%81%97%E7%B5%90%E6%9E%9C%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E6%8F%8F%E7%94%BB%E3%81%97%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E4%B8%8B%E8%A8%98%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%81%A7%E3%81%AF%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%93%E3%81%A0%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%60Pandas%60%E3%81%AE%60DataFrame%60%E3%81%AB%E8%A9%B0%E3%82%81%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%E9%96%A2%E6%95%B0%E3%81%AE%E3%81%96%E3%81%A3%E3%81%8F%E3%82%8A%E3%81%A8%E3%81%97%E3%81%9F%E8%AA%AC%E6%98%8E%E3%81%AF%E4%BB%A5%E4%B8%8B%E3%81%AE%E3%81%A8%E3%81%8A%E3%82%8A%E3%81%A7%E3%81%99%E3%80%82%0A%0A%0A%20%20%20%20-%20%60.select(%22hoge%22%2C%20%22huga%22)%60%3A%20%E6%8A%BD%E5%87%BA%E3%81%99%E3%82%8B%E5%88%97%E5%90%8D%E3%82%92%E5%8F%96%E5%BE%97%0A%20%20%20%20-%20%60.limit(number)%60%3A%20%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E8%A1%8C%E6%95%B0%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(df_pulse%2C%20molib)%3A%0A%20%20%20%20_nmax%20%3D%2010000%0A%20%20%20%20_df%20%3D%20df_pulse.select(%22pulse_segment%22%2C%20%22peak%22%2C%20%22charge%22).limit(_nmax).toPandas()%0A%0A%20%20%20%20_pulse%20%3D%20_df%5B'pulse_segment'%5D.to_numpy()%0A%20%20%20%20_peak%20%3D%20_df%5B'peak'%5D.to_numpy()%0A%20%20%20%20_charge%20%3D%20_df%5B'charge'%5D.to_numpy()%0A%0A%20%20%20%20_px%20%3D%20%5B%5D%0A%20%20%20%20_py%20%3D%20%5B%5D%0A%0A%20%20%20%20for%20_i%20in%20range(_nmax)%3A%0A%20%20%20%20%20%20%20%20_py%20%2B%3D%20_pulse%5B_i%5D%0A%20%20%20%20%20%20%20%20_px%20%2B%3D%20list(np.linspace(0%2Clen(_pulse%5B_i%5D)-1%2Clen(_pulse%5B_i%5D)))%0A%0A%20%20%20%20%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%20plot%20%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%0A%20%20%20%20_fig%20%3D%20molib.plot.get_subplots_object(%0A%20%20%20%20%20%20%20%20rows%3D1%2C%0A%20%20%20%20%20%20%20%20cols%3D2%2C%0A%20%20%20%20%20%20%20%20vertical_spacing%3D0.15%2C%0A%20%20%20%20%20%20%20%20horizontal_spacing%3D0.175%2C%0A%20%20%20%20%20%20%20%20subplot_titles%3D%5B%22Pulse%22%2C%20%22peak%20vs%20charge%22%5D%0A%20%20%20%20)%0A%0A%20%20%20%20molib.plot.add_sub_plot(%0A%20%20%20%20%20%20%20%20_fig%2C%201%2C%201%2C%0A%20%20%20%20%20%20%20%20data%3D%5B_px%2C%20_py%5D%2C%0A%20%20%20%20%20%20%20%20axes_title%3D%5B'index'%2C%20'sample'%5D%2C%0A%20%20%20%20%20%20%20%20func%3Dmolib.plot.go_Heatmap%2C%0A%20%20%20%20%20%20%20%20bins%3D%5B20%2C100%5D%2C%0A%20%20%20%20%20%20%20%20xrange%3D%5B0%2C20%5D%2C%0A%20%20%20%20%20%20%20%20yrange%3D%5B-100%2C900%5D%0A%20%20%20%20)%0A%0A%20%20%20%20molib.plot.add_sub_plot(%0A%20%20%20%20%20%20%20%20_fig%2C%201%2C%202%2C%0A%20%20%20%20%20%20%20%20data%3D%5B_charge%2C%20_peak%5D%2C%0A%20%20%20%20%20%20%20%20axes_title%3D%5B'charge'%2C%20'max%20sample'%5D%2C%0A%20%20%20%20%20%20%20%20func%3Dmolib.plot.go_Heatmap%0A%20%20%20%20)%0A%0A%20%20%20%20molib.plot.align_colorbar(_fig%2C%2020)%0A%0A%20%20%20%20_fig.update_layout(height%3D500%2C%20width%3D1000%2C%20showlegend%3DTrue%2C%20title_text%3D'Demo')%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E5%8F%96%E5%BE%97%E6%B3%A2%E5%BD%A2%E3%81%AE%E6%B3%A2%E9%AB%98%E3%81%A8%E6%99%82%E9%96%93%E3%82%92%E6%95%A3%E5%B8%83%E5%9B%B3%E3%81%A8%E8%A1%A8%E7%A4%BA%E3%81%97%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(df_pulse%2C%20molib)%3A%0A%20%20%20%20_nmax%20%3D%202000%0A%20%20%20%20_df%20%3D%20df_pulse.select(%22timestamp_ns%22%2C%20%22peak%22).orderBy(%22timestamp_ns%22).limit(_nmax).toPandas()%0A%0A%20%20%20%20_t%20%3D%20_df%5B%22timestamp_ns%22%5D.to_numpy()%0A%20%20%20%20_p%20%3D%20_df%5B%22peak%22%5D.to_numpy()%0A%0A%20%20%20%20_dt%20%3D%20_t%5B1%3A%5D%20-%20_t%5B%3A-1%5D%0A%0A%20%20%20%20_fig%20%3D%20molib.plot.get_subplots_object(1%2C1)%0A%0A%20%20%20%20molib.plot.add_sub_plot(%0A%20%20%20%20%20%20%20%20_fig%2C%0A%20%20%20%20%20%20%20%20data%3D%5B_t%2C%20_p%5D%2C%0A%20%20%20%20%20%20%20%20axes_title%3D%5B'timestamp%20%5Bns%5D'%2C%20'peak'%5D%2C%0A%20%20%20%20%20%20%20%20func%3Dmolib.plot.go_Scatter%20%20%20%0A%20%20%20%20)%0A%0A%20%20%20%20_fig.update_layout(height%3D300%2C%20width%3D1000%2C%20showlegend%3DTrue%2C%20title_text%3D'Demo')%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%83%93%E3%83%AB%E3%83%89%EF%BC%88%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E7%95%AA%E5%8F%B7%E4%BB%98%E4%B8%8E%EF%BC%89%0A%0A%20%20%20%20%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%83%93%E3%83%AB%E3%83%89%E3%81%AF%60event%60%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A7%E8%A1%8C%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E3%81%93%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%81%A7%E8%A1%8C%E3%82%8F%E3%82%8C%E3%82%8B%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%83%93%E3%83%AB%E3%83%89%E3%81%AF%E5%8E%B3%E5%AF%86%E3%81%AB%E3%81%AF%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E7%95%AA%E5%8F%B7%E3%82%92%E6%96%B0%E3%81%9F%E3%81%AA%E5%88%97%E3%81%A8%E3%81%97%E3%81%A6%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AB%E5%AF%BE%E5%BF%9C%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E7%95%AA%E5%8F%B7%E3%81%AE%E6%8C%AF%E3%82%8A%E6%96%B9%E3%81%AF%E3%80%81%E6%99%82%E9%96%93%E3%81%A7%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E3%82%BD%E3%83%BC%E3%83%88%E3%81%97%E3%81%9F%E3%81%AE%E3%81%A1%E3%81%AB%E3%80%81%E7%9B%B4%E5%89%8D%E3%83%87%E3%83%BC%E3%82%BF%E3%81%A8%E3%81%AE%E6%99%82%E9%96%93%E5%B7%AE%E3%82%92%E8%A6%8B%E3%81%AA%E3%81%8C%E3%82%89%E3%80%81%E4%B8%80%E5%AE%9A%E3%81%AE%E5%80%A4%E3%82%92%E8%B6%85%E3%81%88%E3%82%8B%E3%81%A8%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E7%95%AA%E5%8F%B7%E3%82%92%E6%9B%B4%E6%96%B0%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo%2C%20subprocess)%3A%0A%20%20%20%20_result%20%3D%20subprocess.run(%0A%20%20%20%20%20%20%20%20comandline_arg(%22uv%20run%20src%2Fsamidare_lib%2Fcore%2Fdecoder.py%20event%20--help%22)%2C%0A%20%20%20%20%20%20%20%20cwd%3Dstr(this_file_path.parent)%2C%0A%20%20%20%20%20%20%20%20check%3DTrue%2C%0A%20%20%20%20%20%20%20%20text%3DTrue%2C%0A%20%20%20%20%20%20%20%20capture_output%3DTrue%2C%0A%20%20%20%20)%0A%0A%20%20%20%20mo.md(f%22%60%60%60text%5Cn%7B_result.stdout%7D%5Cn%60%60%60%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(binary_file_path%2C%20subprocess)%3A%0A%20%20%20%20if%200%3A%0A%20%20%20%20%20%20%20%20_result%20%3D%20subprocess.run(%0A%20%20%20%20%20%20%20%20%20%20%20%20comandline_arg(f%22uv%20run%20python%20src%2Fsamidare_lib%2Fcore%2Fdecoder.py%20event%20-f%20%7Bbinary_file_path%7D%20--save%20--threshold%203e6%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20cwd%3Dstr(this_file_path.parent)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20check%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20capture_output%3DTrue%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(parquet_filename%2C%20spark)%3A%0A%20%20%20%20df_event%20%3D%20%20spark.read.parquet(%0A%20%20%20%20%20%20%20%20parquet_filename%20%2B%20'_event.parquet'%2C%0A%20%20%20%20)%0A%0A%20%20%20%20dev.util.parquetinfo.md_dump_parquet(df_event%2C%20n%3D10)%0A%20%20%20%20return%20(df_event%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E4%BB%98%E4%B8%8E%E3%81%97%E3%81%9F%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E7%95%AA%E5%8F%B7%E3%81%A8%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%97%E3%82%92%E7%9B%B8%E9%96%A2%E3%82%92%E8%A6%8B%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%97%E3%82%87%E3%81%86%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(df_event%2C%20molib)%3A%0A%20%20%20%20_nmax%20%3D%20200%0A%0A%20%20%20%20_df%20%3D%20df_event.select(%22timestamp_ns%22%2C%20%22event_id%22).orderBy(%22timestamp_ns%22).limit(_nmax).toPandas()%0A%0A%20%20%20%20_x%20%3D%20_df%5B%22timestamp_ns%22%5D.to_numpy()%20%2F%201e9%0A%20%20%20%20_y%20%3D%20_df%5B%22event_id%22%5D.to_numpy()%0A%0A%20%20%20%20_fig%20%3D%20molib.plot.get_subplots_object(1%2C1)%0A%0A%20%20%20%20molib.plot.add_sub_plot(%0A%20%20%20%20%20%20%20%20_fig%2C%0A%20%20%20%20%20%20%20%20data%3D%5B_x%2C%20_y%5D%2C%0A%20%20%20%20%20%20%20%20axes_title%3D%5B'timestamp%20%5Bs%5D'%2C%20'event_id'%5D%2C%0A%20%20%20%20%20%20%20%20func%3Dmolib.plot.go_Scatter%20%20%20%0A%20%20%20%20)%0A%0A%20%20%20%20_fig.update_layout(height%3D300%2C%20width%3D1000%2C%20title_text%3D'Demo')%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
a07a4793299e87132df73edb73a27ad4