diff --git a/reference_data_acquisition/vna_protocol.bin b/reference_data_acquisition/vna_protocol.bin new file mode 100644 index 0000000..f6b1ca7 Binary files /dev/null and b/reference_data_acquisition/vna_protocol.bin differ diff --git a/vna_system/binary_input/current_input.bin b/vna_system/binary_input/current_input.bin index 7f4ad93..e701777 120000 --- a/vna_system/binary_input/current_input.bin +++ b/vna_system/binary_input/current_input.bin @@ -1 +1 @@ -config_inputs/s11_start100_stop8800_points1000_bw1khz.bin \ No newline at end of file +config_inputs/s21_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..635f973 --- /dev/null +++ b/vna_system/calibration/current_calibration @@ -0,0 +1 @@ +s21_start100_stop8800_points1000_bw1khz/bambambum \ No newline at end of file diff --git a/vna_system/core/processors/configs/bscan_config.json b/vna_system/core/processors/configs/bscan_config.json index ac0eca8..7264e82 100644 --- a/vna_system/core/processors/configs/bscan_config.json +++ b/vna_system/core/processors/configs/bscan_config.json @@ -1,10 +1,10 @@ { - "open_air": true, - "axis": "phase", - "data_limitation": "ph_only_1", - "cut": 0.988, - "max": 2.4, - "gain": 1.2, + "open_air": false, + "axis": "abs", + "data_limitation": "ph_only_2", + "cut": 0.417, + "max": 0.6, + "gain": 0.0, "start_freq": 100.0, "stop_freq": 8800.0, "clear_history": false, diff --git a/vna_system/core/processors/configs/magnitude_config.json b/vna_system/core/processors/configs/magnitude_config.json index f266070..d0aae19 100644 --- a/vna_system/core/processors/configs/magnitude_config.json +++ b/vna_system/core/processors/configs/magnitude_config.json @@ -1,5 +1,5 @@ { "y_min": -80, "y_max": 40, - "show_phase": true + "show_phase": false } \ No newline at end of file diff --git a/vna_system/core/processors/implementations/bscan_processor.py b/vna_system/core/processors/implementations/bscan_processor.py index 6b81e99..df1f49b 100644 --- a/vna_system/core/processors/implementations/bscan_processor.py +++ b/vna_system/core/processors/implementations/bscan_processor.py @@ -166,8 +166,8 @@ class BScanProcessor(BaseProcessor): """ try: # Skip B-scan processing for S21 mode - only works with S11 - if vna_config and vna_config.get("mode") == "s21": - return {"error": "B-scan only available in S11 mode"} + # if vna_config and vna_config.get("mode") == "s21": + # return {"error": "B-scan only available in S11 mode"} # Choose calibrated data when provided data_to_process = calibrated_data or sweep_data diff --git a/vna_system/core/processors/implementations/magnitude_processor.py b/vna_system/core/processors/implementations/magnitude_processor.py index c52a4fe..001c0d3 100644 --- a/vna_system/core/processors/implementations/magnitude_processor.py +++ b/vna_system/core/processors/implementations/magnitude_processor.py @@ -1,7 +1,8 @@ import numpy as np from pathlib import Path from typing import Any - +from dataclasses import asdict +from vna_system.core.acquisition.sweep_buffer import SweepData from vna_system.core.logging.logger import get_component_logger from vna_system.core.processors.base_processor import BaseProcessor, UIParameter @@ -30,7 +31,7 @@ class MagnitudeProcessor(BaseProcessor): # ------------------------------------------------------------------ # # Core processing # ------------------------------------------------------------------ # - def process_sweep(self, sweep_data: Any, calibrated_data: Any, vna_config: dict[str, Any]) -> dict[str, Any]: + def process_sweep(self, sweep_data: SweepData, calibrated_data: SweepData, vna_config: dict[str, Any]) -> dict[str, Any]: """ Produce magnitude trace (dB) and ancillary info from a calibrated sweep. @@ -70,15 +71,21 @@ class MagnitudeProcessor(BaseProcessor): # Magnitude in dB (clamp zero magnitude to -120 dB) mags_db: list[float] = [] phases_deg: list[float] = [] + # real_points: list[str] = [] + # imag_points: list[str] = [] for real, imag in points: complex_val = complex(real, imag) + # real_points.append(str(real)) + # imag_points.append(str(imag)) mag = abs(complex_val) mags_db.append(20.0 * np.log10(mag) if mag > 0.0 else -120.0) phases_deg.append(np.degrees(np.angle(complex_val))) result = { "frequencies": freqs, + # "real_points" : real_points, + # "imag_points" : imag_points, "magnitudes_db": mags_db, "phases_deg": phases_deg, "y_min": float(self._config.get("y_min", -80)), diff --git a/vna_system/core/processors/manager.py b/vna_system/core/processors/manager.py index c0e5be1..249d339 100644 --- a/vna_system/core/processors/manager.py +++ b/vna_system/core/processors/manager.py @@ -270,9 +270,10 @@ class ProcessorManager: from .implementations.magnitude_processor import MagnitudeProcessor from .implementations.bscan_processor import BScanProcessor - self.register_processor(MagnitudeProcessor(self.config_dir)) + # self.register_processor(PhaseProcessor(self.config_dir)) self.register_processor(BScanProcessor(self.config_dir)) + self.register_processor(MagnitudeProcessor(self.config_dir)) # self.register_processor(SmithChartProcessor(self.config_dir)) logger.info("Default processors registered", count=len(self._processors)) diff --git a/vna_system/references/current_reference b/vna_system/references/current_reference index 0911f55..8264ba0 120000 --- a/vna_system/references/current_reference +++ b/vna_system/references/current_reference @@ -1 +1 @@ -s11_start100_stop8800_points1000_bw1khz/test1 \ No newline at end of file +s21_start100_stop8800_points1000_bw1khz/testet \ No newline at end of file diff --git a/vna_system/references/s11_start100_stop8800_points1000_bw1khz/asd/info.json b/vna_system/references/s11_start100_stop8800_points1000_bw1khz/asd/info.json new file mode 100644 index 0000000..45d1b21 --- /dev/null +++ b/vna_system/references/s11_start100_stop8800_points1000_bw1khz/asd/info.json @@ -0,0 +1,7 @@ +{ + "name": "asd", + "timestamp": "2025-09-30T15:20:21.546972", + "preset_filename": "s11_start100_stop8800_points1000_bw1khz.bin", + "description": "asd", + "metadata": {} +} \ No newline at end of file diff --git a/vna_system/references/s11_start100_stop8800_points1000_bw1khz/asd/sweep_data.json b/vna_system/references/s11_start100_stop8800_points1000_bw1khz/asd/sweep_data.json new file mode 100644 index 0000000..6e056d8 --- /dev/null +++ b/vna_system/references/s11_start100_stop8800_points1000_bw1khz/asd/sweep_data.json @@ -0,0 +1,4007 @@ +{ + "sweep_number": 208, + "timestamp": 1759234821.541183, + "points": [ + [ + -2.673565626144409, + 0.45116427540779114 + ], + [ + -2.6656813621520996, + 0.5137245655059814 + ], + [ + -2.6552414894104004, + 0.575756311416626 + ], + [ + -2.6458754539489746, + 0.6360990405082703 + ], + [ + -2.6337196826934814, + 0.6958416700363159 + ], + [ + -3.403756856918335, + 0.9202976822853088 + ], + [ + -3.388270378112793, + 1.00452721118927 + ], + [ + -3.376314878463745, + 1.0779086351394653 + ], + [ + -3.3490140438079834, + 1.1564695835113525 + ], + [ + -3.3282864093780518, + 1.2334160804748535 + ], + [ + -3.3056790828704834, + 1.3099498748779297 + ], + [ + -3.2883119583129883, + 1.3827167749404907 + ], + [ + -3.2620062828063965, + 1.4624518156051636 + ], + [ + -3.235482931137085, + 1.5383557081222534 + ], + [ + -3.206298589706421, + 1.616023302078247 + ], + [ + -3.1778554916381836, + 1.6923396587371826 + ], + [ + -3.150444507598877, + 1.7642732858657837 + ], + [ + -3.1090571880340576, + 1.8353354930877686 + ], + [ + -3.076094150543213, + 1.9117639064788818 + ], + [ + -3.043433427810669, + 1.9831832647323608 + ], + [ + -3.007033109664917, + 2.056340217590332 + ], + [ + -2.964776039123535, + 2.1247973442077637 + ], + [ + -2.9242990016937256, + 2.2041642665863037 + ], + [ + -2.884627103805542, + 2.275818347930908 + ], + [ + -2.8383285999298096, + 2.347762107849121 + ], + [ + -2.799283981323242, + 2.4144177436828613 + ], + [ + -2.751110315322876, + 2.4884438514709473 + ], + [ + -2.7036516666412354, + 2.562277317047119 + ], + [ + -2.6577539443969727, + 2.6356451511383057 + ], + [ + -2.6003026962280273, + 2.7068185806274414 + ], + [ + -2.557800531387329, + 2.7716903686523438 + ], + [ + -2.5051286220550537, + 2.835324764251709 + ], + [ + -2.451317071914673, + 2.901798725128174 + ], + [ + -2.3929009437561035, + 2.969348669052124 + ], + [ + -2.3316993713378906, + 3.0374832153320312 + ], + [ + -2.265857219696045, + 3.104797124862671 + ], + [ + -2.198521852493286, + 3.1625924110412598 + ], + [ + -2.1297097206115723, + 3.226527214050293 + ], + [ + -2.0549283027648926, + 3.2934446334838867 + ], + [ + -1.9897171258926392, + 3.3563060760498047 + ], + [ + -1.9174346923828125, + 3.4154655933380127 + ], + [ + -1.84732985496521, + 3.4776463508605957 + ], + [ + -1.7729038000106812, + 3.538546562194824 + ], + [ + -1.6926435232162476, + 3.5946261882781982 + ], + [ + -1.6193088293075562, + 3.655383825302124 + ], + [ + -1.5314526557922363, + 3.7058606147766113 + ], + [ + -1.4484809637069702, + 3.7570858001708984 + ], + [ + -1.3592077493667603, + 3.811819076538086 + ], + [ + -1.2726013660430908, + 3.8639163970947266 + ], + [ + -1.179045557975769, + 3.913818597793579 + ], + [ + -1.0938091278076172, + 3.968156337738037 + ], + [ + -0.9956288933753967, + 4.007333278656006 + ], + [ + -0.8990021347999573, + 4.059115886688232 + ], + [ + -0.7999036312103271, + 4.101059913635254 + ], + [ + -0.709750771522522, + 4.147965431213379 + ], + [ + -0.602721095085144, + 4.183753490447998 + ], + [ + -0.4988913834095001, + 4.2250142097473145 + ], + [ + -0.3965775966644287, + 4.259474277496338 + ], + [ + -0.28651610016822815, + 4.289792060852051 + ], + [ + -0.17845480144023895, + 4.3197526931762695 + ], + [ + -0.06545595824718475, + 4.339405536651611 + ], + [ + 0.058778416365385056, + 4.365509986877441 + ], + [ + 0.17838497459888458, + 4.381104469299316 + ], + [ + 0.30639249086380005, + 4.401107311248779 + ], + [ + 0.42309504747390747, + 4.407057285308838 + ], + [ + 0.5435478091239929, + 4.419037818908691 + ], + [ + 0.6678239703178406, + 4.429128646850586 + ], + [ + 0.7912883162498474, + 4.430088043212891 + ], + [ + 0.9209880232810974, + 4.44419002532959 + ], + [ + 1.048499345779419, + 4.436034202575684 + ], + [ + 1.194473147392273, + 4.434474468231201 + ], + [ + 1.3185722827911377, + 4.421215057373047 + ], + [ + 1.4575685262680054, + 4.407434463500977 + ], + [ + 1.5928910970687866, + 4.376117706298828 + ], + [ + 1.7220426797866821, + 4.3526434898376465 + ], + [ + 1.8741416931152344, + 4.3169846534729 + ], + [ + 1.9983526468276978, + 4.291341304779053 + ], + [ + 2.141277313232422, + 4.251984119415283 + ], + [ + 2.2686944007873535, + 4.208477973937988 + ], + [ + 2.3962278366088867, + 4.162106513977051 + ], + [ + 2.5303287506103516, + 4.100673198699951 + ], + [ + 2.6629414558410645, + 4.045809745788574 + ], + [ + 2.7844691276550293, + 3.9852161407470703 + ], + [ + 2.9046406745910645, + 3.9255123138427734 + ], + [ + 3.0236799716949463, + 3.8580610752105713 + ], + [ + 3.1500799655914307, + 3.785982847213745 + ], + [ + 3.263472318649292, + 3.6921558380126953 + ], + [ + 3.3778398036956787, + 3.6141114234924316 + ], + [ + 3.501213550567627, + 3.526379108428955 + ], + [ + 3.6108036041259766, + 3.427213191986084 + ], + [ + 3.7131950855255127, + 3.3264198303222656 + ], + [ + 3.8287336826324463, + 3.2249789237976074 + ], + [ + 3.9392406940460205, + 3.114331007003784 + ], + [ + 4.038949012756348, + 2.994906425476074 + ], + [ + 4.150544166564941, + 2.8664474487304688 + ], + [ + 4.254537105560303, + 2.7487921714782715 + ], + [ + 4.353126049041748, + 2.617408514022827 + ], + [ + 4.435250759124756, + 2.4757211208343506 + ], + [ + 4.523613452911377, + 2.340426445007324 + ], + [ + 4.593565940856934, + 2.1932785511016846 + ], + [ + 4.667832374572754, + 2.055448055267334 + ], + [ + 4.73592472076416, + 1.9022738933563232 + ], + [ + 4.797405242919922, + 1.7411619424819946 + ], + [ + 4.846621990203857, + 1.5867527723312378 + ], + [ + 4.894033908843994, + 1.4243395328521729 + ], + [ + 4.940122127532959, + 1.2629179954528809 + ], + [ + 4.984976291656494, + 1.1100208759307861 + ], + [ + 5.011409759521484, + 0.9319339394569397 + ], + [ + 5.039988994598389, + 0.7663321495056152 + ], + [ + 5.056887626647949, + 0.5987592339515686 + ], + [ + 5.087705612182617, + 0.44846025109291077 + ], + [ + 5.086050510406494, + 0.27324405312538147 + ], + [ + 5.083710193634033, + 0.10791771113872528 + ], + [ + 5.072287559509277, + -0.05192594230175018 + ], + [ + 5.049464225769043, + -0.22824732959270477 + ], + [ + 5.024069309234619, + -0.3500550389289856 + ], + [ + 4.994563102722168, + -0.5025498270988464 + ], + [ + 4.959274768829346, + -0.6523891091346741 + ], + [ + 4.917263507843018, + -0.7947450280189514 + ], + [ + 4.868744850158691, + -0.938439130783081 + ], + [ + 4.806164264678955, + -1.0775727033615112 + ], + [ + 4.748088359832764, + -1.2122186422348022 + ], + [ + 4.667496204376221, + -1.3455865383148193 + ], + [ + 4.592746734619141, + -1.4919488430023193 + ], + [ + 4.514658451080322, + -1.6129822731018066 + ], + [ + 4.425142288208008, + -1.7523880004882812 + ], + [ + 4.3418731689453125, + -1.88327157497406 + ], + [ + 4.243729591369629, + -2.0126562118530273 + ], + [ + 4.143952369689941, + -2.150196075439453 + ], + [ + 4.055149078369141, + -2.274822473526001 + ], + [ + 3.951740026473999, + -2.394291639328003 + ], + [ + 3.8545594215393066, + -2.529545783996582 + ], + [ + 3.7561914920806885, + -2.629901647567749 + ], + [ + 3.6475226879119873, + -2.746523141860962 + ], + [ + 3.5651981830596924, + -2.8438408374786377 + ], + [ + 3.456165075302124, + -2.9379937648773193 + ], + [ + 3.3632702827453613, + -3.023461103439331 + ], + [ + 3.266427516937256, + -3.0823380947113037 + ], + [ + 3.160092830657959, + -3.147714614868164 + ], + [ + 3.0595133304595947, + -3.196848154067993 + ], + [ + 2.956920623779297, + -3.2202413082122803 + ], + [ + 2.8557631969451904, + -3.2749598026275635 + ], + [ + 2.7480874061584473, + -3.2893383502960205 + ], + [ + 2.6248996257781982, + -3.302492380142212 + ], + [ + 2.5269997119903564, + -3.3365557193756104 + ], + [ + 2.4154348373413086, + -3.338155508041382 + ], + [ + 2.2981042861938477, + -3.3486716747283936 + ], + [ + 2.194411516189575, + -3.3648264408111572 + ], + [ + 2.08211350440979, + -3.371595859527588 + ], + [ + 1.9570941925048828, + -3.385507106781006 + ], + [ + 1.8620754480361938, + -3.3927903175354004 + ], + [ + 1.7329272031784058, + -3.4023988246917725 + ], + [ + 1.6131600141525269, + -3.422834873199463 + ], + [ + 1.4712669849395752, + -3.623210906982422 + ], + [ + 1.3664392232894897, + -3.6245577335357666 + ], + [ + 1.2609766721725464, + -3.626932144165039 + ], + [ + 1.1771351099014282, + -3.6124682426452637 + ], + [ + 1.0771557092666626, + -3.6132216453552246 + ], + [ + 0.9780215620994568, + -3.600660562515259 + ], + [ + 0.8794789910316467, + -3.5914928913116455 + ], + [ + 0.781623125076294, + -3.5841736793518066 + ], + [ + 0.6874527931213379, + -3.571871280670166 + ], + [ + 0.5932562351226807, + -3.556065320968628 + ], + [ + 0.5001349449157715, + -3.5428216457366943 + ], + [ + 0.417007714509964, + -3.5212104320526123 + ], + [ + 0.3277859389781952, + -3.493227243423462 + ], + [ + 0.24680602550506592, + -3.4734463691711426 + ], + [ + 0.16597530245780945, + -3.453805685043335 + ], + [ + 0.08517835289239883, + -3.434833288192749 + ], + [ + 0.005083039402961731, + -3.40932035446167 + ], + [ + -0.06756678968667984, + -3.380143642425537 + ], + [ + -0.14056366682052612, + -3.3524763584136963 + ], + [ + -0.21196196973323822, + -3.3318796157836914 + ], + [ + -0.27465957403182983, + -3.3010425567626953 + ], + [ + -0.3448498845100403, + -3.273355484008789 + ], + [ + -0.4105629622936249, + -3.2544898986816406 + ], + [ + -0.46337446570396423, + -3.220167875289917 + ], + [ + -0.5318975448608398, + -3.1911697387695312 + ], + [ + -0.5881290435791016, + -3.1595709323883057 + ], + [ + -0.6446848511695862, + -3.1289167404174805 + ], + [ + -0.7057645320892334, + -3.095999240875244 + ], + [ + -0.758942723274231, + -3.072220802307129 + ], + [ + -0.8184359669685364, + -3.03031587600708 + ], + [ + -0.8777862191200256, + -3.0001208782196045 + ], + [ + -0.93394535779953, + -2.965778112411499 + ], + [ + -0.9828482270240784, + -2.9264862537384033 + ], + [ + -1.0350850820541382, + -2.8926308155059814 + ], + [ + -1.0855863094329834, + -2.857201099395752 + ], + [ + -1.1374479532241821, + -2.8256094455718994 + ], + [ + -1.1912492513656616, + -2.7930819988250732 + ], + [ + -1.2348603010177612, + -2.757244348526001 + ], + [ + -1.2796574831008911, + -2.722414970397949 + ], + [ + -1.3251807689666748, + -2.685720682144165 + ], + [ + -1.368201494216919, + -2.648806095123291 + ], + [ + -1.4063594341278076, + -2.6117327213287354 + ], + [ + -1.45609450340271, + -2.5680081844329834 + ], + [ + -1.4924556016921997, + -2.529996633529663 + ], + [ + -1.528954029083252, + -2.484738349914551 + ], + [ + -1.570415735244751, + -2.439656972885132 + ], + [ + -1.5698552131652832, + -2.371317148208618 + ], + [ + -1.6141173839569092, + -2.3170456886291504 + ], + [ + -1.6650179624557495, + -2.2691221237182617 + ], + [ + -1.704233169555664, + -2.2245984077453613 + ], + [ + -1.7568460702896118, + -2.1714963912963867 + ], + [ + -1.8071691989898682, + -2.117353677749634 + ], + [ + -1.841353416442871, + -2.0717082023620605 + ], + [ + -1.8879971504211426, + -2.021674156188965 + ], + [ + -1.9379514455795288, + -1.9663022756576538 + ], + [ + -1.971327304840088, + -1.915307641029358 + ], + [ + -2.012483835220337, + -1.8620672225952148 + ], + [ + -2.0525004863739014, + -1.8139052391052246 + ], + [ + -2.082798957824707, + -1.765459656715393 + ], + [ + -2.1203033924102783, + -1.71322762966156 + ], + [ + -2.156503438949585, + -1.6645489931106567 + ], + [ + -2.1789016723632812, + -1.6208120584487915 + ], + [ + -2.2137904167175293, + -1.5594472885131836 + ], + [ + -2.244065761566162, + -1.5123529434204102 + ], + [ + -2.2613518238067627, + -1.4656062126159668 + ], + [ + -2.2901580333709717, + -1.4114450216293335 + ], + [ + -2.307647228240967, + -1.363504409790039 + ], + [ + -2.3218350410461426, + -1.3161271810531616 + ], + [ + -2.3443703651428223, + -1.2643238306045532 + ], + [ + -2.358952522277832, + -1.2161152362823486 + ], + [ + -2.3725168704986572, + -1.1690953969955444 + ], + [ + -2.3826377391815186, + -1.1172280311584473 + ], + [ + -2.397002935409546, + -1.0690889358520508 + ], + [ + -2.4028193950653076, + -1.0200718641281128 + ], + [ + -2.4066269397735596, + -0.970595121383667 + ], + [ + -2.4210777282714844, + -0.915166437625885 + ], + [ + -2.429453134536743, + -0.8635829091072083 + ], + [ + -2.4405741691589355, + -0.8050417900085449 + ], + [ + -2.45169734954834, + -0.744501531124115 + ], + [ + -2.4580702781677246, + -0.6918973922729492 + ], + [ + -2.4699907302856445, + -0.632025957107544 + ], + [ + -2.4802019596099854, + -0.568907618522644 + ], + [ + -2.4926443099975586, + -0.5138462781906128 + ], + [ + -2.50496768951416, + -0.4514085650444031 + ], + [ + -2.5174803733825684, + -0.38860592246055603 + ], + [ + -2.527311325073242, + -0.32796379923820496 + ], + [ + -2.532444477081299, + -0.2700045704841614 + ], + [ + -2.539435386657715, + -0.21011902391910553 + ], + [ + -2.5434529781341553, + -0.15539099276065826 + ], + [ + -2.5303657054901123, + -0.09986753016710281 + ], + [ + -2.5251576900482178, + -0.04545968025922775 + ], + [ + -2.519052028656006, + 0.011226581409573555 + ], + [ + -2.5179662704467773, + 0.06422913074493408 + ], + [ + -2.5091569423675537, + 0.11907844245433807 + ], + [ + -2.5052595138549805, + 0.17680349946022034 + ], + [ + -2.4972712993621826, + 0.2368515431880951 + ], + [ + -2.491549015045166, + 0.29675978422164917 + ], + [ + -2.4812004566192627, + 0.3485954999923706 + ], + [ + -2.471989631652832, + 0.4070999324321747 + ], + [ + -2.4632363319396973, + 0.4677562713623047 + ], + [ + -2.452303409576416, + 0.5271735787391663 + ], + [ + -2.447099447250366, + 0.5879557728767395 + ], + [ + -2.429957866668701, + 0.6409167647361755 + ], + [ + -2.4214606285095215, + 0.7045494914054871 + ], + [ + -2.409613609313965, + 0.7646074891090393 + ], + [ + -2.4031879901885986, + 0.8245601058006287 + ], + [ + -2.399340867996216, + 0.8864275217056274 + ], + [ + -2.3762311935424805, + 0.9403054714202881 + ], + [ + -2.365683078765869, + 1.0025454759597778 + ], + [ + -2.3570404052734375, + 1.0596786737442017 + ], + [ + -2.3515148162841797, + 1.113701343536377 + ], + [ + -2.3439218997955322, + 1.1636251211166382 + ], + [ + -2.31671142578125, + 1.2190943956375122 + ], + [ + -2.310853958129883, + 1.2735410928726196 + ], + [ + -2.2989625930786133, + 1.3209418058395386 + ], + [ + -2.2868916988372803, + 1.3647230863571167 + ], + [ + -2.2753348350524902, + 1.4012330770492554 + ], + [ + -2.257392406463623, + 1.4345121383666992 + ], + [ + -2.234255790710449, + 1.4946537017822266 + ], + [ + -2.217745780944824, + 1.5336918830871582 + ], + [ + -2.193103075027466, + 1.563831090927124 + ], + [ + -2.1638383865356445, + 1.592268705368042 + ], + [ + -2.1263937950134277, + 1.6267834901809692 + ], + [ + -2.098369598388672, + 1.6876027584075928 + ], + [ + -2.060269832611084, + 1.7120674848556519 + ], + [ + -2.01259446144104, + 1.7456082105636597 + ], + [ + -1.9631059169769287, + 1.781449794769287 + ], + [ + -1.9065057039260864, + 1.8220852613449097 + ], + [ + -1.849961757659912, + 1.8696905374526978 + ], + [ + -1.8127667903900146, + 1.916001558303833 + ], + [ + -1.750095248222351, + 1.961168646812439 + ], + [ + -1.6885496377944946, + 2.0045182704925537 + ], + [ + -1.6229145526885986, + 2.0610129833221436 + ], + [ + -1.5583034753799438, + 2.12886905670166 + ], + [ + -1.5124061107635498, + 2.168555736541748 + ], + [ + -1.4512147903442383, + 2.224752902984619 + ], + [ + -1.3952226638793945, + 2.2991833686828613 + ], + [ + -1.3296798467636108, + 2.3526651859283447 + ], + [ + -1.2705334424972534, + 2.4241981506347656 + ], + [ + -1.2240204811096191, + 2.5066347122192383 + ], + [ + -1.1642742156982422, + 2.5402469635009766 + ], + [ + -1.1134001016616821, + 2.592752695083618 + ], + [ + -1.0535751581192017, + 2.665320873260498 + ], + [ + -1.0039362907409668, + 2.7179744243621826 + ], + [ + -0.9560591578483582, + 2.781625986099243 + ], + [ + -0.8934528231620789, + 2.8222551345825195 + ], + [ + -0.8360759019851685, + 2.866152048110962 + ], + [ + -0.7756204009056091, + 2.9133691787719727 + ], + [ + -0.7088898420333862, + 2.954401731491089 + ], + [ + -0.646295428276062, + 3.007746458053589 + ], + [ + -0.589481770992279, + 3.047438144683838 + ], + [ + -0.5251596570014954, + 3.079993486404419 + ], + [ + -0.4402637183666229, + 3.1202051639556885 + ], + [ + -0.3654383718967438, + 3.156399726867676 + ], + [ + -0.3022022843360901, + 3.1869659423828125 + ], + [ + -0.22979770600795746, + 3.214689016342163 + ], + [ + -0.15688832104206085, + 3.233384370803833 + ], + [ + -0.07195815443992615, + 3.2651281356811523 + ], + [ + 0.014438876882195473, + 3.290045738220215 + ], + [ + 0.09068680554628372, + 3.3019957542419434 + ], + [ + 0.1704729050397873, + 3.3112359046936035 + ], + [ + 0.2464071661233902, + 3.33359694480896 + ], + [ + 0.32167887687683105, + 3.3318099975585938 + ], + [ + 0.39877423644065857, + 3.3290255069732666 + ], + [ + 0.611967921257019, + 3.2194414138793945 + ], + [ + 0.6984997987747192, + 3.2124617099761963 + ], + [ + 0.8117514848709106, + 3.2146923542022705 + ], + [ + 0.9075869917869568, + 3.2034518718719482 + ], + [ + 1.0070127248764038, + 3.200429677963257 + ], + [ + 1.1027823686599731, + 3.186481237411499 + ], + [ + 1.1919678449630737, + 3.18194317817688 + ], + [ + 1.3020557165145874, + 3.1507434844970703 + ], + [ + 1.39469313621521, + 3.141079902648926 + ], + [ + 1.490206241607666, + 3.107835292816162 + ], + [ + 1.5767765045166016, + 3.0945701599121094 + ], + [ + 1.657688856124878, + 3.0506441593170166 + ], + [ + 1.7700778245925903, + 3.021702289581299 + ], + [ + 1.8564825057983398, + 2.9807991981506348 + ], + [ + 1.9440622329711914, + 2.9399712085723877 + ], + [ + 2.017791748046875, + 2.88606595993042 + ], + [ + 2.0983328819274902, + 2.829883575439453 + ], + [ + 2.196361541748047, + 2.786304473876953 + ], + [ + 2.2609267234802246, + 2.7211391925811768 + ], + [ + 2.333956003189087, + 2.647343635559082 + ], + [ + 2.4068429470062256, + 2.579876184463501 + ], + [ + 2.4756624698638916, + 2.4901392459869385 + ], + [ + 2.554903030395508, + 2.4345614910125732 + ], + [ + 2.628176689147949, + 2.3436005115509033 + ], + [ + 2.689887285232544, + 2.2526612281799316 + ], + [ + 2.7591419219970703, + 2.1574621200561523 + ], + [ + 2.8241727352142334, + 2.0603983402252197 + ], + [ + 2.8847246170043945, + 1.9530259370803833 + ], + [ + 2.9481067657470703, + 1.8698402643203735 + ], + [ + 3.0045359134674072, + 1.7638219594955444 + ], + [ + 3.0686228275299072, + 1.6592400074005127 + ], + [ + 3.1211764812469482, + 1.554263949394226 + ], + [ + 3.179692506790161, + 1.448191523551941 + ], + [ + 3.220425605773926, + 1.3520883321762085 + ], + [ + 3.2663345336914062, + 1.2459195852279663 + ], + [ + 3.3203389644622803, + 1.1411343812942505 + ], + [ + 3.357081651687622, + 1.0424540042877197 + ], + [ + 3.3951523303985596, + 0.9366125464439392 + ], + [ + 3.429147958755493, + 0.8378911018371582 + ], + [ + 3.4491074085235596, + 0.7448635101318359 + ], + [ + 3.4741082191467285, + 0.6497449278831482 + ], + [ + 3.489467144012451, + 0.5577705502510071 + ], + [ + 3.502983808517456, + 0.46688902378082275 + ], + [ + 3.50787091255188, + 0.37495115399360657 + ], + [ + 3.5102999210357666, + 0.28662341833114624 + ], + [ + 3.506148099899292, + 0.1963791698217392 + ], + [ + 3.4973626136779785, + 0.11097176373004913 + ], + [ + 3.485323905944824, + 0.02084435522556305 + ], + [ + 3.4634146690368652, + -0.0665149912238121 + ], + [ + 3.4448773860931396, + -0.16134531795978546 + ], + [ + 3.4210314750671387, + -0.26115280389785767 + ], + [ + 3.39363169670105, + -0.3456045985221863 + ], + [ + 3.363438367843628, + -0.4467039406299591 + ], + [ + 3.339721202850342, + -0.5464423298835754 + ], + [ + 3.3164472579956055, + -0.6523231267929077 + ], + [ + 3.2898294925689697, + -0.7533025741577148 + ], + [ + 3.2781412601470947, + -0.8549384474754333 + ], + [ + 3.273810625076294, + -0.9501970410346985 + ], + [ + 3.2443950176239014, + -1.045616865158081 + ], + [ + 3.2442634105682373, + -1.13193678855896 + ], + [ + 3.2387654781341553, + -1.2055481672286987 + ], + [ + 3.2327322959899902, + -1.2749263048171997 + ], + [ + 3.218219041824341, + -1.3361485004425049 + ], + [ + 3.2089881896972656, + -1.3707520961761475 + ], + [ + 3.185059070587158, + -1.4281063079833984 + ], + [ + 3.1666500568389893, + -1.467042088508606 + ], + [ + 3.1298115253448486, + -1.499009132385254 + ], + [ + 3.092073440551758, + -1.5325738191604614 + ], + [ + 3.048287868499756, + -1.5608669519424438 + ], + [ + 2.9907445907592773, + -1.5850598812103271 + ], + [ + 2.9280812740325928, + -1.6162389516830444 + ], + [ + 2.8727056980133057, + -1.6501648426055908 + ], + [ + 2.8084068298339844, + -1.66936194896698 + ], + [ + 2.740647077560425, + -1.7048619985580444 + ], + [ + 2.6753182411193848, + -1.7381601333618164 + ], + [ + 2.611057996749878, + -1.7762260437011719 + ], + [ + 2.548384428024292, + -1.8132392168045044 + ], + [ + 2.4793248176574707, + -1.8481276035308838 + ], + [ + 2.4041285514831543, + -1.8723171949386597 + ], + [ + 2.3292043209075928, + -1.9069454669952393 + ], + [ + 2.2484796047210693, + -1.943587303161621 + ], + [ + 2.1713781356811523, + -1.9862147569656372 + ], + [ + 2.1018621921539307, + -2.0301923751831055 + ], + [ + 2.0211756229400635, + -2.0842068195343018 + ], + [ + 1.9497449398040771, + -2.1408848762512207 + ], + [ + 1.8892513513565063, + -2.181532144546509 + ], + [ + 1.8147850036621094, + -2.2199745178222656 + ], + [ + 1.7460445165634155, + -2.271362066268921 + ], + [ + 1.6876208782196045, + -2.319087028503418 + ], + [ + 1.6254479885101318, + -2.3770525455474854 + ], + [ + 1.554864764213562, + -2.4224467277526855 + ], + [ + 1.5096033811569214, + -2.4655487537384033 + ], + [ + 1.464123010635376, + -2.5171561241149902 + ], + [ + 1.511777400970459, + -2.437337636947632 + ], + [ + 1.433635950088501, + -2.468316078186035 + ], + [ + 1.3610332012176514, + -2.4897806644439697 + ], + [ + 1.2796211242675781, + -2.5196313858032227 + ], + [ + 1.2119483947753906, + -2.5397746562957764 + ], + [ + 1.1507171392440796, + -2.5609209537506104 + ], + [ + 1.1160273551940918, + -2.584155559539795 + ], + [ + 1.039048671722412, + -2.6021294593811035 + ], + [ + 0.9741151332855225, + -2.624804973602295 + ], + [ + 0.9148171544075012, + -2.6504709720611572 + ], + [ + 0.8502357602119446, + -2.678514242172241 + ], + [ + 0.778400719165802, + -2.6890385150909424 + ], + [ + 0.7437519431114197, + -2.684354782104492 + ], + [ + 0.6944791078567505, + -2.6930487155914307 + ], + [ + 0.6295535564422607, + -2.707439661026001 + ], + [ + 0.5656899809837341, + -2.7328133583068848 + ], + [ + 0.5090932846069336, + -2.755047082901001 + ], + [ + 0.4562597870826721, + -2.7703444957733154 + ], + [ + 0.39461150765419006, + -2.7479355335235596 + ], + [ + 0.3386745750904083, + -2.7606201171875 + ], + [ + 0.2915944457054138, + -2.7685739994049072 + ], + [ + 0.24458736181259155, + -2.7765138149261475 + ], + [ + 0.1938885599374771, + -2.7811872959136963 + ], + [ + 0.15876036882400513, + -2.8032493591308594 + ], + [ + 0.08362212777137756, + -2.775117874145508 + ], + [ + 0.03041999414563179, + -2.7673072814941406 + ], + [ + -0.013755652122199535, + -2.7777583599090576 + ], + [ + -0.0553840808570385, + -2.7762291431427 + ], + [ + -0.08917714655399323, + -2.772143602371216 + ], + [ + -0.1333334594964981, + -2.7591331005096436 + ], + [ + -0.19773277640342712, + -2.7466797828674316 + ], + [ + -0.2533676028251648, + -2.7507622241973877 + ], + [ + -0.2925993800163269, + -2.742262125015259 + ], + [ + -0.32649660110473633, + -2.7283802032470703 + ], + [ + -0.3684251010417938, + -2.7126400470733643 + ], + [ + -0.3980896770954132, + -2.6926138401031494 + ], + [ + -0.44426023960113525, + -2.6792941093444824 + ], + [ + -0.5026360154151917, + -2.6756646633148193 + ], + [ + -0.5401818752288818, + -2.667381763458252 + ], + [ + -0.5826342701911926, + -2.6473615169525146 + ], + [ + -0.6171247363090515, + -2.6236939430236816 + ], + [ + -0.6573880910873413, + -2.6034321784973145 + ], + [ + -0.7001950740814209, + -2.5680973529815674 + ], + [ + -0.7372730374336243, + -2.5733861923217773 + ], + [ + -0.7783359289169312, + -2.554731607437134 + ], + [ + -0.8171892762184143, + -2.518935203552246 + ], + [ + -0.8573025465011597, + -2.4965426921844482 + ], + [ + -0.893268883228302, + -2.4663124084472656 + ], + [ + -0.9367859959602356, + -2.426037073135376 + ], + [ + -0.9748829007148743, + -2.397326707839966 + ], + [ + -1.003208875656128, + -2.390115737915039 + ], + [ + -1.0438032150268555, + -2.3555619716644287 + ], + [ + -1.088500738143921, + -2.323457956314087 + ], + [ + -1.1366695165634155, + -2.2831084728240967 + ], + [ + -1.1868537664413452, + -2.2470574378967285 + ], + [ + -1.2345410585403442, + -2.2106566429138184 + ], + [ + -1.2928500175476074, + -2.1746888160705566 + ], + [ + -1.306487798690796, + -2.159517526626587 + ], + [ + -1.361864447593689, + -2.119474411010742 + ], + [ + -1.4114149808883667, + -2.0794594287872314 + ], + [ + -1.4694842100143433, + -2.048192262649536 + ], + [ + -1.5220963954925537, + -2.0255684852600098 + ], + [ + -1.585252285003662, + -2.001296043395996 + ], + [ + -1.6409894227981567, + -1.973669171333313 + ], + [ + -1.6665431261062622, + -1.942260503768921 + ], + [ + -1.7126028537750244, + -1.9104963541030884 + ], + [ + -1.7638309001922607, + -1.890023112297058 + ], + [ + -1.8165044784545898, + -1.8742774724960327 + ], + [ + -1.8627840280532837, + -1.8612334728240967 + ], + [ + -1.9027436971664429, + -1.842311143875122 + ], + [ + -1.9361766576766968, + -1.8259012699127197 + ], + [ + -1.9685189723968506, + -1.816699743270874 + ], + [ + -2.0102524757385254, + -1.76907479763031 + ], + [ + -2.041616678237915, + -1.7537137269973755 + ], + [ + -2.0712332725524902, + -1.7430647611618042 + ], + [ + -2.0988588333129883, + -1.721824049949646 + ], + [ + -2.1168441772460938, + -1.7027053833007812 + ], + [ + -2.1366429328918457, + -1.6803278923034668 + ], + [ + -2.1574132442474365, + -1.654842495918274 + ], + [ + -2.1726486682891846, + -1.6224205493927002 + ], + [ + -2.2146363258361816, + -1.5832512378692627 + ], + [ + -2.230710744857788, + -1.5580613613128662 + ], + [ + -2.2367630004882812, + -1.519519329071045 + ], + [ + -2.2526931762695312, + -1.4832121133804321 + ], + [ + -2.7936298847198486, + -1.9213887453079224 + ], + [ + -2.8219358921051025, + -1.8704017400741577 + ], + [ + -2.8606719970703125, + -1.8227845430374146 + ], + [ + -2.901721954345703, + -1.7638503313064575 + ], + [ + -2.9417872428894043, + -1.7075657844543457 + ], + [ + -2.978193759918213, + -1.6483131647109985 + ], + [ + -3.0079381465911865, + -1.5906116962432861 + ], + [ + -3.0437817573547363, + -1.5272263288497925 + ], + [ + -3.0749166011810303, + -1.4683866500854492 + ], + [ + -3.1139414310455322, + -1.4044164419174194 + ], + [ + -3.1454954147338867, + -1.3381140232086182 + ], + [ + -3.1764869689941406, + -1.26907479763031 + ], + [ + -1.9459608793258667, + -0.6861114501953125 + ], + [ + -1.9652037620544434, + -0.6401185393333435 + ], + [ + -1.9802254438400269, + -0.5982058048248291 + ], + [ + -1.9951105117797852, + -0.5539867877960205 + ], + [ + -2.0092694759368896, + -0.5080002546310425 + ], + [ + -2.0217435359954834, + -0.46194955706596375 + ], + [ + -2.034604549407959, + -0.41333499550819397 + ], + [ + -2.045097827911377, + -0.36613792181015015 + ], + [ + -2.0544819831848145, + -0.3167561888694763 + ], + [ + -2.0632247924804688, + -0.26812294125556946 + ], + [ + -2.0698840618133545, + -0.21824781596660614 + ], + [ + -2.0763425827026367, + -0.16767901182174683 + ], + [ + -2.080977201461792, + -0.11817596852779388 + ], + [ + -2.085012912750244, + -0.06711170077323914 + ], + [ + -2.0860676765441895, + -0.01586427167057991 + ], + [ + -2.087454319000244, + 0.032600030303001404 + ], + [ + -2.0877201557159424, + 0.08449400961399078 + ], + [ + -2.0862956047058105, + 0.1356000155210495 + ], + [ + -2.083289861679077, + 0.18701224029064178 + ], + [ + -2.081596612930298, + 0.2381150871515274 + ], + [ + -2.0735902786254883, + 0.2910008728504181 + ], + [ + -2.0683999061584473, + 0.3439560830593109 + ], + [ + -2.0606439113616943, + 0.3926254212856293 + ], + [ + -2.053243398666382, + 0.44349366426467896 + ], + [ + -2.042027711868286, + 0.49629175662994385 + ], + [ + -2.0287647247314453, + 0.5442829132080078 + ], + [ + -2.0116524696350098, + 0.5964592099189758 + ], + [ + -2.0034520626068115, + 0.6470811367034912 + ], + [ + -1.9882367849349976, + 0.6953976154327393 + ], + [ + -1.9700981378555298, + 0.7487432360649109 + ], + [ + -1.9555854797363281, + 0.7978733777999878 + ], + [ + -1.9310756921768188, + 0.8452919721603394 + ], + [ + -1.9105243682861328, + 0.898220956325531 + ], + [ + -1.8872729539871216, + 0.9454725384712219 + ], + [ + -1.865592360496521, + 0.9914072751998901 + ], + [ + -1.84126615524292, + 1.0410655736923218 + ], + [ + -1.8139920234680176, + 1.0886739492416382 + ], + [ + -1.785301685333252, + 1.1371856927871704 + ], + [ + -1.758167028427124, + 1.1780158281326294 + ], + [ + -1.726958155632019, + 1.2222673892974854 + ], + [ + -1.692543387413025, + 1.2620667219161987 + ], + [ + -1.661798357963562, + 1.3108476400375366 + ], + [ + -1.6267884969711304, + 1.3518353700637817 + ], + [ + -1.5920006036758423, + 1.3946893215179443 + ], + [ + -1.5532777309417725, + 1.4362919330596924 + ], + [ + -1.520512342453003, + 1.4769511222839355 + ], + [ + -1.479565143585205, + 1.5140180587768555 + ], + [ + -1.4447811841964722, + 1.5533677339553833 + ], + [ + -1.405845284461975, + 1.5920530557632446 + ], + [ + -1.3592714071273804, + 1.6265902519226074 + ], + [ + -1.317220687866211, + 1.6572967767715454 + ], + [ + -1.2715754508972168, + 1.6980416774749756 + ], + [ + -1.228000521659851, + 1.7252612113952637 + ], + [ + -1.1899724006652832, + 1.7520780563354492 + ], + [ + -1.1450456380844116, + 1.780039668083191 + ], + [ + -1.1020545959472656, + 1.810593605041504 + ], + [ + -1.0598829984664917, + 1.8378090858459473 + ], + [ + -1.0204914808273315, + 1.8383175134658813 + ], + [ + -0.9604700207710266, + 1.8763399124145508 + ], + [ + -0.9155614972114563, + 1.895161747932434 + ], + [ + -0.8667241930961609, + 1.9305669069290161 + ], + [ + -0.8235692977905273, + 1.945513367652893 + ], + [ + -0.770804226398468, + 1.9649611711502075 + ], + [ + -0.7308144569396973, + 1.9767364263534546 + ], + [ + -0.6864765286445618, + 1.9910430908203125 + ], + [ + -0.6235260963439941, + 2.004852056503296 + ], + [ + -0.5817754864692688, + 2.0181779861450195 + ], + [ + -0.528957724571228, + 2.0265746116638184 + ], + [ + -0.47303953766822815, + 2.0414133071899414 + ], + [ + -0.43667006492614746, + 2.0369722843170166 + ], + [ + -0.3771652281284332, + 2.044952154159546 + ], + [ + -0.3227597773075104, + 2.056699752807617 + ], + [ + -0.27727237343788147, + 2.045673370361328 + ], + [ + -0.20591939985752106, + 2.0735394954681396 + ], + [ + -0.17788028717041016, + 2.0611109733581543 + ], + [ + -0.12059900909662247, + 2.0697262287139893 + ], + [ + -0.06402347981929779, + 2.061009407043457 + ], + [ + -0.006658658850938082, + 2.066558361053467 + ], + [ + 0.04372616112232208, + 2.0564284324645996 + ], + [ + 0.09109124541282654, + 2.055434465408325 + ], + [ + 0.13978062570095062, + 2.062476873397827 + ], + [ + 0.18395663797855377, + 2.052319049835205 + ], + [ + 0.23857423663139343, + 2.0404579639434814 + ], + [ + 0.2902390956878662, + 2.0209343433380127 + ], + [ + 0.33240655064582825, + 2.0196664333343506 + ], + [ + 0.3821125328540802, + 1.9971251487731934 + ], + [ + 0.4403720796108246, + 1.9875038862228394 + ], + [ + 0.4963839054107666, + 1.9691524505615234 + ], + [ + 0.5423737168312073, + 1.951072335243225 + ], + [ + 0.5951283574104309, + 1.937015414237976 + ], + [ + 0.6394990086555481, + 1.9203904867172241 + ], + [ + 0.6908435821533203, + 1.895341396331787 + ], + [ + 0.7330618500709534, + 1.8767473697662354 + ], + [ + 0.7980152368545532, + 1.8467694520950317 + ], + [ + 0.8402811288833618, + 1.8243736028671265 + ], + [ + 0.8826697468757629, + 1.7942339181900024 + ], + [ + 0.9364378452301025, + 1.7650766372680664 + ], + [ + 0.9841527342796326, + 1.7265326976776123 + ], + [ + 1.0287437438964844, + 1.7057452201843262 + ], + [ + 1.0701833963394165, + 1.6715261936187744 + ], + [ + 1.1161569356918335, + 1.6356277465820312 + ], + [ + 1.1603572368621826, + 1.5980077981948853 + ], + [ + 1.1955888271331787, + 1.5755720138549805 + ], + [ + 1.2521369457244873, + 1.5344982147216797 + ], + [ + 1.2802461385726929, + 1.4948784112930298 + ], + [ + 1.3325847387313843, + 1.4623594284057617 + ], + [ + 1.3686742782592773, + 1.4179400205612183 + ], + [ + 1.4065287113189697, + 1.375778317451477 + ], + [ + 1.4510926008224487, + 1.334742546081543 + ], + [ + 1.4791454076766968, + 1.287514090538025 + ], + [ + 1.5205434560775757, + 1.2445322275161743 + ], + [ + 1.5551702976226807, + 1.2056573629379272 + ], + [ + 1.587006688117981, + 1.1593759059906006 + ], + [ + 1.6270084381103516, + 1.1151074171066284 + ], + [ + 1.6513609886169434, + 1.0691781044006348 + ], + [ + 1.6853357553482056, + 1.016253113746643 + ], + [ + 1.7165212631225586, + 0.9726642966270447 + ], + [ + 1.7454206943511963, + 0.923740804195404 + ], + [ + 1.7726987600326538, + 0.8745564222335815 + ], + [ + 1.7968285083770752, + 0.8278589248657227 + ], + [ + 1.8236849308013916, + 0.7746590971946716 + ], + [ + 1.8461438417434692, + 0.7246137261390686 + ], + [ + 1.8695170879364014, + 0.6717315316200256 + ], + [ + 1.8906558752059937, + 0.6204254627227783 + ], + [ + 1.9142203330993652, + 0.5671297311782837 + ], + [ + 1.9325798749923706, + 0.513958752155304 + ], + [ + 1.9500938653945923, + 0.4578929543495178 + ], + [ + 1.964703917503357, + 0.40455761551856995 + ], + [ + 1.980220079421997, + 0.3496655225753784 + ], + [ + 1.9954888820648193, + 0.2929741144180298 + ], + [ + 2.006561279296875, + 0.2385748028755188 + ], + [ + 2.016836643218994, + 0.18232722580432892 + ], + [ + 2.0260651111602783, + 0.12720675766468048 + ], + [ + 2.031747341156006, + 0.07082538306713104 + ], + [ + 2.042339563369751, + 0.013518706895411015 + ], + [ + 2.0418286323547363, + -0.042875856161117554 + ], + [ + 2.047318935394287, + -0.09777381271123886 + ], + [ + 2.0481812953948975, + -0.15250666439533234 + ], + [ + 2.0471816062927246, + -0.2028331756591797 + ], + [ + 2.0443153381347656, + -0.25771844387054443 + ], + [ + 2.0435352325439453, + -0.3122040927410126 + ], + [ + 2.039417028427124, + -0.37047842144966125 + ], + [ + 2.040287971496582, + -0.42342519760131836 + ], + [ + 2.032681941986084, + -0.47848162055015564 + ], + [ + 2.025634288787842, + -0.5375373959541321 + ], + [ + 2.0147135257720947, + -0.5847360491752625 + ], + [ + 2.0121524333953857, + -0.6484998464584351 + ], + [ + 1.9932470321655273, + -0.6926149725914001 + ], + [ + 1.982198715209961, + -0.7509189248085022 + ], + [ + 1.9675726890563965, + -0.8081321120262146 + ], + [ + 1.9483129978179932, + -0.8586784601211548 + ], + [ + 1.937340259552002, + -0.9054781794548035 + ], + [ + 1.9161163568496704, + -0.9528237581253052 + ], + [ + 1.896592378616333, + -1.0090866088867188 + ], + [ + 1.8825697898864746, + -1.0583981275558472 + ], + [ + 1.8588669300079346, + -1.108545184135437 + ], + [ + 1.8425298929214478, + -1.158422589302063 + ], + [ + 1.8141615390777588, + -1.2035430669784546 + ], + [ + 1.7868070602416992, + -1.2556543350219727 + ], + [ + 1.7568771839141846, + -1.293493628501892 + ], + [ + 1.734115719795227, + -1.341096043586731 + ], + [ + 1.7056341171264648, + -1.3856717348098755 + ], + [ + 1.6662331819534302, + -1.4346776008605957 + ], + [ + 1.6382941007614136, + -1.4756830930709839 + ], + [ + 1.605541706085205, + -1.5158026218414307 + ], + [ + 1.5727931261062622, + -1.5604523420333862 + ], + [ + 1.5418733358383179, + -1.5989495515823364 + ], + [ + 1.5046370029449463, + -1.6373013257980347 + ], + [ + 1.4627655744552612, + -1.6475218534469604 + ], + [ + 1.4160569906234741, + -1.6870858669281006 + ], + [ + 1.3649190664291382, + -1.7200837135314941 + ], + [ + 1.3356900215148926, + -1.752590537071228 + ], + [ + 1.3006995916366577, + -1.7860100269317627 + ], + [ + 1.2521007061004639, + -1.8153226375579834 + ], + [ + 1.2127084732055664, + -1.8491519689559937 + ], + [ + 1.1695561408996582, + -1.8780659437179565 + ], + [ + 1.1260894536972046, + -1.8991636037826538 + ], + [ + 1.0812761783599854, + -1.9350874423980713 + ], + [ + 1.0118917226791382, + -1.9002642631530762 + ], + [ + 0.9535278081893921, + -1.9175820350646973 + ], + [ + 0.912358283996582, + -1.9427766799926758 + ], + [ + 0.8718228936195374, + -1.961212396621704 + ], + [ + 0.8261508941650391, + -2.015604257583618 + ], + [ + 0.7900270819664001, + -2.045496940612793 + ], + [ + 0.7516372799873352, + -2.0903289318084717 + ], + [ + 0.70807945728302, + -2.1267032623291016 + ], + [ + 0.6492659449577332, + -2.1718122959136963 + ], + [ + 0.58734130859375, + -2.211627244949341 + ], + [ + 0.5076678991317749, + -2.1773264408111572 + ], + [ + 0.4259823262691498, + -2.1837453842163086 + ], + [ + 0.3263620436191559, + -2.1657254695892334 + ], + [ + 0.19341742992401123, + -2.143484354019165 + ], + [ + 0.06282500177621841, + -2.086060047149658 + ], + [ + -0.13115249574184418, + -1.9655487537384033 + ], + [ + -0.29092392325401306, + -1.842512607574463 + ], + [ + -0.4161047339439392, + -1.6967500448226929 + ], + [ + -0.4997539520263672, + -1.6064453125 + ], + [ + -0.5395010709762573, + -1.5795016288757324 + ], + [ + -0.5562373399734497, + -1.5961891412734985 + ], + [ + -0.6035471558570862, + -1.9270379543304443 + ], + [ + -0.6278324127197266, + -1.9756180047988892 + ], + [ + -0.6644409894943237, + -1.9790871143341064 + ], + [ + -0.6781140565872192, + -1.9451930522918701 + ], + [ + -0.6735978722572327, + -1.8834408521652222 + ], + [ + -0.6617145538330078, + -1.7849400043487549 + ], + [ + -0.6500927805900574, + -1.698134183883667 + ], + [ + -0.6127457618713379, + -1.61251962184906 + ], + [ + -0.5696239471435547, + -1.5257824659347534 + ], + [ + -0.5336162447929382, + -1.4700247049331665 + ], + [ + -0.4936690628528595, + -1.436972975730896 + ], + [ + -0.5778018832206726, + -1.5260932445526123 + ], + [ + -0.5414689183235168, + -1.465340495109558 + ], + [ + -0.5314018130302429, + -1.4424415826797485 + ], + [ + -0.49331218004226685, + -1.437474012374878 + ], + [ + -0.5015113949775696, + -1.473227620124817 + ], + [ + -0.5637298822402954, + -1.5799401998519897 + ], + [ + -0.6889797449111938, + -1.7664276361465454 + ], + [ + -0.8660627603530884, + -1.9388573169708252 + ], + [ + -1.005185604095459, + -2.0941102504730225 + ], + [ + -1.129868507385254, + -2.1753957271575928 + ], + [ + -1.230324149131775, + -2.1754348278045654 + ], + [ + -1.3064273595809937, + -2.1445834636688232 + ], + [ + -1.3199691772460938, + -2.113675594329834 + ], + [ + -1.3952053785324097, + -2.083737850189209 + ], + [ + -1.4728262424468994, + -2.0444436073303223 + ], + [ + -1.5307731628417969, + -1.992955207824707 + ], + [ + -1.6029467582702637, + -1.9329040050506592 + ], + [ + -1.6564549207687378, + -1.857965111732483 + ], + [ + -1.6908602714538574, + -1.7758569717407227 + ], + [ + -1.724656343460083, + -1.680925726890564 + ], + [ + -1.735837459564209, + -1.5929746627807617 + ], + [ + -1.7504152059555054, + -1.5329922437667847 + ], + [ + -1.770708441734314, + -1.4841829538345337 + ], + [ + -1.7995060682296753, + -1.4670037031173706 + ], + [ + -1.8845102787017822, + -1.4611225128173828 + ], + [ + -1.9328784942626953, + -1.4565922021865845 + ], + [ + -1.9941757917404175, + -1.4586613178253174 + ], + [ + -2.061934471130371, + -1.4738255739212036 + ], + [ + -2.138526201248169, + -1.4830354452133179 + ], + [ + -2.2242743968963623, + -1.484837293624878 + ], + [ + -2.296983242034912, + -1.4773999452590942 + ], + [ + -2.372288465499878, + -1.4461804628372192 + ], + [ + -2.435014247894287, + -1.4093635082244873 + ], + [ + -2.499687433242798, + -1.3588062524795532 + ], + [ + -2.5517520904541016, + -1.2954427003860474 + ], + [ + -2.599118709564209, + -1.228668451309204 + ], + [ + -2.651815176010132, + -1.1732088327407837 + ], + [ + -2.7008397579193115, + -1.106345772743225 + ], + [ + -2.7433531284332275, + -1.040196180343628 + ], + [ + -2.7786660194396973, + -0.9647761583328247 + ], + [ + -2.8164608478546143, + -0.89781653881073 + ], + [ + -2.8400418758392334, + -0.826678454875946 + ], + [ + -2.8683366775512695, + -0.7503847479820251 + ], + [ + -2.885441303253174, + -0.6802036762237549 + ], + [ + -2.8987936973571777, + -0.6036429405212402 + ], + [ + -2.904998302459717, + -0.5314478278160095 + ], + [ + -2.9143917560577393, + -0.4602030813694 + ], + [ + -2.9160544872283936, + -0.3813187777996063 + ], + [ + -2.9160401821136475, + -0.30927878618240356 + ], + [ + -3.014133930206299, + -0.2222793847322464 + ], + [ + -3.0255303382873535, + -0.14988365769386292 + ], + [ + -3.0319533348083496, + -0.07200662046670914 + ], + [ + -3.034043788909912, + 0.008355392143130302 + ], + [ + -3.032017469406128, + 0.08308340609073639 + ], + [ + -3.0296006202697754, + 0.16095487773418427 + ], + [ + -3.022428274154663, + 0.2373012751340866 + ], + [ + -3.019695997238159, + 0.30473974347114563 + ], + [ + -3.009525775909424, + 0.38272491097450256 + ], + [ + -2.993626117706299, + 0.4595666527748108 + ], + [ + -2.981994867324829, + 0.5303322076797485 + ], + [ + -2.96045184135437, + 0.6011537313461304 + ], + [ + -2.9474692344665527, + 0.6776984333992004 + ], + [ + -2.9779059886932373, + 0.7789232730865479 + ], + [ + -2.9486522674560547, + 0.8522771596908569 + ], + [ + -2.9360320568084717, + 0.9247283935546875 + ], + [ + -2.9167423248291016, + 0.992242693901062 + ], + [ + -2.8961663246154785, + 1.0586509704589844 + ], + [ + -2.8682777881622314, + 1.1300806999206543 + ], + [ + -2.8432371616363525, + 1.2063385248184204 + ], + [ + -2.8250339031219482, + 1.2779128551483154 + ], + [ + -2.799100160598755, + 1.3596545457839966 + ], + [ + -2.753608465194702, + 1.4337559938430786 + ], + [ + -2.712364435195923, + 1.5162193775177002 + ], + [ + -2.657693386077881, + 1.5890040397644043 + ], + [ + -2.5834903717041016, + 1.6459919214248657 + ], + [ + -2.512814521789551, + 1.6929512023925781 + ], + [ + -2.471365213394165, + 1.755268931388855 + ], + [ + -2.4185986518859863, + 1.7867653369903564 + ], + [ + -2.3805675506591797, + 1.8241887092590332 + ], + [ + -2.333798885345459, + 1.8471028804779053 + ], + [ + -2.2910096645355225, + 1.8996329307556152 + ], + [ + -2.245710611343384, + 1.935479998588562 + ], + [ + -2.2034597396850586, + 1.9667253494262695 + ], + [ + -2.1615331172943115, + 2.009481906890869 + ], + [ + -2.1067492961883545, + 2.0526602268218994 + ], + [ + -2.057168483734131, + 2.0920968055725098 + ], + [ + -2.009150743484497, + 2.1352593898773193 + ], + [ + -1.9501385688781738, + 2.157172679901123 + ], + [ + -1.891403079032898, + 2.194749355316162 + ], + [ + -1.8468751907348633, + 2.239149808883667 + ], + [ + -1.7779206037521362, + 2.283015489578247 + ], + [ + -1.726028561592102, + 2.2995553016662598 + ], + [ + -1.6845428943634033, + 2.3230643272399902 + ], + [ + -1.6093631982803345, + 2.336301803588867 + ], + [ + -1.5734806060791016, + 2.366074323654175 + ], + [ + -1.5028072595596313, + 2.3711414337158203 + ], + [ + -1.4407134056091309, + 2.3993759155273438 + ], + [ + -1.3894600868225098, + 2.4183011054992676 + ], + [ + -1.3492003679275513, + 2.4179062843322754 + ], + [ + -1.2773021459579468, + 2.4431374073028564 + ], + [ + -1.2306805849075317, + 2.4600400924682617 + ], + [ + -1.1686859130859375, + 2.465120553970337 + ], + [ + -1.1098145246505737, + 2.4707601070404053 + ], + [ + -1.0503175258636475, + 2.495852470397949 + ], + [ + -0.992815375328064, + 2.4977622032165527 + ], + [ + -0.9282429814338684, + 2.5140061378479004 + ], + [ + -0.8755359649658203, + 2.5103487968444824 + ], + [ + -0.8257607221603394, + 2.5233724117279053 + ], + [ + -0.7781040072441101, + 2.5235705375671387 + ], + [ + -0.718024492263794, + 2.515141010284424 + ], + [ + -0.6701514720916748, + 2.522469997406006 + ], + [ + -0.6283256411552429, + 2.535329818725586 + ], + [ + -0.5807893872261047, + 2.5152440071105957 + ], + [ + -0.5266401767730713, + 2.5385336875915527 + ], + [ + -0.46960335969924927, + 2.512422800064087 + ], + [ + -0.4402403235435486, + 2.519559860229492 + ], + [ + -0.38434693217277527, + 2.533888816833496 + ], + [ + -0.3341313302516937, + 2.522469997406006 + ], + [ + -0.30331677198410034, + 2.5230391025543213 + ], + [ + -0.25844258069992065, + 2.5327470302581787 + ], + [ + -0.21236637234687805, + 2.5348238945007324 + ], + [ + -0.1511351317167282, + 2.531519651412964 + ], + [ + -0.09311021864414215, + 2.541757345199585 + ], + [ + -0.02478034794330597, + 2.549605369567871 + ], + [ + 0.004652024246752262, + 2.5757806301116943 + ], + [ + 0.07611851394176483, + 2.5483345985412598 + ], + [ + 0.12316085398197174, + 2.5704877376556396 + ], + [ + 0.17619521915912628, + 2.538695812225342 + ], + [ + 0.24979910254478455, + 2.5459959506988525 + ], + [ + 0.2888847887516022, + 2.542450428009033 + ], + [ + 0.3644310235977173, + 2.531355619430542 + ], + [ + 0.4008951485157013, + 2.5386900901794434 + ], + [ + 0.47889718413352966, + 2.4966580867767334 + ], + [ + 0.5320435762405396, + 2.4970545768737793 + ], + [ + 0.6034441590309143, + 2.503403425216675 + ], + [ + 0.6679888963699341, + 2.4816479682922363 + ], + [ + 0.7131733894348145, + 2.452549695968628 + ], + [ + 0.8080291748046875, + 2.44242262840271 + ], + [ + 0.8543142676353455, + 2.4473910331726074 + ], + [ + 0.9138693809509277, + 2.404317617416382 + ], + [ + 0.9808793663978577, + 2.363959312438965 + ], + [ + 1.05167555809021, + 2.346146821975708 + ], + [ + 1.1056253910064697, + 2.3316266536712646 + ], + [ + 1.1537197828292847, + 2.299647569656372 + ], + [ + 1.2285205125808716, + 2.271240711212158 + ], + [ + 1.297705054283142, + 2.235638380050659 + ], + [ + 1.3547955751419067, + 2.202505588531494 + ], + [ + 1.4222121238708496, + 2.157590389251709 + ], + [ + 1.464374303817749, + 2.12394642829895 + ], + [ + 1.5187848806381226, + 2.0988521575927734 + ], + [ + 1.5990430116653442, + 2.0641376972198486 + ], + [ + 1.6539355516433716, + 2.023745536804199 + ], + [ + 1.7008119821548462, + 1.9838838577270508 + ], + [ + 1.7761355638504028, + 1.9346710443496704 + ], + [ + 1.8335834741592407, + 1.8883376121520996 + ], + [ + 1.8891854286193848, + 1.8449677228927612 + ], + [ + 1.939863920211792, + 1.8047107458114624 + ], + [ + 1.9964779615402222, + 1.7525012493133545 + ], + [ + 2.0504682064056396, + 1.698355793952942 + ], + [ + 2.108424186706543, + 1.646470069885254 + ], + [ + 2.145421028137207, + 1.594067931175232 + ], + [ + 2.2001733779907227, + 1.5521998405456543 + ], + [ + 2.2504074573516846, + 1.4909181594848633 + ], + [ + 2.298129081726074, + 1.4289121627807617 + ], + [ + 2.353762626647949, + 1.3800536394119263 + ], + [ + 2.410667896270752, + 1.3264979124069214 + ], + [ + 2.4450533390045166, + 1.2679641246795654 + ], + [ + 2.48217511177063, + 1.1937446594238281 + ], + [ + 2.538017988204956, + 1.1399486064910889 + ], + [ + 2.5806884765625, + 1.0680643320083618 + ], + [ + 2.6243205070495605, + 0.9991070032119751 + ], + [ + 2.6654179096221924, + 0.9311591982841492 + ], + [ + 2.700122833251953, + 0.8676578402519226 + ], + [ + 2.7311599254608154, + 0.7994180917739868 + ], + [ + 2.7681005001068115, + 0.7247393727302551 + ], + [ + 2.8055789470672607, + 0.654347836971283 + ], + [ + 2.8355729579925537, + 0.5792958736419678 + ], + [ + 2.8655507564544678, + 0.5030249953269958 + ], + [ + 2.892328977584839, + 0.4230291545391083 + ], + [ + 2.9242031574249268, + 0.3397740423679352 + ], + [ + 2.9546523094177246, + 0.2527519464492798 + ], + [ + 2.974015951156616, + 0.1680860072374344 + ], + [ + 3.0043351650238037, + 0.08119115233421326 + ], + [ + 3.0296666622161865, + -0.018470562994480133 + ], + [ + 3.0517539978027344, + -0.09997892379760742 + ], + [ + 3.049988031387329, + -0.17885956168174744 + ], + [ + 3.0688984394073486, + -0.265476793050766 + ], + [ + 3.0729730129241943, + -0.35872748494148254 + ], + [ + 3.0826539993286133, + -0.45728248357772827 + ], + [ + 3.087244749069214, + -0.5418731570243835 + ], + [ + 3.0960679054260254, + -0.6458765864372253 + ], + [ + 3.1004350185394287, + -0.7467633485794067 + ], + [ + 3.103656768798828, + -0.8473579287528992 + ], + [ + 3.083415985107422, + -0.948530375957489 + ], + [ + 3.0816450119018555, + -1.0542892217636108 + ], + [ + 3.085540533065796, + -1.1559743881225586 + ], + [ + 3.0867080688476562, + -1.264012098312378 + ], + [ + 3.0863823890686035, + -1.3732608556747437 + ], + [ + 3.0104291439056396, + -1.4691309928894043 + ], + [ + 2.9835236072540283, + -1.5644780397415161 + ], + [ + 2.9637668132781982, + -1.6834464073181152 + ], + [ + 2.921919107437134, + -1.7772095203399658 + ], + [ + 2.883415460586548, + -1.8883017301559448 + ], + [ + 2.839106559753418, + -1.9926586151123047 + ], + [ + 2.7994556427001953, + -2.1168372631073 + ], + [ + 2.739821672439575, + -2.2150394916534424 + ], + [ + 2.670450448989868, + -2.3428125381469727 + ], + [ + 2.624347448348999, + -2.4415619373321533 + ], + [ + 2.5409440994262695, + -2.5669381618499756 + ], + [ + 2.447296142578125, + -2.6467409133911133 + ], + [ + 2.344093084335327, + -2.7767810821533203 + ], + [ + 2.2608399391174316, + -2.8609535694122314 + ], + [ + 2.163165807723999, + -2.9233157634735107 + ], + [ + 2.097046375274658, + -3.0158705711364746 + ], + [ + 1.97257661819458, + -3.1243748664855957 + ], + [ + 1.846123456954956, + -3.2403388023376465 + ], + [ + 1.7235485315322876, + -3.2822885513305664 + ], + [ + 1.6022957563400269, + -3.373460292816162 + ], + [ + 1.480346918106079, + -3.4550833702087402 + ], + [ + 1.327256441116333, + -3.507237434387207 + ], + [ + 1.1469225883483887, + -3.5654423236846924 + ], + [ + 0.9656786322593689, + -3.565605401992798 + ], + [ + 0.7936630249023438, + -3.6408016681671143 + ], + [ + 0.6013606190681458, + -3.6205270290374756 + ], + [ + 0.38317179679870605, + -3.641388177871704 + ], + [ + 0.42081883549690247, + -3.680149555206299 + ], + [ + 0.2960982620716095, + -3.7941951751708984 + ], + [ + 0.16363447904586792, + -3.851482629776001 + ], + [ + 0.016586100682616234, + -3.8719606399536133 + ], + [ + -0.17768867313861847, + -3.9224138259887695 + ], + [ + -0.3070555031299591, + -3.9718053340911865 + ], + [ + -0.4421673119068146, + -4.025603771209717 + ], + [ + -0.6372238397598267, + -3.9522628784179688 + ], + [ + -0.800797700881958, + -3.940406322479248 + ], + [ + -1.010321855545044, + -3.8857979774475098 + ], + [ + -1.1793673038482666, + -3.824997901916504 + ], + [ + -1.3402009010314941, + -3.745770215988159 + ], + [ + -1.5571541786193848, + -3.6375067234039307 + ], + [ + -3.2587201595306396, + -7.0783467292785645 + ], + [ + -3.217923879623413, + -7.506102561950684 + ], + [ + -3.586113452911377, + -7.5273942947387695 + ], + [ + -3.8986096382141113, + -7.558767318725586 + ], + [ + -4.2148613929748535, + -7.4695658683776855 + ], + [ + -4.4913859367370605, + -7.475625514984131 + ], + [ + -4.818096160888672, + -7.343639373779297 + ], + [ + -5.120263576507568, + -7.19155740737915 + ], + [ + -5.465209484100342, + -7.054903030395508 + ], + [ + -5.744510173797607, + -6.830625534057617 + ], + [ + -6.011559009552002, + -6.622929096221924 + ], + [ + -6.307190895080566, + -6.334005355834961 + ], + [ + -6.474546432495117, + -6.047586441040039 + ], + [ + -6.6832170486450195, + -5.67002534866333 + ], + [ + -6.871180534362793, + -5.330004692077637 + ], + [ + -7.2260894775390625, + -5.75900411605835 + ], + [ + -7.5362629890441895, + -5.58389139175415 + ], + [ + -7.778262138366699, + -5.385204315185547 + ], + [ + -8.0059814453125, + -5.179511070251465 + ], + [ + -8.189661979675293, + -4.907506465911865 + ], + [ + -8.389363288879395, + -4.582245826721191 + ], + [ + -8.529106140136719, + -4.3390889167785645 + ], + [ + -8.70797061920166, + -4.0870490074157715 + ], + [ + -8.817471504211426, + -3.7913756370544434 + ], + [ + -8.929003715515137, + -3.496785879135132 + ], + [ + -9.052221298217773, + -3.2037224769592285 + ], + [ + -9.147464752197266, + -2.946242570877075 + ], + [ + -9.210366249084473, + -2.6706254482269287 + ], + [ + -9.232288360595703, + -2.371818780899048 + ], + [ + -9.248930931091309, + -2.0634751319885254 + ], + [ + -9.21683120727539, + -1.7474071979522705 + ], + [ + -9.589516639709473, + -1.5317386388778687 + ], + [ + -9.601168632507324, + -1.2711156606674194 + ], + [ + -9.64538288116455, + -0.9829033613204956 + ], + [ + -9.6473388671875, + -0.7275633215904236 + ], + [ + -9.669573783874512, + -0.45115435123443604 + ], + [ + -9.668879508972168, + -0.20274199545383453 + ], + [ + -9.678165435791016, + 0.0385093055665493 + ], + [ + -9.687119483947754, + 0.2958582937717438 + ], + [ + -9.67812728881836, + 0.558168351650238 + ], + [ + -9.652984619140625, + 0.7992923855781555 + ], + [ + -9.586408615112305, + 1.03945791721344 + ], + [ + -9.588035583496094, + 1.2987393140792847 + ], + [ + -9.5113525390625, + 1.5567079782485962 + ], + [ + -9.508760452270508, + 1.7755874395370483 + ], + [ + -9.447062492370605, + 2.0408477783203125 + ] + ], + "total_points": 1000 +} \ No newline at end of file diff --git a/vna_system/web_ui/static/css/layout.css b/vna_system/web_ui/static/css/layout.css index 8ede981..fe90a0b 100644 --- a/vna_system/web_ui/static/css/layout.css +++ b/vna_system/web_ui/static/css/layout.css @@ -38,6 +38,7 @@ body { display: flex; align-items: center; gap: var(--space-3); + flex-wrap: wrap; } .header__icon { @@ -52,12 +53,57 @@ body { color: var(--text-primary); } -.header__subtitle { - font-size: var(--font-size-sm); - color: var(--text-tertiary); - padding: var(--space-1) var(--space-2); +.header__summary { + display: flex; + align-items: center; + gap: var(--space-3); + padding: var(--space-2) var(--space-4); background-color: var(--bg-tertiary); - border-radius: var(--radius-default); + border: 1px solid var(--border-primary); + border-radius: var(--radius-lg); + box-shadow: var(--shadow-sm); +} + +.header-summary__item { + display: flex; + flex-direction: column; + gap: var(--space-1); +} + +.header-summary__label { + font-size: var(--font-size-xs); + color: var(--text-tertiary); + text-transform: uppercase; + letter-spacing: 0.05em; +} + +.header-summary__value { + font-size: var(--font-size-sm); + color: var(--text-primary); + font-family: var(--font-mono); +} + +.header-summary__divider { + width: 1px; + height: 32px; + background-color: var(--border-primary); +} + +@media (max-width: 768px) { + .header__summary { + width: 100%; + justify-content: space-between; + flex-wrap: wrap; + row-gap: var(--space-2); + } + + .header-summary__divider { + display: none; + } + + .header-summary__item { + flex: 1 1 45%; + } } .header__status { @@ -374,4 +420,4 @@ body { grid-template-columns: 1fr; gap: var(--space-4); } -} \ No newline at end of file +} diff --git a/vna_system/web_ui/static/css/settings.css b/vna_system/web_ui/static/css/settings.css index 9cad7d4..1a23524 100644 --- a/vna_system/web_ui/static/css/settings.css +++ b/vna_system/web_ui/static/css/settings.css @@ -131,40 +131,43 @@ align-items: stretch; } -.preset-dropdown, -.calibration-dropdown { +:is(.settings-select, .preset-dropdown, .calibration-dropdown, .reference-dropdown) { flex: 1; + min-width: 220px; padding: var(--space-3) var(--space-4); + padding-right: var(--space-10); background: var(--bg-primary); border: 1px solid var(--border-primary); border-radius: var(--radius-lg); color: var(--text-primary); font-size: var(--font-size-sm); - min-height: 3rem; font-weight: var(--font-weight-medium); transition: all var(--transition-fast); box-shadow: var(--shadow-sm); + appearance: none; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' stroke-width='1.5' stroke='%2394a3b8' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-position: right var(--space-4) center; + background-size: 14px 14px; } -.preset-dropdown:focus, -.calibration-dropdown:focus { +:is(.settings-select, .preset-dropdown, .calibration-dropdown, .reference-dropdown):focus { outline: none; border-color: var(--color-primary-500); box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); background: var(--bg-surface); } -.preset-dropdown:hover, -.calibration-dropdown:hover { +:is(.settings-select, .preset-dropdown, .calibration-dropdown, .reference-dropdown):hover:not(:disabled) { border-color: var(--color-primary-500); transform: translateY(-1px); box-shadow: var(--shadow-md); } -.preset-dropdown:disabled, -.calibration-dropdown:disabled { +:is(.settings-select, .preset-dropdown, .calibration-dropdown, .reference-dropdown):disabled { opacity: 0.6; cursor: not-allowed; + transform: none; } .preset-info { @@ -301,14 +304,18 @@ } /* Calibration Actions */ -.calibration-actions { +:is(.settings-action-group, .calibration-actions, .reference-actions) { display: flex; gap: var(--space-3); align-items: stretch; + flex-wrap: wrap; +} + +.calibration-actions { margin-top: var(--space-4); } -.calibration-name-input { +:is(.settings-input, .calibration-name-input, .reference-name-input, .reference-description-input) { flex: 1; padding: var(--space-3) var(--space-4); background: var(--bg-primary); @@ -316,30 +323,33 @@ border-radius: var(--radius-lg); color: var(--text-primary); font-size: var(--font-size-sm); - min-height: 2.5rem; + min-height: 2.75rem; transition: all var(--transition-fast); + box-shadow: var(--shadow-sm); } -.calibration-name-input:focus { +:is(.settings-input, .calibration-name-input, .reference-name-input, .reference-description-input):focus { outline: none; border-color: var(--color-primary-500); box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); } -.calibration-name-input:disabled { +:is(.settings-input, .calibration-name-input, .reference-name-input, .reference-description-input):disabled { opacity: 0.6; cursor: not-allowed; } -.calibration-name-input::placeholder { +:is(.settings-input, .calibration-name-input, .reference-name-input, .reference-description-input)::placeholder { color: var(--text-tertiary); } /* Existing Calibrations */ -.existing-calibrations { +.existing-calibrations, +.existing-references { display: flex; gap: var(--space-3); align-items: stretch; + flex-wrap: wrap; } /* Status Grid */ @@ -390,7 +400,8 @@ flex-direction: column; } - .existing-calibrations { + .existing-calibrations, + .existing-references { flex-direction: column; } @@ -503,53 +514,8 @@ margin-bottom: var(--space-4); } -.reference-name-input, -.reference-description-input { - padding: var(--space-2) var(--space-3); - border: 1px solid var(--color-border); - border-radius: var(--radius-md); - font-size: var(--text-sm); - background: var(--color-bg); - color: var(--color-text); - transition: all 0.2s ease; -} - -.reference-name-input:focus, -.reference-description-input:focus { - outline: none; - border-color: var(--color-primary-500); - box-shadow: 0 0 0 3px var(--color-primary-100); -} - -.reference-name-input::placeholder, -.reference-description-input::placeholder { - color: var(--color-text-secondary); -} - -/* Reference Actions */ .reference-actions { - display: flex; - gap: var(--space-3); - align-items: stretch; margin-top: var(--space-3); - flex-wrap: wrap; -} - -.reference-dropdown { - flex: 1; - min-width: 200px; - padding: var(--space-2) var(--space-3); - border: 1px solid var(--color-border); - border-radius: var(--radius-md); - font-size: var(--text-sm); - background: var(--color-bg); - color: var(--color-text); -} - -.reference-dropdown:disabled { - opacity: 0.6; - cursor: not-allowed; - background: var(--color-gray-50); } /* Current Reference Info */ @@ -623,4 +589,4 @@ .reference-dropdown { min-width: unset; } -} \ No newline at end of file +} diff --git a/vna_system/web_ui/static/js/modules/settings.js b/vna_system/web_ui/static/js/modules/settings.js index e5c0218..31cbcf1 100644 --- a/vna_system/web_ui/static/js/modules/settings.js +++ b/vna_system/web_ui/static/js/modules/settings.js @@ -26,6 +26,7 @@ export class SettingsManager { this.isInitialized = false; this.elements = {}; + this.headerElements = {}; this.debouncer = new Debouncer(); // Sub-managers @@ -99,6 +100,12 @@ export class SettingsManager { calibrationCount: document.getElementById('calibrationCount'), systemStatus: document.getElementById('systemStatus') }; + + this.headerElements = { + preset: document.getElementById('headerPresetSummary'), + calibration: document.getElementById('headerCalibrationSummary'), + reference: document.getElementById('headerReferenceSummary') + }; } initSubManagers() { @@ -109,10 +116,9 @@ export class SettingsManager { // Setup callbacks this.presetManager.onPresetChanged = async () => { await this.loadStatus(); - const preset = this.presetManager.getCurrentPreset(); - this.calibrationManager.setCurrentPreset(preset); this.calibrationManager.reset(); - this.referenceManager.setCurrentPreset(preset); + await this.calibrationManager.loadWorkingCalibration(); + this.updateReferenceSummary(this.referenceManager.getCurrentReference()); }; this.calibrationManager.onCalibrationSaved = async () => { @@ -122,6 +128,10 @@ export class SettingsManager { this.calibrationManager.onCalibrationSet = async () => { await this.loadStatus(); }; + + this.referenceManager.onReferenceUpdated = (reference) => { + this.updateReferenceSummary(reference); + }; } setupEventHandlers() { @@ -130,12 +140,9 @@ export class SettingsManager { } async loadInitialData() { - await Promise.all([ - this.presetManager.loadPresets(), - this.loadStatus(), - this.calibrationManager.loadWorkingCalibration(), - this.referenceManager.loadReferences() - ]); + await this.presetManager.loadPresets(); + await this.loadStatus(); + await this.calibrationManager.loadWorkingCalibration(); } async loadStatus() { @@ -158,6 +165,9 @@ export class SettingsManager { this.elements.presetCount.textContent = status.available_presets || 0; this.elements.calibrationCount.textContent = status.available_calibrations || 0; this.elements.systemStatus.textContent = 'Ready'; + + this.updateHeaderSummary(status); + this.updateReferenceSummary(this.referenceManager.getCurrentReference()); } async handleViewPlots() { @@ -475,6 +485,108 @@ export class SettingsManager { console.log('Settings Manager destroyed'); } + formatFrequency(value) { + if (value === null || value === undefined) return null; + const numeric = Number(value); + if (!Number.isFinite(numeric)) return null; + const abs = Math.abs(numeric); + const units = [ + { divider: 1e9, suffix: 'GHz' }, + { divider: 1e6, suffix: 'MHz' }, + { divider: 1e3, suffix: 'kHz' } + ]; + + for (const unit of units) { + if (abs >= unit.divider) { + const scaled = numeric / unit.divider; + const formatted = scaled >= 10 ? scaled.toFixed(0) : scaled.toFixed(2); + return `${formatted} ${unit.suffix}`; + } + } + + return `${numeric.toFixed(0)} Hz`; + } + + formatPresetSummary(preset) { + if (!preset) return 'Not selected'; + + const parts = []; + if (preset.mode) { + parts.push(preset.mode.toUpperCase()); + } + + const start = this.formatFrequency(preset.start_freq); + const stop = this.formatFrequency(preset.stop_freq); + if (start && stop) { + parts.push(`${start} – ${stop}`); + } else if (start || stop) { + parts.push(start || stop); + } + + if (preset.points) { + parts.push(`${preset.points} pts`); + } + + if (preset.bandwidth) { + const bw = this.formatFrequency(preset.bandwidth); + if (bw) parts.push(`BW ${bw}`); + } + + return parts.join(' • ') || 'Preset configured'; + } + + formatCalibrationSummary(status) { + const active = status?.current_calibration; + if (active?.calibration_name) { + return `Active • ${active.calibration_name}`; + } + + const working = status?.working_calibration; + if (working?.progress) { + const missingCount = working.missing_standards?.length || 0; + const missingText = missingCount ? ` • ${missingCount} missing` : ''; + return `In progress • ${working.progress}${missingText}`; + } + + return 'Not set'; + } + + updateHeaderSummary(status) { + if (!this.headerElements) return; + const { preset, calibration } = this.headerElements; + if (preset) { + preset.textContent = this.formatPresetSummary(status?.current_preset); + } + if (calibration) { + calibration.textContent = this.formatCalibrationSummary(status); + } + } + + updateReferenceSummary(reference) { + const target = this.headerElements?.reference; + if (!target) return; + + if (!reference) { + target.textContent = 'Not captured'; + return; + } + + const name = reference.name || 'Reference'; + let timestampText = ''; + if (reference.timestamp) { + const timestamp = new Date(reference.timestamp); + if (!Number.isNaN(timestamp.getTime())) { + timestampText = timestamp.toLocaleString(undefined, { dateStyle: 'short', timeStyle: 'short' }); + } + } + + const summaryParts = ['Active', name]; + if (timestampText) { + summaryParts.push(timestampText); + } + target.textContent = summaryParts.join(' • '); + } + notify(type, title, message) { this.notifications?.show?.({ type, title, message }); } diff --git a/vna_system/web_ui/static/js/modules/settings/preset-manager.js b/vna_system/web_ui/static/js/modules/settings/preset-manager.js index 5646888..aafdd9b 100644 --- a/vna_system/web_ui/static/js/modules/settings/preset-manager.js +++ b/vna_system/web_ui/static/js/modules/settings/preset-manager.js @@ -5,7 +5,9 @@ import { Debouncer, RequestGuard, ButtonState } from '../utils.js'; import { apiGet, apiPost } from '../api-client.js'; -import { API, TIMING } from '../constants.js'; +import { API, TIMING, NOTIFICATION_TYPES } from '../constants.js'; + +const { SUCCESS, ERROR } = NOTIFICATION_TYPES; export class PresetManager { constructor(notifications) { @@ -36,7 +38,7 @@ export class PresetManager { this.populateDropdown(presets); } catch (e) { console.error('Presets load failed:', e); - this.notify('error', 'Load Error', 'Failed to load configuration presets'); + this.notify(ERROR, 'Load Error', 'Failed to load configuration presets'); } } @@ -47,7 +49,9 @@ export class PresetManager { if (!presets.length) { dd.innerHTML = ''; dd.disabled = true; - this.elements.setPresetBtn.disabled = true; + if (this.elements.setPresetBtn) { + this.elements.setPresetBtn.disabled = true; + } return; } @@ -60,7 +64,7 @@ export class PresetManager { }); dd.disabled = false; - this.elements.setPresetBtn.disabled = true; + this.syncSelectedPreset(); } formatDisplay(p) { @@ -75,8 +79,7 @@ export class PresetManager { } handlePresetChange() { - const v = this.elements.presetDropdown.value; - this.elements.setPresetBtn.disabled = !v; + this.updateSetButtonState(); } async handleSetPreset() { @@ -90,17 +93,19 @@ export class PresetManager { const result = await apiPost(API.SETTINGS.PRESET_SET, { filename }); - this.notify('success', 'Preset Set', result.message); + this.notify(SUCCESS, 'Preset Set', result.message); this.currentPreset = { filename }; if (this.onPresetChanged) { await this.onPresetChanged(); } + this.syncSelectedPreset(); } catch (e) { console.error('Set preset failed:', e); - this.notify('error', 'Preset Error', 'Failed to set configuration preset'); + this.notify(ERROR, 'Preset Error', 'Failed to set configuration preset'); } finally { ButtonState.set(this.elements.setPresetBtn, { state: 'normal', icon: 'check', text: 'Set Active' }); + this.updateSetButtonState(); } }), TIMING.DEBOUNCE_PRESET ); @@ -114,13 +119,40 @@ export class PresetManager { this.currentPreset = null; this.elements.currentPreset.textContent = 'None'; } + this.syncSelectedPreset(); } getCurrentPreset() { return this.currentPreset; } + syncSelectedPreset() { + const dd = this.elements.presetDropdown; + if (!dd) return; + + const active = this.currentPreset?.filename || ''; + if (active) { + const hasOption = Array.from(dd.options).some(opt => opt.value === active); + dd.value = hasOption ? active : ''; + } else { + dd.value = ''; + } + + this.updateSetButtonState(); + } + + updateSetButtonState() { + const dd = this.elements.presetDropdown; + const btn = this.elements.setPresetBtn; + if (!dd || !btn) return; + + const selected = dd.value; + const hasSelection = selected !== ''; + const isActive = this.currentPreset?.filename === selected; + btn.disabled = !hasSelection || isActive; + } + notify(type, title, message) { this.notifications?.show?.({ type, title, message }); } -} \ No newline at end of file +} diff --git a/vna_system/web_ui/static/js/modules/settings/reference-manager.js b/vna_system/web_ui/static/js/modules/settings/reference-manager.js index 14c9aba..975684e 100644 --- a/vna_system/web_ui/static/js/modules/settings/reference-manager.js +++ b/vna_system/web_ui/static/js/modules/settings/reference-manager.js @@ -18,6 +18,7 @@ export class ReferenceManager { this.elements = {}; this.debouncer = new Debouncer(); this.reqGuard = new RequestGuard(); + this.onReferenceUpdated = null; this.handleCreateReference = this.handleCreateReference.bind(this); this.handleReferenceChange = this.handleReferenceChange.bind(this); @@ -79,6 +80,10 @@ export class ReferenceManager { } } + getCurrentReference() { + return this.currentReference; + } + renderDropdown(references) { if (!this.elements.referenceDropdown) return; @@ -120,10 +125,16 @@ export class ReferenceManager { } updateInfo(reference) { - if (!this.elements.currentReferenceInfo) return; + this.currentReference = reference; + + if (!this.elements.currentReferenceInfo) { + this.onReferenceUpdated?.(reference || null); + return; + } if (!reference) { this.elements.currentReferenceInfo.style.display = 'none'; + this.onReferenceUpdated?.(null); return; } @@ -134,12 +145,17 @@ export class ReferenceManager { } if (this.elements.currentReferenceTimestamp) { - this.elements.currentReferenceTimestamp.textContent = new Date(reference.timestamp).toLocaleString(); + const timestamp = new Date(reference.timestamp); + this.elements.currentReferenceTimestamp.textContent = Number.isNaN(timestamp.getTime()) + ? '-' + : timestamp.toLocaleString(); } if (this.elements.currentReferenceDescription) { this.elements.currentReferenceDescription.textContent = reference.description || ''; } + + this.onReferenceUpdated?.(reference); } async handleCreateReference() { diff --git a/vna_system/web_ui/templates/index.html b/vna_system/web_ui/templates/index.html index 400c6cd..4f8a3ad 100644 --- a/vna_system/web_ui/templates/index.html +++ b/vna_system/web_ui/templates/index.html @@ -41,7 +41,22 @@

VNA System

- Real-time Analysis +
+
+ Preset + Not selected +
+ +
+ Calibration + Not set +
+ +
+ Reference + Not captured +
+
@@ -149,7 +164,7 @@
-
-
+
- +