diff --git a/ruff.toml b/ruff.toml new file mode 100644 index 0000000..07efc9e --- /dev/null +++ b/ruff.toml @@ -0,0 +1,19 @@ +target-version = "py311" +line-length = 120 + +[lint] +# F: pyflakes (unused imports/variables, undefined names) +# E7/E9: comparison and runtime-error prone constructs +# B: bugbear (mutable defaults, useless expressions) +select = ["F", "E7", "E9", "B"] +ignore = [ + "E731", # lambda assignment — used deliberately for short Qt slot glue + "E741", # ambiguous single-letter names — used in math-heavy geometry code +] + +[lint.per-file-ignores] +# Wildcard re-exports are part of this package's (legacy) public surface +# until Phase 1 empties it. +"hardware/__init__.py" = ["F401", "F403"] +"hardware/pybbd202/__init__.py" = ["F401", "F403"] +"scanning/__init__.py" = ["F401", "F403"] diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..f069bd7 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,41 @@ +"""Shared test setup: repo-root imports, headless Qt, pyueye stub. + +The IDS uEye SDK (pyueye + libueye) only exists on the Linux rig. On any +other machine we stub the module before hardware.uc480_camera is imported; +everything in uc480_camera references `ueye.*` at call time, not import +time, so an attribute-permissive dummy is sufficient for constructing +windows and importing modules. +""" +import os +import sys +import types +from pathlib import Path + +ROOT = Path(__file__).resolve().parent.parent +if str(ROOT) not in sys.path: + sys.path.insert(0, str(ROOT)) + +os.environ.setdefault("QT_QPA_PLATFORM", "offscreen") + +try: + import pyueye # noqa: F401 +except ImportError: + class _UeyeStub: + """Permissive attribute sink standing in for pyueye.ueye.""" + IS_SUCCESS = 0 + + def __getattr__(self, name): + return _UeyeStub() + + def __call__(self, *args, **kwargs): + return _UeyeStub() + + def __or__(self, other): + return 0 + + def __ror__(self, other): + return 0 + + _pyueye = types.ModuleType("pyueye") + _pyueye.ueye = _UeyeStub() + sys.modules["pyueye"] = _pyueye diff --git a/tests/gen_goldens.py b/tests/gen_goldens.py new file mode 100644 index 0000000..dd81749 --- /dev/null +++ b/tests/gen_goldens.py @@ -0,0 +1,173 @@ +"""Generate golden fixtures capturing PRE-REFACTOR behavior (Phase 0). + +Run once against the un-refactored sc3_aui_app.py; the outputs are committed +under tests/golden/. After the refactor, tests compare the new +implementations against these committed files — do NOT regenerate them +against refactored code, that would defeat the purpose. + +Usage: .venv/bin/python tests/gen_goldens.py +""" +import json +import shutil +import sys +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) +import conftest # noqa: F401 (pyueye stub + offscreen) + +import sc3_aui_app as app + +GOLDEN = Path(__file__).parent / "golden" + +# ── Geometry fixtures ──────────────────────────────────────────────────────── + +GEOMETRY_CASES = [ + # label, XS, YS, XD, YD, num_angles, row_spacing + ("single_angle_square", "10.0", "10.0", "10.0", "10.0", "1", "0.25"), + ("single_angle_rect", "10.0", "10.0", "80.0", "50.0", "1", "0.25"), + ("three_angles", "5.0", "5.0", "20.0", "12.0", "3", "0.1"), + ("five_angles", "0.0", "0.0", "30.0", "30.0", "5", "0.5"), + ("seven_angles_asym", "12.5", "7.5", "42.0", "17.0", "7", "0.05"), + ("two_angles_tiny", "1.0", "1.0", "0.02", "0.02", "2", "0.01"), + ("flat_line_ydelta_zero", "10.0", "10.0", "5.0", "0.0", "1", "0.25"), + ("fine_spacing", "3.0", "4.0", "2.5", "1.5", "4", "0.025"), +] + +GEOMETRY_ERROR_CASES = [ + ("xd_zero", "10.0", "10.0", "0.0", "10.0", "1", "0.25"), + ("xd_negative", "10.0", "10.0", "-5.0", "10.0", "1", "0.25"), + ("spacing_zero", "10.0", "10.0", "10.0", "10.0", "1", "0.0"), + ("angles_zero", "10.0", "10.0", "10.0", "10.0", "0", "0.25"), + ("xs_not_number", "abc", "10.0", "10.0", "10.0", "1", "0.25"), +] + + +class _W: + """Stands in for a QLineEdit: _build_scan_params only calls .text().""" + def __init__(self, text): + self._text = text + + def text(self): + return self._text + + +def _fake_window(xs, ys, xd, yd, na, rs): + fs = type("FakeMainWindow", (), {})() + fs.x_start_edit = _W(xs) + fs.y_start_edit = _W(ys) + fs.x_delta_edit = _W(xd) + fs.y_delta_edit = _W(yd) + fs.num_angles_edit = _W(na) + fs.row_spacing_edit = _W(rs) + fs.scan_prefix_edit = _W("golden") + fs.scan_save_dir_edit = _W("/tmp/golden-scans") + return fs + + +def build_geometry_fixtures(): + out = {"constants": { + "LASER_FREQ_HZ": app.LASER_FREQ_HZ, + "SCAN_VELOCITY_MM_S": app.SCAN_VELOCITY_MM_S, + "GR_ROTATION_SIGN": app.GR_ROTATION_SIGN, + }, "cases": {}, "error_cases": {}} + + for label, *inputs in GEOMETRY_CASES: + params = app.MainWindow._build_scan_params(_fake_window(*inputs)) + out["cases"][label] = { + "inputs": dict(zip(("XS", "YS", "XD", "YD", "num_angles", "row_spacing"), inputs)), + "params": params, + } + + for label, *inputs in GEOMETRY_ERROR_CASES: + try: + app.MainWindow._build_scan_params(_fake_window(*inputs)) + raise AssertionError(f"error case {label} did not raise") + except ValueError as e: + out["error_cases"][label] = { + "inputs": dict(zip(("XS", "YS", "XD", "YD", "num_angles", "row_spacing"), inputs)), + "message": str(e), + } + + with open(GOLDEN / "geometry.json", "w") as f: + json.dump(out, f, indent=2) + print(f"geometry.json: {len(out['cases'])} cases, {len(out['error_cases'])} error cases") + + +# ── SRAS v6 file fixtures ──────────────────────────────────────────────────── + +SPF = 8 # samples per frame (synthetic, tiny) +SAMPLE_RATE = 6.25e9 +PREAMBLES = [f"WFMOUTPRE:CH{ch};SYNTHETIC;PT_FMT Y;XINCR 1.6E-10" for ch in app.SCAN_CHANNELS] +BACKGROUND = bytes(range(SPF)) + + +def _synthetic_frame(ai, ri, ci, fi): + return bytes((ai * 7 + ri * 5 + ci * 3 + fi + s) % 256 for s in range(SPF)) + + +def build_sras_fixtures(): + # Geometry via the real pre-refactor code path: 2 angles, 3 rows, 4 frames. + params = app.MainWindow._build_scan_params( + _fake_window("1.0", "1.0", "0.02", "0.02", "2", "0.01")) + per_angle = params["per_angle"] + angles = [pa["angle"] for pa in per_angle] + + complete = GOLDEN / "complete.sras" + f = app._open_scan_file( + complete, angles, per_angle, + params["x_start_nominal"], params["y_start_nominal"], + params["x_delta_nominal"], params["y_delta_nominal"], + params["row_spacing"], + app.SCAN_VELOCITY_MM_S, app.LASER_FREQ_HZ, + SPF, SAMPLE_RATE, PREAMBLES, BACKGROUND, + ) + try: + data_start = f.tell() + for ai, pa in enumerate(per_angle): + for ri in range(pa["n_rows"]): + for ci in range(len(app.SCAN_CHANNELS)): + for fi in range(pa["n_frames"]): + f.write(_synthetic_frame(ai, ri, ci, fi)) + finally: + f.close() + + info = app._read_sras_header(complete) + assert info["data_start_offset"] == data_start + row_bytes = info["n_channels"] * per_angle[0]["n_frames"] * SPF * info["bytes_per_sample"] + angle_bytes = [row_bytes * pa["n_rows"] for pa in per_angle] + + def _truncate(name, size): + dst = GOLDEN / name + shutil.copyfile(complete, dst) + with open(dst, "r+b") as g: + g.truncate(data_start + size) + return dst + + variants = { + "complete.sras": complete, + "trunc_midrow_a1.sras": _truncate( + "trunc_midrow_a1.sras", angle_bytes[0] + row_bytes + row_bytes // 2), + "trunc_rowboundary_a1.sras": _truncate( + "trunc_rowboundary_a1.sras", angle_bytes[0] + 2 * row_bytes), + "trunc_angleboundary.sras": _truncate( + "trunc_angleboundary.sras", angle_bytes[0]), + "trunc_midrow_a0.sras": _truncate( + "trunc_midrow_a0.sras", row_bytes + row_bytes // 2), + "header_only.sras": _truncate("header_only.sras", 0), + } + + expected = {"header": info, "statuses": {}} + for name, path in variants.items(): + expected["statuses"][name] = app._compute_angle_status(path, info) + + with open(GOLDEN / "sras_expected.json", "w") as f_json: + json.dump(expected, f_json, indent=2) + print(f"sras fixtures: {len(variants)} files, " + f"data block {sum(angle_bytes)} bytes, row_bytes={row_bytes}") + + +if __name__ == "__main__": + GOLDEN.mkdir(exist_ok=True) + build_geometry_fixtures() + build_sras_fixtures() + print("done") diff --git a/tests/golden/complete.sras b/tests/golden/complete.sras new file mode 100644 index 0000000..7e7e26a Binary files /dev/null and b/tests/golden/complete.sras differ diff --git a/tests/golden/geometry.json b/tests/golden/geometry.json new file mode 100644 index 0000000..96367e1 --- /dev/null +++ b/tests/golden/geometry.json @@ -0,0 +1,6620 @@ +{ + "constants": { + "LASER_FREQ_HZ": 20000.0, + "SCAN_VELOCITY_MM_S": 100.0, + "GR_ROTATION_SIGN": -1 + }, + "cases": { + "single_angle_square": { + "inputs": { + "XS": "10.0", + "YS": "10.0", + "XD": "10.0", + "YD": "10.0", + "num_angles": "1", + "row_spacing": "0.25" + }, + "params": { + "x_start_nominal": 10.0, + "y_start_nominal": 10.0, + "x_delta_nominal": 10.0, + "y_delta_nominal": 10.0, + "num_angles": 1, + "row_spacing": 0.25, + "laser_freq": 20000.0, + "prefix": "golden", + "save_dir": "/tmp/golden-scans", + "per_angle": [ + { + "angle": 0.0, + "x_start": 10.0, + "x_delta": 10.0, + "n_frames": 2000, + "n_rows": 41, + "y_positions": [ + 10.0, + 10.25, + 10.5, + 10.75, + 11.0, + 11.25, + 11.5, + 11.75, + 12.0, + 12.25, + 12.5, + 12.75, + 13.0, + 13.25, + 13.5, + 13.75, + 14.0, + 14.25, + 14.5, + 14.75, + 15.0, + 15.25, + 15.5, + 15.75, + 16.0, + 16.25, + 16.5, + 16.75, + 17.0, + 17.25, + 17.5, + 17.75, + 18.0, + 18.25, + 18.5, + 18.75, + 19.0, + 19.25, + 19.5, + 19.75, + 20.0 + ] + } + ] + } + }, + "single_angle_rect": { + "inputs": { + "XS": "10.0", + "YS": "10.0", + "XD": "80.0", + "YD": "50.0", + "num_angles": "1", + "row_spacing": "0.25" + }, + "params": { + "x_start_nominal": 10.0, + "y_start_nominal": 10.0, + "x_delta_nominal": 80.0, + "y_delta_nominal": 50.0, + "num_angles": 1, + "row_spacing": 0.25, + "laser_freq": 20000.0, + "prefix": "golden", + "save_dir": "/tmp/golden-scans", + "per_angle": [ + { + "angle": 0.0, + "x_start": 10.0, + "x_delta": 80.0, + "n_frames": 16000, + "n_rows": 201, + "y_positions": [ + 10.0, + 10.25, + 10.5, + 10.75, + 11.0, + 11.25, + 11.5, + 11.75, + 12.0, + 12.25, + 12.5, + 12.75, + 13.0, + 13.25, + 13.5, + 13.75, + 14.0, + 14.25, + 14.5, + 14.75, + 15.0, + 15.25, + 15.5, + 15.75, + 16.0, + 16.25, + 16.5, + 16.75, + 17.0, + 17.25, + 17.5, + 17.75, + 18.0, + 18.25, + 18.5, + 18.75, + 19.0, + 19.25, + 19.5, + 19.75, + 20.0, + 20.25, + 20.5, + 20.75, + 21.0, + 21.25, + 21.5, + 21.75, + 22.0, + 22.25, + 22.5, + 22.75, + 23.0, + 23.25, + 23.5, + 23.75, + 24.0, + 24.25, + 24.5, + 24.75, + 25.0, + 25.25, + 25.5, + 25.75, + 26.0, + 26.25, + 26.5, + 26.75, + 27.0, + 27.25, + 27.5, + 27.75, + 28.0, + 28.25, + 28.5, + 28.75, + 29.0, + 29.25, + 29.5, + 29.75, + 30.0, + 30.25, + 30.5, + 30.75, + 31.0, + 31.25, + 31.5, + 31.75, + 32.0, + 32.25, + 32.5, + 32.75, + 33.0, + 33.25, + 33.5, + 33.75, + 34.0, + 34.25, + 34.5, + 34.75, + 35.0, + 35.25, + 35.5, + 35.75, + 36.0, + 36.25, + 36.5, + 36.75, + 37.0, + 37.25, + 37.5, + 37.75, + 38.0, + 38.25, + 38.5, + 38.75, + 39.0, + 39.25, + 39.5, + 39.75, + 40.0, + 40.25, + 40.5, + 40.75, + 41.0, + 41.25, + 41.5, + 41.75, + 42.0, + 42.25, + 42.5, + 42.75, + 43.0, + 43.25, + 43.5, + 43.75, + 44.0, + 44.25, + 44.5, + 44.75, + 45.0, + 45.25, + 45.5, + 45.75, + 46.0, + 46.25, + 46.5, + 46.75, + 47.0, + 47.25, + 47.5, + 47.75, + 48.0, + 48.25, + 48.5, + 48.75, + 49.0, + 49.25, + 49.5, + 49.75, + 50.0, + 50.25, + 50.5, + 50.75, + 51.0, + 51.25, + 51.5, + 51.75, + 52.0, + 52.25, + 52.5, + 52.75, + 53.0, + 53.25, + 53.5, + 53.75, + 54.0, + 54.25, + 54.5, + 54.75, + 55.0, + 55.25, + 55.5, + 55.75, + 56.0, + 56.25, + 56.5, + 56.75, + 57.0, + 57.25, + 57.5, + 57.75, + 58.0, + 58.25, + 58.5, + 58.75, + 59.0, + 59.25, + 59.5, + 59.75, + 60.0 + ] + } + ] + } + }, + "three_angles": { + "inputs": { + "XS": "5.0", + "YS": "5.0", + "XD": "20.0", + "YD": "12.0", + "num_angles": "3", + "row_spacing": "0.1" + }, + "params": { + "x_start_nominal": 5.0, + "y_start_nominal": 5.0, + "x_delta_nominal": 20.0, + "y_delta_nominal": 12.0, + "num_angles": 3, + "row_spacing": 0.1, + "laser_freq": 20000.0, + "prefix": "golden", + "save_dir": "/tmp/golden-scans", + "per_angle": [ + { + "angle": 0.0, + "x_start": 5.0, + "x_delta": 20.0, + "n_frames": 4000, + "n_rows": 121, + "y_positions": [ + 5.0, + 5.1, + 5.2, + 5.3, + 5.4, + 5.5, + 5.6, + 5.7, + 5.8, + 5.9, + 6.0, + 6.1, + 6.2, + 6.3, + 6.4, + 6.5, + 6.6, + 6.7, + 6.8, + 6.9, + 7.0, + 7.1, + 7.2, + 7.300000000000001, + 7.4, + 7.5, + 7.6, + 7.7, + 7.800000000000001, + 7.9, + 8.0, + 8.1, + 8.2, + 8.3, + 8.4, + 8.5, + 8.6, + 8.7, + 8.8, + 8.9, + 9.0, + 9.100000000000001, + 9.2, + 9.3, + 9.4, + 9.5, + 9.600000000000001, + 9.7, + 9.8, + 9.9, + 10.0, + 10.100000000000001, + 10.2, + 10.3, + 10.4, + 10.5, + 10.600000000000001, + 10.7, + 10.8, + 10.9, + 11.0, + 11.100000000000001, + 11.2, + 11.3, + 11.4, + 11.5, + 11.600000000000001, + 11.7, + 11.8, + 11.9, + 12.0, + 12.100000000000001, + 12.2, + 12.3, + 12.4, + 12.5, + 12.600000000000001, + 12.7, + 12.8, + 12.9, + 13.0, + 13.1, + 13.200000000000001, + 13.3, + 13.4, + 13.5, + 13.6, + 13.700000000000001, + 13.8, + 13.9, + 14.0, + 14.1, + 14.200000000000001, + 14.3, + 14.4, + 14.5, + 14.600000000000001, + 14.700000000000001, + 14.8, + 14.9, + 15.0, + 15.100000000000001, + 15.200000000000001, + 15.3, + 15.4, + 15.5, + 15.600000000000001, + 15.700000000000001, + 15.8, + 15.9, + 16.0, + 16.1, + 16.200000000000003, + 16.3, + 16.4, + 16.5, + 16.6, + 16.700000000000003, + 16.8, + 16.9, + 17.0 + ] + }, + { + "angle": -90.0, + "x_start": 9.0, + "x_delta": 12.000000000000002, + "n_frames": 2400, + "n_rows": 201, + "y_positions": [ + 1.0, + 1.1, + 1.2, + 1.3, + 1.4, + 1.5, + 1.6, + 1.7000000000000002, + 1.8, + 1.9, + 2.0, + 2.1, + 2.2, + 2.3, + 2.4000000000000004, + 2.5, + 2.6, + 2.7, + 2.8, + 2.9000000000000004, + 3.0, + 3.1, + 3.2, + 3.3000000000000003, + 3.4000000000000004, + 3.5, + 3.6, + 3.7, + 3.8000000000000003, + 3.9000000000000004, + 4.0, + 4.1, + 4.2, + 4.300000000000001, + 4.4, + 4.5, + 4.6, + 4.7, + 4.800000000000001, + 4.9, + 5.0, + 5.1000000000000005, + 5.2, + 5.3, + 5.4, + 5.5, + 5.6000000000000005, + 5.7, + 5.800000000000001, + 5.9, + 6.0, + 6.1000000000000005, + 6.2, + 6.300000000000001, + 6.4, + 6.5, + 6.6000000000000005, + 6.7, + 6.800000000000001, + 6.9, + 7.0, + 7.1000000000000005, + 7.2, + 7.300000000000001, + 7.4, + 7.5, + 7.6000000000000005, + 7.7, + 7.800000000000001, + 7.9, + 8.0, + 8.100000000000001, + 8.2, + 8.3, + 8.4, + 8.5, + 8.600000000000001, + 8.7, + 8.8, + 8.9, + 9.0, + 9.1, + 9.200000000000001, + 9.3, + 9.4, + 9.5, + 9.6, + 9.700000000000001, + 9.8, + 9.9, + 10.0, + 10.1, + 10.200000000000001, + 10.3, + 10.4, + 10.5, + 10.600000000000001, + 10.700000000000001, + 10.8, + 10.9, + 11.0, + 11.100000000000001, + 11.200000000000001, + 11.3, + 11.4, + 11.5, + 11.600000000000001, + 11.700000000000001, + 11.8, + 11.9, + 12.0, + 12.100000000000001, + 12.200000000000001, + 12.3, + 12.4, + 12.5, + 12.600000000000001, + 12.700000000000001, + 12.8, + 12.9, + 13.0, + 13.100000000000001, + 13.200000000000001, + 13.3, + 13.4, + 13.5, + 13.600000000000001, + 13.700000000000001, + 13.8, + 13.9, + 14.0, + 14.100000000000001, + 14.200000000000001, + 14.3, + 14.4, + 14.5, + 14.600000000000001, + 14.700000000000001, + 14.8, + 14.9, + 15.0, + 15.100000000000001, + 15.200000000000001, + 15.3, + 15.4, + 15.5, + 15.600000000000001, + 15.700000000000001, + 15.8, + 15.9, + 16.0, + 16.1, + 16.200000000000003, + 16.3, + 16.4, + 16.5, + 16.6, + 16.700000000000003, + 16.8, + 16.9, + 17.0, + 17.1, + 17.2, + 17.3, + 17.400000000000002, + 17.5, + 17.6, + 17.7, + 17.8, + 17.900000000000002, + 18.0, + 18.1, + 18.2, + 18.3, + 18.400000000000002, + 18.5, + 18.6, + 18.7, + 18.8, + 18.900000000000002, + 19.0, + 19.1, + 19.2, + 19.3, + 19.400000000000002, + 19.5, + 19.6, + 19.7, + 19.8, + 19.900000000000002, + 20.0, + 20.1, + 20.200000000000003, + 20.3, + 20.400000000000002, + 20.5, + 20.6, + 20.700000000000003, + 20.8, + 20.900000000000002, + 21.0 + ] + }, + { + "angle": -180.0, + "x_start": 5.0, + "x_delta": 20.0, + "n_frames": 4000, + "n_rows": 121, + "y_positions": [ + 4.999999999999999, + 5.099999999999999, + 5.199999999999999, + 5.299999999999999, + 5.3999999999999995, + 5.499999999999999, + 5.6, + 5.699999999999999, + 5.799999999999999, + 5.8999999999999995, + 5.999999999999999, + 6.1, + 6.199999999999999, + 6.299999999999999, + 6.3999999999999995, + 6.499999999999999, + 6.6, + 6.699999999999999, + 6.799999999999999, + 6.8999999999999995, + 6.999999999999999, + 7.1, + 7.199999999999999, + 7.299999999999999, + 7.3999999999999995, + 7.499999999999999, + 7.6, + 7.699999999999999, + 7.799999999999999, + 7.8999999999999995, + 7.999999999999999, + 8.1, + 8.2, + 8.299999999999999, + 8.399999999999999, + 8.5, + 8.6, + 8.7, + 8.799999999999999, + 8.899999999999999, + 9.0, + 9.1, + 9.2, + 9.299999999999999, + 9.399999999999999, + 9.5, + 9.6, + 9.7, + 9.8, + 9.899999999999999, + 10.0, + 10.1, + 10.2, + 10.3, + 10.399999999999999, + 10.5, + 10.6, + 10.7, + 10.8, + 10.899999999999999, + 11.0, + 11.1, + 11.2, + 11.3, + 11.399999999999999, + 11.5, + 11.6, + 11.7, + 11.8, + 11.899999999999999, + 12.0, + 12.1, + 12.2, + 12.3, + 12.399999999999999, + 12.5, + 12.6, + 12.7, + 12.8, + 12.899999999999999, + 13.0, + 13.099999999999998, + 13.2, + 13.3, + 13.399999999999999, + 13.5, + 13.599999999999998, + 13.7, + 13.8, + 13.899999999999999, + 14.0, + 14.099999999999998, + 14.2, + 14.3, + 14.399999999999999, + 14.5, + 14.600000000000001, + 14.7, + 14.8, + 14.899999999999999, + 15.0, + 15.100000000000001, + 15.2, + 15.3, + 15.399999999999999, + 15.5, + 15.600000000000001, + 15.7, + 15.8, + 15.899999999999999, + 16.0, + 16.1, + 16.2, + 16.3, + 16.4, + 16.5, + 16.6, + 16.7, + 16.8, + 16.9, + 17.0 + ] + } + ] + } + }, + "five_angles": { + "inputs": { + "XS": "0.0", + "YS": "0.0", + "XD": "30.0", + "YD": "30.0", + "num_angles": "5", + "row_spacing": "0.5" + }, + "params": { + "x_start_nominal": 0.0, + "y_start_nominal": 0.0, + "x_delta_nominal": 30.0, + "y_delta_nominal": 30.0, + "num_angles": 5, + "row_spacing": 0.5, + "laser_freq": 20000.0, + "prefix": "golden", + "save_dir": "/tmp/golden-scans", + "per_angle": [ + { + "angle": 0.0, + "x_start": 0.0, + "x_delta": 30.0, + "n_frames": 6000, + "n_rows": 61, + "y_positions": [ + 0.0, + 0.5, + 1.0, + 1.5, + 2.0, + 2.5, + 3.0, + 3.5, + 4.0, + 4.5, + 5.0, + 5.5, + 6.0, + 6.5, + 7.0, + 7.5, + 8.0, + 8.5, + 9.0, + 9.5, + 10.0, + 10.5, + 11.0, + 11.5, + 12.0, + 12.5, + 13.0, + 13.5, + 14.0, + 14.5, + 15.0, + 15.5, + 16.0, + 16.5, + 17.0, + 17.5, + 18.0, + 18.5, + 19.0, + 19.5, + 20.0, + 20.5, + 21.0, + 21.5, + 22.0, + 22.5, + 23.0, + 23.5, + 24.0, + 24.5, + 25.0, + 25.5, + 26.0, + 26.5, + 27.0, + 27.5, + 28.0, + 28.5, + 29.0, + 29.5, + 30.0 + ] + }, + { + "angle": -45.0, + "x_start": -6.2132034355964265, + "x_delta": 42.42640687119285, + "n_frames": 8485, + "n_rows": 86, + "y_positions": [ + -6.2132034355964265, + -5.7132034355964265, + -5.2132034355964265, + -4.7132034355964265, + -4.2132034355964265, + -3.7132034355964265, + -3.2132034355964265, + -2.7132034355964265, + -2.2132034355964265, + -1.7132034355964265, + -1.2132034355964265, + -0.7132034355964265, + -0.21320343559642652, + 0.2867965644035735, + 0.7867965644035735, + 1.2867965644035735, + 1.7867965644035735, + 2.2867965644035735, + 2.7867965644035735, + 3.2867965644035735, + 3.7867965644035735, + 4.2867965644035735, + 4.7867965644035735, + 5.2867965644035735, + 5.7867965644035735, + 6.2867965644035735, + 6.7867965644035735, + 7.2867965644035735, + 7.7867965644035735, + 8.286796564403573, + 8.786796564403573, + 9.286796564403573, + 9.786796564403573, + 10.286796564403573, + 10.786796564403573, + 11.286796564403573, + 11.786796564403573, + 12.286796564403573, + 12.786796564403573, + 13.286796564403573, + 13.786796564403573, + 14.286796564403573, + 14.786796564403573, + 15.286796564403573, + 15.786796564403573, + 16.286796564403573, + 16.786796564403573, + 17.286796564403573, + 17.786796564403573, + 18.286796564403573, + 18.786796564403573, + 19.286796564403573, + 19.786796564403573, + 20.286796564403573, + 20.786796564403573, + 21.286796564403573, + 21.786796564403573, + 22.286796564403573, + 22.786796564403573, + 23.286796564403573, + 23.786796564403573, + 24.286796564403573, + 24.786796564403573, + 25.286796564403573, + 25.786796564403573, + 26.286796564403573, + 26.786796564403573, + 27.286796564403573, + 27.786796564403573, + 28.286796564403573, + 28.786796564403573, + 29.286796564403573, + 29.786796564403573, + 30.286796564403573, + 30.786796564403573, + 31.286796564403573, + 31.786796564403573, + 32.28679656440357, + 32.78679656440357, + 33.28679656440357, + 33.78679656440357, + 34.28679656440357, + 34.78679656440357, + 35.28679656440357, + 35.78679656440357, + 36.28679656440357 + ] + }, + { + "angle": -90.0, + "x_start": -1.7763568394002505e-15, + "x_delta": 30.000000000000004, + "n_frames": 6000, + "n_rows": 61, + "y_positions": [ + -1.7763568394002505e-15, + 0.4999999999999982, + 0.9999999999999982, + 1.4999999999999982, + 1.9999999999999982, + 2.4999999999999982, + 2.9999999999999982, + 3.4999999999999982, + 3.9999999999999982, + 4.499999999999998, + 4.999999999999998, + 5.499999999999998, + 5.999999999999998, + 6.499999999999998, + 6.999999999999998, + 7.499999999999998, + 7.999999999999998, + 8.499999999999998, + 8.999999999999998, + 9.499999999999998, + 9.999999999999998, + 10.499999999999998, + 10.999999999999998, + 11.499999999999998, + 11.999999999999998, + 12.499999999999998, + 12.999999999999998, + 13.499999999999998, + 13.999999999999998, + 14.499999999999998, + 14.999999999999998, + 15.499999999999998, + 15.999999999999998, + 16.5, + 17.0, + 17.5, + 18.0, + 18.5, + 19.0, + 19.5, + 20.0, + 20.5, + 21.0, + 21.5, + 22.0, + 22.5, + 23.0, + 23.5, + 24.0, + 24.5, + 25.0, + 25.5, + 26.0, + 26.5, + 27.0, + 27.5, + 28.0, + 28.5, + 29.0, + 29.5, + 30.0 + ] + }, + { + "angle": -135.0, + "x_start": -6.2132034355964265, + "x_delta": 42.42640687119285, + "n_frames": 8485, + "n_rows": 86, + "y_positions": [ + -6.2132034355964265, + -5.7132034355964265, + -5.2132034355964265, + -4.7132034355964265, + -4.2132034355964265, + -3.7132034355964265, + -3.2132034355964265, + -2.7132034355964265, + -2.2132034355964265, + -1.7132034355964265, + -1.2132034355964265, + -0.7132034355964265, + -0.21320343559642652, + 0.2867965644035735, + 0.7867965644035735, + 1.2867965644035735, + 1.7867965644035735, + 2.2867965644035735, + 2.7867965644035735, + 3.2867965644035735, + 3.7867965644035735, + 4.2867965644035735, + 4.7867965644035735, + 5.2867965644035735, + 5.7867965644035735, + 6.2867965644035735, + 6.7867965644035735, + 7.2867965644035735, + 7.7867965644035735, + 8.286796564403573, + 8.786796564403573, + 9.286796564403573, + 9.786796564403573, + 10.286796564403573, + 10.786796564403573, + 11.286796564403573, + 11.786796564403573, + 12.286796564403573, + 12.786796564403573, + 13.286796564403573, + 13.786796564403573, + 14.286796564403573, + 14.786796564403573, + 15.286796564403573, + 15.786796564403573, + 16.286796564403573, + 16.786796564403573, + 17.286796564403573, + 17.786796564403573, + 18.286796564403573, + 18.786796564403573, + 19.286796564403573, + 19.786796564403573, + 20.286796564403573, + 20.786796564403573, + 21.286796564403573, + 21.786796564403573, + 22.286796564403573, + 22.786796564403573, + 23.286796564403573, + 23.786796564403573, + 24.286796564403573, + 24.786796564403573, + 25.286796564403573, + 25.786796564403573, + 26.286796564403573, + 26.786796564403573, + 27.286796564403573, + 27.786796564403573, + 28.286796564403573, + 28.786796564403573, + 29.286796564403573, + 29.786796564403573, + 30.286796564403573, + 30.786796564403573, + 31.286796564403573, + 31.786796564403573, + 32.28679656440357, + 32.78679656440357, + 33.28679656440357, + 33.78679656440357, + 34.28679656440357, + 34.78679656440357, + 35.28679656440357, + 35.78679656440357, + 36.28679656440357 + ] + }, + { + "angle": -180.0, + "x_start": -1.7763568394002505e-15, + "x_delta": 30.000000000000004, + "n_frames": 6000, + "n_rows": 61, + "y_positions": [ + -1.7763568394002505e-15, + 0.4999999999999982, + 0.9999999999999982, + 1.4999999999999982, + 1.9999999999999982, + 2.4999999999999982, + 2.9999999999999982, + 3.4999999999999982, + 3.9999999999999982, + 4.499999999999998, + 4.999999999999998, + 5.499999999999998, + 5.999999999999998, + 6.499999999999998, + 6.999999999999998, + 7.499999999999998, + 7.999999999999998, + 8.499999999999998, + 8.999999999999998, + 9.499999999999998, + 9.999999999999998, + 10.499999999999998, + 10.999999999999998, + 11.499999999999998, + 11.999999999999998, + 12.499999999999998, + 12.999999999999998, + 13.499999999999998, + 13.999999999999998, + 14.499999999999998, + 14.999999999999998, + 15.499999999999998, + 15.999999999999998, + 16.5, + 17.0, + 17.5, + 18.0, + 18.5, + 19.0, + 19.5, + 20.0, + 20.5, + 21.0, + 21.5, + 22.0, + 22.5, + 23.0, + 23.5, + 24.0, + 24.5, + 25.0, + 25.5, + 26.0, + 26.5, + 27.0, + 27.5, + 28.0, + 28.5, + 29.0, + 29.5, + 30.0 + ] + } + ] + } + }, + "seven_angles_asym": { + "inputs": { + "XS": "12.5", + "YS": "7.5", + "XD": "42.0", + "YD": "17.0", + "num_angles": "7", + "row_spacing": "0.05" + }, + "params": { + "x_start_nominal": 12.5, + "y_start_nominal": 7.5, + "x_delta_nominal": 42.0, + "y_delta_nominal": 17.0, + "num_angles": 7, + "row_spacing": 0.05, + "laser_freq": 20000.0, + "prefix": "golden", + "save_dir": "/tmp/golden-scans", + "per_angle": [ + { + "angle": 0.0, + "x_start": 12.5, + "x_delta": 42.0, + "n_frames": 8400, + "n_rows": 341, + "y_positions": [ + 7.5, + 7.55, + 7.6, + 7.65, + 7.7, + 7.75, + 7.8, + 7.85, + 7.9, + 7.95, + 8.0, + 8.05, + 8.1, + 8.15, + 8.2, + 8.25, + 8.3, + 8.35, + 8.4, + 8.45, + 8.5, + 8.55, + 8.6, + 8.65, + 8.7, + 8.75, + 8.8, + 8.85, + 8.9, + 8.95, + 9.0, + 9.05, + 9.1, + 9.15, + 9.2, + 9.25, + 9.3, + 9.35, + 9.4, + 9.45, + 9.5, + 9.55, + 9.6, + 9.65, + 9.7, + 9.75, + 9.8, + 9.85, + 9.9, + 9.95, + 10.0, + 10.05, + 10.1, + 10.15, + 10.2, + 10.25, + 10.3, + 10.35, + 10.4, + 10.45, + 10.5, + 10.55, + 10.6, + 10.65, + 10.7, + 10.75, + 10.8, + 10.85, + 10.9, + 10.95, + 11.0, + 11.05, + 11.1, + 11.15, + 11.2, + 11.25, + 11.3, + 11.35, + 11.4, + 11.45, + 11.5, + 11.55, + 11.600000000000001, + 11.65, + 11.7, + 11.75, + 11.8, + 11.850000000000001, + 11.9, + 11.95, + 12.0, + 12.05, + 12.100000000000001, + 12.15, + 12.2, + 12.25, + 12.3, + 12.350000000000001, + 12.4, + 12.45, + 12.5, + 12.55, + 12.600000000000001, + 12.65, + 12.7, + 12.75, + 12.8, + 12.850000000000001, + 12.9, + 12.95, + 13.0, + 13.05, + 13.100000000000001, + 13.15, + 13.2, + 13.25, + 13.3, + 13.350000000000001, + 13.4, + 13.45, + 13.5, + 13.55, + 13.600000000000001, + 13.65, + 13.7, + 13.75, + 13.8, + 13.850000000000001, + 13.9, + 13.95, + 14.0, + 14.05, + 14.100000000000001, + 14.15, + 14.2, + 14.25, + 14.3, + 14.350000000000001, + 14.4, + 14.45, + 14.5, + 14.55, + 14.600000000000001, + 14.65, + 14.7, + 14.75, + 14.8, + 14.850000000000001, + 14.9, + 14.95, + 15.0, + 15.05, + 15.100000000000001, + 15.15, + 15.2, + 15.25, + 15.3, + 15.350000000000001, + 15.4, + 15.45, + 15.5, + 15.55, + 15.6, + 15.65, + 15.700000000000001, + 15.75, + 15.8, + 15.85, + 15.9, + 15.950000000000001, + 16.0, + 16.05, + 16.1, + 16.15, + 16.200000000000003, + 16.25, + 16.3, + 16.35, + 16.4, + 16.450000000000003, + 16.5, + 16.55, + 16.6, + 16.65, + 16.700000000000003, + 16.75, + 16.8, + 16.85, + 16.9, + 16.950000000000003, + 17.0, + 17.05, + 17.1, + 17.15, + 17.200000000000003, + 17.25, + 17.3, + 17.35, + 17.4, + 17.450000000000003, + 17.5, + 17.55, + 17.6, + 17.65, + 17.700000000000003, + 17.75, + 17.8, + 17.85, + 17.9, + 17.950000000000003, + 18.0, + 18.05, + 18.1, + 18.15, + 18.200000000000003, + 18.25, + 18.3, + 18.35, + 18.4, + 18.450000000000003, + 18.5, + 18.55, + 18.6, + 18.65, + 18.700000000000003, + 18.75, + 18.8, + 18.85, + 18.9, + 18.950000000000003, + 19.0, + 19.05, + 19.1, + 19.15, + 19.200000000000003, + 19.25, + 19.3, + 19.35, + 19.4, + 19.450000000000003, + 19.5, + 19.55, + 19.6, + 19.65, + 19.700000000000003, + 19.75, + 19.8, + 19.85, + 19.9, + 19.950000000000003, + 20.0, + 20.05, + 20.1, + 20.15, + 20.200000000000003, + 20.25, + 20.3, + 20.35, + 20.4, + 20.450000000000003, + 20.5, + 20.55, + 20.6, + 20.65, + 20.700000000000003, + 20.75, + 20.8, + 20.85, + 20.9, + 20.950000000000003, + 21.0, + 21.05, + 21.1, + 21.15, + 21.200000000000003, + 21.25, + 21.3, + 21.35, + 21.4, + 21.450000000000003, + 21.5, + 21.55, + 21.6, + 21.65, + 21.700000000000003, + 21.75, + 21.8, + 21.85, + 21.9, + 21.950000000000003, + 22.0, + 22.05, + 22.1, + 22.15, + 22.200000000000003, + 22.25, + 22.3, + 22.35, + 22.4, + 22.450000000000003, + 22.5, + 22.55, + 22.6, + 22.65, + 22.700000000000003, + 22.75, + 22.8, + 22.85, + 22.9, + 22.950000000000003, + 23.0, + 23.05, + 23.1, + 23.15, + 23.200000000000003, + 23.25, + 23.3, + 23.35, + 23.4, + 23.450000000000003, + 23.5, + 23.55, + 23.6, + 23.650000000000002, + 23.7, + 23.75, + 23.8, + 23.85, + 23.900000000000002, + 23.95, + 24.0, + 24.05, + 24.1, + 24.150000000000002, + 24.2, + 24.25, + 24.3, + 24.35, + 24.400000000000002, + 24.45, + 24.5 + ] + }, + { + "angle": -30.0, + "x_start": 11.063466520526788, + "x_delta": 44.873066958946424, + "n_frames": 8975, + "n_rows": 715, + "y_positions": [ + -1.8612159321677275, + -1.8112159321677275, + -1.7612159321677274, + -1.7112159321677276, + -1.6612159321677276, + -1.6112159321677275, + -1.5612159321677275, + -1.5112159321677274, + -1.4612159321677276, + -1.4112159321677276, + -1.3612159321677275, + -1.3112159321677275, + -1.2612159321677274, + -1.2112159321677276, + -1.1612159321677273, + -1.1112159321677275, + -1.0612159321677275, + -1.0112159321677274, + -0.9612159321677275, + -0.9112159321677274, + -0.8612159321677275, + -0.8112159321677275, + -0.7612159321677274, + -0.7112159321677274, + -0.6612159321677273, + -0.6112159321677275, + -0.5612159321677275, + -0.5112159321677274, + -0.4612159321677274, + -0.41121593216772734, + -0.3612159321677275, + -0.31121593216772747, + -0.2612159321677274, + -0.21121593216772738, + -0.16121593216772734, + -0.11121593216772752, + -0.06121593216772747, + -0.011215932167727427, + 0.03878406783227262, + 0.08878406783227266, + 0.13878406783227248, + 0.18878406783227275, + 0.23878406783227257, + 0.2887840678322724, + 0.33878406783227266, + 0.3887840678322725, + 0.43878406783227275, + 0.4887840678322726, + 0.5387840678322728, + 0.5887840678322727, + 0.6387840678322725, + 0.6887840678322728, + 0.7387840678322726, + 0.7887840678322728, + 0.8387840678322727, + 0.8887840678322725, + 0.9387840678322728, + 0.9887840678322726, + 1.0387840678322728, + 1.0887840678322727, + 1.1387840678322725, + 1.1887840678322728, + 1.2387840678322726, + 1.2887840678322728, + 1.3387840678322727, + 1.3887840678322725, + 1.4387840678322728, + 1.4887840678322726, + 1.5387840678322728, + 1.5887840678322727, + 1.6387840678322725, + 1.6887840678322728, + 1.7387840678322726, + 1.7887840678322728, + 1.8387840678322727, + 1.8887840678322725, + 1.9387840678322728, + 1.9887840678322726, + 2.038784067832273, + 2.0887840678322727, + 2.1387840678322725, + 2.1887840678322723, + 2.238784067832273, + 2.288784067832273, + 2.3387840678322727, + 2.3887840678322725, + 2.4387840678322723, + 2.488784067832273, + 2.538784067832273, + 2.5887840678322727, + 2.6387840678322725, + 2.6887840678322723, + 2.738784067832273, + 2.788784067832273, + 2.8387840678322727, + 2.8887840678322725, + 2.938784067832273, + 2.988784067832273, + 3.038784067832273, + 3.0887840678322727, + 3.1387840678322725, + 3.188784067832273, + 3.238784067832273, + 3.288784067832273, + 3.3387840678322727, + 3.3887840678322725, + 3.438784067832273, + 3.488784067832273, + 3.538784067832273, + 3.5887840678322727, + 3.6387840678322725, + 3.688784067832273, + 3.738784067832273, + 3.788784067832273, + 3.8387840678322727, + 3.8887840678322725, + 3.938784067832273, + 3.988784067832273, + 4.038784067832273, + 4.088784067832273, + 4.1387840678322725, + 4.188784067832273, + 4.238784067832273, + 4.288784067832273, + 4.338784067832273, + 4.3887840678322725, + 4.438784067832273, + 4.488784067832273, + 4.538784067832273, + 4.588784067832273, + 4.6387840678322725, + 4.688784067832273, + 4.738784067832273, + 4.788784067832273, + 4.838784067832273, + 4.8887840678322725, + 4.938784067832273, + 4.988784067832273, + 5.038784067832273, + 5.088784067832273, + 5.1387840678322725, + 5.188784067832273, + 5.238784067832273, + 5.288784067832273, + 5.338784067832273, + 5.3887840678322725, + 5.438784067832273, + 5.488784067832273, + 5.538784067832273, + 5.588784067832273, + 5.6387840678322725, + 5.688784067832273, + 5.738784067832273, + 5.788784067832273, + 5.838784067832273, + 5.8887840678322725, + 5.938784067832273, + 5.988784067832273, + 6.038784067832273, + 6.088784067832273, + 6.1387840678322725, + 6.188784067832273, + 6.238784067832272, + 6.288784067832273, + 6.3387840678322735, + 6.3887840678322725, + 6.438784067832273, + 6.488784067832272, + 6.538784067832273, + 6.5887840678322735, + 6.6387840678322725, + 6.688784067832273, + 6.738784067832272, + 6.788784067832273, + 6.8387840678322735, + 6.8887840678322725, + 6.938784067832273, + 6.988784067832272, + 7.038784067832273, + 7.0887840678322735, + 7.1387840678322725, + 7.188784067832273, + 7.238784067832272, + 7.288784067832273, + 7.3387840678322735, + 7.3887840678322725, + 7.438784067832273, + 7.488784067832272, + 7.538784067832273, + 7.5887840678322735, + 7.6387840678322725, + 7.688784067832273, + 7.738784067832274, + 7.788784067832273, + 7.8387840678322735, + 7.8887840678322725, + 7.938784067832273, + 7.988784067832274, + 8.038784067832273, + 8.088784067832274, + 8.138784067832272, + 8.188784067832273, + 8.238784067832274, + 8.288784067832273, + 8.338784067832274, + 8.388784067832272, + 8.438784067832273, + 8.488784067832274, + 8.538784067832273, + 8.588784067832274, + 8.638784067832272, + 8.688784067832273, + 8.738784067832274, + 8.788784067832273, + 8.838784067832274, + 8.888784067832272, + 8.938784067832273, + 8.988784067832274, + 9.038784067832273, + 9.088784067832274, + 9.138784067832272, + 9.188784067832273, + 9.238784067832274, + 9.288784067832273, + 9.338784067832274, + 9.388784067832272, + 9.438784067832273, + 9.488784067832274, + 9.538784067832273, + 9.588784067832274, + 9.638784067832272, + 9.688784067832273, + 9.738784067832274, + 9.788784067832273, + 9.838784067832274, + 9.888784067832272, + 9.938784067832273, + 9.988784067832274, + 10.038784067832273, + 10.088784067832274, + 10.138784067832272, + 10.188784067832273, + 10.238784067832274, + 10.288784067832273, + 10.338784067832274, + 10.388784067832272, + 10.438784067832273, + 10.488784067832274, + 10.538784067832273, + 10.588784067832274, + 10.638784067832272, + 10.688784067832273, + 10.738784067832274, + 10.788784067832273, + 10.838784067832274, + 10.888784067832272, + 10.938784067832273, + 10.988784067832274, + 11.038784067832273, + 11.088784067832274, + 11.138784067832272, + 11.188784067832273, + 11.238784067832274, + 11.288784067832273, + 11.338784067832274, + 11.388784067832272, + 11.438784067832273, + 11.488784067832274, + 11.538784067832273, + 11.588784067832274, + 11.638784067832272, + 11.688784067832273, + 11.738784067832274, + 11.788784067832273, + 11.838784067832274, + 11.888784067832272, + 11.938784067832273, + 11.988784067832274, + 12.038784067832273, + 12.088784067832274, + 12.138784067832272, + 12.188784067832273, + 12.238784067832274, + 12.288784067832273, + 12.338784067832274, + 12.388784067832272, + 12.438784067832273, + 12.488784067832274, + 12.538784067832273, + 12.588784067832274, + 12.638784067832272, + 12.688784067832273, + 12.738784067832274, + 12.788784067832273, + 12.838784067832274, + 12.888784067832272, + 12.938784067832273, + 12.988784067832274, + 13.038784067832273, + 13.088784067832274, + 13.138784067832272, + 13.188784067832273, + 13.238784067832274, + 13.288784067832273, + 13.338784067832274, + 13.388784067832272, + 13.438784067832273, + 13.488784067832274, + 13.538784067832273, + 13.588784067832274, + 13.638784067832272, + 13.688784067832273, + 13.738784067832274, + 13.788784067832273, + 13.838784067832274, + 13.888784067832272, + 13.938784067832273, + 13.988784067832274, + 14.038784067832273, + 14.088784067832274, + 14.138784067832272, + 14.188784067832273, + 14.238784067832274, + 14.288784067832275, + 14.338784067832272, + 14.388784067832272, + 14.438784067832273, + 14.488784067832274, + 14.538784067832275, + 14.588784067832272, + 14.638784067832272, + 14.688784067832273, + 14.738784067832274, + 14.788784067832275, + 14.838784067832272, + 14.888784067832272, + 14.938784067832273, + 14.988784067832274, + 15.038784067832275, + 15.088784067832272, + 15.138784067832272, + 15.188784067832273, + 15.238784067832274, + 15.288784067832275, + 15.338784067832272, + 15.388784067832272, + 15.438784067832273, + 15.488784067832274, + 15.538784067832275, + 15.588784067832272, + 15.638784067832272, + 15.688784067832273, + 15.738784067832274, + 15.788784067832275, + 15.838784067832272, + 15.888784067832272, + 15.938784067832273, + 15.988784067832274, + 16.038784067832275, + 16.08878406783227, + 16.138784067832272, + 16.188784067832273, + 16.238784067832274, + 16.288784067832275, + 16.33878406783227, + 16.388784067832272, + 16.438784067832273, + 16.488784067832274, + 16.538784067832275, + 16.58878406783227, + 16.638784067832272, + 16.688784067832273, + 16.738784067832274, + 16.788784067832275, + 16.83878406783227, + 16.888784067832272, + 16.938784067832273, + 16.988784067832274, + 17.038784067832275, + 17.08878406783227, + 17.138784067832272, + 17.188784067832273, + 17.238784067832274, + 17.288784067832275, + 17.338784067832275, + 17.388784067832272, + 17.438784067832273, + 17.488784067832274, + 17.538784067832275, + 17.588784067832275, + 17.638784067832272, + 17.688784067832273, + 17.738784067832274, + 17.788784067832275, + 17.838784067832275, + 17.888784067832272, + 17.938784067832273, + 17.988784067832274, + 18.038784067832275, + 18.088784067832275, + 18.138784067832272, + 18.188784067832273, + 18.238784067832274, + 18.288784067832275, + 18.338784067832275, + 18.388784067832272, + 18.438784067832273, + 18.488784067832274, + 18.538784067832275, + 18.588784067832275, + 18.638784067832272, + 18.688784067832273, + 18.738784067832274, + 18.788784067832275, + 18.838784067832275, + 18.888784067832272, + 18.938784067832273, + 18.988784067832274, + 19.038784067832275, + 19.088784067832275, + 19.138784067832272, + 19.188784067832273, + 19.238784067832274, + 19.288784067832275, + 19.338784067832275, + 19.388784067832272, + 19.438784067832273, + 19.488784067832274, + 19.538784067832275, + 19.588784067832275, + 19.638784067832272, + 19.688784067832273, + 19.738784067832274, + 19.788784067832275, + 19.838784067832275, + 19.888784067832272, + 19.938784067832273, + 19.988784067832274, + 20.038784067832275, + 20.088784067832275, + 20.138784067832272, + 20.188784067832273, + 20.238784067832274, + 20.288784067832275, + 20.338784067832275, + 20.388784067832272, + 20.438784067832273, + 20.488784067832274, + 20.538784067832275, + 20.588784067832275, + 20.638784067832272, + 20.688784067832273, + 20.738784067832274, + 20.788784067832275, + 20.838784067832275, + 20.888784067832272, + 20.938784067832273, + 20.988784067832274, + 21.038784067832275, + 21.088784067832275, + 21.138784067832272, + 21.188784067832273, + 21.238784067832274, + 21.288784067832275, + 21.338784067832275, + 21.388784067832272, + 21.438784067832273, + 21.488784067832274, + 21.538784067832275, + 21.588784067832275, + 21.638784067832272, + 21.688784067832273, + 21.738784067832274, + 21.788784067832275, + 21.838784067832275, + 21.888784067832272, + 21.938784067832273, + 21.988784067832274, + 22.038784067832275, + 22.088784067832275, + 22.138784067832272, + 22.188784067832273, + 22.238784067832274, + 22.288784067832275, + 22.338784067832275, + 22.388784067832272, + 22.438784067832273, + 22.488784067832274, + 22.538784067832275, + 22.588784067832275, + 22.638784067832272, + 22.688784067832273, + 22.738784067832274, + 22.788784067832275, + 22.838784067832275, + 22.888784067832272, + 22.938784067832273, + 22.988784067832274, + 23.038784067832275, + 23.088784067832275, + 23.138784067832272, + 23.188784067832273, + 23.238784067832274, + 23.288784067832275, + 23.338784067832275, + 23.388784067832272, + 23.438784067832273, + 23.488784067832274, + 23.538784067832275, + 23.588784067832275, + 23.638784067832272, + 23.688784067832273, + 23.738784067832274, + 23.788784067832275, + 23.838784067832275, + 23.888784067832272, + 23.938784067832273, + 23.988784067832274, + 24.038784067832275, + 24.088784067832275, + 24.138784067832272, + 24.188784067832273, + 24.238784067832274, + 24.288784067832275, + 24.338784067832275, + 24.388784067832272, + 24.438784067832273, + 24.488784067832274, + 24.538784067832275, + 24.588784067832275, + 24.638784067832272, + 24.688784067832273, + 24.738784067832274, + 24.788784067832275, + 24.838784067832275, + 24.888784067832272, + 24.938784067832273, + 24.988784067832274, + 25.038784067832275, + 25.088784067832275, + 25.138784067832272, + 25.188784067832273, + 25.238784067832274, + 25.288784067832275, + 25.338784067832275, + 25.388784067832272, + 25.438784067832273, + 25.488784067832274, + 25.538784067832275, + 25.588784067832275, + 25.638784067832272, + 25.688784067832273, + 25.738784067832274, + 25.788784067832275, + 25.838784067832275, + 25.888784067832272, + 25.938784067832273, + 25.988784067832274, + 26.038784067832275, + 26.088784067832275, + 26.138784067832272, + 26.188784067832273, + 26.238784067832274, + 26.288784067832275, + 26.338784067832275, + 26.388784067832272, + 26.438784067832273, + 26.488784067832274, + 26.538784067832275, + 26.588784067832275, + 26.638784067832272, + 26.688784067832273, + 26.738784067832274, + 26.788784067832275, + 26.838784067832275, + 26.888784067832272, + 26.938784067832273, + 26.988784067832274, + 27.038784067832275, + 27.088784067832275, + 27.138784067832272, + 27.188784067832273, + 27.238784067832274, + 27.288784067832275, + 27.338784067832275, + 27.388784067832272, + 27.438784067832273, + 27.488784067832274, + 27.538784067832275, + 27.588784067832275, + 27.638784067832272, + 27.688784067832273, + 27.738784067832274, + 27.788784067832275, + 27.838784067832275, + 27.888784067832272, + 27.938784067832273, + 27.988784067832274, + 28.038784067832275, + 28.088784067832275, + 28.138784067832272, + 28.188784067832273, + 28.238784067832274, + 28.288784067832275, + 28.338784067832275, + 28.388784067832272, + 28.438784067832273, + 28.488784067832274, + 28.538784067832275, + 28.588784067832275, + 28.638784067832272, + 28.688784067832273, + 28.738784067832274, + 28.788784067832275, + 28.838784067832275, + 28.888784067832272, + 28.938784067832273, + 28.988784067832274, + 29.038784067832275, + 29.088784067832275, + 29.138784067832272, + 29.188784067832273, + 29.238784067832274, + 29.288784067832275, + 29.338784067832275, + 29.388784067832272, + 29.438784067832273, + 29.488784067832274, + 29.538784067832275, + 29.588784067832275, + 29.638784067832272, + 29.688784067832273, + 29.738784067832274, + 29.788784067832275, + 29.838784067832275, + 29.888784067832272, + 29.938784067832273, + 29.988784067832274, + 30.038784067832275, + 30.088784067832275, + 30.138784067832272, + 30.188784067832277, + 30.238784067832274, + 30.28878406783227, + 30.338784067832275, + 30.388784067832272, + 30.438784067832277, + 30.488784067832274, + 30.53878406783227, + 30.588784067832275, + 30.638784067832272, + 30.688784067832277, + 30.738784067832274, + 30.78878406783227, + 30.838784067832275, + 30.888784067832272, + 30.938784067832277, + 30.988784067832274, + 31.03878406783227, + 31.088784067832275, + 31.138784067832272, + 31.188784067832277, + 31.238784067832274, + 31.28878406783227, + 31.338784067832275, + 31.388784067832272, + 31.438784067832277, + 31.488784067832274, + 31.53878406783227, + 31.588784067832275, + 31.638784067832272, + 31.688784067832277, + 31.738784067832274, + 31.78878406783227, + 31.838784067832275, + 31.888784067832272, + 31.938784067832277, + 31.988784067832274, + 32.03878406783227, + 32.08878406783228, + 32.138784067832276, + 32.18878406783227, + 32.23878406783227, + 32.28878406783227, + 32.33878406783228, + 32.388784067832276, + 32.43878406783227, + 32.48878406783227, + 32.53878406783227, + 32.58878406783228, + 32.638784067832276, + 32.68878406783227, + 32.73878406783227, + 32.78878406783227, + 32.83878406783228, + 32.888784067832276, + 32.93878406783227, + 32.98878406783227, + 33.03878406783227, + 33.08878406783228, + 33.138784067832276, + 33.18878406783227, + 33.23878406783227, + 33.28878406783227, + 33.33878406783228, + 33.388784067832276, + 33.43878406783227, + 33.48878406783227, + 33.53878406783227, + 33.58878406783228, + 33.638784067832276, + 33.68878406783227, + 33.73878406783227, + 33.78878406783227, + 33.83878406783228 + ] + }, + { + "angle": -60.0, + "x_start": 15.638784067832269, + "x_delta": 35.72243186433546, + "n_frames": 7144, + "n_rows": 898, + "y_positions": [ + -6.436533479473212, + -6.386533479473212, + -6.336533479473212, + -6.286533479473212, + -6.236533479473212, + -6.186533479473212, + -6.136533479473212, + -6.086533479473212, + -6.036533479473212, + -5.986533479473212, + -5.936533479473212, + -5.886533479473212, + -5.836533479473212, + -5.786533479473212, + -5.736533479473212, + -5.686533479473212, + -5.636533479473212, + -5.586533479473212, + -5.536533479473212, + -5.486533479473212, + -5.436533479473212, + -5.386533479473212, + -5.336533479473212, + -5.286533479473212, + -5.236533479473212, + -5.186533479473212, + -5.136533479473212, + -5.086533479473212, + -5.036533479473212, + -4.986533479473212, + -4.936533479473212, + -4.886533479473212, + -4.836533479473212, + -4.786533479473212, + -4.736533479473212, + -4.686533479473212, + -4.636533479473212, + -4.586533479473212, + -4.536533479473212, + -4.486533479473212, + -4.436533479473212, + -4.386533479473211, + -4.336533479473212, + -4.286533479473212, + -4.236533479473212, + -4.186533479473212, + -4.136533479473211, + -4.086533479473212, + -4.036533479473212, + -3.986533479473212, + -3.936533479473212, + -3.886533479473212, + -3.836533479473212, + -3.7865334794732117, + -3.736533479473212, + -3.686533479473212, + -3.636533479473212, + -3.586533479473212, + -3.5365334794732117, + -3.486533479473212, + -3.436533479473212, + -3.386533479473212, + -3.336533479473212, + -3.2865334794732117, + -3.236533479473212, + -3.186533479473212, + -3.136533479473212, + -3.086533479473212, + -3.0365334794732117, + -2.986533479473212, + -2.936533479473212, + -2.886533479473212, + -2.836533479473212, + -2.7865334794732117, + -2.736533479473212, + -2.686533479473212, + -2.636533479473212, + -2.586533479473212, + -2.5365334794732117, + -2.486533479473212, + -2.436533479473212, + -2.3865334794732123, + -2.3365334794732115, + -2.2865334794732117, + -2.236533479473212, + -2.186533479473212, + -2.1365334794732123, + -2.0865334794732115, + -2.0365334794732117, + -1.986533479473212, + -1.936533479473212, + -1.8865334794732123, + -1.8365334794732115, + -1.7865334794732117, + -1.736533479473212, + -1.686533479473212, + -1.6365334794732114, + -1.5865334794732115, + -1.5365334794732117, + -1.486533479473212, + -1.436533479473212, + -1.3865334794732114, + -1.3365334794732115, + -1.2865334794732117, + -1.236533479473212, + -1.186533479473212, + -1.1365334794732114, + -1.0865334794732115, + -1.0365334794732117, + -0.9865334794732119, + -0.9365334794732121, + -0.8865334794732114, + -0.8365334794732115, + -0.7865334794732117, + -0.7365334794732119, + -0.6865334794732121, + -0.6365334794732114, + -0.5865334794732115, + -0.5365334794732117, + -0.4865334794732119, + -0.4365334794732121, + -0.38653347947321137, + -0.33653347947321155, + -0.2865334794732117, + -0.2365334794732119, + -0.18653347947321208, + -0.13653347947321137, + -0.08653347947321155, + -0.03653347947321173, + 0.013466520526788095, + 0.06346652052678792, + 0.11346652052678863, + 0.16346652052678845, + 0.21346652052678827, + 0.2634665205267881, + 0.3134665205267879, + 0.36346652052678863, + 0.41346652052678845, + 0.4634665205267883, + 0.5134665205267881, + 0.5634665205267879, + 0.6134665205267886, + 0.6634665205267885, + 0.7134665205267883, + 0.7634665205267881, + 0.8134665205267879, + 0.8634665205267886, + 0.9134665205267885, + 0.9634665205267883, + 1.013466520526788, + 1.063466520526788, + 1.1134665205267886, + 1.1634665205267885, + 1.2134665205267883, + 1.263466520526788, + 1.313466520526788, + 1.3634665205267886, + 1.4134665205267885, + 1.4634665205267883, + 1.513466520526788, + 1.563466520526788, + 1.6134665205267886, + 1.6634665205267876, + 1.7134665205267883, + 1.763466520526789, + 1.813466520526788, + 1.8634665205267886, + 1.9134665205267876, + 1.9634665205267883, + 2.013466520526789, + 2.063466520526788, + 2.1134665205267886, + 2.1634665205267876, + 2.2134665205267883, + 2.263466520526789, + 2.313466520526788, + 2.3634665205267886, + 2.4134665205267876, + 2.4634665205267883, + 2.513466520526789, + 2.563466520526788, + 2.6134665205267886, + 2.6634665205267876, + 2.7134665205267883, + 2.763466520526789, + 2.813466520526788, + 2.8634665205267886, + 2.9134665205267876, + 2.9634665205267883, + 3.013466520526789, + 3.063466520526788, + 3.1134665205267886, + 3.1634665205267893, + 3.2134665205267883, + 3.263466520526789, + 3.313466520526788, + 3.3634665205267886, + 3.4134665205267893, + 3.4634665205267883, + 3.513466520526789, + 3.563466520526788, + 3.6134665205267886, + 3.6634665205267893, + 3.7134665205267883, + 3.763466520526789, + 3.813466520526788, + 3.8634665205267886, + 3.9134665205267893, + 3.9634665205267883, + 4.013466520526789, + 4.063466520526788, + 4.113466520526789, + 4.163466520526789, + 4.213466520526788, + 4.263466520526789, + 4.313466520526788, + 4.363466520526789, + 4.413466520526789, + 4.463466520526788, + 4.513466520526789, + 4.563466520526788, + 4.613466520526789, + 4.663466520526789, + 4.713466520526788, + 4.763466520526789, + 4.813466520526788, + 4.863466520526789, + 4.913466520526789, + 4.963466520526788, + 5.013466520526789, + 5.063466520526788, + 5.113466520526789, + 5.163466520526789, + 5.213466520526788, + 5.263466520526789, + 5.313466520526788, + 5.363466520526789, + 5.413466520526789, + 5.463466520526788, + 5.513466520526789, + 5.563466520526788, + 5.613466520526789, + 5.663466520526789, + 5.713466520526788, + 5.763466520526789, + 5.813466520526788, + 5.863466520526789, + 5.913466520526789, + 5.963466520526788, + 6.013466520526789, + 6.063466520526788, + 6.113466520526789, + 6.163466520526789, + 6.213466520526788, + 6.263466520526789, + 6.313466520526788, + 6.363466520526789, + 6.413466520526789, + 6.463466520526788, + 6.513466520526789, + 6.563466520526788, + 6.613466520526789, + 6.663466520526789, + 6.713466520526788, + 6.763466520526789, + 6.813466520526788, + 6.863466520526789, + 6.913466520526789, + 6.963466520526788, + 7.013466520526789, + 7.063466520526788, + 7.113466520526789, + 7.163466520526789, + 7.213466520526788, + 7.263466520526789, + 7.313466520526788, + 7.363466520526789, + 7.413466520526789, + 7.463466520526788, + 7.513466520526789, + 7.563466520526788, + 7.613466520526789, + 7.663466520526789, + 7.713466520526788, + 7.763466520526789, + 7.813466520526788, + 7.863466520526789, + 7.913466520526789, + 7.963466520526788, + 8.013466520526789, + 8.063466520526788, + 8.113466520526789, + 8.16346652052679, + 8.213466520526788, + 8.263466520526789, + 8.313466520526788, + 8.363466520526789, + 8.41346652052679, + 8.463466520526788, + 8.513466520526789, + 8.563466520526788, + 8.613466520526789, + 8.66346652052679, + 8.713466520526788, + 8.763466520526789, + 8.813466520526788, + 8.863466520526789, + 8.91346652052679, + 8.963466520526788, + 9.013466520526789, + 9.063466520526788, + 9.113466520526789, + 9.16346652052679, + 9.213466520526788, + 9.263466520526789, + 9.313466520526788, + 9.363466520526789, + 9.41346652052679, + 9.463466520526788, + 9.513466520526789, + 9.563466520526788, + 9.613466520526789, + 9.66346652052679, + 9.71346652052679, + 9.763466520526787, + 9.813466520526788, + 9.863466520526789, + 9.91346652052679, + 9.96346652052679, + 10.013466520526787, + 10.063466520526788, + 10.113466520526789, + 10.16346652052679, + 10.21346652052679, + 10.263466520526787, + 10.313466520526788, + 10.363466520526789, + 10.41346652052679, + 10.46346652052679, + 10.513466520526787, + 10.563466520526788, + 10.613466520526789, + 10.66346652052679, + 10.71346652052679, + 10.763466520526787, + 10.813466520526788, + 10.863466520526789, + 10.91346652052679, + 10.96346652052679, + 11.013466520526787, + 11.063466520526788, + 11.113466520526789, + 11.16346652052679, + 11.21346652052679, + 11.263466520526787, + 11.313466520526788, + 11.363466520526789, + 11.41346652052679, + 11.46346652052679, + 11.513466520526787, + 11.563466520526788, + 11.613466520526789, + 11.66346652052679, + 11.71346652052679, + 11.763466520526787, + 11.813466520526788, + 11.863466520526789, + 11.91346652052679, + 11.96346652052679, + 12.013466520526787, + 12.063466520526788, + 12.113466520526789, + 12.16346652052679, + 12.21346652052679, + 12.263466520526787, + 12.313466520526788, + 12.363466520526789, + 12.41346652052679, + 12.46346652052679, + 12.513466520526787, + 12.563466520526788, + 12.613466520526789, + 12.66346652052679, + 12.71346652052679, + 12.76346652052679, + 12.813466520526788, + 12.863466520526789, + 12.91346652052679, + 12.96346652052679, + 13.01346652052679, + 13.063466520526788, + 13.113466520526789, + 13.16346652052679, + 13.21346652052679, + 13.26346652052679, + 13.313466520526788, + 13.363466520526789, + 13.41346652052679, + 13.46346652052679, + 13.51346652052679, + 13.563466520526788, + 13.613466520526789, + 13.66346652052679, + 13.71346652052679, + 13.76346652052679, + 13.813466520526788, + 13.863466520526789, + 13.91346652052679, + 13.96346652052679, + 14.01346652052679, + 14.063466520526788, + 14.113466520526789, + 14.16346652052679, + 14.21346652052679, + 14.26346652052679, + 14.313466520526788, + 14.363466520526789, + 14.41346652052679, + 14.46346652052679, + 14.51346652052679, + 14.563466520526788, + 14.613466520526789, + 14.66346652052679, + 14.71346652052679, + 14.76346652052679, + 14.813466520526788, + 14.863466520526789, + 14.91346652052679, + 14.96346652052679, + 15.01346652052679, + 15.063466520526788, + 15.113466520526789, + 15.16346652052679, + 15.21346652052679, + 15.26346652052679, + 15.313466520526788, + 15.363466520526789, + 15.41346652052679, + 15.46346652052679, + 15.51346652052679, + 15.563466520526788, + 15.613466520526789, + 15.66346652052679, + 15.71346652052679, + 15.76346652052679, + 15.813466520526788, + 15.863466520526789, + 15.91346652052679, + 15.96346652052679, + 16.01346652052679, + 16.063466520526788, + 16.11346652052679, + 16.16346652052679, + 16.21346652052679, + 16.26346652052679, + 16.313466520526788, + 16.36346652052679, + 16.41346652052679, + 16.46346652052679, + 16.51346652052679, + 16.563466520526788, + 16.61346652052679, + 16.66346652052679, + 16.71346652052679, + 16.76346652052679, + 16.813466520526788, + 16.86346652052679, + 16.91346652052679, + 16.96346652052679, + 17.01346652052679, + 17.063466520526788, + 17.11346652052679, + 17.16346652052679, + 17.21346652052679, + 17.26346652052679, + 17.313466520526788, + 17.36346652052679, + 17.41346652052679, + 17.46346652052679, + 17.51346652052679, + 17.563466520526788, + 17.61346652052679, + 17.66346652052679, + 17.71346652052679, + 17.76346652052679, + 17.813466520526788, + 17.86346652052679, + 17.91346652052679, + 17.96346652052679, + 18.01346652052679, + 18.063466520526788, + 18.11346652052679, + 18.16346652052679, + 18.21346652052679, + 18.26346652052679, + 18.313466520526788, + 18.36346652052679, + 18.41346652052679, + 18.46346652052679, + 18.51346652052679, + 18.563466520526788, + 18.61346652052679, + 18.66346652052679, + 18.71346652052679, + 18.76346652052679, + 18.813466520526788, + 18.86346652052679, + 18.91346652052679, + 18.96346652052679, + 19.01346652052679, + 19.063466520526788, + 19.11346652052679, + 19.16346652052679, + 19.21346652052679, + 19.26346652052679, + 19.313466520526788, + 19.36346652052679, + 19.41346652052679, + 19.46346652052679, + 19.51346652052679, + 19.563466520526788, + 19.61346652052679, + 19.66346652052679, + 19.71346652052679, + 19.76346652052679, + 19.813466520526788, + 19.86346652052679, + 19.91346652052679, + 19.96346652052679, + 20.01346652052679, + 20.063466520526788, + 20.11346652052679, + 20.16346652052679, + 20.21346652052679, + 20.26346652052679, + 20.313466520526788, + 20.36346652052679, + 20.41346652052679, + 20.46346652052679, + 20.51346652052679, + 20.563466520526788, + 20.61346652052679, + 20.66346652052679, + 20.71346652052679, + 20.76346652052679, + 20.813466520526788, + 20.86346652052679, + 20.91346652052679, + 20.96346652052679, + 21.01346652052679, + 21.063466520526788, + 21.11346652052679, + 21.16346652052679, + 21.21346652052679, + 21.26346652052679, + 21.313466520526788, + 21.36346652052679, + 21.41346652052679, + 21.46346652052679, + 21.51346652052679, + 21.563466520526788, + 21.61346652052679, + 21.66346652052679, + 21.71346652052679, + 21.76346652052679, + 21.813466520526788, + 21.86346652052679, + 21.91346652052679, + 21.96346652052679, + 22.01346652052679, + 22.063466520526788, + 22.11346652052679, + 22.16346652052679, + 22.21346652052679, + 22.26346652052679, + 22.313466520526788, + 22.36346652052679, + 22.41346652052679, + 22.46346652052679, + 22.51346652052679, + 22.563466520526788, + 22.61346652052679, + 22.66346652052679, + 22.71346652052679, + 22.76346652052679, + 22.813466520526788, + 22.86346652052679, + 22.91346652052679, + 22.96346652052679, + 23.01346652052679, + 23.063466520526788, + 23.11346652052679, + 23.16346652052679, + 23.21346652052679, + 23.26346652052679, + 23.313466520526788, + 23.36346652052679, + 23.41346652052679, + 23.46346652052679, + 23.51346652052679, + 23.563466520526788, + 23.61346652052679, + 23.66346652052679, + 23.71346652052679, + 23.76346652052679, + 23.813466520526788, + 23.86346652052679, + 23.91346652052679, + 23.96346652052679, + 24.01346652052679, + 24.063466520526788, + 24.11346652052679, + 24.16346652052679, + 24.21346652052679, + 24.26346652052679, + 24.313466520526788, + 24.36346652052679, + 24.41346652052679, + 24.46346652052679, + 24.51346652052679, + 24.563466520526788, + 24.61346652052679, + 24.66346652052679, + 24.71346652052679, + 24.76346652052679, + 24.813466520526788, + 24.86346652052679, + 24.91346652052679, + 24.96346652052679, + 25.01346652052679, + 25.063466520526788, + 25.11346652052679, + 25.16346652052679, + 25.21346652052679, + 25.26346652052679, + 25.313466520526788, + 25.36346652052679, + 25.41346652052679, + 25.46346652052679, + 25.51346652052679, + 25.563466520526788, + 25.613466520526792, + 25.66346652052679, + 25.713466520526786, + 25.76346652052679, + 25.813466520526788, + 25.863466520526792, + 25.91346652052679, + 25.963466520526786, + 26.01346652052679, + 26.063466520526788, + 26.113466520526792, + 26.16346652052679, + 26.213466520526786, + 26.26346652052679, + 26.313466520526788, + 26.363466520526792, + 26.41346652052679, + 26.463466520526786, + 26.51346652052679, + 26.563466520526788, + 26.613466520526792, + 26.66346652052679, + 26.713466520526786, + 26.76346652052679, + 26.813466520526788, + 26.863466520526792, + 26.91346652052679, + 26.963466520526786, + 27.01346652052679, + 27.063466520526788, + 27.113466520526792, + 27.16346652052679, + 27.213466520526786, + 27.26346652052679, + 27.313466520526788, + 27.363466520526792, + 27.41346652052679, + 27.463466520526786, + 27.51346652052679, + 27.563466520526788, + 27.613466520526792, + 27.66346652052679, + 27.713466520526786, + 27.76346652052679, + 27.813466520526788, + 27.863466520526792, + 27.91346652052679, + 27.963466520526786, + 28.01346652052679, + 28.063466520526788, + 28.113466520526792, + 28.16346652052679, + 28.213466520526786, + 28.26346652052679, + 28.313466520526788, + 28.363466520526792, + 28.41346652052679, + 28.463466520526786, + 28.51346652052679, + 28.563466520526788, + 28.613466520526792, + 28.66346652052679, + 28.713466520526786, + 28.76346652052679, + 28.813466520526788, + 28.863466520526792, + 28.91346652052679, + 28.963466520526786, + 29.01346652052679, + 29.063466520526788, + 29.113466520526792, + 29.16346652052679, + 29.213466520526786, + 29.26346652052679, + 29.313466520526788, + 29.363466520526792, + 29.41346652052679, + 29.463466520526786, + 29.51346652052679, + 29.563466520526788, + 29.613466520526792, + 29.66346652052679, + 29.713466520526786, + 29.76346652052679, + 29.813466520526788, + 29.863466520526792, + 29.91346652052679, + 29.963466520526786, + 30.01346652052679, + 30.063466520526788, + 30.113466520526792, + 30.16346652052679, + 30.213466520526786, + 30.26346652052679, + 30.313466520526788, + 30.363466520526792, + 30.41346652052679, + 30.463466520526786, + 30.51346652052679, + 30.563466520526788, + 30.613466520526792, + 30.66346652052679, + 30.713466520526786, + 30.76346652052679, + 30.813466520526788, + 30.863466520526792, + 30.91346652052679, + 30.963466520526786, + 31.01346652052679, + 31.063466520526788, + 31.113466520526792, + 31.16346652052679, + 31.213466520526786, + 31.26346652052679, + 31.313466520526788, + 31.363466520526792, + 31.41346652052679, + 31.463466520526786, + 31.51346652052679, + 31.563466520526788, + 31.613466520526792, + 31.66346652052679, + 31.713466520526786, + 31.76346652052679, + 31.813466520526788, + 31.863466520526792, + 31.91346652052679, + 31.963466520526794, + 32.01346652052679, + 32.06346652052679, + 32.11346652052679, + 32.16346652052679, + 32.213466520526794, + 32.26346652052679, + 32.31346652052679, + 32.36346652052679, + 32.41346652052679, + 32.463466520526794, + 32.51346652052679, + 32.56346652052679, + 32.61346652052679, + 32.66346652052679, + 32.713466520526794, + 32.76346652052679, + 32.81346652052679, + 32.86346652052679, + 32.91346652052679, + 32.963466520526794, + 33.01346652052679, + 33.06346652052679, + 33.11346652052679, + 33.16346652052679, + 33.213466520526794, + 33.26346652052679, + 33.31346652052679, + 33.36346652052679, + 33.41346652052679, + 33.463466520526794, + 33.51346652052679, + 33.56346652052679, + 33.61346652052679, + 33.66346652052679, + 33.713466520526794, + 33.76346652052679, + 33.81346652052679, + 33.86346652052679, + 33.91346652052679, + 33.963466520526794, + 34.01346652052679, + 34.06346652052679, + 34.11346652052679, + 34.16346652052679, + 34.213466520526794, + 34.26346652052679, + 34.31346652052679, + 34.36346652052679, + 34.41346652052679, + 34.463466520526794, + 34.51346652052679, + 34.56346652052679, + 34.61346652052679, + 34.66346652052679, + 34.713466520526794, + 34.76346652052679, + 34.81346652052679, + 34.86346652052679, + 34.91346652052679, + 34.963466520526794, + 35.01346652052679, + 35.06346652052679, + 35.11346652052679, + 35.16346652052679, + 35.213466520526794, + 35.26346652052679, + 35.31346652052679, + 35.36346652052679, + 35.41346652052679, + 35.463466520526794, + 35.51346652052679, + 35.56346652052679, + 35.61346652052679, + 35.66346652052679, + 35.713466520526794, + 35.76346652052679, + 35.81346652052679, + 35.86346652052679, + 35.91346652052679, + 35.963466520526794, + 36.01346652052679, + 36.06346652052679, + 36.11346652052679, + 36.16346652052679, + 36.213466520526794, + 36.26346652052679, + 36.31346652052679, + 36.36346652052679, + 36.41346652052679, + 36.463466520526794, + 36.51346652052679, + 36.56346652052679, + 36.61346652052679, + 36.66346652052679, + 36.713466520526794, + 36.76346652052679, + 36.81346652052679, + 36.86346652052679, + 36.91346652052679, + 36.963466520526794, + 37.01346652052679, + 37.06346652052679, + 37.11346652052679, + 37.16346652052679, + 37.213466520526794, + 37.26346652052679, + 37.31346652052679, + 37.36346652052679, + 37.41346652052679, + 37.463466520526794, + 37.51346652052679, + 37.56346652052679, + 37.61346652052679, + 37.66346652052679, + 37.713466520526794, + 37.76346652052679, + 37.81346652052679, + 37.86346652052679, + 37.91346652052679, + 37.963466520526794, + 38.01346652052679, + 38.06346652052679, + 38.11346652052679, + 38.16346652052679, + 38.213466520526794, + 38.26346652052679, + 38.31346652052679, + 38.36346652052679, + 38.41346652052679 + ] + }, + { + "angle": -90.0, + "x_start": 25.0, + "x_delta": 17.000000000000004, + "n_frames": 3400, + "n_rows": 841, + "y_positions": [ + -5.0, + -4.95, + -4.9, + -4.85, + -4.8, + -4.75, + -4.7, + -4.65, + -4.6, + -4.55, + -4.5, + -4.45, + -4.4, + -4.35, + -4.3, + -4.25, + -4.2, + -4.15, + -4.1, + -4.05, + -4.0, + -3.95, + -3.9, + -3.8499999999999996, + -3.8, + -3.75, + -3.7, + -3.65, + -3.5999999999999996, + -3.55, + -3.5, + -3.45, + -3.4, + -3.3499999999999996, + -3.3, + -3.25, + -3.2, + -3.15, + -3.0999999999999996, + -3.05, + -3.0, + -2.9499999999999997, + -2.9, + -2.85, + -2.8, + -2.75, + -2.6999999999999997, + -2.65, + -2.5999999999999996, + -2.55, + -2.5, + -2.4499999999999997, + -2.4, + -2.3499999999999996, + -2.3, + -2.25, + -2.1999999999999997, + -2.15, + -2.0999999999999996, + -2.05, + -2.0, + -1.9499999999999997, + -1.9, + -1.8499999999999996, + -1.7999999999999998, + -1.75, + -1.6999999999999997, + -1.65, + -1.5999999999999996, + -1.5499999999999998, + -1.5, + -1.4499999999999997, + -1.4, + -1.3499999999999996, + -1.2999999999999998, + -1.25, + -1.1999999999999997, + -1.15, + -1.0999999999999996, + -1.0499999999999998, + -1.0, + -0.9500000000000002, + -0.8999999999999995, + -0.8499999999999996, + -0.7999999999999998, + -0.75, + -0.7000000000000002, + -0.6499999999999995, + -0.5999999999999996, + -0.5499999999999998, + -0.5, + -0.4500000000000002, + -0.39999999999999947, + -0.34999999999999964, + -0.2999999999999998, + -0.25, + -0.1999999999999993, + -0.14999999999999947, + -0.09999999999999964, + -0.04999999999999982, + 0.0, + 0.05000000000000071, + 0.10000000000000053, + 0.15000000000000036, + 0.20000000000000018, + 0.25, + 0.3000000000000007, + 0.35000000000000053, + 0.40000000000000036, + 0.4500000000000002, + 0.5, + 0.5500000000000007, + 0.6000000000000005, + 0.6500000000000004, + 0.7000000000000002, + 0.75, + 0.8000000000000007, + 0.8500000000000005, + 0.9000000000000004, + 0.9500000000000002, + 1.0, + 1.0500000000000007, + 1.1000000000000005, + 1.1500000000000004, + 1.2000000000000002, + 1.25, + 1.3000000000000007, + 1.3500000000000005, + 1.4000000000000004, + 1.4500000000000002, + 1.5, + 1.5500000000000007, + 1.6000000000000005, + 1.6500000000000004, + 1.7000000000000002, + 1.75, + 1.8000000000000007, + 1.8500000000000005, + 1.9000000000000004, + 1.9500000000000002, + 2.0, + 2.0500000000000007, + 2.1000000000000005, + 2.1500000000000004, + 2.2, + 2.25, + 2.3000000000000007, + 2.3500000000000005, + 2.4000000000000004, + 2.45, + 2.5, + 2.5500000000000007, + 2.6000000000000005, + 2.6500000000000004, + 2.7, + 2.75, + 2.8000000000000007, + 2.8500000000000005, + 2.9000000000000004, + 2.95, + 3.0, + 3.0500000000000007, + 3.0999999999999996, + 3.1500000000000004, + 3.200000000000001, + 3.25, + 3.3000000000000007, + 3.3499999999999996, + 3.4000000000000004, + 3.450000000000001, + 3.5, + 3.5500000000000007, + 3.5999999999999996, + 3.6500000000000004, + 3.700000000000001, + 3.75, + 3.8000000000000007, + 3.8499999999999996, + 3.9000000000000004, + 3.950000000000001, + 4.0, + 4.050000000000001, + 4.1, + 4.15, + 4.200000000000001, + 4.25, + 4.300000000000001, + 4.35, + 4.4, + 4.450000000000001, + 4.5, + 4.550000000000001, + 4.600000000000001, + 4.65, + 4.700000000000001, + 4.75, + 4.800000000000001, + 4.850000000000001, + 4.9, + 4.950000000000001, + 5.0, + 5.050000000000001, + 5.100000000000001, + 5.15, + 5.200000000000001, + 5.25, + 5.300000000000001, + 5.350000000000001, + 5.4, + 5.450000000000001, + 5.5, + 5.550000000000001, + 5.600000000000001, + 5.65, + 5.700000000000001, + 5.75, + 5.800000000000001, + 5.850000000000001, + 5.9, + 5.950000000000001, + 6.0, + 6.050000000000001, + 6.100000000000001, + 6.15, + 6.200000000000001, + 6.25, + 6.300000000000001, + 6.350000000000001, + 6.4, + 6.450000000000001, + 6.5, + 6.550000000000001, + 6.600000000000001, + 6.65, + 6.700000000000001, + 6.75, + 6.800000000000001, + 6.850000000000001, + 6.9, + 6.950000000000001, + 7.0, + 7.050000000000001, + 7.100000000000001, + 7.15, + 7.200000000000001, + 7.25, + 7.300000000000001, + 7.350000000000001, + 7.4, + 7.450000000000001, + 7.5, + 7.550000000000001, + 7.600000000000001, + 7.65, + 7.700000000000001, + 7.75, + 7.800000000000001, + 7.850000000000001, + 7.9, + 7.950000000000001, + 8.0, + 8.05, + 8.100000000000001, + 8.15, + 8.200000000000001, + 8.25, + 8.3, + 8.350000000000001, + 8.4, + 8.450000000000001, + 8.5, + 8.55, + 8.600000000000001, + 8.65, + 8.700000000000001, + 8.75, + 8.8, + 8.850000000000001, + 8.9, + 8.950000000000001, + 9.0, + 9.05, + 9.100000000000001, + 9.15, + 9.200000000000001, + 9.25, + 9.3, + 9.350000000000001, + 9.4, + 9.450000000000001, + 9.5, + 9.55, + 9.600000000000001, + 9.65, + 9.700000000000001, + 9.75, + 9.8, + 9.850000000000001, + 9.9, + 9.950000000000001, + 10.0, + 10.05, + 10.100000000000001, + 10.15, + 10.200000000000001, + 10.25, + 10.3, + 10.350000000000001, + 10.4, + 10.450000000000001, + 10.5, + 10.55, + 10.600000000000001, + 10.65, + 10.700000000000001, + 10.75, + 10.8, + 10.850000000000001, + 10.9, + 10.950000000000001, + 11.0, + 11.05, + 11.100000000000001, + 11.150000000000002, + 11.2, + 11.25, + 11.3, + 11.350000000000001, + 11.400000000000002, + 11.45, + 11.5, + 11.55, + 11.600000000000001, + 11.650000000000002, + 11.7, + 11.75, + 11.8, + 11.850000000000001, + 11.900000000000002, + 11.95, + 12.0, + 12.05, + 12.100000000000001, + 12.150000000000002, + 12.2, + 12.25, + 12.3, + 12.350000000000001, + 12.400000000000002, + 12.45, + 12.5, + 12.55, + 12.600000000000001, + 12.650000000000002, + 12.7, + 12.75, + 12.8, + 12.850000000000001, + 12.900000000000002, + 12.95, + 13.0, + 13.05, + 13.100000000000001, + 13.150000000000002, + 13.2, + 13.25, + 13.3, + 13.350000000000001, + 13.400000000000002, + 13.45, + 13.5, + 13.55, + 13.600000000000001, + 13.650000000000002, + 13.7, + 13.75, + 13.8, + 13.850000000000001, + 13.900000000000002, + 13.95, + 14.0, + 14.05, + 14.100000000000001, + 14.150000000000002, + 14.200000000000003, + 14.25, + 14.3, + 14.350000000000001, + 14.400000000000002, + 14.450000000000003, + 14.5, + 14.55, + 14.600000000000001, + 14.650000000000002, + 14.700000000000003, + 14.75, + 14.8, + 14.850000000000001, + 14.900000000000002, + 14.950000000000003, + 15.0, + 15.05, + 15.100000000000001, + 15.150000000000002, + 15.200000000000003, + 15.25, + 15.3, + 15.350000000000001, + 15.400000000000002, + 15.450000000000003, + 15.5, + 15.55, + 15.600000000000001, + 15.650000000000002, + 15.700000000000003, + 15.75, + 15.8, + 15.850000000000001, + 15.900000000000002, + 15.950000000000003, + 16.0, + 16.05, + 16.1, + 16.150000000000002, + 16.200000000000003, + 16.25, + 16.3, + 16.35, + 16.400000000000002, + 16.450000000000003, + 16.5, + 16.55, + 16.6, + 16.650000000000002, + 16.700000000000003, + 16.75, + 16.8, + 16.85, + 16.900000000000002, + 16.950000000000003, + 17.0, + 17.05, + 17.1, + 17.150000000000002, + 17.200000000000003, + 17.25, + 17.3, + 17.35, + 17.400000000000002, + 17.450000000000003, + 17.5, + 17.55, + 17.6, + 17.650000000000002, + 17.700000000000003, + 17.75, + 17.8, + 17.85, + 17.900000000000002, + 17.950000000000003, + 18.0, + 18.05, + 18.1, + 18.150000000000002, + 18.200000000000003, + 18.25, + 18.3, + 18.35, + 18.400000000000002, + 18.450000000000003, + 18.5, + 18.55, + 18.6, + 18.650000000000002, + 18.700000000000003, + 18.75, + 18.8, + 18.85, + 18.900000000000002, + 18.950000000000003, + 19.0, + 19.05, + 19.1, + 19.150000000000002, + 19.200000000000003, + 19.25, + 19.3, + 19.35, + 19.400000000000002, + 19.450000000000003, + 19.5, + 19.55, + 19.6, + 19.650000000000002, + 19.700000000000003, + 19.75, + 19.8, + 19.85, + 19.900000000000002, + 19.950000000000003, + 20.0, + 20.05, + 20.1, + 20.150000000000002, + 20.200000000000003, + 20.25, + 20.3, + 20.35, + 20.400000000000002, + 20.450000000000003, + 20.5, + 20.55, + 20.6, + 20.650000000000002, + 20.700000000000003, + 20.75, + 20.8, + 20.85, + 20.900000000000002, + 20.950000000000003, + 21.0, + 21.05, + 21.1, + 21.150000000000002, + 21.200000000000003, + 21.25, + 21.3, + 21.35, + 21.400000000000002, + 21.450000000000003, + 21.5, + 21.55, + 21.6, + 21.650000000000002, + 21.700000000000003, + 21.75, + 21.8, + 21.85, + 21.900000000000002, + 21.950000000000003, + 22.0, + 22.05, + 22.1, + 22.150000000000002, + 22.200000000000003, + 22.25, + 22.3, + 22.35, + 22.400000000000002, + 22.450000000000003, + 22.5, + 22.55, + 22.6, + 22.650000000000002, + 22.700000000000003, + 22.75, + 22.8, + 22.85, + 22.900000000000002, + 22.950000000000003, + 23.0, + 23.05, + 23.1, + 23.150000000000002, + 23.200000000000003, + 23.25, + 23.3, + 23.35, + 23.400000000000002, + 23.450000000000003, + 23.5, + 23.55, + 23.6, + 23.650000000000002, + 23.700000000000003, + 23.75, + 23.8, + 23.85, + 23.900000000000002, + 23.950000000000003, + 24.0, + 24.05, + 24.1, + 24.150000000000002, + 24.200000000000003, + 24.25, + 24.3, + 24.35, + 24.400000000000002, + 24.450000000000003, + 24.5, + 24.55, + 24.6, + 24.650000000000002, + 24.700000000000003, + 24.75, + 24.8, + 24.85, + 24.900000000000002, + 24.950000000000003, + 25.0, + 25.05, + 25.1, + 25.150000000000002, + 25.200000000000003, + 25.25, + 25.3, + 25.35, + 25.400000000000002, + 25.450000000000003, + 25.5, + 25.55, + 25.6, + 25.650000000000002, + 25.700000000000003, + 25.75, + 25.8, + 25.85, + 25.900000000000002, + 25.950000000000003, + 26.0, + 26.05, + 26.1, + 26.150000000000002, + 26.200000000000003, + 26.25, + 26.3, + 26.35, + 26.400000000000002, + 26.450000000000003, + 26.5, + 26.55, + 26.6, + 26.650000000000002, + 26.700000000000003, + 26.75, + 26.8, + 26.85, + 26.900000000000002, + 26.950000000000003, + 27.0, + 27.050000000000004, + 27.1, + 27.15, + 27.200000000000003, + 27.25, + 27.300000000000004, + 27.35, + 27.4, + 27.450000000000003, + 27.5, + 27.550000000000004, + 27.6, + 27.65, + 27.700000000000003, + 27.75, + 27.800000000000004, + 27.85, + 27.9, + 27.950000000000003, + 28.0, + 28.050000000000004, + 28.1, + 28.15, + 28.200000000000003, + 28.25, + 28.300000000000004, + 28.35, + 28.4, + 28.450000000000003, + 28.5, + 28.550000000000004, + 28.6, + 28.65, + 28.700000000000003, + 28.75, + 28.800000000000004, + 28.85, + 28.9, + 28.950000000000003, + 29.0, + 29.050000000000004, + 29.1, + 29.15, + 29.200000000000003, + 29.25, + 29.300000000000004, + 29.35, + 29.4, + 29.450000000000003, + 29.5, + 29.550000000000004, + 29.6, + 29.65, + 29.700000000000003, + 29.75, + 29.800000000000004, + 29.85, + 29.9, + 29.950000000000003, + 30.0, + 30.050000000000004, + 30.1, + 30.15, + 30.200000000000003, + 30.25, + 30.300000000000004, + 30.35, + 30.4, + 30.450000000000003, + 30.5, + 30.550000000000004, + 30.6, + 30.65, + 30.700000000000003, + 30.75, + 30.800000000000004, + 30.85, + 30.9, + 30.950000000000003, + 31.0, + 31.050000000000004, + 31.1, + 31.15, + 31.200000000000003, + 31.25, + 31.300000000000004, + 31.35, + 31.4, + 31.450000000000003, + 31.5, + 31.550000000000004, + 31.6, + 31.65, + 31.700000000000003, + 31.75, + 31.800000000000004, + 31.85, + 31.9, + 31.950000000000003, + 32.0, + 32.050000000000004, + 32.1, + 32.15, + 32.2, + 32.25, + 32.300000000000004, + 32.35, + 32.4, + 32.45, + 32.5, + 32.550000000000004, + 32.6, + 32.65, + 32.7, + 32.75, + 32.800000000000004, + 32.85, + 32.9, + 32.95, + 33.0, + 33.050000000000004, + 33.1, + 33.15, + 33.2, + 33.25, + 33.300000000000004, + 33.35, + 33.400000000000006, + 33.45, + 33.5, + 33.550000000000004, + 33.6, + 33.650000000000006, + 33.7, + 33.75, + 33.800000000000004, + 33.85, + 33.900000000000006, + 33.95, + 34.0, + 34.050000000000004, + 34.1, + 34.150000000000006, + 34.2, + 34.25, + 34.300000000000004, + 34.35, + 34.400000000000006, + 34.45, + 34.5, + 34.550000000000004, + 34.6, + 34.650000000000006, + 34.7, + 34.75, + 34.800000000000004, + 34.85, + 34.900000000000006, + 34.95, + 35.0, + 35.050000000000004, + 35.1, + 35.150000000000006, + 35.2, + 35.25, + 35.300000000000004, + 35.35, + 35.400000000000006, + 35.45, + 35.5, + 35.550000000000004, + 35.6, + 35.650000000000006, + 35.7, + 35.75, + 35.800000000000004, + 35.85, + 35.900000000000006, + 35.95, + 36.0, + 36.050000000000004, + 36.1, + 36.150000000000006, + 36.2, + 36.25, + 36.300000000000004, + 36.35, + 36.400000000000006, + 36.45, + 36.5, + 36.550000000000004, + 36.6, + 36.650000000000006, + 36.7, + 36.75, + 36.800000000000004, + 36.85, + 36.900000000000006, + 36.95, + 37.0 + ] + }, + { + "angle": -120.0, + "x_start": 15.638784067832276, + "x_delta": 35.72243186433545, + "n_frames": 7144, + "n_rows": 898, + "y_positions": [ + -6.436533479473212, + -6.386533479473212, + -6.336533479473212, + -6.286533479473212, + -6.236533479473212, + -6.186533479473212, + -6.136533479473212, + -6.086533479473212, + -6.036533479473212, + -5.986533479473212, + -5.936533479473212, + -5.886533479473212, + -5.836533479473212, + -5.786533479473212, + -5.736533479473212, + -5.686533479473212, + -5.636533479473212, + -5.586533479473212, + -5.536533479473212, + -5.486533479473212, + -5.436533479473212, + -5.386533479473212, + -5.336533479473212, + -5.286533479473212, + -5.236533479473212, + -5.186533479473212, + -5.136533479473212, + -5.086533479473212, + -5.036533479473212, + -4.986533479473212, + -4.936533479473212, + -4.886533479473212, + -4.836533479473212, + -4.786533479473212, + -4.736533479473212, + -4.686533479473212, + -4.636533479473212, + -4.586533479473212, + -4.536533479473212, + -4.486533479473212, + -4.436533479473212, + -4.386533479473211, + -4.336533479473212, + -4.286533479473212, + -4.236533479473212, + -4.186533479473212, + -4.136533479473211, + -4.086533479473212, + -4.036533479473212, + -3.986533479473212, + -3.936533479473212, + -3.886533479473212, + -3.836533479473212, + -3.7865334794732117, + -3.736533479473212, + -3.686533479473212, + -3.636533479473212, + -3.586533479473212, + -3.5365334794732117, + -3.486533479473212, + -3.436533479473212, + -3.386533479473212, + -3.336533479473212, + -3.2865334794732117, + -3.236533479473212, + -3.186533479473212, + -3.136533479473212, + -3.086533479473212, + -3.0365334794732117, + -2.986533479473212, + -2.936533479473212, + -2.886533479473212, + -2.836533479473212, + -2.7865334794732117, + -2.736533479473212, + -2.686533479473212, + -2.636533479473212, + -2.586533479473212, + -2.5365334794732117, + -2.486533479473212, + -2.436533479473212, + -2.3865334794732123, + -2.3365334794732115, + -2.2865334794732117, + -2.236533479473212, + -2.186533479473212, + -2.1365334794732123, + -2.0865334794732115, + -2.0365334794732117, + -1.986533479473212, + -1.936533479473212, + -1.8865334794732123, + -1.8365334794732115, + -1.7865334794732117, + -1.736533479473212, + -1.686533479473212, + -1.6365334794732114, + -1.5865334794732115, + -1.5365334794732117, + -1.486533479473212, + -1.436533479473212, + -1.3865334794732114, + -1.3365334794732115, + -1.2865334794732117, + -1.236533479473212, + -1.186533479473212, + -1.1365334794732114, + -1.0865334794732115, + -1.0365334794732117, + -0.9865334794732119, + -0.9365334794732121, + -0.8865334794732114, + -0.8365334794732115, + -0.7865334794732117, + -0.7365334794732119, + -0.6865334794732121, + -0.6365334794732114, + -0.5865334794732115, + -0.5365334794732117, + -0.4865334794732119, + -0.4365334794732121, + -0.38653347947321137, + -0.33653347947321155, + -0.2865334794732117, + -0.2365334794732119, + -0.18653347947321208, + -0.13653347947321137, + -0.08653347947321155, + -0.03653347947321173, + 0.013466520526788095, + 0.06346652052678792, + 0.11346652052678863, + 0.16346652052678845, + 0.21346652052678827, + 0.2634665205267881, + 0.3134665205267879, + 0.36346652052678863, + 0.41346652052678845, + 0.4634665205267883, + 0.5134665205267881, + 0.5634665205267879, + 0.6134665205267886, + 0.6634665205267885, + 0.7134665205267883, + 0.7634665205267881, + 0.8134665205267879, + 0.8634665205267886, + 0.9134665205267885, + 0.9634665205267883, + 1.013466520526788, + 1.063466520526788, + 1.1134665205267886, + 1.1634665205267885, + 1.2134665205267883, + 1.263466520526788, + 1.313466520526788, + 1.3634665205267886, + 1.4134665205267885, + 1.4634665205267883, + 1.513466520526788, + 1.563466520526788, + 1.6134665205267886, + 1.6634665205267876, + 1.7134665205267883, + 1.763466520526789, + 1.813466520526788, + 1.8634665205267886, + 1.9134665205267876, + 1.9634665205267883, + 2.013466520526789, + 2.063466520526788, + 2.1134665205267886, + 2.1634665205267876, + 2.2134665205267883, + 2.263466520526789, + 2.313466520526788, + 2.3634665205267886, + 2.4134665205267876, + 2.4634665205267883, + 2.513466520526789, + 2.563466520526788, + 2.6134665205267886, + 2.6634665205267876, + 2.7134665205267883, + 2.763466520526789, + 2.813466520526788, + 2.8634665205267886, + 2.9134665205267876, + 2.9634665205267883, + 3.013466520526789, + 3.063466520526788, + 3.1134665205267886, + 3.1634665205267893, + 3.2134665205267883, + 3.263466520526789, + 3.313466520526788, + 3.3634665205267886, + 3.4134665205267893, + 3.4634665205267883, + 3.513466520526789, + 3.563466520526788, + 3.6134665205267886, + 3.6634665205267893, + 3.7134665205267883, + 3.763466520526789, + 3.813466520526788, + 3.8634665205267886, + 3.9134665205267893, + 3.9634665205267883, + 4.013466520526789, + 4.063466520526788, + 4.113466520526789, + 4.163466520526789, + 4.213466520526788, + 4.263466520526789, + 4.313466520526788, + 4.363466520526789, + 4.413466520526789, + 4.463466520526788, + 4.513466520526789, + 4.563466520526788, + 4.613466520526789, + 4.663466520526789, + 4.713466520526788, + 4.763466520526789, + 4.813466520526788, + 4.863466520526789, + 4.913466520526789, + 4.963466520526788, + 5.013466520526789, + 5.063466520526788, + 5.113466520526789, + 5.163466520526789, + 5.213466520526788, + 5.263466520526789, + 5.313466520526788, + 5.363466520526789, + 5.413466520526789, + 5.463466520526788, + 5.513466520526789, + 5.563466520526788, + 5.613466520526789, + 5.663466520526789, + 5.713466520526788, + 5.763466520526789, + 5.813466520526788, + 5.863466520526789, + 5.913466520526789, + 5.963466520526788, + 6.013466520526789, + 6.063466520526788, + 6.113466520526789, + 6.163466520526789, + 6.213466520526788, + 6.263466520526789, + 6.313466520526788, + 6.363466520526789, + 6.413466520526789, + 6.463466520526788, + 6.513466520526789, + 6.563466520526788, + 6.613466520526789, + 6.663466520526789, + 6.713466520526788, + 6.763466520526789, + 6.813466520526788, + 6.863466520526789, + 6.913466520526789, + 6.963466520526788, + 7.013466520526789, + 7.063466520526788, + 7.113466520526789, + 7.163466520526789, + 7.213466520526788, + 7.263466520526789, + 7.313466520526788, + 7.363466520526789, + 7.413466520526789, + 7.463466520526788, + 7.513466520526789, + 7.563466520526788, + 7.613466520526789, + 7.663466520526789, + 7.713466520526788, + 7.763466520526789, + 7.813466520526788, + 7.863466520526789, + 7.913466520526789, + 7.963466520526788, + 8.013466520526789, + 8.063466520526788, + 8.113466520526789, + 8.16346652052679, + 8.213466520526788, + 8.263466520526789, + 8.313466520526788, + 8.363466520526789, + 8.41346652052679, + 8.463466520526788, + 8.513466520526789, + 8.563466520526788, + 8.613466520526789, + 8.66346652052679, + 8.713466520526788, + 8.763466520526789, + 8.813466520526788, + 8.863466520526789, + 8.91346652052679, + 8.963466520526788, + 9.013466520526789, + 9.063466520526788, + 9.113466520526789, + 9.16346652052679, + 9.213466520526788, + 9.263466520526789, + 9.313466520526788, + 9.363466520526789, + 9.41346652052679, + 9.463466520526788, + 9.513466520526789, + 9.563466520526788, + 9.613466520526789, + 9.66346652052679, + 9.71346652052679, + 9.763466520526787, + 9.813466520526788, + 9.863466520526789, + 9.91346652052679, + 9.96346652052679, + 10.013466520526787, + 10.063466520526788, + 10.113466520526789, + 10.16346652052679, + 10.21346652052679, + 10.263466520526787, + 10.313466520526788, + 10.363466520526789, + 10.41346652052679, + 10.46346652052679, + 10.513466520526787, + 10.563466520526788, + 10.613466520526789, + 10.66346652052679, + 10.71346652052679, + 10.763466520526787, + 10.813466520526788, + 10.863466520526789, + 10.91346652052679, + 10.96346652052679, + 11.013466520526787, + 11.063466520526788, + 11.113466520526789, + 11.16346652052679, + 11.21346652052679, + 11.263466520526787, + 11.313466520526788, + 11.363466520526789, + 11.41346652052679, + 11.46346652052679, + 11.513466520526787, + 11.563466520526788, + 11.613466520526789, + 11.66346652052679, + 11.71346652052679, + 11.763466520526787, + 11.813466520526788, + 11.863466520526789, + 11.91346652052679, + 11.96346652052679, + 12.013466520526787, + 12.063466520526788, + 12.113466520526789, + 12.16346652052679, + 12.21346652052679, + 12.263466520526787, + 12.313466520526788, + 12.363466520526789, + 12.41346652052679, + 12.46346652052679, + 12.513466520526787, + 12.563466520526788, + 12.613466520526789, + 12.66346652052679, + 12.71346652052679, + 12.76346652052679, + 12.813466520526788, + 12.863466520526789, + 12.91346652052679, + 12.96346652052679, + 13.01346652052679, + 13.063466520526788, + 13.113466520526789, + 13.16346652052679, + 13.21346652052679, + 13.26346652052679, + 13.313466520526788, + 13.363466520526789, + 13.41346652052679, + 13.46346652052679, + 13.51346652052679, + 13.563466520526788, + 13.613466520526789, + 13.66346652052679, + 13.71346652052679, + 13.76346652052679, + 13.813466520526788, + 13.863466520526789, + 13.91346652052679, + 13.96346652052679, + 14.01346652052679, + 14.063466520526788, + 14.113466520526789, + 14.16346652052679, + 14.21346652052679, + 14.26346652052679, + 14.313466520526788, + 14.363466520526789, + 14.41346652052679, + 14.46346652052679, + 14.51346652052679, + 14.563466520526788, + 14.613466520526789, + 14.66346652052679, + 14.71346652052679, + 14.76346652052679, + 14.813466520526788, + 14.863466520526789, + 14.91346652052679, + 14.96346652052679, + 15.01346652052679, + 15.063466520526788, + 15.113466520526789, + 15.16346652052679, + 15.21346652052679, + 15.26346652052679, + 15.313466520526788, + 15.363466520526789, + 15.41346652052679, + 15.46346652052679, + 15.51346652052679, + 15.563466520526788, + 15.613466520526789, + 15.66346652052679, + 15.71346652052679, + 15.76346652052679, + 15.813466520526788, + 15.863466520526789, + 15.91346652052679, + 15.96346652052679, + 16.01346652052679, + 16.063466520526788, + 16.11346652052679, + 16.16346652052679, + 16.21346652052679, + 16.26346652052679, + 16.313466520526788, + 16.36346652052679, + 16.41346652052679, + 16.46346652052679, + 16.51346652052679, + 16.563466520526788, + 16.61346652052679, + 16.66346652052679, + 16.71346652052679, + 16.76346652052679, + 16.813466520526788, + 16.86346652052679, + 16.91346652052679, + 16.96346652052679, + 17.01346652052679, + 17.063466520526788, + 17.11346652052679, + 17.16346652052679, + 17.21346652052679, + 17.26346652052679, + 17.313466520526788, + 17.36346652052679, + 17.41346652052679, + 17.46346652052679, + 17.51346652052679, + 17.563466520526788, + 17.61346652052679, + 17.66346652052679, + 17.71346652052679, + 17.76346652052679, + 17.813466520526788, + 17.86346652052679, + 17.91346652052679, + 17.96346652052679, + 18.01346652052679, + 18.063466520526788, + 18.11346652052679, + 18.16346652052679, + 18.21346652052679, + 18.26346652052679, + 18.313466520526788, + 18.36346652052679, + 18.41346652052679, + 18.46346652052679, + 18.51346652052679, + 18.563466520526788, + 18.61346652052679, + 18.66346652052679, + 18.71346652052679, + 18.76346652052679, + 18.813466520526788, + 18.86346652052679, + 18.91346652052679, + 18.96346652052679, + 19.01346652052679, + 19.063466520526788, + 19.11346652052679, + 19.16346652052679, + 19.21346652052679, + 19.26346652052679, + 19.313466520526788, + 19.36346652052679, + 19.41346652052679, + 19.46346652052679, + 19.51346652052679, + 19.563466520526788, + 19.61346652052679, + 19.66346652052679, + 19.71346652052679, + 19.76346652052679, + 19.813466520526788, + 19.86346652052679, + 19.91346652052679, + 19.96346652052679, + 20.01346652052679, + 20.063466520526788, + 20.11346652052679, + 20.16346652052679, + 20.21346652052679, + 20.26346652052679, + 20.313466520526788, + 20.36346652052679, + 20.41346652052679, + 20.46346652052679, + 20.51346652052679, + 20.563466520526788, + 20.61346652052679, + 20.66346652052679, + 20.71346652052679, + 20.76346652052679, + 20.813466520526788, + 20.86346652052679, + 20.91346652052679, + 20.96346652052679, + 21.01346652052679, + 21.063466520526788, + 21.11346652052679, + 21.16346652052679, + 21.21346652052679, + 21.26346652052679, + 21.313466520526788, + 21.36346652052679, + 21.41346652052679, + 21.46346652052679, + 21.51346652052679, + 21.563466520526788, + 21.61346652052679, + 21.66346652052679, + 21.71346652052679, + 21.76346652052679, + 21.813466520526788, + 21.86346652052679, + 21.91346652052679, + 21.96346652052679, + 22.01346652052679, + 22.063466520526788, + 22.11346652052679, + 22.16346652052679, + 22.21346652052679, + 22.26346652052679, + 22.313466520526788, + 22.36346652052679, + 22.41346652052679, + 22.46346652052679, + 22.51346652052679, + 22.563466520526788, + 22.61346652052679, + 22.66346652052679, + 22.71346652052679, + 22.76346652052679, + 22.813466520526788, + 22.86346652052679, + 22.91346652052679, + 22.96346652052679, + 23.01346652052679, + 23.063466520526788, + 23.11346652052679, + 23.16346652052679, + 23.21346652052679, + 23.26346652052679, + 23.313466520526788, + 23.36346652052679, + 23.41346652052679, + 23.46346652052679, + 23.51346652052679, + 23.563466520526788, + 23.61346652052679, + 23.66346652052679, + 23.71346652052679, + 23.76346652052679, + 23.813466520526788, + 23.86346652052679, + 23.91346652052679, + 23.96346652052679, + 24.01346652052679, + 24.063466520526788, + 24.11346652052679, + 24.16346652052679, + 24.21346652052679, + 24.26346652052679, + 24.313466520526788, + 24.36346652052679, + 24.41346652052679, + 24.46346652052679, + 24.51346652052679, + 24.563466520526788, + 24.61346652052679, + 24.66346652052679, + 24.71346652052679, + 24.76346652052679, + 24.813466520526788, + 24.86346652052679, + 24.91346652052679, + 24.96346652052679, + 25.01346652052679, + 25.063466520526788, + 25.11346652052679, + 25.16346652052679, + 25.21346652052679, + 25.26346652052679, + 25.313466520526788, + 25.36346652052679, + 25.41346652052679, + 25.46346652052679, + 25.51346652052679, + 25.563466520526788, + 25.613466520526792, + 25.66346652052679, + 25.713466520526786, + 25.76346652052679, + 25.813466520526788, + 25.863466520526792, + 25.91346652052679, + 25.963466520526786, + 26.01346652052679, + 26.063466520526788, + 26.113466520526792, + 26.16346652052679, + 26.213466520526786, + 26.26346652052679, + 26.313466520526788, + 26.363466520526792, + 26.41346652052679, + 26.463466520526786, + 26.51346652052679, + 26.563466520526788, + 26.613466520526792, + 26.66346652052679, + 26.713466520526786, + 26.76346652052679, + 26.813466520526788, + 26.863466520526792, + 26.91346652052679, + 26.963466520526786, + 27.01346652052679, + 27.063466520526788, + 27.113466520526792, + 27.16346652052679, + 27.213466520526786, + 27.26346652052679, + 27.313466520526788, + 27.363466520526792, + 27.41346652052679, + 27.463466520526786, + 27.51346652052679, + 27.563466520526788, + 27.613466520526792, + 27.66346652052679, + 27.713466520526786, + 27.76346652052679, + 27.813466520526788, + 27.863466520526792, + 27.91346652052679, + 27.963466520526786, + 28.01346652052679, + 28.063466520526788, + 28.113466520526792, + 28.16346652052679, + 28.213466520526786, + 28.26346652052679, + 28.313466520526788, + 28.363466520526792, + 28.41346652052679, + 28.463466520526786, + 28.51346652052679, + 28.563466520526788, + 28.613466520526792, + 28.66346652052679, + 28.713466520526786, + 28.76346652052679, + 28.813466520526788, + 28.863466520526792, + 28.91346652052679, + 28.963466520526786, + 29.01346652052679, + 29.063466520526788, + 29.113466520526792, + 29.16346652052679, + 29.213466520526786, + 29.26346652052679, + 29.313466520526788, + 29.363466520526792, + 29.41346652052679, + 29.463466520526786, + 29.51346652052679, + 29.563466520526788, + 29.613466520526792, + 29.66346652052679, + 29.713466520526786, + 29.76346652052679, + 29.813466520526788, + 29.863466520526792, + 29.91346652052679, + 29.963466520526786, + 30.01346652052679, + 30.063466520526788, + 30.113466520526792, + 30.16346652052679, + 30.213466520526786, + 30.26346652052679, + 30.313466520526788, + 30.363466520526792, + 30.41346652052679, + 30.463466520526786, + 30.51346652052679, + 30.563466520526788, + 30.613466520526792, + 30.66346652052679, + 30.713466520526786, + 30.76346652052679, + 30.813466520526788, + 30.863466520526792, + 30.91346652052679, + 30.963466520526786, + 31.01346652052679, + 31.063466520526788, + 31.113466520526792, + 31.16346652052679, + 31.213466520526786, + 31.26346652052679, + 31.313466520526788, + 31.363466520526792, + 31.41346652052679, + 31.463466520526786, + 31.51346652052679, + 31.563466520526788, + 31.613466520526792, + 31.66346652052679, + 31.713466520526786, + 31.76346652052679, + 31.813466520526788, + 31.863466520526792, + 31.91346652052679, + 31.963466520526794, + 32.01346652052679, + 32.06346652052679, + 32.11346652052679, + 32.16346652052679, + 32.213466520526794, + 32.26346652052679, + 32.31346652052679, + 32.36346652052679, + 32.41346652052679, + 32.463466520526794, + 32.51346652052679, + 32.56346652052679, + 32.61346652052679, + 32.66346652052679, + 32.713466520526794, + 32.76346652052679, + 32.81346652052679, + 32.86346652052679, + 32.91346652052679, + 32.963466520526794, + 33.01346652052679, + 33.06346652052679, + 33.11346652052679, + 33.16346652052679, + 33.213466520526794, + 33.26346652052679, + 33.31346652052679, + 33.36346652052679, + 33.41346652052679, + 33.463466520526794, + 33.51346652052679, + 33.56346652052679, + 33.61346652052679, + 33.66346652052679, + 33.713466520526794, + 33.76346652052679, + 33.81346652052679, + 33.86346652052679, + 33.91346652052679, + 33.963466520526794, + 34.01346652052679, + 34.06346652052679, + 34.11346652052679, + 34.16346652052679, + 34.213466520526794, + 34.26346652052679, + 34.31346652052679, + 34.36346652052679, + 34.41346652052679, + 34.463466520526794, + 34.51346652052679, + 34.56346652052679, + 34.61346652052679, + 34.66346652052679, + 34.713466520526794, + 34.76346652052679, + 34.81346652052679, + 34.86346652052679, + 34.91346652052679, + 34.963466520526794, + 35.01346652052679, + 35.06346652052679, + 35.11346652052679, + 35.16346652052679, + 35.213466520526794, + 35.26346652052679, + 35.31346652052679, + 35.36346652052679, + 35.41346652052679, + 35.463466520526794, + 35.51346652052679, + 35.56346652052679, + 35.61346652052679, + 35.66346652052679, + 35.713466520526794, + 35.76346652052679, + 35.81346652052679, + 35.86346652052679, + 35.91346652052679, + 35.963466520526794, + 36.01346652052679, + 36.06346652052679, + 36.11346652052679, + 36.16346652052679, + 36.213466520526794, + 36.26346652052679, + 36.31346652052679, + 36.36346652052679, + 36.41346652052679, + 36.463466520526794, + 36.51346652052679, + 36.56346652052679, + 36.61346652052679, + 36.66346652052679, + 36.713466520526794, + 36.76346652052679, + 36.81346652052679, + 36.86346652052679, + 36.91346652052679, + 36.963466520526794, + 37.01346652052679, + 37.06346652052679, + 37.11346652052679, + 37.16346652052679, + 37.213466520526794, + 37.26346652052679, + 37.31346652052679, + 37.36346652052679, + 37.41346652052679, + 37.463466520526794, + 37.51346652052679, + 37.56346652052679, + 37.61346652052679, + 37.66346652052679, + 37.713466520526794, + 37.76346652052679, + 37.81346652052679, + 37.86346652052679, + 37.91346652052679, + 37.963466520526794, + 38.01346652052679, + 38.06346652052679, + 38.11346652052679, + 38.16346652052679, + 38.213466520526794, + 38.26346652052679, + 38.31346652052679, + 38.36346652052679, + 38.41346652052679 + ] + }, + { + "angle": -150.0, + "x_start": 11.063466520526788, + "x_delta": 44.873066958946424, + "n_frames": 8975, + "n_rows": 715, + "y_positions": [ + -1.8612159321677275, + -1.8112159321677275, + -1.7612159321677274, + -1.7112159321677276, + -1.6612159321677276, + -1.6112159321677275, + -1.5612159321677275, + -1.5112159321677274, + -1.4612159321677276, + -1.4112159321677276, + -1.3612159321677275, + -1.3112159321677275, + -1.2612159321677274, + -1.2112159321677276, + -1.1612159321677273, + -1.1112159321677275, + -1.0612159321677275, + -1.0112159321677274, + -0.9612159321677275, + -0.9112159321677274, + -0.8612159321677275, + -0.8112159321677275, + -0.7612159321677274, + -0.7112159321677274, + -0.6612159321677273, + -0.6112159321677275, + -0.5612159321677275, + -0.5112159321677274, + -0.4612159321677274, + -0.41121593216772734, + -0.3612159321677275, + -0.31121593216772747, + -0.2612159321677274, + -0.21121593216772738, + -0.16121593216772734, + -0.11121593216772752, + -0.06121593216772747, + -0.011215932167727427, + 0.03878406783227262, + 0.08878406783227266, + 0.13878406783227248, + 0.18878406783227275, + 0.23878406783227257, + 0.2887840678322724, + 0.33878406783227266, + 0.3887840678322725, + 0.43878406783227275, + 0.4887840678322726, + 0.5387840678322728, + 0.5887840678322727, + 0.6387840678322725, + 0.6887840678322728, + 0.7387840678322726, + 0.7887840678322728, + 0.8387840678322727, + 0.8887840678322725, + 0.9387840678322728, + 0.9887840678322726, + 1.0387840678322728, + 1.0887840678322727, + 1.1387840678322725, + 1.1887840678322728, + 1.2387840678322726, + 1.2887840678322728, + 1.3387840678322727, + 1.3887840678322725, + 1.4387840678322728, + 1.4887840678322726, + 1.5387840678322728, + 1.5887840678322727, + 1.6387840678322725, + 1.6887840678322728, + 1.7387840678322726, + 1.7887840678322728, + 1.8387840678322727, + 1.8887840678322725, + 1.9387840678322728, + 1.9887840678322726, + 2.038784067832273, + 2.0887840678322727, + 2.1387840678322725, + 2.1887840678322723, + 2.238784067832273, + 2.288784067832273, + 2.3387840678322727, + 2.3887840678322725, + 2.4387840678322723, + 2.488784067832273, + 2.538784067832273, + 2.5887840678322727, + 2.6387840678322725, + 2.6887840678322723, + 2.738784067832273, + 2.788784067832273, + 2.8387840678322727, + 2.8887840678322725, + 2.938784067832273, + 2.988784067832273, + 3.038784067832273, + 3.0887840678322727, + 3.1387840678322725, + 3.188784067832273, + 3.238784067832273, + 3.288784067832273, + 3.3387840678322727, + 3.3887840678322725, + 3.438784067832273, + 3.488784067832273, + 3.538784067832273, + 3.5887840678322727, + 3.6387840678322725, + 3.688784067832273, + 3.738784067832273, + 3.788784067832273, + 3.8387840678322727, + 3.8887840678322725, + 3.938784067832273, + 3.988784067832273, + 4.038784067832273, + 4.088784067832273, + 4.1387840678322725, + 4.188784067832273, + 4.238784067832273, + 4.288784067832273, + 4.338784067832273, + 4.3887840678322725, + 4.438784067832273, + 4.488784067832273, + 4.538784067832273, + 4.588784067832273, + 4.6387840678322725, + 4.688784067832273, + 4.738784067832273, + 4.788784067832273, + 4.838784067832273, + 4.8887840678322725, + 4.938784067832273, + 4.988784067832273, + 5.038784067832273, + 5.088784067832273, + 5.1387840678322725, + 5.188784067832273, + 5.238784067832273, + 5.288784067832273, + 5.338784067832273, + 5.3887840678322725, + 5.438784067832273, + 5.488784067832273, + 5.538784067832273, + 5.588784067832273, + 5.6387840678322725, + 5.688784067832273, + 5.738784067832273, + 5.788784067832273, + 5.838784067832273, + 5.8887840678322725, + 5.938784067832273, + 5.988784067832273, + 6.038784067832273, + 6.088784067832273, + 6.1387840678322725, + 6.188784067832273, + 6.238784067832272, + 6.288784067832273, + 6.3387840678322735, + 6.3887840678322725, + 6.438784067832273, + 6.488784067832272, + 6.538784067832273, + 6.5887840678322735, + 6.6387840678322725, + 6.688784067832273, + 6.738784067832272, + 6.788784067832273, + 6.8387840678322735, + 6.8887840678322725, + 6.938784067832273, + 6.988784067832272, + 7.038784067832273, + 7.0887840678322735, + 7.1387840678322725, + 7.188784067832273, + 7.238784067832272, + 7.288784067832273, + 7.3387840678322735, + 7.3887840678322725, + 7.438784067832273, + 7.488784067832272, + 7.538784067832273, + 7.5887840678322735, + 7.6387840678322725, + 7.688784067832273, + 7.738784067832274, + 7.788784067832273, + 7.8387840678322735, + 7.8887840678322725, + 7.938784067832273, + 7.988784067832274, + 8.038784067832273, + 8.088784067832274, + 8.138784067832272, + 8.188784067832273, + 8.238784067832274, + 8.288784067832273, + 8.338784067832274, + 8.388784067832272, + 8.438784067832273, + 8.488784067832274, + 8.538784067832273, + 8.588784067832274, + 8.638784067832272, + 8.688784067832273, + 8.738784067832274, + 8.788784067832273, + 8.838784067832274, + 8.888784067832272, + 8.938784067832273, + 8.988784067832274, + 9.038784067832273, + 9.088784067832274, + 9.138784067832272, + 9.188784067832273, + 9.238784067832274, + 9.288784067832273, + 9.338784067832274, + 9.388784067832272, + 9.438784067832273, + 9.488784067832274, + 9.538784067832273, + 9.588784067832274, + 9.638784067832272, + 9.688784067832273, + 9.738784067832274, + 9.788784067832273, + 9.838784067832274, + 9.888784067832272, + 9.938784067832273, + 9.988784067832274, + 10.038784067832273, + 10.088784067832274, + 10.138784067832272, + 10.188784067832273, + 10.238784067832274, + 10.288784067832273, + 10.338784067832274, + 10.388784067832272, + 10.438784067832273, + 10.488784067832274, + 10.538784067832273, + 10.588784067832274, + 10.638784067832272, + 10.688784067832273, + 10.738784067832274, + 10.788784067832273, + 10.838784067832274, + 10.888784067832272, + 10.938784067832273, + 10.988784067832274, + 11.038784067832273, + 11.088784067832274, + 11.138784067832272, + 11.188784067832273, + 11.238784067832274, + 11.288784067832273, + 11.338784067832274, + 11.388784067832272, + 11.438784067832273, + 11.488784067832274, + 11.538784067832273, + 11.588784067832274, + 11.638784067832272, + 11.688784067832273, + 11.738784067832274, + 11.788784067832273, + 11.838784067832274, + 11.888784067832272, + 11.938784067832273, + 11.988784067832274, + 12.038784067832273, + 12.088784067832274, + 12.138784067832272, + 12.188784067832273, + 12.238784067832274, + 12.288784067832273, + 12.338784067832274, + 12.388784067832272, + 12.438784067832273, + 12.488784067832274, + 12.538784067832273, + 12.588784067832274, + 12.638784067832272, + 12.688784067832273, + 12.738784067832274, + 12.788784067832273, + 12.838784067832274, + 12.888784067832272, + 12.938784067832273, + 12.988784067832274, + 13.038784067832273, + 13.088784067832274, + 13.138784067832272, + 13.188784067832273, + 13.238784067832274, + 13.288784067832273, + 13.338784067832274, + 13.388784067832272, + 13.438784067832273, + 13.488784067832274, + 13.538784067832273, + 13.588784067832274, + 13.638784067832272, + 13.688784067832273, + 13.738784067832274, + 13.788784067832273, + 13.838784067832274, + 13.888784067832272, + 13.938784067832273, + 13.988784067832274, + 14.038784067832273, + 14.088784067832274, + 14.138784067832272, + 14.188784067832273, + 14.238784067832274, + 14.288784067832275, + 14.338784067832272, + 14.388784067832272, + 14.438784067832273, + 14.488784067832274, + 14.538784067832275, + 14.588784067832272, + 14.638784067832272, + 14.688784067832273, + 14.738784067832274, + 14.788784067832275, + 14.838784067832272, + 14.888784067832272, + 14.938784067832273, + 14.988784067832274, + 15.038784067832275, + 15.088784067832272, + 15.138784067832272, + 15.188784067832273, + 15.238784067832274, + 15.288784067832275, + 15.338784067832272, + 15.388784067832272, + 15.438784067832273, + 15.488784067832274, + 15.538784067832275, + 15.588784067832272, + 15.638784067832272, + 15.688784067832273, + 15.738784067832274, + 15.788784067832275, + 15.838784067832272, + 15.888784067832272, + 15.938784067832273, + 15.988784067832274, + 16.038784067832275, + 16.08878406783227, + 16.138784067832272, + 16.188784067832273, + 16.238784067832274, + 16.288784067832275, + 16.33878406783227, + 16.388784067832272, + 16.438784067832273, + 16.488784067832274, + 16.538784067832275, + 16.58878406783227, + 16.638784067832272, + 16.688784067832273, + 16.738784067832274, + 16.788784067832275, + 16.83878406783227, + 16.888784067832272, + 16.938784067832273, + 16.988784067832274, + 17.038784067832275, + 17.08878406783227, + 17.138784067832272, + 17.188784067832273, + 17.238784067832274, + 17.288784067832275, + 17.338784067832275, + 17.388784067832272, + 17.438784067832273, + 17.488784067832274, + 17.538784067832275, + 17.588784067832275, + 17.638784067832272, + 17.688784067832273, + 17.738784067832274, + 17.788784067832275, + 17.838784067832275, + 17.888784067832272, + 17.938784067832273, + 17.988784067832274, + 18.038784067832275, + 18.088784067832275, + 18.138784067832272, + 18.188784067832273, + 18.238784067832274, + 18.288784067832275, + 18.338784067832275, + 18.388784067832272, + 18.438784067832273, + 18.488784067832274, + 18.538784067832275, + 18.588784067832275, + 18.638784067832272, + 18.688784067832273, + 18.738784067832274, + 18.788784067832275, + 18.838784067832275, + 18.888784067832272, + 18.938784067832273, + 18.988784067832274, + 19.038784067832275, + 19.088784067832275, + 19.138784067832272, + 19.188784067832273, + 19.238784067832274, + 19.288784067832275, + 19.338784067832275, + 19.388784067832272, + 19.438784067832273, + 19.488784067832274, + 19.538784067832275, + 19.588784067832275, + 19.638784067832272, + 19.688784067832273, + 19.738784067832274, + 19.788784067832275, + 19.838784067832275, + 19.888784067832272, + 19.938784067832273, + 19.988784067832274, + 20.038784067832275, + 20.088784067832275, + 20.138784067832272, + 20.188784067832273, + 20.238784067832274, + 20.288784067832275, + 20.338784067832275, + 20.388784067832272, + 20.438784067832273, + 20.488784067832274, + 20.538784067832275, + 20.588784067832275, + 20.638784067832272, + 20.688784067832273, + 20.738784067832274, + 20.788784067832275, + 20.838784067832275, + 20.888784067832272, + 20.938784067832273, + 20.988784067832274, + 21.038784067832275, + 21.088784067832275, + 21.138784067832272, + 21.188784067832273, + 21.238784067832274, + 21.288784067832275, + 21.338784067832275, + 21.388784067832272, + 21.438784067832273, + 21.488784067832274, + 21.538784067832275, + 21.588784067832275, + 21.638784067832272, + 21.688784067832273, + 21.738784067832274, + 21.788784067832275, + 21.838784067832275, + 21.888784067832272, + 21.938784067832273, + 21.988784067832274, + 22.038784067832275, + 22.088784067832275, + 22.138784067832272, + 22.188784067832273, + 22.238784067832274, + 22.288784067832275, + 22.338784067832275, + 22.388784067832272, + 22.438784067832273, + 22.488784067832274, + 22.538784067832275, + 22.588784067832275, + 22.638784067832272, + 22.688784067832273, + 22.738784067832274, + 22.788784067832275, + 22.838784067832275, + 22.888784067832272, + 22.938784067832273, + 22.988784067832274, + 23.038784067832275, + 23.088784067832275, + 23.138784067832272, + 23.188784067832273, + 23.238784067832274, + 23.288784067832275, + 23.338784067832275, + 23.388784067832272, + 23.438784067832273, + 23.488784067832274, + 23.538784067832275, + 23.588784067832275, + 23.638784067832272, + 23.688784067832273, + 23.738784067832274, + 23.788784067832275, + 23.838784067832275, + 23.888784067832272, + 23.938784067832273, + 23.988784067832274, + 24.038784067832275, + 24.088784067832275, + 24.138784067832272, + 24.188784067832273, + 24.238784067832274, + 24.288784067832275, + 24.338784067832275, + 24.388784067832272, + 24.438784067832273, + 24.488784067832274, + 24.538784067832275, + 24.588784067832275, + 24.638784067832272, + 24.688784067832273, + 24.738784067832274, + 24.788784067832275, + 24.838784067832275, + 24.888784067832272, + 24.938784067832273, + 24.988784067832274, + 25.038784067832275, + 25.088784067832275, + 25.138784067832272, + 25.188784067832273, + 25.238784067832274, + 25.288784067832275, + 25.338784067832275, + 25.388784067832272, + 25.438784067832273, + 25.488784067832274, + 25.538784067832275, + 25.588784067832275, + 25.638784067832272, + 25.688784067832273, + 25.738784067832274, + 25.788784067832275, + 25.838784067832275, + 25.888784067832272, + 25.938784067832273, + 25.988784067832274, + 26.038784067832275, + 26.088784067832275, + 26.138784067832272, + 26.188784067832273, + 26.238784067832274, + 26.288784067832275, + 26.338784067832275, + 26.388784067832272, + 26.438784067832273, + 26.488784067832274, + 26.538784067832275, + 26.588784067832275, + 26.638784067832272, + 26.688784067832273, + 26.738784067832274, + 26.788784067832275, + 26.838784067832275, + 26.888784067832272, + 26.938784067832273, + 26.988784067832274, + 27.038784067832275, + 27.088784067832275, + 27.138784067832272, + 27.188784067832273, + 27.238784067832274, + 27.288784067832275, + 27.338784067832275, + 27.388784067832272, + 27.438784067832273, + 27.488784067832274, + 27.538784067832275, + 27.588784067832275, + 27.638784067832272, + 27.688784067832273, + 27.738784067832274, + 27.788784067832275, + 27.838784067832275, + 27.888784067832272, + 27.938784067832273, + 27.988784067832274, + 28.038784067832275, + 28.088784067832275, + 28.138784067832272, + 28.188784067832273, + 28.238784067832274, + 28.288784067832275, + 28.338784067832275, + 28.388784067832272, + 28.438784067832273, + 28.488784067832274, + 28.538784067832275, + 28.588784067832275, + 28.638784067832272, + 28.688784067832273, + 28.738784067832274, + 28.788784067832275, + 28.838784067832275, + 28.888784067832272, + 28.938784067832273, + 28.988784067832274, + 29.038784067832275, + 29.088784067832275, + 29.138784067832272, + 29.188784067832273, + 29.238784067832274, + 29.288784067832275, + 29.338784067832275, + 29.388784067832272, + 29.438784067832273, + 29.488784067832274, + 29.538784067832275, + 29.588784067832275, + 29.638784067832272, + 29.688784067832273, + 29.738784067832274, + 29.788784067832275, + 29.838784067832275, + 29.888784067832272, + 29.938784067832273, + 29.988784067832274, + 30.038784067832275, + 30.088784067832275, + 30.138784067832272, + 30.188784067832277, + 30.238784067832274, + 30.28878406783227, + 30.338784067832275, + 30.388784067832272, + 30.438784067832277, + 30.488784067832274, + 30.53878406783227, + 30.588784067832275, + 30.638784067832272, + 30.688784067832277, + 30.738784067832274, + 30.78878406783227, + 30.838784067832275, + 30.888784067832272, + 30.938784067832277, + 30.988784067832274, + 31.03878406783227, + 31.088784067832275, + 31.138784067832272, + 31.188784067832277, + 31.238784067832274, + 31.28878406783227, + 31.338784067832275, + 31.388784067832272, + 31.438784067832277, + 31.488784067832274, + 31.53878406783227, + 31.588784067832275, + 31.638784067832272, + 31.688784067832277, + 31.738784067832274, + 31.78878406783227, + 31.838784067832275, + 31.888784067832272, + 31.938784067832277, + 31.988784067832274, + 32.03878406783227, + 32.08878406783228, + 32.138784067832276, + 32.18878406783227, + 32.23878406783227, + 32.28878406783227, + 32.33878406783228, + 32.388784067832276, + 32.43878406783227, + 32.48878406783227, + 32.53878406783227, + 32.58878406783228, + 32.638784067832276, + 32.68878406783227, + 32.73878406783227, + 32.78878406783227, + 32.83878406783228, + 32.888784067832276, + 32.93878406783227, + 32.98878406783227, + 33.03878406783227, + 33.08878406783228, + 33.138784067832276, + 33.18878406783227, + 33.23878406783227, + 33.28878406783227, + 33.33878406783228, + 33.388784067832276, + 33.43878406783227, + 33.48878406783227, + 33.53878406783227, + 33.58878406783228, + 33.638784067832276, + 33.68878406783227, + 33.73878406783227, + 33.78878406783227, + 33.83878406783228 + ] + }, + { + "angle": -180.0, + "x_start": 12.5, + "x_delta": 42.0, + "n_frames": 8400, + "n_rows": 341, + "y_positions": [ + 7.499999999999998, + 7.549999999999998, + 7.599999999999998, + 7.649999999999999, + 7.699999999999998, + 7.749999999999998, + 7.799999999999998, + 7.849999999999998, + 7.899999999999999, + 7.949999999999998, + 7.999999999999998, + 8.049999999999999, + 8.099999999999998, + 8.149999999999999, + 8.199999999999998, + 8.249999999999998, + 8.299999999999999, + 8.349999999999998, + 8.399999999999999, + 8.449999999999998, + 8.499999999999998, + 8.549999999999999, + 8.599999999999998, + 8.649999999999999, + 8.7, + 8.749999999999998, + 8.799999999999999, + 8.849999999999998, + 8.899999999999999, + 8.95, + 8.999999999999998, + 9.049999999999999, + 9.099999999999998, + 9.149999999999999, + 9.2, + 9.249999999999998, + 9.299999999999999, + 9.349999999999998, + 9.399999999999999, + 9.45, + 9.499999999999998, + 9.549999999999999, + 9.599999999999998, + 9.649999999999999, + 9.7, + 9.749999999999998, + 9.799999999999999, + 9.849999999999998, + 9.899999999999999, + 9.95, + 9.999999999999998, + 10.049999999999999, + 10.099999999999998, + 10.149999999999999, + 10.2, + 10.249999999999998, + 10.299999999999999, + 10.349999999999998, + 10.399999999999999, + 10.45, + 10.499999999999998, + 10.549999999999999, + 10.599999999999998, + 10.649999999999999, + 10.7, + 10.749999999999998, + 10.799999999999999, + 10.849999999999998, + 10.899999999999999, + 10.95, + 10.999999999999998, + 11.049999999999999, + 11.099999999999998, + 11.149999999999999, + 11.2, + 11.249999999999998, + 11.299999999999999, + 11.349999999999998, + 11.399999999999999, + 11.45, + 11.499999999999998, + 11.549999999999997, + 11.599999999999998, + 11.649999999999999, + 11.7, + 11.749999999999998, + 11.799999999999997, + 11.849999999999998, + 11.899999999999999, + 11.95, + 11.999999999999998, + 12.049999999999997, + 12.099999999999998, + 12.149999999999999, + 12.2, + 12.249999999999998, + 12.299999999999999, + 12.349999999999998, + 12.399999999999999, + 12.45, + 12.499999999999998, + 12.549999999999999, + 12.599999999999998, + 12.649999999999999, + 12.7, + 12.749999999999998, + 12.799999999999999, + 12.849999999999998, + 12.899999999999999, + 12.95, + 12.999999999999998, + 13.049999999999999, + 13.099999999999998, + 13.149999999999999, + 13.2, + 13.249999999999998, + 13.299999999999999, + 13.349999999999998, + 13.399999999999999, + 13.45, + 13.499999999999998, + 13.549999999999999, + 13.599999999999998, + 13.649999999999999, + 13.7, + 13.749999999999998, + 13.799999999999999, + 13.849999999999998, + 13.899999999999999, + 13.95, + 13.999999999999998, + 14.049999999999999, + 14.099999999999998, + 14.149999999999999, + 14.2, + 14.249999999999998, + 14.299999999999999, + 14.349999999999998, + 14.399999999999999, + 14.45, + 14.499999999999998, + 14.549999999999999, + 14.599999999999998, + 14.649999999999999, + 14.7, + 14.749999999999998, + 14.799999999999999, + 14.849999999999998, + 14.899999999999999, + 14.95, + 14.999999999999998, + 15.049999999999999, + 15.099999999999998, + 15.149999999999999, + 15.2, + 15.249999999999998, + 15.299999999999999, + 15.349999999999998, + 15.399999999999999, + 15.45, + 15.499999999999998, + 15.549999999999999, + 15.599999999999998, + 15.649999999999999, + 15.7, + 15.749999999999998, + 15.799999999999999, + 15.849999999999998, + 15.899999999999999, + 15.95, + 15.999999999999998, + 16.049999999999997, + 16.099999999999998, + 16.15, + 16.2, + 16.25, + 16.299999999999997, + 16.349999999999998, + 16.4, + 16.45, + 16.5, + 16.549999999999997, + 16.599999999999998, + 16.65, + 16.7, + 16.75, + 16.799999999999997, + 16.849999999999998, + 16.9, + 16.95, + 17.0, + 17.049999999999997, + 17.1, + 17.15, + 17.2, + 17.25, + 17.299999999999997, + 17.35, + 17.4, + 17.45, + 17.5, + 17.549999999999997, + 17.6, + 17.65, + 17.7, + 17.75, + 17.799999999999997, + 17.85, + 17.9, + 17.95, + 18.0, + 18.049999999999997, + 18.1, + 18.15, + 18.2, + 18.25, + 18.299999999999997, + 18.35, + 18.4, + 18.45, + 18.5, + 18.549999999999997, + 18.6, + 18.65, + 18.7, + 18.75, + 18.799999999999997, + 18.85, + 18.9, + 18.95, + 19.0, + 19.049999999999997, + 19.1, + 19.15, + 19.2, + 19.25, + 19.299999999999997, + 19.35, + 19.4, + 19.45, + 19.5, + 19.549999999999997, + 19.6, + 19.65, + 19.7, + 19.75, + 19.799999999999997, + 19.85, + 19.9, + 19.95, + 20.0, + 20.049999999999997, + 20.1, + 20.15, + 20.2, + 20.25, + 20.299999999999997, + 20.35, + 20.4, + 20.45, + 20.5, + 20.549999999999997, + 20.6, + 20.65, + 20.7, + 20.75, + 20.799999999999997, + 20.85, + 20.9, + 20.95, + 21.0, + 21.049999999999997, + 21.1, + 21.15, + 21.2, + 21.25, + 21.299999999999997, + 21.35, + 21.4, + 21.45, + 21.5, + 21.549999999999997, + 21.6, + 21.65, + 21.7, + 21.75, + 21.799999999999997, + 21.85, + 21.9, + 21.95, + 22.0, + 22.049999999999997, + 22.1, + 22.15, + 22.2, + 22.25, + 22.299999999999997, + 22.35, + 22.4, + 22.45, + 22.5, + 22.549999999999997, + 22.6, + 22.65, + 22.7, + 22.75, + 22.799999999999997, + 22.85, + 22.9, + 22.95, + 23.0, + 23.049999999999997, + 23.1, + 23.15, + 23.2, + 23.25, + 23.299999999999997, + 23.35, + 23.4, + 23.45, + 23.5, + 23.549999999999997, + 23.6, + 23.65, + 23.699999999999996, + 23.75, + 23.799999999999997, + 23.85, + 23.9, + 23.949999999999996, + 24.0, + 24.049999999999997, + 24.1, + 24.15, + 24.199999999999996, + 24.25, + 24.299999999999997, + 24.35, + 24.4, + 24.449999999999996, + 24.5 + ] + } + ] + } + }, + "two_angles_tiny": { + "inputs": { + "XS": "1.0", + "YS": "1.0", + "XD": "0.02", + "YD": "0.02", + "num_angles": "2", + "row_spacing": "0.01" + }, + "params": { + "x_start_nominal": 1.0, + "y_start_nominal": 1.0, + "x_delta_nominal": 0.02, + "y_delta_nominal": 0.02, + "num_angles": 2, + "row_spacing": 0.01, + "laser_freq": 20000.0, + "prefix": "golden", + "save_dir": "/tmp/golden-scans", + "per_angle": [ + { + "angle": 0.0, + "x_start": 1.0, + "x_delta": 0.02, + "n_frames": 4, + "n_rows": 3, + "y_positions": [ + 1.0, + 1.01, + 1.02 + ] + }, + { + "angle": -180.0, + "x_start": 1.0, + "x_delta": 0.020000000000000004, + "n_frames": 4, + "n_rows": 3, + "y_positions": [ + 1.0, + 1.01, + 1.02 + ] + } + ] + } + }, + "flat_line_ydelta_zero": { + "inputs": { + "XS": "10.0", + "YS": "10.0", + "XD": "5.0", + "YD": "0.0", + "num_angles": "1", + "row_spacing": "0.25" + }, + "params": { + "x_start_nominal": 10.0, + "y_start_nominal": 10.0, + "x_delta_nominal": 5.0, + "y_delta_nominal": 0.0, + "num_angles": 1, + "row_spacing": 0.25, + "laser_freq": 20000.0, + "prefix": "golden", + "save_dir": "/tmp/golden-scans", + "per_angle": [ + { + "angle": 0.0, + "x_start": 10.0, + "x_delta": 5.0, + "n_frames": 1000, + "n_rows": 1, + "y_positions": [ + 10.0 + ] + } + ] + } + }, + "fine_spacing": { + "inputs": { + "XS": "3.0", + "YS": "4.0", + "XD": "2.5", + "YD": "1.5", + "num_angles": "4", + "row_spacing": "0.025" + }, + "params": { + "x_start_nominal": 3.0, + "y_start_nominal": 4.0, + "x_delta_nominal": 2.5, + "y_delta_nominal": 1.5, + "num_angles": 4, + "row_spacing": 0.025, + "laser_freq": 20000.0, + "prefix": "golden", + "save_dir": "/tmp/golden-scans", + "per_angle": [ + { + "angle": 0.0, + "x_start": 3.0, + "x_delta": 2.5, + "n_frames": 500, + "n_rows": 61, + "y_positions": [ + 4.0, + 4.025, + 4.05, + 4.075, + 4.1, + 4.125, + 4.15, + 4.175, + 4.2, + 4.225, + 4.25, + 4.275, + 4.3, + 4.325, + 4.35, + 4.375, + 4.4, + 4.425, + 4.45, + 4.475, + 4.5, + 4.525, + 4.55, + 4.575, + 4.6, + 4.625, + 4.65, + 4.675, + 4.7, + 4.725, + 4.75, + 4.775, + 4.8, + 4.825, + 4.85, + 4.875, + 4.9, + 4.925, + 4.95, + 4.975, + 5.0, + 5.025, + 5.05, + 5.075, + 5.1, + 5.125, + 5.15, + 5.175, + 5.2, + 5.225, + 5.25, + 5.275, + 5.3, + 5.325, + 5.35, + 5.375, + 5.4, + 5.425, + 5.45, + 5.475, + 5.5 + ] + }, + { + "angle": -60.0, + "x_start": 2.975480947161671, + "x_delta": 2.549038105676658, + "n_frames": 510, + "n_rows": 118, + "y_positions": [ + 3.292468245269452, + 3.3174682452694517, + 3.3424682452694516, + 3.367468245269452, + 3.392468245269452, + 3.417468245269452, + 3.4424682452694517, + 3.4674682452694516, + 3.492468245269452, + 3.517468245269452, + 3.542468245269452, + 3.5674682452694517, + 3.592468245269452, + 3.617468245269452, + 3.642468245269452, + 3.667468245269452, + 3.6924682452694517, + 3.717468245269452, + 3.742468245269452, + 3.767468245269452, + 3.792468245269452, + 3.8174682452694517, + 3.842468245269452, + 3.867468245269452, + 3.892468245269452, + 3.917468245269452, + 3.9424682452694517, + 3.967468245269452, + 3.992468245269452, + 4.017468245269452, + 4.042468245269452, + 4.067468245269452, + 4.092468245269452, + 4.1174682452694515, + 4.142468245269452, + 4.167468245269452, + 4.192468245269452, + 4.217468245269452, + 4.2424682452694515, + 4.267468245269452, + 4.292468245269452, + 4.317468245269452, + 4.342468245269452, + 4.3674682452694515, + 4.392468245269452, + 4.417468245269452, + 4.442468245269452, + 4.467468245269452, + 4.4924682452694515, + 4.517468245269452, + 4.542468245269452, + 4.567468245269452, + 4.592468245269452, + 4.6174682452694515, + 4.642468245269452, + 4.667468245269452, + 4.692468245269452, + 4.717468245269452, + 4.7424682452694515, + 4.767468245269452, + 4.792468245269452, + 4.817468245269452, + 4.842468245269452, + 4.8674682452694515, + 4.892468245269452, + 4.917468245269452, + 4.942468245269452, + 4.967468245269452, + 4.9924682452694515, + 5.017468245269452, + 5.042468245269452, + 5.067468245269452, + 5.092468245269452, + 5.1174682452694515, + 5.142468245269452, + 5.167468245269452, + 5.192468245269452, + 5.217468245269452, + 5.2424682452694515, + 5.267468245269452, + 5.292468245269452, + 5.317468245269452, + 5.342468245269452, + 5.3674682452694515, + 5.392468245269452, + 5.417468245269452, + 5.442468245269452, + 5.467468245269452, + 5.4924682452694515, + 5.517468245269452, + 5.542468245269452, + 5.567468245269452, + 5.592468245269452, + 5.6174682452694515, + 5.642468245269452, + 5.667468245269452, + 5.692468245269453, + 5.717468245269452, + 5.7424682452694515, + 5.767468245269452, + 5.792468245269452, + 5.817468245269453, + 5.842468245269452, + 5.8674682452694515, + 5.892468245269452, + 5.917468245269452, + 5.942468245269453, + 5.967468245269452, + 5.9924682452694515, + 6.017468245269452, + 6.042468245269452, + 6.067468245269453, + 6.092468245269452, + 6.1174682452694515, + 6.142468245269452, + 6.167468245269452, + 6.192468245269453, + 6.217468245269452 + ] + }, + { + "angle": -120.0, + "x_start": 2.975480947161671, + "x_delta": 2.549038105676658, + "n_frames": 510, + "n_rows": 118, + "y_positions": [ + 3.2924682452694514, + 3.3174682452694513, + 3.342468245269451, + 3.3674682452694515, + 3.3924682452694515, + 3.4174682452694514, + 3.4424682452694513, + 3.467468245269451, + 3.4924682452694515, + 3.5174682452694515, + 3.5424682452694514, + 3.5674682452694513, + 3.592468245269451, + 3.6174682452694515, + 3.6424682452694515, + 3.6674682452694514, + 3.6924682452694513, + 3.717468245269451, + 3.7424682452694515, + 3.7674682452694515, + 3.7924682452694514, + 3.8174682452694513, + 3.842468245269451, + 3.8674682452694515, + 3.8924682452694515, + 3.9174682452694514, + 3.9424682452694513, + 3.967468245269451, + 3.9924682452694515, + 4.017468245269452, + 4.042468245269451, + 4.067468245269452, + 4.092468245269451, + 4.1174682452694515, + 4.142468245269452, + 4.167468245269451, + 4.192468245269452, + 4.217468245269451, + 4.2424682452694515, + 4.267468245269452, + 4.292468245269451, + 4.317468245269452, + 4.342468245269451, + 4.3674682452694515, + 4.392468245269452, + 4.417468245269451, + 4.442468245269452, + 4.467468245269451, + 4.4924682452694515, + 4.517468245269452, + 4.542468245269451, + 4.567468245269452, + 4.592468245269451, + 4.6174682452694515, + 4.642468245269452, + 4.667468245269451, + 4.692468245269452, + 4.717468245269451, + 4.7424682452694515, + 4.767468245269452, + 4.792468245269451, + 4.817468245269452, + 4.842468245269451, + 4.8674682452694515, + 4.892468245269452, + 4.917468245269451, + 4.942468245269452, + 4.967468245269451, + 4.9924682452694515, + 5.017468245269452, + 5.042468245269451, + 5.067468245269452, + 5.092468245269451, + 5.1174682452694515, + 5.142468245269452, + 5.167468245269451, + 5.192468245269452, + 5.217468245269451, + 5.2424682452694515, + 5.267468245269452, + 5.292468245269451, + 5.317468245269451, + 5.342468245269451, + 5.3674682452694515, + 5.392468245269452, + 5.417468245269451, + 5.442468245269451, + 5.467468245269451, + 5.4924682452694515, + 5.517468245269452, + 5.542468245269451, + 5.567468245269451, + 5.592468245269451, + 5.6174682452694515, + 5.642468245269452, + 5.667468245269451, + 5.692468245269452, + 5.717468245269451, + 5.7424682452694515, + 5.767468245269452, + 5.792468245269451, + 5.817468245269452, + 5.842468245269451, + 5.8674682452694515, + 5.892468245269452, + 5.917468245269451, + 5.942468245269452, + 5.967468245269451, + 5.9924682452694515, + 6.017468245269452, + 6.042468245269451, + 6.067468245269452, + 6.092468245269451, + 6.1174682452694515, + 6.142468245269452, + 6.167468245269451, + 6.192468245269452, + 6.217468245269451 + ] + }, + { + "angle": -180.0, + "x_start": 3.0, + "x_delta": 2.5, + "n_frames": 500, + "n_rows": 61, + "y_positions": [ + 4.0, + 4.025, + 4.05, + 4.075, + 4.1, + 4.125, + 4.15, + 4.175, + 4.2, + 4.225, + 4.25, + 4.275, + 4.3, + 4.325, + 4.35, + 4.375, + 4.4, + 4.425, + 4.45, + 4.475, + 4.5, + 4.525, + 4.55, + 4.575, + 4.6, + 4.625, + 4.65, + 4.675, + 4.7, + 4.725, + 4.75, + 4.775, + 4.8, + 4.825, + 4.85, + 4.875, + 4.9, + 4.925, + 4.95, + 4.975, + 5.0, + 5.025, + 5.05, + 5.075, + 5.1, + 5.125, + 5.15, + 5.175, + 5.2, + 5.225, + 5.25, + 5.275, + 5.3, + 5.325, + 5.35, + 5.375, + 5.4, + 5.425, + 5.45, + 5.475, + 5.5 + ] + } + ] + } + } + }, + "error_cases": { + "xd_zero": { + "inputs": { + "XS": "10.0", + "YS": "10.0", + "XD": "0.0", + "YD": "10.0", + "num_angles": "1", + "row_spacing": "0.25" + }, + "message": "XD must be > 0" + }, + "xd_negative": { + "inputs": { + "XS": "10.0", + "YS": "10.0", + "XD": "-5.0", + "YD": "10.0", + "num_angles": "1", + "row_spacing": "0.25" + }, + "message": "XD must be > 0" + }, + "spacing_zero": { + "inputs": { + "XS": "10.0", + "YS": "10.0", + "XD": "10.0", + "YD": "10.0", + "num_angles": "1", + "row_spacing": "0.0" + }, + "message": "RowSpacing must be > 0" + }, + "angles_zero": { + "inputs": { + "XS": "10.0", + "YS": "10.0", + "XD": "10.0", + "YD": "10.0", + "num_angles": "0", + "row_spacing": "0.25" + }, + "message": "NumAngles must be \u2265 1" + }, + "xs_not_number": { + "inputs": { + "XS": "abc", + "YS": "10.0", + "XD": "10.0", + "YD": "10.0", + "num_angles": "1", + "row_spacing": "0.25" + }, + "message": "'XS' is not a valid number: 'abc'" + } + } +} \ No newline at end of file diff --git a/tests/golden/header_only.sras b/tests/golden/header_only.sras new file mode 100644 index 0000000..ba5b988 Binary files /dev/null and b/tests/golden/header_only.sras differ diff --git a/tests/golden/sras_expected.json b/tests/golden/sras_expected.json new file mode 100644 index 0000000..a8b397e --- /dev/null +++ b/tests/golden/sras_expected.json @@ -0,0 +1,170 @@ +{ + "header": { + "version": 6, + "n_angles": 2, + "x_start_nominal": 1.0, + "y_start_nominal": 1.0, + "x_delta_nominal": 0.019999999552965164, + "y_delta_nominal": 0.019999999552965164, + "row_spacing": 0.009999999776482582, + "velocity": 100.0, + "laser_freq": 20000.0, + "samples_per_frame": 8, + "sample_rate": 6250000000.0, + "bytes_per_sample": 1, + "n_channels": 3, + "angles": [ + 0.0, + -180.0 + ], + "per_angle": [ + { + "angle": 0.0, + "x_start": 1.0, + "x_delta": 0.019999999552965164, + "n_frames": 4, + "n_rows": 3, + "y_positions": [ + 1.0, + 1.0099999904632568, + 1.0199999809265137 + ] + }, + { + "angle": -180.0, + "x_start": 1.0, + "x_delta": 0.019999999552965164, + "n_frames": 4, + "n_rows": 3, + "y_positions": [ + 1.0, + 1.0099999904632568, + 1.0199999809265137 + ] + } + ], + "data_start_offset": 265 + }, + "statuses": { + "complete.sras": [ + { + "index": 0, + "angle_deg": 0.0, + "n_rows": 3, + "row_bytes": 96, + "data_offset": 265, + "n_rows_available": 3, + "status": "OK" + }, + { + "index": 1, + "angle_deg": -180.0, + "n_rows": 3, + "row_bytes": 96, + "data_offset": 553, + "n_rows_available": 3, + "status": "OK" + } + ], + "trunc_midrow_a1.sras": [ + { + "index": 0, + "angle_deg": 0.0, + "n_rows": 3, + "row_bytes": 96, + "data_offset": 265, + "n_rows_available": 3, + "status": "OK" + }, + { + "index": 1, + "angle_deg": -180.0, + "n_rows": 3, + "row_bytes": 96, + "data_offset": 553, + "n_rows_available": 1, + "status": "TRUNCATED" + } + ], + "trunc_rowboundary_a1.sras": [ + { + "index": 0, + "angle_deg": 0.0, + "n_rows": 3, + "row_bytes": 96, + "data_offset": 265, + "n_rows_available": 3, + "status": "OK" + }, + { + "index": 1, + "angle_deg": -180.0, + "n_rows": 3, + "row_bytes": 96, + "data_offset": 553, + "n_rows_available": 2, + "status": "TRUNCATED" + } + ], + "trunc_angleboundary.sras": [ + { + "index": 0, + "angle_deg": 0.0, + "n_rows": 3, + "row_bytes": 96, + "data_offset": 265, + "n_rows_available": 3, + "status": "OK" + }, + { + "index": 1, + "angle_deg": -180.0, + "n_rows": 3, + "row_bytes": 96, + "data_offset": 553, + "n_rows_available": 0, + "status": "MISSING" + } + ], + "trunc_midrow_a0.sras": [ + { + "index": 0, + "angle_deg": 0.0, + "n_rows": 3, + "row_bytes": 96, + "data_offset": 265, + "n_rows_available": 1, + "status": "TRUNCATED" + }, + { + "index": 1, + "angle_deg": -180.0, + "n_rows": 3, + "row_bytes": 96, + "data_offset": 265, + "n_rows_available": 0, + "status": "MISSING" + } + ], + "header_only.sras": [ + { + "index": 0, + "angle_deg": 0.0, + "n_rows": 3, + "row_bytes": 96, + "data_offset": 265, + "n_rows_available": 0, + "status": "MISSING" + }, + { + "index": 1, + "angle_deg": -180.0, + "n_rows": 3, + "row_bytes": 96, + "data_offset": 265, + "n_rows_available": 0, + "status": "MISSING" + } + ] + } +} \ No newline at end of file diff --git a/tests/golden/trunc_angleboundary.sras b/tests/golden/trunc_angleboundary.sras new file mode 100644 index 0000000..4ac1488 Binary files /dev/null and b/tests/golden/trunc_angleboundary.sras differ diff --git a/tests/golden/trunc_midrow_a0.sras b/tests/golden/trunc_midrow_a0.sras new file mode 100644 index 0000000..7ff9c84 Binary files /dev/null and b/tests/golden/trunc_midrow_a0.sras differ diff --git a/tests/golden/trunc_midrow_a1.sras b/tests/golden/trunc_midrow_a1.sras new file mode 100644 index 0000000..2cc91ce Binary files /dev/null and b/tests/golden/trunc_midrow_a1.sras differ diff --git a/tests/golden/trunc_rowboundary_a1.sras b/tests/golden/trunc_rowboundary_a1.sras new file mode 100644 index 0000000..1fca1ae Binary files /dev/null and b/tests/golden/trunc_rowboundary_a1.sras differ diff --git a/tests/test_golden_prerefactor.py b/tests/test_golden_prerefactor.py new file mode 100644 index 0000000..c43152c --- /dev/null +++ b/tests/test_golden_prerefactor.py @@ -0,0 +1,81 @@ +"""Golden-fixture consistency tests. + +Phase 0: assert the pre-refactor implementations reproduce the committed +fixtures. Phase 2 migrates these assertions onto core.sras_format / +core.scan_geometry; the fixtures themselves never change. +""" +import json +from pathlib import Path + +import pytest + +import sc3_aui_app as app +from gen_goldens import ( + BACKGROUND, PREAMBLES, SAMPLE_RATE, SPF, _fake_window, _synthetic_frame, +) + +GOLDEN = Path(__file__).parent / "golden" + + +@pytest.fixture(scope="module") +def geometry(): + with open(GOLDEN / "geometry.json") as f: + return json.load(f) + + +@pytest.fixture(scope="module") +def sras_expected(): + with open(GOLDEN / "sras_expected.json") as f: + return json.load(f) + + +def test_geometry_cases_match(geometry): + for label, case in geometry["cases"].items(): + inputs = case["inputs"] + params = app.MainWindow._build_scan_params(_fake_window(*inputs.values())) + assert params == case["params"], f"geometry mismatch for case {label}" + + +def test_geometry_error_cases_raise(geometry): + for label, case in geometry["error_cases"].items(): + with pytest.raises(ValueError): + app.MainWindow._build_scan_params(_fake_window(*case["inputs"].values())) + + +def test_writer_output_byte_identical(tmp_path, sras_expected): + params = app.MainWindow._build_scan_params( + _fake_window("1.0", "1.0", "0.02", "0.02", "2", "0.01")) + per_angle = params["per_angle"] + angles = [pa["angle"] for pa in per_angle] + + out = tmp_path / "rewrite.sras" + f = app._open_scan_file( + out, angles, per_angle, + params["x_start_nominal"], params["y_start_nominal"], + params["x_delta_nominal"], params["y_delta_nominal"], + params["row_spacing"], + app.SCAN_VELOCITY_MM_S, app.LASER_FREQ_HZ, + SPF, SAMPLE_RATE, PREAMBLES, BACKGROUND, + ) + try: + for ai, pa in enumerate(per_angle): + for ri in range(pa["n_rows"]): + for ci in range(len(app.SCAN_CHANNELS)): + for fi in range(pa["n_frames"]): + f.write(_synthetic_frame(ai, ri, ci, fi)) + finally: + f.close() + + assert out.read_bytes() == (GOLDEN / "complete.sras").read_bytes() + + +def test_header_parse_matches(sras_expected): + info = app._read_sras_header(GOLDEN / "complete.sras") + assert info == sras_expected["header"] + + +def test_angle_status_all_variants(sras_expected): + info = app._read_sras_header(GOLDEN / "complete.sras") + for name, expected in sras_expected["statuses"].items(): + statuses = app._compute_angle_status(GOLDEN / name, info) + assert statuses == expected, f"status mismatch for {name}" diff --git a/tests/test_smoke_apps.py b/tests/test_smoke_apps.py new file mode 100644 index 0000000..452be72 --- /dev/null +++ b/tests/test_smoke_apps.py @@ -0,0 +1,99 @@ +"""Offscreen smoke tests: every GUI app must construct without hardware. + +These don't exercise behavior — they catch import errors, missing .ui +widgets, and constructor regressions during the refactor. +""" +import pytest +from PyQt6.QtWidgets import QApplication + + +@pytest.fixture(scope="session") +def qapp(): + app = QApplication.instance() or QApplication([]) + yield app + + +def _pump(qapp): + qapp.processEvents() + + +def test_sc3_aui_main_window(qapp): + import sc3_aui_app + win = sc3_aui_app.MainWindow() + _pump(qapp) + try: + assert win.x_start_edit.text() + assert win.windowTitle() == "Scanengine-3 AUI" + finally: + for worker, thread in ( + (win._bbd_worker, win._bbd_thread), + (win._oscope_worker, win._oscope_thread), + (win._helios_worker, win._helios_thread), + ): + worker.stop_worker() + thread.quit() + assert thread.wait(2000) + win._camera_win.deleteLater() + win.deleteLater() + _pump(qapp) + + +def test_sras_viewer_window(qapp): + import sras_viewer + win = sras_viewer.SrasViewerWindow() + _pump(qapp) + try: + assert win.windowTitle() + finally: + win.deleteLater() + _pump(qapp) + + +def test_helios_test_app(qapp): + import helios_test_app + win = helios_test_app.HeliosTestApp() + _pump(qapp) + try: + assert win.windowTitle() + finally: + win.deleteLater() + _pump(qapp) + + +def test_bbd202_test_app(qapp): + import bbd202_test_app + win = bbd202_test_app.BBD202TestApp() + _pump(qapp) + try: + assert win.windowTitle() + finally: + win.close() + _pump(qapp) + + +def test_camera_test_app(qapp): + import camera_test_app + win = camera_test_app.CameraTestWindow() + _pump(qapp) + try: + assert win.windowTitle() + finally: + win.deleteLater() + _pump(qapp) + + +def test_t3r_control_panel(qapp): + from hardware.t3r_driver import T3RDriver + from t3r_control_panel import T3RControlPanel + driver = T3RDriver() + panel = T3RControlPanel(driver) + _pump(qapp) + try: + assert panel.windowTitle() + finally: + panel.deleteLater() + _pump(qapp) + + +def test_sras_scan_manager_importable(): + import sras_scan_manager # noqa: F401