From 926268733ca9b31e4fcec41f1b790b763c0de4d8 Mon Sep 17 00:00:00 2001 From: Ayzen Date: Fri, 26 Sep 2025 13:00:05 +0300 Subject: [PATCH] added functionality, save buttons etc --- vna_system/api/endpoints/settings.py | 117 + vna_system/binary_input/current_input.bin | 2 +- vna_system/calibration/current_calibration | 1 + .../sdbsd/calibration_info.json | 18 + .../sdbsd/load.json | 4007 +++++++++++++++++ .../sdbsd/load_metadata.json | 16 + .../sdbsd/open.json | 4007 +++++++++++++++++ .../sdbsd/open_metadata.json | 16 + .../sdbsd/short.json | 4007 +++++++++++++++++ .../sdbsd/short_metadata.json | 16 + vna_system/core/processors/base_processor.py | 2 +- .../processors/configs/magnitude_config.json | 10 +- .../core/processors/configs/phase_config.json | 4 +- .../configs/smith_chart_config.json | 8 +- .../implementations/magnitude_processor.py | 37 + .../core/visualization/magnitude_chart.py | 264 ++ vna_system/web_ui/static/css/components.css | 175 + vna_system/web_ui/static/js/main.js | 36 - vna_system/web_ui/static/js/modules/charts.js | 338 +- .../web_ui/static/js/modules/settings.js | 650 +++ vna_system/web_ui/static/js/modules/ui.js | 15 +- vna_system/web_ui/templates/index.html | 58 +- 22 files changed, 13689 insertions(+), 115 deletions(-) create mode 120000 vna_system/calibration/current_calibration create mode 100644 vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/calibration_info.json create mode 100644 vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/load.json create mode 100644 vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/load_metadata.json create mode 100644 vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/open.json create mode 100644 vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/open_metadata.json create mode 100644 vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/short.json create mode 100644 vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/short_metadata.json create mode 100644 vna_system/core/visualization/magnitude_chart.py diff --git a/vna_system/api/endpoints/settings.py b/vna_system/api/endpoints/settings.py index 0ecceef..bc3a0a1 100644 --- a/vna_system/api/endpoints/settings.py +++ b/vna_system/api/endpoints/settings.py @@ -1,8 +1,10 @@ from fastapi import APIRouter, HTTPException from typing import List +from pathlib import Path import vna_system.core.singletons as singletons from vna_system.core.settings.calibration_manager import CalibrationStandard +from vna_system.core.visualization.magnitude_chart import generate_standards_magnitude_plots, generate_combined_standards_plot from vna_system.api.models.settings import ( PresetModel, CalibrationModel, @@ -297,5 +299,120 @@ async def get_current_calibration(): "standards": [s.value for s in current_calib.standards.keys()], "is_complete": current_calib.is_complete() } + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) + + +@router.get("/calibration/{calibration_name}/standards-plots") +async def get_calibration_standards_plots(calibration_name: str, preset_filename: str = None): + """Get magnitude plots for all standards in a calibration set""" + try: + # Get preset + preset = None + if preset_filename: + presets = singletons.settings_manager.get_available_presets() + preset = next((p for p in presets if p.filename == preset_filename), None) + if not preset: + raise HTTPException(status_code=404, detail=f"Preset not found: {preset_filename}") + else: + preset = singletons.settings_manager.get_current_preset() + if not preset: + raise HTTPException(status_code=400, detail="No current preset selected") + + # Get calibration directory + calibration_manager = singletons.settings_manager.calibration_manager + calibration_dir = calibration_manager._get_preset_calibration_dir(preset) / calibration_name + + if not calibration_dir.exists(): + raise HTTPException(status_code=404, detail=f"Calibration not found: {calibration_name}") + + # Generate plots for each standard + individual_plots = generate_standards_magnitude_plots(calibration_dir, preset) + + return { + "calibration_name": calibration_name, + "preset": { + "filename": preset.filename, + "mode": preset.mode.value + }, + "individual_plots": individual_plots + } + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) + + +@router.get("/working-calibration/standards-plots") +async def get_working_calibration_standards_plots(): + """Get magnitude plots for standards in current working calibration""" + try: + working_calib = singletons.settings_manager.get_current_working_calibration() + + if not working_calib: + raise HTTPException(status_code=404, detail="No working calibration active") + + # Check if there are any standards captured + if not working_calib.standards: + raise HTTPException(status_code=404, detail="No standards captured in working calibration") + + # Generate plots directly from in-memory sweep data + from vna_system.core.visualization.magnitude_chart import generate_magnitude_plot_from_sweep_data + + individual_plots = {} + standard_colors = { + 'open': '#2ca02c', # Green + 'short': '#d62728', # Red + 'load': '#ff7f0e', # Orange + 'through': '#1f77b4' # Blue + } + + for standard, sweep_data in working_calib.standards.items(): + try: + # Generate plot for this standard + plot_config = generate_magnitude_plot_from_sweep_data(sweep_data, working_calib.preset) + + if 'error' not in plot_config: + # Customize color and title for this standard + if plot_config.get('data'): + plot_config['data'][0]['line']['color'] = standard_colors.get(standard.value, '#1f77b4') + plot_config['data'][0]['name'] = f'{standard.value.upper()} Standard' + plot_config['layout']['title'] = f'{standard.value.upper()} Standard Magnitude (Working)' + + # Include raw sweep data for download + plot_config['raw_sweep_data'] = { + 'sweep_number': sweep_data.sweep_number, + 'timestamp': sweep_data.timestamp, + 'total_points': sweep_data.total_points, + 'points': sweep_data.points, # Raw complex data points + 'file_path': None # No file path for working calibration + } + + # Add frequency information + plot_config['frequency_info'] = { + 'start_freq': working_calib.preset.start_freq, + 'stop_freq': working_calib.preset.stop_freq, + 'points': working_calib.preset.points, + 'bandwidth': working_calib.preset.bandwidth + } + + individual_plots[standard.value] = plot_config + else: + individual_plots[standard.value] = plot_config + + except Exception as e: + individual_plots[standard.value] = {'error': f'Failed to generate plot for {standard.value}: {str(e)}'} + + if not individual_plots: + raise HTTPException(status_code=404, detail="No valid plots generated for working calibration") + + return { + "calibration_name": "Working Calibration", + "preset": { + "filename": working_calib.preset.filename, + "mode": working_calib.preset.mode.value + }, + "individual_plots": individual_plots, + "is_working": True, + "is_complete": working_calib.is_complete() + } except Exception as e: raise HTTPException(status_code=500, detail=str(e)) \ No newline at end of file diff --git a/vna_system/binary_input/current_input.bin b/vna_system/binary_input/current_input.bin index e701777..7f4ad93 120000 --- a/vna_system/binary_input/current_input.bin +++ b/vna_system/binary_input/current_input.bin @@ -1 +1 @@ -config_inputs/s21_start100_stop8800_points1000_bw1khz.bin \ No newline at end of file +config_inputs/s11_start100_stop8800_points1000_bw1khz.bin \ No newline at end of file diff --git a/vna_system/calibration/current_calibration b/vna_system/calibration/current_calibration new file mode 120000 index 0000000..ef3d690 --- /dev/null +++ b/vna_system/calibration/current_calibration @@ -0,0 +1 @@ +s11_start100_stop8800_points1000_bw1khz/lol \ No newline at end of file diff --git a/vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/calibration_info.json b/vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/calibration_info.json new file mode 100644 index 0000000..adeebd6 --- /dev/null +++ b/vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/calibration_info.json @@ -0,0 +1,18 @@ +{ + "preset": { + "filename": "s11_start100_stop8800_points1000_bw1khz.bin", + "mode": "s11", + "start_freq": 100000000.0, + "stop_freq": 8800000000.0, + "points": 1000, + "bandwidth": 1000.0 + }, + "calibration_name": "sdbsd", + "standards": [ + "open", + "short", + "load" + ], + "created_timestamp": "2025-09-25T17:53:37.990976", + "is_complete": true +} \ No newline at end of file diff --git a/vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/load.json b/vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/load.json new file mode 100644 index 0000000..ca2e076 --- /dev/null +++ b/vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/load.json @@ -0,0 +1,4007 @@ +{ + "sweep_number": 15, + "timestamp": 1758812011.9188073, + "points": [ + [ + -2.673217296600342, + 0.4512907862663269 + ], + [ + -2.665073871612549, + 0.5133022665977478 + ], + [ + -2.6551756858825684, + 0.5756774544715881 + ], + [ + -2.64634370803833, + 0.6346701979637146 + ], + [ + -2.633944272994995, + 0.696489691734314 + ], + [ + -3.4019415378570557, + 0.9302100539207458 + ], + [ + -3.389425277709961, + 1.0083415508270264 + ], + [ + -3.372135877609253, + 1.0859055519104004 + ], + [ + -3.3553402423858643, + 1.155614972114563 + ], + [ + -3.3359663486480713, + 1.2334531545639038 + ], + [ + -3.306973934173584, + 1.310014009475708 + ], + [ + -3.286562442779541, + 1.3842096328735352 + ], + [ + -3.2593376636505127, + 1.459410548210144 + ], + [ + -3.231968879699707, + 1.5364903211593628 + ], + [ + -3.207106590270996, + 1.6131649017333984 + ], + [ + -3.1780242919921875, + 1.691017985343933 + ], + [ + -3.143876314163208, + 1.762141227722168 + ], + [ + -3.1144514083862305, + 1.832316279411316 + ], + [ + -3.075540065765381, + 1.9065582752227783 + ], + [ + -3.045396089553833, + 1.9892233610153198 + ], + [ + -3.004087448120117, + 2.057631254196167 + ], + [ + -2.9725677967071533, + 2.1278488636016846 + ], + [ + -2.922971487045288, + 2.2008979320526123 + ], + [ + -2.8785359859466553, + 2.271735668182373 + ], + [ + -2.841251850128174, + 2.3500897884368896 + ], + [ + -2.7972447872161865, + 2.4173953533172607 + ], + [ + -2.7571051120758057, + 2.4902172088623047 + ], + [ + -2.7069694995880127, + 2.560795783996582 + ], + [ + -2.6598193645477295, + 2.637704849243164 + ], + [ + -2.6044840812683105, + 2.704846143722534 + ], + [ + -2.555950880050659, + 2.7695508003234863 + ], + [ + -2.5035266876220703, + 2.8382163047790527 + ], + [ + -2.454235076904297, + 2.9061532020568848 + ], + [ + -2.397143840789795, + 2.9678714275360107 + ], + [ + -2.3363265991210938, + 3.031165838241577 + ], + [ + -2.2698230743408203, + 3.1038804054260254 + ], + [ + -2.205136775970459, + 3.168505907058716 + ], + [ + -2.13141131401062, + 3.229163646697998 + ], + [ + -2.057859182357788, + 3.291855573654175 + ], + [ + -1.9898768663406372, + 3.3575809001922607 + ], + [ + -1.9195561408996582, + 3.42008113861084 + ], + [ + -1.8464815616607666, + 3.4754629135131836 + ], + [ + -1.7781540155410767, + 3.536863088607788 + ], + [ + -1.7023473978042603, + 3.5913496017456055 + ], + [ + -1.6166030168533325, + 3.6510469913482666 + ], + [ + -1.5332281589508057, + 3.7066407203674316 + ], + [ + -1.4462292194366455, + 3.761141300201416 + ], + [ + -1.3623262643814087, + 3.813044786453247 + ], + [ + -1.2761383056640625, + 3.8671629428863525 + ], + [ + -1.182741403579712, + 3.923182487487793 + ], + [ + -1.0961915254592896, + 3.9692749977111816 + ], + [ + -0.9914161562919617, + 4.016857624053955 + ], + [ + -0.8981499075889587, + 4.05409049987793 + ], + [ + -0.8016985058784485, + 4.106527328491211 + ], + [ + -0.7038425207138062, + 4.143761157989502 + ], + [ + -0.6027393341064453, + 4.187000274658203 + ], + [ + -0.5043274164199829, + 4.22170877456665 + ], + [ + -0.3951490819454193, + 4.255585670471191 + ], + [ + -0.2898872196674347, + 4.292341232299805 + ], + [ + -0.17667672038078308, + 4.315240383148193 + ], + [ + -0.05878085270524025, + 4.344834804534912 + ], + [ + 0.05510986968874931, + 4.3665242195129395 + ], + [ + 0.1751548945903778, + 4.386200904846191 + ], + [ + 0.30267906188964844, + 4.3997344970703125 + ], + [ + 0.41505417227745056, + 4.406675815582275 + ], + [ + 0.547288715839386, + 4.416601181030273 + ], + [ + 0.6576831340789795, + 4.4264702796936035 + ], + [ + 0.788292646408081, + 4.427875995635986 + ], + [ + 0.9257861971855164, + 4.441156387329102 + ], + [ + 1.0534604787826538, + 4.4411516189575195 + ], + [ + 1.1900743246078491, + 4.439908981323242 + ], + [ + 1.319687843322754, + 4.4210205078125 + ], + [ + 1.4610153436660767, + 4.40020751953125 + ], + [ + 1.5936952829360962, + 4.383902072906494 + ], + [ + 1.730010747909546, + 4.354869365692139 + ], + [ + 1.8624916076660156, + 4.324793338775635 + ], + [ + 1.9989408254623413, + 4.291281700134277 + ], + [ + 2.133209466934204, + 4.26017427444458 + ], + [ + 2.25996470451355, + 4.208616256713867 + ], + [ + 2.404275417327881, + 4.15916633605957 + ], + [ + 2.5381455421447754, + 4.108997344970703 + ], + [ + 2.6621439456939697, + 4.050101280212402 + ], + [ + 2.7834889888763428, + 3.986729621887207 + ], + [ + 2.9101955890655518, + 3.920388698577881 + ], + [ + 3.034498691558838, + 3.850393533706665 + ], + [ + 3.150449275970459, + 3.779520034790039 + ], + [ + 3.26474928855896, + 3.7013659477233887 + ], + [ + 3.3860156536102295, + 3.614885091781616 + ], + [ + 3.503526449203491, + 3.5273404121398926 + ], + [ + 3.6102938652038574, + 3.4375672340393066 + ], + [ + 3.7250871658325195, + 3.329005002975464 + ], + [ + 3.829686164855957, + 3.2239835262298584 + ], + [ + 3.942948341369629, + 3.1122004985809326 + ], + [ + 4.044544219970703, + 2.991401195526123 + ], + [ + 4.156854152679443, + 2.874344825744629 + ], + [ + 4.258325099945068, + 2.7470521926879883 + ], + [ + 4.347515106201172, + 2.620436906814575 + ], + [ + 4.440965175628662, + 2.4801292419433594 + ], + [ + 4.518580913543701, + 2.3375678062438965 + ], + [ + 4.597217559814453, + 2.198314666748047 + ], + [ + 4.669816970825195, + 2.053767681121826 + ], + [ + 4.733886241912842, + 1.9050624370574951 + ], + [ + 4.793951034545898, + 1.7443362474441528 + ], + [ + 4.85295295715332, + 1.590718150138855 + ], + [ + 4.900643348693848, + 1.429274082183838 + ], + [ + 4.944105625152588, + 1.2695434093475342 + ], + [ + 4.981553077697754, + 1.1005842685699463 + ], + [ + 5.010657787322998, + 0.940142810344696 + ], + [ + 5.036510944366455, + 0.7719680070877075 + ], + [ + 5.057565212249756, + 0.5982644557952881 + ], + [ + 5.075659275054932, + 0.4346039891242981 + ], + [ + 5.084000587463379, + 0.2716894745826721 + ], + [ + 5.075716972351074, + 0.10457683354616165 + ], + [ + 5.070976734161377, + -0.058201394975185394 + ], + [ + 5.058079719543457, + -0.21432536840438843 + ], + [ + 5.031600475311279, + -0.34985893964767456 + ], + [ + 5.000181198120117, + -0.5054509043693542 + ], + [ + 4.964064598083496, + -0.6524327993392944 + ], + [ + 4.919261932373047, + -0.8002378940582275 + ], + [ + 4.866254806518555, + -0.9418027400970459 + ], + [ + 4.805163860321045, + -1.0811821222305298 + ], + [ + 4.7392706871032715, + -1.2220563888549805 + ], + [ + 4.676936149597168, + -1.3558349609375 + ], + [ + 4.592274188995361, + -1.4832371473312378 + ], + [ + 4.523243427276611, + -1.6312565803527832 + ], + [ + 4.42389440536499, + -1.762285828590393 + ], + [ + 4.340885639190674, + -1.881903052330017 + ], + [ + 4.241977691650391, + -2.0093307495117188 + ], + [ + 4.151339530944824, + -2.143658399581909 + ], + [ + 4.056190490722656, + -2.271604061126709 + ], + [ + 3.9506373405456543, + -2.389204502105713 + ], + [ + 3.855602264404297, + -2.52400541305542 + ], + [ + 3.767505407333374, + -2.647707462310791 + ], + [ + 3.6579198837280273, + -2.7518439292907715 + ], + [ + 3.5638763904571533, + -2.8469629287719727 + ], + [ + 3.4547009468078613, + -2.936622381210327 + ], + [ + 3.360621690750122, + -3.006927967071533 + ], + [ + 3.264047622680664, + -3.0806689262390137 + ], + [ + 3.1637964248657227, + -3.150933265686035 + ], + [ + 3.054631233215332, + -3.187525510787964 + ], + [ + 2.9522783756256104, + -3.225984811782837 + ], + [ + 2.84771728515625, + -3.271369695663452 + ], + [ + 2.747041702270508, + -3.2875540256500244 + ], + [ + 2.6274852752685547, + -3.3080687522888184 + ], + [ + 2.525698661804199, + -3.3398959636688232 + ], + [ + 2.4131176471710205, + -3.3398303985595703 + ], + [ + 2.2952239513397217, + -3.350306510925293 + ], + [ + 2.1951746940612793, + -3.371178150177002 + ], + [ + 2.080177068710327, + -3.378053665161133 + ], + [ + 1.9589484930038452, + -3.3814857006073 + ], + [ + 1.8624836206436157, + -3.38631534576416 + ], + [ + 1.7451159954071045, + -3.3936166763305664 + ], + [ + 1.6139670610427856, + -3.4228873252868652 + ], + [ + 1.4683799743652344, + -3.6170713901519775 + ], + [ + 1.3632138967514038, + -3.6358513832092285 + ], + [ + 1.2691956758499146, + -3.628499984741211 + ], + [ + 1.1780208349227905, + -3.6141929626464844 + ], + [ + 1.0742324590682983, + -3.617098093032837 + ], + [ + 0.9801331162452698, + -3.606562614440918 + ], + [ + 0.8747575879096985, + -3.6000070571899414 + ], + [ + 0.779481828212738, + -3.5863780975341797 + ], + [ + 0.6933363676071167, + -3.561786651611328 + ], + [ + 0.6000970602035522, + -3.5545878410339355 + ], + [ + 0.4990074634552002, + -3.538741111755371 + ], + [ + 0.41510501503944397, + -3.5207712650299072 + ], + [ + 0.3328661620616913, + -3.492820978164673 + ], + [ + 0.24204376339912415, + -3.4775044918060303 + ], + [ + 0.1607808619737625, + -3.458294153213501 + ], + [ + 0.0880887433886528, + -3.4333653450012207 + ], + [ + 0.0007043203804641962, + -3.4096269607543945 + ], + [ + -0.06814411282539368, + -3.3822808265686035 + ], + [ + -0.14255203306674957, + -3.356264352798462 + ], + [ + -0.20726531744003296, + -3.3276045322418213 + ], + [ + -0.271836519241333, + -3.299224853515625 + ], + [ + -0.3453754782676697, + -3.2803776264190674 + ], + [ + -0.4122464656829834, + -3.253061294555664 + ], + [ + -0.46726641058921814, + -3.2149205207824707 + ], + [ + -0.5242189168930054, + -3.1870229244232178 + ], + [ + -0.5914685130119324, + -3.158712148666382 + ], + [ + -0.6443499326705933, + -3.1241281032562256 + ], + [ + -0.7043404579162598, + -3.098313808441162 + ], + [ + -0.7664539217948914, + -3.0632972717285156 + ], + [ + -0.8125728368759155, + -3.0258371829986572 + ], + [ + -0.878098726272583, + -2.9977691173553467 + ], + [ + -0.9301996827125549, + -2.964372396469116 + ], + [ + -0.9800714254379272, + -2.925037145614624 + ], + [ + -1.035048484802246, + -2.8898227214813232 + ], + [ + -1.0891292095184326, + -2.858813762664795 + ], + [ + -1.1369528770446777, + -2.8269388675689697 + ], + [ + -1.1897367238998413, + -2.787325382232666 + ], + [ + -1.2327275276184082, + -2.757244348526001 + ], + [ + -1.2833319902420044, + -2.723212718963623 + ], + [ + -1.3315709829330444, + -2.6872477531433105 + ], + [ + -1.368035912513733, + -2.648468494415283 + ], + [ + -1.410840630531311, + -2.608750104904175 + ], + [ + -1.448470115661621, + -2.570876121520996 + ], + [ + -1.49429452419281, + -2.523019313812256 + ], + [ + -1.532727599143982, + -2.4814093112945557 + ], + [ + -1.575814127922058, + -2.4392318725585938 + ], + [ + -1.611397624015808, + -2.3947179317474365 + ], + [ + -1.6120071411132812, + -2.3228540420532227 + ], + [ + -1.6653088331222534, + -2.2713661193847656 + ], + [ + -1.7186291217803955, + -2.223052501678467 + ], + [ + -1.7566156387329102, + -2.1690120697021484 + ], + [ + -1.8070237636566162, + -2.1169662475585938 + ], + [ + -1.8441470861434937, + -2.070695400238037 + ], + [ + -1.887262225151062, + -2.0180141925811768 + ], + [ + -1.9333500862121582, + -1.9680750370025635 + ], + [ + -1.9704811573028564, + -1.9191962480545044 + ], + [ + -2.015178918838501, + -1.8640971183776855 + ], + [ + -2.0563178062438965, + -1.8131743669509888 + ], + [ + -2.084089756011963, + -1.7683659791946411 + ], + [ + -2.123715877532959, + -1.709399700164795 + ], + [ + -2.152477502822876, + -1.6617236137390137 + ], + [ + -2.178358316421509, + -1.6152987480163574 + ], + [ + -2.2152509689331055, + -1.5588206052780151 + ], + [ + -2.2407119274139404, + -1.511895775794983 + ], + [ + -2.262568235397339, + -1.4651247262954712 + ], + [ + -2.289118528366089, + -1.4074866771697998 + ], + [ + -2.3125040531158447, + -1.359352707862854 + ], + [ + -2.324498414993286, + -1.314937710762024 + ], + [ + -2.3433356285095215, + -1.2621136903762817 + ], + [ + -2.3592357635498047, + -1.2168627977371216 + ], + [ + -2.371351957321167, + -1.1703053712844849 + ], + [ + -2.3785128593444824, + -1.120418667793274 + ], + [ + -2.3974392414093018, + -1.0672335624694824 + ], + [ + -2.401549816131592, + -1.0192610025405884 + ], + [ + -2.409485101699829, + -0.9691219925880432 + ], + [ + -2.425302743911743, + -0.9162325859069824 + ], + [ + -2.430536985397339, + -0.8652880191802979 + ], + [ + -2.43978214263916, + -0.8076422810554504 + ], + [ + -2.4494822025299072, + -0.7490443587303162 + ], + [ + -2.4622058868408203, + -0.6945746541023254 + ], + [ + -2.4716951847076416, + -0.6334586143493652 + ], + [ + -2.4832963943481445, + -0.5726842284202576 + ], + [ + -2.496781826019287, + -0.5119875073432922 + ], + [ + -2.5041353702545166, + -0.45078983902931213 + ], + [ + -2.5151219367980957, + -0.3896905779838562 + ], + [ + -2.5254130363464355, + -0.32916060090065 + ], + [ + -2.5337772369384766, + -0.27349311113357544 + ], + [ + -2.540037155151367, + -0.21289798617362976 + ], + [ + -2.543046474456787, + -0.15512728691101074 + ], + [ + -2.529646873474121, + -0.10302513092756271 + ], + [ + -2.525585651397705, + -0.04774679243564606 + ], + [ + -2.5216236114501953, + 0.010735958814620972 + ], + [ + -2.5197131633758545, + 0.06305711716413498 + ], + [ + -2.5132055282592773, + 0.11913184076547623 + ], + [ + -2.506204605102539, + 0.17565569281578064 + ], + [ + -2.49839448928833, + 0.23295797407627106 + ], + [ + -2.491053819656372, + 0.29398566484451294 + ], + [ + -2.4824917316436768, + 0.34603139758110046 + ], + [ + -2.473088502883911, + 0.40417227149009705 + ], + [ + -2.462484836578369, + 0.4667271375656128 + ], + [ + -2.4550235271453857, + 0.5224340558052063 + ], + [ + -2.44946551322937, + 0.588764488697052 + ], + [ + -2.430997371673584, + 0.6386570334434509 + ], + [ + -2.420147180557251, + 0.6979591846466064 + ], + [ + -2.4112467765808105, + 0.7601503729820251 + ], + [ + -2.4022467136383057, + 0.8231231570243835 + ], + [ + -2.3991684913635254, + 0.8832605481147766 + ], + [ + -2.3786113262176514, + 0.9372206330299377 + ], + [ + -2.361969232559204, + 0.9989502429962158 + ], + [ + -2.3562328815460205, + 1.0552668571472168 + ], + [ + -2.350093126296997, + 1.1119104623794556 + ], + [ + -2.343144416809082, + 1.1642043590545654 + ], + [ + -2.3200418949127197, + 1.2157901525497437 + ], + [ + -2.3094849586486816, + 1.2673567533493042 + ], + [ + -2.2978549003601074, + 1.3160841464996338 + ], + [ + -2.2889318466186523, + 1.3635785579681396 + ], + [ + -2.2773008346557617, + 1.4008339643478394 + ], + [ + -2.258928060531616, + 1.4338518381118774 + ], + [ + -2.2384133338928223, + 1.494195580482483 + ], + [ + -2.2179768085479736, + 1.5266485214233398 + ], + [ + -2.193794012069702, + 1.5638726949691772 + ], + [ + -2.1646568775177, + 1.5941482782363892 + ], + [ + -2.129162311553955, + 1.628161072731018 + ], + [ + -2.1038825511932373, + 1.6808637380599976 + ], + [ + -2.062422513961792, + 1.7096893787384033 + ], + [ + -2.019246816635132, + 1.7484982013702393 + ], + [ + -1.9698305130004883, + 1.7793183326721191 + ], + [ + -1.9105743169784546, + 1.8192609548568726 + ], + [ + -1.8534371852874756, + 1.869428277015686 + ], + [ + -1.817586898803711, + 1.9134610891342163 + ], + [ + -1.7567329406738281, + 1.9504936933517456 + ], + [ + -1.6974470615386963, + 2.0050899982452393 + ], + [ + -1.6296203136444092, + 2.0528159141540527 + ], + [ + -1.563851237297058, + 2.116149663925171 + ], + [ + -1.5230133533477783, + 2.1672027111053467 + ], + [ + -1.4480904340744019, + 2.218013048171997 + ], + [ + -1.3981505632400513, + 2.283574104309082 + ], + [ + -1.3334778547286987, + 2.3448336124420166 + ], + [ + -1.2812628746032715, + 2.419985055923462 + ], + [ + -1.2246804237365723, + 2.4892024993896484 + ], + [ + -1.1708524227142334, + 2.529838800430298 + ], + [ + -1.1095072031021118, + 2.5946264266967773 + ], + [ + -1.0606634616851807, + 2.6508357524871826 + ], + [ + -1.0042097568511963, + 2.7173736095428467 + ], + [ + -0.9545419216156006, + 2.772118091583252 + ], + [ + -0.8983504772186279, + 2.821847677230835 + ], + [ + -0.8392940163612366, + 2.8557944297790527 + ], + [ + -0.7775521874427795, + 2.912633180618286 + ], + [ + -0.7175700664520264, + 2.9580695629119873 + ], + [ + -0.6481722593307495, + 3.00447940826416 + ], + [ + -0.5945529341697693, + 3.044975519180298 + ], + [ + -0.5240373611450195, + 3.087033748626709 + ], + [ + -0.4472283720970154, + 3.104748010635376 + ], + [ + -0.3716159760951996, + 3.1543219089508057 + ], + [ + -0.3100687563419342, + 3.179083824157715 + ], + [ + -0.22790588438510895, + 3.217156410217285 + ], + [ + -0.14979305863380432, + 3.2367053031921387 + ], + [ + -0.08454198390245438, + 3.2643277645111084 + ], + [ + 0.00612611323595047, + 3.2817440032958984 + ], + [ + 0.08717763423919678, + 3.2959089279174805 + ], + [ + 0.16120927035808563, + 3.327155351638794 + ], + [ + 0.2527807652950287, + 3.33959698677063 + ], + [ + 0.323330283164978, + 3.3352651596069336 + ], + [ + 0.39303019642829895, + 3.335376262664795 + ], + [ + 0.604283332824707, + 3.21614933013916 + ], + [ + 0.7110007405281067, + 3.2258987426757812 + ], + [ + 0.8070436716079712, + 3.2062630653381348 + ], + [ + 0.8995416760444641, + 3.2038049697875977 + ], + [ + 0.998671293258667, + 3.1947317123413086 + ], + [ + 1.0895012617111206, + 3.1881892681121826 + ], + [ + 1.199231743812561, + 3.187775135040283 + ], + [ + 1.2934054136276245, + 3.1651721000671387 + ], + [ + 1.3902112245559692, + 3.1399388313293457 + ], + [ + 1.4852286577224731, + 3.1187775135040283 + ], + [ + 1.5748968124389648, + 3.093973398208618 + ], + [ + 1.661041259765625, + 3.0604443550109863 + ], + [ + 1.7567429542541504, + 3.0344743728637695 + ], + [ + 1.8522663116455078, + 2.9875235557556152 + ], + [ + 1.9324225187301636, + 2.944751739501953 + ], + [ + 2.0177175998687744, + 2.8928134441375732 + ], + [ + 2.0924456119537354, + 2.8433053493499756 + ], + [ + 2.185919761657715, + 2.7906441688537598 + ], + [ + 2.257283926010132, + 2.728501796722412 + ], + [ + 2.330993413925171, + 2.6575496196746826 + ], + [ + 2.40523099899292, + 2.582319498062134 + ], + [ + 2.4693305492401123, + 2.5044913291931152 + ], + [ + 2.5557820796966553, + 2.437408685684204 + ], + [ + 2.620811939239502, + 2.3515970706939697 + ], + [ + 2.690504789352417, + 2.2618517875671387 + ], + [ + 2.7550418376922607, + 2.1695363521575928 + ], + [ + 2.825605630874634, + 2.062561511993408 + ], + [ + 2.8875033855438232, + 1.9629721641540527 + ], + [ + 2.9379734992980957, + 1.8885122537612915 + ], + [ + 3.004781723022461, + 1.77639901638031 + ], + [ + 3.062613010406494, + 1.6746560335159302 + ], + [ + 3.1223244667053223, + 1.5667692422866821 + ], + [ + 3.176520824432373, + 1.457764983177185 + ], + [ + 3.217806816101074, + 1.3592723608016968 + ], + [ + 3.2659854888916016, + 1.2552180290222168 + ], + [ + 3.3127903938293457, + 1.151120901107788 + ], + [ + 3.3554506301879883, + 1.048346996307373 + ], + [ + 3.3942248821258545, + 0.9464819431304932 + ], + [ + 3.426928997039795, + 0.8481759428977966 + ], + [ + 3.4498045444488525, + 0.7511392831802368 + ], + [ + 3.472672462463379, + 0.6550105810165405 + ], + [ + 3.4882378578186035, + 0.563383936882019 + ], + [ + 3.5006072521209717, + 0.47345489263534546 + ], + [ + 3.508864402770996, + 0.38236746191978455 + ], + [ + 3.511789321899414, + 0.2948211133480072 + ], + [ + 3.509963274002075, + 0.20527668297290802 + ], + [ + 3.4998695850372314, + 0.11584516614675522 + ], + [ + 3.485685348510742, + 0.02875937707722187 + ], + [ + 3.468412160873413, + -0.06277299672365189 + ], + [ + 3.448991298675537, + -0.15509441494941711 + ], + [ + 3.4261295795440674, + -0.24873323738574982 + ], + [ + 3.3980672359466553, + -0.3491252064704895 + ], + [ + 3.3704447746276855, + -0.4392671585083008 + ], + [ + 3.3419220447540283, + -0.5438848733901978 + ], + [ + 3.3185856342315674, + -0.6423647403717041 + ], + [ + 3.295132875442505, + -0.7434669137001038 + ], + [ + 3.2826926708221436, + -0.8482845425605774 + ], + [ + 3.2718653678894043, + -0.9481233358383179 + ], + [ + 3.24762225151062, + -1.0398056507110596 + ], + [ + 3.2424521446228027, + -1.1319658756256104 + ], + [ + 3.234987497329712, + -1.2012470960617065 + ], + [ + 3.228273630142212, + -1.275491714477539 + ], + [ + 3.2207024097442627, + -1.3326443433761597 + ], + [ + 3.2121076583862305, + -1.3780663013458252 + ], + [ + 3.188585042953491, + -1.4211820363998413 + ], + [ + 3.166771411895752, + -1.4702781438827515 + ], + [ + 3.140843391418457, + -1.4979201555252075 + ], + [ + 3.0908451080322266, + -1.5309743881225586 + ], + [ + 3.0508012771606445, + -1.5631415843963623 + ], + [ + 3.0023438930511475, + -1.5888545513153076 + ], + [ + 2.940737724304199, + -1.622393250465393 + ], + [ + 2.866596221923828, + -1.649457573890686 + ], + [ + 2.815720796585083, + -1.6732542514801025 + ], + [ + 2.744495391845703, + -1.702751874923706 + ], + [ + 2.685849189758301, + -1.7409123182296753 + ], + [ + 2.618879795074463, + -1.7763344049453735 + ], + [ + 2.5580902099609375, + -1.8126881122589111 + ], + [ + 2.4868364334106445, + -1.8446658849716187 + ], + [ + 2.4099979400634766, + -1.870258092880249 + ], + [ + 2.335202693939209, + -1.9024078845977783 + ], + [ + 2.256211042404175, + -1.9445310831069946 + ], + [ + 2.1785054206848145, + -1.9917125701904297 + ], + [ + 2.104865312576294, + -2.034065008163452 + ], + [ + 2.0255353450775146, + -2.0717759132385254 + ], + [ + 1.9526309967041016, + -2.128840208053589 + ], + [ + 1.8893259763717651, + -2.1954917907714844 + ], + [ + 1.820688247680664, + -2.2265045642852783 + ], + [ + 1.747300624847412, + -2.273540496826172 + ], + [ + 1.6962028741836548, + -2.3155171871185303 + ], + [ + 1.6242289543151855, + -2.3693368434906006 + ], + [ + 1.5680725574493408, + -2.4141626358032227 + ], + [ + 1.5133963823318481, + -2.461064577102661 + ], + [ + 1.4558632373809814, + -2.5070173740386963 + ], + [ + 1.5023598670959473, + -2.436103582382202 + ], + [ + 1.4381377696990967, + -2.4653468132019043 + ], + [ + 1.3667628765106201, + -2.4855313301086426 + ], + [ + 1.2823656797409058, + -2.512535333633423 + ], + [ + 1.2161009311676025, + -2.541569948196411 + ], + [ + 1.15482759475708, + -2.569162368774414 + ], + [ + 1.1180604696273804, + -2.5690181255340576 + ], + [ + 1.049567461013794, + -2.5915982723236084 + ], + [ + 0.9801952838897705, + -2.6257498264312744 + ], + [ + 0.9131182432174683, + -2.641812562942505 + ], + [ + 0.8519123196601868, + -2.6705429553985596 + ], + [ + 0.7954238057136536, + -2.6918625831604004 + ], + [ + 0.745198667049408, + -2.692462682723999 + ], + [ + 0.6852551102638245, + -2.701198101043701 + ], + [ + 0.6313214898109436, + -2.715123414993286 + ], + [ + 0.5675376057624817, + -2.737529754638672 + ], + [ + 0.5120877027511597, + -2.74880051612854 + ], + [ + 0.4510263502597809, + -2.7571966648101807 + ], + [ + 0.4081280827522278, + -2.746542453765869 + ], + [ + 0.33799806237220764, + -2.7483575344085693 + ], + [ + 0.29791492223739624, + -2.7654337882995605 + ], + [ + 0.2455369085073471, + -2.7749979496002197 + ], + [ + 0.197715625166893, + -2.783491849899292 + ], + [ + 0.15886163711547852, + -2.783910036087036 + ], + [ + 0.07694528251886368, + -2.7699389457702637 + ], + [ + 0.03228135034441948, + -2.7740437984466553 + ], + [ + -0.014077146537601948, + -2.771791934967041 + ], + [ + -0.0587402768433094, + -2.780109167098999 + ], + [ + -0.093251533806324, + -2.7732067108154297 + ], + [ + -0.1355704367160797, + -2.755174398422241 + ], + [ + -0.18519572913646698, + -2.7539608478546143 + ], + [ + -0.24856045842170715, + -2.7422378063201904 + ], + [ + -0.2911108434200287, + -2.73774790763855 + ], + [ + -0.32361042499542236, + -2.7239551544189453 + ], + [ + -0.3706640899181366, + -2.7117583751678467 + ], + [ + -0.41748180985450745, + -2.7004659175872803 + ], + [ + -0.4530429542064667, + -2.6869311332702637 + ], + [ + -0.5127662420272827, + -2.677724838256836 + ], + [ + -0.5497731566429138, + -2.659583568572998 + ], + [ + -0.583768367767334, + -2.6503894329071045 + ], + [ + -0.6142618060112, + -2.6233181953430176 + ], + [ + -0.6567493677139282, + -2.6007392406463623 + ], + [ + -0.6921979188919067, + -2.569699764251709 + ], + [ + -0.7360318899154663, + -2.5424795150756836 + ], + [ + -0.782450258731842, + -2.5543863773345947 + ], + [ + -0.8189601898193359, + -2.5231337547302246 + ], + [ + -0.8519666194915771, + -2.5027477741241455 + ], + [ + -0.8943533301353455, + -2.4693548679351807 + ], + [ + -0.9328246712684631, + -2.4305620193481445 + ], + [ + -0.980371356010437, + -2.3971893787384033 + ], + [ + -1.0133012533187866, + -2.3945932388305664 + ], + [ + -1.0485087633132935, + -2.357787847518921 + ], + [ + -1.0879532098770142, + -2.3260834217071533 + ], + [ + -1.13079035282135, + -2.286672830581665 + ], + [ + -1.1792728900909424, + -2.2447080612182617 + ], + [ + -1.233694076538086, + -2.21160888671875 + ], + [ + -1.2917929887771606, + -2.1751065254211426 + ], + [ + -1.3067317008972168, + -2.1548404693603516 + ], + [ + -1.3568013906478882, + -2.1230857372283936 + ], + [ + -1.407311201095581, + -2.080155611038208 + ], + [ + -1.4632524251937866, + -2.0489115715026855 + ], + [ + -1.5152349472045898, + -2.0232484340667725 + ], + [ + -1.574317216873169, + -1.9919630289077759 + ], + [ + -1.630061388015747, + -1.9800586700439453 + ], + [ + -1.6824228763580322, + -1.9480589628219604 + ], + [ + -1.7082244157791138, + -1.9114867448806763 + ], + [ + -1.761818766593933, + -1.8869737386703491 + ], + [ + -1.8123128414154053, + -1.8695814609527588 + ], + [ + -1.8541843891143799, + -1.8539493083953857 + ], + [ + -1.8930846452713013, + -1.8329797983169556 + ], + [ + -1.9351744651794434, + -1.8282562494277954 + ], + [ + -1.968327283859253, + -1.809125304222107 + ], + [ + -2.003061294555664, + -1.7613921165466309 + ], + [ + -2.0394747257232666, + -1.7454514503479004 + ], + [ + -2.071681022644043, + -1.7276839017868042 + ], + [ + -2.0971243381500244, + -1.7154332399368286 + ], + [ + -2.1183815002441406, + -1.6901252269744873 + ], + [ + -2.1400716304779053, + -1.671032190322876 + ], + [ + -2.157888650894165, + -1.6422611474990845 + ], + [ + -2.1652894020080566, + -1.6169092655181885 + ], + [ + -2.2068920135498047, + -1.5772325992584229 + ], + [ + -2.2231626510620117, + -1.5465145111083984 + ], + [ + -2.2385661602020264, + -1.5137358903884888 + ], + [ + -2.2583959102630615, + -1.4746901988983154 + ], + [ + -2.785443067550659, + -1.9046322107315063 + ], + [ + -2.824950933456421, + -1.8600118160247803 + ], + [ + -2.8576819896698, + -1.8080859184265137 + ], + [ + -2.897477388381958, + -1.7544045448303223 + ], + [ + -2.9348740577697754, + -1.697832703590393 + ], + [ + -2.965635299682617, + -1.6388418674468994 + ], + [ + -3.004753828048706, + -1.5776605606079102 + ], + [ + -3.030264139175415, + -1.5188959836959839 + ], + [ + -3.064892053604126, + -1.4583901166915894 + ], + [ + -3.10093092918396, + -1.3919225931167603 + ], + [ + -3.1287357807159424, + -1.3281331062316895 + ], + [ + -3.163783073425293, + -1.2602198123931885 + ], + [ + -1.939455270767212, + -0.6825889945030212 + ], + [ + -1.9538636207580566, + -0.6377758383750916 + ], + [ + -1.969962477684021, + -0.5959705710411072 + ], + [ + -1.985311508178711, + -0.5506218671798706 + ], + [ + -1.9969377517700195, + -0.5074140429496765 + ], + [ + -2.0109286308288574, + -0.46116936206817627 + ], + [ + -2.0212512016296387, + -0.4160635471343994 + ], + [ + -2.0320510864257812, + -0.3684195876121521 + ], + [ + -2.0413625240325928, + -0.32278794050216675 + ], + [ + -2.0509655475616455, + -0.27469953894615173 + ], + [ + -2.0583579540252686, + -0.2265932857990265 + ], + [ + -2.065746784210205, + -0.1784122735261917 + ], + [ + -2.072566032409668, + -0.12830406427383423 + ], + [ + -2.0776710510253906, + -0.07980385422706604 + ], + [ + -2.0808217525482178, + -0.030480800196528435 + ], + [ + -2.083946943283081, + 0.01834646239876747 + ], + [ + -2.0857110023498535, + 0.069791778922081 + ], + [ + -2.08644437789917, + 0.12019497156143188 + ], + [ + -2.0867884159088135, + 0.172868549823761 + ], + [ + -2.0845282077789307, + 0.22488361597061157 + ], + [ + -2.080968141555786, + 0.27684295177459717 + ], + [ + -2.0757977962493896, + 0.32989227771759033 + ], + [ + -2.070146322250366, + 0.382938414812088 + ], + [ + -2.062734603881836, + 0.4347754120826721 + ], + [ + -2.0504636764526367, + 0.4866700768470764 + ], + [ + -2.0430421829223633, + 0.5385583639144897 + ], + [ + -2.0292346477508545, + 0.5882088541984558 + ], + [ + -2.0169179439544678, + 0.6427401304244995 + ], + [ + -1.9972724914550781, + 0.6946731209754944 + ], + [ + -1.9825069904327393, + 0.7469982504844666 + ], + [ + -1.9665968418121338, + 0.794696033000946 + ], + [ + -1.9446197748184204, + 0.8476860523223877 + ], + [ + -1.9289705753326416, + 0.8964272141456604 + ], + [ + -1.9009391069412231, + 0.9431259036064148 + ], + [ + -1.8785030841827393, + 0.9926013946533203 + ], + [ + -1.84889817237854, + 1.0430631637573242 + ], + [ + -1.8296235799789429, + 1.0834999084472656 + ], + [ + -1.7918338775634766, + 1.134745478630066 + ], + [ + -1.7681981325149536, + 1.178633451461792 + ], + [ + -1.739050269126892, + 1.2255828380584717 + ], + [ + -1.706519603729248, + 1.2805343866348267 + ], + [ + -1.6724052429199219, + 1.318791151046753 + ], + [ + -1.6392806768417358, + 1.3665666580200195 + ], + [ + -1.6019701957702637, + 1.4037426710128784 + ], + [ + -1.5700485706329346, + 1.4496498107910156 + ], + [ + -1.5275301933288574, + 1.4852806329727173 + ], + [ + -1.487955093383789, + 1.5237427949905396 + ], + [ + -1.4439946413040161, + 1.5600221157073975 + ], + [ + -1.4075740575790405, + 1.6014066934585571 + ], + [ + -1.3583418130874634, + 1.639771819114685 + ], + [ + -1.3232673406600952, + 1.6647182703018188 + ], + [ + -1.2759172916412354, + 1.7015718221664429 + ], + [ + -1.2386689186096191, + 1.7434122562408447 + ], + [ + -1.189785361289978, + 1.7643922567367554 + ], + [ + -1.1442898511886597, + 1.7925608158111572 + ], + [ + -1.1011332273483276, + 1.8253493309020996 + ], + [ + -1.054550051689148, + 1.846595048904419 + ], + [ + -1.0053414106369019, + 1.863863229751587 + ], + [ + -0.9662778973579407, + 1.8879303932189941 + ], + [ + -0.9079865217208862, + 1.9089831113815308 + ], + [ + -0.8700774908065796, + 1.9294812679290771 + ], + [ + -0.8132891058921814, + 1.9515552520751953 + ], + [ + -0.7767199873924255, + 1.9768174886703491 + ], + [ + -0.7256391048431396, + 1.9869650602340698 + ], + [ + -0.6729921698570251, + 2.0045571327209473 + ], + [ + -0.6289185881614685, + 2.016073226928711 + ], + [ + -0.5815554857254028, + 2.0276358127593994 + ], + [ + -0.5253775119781494, + 2.0402135848999023 + ], + [ + -0.4817768931388855, + 2.0375776290893555 + ], + [ + -0.42267289757728577, + 2.0382838249206543 + ], + [ + -0.36859914660453796, + 2.0623767375946045 + ], + [ + -0.31916940212249756, + 2.0574569702148438 + ], + [ + -0.26679471135139465, + 2.060858726501465 + ], + [ + -0.23073573410511017, + 2.0716567039489746 + ], + [ + -0.16320860385894775, + 2.0575218200683594 + ], + [ + -0.11575151234865189, + 2.0678937435150146 + ], + [ + -0.055646996945142746, + 2.0654449462890625 + ], + [ + -0.0011748316464945674, + 2.0651307106018066 + ], + [ + 0.047385528683662415, + 2.068784236907959 + ], + [ + 0.1007697731256485, + 2.0704574584960938 + ], + [ + 0.14092083275318146, + 2.059392213821411 + ], + [ + 0.1949896663427353, + 2.0522658824920654 + ], + [ + 0.24591532349586487, + 2.040048599243164 + ], + [ + 0.3033734858036041, + 2.031602382659912 + ], + [ + 0.34356439113616943, + 2.0152840614318848 + ], + [ + 0.357248991727829, + 2.0146541595458984 + ], + [ + 0.4499913156032562, + 1.9995652437210083 + ], + [ + 0.49486804008483887, + 1.9701509475708008 + ], + [ + 0.5499653816223145, + 1.9522868394851685 + ], + [ + 0.5978833436965942, + 1.9276717901229858 + ], + [ + 0.6596834063529968, + 1.9215924739837646 + ], + [ + 0.6828345060348511, + 1.8979401588439941 + ], + [ + 0.7441712021827698, + 1.8705918788909912 + ], + [ + 0.8026864528656006, + 1.845637321472168 + ], + [ + 0.8447771668434143, + 1.820468544960022 + ], + [ + 0.8945607542991638, + 1.8055307865142822 + ], + [ + 0.9320256114006042, + 1.7672196626663208 + ], + [ + 0.9777101278305054, + 1.7415413856506348 + ], + [ + 1.022032380104065, + 1.7034775018692017 + ], + [ + 1.0698916912078857, + 1.673519253730774 + ], + [ + 1.1209981441497803, + 1.641108512878418 + ], + [ + 1.163575530052185, + 1.6130379438400269 + ], + [ + 1.215590000152588, + 1.585785984992981 + ], + [ + 1.2533683776855469, + 1.5420434474945068 + ], + [ + 1.2959221601486206, + 1.4918466806411743 + ], + [ + 1.3346459865570068, + 1.4614983797073364 + ], + [ + 1.3768450021743774, + 1.4247958660125732 + ], + [ + 1.4150229692459106, + 1.387054681777954 + ], + [ + 1.4599374532699585, + 1.3407288789749146 + ], + [ + 1.4878023862838745, + 1.3000904321670532 + ], + [ + 1.5278452634811401, + 1.2547330856323242 + ], + [ + 1.5639463663101196, + 1.2140991687774658 + ], + [ + 1.5927350521087646, + 1.1621547937393188 + ], + [ + 1.6289634704589844, + 1.1200429201126099 + ], + [ + 1.6649564504623413, + 1.0764106512069702 + ], + [ + 1.6954513788223267, + 1.0277682542800903 + ], + [ + 1.7225979566574097, + 0.9748300313949585 + ], + [ + 1.7505371570587158, + 0.9235221147537231 + ], + [ + 1.7803332805633545, + 0.875036895275116 + ], + [ + 1.8071178197860718, + 0.8267998099327087 + ], + [ + 1.8332180976867676, + 0.7757334113121033 + ], + [ + 1.8553264141082764, + 0.7240831851959229 + ], + [ + 1.8792308568954468, + 0.673007071018219 + ], + [ + 1.8993464708328247, + 0.6182007789611816 + ], + [ + 1.9183506965637207, + 0.565812349319458 + ], + [ + 1.9382578134536743, + 0.5111643671989441 + ], + [ + 1.9549390077590942, + 0.4603371322154999 + ], + [ + 1.9720486402511597, + 0.4032094478607178 + ], + [ + 1.9852309226989746, + 0.34892091155052185 + ], + [ + 1.9974863529205322, + 0.29250961542129517 + ], + [ + 2.008984327316284, + 0.23747296631336212 + ], + [ + 2.020542621612549, + 0.18179400265216827 + ], + [ + 2.029263734817505, + 0.12626506388187408 + ], + [ + 2.03659725189209, + 0.07123170047998428 + ], + [ + 2.0429253578186035, + 0.013951110653579235 + ], + [ + 2.0467753410339355, + -0.03915894776582718 + ], + [ + 2.0519051551818848, + -0.09639308601617813 + ], + [ + 2.053877592086792, + -0.15231692790985107 + ], + [ + 2.0535759925842285, + -0.20715489983558655 + ], + [ + 2.04879093170166, + -0.25733160972595215 + ], + [ + 2.0508041381835938, + -0.31559252738952637 + ], + [ + 2.048229932785034, + -0.3638801872730255 + ], + [ + 2.0432846546173096, + -0.42415016889572144 + ], + [ + 2.0402889251708984, + -0.4811764657497406 + ], + [ + 2.0239226818084717, + -0.5335407853126526 + ], + [ + 2.0186243057250977, + -0.5928249359130859 + ], + [ + 2.0059680938720703, + -0.6458946466445923 + ], + [ + 1.9968321323394775, + -0.6944871544837952 + ], + [ + 1.9880213737487793, + -0.7601509690284729 + ], + [ + 1.9671740531921387, + -0.8070465922355652 + ], + [ + 1.955620288848877, + -0.8567046523094177 + ], + [ + 1.9343153238296509, + -0.9050728678703308 + ], + [ + 1.920432209968567, + -0.9575177431106567 + ], + [ + 1.8987820148468018, + -1.0071755647659302 + ], + [ + 1.881621241569519, + -1.0549981594085693 + ], + [ + 1.8597807884216309, + -1.1073583364486694 + ], + [ + 1.8467001914978027, + -1.158582091331482 + ], + [ + 1.8129353523254395, + -1.2071794271469116 + ], + [ + 1.7985801696777344, + -1.2571287155151367 + ], + [ + 1.7591344118118286, + -1.2912992238998413 + ], + [ + 1.735072135925293, + -1.3374437093734741 + ], + [ + 1.7058833837509155, + -1.387784719467163 + ], + [ + 1.6700533628463745, + -1.43415367603302 + ], + [ + 1.6373456716537476, + -1.474449634552002 + ], + [ + 1.6032367944717407, + -1.5175436735153198 + ], + [ + 1.573721170425415, + -1.55705988407135 + ], + [ + 1.5372388362884521, + -1.6027296781539917 + ], + [ + 1.4990203380584717, + -1.6414830684661865 + ], + [ + 1.4661006927490234, + -1.672270655632019 + ], + [ + 1.405775785446167, + -1.6883602142333984 + ], + [ + 1.3718475103378296, + -1.7129429578781128 + ], + [ + 1.3300509452819824, + -1.7484829425811768 + ], + [ + 1.291107416152954, + -1.7802780866622925 + ], + [ + 1.2381433248519897, + -1.8182560205459595 + ], + [ + 1.2008930444717407, + -1.8377212285995483 + ], + [ + 1.1598336696624756, + -1.8706554174423218 + ], + [ + 1.1114519834518433, + -1.9091459512710571 + ], + [ + 1.0801833868026733, + -1.9322681427001953 + ], + [ + 1.0420907735824585, + -1.9609711170196533 + ], + [ + 0.9610543251037598, + -1.9337643384933472 + ], + [ + 0.9130555391311646, + -1.9412065744400024 + ], + [ + 0.8660785555839539, + -1.9703651666641235 + ], + [ + 0.8214154839515686, + -2.004535436630249 + ], + [ + 0.7931655049324036, + -2.0423576831817627 + ], + [ + 0.7642667293548584, + -2.0907211303710938 + ], + [ + 0.7113792896270752, + -2.1258394718170166 + ], + [ + 0.648270845413208, + -2.1747641563415527 + ], + [ + 0.5809522867202759, + -2.2088887691497803 + ], + [ + 0.506371796131134, + -2.213144540786743 + ], + [ + 0.40807902812957764, + -2.165241241455078 + ], + [ + 0.31044650077819824, + -2.154010057449341 + ], + [ + 0.1617603451013565, + -2.1131174564361572 + ], + [ + -0.0010990864830091596, + -2.045630931854248 + ], + [ + -0.1737690567970276, + -1.927011251449585 + ], + [ + -0.32313811779022217, + -1.7818121910095215 + ], + [ + -0.43580159544944763, + -1.67324697971344 + ], + [ + -0.5097725987434387, + -1.602860450744629 + ], + [ + -0.5369229316711426, + -1.5883071422576904 + ], + [ + -0.552426278591156, + -1.6002200841903687 + ], + [ + -0.5985193848609924, + -1.941391944885254 + ], + [ + -0.6210653781890869, + -1.98837149143219 + ], + [ + -0.6445977687835693, + -1.9981352090835571 + ], + [ + -0.6672031283378601, + -1.9673900604248047 + ], + [ + -0.6717877984046936, + -1.9012491703033447 + ], + [ + -0.6571487784385681, + -1.7961835861206055 + ], + [ + -0.6388519406318665, + -1.6987855434417725 + ], + [ + -0.6038261651992798, + -1.6063789129257202 + ], + [ + -0.5574747920036316, + -1.5252455472946167 + ], + [ + -0.5186749696731567, + -1.4780863523483276 + ], + [ + -0.48118793964385986, + -1.4342942237854004 + ], + [ + -0.44149336218833923, + -1.4264605045318604 + ], + [ + -0.5128383040428162, + -1.4593597650527954 + ], + [ + -0.4977996051311493, + -1.4383573532104492 + ], + [ + -0.4751490652561188, + -1.4354097843170166 + ], + [ + -0.4929907023906708, + -1.4808454513549805 + ], + [ + -0.5689347982406616, + -1.5993540287017822 + ], + [ + -0.693438708782196, + -1.7727199792861938 + ], + [ + -0.8676827549934387, + -1.9708945751190186 + ], + [ + -1.021207571029663, + -2.1102914810180664 + ], + [ + -1.1319924592971802, + -2.171602487564087 + ], + [ + -1.2252999544143677, + -2.1667025089263916 + ], + [ + -1.3089734315872192, + -2.140695333480835 + ], + [ + -1.331525206565857, + -2.108055353164673 + ], + [ + -1.408610224723816, + -2.0777249336242676 + ], + [ + -1.474205493927002, + -2.0363147258758545 + ], + [ + -1.5371050834655762, + -1.9797210693359375 + ], + [ + -1.5975269079208374, + -1.9161077737808228 + ], + [ + -1.6520129442214966, + -1.8430023193359375 + ], + [ + -1.682434320449829, + -1.7569626569747925 + ], + [ + -1.7153934240341187, + -1.6626150608062744 + ], + [ + -1.7338693141937256, + -1.588975191116333 + ], + [ + -1.742509365081787, + -1.5213708877563477 + ], + [ + -1.7611668109893799, + -1.4834892749786377 + ], + [ + -1.7956783771514893, + -1.4666650295257568 + ], + [ + -1.8819828033447266, + -1.459442138671875 + ], + [ + -1.9280273914337158, + -1.464287281036377 + ], + [ + -1.990277886390686, + -1.4710941314697266 + ], + [ + -2.0580132007598877, + -1.4785008430480957 + ], + [ + -2.1314902305603027, + -1.4928936958312988 + ], + [ + -2.219825267791748, + -1.4927825927734375 + ], + [ + -2.300846576690674, + -1.4800949096679688 + ], + [ + -2.3579418659210205, + -1.4610339403152466 + ], + [ + -2.4307923316955566, + -1.4033362865447998 + ], + [ + -2.4987120628356934, + -1.3519238233566284 + ], + [ + -2.545292615890503, + -1.2931585311889648 + ], + [ + -2.5964198112487793, + -1.2281513214111328 + ], + [ + -2.6361913681030273, + -1.15745210647583 + ], + [ + -2.6971678733825684, + -1.1060950756072998 + ], + [ + -2.7348990440368652, + -1.0363268852233887 + ], + [ + -2.776520252227783, + -0.9646307826042175 + ], + [ + -2.8114805221557617, + -0.8915475606918335 + ], + [ + -2.834238290786743, + -0.821557343006134 + ], + [ + -2.8594985008239746, + -0.7449238300323486 + ], + [ + -2.8784170150756836, + -0.6693165898323059 + ], + [ + -2.8859264850616455, + -0.5972449779510498 + ], + [ + -2.9012796878814697, + -0.5286183953285217 + ], + [ + -2.9052231311798096, + -0.45301711559295654 + ], + [ + -2.9103286266326904, + -0.3762855529785156 + ], + [ + -2.9096081256866455, + -0.29927411675453186 + ], + [ + -3.004213809967041, + -0.21923987567424774 + ], + [ + -3.014249324798584, + -0.13932648301124573 + ], + [ + -3.0237390995025635, + -0.05959691107273102 + ], + [ + -3.028989315032959, + 0.015257052145898342 + ], + [ + -3.0249788761138916, + 0.0910591408610344 + ], + [ + -3.021144390106201, + 0.1662929207086563 + ], + [ + -3.0154988765716553, + 0.2389017790555954 + ], + [ + -3.003242254257202, + 0.3186842203140259 + ], + [ + -2.991543769836426, + 0.39319005608558655 + ], + [ + -2.978832721710205, + 0.468811571598053 + ], + [ + -2.9724724292755127, + 0.5402440428733826 + ], + [ + -2.951655626296997, + 0.6121911406517029 + ], + [ + -2.9336462020874023, + 0.6880096197128296 + ], + [ + -2.95971941947937, + 0.7912350296974182 + ], + [ + -2.933631420135498, + 0.8611429929733276 + ], + [ + -2.9240479469299316, + 0.928890585899353 + ], + [ + -2.893766164779663, + 1.0076881647109985 + ], + [ + -2.869612693786621, + 1.0746961832046509 + ], + [ + -2.849496603012085, + 1.1470327377319336 + ], + [ + -2.829241991043091, + 1.221085548400879 + ], + [ + -2.80106258392334, + 1.281764030456543 + ], + [ + -2.77902889251709, + 1.371330738067627 + ], + [ + -2.722683906555176, + 1.4475220441818237 + ], + [ + -2.678183078765869, + 1.5196934938430786 + ], + [ + -2.6133744716644287, + 1.5917366743087769 + ], + [ + -2.5503616333007812, + 1.6501338481903076 + ], + [ + -2.493119716644287, + 1.7011607885360718 + ], + [ + -2.423654794692993, + 1.7558845281600952 + ], + [ + -2.366971015930176, + 1.7957005500793457 + ], + [ + -2.343393564224243, + 1.8291109800338745 + ], + [ + -2.29390025138855, + 1.8597254753112793 + ], + [ + -2.2580575942993164, + 1.8874528408050537 + ], + [ + -2.2034876346588135, + 1.9305130243301392 + ], + [ + -2.148488998413086, + 1.9740103483200073 + ], + [ + -2.1063482761383057, + 1.9966508150100708 + ], + [ + -2.0506458282470703, + 2.038828134536743 + ], + [ + -1.9972748756408691, + 2.080390214920044 + ], + [ + -1.948562741279602, + 2.1136672496795654 + ], + [ + -1.8860987424850464, + 2.132354259490967 + ], + [ + -1.8464103937149048, + 2.186321258544922 + ], + [ + -1.7830754518508911, + 2.1947367191314697 + ], + [ + -1.7527856826782227, + 2.2346386909484863 + ], + [ + -1.7013394832611084, + 2.2562761306762695 + ], + [ + -1.6221129894256592, + 2.261892080307007 + ], + [ + -1.572666883468628, + 2.286703109741211 + ], + [ + -1.5211371183395386, + 2.294260025024414 + ], + [ + -1.4788033962249756, + 2.308579444885254 + ], + [ + -1.4044588804244995, + 2.319202423095703 + ], + [ + -1.3517017364501953, + 2.3333075046539307 + ], + [ + -1.3082561492919922, + 2.354264974594116 + ], + [ + -1.257013201713562, + 2.358231782913208 + ], + [ + -1.2185603380203247, + 2.3710365295410156 + ], + [ + -1.1634396314620972, + 2.3860692977905273 + ], + [ + -1.103459358215332, + 2.39670467376709 + ], + [ + -1.0702111721038818, + 2.388850212097168 + ], + [ + -1.014145016670227, + 2.4117939472198486 + ], + [ + -0.969226062297821, + 2.4144086837768555 + ], + [ + -0.9236703515052795, + 2.435743808746338 + ], + [ + -0.8758434653282166, + 2.43357253074646 + ], + [ + -0.8285793662071228, + 2.448385238647461 + ], + [ + -0.7920665144920349, + 2.443573236465454 + ], + [ + -0.7339997887611389, + 2.4618136882781982 + ], + [ + -0.6993282437324524, + 2.4631009101867676 + ], + [ + -0.6545820832252502, + 2.4710988998413086 + ], + [ + -0.6155898571014404, + 2.504662275314331 + ], + [ + -0.562515377998352, + 2.4995572566986084 + ], + [ + -0.5318595767021179, + 2.5178115367889404 + ], + [ + -0.4798067808151245, + 2.507741689682007 + ], + [ + -0.4302743673324585, + 2.5290935039520264 + ], + [ + -0.35339224338531494, + 2.5233185291290283 + ], + [ + -0.31573808193206787, + 2.5592503547668457 + ], + [ + -0.25928235054016113, + 2.550574541091919 + ], + [ + -0.2011376917362213, + 2.563270330429077 + ], + [ + -0.15499256551265717, + 2.5514447689056396 + ], + [ + -0.10691384226083755, + 2.550172805786133 + ], + [ + -0.027859870344400406, + 2.5643692016601562 + ], + [ + 0.037496667355298996, + 2.5581514835357666 + ], + [ + 0.07185341417789459, + 2.556422472000122 + ], + [ + 0.14730405807495117, + 2.5528905391693115 + ], + [ + 0.20020756125450134, + 2.541977882385254 + ], + [ + 0.2832608222961426, + 2.541719436645508 + ], + [ + 0.3223177492618561, + 2.5547661781311035 + ], + [ + 0.39458855986595154, + 2.538079023361206 + ], + [ + 0.4558250308036804, + 2.5206401348114014 + ], + [ + 0.5296986103057861, + 2.514604330062866 + ], + [ + 0.5798585414886475, + 2.509333372116089 + ], + [ + 0.6492766737937927, + 2.4806671142578125 + ], + [ + 0.7147487998008728, + 2.4853780269622803 + ], + [ + 0.7663873434066772, + 2.468320369720459 + ], + [ + 0.8368942737579346, + 2.438497304916382 + ], + [ + 0.8960899710655212, + 2.4357681274414062 + ], + [ + 0.96075439453125, + 2.4017038345336914 + ], + [ + 1.0302451848983765, + 2.3563244342803955 + ], + [ + 1.0973587036132812, + 2.350008726119995 + ], + [ + 1.1376545429229736, + 2.3144450187683105 + ], + [ + 1.2190186977386475, + 2.275479316711426 + ], + [ + 1.2704757452011108, + 2.260836601257324 + ], + [ + 1.3449947834014893, + 2.2240922451019287 + ], + [ + 1.4115631580352783, + 2.1839215755462646 + ], + [ + 1.4478546380996704, + 2.146101951599121 + ], + [ + 1.5316250324249268, + 2.125338077545166 + ], + [ + 1.5946441888809204, + 2.0897371768951416 + ], + [ + 1.6475379467010498, + 2.036572217941284 + ], + [ + 1.6983104944229126, + 1.9970945119857788 + ], + [ + 1.7638298273086548, + 1.947016716003418 + ], + [ + 1.812860131263733, + 1.912032127380371 + ], + [ + 1.8785297870635986, + 1.865946888923645 + ], + [ + 1.9305434226989746, + 1.8174210786819458 + ], + [ + 1.988195538520813, + 1.7612478733062744 + ], + [ + 2.047513008117676, + 1.7126431465148926 + ], + [ + 2.101266860961914, + 1.6621750593185425 + ], + [ + 2.1537046432495117, + 1.6126961708068848 + ], + [ + 2.2019081115722656, + 1.5565054416656494 + ], + [ + 2.2525322437286377, + 1.5026103258132935 + ], + [ + 2.301494598388672, + 1.447729229927063 + ], + [ + 2.350376605987549, + 1.3885983228683472 + ], + [ + 2.3962786197662354, + 1.339937686920166 + ], + [ + 2.4439010620117188, + 1.2753952741622925 + ], + [ + 2.487839698791504, + 1.206862211227417 + ], + [ + 2.5270936489105225, + 1.139061450958252 + ], + [ + 2.57443904876709, + 1.0795878171920776 + ], + [ + 2.6150550842285156, + 1.016014814376831 + ], + [ + 2.6537232398986816, + 0.9393216967582703 + ], + [ + 2.705287218093872, + 0.8703237771987915 + ], + [ + 2.725339412689209, + 0.8046759366989136 + ], + [ + 2.763303518295288, + 0.7357781529426575 + ], + [ + 2.793034076690674, + 0.662882924079895 + ], + [ + 2.827369213104248, + 0.5874035954475403 + ], + [ + 2.853714942932129, + 0.5143393278121948 + ], + [ + 2.8875303268432617, + 0.43571990728378296 + ], + [ + 2.9147117137908936, + 0.3556768596172333 + ], + [ + 2.943770170211792, + 0.26883530616760254 + ], + [ + 2.965893030166626, + 0.18750031292438507 + ], + [ + 2.9958996772766113, + 0.0955970510840416 + ], + [ + 3.02323055267334, + 0.002959279343485832 + ], + [ + 3.045138359069824, + -0.0821760818362236 + ], + [ + 3.0440359115600586, + -0.16246239840984344 + ], + [ + 3.0539159774780273, + -0.25348031520843506 + ], + [ + 3.0623562335968018, + -0.3470732271671295 + ], + [ + 3.0772926807403564, + -0.4412204623222351 + ], + [ + 3.078526258468628, + -0.5294837355613708 + ], + [ + 3.088566541671753, + -0.6290738582611084 + ], + [ + 3.086430072784424, + -0.7213318943977356 + ], + [ + 3.0952565670013428, + -0.8255674242973328 + ], + [ + 3.078556776046753, + -0.9285482168197632 + ], + [ + 3.082134962081909, + -1.0292654037475586 + ], + [ + 3.0824294090270996, + -1.138065218925476 + ], + [ + 3.0730204582214355, + -1.2427349090576172 + ], + [ + 3.0798354148864746, + -1.3374667167663574 + ], + [ + 3.0945565700531006, + -1.4457675218582153 + ], + [ + 2.9967217445373535, + -1.5500906705856323 + ], + [ + 2.949035406112671, + -1.6647231578826904 + ], + [ + 2.919776201248169, + -1.7712037563323975 + ], + [ + 2.8843963146209717, + -1.8934712409973145 + ], + [ + 2.855635166168213, + -1.9661611318588257 + ], + [ + 2.8183400630950928, + -2.078496217727661 + ], + [ + 2.758248805999756, + -2.1932473182678223 + ], + [ + 2.7009174823760986, + -2.298203706741333 + ], + [ + 2.6467764377593994, + -2.4116134643554688 + ], + [ + 2.5747478008270264, + -2.525085210800171 + ], + [ + 2.4868550300598145, + -2.653489351272583 + ], + [ + 2.385329484939575, + -2.75384521484375 + ], + [ + 2.288100242614746, + -2.8456180095672607 + ], + [ + 2.1680233478546143, + -2.920243978500366 + ], + [ + 2.095057249069214, + -3.005352020263672 + ], + [ + 1.9594688415527344, + -3.1340999603271484 + ], + [ + 1.8707256317138672, + -3.1985692977905273 + ], + [ + 1.7760381698608398, + -3.279513120651245 + ], + [ + 1.6384609937667847, + -3.3565659523010254 + ], + [ + 1.5238398313522339, + -3.430086374282837 + ], + [ + 1.3646361827850342, + -3.512890338897705 + ], + [ + 1.2179456949234009, + -3.567401170730591 + ], + [ + 1.0474281311035156, + -3.600285768508911 + ], + [ + 0.9032531976699829, + -3.6302332878112793 + ], + [ + 0.6655163764953613, + -3.659494400024414 + ], + [ + 0.449811190366745, + -3.6731510162353516 + ], + [ + 0.2294972538948059, + -3.700594902038574 + ], + [ + 0.3200826644897461, + -3.79573392868042 + ], + [ + 0.1502048224210739, + -3.8422389030456543 + ], + [ + 0.03876049816608429, + -3.8891146183013916 + ], + [ + -0.09603215008974075, + -3.942195415496826 + ], + [ + -0.2563309371471405, + -3.9459292888641357 + ], + [ + -0.42837080359458923, + -4.013737678527832 + ], + [ + -0.6043151617050171, + -3.98445987701416 + ], + [ + -0.7562359571456909, + -3.9732091426849365 + ], + [ + -0.9466774463653564, + -3.9545586109161377 + ], + [ + -1.1304000616073608, + -3.875359296798706 + ], + [ + -1.3126754760742188, + -3.828882932662964 + ], + [ + -1.492169737815857, + -3.7547731399536133 + ], + [ + -3.1673171520233154, + -7.256890296936035 + ], + [ + -3.571565866470337, + -7.0365190505981445 + ], + [ + -3.5517847537994385, + -7.515746593475342 + ], + [ + -3.8365864753723145, + -7.561891555786133 + ], + [ + -4.126443862915039, + -7.463362693786621 + ], + [ + -4.516237258911133, + -7.414834022521973 + ], + [ + -4.889516353607178, + -7.348682880401611 + ], + [ + -5.115520477294922, + -7.285482883453369 + ], + [ + -5.448530197143555, + -7.169075012207031 + ], + [ + -5.70721435546875, + -6.948105812072754 + ], + [ + -6.011880874633789, + -6.703176021575928 + ], + [ + -6.263991832733154, + -6.483962059020996 + ], + [ + -6.460646152496338, + -6.221047401428223 + ], + [ + -6.756085395812988, + -5.884527683258057 + ], + [ + -6.88857364654541, + -5.565732002258301 + ], + [ + -7.1527557373046875, + -5.137051105499268 + ], + [ + -7.526354789733887, + -5.594949245452881 + ], + [ + -7.784196376800537, + -5.379857063293457 + ], + [ + -7.96837854385376, + -5.186977386474609 + ], + [ + -8.203731536865234, + -4.954286098480225 + ], + [ + -8.355557441711426, + -4.660398006439209 + ], + [ + -8.513493537902832, + -4.372238636016846 + ], + [ + -8.659432411193848, + -4.111899375915527 + ], + [ + -8.831440925598145, + -3.785562515258789 + ], + [ + -8.960197448730469, + -3.5372002124786377 + ], + [ + -9.018218994140625, + -3.2337193489074707 + ], + [ + -9.140302658081055, + -2.989454746246338 + ], + [ + -9.222824096679688, + -2.6970596313476562 + ], + [ + -9.256392478942871, + -2.410850763320923 + ], + [ + -9.34376335144043, + -2.1468217372894287 + ], + [ + -9.314233779907227, + -1.860990047454834 + ], + [ + -9.567387580871582, + -1.5765575170516968 + ], + [ + -9.600165367126465, + -1.330673336982727 + ], + [ + -9.661120414733887, + -1.015774130821228 + ], + [ + -9.676301002502441, + -0.7702698111534119 + ], + [ + -9.657231330871582, + -0.5000820755958557 + ], + [ + -9.644662857055664, + -0.24647411704063416 + ], + [ + -9.691765785217285, + 0.022723864763975143 + ], + [ + -9.671183586120605, + 0.26454898715019226 + ], + [ + -9.641388893127441, + 0.5039684772491455 + ], + [ + -9.661796569824219, + 0.7420303225517273 + ], + [ + -9.650982856750488, + 1.017775058746338 + ], + [ + -9.637336730957031, + 1.2349369525909424 + ], + [ + -9.6195650100708, + 1.4340214729309082 + ], + [ + -9.490036964416504, + 1.7704048156738281 + ], + [ + -9.483851432800293, + 1.973867416381836 + ] + ], + "total_points": 1000 +} \ No newline at end of file diff --git a/vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/load_metadata.json b/vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/load_metadata.json new file mode 100644 index 0000000..b1bbff0 --- /dev/null +++ b/vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/load_metadata.json @@ -0,0 +1,16 @@ +{ + "preset": { + "filename": "s11_start100_stop8800_points1000_bw1khz.bin", + "mode": "s11", + "start_freq": 100000000.0, + "stop_freq": 8800000000.0, + "points": 1000, + "bandwidth": 1000.0 + }, + "calibration_name": "sdbsd", + "standard": "load", + "sweep_number": 15, + "sweep_timestamp": 1758812011.9188073, + "created_timestamp": "2025-09-25T17:53:37.990927", + "total_points": 1000 +} \ No newline at end of file diff --git a/vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/open.json b/vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/open.json new file mode 100644 index 0000000..697c92e --- /dev/null +++ b/vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/open.json @@ -0,0 +1,4007 @@ +{ + "sweep_number": 13, + "timestamp": 1758811971.8226106, + "points": [ + [ + -2.673250198364258, + 0.4524553418159485 + ], + [ + -2.664811134338379, + 0.5135447382926941 + ], + [ + -2.65633225440979, + 0.5750159621238708 + ], + [ + -2.646427631378174, + 0.6366394758224487 + ], + [ + -2.635568141937256, + 0.6976782083511353 + ], + [ + -3.40735125541687, + 0.9258564114570618 + ], + [ + -3.390737295150757, + 1.002258539199829 + ], + [ + -3.371633529663086, + 1.0814858675003052 + ], + [ + -3.3509905338287354, + 1.1591819524765015 + ], + [ + -3.3304672241210938, + 1.234299659729004 + ], + [ + -3.310361385345459, + 1.3086225986480713 + ], + [ + -3.2824320793151855, + 1.392225980758667 + ], + [ + -3.259550094604492, + 1.4649051427841187 + ], + [ + -3.232715129852295, + 1.5402182340621948 + ], + [ + -3.205033540725708, + 1.6112829446792603 + ], + [ + -3.177544116973877, + 1.6871299743652344 + ], + [ + -3.142688751220703, + 1.7658774852752686 + ], + [ + -3.1147236824035645, + 1.8393890857696533 + ], + [ + -3.0798587799072266, + 1.9108985662460327 + ], + [ + -3.042513847351074, + 1.9865193367004395 + ], + [ + -3.004603624343872, + 2.059072732925415 + ], + [ + -2.9675064086914062, + 2.1263434886932373 + ], + [ + -2.9278299808502197, + 2.20223331451416 + ], + [ + -2.8820340633392334, + 2.275742292404175 + ], + [ + -2.8422584533691406, + 2.344982624053955 + ], + [ + -2.801668405532837, + 2.4196698665618896 + ], + [ + -2.7557716369628906, + 2.489121675491333 + ], + [ + -2.707047939300537, + 2.5628862380981445 + ], + [ + -2.6572909355163574, + 2.639360189437866 + ], + [ + -2.607977867126465, + 2.7072837352752686 + ], + [ + -2.5557360649108887, + 2.7757816314697266 + ], + [ + -2.5024654865264893, + 2.840369462966919 + ], + [ + -2.448930263519287, + 2.9005188941955566 + ], + [ + -2.391327142715454, + 2.970147132873535 + ], + [ + -2.3328592777252197, + 3.0341596603393555 + ], + [ + -2.271254062652588, + 3.101865768432617 + ], + [ + -2.2001876831054688, + 3.1683666706085205 + ], + [ + -2.1322381496429443, + 3.231496572494507 + ], + [ + -2.0581679344177246, + 3.295747756958008 + ], + [ + -1.9920172691345215, + 3.358038902282715 + ], + [ + -1.9157395362854004, + 3.4208502769470215 + ], + [ + -1.8513531684875488, + 3.479644775390625 + ], + [ + -1.7727317810058594, + 3.530784845352173 + ], + [ + -1.6977643966674805, + 3.5948736667633057 + ], + [ + -1.6133301258087158, + 3.6558940410614014 + ], + [ + -1.5347859859466553, + 3.7074570655822754 + ], + [ + -1.4494483470916748, + 3.7573506832122803 + ], + [ + -1.3591195344924927, + 3.8140265941619873 + ], + [ + -1.2734163999557495, + 3.8687703609466553 + ], + [ + -1.1847649812698364, + 3.9191503524780273 + ], + [ + -1.0904148817062378, + 3.965815544128418 + ], + [ + -0.9961299896240234, + 4.01601505279541 + ], + [ + -0.9003657698631287, + 4.061395168304443 + ], + [ + -0.7981050610542297, + 4.104717254638672 + ], + [ + -0.7008119821548462, + 4.141851425170898 + ], + [ + -0.6071720719337463, + 4.189034461975098 + ], + [ + -0.5032546520233154, + 4.226650714874268 + ], + [ + -0.3968113362789154, + 4.251126766204834 + ], + [ + -0.28701671957969666, + 4.293375492095947 + ], + [ + -0.1762131303548813, + 4.322258949279785 + ], + [ + -0.06463602185249329, + 4.342092990875244 + ], + [ + 0.05751388520002365, + 4.373553276062012 + ], + [ + 0.17994077503681183, + 4.386734485626221 + ], + [ + 0.2988370656967163, + 4.402583122253418 + ], + [ + 0.4230506718158722, + 4.410748481750488 + ], + [ + 0.5417003035545349, + 4.422031879425049 + ], + [ + 0.667264997959137, + 4.422109127044678 + ], + [ + 0.7879408597946167, + 4.436395645141602 + ], + [ + 0.9206380844116211, + 4.437839031219482 + ], + [ + 1.0579131841659546, + 4.4352922439575195 + ], + [ + 1.1897873878479004, + 4.435887813568115 + ], + [ + 1.3237955570220947, + 4.416632652282715 + ], + [ + 1.449521780014038, + 4.399342060089111 + ], + [ + 1.5908130407333374, + 4.383721828460693 + ], + [ + 1.7219502925872803, + 4.351005554199219 + ], + [ + 1.8625389337539673, + 4.317522048950195 + ], + [ + 1.9953542947769165, + 4.290441989898682 + ], + [ + 2.138897180557251, + 4.24339485168457 + ], + [ + 2.258972406387329, + 4.212411403656006 + ], + [ + 2.396308422088623, + 4.157874584197998 + ], + [ + 2.5404064655303955, + 4.1108245849609375 + ], + [ + 2.661130905151367, + 4.0489182472229 + ], + [ + 2.7854816913604736, + 3.9884822368621826 + ], + [ + 2.9056293964385986, + 3.9284088611602783 + ], + [ + 3.0248618125915527, + 3.8504691123962402 + ], + [ + 3.1480295658111572, + 3.77846360206604 + ], + [ + 3.2686455249786377, + 3.701592206954956 + ], + [ + 3.3880581855773926, + 3.613178253173828 + ], + [ + 3.5042686462402344, + 3.526911973953247 + ], + [ + 3.614025592803955, + 3.4372668266296387 + ], + [ + 3.725236654281616, + 3.3365750312805176 + ], + [ + 3.8279240131378174, + 3.216872215270996 + ], + [ + 3.9343831539154053, + 3.111095428466797 + ], + [ + 4.041731834411621, + 3.0006368160247803 + ], + [ + 4.1482391357421875, + 2.872246503829956 + ], + [ + 4.2541303634643555, + 2.7403974533081055 + ], + [ + 4.351885795593262, + 2.611697196960449 + ], + [ + 4.440369129180908, + 2.4737279415130615 + ], + [ + 4.523804187774658, + 2.338996171951294 + ], + [ + 4.595852375030518, + 2.2009828090667725 + ], + [ + 4.670422077178955, + 2.0504722595214844 + ], + [ + 4.734906196594238, + 1.9037744998931885 + ], + [ + 4.800192356109619, + 1.7498458623886108 + ], + [ + 4.8582258224487305, + 1.5946303606033325 + ], + [ + 4.898494243621826, + 1.433318853378296 + ], + [ + 4.946070194244385, + 1.2739267349243164 + ], + [ + 4.9802021980285645, + 1.0979920625686646 + ], + [ + 5.005607604980469, + 0.9456241726875305 + ], + [ + 5.041593074798584, + 0.7682269811630249 + ], + [ + 5.059260368347168, + 0.6034297347068787 + ], + [ + 5.080079078674316, + 0.4377833604812622 + ], + [ + 5.08420467376709, + 0.2748066186904907 + ], + [ + 5.079432010650635, + 0.10015615820884705 + ], + [ + 5.076981544494629, + -0.05318691208958626 + ], + [ + 5.054126739501953, + -0.2085943967103958 + ], + [ + 5.025384902954102, + -0.3526102304458618 + ], + [ + 5.001620769500732, + -0.5073849558830261 + ], + [ + 4.961571216583252, + -0.6544837951660156 + ], + [ + 4.913594722747803, + -0.8014641404151917 + ], + [ + 4.867672920227051, + -0.9475430846214294 + ], + [ + 4.805148124694824, + -1.0834509134292603 + ], + [ + 4.7477312088012695, + -1.22445547580719 + ], + [ + 4.673521041870117, + -1.354960560798645 + ], + [ + 4.59512996673584, + -1.4909003973007202 + ], + [ + 4.5174126625061035, + -1.6230075359344482 + ], + [ + 4.4271135330200195, + -1.758243441581726 + ], + [ + 4.340487003326416, + -1.890210509300232 + ], + [ + 4.240058898925781, + -2.010857582092285 + ], + [ + 4.145214080810547, + -2.1390187740325928 + ], + [ + 4.05891227722168, + -2.2767703533172607 + ], + [ + 3.9480156898498535, + -2.3844618797302246 + ], + [ + 3.8582024574279785, + -2.5235965251922607 + ], + [ + 3.7645351886749268, + -2.6438026428222656 + ], + [ + 3.652618646621704, + -2.749919891357422 + ], + [ + 3.5587515830993652, + -2.8558945655822754 + ], + [ + 3.4567394256591797, + -2.9437754154205322 + ], + [ + 3.3660056591033936, + -3.0179402828216553 + ], + [ + 3.2634236812591553, + -3.0811855792999268 + ], + [ + 3.154914379119873, + -3.1516268253326416 + ], + [ + 3.061555862426758, + -3.1950795650482178 + ], + [ + 2.958381175994873, + -3.2218446731567383 + ], + [ + 2.850325345993042, + -3.270094394683838 + ], + [ + 2.7463300228118896, + -3.2872231006622314 + ], + [ + 2.623424768447876, + -3.307870388031006 + ], + [ + 2.5327279567718506, + -3.335285186767578 + ], + [ + 2.410611867904663, + -3.3333990573883057 + ], + [ + 2.2917556762695312, + -3.3571677207946777 + ], + [ + 2.198523759841919, + -3.3688483238220215 + ], + [ + 2.0806784629821777, + -3.3718957901000977 + ], + [ + 1.9552674293518066, + -3.3828790187835693 + ], + [ + 1.858762502670288, + -3.3956298828125 + ], + [ + 1.732793927192688, + -3.3999576568603516 + ], + [ + 1.6158567667007446, + -3.432145118713379 + ], + [ + 1.4681271314620972, + -3.629673480987549 + ], + [ + 1.3626168966293335, + -3.634438991546631 + ], + [ + 1.2636901140213013, + -3.6331214904785156 + ], + [ + 1.174639344215393, + -3.6167705059051514 + ], + [ + 1.0727699995040894, + -3.6158154010772705 + ], + [ + 0.9767999649047852, + -3.5981764793395996 + ], + [ + 0.8798918128013611, + -3.592440605163574 + ], + [ + 0.7760443091392517, + -3.581652879714966 + ], + [ + 0.682675302028656, + -3.563868284225464 + ], + [ + 0.5955003499984741, + -3.5542709827423096 + ], + [ + 0.500838577747345, + -3.540041923522949 + ], + [ + 0.40908175706863403, + -3.52436900138855 + ], + [ + 0.3257172703742981, + -3.497533082962036 + ], + [ + 0.24410445988178253, + -3.4730231761932373 + ], + [ + 0.16250844299793243, + -3.4595470428466797 + ], + [ + 0.08170813322067261, + -3.432704448699951 + ], + [ + 0.004664261359721422, + -3.413736343383789 + ], + [ + -0.06423041224479675, + -3.3805878162384033 + ], + [ + -0.14212393760681152, + -3.362119197845459 + ], + [ + -0.2123747617006302, + -3.3331799507141113 + ], + [ + -0.27596786618232727, + -3.301466703414917 + ], + [ + -0.34586653113365173, + -3.275057554244995 + ], + [ + -0.4119934141635895, + -3.24832820892334 + ], + [ + -0.46540334820747375, + -3.218820571899414 + ], + [ + -0.5309533476829529, + -3.1889407634735107 + ], + [ + -0.5866340398788452, + -3.160318374633789 + ], + [ + -0.6438414454460144, + -3.1293907165527344 + ], + [ + -0.699928343296051, + -3.0968596935272217 + ], + [ + -0.7659584879875183, + -3.066210985183716 + ], + [ + -0.8215843439102173, + -3.030404567718506 + ], + [ + -0.8762900233268738, + -2.998460054397583 + ], + [ + -0.9378210306167603, + -2.9664714336395264 + ], + [ + -0.9802970290184021, + -2.925436019897461 + ], + [ + -1.0390292406082153, + -2.89298152923584 + ], + [ + -1.090847373008728, + -2.8541955947875977 + ], + [ + -1.1377859115600586, + -2.822188377380371 + ], + [ + -1.1890815496444702, + -2.7866852283477783 + ], + [ + -1.2374593019485474, + -2.7566158771514893 + ], + [ + -1.2834404706954956, + -2.7195746898651123 + ], + [ + -1.3251097202301025, + -2.6844286918640137 + ], + [ + -1.3756803274154663, + -2.646193027496338 + ], + [ + -1.4081534147262573, + -2.608515501022339 + ], + [ + -1.4480823278427124, + -2.571359395980835 + ], + [ + -1.4925554990768433, + -2.524409532546997 + ], + [ + -1.5319355726242065, + -2.483208417892456 + ], + [ + -1.5756274461746216, + -2.4416122436523438 + ], + [ + -1.6083530187606812, + -2.396585702896118 + ], + [ + -1.6100502014160156, + -2.3215901851654053 + ], + [ + -1.658219575881958, + -2.2713112831115723 + ], + [ + -1.7199097871780396, + -2.2232868671417236 + ], + [ + -1.7511183023452759, + -2.1717607975006104 + ], + [ + -1.8028123378753662, + -2.1184375286102295 + ], + [ + -1.8450939655303955, + -2.068510055541992 + ], + [ + -1.8896849155426025, + -2.0191073417663574 + ], + [ + -1.9344736337661743, + -1.966995358467102 + ], + [ + -1.9673545360565186, + -1.916231632232666 + ], + [ + -2.0128977298736572, + -1.867181658744812 + ], + [ + -2.0522654056549072, + -1.8138071298599243 + ], + [ + -2.0895256996154785, + -1.76610267162323 + ], + [ + -2.119971752166748, + -1.714317798614502 + ], + [ + -2.15519380569458, + -1.6630229949951172 + ], + [ + -2.1780881881713867, + -1.618003249168396 + ], + [ + -2.214637279510498, + -1.5577877759933472 + ], + [ + -2.2399768829345703, + -1.5092312097549438 + ], + [ + -2.267592668533325, + -1.4634275436401367 + ], + [ + -2.2890677452087402, + -1.4094252586364746 + ], + [ + -2.307805299758911, + -1.3623542785644531 + ], + [ + -2.32507061958313, + -1.317051649093628 + ], + [ + -2.3463847637176514, + -1.2653708457946777 + ], + [ + -2.360599994659424, + -1.2154808044433594 + ], + [ + -2.3714683055877686, + -1.1688627004623413 + ], + [ + -2.3768677711486816, + -1.1225332021713257 + ], + [ + -2.3946292400360107, + -1.0696393251419067 + ], + [ + -2.4012746810913086, + -1.021127462387085 + ], + [ + -2.411302089691162, + -0.971255898475647 + ], + [ + -2.4256186485290527, + -0.9158673286437988 + ], + [ + -2.42948842048645, + -0.864845871925354 + ], + [ + -2.4385266304016113, + -0.8102731704711914 + ], + [ + -2.4502172470092773, + -0.7479920387268066 + ], + [ + -2.459271192550659, + -0.6943317651748657 + ], + [ + -2.472979784011841, + -0.6339724063873291 + ], + [ + -2.482164144515991, + -0.5735403299331665 + ], + [ + -2.49697208404541, + -0.508849024772644 + ], + [ + -2.503390312194824, + -0.45310869812965393 + ], + [ + -2.5175528526306152, + -0.3902580142021179 + ], + [ + -2.523350954055786, + -0.3297345042228699 + ], + [ + -2.533381223678589, + -0.2715951204299927 + ], + [ + -2.54189133644104, + -0.2111392617225647 + ], + [ + -2.5437188148498535, + -0.15628062188625336 + ], + [ + -2.529629707336426, + -0.10248309373855591 + ], + [ + -2.526625156402588, + -0.047263577580451965 + ], + [ + -2.5209121704101562, + 0.00947837345302105 + ], + [ + -2.5167365074157715, + 0.06201782450079918 + ], + [ + -2.5114545822143555, + 0.12027936428785324 + ], + [ + -2.505706548690796, + 0.17596453428268433 + ], + [ + -2.4978251457214355, + 0.23532608151435852 + ], + [ + -2.4920668601989746, + 0.2948554754257202 + ], + [ + -2.4815452098846436, + 0.3438289165496826 + ], + [ + -2.4734365940093994, + 0.4052170217037201 + ], + [ + -2.4643752574920654, + 0.4660989046096802 + ], + [ + -2.453887462615967, + 0.5261086821556091 + ], + [ + -2.4488823413848877, + 0.5861093997955322 + ], + [ + -2.428615093231201, + 0.6398301720619202 + ], + [ + -2.421879768371582, + 0.6982607245445251 + ], + [ + -2.4117443561553955, + 0.7617439031600952 + ], + [ + -2.4055440425872803, + 0.8229748606681824 + ], + [ + -2.3973283767700195, + 0.8835566639900208 + ], + [ + -2.374648332595825, + 0.9366157054901123 + ], + [ + -2.364867925643921, + 1.0022342205047607 + ], + [ + -2.358459711074829, + 1.0554068088531494 + ], + [ + -2.347764492034912, + 1.111404299736023 + ], + [ + -2.343515396118164, + 1.1590203046798706 + ], + [ + -2.318770170211792, + 1.2164236307144165 + ], + [ + -2.309786558151245, + 1.2687417268753052 + ], + [ + -2.298862934112549, + 1.315953254699707 + ], + [ + -2.290325880050659, + 1.3618241548538208 + ], + [ + -2.2779016494750977, + 1.4006738662719727 + ], + [ + -2.2588863372802734, + 1.437231183052063 + ], + [ + -2.236175060272217, + 1.4943950176239014 + ], + [ + -2.215470790863037, + 1.527498722076416 + ], + [ + -2.1943445205688477, + 1.565864086151123 + ], + [ + -2.1658568382263184, + 1.5935544967651367 + ], + [ + -2.129822015762329, + 1.6266282796859741 + ], + [ + -2.0993785858154297, + 1.679780125617981 + ], + [ + -2.062241315841675, + 1.7101689577102661 + ], + [ + -2.017672061920166, + 1.7510666847229004 + ], + [ + -1.968113660812378, + 1.7781381607055664 + ], + [ + -1.9144023656845093, + 1.8169058561325073 + ], + [ + -1.855157732963562, + 1.866018533706665 + ], + [ + -1.8195134401321411, + 1.909637451171875 + ], + [ + -1.7576249837875366, + 1.9527989625930786 + ], + [ + -1.6972949504852295, + 2.005169630050659 + ], + [ + -1.6274445056915283, + 2.056788921356201 + ], + [ + -1.5701892375946045, + 2.115907907485962 + ], + [ + -1.5192556381225586, + 2.16556978225708 + ], + [ + -1.4619137048721313, + 2.2329533100128174 + ], + [ + -1.3964170217514038, + 2.2858173847198486 + ], + [ + -1.3344205617904663, + 2.3459155559539795 + ], + [ + -1.2806280851364136, + 2.417367935180664 + ], + [ + -1.2265338897705078, + 2.4894256591796875 + ], + [ + -1.1726927757263184, + 2.5337941646575928 + ], + [ + -1.1099785566329956, + 2.5924577713012695 + ], + [ + -1.0517768859863281, + 2.652143716812134 + ], + [ + -1.0018835067749023, + 2.71323299407959 + ], + [ + -0.9582148790359497, + 2.775228977203369 + ], + [ + -0.9005211591720581, + 2.820309638977051 + ], + [ + -0.8363271951675415, + 2.8614861965179443 + ], + [ + -0.7736243605613708, + 2.9125006198883057 + ], + [ + -0.7138203382492065, + 2.965071201324463 + ], + [ + -0.6560555696487427, + 3.005572557449341 + ], + [ + -0.5934592485427856, + 3.05820894241333 + ], + [ + -0.5351845026016235, + 3.0812127590179443 + ], + [ + -0.44427746534347534, + 3.107124090194702 + ], + [ + -0.37526509165763855, + 3.15053653717041 + ], + [ + -0.3086751401424408, + 3.1821084022521973 + ], + [ + -0.2288704812526703, + 3.212433338165283 + ], + [ + -0.14576584100723267, + 3.2496752738952637 + ], + [ + -0.08497980237007141, + 3.263500213623047 + ], + [ + 0.009948166087269783, + 3.281299114227295 + ], + [ + 0.10591695457696915, + 3.2983994483947754 + ], + [ + 0.16732215881347656, + 3.3296356201171875 + ], + [ + 0.2395624965429306, + 3.3454978466033936 + ], + [ + 0.32235202193260193, + 3.340886116027832 + ], + [ + 0.3966159522533417, + 3.3424131870269775 + ], + [ + 0.613334596157074, + 3.213341474533081 + ], + [ + 0.6937709450721741, + 3.2200369834899902 + ], + [ + 0.8153362274169922, + 3.214829444885254 + ], + [ + 0.8934641480445862, + 3.2043747901916504 + ], + [ + 0.9877139329910278, + 3.198392629623413 + ], + [ + 1.0937790870666504, + 3.1884007453918457 + ], + [ + 1.1874213218688965, + 3.185753345489502 + ], + [ + 1.2924717664718628, + 3.1645259857177734 + ], + [ + 1.3883899450302124, + 3.142000913619995 + ], + [ + 1.4771687984466553, + 3.116199016571045 + ], + [ + 1.5727343559265137, + 3.094489097595215 + ], + [ + 1.6518359184265137, + 3.060828685760498 + ], + [ + 1.7736198902130127, + 3.0219309329986572 + ], + [ + 1.861513614654541, + 2.9920876026153564 + ], + [ + 1.9312084913253784, + 2.9436373710632324 + ], + [ + 2.017982006072998, + 2.900233507156372 + ], + [ + 2.092639446258545, + 2.8458333015441895 + ], + [ + 2.184269666671753, + 2.788079023361206 + ], + [ + 2.2631113529205322, + 2.7300333976745605 + ], + [ + 2.3347716331481934, + 2.660203456878662 + ], + [ + 2.405744791030884, + 2.585561990737915 + ], + [ + 2.4792985916137695, + 2.5027048587799072 + ], + [ + 2.5562820434570312, + 2.4378349781036377 + ], + [ + 2.6235857009887695, + 2.3503780364990234 + ], + [ + 2.6846797466278076, + 2.2620978355407715 + ], + [ + 2.7500932216644287, + 2.169788360595703 + ], + [ + 2.8215770721435547, + 2.0694851875305176 + ], + [ + 2.8875460624694824, + 1.9641635417938232 + ], + [ + 2.9399499893188477, + 1.8829090595245361 + ], + [ + 3.0057785511016846, + 1.7804803848266602 + ], + [ + 3.0594096183776855, + 1.674269676208496 + ], + [ + 3.1160507202148438, + 1.565537691116333 + ], + [ + 3.175635576248169, + 1.4575015306472778 + ], + [ + 3.221310615539551, + 1.3610416650772095 + ], + [ + 3.268249988555908, + 1.2532427310943604 + ], + [ + 3.314479351043701, + 1.151930332183838 + ], + [ + 3.3543319702148438, + 1.0469822883605957 + ], + [ + 3.3922646045684814, + 0.9464564919471741 + ], + [ + 3.428091526031494, + 0.8483890295028687 + ], + [ + 3.449303150177002, + 0.7519198656082153 + ], + [ + 3.4716973304748535, + 0.6544132828712463 + ], + [ + 3.4921600818634033, + 0.5607590675354004 + ], + [ + 3.5021369457244873, + 0.47239312529563904 + ], + [ + 3.5113980770111084, + 0.38220441341400146 + ], + [ + 3.5109457969665527, + 0.29359814524650574 + ], + [ + 3.510286569595337, + 0.2036292999982834 + ], + [ + 3.501410722732544, + 0.1142369955778122 + ], + [ + 3.485536575317383, + 0.025490205734968185 + ], + [ + 3.4715757369995117, + -0.06229158490896225 + ], + [ + 3.4476847648620605, + -0.1551765352487564 + ], + [ + 3.4239814281463623, + -0.24832357466220856 + ], + [ + 3.4014174938201904, + -0.3461369574069977 + ], + [ + 3.369384765625, + -0.4376215934753418 + ], + [ + 3.3425142765045166, + -0.5407822132110596 + ], + [ + 3.3183393478393555, + -0.6393195986747742 + ], + [ + 3.2920939922332764, + -0.7457171678543091 + ], + [ + 3.2816836833953857, + -0.8480872511863708 + ], + [ + 3.270613431930542, + -0.9476331472396851 + ], + [ + 3.244370937347412, + -1.040022850036621 + ], + [ + 3.2425615787506104, + -1.1281542778015137 + ], + [ + 3.2398605346679688, + -1.205274224281311 + ], + [ + 3.2238705158233643, + -1.2742764949798584 + ], + [ + 3.219031572341919, + -1.334775686264038 + ], + [ + 3.2088406085968018, + -1.3810443878173828 + ], + [ + 3.1869237422943115, + -1.4192042350769043 + ], + [ + 3.167274236679077, + -1.4740513563156128 + ], + [ + 3.1323060989379883, + -1.499963641166687 + ], + [ + 3.0926592350006104, + -1.5349222421646118 + ], + [ + 3.0558199882507324, + -1.5657761096954346 + ], + [ + 3.001133918762207, + -1.5928739309310913 + ], + [ + 2.9365782737731934, + -1.6177310943603516 + ], + [ + 2.885666608810425, + -1.647586464881897 + ], + [ + 2.817988395690918, + -1.6716519594192505 + ], + [ + 2.7413339614868164, + -1.7028868198394775 + ], + [ + 2.686154842376709, + -1.7399057149887085 + ], + [ + 2.6238157749176025, + -1.7750279903411865 + ], + [ + 2.5592360496520996, + -1.8176144361495972 + ], + [ + 2.474740982055664, + -1.8431799411773682 + ], + [ + 2.4155514240264893, + -1.8694218397140503 + ], + [ + 2.3344101905822754, + -1.908186674118042 + ], + [ + 2.2572104930877686, + -1.9483646154403687 + ], + [ + 2.183094024658203, + -1.9837431907653809 + ], + [ + 2.109678030014038, + -2.028031349182129 + ], + [ + 2.0287625789642334, + -2.071960926055908 + ], + [ + 1.9557247161865234, + -2.1357126235961914 + ], + [ + 1.8820772171020508, + -2.198201894760132 + ], + [ + 1.8171863555908203, + -2.2239155769348145 + ], + [ + 1.7492247819900513, + -2.2673614025115967 + ], + [ + 1.6907002925872803, + -2.3236916065216064 + ], + [ + 1.624326467514038, + -2.367098808288574 + ], + [ + 1.5683130025863647, + -2.411921262741089 + ], + [ + 1.5078142881393433, + -2.4626245498657227 + ], + [ + 1.4613388776779175, + -2.513869524002075 + ], + [ + 1.5056203603744507, + -2.4378693103790283 + ], + [ + 1.4354511499404907, + -2.4662859439849854 + ], + [ + 1.3589510917663574, + -2.485795021057129 + ], + [ + 1.2883349657058716, + -2.516838312149048 + ], + [ + 1.2237154245376587, + -2.542102336883545 + ], + [ + 1.1409125328063965, + -2.5718321800231934 + ], + [ + 1.1055479049682617, + -2.5714852809906006 + ], + [ + 1.0480800867080688, + -2.606863498687744 + ], + [ + 0.9754732251167297, + -2.6178274154663086 + ], + [ + 0.9192944765090942, + -2.6484498977661133 + ], + [ + 0.856523871421814, + -2.6775405406951904 + ], + [ + 0.7902747988700867, + -2.696822166442871 + ], + [ + 0.7451566457748413, + -2.674060821533203 + ], + [ + 0.6799920201301575, + -2.6980974674224854 + ], + [ + 0.6263924837112427, + -2.7165744304656982 + ], + [ + 0.5660244822502136, + -2.7357189655303955 + ], + [ + 0.5149033069610596, + -2.7475292682647705 + ], + [ + 0.45614194869995117, + -2.766474962234497 + ], + [ + 0.39932647347450256, + -2.748443126678467 + ], + [ + 0.3356533348560333, + -2.7510268688201904 + ], + [ + 0.28873395919799805, + -2.7680788040161133 + ], + [ + 0.23962950706481934, + -2.773777961730957 + ], + [ + 0.19581414759159088, + -2.7757999897003174 + ], + [ + 0.15942655503749847, + -2.780296564102173 + ], + [ + 0.07694871723651886, + -2.762242555618286 + ], + [ + 0.0373045951128006, + -2.764404058456421 + ], + [ + -0.008484991267323494, + -2.766773223876953 + ], + [ + -0.06154216453433037, + -2.7755203247070312 + ], + [ + -0.09578321874141693, + -2.771568536758423 + ], + [ + -0.13745048642158508, + -2.7680625915527344 + ], + [ + -0.21107140183448792, + -2.7556135654449463 + ], + [ + -0.2425984889268875, + -2.7459092140197754 + ], + [ + -0.2934740483760834, + -2.7412476539611816 + ], + [ + -0.3288476765155792, + -2.7298836708068848 + ], + [ + -0.3628869652748108, + -2.7164435386657715 + ], + [ + -0.400439977645874, + -2.7042031288146973 + ], + [ + -0.45299726724624634, + -2.6900694370269775 + ], + [ + -0.5136451721191406, + -2.674511432647705 + ], + [ + -0.5584895610809326, + -2.6588661670684814 + ], + [ + -0.5884475708007812, + -2.6427547931671143 + ], + [ + -0.6154296398162842, + -2.6238861083984375 + ], + [ + -0.6582340002059937, + -2.600473642349243 + ], + [ + -0.6899878978729248, + -2.575599431991577 + ], + [ + -0.740278959274292, + -2.556230306625366 + ], + [ + -0.7817438840866089, + -2.5535085201263428 + ], + [ + -0.8173785209655762, + -2.525754451751709 + ], + [ + -0.8490615487098694, + -2.496802806854248 + ], + [ + -0.8903236985206604, + -2.4669060707092285 + ], + [ + -0.9281466007232666, + -2.436157703399658 + ], + [ + -0.9826993346214294, + -2.396322727203369 + ], + [ + -1.0079506635665894, + -2.3969852924346924 + ], + [ + -1.0438921451568604, + -2.364885091781616 + ], + [ + -1.0904550552368164, + -2.3267269134521484 + ], + [ + -1.1318107843399048, + -2.2842719554901123 + ], + [ + -1.1803995370864868, + -2.2530553340911865 + ], + [ + -1.2285724878311157, + -2.21254563331604 + ], + [ + -1.280413269996643, + -2.184842348098755 + ], + [ + -1.3079060316085815, + -2.152019500732422 + ], + [ + -1.35214102268219, + -2.1189749240875244 + ], + [ + -1.404429316520691, + -2.0788862705230713 + ], + [ + -1.4669559001922607, + -2.048656702041626 + ], + [ + -1.521087408065796, + -2.0177500247955322 + ], + [ + -1.573423981666565, + -1.9918925762176514 + ], + [ + -1.6293092966079712, + -1.9718225002288818 + ], + [ + -1.6800426244735718, + -1.9534507989883423 + ], + [ + -1.7047489881515503, + -1.9039981365203857 + ], + [ + -1.7518759965896606, + -1.8798942565917969 + ], + [ + -1.8142443895339966, + -1.8635210990905762 + ], + [ + -1.857025384902954, + -1.8518822193145752 + ], + [ + -1.8969671726226807, + -1.832082748413086 + ], + [ + -1.9324032068252563, + -1.816993236541748 + ], + [ + -1.9618698358535767, + -1.8062183856964111 + ], + [ + -2.00519061088562, + -1.7686392068862915 + ], + [ + -2.0381619930267334, + -1.7441198825836182 + ], + [ + -2.0733227729797363, + -1.7274301052093506 + ], + [ + -2.093433141708374, + -1.7071515321731567 + ], + [ + -2.1184604167938232, + -1.6963942050933838 + ], + [ + -2.1338369846343994, + -1.6671992540359497 + ], + [ + -2.1474783420562744, + -1.6488876342773438 + ], + [ + -2.1657137870788574, + -1.6064974069595337 + ], + [ + -2.2107415199279785, + -1.5798062086105347 + ], + [ + -2.2283201217651367, + -1.5440919399261475 + ], + [ + -2.2384696006774902, + -1.5121681690216064 + ], + [ + -2.2543859481811523, + -1.4752187728881836 + ], + [ + -2.7885284423828125, + -1.9075758457183838 + ], + [ + -2.8206489086151123, + -1.860912799835205 + ], + [ + -2.8533637523651123, + -1.8079091310501099 + ], + [ + -2.896146535873413, + -1.751704454421997 + ], + [ + -2.9350168704986572, + -1.6960902214050293 + ], + [ + -2.9686336517333984, + -1.6404001712799072 + ], + [ + -3.003471612930298, + -1.5834983587265015 + ], + [ + -3.03823184967041, + -1.5183621644973755 + ], + [ + -3.066298723220825, + -1.45798921585083 + ], + [ + -3.1037256717681885, + -1.389706015586853 + ], + [ + -3.1305882930755615, + -1.3256150484085083 + ], + [ + -3.1639926433563232, + -1.2590184211730957 + ], + [ + -1.9390592575073242, + -0.6828968524932861 + ], + [ + -1.9529013633728027, + -0.6396631002426147 + ], + [ + -1.9692994356155396, + -0.5966275930404663 + ], + [ + -1.9842034578323364, + -0.5515419840812683 + ], + [ + -1.9980570077896118, + -0.5070234537124634 + ], + [ + -2.010793924331665, + -0.46082639694213867 + ], + [ + -2.0216405391693115, + -0.41629546880722046 + ], + [ + -2.0317959785461426, + -0.36966317892074585 + ], + [ + -2.0413818359375, + -0.3226623237133026 + ], + [ + -2.0509259700775146, + -0.2747877836227417 + ], + [ + -2.059511423110962, + -0.22661440074443817 + ], + [ + -2.0657365322113037, + -0.17819055914878845 + ], + [ + -2.0722341537475586, + -0.12958873808383942 + ], + [ + -2.0775344371795654, + -0.08002527058124542 + ], + [ + -2.0817127227783203, + -0.02994060516357422 + ], + [ + -2.085054874420166, + 0.01924724131822586 + ], + [ + -2.086130380630493, + 0.06926067918539047 + ], + [ + -2.0868306159973145, + 0.12113911658525467 + ], + [ + -2.085054636001587, + 0.1722124069929123 + ], + [ + -2.082719326019287, + 0.2227417379617691 + ], + [ + -2.0792441368103027, + 0.2769985496997833 + ], + [ + -2.076418399810791, + 0.3273245692253113 + ], + [ + -2.0698673725128174, + 0.3823684751987457 + ], + [ + -2.061861515045166, + 0.4351430833339691 + ], + [ + -2.0523579120635986, + 0.48584461212158203 + ], + [ + -2.0424134731292725, + 0.5372763872146606 + ], + [ + -2.029867649078369, + 0.5904977321624756 + ], + [ + -2.0167465209960938, + 0.6411324143409729 + ], + [ + -1.9977014064788818, + 0.6956787109375 + ], + [ + -1.9784150123596191, + 0.7431761622428894 + ], + [ + -1.9648792743682861, + 0.7929555177688599 + ], + [ + -1.9448192119598389, + 0.8478041291236877 + ], + [ + -1.9284517765045166, + 0.8958408832550049 + ], + [ + -1.9037281274795532, + 0.9446709752082825 + ], + [ + -1.8774317502975464, + 0.992558479309082 + ], + [ + -1.8499805927276611, + 1.0414305925369263 + ], + [ + -1.830066442489624, + 1.0910695791244507 + ], + [ + -1.7924805879592896, + 1.1367226839065552 + ], + [ + -1.768958330154419, + 1.1759190559387207 + ], + [ + -1.7383947372436523, + 1.2206320762634277 + ], + [ + -1.7013607025146484, + 1.2660213708877563 + ], + [ + -1.6692137718200684, + 1.3143764734268188 + ], + [ + -1.6355462074279785, + 1.3609930276870728 + ], + [ + -1.6016417741775513, + 1.402550458908081 + ], + [ + -1.5637091398239136, + 1.446385145187378 + ], + [ + -1.524810791015625, + 1.4820833206176758 + ], + [ + -1.4839874505996704, + 1.5163238048553467 + ], + [ + -1.4487487077713013, + 1.557896375656128 + ], + [ + -1.4044098854064941, + 1.5955721139907837 + ], + [ + -1.358197569847107, + 1.6333510875701904 + ], + [ + -1.3235456943511963, + 1.6627801656723022 + ], + [ + -1.2804304361343384, + 1.6948210000991821 + ], + [ + -1.2364184856414795, + 1.7271618843078613 + ], + [ + -1.190183401107788, + 1.7661149501800537 + ], + [ + -1.142649531364441, + 1.795634388923645 + ], + [ + -1.0994383096694946, + 1.8201676607131958 + ], + [ + -1.05988609790802, + 1.8497213125228882 + ], + [ + -1.0094799995422363, + 1.87459135055542 + ], + [ + -0.9687672257423401, + 1.8855490684509277 + ], + [ + -0.911064088344574, + 1.9197524785995483 + ], + [ + -0.8633469343185425, + 1.935476541519165 + ], + [ + -0.8174248337745667, + 1.9576698541641235 + ], + [ + -0.7758798599243164, + 1.9643908739089966 + ], + [ + -0.7238706350326538, + 1.9982997179031372 + ], + [ + -0.6764765381813049, + 1.997228980064392 + ], + [ + -0.6206158399581909, + 2.016169786453247 + ], + [ + -0.5741336941719055, + 2.023853302001953 + ], + [ + -0.525593101978302, + 2.0426688194274902 + ], + [ + -0.48044368624687195, + 2.0463221073150635 + ], + [ + -0.426494300365448, + 2.05172061920166 + ], + [ + -0.3783400058746338, + 2.0437686443328857 + ], + [ + -0.3225277364253998, + 2.059391498565674 + ], + [ + -0.263158917427063, + 2.0566375255584717 + ], + [ + -0.21704094111919403, + 2.0685036182403564 + ], + [ + -0.15995946526527405, + 2.0644240379333496 + ], + [ + -0.1144912838935852, + 2.0727736949920654 + ], + [ + -0.05239558964967728, + 2.065917730331421 + ], + [ + -0.002547960029914975, + 2.068812370300293 + ], + [ + 0.048259031027555466, + 2.0681211948394775 + ], + [ + 0.09494847804307938, + 2.062492847442627 + ], + [ + 0.13852128386497498, + 2.0596721172332764 + ], + [ + 0.19833412766456604, + 2.050607204437256 + ], + [ + 0.24168221652507782, + 2.0376641750335693 + ], + [ + 0.29349103569984436, + 2.03326416015625 + ], + [ + 0.34608617424964905, + 2.0180132389068604 + ], + [ + 0.37282535433769226, + 1.9668715000152588 + ], + [ + 0.44364407658576965, + 1.987551212310791 + ], + [ + 0.49929383397102356, + 1.9687427282333374 + ], + [ + 0.5476656556129456, + 1.9530725479125977 + ], + [ + 0.6007195711135864, + 1.9416919946670532 + ], + [ + 0.6426613330841064, + 1.9213577508926392 + ], + [ + 0.7014914751052856, + 1.8872547149658203 + ], + [ + 0.7486101388931274, + 1.8745639324188232 + ], + [ + 0.8017116189002991, + 1.8476855754852295 + ], + [ + 0.8412135243415833, + 1.825568675994873 + ], + [ + 0.8797322511672974, + 1.797365427017212 + ], + [ + 0.9350864887237549, + 1.771507978439331 + ], + [ + 0.9850109219551086, + 1.736407995223999 + ], + [ + 1.0239107608795166, + 1.6915837526321411 + ], + [ + 1.074957251548767, + 1.672357201576233 + ], + [ + 1.1205716133117676, + 1.6451860666275024 + ], + [ + 1.1660743951797485, + 1.6052742004394531 + ], + [ + 1.2086951732635498, + 1.5787650346755981 + ], + [ + 1.2464599609375, + 1.5452349185943604 + ], + [ + 1.291963815689087, + 1.4925469160079956 + ], + [ + 1.3342654705047607, + 1.4641214609146118 + ], + [ + 1.3731887340545654, + 1.4216018915176392 + ], + [ + 1.4138864278793335, + 1.3853448629379272 + ], + [ + 1.4524390697479248, + 1.3444807529449463 + ], + [ + 1.4917645454406738, + 1.297462821006775 + ], + [ + 1.5225622653961182, + 1.259839415550232 + ], + [ + 1.559669017791748, + 1.211848497390747 + ], + [ + 1.5952448844909668, + 1.1685738563537598 + ], + [ + 1.632106065750122, + 1.1259232759475708 + ], + [ + 1.6605069637298584, + 1.0717029571533203 + ], + [ + 1.692337155342102, + 1.0297938585281372 + ], + [ + 1.725888729095459, + 0.9792042374610901 + ], + [ + 1.7510020732879639, + 0.9277172088623047 + ], + [ + 1.7787878513336182, + 0.8753197193145752 + ], + [ + 1.8087272644042969, + 0.8280088305473328 + ], + [ + 1.8322179317474365, + 0.7771182656288147 + ], + [ + 1.853340983390808, + 0.7229354977607727 + ], + [ + 1.8788758516311646, + 0.6740238666534424 + ], + [ + 1.9015476703643799, + 0.6200624108314514 + ], + [ + 1.9186046123504639, + 0.5655463933944702 + ], + [ + 1.9382606744766235, + 0.5120347738265991 + ], + [ + 1.951980471611023, + 0.4583682715892792 + ], + [ + 1.9715300798416138, + 0.40299758315086365 + ], + [ + 1.9839986562728882, + 0.3479168117046356 + ], + [ + 1.998888611793518, + 0.2938373386859894 + ], + [ + 2.0101125240325928, + 0.23752491176128387 + ], + [ + 2.020111560821533, + 0.18206965923309326 + ], + [ + 2.0294015407562256, + 0.12561285495758057 + ], + [ + 2.0366597175598145, + 0.0715736374258995 + ], + [ + 2.0446200370788574, + 0.014700398780405521 + ], + [ + 2.046659469604492, + -0.039817556738853455 + ], + [ + 2.0512049198150635, + -0.09866589307785034 + ], + [ + 2.0542914867401123, + -0.15211060643196106 + ], + [ + 2.0557820796966553, + -0.208726704120636 + ], + [ + 2.0505564212799072, + -0.2584252953529358 + ], + [ + 2.0485293865203857, + -0.31264013051986694 + ], + [ + 2.0506865978240967, + -0.3689207136631012 + ], + [ + 2.043764591217041, + -0.4245164394378662 + ], + [ + 2.0343143939971924, + -0.47690215706825256 + ], + [ + 2.0252137184143066, + -0.5331449508666992 + ], + [ + 2.018444061279297, + -0.5853594541549683 + ], + [ + 2.0113844871520996, + -0.6423742771148682 + ], + [ + 1.9981162548065186, + -0.7013669610023499 + ], + [ + 1.9849178791046143, + -0.7574926614761353 + ], + [ + 1.9718185663223267, + -0.8023255467414856 + ], + [ + 1.9571832418441772, + -0.8549835681915283 + ], + [ + 1.9304988384246826, + -0.9105657935142517 + ], + [ + 1.9260352849960327, + -0.9524995684623718 + ], + [ + 1.9023796319961548, + -1.015543818473816 + ], + [ + 1.8798097372055054, + -1.060320258140564 + ], + [ + 1.8623807430267334, + -1.1073758602142334 + ], + [ + 1.838317632675171, + -1.1607317924499512 + ], + [ + 1.8176827430725098, + -1.2045412063598633 + ], + [ + 1.790687918663025, + -1.25660240650177 + ], + [ + 1.756889820098877, + -1.2992067337036133 + ], + [ + 1.7317018508911133, + -1.3420740365982056 + ], + [ + 1.6953834295272827, + -1.3908509016036987 + ], + [ + 1.6661337614059448, + -1.4322218894958496 + ], + [ + 1.640445351600647, + -1.4729284048080444 + ], + [ + 1.6061125993728638, + -1.518428921699524 + ], + [ + 1.5687576532363892, + -1.5529087781906128 + ], + [ + 1.5367838144302368, + -1.603601098060608 + ], + [ + 1.502944827079773, + -1.6293749809265137 + ], + [ + 1.4619505405426025, + -1.676999807357788 + ], + [ + 1.4106194972991943, + -1.6934020519256592 + ], + [ + 1.368837833404541, + -1.7212579250335693 + ], + [ + 1.340380311012268, + -1.7581398487091064 + ], + [ + 1.2860958576202393, + -1.7903189659118652 + ], + [ + 1.2434824705123901, + -1.8230432271957397 + ], + [ + 1.199174165725708, + -1.8487390279769897 + ], + [ + 1.1578017473220825, + -1.8659892082214355 + ], + [ + 1.116337776184082, + -1.907598614692688 + ], + [ + 1.0769857168197632, + -1.9273717403411865 + ], + [ + 1.0013489723205566, + -1.907098412513733 + ], + [ + 0.9540234804153442, + -1.916593313217163 + ], + [ + 0.9125446677207947, + -1.9341429471969604 + ], + [ + 0.8707312941551208, + -1.9736329317092896 + ], + [ + 0.8365771174430847, + -2.007728338241577 + ], + [ + 0.7913075685501099, + -2.044435977935791 + ], + [ + 0.7499305605888367, + -2.0928549766540527 + ], + [ + 0.6985930800437927, + -2.1287312507629395 + ], + [ + 0.6487130522727966, + -2.167306661605835 + ], + [ + 0.5849848389625549, + -2.2054684162139893 + ], + [ + 0.5053467154502869, + -2.2194323539733887 + ], + [ + 0.4172830283641815, + -2.171018362045288 + ], + [ + 0.3078853189945221, + -2.1495847702026367 + ], + [ + 0.17296303808689117, + -2.1136701107025146 + ], + [ + -0.003115117782726884, + -2.0398037433624268 + ], + [ + -0.1711777150630951, + -1.9320237636566162 + ], + [ + -0.31530100107192993, + -1.7975029945373535 + ], + [ + -0.4295436441898346, + -1.6727834939956665 + ], + [ + -0.5061953067779541, + -1.602357029914856 + ], + [ + -0.5378655195236206, + -1.585769534111023 + ], + [ + -0.548896849155426, + -1.601610779762268 + ], + [ + -0.5910160541534424, + -1.9377949237823486 + ], + [ + -0.6278342604637146, + -1.9970157146453857 + ], + [ + -0.6441206336021423, + -1.9977761507034302 + ], + [ + -0.6632954478263855, + -1.9692378044128418 + ], + [ + -0.6774227619171143, + -1.8888566493988037 + ], + [ + -0.6525460481643677, + -1.7978157997131348 + ], + [ + -0.640279233455658, + -1.69963800907135 + ], + [ + -0.6025115251541138, + -1.6012297868728638 + ], + [ + -0.5555840134620667, + -1.5215964317321777 + ], + [ + -0.5188113451004028, + -1.4622230529785156 + ], + [ + -0.4829482138156891, + -1.430819034576416 + ], + [ + -0.4484923183917999, + -1.4352049827575684 + ], + [ + -0.5059037804603577, + -1.453576922416687 + ], + [ + -0.4966295659542084, + -1.4429116249084473 + ], + [ + -0.47937479615211487, + -1.4402719736099243 + ], + [ + -0.48989957571029663, + -1.483005404472351 + ], + [ + -0.5648685693740845, + -1.6114435195922852 + ], + [ + -0.7076682448387146, + -1.781532883644104 + ], + [ + -0.8749002814292908, + -1.9691576957702637 + ], + [ + -1.0153121948242188, + -2.106651782989502 + ], + [ + -1.1322740316390991, + -2.1708626747131348 + ], + [ + -1.2294347286224365, + -2.167936086654663 + ], + [ + -1.310871958732605, + -2.142198324203491 + ], + [ + -1.3325388431549072, + -2.1043426990509033 + ], + [ + -1.4001519680023193, + -2.08739972114563 + ], + [ + -1.4803341627120972, + -2.034001588821411 + ], + [ + -1.5455597639083862, + -1.9800657033920288 + ], + [ + -1.6077803373336792, + -1.9182565212249756 + ], + [ + -1.649661898612976, + -1.8452346324920654 + ], + [ + -1.6907800436019897, + -1.7539790868759155 + ], + [ + -1.710058331489563, + -1.6588634252548218 + ], + [ + -1.7317888736724854, + -1.5805165767669678 + ], + [ + -1.7476102113723755, + -1.5257362127304077 + ], + [ + -1.7638529539108276, + -1.4893869161605835 + ], + [ + -1.797208547592163, + -1.4684301614761353 + ], + [ + -1.8805116415023804, + -1.4713480472564697 + ], + [ + -1.9284074306488037, + -1.457623839378357 + ], + [ + -1.9940814971923828, + -1.4724839925765991 + ], + [ + -2.0534136295318604, + -1.4731749296188354 + ], + [ + -2.1353397369384766, + -1.4811761379241943 + ], + [ + -2.2241477966308594, + -1.4887791872024536 + ], + [ + -2.284005880355835, + -1.4743103981018066 + ], + [ + -2.3652701377868652, + -1.4525121450424194 + ], + [ + -2.4258310794830322, + -1.4004285335540771 + ], + [ + -2.4932749271392822, + -1.3545955419540405 + ], + [ + -2.5458080768585205, + -1.2927193641662598 + ], + [ + -2.596123695373535, + -1.2264509201049805 + ], + [ + -2.6337063312530518, + -1.156185507774353 + ], + [ + -2.6964306831359863, + -1.1048290729522705 + ], + [ + -2.737321138381958, + -1.0350749492645264 + ], + [ + -2.774318218231201, + -0.9606816172599792 + ], + [ + -2.8093600273132324, + -0.887114942073822 + ], + [ + -2.8404901027679443, + -0.8198649287223816 + ], + [ + -2.8621349334716797, + -0.7436877489089966 + ], + [ + -2.8780970573425293, + -0.6721711754798889 + ], + [ + -2.892273187637329, + -0.5995508432388306 + ], + [ + -2.8979122638702393, + -0.5237046480178833 + ], + [ + -2.9029769897460938, + -0.4513792395591736 + ], + [ + -2.9112906455993652, + -0.37430211901664734 + ], + [ + -2.9097654819488525, + -0.3030299246311188 + ], + [ + -3.002528667449951, + -0.2172701507806778 + ], + [ + -3.0134809017181396, + -0.1398025006055832 + ], + [ + -3.0203514099121094, + -0.06002585217356682 + ], + [ + -3.0229074954986572, + 0.013798546977341175 + ], + [ + -3.023266315460205, + 0.09106211364269257 + ], + [ + -3.018798589706421, + 0.1670752912759781 + ], + [ + -3.0105512142181396, + 0.24289368093013763 + ], + [ + -3.0098869800567627, + 0.3174034357070923 + ], + [ + -2.9913957118988037, + 0.3872588574886322 + ], + [ + -2.986687183380127, + 0.4680878818035126 + ], + [ + -2.966301202774048, + 0.5403833985328674 + ], + [ + -2.9506120681762695, + 0.6100369095802307 + ], + [ + -2.93637752532959, + 0.6849066019058228 + ], + [ + -2.954117774963379, + 0.7900703549385071 + ], + [ + -2.9417946338653564, + 0.8684542179107666 + ], + [ + -2.9183216094970703, + 0.9366134405136108 + ], + [ + -2.901923656463623, + 1.0043354034423828 + ], + [ + -2.8754923343658447, + 1.0670843124389648 + ], + [ + -2.8521728515625, + 1.1463602781295776 + ], + [ + -2.8281359672546387, + 1.2139827013015747 + ], + [ + -2.8016622066497803, + 1.290480136871338 + ], + [ + -2.775144338607788, + 1.3690111637115479 + ], + [ + -2.728519916534424, + 1.4429678916931152 + ], + [ + -2.6807861328125, + 1.522047758102417 + ], + [ + -2.6155548095703125, + 1.5899020433425903 + ], + [ + -2.566103458404541, + 1.6487147808074951 + ], + [ + -2.488924503326416, + 1.7003253698349 + ], + [ + -2.441655158996582, + 1.7572118043899536 + ], + [ + -2.38956618309021, + 1.7826136350631714 + ], + [ + -2.3491311073303223, + 1.8226712942123413 + ], + [ + -2.2974014282226562, + 1.8652408123016357 + ], + [ + -2.254652738571167, + 1.9011378288269043 + ], + [ + -2.206308126449585, + 1.92010498046875 + ], + [ + -2.1579246520996094, + 1.9820449352264404 + ], + [ + -2.108774423599243, + 2.003981113433838 + ], + [ + -2.0583951473236084, + 2.032663345336914 + ], + [ + -2.013725519180298, + 2.0704152584075928 + ], + [ + -1.9524834156036377, + 2.118734359741211 + ], + [ + -1.8932799100875854, + 2.141115665435791 + ], + [ + -1.8403805494308472, + 2.168854236602783 + ], + [ + -1.8010996580123901, + 2.1983094215393066 + ], + [ + -1.7248625755310059, + 2.221871852874756 + ], + [ + -1.6795839071273804, + 2.233647346496582 + ], + [ + -1.6288719177246094, + 2.2553741931915283 + ], + [ + -1.5731042623519897, + 2.278712511062622 + ], + [ + -1.5165354013442993, + 2.298203468322754 + ], + [ + -1.4782805442810059, + 2.2990829944610596 + ], + [ + -1.4074288606643677, + 2.328155755996704 + ], + [ + -1.3688732385635376, + 2.3457815647125244 + ], + [ + -1.3235644102096558, + 2.353733539581299 + ], + [ + -1.253167986869812, + 2.3482437133789062 + ], + [ + -1.2106468677520752, + 2.3537068367004395 + ], + [ + -1.1648589372634888, + 2.3735692501068115 + ], + [ + -1.1183868646621704, + 2.3957862854003906 + ], + [ + -1.0554275512695312, + 2.3970229625701904 + ], + [ + -1.0118666887283325, + 2.417144298553467 + ], + [ + -0.9621336460113525, + 2.421143054962158 + ], + [ + -0.917830765247345, + 2.438760280609131 + ], + [ + -0.8804354667663574, + 2.45263409614563 + ], + [ + -0.8328736424446106, + 2.444178819656372 + ], + [ + -0.7901596426963806, + 2.4664080142974854 + ], + [ + -0.7419658303260803, + 2.4618406295776367 + ], + [ + -0.7058010697364807, + 2.4846603870391846 + ], + [ + -0.6362703442573547, + 2.48337984085083 + ], + [ + -0.6105378270149231, + 2.5016236305236816 + ], + [ + -0.5593817234039307, + 2.499631404876709 + ], + [ + -0.5264720320701599, + 2.4946322441101074 + ], + [ + -0.4660274386405945, + 2.521831512451172 + ], + [ + -0.42470476031303406, + 2.510359525680542 + ], + [ + -0.3711269497871399, + 2.5363199710845947 + ], + [ + -0.3229062855243683, + 2.531503915786743 + ], + [ + -0.2690710425376892, + 2.5528547763824463 + ], + [ + -0.20035801827907562, + 2.5339972972869873 + ], + [ + -0.15519441664218903, + 2.563746452331543 + ], + [ + -0.09317206591367722, + 2.5740573406219482 + ], + [ + -0.03072972223162651, + 2.557419538497925 + ], + [ + 0.023148970678448677, + 2.5609042644500732 + ], + [ + 0.0890105590224266, + 2.5579659938812256 + ], + [ + 0.14624275267124176, + 2.567582368850708 + ], + [ + 0.20909850299358368, + 2.5560638904571533 + ], + [ + 0.2704419195652008, + 2.5544729232788086 + ], + [ + 0.32747286558151245, + 2.5235843658447266 + ], + [ + 0.3971256911754608, + 2.511838674545288 + ], + [ + 0.45996832847595215, + 2.519036293029785 + ], + [ + 0.5082307457923889, + 2.5032143592834473 + ], + [ + 0.5729356408119202, + 2.4977591037750244 + ], + [ + 0.6462067365646362, + 2.4775400161743164 + ], + [ + 0.7142175436019897, + 2.475520372390747 + ], + [ + 0.7574871778488159, + 2.4459729194641113 + ], + [ + 0.8255011439323425, + 2.4459829330444336 + ], + [ + 0.9034366607666016, + 2.422024965286255 + ], + [ + 0.96043461561203, + 2.3977057933807373 + ], + [ + 1.0403428077697754, + 2.3696093559265137 + ], + [ + 1.0791244506835938, + 2.3517696857452393 + ], + [ + 1.1489570140838623, + 2.31636643409729 + ], + [ + 1.2053848505020142, + 2.2947709560394287 + ], + [ + 1.2730333805084229, + 2.2571170330047607 + ], + [ + 1.3505507707595825, + 2.2174501419067383 + ], + [ + 1.4083263874053955, + 2.1878573894500732 + ], + [ + 1.4752216339111328, + 2.155115842819214 + ], + [ + 1.5308704376220703, + 2.1270010471343994 + ], + [ + 1.5646380186080933, + 2.090015411376953 + ], + [ + 1.6438441276550293, + 2.037256956100464 + ], + [ + 1.7026315927505493, + 1.9889373779296875 + ], + [ + 1.77037513256073, + 1.948767066001892 + ], + [ + 1.8298052549362183, + 1.9072121381759644 + ], + [ + 1.875463843345642, + 1.8714854717254639 + ], + [ + 1.9358959197998047, + 1.823397159576416 + ], + [ + 1.9857286214828491, + 1.7672923803329468 + ], + [ + 2.046891689300537, + 1.7143982648849487 + ], + [ + 2.102572441101074, + 1.6616414785385132 + ], + [ + 2.1624560356140137, + 1.6142454147338867 + ], + [ + 2.1979820728302, + 1.5502210855484009 + ], + [ + 2.253079414367676, + 1.5040265321731567 + ], + [ + 2.2983744144439697, + 1.4481014013290405 + ], + [ + 2.3451478481292725, + 1.3942162990570068 + ], + [ + 2.3904476165771484, + 1.3315457105636597 + ], + [ + 2.4420340061187744, + 1.2680610418319702 + ], + [ + 2.479525327682495, + 1.2030330896377563 + ], + [ + 2.519284963607788, + 1.142596960067749 + ], + [ + 2.5766522884368896, + 1.075999140739441 + ], + [ + 2.619313955307007, + 1.0101221799850464 + ], + [ + 2.661346197128296, + 0.9397359490394592 + ], + [ + 2.697089910507202, + 0.8673449754714966 + ], + [ + 2.7290380001068115, + 0.8129115104675293 + ], + [ + 2.765495777130127, + 0.7437334060668945 + ], + [ + 2.795182466506958, + 0.6680850386619568 + ], + [ + 2.824615001678467, + 0.5917983651161194 + ], + [ + 2.8616678714752197, + 0.5154395699501038 + ], + [ + 2.890411853790283, + 0.433673232793808 + ], + [ + 2.918059825897217, + 0.3557523190975189 + ], + [ + 2.94600248336792, + 0.26642370223999023 + ], + [ + 2.9689440727233887, + 0.1803029626607895 + ], + [ + 2.9942972660064697, + 0.09310679882764816 + ], + [ + 3.0209076404571533, + 0.006773464847356081 + ], + [ + 3.04117751121521, + -0.08532444387674332 + ], + [ + 3.0447022914886475, + -0.16885323822498322 + ], + [ + 3.0614750385284424, + -0.2559194266796112 + ], + [ + 3.0683772563934326, + -0.34790319204330444 + ], + [ + 3.0778634548187256, + -0.4407657980918884 + ], + [ + 3.0810136795043945, + -0.5292348861694336 + ], + [ + 3.083806276321411, + -0.6297272443771362 + ], + [ + 3.094069004058838, + -0.7275720238685608 + ], + [ + 3.0921666622161865, + -0.8242084383964539 + ], + [ + 3.0809478759765625, + -0.935130774974823 + ], + [ + 3.083533525466919, + -1.0257717370986938 + ], + [ + 3.0823919773101807, + -1.135191559791565 + ], + [ + 3.0833513736724854, + -1.2451860904693604 + ], + [ + 3.0762691497802734, + -1.3595620393753052 + ], + [ + 3.0995936393737793, + -1.4419586658477783 + ], + [ + 2.99186110496521, + -1.5603413581848145 + ], + [ + 2.946673631668091, + -1.664209008216858 + ], + [ + 2.917846202850342, + -1.7771787643432617 + ], + [ + 2.8912060260772705, + -1.8772560358047485 + ], + [ + 2.845379590988159, + -1.9760600328445435 + ], + [ + 2.8046979904174805, + -2.0937023162841797 + ], + [ + 2.7415173053741455, + -2.2048964500427246 + ], + [ + 2.7035584449768066, + -2.294654369354248 + ], + [ + 2.630505323410034, + -2.426738977432251 + ], + [ + 2.5605316162109375, + -2.5301482677459717 + ], + [ + 2.4948010444641113, + -2.6421494483947754 + ], + [ + 2.388843059539795, + -2.7565741539001465 + ], + [ + 2.2757441997528076, + -2.8837337493896484 + ], + [ + 2.178434133529663, + -2.9188344478607178 + ], + [ + 2.1011247634887695, + -2.9968152046203613 + ], + [ + 2.0047435760498047, + -3.0888164043426514 + ], + [ + 1.9070360660552979, + -3.2009267807006836 + ], + [ + 1.7707487344741821, + -3.295785427093506 + ], + [ + 1.6547223329544067, + -3.375208854675293 + ], + [ + 1.5508352518081665, + -3.4238383769989014 + ], + [ + 1.393457293510437, + -3.52689528465271 + ], + [ + 1.2079567909240723, + -3.5615298748016357 + ], + [ + 1.0448799133300781, + -3.5997729301452637 + ], + [ + 0.8762845396995544, + -3.644099473953247 + ], + [ + 0.6741683483123779, + -3.6481688022613525 + ], + [ + 0.45028090476989746, + -3.6691102981567383 + ], + [ + 0.2575465440750122, + -3.708780527114868 + ], + [ + 0.30943891406059265, + -3.7830893993377686 + ], + [ + 0.18446038663387299, + -3.831868886947632 + ], + [ + 0.030191149562597275, + -3.84281325340271 + ], + [ + -0.11522728949785233, + -3.9181480407714844 + ], + [ + -0.2537563145160675, + -3.9800095558166504 + ], + [ + -0.4497508406639099, + -4.017688751220703 + ], + [ + -0.5955871939659119, + -3.9962363243103027 + ], + [ + -0.76689213514328, + -3.9604945182800293 + ], + [ + -0.9425467848777771, + -3.93690824508667 + ], + [ + -1.134863018989563, + -3.897512674331665 + ], + [ + -1.3199914693832397, + -3.820143699645996 + ], + [ + -1.4948387145996094, + -3.726853132247925 + ], + [ + -3.1508564949035645, + -7.1972198486328125 + ], + [ + -3.572829484939575, + -7.019312381744385 + ], + [ + -3.4994850158691406, + -7.513978958129883 + ], + [ + -3.8175811767578125, + -7.567933559417725 + ], + [ + -4.153528213500977, + -7.559113502502441 + ], + [ + -4.444774150848389, + -7.477031707763672 + ], + [ + -4.811897277832031, + -7.37254524230957 + ], + [ + -5.151122093200684, + -7.3052167892456055 + ], + [ + -5.444674015045166, + -7.0990986824035645 + ], + [ + -5.734188079833984, + -6.930227279663086 + ], + [ + -6.023935317993164, + -6.7364912033081055 + ], + [ + -6.286098957061768, + -6.492815017700195 + ], + [ + -6.475751876831055, + -6.230659008026123 + ], + [ + -6.705744743347168, + -5.936127662658691 + ], + [ + -6.919841766357422, + -5.590627670288086 + ], + [ + -7.163955211639404, + -5.169888019561768 + ], + [ + -7.498546123504639, + -5.644109725952148 + ], + [ + -7.759087562561035, + -5.4311203956604 + ], + [ + -7.9766082763671875, + -5.160871505737305 + ], + [ + -8.217621803283691, + -4.967848777770996 + ], + [ + -8.380234718322754, + -4.646214008331299 + ], + [ + -8.523820877075195, + -4.379575729370117 + ], + [ + -8.663239479064941, + -4.1116108894348145 + ], + [ + -8.848587989807129, + -3.836988687515259 + ], + [ + -8.951526641845703, + -3.523902654647827 + ], + [ + -9.059850692749023, + -3.2451469898223877 + ], + [ + -9.126042366027832, + -2.99639892578125 + ], + [ + -9.224726676940918, + -2.674877882003784 + ], + [ + -9.285755157470703, + -2.419206142425537 + ], + [ + -9.296038627624512, + -2.1588165760040283 + ], + [ + -9.380232810974121, + -1.8599363565444946 + ], + [ + -9.347064018249512, + -1.5475659370422363 + ], + [ + -9.587530136108398, + -1.3172885179519653 + ], + [ + -9.652853012084961, + -1.0594319105148315 + ], + [ + -9.646232604980469, + -0.7847241759300232 + ], + [ + -9.669283866882324, + -0.5277585387229919 + ], + [ + -9.665489196777344, + -0.258831650018692 + ], + [ + -9.672083854675293, + 0.025441963225603104 + ], + [ + -9.642415046691895, + 0.2612152397632599 + ], + [ + -9.66545295715332, + 0.5276493430137634 + ], + [ + -9.6532564163208, + 0.7583212852478027 + ], + [ + -9.640951156616211, + 0.9587292075157166 + ], + [ + -9.595663070678711, + 1.2306392192840576 + ], + [ + -9.599081039428711, + 1.4868520498275757 + ], + [ + -9.512401580810547, + 1.7098536491394043 + ], + [ + -9.48653793334961, + 1.9685299396514893 + ] + ], + "total_points": 1000 +} \ No newline at end of file diff --git a/vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/open_metadata.json b/vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/open_metadata.json new file mode 100644 index 0000000..4fc7382 --- /dev/null +++ b/vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/open_metadata.json @@ -0,0 +1,16 @@ +{ + "preset": { + "filename": "s11_start100_stop8800_points1000_bw1khz.bin", + "mode": "s11", + "start_freq": 100000000.0, + "stop_freq": 8800000000.0, + "points": 1000, + "bandwidth": 1000.0 + }, + "calibration_name": "sdbsd", + "standard": "open", + "sweep_number": 13, + "sweep_timestamp": 1758811971.8226106, + "created_timestamp": "2025-09-25T17:53:37.986902", + "total_points": 1000 +} \ No newline at end of file diff --git a/vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/short.json b/vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/short.json new file mode 100644 index 0000000..f3925f7 --- /dev/null +++ b/vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/short.json @@ -0,0 +1,4007 @@ +{ + "sweep_number": 14, + "timestamp": 1758811996.130049, + "points": [ + [ + -2.673614025115967, + 0.45059698820114136 + ], + [ + -2.666127920150757, + 0.5130013227462769 + ], + [ + -2.6567230224609375, + 0.5753486752510071 + ], + [ + -2.6469409465789795, + 0.636631965637207 + ], + [ + -2.6353962421417236, + 0.697645366191864 + ], + [ + -3.4047720432281494, + 0.9284841418266296 + ], + [ + -3.391357183456421, + 1.0044060945510864 + ], + [ + -3.3747992515563965, + 1.0770395994186401 + ], + [ + -3.3527448177337646, + 1.1606336832046509 + ], + [ + -3.3274412155151367, + 1.2309913635253906 + ], + [ + -3.308840751647949, + 1.3118668794631958 + ], + [ + -3.280761241912842, + 1.3856076002120972 + ], + [ + -3.260979413986206, + 1.4616588354110718 + ], + [ + -3.235473871231079, + 1.5388109683990479 + ], + [ + -3.207538366317749, + 1.6149137020111084 + ], + [ + -3.17969012260437, + 1.687612771987915 + ], + [ + -3.14634108543396, + 1.7600830793380737 + ], + [ + -3.1122260093688965, + 1.8344532251358032 + ], + [ + -3.0798256397247314, + 1.909017562866211 + ], + [ + -3.040031909942627, + 1.9864575862884521 + ], + [ + -3.0048177242279053, + 2.0540502071380615 + ], + [ + -2.9669711589813232, + 2.124124765396118 + ], + [ + -2.924696683883667, + 2.202868938446045 + ], + [ + -2.880127191543579, + 2.2778637409210205 + ], + [ + -2.8460240364074707, + 2.3500478267669678 + ], + [ + -2.8002262115478516, + 2.416961669921875 + ], + [ + -2.7529492378234863, + 2.4865448474884033 + ], + [ + -2.70700740814209, + 2.561669111251831 + ], + [ + -2.654618263244629, + 2.631251573562622 + ], + [ + -2.6113195419311523, + 2.7063722610473633 + ], + [ + -2.5598652362823486, + 2.7765274047851562 + ], + [ + -2.5085508823394775, + 2.839705467224121 + ], + [ + -2.4552934169769287, + 2.904071569442749 + ], + [ + -2.3973095417022705, + 2.9697039127349854 + ], + [ + -2.3342700004577637, + 3.0381171703338623 + ], + [ + -2.267401695251465, + 3.1027441024780273 + ], + [ + -2.2056915760040283, + 3.1616735458374023 + ], + [ + -2.1319031715393066, + 3.2328410148620605 + ], + [ + -2.064987897872925, + 3.2928171157836914 + ], + [ + -1.9872146844863892, + 3.3577768802642822 + ], + [ + -1.9222968816757202, + 3.4187371730804443 + ], + [ + -1.8465451002120972, + 3.4764673709869385 + ], + [ + -1.7783433198928833, + 3.5385642051696777 + ], + [ + -1.6935985088348389, + 3.591700553894043 + ], + [ + -1.6141990423202515, + 3.649752378463745 + ], + [ + -1.5370949506759644, + 3.7037689685821533 + ], + [ + -1.4485732316970825, + 3.761132001876831 + ], + [ + -1.3627169132232666, + 3.812920331954956 + ], + [ + -1.276787519454956, + 3.8647549152374268 + ], + [ + -1.1809650659561157, + 3.9194998741149902 + ], + [ + -1.092840313911438, + 3.96073055267334 + ], + [ + -0.9996257424354553, + 4.0112786293029785 + ], + [ + -0.9001527428627014, + 4.0561842918396 + ], + [ + -0.8045734763145447, + 4.103369235992432 + ], + [ + -0.7037523984909058, + 4.149599552154541 + ], + [ + -0.6073849201202393, + 4.187285900115967 + ], + [ + -0.5029275417327881, + 4.222381591796875 + ], + [ + -0.3974049985408783, + 4.253714561462402 + ], + [ + -0.288912832736969, + 4.291491985321045 + ], + [ + -0.18029184639453888, + 4.318140506744385 + ], + [ + -0.05921951308846474, + 4.350871562957764 + ], + [ + 0.05569358915090561, + 4.368570804595947 + ], + [ + 0.17048919200897217, + 4.38496732711792 + ], + [ + 0.298774778842926, + 4.399955749511719 + ], + [ + 0.42355799674987793, + 4.415216445922852 + ], + [ + 0.5438603758811951, + 4.425311088562012 + ], + [ + 0.6649552583694458, + 4.424880504608154 + ], + [ + 0.793764054775238, + 4.438013553619385 + ], + [ + 0.9149923324584961, + 4.44130277633667 + ], + [ + 1.0508806705474854, + 4.435398578643799 + ], + [ + 1.1886658668518066, + 4.438026428222656 + ], + [ + 1.3201069831848145, + 4.415257930755615 + ], + [ + 1.4536856412887573, + 4.397867202758789 + ], + [ + 1.5888900756835938, + 4.378512382507324 + ], + [ + 1.7289645671844482, + 4.351451873779297 + ], + [ + 1.8621450662612915, + 4.327548503875732 + ], + [ + 1.994962453842163, + 4.283449172973633 + ], + [ + 2.1303939819335938, + 4.252103328704834 + ], + [ + 2.2722582817077637, + 4.203100204467773 + ], + [ + 2.396200656890869, + 4.160995960235596 + ], + [ + 2.534219264984131, + 4.104436874389648 + ], + [ + 2.664520263671875, + 4.050796031951904 + ], + [ + 2.7882237434387207, + 3.9893312454223633 + ], + [ + 2.912752151489258, + 3.92619252204895 + ], + [ + 3.0301125049591064, + 3.8483009338378906 + ], + [ + 3.1451823711395264, + 3.7815370559692383 + ], + [ + 3.2660796642303467, + 3.7059130668640137 + ], + [ + 3.379512071609497, + 3.6165242195129395 + ], + [ + 3.497082233428955, + 3.520537853240967 + ], + [ + 3.6125130653381348, + 3.429020881652832 + ], + [ + 3.7198116779327393, + 3.3265252113342285 + ], + [ + 3.822944402694702, + 3.228800058364868 + ], + [ + 3.945100784301758, + 3.111433982849121 + ], + [ + 4.047235488891602, + 3.0023419857025146 + ], + [ + 4.156721591949463, + 2.867288827896118 + ], + [ + 4.255745887756348, + 2.741182327270508 + ], + [ + 4.356072902679443, + 2.617295026779175 + ], + [ + 4.443680763244629, + 2.479330539703369 + ], + [ + 4.5127081871032715, + 2.3340024948120117 + ], + [ + 4.601322650909424, + 2.2041096687316895 + ], + [ + 4.6757402420043945, + 2.0593016147613525 + ], + [ + 4.743472099304199, + 1.9092329740524292 + ], + [ + 4.789866924285889, + 1.7529661655426025 + ], + [ + 4.848965167999268, + 1.597030520439148 + ], + [ + 4.9010186195373535, + 1.429921269416809 + ], + [ + 4.945019245147705, + 1.2679964303970337 + ], + [ + 4.987321376800537, + 1.1030335426330566 + ], + [ + 5.00968074798584, + 0.9354625940322876 + ], + [ + 5.045604228973389, + 0.7740757465362549 + ], + [ + 5.058285713195801, + 0.6032783389091492 + ], + [ + 5.076519966125488, + 0.4365740716457367 + ], + [ + 5.075798511505127, + 0.27455466985702515 + ], + [ + 5.079893112182617, + 0.10478907823562622 + ], + [ + 5.073655128479004, + -0.05741196870803833 + ], + [ + 5.056283473968506, + -0.21532312035560608 + ], + [ + 5.030541896820068, + -0.34857383370399475 + ], + [ + 5.002690315246582, + -0.5030531883239746 + ], + [ + 4.965139389038086, + -0.6499086618423462 + ], + [ + 4.924867153167725, + -0.8048893809318542 + ], + [ + 4.867059707641602, + -0.9400218725204468 + ], + [ + 4.806303024291992, + -1.0807652473449707 + ], + [ + 4.739201545715332, + -1.2276506423950195 + ], + [ + 4.671110153198242, + -1.3524168729782104 + ], + [ + 4.596420764923096, + -1.4880279302597046 + ], + [ + 4.515897750854492, + -1.6208008527755737 + ], + [ + 4.425328254699707, + -1.7495383024215698 + ], + [ + 4.338054180145264, + -1.8880574703216553 + ], + [ + 4.242665767669678, + -2.0162291526794434 + ], + [ + 4.150839328765869, + -2.148627996444702 + ], + [ + 4.065365791320801, + -2.2818522453308105 + ], + [ + 3.9452004432678223, + -2.3964755535125732 + ], + [ + 3.8521580696105957, + -2.520299196243286 + ], + [ + 3.7587270736694336, + -2.6312975883483887 + ], + [ + 3.659010410308838, + -2.7495429515838623 + ], + [ + 3.5595040321350098, + -2.84956693649292 + ], + [ + 3.4567043781280518, + -2.9351823329925537 + ], + [ + 3.358630895614624, + -3.0161325931549072 + ], + [ + 3.2704267501831055, + -3.0901026725769043 + ], + [ + 3.1643614768981934, + -3.1544392108917236 + ], + [ + 3.0682525634765625, + -3.195132255554199 + ], + [ + 2.956592321395874, + -3.2186901569366455 + ], + [ + 2.8521244525909424, + -3.2760252952575684 + ], + [ + 2.7434613704681396, + -3.2875783443450928 + ], + [ + 2.6258585453033447, + -3.301146984100342 + ], + [ + 2.5310122966766357, + -3.338304042816162 + ], + [ + 2.417872190475464, + -3.3441898822784424 + ], + [ + 2.29671573638916, + -3.350308418273926 + ], + [ + 2.1917920112609863, + -3.3704416751861572 + ], + [ + 2.0798184871673584, + -3.3759243488311768 + ], + [ + 1.957657814025879, + -3.3788692951202393 + ], + [ + 1.864344596862793, + -3.3904504776000977 + ], + [ + 1.7394767999649048, + -3.3897957801818848 + ], + [ + 1.6146126985549927, + -3.417088270187378 + ], + [ + 1.4692438840866089, + -3.6214373111724854 + ], + [ + 1.3644359111785889, + -3.6251630783081055 + ], + [ + 1.2665224075317383, + -3.6351776123046875 + ], + [ + 1.1768041849136353, + -3.6194372177124023 + ], + [ + 1.0782251358032227, + -3.6076769828796387 + ], + [ + 0.9742589592933655, + -3.6052966117858887 + ], + [ + 0.8746449947357178, + -3.600036859512329 + ], + [ + 0.7779944539070129, + -3.5819411277770996 + ], + [ + 0.6882105469703674, + -3.5640478134155273 + ], + [ + 0.59494549036026, + -3.5498900413513184 + ], + [ + 0.5047217607498169, + -3.534076452255249 + ], + [ + 0.41822007298469543, + -3.5192227363586426 + ], + [ + 0.3256359398365021, + -3.4969234466552734 + ], + [ + 0.24621416628360748, + -3.481224775314331 + ], + [ + 0.15971632301807404, + -3.4592771530151367 + ], + [ + 0.0842161774635315, + -3.4332005977630615 + ], + [ + 0.006700345315039158, + -3.405207633972168 + ], + [ + -0.06826759874820709, + -3.380138635635376 + ], + [ + -0.1377442628145218, + -3.3571791648864746 + ], + [ + -0.21098381280899048, + -3.334367513656616 + ], + [ + -0.2722754180431366, + -3.299262523651123 + ], + [ + -0.340556800365448, + -3.275083303451538 + ], + [ + -0.4087766408920288, + -3.2465553283691406 + ], + [ + -0.46802079677581787, + -3.2162814140319824 + ], + [ + -0.5261094570159912, + -3.187333583831787 + ], + [ + -0.5866588354110718, + -3.1623945236206055 + ], + [ + -0.6491166949272156, + -3.1285593509674072 + ], + [ + -0.7092958688735962, + -3.098989963531494 + ], + [ + -0.7644554376602173, + -3.064269542694092 + ], + [ + -0.818533182144165, + -3.0248284339904785 + ], + [ + -0.8766347765922546, + -2.9992527961730957 + ], + [ + -0.9347483515739441, + -2.9646012783050537 + ], + [ + -0.9850867390632629, + -2.9264373779296875 + ], + [ + -1.0333523750305176, + -2.88916015625 + ], + [ + -1.09186851978302, + -2.856762409210205 + ], + [ + -1.1392464637756348, + -2.8234589099884033 + ], + [ + -1.1931934356689453, + -2.7867982387542725 + ], + [ + -1.2353073358535767, + -2.753953218460083 + ], + [ + -1.276170015335083, + -2.7194550037384033 + ], + [ + -1.3275728225708008, + -2.6890223026275635 + ], + [ + -1.3764442205429077, + -2.6470887660980225 + ], + [ + -1.4122377634048462, + -2.6096572875976562 + ], + [ + -1.4543676376342773, + -2.571471929550171 + ], + [ + -1.4980859756469727, + -2.5219931602478027 + ], + [ + -1.536246657371521, + -2.484891414642334 + ], + [ + -1.5699135065078735, + -2.4408605098724365 + ], + [ + -1.6038259267807007, + -2.3959693908691406 + ], + [ + -1.614393949508667, + -2.3200392723083496 + ], + [ + -1.6650567054748535, + -2.271584987640381 + ], + [ + -1.7133618593215942, + -2.2178595066070557 + ], + [ + -1.7562751770019531, + -2.172624111175537 + ], + [ + -1.8051111698150635, + -2.116950750350952 + ], + [ + -1.8436551094055176, + -2.0752174854278564 + ], + [ + -1.887471318244934, + -2.017869472503662 + ], + [ + -1.935383915901184, + -1.965408444404602 + ], + [ + -1.9652377367019653, + -1.9168037176132202 + ], + [ + -2.015245199203491, + -1.865540862083435 + ], + [ + -2.049727201461792, + -1.816397786140442 + ], + [ + -2.0845096111297607, + -1.7677253484725952 + ], + [ + -2.1190600395202637, + -1.7134380340576172 + ], + [ + -2.1569414138793945, + -1.6629542112350464 + ], + [ + -2.182706117630005, + -1.6181081533432007 + ], + [ + -2.21492338180542, + -1.5600908994674683 + ], + [ + -2.240243911743164, + -1.5129543542861938 + ], + [ + -2.2668704986572266, + -1.4619073867797852 + ], + [ + -2.2890572547912598, + -1.4081640243530273 + ], + [ + -2.309572458267212, + -1.3622357845306396 + ], + [ + -2.328902244567871, + -1.3162614107131958 + ], + [ + -2.3448688983917236, + -1.2630114555358887 + ], + [ + -2.359326124191284, + -1.2151830196380615 + ], + [ + -2.3695356845855713, + -1.1693148612976074 + ], + [ + -2.37742280960083, + -1.1229044198989868 + ], + [ + -2.3962225914001465, + -1.0670197010040283 + ], + [ + -2.4035537242889404, + -1.0205974578857422 + ], + [ + -2.409940242767334, + -0.9709780812263489 + ], + [ + -2.4227852821350098, + -0.9152293801307678 + ], + [ + -2.432558536529541, + -0.8628412485122681 + ], + [ + -2.438744068145752, + -0.8087666630744934 + ], + [ + -2.449455738067627, + -0.7481354475021362 + ], + [ + -2.458549737930298, + -0.6966015100479126 + ], + [ + -2.4701733589172363, + -0.6347084641456604 + ], + [ + -2.481724739074707, + -0.5720213651657104 + ], + [ + -2.4954638481140137, + -0.5101106762886047 + ], + [ + -2.5049126148223877, + -0.4543842077255249 + ], + [ + -2.516608953475952, + -0.3894689977169037 + ], + [ + -2.524860143661499, + -0.3316671848297119 + ], + [ + -2.5326662063598633, + -0.2716933786869049 + ], + [ + -2.5405213832855225, + -0.214151069521904 + ], + [ + -2.5439300537109375, + -0.15591870248317719 + ], + [ + -2.5310826301574707, + -0.10170163959264755 + ], + [ + -2.5259640216827393, + -0.04758312553167343 + ], + [ + -2.5214319229125977, + 0.006630722898989916 + ], + [ + -2.515803098678589, + 0.0630185455083847 + ], + [ + -2.5121400356292725, + 0.11734993010759354 + ], + [ + -2.504509210586548, + 0.1752939373254776 + ], + [ + -2.498757839202881, + 0.2326093167066574 + ], + [ + -2.4909470081329346, + 0.29318442940711975 + ], + [ + -2.481529712677002, + 0.3448987603187561 + ], + [ + -2.471829891204834, + 0.4028322100639343 + ], + [ + -2.4626543521881104, + 0.46232303977012634 + ], + [ + -2.4544951915740967, + 0.5250644087791443 + ], + [ + -2.4476404190063477, + 0.5869656801223755 + ], + [ + -2.4322195053100586, + 0.6381606459617615 + ], + [ + -2.4208080768585205, + 0.699306070804596 + ], + [ + -2.40993332862854, + 0.7604122161865234 + ], + [ + -2.4014947414398193, + 0.823302686214447 + ], + [ + -2.3986172676086426, + 0.882895827293396 + ], + [ + -2.377147674560547, + 0.9355443716049194 + ], + [ + -2.3657712936401367, + 0.9981734752655029 + ], + [ + -2.3587214946746826, + 1.0558542013168335 + ], + [ + -2.348647356033325, + 1.1116126775741577 + ], + [ + -2.3433103561401367, + 1.162088394165039 + ], + [ + -2.3206000328063965, + 1.214419960975647 + ], + [ + -2.311429500579834, + 1.266565203666687 + ], + [ + -2.3033065795898438, + 1.3190207481384277 + ], + [ + -2.288780689239502, + 1.364691138267517 + ], + [ + -2.2776131629943848, + 1.39956796169281 + ], + [ + -2.2566123008728027, + 1.4340288639068604 + ], + [ + -2.238870143890381, + 1.4968202114105225 + ], + [ + -2.217102289199829, + 1.5299625396728516 + ], + [ + -2.1914148330688477, + 1.5592384338378906 + ], + [ + -2.1664562225341797, + 1.5942028760910034 + ], + [ + -2.1303153038024902, + 1.6270591020584106 + ], + [ + -2.1007659435272217, + 1.6801254749298096 + ], + [ + -2.0617787837982178, + 1.7135024070739746 + ], + [ + -2.0187318325042725, + 1.7435567378997803 + ], + [ + -1.9732245206832886, + 1.7836230993270874 + ], + [ + -1.9123824834823608, + 1.8198293447494507 + ], + [ + -1.8512375354766846, + 1.8638449907302856 + ], + [ + -1.8212616443634033, + 1.9116652011871338 + ], + [ + -1.7619048357009888, + 1.952696681022644 + ], + [ + -1.6968085765838623, + 2.000530481338501 + ], + [ + -1.6325103044509888, + 2.0580661296844482 + ], + [ + -1.56403386592865, + 2.1212356090545654 + ], + [ + -1.5189120769500732, + 2.1666905879974365 + ], + [ + -1.4595146179199219, + 2.2260842323303223 + ], + [ + -1.3955247402191162, + 2.2925119400024414 + ], + [ + -1.3331797122955322, + 2.348280429840088 + ], + [ + -1.277046799659729, + 2.4181981086730957 + ], + [ + -1.2247368097305298, + 2.4858598709106445 + ], + [ + -1.1730883121490479, + 2.5297718048095703 + ], + [ + -1.1145775318145752, + 2.6005795001983643 + ], + [ + -1.0586174726486206, + 2.6596319675445557 + ], + [ + -1.0035704374313354, + 2.7157058715820312 + ], + [ + -0.9526699781417847, + 2.7738921642303467 + ], + [ + -0.9037090539932251, + 2.8248798847198486 + ], + [ + -0.8272920250892639, + 2.8593645095825195 + ], + [ + -0.7759271264076233, + 2.913207769393921 + ], + [ + -0.7180298566818237, + 2.961766481399536 + ], + [ + -0.6586769223213196, + 3.0026917457580566 + ], + [ + -0.5935488343238831, + 3.04319167137146 + ], + [ + -0.5287371873855591, + 3.075793981552124 + ], + [ + -0.4509289860725403, + 3.108637809753418 + ], + [ + -0.37919703125953674, + 3.148947238922119 + ], + [ + -0.3030444383621216, + 3.186566114425659 + ], + [ + -0.23291069269180298, + 3.2125282287597656 + ], + [ + -0.16017915308475494, + 3.245469808578491 + ], + [ + -0.08076898008584976, + 3.2632596492767334 + ], + [ + 0.0034809906501322985, + 3.281670093536377 + ], + [ + 0.09241408854722977, + 3.313228130340576 + ], + [ + 0.16599591076374054, + 3.3202602863311768 + ], + [ + 0.25270962715148926, + 3.3298778533935547 + ], + [ + 0.323844850063324, + 3.34655499458313 + ], + [ + 0.3980112671852112, + 3.345160722732544 + ], + [ + 0.6012245416641235, + 3.2154409885406494 + ], + [ + 0.6986408233642578, + 3.2334225177764893 + ], + [ + 0.8037625551223755, + 3.2061214447021484 + ], + [ + 0.9018125534057617, + 3.197391986846924 + ], + [ + 0.9966645836830139, + 3.1950623989105225 + ], + [ + 1.100264072418213, + 3.1975834369659424 + ], + [ + 1.2015939950942993, + 3.179136276245117 + ], + [ + 1.2966614961624146, + 3.1633293628692627 + ], + [ + 1.3896212577819824, + 3.1398048400878906 + ], + [ + 1.479956865310669, + 3.1150906085968018 + ], + [ + 1.5729248523712158, + 3.0911331176757812 + ], + [ + 1.6655943393707275, + 3.0686306953430176 + ], + [ + 1.7642247676849365, + 3.031464099884033 + ], + [ + 1.8513787984848022, + 2.9915013313293457 + ], + [ + 1.9333360195159912, + 2.9451098442077637 + ], + [ + 2.013350486755371, + 2.892296552658081 + ], + [ + 2.0893921852111816, + 2.8449060916900635 + ], + [ + 2.190803289413452, + 2.793858528137207 + ], + [ + 2.2604777812957764, + 2.730128526687622 + ], + [ + 2.3287506103515625, + 2.657663345336914 + ], + [ + 2.4079689979553223, + 2.57861065864563 + ], + [ + 2.4713213443756104, + 2.499748706817627 + ], + [ + 2.5613625049591064, + 2.4401073455810547 + ], + [ + 2.6170177459716797, + 2.353670120239258 + ], + [ + 2.6878294944763184, + 2.260274648666382 + ], + [ + 2.753448963165283, + 2.165837049484253 + ], + [ + 2.823392629623413, + 2.0721850395202637 + ], + [ + 2.8815836906433105, + 1.9684388637542725 + ], + [ + 2.9418234825134277, + 1.8823113441467285 + ], + [ + 2.9993512630462646, + 1.7779598236083984 + ], + [ + 3.0638654232025146, + 1.6689257621765137 + ], + [ + 3.120985984802246, + 1.5646967887878418 + ], + [ + 3.176168918609619, + 1.4593840837478638 + ], + [ + 3.221851110458374, + 1.3611947298049927 + ], + [ + 3.2703027725219727, + 1.2551487684249878 + ], + [ + 3.314528703689575, + 1.1522789001464844 + ], + [ + 3.358705520629883, + 1.0477241277694702 + ], + [ + 3.393988847732544, + 0.9449462294578552 + ], + [ + 3.425987482070923, + 0.8471609354019165 + ], + [ + 3.4501144886016846, + 0.7541954517364502 + ], + [ + 3.4748170375823975, + 0.6561803817749023 + ], + [ + 3.490684986114502, + 0.5639700889587402 + ], + [ + 3.5062804222106934, + 0.47066357731819153 + ], + [ + 3.512143850326538, + 0.3838219940662384 + ], + [ + 3.511467695236206, + 0.2919124364852905 + ], + [ + 3.5095443725585938, + 0.2055841088294983 + ], + [ + 3.500391721725464, + 0.11884964257478714 + ], + [ + 3.4894795417785645, + 0.02831549569964409 + ], + [ + 3.4711596965789795, + -0.06291096657514572 + ], + [ + 3.4458889961242676, + -0.15456175804138184 + ], + [ + 3.423872232437134, + -0.2491079717874527 + ], + [ + 3.4029412269592285, + -0.34634268283843994 + ], + [ + 3.3684370517730713, + -0.43748724460601807 + ], + [ + 3.3429274559020996, + -0.538230299949646 + ], + [ + 3.3146328926086426, + -0.639981746673584 + ], + [ + 3.2913389205932617, + -0.7445842027664185 + ], + [ + 3.280872344970703, + -0.8515033721923828 + ], + [ + 3.2681515216827393, + -0.9466019868850708 + ], + [ + 3.2469065189361572, + -1.0391759872436523 + ], + [ + 3.2384347915649414, + -1.1330996751785278 + ], + [ + 3.236147165298462, + -1.2114055156707764 + ], + [ + 3.2279725074768066, + -1.2791751623153687 + ], + [ + 3.220892906188965, + -1.3336474895477295 + ], + [ + 3.2080438137054443, + -1.3774845600128174 + ], + [ + 3.188979387283325, + -1.4183796644210815 + ], + [ + 3.1651899814605713, + -1.467807412147522 + ], + [ + 3.1339194774627686, + -1.5020253658294678 + ], + [ + 3.0913002490997314, + -1.5315102338790894 + ], + [ + 3.0528945922851562, + -1.5632270574569702 + ], + [ + 3.0013017654418945, + -1.5902289152145386 + ], + [ + 2.9399356842041016, + -1.6150435209274292 + ], + [ + 2.8638460636138916, + -1.6498868465423584 + ], + [ + 2.8180105686187744, + -1.6744190454483032 + ], + [ + 2.7449934482574463, + -1.7013072967529297 + ], + [ + 2.685798406600952, + -1.7413601875305176 + ], + [ + 2.6250243186950684, + -1.77691650390625 + ], + [ + 2.555386781692505, + -1.8123455047607422 + ], + [ + 2.479574203491211, + -1.8429325819015503 + ], + [ + 2.409458637237549, + -1.8648706674575806 + ], + [ + 2.332641363143921, + -1.9105602502822876 + ], + [ + 2.2560410499572754, + -1.9429246187210083 + ], + [ + 2.182917594909668, + -1.9875386953353882 + ], + [ + 2.0997889041900635, + -2.0320308208465576 + ], + [ + 2.024116039276123, + -2.0784034729003906 + ], + [ + 1.9475886821746826, + -2.1321115493774414 + ], + [ + 1.8863918781280518, + -2.199619770050049 + ], + [ + 1.8134340047836304, + -2.2243552207946777 + ], + [ + 1.7475173473358154, + -2.274595260620117 + ], + [ + 1.6903743743896484, + -2.323765754699707 + ], + [ + 1.6264116764068604, + -2.3676347732543945 + ], + [ + 1.5649036169052124, + -2.415442943572998 + ], + [ + 1.5126910209655762, + -2.4682931900024414 + ], + [ + 1.4559847116470337, + -2.5108847618103027 + ], + [ + 1.5067088603973389, + -2.433685541152954 + ], + [ + 1.4354850053787231, + -2.459041118621826 + ], + [ + 1.3596488237380981, + -2.4921414852142334 + ], + [ + 1.2990707159042358, + -2.5050032138824463 + ], + [ + 1.213876485824585, + -2.5480167865753174 + ], + [ + 1.1385929584503174, + -2.582221269607544 + ], + [ + 1.1196260452270508, + -2.5804474353790283 + ], + [ + 1.051288366317749, + -2.5967376232147217 + ], + [ + 0.9822505116462708, + -2.618837356567383 + ], + [ + 0.9133459329605103, + -2.6521694660186768 + ], + [ + 0.8502513766288757, + -2.6788647174835205 + ], + [ + 0.7897847890853882, + -2.6934430599212646 + ], + [ + 0.7409188747406006, + -2.67445969581604 + ], + [ + 0.6796220541000366, + -2.698021173477173 + ], + [ + 0.6310502290725708, + -2.7127790451049805 + ], + [ + 0.567969024181366, + -2.7364652156829834 + ], + [ + 0.5130249857902527, + -2.7542295455932617 + ], + [ + 0.4686470031738281, + -2.760599136352539 + ], + [ + 0.39119768142700195, + -2.7356932163238525 + ], + [ + 0.344682514667511, + -2.7563765048980713 + ], + [ + 0.292266309261322, + -2.768160343170166 + ], + [ + 0.2407953292131424, + -2.7739341259002686 + ], + [ + 0.19317416846752167, + -2.776217222213745 + ], + [ + 0.14559431374073029, + -2.7851102352142334 + ], + [ + 0.08679870516061783, + -2.772270917892456 + ], + [ + 0.02751973643898964, + -2.7753713130950928 + ], + [ + -0.0221287589520216, + -2.7703962326049805 + ], + [ + -0.05639318376779556, + -2.7723548412323 + ], + [ + -0.08913721889257431, + -2.773547410964966 + ], + [ + -0.1381974071264267, + -2.7653684616088867 + ], + [ + -0.1836625635623932, + -2.751368761062622 + ], + [ + -0.24906842410564423, + -2.747755765914917 + ], + [ + -0.29194843769073486, + -2.738676071166992 + ], + [ + -0.3308609127998352, + -2.7275640964508057 + ], + [ + -0.37069809436798096, + -2.71567440032959 + ], + [ + -0.40243396162986755, + -2.7023773193359375 + ], + [ + -0.4390872120857239, + -2.6838278770446777 + ], + [ + -0.5093067288398743, + -2.678269386291504 + ], + [ + -0.5513055324554443, + -2.6624224185943604 + ], + [ + -0.5824902057647705, + -2.6460788249969482 + ], + [ + -0.6193207502365112, + -2.6262354850769043 + ], + [ + -0.6558951735496521, + -2.5970590114593506 + ], + [ + -0.6878397464752197, + -2.5803442001342773 + ], + [ + -0.7362092137336731, + -2.5304486751556396 + ], + [ + -0.7878164649009705, + -2.5496771335601807 + ], + [ + -0.8179009556770325, + -2.523115634918213 + ], + [ + -0.8537650108337402, + -2.4954874515533447 + ], + [ + -0.8906530737876892, + -2.4711174964904785 + ], + [ + -0.9379712343215942, + -2.4294235706329346 + ], + [ + -0.9765753149986267, + -2.4007070064544678 + ], + [ + -1.009769320487976, + -2.3958449363708496 + ], + [ + -1.0452934503555298, + -2.3583133220672607 + ], + [ + -1.0866135358810425, + -2.3258578777313232 + ], + [ + -1.1301994323730469, + -2.2853782176971436 + ], + [ + -1.1731122732162476, + -2.248321533203125 + ], + [ + -1.2366851568222046, + -2.216841220855713 + ], + [ + -1.2860291004180908, + -2.1825172901153564 + ], + [ + -1.311946153640747, + -2.160003185272217 + ], + [ + -1.3631658554077148, + -2.115520715713501 + ], + [ + -1.4041202068328857, + -2.077498197555542 + ], + [ + -1.4603148698806763, + -2.053065061569214 + ], + [ + -1.5211104154586792, + -2.0191385746002197 + ], + [ + -1.5786432027816772, + -1.9933059215545654 + ], + [ + -1.6268783807754517, + -1.9743926525115967 + ], + [ + -1.6797107458114624, + -1.9565876722335815 + ], + [ + -1.7073278427124023, + -1.9077991247177124 + ], + [ + -1.7595796585083008, + -1.8829877376556396 + ], + [ + -1.8067713975906372, + -1.868155837059021 + ], + [ + -1.8525307178497314, + -1.846763014793396 + ], + [ + -1.895338535308838, + -1.8364636898040771 + ], + [ + -1.936386227607727, + -1.8250645399093628 + ], + [ + -1.9687092304229736, + -1.8077285289764404 + ], + [ + -2.0043623447418213, + -1.7644195556640625 + ], + [ + -2.043865442276001, + -1.743985652923584 + ], + [ + -2.066838264465332, + -1.7290629148483276 + ], + [ + -2.090423583984375, + -1.7077398300170898 + ], + [ + -2.119485378265381, + -1.6898306608200073 + ], + [ + -2.1366147994995117, + -1.6676576137542725 + ], + [ + -2.152467727661133, + -1.645850658416748 + ], + [ + -2.1664323806762695, + -1.6129908561706543 + ], + [ + -2.2059125900268555, + -1.5755317211151123 + ], + [ + -2.227891206741333, + -1.5437229871749878 + ], + [ + -2.2379226684570312, + -1.5110615491867065 + ], + [ + -2.252920627593994, + -1.4750968217849731 + ], + [ + -2.791449785232544, + -1.9065698385238647 + ], + [ + -2.8248097896575928, + -1.8600542545318604 + ], + [ + -2.8616483211517334, + -1.806828498840332 + ], + [ + -2.8965563774108887, + -1.752760887145996 + ], + [ + -2.93147611618042, + -1.6958632469177246 + ], + [ + -2.9686074256896973, + -1.6393858194351196 + ], + [ + -3.004687786102295, + -1.5790084600448608 + ], + [ + -3.035370349884033, + -1.521194577217102 + ], + [ + -3.065730333328247, + -1.456257700920105 + ], + [ + -3.105382204055786, + -1.3917362689971924 + ], + [ + -3.1301701068878174, + -1.3286240100860596 + ], + [ + -3.1640825271606445, + -1.2588145732879639 + ], + [ + -1.9380218982696533, + -0.6812549829483032 + ], + [ + -1.9564167261123657, + -0.6363873481750488 + ], + [ + -1.9712975025177002, + -0.5979167819023132 + ], + [ + -1.9845854043960571, + -0.551088809967041 + ], + [ + -1.996727466583252, + -0.5067312121391296 + ], + [ + -2.009927988052368, + -0.4631441533565521 + ], + [ + -2.0205533504486084, + -0.4173089563846588 + ], + [ + -2.03165340423584, + -0.3692123591899872 + ], + [ + -2.0416572093963623, + -0.3221222162246704 + ], + [ + -2.0495097637176514, + -0.27521252632141113 + ], + [ + -2.059222459793091, + -0.22733239829540253 + ], + [ + -2.066757917404175, + -0.17848600447177887 + ], + [ + -2.0725724697113037, + -0.12914332747459412 + ], + [ + -2.077524423599243, + -0.0805518627166748 + ], + [ + -2.0813708305358887, + -0.03186412155628204 + ], + [ + -2.0834295749664307, + 0.019318612292408943 + ], + [ + -2.085015296936035, + 0.07048789411783218 + ], + [ + -2.0877609252929688, + 0.12178368866443634 + ], + [ + -2.084179639816284, + 0.17363770306110382 + ], + [ + -2.0850696563720703, + 0.22520534694194794 + ], + [ + -2.079714298248291, + 0.276186466217041 + ], + [ + -2.0764317512512207, + 0.32878097891807556 + ], + [ + -2.069802761077881, + 0.38367876410484314 + ], + [ + -2.0614047050476074, + 0.43458980321884155 + ], + [ + -2.0524802207946777, + 0.4884738326072693 + ], + [ + -2.0398166179656982, + 0.5374402403831482 + ], + [ + -2.031359910964966, + 0.5890799760818481 + ], + [ + -2.01239013671875, + 0.6371045708656311 + ], + [ + -1.9977989196777344, + 0.695223331451416 + ], + [ + -1.9823168516159058, + 0.7440853714942932 + ], + [ + -1.966230034828186, + 0.7954853773117065 + ], + [ + -1.94375479221344, + 0.8469129204750061 + ], + [ + -1.9253920316696167, + 0.8953269124031067 + ], + [ + -1.900429606437683, + 0.9443791508674622 + ], + [ + -1.8786402940750122, + 0.9920978546142578 + ], + [ + -1.8507699966430664, + 1.0421898365020752 + ], + [ + -1.8325374126434326, + 1.0911065340042114 + ], + [ + -1.7948918342590332, + 1.1378607749938965 + ], + [ + -1.766099214553833, + 1.1800302267074585 + ], + [ + -1.7350586652755737, + 1.225382685661316 + ], + [ + -1.7077537775039673, + 1.281041145324707 + ], + [ + -1.6701639890670776, + 1.3195489645004272 + ], + [ + -1.636749267578125, + 1.361938714981079 + ], + [ + -1.596504807472229, + 1.4023821353912354 + ], + [ + -1.568630337715149, + 1.446921944618225 + ], + [ + -1.5240167379379272, + 1.48444402217865 + ], + [ + -1.4883155822753906, + 1.5207500457763672 + ], + [ + -1.4434705972671509, + 1.5604593753814697 + ], + [ + -1.4005557298660278, + 1.5977369546890259 + ], + [ + -1.3577473163604736, + 1.6393706798553467 + ], + [ + -1.3252350091934204, + 1.664610743522644 + ], + [ + -1.2769538164138794, + 1.697306513786316 + ], + [ + -1.2378507852554321, + 1.7319427728652954 + ], + [ + -1.1912530660629272, + 1.7650622129440308 + ], + [ + -1.1457977294921875, + 1.797437310218811 + ], + [ + -1.1036758422851562, + 1.8191578388214111 + ], + [ + -1.059325098991394, + 1.847055196762085 + ], + [ + -1.0121581554412842, + 1.8722143173217773 + ], + [ + -0.9652036428451538, + 1.8905975818634033 + ], + [ + -0.9091196656227112, + 1.9128003120422363 + ], + [ + -0.8679909706115723, + 1.9254637956619263 + ], + [ + -0.8212155103683472, + 1.9488880634307861 + ], + [ + -0.7735369205474854, + 1.9812850952148438 + ], + [ + -0.7337667942047119, + 1.993781566619873 + ], + [ + -0.6725926399230957, + 2.000157594680786 + ], + [ + -0.6286024451255798, + 2.015247344970703 + ], + [ + -0.5733926296234131, + 2.0243079662323 + ], + [ + -0.5192458629608154, + 2.0400798320770264 + ], + [ + -0.4837411642074585, + 2.0400397777557373 + ], + [ + -0.42033877968788147, + 2.0548458099365234 + ], + [ + -0.3703024685382843, + 2.0570318698883057 + ], + [ + -0.3238333463668823, + 2.0592498779296875 + ], + [ + -0.2719217836856842, + 2.0603342056274414 + ], + [ + -0.22131659090518951, + 2.0677454471588135 + ], + [ + -0.1652953326702118, + 2.0692522525787354 + ], + [ + -0.12133748829364777, + 2.0721511840820312 + ], + [ + -0.05586622655391693, + 2.0667307376861572 + ], + [ + -0.00303664687089622, + 2.0715296268463135 + ], + [ + 0.05392998829483986, + 2.0672597885131836 + ], + [ + 0.09079793840646744, + 2.059221029281616 + ], + [ + 0.14442254602909088, + 2.0592737197875977 + ], + [ + 0.1988629847764969, + 2.052793502807617 + ], + [ + 0.24721987545490265, + 2.0414044857025146 + ], + [ + 0.291748970746994, + 2.03579044342041 + ], + [ + 0.34584155678749084, + 2.013308048248291 + ], + [ + 0.3498954176902771, + 2.013760566711426 + ], + [ + 0.44442927837371826, + 1.9864822626113892 + ], + [ + 0.486904501914978, + 1.967758297920227 + ], + [ + 0.5503583550453186, + 1.9490748643875122 + ], + [ + 0.6016960144042969, + 1.930173635482788 + ], + [ + 0.6561136245727539, + 1.9200116395950317 + ], + [ + 0.6921229958534241, + 1.884605884552002 + ], + [ + 0.746514618396759, + 1.872123122215271 + ], + [ + 0.7971904873847961, + 1.8507745265960693 + ], + [ + 0.8462473154067993, + 1.8199008703231812 + ], + [ + 0.8987648487091064, + 1.7875123023986816 + ], + [ + 0.9300346970558167, + 1.7694324254989624 + ], + [ + 0.9811446070671082, + 1.7380685806274414 + ], + [ + 1.0302780866622925, + 1.708695411682129 + ], + [ + 1.0750136375427246, + 1.6686739921569824 + ], + [ + 1.1203478574752808, + 1.6366709470748901 + ], + [ + 1.1618058681488037, + 1.6006548404693604 + ], + [ + 1.212876558303833, + 1.583657145500183 + ], + [ + 1.2426501512527466, + 1.5379875898361206 + ], + [ + 1.2888134717941284, + 1.488862156867981 + ], + [ + 1.3364973068237305, + 1.4652128219604492 + ], + [ + 1.3752678632736206, + 1.4231464862823486 + ], + [ + 1.4101969003677368, + 1.3873658180236816 + ], + [ + 1.4537144899368286, + 1.3397568464279175 + ], + [ + 1.4855140447616577, + 1.3018559217453003 + ], + [ + 1.5231287479400635, + 1.257973313331604 + ], + [ + 1.5630786418914795, + 1.2126952409744263 + ], + [ + 1.5984357595443726, + 1.1620815992355347 + ], + [ + 1.6270167827606201, + 1.1191442012786865 + ], + [ + 1.663567304611206, + 1.0778692960739136 + ], + [ + 1.6910918951034546, + 1.0264650583267212 + ], + [ + 1.7276982069015503, + 0.9763637185096741 + ], + [ + 1.7540286779403687, + 0.9273973703384399 + ], + [ + 1.7770545482635498, + 0.8833888173103333 + ], + [ + 1.8063033819198608, + 0.831289529800415 + ], + [ + 1.832929253578186, + 0.7769882678985596 + ], + [ + 1.8572851419448853, + 0.7268067598342896 + ], + [ + 1.8800338506698608, + 0.6729303002357483 + ], + [ + 1.9001457691192627, + 0.6205061674118042 + ], + [ + 1.9204691648483276, + 0.5683481693267822 + ], + [ + 1.9387308359146118, + 0.5138425827026367 + ], + [ + 1.9545801877975464, + 0.45858830213546753 + ], + [ + 1.9708040952682495, + 0.40480029582977295 + ], + [ + 1.9849083423614502, + 0.34796279668807983 + ], + [ + 1.9995287656784058, + 0.29361093044281006 + ], + [ + 2.0100507736206055, + 0.23634448647499084 + ], + [ + 2.0204520225524902, + 0.18206648528575897 + ], + [ + 2.028102397918701, + 0.1275234967470169 + ], + [ + 2.036010503768921, + 0.07056398689746857 + ], + [ + 2.041813373565674, + 0.015058539807796478 + ], + [ + 2.046518325805664, + -0.04026557505130768 + ], + [ + 2.0510027408599854, + -0.09844320267438889 + ], + [ + 2.0557198524475098, + -0.15089811384677887 + ], + [ + 2.054563283920288, + -0.20784515142440796 + ], + [ + 2.0513088703155518, + -0.2593631148338318 + ], + [ + 2.0502877235412598, + -0.31452545523643494 + ], + [ + 2.0480008125305176, + -0.3660281002521515 + ], + [ + 2.038076400756836, + -0.4192070960998535 + ], + [ + 2.034012794494629, + -0.4836544096469879 + ], + [ + 2.0264739990234375, + -0.5324689745903015 + ], + [ + 2.0201902389526367, + -0.5860554575920105 + ], + [ + 2.0042788982391357, + -0.6401162147521973 + ], + [ + 1.9974344968795776, + -0.7020568251609802 + ], + [ + 1.9813531637191772, + -0.7487213611602783 + ], + [ + 1.9677995443344116, + -0.8069472312927246 + ], + [ + 1.9444355964660645, + -0.8624042868614197 + ], + [ + 1.9347108602523804, + -0.9109494090080261 + ], + [ + 1.9188659191131592, + -0.9560343027114868 + ], + [ + 1.901851773262024, + -1.0041366815567017 + ], + [ + 1.880584716796875, + -1.0603302717208862 + ], + [ + 1.8605338335037231, + -1.1079481840133667 + ], + [ + 1.838357925415039, + -1.155991554260254 + ], + [ + 1.8157652616500854, + -1.2057971954345703 + ], + [ + 1.7961349487304688, + -1.2516098022460938 + ], + [ + 1.7543240785598755, + -1.294473648071289 + ], + [ + 1.7269049882888794, + -1.3446208238601685 + ], + [ + 1.6924163103103638, + -1.3877806663513184 + ], + [ + 1.6780942678451538, + -1.4375320672988892 + ], + [ + 1.635474681854248, + -1.4681237936019897 + ], + [ + 1.6064388751983643, + -1.5222898721694946 + ], + [ + 1.5697021484375, + -1.5558977127075195 + ], + [ + 1.5407084226608276, + -1.5955097675323486 + ], + [ + 1.4976379871368408, + -1.6374964714050293 + ], + [ + 1.4638185501098633, + -1.6789847612380981 + ], + [ + 1.4081573486328125, + -1.6842761039733887 + ], + [ + 1.3682929277420044, + -1.7204372882843018 + ], + [ + 1.320397138595581, + -1.748935580253601 + ], + [ + 1.2911608219146729, + -1.7788629531860352 + ], + [ + 1.2459837198257446, + -1.8246872425079346 + ], + [ + 1.2065948247909546, + -1.8448867797851562 + ], + [ + 1.1639413833618164, + -1.8697928190231323 + ], + [ + 1.1213939189910889, + -1.8992397785186768 + ], + [ + 1.076452612876892, + -1.92745041847229 + ], + [ + 1.0025427341461182, + -1.8988983631134033 + ], + [ + 0.9604926109313965, + -1.92299222946167 + ], + [ + 0.9137226343154907, + -1.9469068050384521 + ], + [ + 0.8756998777389526, + -1.965029001235962 + ], + [ + 0.830867350101471, + -2.0096206665039062 + ], + [ + 0.7979220151901245, + -2.041229009628296 + ], + [ + 0.7533910870552063, + -2.0795016288757324 + ], + [ + 0.6991179585456848, + -2.135439395904541 + ], + [ + 0.6391042470932007, + -2.1645803451538086 + ], + [ + 0.5779377222061157, + -2.1957249641418457 + ], + [ + 0.5096164345741272, + -2.227792978286743 + ], + [ + 0.40384984016418457, + -2.156710147857666 + ], + [ + 0.30431416630744934, + -2.1455559730529785 + ], + [ + 0.16669215261936188, + -2.095566511154175 + ], + [ + -0.0007230218034237623, + -2.0372471809387207 + ], + [ + -0.15961512923240662, + -1.93123197555542 + ], + [ + -0.3035997748374939, + -1.7959437370300293 + ], + [ + -0.44613972306251526, + -1.6690638065338135 + ], + [ + -0.5174693465232849, + -1.603934407234192 + ], + [ + -0.5369977951049805, + -1.5956884622573853 + ], + [ + -0.5466777682304382, + -1.6024945974349976 + ], + [ + -0.5914090275764465, + -1.9416694641113281 + ], + [ + -0.6154401898384094, + -1.9910908937454224 + ], + [ + -0.6540391445159912, + -2.0064868927001953 + ], + [ + -0.6620157361030579, + -1.9693288803100586 + ], + [ + -0.6821959018707275, + -1.8929646015167236 + ], + [ + -0.6717923283576965, + -1.7868645191192627 + ], + [ + -0.6316606998443604, + -1.7065097093582153 + ], + [ + -0.6064701080322266, + -1.6143364906311035 + ], + [ + -0.5723339319229126, + -1.5329195261001587 + ], + [ + -0.5244971513748169, + -1.4685039520263672 + ], + [ + -0.4839469790458679, + -1.4298886060714722 + ], + [ + -0.5467584133148193, + -1.5112961530685425 + ], + [ + -0.5169552564620972, + -1.4715664386749268 + ], + [ + -0.4888838529586792, + -1.4424861669540405 + ], + [ + -0.47955432534217834, + -1.4336090087890625 + ], + [ + -0.48837751150131226, + -1.480006456375122 + ], + [ + -0.5695234537124634, + -1.6137259006500244 + ], + [ + -0.703277587890625, + -1.7682913541793823 + ], + [ + -0.8751625418663025, + -1.9658088684082031 + ], + [ + -1.021559476852417, + -2.09790301322937 + ], + [ + -1.1317919492721558, + -2.1709444522857666 + ], + [ + -1.2223447561264038, + -2.1657729148864746 + ], + [ + -1.307865858078003, + -2.1378815174102783 + ], + [ + -1.3335421085357666, + -2.1051924228668213 + ], + [ + -1.407795786857605, + -2.084193706512451 + ], + [ + -1.4781092405319214, + -2.037177324295044 + ], + [ + -1.5381258726119995, + -1.9838474988937378 + ], + [ + -1.5949058532714844, + -1.924755334854126 + ], + [ + -1.6502083539962769, + -1.8437089920043945 + ], + [ + -1.6803390979766846, + -1.7542593479156494 + ], + [ + -1.7139564752578735, + -1.6718940734863281 + ], + [ + -1.7235602140426636, + -1.5838582515716553 + ], + [ + -1.742680549621582, + -1.5232243537902832 + ], + [ + -1.759372591972351, + -1.4874428510665894 + ], + [ + -1.7913507223129272, + -1.472325086593628 + ], + [ + -1.8817002773284912, + -1.4684678316116333 + ], + [ + -1.9359081983566284, + -1.4603327512741089 + ], + [ + -1.98829185962677, + -1.4758949279785156 + ], + [ + -2.061333656311035, + -1.475332498550415 + ], + [ + -2.133277416229248, + -1.4875277280807495 + ], + [ + -2.216613292694092, + -1.490309238433838 + ], + [ + -2.293349504470825, + -1.4785691499710083 + ], + [ + -2.360572576522827, + -1.451229453086853 + ], + [ + -2.428640365600586, + -1.4067238569259644 + ], + [ + -2.490722894668579, + -1.3552038669586182 + ], + [ + -2.548130989074707, + -1.2880886793136597 + ], + [ + -2.5981948375701904, + -1.2297471761703491 + ], + [ + -2.6376636028289795, + -1.1547075510025024 + ], + [ + -2.699847936630249, + -1.105422854423523 + ], + [ + -2.7379062175750732, + -1.0327893495559692 + ], + [ + -2.771409034729004, + -0.9587083458900452 + ], + [ + -2.8092641830444336, + -0.8920864462852478 + ], + [ + -2.8385164737701416, + -0.8178943991661072 + ], + [ + -2.8613102436065674, + -0.7452590465545654 + ], + [ + -2.87283992767334, + -0.6713016629219055 + ], + [ + -2.8888585567474365, + -0.5955212116241455 + ], + [ + -2.898982524871826, + -0.5240437984466553 + ], + [ + -2.9051389694213867, + -0.45075616240501404 + ], + [ + -2.9065964221954346, + -0.374970406293869 + ], + [ + -2.9089837074279785, + -0.30198970437049866 + ], + [ + -3.0060527324676514, + -0.21801619231700897 + ], + [ + -3.0143535137176514, + -0.1369660496711731 + ], + [ + -3.0209598541259766, + -0.0611669197678566 + ], + [ + -3.028440475463867, + 0.016525788232684135 + ], + [ + -3.024395704269409, + 0.09071783721446991 + ], + [ + -3.0196921825408936, + 0.16901813447475433 + ], + [ + -3.0163137912750244, + 0.2441398650407791 + ], + [ + -3.008920669555664, + 0.31954729557037354 + ], + [ + -2.9946820735931396, + 0.39752066135406494 + ], + [ + -2.985218048095703, + 0.4645140767097473 + ], + [ + -2.9679114818573, + 0.5407410860061646 + ], + [ + -2.951253652572632, + 0.6119205355644226 + ], + [ + -2.9378957748413086, + 0.6873565316200256 + ], + [ + -2.9552698135375977, + 0.7863364219665527 + ], + [ + -2.941596031188965, + 0.8604797124862671 + ], + [ + -2.91585636138916, + 0.9296387434005737 + ], + [ + -2.8957505226135254, + 1.011655330657959 + ], + [ + -2.8757717609405518, + 1.0686922073364258 + ], + [ + -2.8537776470184326, + 1.1470229625701904 + ], + [ + -2.8254878520965576, + 1.2149730920791626 + ], + [ + -2.8036656379699707, + 1.2835983037948608 + ], + [ + -2.7702906131744385, + 1.3671512603759766 + ], + [ + -2.731976270675659, + 1.4457106590270996 + ], + [ + -2.685807943344116, + 1.524872064590454 + ], + [ + -2.6257245540618896, + 1.5976345539093018 + ], + [ + -2.562197208404541, + 1.6476389169692993 + ], + [ + -2.4941303730010986, + 1.7004954814910889 + ], + [ + -2.441291332244873, + 1.765203595161438 + ], + [ + -2.3795456886291504, + 1.786002278327942 + ], + [ + -2.3428971767425537, + 1.826586127281189 + ], + [ + -2.290980339050293, + 1.8493847846984863 + ], + [ + -2.2510666847229004, + 1.895548701286316 + ], + [ + -2.207073926925659, + 1.9289895296096802 + ], + [ + -2.1491286754608154, + 1.9723033905029297 + ], + [ + -2.1058473587036133, + 2.0015950202941895 + ], + [ + -2.0527231693267822, + 2.053556203842163 + ], + [ + -2.008242130279541, + 2.0950515270233154 + ], + [ + -1.9466345310211182, + 2.0975701808929443 + ], + [ + -1.8963279724121094, + 2.1484405994415283 + ], + [ + -1.8397786617279053, + 2.164752244949341 + ], + [ + -1.7934467792510986, + 2.197892427444458 + ], + [ + -1.7395507097244263, + 2.2298998832702637 + ], + [ + -1.6805357933044434, + 2.241065263748169 + ], + [ + -1.626237154006958, + 2.281501531600952 + ], + [ + -1.580927848815918, + 2.281951427459717 + ], + [ + -1.5149692296981812, + 2.3193085193634033 + ], + [ + -1.4729019403457642, + 2.3068020343780518 + ], + [ + -1.4095947742462158, + 2.325591802597046 + ], + [ + -1.3586779832839966, + 2.33803391456604 + ], + [ + -1.3133686780929565, + 2.352111577987671 + ], + [ + -1.2728804349899292, + 2.3475606441497803 + ], + [ + -1.2090508937835693, + 2.364555597305298 + ], + [ + -1.16860830783844, + 2.3786070346832275 + ], + [ + -1.1079230308532715, + 2.397102117538452 + ], + [ + -1.0568180084228516, + 2.3915398120880127 + ], + [ + -1.0217708349227905, + 2.4122235774993896 + ], + [ + -0.9690747261047363, + 2.4326083660125732 + ], + [ + -0.9199689030647278, + 2.4372594356536865 + ], + [ + -0.8800275921821594, + 2.4391891956329346 + ], + [ + -0.8299617171287537, + 2.442882776260376 + ], + [ + -0.7953250408172607, + 2.454188823699951 + ], + [ + -0.7407042384147644, + 2.484259843826294 + ], + [ + -0.7108675837516785, + 2.471132755279541 + ], + [ + -0.6571875810623169, + 2.4957528114318848 + ], + [ + -0.6146035194396973, + 2.4987189769744873 + ], + [ + -0.5416606664657593, + 2.504697322845459 + ], + [ + -0.5265747308731079, + 2.5077855587005615 + ], + [ + -0.46934884786605835, + 2.521806478500366 + ], + [ + -0.434832364320755, + 2.5091958045959473 + ], + [ + -0.36391815543174744, + 2.5262434482574463 + ], + [ + -0.3179168105125427, + 2.5355210304260254 + ], + [ + -0.2656274735927582, + 2.5462799072265625 + ], + [ + -0.21717469394207, + 2.5657131671905518 + ], + [ + -0.1435788869857788, + 2.555009126663208 + ], + [ + -0.09212776273488998, + 2.570389747619629 + ], + [ + -0.019963327795267105, + 2.554560422897339 + ], + [ + 0.02900787442922592, + 2.5799942016601562 + ], + [ + 0.07197843492031097, + 2.557062864303589 + ], + [ + 0.1461535543203354, + 2.566439628601074 + ], + [ + 0.20438595116138458, + 2.5654072761535645 + ], + [ + 0.27715763449668884, + 2.5416455268859863 + ], + [ + 0.34483128786087036, + 2.5444228649139404 + ], + [ + 0.4053838551044464, + 2.521430730819702 + ], + [ + 0.44907495379447937, + 2.536271810531616 + ], + [ + 0.5267279148101807, + 2.5014867782592773 + ], + [ + 0.5797100067138672, + 2.5000946521759033 + ], + [ + 0.6485784649848938, + 2.4758095741271973 + ], + [ + 0.7015215754508972, + 2.4691431522369385 + ], + [ + 0.7702768445014954, + 2.437464475631714 + ], + [ + 0.8378487229347229, + 2.4557366371154785 + ], + [ + 0.8952564597129822, + 2.412418842315674 + ], + [ + 0.9522731900215149, + 2.3953609466552734 + ], + [ + 1.017796277999878, + 2.376837730407715 + ], + [ + 1.081761121749878, + 2.3485748767852783 + ], + [ + 1.1479027271270752, + 2.3155946731567383 + ], + [ + 1.2272872924804688, + 2.297560214996338 + ], + [ + 1.2780535221099854, + 2.2550644874572754 + ], + [ + 1.347337245941162, + 2.21794056892395 + ], + [ + 1.3958308696746826, + 2.1762609481811523 + ], + [ + 1.4838509559631348, + 2.1413886547088623 + ], + [ + 1.5299501419067383, + 2.1108503341674805 + ], + [ + 1.5791958570480347, + 2.059333324432373 + ], + [ + 1.6468656063079834, + 2.0430526733398438 + ], + [ + 1.6970839500427246, + 1.9930343627929688 + ], + [ + 1.758292317390442, + 1.9495643377304077 + ], + [ + 1.817649483680725, + 1.9155889749526978 + ], + [ + 1.875776767730713, + 1.860366702079773 + ], + [ + 1.9489474296569824, + 1.807906150817871 + ], + [ + 1.9897416830062866, + 1.763887882232666 + ], + [ + 2.0498056411743164, + 1.718097448348999 + ], + [ + 2.0922434329986572, + 1.6674000024795532 + ], + [ + 2.152153968811035, + 1.6012805700302124 + ], + [ + 2.2010586261749268, + 1.5607726573944092 + ], + [ + 2.241713762283325, + 1.4996979236602783 + ], + [ + 2.296769142150879, + 1.4454686641693115 + ], + [ + 2.349811553955078, + 1.3882157802581787 + ], + [ + 2.393505811691284, + 1.3366438150405884 + ], + [ + 2.432894229888916, + 1.2701221704483032 + ], + [ + 2.483128547668457, + 1.211282730102539 + ], + [ + 2.5250916481018066, + 1.1440843343734741 + ], + [ + 2.5738120079040527, + 1.0789321660995483 + ], + [ + 2.613370656967163, + 1.010829210281372 + ], + [ + 2.660210609436035, + 0.9440741539001465 + ], + [ + 2.7021946907043457, + 0.8653551936149597 + ], + [ + 2.7241241931915283, + 0.8045095801353455 + ], + [ + 2.760359764099121, + 0.7413092851638794 + ], + [ + 2.795538902282715, + 0.6616107225418091 + ], + [ + 2.826040029525757, + 0.590476393699646 + ], + [ + 2.8578221797943115, + 0.5151784420013428 + ], + [ + 2.889927387237549, + 0.4330434799194336 + ], + [ + 2.917295455932617, + 0.35328972339630127 + ], + [ + 2.945634126663208, + 0.27161505818367004 + ], + [ + 2.9701731204986572, + 0.18377436697483063 + ], + [ + 2.9934866428375244, + 0.09508197754621506 + ], + [ + 3.0185632705688477, + 0.007568540051579475 + ], + [ + 3.0382437705993652, + -0.08431556075811386 + ], + [ + 3.0411157608032227, + -0.16556458175182343 + ], + [ + 3.0593483448028564, + -0.2550075352191925 + ], + [ + 3.062624931335449, + -0.3492816984653473 + ], + [ + 3.08176589012146, + -0.44773417711257935 + ], + [ + 3.0867865085601807, + -0.530753493309021 + ], + [ + 3.0762813091278076, + -0.6283515095710754 + ], + [ + 3.0886054039001465, + -0.7265336513519287 + ], + [ + 3.098428249359131, + -0.820467472076416 + ], + [ + 3.0879530906677246, + -0.9233728051185608 + ], + [ + 3.0818450450897217, + -1.0276364088058472 + ], + [ + 3.080449342727661, + -1.1320977210998535 + ], + [ + 3.0747923851013184, + -1.241410255432129 + ], + [ + 3.088430643081665, + -1.3511179685592651 + ], + [ + 3.0860888957977295, + -1.4537824392318726 + ], + [ + 2.9864771366119385, + -1.553974986076355 + ], + [ + 2.952021837234497, + -1.6467806100845337 + ], + [ + 2.9314091205596924, + -1.7706636190414429 + ], + [ + 2.9000041484832764, + -1.869678020477295 + ], + [ + 2.849717855453491, + -1.9651201963424683 + ], + [ + 2.808516502380371, + -2.0988059043884277 + ], + [ + 2.754305601119995, + -2.206711769104004 + ], + [ + 2.7091434001922607, + -2.2999792098999023 + ], + [ + 2.640913486480713, + -2.422971248626709 + ], + [ + 2.556652545928955, + -2.531576633453369 + ], + [ + 2.4974682331085205, + -2.64717960357666 + ], + [ + 2.3886516094207764, + -2.737642765045166 + ], + [ + 2.2902026176452637, + -2.8729872703552246 + ], + [ + 2.1772429943084717, + -2.927081346511841 + ], + [ + 2.0883567333221436, + -3.0072247982025146 + ], + [ + 1.9987090826034546, + -3.1126179695129395 + ], + [ + 1.8610025644302368, + -3.232351303100586 + ], + [ + 1.7589349746704102, + -3.292337417602539 + ], + [ + 1.659929633140564, + -3.3562400341033936 + ], + [ + 1.5093977451324463, + -3.4473161697387695 + ], + [ + 1.3543728590011597, + -3.494140625 + ], + [ + 1.236073613166809, + -3.5554842948913574 + ], + [ + 1.0541975498199463, + -3.609354257583618 + ], + [ + 0.8806217312812805, + -3.6258671283721924 + ], + [ + 0.6783598065376282, + -3.6628384590148926 + ], + [ + 0.44741368293762207, + -3.6658308506011963 + ], + [ + 0.4076051115989685, + -3.6888880729675293 + ], + [ + 0.3306502401828766, + -3.7773776054382324 + ], + [ + 0.14138071238994598, + -3.826587200164795 + ], + [ + 0.08057384938001633, + -3.930636167526245 + ], + [ + -0.07599136978387833, + -3.9462947845458984 + ], + [ + -0.2448197901248932, + -3.952824592590332 + ], + [ + -0.39853471517562866, + -3.9891490936279297 + ], + [ + -0.6033897399902344, + -4.004872798919678 + ], + [ + -0.7716324925422668, + -3.9845733642578125 + ], + [ + -0.9631006717681885, + -3.9546477794647217 + ], + [ + -1.1127557754516602, + -3.8886537551879883 + ], + [ + -1.3128002882003784, + -3.82121205329895 + ], + [ + -1.495490550994873, + -3.715294599533081 + ], + [ + -3.1504106521606445, + -7.2346038818359375 + ], + [ + -3.5312721729278564, + -6.998044967651367 + ], + [ + -3.49949049949646, + -7.561951637268066 + ], + [ + -3.75161075592041, + -7.603628158569336 + ], + [ + -4.161154747009277, + -7.541780948638916 + ], + [ + -4.498991012573242, + -7.49794340133667 + ], + [ + -4.808130741119385, + -7.4427666664123535 + ], + [ + -5.15537166595459, + -7.278841495513916 + ], + [ + -5.4527411460876465, + -7.073907852172852 + ], + [ + -5.713241100311279, + -6.936950206756592 + ], + [ + -6.017079830169678, + -6.721706867218018 + ], + [ + -6.221206188201904, + -6.463183403015137 + ], + [ + -6.511232852935791, + -6.164264678955078 + ], + [ + -6.728501796722412, + -5.927440166473389 + ], + [ + -6.875892639160156, + -5.578481197357178 + ], + [ + -7.135366916656494, + -5.162881851196289 + ], + [ + -7.467226505279541, + -5.622496604919434 + ], + [ + -7.735620021820068, + -5.4007391929626465 + ], + [ + -7.957945823669434, + -5.148422718048096 + ], + [ + -8.169205665588379, + -4.929901123046875 + ], + [ + -8.368440628051758, + -4.6514201164245605 + ], + [ + -8.550945281982422, + -4.398404598236084 + ], + [ + -8.67549991607666, + -4.119737148284912 + ], + [ + -8.820838928222656, + -3.8516697883605957 + ], + [ + -8.956622123718262, + -3.5234134197235107 + ], + [ + -9.066635131835938, + -3.2587828636169434 + ], + [ + -9.139079093933105, + -2.959913730621338 + ], + [ + -9.208829879760742, + -2.7113425731658936 + ], + [ + -9.312180519104004, + -2.4324018955230713 + ], + [ + -9.335282325744629, + -2.151358127593994 + ], + [ + -9.319077491760254, + -1.88463294506073 + ], + [ + -9.570792198181152, + -1.5934621095657349 + ], + [ + -9.61026382446289, + -1.3240522146224976 + ], + [ + -9.640059471130371, + -1.0422120094299316 + ], + [ + -9.671822547912598, + -0.7444522976875305 + ], + [ + -9.653590202331543, + -0.5137006044387817 + ], + [ + -9.667980194091797, + -0.2539955973625183 + ], + [ + -9.663055419921875, + -0.00010185179417021573 + ], + [ + -9.675381660461426, + 0.25376686453819275 + ], + [ + -9.6431245803833, + 0.5032379031181335 + ], + [ + -9.670027732849121, + 0.7478411197662354 + ], + [ + -9.611234664916992, + 0.9925571084022522 + ], + [ + -9.610370635986328, + 1.2563127279281616 + ], + [ + -9.578920364379883, + 1.505988359451294 + ], + [ + -9.566892623901367, + 1.7674037218093872 + ], + [ + -9.519857406616211, + 1.9710980653762817 + ] + ], + "total_points": 1000 +} \ No newline at end of file diff --git a/vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/short_metadata.json b/vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/short_metadata.json new file mode 100644 index 0000000..603bc4b --- /dev/null +++ b/vna_system/calibration/s11_start100_stop8800_points1000_bw1khz/sdbsd/short_metadata.json @@ -0,0 +1,16 @@ +{ + "preset": { + "filename": "s11_start100_stop8800_points1000_bw1khz.bin", + "mode": "s11", + "start_freq": 100000000.0, + "stop_freq": 8800000000.0, + "points": 1000, + "bandwidth": 1000.0 + }, + "calibration_name": "sdbsd", + "standard": "short", + "sweep_number": 14, + "sweep_timestamp": 1758811996.130049, + "created_timestamp": "2025-09-25T17:53:37.988934", + "total_points": 1000 +} \ No newline at end of file diff --git a/vna_system/core/processors/base_processor.py b/vna_system/core/processors/base_processor.py index 2179802..b57265b 100644 --- a/vna_system/core/processors/base_processor.py +++ b/vna_system/core/processors/base_processor.py @@ -13,7 +13,7 @@ from vna_system.core.settings.preset_manager import ConfigPreset class UIParameter: name: str label: str - type: str # 'slider', 'toggle', 'select', 'input' + type: str # 'slider', 'toggle', 'select', 'input', 'button' value: Any options: Optional[Dict[str, Any]] = None # min/max for slider, choices for select, etc. diff --git a/vna_system/core/processors/configs/magnitude_config.json b/vna_system/core/processors/configs/magnitude_config.json index 184fbd8..2abb7ef 100644 --- a/vna_system/core/processors/configs/magnitude_config.json +++ b/vna_system/core/processors/configs/magnitude_config.json @@ -1,9 +1,9 @@ { - "y_min": -110, - "y_max": 10, + "y_min": -80, + "y_max": 15, "smoothing_enabled": false, - "smoothing_window": 17, + "smoothing_window": 5, "marker_enabled": true, - "marker_frequency": 1, - "grid_enabled": false + "marker_frequency": 100000009, + "grid_enabled": true } \ No newline at end of file diff --git a/vna_system/core/processors/configs/phase_config.json b/vna_system/core/processors/configs/phase_config.json index 912d1ec..8dc6f71 100644 --- a/vna_system/core/processors/configs/phase_config.json +++ b/vna_system/core/processors/configs/phase_config.json @@ -2,11 +2,11 @@ "y_min": -210, "y_max": 360, "unwrap_phase": false, - "phase_offset": -60, + "phase_offset": 0, "smoothing_enabled": true, "smoothing_window": 5, "marker_enabled": false, - "marker_frequency": 2000000000, + "marker_frequency": "asdasd", "reference_line_enabled": false, "reference_phase": 0, "grid_enabled": true diff --git a/vna_system/core/processors/configs/smith_chart_config.json b/vna_system/core/processors/configs/smith_chart_config.json index 556e162..c54f08f 100644 --- a/vna_system/core/processors/configs/smith_chart_config.json +++ b/vna_system/core/processors/configs/smith_chart_config.json @@ -1,9 +1,9 @@ { - "impedance_mode": true, + "impedance_mode": false, "reference_impedance": 100, - "marker_enabled": true, + "marker_enabled": false, "marker_frequency": 1000000000, - "grid_circles": true, - "grid_radials": true, + "grid_circles": false, + "grid_radials": false, "trace_color_mode": "solid" } \ No newline at end of file diff --git a/vna_system/core/processors/implementations/magnitude_processor.py b/vna_system/core/processors/implementations/magnitude_processor.py index 0c911bb..2078c39 100644 --- a/vna_system/core/processors/implementations/magnitude_processor.py +++ b/vna_system/core/processors/implementations/magnitude_processor.py @@ -8,6 +8,8 @@ from ..base_processor import BaseProcessor, UIParameter class MagnitudeProcessor(BaseProcessor): def __init__(self, config_dir: Path): super().__init__("magnitude", config_dir) + # State for smoothing that can be reset by button + self._smoothing_history = [] def process_sweep(self, sweep_data: Any, calibrated_data: Any, vna_config: Dict[str, Any]) -> Dict[str, Any]: if not calibrated_data or not hasattr(calibrated_data, 'points'): @@ -141,6 +143,13 @@ class MagnitudeProcessor(BaseProcessor): label='Show Grid', type='toggle', value=self._config.get('grid_enabled', True) + ), + UIParameter( + name='reset_smoothing', + label='Reset Smoothing', + type='button', + value=False, # Always False for buttons, will be set to True temporarily when clicked + options={'action': 'Reset the smoothing filter state'} ) ] @@ -155,6 +164,34 @@ class MagnitudeProcessor(BaseProcessor): 'grid_enabled': True } + def update_config(self, updates: Dict[str, Any]): + print(f"πŸ”§ update_config called with: {updates}") + # Handle button parameters specially + button_actions = {} + config_updates = {} + + for key, value in updates.items(): + # Check if this is a button parameter + ui_params = {param.name: param for param in self.get_ui_parameters()} + if key in ui_params and ui_params[key].type == 'button': + if value: # Button was clicked + button_actions[key] = value + # Don't add button values to config + else: + config_updates[key] = value + + # Update config with non-button parameters + if config_updates: + super().update_config(config_updates) + + # Handle button actions + for action, pressed in button_actions.items(): + if pressed and action == 'reset_smoothing': + # Reset smoothing state (could be a counter, filter state, etc.) + self._smoothing_history = [] # Reset any internal smoothing state + print(f"πŸ”„ Smoothing state reset by button action") + # Note: recalculate() will be called automatically by the processing system + def _validate_config(self): required_keys = ['y_min', 'y_max', 'smoothing_enabled', 'smoothing_window', 'marker_enabled', 'marker_frequency', 'grid_enabled'] diff --git a/vna_system/core/visualization/magnitude_chart.py b/vna_system/core/visualization/magnitude_chart.py new file mode 100644 index 0000000..b6c52e4 --- /dev/null +++ b/vna_system/core/visualization/magnitude_chart.py @@ -0,0 +1,264 @@ +import numpy as np +from typing import Dict, Any, List, Tuple +import json +from pathlib import Path + +from vna_system.core.acquisition.sweep_buffer import SweepData +from vna_system.core.settings.preset_manager import ConfigPreset + + +def generate_magnitude_plot_from_sweep_data(sweep_data: SweepData, preset: ConfigPreset = None) -> Dict[str, Any]: + """ + Generate Plotly configuration for magnitude plot from SweepData + + Args: + sweep_data: SweepData instance with points list of [real, imag] complex pairs + preset: Optional ConfigPreset with frequency info + + Returns: + Plotly configuration dict for magnitude plot + """ + if not sweep_data or not sweep_data.points: + return {'error': 'Invalid sweep data'} + + # Extract frequency range from preset or use defaults + start_freq = 100e6 # 100 MHz + stop_freq = 8.8e9 # 8.8 GHz + + if preset: + start_freq = preset.start_freq or start_freq + stop_freq = preset.stop_freq or stop_freq + + frequencies = [] + magnitudes_db = [] + + # Calculate magnitude in dB for each point + for i, (real, imag) in enumerate(sweep_data.points): + complex_val = complex(real, imag) + magnitude_db = 20 * np.log10(abs(complex_val)) if abs(complex_val) > 0 else -120 + + # Calculate frequency based on point index + total_points = len(sweep_data.points) + frequency = start_freq + (stop_freq - start_freq) * i / (total_points - 1) + + frequencies.append(frequency) + magnitudes_db.append(magnitude_db) + + # Create Plotly trace + trace = { + 'x': [f / 1e9 for f in frequencies], # Convert to GHz + 'y': magnitudes_db, + 'type': 'scatter', + 'mode': 'lines', + 'name': 'Magnitude', + 'line': {'color': '#1f77b4', 'width': 2} + } + + # Calculate reasonable Y-axis range + min_mag = min(magnitudes_db) + max_mag = max(magnitudes_db) + y_margin = (max_mag - min_mag) * 0.1 + y_min = max(min_mag - y_margin, -120) + y_max = min(max_mag + y_margin, 20) + + return { + 'data': [trace], + 'layout': { + 'title': 'Magnitude Response', + 'xaxis': { + 'title': 'Frequency (GHz)', + 'showgrid': True, + 'gridcolor': '#e5e5e5', + 'gridwidth': 1 + }, + 'yaxis': { + 'title': 'Magnitude (dB)', + 'range': [y_min, y_max], + 'showgrid': True, + 'gridcolor': '#e5e5e5', + 'gridwidth': 1 + }, + 'plot_bgcolor': '#fafafa', + 'paper_bgcolor': '#ffffff', + 'font': { + 'family': 'Arial, sans-serif', + 'size': 12, + 'color': '#333333' + }, + 'hovermode': 'x unified', + 'showlegend': True, + 'margin': {'l': 60, 'r': 40, 't': 60, 'b': 60} + } + } + + +def load_sweep_data_from_json(json_file: Path) -> SweepData: + """ + Load SweepData from JSON file + + Args: + json_file: Path to JSON file containing sweep data + + Returns: + SweepData instance + """ + with open(json_file, 'r') as f: + data = json.load(f) + + return SweepData( + sweep_number=data.get('sweep_number', 0), + timestamp=data.get('timestamp', 0.0), + points=data.get('points', []), + total_points=data.get('total_points', len(data.get('points', []))) + ) + + +def generate_standards_magnitude_plots(calibration_path: Path, preset: ConfigPreset = None) -> Dict[str, Any]: + """ + Generate magnitude plots for all calibration standards in a calibration set + + Args: + calibration_path: Path to calibration directory + preset: Optional ConfigPreset + + Returns: + Dictionary with plots for each standard, including raw data + """ + plots = {} + standard_colors = { + 'open': '#2ca02c', # Green + 'short': '#d62728', # Red + 'load': '#ff7f0e', # Orange + 'through': '#1f77b4' # Blue + } + + # Find all standard JSON files + for standard_file in calibration_path.glob('*.json'): + standard_name = standard_file.stem + + # Skip metadata files + if 'metadata' in standard_name: + continue + + try: + sweep_data = load_sweep_data_from_json(standard_file) + plot_config = generate_magnitude_plot_from_sweep_data(sweep_data, preset) + + if 'error' not in plot_config: + # Customize color and title for this standard + if plot_config.get('data'): + plot_config['data'][0]['line']['color'] = standard_colors.get(standard_name, '#1f77b4') + plot_config['data'][0]['name'] = f'{standard_name.upper()} Standard' + plot_config['layout']['title'] = f'{standard_name.upper()} Standard Magnitude' + + # Include raw sweep data for download + plot_config['raw_sweep_data'] = { + 'sweep_number': sweep_data.sweep_number, + 'timestamp': sweep_data.timestamp, + 'total_points': sweep_data.total_points, + 'points': sweep_data.points, # Raw complex data points + 'file_path': str(standard_file) + } + + # Add frequency information if available + if preset: + plot_config['frequency_info'] = { + 'start_freq': preset.start_freq, + 'stop_freq': preset.stop_freq, + 'points': preset.points, + 'bandwidth': preset.bandwidth + } + + plots[standard_name] = plot_config + except (json.JSONDecodeError, FileNotFoundError, KeyError) as e: + plots[standard_name] = {'error': f'Failed to load {standard_name}: {str(e)}'} + + return plots + + +def generate_combined_standards_plot(calibration_path: Path, preset: ConfigPreset = None) -> Dict[str, Any]: + """ + Generate a combined plot showing all calibration standards + + Args: + calibration_path: Path to calibration directory + preset: Optional ConfigPreset + + Returns: + Plotly configuration dict with all standards overlaid + """ + traces = [] + standard_colors = { + 'open': '#2ca02c', # Green + 'short': '#d62728', # Red + 'load': '#ff7f0e', # Orange + 'through': '#1f77b4' # Blue + } + + y_min, y_max = 0, -120 + + # Process each standard + for standard_file in calibration_path.glob('*.json'): + standard_name = standard_file.stem + + # Skip metadata files + if 'metadata' in standard_name: + continue + + try: + sweep_data = load_sweep_data_from_json(standard_file) + plot_config = generate_magnitude_plot_from_sweep_data(sweep_data, preset) + + if 'error' not in plot_config and plot_config.get('data'): + trace = plot_config['data'][0].copy() + trace['line']['color'] = standard_colors.get(standard_name, '#1f77b4') + trace['name'] = f'{standard_name.upper()} Standard' + traces.append(trace) + + # Update Y range + if trace['y']: + trace_min = min(trace['y']) + trace_max = max(trace['y']) + y_min = min(y_min, trace_min) + y_max = max(y_max, trace_max) + + except (json.JSONDecodeError, FileNotFoundError, KeyError): + continue + + if not traces: + return {'error': 'No valid calibration standards found'} + + # Add margin to Y range + y_margin = (y_max - y_min) * 0.1 + y_min = max(y_min - y_margin, -120) + y_max = min(y_max + y_margin, 20) + + return { + 'data': traces, + 'layout': { + 'title': 'Calibration Standards Comparison', + 'xaxis': { + 'title': 'Frequency (GHz)', + 'showgrid': True, + 'gridcolor': '#e5e5e5', + 'gridwidth': 1 + }, + 'yaxis': { + 'title': 'Magnitude (dB)', + 'range': [y_min, y_max], + 'showgrid': True, + 'gridcolor': '#e5e5e5', + 'gridwidth': 1 + }, + 'plot_bgcolor': '#fafafa', + 'paper_bgcolor': '#ffffff', + 'font': { + 'family': 'Arial, sans-serif', + 'size': 12, + 'color': '#333333' + }, + 'hovermode': 'x unified', + 'showlegend': True, + 'margin': {'l': 60, 'r': 40, 't': 60, 'b': 60} + } + } \ No newline at end of file diff --git a/vna_system/web_ui/static/css/components.css b/vna_system/web_ui/static/css/components.css index 95093fc..9032e66 100644 --- a/vna_system/web_ui/static/css/components.css +++ b/vna_system/web_ui/static/css/components.css @@ -866,6 +866,37 @@ input:checked + .processor-param__toggle-slider:before { box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); } +.chart-setting__button { + padding: var(--space-2) var(--space-3); + font-size: var(--text-sm); + font-weight: 500; + color: var(--color-text-light); + background: var(--color-primary-600); + border: 1px solid var(--color-primary-600); + border-radius: var(--radius-md); + cursor: pointer; + transition: all var(--transition-fast); + width: 100%; + max-width: 200px; +} + +.chart-setting__button:hover { + background: var(--color-primary-700); + border-color: var(--color-primary-700); +} + +.chart-setting__button:active { + background: var(--color-primary-800); + border-color: var(--color-primary-800); +} + +.chart-setting__button:disabled { + background: var(--color-bg-muted); + border-color: var(--color-border-muted); + color: var(--color-text-muted); + cursor: not-allowed; +} + /* Mobile Responsive Styles for Chart Settings */ @media (max-width: 1024px) { .chart-card__content { @@ -899,4 +930,148 @@ input:checked + .processor-param__toggle-slider:before { .chart-card__settings { max-height: 150px; } +} + +/* Modal */ +.modal { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 1000; + display: none; + align-items: center; + justify-content: center; + padding: var(--space-4); +} + +.modal--active { + display: flex; +} + +.modal__backdrop { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.75); + backdrop-filter: blur(4px); + cursor: pointer; +} + +.modal__content { + position: relative; + background-color: var(--color-surface); + border-radius: var(--radius-xl); + box-shadow: var(--shadow-2xl); + border: 1px solid var(--color-border); + max-width: 90vw; + max-height: 90vh; + width: 600px; + display: flex; + flex-direction: column; + overflow: hidden; +} + +.modal__content--large { + width: 1200px; + max-width: 95vw; + height: 80vh; +} + +.modal__header { + display: flex; + align-items: center; + justify-content: space-between; + padding: var(--space-6); + border-bottom: 1px solid var(--color-border); + background-color: var(--color-surface-accent); +} + +.modal__actions { + display: flex; + align-items: center; + gap: var(--space-2); +} + +.modal__title { + display: flex; + align-items: center; + gap: var(--space-2); + margin: 0; + font-size: var(--font-size-lg); + font-weight: var(--font-weight-semibold); + color: var(--color-text); +} + +.modal__close { + display: flex; + align-items: center; + justify-content: center; + width: 32px; + height: 32px; + border-radius: var(--radius-md); + background: none; + border: none; + color: var(--color-text-secondary); + cursor: pointer; + transition: all var(--transition-fast); +} + +.modal__close:hover { + background-color: var(--color-surface-hover); + color: var(--color-text); +} + +.modal__body { + flex: 1; + overflow: hidden; + display: flex; + flex-direction: column; +} + +/* Plots Container */ +.plots-container { + flex: 1; + display: flex; + flex-direction: column; + height: 100%; +} + +.plots-content { + flex: 1; + overflow: auto; + padding: var(--space-4); +} + +.plots-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(500px, 1fr)); + gap: var(--space-4); + min-height: 100%; +} + +/* Calibration Actions */ +.calibration-actions { + display: flex; + gap: var(--space-2); + margin-top: var(--space-3); +} + +/* Plot Error Styles */ +.plot-error { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + min-height: 200px; + color: var(--color-text-secondary); + font-style: italic; + text-align: center; + padding: var(--space-4); + background-color: var(--color-surface-accent); + border-radius: var(--radius-lg); + border: 1px dashed var(--color-border); } \ No newline at end of file diff --git a/vna_system/web_ui/static/js/main.js b/vna_system/web_ui/static/js/main.js index e3af3ee..0e88ebc 100644 --- a/vna_system/web_ui/static/js/main.js +++ b/vna_system/web_ui/static/js/main.js @@ -161,11 +161,6 @@ class VNADashboard { this.savePreferences(); }); - // Export - this.ui.onExportData(() => { - console.log('πŸ“Š Exporting chart data...'); - this.exportData(); - }); } /** @@ -217,37 +212,6 @@ class VNADashboard { } } - /** - * Export data functionality - */ - exportData() { - try { - const data = this.charts.exportData(); - const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' }); - - const url = URL.createObjectURL(blob); - const a = document.createElement('a'); - a.href = url; - a.download = `vna-data-${new Date().toISOString().slice(0, 19).replace(/:/g, '-')}.json`; - document.body.appendChild(a); - a.click(); - document.body.removeChild(a); - URL.revokeObjectURL(url); - - this.notifications.show({ - type: 'success', - title: 'Export Complete', - message: 'Chart data exported successfully' - }); - } catch (error) { - console.error('❌ Export failed:', error); - this.notifications.show({ - type: 'error', - title: 'Export Failed', - message: 'Failed to export chart data' - }); - } - } /** * Clean up old/invalid preferences diff --git a/vna_system/web_ui/static/js/modules/charts.js b/vna_system/web_ui/static/js/modules/charts.js index cf07fcc..319a7c3 100644 --- a/vna_system/web_ui/static/js/modules/charts.js +++ b/vna_system/web_ui/static/js/modules/charts.js @@ -408,6 +408,23 @@ export class ChartManager { `; } + case 'button': + const buttonText = param.label || 'Click'; + const actionDesc = opts.action ? `title="${opts.action}"` : ''; + return ` +
+ +
+ `; default: return `
@@ -432,8 +449,14 @@ export class ChartManager { this.handleSettingChange(e, processorId); }; + const onButtonClick = (e) => { + if (!e.target.classList.contains('chart-setting__button')) return; + this.handleButtonClick(e, processorId); + }; + settingsContainer.addEventListener('input', onParamChange); settingsContainer.addEventListener('change', onParamChange); + settingsContainer.addEventListener('click', onButtonClick); } /** @@ -504,6 +527,47 @@ export class ChartManager { }, 300); // 300ms delay to prevent rapid updates } + /** + * Handle button click in settings + */ + handleButtonClick(event, processorId) { + const button = event.target; + const paramName = button.dataset.param; + + if (!paramName) { + console.warn('⚠️ Button missing param data:', button); + return; + } + + // Prevent multiple clicks while processing + if (button.disabled) { + console.log('πŸ”˜ Button already processing, ignoring click'); + return; + } + + console.log(`πŸ”˜ Button clicked: ${processorId}.${paramName}`); + + // Temporarily disable button and show feedback + const originalText = button.textContent; + button.disabled = true; + button.textContent = '...'; + + // Send button action via WebSocket (set to true to trigger action) - only once + const websocket = window.vnaDashboard?.websocket; + if (websocket && websocket.recalculate) { + console.log(`πŸ“€ Sending button action: ${processorId}.${paramName} = true`); + websocket.recalculate(processorId, { [paramName]: true }); + } else { + console.warn('⚠️ WebSocket not available for button action'); + } + + // Re-enable button after a short delay + setTimeout(() => { + button.disabled = false; + button.textContent = originalText; + }, 1000); + } + toggleProcessor(id, enabled) { enabled ? this.showChart(id) : this.hideChart(id); } showChart(id) { const c = this.charts.get(id); @@ -541,18 +605,195 @@ export class ChartManager { this.updateEmptyStateVisibility(); } - downloadChart(id) { + async downloadChart(id) { const c = this.charts.get(id); if (!c?.plotContainer) return; + try { - Plotly.downloadImage(c.plotContainer, { format: 'png', width: 1200, height: 800, filename: `${id}-${Date.now()}` }); - this.notifications?.show?.({ type: 'success', title: 'Download Started', message: 'Chart image download started' }); + const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); + const baseFilename = `${id}_${timestamp}`; + + // Download image + await Plotly.downloadImage(c.plotContainer, { + format: 'png', + width: 1200, + height: 800, + filename: `${baseFilename}_plot` + }); + + // Prepare and download processor data + const processorData = this.prepareProcessorDownloadData(id); + if (processorData) { + this.downloadJSON(processorData, `${baseFilename}_data.json`); + } + + this.notifications?.show?.({ + type: 'success', + title: 'Download Complete', + message: `Downloaded ${this.formatProcessorName(id)} plot and data` + }); } catch (e) { console.error('❌ Chart download failed:', e); - this.notifications?.show?.({ type: 'error', title: 'Download Failed', message: 'Failed to download chart image' }); + this.notifications?.show?.({ + type: 'error', + title: 'Download Failed', + message: 'Failed to download chart data' + }); } } + prepareProcessorDownloadData(processorId) { + const chart = this.charts.get(processorId); + const latestData = this.chartData.get(processorId); + + if (!chart || !latestData) return null; + + // Safe copy function to avoid circular references + const safeClone = (obj, seen = new WeakSet()) => { + if (obj === null || typeof obj !== 'object') return obj; + if (seen.has(obj)) return '[Circular Reference]'; + + seen.add(obj); + + if (Array.isArray(obj)) { + return obj.map(item => safeClone(item, seen)); + } + + const cloned = {}; + for (const key in obj) { + if (obj.hasOwnProperty(key)) { + try { + cloned[key] = safeClone(obj[key], seen); + } catch (e) { + cloned[key] = `[Error: ${e.message}]`; + } + } + } + return cloned; + }; + + return { + processor_info: { + processor_id: processorId, + processor_name: this.formatProcessorName(processorId), + download_timestamp: new Date().toISOString(), + is_visible: chart.isVisible + }, + current_data: { + data: safeClone(latestData.data), + metadata: safeClone(latestData.metadata), + timestamp: latestData.timestamp instanceof Date ? latestData.timestamp.toISOString() : latestData.timestamp, + plotly_config: safeClone(latestData.plotly_config) + }, + plot_config: this.getCurrentPlotlyDataSafe(processorId), + ui_parameters: safeClone(this.getProcessorSettings(processorId)), + raw_sweep_data: this.extractProcessorRawData(latestData), + metadata: { + description: `VNA processor data export - ${this.formatProcessorName(processorId)}`, + format_version: "1.0", + exported_by: "VNA System Dashboard", + export_type: "processor_data", + contains: [ + "Current processor data and metadata", + "Plot configuration (Plotly format)", + "UI parameter settings", + "Raw measurement data if available", + "Processing results and statistics" + ] + } + }; + } + + extractProcessorRawData(latestData) { + // Extract raw data from processor results + if (!latestData || !latestData.data) return null; + + try { + const rawData = { + processor_results: this.safeStringify(latestData.data), + metadata: this.safeStringify(latestData.metadata) + }; + + // If this is magnitude processor, extract frequency/magnitude data + if (latestData.plotly_config && latestData.plotly_config.data) { + const plotData = latestData.plotly_config.data[0]; + if (plotData && plotData.x && plotData.y) { + rawData.processed_measurements = []; + const maxPoints = Math.min(plotData.x.length, plotData.y.length, 1000); // Limit to 1000 points + for (let i = 0; i < maxPoints; i++) { + rawData.processed_measurements.push({ + point_index: i, + x_value: plotData.x[i], + y_value: plotData.y[i], + x_unit: this.getAxisUnit(plotData, 'x'), + y_unit: this.getAxisUnit(plotData, 'y') + }); + } + } + } + + return rawData; + } catch (error) { + console.warn('⚠️ Error extracting processor raw data:', error); + return { error: 'Failed to extract raw data' }; + } + } + + safeStringify(obj) { + try { + // Simple objects - try direct JSON + return JSON.parse(JSON.stringify(obj)); + } catch (e) { + // If that fails, create a safe representation + if (obj === null || typeof obj !== 'object') return obj; + if (Array.isArray(obj)) return obj.slice(0, 100); // Limit array size + + const safe = {}; + Object.keys(obj).forEach(key => { + try { + if (typeof obj[key] === 'function') { + safe[key] = '[Function]'; + } else if (typeof obj[key] === 'object') { + safe[key] = '[Object]'; + } else { + safe[key] = obj[key]; + } + } catch (err) { + safe[key] = '[Error accessing property]'; + } + }); + return safe; + } + } + + getAxisUnit(plotData, axis) { + // Try to determine units from plot data or layout + if (axis === 'x') { + // For frequency data, usually GHz + return plotData.name && plotData.name.includes('Frequency') ? 'GHz' : 'unknown'; + } else if (axis === 'y') { + // For magnitude data, usually dB + return plotData.name && plotData.name.includes('Magnitude') ? 'dB' : 'unknown'; + } + return 'unknown'; + } + + downloadJSON(data, filename) { + const jsonString = JSON.stringify(data, null, 2); + const blob = new Blob([jsonString], { type: 'application/json' }); + const url = URL.createObjectURL(blob); + + const link = document.createElement('a'); + link.href = url; + link.download = filename; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + + // Clean up the URL object + URL.revokeObjectURL(url); + } + toggleFullscreen(id) { const c = this.charts.get(id); if (!c?.element) return; @@ -592,41 +833,6 @@ export class ChartManager { pause() { this.isPaused = true; console.log('⏸️ Chart updates paused'); } resume() { this.isPaused = false; console.log('▢️ Chart updates resumed'); if (this.updateQueue.size) this.processUpdateQueue(); } - exportData() { - const exportData = { - timestamp: new Date().toISOString(), - charts: {}, - stats: this.performanceStats, - description: "Current chart data snapshot - latest data from each visible processor" - }; - - // Export only the latest data from each visible chart (not all historical data) - for (const [processorId, chart] of this.charts) { - // Skip hidden/disabled processors - if (!chart.isVisible || this.disabledProcessors.has(processorId)) { - continue; - } - - const latestData = this.chartData.get(processorId); - if (!latestData) { - continue; - } - - exportData.charts[processorId] = { - processor_name: this.formatProcessorName(processorId), - current_data: { - data: latestData.data, - metadata: latestData.metadata, - timestamp: latestData.timestamp.toISOString() - }, - plotly_config: this.getCurrentPlotlyData(processorId), - settings: this.getProcessorSettings(processorId) - }; - } - - console.log(`πŸ“Š Exporting current data for ${Object.keys(exportData.charts).length} visible charts`); - return exportData; - } /** * Get current Plotly data/layout for a processor @@ -654,6 +860,60 @@ export class ChartManager { } } + /** + * Safe version of getCurrentPlotlyData that avoids circular references + */ + getCurrentPlotlyDataSafe(processorId) { + const chart = this.charts.get(processorId); + if (!chart?.plotContainer?._fullData || !chart?.plotContainer?._fullLayout) { + return null; + } + + try { + // Extract only essential plot data to avoid circular references + const data = []; + if (chart.plotContainer._fullData) { + chart.plotContainer._fullData.forEach(trace => { + data.push({ + x: trace.x ? Array.from(trace.x) : null, + y: trace.y ? Array.from(trace.y) : null, + type: trace.type, + mode: trace.mode, + name: trace.name, + line: trace.line ? { + color: trace.line.color, + width: trace.line.width + } : null, + marker: trace.marker ? { + color: trace.marker.color, + size: trace.marker.size + } : null + }); + }); + } + + const layout = {}; + if (chart.plotContainer._fullLayout) { + const fullLayout = chart.plotContainer._fullLayout; + layout.title = typeof fullLayout.title === 'string' ? fullLayout.title : fullLayout.title?.text; + layout.xaxis = { + title: fullLayout.xaxis?.title, + range: fullLayout.xaxis?.range + }; + layout.yaxis = { + title: fullLayout.yaxis?.title, + range: fullLayout.yaxis?.range + }; + layout.showlegend = fullLayout.showlegend; + } + + return { data, layout }; + } catch (error) { + console.warn(`⚠️ Could not extract safe Plotly data for ${processorId}:`, error); + return null; + } + } + /** * Get current processor settings (UI parameters) */ diff --git a/vna_system/web_ui/static/js/modules/settings.js b/vna_system/web_ui/static/js/modules/settings.js index e689d19..25d8034 100644 --- a/vna_system/web_ui/static/js/modules/settings.js +++ b/vna_system/web_ui/static/js/modules/settings.js @@ -29,6 +29,11 @@ export class SettingsManager { this.handleSaveCalibration = this.handleSaveCalibration.bind(this); this.handleSetCalibration = this.handleSetCalibration.bind(this); this.handleCalibrationChange = this.handleCalibrationChange.bind(this); + this.handleViewPlots = this.handleViewPlots.bind(this); + this.handleViewCurrentPlots = this.handleViewCurrentPlots.bind(this); + + // Store current plots data for download + this.currentPlotsData = null; } async init() { @@ -73,6 +78,13 @@ export class SettingsManager { saveCalibrationBtn: document.getElementById('saveCalibrationBtn'), calibrationDropdown: document.getElementById('calibrationDropdown'), setCalibrationBtn: document.getElementById('setCalibrationBtn'), + viewPlotsBtn: document.getElementById('viewPlotsBtn'), + viewCurrentPlotsBtn: document.getElementById('viewCurrentPlotsBtn'), + + // Modal elements + plotsModal: document.getElementById('plotsModal'), + plotsGrid: document.getElementById('plotsGrid'), + downloadAllBtn: document.getElementById('downloadAllBtn'), // Status elements presetCount: document.getElementById('presetCount'), @@ -91,6 +103,8 @@ export class SettingsManager { this.elements.saveCalibrationBtn?.addEventListener('click', this.handleSaveCalibration); this.elements.calibrationDropdown?.addEventListener('change', this.handleCalibrationChange); this.elements.setCalibrationBtn?.addEventListener('click', this.handleSetCalibration); + this.elements.viewPlotsBtn?.addEventListener('click', this.handleViewPlots); + this.elements.viewCurrentPlotsBtn?.addEventListener('click', this.handleViewCurrentPlots); // Calibration name input this.elements.calibrationNameInput?.addEventListener('input', () => { @@ -211,6 +225,7 @@ export class SettingsManager { dropdown.disabled = false; this.elements.setCalibrationBtn.disabled = true; + this.elements.viewPlotsBtn.disabled = true; } formatPresetDisplay(preset) { @@ -280,11 +295,22 @@ export class SettingsManager { const hasName = this.elements.calibrationNameInput.value.trim().length > 0; this.elements.saveCalibrationBtn.disabled = !hasName || !workingCalibration.is_complete; this.elements.calibrationNameInput.disabled = false; + + // Enable "View Current Plots" button if there are any completed standards + const hasCompletedStandards = workingCalibration.completed_standards && workingCalibration.completed_standards.length > 0; + if (this.elements.viewCurrentPlotsBtn) { + this.elements.viewCurrentPlotsBtn.disabled = !hasCompletedStandards; + } } hideCalibrationSteps() { this.elements.calibrationSteps.style.display = 'none'; this.elements.calibrationStandards.innerHTML = ''; + + // Disable "View Current Plots" button + if (this.elements.viewCurrentPlotsBtn) { + this.elements.viewCurrentPlotsBtn.disabled = true; + } } resetCalibrationState() { @@ -592,6 +618,7 @@ export class SettingsManager { handleCalibrationChange() { const selectedValue = this.elements.calibrationDropdown.value; this.elements.setCalibrationBtn.disabled = !selectedValue; + this.elements.viewPlotsBtn.disabled = !selectedValue; } async handleSetCalibration() { @@ -638,6 +665,629 @@ export class SettingsManager { } } + async handleViewPlots() { + const calibrationName = this.elements.calibrationDropdown.value; + if (!calibrationName || !this.currentPreset) return; + + try { + this.elements.viewPlotsBtn.disabled = true; + this.elements.viewPlotsBtn.innerHTML = ' Loading...'; + + // Fetch plots data + const response = await fetch(`/api/v1/settings/calibration/${encodeURIComponent(calibrationName)}/standards-plots?preset_filename=${encodeURIComponent(this.currentPreset.filename)}`); + + if (!response.ok) throw new Error(`HTTP ${response.status}`); + + const plotsData = await response.json(); + + // Show modal with plots + this.showPlotsModal(plotsData); + + } catch (error) { + console.error('Failed to load calibration plots:', error); + this.notifications.show({ + type: 'error', + title: 'Plots Error', + message: 'Failed to load calibration plots' + }); + } finally { + this.elements.viewPlotsBtn.disabled = false; + this.elements.viewPlotsBtn.innerHTML = ' View Plots'; + if (typeof lucide !== 'undefined') lucide.createIcons(); + } + } + + async handleViewCurrentPlots() { + if (!this.workingCalibration || !this.workingCalibration.active) return; + + try { + this.elements.viewCurrentPlotsBtn.disabled = true; + this.elements.viewCurrentPlotsBtn.innerHTML = ' Loading...'; + + // Fetch current working calibration plots + const response = await fetch('/api/v1/settings/working-calibration/standards-plots'); + + if (!response.ok) { + if (response.status === 404) { + this.notifications.show({ + type: 'warning', + title: 'No Data', + message: 'No working calibration or standards available to plot' + }); + return; + } + throw new Error(`HTTP ${response.status}`); + } + + const plotsData = await response.json(); + + // Show modal with plots + this.showPlotsModal(plotsData); + + } catch (error) { + console.error('Failed to load current calibration plots:', error); + this.notifications.show({ + type: 'error', + title: 'Plots Error', + message: 'Failed to load current calibration plots' + }); + } finally { + this.elements.viewCurrentPlotsBtn.disabled = false; + this.elements.viewCurrentPlotsBtn.innerHTML = ' View Current Plots'; + if (typeof lucide !== 'undefined') lucide.createIcons(); + } + } + + showPlotsModal(plotsData) { + const modal = this.elements.plotsModal; + if (!modal) return; + + // Setup modal close handlers + this.setupModalCloseHandlers(modal); + + // Store plots data for download + this.currentPlotsData = plotsData; + + // Render plots using chart manager style + this.renderCalibrationPlots(plotsData.individual_plots, plotsData.preset); + + // Show modal + modal.classList.add('modal--active'); + document.body.style.overflow = 'hidden'; + + // Update modal title + const title = modal.querySelector('.modal__title'); + if (title) { + title.innerHTML = ` + + ${plotsData.calibration_name} - ${plotsData.preset.mode.toUpperCase()} Standards + `; + if (typeof lucide !== 'undefined') lucide.createIcons(); + } + } + + setupModalCloseHandlers(modal) { + const closeElements = modal.querySelectorAll('[data-modal-close]'); + closeElements.forEach(element => { + element.addEventListener('click', () => this.closePlotsModal()); + }); + + // Setup download all button + const downloadAllBtn = modal.querySelector('#downloadAllBtn'); + if (downloadAllBtn) { + downloadAllBtn.addEventListener('click', () => this.downloadAllCalibrationData()); + } + + // Close on Escape key + const escapeHandler = (e) => { + if (e.key === 'Escape') { + this.closePlotsModal(); + document.removeEventListener('keydown', escapeHandler); + } + }; + document.addEventListener('keydown', escapeHandler); + } + + renderCalibrationPlots(individualPlots, preset) { + const container = this.elements.plotsGrid; + if (!container) return; + + container.innerHTML = ''; + + if (!individualPlots || Object.keys(individualPlots).length === 0) { + container.innerHTML = '
No calibration plots available
'; + return; + } + + Object.entries(individualPlots).forEach(([standardName, plotConfig]) => { + if (plotConfig.error) { + const errorDiv = document.createElement('div'); + errorDiv.className = 'chart-card'; + errorDiv.innerHTML = ` +
+
+ + ${standardName.toUpperCase()} Standard +
+
+
+
Error: ${plotConfig.error}
+
+ `; + container.appendChild(errorDiv); + return; + } + + const card = this.createCalibrationChartCard(standardName, plotConfig, preset); + container.appendChild(card); + }); + + if (typeof lucide !== 'undefined') { + lucide.createIcons({ attrs: { 'stroke-width': 1.5 } }); + } + } + + createCalibrationChartCard(standardName, plotConfig, preset) { + const card = document.createElement('div'); + card.className = 'chart-card'; + card.dataset.standard = standardName; + + const standardTitle = `${standardName.toUpperCase()} Standard`; + + card.innerHTML = ` +
+
+ + ${standardTitle} +
+
+ + +
+
+
+
+
+
+
Standard: ${standardName.toUpperCase()}
+
Preset: ${preset?.filename || 'Unknown'}
+
+ `; + + // Setup event handlers + this.setupCalibrationChartEvents(card, standardName); + + // Render the plot + const plotContainer = card.querySelector('.chart-card__plot'); + this.renderCalibrationChart(plotContainer, plotConfig, standardTitle); + + return card; + } + + setupCalibrationChartEvents(card, standardName) { + card.addEventListener('click', (e) => { + const action = e.target.closest('[data-action]')?.dataset.action; + if (!action) return; + e.stopPropagation(); + + const plotContainer = card.querySelector('.chart-card__plot'); + + switch (action) { + case 'fullscreen': + this.toggleCalibrationFullscreen(card); + break; + case 'download': + this.downloadCalibrationStandard(standardName, plotContainer); + break; + } + }); + } + + renderCalibrationChart(container, plotConfig, title) { + if (!container || !plotConfig || plotConfig.error) { + container.innerHTML = `
Failed to load plot: ${plotConfig?.error || 'Unknown error'}
`; + return; + } + + const layout = { + ...plotConfig.layout, + title: { text: title, font: { size: 16, color: '#f1f5f9' } }, + plot_bgcolor: 'transparent', + paper_bgcolor: 'transparent', + font: { family: 'Inter, -apple-system, BlinkMacSystemFont, sans-serif', size: 12, color: '#f1f5f9' }, + autosize: true, + width: null, + height: null, + margin: { l: 60, r: 50, t: 50, b: 60 }, + showlegend: true, + legend: { + orientation: 'v', + x: 1.02, + y: 1, + xanchor: 'left', + yanchor: 'top', + bgcolor: 'rgba(30, 41, 59, 0.9)', + bordercolor: '#475569', + borderwidth: 1, + font: { size: 10, color: '#f1f5f9' } + }, + xaxis: { + ...plotConfig.layout.xaxis, + gridcolor: '#334155', + zerolinecolor: '#475569', + color: '#cbd5e1', + fixedrange: false + }, + yaxis: { + ...plotConfig.layout.yaxis, + gridcolor: '#334155', + zerolinecolor: '#475569', + color: '#cbd5e1', + fixedrange: false + } + }; + + const config = { + displayModeBar: true, + modeBarButtonsToRemove: ['select2d','lasso2d','hoverClosestCartesian','hoverCompareCartesian','toggleSpikelines'], + displaylogo: false, + responsive: false, + doubleClick: 'reset', + toImageButtonOptions: { + format: 'png', + filename: `calibration-plot-${Date.now()}`, + height: 600, + width: 800, + scale: 1 + } + }; + + Plotly.newPlot(container, plotConfig.data, layout, config); + + // Setup resize observer + if (window.ResizeObserver) { + const ro = new ResizeObserver(() => { + if (container && container.clientWidth > 0) { + Plotly.Plots.resize(container); + } + }); + ro.observe(container); + container._resizeObserver = ro; + } + } + + toggleCalibrationFullscreen(card) { + if (!document.fullscreenElement) { + card.requestFullscreen()?.then(() => { + setTimeout(() => { + const plotContainer = card.querySelector('.chart-card__plot'); + if (plotContainer && typeof Plotly !== 'undefined') { + const rect = plotContainer.getBoundingClientRect(); + Plotly.relayout(plotContainer, { width: rect.width, height: rect.height }); + Plotly.Plots.resize(plotContainer); + } + }, 200); + }).catch(console.error); + } else { + document.exitFullscreen()?.then(() => { + setTimeout(() => { + const plotContainer = card.querySelector('.chart-card__plot'); + if (plotContainer && typeof Plotly !== 'undefined') { + Plotly.Plots.resize(plotContainer); + } + }, 100); + }); + } + } + + async downloadCalibrationStandard(standardName, plotContainer) { + try { + const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); + const calibrationName = this.currentPlotsData?.calibration_name || 'unknown'; + const presetName = this.currentPlotsData?.preset?.filename || 'unknown'; + const baseFilename = `${calibrationName}_${standardName}_${timestamp}`; + + // Download image + if (plotContainer && typeof Plotly !== 'undefined') { + await Plotly.downloadImage(plotContainer, { + format: 'png', + width: 1200, + height: 800, + filename: `${baseFilename}_plot` + }); + } + + // Prepare calibration data for download + const calibrationData = this.prepareCalibrationDownloadData(standardName); + + // Download data as JSON + this.downloadJSON(calibrationData, `${baseFilename}_data.json`); + + // Show success notification + this.notifications.show({ + type: 'success', + title: 'Download Complete', + message: `Downloaded ${standardName.toUpperCase()} standard plot and data` + }); + + } catch (error) { + console.error('Failed to download calibration standard:', error); + this.notifications.show({ + type: 'error', + title: 'Download Failed', + message: 'Failed to download calibration data' + }); + } + } + + prepareCalibrationDownloadData(standardName) { + if (!this.currentPlotsData) return null; + + const standardPlot = this.currentPlotsData.individual_plots[standardName]; + + return { + calibration_info: { + calibration_name: this.currentPlotsData.calibration_name, + preset: this.currentPlotsData.preset, + standard_name: standardName, + download_timestamp: new Date().toISOString() + }, + plot_data: standardPlot ? { + data: standardPlot.data, + layout: standardPlot.layout, + error: standardPlot.error + } : null, + raw_sweep_data: this.extractRawSweepData(standardName), + metadata: { + description: `VNA calibration standard data export - ${standardName.toUpperCase()}`, + format_version: "1.0", + exported_by: "VNA System Dashboard", + contains: [ + "Calibration information", + "Plot configuration (Plotly format)", + "Raw sweep measurements", + "Frequency and magnitude data" + ] + } + }; + } + + extractRawSweepData(standardName) { + const standardPlot = this.currentPlotsData?.individual_plots?.[standardName]; + if (!standardPlot || !standardPlot.raw_sweep_data) { + return null; + } + + const rawData = standardPlot.raw_sweep_data; + const frequencyInfo = standardPlot.frequency_info; + + // Process raw complex data points into detailed format + const processedPoints = []; + if (rawData.points && rawData.points.length > 0) { + for (let i = 0; i < rawData.points.length; i++) { + const [real, imag] = rawData.points[i]; + const magnitude_linear = Math.sqrt(real * real + imag * imag); + const magnitude_db = magnitude_linear > 0 ? 20 * Math.log10(magnitude_linear) : -120; + const phase_radians = Math.atan2(imag, real); + const phase_degrees = phase_radians * (180 / Math.PI); + + // Calculate frequency + let frequency_hz = 0; + if (frequencyInfo && frequencyInfo.start_freq && frequencyInfo.stop_freq) { + frequency_hz = frequencyInfo.start_freq + + (frequencyInfo.stop_freq - frequencyInfo.start_freq) * i / (rawData.points.length - 1); + } + + processedPoints.push({ + point_index: i, + frequency_hz: frequency_hz, + frequency_ghz: frequency_hz / 1e9, + complex_data: { + real: real, + imaginary: imag + }, + magnitude: { + linear: magnitude_linear, + db: magnitude_db + }, + phase: { + radians: phase_radians, + degrees: phase_degrees + } + }); + } + } + + return { + standard_name: standardName, + sweep_info: { + sweep_number: rawData.sweep_number, + timestamp: rawData.timestamp, + total_points: rawData.total_points, + file_path: rawData.file_path + }, + frequency_info: frequencyInfo, + measurement_points: processedPoints, + statistics: { + total_points: processedPoints.length, + frequency_range: { + start_hz: processedPoints[0]?.frequency_hz || 0, + stop_hz: processedPoints[processedPoints.length - 1]?.frequency_hz || 0 + }, + magnitude_range_db: { + min: Math.min(...processedPoints.map(p => p.magnitude.db)), + max: Math.max(...processedPoints.map(p => p.magnitude.db)) + } + } + }; + } + + async downloadAllCalibrationData() { + if (!this.currentPlotsData) return; + + try { + const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); + const calibrationName = this.currentPlotsData.calibration_name || 'unknown'; + const baseFilename = `${calibrationName}_complete_${timestamp}`; + + // Show loading state + const downloadAllBtn = this.elements.downloadAllBtn; + if (downloadAllBtn) { + downloadAllBtn.disabled = true; + downloadAllBtn.innerHTML = ' Downloading...'; + if (typeof lucide !== 'undefined') lucide.createIcons(); + } + + // Prepare complete calibration export + const completeData = this.prepareCompleteCalibrationData(); + + // Download complete data as JSON + this.downloadJSON(completeData, `${baseFilename}.json`); + + // Also download individual plots as images + await this.downloadAllPlotImages(baseFilename); + + // Show success notification + this.notifications.show({ + type: 'success', + title: 'Complete Download', + message: `Downloaded complete calibration data and all plots for ${calibrationName}` + }); + + } catch (error) { + console.error('Failed to download complete calibration data:', error); + this.notifications.show({ + type: 'error', + title: 'Download Failed', + message: 'Failed to download complete calibration data' + }); + } finally { + // Restore button state + const downloadAllBtn = this.elements.downloadAllBtn; + if (downloadAllBtn) { + downloadAllBtn.disabled = false; + downloadAllBtn.innerHTML = ' Download All'; + if (typeof lucide !== 'undefined') lucide.createIcons(); + } + } + } + + prepareCompleteCalibrationData() { + if (!this.currentPlotsData) return null; + + const allStandardsData = {}; + Object.keys(this.currentPlotsData.individual_plots).forEach(standardName => { + allStandardsData[standardName] = this.prepareCalibrationDownloadData(standardName); + }); + + return { + export_info: { + export_timestamp: new Date().toISOString(), + export_type: "complete_calibration", + calibration_name: this.currentPlotsData.calibration_name, + preset: this.currentPlotsData.preset, + standards_included: Object.keys(allStandardsData), + format_version: "1.0" + }, + calibration_summary: { + name: this.currentPlotsData.calibration_name, + preset: this.currentPlotsData.preset, + total_standards: Object.keys(allStandardsData).length, + standards: Object.keys(allStandardsData).map(name => ({ + name: name, + has_data: allStandardsData[name] !== null, + has_error: allStandardsData[name]?.plot_data?.error ? true : false + })) + }, + standards_data: allStandardsData, + metadata: { + description: "Complete VNA calibration data export including all standards", + exported_by: "VNA System Dashboard", + contains: [ + "Complete calibration information", + "All calibration standards data", + "Raw sweep measurements for each standard", + "Plot configurations (Plotly format)", + "Frequency and magnitude data", + "Complex impedance measurements" + ], + usage_notes: [ + "This file contains all data for the calibration set", + "Individual standard data is available in the 'standards_data' section", + "Raw complex measurements are in [real, imaginary] format", + "Frequencies are provided in both Hz and GHz", + "Magnitudes are provided in both linear and dB scales" + ] + } + }; + } + + async downloadAllPlotImages(baseFilename) { + const plotContainers = this.elements.plotsModal.querySelectorAll('[id^="calibration-plot-"]'); + const downloadPromises = []; + + plotContainers.forEach(container => { + if (container && typeof Plotly !== 'undefined' && container._fullData) { + const standardName = container.id.replace('calibration-plot-', ''); + const promise = Plotly.downloadImage(container, { + format: 'png', + width: 1200, + height: 800, + filename: `${baseFilename}_${standardName}_plot` + }); + downloadPromises.push(promise); + } + }); + + // Wait for all image downloads to complete + await Promise.all(downloadPromises); + } + + downloadJSON(data, filename) { + const jsonString = JSON.stringify(data, null, 2); + const blob = new Blob([jsonString], { type: 'application/json' }); + const url = URL.createObjectURL(blob); + + const link = document.createElement('a'); + link.href = url; + link.download = filename; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + + // Clean up the URL object + URL.revokeObjectURL(url); + } + + closePlotsModal() { + const modal = this.elements.plotsModal; + if (!modal) return; + + modal.classList.remove('modal--active'); + document.body.style.overflow = ''; + + // Clean up plots and resize observers + if (typeof Plotly !== 'undefined') { + const plotContainers = modal.querySelectorAll('[id^="calibration-plot-"]'); + plotContainers.forEach(container => { + if (container._resizeObserver) { + container._resizeObserver.disconnect(); + container._resizeObserver = null; + } + if (container._fullData) { + Plotly.purge(container); + } + }); + } + + // Clear plots data + this.currentPlotsData = null; + } + // Public methods for external use async refresh() { if (!this.isInitialized) return; diff --git a/vna_system/web_ui/static/js/modules/ui.js b/vna_system/web_ui/static/js/modules/ui.js index ebe388a..2055fc7 100644 --- a/vna_system/web_ui/static/js/modules/ui.js +++ b/vna_system/web_ui/static/js/modules/ui.js @@ -15,7 +15,6 @@ export class UIManager { processorToggles: null, sweepCount: null, dataRate: null, - exportBtn: null, navButtons: null, views: null }; @@ -30,7 +29,6 @@ export class UIManager { this.eventHandlers = { viewChange: [], processorToggle: [], - exportData: [] }; } @@ -70,12 +68,11 @@ export class UIManager { findElements() { this.elements.connectionStatus = document.getElementById('connectionStatus'); this.elements.processorToggles = document.getElementById('processorToggles'); - this.elements.exportBtn = document.getElementById('exportBtn'); this.elements.navButtons = document.querySelectorAll('.nav-btn[data-view]'); this.elements.views = document.querySelectorAll('.view'); // Validate required elements - const required = ['connectionStatus', 'processorToggles', 'exportBtn']; + const required = ['connectionStatus', 'processorToggles']; for (const key of required) { if (!this.elements[key]) { throw new Error(`Required UI element not found: ${key}`); @@ -95,11 +92,6 @@ export class UIManager { }); }); - // Export button - this.elements.exportBtn.addEventListener('click', () => { - this.triggerExportData(); - }); - // Processor toggles container (event delegation) this.elements.processorToggles.addEventListener('click', (e) => { const toggle = e.target.closest('.processor-toggle'); @@ -402,10 +394,6 @@ export class UIManager { .join(' '); } - triggerExportData() { - this.emitEvent('exportData'); - } - handleResize() { console.log('πŸ“± Window resized'); // Charts handle their own resize @@ -419,7 +407,6 @@ export class UIManager { // Events onViewChange(callback) { this.eventHandlers.viewChange.push(callback); } onProcessorToggle(callback) { this.eventHandlers.processorToggle.push(callback); } - onExportData(callback) { this.eventHandlers.exportData.push(callback); } emitEvent(eventType, ...args) { if (this.eventHandlers[eventType]) { diff --git a/vna_system/web_ui/templates/index.html b/vna_system/web_ui/templates/index.html index 6877f6d..850272d 100644 --- a/vna_system/web_ui/templates/index.html +++ b/vna_system/web_ui/templates/index.html @@ -107,15 +107,6 @@
-
- -
- -
-
@@ -219,6 +210,10 @@
+ +
+ + +
@@ -266,6 +267,37 @@ + + +