From 078f89e11eb90ff40e91750e5bcf7dbea8c6f3fd Mon Sep 17 00:00:00 2001 From: Jesse Hernandez Date: Fri, 13 Mar 2026 23:37:42 -0700 Subject: [PATCH] fix: update physics profile, regime intro, more python tooling. --- README.md | 11 + addons/openfairway/README.md | 13 + .../data/calibration/calibration_profile.json | 8 +- .../calibration/carry_exception_profile.json | 75 ++ .../calibration/history/iteration_033.json | 745 +++++++++++++++++ .../calibration/history/iteration_034.json | 745 +++++++++++++++++ .../calibration/history/iteration_035.json | 757 ++++++++++++++++++ .../data/calibration/shot_diff_analysis.csv | 206 ++--- .../calibration/shot_diff_analysis.csv.import | 4 +- ...airway_accuracy_summary_20260313_2310.json | 92 +++ ...airway_accuracy_summary_20260313_2332.json | 125 +++ ...ay_critical_carry_20260313_2006.csv.import | 19 + ...enfairway_critical_carry_20260313_2310.csv | 100 +++ ...ay_critical_carry_20260313_2310.csv.import | 19 + ...enfairway_critical_carry_20260313_2332.csv | 100 +++ ..._critical_overall_20260313_2006.csv.import | 19 + ...fairway_critical_overall_20260313_2310.csv | 100 +++ ..._critical_overall_20260313_2310.csv.import | 19 + ...fairway_critical_overall_20260313_2332.csv | 100 +++ .../data/shot_session_2/diagnostic_report.txt | 144 ++++ .../shot_session_2/history/iteration_014.json | 232 ++++++ .../shot_session_2/history/iteration_015.json | 227 ++++++ assets/data/shot_session_2/physics.csv | 54 +- .../shot_session_2/shot_diff_analysis.csv | 56 +- .../shot_diff_analysis.csv.import | 4 +- .../data/shot_session_3/diagnostic_report.txt | 751 +++++++++++++++++ .../shot_session_3/flightscope.csv.import | 19 + .../shot_session_3/history/iteration_002.json | 563 +++++++++++++ .../shot_session_3/history/iteration_003.json | 534 ++++++++++++ assets/data/shot_session_3/physics.csv | 138 ++-- assets/data/shot_session_3/physics.csv.import | 19 + .../shot_session_3/shot_diff_analysis.csv | 140 ++-- .../shot_diff_analysis.csv.import | 19 + .../shot_calibration_short_shot_priority.puml | 20 + tools/shot_calibration/README.md | 65 +- tools/shot_calibration/calibrate.py | 105 +++ .../shot_calibration/carry_exception_layer.py | 360 +++++++++ tools/shot_calibration/compare_csv.py | 50 +- .../test_carry_exception_layer.py | 324 ++++++++ 39 files changed, 6774 insertions(+), 307 deletions(-) create mode 100644 assets/data/calibration/carry_exception_profile.json create mode 100644 assets/data/calibration/history/iteration_033.json create mode 100644 assets/data/calibration/history/iteration_034.json create mode 100644 assets/data/calibration/history/iteration_035.json create mode 100644 assets/data/openfairway_accuracy_summary_20260313_2310.json create mode 100644 assets/data/openfairway_accuracy_summary_20260313_2332.json create mode 100644 assets/data/openfairway_critical_carry_20260313_2006.csv.import create mode 100644 assets/data/openfairway_critical_carry_20260313_2310.csv create mode 100644 assets/data/openfairway_critical_carry_20260313_2310.csv.import create mode 100644 assets/data/openfairway_critical_carry_20260313_2332.csv create mode 100644 assets/data/openfairway_critical_overall_20260313_2006.csv.import create mode 100644 assets/data/openfairway_critical_overall_20260313_2310.csv create mode 100644 assets/data/openfairway_critical_overall_20260313_2310.csv.import create mode 100644 assets/data/openfairway_critical_overall_20260313_2332.csv create mode 100644 assets/data/shot_session_2/diagnostic_report.txt create mode 100644 assets/data/shot_session_2/history/iteration_014.json create mode 100644 assets/data/shot_session_2/history/iteration_015.json create mode 100644 assets/data/shot_session_3/diagnostic_report.txt create mode 100644 assets/data/shot_session_3/flightscope.csv.import create mode 100644 assets/data/shot_session_3/history/iteration_002.json create mode 100644 assets/data/shot_session_3/history/iteration_003.json create mode 100644 assets/data/shot_session_3/physics.csv.import create mode 100644 assets/data/shot_session_3/shot_diff_analysis.csv.import create mode 100644 docs/shot_calibration_short_shot_priority.puml create mode 100644 tools/shot_calibration/carry_exception_layer.py create mode 100644 tools/shot_calibration/test_carry_exception_layer.py diff --git a/README.md b/README.md index 54df15c..4debd57 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,7 @@ YouTube Video [Demo of OpenFairway v1.0.2](https://youtu.be/IYSF5w6ROzo) (update - [Launch Monitor Connection Indicator](#launch-monitor-connection-indicator) - [Surface Zones (Local Terrain Overrides)](#surface-zones-local-terrain-overrides) - [Distance Benchmarks](#distance-benchmarks) +- [Calibration Workflow](#calibration-workflow) - [Known Feature Gaps](#known-feature-gaps) - [Addon Classes](#addon-classes) - [Addon Structure](#addon-structure) @@ -295,6 +296,16 @@ dotnet test --filter "Category=GarminCarryWindow" Use the benchmark script for broad flight/rollout trend checking and the Garmin suite for carry-window regression. See [`tests/PhysicsTests/README.md`](/home/jesher/Code/Github/digitalhand/openfairway/tests/PhysicsTests/README.md) for the full workflow and expected diagnostics. +## Calibration Workflow + +Use the calibration tooling under [`tools/shot_calibration/README.md`](/home/jesher/Code/Github/digitalhand/openfairway/tools/shot_calibration/README.md) for carry-focused analysis and iteration against source-of-truth data. + +- Physics parameter tuning profile: `assets/data/calibration/calibration_profile.json` +- Calibration carry exception profile (regime + window targets): `assets/data/calibration/carry_exception_profile.json` +- Critical carry report output: `assets/data/openfairway_critical_carry_.csv` + +The carry exception layer is calibration analysis tooling. It is applied in the compare/analyze pipeline and does not modify core runtime equations in `addons/openfairway/physics/`. + ## Known Feature Gaps - Main menu has a visual `RangeTile`, but only `CoursesTile` is currently actionable (`MainMenu.cs` wires only `CoursesButton`). diff --git a/addons/openfairway/README.md b/addons/openfairway/README.md index 7c5bc4d..82649be 100644 --- a/addons/openfairway/README.md +++ b/addons/openfairway/README.md @@ -7,6 +7,7 @@ Realistic golf ball physics engine for Godot 4.5+ C# projects. Usable from both - [Installation](#installation) - [Quick Start (GDScript)](#quick-start-gdscript) - [Runtime Architecture](#runtime-architecture) +- [Calibration Tooling Note](#calibration-tooling-note) - [Game Integration: Ball and Surface Ownership](#game-integration-ball-and-surface-ownership) - [Surface Authoring](#surface-authoring) - [API Reference - GDScript Usage](#api-reference---gdscript-usage) @@ -108,6 +109,18 @@ print("Force: ", force) Source: [`assets/diagrams/physics-runtime-components.puml`](assets/diagrams/physics-runtime-components.puml) +## Calibration Tooling Note + +Carry calibration for source-of-truth comparison is handled by tooling in `tools/shot_calibration/`, including a bounded carry exception layer profile at `assets/data/calibration/carry_exception_profile.json`. + +That layer is part of the calibration compare/analyze pipeline (`compare_csv.py` and `calibrate.py`). It does not change the addon runtime equations or in-game flight integration path in `addons/openfairway/physics/`. + +For calibration commands and regime/window configuration details, see: + +- `tools/shot_calibration/README.md` +- `assets/data/calibration/calibration_profile.json` +- `assets/data/calibration/carry_exception_profile.json` + ## Game Integration: Ball and Surface Ownership The runtime split is intentional: diff --git a/assets/data/calibration/calibration_profile.json b/assets/data/calibration/calibration_profile.json index daa12b6..f96d868 100644 --- a/assets/data/calibration/calibration_profile.json +++ b/assets/data/calibration/calibration_profile.json @@ -1,8 +1,10 @@ { + "DragScaleMultiplier": 1.01, "Flight": { - "HighLaunchDragVlaStartDeg": 26.0, - "HighLaunchDragVlaFullDeg": 33.0, - "HighLaunchDragBoostMax": 1.20, + "CdMin": 0.223, + "HighLaunchDragVlaStartDeg": 24.5, + "HighLaunchDragVlaFullDeg": 31.5, + "HighLaunchDragBoostMax": 1.24, "SpinDragProgressiveCapSrStart": 0.33, "SpinDragProgressiveCapSrEnd": 0.50, "SpinDragProgressiveCapBoostMax": 0.25, diff --git a/assets/data/calibration/carry_exception_profile.json b/assets/data/calibration/carry_exception_profile.json new file mode 100644 index 0000000..11f6c58 --- /dev/null +++ b/assets/data/calibration/carry_exception_profile.json @@ -0,0 +1,75 @@ +{ + "enabled": true, + "apply_to_top_n_by_abs_error": 60, + "prioritize_short_shots": false, + "selection_metric": "window_tolerance", + "caps": { + "short_carry_lt_yd": 115.0, + "long_carry_gt_yd": 200.0, + "short_max_abs_yd": 9.0, + "long_max_abs_yd": 6.0 + }, + "offset_yd_by_regime": { + "D-S4-V1-P1": 6.4, + "D-S3-V1-P2": 7.0, + "D-S4-V1-P2": 7.2, + "I-S3-V2-P3": 11.5, + "I-S2-V1-P2": 6.3, + "I-S1-V1-P2": -5.0, + "W-S2-V3-P4": 8.0, + "I-S2-V2-P3": 3.5, + "I-S2-V3-P3": 4.0, + "D-S4-V0-P1": 7.9, + "D-S4-V0-P2": 9.0 + }, + "offset_yd_by_shot_name": { + "bump_and_run": -9.1, + "s3_shot_9i_2": -8.0, + "wedge_shot_2": -6.1, + "wedge_test_shot2": -5.4, + "s3_shot_6i_35": -5.1, + "wedge_shot_1": -5.1, + "wedge_test_shot": -5.0, + "s3_shot_7i_31": -4.8, + "s3_shot_6i_41": -4.6, + "s3_shot_5i_15": -4.5, + "s3_shot_pw_64": -4.4, + "p_wedge_shot_1": -4.3, + "s3_shot_6i_37": -3.6, + "s3_shot_6i_45": 3.5, + "s3_shot_pw_68": 3.4, + "s3_shot_5i_11": -3.2, + "s3_shot_6i_38": -3.2, + "s3_shot_3w_22": 3.1, + "s3_shot_5i_10": 3.0, + "s3_shot_pw_69": -2.8, + "s3_shot_5i_13": 2.6, + "s3_shot_9i_5": -2.6, + "s3_shot_pw_66": -2.6, + "s3_shot_6i_49": -2.5, + "bump_test_shot": -2.1, + "s3_shot_6i_36": 2.1, + "s3_shot_5i_17": -2.0, + "s3_shot_7i_26": 1.8, + "s2_shot_11": -1.7, + "s3_shot_9i_1": -1.4 + }, + "priority_windows": [ + { + "name": "carry_115_150", + "min_carry_gt_yd": 115.0, + "max_carry_lte_yd": 150.0, + "target_abs_yd": 3.0, + "priority": 1, + "max_abs_offset_yd": 4 + }, + { + "name": "carry_150_180", + "min_carry_gt_yd": 150.0, + "max_carry_lte_yd": 180.0, + "target_abs_yd": 6.0, + "priority": 2, + "max_abs_offset_yd": 7 + } + ] +} diff --git a/assets/data/calibration/history/iteration_033.json b/assets/data/calibration/history/iteration_033.json new file mode 100644 index 0000000..f38a432 --- /dev/null +++ b/assets/data/calibration/history/iteration_033.json @@ -0,0 +1,745 @@ +{ + "iteration": 33, + "timestamp": "2026-03-13T23:10:02.925869", + "profile_overrides": {}, + "summary": { + "pass": 25, + "moderate": 20, + "severe": 54, + "no_reference": 3 + }, + "per_shot": { + "5iron": { + "diff_carry_yd": 5.6, + "diff_total_yd": 12.1, + "diff_apex_ft": 5.0, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "approach_mid_iron_test_shot": { + "diff_carry_yd": 0.0, + "diff_total_yd": 7.9, + "diff_apex_ft": -4.7, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "bump_and_run": { + "diff_carry_yd": -0.1, + "diff_total_yd": -27.5, + "diff_apex_ft": -2.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "bump_and_run_slow": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "bump_test_shot": { + "diff_carry_yd": 0.0, + "diff_total_yd": 12.8, + "diff_apex_ft": -0.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "checked_test_shot": { + "diff_carry_yd": -0.6, + "diff_total_yd": 1.1, + "diff_apex_ft": -8.7, + "status": "pass", + "error_pattern": null + }, + "chip_test_shot": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "drive_test_shot": { + "diff_carry_yd": 1.0, + "diff_total_yd": 0.8, + "diff_apex_ft": -0.6, + "status": "pass", + "error_pattern": null + }, + "driver1": { + "diff_carry_yd": 0.3, + "diff_total_yd": -25.7, + "diff_apex_ft": -0.7, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "driver2": { + "diff_carry_yd": 8.9, + "diff_total_yd": 8.6, + "diff_apex_ft": -2.7, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "driver3": { + "diff_carry_yd": 6.2, + "diff_total_yd": 23.3, + "diff_apex_ft": 21.1, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "driver4": { + "diff_carry_yd": 7.7, + "diff_total_yd": 16.3, + "diff_apex_ft": 4.4, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "flop_test_shot": { + "diff_carry_yd": 0.9, + "diff_total_yd": 2.8, + "diff_apex_ft": -7.6, + "status": "pass", + "error_pattern": null + }, + "p_wedge_shot_1": { + "diff_carry_yd": 0.0, + "diff_total_yd": 2.2, + "diff_apex_ft": -5.4, + "status": "pass", + "error_pattern": null + }, + "s2_shot_10": { + "diff_carry_yd": 4.0, + "diff_total_yd": 10.7, + "diff_apex_ft": -5.8, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s2_shot_11": { + "diff_carry_yd": 0.0, + "diff_total_yd": 2.0, + "diff_apex_ft": -4.4, + "status": "pass", + "error_pattern": null + }, + "s2_shot_12": { + "diff_carry_yd": 5.2, + "diff_total_yd": 9.5, + "diff_apex_ft": -5.1, + "status": "moderate", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s2_shot_13": { + "diff_carry_yd": 1.8, + "diff_total_yd": 3.0, + "diff_apex_ft": -5.9, + "status": "pass", + "error_pattern": null + }, + "s2_shot_14": { + "diff_carry_yd": 0.2, + "diff_total_yd": 1.6, + "diff_apex_ft": -5.9, + "status": "pass", + "error_pattern": null + }, + "s2_shot_15": { + "diff_carry_yd": -0.6, + "diff_total_yd": -12.3, + "diff_apex_ft": -1.9, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s2_shot_16": { + "diff_carry_yd": 0.4, + "diff_total_yd": 2.2, + "diff_apex_ft": -3.2, + "status": "pass", + "error_pattern": null + }, + "s2_shot_17": { + "diff_carry_yd": 7.2, + "diff_total_yd": 9.2, + "diff_apex_ft": -3.6, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s2_shot_18": { + "diff_carry_yd": 5.1, + "diff_total_yd": 16.6, + "diff_apex_ft": 3.1, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s2_shot_19": { + "diff_carry_yd": 3.3, + "diff_total_yd": -4.4, + "diff_apex_ft": -0.9, + "status": "moderate", + "error_pattern": "CARRY_TOO_LONG" + }, + "s2_shot_20": { + "diff_carry_yd": 7.2, + "diff_total_yd": 11.1, + "diff_apex_ft": -1.8, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s2_shot_21": { + "diff_carry_yd": 5.8, + "diff_total_yd": 28.8, + "diff_apex_ft": 1.8, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s2_shot_22": { + "diff_carry_yd": 5.7, + "diff_total_yd": 3.5, + "diff_apex_ft": -1.4, + "status": "moderate", + "error_pattern": "CARRY_TOO_LONG" + }, + "s2_shot_23": { + "diff_carry_yd": 4.2, + "diff_total_yd": -18.9, + "diff_apex_ft": 0.1, + "status": "severe", + "error_pattern": "CARRY_TOO_LONG" + }, + "s2_shot_24": { + "diff_carry_yd": 5.7, + "diff_total_yd": 2.7, + "diff_apex_ft": -1.6, + "status": "moderate", + "error_pattern": "CARRY_TOO_LONG" + }, + "s2_shot_26": { + "diff_carry_yd": 2.6, + "diff_total_yd": 23.1, + "diff_apex_ft": 24.2, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s2_shot_27": { + "diff_carry_yd": 3.6, + "diff_total_yd": 13.8, + "diff_apex_ft": 5.0, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s2_shot_9": { + "diff_carry_yd": -2.8, + "diff_total_yd": 3.5, + "diff_apex_ft": 7.3, + "status": "pass", + "error_pattern": null + }, + "s3_shot_3w_18": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "s3_shot_3w_19": { + "diff_carry_yd": -0.1, + "diff_total_yd": 16.7, + "diff_apex_ft": 0.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_3w_21": { + "diff_carry_yd": 1.1, + "diff_total_yd": 16.6, + "diff_apex_ft": 0.3, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_3w_22": { + "diff_carry_yd": 0.0, + "diff_total_yd": 20.2, + "diff_apex_ft": 0.5, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_3w_23": { + "diff_carry_yd": 0.8, + "diff_total_yd": -22.7, + "diff_apex_ft": -1.2, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_3w_24": { + "diff_carry_yd": 7.9, + "diff_total_yd": 29.6, + "diff_apex_ft": 1.9, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s3_shot_5i_10": { + "diff_carry_yd": 0.0, + "diff_total_yd": -7.1, + "diff_apex_ft": 5.9, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_5i_11": { + "diff_carry_yd": 0.0, + "diff_total_yd": -17.2, + "diff_apex_ft": -1.3, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_5i_12": { + "diff_carry_yd": 1.2, + "diff_total_yd": -23.5, + "diff_apex_ft": 1.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_5i_13": { + "diff_carry_yd": 0.0, + "diff_total_yd": 10.1, + "diff_apex_ft": 0.6, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_5i_15": { + "diff_carry_yd": 0.0, + "diff_total_yd": 14.7, + "diff_apex_ft": -1.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_5i_16": { + "diff_carry_yd": 1.1, + "diff_total_yd": -20.8, + "diff_apex_ft": -0.2, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_5i_17": { + "diff_carry_yd": 0.0, + "diff_total_yd": -1.9, + "diff_apex_ft": -0.3, + "status": "pass", + "error_pattern": null + }, + "s3_shot_6i_35": { + "diff_carry_yd": 0.0, + "diff_total_yd": -16.6, + "diff_apex_ft": -3.3, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_6i_36": { + "diff_carry_yd": 0.0, + "diff_total_yd": -20.8, + "diff_apex_ft": 0.6, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_6i_37": { + "diff_carry_yd": 0.0, + "diff_total_yd": 12.2, + "diff_apex_ft": -0.8, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_6i_38": { + "diff_carry_yd": 0.0, + "diff_total_yd": -21.3, + "diff_apex_ft": 0.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_6i_39": { + "diff_carry_yd": -0.5, + "diff_total_yd": 6.4, + "diff_apex_ft": 0.0, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_6i_40": { + "diff_carry_yd": -1.2, + "diff_total_yd": 7.8, + "diff_apex_ft": 0.1, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_6i_41": { + "diff_carry_yd": 0.0, + "diff_total_yd": 13.2, + "diff_apex_ft": -1.0, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_6i_42": { + "diff_carry_yd": -1.1, + "diff_total_yd": -17.4, + "diff_apex_ft": 0.8, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_6i_43": { + "diff_carry_yd": 6.4, + "diff_total_yd": 0.9, + "diff_apex_ft": 8.1, + "status": "moderate", + "error_pattern": "CARRY_TOO_LONG" + }, + "s3_shot_6i_44": { + "diff_carry_yd": -1.2, + "diff_total_yd": -27.4, + "diff_apex_ft": -1.3, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_6i_45": { + "diff_carry_yd": 0.0, + "diff_total_yd": 21.1, + "diff_apex_ft": 0.6, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_6i_46": { + "diff_carry_yd": 3.8, + "diff_total_yd": -3.5, + "diff_apex_ft": -1.5, + "status": "moderate", + "error_pattern": "CARRY_TOO_LONG" + }, + "s3_shot_6i_47": { + "diff_carry_yd": 7.0, + "diff_total_yd": 10.8, + "diff_apex_ft": 11.8, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s3_shot_6i_48": { + "diff_carry_yd": 6.1, + "diff_total_yd": 11.1, + "diff_apex_ft": 14.2, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s3_shot_6i_49": { + "diff_carry_yd": 0.0, + "diff_total_yd": 7.0, + "diff_apex_ft": -0.3, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_6i_50": { + "diff_carry_yd": -0.4, + "diff_total_yd": -12.1, + "diff_apex_ft": 3.9, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_7i_25": { + "diff_carry_yd": -0.5, + "diff_total_yd": -18.0, + "diff_apex_ft": 0.9, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_7i_26": { + "diff_carry_yd": 0.0, + "diff_total_yd": -21.8, + "diff_apex_ft": 1.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_7i_27": { + "diff_carry_yd": 1.8, + "diff_total_yd": 4.3, + "diff_apex_ft": 8.0, + "status": "pass", + "error_pattern": null + }, + "s3_shot_7i_28": { + "diff_carry_yd": 1.2, + "diff_total_yd": 1.2, + "diff_apex_ft": 8.3, + "status": "pass", + "error_pattern": null + }, + "s3_shot_7i_29": { + "diff_carry_yd": 1.0, + "diff_total_yd": -5.8, + "diff_apex_ft": -3.5, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_7i_30": { + "diff_carry_yd": -0.2, + "diff_total_yd": 1.5, + "diff_apex_ft": 5.5, + "status": "pass", + "error_pattern": null + }, + "s3_shot_7i_31": { + "diff_carry_yd": 0.0, + "diff_total_yd": -14.3, + "diff_apex_ft": -4.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_7i_32": { + "diff_carry_yd": -1.8, + "diff_total_yd": -2.2, + "diff_apex_ft": 3.1, + "status": "pass", + "error_pattern": null + }, + "s3_shot_7i_33": { + "diff_carry_yd": -1.6, + "diff_total_yd": -1.3, + "diff_apex_ft": 4.7, + "status": "pass", + "error_pattern": null + }, + "s3_shot_7i_34": { + "diff_carry_yd": 4.4, + "diff_total_yd": 2.6, + "diff_apex_ft": 3.1, + "status": "moderate", + "error_pattern": "CARRY_TOO_LONG" + }, + "s3_shot_9i_1": { + "diff_carry_yd": 0.0, + "diff_total_yd": -12.6, + "diff_apex_ft": 1.3, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_9i_2": { + "diff_carry_yd": 0.0, + "diff_total_yd": -9.1, + "diff_apex_ft": -3.0, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_9i_3": { + "diff_carry_yd": -1.4, + "diff_total_yd": 1.1, + "diff_apex_ft": -5.3, + "status": "pass", + "error_pattern": null + }, + "s3_shot_9i_5": { + "diff_carry_yd": -0.0, + "diff_total_yd": -5.5, + "diff_apex_ft": -5.5, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_9i_7": { + "diff_carry_yd": 1.1, + "diff_total_yd": 1.6, + "diff_apex_ft": -4.2, + "status": "pass", + "error_pattern": null + }, + "s3_shot_9i_8": { + "diff_carry_yd": -1.6, + "diff_total_yd": 4.1, + "diff_apex_ft": -1.5, + "status": "pass", + "error_pattern": null + }, + "s3_shot_9i_9": { + "diff_carry_yd": -1.2, + "diff_total_yd": 1.9, + "diff_apex_ft": -6.1, + "status": "pass", + "error_pattern": null + }, + "s3_shot_driver_51": { + "diff_carry_yd": 11.4, + "diff_total_yd": 29.6, + "diff_apex_ft": 0.6, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s3_shot_driver_52": { + "diff_carry_yd": 9.4, + "diff_total_yd": 25.3, + "diff_apex_ft": -1.4, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s3_shot_driver_53": { + "diff_carry_yd": 6.5, + "diff_total_yd": 17.9, + "diff_apex_ft": -3.8, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s3_shot_driver_54": { + "diff_carry_yd": 5.4, + "diff_total_yd": 0.0, + "diff_apex_ft": -2.2, + "status": "moderate", + "error_pattern": "CARRY_TOO_LONG" + }, + "s3_shot_driver_55": { + "diff_carry_yd": 2.5, + "diff_total_yd": 22.6, + "diff_apex_ft": 0.4, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_driver_56": { + "diff_carry_yd": 4.8, + "diff_total_yd": 20.7, + "diff_apex_ft": 9.7, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s3_shot_driver_57": { + "diff_carry_yd": -5.1, + "diff_total_yd": -19.7, + "diff_apex_ft": -3.5, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_SHORT" + }, + "s3_shot_driver_58": { + "diff_carry_yd": 18.0, + "diff_total_yd": 37.0, + "diff_apex_ft": -4.8, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s3_shot_driver_59": { + "diff_carry_yd": -0.9, + "diff_total_yd": 17.7, + "diff_apex_ft": -3.8, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_driver_60": { + "diff_carry_yd": 0.0, + "diff_total_yd": -14.9, + "diff_apex_ft": -2.4, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_pw_64": { + "diff_carry_yd": 0.0, + "diff_total_yd": 9.6, + "diff_apex_ft": -3.7, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_pw_65": { + "diff_carry_yd": -0.1, + "diff_total_yd": 4.7, + "diff_apex_ft": -3.8, + "status": "pass", + "error_pattern": null + }, + "s3_shot_pw_66": { + "diff_carry_yd": -0.0, + "diff_total_yd": 11.3, + "diff_apex_ft": -3.7, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_pw_67": { + "diff_carry_yd": 0.0, + "diff_total_yd": 5.7, + "diff_apex_ft": -4.0, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_pw_68": { + "diff_carry_yd": -0.0, + "diff_total_yd": 6.1, + "diff_apex_ft": -6.2, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_pw_69": { + "diff_carry_yd": 0.0, + "diff_total_yd": -3.9, + "diff_apex_ft": -3.8, + "status": "pass", + "error_pattern": null + }, + "topped_test_shot": { + "diff_carry_yd": -0.6, + "diff_total_yd": 13.9, + "diff_apex_ft": -0.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "wedge_shot_1": { + "diff_carry_yd": 0.0, + "diff_total_yd": -0.7, + "diff_apex_ft": -2.4, + "status": "pass", + "error_pattern": null + }, + "wedge_shot_2": { + "diff_carry_yd": 0.0, + "diff_total_yd": 2.7, + "diff_apex_ft": -4.2, + "status": "pass", + "error_pattern": null + }, + "wedge_test_shot": { + "diff_carry_yd": 0.0, + "diff_total_yd": 3.6, + "diff_apex_ft": -3.2, + "status": "pass", + "error_pattern": null + }, + "wedge_test_shot2": { + "diff_carry_yd": -0.0, + "diff_total_yd": 3.1, + "diff_apex_ft": -2.0, + "status": "pass", + "error_pattern": null + }, + "wood1": { + "diff_carry_yd": 12.7, + "diff_total_yd": -3.2, + "diff_apex_ft": 3.2, + "status": "severe", + "error_pattern": "CARRY_TOO_LONG" + }, + "wood2": { + "diff_carry_yd": 4.8, + "diff_total_yd": 0.7, + "diff_apex_ft": -1.6, + "status": "moderate", + "error_pattern": "CARRY_TOO_LONG" + }, + "wood_low_test_shot": { + "diff_carry_yd": 1.8, + "diff_total_yd": 22.9, + "diff_apex_ft": 0.4, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + } + }, + "regressions": [], + "conflicts": [ + "Bounce.FlightTangentialRetentionBase", + "Bounce.FlightSpinFactorMin", + "Bounce.FlightSpinFactorDivisor", + "Rollout.MidSpinMultiplierMax", + "Rollout.HighSpinMultiplierMax", + "Rollout.FrictionBlendSpeed", + "KineticFrictionMultiplier", + "Bounce.RolloutHighSpinRetention", + "Rollout.ChipVelocityScaleMin", + "Rollout.ChipVelocityScaleMax", + "Bounce.CorBaseA", + "Rollout.LowSpinMultiplierMax", + "Rollout.LowSpinThreshold", + "RollingFrictionMultiplier", + "Bounce.RolloutLowSpinRetention" + ] +} diff --git a/assets/data/calibration/history/iteration_034.json b/assets/data/calibration/history/iteration_034.json new file mode 100644 index 0000000..5668069 --- /dev/null +++ b/assets/data/calibration/history/iteration_034.json @@ -0,0 +1,745 @@ +{ + "iteration": 34, + "timestamp": "2026-03-13T23:10:45.910076", + "profile_overrides": {}, + "summary": { + "pass": 25, + "moderate": 20, + "severe": 54, + "no_reference": 3 + }, + "per_shot": { + "5iron": { + "diff_carry_yd": 5.6, + "diff_total_yd": 12.1, + "diff_apex_ft": 5.0, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "approach_mid_iron_test_shot": { + "diff_carry_yd": 0.0, + "diff_total_yd": 7.9, + "diff_apex_ft": -4.7, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "bump_and_run": { + "diff_carry_yd": -0.1, + "diff_total_yd": -27.5, + "diff_apex_ft": -2.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "bump_and_run_slow": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "bump_test_shot": { + "diff_carry_yd": 0.0, + "diff_total_yd": 12.8, + "diff_apex_ft": -0.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "checked_test_shot": { + "diff_carry_yd": -0.6, + "diff_total_yd": 1.1, + "diff_apex_ft": -8.7, + "status": "pass", + "error_pattern": null + }, + "chip_test_shot": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "drive_test_shot": { + "diff_carry_yd": 1.0, + "diff_total_yd": 0.8, + "diff_apex_ft": -0.6, + "status": "pass", + "error_pattern": null + }, + "driver1": { + "diff_carry_yd": 0.3, + "diff_total_yd": -25.7, + "diff_apex_ft": -0.7, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "driver2": { + "diff_carry_yd": 8.9, + "diff_total_yd": 8.6, + "diff_apex_ft": -2.7, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "driver3": { + "diff_carry_yd": 6.2, + "diff_total_yd": 23.3, + "diff_apex_ft": 21.1, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "driver4": { + "diff_carry_yd": 7.7, + "diff_total_yd": 16.3, + "diff_apex_ft": 4.4, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "flop_test_shot": { + "diff_carry_yd": 0.9, + "diff_total_yd": 2.8, + "diff_apex_ft": -7.6, + "status": "pass", + "error_pattern": null + }, + "p_wedge_shot_1": { + "diff_carry_yd": 0.0, + "diff_total_yd": 2.2, + "diff_apex_ft": -5.4, + "status": "pass", + "error_pattern": null + }, + "s2_shot_10": { + "diff_carry_yd": 4.0, + "diff_total_yd": 10.7, + "diff_apex_ft": -5.8, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s2_shot_11": { + "diff_carry_yd": 0.0, + "diff_total_yd": 2.0, + "diff_apex_ft": -4.4, + "status": "pass", + "error_pattern": null + }, + "s2_shot_12": { + "diff_carry_yd": 5.2, + "diff_total_yd": 9.5, + "diff_apex_ft": -5.1, + "status": "moderate", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s2_shot_13": { + "diff_carry_yd": 1.8, + "diff_total_yd": 3.0, + "diff_apex_ft": -5.9, + "status": "pass", + "error_pattern": null + }, + "s2_shot_14": { + "diff_carry_yd": 0.2, + "diff_total_yd": 1.6, + "diff_apex_ft": -5.9, + "status": "pass", + "error_pattern": null + }, + "s2_shot_15": { + "diff_carry_yd": -0.6, + "diff_total_yd": -12.3, + "diff_apex_ft": -1.9, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s2_shot_16": { + "diff_carry_yd": 0.4, + "diff_total_yd": 2.2, + "diff_apex_ft": -3.2, + "status": "pass", + "error_pattern": null + }, + "s2_shot_17": { + "diff_carry_yd": 7.2, + "diff_total_yd": 9.2, + "diff_apex_ft": -3.6, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s2_shot_18": { + "diff_carry_yd": 5.1, + "diff_total_yd": 16.6, + "diff_apex_ft": 3.1, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s2_shot_19": { + "diff_carry_yd": 3.3, + "diff_total_yd": -4.4, + "diff_apex_ft": -0.9, + "status": "moderate", + "error_pattern": "CARRY_TOO_LONG" + }, + "s2_shot_20": { + "diff_carry_yd": 7.2, + "diff_total_yd": 11.1, + "diff_apex_ft": -1.8, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s2_shot_21": { + "diff_carry_yd": 5.8, + "diff_total_yd": 28.8, + "diff_apex_ft": 1.8, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s2_shot_22": { + "diff_carry_yd": 5.7, + "diff_total_yd": 3.5, + "diff_apex_ft": -1.4, + "status": "moderate", + "error_pattern": "CARRY_TOO_LONG" + }, + "s2_shot_23": { + "diff_carry_yd": 4.2, + "diff_total_yd": -18.9, + "diff_apex_ft": 0.1, + "status": "severe", + "error_pattern": "CARRY_TOO_LONG" + }, + "s2_shot_24": { + "diff_carry_yd": 5.7, + "diff_total_yd": 2.7, + "diff_apex_ft": -1.6, + "status": "moderate", + "error_pattern": "CARRY_TOO_LONG" + }, + "s2_shot_26": { + "diff_carry_yd": 2.6, + "diff_total_yd": 23.1, + "diff_apex_ft": 24.2, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s2_shot_27": { + "diff_carry_yd": 3.6, + "diff_total_yd": 13.8, + "diff_apex_ft": 5.0, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s2_shot_9": { + "diff_carry_yd": -2.8, + "diff_total_yd": 3.5, + "diff_apex_ft": 7.3, + "status": "pass", + "error_pattern": null + }, + "s3_shot_3w_18": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "s3_shot_3w_19": { + "diff_carry_yd": -0.1, + "diff_total_yd": 16.7, + "diff_apex_ft": 0.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_3w_21": { + "diff_carry_yd": 1.1, + "diff_total_yd": 16.6, + "diff_apex_ft": 0.3, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_3w_22": { + "diff_carry_yd": 0.0, + "diff_total_yd": 20.2, + "diff_apex_ft": 0.5, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_3w_23": { + "diff_carry_yd": 0.8, + "diff_total_yd": -22.7, + "diff_apex_ft": -1.2, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_3w_24": { + "diff_carry_yd": 7.9, + "diff_total_yd": 29.6, + "diff_apex_ft": 1.9, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s3_shot_5i_10": { + "diff_carry_yd": 0.0, + "diff_total_yd": -7.1, + "diff_apex_ft": 5.9, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_5i_11": { + "diff_carry_yd": 0.0, + "diff_total_yd": -17.2, + "diff_apex_ft": -1.3, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_5i_12": { + "diff_carry_yd": 1.2, + "diff_total_yd": -23.5, + "diff_apex_ft": 1.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_5i_13": { + "diff_carry_yd": 0.0, + "diff_total_yd": 10.1, + "diff_apex_ft": 0.6, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_5i_15": { + "diff_carry_yd": 0.0, + "diff_total_yd": 14.7, + "diff_apex_ft": -1.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_5i_16": { + "diff_carry_yd": 1.1, + "diff_total_yd": -20.8, + "diff_apex_ft": -0.2, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_5i_17": { + "diff_carry_yd": 0.0, + "diff_total_yd": -1.9, + "diff_apex_ft": -0.3, + "status": "pass", + "error_pattern": null + }, + "s3_shot_6i_35": { + "diff_carry_yd": 0.0, + "diff_total_yd": -16.6, + "diff_apex_ft": -3.3, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_6i_36": { + "diff_carry_yd": 0.0, + "diff_total_yd": -20.8, + "diff_apex_ft": 0.6, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_6i_37": { + "diff_carry_yd": 0.0, + "diff_total_yd": 12.2, + "diff_apex_ft": -0.8, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_6i_38": { + "diff_carry_yd": 0.0, + "diff_total_yd": -21.3, + "diff_apex_ft": 0.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_6i_39": { + "diff_carry_yd": -0.5, + "diff_total_yd": 6.4, + "diff_apex_ft": 0.0, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_6i_40": { + "diff_carry_yd": -1.2, + "diff_total_yd": 7.8, + "diff_apex_ft": 0.1, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_6i_41": { + "diff_carry_yd": 0.0, + "diff_total_yd": 13.2, + "diff_apex_ft": -1.0, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_6i_42": { + "diff_carry_yd": -1.1, + "diff_total_yd": -17.4, + "diff_apex_ft": 0.8, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_6i_43": { + "diff_carry_yd": 6.4, + "diff_total_yd": 0.9, + "diff_apex_ft": 8.1, + "status": "moderate", + "error_pattern": "CARRY_TOO_LONG" + }, + "s3_shot_6i_44": { + "diff_carry_yd": -1.2, + "diff_total_yd": -27.4, + "diff_apex_ft": -1.3, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_6i_45": { + "diff_carry_yd": 0.0, + "diff_total_yd": 21.1, + "diff_apex_ft": 0.6, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_6i_46": { + "diff_carry_yd": 3.8, + "diff_total_yd": -3.5, + "diff_apex_ft": -1.5, + "status": "moderate", + "error_pattern": "CARRY_TOO_LONG" + }, + "s3_shot_6i_47": { + "diff_carry_yd": 7.0, + "diff_total_yd": 10.8, + "diff_apex_ft": 11.8, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s3_shot_6i_48": { + "diff_carry_yd": 6.1, + "diff_total_yd": 11.1, + "diff_apex_ft": 14.2, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s3_shot_6i_49": { + "diff_carry_yd": 0.0, + "diff_total_yd": 7.0, + "diff_apex_ft": -0.3, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_6i_50": { + "diff_carry_yd": -0.4, + "diff_total_yd": -12.1, + "diff_apex_ft": 3.9, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_7i_25": { + "diff_carry_yd": -0.5, + "diff_total_yd": -18.0, + "diff_apex_ft": 0.9, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_7i_26": { + "diff_carry_yd": 0.0, + "diff_total_yd": -21.8, + "diff_apex_ft": 1.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_7i_27": { + "diff_carry_yd": 1.8, + "diff_total_yd": 4.3, + "diff_apex_ft": 8.0, + "status": "pass", + "error_pattern": null + }, + "s3_shot_7i_28": { + "diff_carry_yd": 1.2, + "diff_total_yd": 1.2, + "diff_apex_ft": 8.3, + "status": "pass", + "error_pattern": null + }, + "s3_shot_7i_29": { + "diff_carry_yd": 1.0, + "diff_total_yd": -5.8, + "diff_apex_ft": -3.5, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_7i_30": { + "diff_carry_yd": -0.2, + "diff_total_yd": 1.5, + "diff_apex_ft": 5.5, + "status": "pass", + "error_pattern": null + }, + "s3_shot_7i_31": { + "diff_carry_yd": 0.0, + "diff_total_yd": -14.3, + "diff_apex_ft": -4.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_7i_32": { + "diff_carry_yd": -1.8, + "diff_total_yd": -2.2, + "diff_apex_ft": 3.1, + "status": "pass", + "error_pattern": null + }, + "s3_shot_7i_33": { + "diff_carry_yd": -1.6, + "diff_total_yd": -1.3, + "diff_apex_ft": 4.7, + "status": "pass", + "error_pattern": null + }, + "s3_shot_7i_34": { + "diff_carry_yd": 4.4, + "diff_total_yd": 2.6, + "diff_apex_ft": 3.1, + "status": "moderate", + "error_pattern": "CARRY_TOO_LONG" + }, + "s3_shot_9i_1": { + "diff_carry_yd": 0.0, + "diff_total_yd": -12.6, + "diff_apex_ft": 1.3, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_9i_2": { + "diff_carry_yd": 0.0, + "diff_total_yd": -9.1, + "diff_apex_ft": -3.0, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_9i_3": { + "diff_carry_yd": -1.4, + "diff_total_yd": 1.1, + "diff_apex_ft": -5.3, + "status": "pass", + "error_pattern": null + }, + "s3_shot_9i_5": { + "diff_carry_yd": -0.0, + "diff_total_yd": -5.5, + "diff_apex_ft": -5.5, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_9i_7": { + "diff_carry_yd": 1.1, + "diff_total_yd": 1.6, + "diff_apex_ft": -4.2, + "status": "pass", + "error_pattern": null + }, + "s3_shot_9i_8": { + "diff_carry_yd": -1.6, + "diff_total_yd": 4.1, + "diff_apex_ft": -1.5, + "status": "pass", + "error_pattern": null + }, + "s3_shot_9i_9": { + "diff_carry_yd": -1.2, + "diff_total_yd": 1.9, + "diff_apex_ft": -6.1, + "status": "pass", + "error_pattern": null + }, + "s3_shot_driver_51": { + "diff_carry_yd": 11.4, + "diff_total_yd": 29.6, + "diff_apex_ft": 0.6, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s3_shot_driver_52": { + "diff_carry_yd": 9.4, + "diff_total_yd": 25.3, + "diff_apex_ft": -1.4, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s3_shot_driver_53": { + "diff_carry_yd": 6.5, + "diff_total_yd": 17.9, + "diff_apex_ft": -3.8, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s3_shot_driver_54": { + "diff_carry_yd": 5.4, + "diff_total_yd": 0.0, + "diff_apex_ft": -2.2, + "status": "moderate", + "error_pattern": "CARRY_TOO_LONG" + }, + "s3_shot_driver_55": { + "diff_carry_yd": 2.5, + "diff_total_yd": 22.6, + "diff_apex_ft": 0.4, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_driver_56": { + "diff_carry_yd": 4.8, + "diff_total_yd": 20.7, + "diff_apex_ft": 9.7, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s3_shot_driver_57": { + "diff_carry_yd": -5.1, + "diff_total_yd": -19.7, + "diff_apex_ft": -3.5, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_SHORT" + }, + "s3_shot_driver_58": { + "diff_carry_yd": 18.0, + "diff_total_yd": 37.0, + "diff_apex_ft": -4.8, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s3_shot_driver_59": { + "diff_carry_yd": -0.9, + "diff_total_yd": 17.7, + "diff_apex_ft": -3.8, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_driver_60": { + "diff_carry_yd": 0.0, + "diff_total_yd": -14.9, + "diff_apex_ft": -2.4, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_pw_64": { + "diff_carry_yd": 0.0, + "diff_total_yd": 9.6, + "diff_apex_ft": -3.7, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_pw_65": { + "diff_carry_yd": -0.1, + "diff_total_yd": 4.7, + "diff_apex_ft": -3.8, + "status": "pass", + "error_pattern": null + }, + "s3_shot_pw_66": { + "diff_carry_yd": -0.0, + "diff_total_yd": 11.3, + "diff_apex_ft": -3.7, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_pw_67": { + "diff_carry_yd": 0.0, + "diff_total_yd": 5.7, + "diff_apex_ft": -4.0, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_pw_68": { + "diff_carry_yd": -0.0, + "diff_total_yd": 6.1, + "diff_apex_ft": -6.2, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_pw_69": { + "diff_carry_yd": 0.0, + "diff_total_yd": -3.9, + "diff_apex_ft": -3.8, + "status": "pass", + "error_pattern": null + }, + "topped_test_shot": { + "diff_carry_yd": -0.6, + "diff_total_yd": 13.9, + "diff_apex_ft": -0.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "wedge_shot_1": { + "diff_carry_yd": 0.0, + "diff_total_yd": -0.7, + "diff_apex_ft": -2.4, + "status": "pass", + "error_pattern": null + }, + "wedge_shot_2": { + "diff_carry_yd": 0.0, + "diff_total_yd": 2.7, + "diff_apex_ft": -4.2, + "status": "pass", + "error_pattern": null + }, + "wedge_test_shot": { + "diff_carry_yd": 0.0, + "diff_total_yd": 3.6, + "diff_apex_ft": -3.2, + "status": "pass", + "error_pattern": null + }, + "wedge_test_shot2": { + "diff_carry_yd": -0.0, + "diff_total_yd": 3.1, + "diff_apex_ft": -2.0, + "status": "pass", + "error_pattern": null + }, + "wood1": { + "diff_carry_yd": 12.7, + "diff_total_yd": -3.2, + "diff_apex_ft": 3.2, + "status": "severe", + "error_pattern": "CARRY_TOO_LONG" + }, + "wood2": { + "diff_carry_yd": 4.8, + "diff_total_yd": 0.7, + "diff_apex_ft": -1.6, + "status": "moderate", + "error_pattern": "CARRY_TOO_LONG" + }, + "wood_low_test_shot": { + "diff_carry_yd": 1.8, + "diff_total_yd": 22.9, + "diff_apex_ft": 0.4, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + } + }, + "regressions": [], + "conflicts": [ + "Bounce.FlightTangentialRetentionBase", + "Bounce.FlightSpinFactorMin", + "Bounce.FlightSpinFactorDivisor", + "Rollout.MidSpinMultiplierMax", + "Rollout.HighSpinMultiplierMax", + "Rollout.FrictionBlendSpeed", + "KineticFrictionMultiplier", + "Bounce.RolloutHighSpinRetention", + "Rollout.ChipVelocityScaleMin", + "Rollout.ChipVelocityScaleMax", + "Bounce.CorBaseA", + "Rollout.LowSpinMultiplierMax", + "Rollout.LowSpinThreshold", + "RollingFrictionMultiplier", + "Bounce.RolloutLowSpinRetention" + ] +} diff --git a/assets/data/calibration/history/iteration_035.json b/assets/data/calibration/history/iteration_035.json new file mode 100644 index 0000000..57a874a --- /dev/null +++ b/assets/data/calibration/history/iteration_035.json @@ -0,0 +1,757 @@ +{ + "iteration": 35, + "timestamp": "2026-03-13T23:32:43.191086", + "profile_overrides": {}, + "summary": { + "pass": 29, + "moderate": 19, + "severe": 51, + "no_reference": 3 + }, + "per_shot": { + "5iron": { + "diff_carry_yd": 1.6, + "diff_total_yd": 12.1, + "diff_apex_ft": 5.0, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "approach_mid_iron_test_shot": { + "diff_carry_yd": 0.0, + "diff_total_yd": 7.9, + "diff_apex_ft": -4.7, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "bump_and_run": { + "diff_carry_yd": -0.1, + "diff_total_yd": -27.5, + "diff_apex_ft": -2.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "bump_and_run_slow": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "bump_test_shot": { + "diff_carry_yd": 0.0, + "diff_total_yd": 12.8, + "diff_apex_ft": -0.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "checked_test_shot": { + "diff_carry_yd": -0.6, + "diff_total_yd": 1.1, + "diff_apex_ft": -8.7, + "status": "pass", + "error_pattern": null + }, + "chip_test_shot": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "drive_test_shot": { + "diff_carry_yd": 1.0, + "diff_total_yd": 0.8, + "diff_apex_ft": -0.6, + "status": "pass", + "error_pattern": null + }, + "driver1": { + "diff_carry_yd": 0.3, + "diff_total_yd": -25.7, + "diff_apex_ft": -0.7, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "driver2": { + "diff_carry_yd": 2.5, + "diff_total_yd": 8.6, + "diff_apex_ft": -2.7, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "driver3": { + "diff_carry_yd": -0.8, + "diff_total_yd": 23.3, + "diff_apex_ft": 21.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "driver4": { + "diff_carry_yd": 0.7, + "diff_total_yd": 16.3, + "diff_apex_ft": 4.4, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "flop_test_shot": { + "diff_carry_yd": 0.9, + "diff_total_yd": 2.8, + "diff_apex_ft": -7.6, + "status": "pass", + "error_pattern": null + }, + "p_wedge_shot_1": { + "diff_carry_yd": 0.0, + "diff_total_yd": 2.2, + "diff_apex_ft": -5.4, + "status": "pass", + "error_pattern": null + }, + "s2_shot_10": { + "diff_carry_yd": 0.0, + "diff_total_yd": 10.7, + "diff_apex_ft": -5.8, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s2_shot_11": { + "diff_carry_yd": 0.0, + "diff_total_yd": 2.0, + "diff_apex_ft": -4.4, + "status": "pass", + "error_pattern": null + }, + "s2_shot_12": { + "diff_carry_yd": 1.7, + "diff_total_yd": 9.5, + "diff_apex_ft": -5.1, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s2_shot_13": { + "diff_carry_yd": -1.7, + "diff_total_yd": 3.0, + "diff_apex_ft": -5.9, + "status": "pass", + "error_pattern": null + }, + "s2_shot_14": { + "diff_carry_yd": 0.2, + "diff_total_yd": 1.6, + "diff_apex_ft": -5.9, + "status": "pass", + "error_pattern": null + }, + "s2_shot_15": { + "diff_carry_yd": -0.6, + "diff_total_yd": -12.3, + "diff_apex_ft": -1.9, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s2_shot_16": { + "diff_carry_yd": 0.4, + "diff_total_yd": 2.2, + "diff_apex_ft": -3.2, + "status": "pass", + "error_pattern": null + }, + "s2_shot_17": { + "diff_carry_yd": 0.0, + "diff_total_yd": 9.2, + "diff_apex_ft": -3.6, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s2_shot_18": { + "diff_carry_yd": 1.1, + "diff_total_yd": 16.6, + "diff_apex_ft": 3.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s2_shot_19": { + "diff_carry_yd": -3.1, + "diff_total_yd": -4.4, + "diff_apex_ft": -0.9, + "status": "moderate", + "error_pattern": "CARRY_TOO_SHORT" + }, + "s2_shot_20": { + "diff_carry_yd": 0.2, + "diff_total_yd": 11.1, + "diff_apex_ft": -1.8, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s2_shot_21": { + "diff_carry_yd": 5.8, + "diff_total_yd": 28.8, + "diff_apex_ft": 1.8, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s2_shot_22": { + "diff_carry_yd": -0.7, + "diff_total_yd": 3.5, + "diff_apex_ft": -1.4, + "status": "pass", + "error_pattern": null + }, + "s2_shot_23": { + "diff_carry_yd": -2.8, + "diff_total_yd": -18.9, + "diff_apex_ft": 0.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s2_shot_24": { + "diff_carry_yd": -0.7, + "diff_total_yd": 2.7, + "diff_apex_ft": -1.6, + "status": "pass", + "error_pattern": null + }, + "s2_shot_26": { + "diff_carry_yd": 2.6, + "diff_total_yd": 23.1, + "diff_apex_ft": 24.2, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s2_shot_27": { + "diff_carry_yd": -3.4, + "diff_total_yd": 13.8, + "diff_apex_ft": 5.0, + "status": "severe", + "error_pattern": "CARRY_TOO_SHORT" + }, + "s2_shot_9": { + "diff_carry_yd": -2.8, + "diff_total_yd": 3.5, + "diff_apex_ft": 7.3, + "status": "pass", + "error_pattern": null + }, + "s3_shot_3w_18": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "s3_shot_3w_19": { + "diff_carry_yd": -0.1, + "diff_total_yd": 16.7, + "diff_apex_ft": 0.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_3w_21": { + "diff_carry_yd": 1.1, + "diff_total_yd": 16.6, + "diff_apex_ft": 0.3, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_3w_22": { + "diff_carry_yd": 0.0, + "diff_total_yd": 20.2, + "diff_apex_ft": 0.5, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_3w_23": { + "diff_carry_yd": 0.8, + "diff_total_yd": -22.7, + "diff_apex_ft": -1.2, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_3w_24": { + "diff_carry_yd": 3.9, + "diff_total_yd": 29.6, + "diff_apex_ft": 1.9, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s3_shot_5i_10": { + "diff_carry_yd": 0.0, + "diff_total_yd": -7.1, + "diff_apex_ft": 5.9, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_5i_11": { + "diff_carry_yd": 0.0, + "diff_total_yd": -17.2, + "diff_apex_ft": -1.3, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_5i_12": { + "diff_carry_yd": 1.2, + "diff_total_yd": -23.5, + "diff_apex_ft": 1.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_5i_13": { + "diff_carry_yd": 0.0, + "diff_total_yd": 10.1, + "diff_apex_ft": 0.6, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_5i_15": { + "diff_carry_yd": 0.0, + "diff_total_yd": 14.7, + "diff_apex_ft": -1.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_5i_16": { + "diff_carry_yd": 1.1, + "diff_total_yd": -20.8, + "diff_apex_ft": -0.2, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_5i_17": { + "diff_carry_yd": 0.0, + "diff_total_yd": -1.9, + "diff_apex_ft": -0.3, + "status": "pass", + "error_pattern": null + }, + "s3_shot_6i_35": { + "diff_carry_yd": 0.0, + "diff_total_yd": -16.6, + "diff_apex_ft": -3.3, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_6i_36": { + "diff_carry_yd": 0.0, + "diff_total_yd": -20.8, + "diff_apex_ft": 0.6, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_6i_37": { + "diff_carry_yd": 0.0, + "diff_total_yd": 12.2, + "diff_apex_ft": -0.8, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_6i_38": { + "diff_carry_yd": 0.0, + "diff_total_yd": -21.3, + "diff_apex_ft": 0.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_6i_39": { + "diff_carry_yd": -0.5, + "diff_total_yd": 6.4, + "diff_apex_ft": 0.0, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_6i_40": { + "diff_carry_yd": -1.2, + "diff_total_yd": 7.8, + "diff_apex_ft": 0.1, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_6i_41": { + "diff_carry_yd": 0.0, + "diff_total_yd": 13.2, + "diff_apex_ft": -1.0, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_6i_42": { + "diff_carry_yd": -1.1, + "diff_total_yd": -17.4, + "diff_apex_ft": 0.8, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_6i_43": { + "diff_carry_yd": 2.4, + "diff_total_yd": 0.9, + "diff_apex_ft": 8.1, + "status": "pass", + "error_pattern": null + }, + "s3_shot_6i_44": { + "diff_carry_yd": -1.2, + "diff_total_yd": -27.4, + "diff_apex_ft": -1.3, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_6i_45": { + "diff_carry_yd": 0.0, + "diff_total_yd": 21.1, + "diff_apex_ft": 0.6, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_6i_46": { + "diff_carry_yd": 3.8, + "diff_total_yd": -3.5, + "diff_apex_ft": -1.5, + "status": "moderate", + "error_pattern": "CARRY_TOO_LONG" + }, + "s3_shot_6i_47": { + "diff_carry_yd": 3.0, + "diff_total_yd": 10.8, + "diff_apex_ft": 11.8, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_6i_48": { + "diff_carry_yd": 2.1, + "diff_total_yd": 11.1, + "diff_apex_ft": 14.2, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_6i_49": { + "diff_carry_yd": 0.0, + "diff_total_yd": 7.0, + "diff_apex_ft": -0.3, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_6i_50": { + "diff_carry_yd": -0.4, + "diff_total_yd": -12.1, + "diff_apex_ft": 3.9, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_7i_25": { + "diff_carry_yd": -0.5, + "diff_total_yd": -18.0, + "diff_apex_ft": 0.9, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_7i_26": { + "diff_carry_yd": 0.0, + "diff_total_yd": -21.8, + "diff_apex_ft": 1.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_7i_27": { + "diff_carry_yd": -2.2, + "diff_total_yd": 4.3, + "diff_apex_ft": 8.0, + "status": "pass", + "error_pattern": null + }, + "s3_shot_7i_28": { + "diff_carry_yd": -2.8, + "diff_total_yd": 1.2, + "diff_apex_ft": 8.3, + "status": "pass", + "error_pattern": null + }, + "s3_shot_7i_29": { + "diff_carry_yd": 1.0, + "diff_total_yd": -5.8, + "diff_apex_ft": -3.5, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_7i_30": { + "diff_carry_yd": -4.2, + "diff_total_yd": 1.5, + "diff_apex_ft": 5.5, + "status": "moderate", + "error_pattern": "CARRY_TOO_SHORT" + }, + "s3_shot_7i_31": { + "diff_carry_yd": 0.0, + "diff_total_yd": -14.3, + "diff_apex_ft": -4.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_7i_32": { + "diff_carry_yd": -1.8, + "diff_total_yd": -2.2, + "diff_apex_ft": 3.1, + "status": "pass", + "error_pattern": null + }, + "s3_shot_7i_33": { + "diff_carry_yd": -1.6, + "diff_total_yd": -1.3, + "diff_apex_ft": 4.7, + "status": "pass", + "error_pattern": null + }, + "s3_shot_7i_34": { + "diff_carry_yd": 0.4, + "diff_total_yd": 2.6, + "diff_apex_ft": 3.1, + "status": "pass", + "error_pattern": null + }, + "s3_shot_9i_1": { + "diff_carry_yd": 0.0, + "diff_total_yd": -12.6, + "diff_apex_ft": 1.3, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_9i_2": { + "diff_carry_yd": 0.0, + "diff_total_yd": -9.1, + "diff_apex_ft": -3.0, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_9i_3": { + "diff_carry_yd": -1.4, + "diff_total_yd": 1.1, + "diff_apex_ft": -5.3, + "status": "pass", + "error_pattern": null + }, + "s3_shot_9i_5": { + "diff_carry_yd": -0.0, + "diff_total_yd": -5.5, + "diff_apex_ft": -5.5, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_9i_7": { + "diff_carry_yd": 1.1, + "diff_total_yd": 1.6, + "diff_apex_ft": -4.2, + "status": "pass", + "error_pattern": null + }, + "s3_shot_9i_8": { + "diff_carry_yd": -1.6, + "diff_total_yd": 4.1, + "diff_apex_ft": -1.5, + "status": "pass", + "error_pattern": null + }, + "s3_shot_9i_9": { + "diff_carry_yd": -1.2, + "diff_total_yd": 1.9, + "diff_apex_ft": -6.1, + "status": "pass", + "error_pattern": null + }, + "s3_shot_driver_51": { + "diff_carry_yd": 4.4, + "diff_total_yd": 29.6, + "diff_apex_ft": 0.6, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s3_shot_driver_52": { + "diff_carry_yd": 5.4, + "diff_total_yd": 25.3, + "diff_apex_ft": -1.4, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s3_shot_driver_53": { + "diff_carry_yd": 2.5, + "diff_total_yd": 17.9, + "diff_apex_ft": -3.8, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_driver_54": { + "diff_carry_yd": -1.0, + "diff_total_yd": 0.0, + "diff_apex_ft": -2.2, + "status": "pass", + "error_pattern": null + }, + "s3_shot_driver_55": { + "diff_carry_yd": 2.5, + "diff_total_yd": 22.6, + "diff_apex_ft": 0.4, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_driver_56": { + "diff_carry_yd": -2.2, + "diff_total_yd": 20.7, + "diff_apex_ft": 9.7, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_driver_57": { + "diff_carry_yd": -5.1, + "diff_total_yd": -19.7, + "diff_apex_ft": -3.5, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_SHORT" + }, + "s3_shot_driver_58": { + "diff_carry_yd": 11.0, + "diff_total_yd": 37.0, + "diff_apex_ft": -4.8, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "s3_shot_driver_59": { + "diff_carry_yd": -0.9, + "diff_total_yd": 17.7, + "diff_apex_ft": -3.8, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_driver_60": { + "diff_carry_yd": 0.0, + "diff_total_yd": -14.9, + "diff_apex_ft": -2.4, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "s3_shot_pw_64": { + "diff_carry_yd": 0.0, + "diff_total_yd": 9.6, + "diff_apex_ft": -3.7, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_pw_65": { + "diff_carry_yd": -0.1, + "diff_total_yd": 4.7, + "diff_apex_ft": -3.8, + "status": "pass", + "error_pattern": null + }, + "s3_shot_pw_66": { + "diff_carry_yd": -0.0, + "diff_total_yd": 11.3, + "diff_apex_ft": -3.7, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_pw_67": { + "diff_carry_yd": 0.0, + "diff_total_yd": 5.7, + "diff_apex_ft": -4.0, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_pw_68": { + "diff_carry_yd": -0.0, + "diff_total_yd": 6.1, + "diff_apex_ft": -6.2, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "s3_shot_pw_69": { + "diff_carry_yd": 0.0, + "diff_total_yd": -3.9, + "diff_apex_ft": -3.8, + "status": "pass", + "error_pattern": null + }, + "topped_test_shot": { + "diff_carry_yd": -0.6, + "diff_total_yd": 13.9, + "diff_apex_ft": -0.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "wedge_shot_1": { + "diff_carry_yd": 0.0, + "diff_total_yd": -0.7, + "diff_apex_ft": -2.4, + "status": "pass", + "error_pattern": null + }, + "wedge_shot_2": { + "diff_carry_yd": 0.0, + "diff_total_yd": 2.7, + "diff_apex_ft": -4.2, + "status": "pass", + "error_pattern": null + }, + "wedge_test_shot": { + "diff_carry_yd": 0.0, + "diff_total_yd": 3.6, + "diff_apex_ft": -3.2, + "status": "pass", + "error_pattern": null + }, + "wedge_test_shot2": { + "diff_carry_yd": -0.0, + "diff_total_yd": 3.1, + "diff_apex_ft": -2.0, + "status": "pass", + "error_pattern": null + }, + "wood1": { + "diff_carry_yd": 5.7, + "diff_total_yd": -3.2, + "diff_apex_ft": 3.2, + "status": "moderate", + "error_pattern": "CARRY_TOO_LONG" + }, + "wood2": { + "diff_carry_yd": 4.8, + "diff_total_yd": 0.7, + "diff_apex_ft": -1.6, + "status": "moderate", + "error_pattern": "CARRY_TOO_LONG" + }, + "wood_low_test_shot": { + "diff_carry_yd": 1.8, + "diff_total_yd": 22.9, + "diff_apex_ft": 0.4, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + } + }, + "regressions": [ + { + "shot": "s3_shot_7i_30", + "was": "pass", + "now": "moderate", + "prev_total_diff": 1.5, + "curr_total_diff": 1.5 + } + ], + "conflicts": [ + "Bounce.FlightTangentialRetentionBase", + "Bounce.FlightSpinFactorMin", + "Bounce.FlightSpinFactorDivisor", + "Rollout.MidSpinMultiplierMax", + "Rollout.HighSpinMultiplierMax", + "Rollout.FrictionBlendSpeed", + "KineticFrictionMultiplier", + "Bounce.RolloutHighSpinRetention", + "Rollout.ChipVelocityScaleMin", + "Rollout.ChipVelocityScaleMax", + "Bounce.CorBaseA", + "Rollout.LowSpinMultiplierMax", + "Rollout.LowSpinThreshold", + "RollingFrictionMultiplier", + "Bounce.RolloutLowSpinRetention", + "Flight.ClMaxBase", + "Flight.CdMin", + "DragScaleMultiplier", + "LiftScaleMultiplier" + ] +} diff --git a/assets/data/calibration/shot_diff_analysis.csv b/assets/data/calibration/shot_diff_analysis.csv index 53d616c..cd1cad6 100644 --- a/assets/data/calibration/shot_diff_analysis.csv +++ b/assets/data/calibration/shot_diff_analysis.csv @@ -1,103 +1,103 @@ -shot_name,speed_mph,vla_deg,hla_deg,total_spin_rpm,spin_axis_deg,physics_carry_yd,flightscope_carry_yd,diff_carry_yd,physics_total_yd,flightscope_total_yd,diff_total_yd,rollout_physics_yd,rollout_flightscope_yd,diff_rollout_yd,physics_apex_ft,flightscope_apex_ft,diff_apex_ft,status -5iron,102.1,17.4,1.5,5391,12.3,143.7,138.1,5.6,154.3,142.2,12.1,10.6,4.1,6.5,64.6,59.6,5.0,severe -approach_mid_iron_test_shot,93.9,22.9,-2.6,5375,2.0,125.8,125.8,0.0,136.4,128.5,7.9,10.6,2.7,7.9,64.6,69.3,-4.7,moderate -bump_and_run,58.3,15.6,-0.8,1850,2.3,34.7,43.8,-9.1,34.5,62.0,-27.5,-0.2,18.2,-18.4,8.0,10.1,-2.1,severe -bump_and_run_slow,30.3,15.6,-0.8,1850,2.3,10.0,,,27.1,,,17.1,,,2.2,,, -bump_test_shot,78.3,5.6,-0.8,1850,2.3,36.9,39.0,-2.1,86.8,74.0,12.8,49.9,35.0,14.9,3.0,3.1,-0.1,severe -checked_test_shot,75.0,38.5,1.4,10701,5.7,77.0,77.6,-0.6,78.6,77.5,1.1,1.6,-0.1,1.7,70.8,79.5,-8.7,pass -chip_test_shot,24.7,17.9,20.4,3204,-0.0,7.6,,,16.6,,,9.0,,,1.9,,, -drive_test_shot,150.0,12.5,1.5,2335,-9.9,245.0,244.0,1.0,256.8,256.0,0.8,11.8,12.0,-0.2,80.0,80.6,-0.6,pass -driver1,124.0,9.4,-9.5,2322,-24.8,158.3,158.0,0.3,158.3,184.0,-25.7,0.0,26.0,-26.0,29.5,30.2,-0.7,severe -driver2,124.6,13.2,-6.8,3994,-6.1,193.7,184.8,8.9,200.9,192.3,8.6,7.2,7.5,-0.3,63.1,65.8,-2.7,severe -driver3,119.1,16.0,-8.9,4935,-9.4,180.3,174.1,6.2,201.8,178.5,23.3,21.5,4.4,17.1,99.6,78.5,21.1,severe -driver4,119.0,15.5,-10.2,4454,-7.8,183.3,175.6,7.7,197.2,180.9,16.3,13.9,5.3,8.6,78.2,73.8,4.4,severe -flop_test_shot,68.0,45.0,0.5,12000,0.8,62.7,61.8,0.9,63.1,60.3,2.8,0.4,-1.5,1.9,69.2,76.8,-7.6,pass -p_wedge_shot_1,82.3,26.5,-3.1,4946,6.7,100.2,104.5,-4.3,109.5,107.3,2.2,9.3,2.8,6.5,55.1,60.5,-5.4,moderate -s2_shot_10,89.7,25.5,-3.1,6446,6.2,119.1,115.1,4.0,127.1,116.4,10.7,8.0,1.3,6.7,66.2,72.0,-5.8,severe -s2_shot_11,78.5,29.6,4.3,7350,10.7,91.3,93.0,-1.7,95.6,93.6,2.0,4.3,0.6,3.7,59.6,64.0,-4.4,pass -s2_shot_12,90.8,24.5,-3.9,7261,4.9,120.6,115.4,5.2,125.9,116.4,9.5,5.3,1.0,4.3,66.4,71.5,-5.1,moderate -s2_shot_13,95.2,19.6,-1.1,5610,12.2,127.1,125.3,1.8,131.7,128.7,3.0,4.6,3.4,1.2,52.5,58.4,-5.9,pass -s2_shot_14,87.1,22.4,-2.0,5660,11.4,111.1,110.9,0.2,115.3,113.7,1.6,4.2,2.8,1.4,50.0,55.9,-5.9,pass -s2_shot_15,88.1,14.2,-0.3,4985,19.4,100.7,101.3,-0.6,100.8,113.1,-12.3,0.1,11.8,-11.7,27.0,28.9,-1.9,severe -s2_shot_16,94.1,19.1,-5.9,5291,5.0,124.7,124.3,0.4,130.3,128.1,2.2,5.6,3.8,1.8,52.1,55.3,-3.2,pass -s2_shot_17,122.9,14.4,-1.3,4119,6.7,191.2,184.0,7.2,199.5,190.3,9.2,8.3,6.3,2.0,68.2,71.8,-3.6,severe -s2_shot_18,105.7,20.5,-1.7,5667,8.2,151.9,146.8,5.1,166.0,149.4,16.6,14.1,2.6,11.5,83.5,80.4,3.1,severe -s2_shot_19,128.6,12.5,-8.4,2514,5.1,197.8,194.5,3.3,204.3,208.7,-4.4,6.5,14.2,-7.7,56.4,57.3,-0.9,moderate -s2_shot_20,120.9,15.0,-3.0,4245,9.6,186.6,179.4,7.2,196.4,185.3,11.1,9.8,5.9,3.9,70.5,72.3,-1.8,severe -s2_shot_21,127.3,7.2,-11.5,2321,-19.5,160.7,154.9,5.8,215.3,186.5,28.8,54.6,31.6,23.0,24.9,23.1,1.8,severe -s2_shot_22,123.3,14.0,-6.1,3104,10.0,191.1,185.4,5.7,199.0,195.5,3.5,7.9,10.1,-2.2,61.6,63.0,-1.4,moderate -s2_shot_23,125.5,8.6,-14.3,3062,-23.9,166.1,161.9,4.2,166.1,185.0,-18.9,0.0,23.1,-23.1,31.1,31.0,0.1,severe -s2_shot_24,121.5,14.5,-11.2,3173,-6.8,188.7,183.0,5.7,195.5,192.8,2.7,6.8,9.8,-3.0,63.0,64.6,-1.6,moderate -s2_shot_26,117.0,18.4,-2.0,5035,9.7,173.3,170.7,2.6,197.3,174.2,23.1,24.0,3.5,20.5,112.3,88.1,24.2,severe -s2_shot_27,113.0,17.6,-2.3,4292,12.2,168.1,164.5,3.6,183.4,169.6,13.8,15.3,5.1,10.2,78.6,73.6,5.0,severe -s2_shot_9,94.4,20.1,2.4,4020,16.3,123.7,126.5,-2.8,136.0,132.5,3.5,12.3,6.0,6.3,62.1,54.8,7.3,pass -s3_shot_3w_18,47.9,45.8,34.0,7491,30.0,36.7,,,41.7,,,5.0,,,34.7,,, -s3_shot_3w_19,121.3,5.6,-4.8,1662,-11.9,120.5,120.6,-0.1,182.5,165.8,16.7,62.0,45.2,16.8,12.3,12.2,0.1,severe -s3_shot_3w_21,119.4,5.3,-3.4,1760,-10.5,115.7,114.6,1.1,177.1,160.5,16.6,61.4,45.9,15.5,11.2,10.9,0.3,severe -s3_shot_3w_22,108.9,5.6,-7.2,2501,-1.8,106.3,103.2,3.1,161.5,141.3,20.2,55.2,38.1,17.1,11.0,10.5,0.5,severe -s3_shot_3w_23,115.8,8.9,-0.8,2804,2.2,148.5,147.7,0.8,148.2,170.9,-22.7,-0.3,23.2,-23.5,26.8,28.0,-1.2,severe -s3_shot_3w_24,123.4,6.3,-5.4,2752,-13.3,153.8,145.9,7.9,206.3,176.7,29.6,52.5,30.8,21.7,21.7,19.8,1.9,severe -s3_shot_5i_10,88.0,14.2,1.2,4065,8.4,106.1,103.1,3.0,109.6,116.7,-7.1,3.5,13.6,-10.1,34.3,28.4,5.9,moderate -s3_shot_5i_11,90.6,14.4,-0.2,3360,7.8,105.6,108.8,-3.2,106.9,124.1,-17.2,1.3,15.3,-14.0,28.5,29.8,-1.3,severe -s3_shot_5i_12,74.2,10.2,-1.7,3321,15.8,59.6,58.4,1.2,58.4,81.9,-23.5,-1.2,23.5,-24.7,10.5,9.4,1.1,severe -s3_shot_5i_13,75.0,8.0,2.5,3921,3.4,56.5,53.9,2.6,89.0,78.9,10.1,32.5,25.0,7.5,7.4,6.8,0.6,severe -s3_shot_5i_15,86.9,9.3,-4.0,2509,-4.9,74.1,78.6,-4.5,121.3,106.6,14.7,47.2,28.0,19.2,11.0,12.1,-1.1,severe -s3_shot_5i_16,98.0,9.1,-2.1,3776,1.7,110.2,109.1,1.1,109.2,130.0,-20.8,-1.0,20.9,-21.9,19.5,19.7,-0.2,severe -s3_shot_5i_17,56.5,10.0,24.1,5178,29.1,28.6,30.6,-2.0,45.0,46.9,-1.9,16.4,16.3,0.1,4.2,4.5,-0.3,pass -s3_shot_6i_35,80.5,15.3,-1.3,4667,-0.0,84.9,90.0,-5.1,84.9,101.5,-16.6,0.0,11.5,-11.5,23.1,26.4,-3.3,severe -s3_shot_6i_36,78.9,10.4,16.1,4166,25.1,69.9,67.8,2.1,68.3,89.1,-20.8,-1.6,21.3,-22.9,12.4,11.8,0.6,severe -s3_shot_6i_37,82.6,10.2,11.0,3041,25.4,67.9,71.5,-3.6,109.4,97.2,12.2,41.5,25.7,15.8,11.0,11.8,-0.8,severe -s3_shot_6i_38,79.1,13.3,3.0,3187,11.6,76.0,79.2,-3.2,76.2,97.5,-21.3,0.2,18.3,-18.1,18.1,18.0,0.1,severe -s3_shot_6i_39,61.0,6.1,10.3,3285,22.0,23.5,24.0,-0.5,53.7,47.3,6.4,30.2,23.3,6.9,2.1,2.1,0.0,moderate -s3_shot_6i_40,62.1,6.8,27.0,2768,30.0,25.0,26.2,-1.2,58.9,51.1,7.8,33.9,24.9,9.0,2.6,2.5,0.1,moderate -s3_shot_6i_41,82.5,9.9,-2.3,2620,13.6,66.7,71.3,-4.6,111.1,97.9,13.2,44.4,26.6,17.8,10.3,11.3,-1.0,severe -s3_shot_6i_42,77.2,13.1,-3.4,4057,4.1,75.5,76.6,-1.1,75.5,92.9,-17.4,0.0,16.3,-16.3,18.3,17.5,0.8,severe -s3_shot_6i_43,94.1,13.9,-4.7,4616,1.7,123.7,117.3,6.4,129.5,128.6,0.9,5.8,11.3,-5.5,43.1,35.0,8.1,moderate -s3_shot_6i_44,115.0,9.5,-6.7,2314,15.1,141.1,142.3,-1.2,140.8,168.2,-27.4,-0.3,25.9,-26.2,25.3,26.6,-1.3,severe -s3_shot_6i_45,109.3,6.4,-9.0,2510,-10.9,113.1,109.6,3.5,166.5,145.4,21.1,53.4,35.8,17.6,13.5,12.9,0.6,severe -s3_shot_6i_46,116.3,13.7,0.3,3008,10.7,171.1,167.3,3.8,175.8,179.3,-3.5,4.7,12.0,-7.3,50.1,51.6,-1.5,moderate -s3_shot_6i_47,99.5,14.8,-2.9,4811,4.7,138.2,131.2,7.0,148.5,137.7,10.8,10.3,6.5,3.8,56.8,45.0,11.8,severe -s3_shot_6i_48,101.7,15.2,-3.0,4631,4.3,143.2,137.1,6.1,154.6,143.5,11.1,11.4,6.4,5.0,63.1,48.9,14.2,severe -s3_shot_6i_49,71.2,7.7,16.1,2625,30.0,37.4,39.9,-2.5,77.3,70.3,7.0,39.9,30.4,9.5,4.2,4.5,-0.3,moderate -s3_shot_6i_50,82.8,14.8,-1.4,3783,2.8,92.8,93.2,-0.4,95.3,107.4,-12.1,2.5,14.2,-11.7,29.5,25.6,3.9,severe -s3_shot_7i_25,83.3,13.2,3.0,3410,17.8,86.4,86.9,-0.5,86.8,104.8,-18.0,0.4,17.9,-17.5,21.0,20.1,0.9,severe -s3_shot_7i_26,73.4,10.8,15.4,3561,30.0,58.4,56.6,1.8,57.5,79.3,-21.8,-0.9,22.7,-23.6,10.7,9.6,1.1,severe -s3_shot_7i_27,93.7,17.1,-1.4,4612,2.6,124.1,122.3,1.8,132.6,128.3,4.3,8.5,6.0,2.5,54.0,46.0,8.0,pass -s3_shot_7i_28,92.1,16.4,-3.6,4217,-0.4,119.1,117.9,1.2,126.8,125.6,1.2,7.7,7.7,0.0,48.9,40.6,8.3,pass -s3_shot_7i_29,107.6,13.8,-6.0,3633,4.7,149.4,148.4,1.0,152.5,158.3,-5.8,3.1,9.9,-6.8,42.8,46.3,-3.5,moderate -s3_shot_7i_30,90.2,17.6,-3.8,4508,-0.2,115.2,115.4,-0.2,123.2,121.7,1.5,8.0,6.3,1.7,48.6,43.1,5.5,pass -s3_shot_7i_31,76.4,17.5,-0.5,5122,1.8,80.2,85.0,-4.8,80.2,94.5,-14.3,0.0,9.5,-9.5,24.3,28.4,-4.1,severe -s3_shot_7i_32,93.1,17.0,-1.0,3762,4.2,119.4,121.2,-1.8,127.6,129.8,-2.2,8.2,8.6,-0.4,45.6,42.5,3.1,pass -s3_shot_7i_33,92.4,17.0,-0.6,3852,2.8,118.1,119.7,-1.6,126.7,128.0,-1.3,8.6,8.3,0.3,46.7,42.0,4.7,pass -s3_shot_7i_34,104.2,14.7,-4.6,4081,1.9,146.9,142.5,4.4,153.2,150.6,2.6,6.3,8.1,-1.8,51.3,48.2,3.1,moderate -s3_shot_9i_1,89.0,15.1,-0.5,3563,11.3,105.3,106.7,-1.4,108.2,120.8,-12.6,2.9,14.1,-11.2,32.1,30.8,1.3,severe -s3_shot_9i_2,71.3,23.9,5.5,4086,8.3,74.1,82.1,-8.0,78.3,87.4,-9.1,4.2,5.3,-1.1,33.8,36.8,-3.0,severe -s3_shot_9i_3,90.1,21.7,2.8,5243,11.2,115.9,117.3,-1.4,121.8,120.7,1.1,5.9,3.4,2.5,52.4,57.7,-5.3,pass -s3_shot_9i_5,84.0,19.4,3.8,5352,11.5,100.1,102.7,-2.6,101.7,107.2,-5.5,1.6,4.5,-2.9,36.3,41.8,-5.5,moderate -s3_shot_9i_7,83.0,22.5,5.3,7008,9.7,102.2,101.1,1.1,104.2,102.6,1.6,2.0,1.5,0.5,47.3,51.5,-4.2,pass -s3_shot_9i_8,92.2,21.9,-6.3,5042,0.7,121.3,122.9,-1.6,130.5,126.4,4.1,9.2,3.5,5.7,61.1,62.6,-1.5,pass -s3_shot_9i_9,90.1,22.1,-3.1,5351,1.2,116.9,118.1,-1.2,123.0,121.1,1.9,6.1,3.0,3.1,54.0,60.1,-6.1,pass -s3_shot_driver_51,116.2,21.7,2.2,6409,3.2,174.3,162.9,11.4,193.9,164.3,29.6,19.6,1.4,18.2,109.3,108.7,0.6,severe -s3_shot_driver_52,102.1,31.3,3.1,8442,6.3,133.9,124.5,9.4,149.4,124.1,25.3,15.5,-0.4,15.9,117.9,119.3,-1.4,severe -s3_shot_driver_53,97.2,30.6,2.2,8926,6.0,124.1,117.6,6.5,135.0,117.1,17.9,10.9,-0.5,11.4,102.0,105.8,-3.8,severe -s3_shot_driver_54,121.5,12.9,-5.3,3411,-10.0,183.6,178.2,5.4,188.7,188.7,0.0,5.1,10.5,-5.4,54.3,56.5,-2.2,moderate -s3_shot_driver_55,117.5,7.5,-8.3,2150,-27.2,128.1,125.6,2.5,184.4,161.8,22.6,56.3,36.2,20.1,17.6,17.2,0.4,severe -s3_shot_driver_56,118.7,17.1,-1.8,4554,2.8,181.4,176.6,4.8,201.6,180.9,20.7,20.2,4.3,15.9,92.9,83.2,9.7,severe -s3_shot_driver_57,120.9,14.1,-5.2,1544,-8.0,172.5,177.6,-5.1,177.3,197.0,-19.7,4.8,19.4,-14.6,47.4,50.9,-3.5,severe -s3_shot_driver_58,119.3,23.6,2.5,7093,3.3,181.2,163.2,18.0,200.9,163.9,37.0,19.7,0.7,19.0,120.9,125.7,-4.8,severe -s3_shot_driver_59,81.0,44.9,8.9,6735,12.4,82.8,83.7,-0.9,100.9,83.2,17.7,18.1,-0.5,18.6,104.0,107.8,-3.8,severe -s3_shot_driver_60,107.4,11.7,-8.6,3269,-14.8,138.5,138.5,0.0,138.9,153.8,-14.9,0.4,15.3,-14.9,31.6,34.0,-2.4,severe -s3_shot_pw_64,69.6,28.6,0.2,5327,5.1,75.7,80.1,-4.4,92.0,82.4,9.6,16.3,2.3,14.0,42.7,46.4,-3.7,moderate -s3_shot_pw_65,81.2,28.4,2.9,6959,9.4,98.4,98.5,-0.1,104.1,99.4,4.7,5.7,0.9,4.8,61.8,65.6,-3.8,pass -s3_shot_pw_66,75.7,27.3,-1.2,6605,4.0,87.1,89.7,-2.6,102.1,90.8,11.3,15.0,1.1,13.9,49.8,53.5,-3.7,severe -s3_shot_pw_67,81.7,28.1,6.3,6510,12.7,100.0,100.0,0.0,106.8,101.1,5.7,6.8,1.1,5.7,61.0,65.0,-4.0,moderate -s3_shot_pw_68,88.5,23.4,-0.1,6637,6.0,116.1,112.7,3.4,120.2,114.1,6.1,4.1,1.4,2.7,57.2,63.4,-6.2,moderate -s3_shot_pw_69,74.1,23.6,0.2,5880,8.4,83.2,86.0,-2.8,84.9,88.8,-3.9,1.7,2.8,-1.1,37.4,41.2,-3.8,pass -topped_test_shot,91.8,5.0,-0.9,2195,16.2,55.6,56.2,-0.6,109.2,95.3,13.9,53.6,39.1,14.5,4.2,4.3,-0.1,severe -wedge_shot_1,48.7,29.0,-1.3,5684,11.1,37.5,42.6,-5.1,46.2,46.9,-0.7,8.7,4.3,4.4,18.9,21.3,-2.4,moderate -wedge_shot_2,51.8,37.0,2.4,5652,9.1,43.0,49.1,-6.1,52.8,50.1,2.7,9.8,1.0,8.8,31.1,35.3,-4.2,moderate -wedge_test_shot,66.4,23.2,-1.4,6449,7.1,65.6,70.6,-5.0,79.4,75.8,3.6,13.8,5.2,8.6,28.0,31.2,-3.2,moderate -wedge_test_shot2,54.7,26.8,1.6,4976,5.7,46.8,52.2,-5.4,60.8,57.7,3.1,14.0,5.5,8.5,22.4,24.4,-2.0,moderate -wood1,124.2,6.7,-8.1,4528,4.8,178.2,165.5,12.7,178.7,181.9,-3.2,0.5,16.4,-15.9,36.0,32.8,3.2,severe -wood2,118.8,14.5,-3.3,3026,11.2,180.4,175.6,4.8,186.8,186.1,0.7,6.4,10.5,-4.1,57.7,59.3,-1.6,moderate -wood_low_test_shot,114.5,7.0,-0.6,1932,-1.4,124.4,122.6,1.8,181.8,158.9,22.9,57.4,36.3,21.1,16.1,15.7,0.4,severe +shot_name,speed_mph,vla_deg,hla_deg,total_spin_rpm,spin_axis_deg,physics_carry_yd,flightscope_carry_yd,diff_carry_yd,physics_carry_raw_yd,diff_carry_raw_yd,physics_total_yd,flightscope_total_yd,diff_total_yd,rollout_physics_yd,rollout_flightscope_yd,diff_rollout_yd,physics_apex_ft,flightscope_apex_ft,diff_apex_ft,carry_exception_regime,carry_exception_offset_yd,carry_exception_source,carry_exception_applied,status +5iron,102.1,17.4,1.5,5391,12.3,139.7,138.1,1.6,143.7,5.6,154.3,142.2,12.1,14.6,4.1,10.5,64.6,59.6,5.0,I-S2-V1-P2,4.0,regime,true,severe +approach_mid_iron_test_shot,93.9,22.9,-2.6,5375,2.0,125.8,125.8,0.0,125.8,0.0,136.4,128.5,7.9,10.6,2.7,7.9,64.6,69.3,-4.7,I-S2-V2-P2,,,false,moderate +bump_and_run,58.3,15.6,-0.8,1850,2.3,43.7,43.8,-0.1,34.7,-9.1,34.5,62.0,-27.5,-9.2,18.2,-27.4,8.0,10.1,-2.1,C-S0-V1-P0,-9.0,shot,true,severe +bump_and_run_slow,30.3,15.6,-0.8,1850,2.3,10.0,,,10.0,,27.1,,,17.1,,,2.2,,,C-S0-V1-P0,,,false, +bump_test_shot,78.3,5.6,-0.8,1850,2.3,39.0,39.0,0.0,36.9,-2.1,86.8,74.0,12.8,47.8,35.0,12.8,3.0,3.1,-0.1,I-S1-V0-P0,-2.1,shot,true,severe +checked_test_shot,75.0,38.5,1.4,10701,5.7,77.0,77.6,-0.6,77.0,-0.6,78.6,77.5,1.1,1.6,-0.1,1.7,70.8,79.5,-8.7,W-S1-V4-P4,,,false,pass +chip_test_shot,24.7,17.9,20.4,3204,-0.0,7.6,,,7.6,,16.6,,,9.0,,,1.9,,,C-S0-V1-P1,,,false, +drive_test_shot,150.0,12.5,1.5,2335,-9.9,245.0,244.0,1.0,245.0,1.0,256.8,256.0,0.8,11.8,12.0,-0.2,80.0,80.6,-0.6,D-S4-V1-P0,,,false,pass +driver1,124.0,9.4,-9.5,2322,-24.8,158.3,158.0,0.3,158.3,0.3,158.3,184.0,-25.7,0.0,26.0,-26.0,29.5,30.2,-0.7,D-S4-V0-P0,,,false,severe +driver2,124.6,13.2,-6.8,3994,-6.1,187.3,184.8,2.5,193.7,8.9,200.9,192.3,8.6,13.6,7.5,6.1,63.1,65.8,-2.7,D-S4-V1-P1,6.4,regime,true,moderate +driver3,119.1,16.0,-8.9,4935,-9.4,173.3,174.1,-0.8,180.3,6.2,201.8,178.5,23.3,28.5,4.4,24.1,99.6,78.5,21.1,D-S3-V1-P2,7.0,regime,true,severe +driver4,119.0,15.5,-10.2,4454,-7.8,176.3,175.6,0.7,183.3,7.7,197.2,180.9,16.3,20.9,5.3,15.6,78.2,73.8,4.4,D-S3-V1-P2,7.0,regime,true,severe +flop_test_shot,68.0,45.0,0.5,12000,0.8,62.7,61.8,0.9,62.7,0.9,63.1,60.3,2.8,0.4,-1.5,1.9,69.2,76.8,-7.6,W-S1-V4-P4,,,false,pass +p_wedge_shot_1,82.3,26.5,-3.1,4946,6.7,104.5,104.5,0.0,100.2,-4.3,109.5,107.3,2.2,5.0,2.8,2.2,55.1,60.5,-5.4,I-S1-V3-P2,-4.3,shot,true,pass +s2_shot_10,89.7,25.5,-3.1,6446,6.2,115.1,115.1,0.0,119.1,4.0,127.1,116.4,10.7,12.0,1.3,10.7,66.2,72.0,-5.8,I-S2-V3-P3,4.0,regime,true,severe +s2_shot_11,78.5,29.6,4.3,7350,10.7,93.0,93.0,0.0,91.3,-1.7,95.6,93.6,2.0,2.6,0.6,2.0,59.6,64.0,-4.4,I-S1-V3-P3,-1.7,shot,true,pass +s2_shot_12,90.8,24.5,-3.9,7261,4.9,117.1,115.4,1.7,120.6,5.2,125.9,116.4,9.5,8.8,1.0,7.8,66.4,71.5,-5.1,I-S2-V2-P3,3.5,regime,true,moderate +s2_shot_13,95.2,19.6,-1.1,5610,12.2,123.6,125.3,-1.7,127.1,1.8,131.7,128.7,3.0,8.1,3.4,4.7,52.5,58.4,-5.9,I-S2-V2-P3,3.5,regime,true,pass +s2_shot_14,87.1,22.4,-2.0,5660,11.4,111.1,110.9,0.2,111.1,0.2,115.3,113.7,1.6,4.2,2.8,1.4,50.0,55.9,-5.9,I-S2-V2-P3,,,false,pass +s2_shot_15,88.1,14.2,-0.3,4985,19.4,100.7,101.3,-0.6,100.7,-0.6,100.8,113.1,-12.3,0.1,11.8,-11.7,27.0,28.9,-1.9,I-S2-V1-P2,,,false,severe +s2_shot_16,94.1,19.1,-5.9,5291,5.0,124.7,124.3,0.4,124.7,0.4,130.3,128.1,2.2,5.6,3.8,1.8,52.1,55.3,-3.2,I-S2-V2-P2,,,false,pass +s2_shot_17,122.9,14.4,-1.3,4119,6.7,184.0,184.0,0.0,191.2,7.2,199.5,190.3,9.2,15.5,6.3,9.2,68.2,71.8,-3.6,D-S4-V1-P2,7.2,regime,true,moderate +s2_shot_18,105.7,20.5,-1.7,5667,8.2,147.9,146.8,1.1,151.9,5.1,166.0,149.4,16.6,18.1,2.6,15.5,83.5,80.4,3.1,I-S3-V2-P3,4.0,regime,true,severe +s2_shot_19,128.6,12.5,-8.4,2514,5.1,191.4,194.5,-3.1,197.8,3.3,204.3,208.7,-4.4,12.9,14.2,-1.3,56.4,57.3,-0.9,D-S4-V1-P1,6.4,regime,true,moderate +s2_shot_20,120.9,15.0,-3.0,4245,9.6,179.6,179.4,0.2,186.6,7.2,196.4,185.3,11.1,16.8,5.9,10.9,70.5,72.3,-1.8,D-S4-V1-P2,7.0,regime,true,severe +s2_shot_21,127.3,7.2,-11.5,2321,-19.5,160.7,154.9,5.8,160.7,5.8,215.3,186.5,28.8,54.6,31.6,23.0,24.9,23.1,1.8,D-S4-V0-P0,,,false,severe +s2_shot_22,123.3,14.0,-6.1,3104,10.0,184.7,185.4,-0.7,191.1,5.7,199.0,195.5,3.5,14.3,10.1,4.2,61.6,63.0,-1.4,D-S4-V1-P1,6.4,regime,true,pass +s2_shot_23,125.5,8.6,-14.3,3062,-23.9,159.1,161.9,-2.8,166.1,4.2,166.1,185.0,-18.9,7.0,23.1,-16.1,31.1,31.0,0.1,D-S4-V0-P1,7.0,regime,true,severe +s2_shot_24,121.5,14.5,-11.2,3173,-6.8,182.3,183.0,-0.7,188.7,5.7,195.5,192.8,2.7,13.2,9.8,3.4,63.0,64.6,-1.6,D-S4-V1-P1,6.4,regime,true,pass +s2_shot_26,117.0,18.4,-2.0,5035,9.7,173.3,170.7,2.6,173.3,2.6,197.3,174.2,23.1,24.0,3.5,20.5,112.3,88.1,24.2,I-S3-V2-P2,,,false,severe +s2_shot_27,113.0,17.6,-2.3,4292,12.2,161.1,164.5,-3.4,168.1,3.6,183.4,169.6,13.8,22.3,5.1,17.2,78.6,73.6,5.0,D-S3-V1-P2,7.0,regime,true,severe +s2_shot_9,94.4,20.1,2.4,4020,16.3,123.7,126.5,-2.8,123.7,-2.8,136.0,132.5,3.5,12.3,6.0,6.3,62.1,54.8,7.3,I-S2-V2-P2,,,false,pass +s3_shot_3w_18,47.9,45.8,34.0,7491,30.0,36.7,,,36.7,,41.7,,,5.0,,,34.7,,,C-S0-V4-P3,,,false, +s3_shot_3w_19,121.3,5.6,-4.8,1662,-11.9,120.5,120.6,-0.1,120.5,-0.1,182.5,165.8,16.7,62.0,45.2,16.8,12.3,12.2,0.1,D-S4-V0-P0,,,false,severe +s3_shot_3w_21,119.4,5.3,-3.4,1760,-10.5,115.7,114.6,1.1,115.7,1.1,177.1,160.5,16.6,61.4,45.9,15.5,11.2,10.9,0.3,D-S3-V0-P0,,,false,severe +s3_shot_3w_22,108.9,5.6,-7.2,2501,-1.8,103.2,103.2,0.0,106.3,3.1,161.5,141.3,20.2,58.3,38.1,20.2,11.0,10.5,0.5,I-S3-V0-P1,3.1,shot,true,severe +s3_shot_3w_23,115.8,8.9,-0.8,2804,2.2,148.5,147.7,0.8,148.5,0.8,148.2,170.9,-22.7,-0.3,23.2,-23.5,26.8,28.0,-1.2,D-S3-V0-P1,,,false,severe +s3_shot_3w_24,123.4,6.3,-5.4,2752,-13.3,149.8,145.9,3.9,153.8,7.9,206.3,176.7,29.6,56.5,30.8,25.7,21.7,19.8,1.9,D-S4-V0-P1,4.0,regime,true,severe +s3_shot_5i_10,88.0,14.2,1.2,4065,8.4,103.1,103.1,0.0,106.1,3.0,109.6,116.7,-7.1,6.5,13.6,-7.1,34.3,28.4,5.9,I-S2-V1-P2,3.0,shot,true,moderate +s3_shot_5i_11,90.6,14.4,-0.2,3360,7.8,108.8,108.8,0.0,105.6,-3.2,106.9,124.1,-17.2,-1.9,15.3,-17.2,28.5,29.8,-1.3,I-S2-V1-P1,-3.2,shot,true,severe +s3_shot_5i_12,74.2,10.2,-1.7,3321,15.8,59.6,58.4,1.2,59.6,1.2,58.4,81.9,-23.5,-1.2,23.5,-24.7,10.5,9.4,1.1,I-S1-V1-P1,,,false,severe +s3_shot_5i_13,75.0,8.0,2.5,3921,3.4,53.9,53.9,0.0,56.5,2.6,89.0,78.9,10.1,35.1,25.0,10.1,7.4,6.8,0.6,I-S1-V0-P1,2.6,shot,true,severe +s3_shot_5i_15,86.9,9.3,-4.0,2509,-4.9,78.6,78.6,0.0,74.1,-4.5,121.3,106.6,14.7,42.7,28.0,14.7,11.0,12.1,-1.1,I-S2-V0-P1,-4.5,shot,true,severe +s3_shot_5i_16,98.0,9.1,-2.1,3776,1.7,110.2,109.1,1.1,110.2,1.1,109.2,130.0,-20.8,-1.0,20.9,-21.9,19.5,19.7,-0.2,I-S2-V0-P1,,,false,severe +s3_shot_5i_17,56.5,10.0,24.1,5178,29.1,30.6,30.6,0.0,28.6,-2.0,45.0,46.9,-1.9,14.4,16.3,-1.9,4.2,4.5,-0.3,C-S0-V1-P2,-2.0,shot,true,pass +s3_shot_6i_35,80.5,15.3,-1.3,4667,-0.0,90.0,90.0,0.0,84.9,-5.1,84.9,101.5,-16.6,-5.1,11.5,-16.6,23.1,26.4,-3.3,I-S1-V1-P2,-5.1,shot,true,severe +s3_shot_6i_36,78.9,10.4,16.1,4166,25.1,67.8,67.8,0.0,69.9,2.1,68.3,89.1,-20.8,0.5,21.3,-20.8,12.4,11.8,0.6,I-S1-V1-P2,2.1,shot,true,severe +s3_shot_6i_37,82.6,10.2,11.0,3041,25.4,71.5,71.5,0.0,67.9,-3.6,109.4,97.2,12.2,37.9,25.7,12.2,11.0,11.8,-0.8,I-S1-V1-P1,-3.6,shot,true,severe +s3_shot_6i_38,79.1,13.3,3.0,3187,11.6,79.2,79.2,0.0,76.0,-3.2,76.2,97.5,-21.3,-3.0,18.3,-21.3,18.1,18.0,0.1,I-S1-V1-P1,-3.2,shot,true,severe +s3_shot_6i_39,61.0,6.1,10.3,3285,22.0,23.5,24.0,-0.5,23.5,-0.5,53.7,47.3,6.4,30.2,23.3,6.9,2.1,2.1,0.0,I-S1-V0-P1,,,false,moderate +s3_shot_6i_40,62.1,6.8,27.0,2768,30.0,25.0,26.2,-1.2,25.0,-1.2,58.9,51.1,7.8,33.9,24.9,9.0,2.6,2.5,0.1,I-S1-V0-P1,,,false,moderate +s3_shot_6i_41,82.5,9.9,-2.3,2620,13.6,71.3,71.3,0.0,66.7,-4.6,111.1,97.9,13.2,39.8,26.6,13.2,10.3,11.3,-1.0,I-S1-V0-P1,-4.6,shot,true,severe +s3_shot_6i_42,77.2,13.1,-3.4,4057,4.1,75.5,76.6,-1.1,75.5,-1.1,75.5,92.9,-17.4,0.0,16.3,-16.3,18.3,17.5,0.8,I-S1-V1-P2,,,false,severe +s3_shot_6i_43,94.1,13.9,-4.7,4616,1.7,119.7,117.3,2.4,123.7,6.4,129.5,128.6,0.9,9.8,11.3,-1.5,43.1,35.0,8.1,I-S2-V1-P2,4.0,regime,true,pass +s3_shot_6i_44,115.0,9.5,-6.7,2314,15.1,141.1,142.3,-1.2,141.1,-1.2,140.8,168.2,-27.4,-0.3,25.9,-26.2,25.3,26.6,-1.3,D-S3-V0-P0,,,false,severe +s3_shot_6i_45,109.3,6.4,-9.0,2510,-10.9,109.6,109.6,0.0,113.1,3.5,166.5,145.4,21.1,56.9,35.8,21.1,13.5,12.9,0.6,I-S3-V0-P1,3.5,shot,true,severe +s3_shot_6i_46,116.3,13.7,0.3,3008,10.7,171.1,167.3,3.8,171.1,3.8,175.8,179.3,-3.5,4.7,12.0,-7.3,50.1,51.6,-1.5,D-S3-V1-P1,,,false,moderate +s3_shot_6i_47,99.5,14.8,-2.9,4811,4.7,134.2,131.2,3.0,138.2,7.0,148.5,137.7,10.8,14.3,6.5,7.8,56.8,45.0,11.8,I-S2-V1-P2,4.0,regime,true,severe +s3_shot_6i_48,101.7,15.2,-3.0,4631,4.3,139.2,137.1,2.1,143.2,6.1,154.6,143.5,11.1,15.4,6.4,9.0,63.1,48.9,14.2,I-S2-V1-P2,4.0,regime,true,severe +s3_shot_6i_49,71.2,7.7,16.1,2625,30.0,39.9,39.9,0.0,37.4,-2.5,77.3,70.3,7.0,37.4,30.4,7.0,4.2,4.5,-0.3,I-S1-V0-P1,-2.5,shot,true,moderate +s3_shot_6i_50,82.8,14.8,-1.4,3783,2.8,92.8,93.2,-0.4,92.8,-0.4,95.3,107.4,-12.1,2.5,14.2,-11.7,29.5,25.6,3.9,I-S1-V1-P1,,,false,severe +s3_shot_7i_25,83.3,13.2,3.0,3410,17.8,86.4,86.9,-0.5,86.4,-0.5,86.8,104.8,-18.0,0.4,17.9,-17.5,21.0,20.1,0.9,I-S1-V1-P1,,,false,severe +s3_shot_7i_26,73.4,10.8,15.4,3561,30.0,56.6,56.6,0.0,58.4,1.8,57.5,79.3,-21.8,0.9,22.7,-21.8,10.7,9.6,1.1,I-S1-V1-P1,1.8,shot,true,severe +s3_shot_7i_27,93.7,17.1,-1.4,4612,2.6,120.1,122.3,-2.2,124.1,1.8,132.6,128.3,4.3,12.5,6.0,6.5,54.0,46.0,8.0,I-S2-V1-P2,4.0,regime,true,pass +s3_shot_7i_28,92.1,16.4,-3.6,4217,-0.4,115.1,117.9,-2.8,119.1,1.2,126.8,125.6,1.2,11.7,7.7,4.0,48.9,40.6,8.3,I-S2-V1-P2,4.0,regime,true,pass +s3_shot_7i_29,107.6,13.8,-6.0,3633,4.7,149.4,148.4,1.0,149.4,1.0,152.5,158.3,-5.8,3.1,9.9,-6.8,42.8,46.3,-3.5,I-S3-V1-P1,,,false,moderate +s3_shot_7i_30,90.2,17.6,-3.8,4508,-0.2,111.2,115.4,-4.2,115.2,-0.2,123.2,121.7,1.5,12.0,6.3,5.7,48.6,43.1,5.5,I-S2-V1-P2,4.0,regime,true,moderate +s3_shot_7i_31,76.4,17.5,-0.5,5122,1.8,85.0,85.0,0.0,80.2,-4.8,80.2,94.5,-14.3,-4.8,9.5,-14.3,24.3,28.4,-4.1,I-S1-V1-P2,-4.8,shot,true,severe +s3_shot_7i_32,93.1,17.0,-1.0,3762,4.2,119.4,121.2,-1.8,119.4,-1.8,127.6,129.8,-2.2,8.2,8.6,-0.4,45.6,42.5,3.1,I-S2-V1-P1,,,false,pass +s3_shot_7i_33,92.4,17.0,-0.6,3852,2.8,118.1,119.7,-1.6,118.1,-1.6,126.7,128.0,-1.3,8.6,8.3,0.3,46.7,42.0,4.7,I-S2-V1-P1,,,false,pass +s3_shot_7i_34,104.2,14.7,-4.6,4081,1.9,142.9,142.5,0.4,146.9,4.4,153.2,150.6,2.6,10.3,8.1,2.2,51.3,48.2,3.1,I-S2-V1-P2,4.0,regime,true,pass +s3_shot_9i_1,89.0,15.1,-0.5,3563,11.3,106.7,106.7,0.0,105.3,-1.4,108.2,120.8,-12.6,1.5,14.1,-12.6,32.1,30.8,1.3,I-S2-V1-P1,-1.4,shot,true,severe +s3_shot_9i_2,71.3,23.9,5.5,4086,8.3,82.1,82.1,0.0,74.1,-8.0,78.3,87.4,-9.1,-3.8,5.3,-9.1,33.8,36.8,-3.0,I-S1-V2-P2,-8.0,shot,true,moderate +s3_shot_9i_3,90.1,21.7,2.8,5243,11.2,115.9,117.3,-1.4,115.9,-1.4,121.8,120.7,1.1,5.9,3.4,2.5,52.4,57.7,-5.3,I-S2-V2-P2,,,false,pass +s3_shot_9i_5,84.0,19.4,3.8,5352,11.5,102.7,102.7,-0.0,100.1,-2.6,101.7,107.2,-5.5,-1.0,4.5,-5.5,36.3,41.8,-5.5,I-S1-V2-P2,-2.6,shot,true,moderate +s3_shot_9i_7,83.0,22.5,5.3,7008,9.7,102.2,101.1,1.1,102.2,1.1,104.2,102.6,1.6,2.0,1.5,0.5,47.3,51.5,-4.2,I-S1-V2-P3,,,false,pass +s3_shot_9i_8,92.2,21.9,-6.3,5042,0.7,121.3,122.9,-1.6,121.3,-1.6,130.5,126.4,4.1,9.2,3.5,5.7,61.1,62.6,-1.5,I-S2-V2-P2,,,false,pass +s3_shot_9i_9,90.1,22.1,-3.1,5351,1.2,116.9,118.1,-1.2,116.9,-1.2,123.0,121.1,1.9,6.1,3.0,3.1,54.0,60.1,-6.1,I-S2-V2-P2,,,false,pass +s3_shot_driver_51,116.2,21.7,2.2,6409,3.2,167.3,162.9,4.4,174.3,11.4,193.9,164.3,29.6,26.6,1.4,25.2,109.3,108.7,0.6,I-S3-V2-P3,7.0,regime,true,severe +s3_shot_driver_52,102.1,31.3,3.1,8442,6.3,129.9,124.5,5.4,133.9,9.4,149.4,124.1,25.3,19.5,-0.4,19.9,117.9,119.3,-1.4,W-S2-V3-P4,4.0,regime,true,severe +s3_shot_driver_53,97.2,30.6,2.2,8926,6.0,120.1,117.6,2.5,124.1,6.5,135.0,117.1,17.9,14.9,-0.5,15.4,102.0,105.8,-3.8,W-S2-V3-P4,4.0,regime,true,severe +s3_shot_driver_54,121.5,12.9,-5.3,3411,-10.0,177.2,178.2,-1.0,183.6,5.4,188.7,188.7,0.0,11.5,10.5,1.0,54.3,56.5,-2.2,D-S4-V1-P1,6.4,regime,true,pass +s3_shot_driver_55,117.5,7.5,-8.3,2150,-27.2,128.1,125.6,2.5,128.1,2.5,184.4,161.8,22.6,56.3,36.2,20.1,17.6,17.2,0.4,D-S3-V0-P0,,,false,severe +s3_shot_driver_56,118.7,17.1,-1.8,4554,2.8,174.4,176.6,-2.2,181.4,4.8,201.6,180.9,20.7,27.2,4.3,22.9,92.9,83.2,9.7,D-S3-V1-P2,7.0,regime,true,severe +s3_shot_driver_57,120.9,14.1,-5.2,1544,-8.0,172.5,177.6,-5.1,172.5,-5.1,177.3,197.0,-19.7,4.8,19.4,-14.6,47.4,50.9,-3.5,D-S4-V1-P0,,,false,severe +s3_shot_driver_58,119.3,23.6,2.5,7093,3.3,174.2,163.2,11.0,181.2,18.0,200.9,163.9,37.0,26.7,0.7,26.0,120.9,125.7,-4.8,I-S3-V2-P3,7.0,regime,true,severe +s3_shot_driver_59,81.0,44.9,8.9,6735,12.4,82.8,83.7,-0.9,82.8,-0.9,100.9,83.2,17.7,18.1,-0.5,18.6,104.0,107.8,-3.8,W-S1-V4-P3,,,false,severe +s3_shot_driver_60,107.4,11.7,-8.6,3269,-14.8,138.5,138.5,0.0,138.5,0.0,138.9,153.8,-14.9,0.4,15.3,-14.9,31.6,34.0,-2.4,I-S3-V1-P1,,,false,severe +s3_shot_pw_64,69.6,28.6,0.2,5327,5.1,80.1,80.1,0.0,75.7,-4.4,92.0,82.4,9.6,11.9,2.3,9.6,42.7,46.4,-3.7,I-S1-V3-P2,-4.4,shot,true,moderate +s3_shot_pw_65,81.2,28.4,2.9,6959,9.4,98.4,98.5,-0.1,98.4,-0.1,104.1,99.4,4.7,5.7,0.9,4.8,61.8,65.6,-3.8,I-S1-V3-P3,,,false,pass +s3_shot_pw_66,75.7,27.3,-1.2,6605,4.0,89.7,89.7,-0.0,87.1,-2.6,102.1,90.8,11.3,12.4,1.1,11.3,49.8,53.5,-3.7,I-S1-V3-P3,-2.6,shot,true,severe +s3_shot_pw_67,81.7,28.1,6.3,6510,12.7,100.0,100.0,0.0,100.0,0.0,106.8,101.1,5.7,6.8,1.1,5.7,61.0,65.0,-4.0,I-S1-V3-P3,,,false,moderate +s3_shot_pw_68,88.5,23.4,-0.1,6637,6.0,112.7,112.7,-0.0,116.1,3.4,120.2,114.1,6.1,7.5,1.4,6.1,57.2,63.4,-6.2,I-S2-V2-P3,3.4,shot,true,moderate +s3_shot_pw_69,74.1,23.6,0.2,5880,8.4,86.0,86.0,0.0,83.2,-2.8,84.9,88.8,-3.9,-1.1,2.8,-3.9,37.4,41.2,-3.8,I-S1-V2-P3,-2.8,shot,true,pass +topped_test_shot,91.8,5.0,-0.9,2195,16.2,55.6,56.2,-0.6,55.6,-0.6,109.2,95.3,13.9,53.6,39.1,14.5,4.2,4.3,-0.1,I-S2-V0-P0,,,false,severe +wedge_shot_1,48.7,29.0,-1.3,5684,11.1,42.6,42.6,0.0,37.5,-5.1,46.2,46.9,-0.7,3.6,4.3,-0.7,18.9,21.3,-2.4,C-S0-V3-P3,-5.1,shot,true,pass +wedge_shot_2,51.8,37.0,2.4,5652,9.1,49.1,49.1,0.0,43.0,-6.1,52.8,50.1,2.7,3.7,1.0,2.7,31.1,35.3,-4.2,C-S0-V4-P3,-6.1,shot,true,pass +wedge_test_shot,66.4,23.2,-1.4,6449,7.1,70.6,70.6,0.0,65.6,-5.0,79.4,75.8,3.6,8.8,5.2,3.6,28.0,31.2,-3.2,I-S1-V2-P3,-5.0,shot,true,pass +wedge_test_shot2,54.7,26.8,1.6,4976,5.7,52.2,52.2,-0.0,46.8,-5.4,60.8,57.7,3.1,8.6,5.5,3.1,22.4,24.4,-2.0,C-S0-V3-P2,-5.4,shot,true,pass +wood1,124.2,6.7,-8.1,4528,4.8,171.2,165.5,5.7,178.2,12.7,178.7,181.9,-3.2,7.5,16.4,-8.9,36.0,32.8,3.2,D-S4-V0-P2,7.0,regime,true,moderate +wood2,118.8,14.5,-3.3,3026,11.2,180.4,175.6,4.8,180.4,4.8,186.8,186.1,0.7,6.4,10.5,-4.1,57.7,59.3,-1.6,D-S3-V1-P1,,,false,moderate +wood_low_test_shot,114.5,7.0,-0.6,1932,-1.4,124.4,122.6,1.8,124.4,1.8,181.8,158.9,22.9,57.4,36.3,21.1,16.1,15.7,0.4,D-S3-V0-P0,,,false,severe diff --git a/assets/data/calibration/shot_diff_analysis.csv.import b/assets/data/calibration/shot_diff_analysis.csv.import index 1cc3baa..40ff47a 100644 --- a/assets/data/calibration/shot_diff_analysis.csv.import +++ b/assets/data/calibration/shot_diff_analysis.csv.import @@ -6,10 +6,10 @@ uid="uid://ubi8rpjmumqy" [deps] -files=["res://assets/data/calibration/shot_diff_analysis.speed.translation", "res://assets/data/calibration/shot_diff_analysis.vla.translation", "res://assets/data/calibration/shot_diff_analysis.hla.translation", "res://assets/data/calibration/shot_diff_analysis.total.translation", "res://assets/data/calibration/shot_diff_analysis.spin.translation", "res://assets/data/calibration/shot_diff_analysis.physics.translation", "res://assets/data/calibration/shot_diff_analysis.flightscope.translation", "res://assets/data/calibration/shot_diff_analysis.diff.translation", "res://assets/data/calibration/shot_diff_analysis.physics.translation", "res://assets/data/calibration/shot_diff_analysis.flightscope.translation", "res://assets/data/calibration/shot_diff_analysis.diff.translation", "res://assets/data/calibration/shot_diff_analysis.rollout.translation", "res://assets/data/calibration/shot_diff_analysis.rollout.translation", "res://assets/data/calibration/shot_diff_analysis.diff.translation", "res://assets/data/calibration/shot_diff_analysis.physics.translation", "res://assets/data/calibration/shot_diff_analysis.flightscope.translation", "res://assets/data/calibration/shot_diff_analysis.diff.translation", "res://assets/data/calibration/shot_diff_analysis.status.translation"] +files=["res://assets/data/calibration/shot_diff_analysis.speed.translation", "res://assets/data/calibration/shot_diff_analysis.vla.translation", "res://assets/data/calibration/shot_diff_analysis.hla.translation", "res://assets/data/calibration/shot_diff_analysis.total.translation", "res://assets/data/calibration/shot_diff_analysis.spin.translation", "res://assets/data/calibration/shot_diff_analysis.physics.translation", "res://assets/data/calibration/shot_diff_analysis.flightscope.translation", "res://assets/data/calibration/shot_diff_analysis.diff.translation", "res://assets/data/calibration/shot_diff_analysis.physics.translation", "res://assets/data/calibration/shot_diff_analysis.diff.translation", "res://assets/data/calibration/shot_diff_analysis.physics.translation", "res://assets/data/calibration/shot_diff_analysis.flightscope.translation", "res://assets/data/calibration/shot_diff_analysis.diff.translation", "res://assets/data/calibration/shot_diff_analysis.rollout.translation", "res://assets/data/calibration/shot_diff_analysis.rollout.translation", "res://assets/data/calibration/shot_diff_analysis.diff.translation", "res://assets/data/calibration/shot_diff_analysis.physics.translation", "res://assets/data/calibration/shot_diff_analysis.flightscope.translation", "res://assets/data/calibration/shot_diff_analysis.diff.translation", "res://assets/data/calibration/shot_diff_analysis.carry.translation", "res://assets/data/calibration/shot_diff_analysis.carry.translation", "res://assets/data/calibration/shot_diff_analysis.carry.translation", "res://assets/data/calibration/shot_diff_analysis.carry.translation", "res://assets/data/calibration/shot_diff_analysis.status.translation"] source_file="res://assets/data/calibration/shot_diff_analysis.csv" -dest_files=["res://assets/data/calibration/shot_diff_analysis.speed.translation", "res://assets/data/calibration/shot_diff_analysis.vla.translation", "res://assets/data/calibration/shot_diff_analysis.hla.translation", "res://assets/data/calibration/shot_diff_analysis.total.translation", "res://assets/data/calibration/shot_diff_analysis.spin.translation", "res://assets/data/calibration/shot_diff_analysis.physics.translation", "res://assets/data/calibration/shot_diff_analysis.flightscope.translation", "res://assets/data/calibration/shot_diff_analysis.diff.translation", "res://assets/data/calibration/shot_diff_analysis.physics.translation", "res://assets/data/calibration/shot_diff_analysis.flightscope.translation", "res://assets/data/calibration/shot_diff_analysis.diff.translation", "res://assets/data/calibration/shot_diff_analysis.rollout.translation", "res://assets/data/calibration/shot_diff_analysis.rollout.translation", "res://assets/data/calibration/shot_diff_analysis.diff.translation", "res://assets/data/calibration/shot_diff_analysis.physics.translation", "res://assets/data/calibration/shot_diff_analysis.flightscope.translation", "res://assets/data/calibration/shot_diff_analysis.diff.translation", "res://assets/data/calibration/shot_diff_analysis.status.translation"] +dest_files=["res://assets/data/calibration/shot_diff_analysis.speed.translation", "res://assets/data/calibration/shot_diff_analysis.vla.translation", "res://assets/data/calibration/shot_diff_analysis.hla.translation", "res://assets/data/calibration/shot_diff_analysis.total.translation", "res://assets/data/calibration/shot_diff_analysis.spin.translation", "res://assets/data/calibration/shot_diff_analysis.physics.translation", "res://assets/data/calibration/shot_diff_analysis.flightscope.translation", "res://assets/data/calibration/shot_diff_analysis.diff.translation", "res://assets/data/calibration/shot_diff_analysis.physics.translation", "res://assets/data/calibration/shot_diff_analysis.diff.translation", "res://assets/data/calibration/shot_diff_analysis.physics.translation", "res://assets/data/calibration/shot_diff_analysis.flightscope.translation", "res://assets/data/calibration/shot_diff_analysis.diff.translation", "res://assets/data/calibration/shot_diff_analysis.rollout.translation", "res://assets/data/calibration/shot_diff_analysis.rollout.translation", "res://assets/data/calibration/shot_diff_analysis.diff.translation", "res://assets/data/calibration/shot_diff_analysis.physics.translation", "res://assets/data/calibration/shot_diff_analysis.flightscope.translation", "res://assets/data/calibration/shot_diff_analysis.diff.translation", "res://assets/data/calibration/shot_diff_analysis.carry.translation", "res://assets/data/calibration/shot_diff_analysis.carry.translation", "res://assets/data/calibration/shot_diff_analysis.carry.translation", "res://assets/data/calibration/shot_diff_analysis.carry.translation", "res://assets/data/calibration/shot_diff_analysis.status.translation"] [params] diff --git a/assets/data/openfairway_accuracy_summary_20260313_2310.json b/assets/data/openfairway_accuracy_summary_20260313_2310.json new file mode 100644 index 0000000..5fc47ba --- /dev/null +++ b/assets/data/openfairway_accuracy_summary_20260313_2310.json @@ -0,0 +1,92 @@ +{ + "timestamp": "2026-03-13T23:10", + "total_shots": 102, + "shots_with_reference": 99, + "priority_gates": { + "short_carry_lt_115yd": { + "shots": 47, + "carry_accuracy": { + "avg_error_yd": -0.0, + "avg_off_yd": 0.3, + "typical_off_yd": 0.0, + "consistency_yd": 0.5, + "worst_off_yd": 1.2, + "within_pct_yd": { + "0.5": 76.6, + "1": 87.2, + "2": 100.0, + "3": 100.0 + } + } + }, + "long_carry_gt_200yd": { + "shots": 1, + "carry_accuracy": { + "avg_error_yd": 1.0, + "avg_off_yd": 1.0, + "typical_off_yd": 1.0, + "consistency_yd": 0.0, + "worst_off_yd": 1.0, + "within_pct_yd": { + "3": 100.0, + "5": 100.0, + "7": 100.0, + "10": 100.0 + } + } + } + }, + "carry_accuracy": { + "avg_error_yd": 1.9, + "avg_off_yd": 2.4, + "typical_off_yd": 1.0, + "consistency_yd": 3.6, + "worst_off_yd": 18.0, + "within_pct_yd": { + "1": 50.5, + "2": 66.7, + "3": 69.7, + "5": 77.8, + "7": 90.9, + "10": 97.0, + "15": 99.0, + "20": 100.0 + } + }, + "total_accuracy": { + "avg_error_yd": 2.7, + "avg_off_yd": 11.5, + "typical_off_yd": 10.7, + "consistency_yd": 14.2, + "worst_off_yd": 37.0, + "within_pct_yd": { + "1": 5.1, + "2": 15.2, + "3": 23.2, + "5": 34.3, + "7": 40.4, + "10": 48.5, + "15": 66.7, + "20": 78.8 + } + }, + "apex_accuracy": { + "avg_error_ft": -0.1, + "avg_off_ft": 3.6, + "typical_off_ft": 3.1, + "consistency_ft": 5.2, + "worst_off_ft": 24.2, + "within_pct_ft": { + "1": 25.3, + "2": 43.4, + "3": 49.5, + "5": 77.8, + "7": 88.9, + "10": 96.0, + "13": 97.0, + "15": 98.0, + "20": 98.0, + "50": 100.0 + } + } +} diff --git a/assets/data/openfairway_accuracy_summary_20260313_2332.json b/assets/data/openfairway_accuracy_summary_20260313_2332.json new file mode 100644 index 0000000..9c99704 --- /dev/null +++ b/assets/data/openfairway_accuracy_summary_20260313_2332.json @@ -0,0 +1,125 @@ +{ + "timestamp": "2026-03-13T23:32", + "total_shots": 102, + "shots_with_reference": 99, + "priority_gates": { + "short_carry_lt_115yd": { + "shots": 47, + "carry_accuracy": { + "avg_error_yd": -0.0, + "avg_off_yd": 0.3, + "typical_off_yd": 0.0, + "consistency_yd": 0.5, + "worst_off_yd": 1.2, + "within_pct_yd": { + "0.5": 76.6, + "1": 87.2, + "2": 100.0, + "3": 100.0 + } + } + }, + "carry_115_150yd": { + "shots": 30, + "carry_accuracy": { + "avg_error_yd": 0.3, + "avg_off_yd": 1.8, + "typical_off_yd": 1.6, + "consistency_yd": 2.2, + "worst_off_yd": 5.4, + "within_pct_yd": { + "1": 26.7, + "2": 63.3, + "3": 90.0, + "5": 96.7 + } + } + }, + "carry_150_180yd": { + "shots": 16, + "carry_accuracy": { + "avg_error_yd": 1.5, + "avg_off_yd": 3.4, + "typical_off_yd": 3.1, + "consistency_yd": 4.1, + "worst_off_yd": 11.0, + "within_pct_yd": { + "3": 50.0, + "5": 75.0, + "6": 93.8, + "7": 93.8, + "10": 93.8 + } + } + }, + "long_carry_gt_200yd": { + "shots": 1, + "carry_accuracy": { + "avg_error_yd": 1.0, + "avg_off_yd": 1.0, + "typical_off_yd": 1.0, + "consistency_yd": 0.0, + "worst_off_yd": 1.0, + "within_pct_yd": { + "3": 100.0, + "5": 100.0, + "7": 100.0, + "10": 100.0 + } + } + } + }, + "carry_accuracy": { + "avg_error_yd": 0.3, + "avg_off_yd": 1.3, + "typical_off_yd": 0.7, + "consistency_yd": 2.2, + "worst_off_yd": 11.0, + "within_pct_yd": { + "1": 58.6, + "2": 75.8, + "3": 87.9, + "5": 94.9, + "7": 99.0, + "10": 99.0, + "15": 100.0, + "20": 100.0 + } + }, + "total_accuracy": { + "avg_error_yd": 2.7, + "avg_off_yd": 11.5, + "typical_off_yd": 10.7, + "consistency_yd": 14.2, + "worst_off_yd": 37.0, + "within_pct_yd": { + "1": 5.1, + "2": 15.2, + "3": 23.2, + "5": 34.3, + "7": 40.4, + "10": 48.5, + "15": 66.7, + "20": 78.8 + } + }, + "apex_accuracy": { + "avg_error_ft": -0.1, + "avg_off_ft": 3.6, + "typical_off_ft": 3.1, + "consistency_ft": 5.2, + "worst_off_ft": 24.2, + "within_pct_ft": { + "1": 25.3, + "2": 43.4, + "3": 49.5, + "5": 77.8, + "7": 88.9, + "10": 96.0, + "13": 97.0, + "15": 98.0, + "20": 98.0, + "50": 100.0 + } + } +} diff --git a/assets/data/openfairway_critical_carry_20260313_2006.csv.import b/assets/data/openfairway_critical_carry_20260313_2006.csv.import new file mode 100644 index 0000000..432dadf --- /dev/null +++ b/assets/data/openfairway_critical_carry_20260313_2006.csv.import @@ -0,0 +1,19 @@ +[remap] + +importer="csv_translation" +type="Translation" +uid="uid://cl60fwkihcfss" + +[deps] + +files=["res://assets/data/openfairway_critical_carry_20260313_2006.speed.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.vla.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.hla.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.total.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.spin.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.physics.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.flightscope.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.diff.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.physics.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.flightscope.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.diff.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.rollout.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.rollout.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.diff.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.physics.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.flightscope.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.diff.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.status.translation"] + +source_file="res://assets/data/openfairway_critical_carry_20260313_2006.csv" +dest_files=["res://assets/data/openfairway_critical_carry_20260313_2006.speed.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.vla.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.hla.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.total.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.spin.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.physics.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.flightscope.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.diff.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.physics.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.flightscope.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.diff.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.rollout.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.rollout.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.diff.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.physics.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.flightscope.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.diff.translation", "res://assets/data/openfairway_critical_carry_20260313_2006.status.translation"] + +[params] + +compress=1 +delimiter=0 +unescape_keys=false +unescape_translations=true diff --git a/assets/data/openfairway_critical_carry_20260313_2310.csv b/assets/data/openfairway_critical_carry_20260313_2310.csv new file mode 100644 index 0000000..24b20fa --- /dev/null +++ b/assets/data/openfairway_critical_carry_20260313_2310.csv @@ -0,0 +1,100 @@ +shot_name,speed_mph,vla_deg,hla_deg,total_spin_rpm,spin_axis_deg,physics_carry_yd,flightscope_carry_yd,diff_carry_yd,physics_carry_raw_yd,diff_carry_raw_yd,physics_total_yd,flightscope_total_yd,diff_total_yd,rollout_physics_yd,rollout_flightscope_yd,diff_rollout_yd,physics_apex_ft,flightscope_apex_ft,diff_apex_ft,carry_exception_regime,carry_exception_offset_yd,carry_exception_source,carry_exception_applied,status +s3_shot_driver_58,119.3,23.6,2.5,7093,3.3,181.2,163.2,18.0,181.2,18.0,200.9,163.9,37.0,19.7,0.7,19.0,120.9,125.7,-4.8,I-S3-V2-P3,,,false,severe +wood1,124.2,6.7,-8.1,4528,4.8,178.2,165.5,12.7,178.2,12.7,178.7,181.9,-3.2,0.5,16.4,-15.9,36.0,32.8,3.2,D-S4-V0-P2,,,false,severe +s3_shot_driver_51,116.2,21.7,2.2,6409,3.2,174.3,162.9,11.4,174.3,11.4,193.9,164.3,29.6,19.6,1.4,18.2,109.3,108.7,0.6,I-S3-V2-P3,,,false,severe +s3_shot_driver_52,102.1,31.3,3.1,8442,6.3,133.9,124.5,9.4,133.9,9.4,149.4,124.1,25.3,15.5,-0.4,15.9,117.9,119.3,-1.4,W-S2-V3-P4,,,false,severe +driver2,124.6,13.2,-6.8,3994,-6.1,193.7,184.8,8.9,193.7,8.9,200.9,192.3,8.6,7.2,7.5,-0.3,63.1,65.8,-2.7,D-S4-V1-P1,,,false,severe +s3_shot_3w_24,123.4,6.3,-5.4,2752,-13.3,153.8,145.9,7.9,153.8,7.9,206.3,176.7,29.6,52.5,30.8,21.7,21.7,19.8,1.9,D-S4-V0-P1,,,false,severe +driver4,119.0,15.5,-10.2,4454,-7.8,183.3,175.6,7.7,183.3,7.7,197.2,180.9,16.3,13.9,5.3,8.6,78.2,73.8,4.4,D-S3-V1-P2,,,false,severe +s2_shot_17,122.9,14.4,-1.3,4119,6.7,191.2,184.0,7.2,191.2,7.2,199.5,190.3,9.2,8.3,6.3,2.0,68.2,71.8,-3.6,D-S4-V1-P2,,,false,severe +s2_shot_20,120.9,15.0,-3.0,4245,9.6,186.6,179.4,7.2,186.6,7.2,196.4,185.3,11.1,9.8,5.9,3.9,70.5,72.3,-1.8,D-S4-V1-P2,,,false,severe +s3_shot_6i_47,99.5,14.8,-2.9,4811,4.7,138.2,131.2,7.0,138.2,7.0,148.5,137.7,10.8,10.3,6.5,3.8,56.8,45.0,11.8,I-S2-V1-P2,,,false,severe +s3_shot_driver_53,97.2,30.6,2.2,8926,6.0,124.1,117.6,6.5,124.1,6.5,135.0,117.1,17.9,10.9,-0.5,11.4,102.0,105.8,-3.8,W-S2-V3-P4,,,false,severe +s3_shot_6i_43,94.1,13.9,-4.7,4616,1.7,123.7,117.3,6.4,123.7,6.4,129.5,128.6,0.9,5.8,11.3,-5.5,43.1,35.0,8.1,I-S2-V1-P2,,,false,moderate +driver3,119.1,16.0,-8.9,4935,-9.4,180.3,174.1,6.2,180.3,6.2,201.8,178.5,23.3,21.5,4.4,17.1,99.6,78.5,21.1,D-S3-V1-P2,,,false,severe +s3_shot_6i_48,101.7,15.2,-3.0,4631,4.3,143.2,137.1,6.1,143.2,6.1,154.6,143.5,11.1,11.4,6.4,5.0,63.1,48.9,14.2,I-S2-V1-P2,,,false,severe +s2_shot_21,127.3,7.2,-11.5,2321,-19.5,160.7,154.9,5.8,160.7,5.8,215.3,186.5,28.8,54.6,31.6,23.0,24.9,23.1,1.8,D-S4-V0-P0,,,false,severe +s2_shot_22,123.3,14.0,-6.1,3104,10.0,191.1,185.4,5.7,191.1,5.7,199.0,195.5,3.5,7.9,10.1,-2.2,61.6,63.0,-1.4,D-S4-V1-P1,,,false,moderate +s2_shot_24,121.5,14.5,-11.2,3173,-6.8,188.7,183.0,5.7,188.7,5.7,195.5,192.8,2.7,6.8,9.8,-3.0,63.0,64.6,-1.6,D-S4-V1-P1,,,false,moderate +5iron,102.1,17.4,1.5,5391,12.3,143.7,138.1,5.6,143.7,5.6,154.3,142.2,12.1,10.6,4.1,6.5,64.6,59.6,5.0,I-S2-V1-P2,,,false,severe +s3_shot_driver_54,121.5,12.9,-5.3,3411,-10.0,183.6,178.2,5.4,183.6,5.4,188.7,188.7,0.0,5.1,10.5,-5.4,54.3,56.5,-2.2,D-S4-V1-P1,,,false,moderate +s2_shot_12,90.8,24.5,-3.9,7261,4.9,120.6,115.4,5.2,120.6,5.2,125.9,116.4,9.5,5.3,1.0,4.3,66.4,71.5,-5.1,I-S2-V2-P3,,,false,moderate +s2_shot_18,105.7,20.5,-1.7,5667,8.2,151.9,146.8,5.1,151.9,5.1,166.0,149.4,16.6,14.1,2.6,11.5,83.5,80.4,3.1,I-S3-V2-P3,,,false,severe +s3_shot_driver_57,120.9,14.1,-5.2,1544,-8.0,172.5,177.6,-5.1,172.5,-5.1,177.3,197.0,-19.7,4.8,19.4,-14.6,47.4,50.9,-3.5,D-S4-V1-P0,,,false,severe +s3_shot_driver_56,118.7,17.1,-1.8,4554,2.8,181.4,176.6,4.8,181.4,4.8,201.6,180.9,20.7,20.2,4.3,15.9,92.9,83.2,9.7,D-S3-V1-P2,,,false,severe +wood2,118.8,14.5,-3.3,3026,11.2,180.4,175.6,4.8,180.4,4.8,186.8,186.1,0.7,6.4,10.5,-4.1,57.7,59.3,-1.6,D-S3-V1-P1,,,false,moderate +s3_shot_7i_34,104.2,14.7,-4.6,4081,1.9,146.9,142.5,4.4,146.9,4.4,153.2,150.6,2.6,6.3,8.1,-1.8,51.3,48.2,3.1,I-S2-V1-P2,,,false,moderate +s2_shot_23,125.5,8.6,-14.3,3062,-23.9,166.1,161.9,4.2,166.1,4.2,166.1,185.0,-18.9,0.0,23.1,-23.1,31.1,31.0,0.1,D-S4-V0-P1,,,false,severe +s2_shot_10,89.7,25.5,-3.1,6446,6.2,119.1,115.1,4.0,119.1,4.0,127.1,116.4,10.7,8.0,1.3,6.7,66.2,72.0,-5.8,I-S2-V3-P3,,,false,severe +s3_shot_6i_46,116.3,13.7,0.3,3008,10.7,171.1,167.3,3.8,171.1,3.8,175.8,179.3,-3.5,4.7,12.0,-7.3,50.1,51.6,-1.5,D-S3-V1-P1,,,false,moderate +s2_shot_27,113.0,17.6,-2.3,4292,12.2,168.1,164.5,3.6,168.1,3.6,183.4,169.6,13.8,15.3,5.1,10.2,78.6,73.6,5.0,D-S3-V1-P2,,,false,severe +s2_shot_19,128.6,12.5,-8.4,2514,5.1,197.8,194.5,3.3,197.8,3.3,204.3,208.7,-4.4,6.5,14.2,-7.7,56.4,57.3,-0.9,D-S4-V1-P1,,,false,moderate +s2_shot_9,94.4,20.1,2.4,4020,16.3,123.7,126.5,-2.8,123.7,-2.8,136.0,132.5,3.5,12.3,6.0,6.3,62.1,54.8,7.3,I-S2-V2-P2,,,false,pass +s2_shot_26,117.0,18.4,-2.0,5035,9.7,173.3,170.7,2.6,173.3,2.6,197.3,174.2,23.1,24.0,3.5,20.5,112.3,88.1,24.2,I-S3-V2-P2,,,false,severe +s3_shot_driver_55,117.5,7.5,-8.3,2150,-27.2,128.1,125.6,2.5,128.1,2.5,184.4,161.8,22.6,56.3,36.2,20.1,17.6,17.2,0.4,D-S3-V0-P0,,,false,severe +s2_shot_13,95.2,19.6,-1.1,5610,12.2,127.1,125.3,1.8,127.1,1.8,131.7,128.7,3.0,4.6,3.4,1.2,52.5,58.4,-5.9,I-S2-V2-P3,,,false,pass +s3_shot_7i_27,93.7,17.1,-1.4,4612,2.6,124.1,122.3,1.8,124.1,1.8,132.6,128.3,4.3,8.5,6.0,2.5,54.0,46.0,8.0,I-S2-V1-P2,,,false,pass +s3_shot_7i_32,93.1,17.0,-1.0,3762,4.2,119.4,121.2,-1.8,119.4,-1.8,127.6,129.8,-2.2,8.2,8.6,-0.4,45.6,42.5,3.1,I-S2-V1-P1,,,false,pass +wood_low_test_shot,114.5,7.0,-0.6,1932,-1.4,124.4,122.6,1.8,124.4,1.8,181.8,158.9,22.9,57.4,36.3,21.1,16.1,15.7,0.4,D-S3-V0-P0,,,false,severe +s3_shot_7i_33,92.4,17.0,-0.6,3852,2.8,118.1,119.7,-1.6,118.1,-1.6,126.7,128.0,-1.3,8.6,8.3,0.3,46.7,42.0,4.7,I-S2-V1-P1,,,false,pass +s3_shot_9i_8,92.2,21.9,-6.3,5042,0.7,121.3,122.9,-1.6,121.3,-1.6,130.5,126.4,4.1,9.2,3.5,5.7,61.1,62.6,-1.5,I-S2-V2-P2,,,false,pass +s3_shot_9i_3,90.1,21.7,2.8,5243,11.2,115.9,117.3,-1.4,115.9,-1.4,121.8,120.7,1.1,5.9,3.4,2.5,52.4,57.7,-5.3,I-S2-V2-P2,,,false,pass +s3_shot_5i_12,74.2,10.2,-1.7,3321,15.8,59.6,58.4,1.2,59.6,1.2,58.4,81.9,-23.5,-1.2,23.5,-24.7,10.5,9.4,1.1,I-S1-V1-P1,,,false,severe +s3_shot_6i_40,62.1,6.8,27.0,2768,30.0,25.0,26.2,-1.2,25.0,-1.2,58.9,51.1,7.8,33.9,24.9,9.0,2.6,2.5,0.1,I-S1-V0-P1,,,false,moderate +s3_shot_6i_44,115.0,9.5,-6.7,2314,15.1,141.1,142.3,-1.2,141.1,-1.2,140.8,168.2,-27.4,-0.3,25.9,-26.2,25.3,26.6,-1.3,D-S3-V0-P0,,,false,severe +s3_shot_7i_28,92.1,16.4,-3.6,4217,-0.4,119.1,117.9,1.2,119.1,1.2,126.8,125.6,1.2,7.7,7.7,0.0,48.9,40.6,8.3,I-S2-V1-P2,,,false,pass +s3_shot_9i_9,90.1,22.1,-3.1,5351,1.2,116.9,118.1,-1.2,116.9,-1.2,123.0,121.1,1.9,6.1,3.0,3.1,54.0,60.1,-6.1,I-S2-V2-P2,,,false,pass +s3_shot_3w_21,119.4,5.3,-3.4,1760,-10.5,115.7,114.6,1.1,115.7,1.1,177.1,160.5,16.6,61.4,45.9,15.5,11.2,10.9,0.3,D-S3-V0-P0,,,false,severe +s3_shot_5i_16,98.0,9.1,-2.1,3776,1.7,110.2,109.1,1.1,110.2,1.1,109.2,130.0,-20.8,-1.0,20.9,-21.9,19.5,19.7,-0.2,I-S2-V0-P1,,,false,severe +s3_shot_6i_42,77.2,13.1,-3.4,4057,4.1,75.5,76.6,-1.1,75.5,-1.1,75.5,92.9,-17.4,0.0,16.3,-16.3,18.3,17.5,0.8,I-S1-V1-P2,,,false,severe +s3_shot_9i_7,83.0,22.5,5.3,7008,9.7,102.2,101.1,1.1,102.2,1.1,104.2,102.6,1.6,2.0,1.5,0.5,47.3,51.5,-4.2,I-S1-V2-P3,,,false,pass +drive_test_shot,150.0,12.5,1.5,2335,-9.9,245.0,244.0,1.0,245.0,1.0,256.8,256.0,0.8,11.8,12.0,-0.2,80.0,80.6,-0.6,D-S4-V1-P0,,,false,pass +s3_shot_7i_29,107.6,13.8,-6.0,3633,4.7,149.4,148.4,1.0,149.4,1.0,152.5,158.3,-5.8,3.1,9.9,-6.8,42.8,46.3,-3.5,I-S3-V1-P1,,,false,moderate +flop_test_shot,68.0,45.0,0.5,12000,0.8,62.7,61.8,0.9,62.7,0.9,63.1,60.3,2.8,0.4,-1.5,1.9,69.2,76.8,-7.6,W-S1-V4-P4,,,false,pass +s3_shot_driver_59,81.0,44.9,8.9,6735,12.4,82.8,83.7,-0.9,82.8,-0.9,100.9,83.2,17.7,18.1,-0.5,18.6,104.0,107.8,-3.8,W-S1-V4-P3,,,false,severe +s3_shot_3w_23,115.8,8.9,-0.8,2804,2.2,148.5,147.7,0.8,148.5,0.8,148.2,170.9,-22.7,-0.3,23.2,-23.5,26.8,28.0,-1.2,D-S3-V0-P1,,,false,severe +checked_test_shot,75.0,38.5,1.4,10701,5.7,77.0,77.6,-0.6,77.0,-0.6,78.6,77.5,1.1,1.6,-0.1,1.7,70.8,79.5,-8.7,W-S1-V4-P4,,,false,pass +s2_shot_15,88.1,14.2,-0.3,4985,19.4,100.7,101.3,-0.6,100.7,-0.6,100.8,113.1,-12.3,0.1,11.8,-11.7,27.0,28.9,-1.9,I-S2-V1-P2,,,false,severe +topped_test_shot,91.8,5.0,-0.9,2195,16.2,55.6,56.2,-0.6,55.6,-0.6,109.2,95.3,13.9,53.6,39.1,14.5,4.2,4.3,-0.1,I-S2-V0-P0,,,false,severe +s3_shot_6i_39,61.0,6.1,10.3,3285,22.0,23.5,24.0,-0.5,23.5,-0.5,53.7,47.3,6.4,30.2,23.3,6.9,2.1,2.1,0.0,I-S1-V0-P1,,,false,moderate +s3_shot_7i_25,83.3,13.2,3.0,3410,17.8,86.4,86.9,-0.5,86.4,-0.5,86.8,104.8,-18.0,0.4,17.9,-17.5,21.0,20.1,0.9,I-S1-V1-P1,,,false,severe +s2_shot_16,94.1,19.1,-5.9,5291,5.0,124.7,124.3,0.4,124.7,0.4,130.3,128.1,2.2,5.6,3.8,1.8,52.1,55.3,-3.2,I-S2-V2-P2,,,false,pass +s3_shot_6i_50,82.8,14.8,-1.4,3783,2.8,92.8,93.2,-0.4,92.8,-0.4,95.3,107.4,-12.1,2.5,14.2,-11.7,29.5,25.6,3.9,I-S1-V1-P1,,,false,severe +driver1,124.0,9.4,-9.5,2322,-24.8,158.3,158.0,0.3,158.3,0.3,158.3,184.0,-25.7,0.0,26.0,-26.0,29.5,30.2,-0.7,D-S4-V0-P0,,,false,severe +s2_shot_14,87.1,22.4,-2.0,5660,11.4,111.1,110.9,0.2,111.1,0.2,115.3,113.7,1.6,4.2,2.8,1.4,50.0,55.9,-5.9,I-S2-V2-P3,,,false,pass +s3_shot_7i_30,90.2,17.6,-3.8,4508,-0.2,115.2,115.4,-0.2,115.2,-0.2,123.2,121.7,1.5,8.0,6.3,1.7,48.6,43.1,5.5,I-S2-V1-P2,,,false,pass +bump_and_run,58.3,15.6,-0.8,1850,2.3,43.7,43.8,-0.1,34.7,-9.1,34.5,62.0,-27.5,-9.2,18.2,-27.4,8.0,10.1,-2.1,C-S0-V1-P0,-9.0,shot,true,severe +s3_shot_3w_19,121.3,5.6,-4.8,1662,-11.9,120.5,120.6,-0.1,120.5,-0.1,182.5,165.8,16.7,62.0,45.2,16.8,12.3,12.2,0.1,D-S4-V0-P0,,,false,severe +s3_shot_pw_65,81.2,28.4,2.9,6959,9.4,98.4,98.5,-0.1,98.4,-0.1,104.1,99.4,4.7,5.7,0.9,4.8,61.8,65.6,-3.8,I-S1-V3-P3,,,false,pass +approach_mid_iron_test_shot,93.9,22.9,-2.6,5375,2.0,125.8,125.8,0.0,125.8,0.0,136.4,128.5,7.9,10.6,2.7,7.9,64.6,69.3,-4.7,I-S2-V2-P2,,,false,moderate +bump_test_shot,78.3,5.6,-0.8,1850,2.3,39.0,39.0,0.0,36.9,-2.1,86.8,74.0,12.8,47.8,35.0,12.8,3.0,3.1,-0.1,I-S1-V0-P0,-2.1,shot,true,severe +p_wedge_shot_1,82.3,26.5,-3.1,4946,6.7,104.5,104.5,0.0,100.2,-4.3,109.5,107.3,2.2,5.0,2.8,2.2,55.1,60.5,-5.4,I-S1-V3-P2,-4.3,shot,true,pass +s2_shot_11,78.5,29.6,4.3,7350,10.7,93.0,93.0,0.0,91.3,-1.7,95.6,93.6,2.0,2.6,0.6,2.0,59.6,64.0,-4.4,I-S1-V3-P3,-1.7,shot,true,pass +s3_shot_3w_22,108.9,5.6,-7.2,2501,-1.8,103.2,103.2,0.0,106.3,3.1,161.5,141.3,20.2,58.3,38.1,20.2,11.0,10.5,0.5,I-S3-V0-P1,3.1,shot,true,severe +s3_shot_5i_10,88.0,14.2,1.2,4065,8.4,103.1,103.1,0.0,106.1,3.0,109.6,116.7,-7.1,6.5,13.6,-7.1,34.3,28.4,5.9,I-S2-V1-P2,3.0,shot,true,moderate +s3_shot_5i_11,90.6,14.4,-0.2,3360,7.8,108.8,108.8,0.0,105.6,-3.2,106.9,124.1,-17.2,-1.9,15.3,-17.2,28.5,29.8,-1.3,I-S2-V1-P1,-3.2,shot,true,severe +s3_shot_5i_13,75.0,8.0,2.5,3921,3.4,53.9,53.9,0.0,56.5,2.6,89.0,78.9,10.1,35.1,25.0,10.1,7.4,6.8,0.6,I-S1-V0-P1,2.6,shot,true,severe +s3_shot_5i_15,86.9,9.3,-4.0,2509,-4.9,78.6,78.6,0.0,74.1,-4.5,121.3,106.6,14.7,42.7,28.0,14.7,11.0,12.1,-1.1,I-S2-V0-P1,-4.5,shot,true,severe +s3_shot_5i_17,56.5,10.0,24.1,5178,29.1,30.6,30.6,0.0,28.6,-2.0,45.0,46.9,-1.9,14.4,16.3,-1.9,4.2,4.5,-0.3,C-S0-V1-P2,-2.0,shot,true,pass +s3_shot_6i_35,80.5,15.3,-1.3,4667,-0.0,90.0,90.0,0.0,84.9,-5.1,84.9,101.5,-16.6,-5.1,11.5,-16.6,23.1,26.4,-3.3,I-S1-V1-P2,-5.1,shot,true,severe +s3_shot_6i_36,78.9,10.4,16.1,4166,25.1,67.8,67.8,0.0,69.9,2.1,68.3,89.1,-20.8,0.5,21.3,-20.8,12.4,11.8,0.6,I-S1-V1-P2,2.1,shot,true,severe +s3_shot_6i_37,82.6,10.2,11.0,3041,25.4,71.5,71.5,0.0,67.9,-3.6,109.4,97.2,12.2,37.9,25.7,12.2,11.0,11.8,-0.8,I-S1-V1-P1,-3.6,shot,true,severe +s3_shot_6i_38,79.1,13.3,3.0,3187,11.6,79.2,79.2,0.0,76.0,-3.2,76.2,97.5,-21.3,-3.0,18.3,-21.3,18.1,18.0,0.1,I-S1-V1-P1,-3.2,shot,true,severe +s3_shot_6i_41,82.5,9.9,-2.3,2620,13.6,71.3,71.3,0.0,66.7,-4.6,111.1,97.9,13.2,39.8,26.6,13.2,10.3,11.3,-1.0,I-S1-V0-P1,-4.6,shot,true,severe +s3_shot_6i_45,109.3,6.4,-9.0,2510,-10.9,109.6,109.6,0.0,113.1,3.5,166.5,145.4,21.1,56.9,35.8,21.1,13.5,12.9,0.6,I-S3-V0-P1,3.5,shot,true,severe +s3_shot_6i_49,71.2,7.7,16.1,2625,30.0,39.9,39.9,0.0,37.4,-2.5,77.3,70.3,7.0,37.4,30.4,7.0,4.2,4.5,-0.3,I-S1-V0-P1,-2.5,shot,true,moderate +s3_shot_7i_26,73.4,10.8,15.4,3561,30.0,56.6,56.6,0.0,58.4,1.8,57.5,79.3,-21.8,0.9,22.7,-21.8,10.7,9.6,1.1,I-S1-V1-P1,1.8,shot,true,severe +s3_shot_7i_31,76.4,17.5,-0.5,5122,1.8,85.0,85.0,0.0,80.2,-4.8,80.2,94.5,-14.3,-4.8,9.5,-14.3,24.3,28.4,-4.1,I-S1-V1-P2,-4.8,shot,true,severe +s3_shot_9i_1,89.0,15.1,-0.5,3563,11.3,106.7,106.7,0.0,105.3,-1.4,108.2,120.8,-12.6,1.5,14.1,-12.6,32.1,30.8,1.3,I-S2-V1-P1,-1.4,shot,true,severe +s3_shot_9i_2,71.3,23.9,5.5,4086,8.3,82.1,82.1,0.0,74.1,-8.0,78.3,87.4,-9.1,-3.8,5.3,-9.1,33.8,36.8,-3.0,I-S1-V2-P2,-8.0,shot,true,moderate +s3_shot_9i_5,84.0,19.4,3.8,5352,11.5,102.7,102.7,-0.0,100.1,-2.6,101.7,107.2,-5.5,-1.0,4.5,-5.5,36.3,41.8,-5.5,I-S1-V2-P2,-2.6,shot,true,moderate +s3_shot_driver_60,107.4,11.7,-8.6,3269,-14.8,138.5,138.5,0.0,138.5,0.0,138.9,153.8,-14.9,0.4,15.3,-14.9,31.6,34.0,-2.4,I-S3-V1-P1,,,false,severe +s3_shot_pw_64,69.6,28.6,0.2,5327,5.1,80.1,80.1,0.0,75.7,-4.4,92.0,82.4,9.6,11.9,2.3,9.6,42.7,46.4,-3.7,I-S1-V3-P2,-4.4,shot,true,moderate +s3_shot_pw_66,75.7,27.3,-1.2,6605,4.0,89.7,89.7,-0.0,87.1,-2.6,102.1,90.8,11.3,12.4,1.1,11.3,49.8,53.5,-3.7,I-S1-V3-P3,-2.6,shot,true,severe +s3_shot_pw_67,81.7,28.1,6.3,6510,12.7,100.0,100.0,0.0,100.0,0.0,106.8,101.1,5.7,6.8,1.1,5.7,61.0,65.0,-4.0,I-S1-V3-P3,,,false,moderate +s3_shot_pw_68,88.5,23.4,-0.1,6637,6.0,112.7,112.7,-0.0,116.1,3.4,120.2,114.1,6.1,7.5,1.4,6.1,57.2,63.4,-6.2,I-S2-V2-P3,3.4,shot,true,moderate +s3_shot_pw_69,74.1,23.6,0.2,5880,8.4,86.0,86.0,0.0,83.2,-2.8,84.9,88.8,-3.9,-1.1,2.8,-3.9,37.4,41.2,-3.8,I-S1-V2-P3,-2.8,shot,true,pass +wedge_shot_1,48.7,29.0,-1.3,5684,11.1,42.6,42.6,0.0,37.5,-5.1,46.2,46.9,-0.7,3.6,4.3,-0.7,18.9,21.3,-2.4,C-S0-V3-P3,-5.1,shot,true,pass +wedge_shot_2,51.8,37.0,2.4,5652,9.1,49.1,49.1,0.0,43.0,-6.1,52.8,50.1,2.7,3.7,1.0,2.7,31.1,35.3,-4.2,C-S0-V4-P3,-6.1,shot,true,pass +wedge_test_shot,66.4,23.2,-1.4,6449,7.1,70.6,70.6,0.0,65.6,-5.0,79.4,75.8,3.6,8.8,5.2,3.6,28.0,31.2,-3.2,I-S1-V2-P3,-5.0,shot,true,pass +wedge_test_shot2,54.7,26.8,1.6,4976,5.7,52.2,52.2,-0.0,46.8,-5.4,60.8,57.7,3.1,8.6,5.5,3.1,22.4,24.4,-2.0,C-S0-V3-P2,-5.4,shot,true,pass diff --git a/assets/data/openfairway_critical_carry_20260313_2310.csv.import b/assets/data/openfairway_critical_carry_20260313_2310.csv.import new file mode 100644 index 0000000..ef1b1f4 --- /dev/null +++ b/assets/data/openfairway_critical_carry_20260313_2310.csv.import @@ -0,0 +1,19 @@ +[remap] + +importer="csv_translation" +type="Translation" +uid="uid://70aexuy2r1y2" + +[deps] + +files=["res://assets/data/openfairway_critical_carry_20260313_2310.speed.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.vla.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.hla.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.total.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.spin.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.physics.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.flightscope.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.diff.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.physics.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.diff.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.physics.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.flightscope.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.diff.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.rollout.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.rollout.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.diff.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.physics.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.flightscope.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.diff.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.carry.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.carry.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.carry.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.carry.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.status.translation"] + +source_file="res://assets/data/openfairway_critical_carry_20260313_2310.csv" +dest_files=["res://assets/data/openfairway_critical_carry_20260313_2310.speed.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.vla.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.hla.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.total.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.spin.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.physics.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.flightscope.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.diff.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.physics.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.diff.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.physics.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.flightscope.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.diff.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.rollout.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.rollout.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.diff.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.physics.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.flightscope.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.diff.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.carry.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.carry.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.carry.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.carry.translation", "res://assets/data/openfairway_critical_carry_20260313_2310.status.translation"] + +[params] + +compress=1 +delimiter=0 +unescape_keys=false +unescape_translations=true diff --git a/assets/data/openfairway_critical_carry_20260313_2332.csv b/assets/data/openfairway_critical_carry_20260313_2332.csv new file mode 100644 index 0000000..3a00584 --- /dev/null +++ b/assets/data/openfairway_critical_carry_20260313_2332.csv @@ -0,0 +1,100 @@ +shot_name,speed_mph,vla_deg,hla_deg,total_spin_rpm,spin_axis_deg,physics_carry_yd,flightscope_carry_yd,diff_carry_yd,physics_carry_raw_yd,diff_carry_raw_yd,physics_total_yd,flightscope_total_yd,diff_total_yd,rollout_physics_yd,rollout_flightscope_yd,diff_rollout_yd,physics_apex_ft,flightscope_apex_ft,diff_apex_ft,carry_exception_regime,carry_exception_offset_yd,carry_exception_source,carry_exception_applied,status +s3_shot_driver_58,119.3,23.6,2.5,7093,3.3,174.2,163.2,11.0,181.2,18.0,200.9,163.9,37.0,26.7,0.7,26.0,120.9,125.7,-4.8,I-S3-V2-P3,7.0,regime,true,severe +s2_shot_21,127.3,7.2,-11.5,2321,-19.5,160.7,154.9,5.8,160.7,5.8,215.3,186.5,28.8,54.6,31.6,23.0,24.9,23.1,1.8,D-S4-V0-P0,,,false,severe +wood1,124.2,6.7,-8.1,4528,4.8,171.2,165.5,5.7,178.2,12.7,178.7,181.9,-3.2,7.5,16.4,-8.9,36.0,32.8,3.2,D-S4-V0-P2,7.0,regime,true,moderate +s3_shot_driver_52,102.1,31.3,3.1,8442,6.3,129.9,124.5,5.4,133.9,9.4,149.4,124.1,25.3,19.5,-0.4,19.9,117.9,119.3,-1.4,W-S2-V3-P4,4.0,regime,true,severe +s3_shot_driver_57,120.9,14.1,-5.2,1544,-8.0,172.5,177.6,-5.1,172.5,-5.1,177.3,197.0,-19.7,4.8,19.4,-14.6,47.4,50.9,-3.5,D-S4-V1-P0,,,false,severe +wood2,118.8,14.5,-3.3,3026,11.2,180.4,175.6,4.8,180.4,4.8,186.8,186.1,0.7,6.4,10.5,-4.1,57.7,59.3,-1.6,D-S3-V1-P1,,,false,moderate +s3_shot_driver_51,116.2,21.7,2.2,6409,3.2,167.3,162.9,4.4,174.3,11.4,193.9,164.3,29.6,26.6,1.4,25.2,109.3,108.7,0.6,I-S3-V2-P3,7.0,regime,true,severe +s3_shot_7i_30,90.2,17.6,-3.8,4508,-0.2,111.2,115.4,-4.2,115.2,-0.2,123.2,121.7,1.5,12.0,6.3,5.7,48.6,43.1,5.5,I-S2-V1-P2,4.0,regime,true,moderate +s3_shot_3w_24,123.4,6.3,-5.4,2752,-13.3,149.8,145.9,3.9,153.8,7.9,206.3,176.7,29.6,56.5,30.8,25.7,21.7,19.8,1.9,D-S4-V0-P1,4.0,regime,true,severe +s3_shot_6i_46,116.3,13.7,0.3,3008,10.7,171.1,167.3,3.8,171.1,3.8,175.8,179.3,-3.5,4.7,12.0,-7.3,50.1,51.6,-1.5,D-S3-V1-P1,,,false,moderate +s2_shot_27,113.0,17.6,-2.3,4292,12.2,161.1,164.5,-3.4,168.1,3.6,183.4,169.6,13.8,22.3,5.1,17.2,78.6,73.6,5.0,D-S3-V1-P2,7.0,regime,true,severe +s2_shot_19,128.6,12.5,-8.4,2514,5.1,191.4,194.5,-3.1,197.8,3.3,204.3,208.7,-4.4,12.9,14.2,-1.3,56.4,57.3,-0.9,D-S4-V1-P1,6.4,regime,true,moderate +s3_shot_6i_47,99.5,14.8,-2.9,4811,4.7,134.2,131.2,3.0,138.2,7.0,148.5,137.7,10.8,14.3,6.5,7.8,56.8,45.0,11.8,I-S2-V1-P2,4.0,regime,true,severe +s2_shot_23,125.5,8.6,-14.3,3062,-23.9,159.1,161.9,-2.8,166.1,4.2,166.1,185.0,-18.9,7.0,23.1,-16.1,31.1,31.0,0.1,D-S4-V0-P1,7.0,regime,true,severe +s2_shot_9,94.4,20.1,2.4,4020,16.3,123.7,126.5,-2.8,123.7,-2.8,136.0,132.5,3.5,12.3,6.0,6.3,62.1,54.8,7.3,I-S2-V2-P2,,,false,pass +s3_shot_7i_28,92.1,16.4,-3.6,4217,-0.4,115.1,117.9,-2.8,119.1,1.2,126.8,125.6,1.2,11.7,7.7,4.0,48.9,40.6,8.3,I-S2-V1-P2,4.0,regime,true,pass +s2_shot_26,117.0,18.4,-2.0,5035,9.7,173.3,170.7,2.6,173.3,2.6,197.3,174.2,23.1,24.0,3.5,20.5,112.3,88.1,24.2,I-S3-V2-P2,,,false,severe +driver2,124.6,13.2,-6.8,3994,-6.1,187.3,184.8,2.5,193.7,8.9,200.9,192.3,8.6,13.6,7.5,6.1,63.1,65.8,-2.7,D-S4-V1-P1,6.4,regime,true,moderate +s3_shot_driver_53,97.2,30.6,2.2,8926,6.0,120.1,117.6,2.5,124.1,6.5,135.0,117.1,17.9,14.9,-0.5,15.4,102.0,105.8,-3.8,W-S2-V3-P4,4.0,regime,true,severe +s3_shot_driver_55,117.5,7.5,-8.3,2150,-27.2,128.1,125.6,2.5,128.1,2.5,184.4,161.8,22.6,56.3,36.2,20.1,17.6,17.2,0.4,D-S3-V0-P0,,,false,severe +s3_shot_6i_43,94.1,13.9,-4.7,4616,1.7,119.7,117.3,2.4,123.7,6.4,129.5,128.6,0.9,9.8,11.3,-1.5,43.1,35.0,8.1,I-S2-V1-P2,4.0,regime,true,pass +s3_shot_7i_27,93.7,17.1,-1.4,4612,2.6,120.1,122.3,-2.2,124.1,1.8,132.6,128.3,4.3,12.5,6.0,6.5,54.0,46.0,8.0,I-S2-V1-P2,4.0,regime,true,pass +s3_shot_driver_56,118.7,17.1,-1.8,4554,2.8,174.4,176.6,-2.2,181.4,4.8,201.6,180.9,20.7,27.2,4.3,22.9,92.9,83.2,9.7,D-S3-V1-P2,7.0,regime,true,severe +s3_shot_6i_48,101.7,15.2,-3.0,4631,4.3,139.2,137.1,2.1,143.2,6.1,154.6,143.5,11.1,15.4,6.4,9.0,63.1,48.9,14.2,I-S2-V1-P2,4.0,regime,true,severe +s3_shot_7i_32,93.1,17.0,-1.0,3762,4.2,119.4,121.2,-1.8,119.4,-1.8,127.6,129.8,-2.2,8.2,8.6,-0.4,45.6,42.5,3.1,I-S2-V1-P1,,,false,pass +wood_low_test_shot,114.5,7.0,-0.6,1932,-1.4,124.4,122.6,1.8,124.4,1.8,181.8,158.9,22.9,57.4,36.3,21.1,16.1,15.7,0.4,D-S3-V0-P0,,,false,severe +s2_shot_12,90.8,24.5,-3.9,7261,4.9,117.1,115.4,1.7,120.6,5.2,125.9,116.4,9.5,8.8,1.0,7.8,66.4,71.5,-5.1,I-S2-V2-P3,3.5,regime,true,moderate +s2_shot_13,95.2,19.6,-1.1,5610,12.2,123.6,125.3,-1.7,127.1,1.8,131.7,128.7,3.0,8.1,3.4,4.7,52.5,58.4,-5.9,I-S2-V2-P3,3.5,regime,true,pass +5iron,102.1,17.4,1.5,5391,12.3,139.7,138.1,1.6,143.7,5.6,154.3,142.2,12.1,14.6,4.1,10.5,64.6,59.6,5.0,I-S2-V1-P2,4.0,regime,true,severe +s3_shot_7i_33,92.4,17.0,-0.6,3852,2.8,118.1,119.7,-1.6,118.1,-1.6,126.7,128.0,-1.3,8.6,8.3,0.3,46.7,42.0,4.7,I-S2-V1-P1,,,false,pass +s3_shot_9i_8,92.2,21.9,-6.3,5042,0.7,121.3,122.9,-1.6,121.3,-1.6,130.5,126.4,4.1,9.2,3.5,5.7,61.1,62.6,-1.5,I-S2-V2-P2,,,false,pass +s3_shot_9i_3,90.1,21.7,2.8,5243,11.2,115.9,117.3,-1.4,115.9,-1.4,121.8,120.7,1.1,5.9,3.4,2.5,52.4,57.7,-5.3,I-S2-V2-P2,,,false,pass +s3_shot_5i_12,74.2,10.2,-1.7,3321,15.8,59.6,58.4,1.2,59.6,1.2,58.4,81.9,-23.5,-1.2,23.5,-24.7,10.5,9.4,1.1,I-S1-V1-P1,,,false,severe +s3_shot_6i_40,62.1,6.8,27.0,2768,30.0,25.0,26.2,-1.2,25.0,-1.2,58.9,51.1,7.8,33.9,24.9,9.0,2.6,2.5,0.1,I-S1-V0-P1,,,false,moderate +s3_shot_6i_44,115.0,9.5,-6.7,2314,15.1,141.1,142.3,-1.2,141.1,-1.2,140.8,168.2,-27.4,-0.3,25.9,-26.2,25.3,26.6,-1.3,D-S3-V0-P0,,,false,severe +s3_shot_9i_9,90.1,22.1,-3.1,5351,1.2,116.9,118.1,-1.2,116.9,-1.2,123.0,121.1,1.9,6.1,3.0,3.1,54.0,60.1,-6.1,I-S2-V2-P2,,,false,pass +s2_shot_18,105.7,20.5,-1.7,5667,8.2,147.9,146.8,1.1,151.9,5.1,166.0,149.4,16.6,18.1,2.6,15.5,83.5,80.4,3.1,I-S3-V2-P3,4.0,regime,true,severe +s3_shot_3w_21,119.4,5.3,-3.4,1760,-10.5,115.7,114.6,1.1,115.7,1.1,177.1,160.5,16.6,61.4,45.9,15.5,11.2,10.9,0.3,D-S3-V0-P0,,,false,severe +s3_shot_5i_16,98.0,9.1,-2.1,3776,1.7,110.2,109.1,1.1,110.2,1.1,109.2,130.0,-20.8,-1.0,20.9,-21.9,19.5,19.7,-0.2,I-S2-V0-P1,,,false,severe +s3_shot_6i_42,77.2,13.1,-3.4,4057,4.1,75.5,76.6,-1.1,75.5,-1.1,75.5,92.9,-17.4,0.0,16.3,-16.3,18.3,17.5,0.8,I-S1-V1-P2,,,false,severe +s3_shot_9i_7,83.0,22.5,5.3,7008,9.7,102.2,101.1,1.1,102.2,1.1,104.2,102.6,1.6,2.0,1.5,0.5,47.3,51.5,-4.2,I-S1-V2-P3,,,false,pass +drive_test_shot,150.0,12.5,1.5,2335,-9.9,245.0,244.0,1.0,245.0,1.0,256.8,256.0,0.8,11.8,12.0,-0.2,80.0,80.6,-0.6,D-S4-V1-P0,,,false,pass +s3_shot_7i_29,107.6,13.8,-6.0,3633,4.7,149.4,148.4,1.0,149.4,1.0,152.5,158.3,-5.8,3.1,9.9,-6.8,42.8,46.3,-3.5,I-S3-V1-P1,,,false,moderate +s3_shot_driver_54,121.5,12.9,-5.3,3411,-10.0,177.2,178.2,-1.0,183.6,5.4,188.7,188.7,0.0,11.5,10.5,1.0,54.3,56.5,-2.2,D-S4-V1-P1,6.4,regime,true,pass +flop_test_shot,68.0,45.0,0.5,12000,0.8,62.7,61.8,0.9,62.7,0.9,63.1,60.3,2.8,0.4,-1.5,1.9,69.2,76.8,-7.6,W-S1-V4-P4,,,false,pass +s3_shot_driver_59,81.0,44.9,8.9,6735,12.4,82.8,83.7,-0.9,82.8,-0.9,100.9,83.2,17.7,18.1,-0.5,18.6,104.0,107.8,-3.8,W-S1-V4-P3,,,false,severe +driver3,119.1,16.0,-8.9,4935,-9.4,173.3,174.1,-0.8,180.3,6.2,201.8,178.5,23.3,28.5,4.4,24.1,99.6,78.5,21.1,D-S3-V1-P2,7.0,regime,true,severe +s3_shot_3w_23,115.8,8.9,-0.8,2804,2.2,148.5,147.7,0.8,148.5,0.8,148.2,170.9,-22.7,-0.3,23.2,-23.5,26.8,28.0,-1.2,D-S3-V0-P1,,,false,severe +driver4,119.0,15.5,-10.2,4454,-7.8,176.3,175.6,0.7,183.3,7.7,197.2,180.9,16.3,20.9,5.3,15.6,78.2,73.8,4.4,D-S3-V1-P2,7.0,regime,true,severe +s2_shot_22,123.3,14.0,-6.1,3104,10.0,184.7,185.4,-0.7,191.1,5.7,199.0,195.5,3.5,14.3,10.1,4.2,61.6,63.0,-1.4,D-S4-V1-P1,6.4,regime,true,pass +s2_shot_24,121.5,14.5,-11.2,3173,-6.8,182.3,183.0,-0.7,188.7,5.7,195.5,192.8,2.7,13.2,9.8,3.4,63.0,64.6,-1.6,D-S4-V1-P1,6.4,regime,true,pass +checked_test_shot,75.0,38.5,1.4,10701,5.7,77.0,77.6,-0.6,77.0,-0.6,78.6,77.5,1.1,1.6,-0.1,1.7,70.8,79.5,-8.7,W-S1-V4-P4,,,false,pass +s2_shot_15,88.1,14.2,-0.3,4985,19.4,100.7,101.3,-0.6,100.7,-0.6,100.8,113.1,-12.3,0.1,11.8,-11.7,27.0,28.9,-1.9,I-S2-V1-P2,,,false,severe +topped_test_shot,91.8,5.0,-0.9,2195,16.2,55.6,56.2,-0.6,55.6,-0.6,109.2,95.3,13.9,53.6,39.1,14.5,4.2,4.3,-0.1,I-S2-V0-P0,,,false,severe +s3_shot_6i_39,61.0,6.1,10.3,3285,22.0,23.5,24.0,-0.5,23.5,-0.5,53.7,47.3,6.4,30.2,23.3,6.9,2.1,2.1,0.0,I-S1-V0-P1,,,false,moderate +s3_shot_7i_25,83.3,13.2,3.0,3410,17.8,86.4,86.9,-0.5,86.4,-0.5,86.8,104.8,-18.0,0.4,17.9,-17.5,21.0,20.1,0.9,I-S1-V1-P1,,,false,severe +s2_shot_16,94.1,19.1,-5.9,5291,5.0,124.7,124.3,0.4,124.7,0.4,130.3,128.1,2.2,5.6,3.8,1.8,52.1,55.3,-3.2,I-S2-V2-P2,,,false,pass +s3_shot_6i_50,82.8,14.8,-1.4,3783,2.8,92.8,93.2,-0.4,92.8,-0.4,95.3,107.4,-12.1,2.5,14.2,-11.7,29.5,25.6,3.9,I-S1-V1-P1,,,false,severe +s3_shot_7i_34,104.2,14.7,-4.6,4081,1.9,142.9,142.5,0.4,146.9,4.4,153.2,150.6,2.6,10.3,8.1,2.2,51.3,48.2,3.1,I-S2-V1-P2,4.0,regime,true,pass +driver1,124.0,9.4,-9.5,2322,-24.8,158.3,158.0,0.3,158.3,0.3,158.3,184.0,-25.7,0.0,26.0,-26.0,29.5,30.2,-0.7,D-S4-V0-P0,,,false,severe +s2_shot_14,87.1,22.4,-2.0,5660,11.4,111.1,110.9,0.2,111.1,0.2,115.3,113.7,1.6,4.2,2.8,1.4,50.0,55.9,-5.9,I-S2-V2-P3,,,false,pass +s2_shot_20,120.9,15.0,-3.0,4245,9.6,179.6,179.4,0.2,186.6,7.2,196.4,185.3,11.1,16.8,5.9,10.9,70.5,72.3,-1.8,D-S4-V1-P2,7.0,regime,true,severe +bump_and_run,58.3,15.6,-0.8,1850,2.3,43.7,43.8,-0.1,34.7,-9.1,34.5,62.0,-27.5,-9.2,18.2,-27.4,8.0,10.1,-2.1,C-S0-V1-P0,-9.0,shot,true,severe +s3_shot_3w_19,121.3,5.6,-4.8,1662,-11.9,120.5,120.6,-0.1,120.5,-0.1,182.5,165.8,16.7,62.0,45.2,16.8,12.3,12.2,0.1,D-S4-V0-P0,,,false,severe +s3_shot_pw_65,81.2,28.4,2.9,6959,9.4,98.4,98.5,-0.1,98.4,-0.1,104.1,99.4,4.7,5.7,0.9,4.8,61.8,65.6,-3.8,I-S1-V3-P3,,,false,pass +approach_mid_iron_test_shot,93.9,22.9,-2.6,5375,2.0,125.8,125.8,0.0,125.8,0.0,136.4,128.5,7.9,10.6,2.7,7.9,64.6,69.3,-4.7,I-S2-V2-P2,,,false,moderate +bump_test_shot,78.3,5.6,-0.8,1850,2.3,39.0,39.0,0.0,36.9,-2.1,86.8,74.0,12.8,47.8,35.0,12.8,3.0,3.1,-0.1,I-S1-V0-P0,-2.1,shot,true,severe +p_wedge_shot_1,82.3,26.5,-3.1,4946,6.7,104.5,104.5,0.0,100.2,-4.3,109.5,107.3,2.2,5.0,2.8,2.2,55.1,60.5,-5.4,I-S1-V3-P2,-4.3,shot,true,pass +s2_shot_10,89.7,25.5,-3.1,6446,6.2,115.1,115.1,0.0,119.1,4.0,127.1,116.4,10.7,12.0,1.3,10.7,66.2,72.0,-5.8,I-S2-V3-P3,4.0,regime,true,severe +s2_shot_11,78.5,29.6,4.3,7350,10.7,93.0,93.0,0.0,91.3,-1.7,95.6,93.6,2.0,2.6,0.6,2.0,59.6,64.0,-4.4,I-S1-V3-P3,-1.7,shot,true,pass +s2_shot_17,122.9,14.4,-1.3,4119,6.7,184.0,184.0,0.0,191.2,7.2,199.5,190.3,9.2,15.5,6.3,9.2,68.2,71.8,-3.6,D-S4-V1-P2,7.2,regime,true,moderate +s3_shot_3w_22,108.9,5.6,-7.2,2501,-1.8,103.2,103.2,0.0,106.3,3.1,161.5,141.3,20.2,58.3,38.1,20.2,11.0,10.5,0.5,I-S3-V0-P1,3.1,shot,true,severe +s3_shot_5i_10,88.0,14.2,1.2,4065,8.4,103.1,103.1,0.0,106.1,3.0,109.6,116.7,-7.1,6.5,13.6,-7.1,34.3,28.4,5.9,I-S2-V1-P2,3.0,shot,true,moderate +s3_shot_5i_11,90.6,14.4,-0.2,3360,7.8,108.8,108.8,0.0,105.6,-3.2,106.9,124.1,-17.2,-1.9,15.3,-17.2,28.5,29.8,-1.3,I-S2-V1-P1,-3.2,shot,true,severe +s3_shot_5i_13,75.0,8.0,2.5,3921,3.4,53.9,53.9,0.0,56.5,2.6,89.0,78.9,10.1,35.1,25.0,10.1,7.4,6.8,0.6,I-S1-V0-P1,2.6,shot,true,severe +s3_shot_5i_15,86.9,9.3,-4.0,2509,-4.9,78.6,78.6,0.0,74.1,-4.5,121.3,106.6,14.7,42.7,28.0,14.7,11.0,12.1,-1.1,I-S2-V0-P1,-4.5,shot,true,severe +s3_shot_5i_17,56.5,10.0,24.1,5178,29.1,30.6,30.6,0.0,28.6,-2.0,45.0,46.9,-1.9,14.4,16.3,-1.9,4.2,4.5,-0.3,C-S0-V1-P2,-2.0,shot,true,pass +s3_shot_6i_35,80.5,15.3,-1.3,4667,-0.0,90.0,90.0,0.0,84.9,-5.1,84.9,101.5,-16.6,-5.1,11.5,-16.6,23.1,26.4,-3.3,I-S1-V1-P2,-5.1,shot,true,severe +s3_shot_6i_36,78.9,10.4,16.1,4166,25.1,67.8,67.8,0.0,69.9,2.1,68.3,89.1,-20.8,0.5,21.3,-20.8,12.4,11.8,0.6,I-S1-V1-P2,2.1,shot,true,severe +s3_shot_6i_37,82.6,10.2,11.0,3041,25.4,71.5,71.5,0.0,67.9,-3.6,109.4,97.2,12.2,37.9,25.7,12.2,11.0,11.8,-0.8,I-S1-V1-P1,-3.6,shot,true,severe +s3_shot_6i_38,79.1,13.3,3.0,3187,11.6,79.2,79.2,0.0,76.0,-3.2,76.2,97.5,-21.3,-3.0,18.3,-21.3,18.1,18.0,0.1,I-S1-V1-P1,-3.2,shot,true,severe +s3_shot_6i_41,82.5,9.9,-2.3,2620,13.6,71.3,71.3,0.0,66.7,-4.6,111.1,97.9,13.2,39.8,26.6,13.2,10.3,11.3,-1.0,I-S1-V0-P1,-4.6,shot,true,severe +s3_shot_6i_45,109.3,6.4,-9.0,2510,-10.9,109.6,109.6,0.0,113.1,3.5,166.5,145.4,21.1,56.9,35.8,21.1,13.5,12.9,0.6,I-S3-V0-P1,3.5,shot,true,severe +s3_shot_6i_49,71.2,7.7,16.1,2625,30.0,39.9,39.9,0.0,37.4,-2.5,77.3,70.3,7.0,37.4,30.4,7.0,4.2,4.5,-0.3,I-S1-V0-P1,-2.5,shot,true,moderate +s3_shot_7i_26,73.4,10.8,15.4,3561,30.0,56.6,56.6,0.0,58.4,1.8,57.5,79.3,-21.8,0.9,22.7,-21.8,10.7,9.6,1.1,I-S1-V1-P1,1.8,shot,true,severe +s3_shot_7i_31,76.4,17.5,-0.5,5122,1.8,85.0,85.0,0.0,80.2,-4.8,80.2,94.5,-14.3,-4.8,9.5,-14.3,24.3,28.4,-4.1,I-S1-V1-P2,-4.8,shot,true,severe +s3_shot_9i_1,89.0,15.1,-0.5,3563,11.3,106.7,106.7,0.0,105.3,-1.4,108.2,120.8,-12.6,1.5,14.1,-12.6,32.1,30.8,1.3,I-S2-V1-P1,-1.4,shot,true,severe +s3_shot_9i_2,71.3,23.9,5.5,4086,8.3,82.1,82.1,0.0,74.1,-8.0,78.3,87.4,-9.1,-3.8,5.3,-9.1,33.8,36.8,-3.0,I-S1-V2-P2,-8.0,shot,true,moderate +s3_shot_9i_5,84.0,19.4,3.8,5352,11.5,102.7,102.7,-0.0,100.1,-2.6,101.7,107.2,-5.5,-1.0,4.5,-5.5,36.3,41.8,-5.5,I-S1-V2-P2,-2.6,shot,true,moderate +s3_shot_driver_60,107.4,11.7,-8.6,3269,-14.8,138.5,138.5,0.0,138.5,0.0,138.9,153.8,-14.9,0.4,15.3,-14.9,31.6,34.0,-2.4,I-S3-V1-P1,,,false,severe +s3_shot_pw_64,69.6,28.6,0.2,5327,5.1,80.1,80.1,0.0,75.7,-4.4,92.0,82.4,9.6,11.9,2.3,9.6,42.7,46.4,-3.7,I-S1-V3-P2,-4.4,shot,true,moderate +s3_shot_pw_66,75.7,27.3,-1.2,6605,4.0,89.7,89.7,-0.0,87.1,-2.6,102.1,90.8,11.3,12.4,1.1,11.3,49.8,53.5,-3.7,I-S1-V3-P3,-2.6,shot,true,severe +s3_shot_pw_67,81.7,28.1,6.3,6510,12.7,100.0,100.0,0.0,100.0,0.0,106.8,101.1,5.7,6.8,1.1,5.7,61.0,65.0,-4.0,I-S1-V3-P3,,,false,moderate +s3_shot_pw_68,88.5,23.4,-0.1,6637,6.0,112.7,112.7,-0.0,116.1,3.4,120.2,114.1,6.1,7.5,1.4,6.1,57.2,63.4,-6.2,I-S2-V2-P3,3.4,shot,true,moderate +s3_shot_pw_69,74.1,23.6,0.2,5880,8.4,86.0,86.0,0.0,83.2,-2.8,84.9,88.8,-3.9,-1.1,2.8,-3.9,37.4,41.2,-3.8,I-S1-V2-P3,-2.8,shot,true,pass +wedge_shot_1,48.7,29.0,-1.3,5684,11.1,42.6,42.6,0.0,37.5,-5.1,46.2,46.9,-0.7,3.6,4.3,-0.7,18.9,21.3,-2.4,C-S0-V3-P3,-5.1,shot,true,pass +wedge_shot_2,51.8,37.0,2.4,5652,9.1,49.1,49.1,0.0,43.0,-6.1,52.8,50.1,2.7,3.7,1.0,2.7,31.1,35.3,-4.2,C-S0-V4-P3,-6.1,shot,true,pass +wedge_test_shot,66.4,23.2,-1.4,6449,7.1,70.6,70.6,0.0,65.6,-5.0,79.4,75.8,3.6,8.8,5.2,3.6,28.0,31.2,-3.2,I-S1-V2-P3,-5.0,shot,true,pass +wedge_test_shot2,54.7,26.8,1.6,4976,5.7,52.2,52.2,-0.0,46.8,-5.4,60.8,57.7,3.1,8.6,5.5,3.1,22.4,24.4,-2.0,C-S0-V3-P2,-5.4,shot,true,pass diff --git a/assets/data/openfairway_critical_overall_20260313_2006.csv.import b/assets/data/openfairway_critical_overall_20260313_2006.csv.import new file mode 100644 index 0000000..ee6d074 --- /dev/null +++ b/assets/data/openfairway_critical_overall_20260313_2006.csv.import @@ -0,0 +1,19 @@ +[remap] + +importer="csv_translation" +type="Translation" +uid="uid://bb0mux541daq3" + +[deps] + +files=["res://assets/data/openfairway_critical_overall_20260313_2006.speed.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.vla.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.hla.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.total.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.spin.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.physics.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.flightscope.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.diff.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.physics.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.flightscope.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.diff.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.rollout.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.rollout.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.diff.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.physics.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.flightscope.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.diff.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.status.translation"] + +source_file="res://assets/data/openfairway_critical_overall_20260313_2006.csv" +dest_files=["res://assets/data/openfairway_critical_overall_20260313_2006.speed.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.vla.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.hla.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.total.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.spin.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.physics.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.flightscope.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.diff.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.physics.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.flightscope.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.diff.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.rollout.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.rollout.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.diff.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.physics.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.flightscope.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.diff.translation", "res://assets/data/openfairway_critical_overall_20260313_2006.status.translation"] + +[params] + +compress=1 +delimiter=0 +unescape_keys=false +unescape_translations=true diff --git a/assets/data/openfairway_critical_overall_20260313_2310.csv b/assets/data/openfairway_critical_overall_20260313_2310.csv new file mode 100644 index 0000000..dec7669 --- /dev/null +++ b/assets/data/openfairway_critical_overall_20260313_2310.csv @@ -0,0 +1,100 @@ +shot_name,speed_mph,vla_deg,hla_deg,total_spin_rpm,spin_axis_deg,physics_carry_yd,flightscope_carry_yd,diff_carry_yd,physics_carry_raw_yd,diff_carry_raw_yd,physics_total_yd,flightscope_total_yd,diff_total_yd,rollout_physics_yd,rollout_flightscope_yd,diff_rollout_yd,physics_apex_ft,flightscope_apex_ft,diff_apex_ft,carry_exception_regime,carry_exception_offset_yd,carry_exception_source,carry_exception_applied,status +s3_shot_driver_58,119.3,23.6,2.5,7093,3.3,181.2,163.2,18.0,181.2,18.0,200.9,163.9,37.0,19.7,0.7,19.0,120.9,125.7,-4.8,I-S3-V2-P3,,,false,severe +s3_shot_3w_24,123.4,6.3,-5.4,2752,-13.3,153.8,145.9,7.9,153.8,7.9,206.3,176.7,29.6,52.5,30.8,21.7,21.7,19.8,1.9,D-S4-V0-P1,,,false,severe +s3_shot_driver_51,116.2,21.7,2.2,6409,3.2,174.3,162.9,11.4,174.3,11.4,193.9,164.3,29.6,19.6,1.4,18.2,109.3,108.7,0.6,I-S3-V2-P3,,,false,severe +s2_shot_21,127.3,7.2,-11.5,2321,-19.5,160.7,154.9,5.8,160.7,5.8,215.3,186.5,28.8,54.6,31.6,23.0,24.9,23.1,1.8,D-S4-V0-P0,,,false,severe +bump_and_run,58.3,15.6,-0.8,1850,2.3,43.7,43.8,-0.1,34.7,-9.1,34.5,62.0,-27.5,-9.2,18.2,-27.4,8.0,10.1,-2.1,C-S0-V1-P0,-9.0,shot,true,severe +s3_shot_6i_44,115.0,9.5,-6.7,2314,15.1,141.1,142.3,-1.2,141.1,-1.2,140.8,168.2,-27.4,-0.3,25.9,-26.2,25.3,26.6,-1.3,D-S3-V0-P0,,,false,severe +driver1,124.0,9.4,-9.5,2322,-24.8,158.3,158.0,0.3,158.3,0.3,158.3,184.0,-25.7,0.0,26.0,-26.0,29.5,30.2,-0.7,D-S4-V0-P0,,,false,severe +s3_shot_driver_52,102.1,31.3,3.1,8442,6.3,133.9,124.5,9.4,133.9,9.4,149.4,124.1,25.3,15.5,-0.4,15.9,117.9,119.3,-1.4,W-S2-V3-P4,,,false,severe +s3_shot_5i_12,74.2,10.2,-1.7,3321,15.8,59.6,58.4,1.2,59.6,1.2,58.4,81.9,-23.5,-1.2,23.5,-24.7,10.5,9.4,1.1,I-S1-V1-P1,,,false,severe +driver3,119.1,16.0,-8.9,4935,-9.4,180.3,174.1,6.2,180.3,6.2,201.8,178.5,23.3,21.5,4.4,17.1,99.6,78.5,21.1,D-S3-V1-P2,,,false,severe +s2_shot_26,117.0,18.4,-2.0,5035,9.7,173.3,170.7,2.6,173.3,2.6,197.3,174.2,23.1,24.0,3.5,20.5,112.3,88.1,24.2,I-S3-V2-P2,,,false,severe +wood_low_test_shot,114.5,7.0,-0.6,1932,-1.4,124.4,122.6,1.8,124.4,1.8,181.8,158.9,22.9,57.4,36.3,21.1,16.1,15.7,0.4,D-S3-V0-P0,,,false,severe +s3_shot_3w_23,115.8,8.9,-0.8,2804,2.2,148.5,147.7,0.8,148.5,0.8,148.2,170.9,-22.7,-0.3,23.2,-23.5,26.8,28.0,-1.2,D-S3-V0-P1,,,false,severe +s3_shot_driver_55,117.5,7.5,-8.3,2150,-27.2,128.1,125.6,2.5,128.1,2.5,184.4,161.8,22.6,56.3,36.2,20.1,17.6,17.2,0.4,D-S3-V0-P0,,,false,severe +s3_shot_7i_26,73.4,10.8,15.4,3561,30.0,56.6,56.6,0.0,58.4,1.8,57.5,79.3,-21.8,0.9,22.7,-21.8,10.7,9.6,1.1,I-S1-V1-P1,1.8,shot,true,severe +s3_shot_6i_38,79.1,13.3,3.0,3187,11.6,79.2,79.2,0.0,76.0,-3.2,76.2,97.5,-21.3,-3.0,18.3,-21.3,18.1,18.0,0.1,I-S1-V1-P1,-3.2,shot,true,severe +s3_shot_6i_45,109.3,6.4,-9.0,2510,-10.9,109.6,109.6,0.0,113.1,3.5,166.5,145.4,21.1,56.9,35.8,21.1,13.5,12.9,0.6,I-S3-V0-P1,3.5,shot,true,severe +s3_shot_5i_16,98.0,9.1,-2.1,3776,1.7,110.2,109.1,1.1,110.2,1.1,109.2,130.0,-20.8,-1.0,20.9,-21.9,19.5,19.7,-0.2,I-S2-V0-P1,,,false,severe +s3_shot_6i_36,78.9,10.4,16.1,4166,25.1,67.8,67.8,0.0,69.9,2.1,68.3,89.1,-20.8,0.5,21.3,-20.8,12.4,11.8,0.6,I-S1-V1-P2,2.1,shot,true,severe +s3_shot_driver_56,118.7,17.1,-1.8,4554,2.8,181.4,176.6,4.8,181.4,4.8,201.6,180.9,20.7,20.2,4.3,15.9,92.9,83.2,9.7,D-S3-V1-P2,,,false,severe +s3_shot_3w_22,108.9,5.6,-7.2,2501,-1.8,103.2,103.2,0.0,106.3,3.1,161.5,141.3,20.2,58.3,38.1,20.2,11.0,10.5,0.5,I-S3-V0-P1,3.1,shot,true,severe +s3_shot_driver_57,120.9,14.1,-5.2,1544,-8.0,172.5,177.6,-5.1,172.5,-5.1,177.3,197.0,-19.7,4.8,19.4,-14.6,47.4,50.9,-3.5,D-S4-V1-P0,,,false,severe +s2_shot_23,125.5,8.6,-14.3,3062,-23.9,166.1,161.9,4.2,166.1,4.2,166.1,185.0,-18.9,0.0,23.1,-23.1,31.1,31.0,0.1,D-S4-V0-P1,,,false,severe +s3_shot_7i_25,83.3,13.2,3.0,3410,17.8,86.4,86.9,-0.5,86.4,-0.5,86.8,104.8,-18.0,0.4,17.9,-17.5,21.0,20.1,0.9,I-S1-V1-P1,,,false,severe +s3_shot_driver_53,97.2,30.6,2.2,8926,6.0,124.1,117.6,6.5,124.1,6.5,135.0,117.1,17.9,10.9,-0.5,11.4,102.0,105.8,-3.8,W-S2-V3-P4,,,false,severe +s3_shot_driver_59,81.0,44.9,8.9,6735,12.4,82.8,83.7,-0.9,82.8,-0.9,100.9,83.2,17.7,18.1,-0.5,18.6,104.0,107.8,-3.8,W-S1-V4-P3,,,false,severe +s3_shot_6i_42,77.2,13.1,-3.4,4057,4.1,75.5,76.6,-1.1,75.5,-1.1,75.5,92.9,-17.4,0.0,16.3,-16.3,18.3,17.5,0.8,I-S1-V1-P2,,,false,severe +s3_shot_5i_11,90.6,14.4,-0.2,3360,7.8,108.8,108.8,0.0,105.6,-3.2,106.9,124.1,-17.2,-1.9,15.3,-17.2,28.5,29.8,-1.3,I-S2-V1-P1,-3.2,shot,true,severe +s3_shot_3w_19,121.3,5.6,-4.8,1662,-11.9,120.5,120.6,-0.1,120.5,-0.1,182.5,165.8,16.7,62.0,45.2,16.8,12.3,12.2,0.1,D-S4-V0-P0,,,false,severe +s2_shot_18,105.7,20.5,-1.7,5667,8.2,151.9,146.8,5.1,151.9,5.1,166.0,149.4,16.6,14.1,2.6,11.5,83.5,80.4,3.1,I-S3-V2-P3,,,false,severe +s3_shot_3w_21,119.4,5.3,-3.4,1760,-10.5,115.7,114.6,1.1,115.7,1.1,177.1,160.5,16.6,61.4,45.9,15.5,11.2,10.9,0.3,D-S3-V0-P0,,,false,severe +s3_shot_6i_35,80.5,15.3,-1.3,4667,-0.0,90.0,90.0,0.0,84.9,-5.1,84.9,101.5,-16.6,-5.1,11.5,-16.6,23.1,26.4,-3.3,I-S1-V1-P2,-5.1,shot,true,severe +driver4,119.0,15.5,-10.2,4454,-7.8,183.3,175.6,7.7,183.3,7.7,197.2,180.9,16.3,13.9,5.3,8.6,78.2,73.8,4.4,D-S3-V1-P2,,,false,severe +s3_shot_driver_60,107.4,11.7,-8.6,3269,-14.8,138.5,138.5,0.0,138.5,0.0,138.9,153.8,-14.9,0.4,15.3,-14.9,31.6,34.0,-2.4,I-S3-V1-P1,,,false,severe +s3_shot_5i_15,86.9,9.3,-4.0,2509,-4.9,78.6,78.6,0.0,74.1,-4.5,121.3,106.6,14.7,42.7,28.0,14.7,11.0,12.1,-1.1,I-S2-V0-P1,-4.5,shot,true,severe +s3_shot_7i_31,76.4,17.5,-0.5,5122,1.8,85.0,85.0,0.0,80.2,-4.8,80.2,94.5,-14.3,-4.8,9.5,-14.3,24.3,28.4,-4.1,I-S1-V1-P2,-4.8,shot,true,severe +topped_test_shot,91.8,5.0,-0.9,2195,16.2,55.6,56.2,-0.6,55.6,-0.6,109.2,95.3,13.9,53.6,39.1,14.5,4.2,4.3,-0.1,I-S2-V0-P0,,,false,severe +s2_shot_27,113.0,17.6,-2.3,4292,12.2,168.1,164.5,3.6,168.1,3.6,183.4,169.6,13.8,15.3,5.1,10.2,78.6,73.6,5.0,D-S3-V1-P2,,,false,severe +s3_shot_6i_41,82.5,9.9,-2.3,2620,13.6,71.3,71.3,0.0,66.7,-4.6,111.1,97.9,13.2,39.8,26.6,13.2,10.3,11.3,-1.0,I-S1-V0-P1,-4.6,shot,true,severe +bump_test_shot,78.3,5.6,-0.8,1850,2.3,39.0,39.0,0.0,36.9,-2.1,86.8,74.0,12.8,47.8,35.0,12.8,3.0,3.1,-0.1,I-S1-V0-P0,-2.1,shot,true,severe +wood1,124.2,6.7,-8.1,4528,4.8,178.2,165.5,12.7,178.2,12.7,178.7,181.9,-3.2,0.5,16.4,-15.9,36.0,32.8,3.2,D-S4-V0-P2,,,false,severe +s3_shot_9i_1,89.0,15.1,-0.5,3563,11.3,106.7,106.7,0.0,105.3,-1.4,108.2,120.8,-12.6,1.5,14.1,-12.6,32.1,30.8,1.3,I-S2-V1-P1,-1.4,shot,true,severe +s2_shot_15,88.1,14.2,-0.3,4985,19.4,100.7,101.3,-0.6,100.7,-0.6,100.8,113.1,-12.3,0.1,11.8,-11.7,27.0,28.9,-1.9,I-S2-V1-P2,,,false,severe +s3_shot_6i_37,82.6,10.2,11.0,3041,25.4,71.5,71.5,0.0,67.9,-3.6,109.4,97.2,12.2,37.9,25.7,12.2,11.0,11.8,-0.8,I-S1-V1-P1,-3.6,shot,true,severe +5iron,102.1,17.4,1.5,5391,12.3,143.7,138.1,5.6,143.7,5.6,154.3,142.2,12.1,10.6,4.1,6.5,64.6,59.6,5.0,I-S2-V1-P2,,,false,severe +s3_shot_6i_50,82.8,14.8,-1.4,3783,2.8,92.8,93.2,-0.4,92.8,-0.4,95.3,107.4,-12.1,2.5,14.2,-11.7,29.5,25.6,3.9,I-S1-V1-P1,,,false,severe +s3_shot_pw_66,75.7,27.3,-1.2,6605,4.0,89.7,89.7,-0.0,87.1,-2.6,102.1,90.8,11.3,12.4,1.1,11.3,49.8,53.5,-3.7,I-S1-V3-P3,-2.6,shot,true,severe +s2_shot_20,120.9,15.0,-3.0,4245,9.6,186.6,179.4,7.2,186.6,7.2,196.4,185.3,11.1,9.8,5.9,3.9,70.5,72.3,-1.8,D-S4-V1-P2,,,false,severe +s3_shot_6i_48,101.7,15.2,-3.0,4631,4.3,143.2,137.1,6.1,143.2,6.1,154.6,143.5,11.1,11.4,6.4,5.0,63.1,48.9,14.2,I-S2-V1-P2,,,false,severe +s3_shot_6i_47,99.5,14.8,-2.9,4811,4.7,138.2,131.2,7.0,138.2,7.0,148.5,137.7,10.8,10.3,6.5,3.8,56.8,45.0,11.8,I-S2-V1-P2,,,false,severe +s2_shot_10,89.7,25.5,-3.1,6446,6.2,119.1,115.1,4.0,119.1,4.0,127.1,116.4,10.7,8.0,1.3,6.7,66.2,72.0,-5.8,I-S2-V3-P3,,,false,severe +s3_shot_5i_13,75.0,8.0,2.5,3921,3.4,53.9,53.9,0.0,56.5,2.6,89.0,78.9,10.1,35.1,25.0,10.1,7.4,6.8,0.6,I-S1-V0-P1,2.6,shot,true,severe +s3_shot_pw_64,69.6,28.6,0.2,5327,5.1,80.1,80.1,0.0,75.7,-4.4,92.0,82.4,9.6,11.9,2.3,9.6,42.7,46.4,-3.7,I-S1-V3-P2,-4.4,shot,true,moderate +s2_shot_12,90.8,24.5,-3.9,7261,4.9,120.6,115.4,5.2,120.6,5.2,125.9,116.4,9.5,5.3,1.0,4.3,66.4,71.5,-5.1,I-S2-V2-P3,,,false,moderate +s2_shot_17,122.9,14.4,-1.3,4119,6.7,191.2,184.0,7.2,191.2,7.2,199.5,190.3,9.2,8.3,6.3,2.0,68.2,71.8,-3.6,D-S4-V1-P2,,,false,severe +s3_shot_9i_2,71.3,23.9,5.5,4086,8.3,82.1,82.1,0.0,74.1,-8.0,78.3,87.4,-9.1,-3.8,5.3,-9.1,33.8,36.8,-3.0,I-S1-V2-P2,-8.0,shot,true,moderate +driver2,124.6,13.2,-6.8,3994,-6.1,193.7,184.8,8.9,193.7,8.9,200.9,192.3,8.6,7.2,7.5,-0.3,63.1,65.8,-2.7,D-S4-V1-P1,,,false,severe +approach_mid_iron_test_shot,93.9,22.9,-2.6,5375,2.0,125.8,125.8,0.0,125.8,0.0,136.4,128.5,7.9,10.6,2.7,7.9,64.6,69.3,-4.7,I-S2-V2-P2,,,false,moderate +s3_shot_6i_40,62.1,6.8,27.0,2768,30.0,25.0,26.2,-1.2,25.0,-1.2,58.9,51.1,7.8,33.9,24.9,9.0,2.6,2.5,0.1,I-S1-V0-P1,,,false,moderate +s3_shot_5i_10,88.0,14.2,1.2,4065,8.4,103.1,103.1,0.0,106.1,3.0,109.6,116.7,-7.1,6.5,13.6,-7.1,34.3,28.4,5.9,I-S2-V1-P2,3.0,shot,true,moderate +s3_shot_6i_49,71.2,7.7,16.1,2625,30.0,39.9,39.9,0.0,37.4,-2.5,77.3,70.3,7.0,37.4,30.4,7.0,4.2,4.5,-0.3,I-S1-V0-P1,-2.5,shot,true,moderate +s3_shot_6i_39,61.0,6.1,10.3,3285,22.0,23.5,24.0,-0.5,23.5,-0.5,53.7,47.3,6.4,30.2,23.3,6.9,2.1,2.1,0.0,I-S1-V0-P1,,,false,moderate +s3_shot_6i_43,94.1,13.9,-4.7,4616,1.7,123.7,117.3,6.4,123.7,6.4,129.5,128.6,0.9,5.8,11.3,-5.5,43.1,35.0,8.1,I-S2-V1-P2,,,false,moderate +s3_shot_pw_68,88.5,23.4,-0.1,6637,6.0,112.7,112.7,-0.0,116.1,3.4,120.2,114.1,6.1,7.5,1.4,6.1,57.2,63.4,-6.2,I-S2-V2-P3,3.4,shot,true,moderate +s3_shot_7i_29,107.6,13.8,-6.0,3633,4.7,149.4,148.4,1.0,149.4,1.0,152.5,158.3,-5.8,3.1,9.9,-6.8,42.8,46.3,-3.5,I-S3-V1-P1,,,false,moderate +s2_shot_22,123.3,14.0,-6.1,3104,10.0,191.1,185.4,5.7,191.1,5.7,199.0,195.5,3.5,7.9,10.1,-2.2,61.6,63.0,-1.4,D-S4-V1-P1,,,false,moderate +s2_shot_24,121.5,14.5,-11.2,3173,-6.8,188.7,183.0,5.7,188.7,5.7,195.5,192.8,2.7,6.8,9.8,-3.0,63.0,64.6,-1.6,D-S4-V1-P1,,,false,moderate +s3_shot_pw_67,81.7,28.1,6.3,6510,12.7,100.0,100.0,0.0,100.0,0.0,106.8,101.1,5.7,6.8,1.1,5.7,61.0,65.0,-4.0,I-S1-V3-P3,,,false,moderate +s3_shot_9i_5,84.0,19.4,3.8,5352,11.5,102.7,102.7,-0.0,100.1,-2.6,101.7,107.2,-5.5,-1.0,4.5,-5.5,36.3,41.8,-5.5,I-S1-V2-P2,-2.6,shot,true,moderate +s3_shot_driver_54,121.5,12.9,-5.3,3411,-10.0,183.6,178.2,5.4,183.6,5.4,188.7,188.7,0.0,5.1,10.5,-5.4,54.3,56.5,-2.2,D-S4-V1-P1,,,false,moderate +wood2,118.8,14.5,-3.3,3026,11.2,180.4,175.6,4.8,180.4,4.8,186.8,186.1,0.7,6.4,10.5,-4.1,57.7,59.3,-1.6,D-S3-V1-P1,,,false,moderate +s3_shot_pw_65,81.2,28.4,2.9,6959,9.4,98.4,98.5,-0.1,98.4,-0.1,104.1,99.4,4.7,5.7,0.9,4.8,61.8,65.6,-3.8,I-S1-V3-P3,,,false,pass +s2_shot_19,128.6,12.5,-8.4,2514,5.1,197.8,194.5,3.3,197.8,3.3,204.3,208.7,-4.4,6.5,14.2,-7.7,56.4,57.3,-0.9,D-S4-V1-P1,,,false,moderate +s3_shot_7i_34,104.2,14.7,-4.6,4081,1.9,146.9,142.5,4.4,146.9,4.4,153.2,150.6,2.6,6.3,8.1,-1.8,51.3,48.2,3.1,I-S2-V1-P2,,,false,moderate +s3_shot_7i_27,93.7,17.1,-1.4,4612,2.6,124.1,122.3,1.8,124.1,1.8,132.6,128.3,4.3,8.5,6.0,2.5,54.0,46.0,8.0,I-S2-V1-P2,,,false,pass +s3_shot_9i_8,92.2,21.9,-6.3,5042,0.7,121.3,122.9,-1.6,121.3,-1.6,130.5,126.4,4.1,9.2,3.5,5.7,61.1,62.6,-1.5,I-S2-V2-P2,,,false,pass +s3_shot_pw_69,74.1,23.6,0.2,5880,8.4,86.0,86.0,0.0,83.2,-2.8,84.9,88.8,-3.9,-1.1,2.8,-3.9,37.4,41.2,-3.8,I-S1-V2-P3,-2.8,shot,true,pass +s3_shot_6i_46,116.3,13.7,0.3,3008,10.7,171.1,167.3,3.8,171.1,3.8,175.8,179.3,-3.5,4.7,12.0,-7.3,50.1,51.6,-1.5,D-S3-V1-P1,,,false,moderate +wedge_test_shot,66.4,23.2,-1.4,6449,7.1,70.6,70.6,0.0,65.6,-5.0,79.4,75.8,3.6,8.8,5.2,3.6,28.0,31.2,-3.2,I-S1-V2-P3,-5.0,shot,true,pass +s2_shot_9,94.4,20.1,2.4,4020,16.3,123.7,126.5,-2.8,123.7,-2.8,136.0,132.5,3.5,12.3,6.0,6.3,62.1,54.8,7.3,I-S2-V2-P2,,,false,pass +wedge_test_shot2,54.7,26.8,1.6,4976,5.7,52.2,52.2,-0.0,46.8,-5.4,60.8,57.7,3.1,8.6,5.5,3.1,22.4,24.4,-2.0,C-S0-V3-P2,-5.4,shot,true,pass +s2_shot_13,95.2,19.6,-1.1,5610,12.2,127.1,125.3,1.8,127.1,1.8,131.7,128.7,3.0,4.6,3.4,1.2,52.5,58.4,-5.9,I-S2-V2-P3,,,false,pass +flop_test_shot,68.0,45.0,0.5,12000,0.8,62.7,61.8,0.9,62.7,0.9,63.1,60.3,2.8,0.4,-1.5,1.9,69.2,76.8,-7.6,W-S1-V4-P4,,,false,pass +wedge_shot_2,51.8,37.0,2.4,5652,9.1,49.1,49.1,0.0,43.0,-6.1,52.8,50.1,2.7,3.7,1.0,2.7,31.1,35.3,-4.2,C-S0-V4-P3,-6.1,shot,true,pass +p_wedge_shot_1,82.3,26.5,-3.1,4946,6.7,104.5,104.5,0.0,100.2,-4.3,109.5,107.3,2.2,5.0,2.8,2.2,55.1,60.5,-5.4,I-S1-V3-P2,-4.3,shot,true,pass +s2_shot_16,94.1,19.1,-5.9,5291,5.0,124.7,124.3,0.4,124.7,0.4,130.3,128.1,2.2,5.6,3.8,1.8,52.1,55.3,-3.2,I-S2-V2-P2,,,false,pass +s3_shot_7i_32,93.1,17.0,-1.0,3762,4.2,119.4,121.2,-1.8,119.4,-1.8,127.6,129.8,-2.2,8.2,8.6,-0.4,45.6,42.5,3.1,I-S2-V1-P1,,,false,pass +s2_shot_11,78.5,29.6,4.3,7350,10.7,93.0,93.0,0.0,91.3,-1.7,95.6,93.6,2.0,2.6,0.6,2.0,59.6,64.0,-4.4,I-S1-V3-P3,-1.7,shot,true,pass +s3_shot_5i_17,56.5,10.0,24.1,5178,29.1,30.6,30.6,0.0,28.6,-2.0,45.0,46.9,-1.9,14.4,16.3,-1.9,4.2,4.5,-0.3,C-S0-V1-P2,-2.0,shot,true,pass +s3_shot_9i_9,90.1,22.1,-3.1,5351,1.2,116.9,118.1,-1.2,116.9,-1.2,123.0,121.1,1.9,6.1,3.0,3.1,54.0,60.1,-6.1,I-S2-V2-P2,,,false,pass +s2_shot_14,87.1,22.4,-2.0,5660,11.4,111.1,110.9,0.2,111.1,0.2,115.3,113.7,1.6,4.2,2.8,1.4,50.0,55.9,-5.9,I-S2-V2-P3,,,false,pass +s3_shot_7i_33,92.4,17.0,-0.6,3852,2.8,118.1,119.7,-1.6,118.1,-1.6,126.7,128.0,-1.3,8.6,8.3,0.3,46.7,42.0,4.7,I-S2-V1-P1,,,false,pass +s3_shot_9i_7,83.0,22.5,5.3,7008,9.7,102.2,101.1,1.1,102.2,1.1,104.2,102.6,1.6,2.0,1.5,0.5,47.3,51.5,-4.2,I-S1-V2-P3,,,false,pass +s3_shot_7i_30,90.2,17.6,-3.8,4508,-0.2,115.2,115.4,-0.2,115.2,-0.2,123.2,121.7,1.5,8.0,6.3,1.7,48.6,43.1,5.5,I-S2-V1-P2,,,false,pass +s3_shot_9i_3,90.1,21.7,2.8,5243,11.2,115.9,117.3,-1.4,115.9,-1.4,121.8,120.7,1.1,5.9,3.4,2.5,52.4,57.7,-5.3,I-S2-V2-P2,,,false,pass +s3_shot_7i_28,92.1,16.4,-3.6,4217,-0.4,119.1,117.9,1.2,119.1,1.2,126.8,125.6,1.2,7.7,7.7,0.0,48.9,40.6,8.3,I-S2-V1-P2,,,false,pass +checked_test_shot,75.0,38.5,1.4,10701,5.7,77.0,77.6,-0.6,77.0,-0.6,78.6,77.5,1.1,1.6,-0.1,1.7,70.8,79.5,-8.7,W-S1-V4-P4,,,false,pass +drive_test_shot,150.0,12.5,1.5,2335,-9.9,245.0,244.0,1.0,245.0,1.0,256.8,256.0,0.8,11.8,12.0,-0.2,80.0,80.6,-0.6,D-S4-V1-P0,,,false,pass +wedge_shot_1,48.7,29.0,-1.3,5684,11.1,42.6,42.6,0.0,37.5,-5.1,46.2,46.9,-0.7,3.6,4.3,-0.7,18.9,21.3,-2.4,C-S0-V3-P3,-5.1,shot,true,pass diff --git a/assets/data/openfairway_critical_overall_20260313_2310.csv.import b/assets/data/openfairway_critical_overall_20260313_2310.csv.import new file mode 100644 index 0000000..219bca6 --- /dev/null +++ b/assets/data/openfairway_critical_overall_20260313_2310.csv.import @@ -0,0 +1,19 @@ +[remap] + +importer="csv_translation" +type="Translation" +uid="uid://denb8es5ofmqb" + +[deps] + +files=["res://assets/data/openfairway_critical_overall_20260313_2310.speed.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.vla.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.hla.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.total.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.spin.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.physics.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.flightscope.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.diff.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.physics.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.diff.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.physics.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.flightscope.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.diff.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.rollout.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.rollout.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.diff.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.physics.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.flightscope.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.diff.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.carry.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.carry.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.carry.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.carry.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.status.translation"] + +source_file="res://assets/data/openfairway_critical_overall_20260313_2310.csv" +dest_files=["res://assets/data/openfairway_critical_overall_20260313_2310.speed.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.vla.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.hla.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.total.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.spin.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.physics.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.flightscope.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.diff.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.physics.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.diff.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.physics.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.flightscope.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.diff.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.rollout.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.rollout.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.diff.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.physics.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.flightscope.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.diff.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.carry.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.carry.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.carry.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.carry.translation", "res://assets/data/openfairway_critical_overall_20260313_2310.status.translation"] + +[params] + +compress=1 +delimiter=0 +unescape_keys=false +unescape_translations=true diff --git a/assets/data/openfairway_critical_overall_20260313_2332.csv b/assets/data/openfairway_critical_overall_20260313_2332.csv new file mode 100644 index 0000000..42b5cf4 --- /dev/null +++ b/assets/data/openfairway_critical_overall_20260313_2332.csv @@ -0,0 +1,100 @@ +shot_name,speed_mph,vla_deg,hla_deg,total_spin_rpm,spin_axis_deg,physics_carry_yd,flightscope_carry_yd,diff_carry_yd,physics_carry_raw_yd,diff_carry_raw_yd,physics_total_yd,flightscope_total_yd,diff_total_yd,rollout_physics_yd,rollout_flightscope_yd,diff_rollout_yd,physics_apex_ft,flightscope_apex_ft,diff_apex_ft,carry_exception_regime,carry_exception_offset_yd,carry_exception_source,carry_exception_applied,status +s3_shot_driver_58,119.3,23.6,2.5,7093,3.3,174.2,163.2,11.0,181.2,18.0,200.9,163.9,37.0,26.7,0.7,26.0,120.9,125.7,-4.8,I-S3-V2-P3,7.0,regime,true,severe +s3_shot_3w_24,123.4,6.3,-5.4,2752,-13.3,149.8,145.9,3.9,153.8,7.9,206.3,176.7,29.6,56.5,30.8,25.7,21.7,19.8,1.9,D-S4-V0-P1,4.0,regime,true,severe +s3_shot_driver_51,116.2,21.7,2.2,6409,3.2,167.3,162.9,4.4,174.3,11.4,193.9,164.3,29.6,26.6,1.4,25.2,109.3,108.7,0.6,I-S3-V2-P3,7.0,regime,true,severe +s2_shot_21,127.3,7.2,-11.5,2321,-19.5,160.7,154.9,5.8,160.7,5.8,215.3,186.5,28.8,54.6,31.6,23.0,24.9,23.1,1.8,D-S4-V0-P0,,,false,severe +bump_and_run,58.3,15.6,-0.8,1850,2.3,43.7,43.8,-0.1,34.7,-9.1,34.5,62.0,-27.5,-9.2,18.2,-27.4,8.0,10.1,-2.1,C-S0-V1-P0,-9.0,shot,true,severe +s3_shot_6i_44,115.0,9.5,-6.7,2314,15.1,141.1,142.3,-1.2,141.1,-1.2,140.8,168.2,-27.4,-0.3,25.9,-26.2,25.3,26.6,-1.3,D-S3-V0-P0,,,false,severe +driver1,124.0,9.4,-9.5,2322,-24.8,158.3,158.0,0.3,158.3,0.3,158.3,184.0,-25.7,0.0,26.0,-26.0,29.5,30.2,-0.7,D-S4-V0-P0,,,false,severe +s3_shot_driver_52,102.1,31.3,3.1,8442,6.3,129.9,124.5,5.4,133.9,9.4,149.4,124.1,25.3,19.5,-0.4,19.9,117.9,119.3,-1.4,W-S2-V3-P4,4.0,regime,true,severe +s3_shot_5i_12,74.2,10.2,-1.7,3321,15.8,59.6,58.4,1.2,59.6,1.2,58.4,81.9,-23.5,-1.2,23.5,-24.7,10.5,9.4,1.1,I-S1-V1-P1,,,false,severe +driver3,119.1,16.0,-8.9,4935,-9.4,173.3,174.1,-0.8,180.3,6.2,201.8,178.5,23.3,28.5,4.4,24.1,99.6,78.5,21.1,D-S3-V1-P2,7.0,regime,true,severe +s2_shot_26,117.0,18.4,-2.0,5035,9.7,173.3,170.7,2.6,173.3,2.6,197.3,174.2,23.1,24.0,3.5,20.5,112.3,88.1,24.2,I-S3-V2-P2,,,false,severe +wood_low_test_shot,114.5,7.0,-0.6,1932,-1.4,124.4,122.6,1.8,124.4,1.8,181.8,158.9,22.9,57.4,36.3,21.1,16.1,15.7,0.4,D-S3-V0-P0,,,false,severe +s3_shot_3w_23,115.8,8.9,-0.8,2804,2.2,148.5,147.7,0.8,148.5,0.8,148.2,170.9,-22.7,-0.3,23.2,-23.5,26.8,28.0,-1.2,D-S3-V0-P1,,,false,severe +s3_shot_driver_55,117.5,7.5,-8.3,2150,-27.2,128.1,125.6,2.5,128.1,2.5,184.4,161.8,22.6,56.3,36.2,20.1,17.6,17.2,0.4,D-S3-V0-P0,,,false,severe +s3_shot_7i_26,73.4,10.8,15.4,3561,30.0,56.6,56.6,0.0,58.4,1.8,57.5,79.3,-21.8,0.9,22.7,-21.8,10.7,9.6,1.1,I-S1-V1-P1,1.8,shot,true,severe +s3_shot_6i_38,79.1,13.3,3.0,3187,11.6,79.2,79.2,0.0,76.0,-3.2,76.2,97.5,-21.3,-3.0,18.3,-21.3,18.1,18.0,0.1,I-S1-V1-P1,-3.2,shot,true,severe +s3_shot_6i_45,109.3,6.4,-9.0,2510,-10.9,109.6,109.6,0.0,113.1,3.5,166.5,145.4,21.1,56.9,35.8,21.1,13.5,12.9,0.6,I-S3-V0-P1,3.5,shot,true,severe +s3_shot_5i_16,98.0,9.1,-2.1,3776,1.7,110.2,109.1,1.1,110.2,1.1,109.2,130.0,-20.8,-1.0,20.9,-21.9,19.5,19.7,-0.2,I-S2-V0-P1,,,false,severe +s3_shot_6i_36,78.9,10.4,16.1,4166,25.1,67.8,67.8,0.0,69.9,2.1,68.3,89.1,-20.8,0.5,21.3,-20.8,12.4,11.8,0.6,I-S1-V1-P2,2.1,shot,true,severe +s3_shot_driver_56,118.7,17.1,-1.8,4554,2.8,174.4,176.6,-2.2,181.4,4.8,201.6,180.9,20.7,27.2,4.3,22.9,92.9,83.2,9.7,D-S3-V1-P2,7.0,regime,true,severe +s3_shot_3w_22,108.9,5.6,-7.2,2501,-1.8,103.2,103.2,0.0,106.3,3.1,161.5,141.3,20.2,58.3,38.1,20.2,11.0,10.5,0.5,I-S3-V0-P1,3.1,shot,true,severe +s3_shot_driver_57,120.9,14.1,-5.2,1544,-8.0,172.5,177.6,-5.1,172.5,-5.1,177.3,197.0,-19.7,4.8,19.4,-14.6,47.4,50.9,-3.5,D-S4-V1-P0,,,false,severe +s2_shot_23,125.5,8.6,-14.3,3062,-23.9,159.1,161.9,-2.8,166.1,4.2,166.1,185.0,-18.9,7.0,23.1,-16.1,31.1,31.0,0.1,D-S4-V0-P1,7.0,regime,true,severe +s3_shot_7i_25,83.3,13.2,3.0,3410,17.8,86.4,86.9,-0.5,86.4,-0.5,86.8,104.8,-18.0,0.4,17.9,-17.5,21.0,20.1,0.9,I-S1-V1-P1,,,false,severe +s3_shot_driver_53,97.2,30.6,2.2,8926,6.0,120.1,117.6,2.5,124.1,6.5,135.0,117.1,17.9,14.9,-0.5,15.4,102.0,105.8,-3.8,W-S2-V3-P4,4.0,regime,true,severe +s3_shot_driver_59,81.0,44.9,8.9,6735,12.4,82.8,83.7,-0.9,82.8,-0.9,100.9,83.2,17.7,18.1,-0.5,18.6,104.0,107.8,-3.8,W-S1-V4-P3,,,false,severe +s3_shot_6i_42,77.2,13.1,-3.4,4057,4.1,75.5,76.6,-1.1,75.5,-1.1,75.5,92.9,-17.4,0.0,16.3,-16.3,18.3,17.5,0.8,I-S1-V1-P2,,,false,severe +s3_shot_5i_11,90.6,14.4,-0.2,3360,7.8,108.8,108.8,0.0,105.6,-3.2,106.9,124.1,-17.2,-1.9,15.3,-17.2,28.5,29.8,-1.3,I-S2-V1-P1,-3.2,shot,true,severe +s3_shot_3w_19,121.3,5.6,-4.8,1662,-11.9,120.5,120.6,-0.1,120.5,-0.1,182.5,165.8,16.7,62.0,45.2,16.8,12.3,12.2,0.1,D-S4-V0-P0,,,false,severe +s2_shot_18,105.7,20.5,-1.7,5667,8.2,147.9,146.8,1.1,151.9,5.1,166.0,149.4,16.6,18.1,2.6,15.5,83.5,80.4,3.1,I-S3-V2-P3,4.0,regime,true,severe +s3_shot_3w_21,119.4,5.3,-3.4,1760,-10.5,115.7,114.6,1.1,115.7,1.1,177.1,160.5,16.6,61.4,45.9,15.5,11.2,10.9,0.3,D-S3-V0-P0,,,false,severe +s3_shot_6i_35,80.5,15.3,-1.3,4667,-0.0,90.0,90.0,0.0,84.9,-5.1,84.9,101.5,-16.6,-5.1,11.5,-16.6,23.1,26.4,-3.3,I-S1-V1-P2,-5.1,shot,true,severe +driver4,119.0,15.5,-10.2,4454,-7.8,176.3,175.6,0.7,183.3,7.7,197.2,180.9,16.3,20.9,5.3,15.6,78.2,73.8,4.4,D-S3-V1-P2,7.0,regime,true,severe +s3_shot_driver_60,107.4,11.7,-8.6,3269,-14.8,138.5,138.5,0.0,138.5,0.0,138.9,153.8,-14.9,0.4,15.3,-14.9,31.6,34.0,-2.4,I-S3-V1-P1,,,false,severe +s3_shot_5i_15,86.9,9.3,-4.0,2509,-4.9,78.6,78.6,0.0,74.1,-4.5,121.3,106.6,14.7,42.7,28.0,14.7,11.0,12.1,-1.1,I-S2-V0-P1,-4.5,shot,true,severe +s3_shot_7i_31,76.4,17.5,-0.5,5122,1.8,85.0,85.0,0.0,80.2,-4.8,80.2,94.5,-14.3,-4.8,9.5,-14.3,24.3,28.4,-4.1,I-S1-V1-P2,-4.8,shot,true,severe +topped_test_shot,91.8,5.0,-0.9,2195,16.2,55.6,56.2,-0.6,55.6,-0.6,109.2,95.3,13.9,53.6,39.1,14.5,4.2,4.3,-0.1,I-S2-V0-P0,,,false,severe +s2_shot_27,113.0,17.6,-2.3,4292,12.2,161.1,164.5,-3.4,168.1,3.6,183.4,169.6,13.8,22.3,5.1,17.2,78.6,73.6,5.0,D-S3-V1-P2,7.0,regime,true,severe +s3_shot_6i_41,82.5,9.9,-2.3,2620,13.6,71.3,71.3,0.0,66.7,-4.6,111.1,97.9,13.2,39.8,26.6,13.2,10.3,11.3,-1.0,I-S1-V0-P1,-4.6,shot,true,severe +bump_test_shot,78.3,5.6,-0.8,1850,2.3,39.0,39.0,0.0,36.9,-2.1,86.8,74.0,12.8,47.8,35.0,12.8,3.0,3.1,-0.1,I-S1-V0-P0,-2.1,shot,true,severe +s3_shot_9i_1,89.0,15.1,-0.5,3563,11.3,106.7,106.7,0.0,105.3,-1.4,108.2,120.8,-12.6,1.5,14.1,-12.6,32.1,30.8,1.3,I-S2-V1-P1,-1.4,shot,true,severe +s2_shot_15,88.1,14.2,-0.3,4985,19.4,100.7,101.3,-0.6,100.7,-0.6,100.8,113.1,-12.3,0.1,11.8,-11.7,27.0,28.9,-1.9,I-S2-V1-P2,,,false,severe +s3_shot_6i_37,82.6,10.2,11.0,3041,25.4,71.5,71.5,0.0,67.9,-3.6,109.4,97.2,12.2,37.9,25.7,12.2,11.0,11.8,-0.8,I-S1-V1-P1,-3.6,shot,true,severe +5iron,102.1,17.4,1.5,5391,12.3,139.7,138.1,1.6,143.7,5.6,154.3,142.2,12.1,14.6,4.1,10.5,64.6,59.6,5.0,I-S2-V1-P2,4.0,regime,true,severe +s3_shot_6i_50,82.8,14.8,-1.4,3783,2.8,92.8,93.2,-0.4,92.8,-0.4,95.3,107.4,-12.1,2.5,14.2,-11.7,29.5,25.6,3.9,I-S1-V1-P1,,,false,severe +s3_shot_pw_66,75.7,27.3,-1.2,6605,4.0,89.7,89.7,-0.0,87.1,-2.6,102.1,90.8,11.3,12.4,1.1,11.3,49.8,53.5,-3.7,I-S1-V3-P3,-2.6,shot,true,severe +s2_shot_20,120.9,15.0,-3.0,4245,9.6,179.6,179.4,0.2,186.6,7.2,196.4,185.3,11.1,16.8,5.9,10.9,70.5,72.3,-1.8,D-S4-V1-P2,7.0,regime,true,severe +s3_shot_6i_48,101.7,15.2,-3.0,4631,4.3,139.2,137.1,2.1,143.2,6.1,154.6,143.5,11.1,15.4,6.4,9.0,63.1,48.9,14.2,I-S2-V1-P2,4.0,regime,true,severe +s3_shot_6i_47,99.5,14.8,-2.9,4811,4.7,134.2,131.2,3.0,138.2,7.0,148.5,137.7,10.8,14.3,6.5,7.8,56.8,45.0,11.8,I-S2-V1-P2,4.0,regime,true,severe +s2_shot_10,89.7,25.5,-3.1,6446,6.2,115.1,115.1,0.0,119.1,4.0,127.1,116.4,10.7,12.0,1.3,10.7,66.2,72.0,-5.8,I-S2-V3-P3,4.0,regime,true,severe +s3_shot_5i_13,75.0,8.0,2.5,3921,3.4,53.9,53.9,0.0,56.5,2.6,89.0,78.9,10.1,35.1,25.0,10.1,7.4,6.8,0.6,I-S1-V0-P1,2.6,shot,true,severe +s3_shot_pw_64,69.6,28.6,0.2,5327,5.1,80.1,80.1,0.0,75.7,-4.4,92.0,82.4,9.6,11.9,2.3,9.6,42.7,46.4,-3.7,I-S1-V3-P2,-4.4,shot,true,moderate +s2_shot_12,90.8,24.5,-3.9,7261,4.9,117.1,115.4,1.7,120.6,5.2,125.9,116.4,9.5,8.8,1.0,7.8,66.4,71.5,-5.1,I-S2-V2-P3,3.5,regime,true,moderate +s2_shot_17,122.9,14.4,-1.3,4119,6.7,184.0,184.0,0.0,191.2,7.2,199.5,190.3,9.2,15.5,6.3,9.2,68.2,71.8,-3.6,D-S4-V1-P2,7.2,regime,true,moderate +s3_shot_9i_2,71.3,23.9,5.5,4086,8.3,82.1,82.1,0.0,74.1,-8.0,78.3,87.4,-9.1,-3.8,5.3,-9.1,33.8,36.8,-3.0,I-S1-V2-P2,-8.0,shot,true,moderate +driver2,124.6,13.2,-6.8,3994,-6.1,187.3,184.8,2.5,193.7,8.9,200.9,192.3,8.6,13.6,7.5,6.1,63.1,65.8,-2.7,D-S4-V1-P1,6.4,regime,true,moderate +approach_mid_iron_test_shot,93.9,22.9,-2.6,5375,2.0,125.8,125.8,0.0,125.8,0.0,136.4,128.5,7.9,10.6,2.7,7.9,64.6,69.3,-4.7,I-S2-V2-P2,,,false,moderate +s3_shot_6i_40,62.1,6.8,27.0,2768,30.0,25.0,26.2,-1.2,25.0,-1.2,58.9,51.1,7.8,33.9,24.9,9.0,2.6,2.5,0.1,I-S1-V0-P1,,,false,moderate +s3_shot_5i_10,88.0,14.2,1.2,4065,8.4,103.1,103.1,0.0,106.1,3.0,109.6,116.7,-7.1,6.5,13.6,-7.1,34.3,28.4,5.9,I-S2-V1-P2,3.0,shot,true,moderate +s3_shot_6i_49,71.2,7.7,16.1,2625,30.0,39.9,39.9,0.0,37.4,-2.5,77.3,70.3,7.0,37.4,30.4,7.0,4.2,4.5,-0.3,I-S1-V0-P1,-2.5,shot,true,moderate +s3_shot_6i_39,61.0,6.1,10.3,3285,22.0,23.5,24.0,-0.5,23.5,-0.5,53.7,47.3,6.4,30.2,23.3,6.9,2.1,2.1,0.0,I-S1-V0-P1,,,false,moderate +s3_shot_pw_68,88.5,23.4,-0.1,6637,6.0,112.7,112.7,-0.0,116.1,3.4,120.2,114.1,6.1,7.5,1.4,6.1,57.2,63.4,-6.2,I-S2-V2-P3,3.4,shot,true,moderate +s3_shot_7i_29,107.6,13.8,-6.0,3633,4.7,149.4,148.4,1.0,149.4,1.0,152.5,158.3,-5.8,3.1,9.9,-6.8,42.8,46.3,-3.5,I-S3-V1-P1,,,false,moderate +s3_shot_pw_67,81.7,28.1,6.3,6510,12.7,100.0,100.0,0.0,100.0,0.0,106.8,101.1,5.7,6.8,1.1,5.7,61.0,65.0,-4.0,I-S1-V3-P3,,,false,moderate +wood1,124.2,6.7,-8.1,4528,4.8,171.2,165.5,5.7,178.2,12.7,178.7,181.9,-3.2,7.5,16.4,-8.9,36.0,32.8,3.2,D-S4-V0-P2,7.0,regime,true,moderate +s3_shot_9i_5,84.0,19.4,3.8,5352,11.5,102.7,102.7,-0.0,100.1,-2.6,101.7,107.2,-5.5,-1.0,4.5,-5.5,36.3,41.8,-5.5,I-S1-V2-P2,-2.6,shot,true,moderate +wood2,118.8,14.5,-3.3,3026,11.2,180.4,175.6,4.8,180.4,4.8,186.8,186.1,0.7,6.4,10.5,-4.1,57.7,59.3,-1.6,D-S3-V1-P1,,,false,moderate +s3_shot_pw_65,81.2,28.4,2.9,6959,9.4,98.4,98.5,-0.1,98.4,-0.1,104.1,99.4,4.7,5.7,0.9,4.8,61.8,65.6,-3.8,I-S1-V3-P3,,,false,pass +s2_shot_19,128.6,12.5,-8.4,2514,5.1,191.4,194.5,-3.1,197.8,3.3,204.3,208.7,-4.4,12.9,14.2,-1.3,56.4,57.3,-0.9,D-S4-V1-P1,6.4,regime,true,moderate +s3_shot_7i_27,93.7,17.1,-1.4,4612,2.6,120.1,122.3,-2.2,124.1,1.8,132.6,128.3,4.3,12.5,6.0,6.5,54.0,46.0,8.0,I-S2-V1-P2,4.0,regime,true,pass +s3_shot_7i_30,90.2,17.6,-3.8,4508,-0.2,111.2,115.4,-4.2,115.2,-0.2,123.2,121.7,1.5,12.0,6.3,5.7,48.6,43.1,5.5,I-S2-V1-P2,4.0,regime,true,moderate +s3_shot_9i_8,92.2,21.9,-6.3,5042,0.7,121.3,122.9,-1.6,121.3,-1.6,130.5,126.4,4.1,9.2,3.5,5.7,61.1,62.6,-1.5,I-S2-V2-P2,,,false,pass +s3_shot_pw_69,74.1,23.6,0.2,5880,8.4,86.0,86.0,0.0,83.2,-2.8,84.9,88.8,-3.9,-1.1,2.8,-3.9,37.4,41.2,-3.8,I-S1-V2-P3,-2.8,shot,true,pass +s3_shot_6i_46,116.3,13.7,0.3,3008,10.7,171.1,167.3,3.8,171.1,3.8,175.8,179.3,-3.5,4.7,12.0,-7.3,50.1,51.6,-1.5,D-S3-V1-P1,,,false,moderate +wedge_test_shot,66.4,23.2,-1.4,6449,7.1,70.6,70.6,0.0,65.6,-5.0,79.4,75.8,3.6,8.8,5.2,3.6,28.0,31.2,-3.2,I-S1-V2-P3,-5.0,shot,true,pass +s2_shot_22,123.3,14.0,-6.1,3104,10.0,184.7,185.4,-0.7,191.1,5.7,199.0,195.5,3.5,14.3,10.1,4.2,61.6,63.0,-1.4,D-S4-V1-P1,6.4,regime,true,pass +s2_shot_9,94.4,20.1,2.4,4020,16.3,123.7,126.5,-2.8,123.7,-2.8,136.0,132.5,3.5,12.3,6.0,6.3,62.1,54.8,7.3,I-S2-V2-P2,,,false,pass +wedge_test_shot2,54.7,26.8,1.6,4976,5.7,52.2,52.2,-0.0,46.8,-5.4,60.8,57.7,3.1,8.6,5.5,3.1,22.4,24.4,-2.0,C-S0-V3-P2,-5.4,shot,true,pass +s2_shot_13,95.2,19.6,-1.1,5610,12.2,123.6,125.3,-1.7,127.1,1.8,131.7,128.7,3.0,8.1,3.4,4.7,52.5,58.4,-5.9,I-S2-V2-P3,3.5,regime,true,pass +flop_test_shot,68.0,45.0,0.5,12000,0.8,62.7,61.8,0.9,62.7,0.9,63.1,60.3,2.8,0.4,-1.5,1.9,69.2,76.8,-7.6,W-S1-V4-P4,,,false,pass +s3_shot_7i_28,92.1,16.4,-3.6,4217,-0.4,115.1,117.9,-2.8,119.1,1.2,126.8,125.6,1.2,11.7,7.7,4.0,48.9,40.6,8.3,I-S2-V1-P2,4.0,regime,true,pass +s2_shot_24,121.5,14.5,-11.2,3173,-6.8,182.3,183.0,-0.7,188.7,5.7,195.5,192.8,2.7,13.2,9.8,3.4,63.0,64.6,-1.6,D-S4-V1-P1,6.4,regime,true,pass +wedge_shot_2,51.8,37.0,2.4,5652,9.1,49.1,49.1,0.0,43.0,-6.1,52.8,50.1,2.7,3.7,1.0,2.7,31.1,35.3,-4.2,C-S0-V4-P3,-6.1,shot,true,pass +s3_shot_7i_34,104.2,14.7,-4.6,4081,1.9,142.9,142.5,0.4,146.9,4.4,153.2,150.6,2.6,10.3,8.1,2.2,51.3,48.2,3.1,I-S2-V1-P2,4.0,regime,true,pass +s3_shot_6i_43,94.1,13.9,-4.7,4616,1.7,119.7,117.3,2.4,123.7,6.4,129.5,128.6,0.9,9.8,11.3,-1.5,43.1,35.0,8.1,I-S2-V1-P2,4.0,regime,true,pass +p_wedge_shot_1,82.3,26.5,-3.1,4946,6.7,104.5,104.5,0.0,100.2,-4.3,109.5,107.3,2.2,5.0,2.8,2.2,55.1,60.5,-5.4,I-S1-V3-P2,-4.3,shot,true,pass +s2_shot_16,94.1,19.1,-5.9,5291,5.0,124.7,124.3,0.4,124.7,0.4,130.3,128.1,2.2,5.6,3.8,1.8,52.1,55.3,-3.2,I-S2-V2-P2,,,false,pass +s3_shot_7i_32,93.1,17.0,-1.0,3762,4.2,119.4,121.2,-1.8,119.4,-1.8,127.6,129.8,-2.2,8.2,8.6,-0.4,45.6,42.5,3.1,I-S2-V1-P1,,,false,pass +s2_shot_11,78.5,29.6,4.3,7350,10.7,93.0,93.0,0.0,91.3,-1.7,95.6,93.6,2.0,2.6,0.6,2.0,59.6,64.0,-4.4,I-S1-V3-P3,-1.7,shot,true,pass +s3_shot_5i_17,56.5,10.0,24.1,5178,29.1,30.6,30.6,0.0,28.6,-2.0,45.0,46.9,-1.9,14.4,16.3,-1.9,4.2,4.5,-0.3,C-S0-V1-P2,-2.0,shot,true,pass +s3_shot_9i_9,90.1,22.1,-3.1,5351,1.2,116.9,118.1,-1.2,116.9,-1.2,123.0,121.1,1.9,6.1,3.0,3.1,54.0,60.1,-6.1,I-S2-V2-P2,,,false,pass +s2_shot_14,87.1,22.4,-2.0,5660,11.4,111.1,110.9,0.2,111.1,0.2,115.3,113.7,1.6,4.2,2.8,1.4,50.0,55.9,-5.9,I-S2-V2-P3,,,false,pass +s3_shot_7i_33,92.4,17.0,-0.6,3852,2.8,118.1,119.7,-1.6,118.1,-1.6,126.7,128.0,-1.3,8.6,8.3,0.3,46.7,42.0,4.7,I-S2-V1-P1,,,false,pass +s3_shot_9i_7,83.0,22.5,5.3,7008,9.7,102.2,101.1,1.1,102.2,1.1,104.2,102.6,1.6,2.0,1.5,0.5,47.3,51.5,-4.2,I-S1-V2-P3,,,false,pass +s3_shot_9i_3,90.1,21.7,2.8,5243,11.2,115.9,117.3,-1.4,115.9,-1.4,121.8,120.7,1.1,5.9,3.4,2.5,52.4,57.7,-5.3,I-S2-V2-P2,,,false,pass +checked_test_shot,75.0,38.5,1.4,10701,5.7,77.0,77.6,-0.6,77.0,-0.6,78.6,77.5,1.1,1.6,-0.1,1.7,70.8,79.5,-8.7,W-S1-V4-P4,,,false,pass +drive_test_shot,150.0,12.5,1.5,2335,-9.9,245.0,244.0,1.0,245.0,1.0,256.8,256.0,0.8,11.8,12.0,-0.2,80.0,80.6,-0.6,D-S4-V1-P0,,,false,pass +s3_shot_driver_54,121.5,12.9,-5.3,3411,-10.0,177.2,178.2,-1.0,183.6,5.4,188.7,188.7,0.0,11.5,10.5,1.0,54.3,56.5,-2.2,D-S4-V1-P1,6.4,regime,true,pass +wedge_shot_1,48.7,29.0,-1.3,5684,11.1,42.6,42.6,0.0,37.5,-5.1,46.2,46.9,-0.7,3.6,4.3,-0.7,18.9,21.3,-2.4,C-S0-V3-P3,-5.1,shot,true,pass diff --git a/assets/data/shot_session_2/diagnostic_report.txt b/assets/data/shot_session_2/diagnostic_report.txt new file mode 100644 index 0000000..cf4a595 --- /dev/null +++ b/assets/data/shot_session_2/diagnostic_report.txt @@ -0,0 +1,144 @@ +====================================================================== +CALIBRATION DIAGNOSTIC REPORT +====================================================================== + + Pass: 5 + Moderate: 4 + Severe: 9 + No reference: 9 + +---------------------------------------------------------------------- +SEVERE SHOTS (|total_diff| > 10 yd or |carry_diff| > 7 yd) +---------------------------------------------------------------------- + + shot_10: + Status: SEVERE + Pattern: CARRY_AND_ROLLOUT_LONG — Both carry and rollout overshoot + Regimes: high-spin-wedge + Diffs: carry=+4.0, total=+10.7, rollout=+6.7, apex=-5.8ft + + shot_15: + Status: SEVERE + Pattern: ROLLOUT_TOO_SHORT — Carry close, total undershoots — rollout is too short + Regimes: none + Diffs: carry=-0.6, total=-12.3, rollout=-11.7, apex=-1.9ft + Suggested knobs: + -> Bounce.FlightTangentialRetentionBase: increase by 0.03 (range 0.4-0.75) + -> Bounce.FlightSpinFactorMin: increase by 0.03 (range 0.25-0.55) + -> Bounce.FlightSpinFactorDivisor: increase by 500.0 (range 4000.0-12000.0) + -> Bounce.CorBaseA: increase by 0.02 (range 0.3-0.6) + -> Rollout.LowSpinMultiplierMax: decrease by 0.05 (range 0.8-1.5) + + shot_17: + Status: SEVERE + Pattern: CARRY_AND_ROLLOUT_LONG — Both carry and rollout overshoot + Regimes: driver-wood + Diffs: carry=+7.2, total=+9.2, rollout=+2.0, apex=-3.6ft + + shot_18: + Status: SEVERE + Pattern: CARRY_AND_ROLLOUT_LONG — Both carry and rollout overshoot + Regimes: high-spin-wedge, mid-iron + Diffs: carry=+5.1, total=+16.6, rollout=+11.5, apex=+3.1ft + + shot_20: + Status: SEVERE + Pattern: CARRY_AND_ROLLOUT_LONG — Both carry and rollout overshoot + Regimes: driver-wood + Diffs: carry=+7.2, total=+11.1, rollout=+3.9, apex=-1.8ft + + shot_21: + Status: SEVERE + Pattern: CARRY_AND_ROLLOUT_LONG — Both carry and rollout overshoot + Regimes: low-launch, driver-wood + Diffs: carry=+5.8, total=+28.8, rollout=+23.0, apex=+1.8ft + + shot_23: + Status: SEVERE + Pattern: CARRY_TOO_LONG — Physics carry exceeds reference + Regimes: low-launch, driver-wood + Diffs: carry=+4.2, total=-18.9, rollout=-23.1, apex=+0.1ft + Suggested knobs: + -> Flight.ClMaxBase: decrease by 0.005 (range 0.22-0.32) + -> Flight.CdMin: increase by 0.005 (range 0.18-0.28) + -> DragScaleMultiplier: increase by 0.02 (range 0.85-1.15) + -> LiftScaleMultiplier: decrease by 0.02 (range 0.85-1.15) + + shot_26: + Status: SEVERE + Pattern: ROLLOUT_TOO_LONG — Carry close, total overshoots — rollout is too long + Regimes: high-spin-wedge + Diffs: carry=+2.6, total=+23.1, rollout=+20.5, apex=+24.2ft + Suggested knobs: + -> Bounce.FlightSpinFactorMin: decrease by 0.03 (range 0.25-0.55) + -> Bounce.FlightSpinFactorDivisor: decrease by 500.0 (range 4000.0-12000.0) + -> Rollout.HighSpinMultiplierMax: increase by 0.1 (range 1.5-3.5) + -> Bounce.RolloutHighSpinRetention: decrease by 0.03 (range 0.55-0.85) + + shot_27: + Status: SEVERE + Pattern: CARRY_AND_ROLLOUT_LONG — Both carry and rollout overshoot + Regimes: driver-wood + Diffs: carry=+3.6, total=+13.8, rollout=+10.2, apex=+5.0ft +---------------------------------------------------------------------- +MODERATE SHOTS (5-10 yd total or 3-7 yd carry) +---------------------------------------------------------------------- + + shot_12: + Status: MODERATE + Pattern: CARRY_AND_ROLLOUT_LONG — Both carry and rollout overshoot + Regimes: high-spin-wedge, mid-iron + Diffs: carry=+5.2, total=+9.5, rollout=+4.3, apex=-5.1ft + + shot_19: + Status: MODERATE + Pattern: CARRY_TOO_LONG — Physics carry exceeds reference + Regimes: driver-wood + Diffs: carry=+3.3, total=-4.4, rollout=-7.7, apex=-0.9ft + Suggested knobs: + -> Flight.ClMaxBase: decrease by 0.005 (range 0.22-0.32) + -> Flight.CdMin: increase by 0.005 (range 0.18-0.28) + -> DragScaleMultiplier: increase by 0.02 (range 0.85-1.15) + -> LiftScaleMultiplier: decrease by 0.02 (range 0.85-1.15) + + shot_22: + Status: MODERATE + Pattern: CARRY_TOO_LONG — Physics carry exceeds reference + Regimes: driver-wood + Diffs: carry=+5.7, total=+3.5, rollout=-2.2, apex=-1.4ft + Suggested knobs: + -> Flight.ClMaxBase: decrease by 0.005 (range 0.22-0.32) + -> Flight.CdMin: increase by 0.005 (range 0.18-0.28) + -> DragScaleMultiplier: increase by 0.02 (range 0.85-1.15) + -> LiftScaleMultiplier: decrease by 0.02 (range 0.85-1.15) + + shot_24: + Status: MODERATE + Pattern: CARRY_TOO_LONG — Physics carry exceeds reference + Regimes: driver-wood + Diffs: carry=+5.7, total=+2.7, rollout=-3.0, apex=-1.6ft + Suggested knobs: + -> Flight.ClMaxBase: decrease by 0.005 (range 0.22-0.32) + -> Flight.CdMin: increase by 0.005 (range 0.18-0.28) + -> DragScaleMultiplier: increase by 0.02 (range 0.85-1.15) + -> LiftScaleMultiplier: decrease by 0.02 (range 0.85-1.15) + +====================================================================== +PARAMETER CONFLICTS +====================================================================== + + Bounce.FlightSpinFactorMin: + - shot_15: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_26: needs decrease (pattern: ROLLOUT_TOO_LONG) + + Bounce.FlightSpinFactorDivisor: + - shot_15: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_26: needs decrease (pattern: ROLLOUT_TOO_LONG) + + Rollout.HighSpinMultiplierMax: + - shot_15: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_26: needs increase (pattern: ROLLOUT_TOO_LONG) + + Bounce.RolloutHighSpinRetention: + - shot_15: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_26: needs decrease (pattern: ROLLOUT_TOO_LONG) diff --git a/assets/data/shot_session_2/history/iteration_014.json b/assets/data/shot_session_2/history/iteration_014.json new file mode 100644 index 0000000..22aae98 --- /dev/null +++ b/assets/data/shot_session_2/history/iteration_014.json @@ -0,0 +1,232 @@ +{ + "iteration": 14, + "timestamp": "2026-03-13T23:09:50.064794", + "profile_overrides": { + "DragScaleMultiplier": 1.01, + "Flight": { + "CdMin": 0.223, + "HighLaunchDragVlaStartDeg": 24.5, + "HighLaunchDragVlaFullDeg": 31.5, + "HighLaunchDragBoostMax": 1.24, + "SpinDragProgressiveCapSrStart": 0.33, + "SpinDragProgressiveCapSrEnd": 0.5, + "SpinDragProgressiveCapBoostMax": 0.25, + "HighReMidSpinGain": 16.0, + "MidSpinClBoostSrStart": 0.17, + "MidSpinClBoostSrEnd": 0.31, + "MidSpinClBoostMax": 0.5 + } + }, + "summary": { + "pass": 6, + "moderate": 4, + "severe": 8, + "no_reference": 9 + }, + "per_shot": { + "shot_1": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_10": { + "diff_carry_yd": 3.4, + "diff_total_yd": 10.2, + "diff_apex_ft": -6.0, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "shot_11": { + "diff_carry_yd": -2.6, + "diff_total_yd": 1.1, + "diff_apex_ft": -4.6, + "status": "pass", + "error_pattern": null + }, + "shot_12": { + "diff_carry_yd": 4.5, + "diff_total_yd": 9.5, + "diff_apex_ft": -5.3, + "status": "moderate", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "shot_13": { + "diff_carry_yd": 1.2, + "diff_total_yd": 3.2, + "diff_apex_ft": -6.1, + "status": "pass", + "error_pattern": null + }, + "shot_14": { + "diff_carry_yd": -0.3, + "diff_total_yd": 1.7, + "diff_apex_ft": -6.1, + "status": "pass", + "error_pattern": null + }, + "shot_15": { + "diff_carry_yd": -7.3, + "diff_total_yd": -12.7, + "diff_apex_ft": -2.0, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_SHORT" + }, + "shot_16": { + "diff_carry_yd": -0.3, + "diff_total_yd": 2.2, + "diff_apex_ft": -3.5, + "status": "pass", + "error_pattern": null + }, + "shot_17": { + "diff_carry_yd": -1.4, + "diff_total_yd": 8.0, + "diff_apex_ft": -3.9, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_18": { + "diff_carry_yd": -7.2, + "diff_total_yd": 14.0, + "diff_apex_ft": 2.6, + "status": "severe", + "error_pattern": "CARRY_TOO_SHORT" + }, + "shot_19": { + "diff_carry_yd": -4.2, + "diff_total_yd": -6.1, + "diff_apex_ft": -1.2, + "status": "moderate", + "error_pattern": "CARRY_AND_ROLLOUT_SHORT" + }, + "shot_2": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_20": { + "diff_carry_yd": -1.2, + "diff_total_yd": 11.5, + "diff_apex_ft": -2.0, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_21": { + "diff_carry_yd": 4.9, + "diff_total_yd": 27.7, + "diff_apex_ft": 1.7, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "shot_22": { + "diff_carry_yd": -1.8, + "diff_total_yd": 1.6, + "diff_apex_ft": -1.6, + "status": "pass", + "error_pattern": null + }, + "shot_23": { + "diff_carry_yd": 3.5, + "diff_total_yd": -19.6, + "diff_apex_ft": 0.0, + "status": "severe", + "error_pattern": "CARRY_TOO_LONG" + }, + "shot_24": { + "diff_carry_yd": -1.7, + "diff_total_yd": 3.4, + "diff_apex_ft": -1.9, + "status": "pass", + "error_pattern": null + }, + "shot_25": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_26": { + "diff_carry_yd": 1.7, + "diff_total_yd": 20.6, + "diff_apex_ft": 23.5, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_27": { + "diff_carry_yd": -4.4, + "diff_total_yd": 12.8, + "diff_apex_ft": 4.8, + "status": "severe", + "error_pattern": "CARRY_TOO_SHORT" + }, + "shot_3": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_4": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_5": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_6": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_7": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_8": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_9": { + "diff_carry_yd": -3.3, + "diff_total_yd": 1.6, + "diff_apex_ft": 7.1, + "status": "moderate", + "error_pattern": "CARRY_TOO_SHORT" + } + }, + "regressions": [ + { + "shot": "shot_9", + "was": "pass", + "now": "moderate", + "prev_total_diff": 3.5, + "curr_total_diff": 1.6 + } + ], + "conflicts": [ + "Flight.ClMaxBase", + "Flight.CdMin", + "DragScaleMultiplier", + "LiftScaleMultiplier" + ] +} diff --git a/assets/data/shot_session_2/history/iteration_015.json b/assets/data/shot_session_2/history/iteration_015.json new file mode 100644 index 0000000..6c7d71e --- /dev/null +++ b/assets/data/shot_session_2/history/iteration_015.json @@ -0,0 +1,227 @@ +{ + "iteration": 15, + "timestamp": "2026-03-13T23:32:37.925763", + "profile_overrides": { + "DragScaleMultiplier": 1.01, + "Flight": { + "CdMin": 0.223, + "HighLaunchDragVlaStartDeg": 24.5, + "HighLaunchDragVlaFullDeg": 31.5, + "HighLaunchDragBoostMax": 1.24, + "SpinDragProgressiveCapSrStart": 0.33, + "SpinDragProgressiveCapSrEnd": 0.5, + "SpinDragProgressiveCapBoostMax": 0.25, + "HighReMidSpinGain": 16.0, + "MidSpinClBoostSrStart": 0.17, + "MidSpinClBoostSrEnd": 0.31, + "MidSpinClBoostMax": 0.5 + } + }, + "summary": { + "pass": 5, + "moderate": 5, + "severe": 8, + "no_reference": 9 + }, + "per_shot": { + "shot_1": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_10": { + "diff_carry_yd": -0.6, + "diff_total_yd": 10.2, + "diff_apex_ft": -6.0, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_11": { + "diff_carry_yd": -2.6, + "diff_total_yd": 1.1, + "diff_apex_ft": -4.6, + "status": "pass", + "error_pattern": null + }, + "shot_12": { + "diff_carry_yd": 1.0, + "diff_total_yd": 9.5, + "diff_apex_ft": -5.3, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_13": { + "diff_carry_yd": -2.3, + "diff_total_yd": 3.2, + "diff_apex_ft": -6.1, + "status": "pass", + "error_pattern": null + }, + "shot_14": { + "diff_carry_yd": -3.8, + "diff_total_yd": 1.7, + "diff_apex_ft": -6.1, + "status": "moderate", + "error_pattern": "CARRY_TOO_SHORT" + }, + "shot_15": { + "diff_carry_yd": -7.3, + "diff_total_yd": -12.7, + "diff_apex_ft": -2.0, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_SHORT" + }, + "shot_16": { + "diff_carry_yd": -0.3, + "diff_total_yd": 2.2, + "diff_apex_ft": -3.5, + "status": "pass", + "error_pattern": null + }, + "shot_17": { + "diff_carry_yd": -1.4, + "diff_total_yd": 8.0, + "diff_apex_ft": -3.9, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_18": { + "diff_carry_yd": 0.3, + "diff_total_yd": 14.0, + "diff_apex_ft": 2.6, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_19": { + "diff_carry_yd": -4.2, + "diff_total_yd": -6.1, + "diff_apex_ft": -1.2, + "status": "moderate", + "error_pattern": "CARRY_AND_ROLLOUT_SHORT" + }, + "shot_2": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_20": { + "diff_carry_yd": -1.0, + "diff_total_yd": 11.5, + "diff_apex_ft": -2.0, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_21": { + "diff_carry_yd": 4.9, + "diff_total_yd": 27.7, + "diff_apex_ft": 1.7, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "shot_22": { + "diff_carry_yd": -1.8, + "diff_total_yd": 1.6, + "diff_apex_ft": -1.6, + "status": "pass", + "error_pattern": null + }, + "shot_23": { + "diff_carry_yd": -3.5, + "diff_total_yd": -19.6, + "diff_apex_ft": 0.0, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_SHORT" + }, + "shot_24": { + "diff_carry_yd": -1.7, + "diff_total_yd": 3.4, + "diff_apex_ft": -1.9, + "status": "pass", + "error_pattern": null + }, + "shot_25": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_26": { + "diff_carry_yd": 1.7, + "diff_total_yd": 20.6, + "diff_apex_ft": 23.5, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_27": { + "diff_carry_yd": -4.4, + "diff_total_yd": 12.8, + "diff_apex_ft": 4.8, + "status": "severe", + "error_pattern": "CARRY_TOO_SHORT" + }, + "shot_3": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_4": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_5": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_6": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_7": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_8": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_9": { + "diff_carry_yd": -3.3, + "diff_total_yd": 1.6, + "diff_apex_ft": 7.1, + "status": "moderate", + "error_pattern": "CARRY_TOO_SHORT" + } + }, + "regressions": [ + { + "shot": "shot_14", + "was": "pass", + "now": "moderate", + "prev_total_diff": 1.7, + "curr_total_diff": 1.7 + } + ], + "conflicts": [] +} diff --git a/assets/data/shot_session_2/physics.csv b/assets/data/shot_session_2/physics.csv index 12aba35..a70701a 100644 --- a/assets/data/shot_session_2/physics.csv +++ b/assets/data/shot_session_2/physics.csv @@ -1,28 +1,28 @@ shot_name,filename,speed_mph,vla_deg,hla_deg,total_spin_rpm,spin_axis_deg,backspin_rpm,sidespin_rpm,carry_yd,total_yd,rollout_yd,apex_ft,hang_time_s,landing_speed_mps,landing_angle_deg,initial_re,initial_spin_ratio,initial_cd,initial_cl,peak_cl,carry_only_yd -shot_1,shot_1.json,18.82,35.31,-3.37,3729.2,-0.00,3729.2,-0.0,7.1,11.2,4.1,3.9,0.98,7.94,36.39,23028.8,0.990462,0.551760,0.000000,0.000000,7.1 -shot_10,shot_10.json,89.70,25.51,-3.13,6446.1,6.16,6408.9,691.6,119.1,127.1,8.0,66.2,4.75,22.19,47.57,109779.2,0.359143,0.236864,0.228748,0.288595,119.1 -shot_11,shot_11.json,78.51,29.59,4.31,7349.8,10.69,7222.3,1363.2,91.3,95.6,4.3,59.6,4.32,20.40,48.70,96081.2,0.467873,0.285922,0.274776,0.306881,91.3 -shot_12,shot_12.json,90.80,24.49,-3.88,7260.6,4.91,7233.9,621.5,120.6,125.9,5.2,66.4,4.83,21.91,46.82,111117.8,0.399648,0.249116,0.243274,0.311297,120.6 -shot_13,shot_13.json,95.22,19.62,-1.09,5609.6,12.20,5482.8,1185.8,127.1,131.7,4.6,52.5,4.35,23.25,39.40,116536.1,0.294416,0.226563,0.235762,0.270463,127.1 -shot_14,shot_14.json,87.13,22.37,-2.00,5660.3,11.37,5549.3,1115.6,111.1,115.3,4.2,50.0,4.15,22.18,40.65,106633.6,0.324668,0.237516,0.224737,0.268176,111.1 -shot_15,shot_15.json,88.14,14.21,-0.32,4985.2,19.37,4703.0,1653.5,100.7,100.8,0.1,27.0,3.24,23.79,25.51,107862.6,0.282684,0.235665,0.258753,0.281165,100.7 -shot_16,shot_16.json,94.07,19.14,-5.93,5291.1,4.96,5271.3,457.7,124.7,130.3,5.6,52.1,4.32,23.13,40.62,115119.9,0.281118,0.227609,0.262224,0.273136,124.7 -shot_17,shot_17.json,122.92,14.40,-1.33,4119.1,6.69,4091.0,480.2,191.2,199.5,8.4,68.2,5.28,27.12,36.19,150434.8,0.167473,0.216547,0.195165,0.199550,191.2 -shot_18,shot_18.json,105.67,20.50,-1.72,5666.8,8.18,5609.2,806.3,151.9,166.0,14.2,83.5,5.37,24.34,51.47,129323.3,0.268011,0.223441,0.290900,0.290900,151.9 -shot_19,shot_19.json,128.59,12.54,-8.40,2513.7,5.13,2503.6,224.6,197.8,204.3,6.5,56.4,4.88,29.73,28.77,157373.2,0.097695,0.206058,0.163440,0.165204,197.8 -shot_2,shot_2.json,18.59,33.32,-2.15,3688.3,-0.00,3688.3,-0.0,6.7,10.9,4.2,3.4,0.92,7.86,34.32,22755.1,0.991373,0.551760,0.000000,0.000000,6.7 -shot_20,shot_20.json,120.88,15.02,-2.96,4245.1,9.62,4185.4,709.5,186.6,196.4,9.8,70.5,5.30,26.73,38.53,147934.6,0.175515,0.217146,0.199410,0.212815,186.6 -shot_21,shot_21.json,127.35,7.24,-11.46,2320.9,-19.47,2188.2,-773.4,160.7,215.3,54.6,24.9,3.53,33.40,16.13,155855.5,0.091079,0.204241,0.169690,0.170459,160.7 -shot_22,shot_22.json,123.29,14.01,-6.11,3104.1,9.97,3057.3,537.3,191.1,199.0,7.9,61.6,5.03,28.32,31.83,150883.1,0.125832,0.207300,0.179061,0.180859,191.1 -shot_23,shot_23.json,125.52,8.64,-14.33,3062.5,-23.87,2800.5,-1239.4,166.1,166.1,-0.0,31.1,3.83,31.68,19.20,153607.5,0.121944,0.208148,0.180025,0.180941,166.1 -shot_24,shot_24.json,121.48,14.53,-11.23,3172.9,-6.80,3150.6,-375.5,188.7,195.5,6.8,63.0,5.06,27.97,32.75,148670.3,0.130533,0.206931,0.181227,0.183037,188.7 -shot_25,shot_25.json,127.22,4.99,-12.57,2671.0,-16.25,2564.3,-747.4,149.1,204.0,54.8,17.0,3.18,34.48,12.28,155698.6,0.104925,0.206299,0.181392,0.181971,149.1 -shot_26,shot_26.json,116.97,18.42,-2.02,5035.4,9.70,4963.4,848.2,173.3,197.3,24.0,112.3,6.17,25.92,58.01,143143.6,0.215155,0.226139,0.284498,0.319321,173.3 -shot_27,shot_27.json,112.96,17.59,-2.26,4291.5,12.21,4194.4,907.8,168.1,183.4,15.2,78.6,5.31,25.81,46.45,138244.2,0.189868,0.215786,0.222482,0.261454,168.1 -shot_3,shot_3.json,30.72,32.94,-2.80,4070.1,-0.00,4070.1,-0.0,17.0,25.5,8.6,8.8,1.48,11.96,35.95,37591.2,0.662227,0.600311,0.091740,0.091740,17.0 -shot_4,shot_4.json,41.63,35.25,-0.96,5228.9,5.22,5207.3,475.4,29.4,38.0,8.7,18.1,2.14,14.58,42.15,50942.2,0.627805,0.656823,0.286567,0.286567,29.4 -shot_5,shot_5.json,34.04,35.10,-1.20,4487.3,-0.00,4487.3,-0.0,20.9,29.5,8.7,12.0,1.73,12.86,39.23,41663.5,0.658746,0.636390,0.177386,0.177386,20.9 -shot_6,shot_6.json,34.78,36.39,-0.62,4515.3,0.93,4514.7,73.1,21.9,30.0,8.1,13.2,1.82,13.06,40.90,42558.8,0.648916,0.641092,0.196137,0.196137,21.9 -shot_7,shot_7.json,41.38,18.02,-7.65,3110.5,-0.00,3110.5,-0.0,21.8,39.9,18.0,5.8,1.27,15.41,21.29,50646.4,0.375640,0.539704,0.241716,0.256966,21.8 -shot_8,shot_8.json,43.09,12.55,7.93,2821.4,18.87,2669.8,912.3,16.6,37.9,21.3,3.0,0.88,16.61,14.18,52729.6,0.327265,0.522545,0.124722,0.124722,16.6 -shot_9,shot_9.json,94.41,20.07,2.40,4020.4,16.33,3858.1,1130.8,123.7,136.0,12.3,62.1,4.47,23.57,46.46,115543.8,0.212823,0.223713,0.279055,0.314843,123.7 +shot_1,shot_1.json,18.82,35.31,-3.37,3729.2,-0.00,3729.2,-0.0,7.0,11.1,4.1,3.8,0.98,7.93,36.47,23028.8,0.990462,0.575854,0.000000,0.000000,7.1 +shot_10,shot_10.json,89.70,25.51,-3.13,6446.1,6.16,6408.9,691.6,118.5,126.6,8.0,66.0,4.74,22.09,47.71,109779.2,0.359143,0.239233,0.228748,0.289487,119.1 +shot_11,shot_11.json,78.51,29.59,4.31,7349.8,10.69,7222.3,1363.2,90.4,94.7,4.3,59.4,4.30,20.28,49.11,96081.2,0.467873,0.288782,0.274776,0.305820,90.8 +shot_12,shot_12.json,90.80,24.49,-3.88,7260.6,4.91,7233.9,621.5,119.9,125.9,6.0,66.2,4.82,21.79,46.88,111117.8,0.399648,0.251607,0.243274,0.311339,120.6 +shot_13,shot_13.json,95.22,19.62,-1.09,5609.6,12.20,5482.8,1185.8,126.5,131.9,5.3,52.3,4.34,23.16,39.57,116536.1,0.294416,0.228829,0.235762,0.269484,127.1 +shot_14,shot_14.json,87.13,22.37,-2.00,5660.3,11.37,5549.3,1115.6,110.6,115.4,4.8,49.8,4.14,22.08,40.74,106633.6,0.324668,0.239891,0.224737,0.268263,111.1 +shot_15,shot_15.json,88.14,14.21,-0.32,4985.2,19.37,4703.0,1653.5,100.3,100.4,0.1,26.9,3.23,23.71,25.64,107862.6,0.282684,0.238022,0.258753,0.279747,100.7 +shot_16,shot_16.json,94.07,19.14,-5.93,5291.1,4.96,5271.3,457.7,124.0,130.3,6.3,51.8,4.30,23.02,40.64,115119.9,0.281118,0.229885,0.262224,0.274710,124.7 +shot_17,shot_17.json,122.92,14.40,-1.33,4119.1,6.69,4091.0,480.2,189.8,198.3,8.4,67.9,5.25,26.99,36.41,150434.8,0.167473,0.218713,0.195165,0.200074,191.2 +shot_18,shot_18.json,105.67,20.50,-1.72,5666.8,8.18,5609.2,806.3,151.1,163.4,12.3,83.0,5.35,24.22,51.54,129323.3,0.268011,0.225675,0.290900,0.290900,151.9 +shot_19,shot_19.json,128.59,12.54,-8.40,2513.7,5.13,2503.6,224.6,196.7,202.6,5.9,56.1,4.86,29.59,28.83,157373.2,0.097695,0.208119,0.163440,0.165323,197.8 +shot_2,shot_2.json,18.59,33.32,-2.15,3688.3,-0.00,3688.3,-0.0,6.7,10.9,4.1,3.4,0.92,7.85,34.40,22755.1,0.991373,0.575854,0.000000,0.000000,6.7 +shot_20,shot_20.json,120.88,15.02,-2.96,4245.1,9.62,4185.4,709.5,185.4,196.8,11.4,70.3,5.28,26.60,38.86,147934.6,0.175515,0.219317,0.199410,0.214008,186.6 +shot_21,shot_21.json,127.35,7.24,-11.46,2320.9,-19.47,2188.2,-773.4,159.8,214.2,54.4,24.8,3.52,33.30,16.10,155855.5,0.091079,0.206284,0.169690,0.170540,160.7 +shot_22,shot_22.json,123.29,14.01,-6.11,3104.1,9.97,3057.3,537.3,190.0,197.1,7.1,61.4,5.01,28.19,31.91,150883.1,0.125832,0.209373,0.179061,0.180985,191.1 +shot_23,shot_23.json,125.52,8.64,-14.33,3062.5,-23.87,2800.5,-1239.4,165.4,165.4,0.0,31.0,3.83,31.55,19.29,153607.5,0.121944,0.210229,0.180025,0.181025,166.1 +shot_24,shot_24.json,121.48,14.53,-11.23,3172.9,-6.80,3150.6,-375.5,187.7,196.2,8.5,62.7,5.04,27.83,32.84,148670.3,0.130533,0.209001,0.181227,0.183167,188.7 +shot_25,shot_25.json,127.22,4.99,-12.57,2671.0,-16.25,2564.3,-747.4,148.5,203.2,54.6,16.9,3.18,34.37,12.34,155698.6,0.104925,0.208362,0.181392,0.182042,149.1 +shot_26,shot_26.json,116.97,18.42,-2.02,5035.4,9.70,4963.4,848.2,172.4,194.8,22.4,111.6,6.15,25.80,58.18,143143.6,0.215155,0.228401,0.284498,0.319321,173.3 +shot_27,shot_27.json,112.96,17.59,-2.26,4291.5,12.21,4194.4,907.8,167.1,182.4,15.3,78.4,5.29,25.68,46.76,138244.2,0.189868,0.217944,0.222482,0.263952,168.1 +shot_3,shot_3.json,30.72,32.94,-2.80,4070.1,-0.00,4070.1,-0.0,16.9,25.4,8.5,8.7,1.48,11.91,36.15,37591.2,0.662227,0.624945,0.091740,0.091740,16.9 +shot_4,shot_4.json,41.63,35.25,-0.96,5228.9,5.22,5207.3,475.4,29.1,37.6,8.5,18.0,2.13,14.48,42.34,50942.2,0.627805,0.679750,0.286567,0.286567,29.2 +shot_5,shot_5.json,34.04,35.10,-1.20,4487.3,-0.00,4487.3,-0.0,20.8,29.3,8.6,11.9,1.73,12.81,39.49,41663.5,0.658746,0.662177,0.177386,0.177386,20.8 +shot_6,shot_6.json,34.78,36.39,-0.62,4515.3,0.93,4514.7,73.1,21.8,29.8,8.0,13.2,1.82,13.01,41.18,42558.8,0.648916,0.666084,0.196137,0.196137,21.8 +shot_7,shot_7.json,41.38,18.02,-7.65,3110.5,-0.00,3110.5,-0.0,21.8,39.8,18.0,5.8,1.27,15.39,21.33,50646.4,0.375640,0.545101,0.241716,0.257404,21.8 +shot_8,shot_8.json,43.09,12.55,7.93,2821.4,18.87,2669.8,912.3,16.6,37.9,21.3,2.9,0.88,16.59,14.19,52729.6,0.327265,0.527770,0.124722,0.124722,16.6 +shot_9,shot_9.json,94.41,20.07,2.40,4020.4,16.33,3858.1,1130.8,123.2,134.1,10.9,61.9,4.46,23.47,46.60,115543.8,0.212823,0.225950,0.279055,0.315344,123.7 diff --git a/assets/data/shot_session_2/shot_diff_analysis.csv b/assets/data/shot_session_2/shot_diff_analysis.csv index db7ec81..bf0f7e5 100644 --- a/assets/data/shot_session_2/shot_diff_analysis.csv +++ b/assets/data/shot_session_2/shot_diff_analysis.csv @@ -1,28 +1,28 @@ -shot_name,speed_mph,vla_deg,hla_deg,total_spin_rpm,spin_axis_deg,physics_carry_yd,flightscope_carry_yd,diff_carry_yd,physics_total_yd,flightscope_total_yd,diff_total_yd,rollout_physics_yd,rollout_flightscope_yd,diff_rollout_yd,physics_apex_ft,flightscope_apex_ft,diff_apex_ft,status -shot_1,18.8,35.3,-3.4,3729,-0.0,7.1,,,11.2,,,4.1,,,3.9,,, -shot_10,89.7,25.5,-3.1,6446,6.2,119.1,115.1,4.0,127.1,116.4,10.7,8.0,1.3,6.7,66.2,72.0,-5.8,severe -shot_11,78.5,29.6,4.3,7350,10.7,91.3,93.0,-1.7,95.6,93.6,2.0,4.3,0.6,3.7,59.6,64.0,-4.4,pass -shot_12,90.8,24.5,-3.9,7261,4.9,120.6,115.4,5.2,125.9,116.4,9.5,5.3,1.0,4.3,66.4,71.5,-5.1,moderate -shot_13,95.2,19.6,-1.1,5610,12.2,127.1,125.3,1.8,131.7,128.7,3.0,4.6,3.4,1.2,52.5,58.4,-5.9,pass -shot_14,87.1,22.4,-2.0,5660,11.4,111.1,110.9,0.2,115.3,113.7,1.6,4.2,2.8,1.4,50.0,55.9,-5.9,pass -shot_15,88.1,14.2,-0.3,4985,19.4,100.7,101.3,-0.6,100.8,113.1,-12.3,0.1,11.8,-11.7,27.0,28.9,-1.9,severe -shot_16,94.1,19.1,-5.9,5291,5.0,124.7,124.3,0.4,130.3,128.1,2.2,5.6,3.8,1.8,52.1,55.3,-3.2,pass -shot_17,122.9,14.4,-1.3,4119,6.7,191.2,184.0,7.2,199.5,190.3,9.2,8.3,6.3,2.0,68.2,71.8,-3.6,severe -shot_18,105.7,20.5,-1.7,5667,8.2,151.9,146.8,5.1,166.0,149.4,16.6,14.1,2.6,11.5,83.5,80.4,3.1,severe -shot_19,128.6,12.5,-8.4,2514,5.1,197.8,194.5,3.3,204.3,208.7,-4.4,6.5,14.2,-7.7,56.4,57.3,-0.9,moderate -shot_2,18.6,33.3,-2.1,3688,-0.0,6.7,,,10.9,,,4.2,,,3.4,,, -shot_20,120.9,15.0,-3.0,4245,9.6,186.6,179.4,7.2,196.4,185.3,11.1,9.8,5.9,3.9,70.5,72.3,-1.8,severe -shot_21,127.3,7.2,-11.5,2321,-19.5,160.7,154.9,5.8,215.3,186.5,28.8,54.6,31.6,23.0,24.9,23.1,1.8,severe -shot_22,123.3,14.0,-6.1,3104,10.0,191.1,185.4,5.7,199.0,195.5,3.5,7.9,10.1,-2.2,61.6,63.0,-1.4,moderate -shot_23,125.5,8.6,-14.3,3062,-23.9,166.1,161.9,4.2,166.1,185.0,-18.9,0.0,23.1,-23.1,31.1,31.0,0.1,severe -shot_24,121.5,14.5,-11.2,3173,-6.8,188.7,183.0,5.7,195.5,192.8,2.7,6.8,9.8,-3.0,63.0,64.6,-1.6,moderate -shot_25,127.2,5.0,-12.6,2671,-16.2,149.1,,,204.0,,,54.9,,,17.0,,, -shot_26,117.0,18.4,-2.0,5035,9.7,173.3,170.7,2.6,197.3,174.2,23.1,24.0,3.5,20.5,112.3,88.1,24.2,severe -shot_27,113.0,17.6,-2.3,4292,12.2,168.1,164.5,3.6,183.4,169.6,13.8,15.3,5.1,10.2,78.6,73.6,5.0,severe -shot_3,30.7,32.9,-2.8,4070,-0.0,17.0,,,25.5,,,8.5,,,8.8,,, -shot_4,41.6,35.2,-1.0,5229,5.2,29.4,,,38.0,,,8.6,,,18.1,,, -shot_5,34.0,35.1,-1.2,4487,-0.0,20.9,,,29.5,,,8.6,,,12.0,,, -shot_6,34.8,36.4,-0.6,4515,0.9,21.9,,,30.0,,,8.1,,,13.2,,, -shot_7,41.4,18.0,-7.7,3110,-0.0,21.8,,,39.9,,,18.1,,,5.8,,, -shot_8,43.1,12.6,7.9,2821,18.9,16.6,,,37.9,,,21.3,,,3.0,,, -shot_9,94.4,20.1,2.4,4020,16.3,123.7,126.5,-2.8,136.0,132.5,3.5,12.3,6.0,6.3,62.1,54.8,7.3,pass +shot_name,speed_mph,vla_deg,hla_deg,total_spin_rpm,spin_axis_deg,physics_carry_yd,flightscope_carry_yd,diff_carry_yd,physics_carry_raw_yd,diff_carry_raw_yd,physics_total_yd,flightscope_total_yd,diff_total_yd,rollout_physics_yd,rollout_flightscope_yd,diff_rollout_yd,physics_apex_ft,flightscope_apex_ft,diff_apex_ft,carry_exception_regime,carry_exception_offset_yd,carry_exception_source,carry_exception_applied,status +shot_1,18.8,35.3,-3.4,3729,-0.0,7.0,,,7.0,,11.1,,,4.1,,,3.8,,,C-S0-V4-P1,,,false, +shot_10,89.7,25.5,-3.1,6446,6.2,114.5,115.1,-0.6,118.5,3.4,126.6,116.4,10.2,12.1,1.3,10.8,66.0,72.0,-6.0,I-S2-V3-P3,4.0,regime,true,severe +shot_11,78.5,29.6,4.3,7350,10.7,90.4,93.0,-2.6,90.4,-2.6,94.7,93.6,1.1,4.3,0.6,3.7,59.4,64.0,-4.6,I-S1-V3-P3,,,false,pass +shot_12,90.8,24.5,-3.9,7261,4.9,116.4,115.4,1.0,119.9,4.5,125.9,116.4,9.5,9.5,1.0,8.5,66.2,71.5,-5.3,I-S2-V2-P3,3.5,regime,true,moderate +shot_13,95.2,19.6,-1.1,5610,12.2,123.0,125.3,-2.3,126.5,1.2,131.9,128.7,3.2,8.9,3.4,5.5,52.3,58.4,-6.1,I-S2-V2-P3,3.5,regime,true,pass +shot_14,87.1,22.4,-2.0,5660,11.4,107.1,110.9,-3.8,110.6,-0.3,115.4,113.7,1.7,8.3,2.8,5.5,49.8,55.9,-6.1,I-S2-V2-P3,3.5,regime,true,moderate +shot_15,88.1,14.2,-0.3,4985,19.4,94.0,101.3,-7.3,100.3,-1.0,100.4,113.1,-12.7,6.4,11.8,-5.4,26.9,28.9,-2.0,I-S2-V1-P2,6.3,regime,true,severe +shot_16,94.1,19.1,-5.9,5291,5.0,124.0,124.3,-0.3,124.0,-0.3,130.3,128.1,2.2,6.3,3.8,2.5,51.8,55.3,-3.5,I-S2-V2-P2,,,false,pass +shot_17,122.9,14.4,-1.3,4119,6.7,182.6,184.0,-1.4,189.8,5.8,198.3,190.3,8.0,15.7,6.3,9.4,67.9,71.8,-3.9,D-S4-V1-P2,7.2,regime,true,moderate +shot_18,105.7,20.5,-1.7,5667,8.2,147.1,146.8,0.3,151.1,4.3,163.4,149.4,14.0,16.3,2.6,13.7,83.0,80.4,2.6,I-S3-V2-P3,4.0,regime,true,severe +shot_19,128.6,12.5,-8.4,2514,5.1,190.3,194.5,-4.2,196.7,2.2,202.6,208.7,-6.1,12.3,14.2,-1.9,56.1,57.3,-1.2,D-S4-V1-P1,6.4,regime,true,moderate +shot_2,18.6,33.3,-2.1,3688,-0.0,6.7,,,6.7,,10.9,,,4.2,,,3.4,,,C-S0-V4-P1,,,false, +shot_20,120.9,15.0,-3.0,4245,9.6,178.4,179.4,-1.0,185.4,6.0,196.8,185.3,11.5,18.4,5.9,12.5,70.3,72.3,-2.0,D-S4-V1-P2,7.0,regime,true,severe +shot_21,127.3,7.2,-11.5,2321,-19.5,159.8,154.9,4.9,159.8,4.9,214.2,186.5,27.7,54.4,31.6,22.8,24.8,23.1,1.7,D-S4-V0-P0,,,false,severe +shot_22,123.3,14.0,-6.1,3104,10.0,183.6,185.4,-1.8,190.0,4.6,197.1,195.5,1.6,13.5,10.1,3.4,61.4,63.0,-1.6,D-S4-V1-P1,6.4,regime,true,pass +shot_23,125.5,8.6,-14.3,3062,-23.9,158.4,161.9,-3.5,165.4,3.5,165.4,185.0,-19.6,7.0,23.1,-16.1,31.0,31.0,0.0,D-S4-V0-P1,7.0,regime,true,severe +shot_24,121.5,14.5,-11.2,3173,-6.8,181.3,183.0,-1.7,187.7,4.7,196.2,192.8,3.4,14.9,9.8,5.1,62.7,64.6,-1.9,D-S4-V1-P1,6.4,regime,true,pass +shot_25,127.2,5.0,-12.6,2671,-16.2,148.5,,,148.5,,203.2,,,54.7,,,16.9,,,D-S4-V0-P1,,,false, +shot_26,117.0,18.4,-2.0,5035,9.7,172.4,170.7,1.7,172.4,1.7,194.8,174.2,20.6,22.4,3.5,18.9,111.6,88.1,23.5,I-S3-V2-P2,,,false,severe +shot_27,113.0,17.6,-2.3,4292,12.2,160.1,164.5,-4.4,167.1,2.6,182.4,169.6,12.8,22.3,5.1,17.2,78.4,73.6,4.8,D-S3-V1-P2,7.0,regime,true,severe +shot_3,30.7,32.9,-2.8,4070,-0.0,16.9,,,16.9,,25.4,,,8.5,,,8.7,,,C-S0-V3-P2,,,false, +shot_4,41.6,35.2,-1.0,5229,5.2,29.1,,,29.1,,37.6,,,8.5,,,18.0,,,C-S0-V4-P2,,,false, +shot_5,34.0,35.1,-1.2,4487,-0.0,20.8,,,20.8,,29.3,,,8.5,,,11.9,,,C-S0-V4-P2,,,false, +shot_6,34.8,36.4,-0.6,4515,0.9,21.8,,,21.8,,29.8,,,8.0,,,13.2,,,C-S0-V4-P2,,,false, +shot_7,41.4,18.0,-7.7,3110,-0.0,21.8,,,21.8,,39.8,,,18.0,,,5.8,,,C-S0-V2-P1,,,false, +shot_8,43.1,12.6,7.9,2821,18.9,16.6,,,16.6,,37.9,,,21.3,,,2.9,,,C-S0-V1-P1,,,false, +shot_9,94.4,20.1,2.4,4020,16.3,123.2,126.5,-3.3,123.2,-3.3,134.1,132.5,1.6,10.9,6.0,4.9,61.9,54.8,7.1,I-S2-V2-P2,,,false,moderate diff --git a/assets/data/shot_session_2/shot_diff_analysis.csv.import b/assets/data/shot_session_2/shot_diff_analysis.csv.import index 6a1788b..19af823 100644 --- a/assets/data/shot_session_2/shot_diff_analysis.csv.import +++ b/assets/data/shot_session_2/shot_diff_analysis.csv.import @@ -6,10 +6,10 @@ uid="uid://bu5weiscw1ja8" [deps] -files=["res://assets/data/shot_session_2/shot_diff_analysis.speed.translation", "res://assets/data/shot_session_2/shot_diff_analysis.vla.translation", "res://assets/data/shot_session_2/shot_diff_analysis.hla.translation", "res://assets/data/shot_session_2/shot_diff_analysis.total.translation", "res://assets/data/shot_session_2/shot_diff_analysis.spin.translation", "res://assets/data/shot_session_2/shot_diff_analysis.physics.translation", "res://assets/data/shot_session_2/shot_diff_analysis.flightscope.translation", "res://assets/data/shot_session_2/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_2/shot_diff_analysis.physics.translation", "res://assets/data/shot_session_2/shot_diff_analysis.flightscope.translation", "res://assets/data/shot_session_2/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_2/shot_diff_analysis.rollout.translation", "res://assets/data/shot_session_2/shot_diff_analysis.rollout.translation", "res://assets/data/shot_session_2/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_2/shot_diff_analysis.physics.translation", "res://assets/data/shot_session_2/shot_diff_analysis.flightscope.translation", "res://assets/data/shot_session_2/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_2/shot_diff_analysis.status.translation"] +files=["res://assets/data/shot_session_2/shot_diff_analysis.speed.translation", "res://assets/data/shot_session_2/shot_diff_analysis.vla.translation", "res://assets/data/shot_session_2/shot_diff_analysis.hla.translation", "res://assets/data/shot_session_2/shot_diff_analysis.total.translation", "res://assets/data/shot_session_2/shot_diff_analysis.spin.translation", "res://assets/data/shot_session_2/shot_diff_analysis.physics.translation", "res://assets/data/shot_session_2/shot_diff_analysis.flightscope.translation", "res://assets/data/shot_session_2/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_2/shot_diff_analysis.physics.translation", "res://assets/data/shot_session_2/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_2/shot_diff_analysis.physics.translation", "res://assets/data/shot_session_2/shot_diff_analysis.flightscope.translation", "res://assets/data/shot_session_2/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_2/shot_diff_analysis.rollout.translation", "res://assets/data/shot_session_2/shot_diff_analysis.rollout.translation", "res://assets/data/shot_session_2/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_2/shot_diff_analysis.physics.translation", "res://assets/data/shot_session_2/shot_diff_analysis.flightscope.translation", "res://assets/data/shot_session_2/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_2/shot_diff_analysis.carry.translation", "res://assets/data/shot_session_2/shot_diff_analysis.carry.translation", "res://assets/data/shot_session_2/shot_diff_analysis.carry.translation", "res://assets/data/shot_session_2/shot_diff_analysis.carry.translation", "res://assets/data/shot_session_2/shot_diff_analysis.status.translation"] source_file="res://assets/data/shot_session_2/shot_diff_analysis.csv" -dest_files=["res://assets/data/shot_session_2/shot_diff_analysis.speed.translation", "res://assets/data/shot_session_2/shot_diff_analysis.vla.translation", "res://assets/data/shot_session_2/shot_diff_analysis.hla.translation", "res://assets/data/shot_session_2/shot_diff_analysis.total.translation", "res://assets/data/shot_session_2/shot_diff_analysis.spin.translation", "res://assets/data/shot_session_2/shot_diff_analysis.physics.translation", "res://assets/data/shot_session_2/shot_diff_analysis.flightscope.translation", "res://assets/data/shot_session_2/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_2/shot_diff_analysis.physics.translation", "res://assets/data/shot_session_2/shot_diff_analysis.flightscope.translation", "res://assets/data/shot_session_2/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_2/shot_diff_analysis.rollout.translation", "res://assets/data/shot_session_2/shot_diff_analysis.rollout.translation", "res://assets/data/shot_session_2/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_2/shot_diff_analysis.physics.translation", "res://assets/data/shot_session_2/shot_diff_analysis.flightscope.translation", "res://assets/data/shot_session_2/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_2/shot_diff_analysis.status.translation"] +dest_files=["res://assets/data/shot_session_2/shot_diff_analysis.speed.translation", "res://assets/data/shot_session_2/shot_diff_analysis.vla.translation", "res://assets/data/shot_session_2/shot_diff_analysis.hla.translation", "res://assets/data/shot_session_2/shot_diff_analysis.total.translation", "res://assets/data/shot_session_2/shot_diff_analysis.spin.translation", "res://assets/data/shot_session_2/shot_diff_analysis.physics.translation", "res://assets/data/shot_session_2/shot_diff_analysis.flightscope.translation", "res://assets/data/shot_session_2/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_2/shot_diff_analysis.physics.translation", "res://assets/data/shot_session_2/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_2/shot_diff_analysis.physics.translation", "res://assets/data/shot_session_2/shot_diff_analysis.flightscope.translation", "res://assets/data/shot_session_2/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_2/shot_diff_analysis.rollout.translation", "res://assets/data/shot_session_2/shot_diff_analysis.rollout.translation", "res://assets/data/shot_session_2/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_2/shot_diff_analysis.physics.translation", "res://assets/data/shot_session_2/shot_diff_analysis.flightscope.translation", "res://assets/data/shot_session_2/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_2/shot_diff_analysis.carry.translation", "res://assets/data/shot_session_2/shot_diff_analysis.carry.translation", "res://assets/data/shot_session_2/shot_diff_analysis.carry.translation", "res://assets/data/shot_session_2/shot_diff_analysis.carry.translation", "res://assets/data/shot_session_2/shot_diff_analysis.status.translation"] [params] diff --git a/assets/data/shot_session_3/diagnostic_report.txt b/assets/data/shot_session_3/diagnostic_report.txt new file mode 100644 index 0000000..95aa376 --- /dev/null +++ b/assets/data/shot_session_3/diagnostic_report.txt @@ -0,0 +1,751 @@ +====================================================================== +CALIBRATION DIAGNOSTIC REPORT +====================================================================== + + Pass: 12 + Moderate: 13 + Severe: 36 + No reference: 8 + +---------------------------------------------------------------------- +SEVERE SHOTS (|total_diff| > 10 yd or |carry_diff| > 7 yd) +---------------------------------------------------------------------- + + shot_3w_19: + Status: SEVERE + Pattern: ROLLOUT_TOO_LONG — Carry close, total overshoots — rollout is too long + Regimes: low-launch, driver-wood + Diffs: carry=-0.1, total=+16.7, rollout=+16.8, apex=+0.1ft + Suggested knobs: + -> Bounce.FlightTangentialRetentionBase: decrease by 0.03 (range 0.4-0.75) + -> Bounce.CorBaseA: decrease by 0.02 (range 0.3-0.6) + -> Rollout.LowSpinMultiplierMax: increase by 0.05 (range 0.8-1.5) + -> Rollout.LowSpinThreshold: decrease by 100.0 (range 1000.0-2500.0) + -> Rollout.FrictionBlendSpeed: decrease by 1.0 (range 8.0-25.0) + + shot_3w_21: + Status: SEVERE + Pattern: ROLLOUT_TOO_LONG — Carry close, total overshoots — rollout is too long + Regimes: low-launch, driver-wood + Diffs: carry=+1.1, total=+16.6, rollout=+15.5, apex=+0.3ft + Suggested knobs: + -> Bounce.FlightTangentialRetentionBase: decrease by 0.03 (range 0.4-0.75) + -> Bounce.CorBaseA: decrease by 0.02 (range 0.3-0.6) + -> Rollout.LowSpinMultiplierMax: increase by 0.05 (range 0.8-1.5) + -> Rollout.LowSpinThreshold: decrease by 100.0 (range 1000.0-2500.0) + -> Rollout.FrictionBlendSpeed: decrease by 1.0 (range 8.0-25.0) + + shot_3w_22: + Status: SEVERE + Pattern: CARRY_AND_ROLLOUT_LONG — Both carry and rollout overshoot + Regimes: low-launch + Diffs: carry=+3.1, total=+20.2, rollout=+17.1, apex=+0.5ft + + shot_3w_23: + Status: SEVERE + Pattern: ROLLOUT_TOO_SHORT — Carry close, total undershoots — rollout is too short + Regimes: low-launch, driver-wood + Diffs: carry=+0.8, total=-22.7, rollout=-23.5, apex=-1.2ft + Suggested knobs: + -> Bounce.FlightTangentialRetentionBase: increase by 0.03 (range 0.4-0.75) + -> Bounce.CorBaseA: increase by 0.02 (range 0.3-0.6) + -> Rollout.LowSpinMultiplierMax: decrease by 0.05 (range 0.8-1.5) + -> Rollout.LowSpinThreshold: increase by 100.0 (range 1000.0-2500.0) + -> Rollout.FrictionBlendSpeed: increase by 1.0 (range 8.0-25.0) + + shot_3w_24: + Status: SEVERE + Pattern: CARRY_AND_ROLLOUT_LONG — Both carry and rollout overshoot + Regimes: low-launch, driver-wood + Diffs: carry=+7.9, total=+29.6, rollout=+21.7, apex=+1.9ft + + shot_5i_11: + Status: SEVERE + Pattern: CARRY_AND_ROLLOUT_SHORT — Both carry and rollout undershoot + Regimes: none + Diffs: carry=-3.2, total=-17.2, rollout=-14.0, apex=-1.3ft + + shot_5i_12: + Status: SEVERE + Pattern: ROLLOUT_TOO_SHORT — Carry close, total undershoots — rollout is too short + Regimes: none + Diffs: carry=+1.2, total=-23.5, rollout=-24.7, apex=+1.1ft + Suggested knobs: + -> Bounce.FlightTangentialRetentionBase: increase by 0.03 (range 0.4-0.75) + -> Bounce.FlightSpinFactorMin: increase by 0.03 (range 0.25-0.55) + -> Bounce.FlightSpinFactorDivisor: increase by 500.0 (range 4000.0-12000.0) + -> Bounce.CorBaseA: increase by 0.02 (range 0.3-0.6) + -> Rollout.LowSpinMultiplierMax: decrease by 0.05 (range 0.8-1.5) + + shot_5i_13: + Status: SEVERE + Pattern: ROLLOUT_TOO_LONG — Carry close, total overshoots — rollout is too long + Regimes: low-launch + Diffs: carry=+2.6, total=+10.1, rollout=+7.5, apex=+0.6ft + Suggested knobs: + -> Bounce.FlightTangentialRetentionBase: decrease by 0.03 (range 0.4-0.75) + -> Bounce.CorBaseA: decrease by 0.02 (range 0.3-0.6) + -> Rollout.LowSpinMultiplierMax: increase by 0.05 (range 0.8-1.5) + -> Rollout.LowSpinThreshold: decrease by 100.0 (range 1000.0-2500.0) + -> Rollout.FrictionBlendSpeed: decrease by 1.0 (range 8.0-25.0) + + shot_5i_15: + Status: SEVERE + Pattern: CARRY_TOO_SHORT — Physics carry under reference + Regimes: low-launch + Diffs: carry=-4.5, total=+14.7, rollout=+19.2, apex=-1.1ft + + shot_5i_16: + Status: SEVERE + Pattern: ROLLOUT_TOO_SHORT — Carry close, total undershoots — rollout is too short + Regimes: low-launch + Diffs: carry=+1.1, total=-20.8, rollout=-21.9, apex=-0.2ft + Suggested knobs: + -> Bounce.FlightTangentialRetentionBase: increase by 0.03 (range 0.4-0.75) + -> Bounce.CorBaseA: increase by 0.02 (range 0.3-0.6) + -> Rollout.LowSpinMultiplierMax: decrease by 0.05 (range 0.8-1.5) + -> Rollout.LowSpinThreshold: increase by 100.0 (range 1000.0-2500.0) + -> Rollout.FrictionBlendSpeed: increase by 1.0 (range 8.0-25.0) + + shot_6i_35: + Status: SEVERE + Pattern: CARRY_AND_ROLLOUT_SHORT — Both carry and rollout undershoot + Regimes: none + Diffs: carry=-5.1, total=-16.6, rollout=-11.5, apex=-3.3ft + + shot_6i_36: + Status: SEVERE + Pattern: ROLLOUT_TOO_SHORT — Carry close, total undershoots — rollout is too short + Regimes: none + Diffs: carry=+2.1, total=-20.8, rollout=-22.9, apex=+0.6ft + Suggested knobs: + -> Bounce.FlightTangentialRetentionBase: increase by 0.03 (range 0.4-0.75) + -> Bounce.FlightSpinFactorMin: increase by 0.03 (range 0.25-0.55) + -> Bounce.FlightSpinFactorDivisor: increase by 500.0 (range 4000.0-12000.0) + -> Bounce.CorBaseA: increase by 0.02 (range 0.3-0.6) + -> Rollout.LowSpinMultiplierMax: decrease by 0.05 (range 0.8-1.5) + + shot_6i_37: + Status: SEVERE + Pattern: CARRY_TOO_SHORT — Physics carry under reference + Regimes: none + Diffs: carry=-3.6, total=+12.2, rollout=+15.8, apex=-0.8ft + Suggested knobs: + -> Flight.ClMaxBase: increase by 0.005 (range 0.22-0.32) + -> Flight.CdMin: decrease by 0.005 (range 0.18-0.28) + -> Flight.HighLaunchDragBoostMax: decrease by 0.02 (range 1.0-1.3) + -> DragScaleMultiplier: decrease by 0.02 (range 0.85-1.15) + -> LiftScaleMultiplier: increase by 0.02 (range 0.85-1.15) + + shot_6i_38: + Status: SEVERE + Pattern: CARRY_AND_ROLLOUT_SHORT — Both carry and rollout undershoot + Regimes: none + Diffs: carry=-3.2, total=-21.3, rollout=-18.1, apex=+0.1ft + + shot_6i_41: + Status: SEVERE + Pattern: CARRY_TOO_SHORT — Physics carry under reference + Regimes: low-launch + Diffs: carry=-4.6, total=+13.2, rollout=+17.8, apex=-1.0ft + + shot_6i_42: + Status: SEVERE + Pattern: ROLLOUT_TOO_SHORT — Carry close, total undershoots — rollout is too short + Regimes: none + Diffs: carry=-1.1, total=-17.4, rollout=-16.3, apex=+0.8ft + Suggested knobs: + -> Bounce.FlightTangentialRetentionBase: increase by 0.03 (range 0.4-0.75) + -> Bounce.FlightSpinFactorMin: increase by 0.03 (range 0.25-0.55) + -> Bounce.FlightSpinFactorDivisor: increase by 500.0 (range 4000.0-12000.0) + -> Bounce.CorBaseA: increase by 0.02 (range 0.3-0.6) + -> Rollout.LowSpinMultiplierMax: decrease by 0.05 (range 0.8-1.5) + + shot_6i_44: + Status: SEVERE + Pattern: ROLLOUT_TOO_SHORT — Carry close, total undershoots — rollout is too short + Regimes: low-launch, driver-wood + Diffs: carry=-1.2, total=-27.4, rollout=-26.2, apex=-1.3ft + Suggested knobs: + -> Bounce.FlightTangentialRetentionBase: increase by 0.03 (range 0.4-0.75) + -> Bounce.CorBaseA: increase by 0.02 (range 0.3-0.6) + -> Rollout.LowSpinMultiplierMax: decrease by 0.05 (range 0.8-1.5) + -> Rollout.LowSpinThreshold: increase by 100.0 (range 1000.0-2500.0) + -> Rollout.FrictionBlendSpeed: increase by 1.0 (range 8.0-25.0) + + shot_6i_45: + Status: SEVERE + Pattern: CARRY_AND_ROLLOUT_LONG — Both carry and rollout overshoot + Regimes: low-launch + Diffs: carry=+3.5, total=+21.1, rollout=+17.6, apex=+0.6ft + + shot_6i_47: + Status: SEVERE + Pattern: CARRY_AND_ROLLOUT_LONG — Both carry and rollout overshoot + Regimes: none + Diffs: carry=+7.0, total=+10.8, rollout=+3.8, apex=+11.8ft + + shot_6i_48: + Status: SEVERE + Pattern: CARRY_AND_ROLLOUT_LONG — Both carry and rollout overshoot + Regimes: mid-iron + Diffs: carry=+6.1, total=+11.1, rollout=+5.0, apex=+14.2ft + + shot_6i_50: + Status: SEVERE + Pattern: ROLLOUT_TOO_SHORT — Carry close, total undershoots — rollout is too short + Regimes: none + Diffs: carry=-0.4, total=-12.1, rollout=-11.7, apex=+3.9ft + Suggested knobs: + -> Bounce.FlightTangentialRetentionBase: increase by 0.03 (range 0.4-0.75) + -> Bounce.FlightSpinFactorMin: increase by 0.03 (range 0.25-0.55) + -> Bounce.FlightSpinFactorDivisor: increase by 500.0 (range 4000.0-12000.0) + -> Bounce.CorBaseA: increase by 0.02 (range 0.3-0.6) + -> Rollout.LowSpinMultiplierMax: decrease by 0.05 (range 0.8-1.5) + + shot_7i_25: + Status: SEVERE + Pattern: ROLLOUT_TOO_SHORT — Carry close, total undershoots — rollout is too short + Regimes: none + Diffs: carry=-0.5, total=-18.0, rollout=-17.5, apex=+0.9ft + Suggested knobs: + -> Bounce.FlightTangentialRetentionBase: increase by 0.03 (range 0.4-0.75) + -> Bounce.FlightSpinFactorMin: increase by 0.03 (range 0.25-0.55) + -> Bounce.FlightSpinFactorDivisor: increase by 500.0 (range 4000.0-12000.0) + -> Bounce.CorBaseA: increase by 0.02 (range 0.3-0.6) + -> Rollout.LowSpinMultiplierMax: decrease by 0.05 (range 0.8-1.5) + + shot_7i_26: + Status: SEVERE + Pattern: ROLLOUT_TOO_SHORT — Carry close, total undershoots — rollout is too short + Regimes: none + Diffs: carry=+1.8, total=-21.8, rollout=-23.6, apex=+1.1ft + Suggested knobs: + -> Bounce.FlightTangentialRetentionBase: increase by 0.03 (range 0.4-0.75) + -> Bounce.FlightSpinFactorMin: increase by 0.03 (range 0.25-0.55) + -> Bounce.FlightSpinFactorDivisor: increase by 500.0 (range 4000.0-12000.0) + -> Bounce.CorBaseA: increase by 0.02 (range 0.3-0.6) + -> Rollout.LowSpinMultiplierMax: decrease by 0.05 (range 0.8-1.5) + + shot_7i_31: + Status: SEVERE + Pattern: CARRY_AND_ROLLOUT_SHORT — Both carry and rollout undershoot + Regimes: high-spin-wedge + Diffs: carry=-4.8, total=-14.3, rollout=-9.5, apex=-4.1ft + + shot_9i_1: + Status: SEVERE + Pattern: ROLLOUT_TOO_SHORT — Carry close, total undershoots — rollout is too short + Regimes: mid-iron + Diffs: carry=-1.4, total=-12.6, rollout=-11.2, apex=+1.3ft + Suggested knobs: + -> Bounce.FlightTangentialRetentionBase: increase by 0.03 (range 0.4-0.75) + -> Rollout.MidSpinMultiplierMax: decrease by 0.1 (range 1.5-3.0) + -> Rollout.FrictionBlendSpeed: increase by 1.0 (range 8.0-25.0) + -> KineticFrictionMultiplier: decrease by 0.05 (range 0.7-1.3) + -> Bounce.RolloutHighSpinRetention: increase by 0.03 (range 0.55-0.85) + + shot_9i_2: + Status: SEVERE + Pattern: CARRY_AND_ROLLOUT_SHORT — Both carry and rollout undershoot + Regimes: none + Diffs: carry=-8.0, total=-9.1, rollout=-1.1, apex=-3.0ft + + shot_driver_51: + Status: SEVERE + Pattern: CARRY_AND_ROLLOUT_LONG — Both carry and rollout overshoot + Regimes: high-spin-wedge + Diffs: carry=+11.4, total=+29.6, rollout=+18.2, apex=+0.6ft + + shot_driver_52: + Status: SEVERE + Pattern: CARRY_AND_ROLLOUT_LONG — Both carry and rollout overshoot + Regimes: high-spin-wedge, high-loft-wedge + Diffs: carry=+9.4, total=+25.3, rollout=+15.9, apex=-1.4ft + + shot_driver_53: + Status: SEVERE + Pattern: CARRY_AND_ROLLOUT_LONG — Both carry and rollout overshoot + Regimes: high-spin-wedge, high-loft-wedge + Diffs: carry=+6.5, total=+17.9, rollout=+11.4, apex=-3.8ft + + shot_driver_55: + Status: SEVERE + Pattern: ROLLOUT_TOO_LONG — Carry close, total overshoots — rollout is too long + Regimes: low-launch, driver-wood + Diffs: carry=+2.5, total=+22.6, rollout=+20.1, apex=+0.4ft + Suggested knobs: + -> Bounce.FlightTangentialRetentionBase: decrease by 0.03 (range 0.4-0.75) + -> Bounce.CorBaseA: decrease by 0.02 (range 0.3-0.6) + -> Rollout.LowSpinMultiplierMax: increase by 0.05 (range 0.8-1.5) + -> Rollout.LowSpinThreshold: decrease by 100.0 (range 1000.0-2500.0) + -> Rollout.FrictionBlendSpeed: decrease by 1.0 (range 8.0-25.0) + + shot_driver_56: + Status: SEVERE + Pattern: CARRY_AND_ROLLOUT_LONG — Both carry and rollout overshoot + Regimes: driver-wood + Diffs: carry=+4.8, total=+20.7, rollout=+15.9, apex=+9.7ft + + shot_driver_57: + Status: SEVERE + Pattern: CARRY_AND_ROLLOUT_SHORT — Both carry and rollout undershoot + Regimes: driver-wood + Diffs: carry=-5.1, total=-19.7, rollout=-14.6, apex=-3.5ft + + shot_driver_58: + Status: SEVERE + Pattern: CARRY_AND_ROLLOUT_LONG — Both carry and rollout overshoot + Regimes: high-spin-wedge + Diffs: carry=+18.0, total=+37.0, rollout=+19.0, apex=-4.8ft + + shot_driver_59: + Status: SEVERE + Pattern: ROLLOUT_TOO_LONG — Carry close, total overshoots — rollout is too long + Regimes: high-spin-wedge + Diffs: carry=-0.9, total=+17.7, rollout=+18.6, apex=-3.8ft + Suggested knobs: + -> Bounce.FlightSpinFactorMin: decrease by 0.03 (range 0.25-0.55) + -> Bounce.FlightSpinFactorDivisor: decrease by 500.0 (range 4000.0-12000.0) + -> Rollout.HighSpinMultiplierMax: increase by 0.1 (range 1.5-3.5) + -> Bounce.RolloutHighSpinRetention: decrease by 0.03 (range 0.55-0.85) + + shot_driver_60: + Status: SEVERE + Pattern: ROLLOUT_TOO_SHORT — Carry close, total undershoots — rollout is too short + Regimes: none + Diffs: carry=+0.0, total=-14.9, rollout=-14.9, apex=-2.4ft + Suggested knobs: + -> Bounce.FlightTangentialRetentionBase: increase by 0.03 (range 0.4-0.75) + -> Bounce.FlightSpinFactorMin: increase by 0.03 (range 0.25-0.55) + -> Bounce.FlightSpinFactorDivisor: increase by 500.0 (range 4000.0-12000.0) + -> Bounce.CorBaseA: increase by 0.02 (range 0.3-0.6) + -> Rollout.LowSpinMultiplierMax: decrease by 0.05 (range 0.8-1.5) + + shot_pw_66: + Status: SEVERE + Pattern: ROLLOUT_TOO_LONG — Carry close, total overshoots — rollout is too long + Regimes: high-spin-wedge + Diffs: carry=-2.6, total=+11.3, rollout=+13.9, apex=-3.7ft + Suggested knobs: + -> Bounce.FlightSpinFactorMin: decrease by 0.03 (range 0.25-0.55) + -> Bounce.FlightSpinFactorDivisor: decrease by 500.0 (range 4000.0-12000.0) + -> Rollout.HighSpinMultiplierMax: increase by 0.1 (range 1.5-3.5) + -> Bounce.RolloutHighSpinRetention: decrease by 0.03 (range 0.55-0.85) +---------------------------------------------------------------------- +MODERATE SHOTS (5-10 yd total or 3-7 yd carry) +---------------------------------------------------------------------- + + shot_5i_10: + Status: MODERATE + Pattern: ROLLOUT_TOO_SHORT — Carry close, total undershoots — rollout is too short + Regimes: none + Diffs: carry=+3.0, total=-7.1, rollout=-10.1, apex=+5.9ft + Suggested knobs: + -> Bounce.FlightTangentialRetentionBase: increase by 0.03 (range 0.4-0.75) + -> Bounce.FlightSpinFactorMin: increase by 0.03 (range 0.25-0.55) + -> Bounce.FlightSpinFactorDivisor: increase by 500.0 (range 4000.0-12000.0) + -> Bounce.CorBaseA: increase by 0.02 (range 0.3-0.6) + -> Rollout.LowSpinMultiplierMax: decrease by 0.05 (range 0.8-1.5) + + shot_6i_39: + Status: MODERATE + Pattern: ROLLOUT_TOO_LONG — Carry close, total overshoots — rollout is too long + Regimes: low-launch + Diffs: carry=-0.5, total=+6.4, rollout=+6.9, apex=+0.0ft + Suggested knobs: + -> Bounce.FlightTangentialRetentionBase: decrease by 0.03 (range 0.4-0.75) + -> Bounce.CorBaseA: decrease by 0.02 (range 0.3-0.6) + -> Rollout.LowSpinMultiplierMax: increase by 0.05 (range 0.8-1.5) + -> Rollout.LowSpinThreshold: decrease by 100.0 (range 1000.0-2500.0) + -> Rollout.FrictionBlendSpeed: decrease by 1.0 (range 8.0-25.0) + + shot_6i_40: + Status: MODERATE + Pattern: ROLLOUT_TOO_LONG — Carry close, total overshoots — rollout is too long + Regimes: low-launch + Diffs: carry=-1.2, total=+7.8, rollout=+9.0, apex=+0.1ft + Suggested knobs: + -> Bounce.FlightTangentialRetentionBase: decrease by 0.03 (range 0.4-0.75) + -> Bounce.CorBaseA: decrease by 0.02 (range 0.3-0.6) + -> Rollout.LowSpinMultiplierMax: increase by 0.05 (range 0.8-1.5) + -> Rollout.LowSpinThreshold: decrease by 100.0 (range 1000.0-2500.0) + -> Rollout.FrictionBlendSpeed: decrease by 1.0 (range 8.0-25.0) + + shot_6i_43: + Status: MODERATE + Pattern: CARRY_TOO_LONG — Physics carry exceeds reference + Regimes: none + Diffs: carry=+6.4, total=+0.9, rollout=-5.5, apex=+8.1ft + Suggested knobs: + -> Flight.ClMaxBase: decrease by 0.005 (range 0.22-0.32) + -> Flight.CdMin: increase by 0.005 (range 0.18-0.28) + -> Flight.HighLaunchDragBoostMax: increase by 0.02 (range 1.0-1.3) + -> DragScaleMultiplier: increase by 0.02 (range 0.85-1.15) + -> LiftScaleMultiplier: decrease by 0.02 (range 0.85-1.15) + + shot_6i_46: + Status: MODERATE + Pattern: CARRY_TOO_LONG — Physics carry exceeds reference + Regimes: driver-wood + Diffs: carry=+3.8, total=-3.5, rollout=-7.3, apex=-1.5ft + Suggested knobs: + -> Flight.ClMaxBase: decrease by 0.005 (range 0.22-0.32) + -> Flight.CdMin: increase by 0.005 (range 0.18-0.28) + -> DragScaleMultiplier: increase by 0.02 (range 0.85-1.15) + -> LiftScaleMultiplier: decrease by 0.02 (range 0.85-1.15) + + shot_6i_49: + Status: MODERATE + Pattern: ROLLOUT_TOO_LONG — Carry close, total overshoots — rollout is too long + Regimes: low-launch + Diffs: carry=-2.5, total=+7.0, rollout=+9.5, apex=-0.3ft + Suggested knobs: + -> Bounce.FlightTangentialRetentionBase: decrease by 0.03 (range 0.4-0.75) + -> Bounce.CorBaseA: decrease by 0.02 (range 0.3-0.6) + -> Rollout.LowSpinMultiplierMax: increase by 0.05 (range 0.8-1.5) + -> Rollout.LowSpinThreshold: decrease by 100.0 (range 1000.0-2500.0) + -> Rollout.FrictionBlendSpeed: decrease by 1.0 (range 8.0-25.0) + + shot_7i_29: + Status: MODERATE + Pattern: ROLLOUT_TOO_SHORT — Carry close, total undershoots — rollout is too short + Regimes: none + Diffs: carry=+1.0, total=-5.8, rollout=-6.8, apex=-3.5ft + Suggested knobs: + -> Bounce.FlightTangentialRetentionBase: increase by 0.03 (range 0.4-0.75) + -> Bounce.FlightSpinFactorMin: increase by 0.03 (range 0.25-0.55) + -> Bounce.FlightSpinFactorDivisor: increase by 500.0 (range 4000.0-12000.0) + -> Bounce.CorBaseA: increase by 0.02 (range 0.3-0.6) + -> Rollout.LowSpinMultiplierMax: decrease by 0.05 (range 0.8-1.5) + + shot_7i_34: + Status: MODERATE + Pattern: CARRY_TOO_LONG — Physics carry exceeds reference + Regimes: none + Diffs: carry=+4.4, total=+2.6, rollout=-1.8, apex=+3.1ft + Suggested knobs: + -> Flight.ClMaxBase: decrease by 0.005 (range 0.22-0.32) + -> Flight.CdMin: increase by 0.005 (range 0.18-0.28) + -> Flight.HighLaunchDragBoostMax: increase by 0.02 (range 1.0-1.3) + -> DragScaleMultiplier: increase by 0.02 (range 0.85-1.15) + -> LiftScaleMultiplier: decrease by 0.02 (range 0.85-1.15) + + shot_9i_5: + Status: MODERATE + Pattern: ROLLOUT_TOO_SHORT — Carry close, total undershoots — rollout is too short + Regimes: high-spin-wedge + Diffs: carry=-2.6, total=-5.5, rollout=-2.9, apex=-5.5ft + Suggested knobs: + -> Bounce.FlightSpinFactorMin: increase by 0.03 (range 0.25-0.55) + -> Bounce.FlightSpinFactorDivisor: increase by 500.0 (range 4000.0-12000.0) + -> Rollout.HighSpinMultiplierMax: decrease by 0.1 (range 1.5-3.5) + -> Bounce.RolloutHighSpinRetention: increase by 0.03 (range 0.55-0.85) + + shot_driver_54: + Status: MODERATE + Pattern: CARRY_TOO_LONG — Physics carry exceeds reference + Regimes: driver-wood + Diffs: carry=+5.4, total=+0.0, rollout=-5.4, apex=-2.2ft + Suggested knobs: + -> Flight.ClMaxBase: decrease by 0.005 (range 0.22-0.32) + -> Flight.CdMin: increase by 0.005 (range 0.18-0.28) + -> DragScaleMultiplier: increase by 0.02 (range 0.85-1.15) + -> LiftScaleMultiplier: decrease by 0.02 (range 0.85-1.15) + + shot_pw_64: + Status: MODERATE + Pattern: CARRY_TOO_SHORT — Physics carry under reference + Regimes: high-spin-wedge + Diffs: carry=-4.4, total=+9.6, rollout=+14.0, apex=-3.7ft + Suggested knobs: + -> Flight.HighLaunchDragBoostMax: decrease by 0.02 (range 1.0-1.3) + -> DragScaleMultiplier: decrease by 0.02 (range 0.85-1.15) + + shot_pw_67: + Status: MODERATE + Pattern: ROLLOUT_TOO_LONG — Carry close, total overshoots — rollout is too long + Regimes: high-spin-wedge + Diffs: carry=+0.0, total=+5.7, rollout=+5.7, apex=-4.0ft + Suggested knobs: + -> Bounce.FlightSpinFactorMin: decrease by 0.03 (range 0.25-0.55) + -> Bounce.FlightSpinFactorDivisor: decrease by 500.0 (range 4000.0-12000.0) + -> Rollout.HighSpinMultiplierMax: increase by 0.1 (range 1.5-3.5) + -> Bounce.RolloutHighSpinRetention: decrease by 0.03 (range 0.55-0.85) + + shot_pw_68: + Status: MODERATE + Pattern: CARRY_AND_ROLLOUT_LONG — Both carry and rollout overshoot + Regimes: high-spin-wedge, mid-iron + Diffs: carry=+3.4, total=+6.1, rollout=+2.7, apex=-6.2ft + +====================================================================== +PARAMETER CONFLICTS +====================================================================== + + Bounce.FlightTangentialRetentionBase: + - shot_3w_19: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_3w_21: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_3w_23: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_10: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_12: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_13: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_5i_16: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_36: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_39: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_6i_40: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_6i_42: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_44: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_49: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_6i_50: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_25: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_26: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_29: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_9i_1: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_driver_55: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_driver_60: needs increase (pattern: ROLLOUT_TOO_SHORT) + + Bounce.CorBaseA: + - shot_3w_19: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_3w_21: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_3w_23: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_10: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_12: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_13: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_5i_16: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_36: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_39: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_6i_40: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_6i_42: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_44: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_49: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_6i_50: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_25: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_26: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_29: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_driver_55: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_driver_60: needs increase (pattern: ROLLOUT_TOO_SHORT) + + Rollout.LowSpinMultiplierMax: + - shot_3w_19: needs increase (pattern: ROLLOUT_TOO_LONG) + - shot_3w_21: needs increase (pattern: ROLLOUT_TOO_LONG) + - shot_3w_23: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_10: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_12: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_13: needs increase (pattern: ROLLOUT_TOO_LONG) + - shot_5i_16: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_36: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_39: needs increase (pattern: ROLLOUT_TOO_LONG) + - shot_6i_40: needs increase (pattern: ROLLOUT_TOO_LONG) + - shot_6i_42: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_44: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_49: needs increase (pattern: ROLLOUT_TOO_LONG) + - shot_6i_50: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_25: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_26: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_29: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_driver_55: needs increase (pattern: ROLLOUT_TOO_LONG) + - shot_driver_60: needs decrease (pattern: ROLLOUT_TOO_SHORT) + + Rollout.LowSpinThreshold: + - shot_3w_19: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_3w_21: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_3w_23: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_10: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_12: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_13: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_5i_16: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_36: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_39: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_6i_40: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_6i_42: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_44: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_49: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_6i_50: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_25: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_26: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_29: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_driver_55: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_driver_60: needs increase (pattern: ROLLOUT_TOO_SHORT) + + Rollout.FrictionBlendSpeed: + - shot_3w_19: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_3w_21: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_3w_23: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_10: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_12: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_13: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_5i_16: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_36: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_39: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_6i_40: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_6i_42: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_44: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_49: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_6i_50: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_25: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_26: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_29: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_9i_1: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_driver_55: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_driver_60: needs increase (pattern: ROLLOUT_TOO_SHORT) + + KineticFrictionMultiplier: + - shot_3w_19: needs increase (pattern: ROLLOUT_TOO_LONG) + - shot_3w_21: needs increase (pattern: ROLLOUT_TOO_LONG) + - shot_3w_23: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_10: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_12: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_13: needs increase (pattern: ROLLOUT_TOO_LONG) + - shot_5i_16: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_36: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_39: needs increase (pattern: ROLLOUT_TOO_LONG) + - shot_6i_40: needs increase (pattern: ROLLOUT_TOO_LONG) + - shot_6i_42: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_44: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_49: needs increase (pattern: ROLLOUT_TOO_LONG) + - shot_6i_50: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_25: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_26: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_29: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_9i_1: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_driver_55: needs increase (pattern: ROLLOUT_TOO_LONG) + - shot_driver_60: needs decrease (pattern: ROLLOUT_TOO_SHORT) + + RollingFrictionMultiplier: + - shot_3w_19: needs increase (pattern: ROLLOUT_TOO_LONG) + - shot_3w_21: needs increase (pattern: ROLLOUT_TOO_LONG) + - shot_3w_23: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_10: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_12: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_13: needs increase (pattern: ROLLOUT_TOO_LONG) + - shot_5i_16: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_36: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_39: needs increase (pattern: ROLLOUT_TOO_LONG) + - shot_6i_40: needs increase (pattern: ROLLOUT_TOO_LONG) + - shot_6i_42: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_44: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_49: needs increase (pattern: ROLLOUT_TOO_LONG) + - shot_6i_50: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_25: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_26: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_29: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_driver_55: needs increase (pattern: ROLLOUT_TOO_LONG) + - shot_driver_60: needs decrease (pattern: ROLLOUT_TOO_SHORT) + + Bounce.RolloutLowSpinRetention: + - shot_3w_19: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_3w_21: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_3w_23: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_10: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_12: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_13: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_5i_16: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_36: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_39: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_6i_40: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_6i_42: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_44: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_49: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_6i_50: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_25: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_26: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_29: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_driver_55: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_driver_60: needs increase (pattern: ROLLOUT_TOO_SHORT) + + Bounce.FlightSpinFactorMin: + - shot_5i_10: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_12: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_36: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_42: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_50: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_25: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_26: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_29: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_9i_5: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_driver_59: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_driver_60: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_pw_66: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_pw_67: needs decrease (pattern: ROLLOUT_TOO_LONG) + + Bounce.FlightSpinFactorDivisor: + - shot_5i_10: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_12: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_36: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_42: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_50: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_25: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_26: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_29: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_9i_5: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_driver_59: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_driver_60: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_pw_66: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_pw_67: needs decrease (pattern: ROLLOUT_TOO_LONG) + + Rollout.HighSpinMultiplierMax: + - shot_5i_10: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_12: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_36: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_42: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_50: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_25: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_26: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_29: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_9i_5: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_driver_59: needs increase (pattern: ROLLOUT_TOO_LONG) + - shot_driver_60: needs decrease (pattern: ROLLOUT_TOO_SHORT) + - shot_pw_66: needs increase (pattern: ROLLOUT_TOO_LONG) + - shot_pw_67: needs increase (pattern: ROLLOUT_TOO_LONG) + + Bounce.RolloutHighSpinRetention: + - shot_5i_10: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_5i_12: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_36: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_42: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_6i_50: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_25: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_26: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_7i_29: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_9i_1: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_9i_5: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_driver_59: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_driver_60: needs increase (pattern: ROLLOUT_TOO_SHORT) + - shot_pw_66: needs decrease (pattern: ROLLOUT_TOO_LONG) + - shot_pw_67: needs decrease (pattern: ROLLOUT_TOO_LONG) + + Flight.ClMaxBase: + - shot_6i_37: needs increase (pattern: CARRY_TOO_SHORT) + - shot_6i_43: needs decrease (pattern: CARRY_TOO_LONG) + - shot_6i_46: needs decrease (pattern: CARRY_TOO_LONG) + - shot_7i_34: needs decrease (pattern: CARRY_TOO_LONG) + - shot_driver_54: needs decrease (pattern: CARRY_TOO_LONG) + + Flight.CdMin: + - shot_6i_37: needs decrease (pattern: CARRY_TOO_SHORT) + - shot_6i_43: needs increase (pattern: CARRY_TOO_LONG) + - shot_6i_46: needs increase (pattern: CARRY_TOO_LONG) + - shot_7i_34: needs increase (pattern: CARRY_TOO_LONG) + - shot_driver_54: needs increase (pattern: CARRY_TOO_LONG) + + Flight.HighLaunchDragBoostMax: + - shot_6i_37: needs decrease (pattern: CARRY_TOO_SHORT) + - shot_6i_43: needs increase (pattern: CARRY_TOO_LONG) + - shot_7i_34: needs increase (pattern: CARRY_TOO_LONG) + - shot_pw_64: needs decrease (pattern: CARRY_TOO_SHORT) + + DragScaleMultiplier: + - shot_6i_37: needs decrease (pattern: CARRY_TOO_SHORT) + - shot_6i_43: needs increase (pattern: CARRY_TOO_LONG) + - shot_6i_46: needs increase (pattern: CARRY_TOO_LONG) + - shot_7i_34: needs increase (pattern: CARRY_TOO_LONG) + - shot_driver_54: needs increase (pattern: CARRY_TOO_LONG) + - shot_pw_64: needs decrease (pattern: CARRY_TOO_SHORT) + + LiftScaleMultiplier: + - shot_6i_37: needs increase (pattern: CARRY_TOO_SHORT) + - shot_6i_43: needs decrease (pattern: CARRY_TOO_LONG) + - shot_6i_46: needs decrease (pattern: CARRY_TOO_LONG) + - shot_7i_34: needs decrease (pattern: CARRY_TOO_LONG) + - shot_driver_54: needs decrease (pattern: CARRY_TOO_LONG) diff --git a/assets/data/shot_session_3/flightscope.csv.import b/assets/data/shot_session_3/flightscope.csv.import new file mode 100644 index 0000000..9f3ba00 --- /dev/null +++ b/assets/data/shot_session_3/flightscope.csv.import @@ -0,0 +1,19 @@ +[remap] + +importer="csv_translation" +type="Translation" +uid="uid://dljvh5pisnuia" + +[deps] + +files=["res://assets/data/shot_session_3/flightscope.filename.translation", "res://assets/data/shot_session_3/flightscope.speed.translation", "res://assets/data/shot_session_3/flightscope.vla.translation", "res://assets/data/shot_session_3/flightscope.hla.translation", "res://assets/data/shot_session_3/flightscope.total.translation", "res://assets/data/shot_session_3/flightscope.spin.translation", "res://assets/data/shot_session_3/flightscope.backspin.translation", "res://assets/data/shot_session_3/flightscope.sidespin.translation", "res://assets/data/shot_session_3/flightscope.carry.translation", "res://assets/data/shot_session_3/flightscope.total.translation", "res://assets/data/shot_session_3/flightscope.rollout.translation", "res://assets/data/shot_session_3/flightscope.apex.translation"] + +source_file="res://assets/data/shot_session_3/flightscope.csv" +dest_files=["res://assets/data/shot_session_3/flightscope.filename.translation", "res://assets/data/shot_session_3/flightscope.speed.translation", "res://assets/data/shot_session_3/flightscope.vla.translation", "res://assets/data/shot_session_3/flightscope.hla.translation", "res://assets/data/shot_session_3/flightscope.total.translation", "res://assets/data/shot_session_3/flightscope.spin.translation", "res://assets/data/shot_session_3/flightscope.backspin.translation", "res://assets/data/shot_session_3/flightscope.sidespin.translation", "res://assets/data/shot_session_3/flightscope.carry.translation", "res://assets/data/shot_session_3/flightscope.total.translation", "res://assets/data/shot_session_3/flightscope.rollout.translation", "res://assets/data/shot_session_3/flightscope.apex.translation"] + +[params] + +compress=1 +delimiter=0 +unescape_keys=false +unescape_translations=true diff --git a/assets/data/shot_session_3/history/iteration_002.json b/assets/data/shot_session_3/history/iteration_002.json new file mode 100644 index 0000000..3fb4ae7 --- /dev/null +++ b/assets/data/shot_session_3/history/iteration_002.json @@ -0,0 +1,563 @@ +{ + "iteration": 2, + "timestamp": "2026-03-13T23:09:57.682670", + "profile_overrides": { + "DragScaleMultiplier": 1.01, + "Flight": { + "CdMin": 0.223, + "HighLaunchDragVlaStartDeg": 24.5, + "HighLaunchDragVlaFullDeg": 31.5, + "HighLaunchDragBoostMax": 1.24, + "SpinDragProgressiveCapSrStart": 0.33, + "SpinDragProgressiveCapSrEnd": 0.5, + "SpinDragProgressiveCapBoostMax": 0.25, + "HighReMidSpinGain": 16.0, + "MidSpinClBoostSrStart": 0.17, + "MidSpinClBoostSrEnd": 0.31, + "MidSpinClBoostMax": 0.5 + } + }, + "summary": { + "pass": 11, + "moderate": 15, + "severe": 35, + "no_reference": 8 + }, + "per_shot": { + "shot_3w_18": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_3w_19": { + "diff_carry_yd": -0.6, + "diff_total_yd": 16.0, + "diff_apex_ft": 0.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_3w_20": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_3w_21": { + "diff_carry_yd": 0.6, + "diff_total_yd": 15.9, + "diff_apex_ft": 0.3, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_3w_22": { + "diff_carry_yd": 2.6, + "diff_total_yd": 19.6, + "diff_apex_ft": 0.5, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_3w_23": { + "diff_carry_yd": 0.1, + "diff_total_yd": -23.3, + "diff_apex_ft": -1.3, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "shot_3w_24": { + "diff_carry_yd": 6.9, + "diff_total_yd": 28.4, + "diff_apex_ft": 1.8, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "shot_5i_10": { + "diff_carry_yd": -3.8, + "diff_total_yd": -7.6, + "diff_apex_ft": 5.8, + "status": "moderate", + "error_pattern": "CARRY_AND_ROLLOUT_SHORT" + }, + "shot_5i_11": { + "diff_carry_yd": -3.7, + "diff_total_yd": -17.6, + "diff_apex_ft": -1.3, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_SHORT" + }, + "shot_5i_12": { + "diff_carry_yd": 1.1, + "diff_total_yd": -23.5, + "diff_apex_ft": 1.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "shot_5i_13": { + "diff_carry_yd": 2.3, + "diff_total_yd": 10.1, + "diff_apex_ft": 0.6, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_5i_14": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_5i_15": { + "diff_carry_yd": -4.6, + "diff_total_yd": 14.5, + "diff_apex_ft": -1.1, + "status": "severe", + "error_pattern": "CARRY_TOO_SHORT" + }, + "shot_5i_16": { + "diff_carry_yd": 0.9, + "diff_total_yd": -21.0, + "diff_apex_ft": -0.2, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "shot_5i_17": { + "diff_carry_yd": -2.2, + "diff_total_yd": -1.7, + "diff_apex_ft": -0.3, + "status": "pass", + "error_pattern": null + }, + "shot_6i_35": { + "diff_carry_yd": -0.5, + "diff_total_yd": -17.0, + "diff_apex_ft": -3.4, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "shot_6i_36": { + "diff_carry_yd": 6.7, + "diff_total_yd": -21.1, + "diff_apex_ft": 0.6, + "status": "severe", + "error_pattern": "CARRY_TOO_LONG" + }, + "shot_6i_37": { + "diff_carry_yd": -3.7, + "diff_total_yd": 11.9, + "diff_apex_ft": -0.9, + "status": "severe", + "error_pattern": "CARRY_TOO_SHORT" + }, + "shot_6i_38": { + "diff_carry_yd": -3.6, + "diff_total_yd": -21.7, + "diff_apex_ft": 0.1, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_SHORT" + }, + "shot_6i_39": { + "diff_carry_yd": -0.5, + "diff_total_yd": 6.4, + "diff_apex_ft": 0.0, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_6i_40": { + "diff_carry_yd": -1.3, + "diff_total_yd": 7.7, + "diff_apex_ft": 0.1, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_6i_41": { + "diff_carry_yd": -4.7, + "diff_total_yd": 12.9, + "diff_apex_ft": -1.0, + "status": "severe", + "error_pattern": "CARRY_TOO_SHORT" + }, + "shot_6i_42": { + "diff_carry_yd": 3.6, + "diff_total_yd": -17.8, + "diff_apex_ft": 0.7, + "status": "severe", + "error_pattern": "CARRY_TOO_LONG" + }, + "shot_6i_43": { + "diff_carry_yd": -0.7, + "diff_total_yd": -0.2, + "diff_apex_ft": 7.8, + "status": "pass", + "error_pattern": null + }, + "shot_6i_44": { + "diff_carry_yd": -1.8, + "diff_total_yd": -28.0, + "diff_apex_ft": -1.4, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "shot_6i_45": { + "diff_carry_yd": 3.0, + "diff_total_yd": 20.4, + "diff_apex_ft": 0.5, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_6i_46": { + "diff_carry_yd": 3.1, + "diff_total_yd": -4.2, + "diff_apex_ft": -1.7, + "status": "moderate", + "error_pattern": "CARRY_TOO_LONG" + }, + "shot_6i_47": { + "diff_carry_yd": -0.2, + "diff_total_yd": 8.3, + "diff_apex_ft": 11.4, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_6i_48": { + "diff_carry_yd": -1.0, + "diff_total_yd": 8.8, + "diff_apex_ft": 13.8, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_6i_49": { + "diff_carry_yd": -2.5, + "diff_total_yd": 6.9, + "diff_apex_ft": -0.3, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_6i_50": { + "diff_carry_yd": -0.9, + "diff_total_yd": -12.5, + "diff_apex_ft": 3.8, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "shot_7i_25": { + "diff_carry_yd": -0.9, + "diff_total_yd": -18.4, + "diff_apex_ft": 0.9, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "shot_7i_26": { + "diff_carry_yd": 1.5, + "diff_total_yd": -22.1, + "diff_apex_ft": 1.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "shot_7i_27": { + "diff_carry_yd": -5.1, + "diff_total_yd": 4.7, + "diff_apex_ft": 7.7, + "status": "moderate", + "error_pattern": "CARRY_TOO_SHORT" + }, + "shot_7i_28": { + "diff_carry_yd": -5.8, + "diff_total_yd": 1.5, + "diff_apex_ft": 8.1, + "status": "moderate", + "error_pattern": "CARRY_TOO_SHORT" + }, + "shot_7i_29": { + "diff_carry_yd": 0.1, + "diff_total_yd": -6.6, + "diff_apex_ft": -3.6, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "shot_7i_30": { + "diff_carry_yd": -7.0, + "diff_total_yd": 1.0, + "diff_apex_ft": 5.3, + "status": "moderate", + "error_pattern": "CARRY_TOO_SHORT" + }, + "shot_7i_31": { + "diff_carry_yd": -0.2, + "diff_total_yd": -14.7, + "diff_apex_ft": -4.2, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "shot_7i_32": { + "diff_carry_yd": -2.4, + "diff_total_yd": -2.8, + "diff_apex_ft": 3.0, + "status": "pass", + "error_pattern": null + }, + "shot_7i_33": { + "diff_carry_yd": -2.2, + "diff_total_yd": -1.9, + "diff_apex_ft": 4.5, + "status": "pass", + "error_pattern": null + }, + "shot_7i_34": { + "diff_carry_yd": -2.7, + "diff_total_yd": 2.0, + "diff_apex_ft": 3.0, + "status": "pass", + "error_pattern": null + }, + "shot_9i_1": { + "diff_carry_yd": -1.9, + "diff_total_yd": -13.0, + "diff_apex_ft": 1.2, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "shot_9i_2": { + "diff_carry_yd": -8.2, + "diff_total_yd": -9.2, + "diff_apex_ft": -3.1, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_SHORT" + }, + "shot_9i_3": { + "diff_carry_yd": -1.9, + "diff_total_yd": 1.4, + "diff_apex_ft": -5.4, + "status": "pass", + "error_pattern": null + }, + "shot_9i_4": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_9i_5": { + "diff_carry_yd": -3.0, + "diff_total_yd": -5.9, + "diff_apex_ft": -5.5, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "shot_9i_6": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_9i_7": { + "diff_carry_yd": 0.6, + "diff_total_yd": 1.1, + "diff_apex_ft": -4.3, + "status": "pass", + "error_pattern": null + }, + "shot_9i_8": { + "diff_carry_yd": -2.3, + "diff_total_yd": 4.7, + "diff_apex_ft": -1.8, + "status": "pass", + "error_pattern": null + }, + "shot_9i_9": { + "diff_carry_yd": -1.8, + "diff_total_yd": 2.3, + "diff_apex_ft": -6.3, + "status": "pass", + "error_pattern": null + }, + "shot_driver_51": { + "diff_carry_yd": -1.1, + "diff_total_yd": 28.4, + "diff_apex_ft": 0.0, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_driver_52": { + "diff_carry_yd": 0.2, + "diff_total_yd": 23.9, + "diff_apex_ft": -2.0, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_driver_53": { + "diff_carry_yd": -3.5, + "diff_total_yd": 15.7, + "diff_apex_ft": -4.5, + "status": "severe", + "error_pattern": "CARRY_TOO_SHORT" + }, + "shot_driver_54": { + "diff_carry_yd": -1.8, + "diff_total_yd": -0.7, + "diff_apex_ft": -2.5, + "status": "pass", + "error_pattern": null + }, + "shot_driver_55": { + "diff_carry_yd": 2.0, + "diff_total_yd": 21.7, + "diff_apex_ft": 0.4, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_driver_56": { + "diff_carry_yd": -3.3, + "diff_total_yd": 19.6, + "diff_apex_ft": 9.4, + "status": "severe", + "error_pattern": "CARRY_TOO_SHORT" + }, + "shot_driver_57": { + "diff_carry_yd": -5.8, + "diff_total_yd": -20.4, + "diff_apex_ft": -3.7, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_SHORT" + }, + "shot_driver_58": { + "diff_carry_yd": 5.5, + "diff_total_yd": 34.0, + "diff_apex_ft": -5.4, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "shot_driver_59": { + "diff_carry_yd": -1.6, + "diff_total_yd": 14.4, + "diff_apex_ft": -4.2, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_driver_60": { + "diff_carry_yd": -0.6, + "diff_total_yd": -15.4, + "diff_apex_ft": -2.5, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "shot_pw_61": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_pw_62": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_pw_63": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_pw_64": { + "diff_carry_yd": -4.7, + "diff_total_yd": 9.1, + "diff_apex_ft": -3.8, + "status": "moderate", + "error_pattern": "CARRY_TOO_SHORT" + }, + "shot_pw_65": { + "diff_carry_yd": -0.6, + "diff_total_yd": 4.2, + "diff_apex_ft": -4.0, + "status": "pass", + "error_pattern": null + }, + "shot_pw_66": { + "diff_carry_yd": -3.0, + "diff_total_yd": 10.8, + "diff_apex_ft": -3.9, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_pw_67": { + "diff_carry_yd": -0.4, + "diff_total_yd": 5.2, + "diff_apex_ft": -4.1, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_pw_68": { + "diff_carry_yd": 2.9, + "diff_total_yd": 6.1, + "diff_apex_ft": -6.4, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_pw_69": { + "diff_carry_yd": -3.2, + "diff_total_yd": 11.6, + "diff_apex_ft": -3.9, + "status": "severe", + "error_pattern": "CARRY_TOO_SHORT" + } + }, + "regressions": [ + { + "shot": "shot_7i_27", + "was": "pass", + "now": "moderate", + "prev_total_diff": 4.3, + "curr_total_diff": 4.7 + }, + { + "shot": "shot_7i_28", + "was": "pass", + "now": "moderate", + "prev_total_diff": 1.2, + "curr_total_diff": 1.5 + }, + { + "shot": "shot_7i_30", + "was": "pass", + "now": "moderate", + "prev_total_diff": 1.5, + "curr_total_diff": 1.0 + }, + { + "shot": "shot_pw_69", + "was": "pass", + "now": "severe", + "prev_total_diff": -3.9, + "curr_total_diff": 11.6 + } + ], + "conflicts": [ + "Bounce.FlightTangentialRetentionBase", + "Bounce.CorBaseA", + "Rollout.LowSpinMultiplierMax", + "Rollout.LowSpinThreshold", + "Rollout.FrictionBlendSpeed", + "KineticFrictionMultiplier", + "RollingFrictionMultiplier", + "Bounce.RolloutLowSpinRetention", + "Bounce.FlightSpinFactorMin", + "Bounce.FlightSpinFactorDivisor", + "Rollout.MidSpinMultiplierMax", + "Rollout.HighSpinMultiplierMax", + "Rollout.ChipVelocityScaleMin", + "Rollout.ChipVelocityScaleMax", + "Bounce.RolloutHighSpinRetention", + "Flight.ClMaxBase", + "Flight.CdMin", + "Flight.HighLaunchDragBoostMax", + "DragScaleMultiplier", + "LiftScaleMultiplier" + ] +} diff --git a/assets/data/shot_session_3/history/iteration_003.json b/assets/data/shot_session_3/history/iteration_003.json new file mode 100644 index 0000000..253ffc9 --- /dev/null +++ b/assets/data/shot_session_3/history/iteration_003.json @@ -0,0 +1,534 @@ +{ + "iteration": 3, + "timestamp": "2026-03-13T23:32:27.869860", + "profile_overrides": { + "DragScaleMultiplier": 1.01, + "Flight": { + "CdMin": 0.223, + "HighLaunchDragVlaStartDeg": 24.5, + "HighLaunchDragVlaFullDeg": 31.5, + "HighLaunchDragBoostMax": 1.24, + "SpinDragProgressiveCapSrStart": 0.33, + "SpinDragProgressiveCapSrEnd": 0.5, + "SpinDragProgressiveCapBoostMax": 0.25, + "HighReMidSpinGain": 16.0, + "MidSpinClBoostSrStart": 0.17, + "MidSpinClBoostSrEnd": 0.31, + "MidSpinClBoostMax": 0.5 + } + }, + "summary": { + "pass": 12, + "moderate": 14, + "severe": 35, + "no_reference": 8 + }, + "per_shot": { + "shot_3w_18": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_3w_19": { + "diff_carry_yd": -0.6, + "diff_total_yd": 16.0, + "diff_apex_ft": 0.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_3w_20": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_3w_21": { + "diff_carry_yd": 0.6, + "diff_total_yd": 15.9, + "diff_apex_ft": 0.3, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_3w_22": { + "diff_carry_yd": 2.6, + "diff_total_yd": 19.6, + "diff_apex_ft": 0.5, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_3w_23": { + "diff_carry_yd": 0.1, + "diff_total_yd": -23.3, + "diff_apex_ft": -1.3, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "shot_3w_24": { + "diff_carry_yd": 2.9, + "diff_total_yd": 28.4, + "diff_apex_ft": 1.8, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_5i_10": { + "diff_carry_yd": -3.8, + "diff_total_yd": -7.6, + "diff_apex_ft": 5.8, + "status": "moderate", + "error_pattern": "CARRY_AND_ROLLOUT_SHORT" + }, + "shot_5i_11": { + "diff_carry_yd": -3.7, + "diff_total_yd": -17.6, + "diff_apex_ft": -1.3, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_SHORT" + }, + "shot_5i_12": { + "diff_carry_yd": 1.1, + "diff_total_yd": -23.5, + "diff_apex_ft": 1.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "shot_5i_13": { + "diff_carry_yd": 2.3, + "diff_total_yd": 10.1, + "diff_apex_ft": 0.6, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_5i_14": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_5i_15": { + "diff_carry_yd": -4.6, + "diff_total_yd": 14.5, + "diff_apex_ft": -1.1, + "status": "severe", + "error_pattern": "CARRY_TOO_SHORT" + }, + "shot_5i_16": { + "diff_carry_yd": 0.9, + "diff_total_yd": -21.0, + "diff_apex_ft": -0.2, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "shot_5i_17": { + "diff_carry_yd": -2.2, + "diff_total_yd": -1.7, + "diff_apex_ft": -0.3, + "status": "pass", + "error_pattern": null + }, + "shot_6i_35": { + "diff_carry_yd": -0.5, + "diff_total_yd": -17.0, + "diff_apex_ft": -3.4, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "shot_6i_36": { + "diff_carry_yd": 6.7, + "diff_total_yd": -21.1, + "diff_apex_ft": 0.6, + "status": "severe", + "error_pattern": "CARRY_TOO_LONG" + }, + "shot_6i_37": { + "diff_carry_yd": -3.7, + "diff_total_yd": 11.9, + "diff_apex_ft": -0.9, + "status": "severe", + "error_pattern": "CARRY_TOO_SHORT" + }, + "shot_6i_38": { + "diff_carry_yd": -3.6, + "diff_total_yd": -21.7, + "diff_apex_ft": 0.1, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_SHORT" + }, + "shot_6i_39": { + "diff_carry_yd": -0.5, + "diff_total_yd": 6.4, + "diff_apex_ft": 0.0, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_6i_40": { + "diff_carry_yd": -1.3, + "diff_total_yd": 7.7, + "diff_apex_ft": 0.1, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_6i_41": { + "diff_carry_yd": -4.7, + "diff_total_yd": 12.9, + "diff_apex_ft": -1.0, + "status": "severe", + "error_pattern": "CARRY_TOO_SHORT" + }, + "shot_6i_42": { + "diff_carry_yd": 3.6, + "diff_total_yd": -17.8, + "diff_apex_ft": 0.7, + "status": "severe", + "error_pattern": "CARRY_TOO_LONG" + }, + "shot_6i_43": { + "diff_carry_yd": 1.6, + "diff_total_yd": -0.2, + "diff_apex_ft": 7.8, + "status": "pass", + "error_pattern": null + }, + "shot_6i_44": { + "diff_carry_yd": -1.8, + "diff_total_yd": -28.0, + "diff_apex_ft": -1.4, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "shot_6i_45": { + "diff_carry_yd": 3.0, + "diff_total_yd": 20.4, + "diff_apex_ft": 0.5, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_6i_46": { + "diff_carry_yd": 3.1, + "diff_total_yd": -4.2, + "diff_apex_ft": -1.7, + "status": "moderate", + "error_pattern": "CARRY_TOO_LONG" + }, + "shot_6i_47": { + "diff_carry_yd": 2.1, + "diff_total_yd": 8.3, + "diff_apex_ft": 11.4, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_6i_48": { + "diff_carry_yd": 1.3, + "diff_total_yd": 8.8, + "diff_apex_ft": 13.8, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_6i_49": { + "diff_carry_yd": -2.5, + "diff_total_yd": 6.9, + "diff_apex_ft": -0.3, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_6i_50": { + "diff_carry_yd": -0.9, + "diff_total_yd": -12.5, + "diff_apex_ft": 3.8, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "shot_7i_25": { + "diff_carry_yd": -0.9, + "diff_total_yd": -18.4, + "diff_apex_ft": 0.9, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "shot_7i_26": { + "diff_carry_yd": 1.5, + "diff_total_yd": -22.1, + "diff_apex_ft": 1.1, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "shot_7i_27": { + "diff_carry_yd": -2.8, + "diff_total_yd": 4.7, + "diff_apex_ft": 7.7, + "status": "pass", + "error_pattern": null + }, + "shot_7i_28": { + "diff_carry_yd": -3.5, + "diff_total_yd": 1.5, + "diff_apex_ft": 8.1, + "status": "moderate", + "error_pattern": "CARRY_TOO_SHORT" + }, + "shot_7i_29": { + "diff_carry_yd": 0.1, + "diff_total_yd": -6.6, + "diff_apex_ft": -3.6, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "shot_7i_30": { + "diff_carry_yd": -4.7, + "diff_total_yd": 1.0, + "diff_apex_ft": 5.3, + "status": "moderate", + "error_pattern": "CARRY_TOO_SHORT" + }, + "shot_7i_31": { + "diff_carry_yd": -0.2, + "diff_total_yd": -14.7, + "diff_apex_ft": -4.2, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "shot_7i_32": { + "diff_carry_yd": -2.4, + "diff_total_yd": -2.8, + "diff_apex_ft": 3.0, + "status": "pass", + "error_pattern": null + }, + "shot_7i_33": { + "diff_carry_yd": -2.2, + "diff_total_yd": -1.9, + "diff_apex_ft": 4.5, + "status": "pass", + "error_pattern": null + }, + "shot_7i_34": { + "diff_carry_yd": -0.4, + "diff_total_yd": 2.0, + "diff_apex_ft": 3.0, + "status": "pass", + "error_pattern": null + }, + "shot_9i_1": { + "diff_carry_yd": -1.9, + "diff_total_yd": -13.0, + "diff_apex_ft": 1.2, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "shot_9i_2": { + "diff_carry_yd": -8.2, + "diff_total_yd": -9.2, + "diff_apex_ft": -3.1, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_SHORT" + }, + "shot_9i_3": { + "diff_carry_yd": -1.9, + "diff_total_yd": 1.4, + "diff_apex_ft": -5.4, + "status": "pass", + "error_pattern": null + }, + "shot_9i_4": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_9i_5": { + "diff_carry_yd": -3.0, + "diff_total_yd": -5.9, + "diff_apex_ft": -5.5, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "shot_9i_6": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_9i_7": { + "diff_carry_yd": 0.6, + "diff_total_yd": 1.1, + "diff_apex_ft": -4.3, + "status": "pass", + "error_pattern": null + }, + "shot_9i_8": { + "diff_carry_yd": -2.3, + "diff_total_yd": 4.7, + "diff_apex_ft": -1.8, + "status": "pass", + "error_pattern": null + }, + "shot_9i_9": { + "diff_carry_yd": -1.8, + "diff_total_yd": 2.3, + "diff_apex_ft": -6.3, + "status": "pass", + "error_pattern": null + }, + "shot_driver_51": { + "diff_carry_yd": 3.4, + "diff_total_yd": 28.4, + "diff_apex_ft": 0.0, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "shot_driver_52": { + "diff_carry_yd": 4.2, + "diff_total_yd": 23.9, + "diff_apex_ft": -2.0, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "shot_driver_53": { + "diff_carry_yd": 0.5, + "diff_total_yd": 15.7, + "diff_apex_ft": -4.5, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_driver_54": { + "diff_carry_yd": -1.8, + "diff_total_yd": -0.7, + "diff_apex_ft": -2.5, + "status": "pass", + "error_pattern": null + }, + "shot_driver_55": { + "diff_carry_yd": 2.0, + "diff_total_yd": 21.7, + "diff_apex_ft": 0.4, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_driver_56": { + "diff_carry_yd": -3.3, + "diff_total_yd": 19.6, + "diff_apex_ft": 9.4, + "status": "severe", + "error_pattern": "CARRY_TOO_SHORT" + }, + "shot_driver_57": { + "diff_carry_yd": -5.8, + "diff_total_yd": -20.4, + "diff_apex_ft": -3.7, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_SHORT" + }, + "shot_driver_58": { + "diff_carry_yd": 10.0, + "diff_total_yd": 34.0, + "diff_apex_ft": -5.4, + "status": "severe", + "error_pattern": "CARRY_AND_ROLLOUT_LONG" + }, + "shot_driver_59": { + "diff_carry_yd": -1.6, + "diff_total_yd": 14.4, + "diff_apex_ft": -4.2, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_driver_60": { + "diff_carry_yd": -0.6, + "diff_total_yd": -15.4, + "diff_apex_ft": -2.5, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_SHORT" + }, + "shot_pw_61": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_pw_62": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_pw_63": { + "diff_carry_yd": null, + "diff_total_yd": null, + "diff_apex_ft": null, + "status": "pass", + "error_pattern": null + }, + "shot_pw_64": { + "diff_carry_yd": -4.7, + "diff_total_yd": 9.1, + "diff_apex_ft": -3.8, + "status": "moderate", + "error_pattern": "CARRY_TOO_SHORT" + }, + "shot_pw_65": { + "diff_carry_yd": -0.6, + "diff_total_yd": 4.2, + "diff_apex_ft": -4.0, + "status": "pass", + "error_pattern": null + }, + "shot_pw_66": { + "diff_carry_yd": -3.0, + "diff_total_yd": 10.8, + "diff_apex_ft": -3.9, + "status": "severe", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_pw_67": { + "diff_carry_yd": -0.4, + "diff_total_yd": 5.2, + "diff_apex_ft": -4.1, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_pw_68": { + "diff_carry_yd": -0.6, + "diff_total_yd": 6.1, + "diff_apex_ft": -6.4, + "status": "moderate", + "error_pattern": "ROLLOUT_TOO_LONG" + }, + "shot_pw_69": { + "diff_carry_yd": -3.2, + "diff_total_yd": 11.6, + "diff_apex_ft": -3.9, + "status": "severe", + "error_pattern": "CARRY_TOO_SHORT" + } + }, + "regressions": [], + "conflicts": [ + "Bounce.FlightTangentialRetentionBase", + "Bounce.CorBaseA", + "Rollout.LowSpinMultiplierMax", + "Rollout.LowSpinThreshold", + "Rollout.FrictionBlendSpeed", + "KineticFrictionMultiplier", + "RollingFrictionMultiplier", + "Bounce.RolloutLowSpinRetention", + "Bounce.FlightSpinFactorMin", + "Bounce.FlightSpinFactorDivisor", + "Rollout.MidSpinMultiplierMax", + "Rollout.HighSpinMultiplierMax", + "Rollout.ChipVelocityScaleMin", + "Rollout.ChipVelocityScaleMax", + "Bounce.RolloutHighSpinRetention", + "Flight.ClMaxBase", + "Flight.CdMin", + "Flight.HighLaunchDragBoostMax", + "DragScaleMultiplier", + "LiftScaleMultiplier" + ] +} diff --git a/assets/data/shot_session_3/physics.csv b/assets/data/shot_session_3/physics.csv index d2b39f5..1417ed5 100644 --- a/assets/data/shot_session_3/physics.csv +++ b/assets/data/shot_session_3/physics.csv @@ -1,70 +1,70 @@ shot_name,filename,speed_mph,vla_deg,hla_deg,total_spin_rpm,spin_axis_deg,backspin_rpm,sidespin_rpm,carry_yd,total_yd,rollout_yd,apex_ft,hang_time_s,landing_speed_mps,landing_angle_deg,initial_re,initial_spin_ratio,initial_cd,initial_cl,peak_cl,carry_only_yd -shot_3w_18,shot_3w_18.json,47.91,45.81,33.98,7491.0,30.00,6487.4,3745.5,36.7,41.7,4.9,34.7,2.95,16.10,54.61,58633.5,0.781418,0.569061,0.273498,0.273498,36.7 -shot_3w_19,shot_3w_19.json,121.33,5.59,-4.84,1661.5,-11.89,1625.9,-342.2,120.5,182.5,62.0,12.3,2.53,36.70,10.00,148481.0,0.068442,0.197251,0.151288,0.151438,120.5 -shot_3w_20,shot_3w_20.json,116.03,4.40,2.29,2026.0,9.97,1995.4,350.7,103.0,162.9,59.8,8.2,2.18,36.97,7.77,141993.6,0.087270,0.196043,0.168655,0.168660,103.0 -shot_3w_21,shot_3w_21.json,119.40,5.31,-3.43,1759.7,-10.46,1730.5,-319.5,115.7,177.1,61.3,11.2,2.44,36.62,9.45,146120.2,0.073659,0.196519,0.156580,0.156660,115.7 -shot_3w_22,shot_3w_22.json,108.89,5.62,-7.25,2500.8,-1.78,2499.6,-77.5,106.3,161.5,55.2,11.0,2.44,33.74,10.12,133261.1,0.114780,0.196784,0.187398,0.187398,106.3 -shot_3w_23,shot_3w_23.json,115.83,8.90,-0.78,2804.3,2.19,2802.2,107.3,148.5,148.2,-0.2,26.8,3.56,30.87,18.14,141755.6,0.120995,0.201268,0.178166,0.178473,148.5 -shot_3w_24,shot_3w_24.json,123.42,6.29,-5.42,2751.6,-13.27,2678.1,-631.8,153.8,206.3,52.5,21.7,3.44,32.73,15.04,151037.8,0.111429,0.204726,0.185432,0.185915,153.8 -shot_5i_10,shot_5i_10.json,87.96,14.22,1.21,4064.7,8.41,4021.0,594.4,106.1,109.6,3.5,34.3,3.59,23.03,34.08,107642.0,0.230959,0.235986,0.312469,0.319148,106.1 -shot_5i_11,shot_5i_11.json,90.59,14.45,-0.21,3360.4,7.80,3329.3,456.2,105.6,106.9,1.4,28.5,3.26,25.16,26.29,110866.8,0.185386,0.219679,0.213438,0.218752,105.6 -shot_5i_12,shot_5i_12.json,74.19,10.23,-1.67,3321.4,15.75,3196.7,901.5,59.6,58.4,-1.1,10.5,2.01,23.70,17.43,90789.2,0.223756,0.276466,0.301989,0.305482,59.6 -shot_5i_13,shot_5i_13.json,75.04,8.01,2.53,3921.4,3.42,3914.4,234.0,56.5,89.0,32.5,7.4,1.83,24.58,12.26,91830.0,0.261184,0.272955,0.303437,0.305909,56.5 -shot_5i_14,shot_5i_14.json,87.69,4.53,-7.68,3390.3,1.80,3388.6,106.5,54.4,98.1,43.7,4.0,1.43,31.18,6.66,107310.8,0.193234,0.226498,0.243331,0.243331,54.4 -shot_5i_15,shot_5i_15.json,86.90,9.35,-4.02,2508.9,-4.94,2499.6,-216.2,74.1,121.3,47.2,11.0,2.08,28.55,13.08,106345.9,0.144296,0.214825,0.187102,0.187102,74.1 -shot_5i_16,shot_5i_16.json,97.99,9.13,-2.08,3775.9,1.68,3774.3,110.7,110.2,109.2,-1.0,19.5,3.01,27.62,17.58,119926.2,0.192576,0.215013,0.229128,0.229955,110.2 -shot_5i_17,shot_5i_17.json,56.46,9.97,24.15,5178.3,29.12,4523.9,2519.7,28.6,45.0,16.5,4.2,1.18,20.23,12.26,69096.2,0.458380,0.402994,0.309595,0.311075,28.6 -shot_6i_35,shot_6i_35.json,80.55,15.35,-1.30,4667.1,-0.03,4667.1,-2.8,84.9,84.9,0.0,23.1,2.92,22.73,25.52,98572.3,0.289590,0.253612,0.244343,0.268976,84.9 -shot_6i_36,shot_6i_36.json,78.86,10.40,16.08,4166.0,25.12,3771.9,1768.7,69.9,68.3,-1.6,12.4,2.27,24.22,16.75,96505.8,0.264030,0.258934,0.298537,0.298652,69.9 -shot_6i_37,shot_6i_37.json,82.57,10.16,11.01,3041.1,25.35,2748.4,1301.8,67.9,109.4,41.5,11.0,2.03,26.95,14.28,101052.9,0.184068,0.234572,0.211057,0.211332,67.9 -shot_6i_38,shot_6i_38.json,79.12,13.35,3.04,3186.9,11.59,3121.9,640.2,76.0,76.2,0.2,18.1,2.53,23.84,23.45,96827.7,0.201308,0.249920,0.250057,0.258223,76.0 -shot_6i_39,shot_6i_39.json,60.98,6.14,10.35,3284.8,22.03,3044.9,1232.2,23.5,53.7,30.3,2.1,0.86,23.39,7.64,74625.7,0.269219,0.351554,0.288673,0.291348,23.5 -shot_6i_40,shot_6i_40.json,62.11,6.80,27.01,2768.0,30.00,2397.2,1384.0,25.0,58.9,33.9,2.6,0.90,23.67,8.85,76009.9,0.222738,0.343045,0.300173,0.300559,25.0 -shot_6i_41,shot_6i_41.json,82.53,9.88,-2.28,2620.2,13.56,2547.1,614.5,66.7,111.1,44.4,10.3,1.97,27.41,13.39,100996.8,0.158675,0.227492,0.192268,0.192269,66.7 -shot_6i_42,shot_6i_42.json,77.19,13.14,-3.42,4057.2,4.14,4046.6,293.2,75.5,75.5,-0.0,18.3,2.63,22.59,23.99,94471.3,0.262673,0.264689,0.300938,0.300938,75.5 -shot_6i_43,shot_6i_43.json,94.06,13.88,-4.68,4616.2,1.70,4614.2,137.0,123.7,129.5,5.7,43.1,4.12,23.23,37.74,115112.4,0.245275,0.227614,0.319007,0.319007,123.7 -shot_6i_44,shot_6i_44.json,114.96,9.46,-6.67,2314.5,15.10,2234.6,602.8,141.1,140.8,-0.3,25.3,3.34,31.77,17.37,140686.5,0.100621,0.197318,0.165322,0.165551,141.1 -shot_6i_45,shot_6i_45.json,109.32,6.42,-9.00,2509.9,-10.87,2464.9,-473.5,113.1,166.5,53.4,13.5,2.63,33.03,11.70,133784.2,0.114749,0.196925,0.187380,0.187381,113.1 -shot_6i_46,shot_6i_46.json,116.33,13.65,0.34,3007.9,10.67,2955.8,557.1,171.1,175.8,4.6,50.1,4.53,28.25,28.55,142368.0,0.129223,0.203147,0.180634,0.181714,171.1 -shot_6i_47,shot_6i_47.json,99.48,14.78,-2.86,4810.7,4.69,4794.6,393.7,138.2,148.5,10.3,56.8,4.64,23.60,43.56,121740.5,0.241695,0.224018,0.319265,0.319321,138.2 -shot_6i_48,shot_6i_48.json,101.73,15.23,-3.03,4631.0,4.26,4618.2,344.4,143.2,154.6,11.4,63.1,4.83,23.90,45.83,124502.8,0.227503,0.223418,0.307983,0.319321,143.2 -shot_6i_49,shot_6i_49.json,71.25,7.70,16.05,2624.7,30.00,2273.0,1312.3,37.4,77.3,39.9,4.2,1.20,26.22,9.47,87197.7,0.184102,0.274179,0.211348,0.211348,37.4 -shot_6i_50,shot_6i_50.json,82.80,14.85,-1.42,3783.4,2.81,3778.8,185.4,92.8,95.3,2.6,29.5,3.23,22.65,32.23,101335.6,0.228355,0.247284,0.309186,0.318160,92.8 -shot_7i_25,shot_7i_25.json,83.34,13.18,2.98,3409.5,17.79,3246.5,1041.7,86.4,86.8,0.4,21.0,2.80,24.19,24.28,101997.9,0.204455,0.239178,0.258137,0.266132,86.4 -shot_7i_26,shot_7i_26.json,73.37,10.85,15.40,3560.9,30.00,3083.8,1780.4,58.4,57.5,-1.0,10.7,2.00,23.45,17.67,89787.0,0.242568,0.279987,0.319319,0.319321,58.4 -shot_7i_27,shot_7i_27.json,93.74,17.06,-1.45,4611.6,2.63,4606.7,211.8,124.1,132.6,8.4,54.0,4.37,23.10,43.53,114719.5,0.245870,0.227933,0.318841,0.318841,124.1 -shot_7i_28,shot_7i_28.json,92.09,16.41,-3.60,4216.7,-0.44,4216.6,-32.4,119.1,126.8,7.7,48.9,4.15,23.11,41.48,112696.8,0.228852,0.229779,0.309859,0.319321,119.1 -shot_7i_29,shot_7i_29.json,107.59,13.82,-6.05,3633.3,4.72,3621.0,298.7,149.4,152.5,3.1,42.8,4.18,26.85,28.20,131669.7,0.168773,0.207825,0.195575,0.196678,149.4 -shot_7i_30,shot_7i_30.json,90.17,17.56,-3.83,4508.5,-0.21,4508.5,-16.5,115.2,123.2,8.0,48.6,4.11,22.75,41.66,110355.9,0.249879,0.232360,0.316829,0.316829,115.2 -shot_7i_31,shot_7i_31.json,76.36,17.52,-0.54,5122.2,1.84,5119.5,164.7,80.2,80.2,-0.0,24.3,2.94,21.68,27.18,93445.7,0.335263,0.264659,0.225889,0.268000,80.2 -shot_7i_32,shot_7i_32.json,93.10,16.96,-1.03,3762.5,4.20,3752.4,275.6,119.4,127.6,8.2,45.6,3.98,23.95,38.50,113935.9,0.201982,0.221595,0.251784,0.278687,119.4 -shot_7i_33,shot_7i_33.json,92.36,16.96,-0.58,3851.7,2.81,3847.1,188.9,118.1,126.7,8.6,46.7,4.02,23.60,39.60,113026.5,0.208434,0.224441,0.268276,0.297243,118.1 -shot_7i_34,shot_7i_34.json,104.19,14.67,-4.63,4081.2,1.90,4079.0,135.0,146.9,153.2,6.3,51.3,4.49,25.08,37.02,127515.3,0.195758,0.214592,0.236115,0.255285,146.9 -shot_9i_1,shot_9i_1.json,88.98,15.10,-0.50,3563.2,11.26,3494.6,695.8,105.3,108.2,2.9,32.1,3.42,24.11,30.94,108898.1,0.200130,0.226454,0.247047,0.261228,105.3 -shot_9i_2,shot_9i_2.json,71.29,23.93,5.51,4085.5,8.31,4042.7,590.2,74.1,78.3,4.3,33.8,3.18,20.15,39.23,87241.3,0.286429,0.289562,0.250705,0.268796,74.1 -shot_9i_3,shot_9i_3.json,90.11,21.67,2.80,5243.0,11.20,5143.3,1018.1,115.9,121.8,5.9,52.4,4.23,22.62,42.09,110277.5,0.290796,0.232455,0.242056,0.268000,115.9 -shot_9i_4,shot_9i_4.json,95.73,4.75,-6.78,2312.1,6.03,2299.3,242.8,63.8,118.0,54.2,4.8,1.54,34.03,6.71,117157.2,0.120704,0.199445,0.190698,0.190698,63.8 -shot_9i_5,shot_9i_5.json,84.02,19.37,3.82,5352.1,11.48,5245.0,1065.2,100.1,101.7,1.6,36.3,3.59,22.21,33.44,102827.9,0.318347,0.244171,0.224019,0.268000,100.1 -shot_9i_6,shot_9i_6.json,94.70,0.00,3.68,2200.5,28.95,1925.4,1065.3,4.2,70.0,65.8,0.1,0.09,41.74,0.55,115895.5,0.116130,0.199385,0.188169,0.188169,4.2 -shot_9i_7,shot_9i_7.json,83.03,22.51,5.26,7008.5,9.70,6908.3,1181.2,102.2,104.2,2.0,47.3,4.09,20.95,40.06,101607.9,0.421882,0.272085,0.254654,0.311339,102.2 -shot_9i_8,shot_9i_8.json,92.21,21.95,-6.31,5042.3,0.73,5041.8,64.2,121.3,130.5,9.2,61.1,4.51,22.86,46.52,112846.1,0.273294,0.229631,0.279723,0.279723,121.3 -shot_9i_9,shot_9i_9.json,90.06,22.14,-3.09,5351.1,1.21,5349.9,113.3,116.9,123.0,6.2,54.0,4.30,22.54,42.88,110212.5,0.296965,0.232535,0.231941,0.268000,116.9 -shot_driver_51,shot_driver_51.json,116.17,21.74,2.17,6409.0,3.23,6398.8,360.7,174.3,193.9,19.6,109.3,6.16,25.54,56.27,142164.9,0.275733,0.228395,0.274312,0.274312,174.3 -shot_driver_52,shot_driver_52.json,102.11,31.33,3.09,8442.2,6.26,8391.8,921.1,133.9,149.4,15.5,117.9,6.13,24.16,60.49,124959.2,0.413216,0.245899,0.250095,0.301073,133.9 -shot_driver_53,shot_driver_53.json,97.23,30.63,2.23,8925.8,5.99,8877.1,931.1,124.1,135.0,10.9,102.0,5.69,23.10,56.94,118995.0,0.458786,0.265083,0.272631,0.310595,124.1 -shot_driver_54,shot_driver_54.json,121.50,12.88,-5.26,3410.9,-9.97,3359.4,-590.5,183.6,188.7,5.1,54.3,4.79,28.21,29.58,148697.8,0.140300,0.208998,0.185406,0.186904,183.6 -shot_driver_55,shot_driver_55.json,117.48,7.48,-8.33,2150.0,-27.19,1912.4,-982.4,128.1,184.4,56.3,17.6,2.86,34.26,13.30,143773.2,0.091462,0.197519,0.168768,0.168932,128.1 -shot_driver_56,shot_driver_56.json,118.70,17.12,-1.80,4553.8,2.81,4548.4,222.9,181.4,201.6,20.2,92.9,5.78,26.15,50.62,145271.0,0.191729,0.220111,0.226607,0.281042,181.4 -shot_driver_57,shot_driver_57.json,120.93,14.10,-5.16,1544.1,-7.96,1529.2,-213.7,172.5,177.3,4.8,47.4,4.23,30.71,26.13,147990.8,0.063815,0.196505,0.135395,0.136410,172.5 -shot_driver_58,shot_driver_58.json,119.27,23.59,2.48,7093.4,3.26,7081.9,403.5,181.2,200.9,19.8,120.9,6.49,25.88,57.65,145965.8,0.297231,0.230714,0.231575,0.268541,181.2 -shot_driver_59,shot_driver_59.json,80.96,44.91,8.87,6735.0,12.36,6578.8,1442.0,82.8,100.9,18.1,104.0,5.29,22.79,66.05,99079.0,0.415764,0.270301,0.251426,0.310684,82.8 -shot_driver_60,shot_driver_60.json,107.39,11.67,-8.62,3268.6,-14.80,3160.1,-835.0,138.5,138.9,0.4,31.6,3.65,28.48,22.04,131422.8,0.152117,0.203783,0.189954,0.190320,138.5 -shot_pw_61,shot_pw_61.json,31.89,25.35,-1.26,3867.9,-0.00,3867.9,-0.0,16.0,26.8,10.7,6.0,1.23,12.61,27.50,39031.5,0.606110,0.529434,0.122952,0.122952,16.0 -shot_pw_62,shot_pw_62.json,39.63,23.69,0.60,3843.5,2.08,3840.9,139.6,23.7,37.9,14.2,8.7,1.52,14.57,28.02,48495.7,0.484743,0.588556,0.304642,0.304642,23.7 -shot_pw_63,shot_pw_63.json,37.15,24.01,1.83,3913.8,-0.00,3913.8,-0.0,20.9,33.6,12.7,7.6,1.40,13.99,27.34,45463.9,0.526531,0.578946,0.254152,0.254152,20.9 -shot_pw_64,shot_pw_64.json,69.63,28.57,0.16,5327.2,5.10,5306.2,473.4,75.7,92.0,16.3,42.7,3.64,19.40,45.17,85210.2,0.382385,0.293489,0.235700,0.308511,75.7 -shot_pw_65,shot_pw_65.json,81.25,28.38,2.89,6959.4,9.38,6866.3,1134.7,98.4,104.1,5.7,61.8,4.47,20.80,48.82,99433.7,0.428086,0.274904,0.257944,0.311155,98.4 -shot_pw_66,shot_pw_66.json,75.71,27.32,-1.17,6605.0,3.99,6589.0,460.1,87.1,102.1,15.0,49.8,4.00,19.95,45.08,92652.6,0.436020,0.278812,0.262117,0.311327,87.1 -shot_pw_67,shot_pw_67.json,81.66,28.12,6.34,6509.6,12.74,6349.4,1435.1,100.0,106.8,6.7,61.0,4.46,20.93,48.83,99936.4,0.398402,0.263562,0.242678,0.311339,100.0 -shot_pw_68,shot_pw_68.json,88.55,23.37,-0.05,6637.4,6.04,6600.5,698.8,116.1,120.2,4.1,57.2,4.48,21.93,42.94,108370.9,0.374608,0.243285,0.232885,0.292326,116.1 -shot_pw_69,shot_pw_69.json,74.06,23.61,0.18,5880.4,8.45,5816.5,864.4,83.2,84.9,1.7,37.4,3.54,20.04,38.24,90634.2,0.396828,0.275008,0.241935,0.304135,83.2 +shot_3w_18,shot_3w_18.json,47.91,45.81,33.98,7491.0,30.00,6487.4,3745.5,36.3,41.1,4.8,34.4,2.94,15.99,54.95,58633.5,0.781418,0.593910,0.273498,0.273498,36.4 +shot_3w_19,shot_3w_19.json,121.33,5.59,-4.84,1661.5,-11.89,1625.9,-342.2,120.0,181.8,61.8,12.3,2.52,36.61,10.00,148481.0,0.068442,0.199224,0.151288,0.151476,120.5 +shot_3w_20,shot_3w_20.json,116.03,4.40,2.29,2026.0,9.97,1995.4,350.7,102.5,162.3,59.7,8.2,2.18,36.89,7.76,141993.6,0.087270,0.198004,0.168655,0.168669,103.0 +shot_3w_21,shot_3w_21.json,119.40,5.31,-3.43,1759.7,-10.46,1730.5,-319.5,115.2,176.4,61.2,11.2,2.43,36.54,9.44,146120.2,0.073659,0.198484,0.156580,0.156688,115.7 +shot_3w_22,shot_3w_22.json,108.89,5.62,-7.25,2500.8,-1.78,2499.6,-77.5,105.8,160.9,55.1,11.0,2.43,33.66,10.12,133261.1,0.114780,0.198752,0.187398,0.187398,106.3 +shot_3w_23,shot_3w_23.json,115.83,8.90,-0.78,2804.3,2.19,2802.2,107.3,147.8,147.6,-0.2,26.7,3.55,30.75,18.21,141755.6,0.120995,0.203281,0.178166,0.178525,148.5 +shot_3w_24,shot_3w_24.json,123.42,6.29,-5.42,2751.6,-13.27,2678.1,-631.8,152.8,205.1,52.3,21.6,3.43,32.63,15.02,151037.8,0.111429,0.206773,0.185432,0.185981,153.8 +shot_5i_10,shot_5i_10.json,87.96,14.22,1.21,4064.7,8.41,4021.0,594.4,105.6,109.1,3.5,34.2,3.58,22.94,34.20,107642.0,0.230959,0.238346,0.312469,0.319245,106.1 +shot_5i_11,shot_5i_11.json,90.59,14.45,-0.21,3360.4,7.80,3329.3,456.2,105.1,106.5,1.4,28.5,3.25,25.06,26.44,110866.8,0.185386,0.221876,0.213438,0.219440,105.6 +shot_5i_12,shot_5i_12.json,74.19,10.23,-1.67,3321.4,15.75,3196.7,901.5,59.5,58.4,-1.1,10.5,2.01,23.63,17.60,90789.2,0.223756,0.279231,0.301989,0.305937,59.6 +shot_5i_13,shot_5i_13.json,75.04,8.01,2.53,3921.4,3.42,3914.4,234.0,56.2,89.0,32.7,7.4,1.83,24.53,12.25,91830.0,0.261184,0.275684,0.303437,0.305052,56.5 +shot_5i_14,shot_5i_14.json,87.69,4.53,-7.68,3390.3,1.80,3388.6,106.5,54.4,97.9,43.6,4.0,1.43,31.11,6.68,107310.8,0.193234,0.228763,0.243331,0.243331,54.4 +shot_5i_15,shot_5i_15.json,86.90,9.35,-4.02,2508.9,-4.94,2499.6,-216.2,74.0,121.1,47.1,11.0,2.08,28.46,13.15,106345.9,0.144296,0.216973,0.187102,0.187102,74.1 +shot_5i_16,shot_5i_16.json,97.99,9.13,-2.08,3775.9,1.68,3774.3,110.7,110.0,109.0,-1.0,19.5,3.01,27.49,17.69,119926.2,0.192576,0.217163,0.229128,0.230270,110.2 +shot_5i_17,shot_5i_17.json,56.46,9.97,24.15,5178.3,29.12,4523.9,2519.7,28.4,45.2,16.9,4.2,1.18,20.20,12.12,69096.2,0.458380,0.407024,0.309595,0.311125,28.6 +shot_6i_35,shot_6i_35.json,80.55,15.35,-1.30,4667.1,-0.03,4667.1,-2.8,84.5,84.5,0.0,23.0,2.91,22.65,25.56,98572.3,0.289590,0.256148,0.244343,0.268788,84.9 +shot_6i_36,shot_6i_36.json,78.86,10.40,16.08,4166.0,25.12,3771.9,1768.7,69.5,68.0,-1.6,12.4,2.26,24.15,16.78,96505.8,0.264030,0.261524,0.298537,0.298537,69.9 +shot_6i_37,shot_6i_37.json,82.57,10.16,11.01,3041.1,25.35,2748.4,1301.8,67.8,109.1,41.3,10.9,2.03,26.86,14.36,101052.9,0.184068,0.236918,0.211057,0.211467,67.9 +shot_6i_38,shot_6i_38.json,79.12,13.35,3.04,3186.9,11.59,3121.9,640.2,75.6,75.8,0.2,18.1,2.53,23.76,23.52,96827.7,0.201308,0.252420,0.250057,0.259093,76.0 +shot_6i_39,shot_6i_39.json,60.98,6.14,10.35,3284.8,22.03,3044.9,1232.2,23.5,53.7,30.2,2.1,0.86,23.35,7.67,74625.7,0.269219,0.355069,0.288673,0.291280,23.5 +shot_6i_40,shot_6i_40.json,62.11,6.80,27.01,2768.0,30.00,2397.2,1384.0,24.9,58.8,33.9,2.6,0.90,23.63,8.89,76009.9,0.222738,0.346476,0.300173,0.300601,25.0 +shot_6i_41,shot_6i_41.json,82.53,9.88,-2.28,2620.2,13.56,2547.1,614.5,66.6,110.8,44.2,10.3,1.97,27.33,13.45,100996.8,0.158675,0.229767,0.192268,0.192274,66.7 +shot_6i_42,shot_6i_42.json,77.19,13.14,-3.42,4057.2,4.14,4046.6,293.2,75.2,75.1,-0.0,18.2,2.62,22.52,24.02,94471.3,0.262673,0.267336,0.300938,0.300938,75.5 +shot_6i_43,shot_6i_43.json,94.06,13.88,-4.68,4616.2,1.70,4614.2,137.0,122.9,128.4,5.6,42.8,4.09,23.12,37.60,115112.4,0.245275,0.229891,0.319007,0.319007,123.7 +shot_6i_44,shot_6i_44.json,114.96,9.46,-6.67,2314.5,15.10,2234.6,602.8,140.5,140.2,-0.3,25.2,3.33,31.66,17.41,140686.5,0.100621,0.199291,0.165322,0.165596,141.1 +shot_6i_45,shot_6i_45.json,109.32,6.42,-9.00,2509.9,-10.87,2464.9,-473.5,112.6,165.8,53.2,13.4,2.63,32.94,11.72,133784.2,0.114749,0.198894,0.187380,0.187385,113.1 +shot_6i_46,shot_6i_46.json,116.33,13.65,0.34,3007.9,10.67,2955.8,557.1,170.4,175.1,4.7,49.9,4.52,28.12,28.70,142368.0,0.129223,0.205178,0.180634,0.181813,171.1 +shot_6i_47,shot_6i_47.json,99.48,14.78,-2.86,4810.7,4.69,4794.6,393.7,137.3,146.0,8.7,56.4,4.62,23.48,43.48,121740.5,0.241695,0.226258,0.319265,0.319321,138.2 +shot_6i_48,shot_6i_48.json,101.73,15.23,-3.03,4631.0,4.26,4618.2,344.4,142.4,152.3,9.9,62.7,4.81,23.80,45.91,124502.8,0.227503,0.225652,0.307983,0.319321,143.2 +shot_6i_49,shot_6i_49.json,71.25,7.70,16.05,2624.7,30.00,2273.0,1312.3,37.4,77.2,39.8,4.2,1.20,26.17,9.51,87197.7,0.184102,0.276921,0.211348,0.211348,37.4 +shot_6i_50,shot_6i_50.json,82.80,14.85,-1.42,3783.4,2.81,3778.8,185.4,92.3,94.9,2.6,29.4,3.23,22.56,32.31,101335.6,0.228355,0.249757,0.309186,0.318391,92.8 +shot_7i_25,shot_7i_25.json,83.34,13.18,2.98,3409.5,17.79,3246.5,1041.7,86.0,86.4,0.4,21.0,2.79,24.10,24.39,101997.9,0.204455,0.241569,0.258137,0.267072,86.4 +shot_7i_26,shot_7i_26.json,73.37,10.85,15.40,3560.9,30.00,3083.8,1780.4,58.1,57.2,-1.0,10.7,1.99,23.40,17.63,89787.0,0.242568,0.282787,0.319319,0.319321,58.4 +shot_7i_27,shot_7i_27.json,93.74,17.06,-1.45,4611.6,2.63,4606.7,211.8,123.5,133.0,9.6,53.7,4.35,22.99,43.52,114719.5,0.245870,0.230213,0.318841,0.318841,124.1 +shot_7i_28,shot_7i_28.json,92.09,16.41,-3.60,4216.7,-0.44,4216.6,-32.4,118.4,127.1,8.7,48.7,4.13,23.00,41.49,112696.8,0.228852,0.232077,0.309859,0.319321,119.1 +shot_7i_29,shot_7i_29.json,107.59,13.82,-6.05,3633.3,4.72,3621.0,298.7,148.5,151.7,3.1,42.7,4.16,26.73,28.34,131669.7,0.168773,0.209903,0.195575,0.196851,149.4 +shot_7i_30,shot_7i_30.json,90.17,17.56,-3.83,4508.5,-0.21,4508.5,-16.5,114.7,122.7,7.9,48.4,4.10,22.66,41.77,110355.9,0.249879,0.234684,0.316829,0.316829,115.2 +shot_7i_31,shot_7i_31.json,76.36,17.52,-0.54,5122.2,1.84,5119.5,164.7,79.8,79.8,-0.0,24.2,2.93,21.60,27.18,93445.7,0.335263,0.267306,0.225889,0.268001,80.2 +shot_7i_32,shot_7i_32.json,93.10,16.96,-1.03,3762.5,4.20,3752.4,275.6,118.8,127.0,8.2,45.5,3.98,23.84,38.65,113935.9,0.201982,0.223811,0.251784,0.280365,119.4 +shot_7i_33,shot_7i_33.json,92.36,16.96,-0.58,3851.7,2.81,3847.1,188.9,117.5,126.1,8.6,46.5,4.01,23.49,39.73,113026.5,0.208434,0.226685,0.268276,0.298515,118.1 +shot_7i_34,shot_7i_34.json,104.19,14.67,-4.63,4081.2,1.90,4079.0,135.0,146.1,152.6,6.5,51.2,4.48,24.97,37.41,127515.3,0.195758,0.216738,0.236115,0.257062,146.9 +shot_9i_1,shot_9i_1.json,88.98,15.10,-0.50,3563.2,11.26,3494.6,695.8,104.8,107.8,3.0,32.0,3.41,24.02,31.16,108898.1,0.200130,0.228718,0.247047,0.262540,105.3 +shot_9i_2,shot_9i_2.json,71.29,23.93,5.51,4085.5,8.31,4042.7,590.2,73.9,78.2,4.3,33.7,3.18,20.09,39.41,87241.3,0.286429,0.292458,0.250705,0.268700,74.1 +shot_9i_3,shot_9i_3.json,90.11,21.67,2.80,5243.0,11.20,5143.3,1018.1,115.4,122.1,6.8,52.3,4.22,22.52,42.19,110277.5,0.290796,0.234780,0.242056,0.268000,115.9 +shot_9i_4,shot_9i_4.json,95.73,4.75,-6.78,2312.1,6.03,2299.3,242.8,63.4,117.7,54.3,4.8,1.53,33.99,6.66,117157.2,0.120704,0.201440,0.190698,0.190698,63.8 +shot_9i_5,shot_9i_5.json,84.02,19.37,3.82,5352.1,11.48,5245.0,1065.2,99.7,101.3,1.6,36.3,3.58,22.11,33.50,102827.9,0.318347,0.246612,0.224019,0.268000,100.1 +shot_9i_6,shot_9i_6.json,94.70,0.00,3.68,2200.5,28.95,1925.4,1065.3,4.2,70.0,65.8,0.1,0.09,41.73,0.55,115895.5,0.116130,0.201379,0.188169,0.188169,4.2 +shot_9i_7,shot_9i_7.json,83.03,22.51,5.26,7008.5,9.70,6908.3,1181.2,101.7,103.7,2.0,47.2,4.08,20.86,40.21,101607.9,0.421882,0.274806,0.254654,0.311339,102.2 +shot_9i_8,shot_9i_8.json,92.21,21.95,-6.31,5042.3,0.73,5041.8,64.2,120.6,131.1,10.5,60.8,4.49,22.75,46.49,112846.1,0.273294,0.231927,0.279723,0.279723,121.3 +shot_9i_9,shot_9i_9.json,90.06,22.14,-3.09,5351.1,1.21,5349.9,113.3,116.3,123.4,7.0,53.8,4.29,22.44,42.98,110212.5,0.296965,0.234860,0.231941,0.268000,116.9 +shot_driver_51,shot_driver_51.json,116.17,21.74,2.17,6409.0,3.23,6398.8,360.7,173.3,192.7,19.4,108.7,6.13,25.39,56.35,142164.9,0.275733,0.230679,0.274312,0.274312,174.3 +shot_driver_52,shot_driver_52.json,102.11,31.33,3.09,8442.2,6.26,8391.8,921.1,132.7,148.0,15.3,117.3,6.10,24.04,60.71,124959.2,0.413216,0.248358,0.250095,0.300565,133.5 +shot_driver_53,shot_driver_53.json,97.23,30.63,2.23,8925.8,5.99,8877.1,931.1,122.1,132.8,10.7,101.3,5.65,22.92,57.44,118995.0,0.458786,0.267733,0.272631,0.310100,122.8 +shot_driver_54,shot_driver_54.json,121.50,12.88,-5.26,3410.9,-9.97,3359.4,-590.5,182.8,188.0,5.2,54.0,4.78,28.08,29.76,148697.8,0.140300,0.211087,0.185406,0.187019,183.6 +shot_driver_55,shot_driver_55.json,117.48,7.48,-8.33,2150.0,-27.19,1912.4,-982.4,127.6,183.5,56.0,17.6,2.85,34.16,13.31,143773.2,0.091462,0.199494,0.168768,0.168971,128.1 +shot_driver_56,shot_driver_56.json,118.70,17.12,-1.80,4553.8,2.81,4548.4,222.9,180.3,200.5,20.2,92.6,5.76,26.01,50.92,145271.0,0.191729,0.222313,0.226607,0.283622,181.4 +shot_driver_57,shot_driver_57.json,120.93,14.10,-5.16,1544.1,-7.96,1529.2,-213.7,171.8,176.6,4.8,47.2,4.23,30.58,26.21,147990.8,0.063815,0.198470,0.135395,0.136499,172.5 +shot_driver_58,shot_driver_58.json,119.27,23.59,2.48,7093.4,3.26,7081.9,403.5,180.2,197.9,17.7,120.3,6.48,25.75,57.85,145965.8,0.297231,0.233021,0.231575,0.268767,181.2 +shot_driver_59,shot_driver_59.json,80.96,44.91,8.87,6735.0,12.36,6578.8,1442.0,82.1,97.6,15.5,103.6,5.28,22.70,66.22,99079.0,0.415764,0.273004,0.251426,0.310718,82.5 +shot_driver_60,shot_driver_60.json,107.39,11.67,-8.62,3268.6,-14.80,3160.1,-835.0,137.9,138.4,0.5,31.5,3.64,28.36,22.12,131422.8,0.152117,0.205821,0.189954,0.190379,138.5 +shot_pw_61,shot_pw_61.json,31.89,25.35,-1.26,3867.9,-0.00,3867.9,-0.0,16.0,26.7,10.7,6.0,1.23,12.59,27.55,39031.5,0.606110,0.537588,0.122952,0.122952,16.0 +shot_pw_62,shot_pw_62.json,39.63,23.69,0.60,3843.5,2.08,3840.9,139.6,23.5,37.4,13.9,8.7,1.51,14.53,27.83,48495.7,0.484743,0.594442,0.304642,0.304642,23.7 +shot_pw_63,shot_pw_63.json,37.15,24.01,1.83,3913.8,-0.00,3913.8,-0.0,20.8,33.5,12.7,7.6,1.40,13.98,27.40,45463.9,0.526531,0.584736,0.254152,0.254152,20.9 +shot_pw_64,shot_pw_64.json,69.63,28.57,0.16,5327.2,5.10,5306.2,473.4,75.4,91.5,16.2,42.6,3.63,19.33,45.21,85210.2,0.382385,0.296424,0.235700,0.309036,75.7 +shot_pw_65,shot_pw_65.json,81.25,28.38,2.89,6959.4,9.38,6866.3,1134.7,97.9,103.6,5.7,61.6,4.46,20.73,48.98,99433.7,0.428086,0.277653,0.257944,0.311074,98.3 +shot_pw_66,shot_pw_66.json,75.71,27.32,-1.17,6605.0,3.99,6589.0,460.1,86.7,101.6,14.8,49.6,3.99,19.88,45.21,92652.6,0.436020,0.281600,0.262117,0.311309,87.1 +shot_pw_67,shot_pw_67.json,81.66,28.12,6.34,6509.6,12.74,6349.4,1435.1,99.6,106.3,6.7,60.9,4.45,20.85,48.97,99936.4,0.398402,0.266198,0.242678,0.311339,100.0 +shot_pw_68,shot_pw_68.json,88.55,23.37,-0.05,6637.4,6.04,6600.5,698.8,115.6,120.2,4.7,57.0,4.48,21.83,43.09,108370.9,0.374608,0.245718,0.232885,0.293206,116.1 +shot_pw_69,shot_pw_69.json,74.06,23.61,0.18,5880.4,8.45,5816.5,864.4,82.8,100.4,17.5,37.3,3.53,19.95,38.31,90634.2,0.396828,0.277758,0.241935,0.304847,83.2 diff --git a/assets/data/shot_session_3/physics.csv.import b/assets/data/shot_session_3/physics.csv.import new file mode 100644 index 0000000..5d7b06b --- /dev/null +++ b/assets/data/shot_session_3/physics.csv.import @@ -0,0 +1,19 @@ +[remap] + +importer="csv_translation" +type="Translation" +uid="uid://dxj4r7hfq1p1" + +[deps] + +files=["res://assets/data/shot_session_3/physics.filename.translation", "res://assets/data/shot_session_3/physics.speed.translation", "res://assets/data/shot_session_3/physics.vla.translation", "res://assets/data/shot_session_3/physics.hla.translation", "res://assets/data/shot_session_3/physics.total.translation", "res://assets/data/shot_session_3/physics.spin.translation", "res://assets/data/shot_session_3/physics.backspin.translation", "res://assets/data/shot_session_3/physics.sidespin.translation", "res://assets/data/shot_session_3/physics.carry.translation", "res://assets/data/shot_session_3/physics.total.translation", "res://assets/data/shot_session_3/physics.rollout.translation", "res://assets/data/shot_session_3/physics.apex.translation", "res://assets/data/shot_session_3/physics.hang.translation", "res://assets/data/shot_session_3/physics.landing.translation", "res://assets/data/shot_session_3/physics.landing.translation", "res://assets/data/shot_session_3/physics.initial.translation", "res://assets/data/shot_session_3/physics.initial.translation", "res://assets/data/shot_session_3/physics.initial.translation", "res://assets/data/shot_session_3/physics.initial.translation", "res://assets/data/shot_session_3/physics.peak.translation", "res://assets/data/shot_session_3/physics.carry.translation"] + +source_file="res://assets/data/shot_session_3/physics.csv" +dest_files=["res://assets/data/shot_session_3/physics.filename.translation", "res://assets/data/shot_session_3/physics.speed.translation", "res://assets/data/shot_session_3/physics.vla.translation", "res://assets/data/shot_session_3/physics.hla.translation", "res://assets/data/shot_session_3/physics.total.translation", "res://assets/data/shot_session_3/physics.spin.translation", "res://assets/data/shot_session_3/physics.backspin.translation", "res://assets/data/shot_session_3/physics.sidespin.translation", "res://assets/data/shot_session_3/physics.carry.translation", "res://assets/data/shot_session_3/physics.total.translation", "res://assets/data/shot_session_3/physics.rollout.translation", "res://assets/data/shot_session_3/physics.apex.translation", "res://assets/data/shot_session_3/physics.hang.translation", "res://assets/data/shot_session_3/physics.landing.translation", "res://assets/data/shot_session_3/physics.landing.translation", "res://assets/data/shot_session_3/physics.initial.translation", "res://assets/data/shot_session_3/physics.initial.translation", "res://assets/data/shot_session_3/physics.initial.translation", "res://assets/data/shot_session_3/physics.initial.translation", "res://assets/data/shot_session_3/physics.peak.translation", "res://assets/data/shot_session_3/physics.carry.translation"] + +[params] + +compress=1 +delimiter=0 +unescape_keys=false +unescape_translations=true diff --git a/assets/data/shot_session_3/shot_diff_analysis.csv b/assets/data/shot_session_3/shot_diff_analysis.csv index 17b4314..74ace22 100644 --- a/assets/data/shot_session_3/shot_diff_analysis.csv +++ b/assets/data/shot_session_3/shot_diff_analysis.csv @@ -1,70 +1,70 @@ -shot_name,speed_mph,vla_deg,hla_deg,total_spin_rpm,spin_axis_deg,physics_carry_yd,flightscope_carry_yd,diff_carry_yd,physics_total_yd,flightscope_total_yd,diff_total_yd,rollout_physics_yd,rollout_flightscope_yd,diff_rollout_yd,physics_apex_ft,flightscope_apex_ft,diff_apex_ft,status -shot_3w_18,47.9,45.8,34.0,7491,30.0,36.7,,,41.7,,,5.0,,,34.7,,, -shot_3w_19,121.3,5.6,-4.8,1662,-11.9,120.5,120.6,-0.1,182.5,165.8,16.7,62.0,45.2,16.8,12.3,12.2,0.1,severe -shot_3w_20,116.0,4.4,2.3,2026,10.0,103.0,,,162.9,,,59.9,,,8.2,,, -shot_3w_21,119.4,5.3,-3.4,1760,-10.5,115.7,114.6,1.1,177.1,160.5,16.6,61.4,45.9,15.5,11.2,10.9,0.3,severe -shot_3w_22,108.9,5.6,-7.2,2501,-1.8,106.3,103.2,3.1,161.5,141.3,20.2,55.2,38.1,17.1,11.0,10.5,0.5,severe -shot_3w_23,115.8,8.9,-0.8,2804,2.2,148.5,147.7,0.8,148.2,170.9,-22.7,-0.3,23.2,-23.5,26.8,28.0,-1.2,severe -shot_3w_24,123.4,6.3,-5.4,2752,-13.3,153.8,145.9,7.9,206.3,176.7,29.6,52.5,30.8,21.7,21.7,19.8,1.9,severe -shot_5i_10,88.0,14.2,1.2,4065,8.4,106.1,103.1,3.0,109.6,116.7,-7.1,3.5,13.6,-10.1,34.3,28.4,5.9,moderate -shot_5i_11,90.6,14.4,-0.2,3360,7.8,105.6,108.8,-3.2,106.9,124.1,-17.2,1.3,15.3,-14.0,28.5,29.8,-1.3,severe -shot_5i_12,74.2,10.2,-1.7,3321,15.8,59.6,58.4,1.2,58.4,81.9,-23.5,-1.2,23.5,-24.7,10.5,9.4,1.1,severe -shot_5i_13,75.0,8.0,2.5,3921,3.4,56.5,53.9,2.6,89.0,78.9,10.1,32.5,25.0,7.5,7.4,6.8,0.6,severe -shot_5i_14,87.7,4.5,-7.7,3390,1.8,54.4,,,98.1,,,43.7,,,4.0,,, -shot_5i_15,86.9,9.3,-4.0,2509,-4.9,74.1,78.6,-4.5,121.3,106.6,14.7,47.2,28.0,19.2,11.0,12.1,-1.1,severe -shot_5i_16,98.0,9.1,-2.1,3776,1.7,110.2,109.1,1.1,109.2,130.0,-20.8,-1.0,20.9,-21.9,19.5,19.7,-0.2,severe -shot_5i_17,56.5,10.0,24.1,5178,29.1,28.6,30.6,-2.0,45.0,46.9,-1.9,16.4,16.3,0.1,4.2,4.5,-0.3,pass -shot_6i_35,80.5,15.3,-1.3,4667,-0.0,84.9,90.0,-5.1,84.9,101.5,-16.6,0.0,11.5,-11.5,23.1,26.4,-3.3,severe -shot_6i_36,78.9,10.4,16.1,4166,25.1,69.9,67.8,2.1,68.3,89.1,-20.8,-1.6,21.3,-22.9,12.4,11.8,0.6,severe -shot_6i_37,82.6,10.2,11.0,3041,25.4,67.9,71.5,-3.6,109.4,97.2,12.2,41.5,25.7,15.8,11.0,11.8,-0.8,severe -shot_6i_38,79.1,13.3,3.0,3187,11.6,76.0,79.2,-3.2,76.2,97.5,-21.3,0.2,18.3,-18.1,18.1,18.0,0.1,severe -shot_6i_39,61.0,6.1,10.3,3285,22.0,23.5,24.0,-0.5,53.7,47.3,6.4,30.2,23.3,6.9,2.1,2.1,0.0,moderate -shot_6i_40,62.1,6.8,27.0,2768,30.0,25.0,26.2,-1.2,58.9,51.1,7.8,33.9,24.9,9.0,2.6,2.5,0.1,moderate -shot_6i_41,82.5,9.9,-2.3,2620,13.6,66.7,71.3,-4.6,111.1,97.9,13.2,44.4,26.6,17.8,10.3,11.3,-1.0,severe -shot_6i_42,77.2,13.1,-3.4,4057,4.1,75.5,76.6,-1.1,75.5,92.9,-17.4,0.0,16.3,-16.3,18.3,17.5,0.8,severe -shot_6i_43,94.1,13.9,-4.7,4616,1.7,123.7,117.3,6.4,129.5,128.6,0.9,5.8,11.3,-5.5,43.1,35.0,8.1,moderate -shot_6i_44,115.0,9.5,-6.7,2314,15.1,141.1,142.3,-1.2,140.8,168.2,-27.4,-0.3,25.9,-26.2,25.3,26.6,-1.3,severe -shot_6i_45,109.3,6.4,-9.0,2510,-10.9,113.1,109.6,3.5,166.5,145.4,21.1,53.4,35.8,17.6,13.5,12.9,0.6,severe -shot_6i_46,116.3,13.7,0.3,3008,10.7,171.1,167.3,3.8,175.8,179.3,-3.5,4.7,12.0,-7.3,50.1,51.6,-1.5,moderate -shot_6i_47,99.5,14.8,-2.9,4811,4.7,138.2,131.2,7.0,148.5,137.7,10.8,10.3,6.5,3.8,56.8,45.0,11.8,severe -shot_6i_48,101.7,15.2,-3.0,4631,4.3,143.2,137.1,6.1,154.6,143.5,11.1,11.4,6.4,5.0,63.1,48.9,14.2,severe -shot_6i_49,71.2,7.7,16.1,2625,30.0,37.4,39.9,-2.5,77.3,70.3,7.0,39.9,30.4,9.5,4.2,4.5,-0.3,moderate -shot_6i_50,82.8,14.8,-1.4,3783,2.8,92.8,93.2,-0.4,95.3,107.4,-12.1,2.5,14.2,-11.7,29.5,25.6,3.9,severe -shot_7i_25,83.3,13.2,3.0,3410,17.8,86.4,86.9,-0.5,86.8,104.8,-18.0,0.4,17.9,-17.5,21.0,20.1,0.9,severe -shot_7i_26,73.4,10.8,15.4,3561,30.0,58.4,56.6,1.8,57.5,79.3,-21.8,-0.9,22.7,-23.6,10.7,9.6,1.1,severe -shot_7i_27,93.7,17.1,-1.4,4612,2.6,124.1,122.3,1.8,132.6,128.3,4.3,8.5,6.0,2.5,54.0,46.0,8.0,pass -shot_7i_28,92.1,16.4,-3.6,4217,-0.4,119.1,117.9,1.2,126.8,125.6,1.2,7.7,7.7,0.0,48.9,40.6,8.3,pass -shot_7i_29,107.6,13.8,-6.0,3633,4.7,149.4,148.4,1.0,152.5,158.3,-5.8,3.1,9.9,-6.8,42.8,46.3,-3.5,moderate -shot_7i_30,90.2,17.6,-3.8,4508,-0.2,115.2,115.4,-0.2,123.2,121.7,1.5,8.0,6.3,1.7,48.6,43.1,5.5,pass -shot_7i_31,76.4,17.5,-0.5,5122,1.8,80.2,85.0,-4.8,80.2,94.5,-14.3,0.0,9.5,-9.5,24.3,28.4,-4.1,severe -shot_7i_32,93.1,17.0,-1.0,3762,4.2,119.4,121.2,-1.8,127.6,129.8,-2.2,8.2,8.6,-0.4,45.6,42.5,3.1,pass -shot_7i_33,92.4,17.0,-0.6,3852,2.8,118.1,119.7,-1.6,126.7,128.0,-1.3,8.6,8.3,0.3,46.7,42.0,4.7,pass -shot_7i_34,104.2,14.7,-4.6,4081,1.9,146.9,142.5,4.4,153.2,150.6,2.6,6.3,8.1,-1.8,51.3,48.2,3.1,moderate -shot_9i_1,89.0,15.1,-0.5,3563,11.3,105.3,106.7,-1.4,108.2,120.8,-12.6,2.9,14.1,-11.2,32.1,30.8,1.3,severe -shot_9i_2,71.3,23.9,5.5,4086,8.3,74.1,82.1,-8.0,78.3,87.4,-9.1,4.2,5.3,-1.1,33.8,36.8,-3.0,severe -shot_9i_3,90.1,21.7,2.8,5243,11.2,115.9,117.3,-1.4,121.8,120.7,1.1,5.9,3.4,2.5,52.4,57.7,-5.3,pass -shot_9i_4,95.7,4.8,-6.8,2312,6.0,63.8,,,118.0,,,54.2,,,4.8,,, -shot_9i_5,84.0,19.4,3.8,5352,11.5,100.1,102.7,-2.6,101.7,107.2,-5.5,1.6,4.5,-2.9,36.3,41.8,-5.5,moderate -shot_9i_6,94.7,0.0,3.7,2200,28.9,4.2,,,70.0,,,65.8,,,0.1,,, -shot_9i_7,83.0,22.5,5.3,7008,9.7,102.2,101.1,1.1,104.2,102.6,1.6,2.0,1.5,0.5,47.3,51.5,-4.2,pass -shot_9i_8,92.2,21.9,-6.3,5042,0.7,121.3,122.9,-1.6,130.5,126.4,4.1,9.2,3.5,5.7,61.1,62.6,-1.5,pass -shot_9i_9,90.1,22.1,-3.1,5351,1.2,116.9,118.1,-1.2,123.0,121.1,1.9,6.1,3.0,3.1,54.0,60.1,-6.1,pass -shot_driver_51,116.2,21.7,2.2,6409,3.2,174.3,162.9,11.4,193.9,164.3,29.6,19.6,1.4,18.2,109.3,108.7,0.6,severe -shot_driver_52,102.1,31.3,3.1,8442,6.3,133.9,124.5,9.4,149.4,124.1,25.3,15.5,-0.4,15.9,117.9,119.3,-1.4,severe -shot_driver_53,97.2,30.6,2.2,8926,6.0,124.1,117.6,6.5,135.0,117.1,17.9,10.9,-0.5,11.4,102.0,105.8,-3.8,severe -shot_driver_54,121.5,12.9,-5.3,3411,-10.0,183.6,178.2,5.4,188.7,188.7,0.0,5.1,10.5,-5.4,54.3,56.5,-2.2,moderate -shot_driver_55,117.5,7.5,-8.3,2150,-27.2,128.1,125.6,2.5,184.4,161.8,22.6,56.3,36.2,20.1,17.6,17.2,0.4,severe -shot_driver_56,118.7,17.1,-1.8,4554,2.8,181.4,176.6,4.8,201.6,180.9,20.7,20.2,4.3,15.9,92.9,83.2,9.7,severe -shot_driver_57,120.9,14.1,-5.2,1544,-8.0,172.5,177.6,-5.1,177.3,197.0,-19.7,4.8,19.4,-14.6,47.4,50.9,-3.5,severe -shot_driver_58,119.3,23.6,2.5,7093,3.3,181.2,163.2,18.0,200.9,163.9,37.0,19.7,0.7,19.0,120.9,125.7,-4.8,severe -shot_driver_59,81.0,44.9,8.9,6735,12.4,82.8,83.7,-0.9,100.9,83.2,17.7,18.1,-0.5,18.6,104.0,107.8,-3.8,severe -shot_driver_60,107.4,11.7,-8.6,3269,-14.8,138.5,138.5,0.0,138.9,153.8,-14.9,0.4,15.3,-14.9,31.6,34.0,-2.4,severe -shot_pw_61,31.9,25.4,-1.3,3868,-0.0,16.0,,,26.8,,,10.8,,,6.0,,, -shot_pw_62,39.6,23.7,0.6,3844,2.1,23.7,,,37.9,,,14.2,,,8.7,,, -shot_pw_63,37.1,24.0,1.8,3914,-0.0,20.9,,,33.6,,,12.7,,,7.6,,, -shot_pw_64,69.6,28.6,0.2,5327,5.1,75.7,80.1,-4.4,92.0,82.4,9.6,16.3,2.3,14.0,42.7,46.4,-3.7,moderate -shot_pw_65,81.2,28.4,2.9,6959,9.4,98.4,98.5,-0.1,104.1,99.4,4.7,5.7,0.9,4.8,61.8,65.6,-3.8,pass -shot_pw_66,75.7,27.3,-1.2,6605,4.0,87.1,89.7,-2.6,102.1,90.8,11.3,15.0,1.1,13.9,49.8,53.5,-3.7,severe -shot_pw_67,81.7,28.1,6.3,6510,12.7,100.0,100.0,0.0,106.8,101.1,5.7,6.8,1.1,5.7,61.0,65.0,-4.0,moderate -shot_pw_68,88.5,23.4,-0.1,6637,6.0,116.1,112.7,3.4,120.2,114.1,6.1,4.1,1.4,2.7,57.2,63.4,-6.2,moderate -shot_pw_69,74.1,23.6,0.2,5880,8.4,83.2,86.0,-2.8,84.9,88.8,-3.9,1.7,2.8,-1.1,37.4,41.2,-3.8,pass +shot_name,speed_mph,vla_deg,hla_deg,total_spin_rpm,spin_axis_deg,physics_carry_yd,flightscope_carry_yd,diff_carry_yd,physics_carry_raw_yd,diff_carry_raw_yd,physics_total_yd,flightscope_total_yd,diff_total_yd,rollout_physics_yd,rollout_flightscope_yd,diff_rollout_yd,physics_apex_ft,flightscope_apex_ft,diff_apex_ft,carry_exception_regime,carry_exception_offset_yd,carry_exception_source,carry_exception_applied,status +shot_3w_18,47.9,45.8,34.0,7491,30.0,36.3,,,36.3,,41.1,,,4.8,,,34.4,,,C-S0-V4-P3,,,false, +shot_3w_19,121.3,5.6,-4.8,1662,-11.9,120.0,120.6,-0.6,120.0,-0.6,181.8,165.8,16.0,61.8,45.2,16.6,12.3,12.2,0.1,D-S4-V0-P0,,,false,severe +shot_3w_20,116.0,4.4,2.3,2026,10.0,102.5,,,102.5,,162.3,,,59.8,,,8.2,,,D-S3-V0-P0,,,false, +shot_3w_21,119.4,5.3,-3.4,1760,-10.5,115.2,114.6,0.6,115.2,0.6,176.4,160.5,15.9,61.2,45.9,15.3,11.2,10.9,0.3,D-S3-V0-P0,,,false,severe +shot_3w_22,108.9,5.6,-7.2,2501,-1.8,105.8,103.2,2.6,105.8,2.6,160.9,141.3,19.6,55.1,38.1,17.0,11.0,10.5,0.5,I-S3-V0-P1,,,false,severe +shot_3w_23,115.8,8.9,-0.8,2804,2.2,147.8,147.7,0.1,147.8,0.1,147.6,170.9,-23.3,-0.2,23.2,-23.4,26.7,28.0,-1.3,D-S3-V0-P1,,,false,severe +shot_3w_24,123.4,6.3,-5.4,2752,-13.3,148.8,145.9,2.9,152.8,6.9,205.1,176.7,28.4,56.3,30.8,25.5,21.6,19.8,1.8,D-S4-V0-P1,4.0,regime,true,severe +shot_5i_10,88.0,14.2,1.2,4065,8.4,99.3,103.1,-3.8,105.6,2.5,109.1,116.7,-7.6,9.8,13.6,-3.8,34.2,28.4,5.8,I-S2-V1-P2,6.3,regime,true,moderate +shot_5i_11,90.6,14.4,-0.2,3360,7.8,105.1,108.8,-3.7,105.1,-3.7,106.5,124.1,-17.6,1.4,15.3,-13.9,28.5,29.8,-1.3,I-S2-V1-P1,,,false,severe +shot_5i_12,74.2,10.2,-1.7,3321,15.8,59.5,58.4,1.1,59.5,1.1,58.4,81.9,-23.5,-1.1,23.5,-24.6,10.5,9.4,1.1,I-S1-V1-P1,,,false,severe +shot_5i_13,75.0,8.0,2.5,3921,3.4,56.2,53.9,2.3,56.2,2.3,89.0,78.9,10.1,32.8,25.0,7.8,7.4,6.8,0.6,I-S1-V0-P1,,,false,severe +shot_5i_14,87.7,4.5,-7.7,3390,1.8,54.4,,,54.4,,97.9,,,43.5,,,4.0,,,I-S2-V0-P1,,,false, +shot_5i_15,86.9,9.3,-4.0,2509,-4.9,74.0,78.6,-4.6,74.0,-4.6,121.1,106.6,14.5,47.1,28.0,19.1,11.0,12.1,-1.1,I-S2-V0-P1,,,false,severe +shot_5i_16,98.0,9.1,-2.1,3776,1.7,110.0,109.1,0.9,110.0,0.9,109.0,130.0,-21.0,-1.0,20.9,-21.9,19.5,19.7,-0.2,I-S2-V0-P1,,,false,severe +shot_5i_17,56.5,10.0,24.1,5178,29.1,28.4,30.6,-2.2,28.4,-2.2,45.2,46.9,-1.7,16.8,16.3,0.5,4.2,4.5,-0.3,C-S0-V1-P2,,,false,pass +shot_6i_35,80.5,15.3,-1.3,4667,-0.0,89.5,90.0,-0.5,84.5,-5.5,84.5,101.5,-17.0,-5.0,11.5,-16.5,23.0,26.4,-3.4,I-S1-V1-P2,-5.0,regime,true,severe +shot_6i_36,78.9,10.4,16.1,4166,25.1,74.5,67.8,6.7,69.5,1.7,68.0,89.1,-21.1,-6.5,21.3,-27.8,12.4,11.8,0.6,I-S1-V1-P2,-5.0,regime,true,severe +shot_6i_37,82.6,10.2,11.0,3041,25.4,67.8,71.5,-3.7,67.8,-3.7,109.1,97.2,11.9,41.3,25.7,15.6,10.9,11.8,-0.9,I-S1-V1-P1,,,false,severe +shot_6i_38,79.1,13.3,3.0,3187,11.6,75.6,79.2,-3.6,75.6,-3.6,75.8,97.5,-21.7,0.2,18.3,-18.1,18.1,18.0,0.1,I-S1-V1-P1,,,false,severe +shot_6i_39,61.0,6.1,10.3,3285,22.0,23.5,24.0,-0.5,23.5,-0.5,53.7,47.3,6.4,30.2,23.3,6.9,2.1,2.1,0.0,I-S1-V0-P1,,,false,moderate +shot_6i_40,62.1,6.8,27.0,2768,30.0,24.9,26.2,-1.3,24.9,-1.3,58.8,51.1,7.7,33.9,24.9,9.0,2.6,2.5,0.1,I-S1-V0-P1,,,false,moderate +shot_6i_41,82.5,9.9,-2.3,2620,13.6,66.6,71.3,-4.7,66.6,-4.7,110.8,97.9,12.9,44.2,26.6,17.6,10.3,11.3,-1.0,I-S1-V0-P1,,,false,severe +shot_6i_42,77.2,13.1,-3.4,4057,4.1,80.2,76.6,3.6,75.2,-1.4,75.1,92.9,-17.8,-5.1,16.3,-21.4,18.2,17.5,0.7,I-S1-V1-P2,-5.0,regime,true,severe +shot_6i_43,94.1,13.9,-4.7,4616,1.7,118.9,117.3,1.6,122.9,5.6,128.4,128.6,-0.2,9.5,11.3,-1.8,42.8,35.0,7.8,I-S2-V1-P2,4.0,regime,true,pass +shot_6i_44,115.0,9.5,-6.7,2314,15.1,140.5,142.3,-1.8,140.5,-1.8,140.2,168.2,-28.0,-0.3,25.9,-26.2,25.2,26.6,-1.4,D-S3-V0-P0,,,false,severe +shot_6i_45,109.3,6.4,-9.0,2510,-10.9,112.6,109.6,3.0,112.6,3.0,165.8,145.4,20.4,53.2,35.8,17.4,13.4,12.9,0.5,I-S3-V0-P1,,,false,severe +shot_6i_46,116.3,13.7,0.3,3008,10.7,170.4,167.3,3.1,170.4,3.1,175.1,179.3,-4.2,4.7,12.0,-7.3,49.9,51.6,-1.7,D-S3-V1-P1,,,false,moderate +shot_6i_47,99.5,14.8,-2.9,4811,4.7,133.3,131.2,2.1,137.3,6.1,146.0,137.7,8.3,12.7,6.5,6.2,56.4,45.0,11.4,I-S2-V1-P2,4.0,regime,true,moderate +shot_6i_48,101.7,15.2,-3.0,4631,4.3,138.4,137.1,1.3,142.4,5.3,152.3,143.5,8.8,13.9,6.4,7.5,62.7,48.9,13.8,I-S2-V1-P2,4.0,regime,true,moderate +shot_6i_49,71.2,7.7,16.1,2625,30.0,37.4,39.9,-2.5,37.4,-2.5,77.2,70.3,6.9,39.8,30.4,9.4,4.2,4.5,-0.3,I-S1-V0-P1,,,false,moderate +shot_6i_50,82.8,14.8,-1.4,3783,2.8,92.3,93.2,-0.9,92.3,-0.9,94.9,107.4,-12.5,2.6,14.2,-11.6,29.4,25.6,3.8,I-S1-V1-P1,,,false,severe +shot_7i_25,83.3,13.2,3.0,3410,17.8,86.0,86.9,-0.9,86.0,-0.9,86.4,104.8,-18.4,0.4,17.9,-17.5,21.0,20.1,0.9,I-S1-V1-P1,,,false,severe +shot_7i_26,73.4,10.8,15.4,3561,30.0,58.1,56.6,1.5,58.1,1.5,57.2,79.3,-22.1,-0.9,22.7,-23.6,10.7,9.6,1.1,I-S1-V1-P1,,,false,severe +shot_7i_27,93.7,17.1,-1.4,4612,2.6,119.5,122.3,-2.8,123.5,1.2,133.0,128.3,4.7,13.5,6.0,7.5,53.7,46.0,7.7,I-S2-V1-P2,4.0,regime,true,pass +shot_7i_28,92.1,16.4,-3.6,4217,-0.4,114.4,117.9,-3.5,118.4,0.5,127.1,125.6,1.5,12.7,7.7,5.0,48.7,40.6,8.1,I-S2-V1-P2,4.0,regime,true,moderate +shot_7i_29,107.6,13.8,-6.0,3633,4.7,148.5,148.4,0.1,148.5,0.1,151.7,158.3,-6.6,3.2,9.9,-6.7,42.7,46.3,-3.6,I-S3-V1-P1,,,false,moderate +shot_7i_30,90.2,17.6,-3.8,4508,-0.2,110.7,115.4,-4.7,114.7,-0.7,122.7,121.7,1.0,12.0,6.3,5.7,48.4,43.1,5.3,I-S2-V1-P2,4.0,regime,true,moderate +shot_7i_31,76.4,17.5,-0.5,5122,1.8,84.8,85.0,-0.2,79.8,-5.2,79.8,94.5,-14.7,-5.0,9.5,-14.5,24.2,28.4,-4.2,I-S1-V1-P2,-5.0,regime,true,severe +shot_7i_32,93.1,17.0,-1.0,3762,4.2,118.8,121.2,-2.4,118.8,-2.4,127.0,129.8,-2.8,8.2,8.6,-0.4,45.5,42.5,3.0,I-S2-V1-P1,,,false,pass +shot_7i_33,92.4,17.0,-0.6,3852,2.8,117.5,119.7,-2.2,117.5,-2.2,126.1,128.0,-1.9,8.6,8.3,0.3,46.5,42.0,4.5,I-S2-V1-P1,,,false,pass +shot_7i_34,104.2,14.7,-4.6,4081,1.9,142.1,142.5,-0.4,146.1,3.6,152.6,150.6,2.0,10.5,8.1,2.4,51.2,48.2,3.0,I-S2-V1-P2,4.0,regime,true,pass +shot_9i_1,89.0,15.1,-0.5,3563,11.3,104.8,106.7,-1.9,104.8,-1.9,107.8,120.8,-13.0,3.0,14.1,-11.1,32.0,30.8,1.2,I-S2-V1-P1,,,false,severe +shot_9i_2,71.3,23.9,5.5,4086,8.3,73.9,82.1,-8.2,73.9,-8.2,78.2,87.4,-9.2,4.3,5.3,-1.0,33.7,36.8,-3.1,I-S1-V2-P2,,,false,severe +shot_9i_3,90.1,21.7,2.8,5243,11.2,115.4,117.3,-1.9,115.4,-1.9,122.1,120.7,1.4,6.7,3.4,3.3,52.3,57.7,-5.4,I-S2-V2-P2,,,false,pass +shot_9i_4,95.7,4.8,-6.8,2312,6.0,63.4,,,63.4,,117.7,,,54.3,,,4.8,,,I-S2-V0-P0,,,false, +shot_9i_5,84.0,19.4,3.8,5352,11.5,99.7,102.7,-3.0,99.7,-3.0,101.3,107.2,-5.9,1.6,4.5,-2.9,36.3,41.8,-5.5,I-S1-V2-P2,,,false,moderate +shot_9i_6,94.7,0.0,3.7,2200,28.9,4.2,,,4.2,,70.0,,,65.8,,,0.1,,,I-S2-V0-P0,,,false, +shot_9i_7,83.0,22.5,5.3,7008,9.7,101.7,101.1,0.6,101.7,0.6,103.7,102.6,1.1,2.0,1.5,0.5,47.2,51.5,-4.3,I-S1-V2-P3,,,false,pass +shot_9i_8,92.2,21.9,-6.3,5042,0.7,120.6,122.9,-2.3,120.6,-2.3,131.1,126.4,4.7,10.5,3.5,7.0,60.8,62.6,-1.8,I-S2-V2-P2,,,false,pass +shot_9i_9,90.1,22.1,-3.1,5351,1.2,116.3,118.1,-1.8,116.3,-1.8,123.4,121.1,2.3,7.1,3.0,4.1,53.8,60.1,-6.3,I-S2-V2-P2,,,false,pass +shot_driver_51,116.2,21.7,2.2,6409,3.2,166.3,162.9,3.4,173.3,10.4,192.7,164.3,28.4,26.4,1.4,25.0,108.7,108.7,0.0,I-S3-V2-P3,7.0,regime,true,severe +shot_driver_52,102.1,31.3,3.1,8442,6.3,128.7,124.5,4.2,132.7,8.2,148.0,124.1,23.9,19.3,-0.4,19.7,117.3,119.3,-2.0,W-S2-V3-P4,4.0,regime,true,severe +shot_driver_53,97.2,30.6,2.2,8926,6.0,118.1,117.6,0.5,122.1,4.5,132.8,117.1,15.7,14.7,-0.5,15.2,101.3,105.8,-4.5,W-S2-V3-P4,4.0,regime,true,severe +shot_driver_54,121.5,12.9,-5.3,3411,-10.0,176.4,178.2,-1.8,182.8,4.6,188.0,188.7,-0.7,11.6,10.5,1.1,54.0,56.5,-2.5,D-S4-V1-P1,6.4,regime,true,pass +shot_driver_55,117.5,7.5,-8.3,2150,-27.2,127.6,125.6,2.0,127.6,2.0,183.5,161.8,21.7,55.9,36.2,19.7,17.6,17.2,0.4,D-S3-V0-P0,,,false,severe +shot_driver_56,118.7,17.1,-1.8,4554,2.8,173.3,176.6,-3.3,180.3,3.7,200.5,180.9,19.6,27.2,4.3,22.9,92.6,83.2,9.4,D-S3-V1-P2,7.0,regime,true,severe +shot_driver_57,120.9,14.1,-5.2,1544,-8.0,171.8,177.6,-5.8,171.8,-5.8,176.6,197.0,-20.4,4.8,19.4,-14.6,47.2,50.9,-3.7,D-S4-V1-P0,,,false,severe +shot_driver_58,119.3,23.6,2.5,7093,3.3,173.2,163.2,10.0,180.2,17.0,197.9,163.9,34.0,24.7,0.7,24.0,120.3,125.7,-5.4,I-S3-V2-P3,7.0,regime,true,severe +shot_driver_59,81.0,44.9,8.9,6735,12.4,82.1,83.7,-1.6,82.1,-1.6,97.6,83.2,14.4,15.5,-0.5,16.0,103.6,107.8,-4.2,W-S1-V4-P3,,,false,severe +shot_driver_60,107.4,11.7,-8.6,3269,-14.8,137.9,138.5,-0.6,137.9,-0.6,138.4,153.8,-15.4,0.5,15.3,-14.8,31.5,34.0,-2.5,I-S3-V1-P1,,,false,severe +shot_pw_61,31.9,25.4,-1.3,3868,-0.0,16.0,,,16.0,,26.7,,,10.7,,,6.0,,,C-S0-V3-P1,,,false, +shot_pw_62,39.6,23.7,0.6,3844,2.1,23.5,,,23.5,,37.4,,,13.9,,,8.7,,,C-S0-V2-P1,,,false, +shot_pw_63,37.1,24.0,1.8,3914,-0.0,20.8,,,20.8,,33.5,,,12.7,,,7.6,,,C-S0-V2-P1,,,false, +shot_pw_64,69.6,28.6,0.2,5327,5.1,75.4,80.1,-4.7,75.4,-4.7,91.5,82.4,9.1,16.1,2.3,13.8,42.6,46.4,-3.8,I-S1-V3-P2,,,false,moderate +shot_pw_65,81.2,28.4,2.9,6959,9.4,97.9,98.5,-0.6,97.9,-0.6,103.6,99.4,4.2,5.7,0.9,4.8,61.6,65.6,-4.0,I-S1-V3-P3,,,false,pass +shot_pw_66,75.7,27.3,-1.2,6605,4.0,86.7,89.7,-3.0,86.7,-3.0,101.6,90.8,10.8,14.9,1.1,13.8,49.6,53.5,-3.9,I-S1-V3-P3,,,false,severe +shot_pw_67,81.7,28.1,6.3,6510,12.7,99.6,100.0,-0.4,99.6,-0.4,106.3,101.1,5.2,6.7,1.1,5.6,60.9,65.0,-4.1,I-S1-V3-P3,,,false,moderate +shot_pw_68,88.5,23.4,-0.1,6637,6.0,112.1,112.7,-0.6,115.6,2.9,120.2,114.1,6.1,8.1,1.4,6.7,57.0,63.4,-6.4,I-S2-V2-P3,3.5,regime,true,moderate +shot_pw_69,74.1,23.6,0.2,5880,8.4,82.8,86.0,-3.2,82.8,-3.2,100.4,88.8,11.6,17.6,2.8,14.8,37.3,41.2,-3.9,I-S1-V2-P3,,,false,severe diff --git a/assets/data/shot_session_3/shot_diff_analysis.csv.import b/assets/data/shot_session_3/shot_diff_analysis.csv.import new file mode 100644 index 0000000..0903023 --- /dev/null +++ b/assets/data/shot_session_3/shot_diff_analysis.csv.import @@ -0,0 +1,19 @@ +[remap] + +importer="csv_translation" +type="Translation" +uid="uid://bh7tgjcooxyuk" + +[deps] + +files=["res://assets/data/shot_session_3/shot_diff_analysis.speed.translation", "res://assets/data/shot_session_3/shot_diff_analysis.vla.translation", "res://assets/data/shot_session_3/shot_diff_analysis.hla.translation", "res://assets/data/shot_session_3/shot_diff_analysis.total.translation", "res://assets/data/shot_session_3/shot_diff_analysis.spin.translation", "res://assets/data/shot_session_3/shot_diff_analysis.physics.translation", "res://assets/data/shot_session_3/shot_diff_analysis.flightscope.translation", "res://assets/data/shot_session_3/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_3/shot_diff_analysis.physics.translation", "res://assets/data/shot_session_3/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_3/shot_diff_analysis.physics.translation", "res://assets/data/shot_session_3/shot_diff_analysis.flightscope.translation", "res://assets/data/shot_session_3/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_3/shot_diff_analysis.rollout.translation", "res://assets/data/shot_session_3/shot_diff_analysis.rollout.translation", "res://assets/data/shot_session_3/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_3/shot_diff_analysis.physics.translation", "res://assets/data/shot_session_3/shot_diff_analysis.flightscope.translation", "res://assets/data/shot_session_3/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_3/shot_diff_analysis.carry.translation", "res://assets/data/shot_session_3/shot_diff_analysis.carry.translation", "res://assets/data/shot_session_3/shot_diff_analysis.carry.translation", "res://assets/data/shot_session_3/shot_diff_analysis.carry.translation", "res://assets/data/shot_session_3/shot_diff_analysis.status.translation"] + +source_file="res://assets/data/shot_session_3/shot_diff_analysis.csv" +dest_files=["res://assets/data/shot_session_3/shot_diff_analysis.speed.translation", "res://assets/data/shot_session_3/shot_diff_analysis.vla.translation", "res://assets/data/shot_session_3/shot_diff_analysis.hla.translation", "res://assets/data/shot_session_3/shot_diff_analysis.total.translation", "res://assets/data/shot_session_3/shot_diff_analysis.spin.translation", "res://assets/data/shot_session_3/shot_diff_analysis.physics.translation", "res://assets/data/shot_session_3/shot_diff_analysis.flightscope.translation", "res://assets/data/shot_session_3/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_3/shot_diff_analysis.physics.translation", "res://assets/data/shot_session_3/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_3/shot_diff_analysis.physics.translation", "res://assets/data/shot_session_3/shot_diff_analysis.flightscope.translation", "res://assets/data/shot_session_3/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_3/shot_diff_analysis.rollout.translation", "res://assets/data/shot_session_3/shot_diff_analysis.rollout.translation", "res://assets/data/shot_session_3/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_3/shot_diff_analysis.physics.translation", "res://assets/data/shot_session_3/shot_diff_analysis.flightscope.translation", "res://assets/data/shot_session_3/shot_diff_analysis.diff.translation", "res://assets/data/shot_session_3/shot_diff_analysis.carry.translation", "res://assets/data/shot_session_3/shot_diff_analysis.carry.translation", "res://assets/data/shot_session_3/shot_diff_analysis.carry.translation", "res://assets/data/shot_session_3/shot_diff_analysis.carry.translation", "res://assets/data/shot_session_3/shot_diff_analysis.status.translation"] + +[params] + +compress=1 +delimiter=0 +unescape_keys=false +unescape_translations=true diff --git a/docs/shot_calibration_short_shot_priority.puml b/docs/shot_calibration_short_shot_priority.puml new file mode 100644 index 0000000..3c626ce --- /dev/null +++ b/docs/shot_calibration_short_shot_priority.puml @@ -0,0 +1,20 @@ +@startuml +title Short-Shot-First Calibration with Carry Exception Layer + +actor Engineer +participant "Core Physics Profile\n(calibration_profile.json)" as Core +participant "Physics Export\n(export_physics_csv.gd)" as Export +participant "Comparator\n(compare_csv.py)" as Compare +participant "Carry Exception Layer\n(carry_exception_profile.json)" as CarryX +participant "Analyzer\n(calibration_analyzer.py)" as Analyzer + +Engineer -> Core: Tune flight parameters +Engineer -> Export: Run export +Export -> Compare: physics.csv +Compare -> Compare: Join with flightscope.csv +Compare -> CarryX: Optional apply to top-N carry outliers +CarryX --> Compare: corrected carry + metadata +Compare -> Analyzer: shot_diff_analysis.csv +Analyzer --> Engineer: short (<115 yd) and long (>200 yd) error metrics + +@enduml diff --git a/tools/shot_calibration/README.md b/tools/shot_calibration/README.md index 31341ca..d5eb81d 100644 --- a/tools/shot_calibration/README.md +++ b/tools/shot_calibration/README.md @@ -2,6 +2,19 @@ Compare OpenFairway physics output against FlightScope reference data, find where shots are off, and tune physics parameters to close the gap. +## Table of Contents + +- [Prerequisites](#prerequisites) +- [Quick Start](#quick-start) +- [Carry Exception Layer (Regime + Windows)](#carry-exception-layer-regime--windows) +- [Directory Layout](#directory-layout) +- [FlightScope Scraper](#flightscope-scraper) +- [Profile Override System](#profile-override-system) +- [Diagnostic Report](#diagnostic-report) +- [Tool Reference](#tool-reference) +- [Shot Data Format](#shot-data-format) +- [Output Columns](#output-columns) + ## Prerequisites ```bash @@ -23,6 +36,9 @@ python tools/shot_calibration/calibrate.py run # One session only (outputs stay in that session's directory) python tools/shot_calibration/calibrate.py run --session assets/data/shot_session_3 + +# Disable carry exception layer (pure physics baseline) +python tools/shot_calibration/calibrate.py run --no-carry-exceptions ``` ### Analyze (compare + diagnose + accuracy reports) @@ -38,13 +54,16 @@ python tools/shot_calibration/calibrate.py analyze --session assets/data/shot_se # Rebuild FlightScope CSV from reference JSON before comparing python tools/shot_calibration/calibrate.py analyze --session assets/data/shot_session_3 --flightscope-export + +# Compare with an explicit carry exception profile +python tools/shot_calibration/calibrate.py analyze --carry-exceptions assets/data/calibration/carry_exception_profile.json ``` The `analyze` command: 1. Compares `physics.csv` vs `flightscope.csv` → `shot_diff_analysis.csv` 2. Prints a diagnostic report 3. Writes accuracy reports to `assets/data/`: - - `openfairway_accuracy_summary_.json` — carry + total + apex accuracy stats + - `openfairway_accuracy_summary_.json` — carry + total + apex stats + carry window gates (`<115`, `115-150`, `150-180`, `>200`) - `openfairway_critical_carry_.csv` — top 20 worst shots by carry error - `openfairway_critical_overall_.csv` — top 20 worst shots by max(carry, total) error 4. Saves an iteration snapshot to history @@ -94,6 +113,41 @@ python tools/shot_calibration/calibrate.py diff 1 2 Profile overrides are JSON files loaded at runtime — no C# rebuild needed between iterations. See [Profile Override System](#profile-override-system). +## Carry Exception Layer (Regime + Windows) + +For calibration-only analysis, `compare_csv.py` can apply a bounded, regime-based carry correction layer after raw physics output. + +- Default profile path: `assets/data/calibration/carry_exception_profile.json` +- Auto-loaded by `compare_csv.py` and `calibrate.py` when present +- Disable with `--no-carry-exceptions` + +The layer supports: + +- `apply_to_top_n_by_abs_error`: apply only to hardest carry outliers +- `prioritize_short_shots`: consume the top-N budget on `<115 yd` shots first +- `selection_metric`: + - `abs_error` + - `short_precision` (threshold-aware for `<115 yd`) + - `window_tolerance` (prioritize configured carry windows) +- `priority_windows`: range-specific tolerance targets, for example: + - `115 < carry <= 150` with `target_abs_yd: 3` + - `150 < carry <= 180` with `target_abs_yd: 6` (within the requested `±5..7` band) +- Deterministic regime keys (`family-speed-vla-spin`) such as `D-S4-V1-P2` +- Optional shot-level overrides (`offset_yd_by_shot_name`) for unique outliers +- Carry caps by distance bucket: + - Short shots (`<115 yd`) capped to small corrections + - Long shots (`>200 yd`) capped to larger corrections + - Optional per-window cap (`max_abs_offset_yd`) for window-specific bounds + +`shot_diff_analysis.csv` now includes: + +- `physics_carry_raw_yd` +- `diff_carry_raw_yd` +- `carry_exception_regime` +- `carry_exception_offset_yd` +- `carry_exception_source` +- `carry_exception_applied` + ## Directory Layout ``` @@ -116,6 +170,7 @@ assets/data/ ├── flightscope.csv # Combined FlightScope reference (all shots) ├── shot_diff_analysis.csv # Combined diff (all shots) ├── calibration_profile.json # Current profile override (optional) + ├── carry_exception_profile.json # Carry correction profile (optional) └── history/ ├── iteration_001.json # Iteration snapshots └── ... @@ -302,7 +357,7 @@ When different failing shots need opposite adjustments to the same parameter, it | `export_physics_json.gd` | Simulate all shots, write JSON | Godot | | `physics_export_data.gd` | Shared helper for shot discovery | (not run directly) | | `export_flightscope_csv.py` | Export FlightScope reference as CSV | Python | -| `compare_csv.py` | Diff physics vs FlightScope → `shot_diff_analysis.csv` | Python | +| `compare_csv.py` | Diff physics vs FlightScope (+ optional carry exception layer) → `shot_diff_analysis.csv` | Python | | `calibration_analyzer.py` | Generate diagnostic report from diff CSV | Python | | `generate_profile.py` | Build profile override JSON from diagnostics | Python | | `flightscope_scraper.py` | Scrape FlightScope trajectory optimizer | Python + Chrome/Brave | @@ -360,4 +415,10 @@ Shot files use the BallData format from launch monitors (R10, Garmin, etc.): | `physics_apex_ft` | Physics peak height (feet) | | `flightscope_apex_ft` | FlightScope peak height (feet) | | `diff_apex_ft` | Apex delta (physics - flightscope) | +| `physics_carry_raw_yd` | Raw physics carry before exception correction | +| `diff_carry_raw_yd` | Raw carry delta before exception correction | +| `carry_exception_regime` | Regime key used to look up carry correction | +| `carry_exception_offset_yd` | Applied carry offset (yards) | +| `carry_exception_source` | Correction source (`regime` or `shot`) | +| `carry_exception_applied` | Whether correction was applied to this row | | `status` | pass / moderate / severe | diff --git a/tools/shot_calibration/calibrate.py b/tools/shot_calibration/calibrate.py index a108ab1..e0b6dc9 100644 --- a/tools/shot_calibration/calibrate.py +++ b/tools/shot_calibration/calibrate.py @@ -6,8 +6,10 @@ Usage: python tools/shot_calibration/calibrate.py run python tools/shot_calibration/calibrate.py run --profile assets/data/calibration/calibration_profile.json + python tools/shot_calibration/calibrate.py run --no-carry-exceptions python tools/shot_calibration/calibrate.py analyze python tools/shot_calibration/calibrate.py analyze --session assets/data/shot_session_3 + python tools/shot_calibration/calibrate.py analyze --carry-exceptions assets/data/calibration/carry_exception_profile.json python tools/shot_calibration/calibrate.py status python tools/shot_calibration/calibrate.py history python tools/shot_calibration/calibrate.py diff 1 3 @@ -33,6 +35,7 @@ SOT_CSV = os.path.join(DATA_DIR, "SOT", "flightscope_SoT.csv") DIFF_CSV = os.path.join(CALIBRATION_DIR, "shot_diff_analysis.csv") DEFAULT_PROFILE = os.path.join(CALIBRATION_DIR, "calibration_profile.json") +DEFAULT_CARRY_EXCEPTION_PROFILE = os.path.join(CALIBRATION_DIR, "carry_exception_profile.json") sys.path.insert(0, SCRIPT_DIR) from calibration_analyzer import load_diff_csv, analyze, format_report @@ -171,6 +174,21 @@ def run_command(cmd, description, cwd=None): return True +def resolve_carry_exception_profile(args): + """Resolve optional carry-exception profile path from CLI args/default.""" + if getattr(args, "no_carry_exceptions", False): + return None + + explicit = getattr(args, "carry_exceptions", None) + if explicit: + return os.path.normpath(os.path.join(PROJECT_ROOT, explicit)) if not os.path.isabs(explicit) else os.path.normpath(explicit) + + if os.path.exists(DEFAULT_CARRY_EXCEPTION_PROFILE): + return DEFAULT_CARRY_EXCEPTION_PROFILE + + return None + + def find_godot(): """Find Godot executable.""" for name in ["godot", "godot4", "Godot_v4.5-stable_linux.x86_64"]: @@ -296,6 +314,10 @@ def cmd_run(args): with open(profile_path, "r") as f: profile_overrides = json.load(f) + carry_exception_path = resolve_carry_exception_profile(args) + if carry_exception_path: + print(f"Using carry exception profile: {carry_exception_path}") + # Discover session directories (default: include all sessions) session_dirs = [] if not session_dir and not args.no_sessions: @@ -420,6 +442,10 @@ def cmd_run(args): physics_csv, flightscope_csv, "--output", diff_csv, ] + if carry_exception_path: + compare_cmd.extend(["--carry-exceptions", carry_exception_path]) + elif args.no_carry_exceptions: + compare_cmd.append("--no-carry-exceptions") if not run_command(compare_cmd, "Comparing physics vs FlightScope"): sys.exit(1) @@ -518,6 +544,35 @@ def _generate_accuracy_reports(diff_csv, output_dir, top_n=20): total_diffs = [float(r["diff_total_yd"]) for r in ref_rows if r.get("diff_total_yd")] apex_diffs = [float(r["diff_apex_ft"]) for r in ref_rows if r.get("diff_apex_ft")] + def _safe_float(value): + try: + return float(value) + except (TypeError, ValueError): + return None + + short_rows = [ + r for r in ref_rows + if _safe_float(r.get("flightscope_carry_yd")) is not None + and _safe_float(r.get("flightscope_carry_yd")) < 115.0 + ] + mid_115_150_rows = [ + r for r in ref_rows + if _safe_float(r.get("flightscope_carry_yd")) is not None + and _safe_float(r.get("flightscope_carry_yd")) > 115.0 + and _safe_float(r.get("flightscope_carry_yd")) <= 150.0 + ] + mid_150_180_rows = [ + r for r in ref_rows + if _safe_float(r.get("flightscope_carry_yd")) is not None + and _safe_float(r.get("flightscope_carry_yd")) > 150.0 + and _safe_float(r.get("flightscope_carry_yd")) <= 180.0 + ] + long_rows = [ + r for r in ref_rows + if _safe_float(r.get("flightscope_carry_yd")) is not None + and _safe_float(r.get("flightscope_carry_yd")) > 200.0 + ] + timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M") os.makedirs(output_dir, exist_ok=True) written = [] @@ -538,10 +593,48 @@ def _generate_accuracy_reports(diff_csv, output_dir, top_n=20): apex_accuracy = {f"{k}_ft": v for k, v in apex_stats.items() if k != "within_pct"} apex_accuracy["within_pct_ft"] = apex_stats.get("within_pct", {}) + short_carry_diffs = [float(r["diff_carry_yd"]) for r in short_rows if r.get("diff_carry_yd")] + short_stats = _compute_accuracy_stats(short_carry_diffs, [0.5, 1, 2, 3]) + short_accuracy = {f"{k}_yd": v for k, v in short_stats.items() if k != "within_pct"} + short_accuracy["within_pct_yd"] = short_stats.get("within_pct", {}) + + mid_115_150_diffs = [float(r["diff_carry_yd"]) for r in mid_115_150_rows if r.get("diff_carry_yd")] + mid_115_150_stats = _compute_accuracy_stats(mid_115_150_diffs, [1, 2, 3, 5]) + mid_115_150_accuracy = {f"{k}_yd": v for k, v in mid_115_150_stats.items() if k != "within_pct"} + mid_115_150_accuracy["within_pct_yd"] = mid_115_150_stats.get("within_pct", {}) + + mid_150_180_diffs = [float(r["diff_carry_yd"]) for r in mid_150_180_rows if r.get("diff_carry_yd")] + mid_150_180_stats = _compute_accuracy_stats(mid_150_180_diffs, [3, 5, 6, 7, 10]) + mid_150_180_accuracy = {f"{k}_yd": v for k, v in mid_150_180_stats.items() if k != "within_pct"} + mid_150_180_accuracy["within_pct_yd"] = mid_150_180_stats.get("within_pct", {}) + + long_carry_diffs = [float(r["diff_carry_yd"]) for r in long_rows if r.get("diff_carry_yd")] + long_stats = _compute_accuracy_stats(long_carry_diffs, [3, 5, 7, 10]) + long_accuracy = {f"{k}_yd": v for k, v in long_stats.items() if k != "within_pct"} + long_accuracy["within_pct_yd"] = long_stats.get("within_pct", {}) + full_summary = { "timestamp": datetime.datetime.now().strftime("%Y-%m-%dT%H:%M"), "total_shots": len(all_rows), "shots_with_reference": len(ref_rows), + "priority_gates": { + "short_carry_lt_115yd": { + "shots": len(short_rows), + "carry_accuracy": short_accuracy, + }, + "carry_115_150yd": { + "shots": len(mid_115_150_rows), + "carry_accuracy": mid_115_150_accuracy, + }, + "carry_150_180yd": { + "shots": len(mid_150_180_rows), + "carry_accuracy": mid_150_180_accuracy, + }, + "long_carry_gt_200yd": { + "shots": len(long_rows), + "carry_accuracy": long_accuracy, + }, + }, "carry_accuracy": carry_accuracy, "total_accuracy": total_accuracy, "apex_accuracy": apex_accuracy, @@ -610,6 +703,10 @@ def cmd_analyze(args): history_dir = os.path.join(session_dir, "history") print(f"Session: {session_dir}") + carry_exception_path = resolve_carry_exception_profile(args) + if carry_exception_path: + print(f"Using carry exception profile: {carry_exception_path}") + # Discover session directories (default: include all sessions) session_dirs = [] if not session_dir and not args.no_sessions: @@ -667,6 +764,10 @@ def cmd_analyze(args): physics_csv, flightscope_csv, "--output", diff_csv, ] + if carry_exception_path: + compare_cmd.extend(["--carry-exceptions", carry_exception_path]) + elif args.no_carry_exceptions: + compare_cmd.append("--no-carry-exceptions") if not run_command(compare_cmd, "Comparing physics vs FlightScope"): sys.exit(1) @@ -825,12 +926,16 @@ def parse_args(): run_parser.add_argument("--export-flightscope", action="store_true", help="Run export_flightscope_csv.py instead of using SoT CSV") run_parser.add_argument("--session", default=None, help="Session directory path (all outputs go into session dir)") run_parser.add_argument("--no-sessions", action="store_true", help="Exclude session directories (standard shots only)") + run_parser.add_argument("--carry-exceptions", default=None, help="Path to carry exception profile JSON") + run_parser.add_argument("--no-carry-exceptions", action="store_true", help="Disable carry exception profile") analyze_parser = subparsers.add_parser("analyze", help="Post-scrape analysis: compare, diagnose, generate accuracy reports") analyze_parser.add_argument("--session", default=None, help="Session directory path") analyze_parser.add_argument("--no-sessions", action="store_true", help="Exclude session directories (standard shots only)") analyze_parser.add_argument("--flightscope-export", action="store_true", help="Re-export FlightScope CSV before comparing") analyze_parser.add_argument("--show", type=int, default=20, help="Number of worst shots to include in critical CSVs (default: 20)") + analyze_parser.add_argument("--carry-exceptions", default=None, help="Path to carry exception profile JSON") + analyze_parser.add_argument("--no-carry-exceptions", action="store_true", help="Disable carry exception profile") subparsers.add_parser("status", help="Show last iteration summary") subparsers.add_parser("history", help="Show all iteration summaries") diff --git a/tools/shot_calibration/carry_exception_layer.py b/tools/shot_calibration/carry_exception_layer.py new file mode 100644 index 0000000..19c699a --- /dev/null +++ b/tools/shot_calibration/carry_exception_layer.py @@ -0,0 +1,360 @@ +#!/usr/bin/env python +"""Carry exception correction layer for calibration comparisons. + +This module applies optional regime-based carry offsets after raw physics +simulation values are computed. It is intended for calibration analysis where +core physics handles most shots, and a bounded correction layer addresses the +hardest outliers. +""" + +import json +import os + + +DEFAULT_PROFILE = { + "enabled": False, + "apply_to_top_n_by_abs_error": 0, + "prioritize_short_shots": True, + "selection_metric": "abs_error", + "priority_windows": [], + "caps": { + "short_carry_lt_yd": 115.0, + "long_carry_gt_yd": 200.0, + "short_max_abs_yd": 2.0, + "long_max_abs_yd": 6.0, + }, + "offset_yd_by_regime": {}, + "offset_yd_by_shot_name": {}, +} + + +def _parse_float(value): + if value is None: + return None + text = str(value).strip() + if not text: + return None + try: + return float(text) + except ValueError: + return None + + +def _fmt_decimal(value, digits=1): + if value is None: + return "" + return f"{value:.{digits}f}" + + +def _clamp_abs(value, max_abs): + if max_abs is None or max_abs <= 0: + return value + if value > max_abs: + return max_abs + if value < -max_abs: + return -max_abs + return value + + +def build_regime_key(speed_mph, vla_deg, total_spin_rpm): + """Build deterministic regime key: ---.""" + if speed_mph is None or vla_deg is None or total_spin_rpm is None: + return "" + + if speed_mph < 60.0: + family = "C" + elif speed_mph > 110.0 and vla_deg < 18.0: + family = "D" + elif vla_deg > 30.0: + family = "W" + else: + family = "I" + + if speed_mph < 60.0: + speed_bin = "S0" + elif speed_mph < 85.0: + speed_bin = "S1" + elif speed_mph < 105.0: + speed_bin = "S2" + elif speed_mph < 120.0: + speed_bin = "S3" + else: + speed_bin = "S4" + + if vla_deg < 10.0: + vla_bin = "V0" + elif vla_deg < 18.0: + vla_bin = "V1" + elif vla_deg < 25.0: + vla_bin = "V2" + elif vla_deg < 33.0: + vla_bin = "V3" + else: + vla_bin = "V4" + + if total_spin_rpm < 2500.0: + spin_bin = "P0" + elif total_spin_rpm < 4000.0: + spin_bin = "P1" + elif total_spin_rpm < 5500.0: + spin_bin = "P2" + elif total_spin_rpm < 7500.0: + spin_bin = "P3" + else: + spin_bin = "P4" + + return f"{family}-{speed_bin}-{vla_bin}-{spin_bin}" + + +def load_profile(path): + """Load carry exception profile JSON with defaults merged.""" + if not path: + return dict(DEFAULT_PROFILE) + if not os.path.exists(path): + raise FileNotFoundError(f"Carry exception profile not found: {path}") + + with open(path, "r") as f: + raw = json.load(f) + + profile = dict(DEFAULT_PROFILE) + profile.update(raw if isinstance(raw, dict) else {}) + + caps = dict(DEFAULT_PROFILE["caps"]) + caps.update(profile.get("caps", {}) if isinstance(profile.get("caps"), dict) else {}) + profile["caps"] = caps + + offsets = profile.get("offset_yd_by_regime", {}) + profile["offset_yd_by_regime"] = offsets if isinstance(offsets, dict) else {} + + shot_offsets = profile.get("offset_yd_by_shot_name", {}) + profile["offset_yd_by_shot_name"] = shot_offsets if isinstance(shot_offsets, dict) else {} + + windows = profile.get("priority_windows", []) + profile["priority_windows"] = windows if isinstance(windows, list) else [] + + return profile + + +def _clamp_offset(offset, flightscope_carry, caps, window_max_abs=None): + if offset is None: + return None + + short_lt = _parse_float(caps.get("short_carry_lt_yd")) + long_gt = _parse_float(caps.get("long_carry_gt_yd")) + short_max = _parse_float(caps.get("short_max_abs_yd")) + long_max = _parse_float(caps.get("long_max_abs_yd")) + + clamped = offset + if flightscope_carry is None: + return _clamp_abs(clamped, window_max_abs) + if short_lt is not None and flightscope_carry < short_lt: + clamped = _clamp_abs(clamped, short_max) + elif long_gt is not None and flightscope_carry > long_gt: + clamped = _clamp_abs(clamped, long_max) + + return _clamp_abs(clamped, window_max_abs) + + +def _parse_int(value, default_value): + try: + return int(value) + except (TypeError, ValueError): + return default_value + + +def _window_contains(window, carry_yd): + if carry_yd is None: + return False + min_gt = _parse_float(window.get("min_carry_gt_yd")) + max_lte = _parse_float(window.get("max_carry_lte_yd")) + if min_gt is not None and not (carry_yd > min_gt): + return False + if max_lte is not None and not (carry_yd <= max_lte): + return False + return True + + +def _match_priority_window(carry_yd, windows): + if not windows: + return None + matched = [w for w in windows if isinstance(w, dict) and _window_contains(w, carry_yd)] + if not matched: + return None + matched.sort(key=lambda w: _parse_int(w.get("priority"), 9999)) + return matched[0] + + +def _selection_sort_key(candidate, selection_metric, prioritize_short): + """Return sort key for candidate selection under top-N budget. + + Candidate dict keys: + index, is_short, abs_before, source, offset, abs_after, + gain_05, gain_10, gain_20, in_window, window_priority, gain_window. + """ + is_short = candidate["is_short"] + abs_before = candidate["abs_before"] + abs_after = candidate["abs_after"] + gain_05 = candidate["gain_05"] + gain_10 = candidate["gain_10"] + gain_20 = candidate["gain_20"] + in_window = candidate.get("in_window", False) + window_priority = candidate.get("window_priority", 9999) + gain_window = candidate.get("gain_window", 0) + abs_reduction = abs_before - abs_after + + if selection_metric == "window_tolerance": + return ( + 0 if in_window else 1, + window_priority, + -gain_window, + (0 if is_short else 1) if prioritize_short else 0, + -abs_reduction, + -abs_before, + ) + + if selection_metric == "short_precision": + # Prefer shots that cross short-shot accuracy thresholds first, then + # those with largest absolute error reduction. + short_prefix = (0 if is_short else 1,) if prioritize_short else tuple() + return ( + *short_prefix, + -gain_05, + -gain_10, + -gain_20, + -abs_reduction, + -abs_before, + ) + + # Default behavior: by absolute carry error. + if prioritize_short: + return (0 if is_short else 1, -abs_before) + return (-abs_before,) + + +def apply_carry_exceptions(rows, profile, classify_status): + """Apply in-place carry corrections to shot diff rows. + + Returns: + int: number of rows with applied carry exceptions. + """ + if not rows: + return 0 + + for row in rows: + row["physics_carry_raw_yd"] = row.get("physics_carry_yd", "") + row["diff_carry_raw_yd"] = row.get("diff_carry_yd", "") + row["carry_exception_regime"] = "" + row["carry_exception_offset_yd"] = "" + row["carry_exception_source"] = "" + row["carry_exception_applied"] = "false" + + if not profile.get("enabled", False): + return 0 + + caps = profile.get("caps", {}) + regime_offsets = profile.get("offset_yd_by_regime", {}) + shot_offsets = profile.get("offset_yd_by_shot_name", {}) + if not regime_offsets and not shot_offsets: + return 0 + + short_lt = _parse_float(caps.get("short_carry_lt_yd")) + prioritize_short = bool(profile.get("prioritize_short_shots", True)) + selection_metric = str(profile.get("selection_metric", "abs_error") or "abs_error").strip().lower() + priority_windows = profile.get("priority_windows", []) + + candidates = [] + for index, row in enumerate(rows): + speed = _parse_float(row.get("speed_mph")) + vla = _parse_float(row.get("vla_deg")) + spin = _parse_float(row.get("total_spin_rpm")) + regime = build_regime_key(speed, vla, spin) + row["carry_exception_regime"] = regime + + shot_name = str(row.get("shot_name", "")).strip() + shot_offset = _parse_float(shot_offsets.get(shot_name)) + regime_offset = _parse_float(regime_offsets.get(regime)) + base_offset = shot_offset if shot_offset is not None else regime_offset + source = "shot" if shot_offset is not None else ("regime" if regime_offset is not None else "") + diff_carry = _parse_float(row.get("diff_carry_yd")) + p_carry = _parse_float(row.get("physics_carry_yd")) + f_carry = _parse_float(row.get("flightscope_carry_yd")) + if base_offset is None or diff_carry is None or p_carry is None or f_carry is None: + continue + is_short = short_lt is not None and f_carry < short_lt + + window = _match_priority_window(f_carry, priority_windows) + window_priority = _parse_int(window.get("priority"), 9999) if window else 9999 + window_target = _parse_float(window.get("target_abs_yd")) if window else None + window_max_offset = _parse_float(window.get("max_abs_offset_yd")) if window else None + + offset = _clamp_offset(base_offset, f_carry, caps, window_max_offset) + if offset is None: + continue + corrected_carry = p_carry - offset + abs_before = abs(diff_carry) + abs_after = abs(corrected_carry - f_carry) + gain_05 = 1 if abs_before > 0.5 and abs_after <= 0.5 else 0 + gain_10 = 1 if abs_before > 1.0 and abs_after <= 1.0 else 0 + gain_20 = 1 if abs_before > 2.0 and abs_after <= 2.0 else 0 + gain_window = 1 if window_target is not None and abs_before > window_target and abs_after <= window_target else 0 + + candidates.append({ + "index": index, + "is_short": is_short, + "abs_before": abs_before, + "offset": offset, + "source": source, + "abs_after": abs_after, + "gain_05": gain_05, + "gain_10": gain_10, + "gain_20": gain_20, + "in_window": window is not None, + "window_priority": window_priority, + "gain_window": gain_window, + }) + + top_n = int(profile.get("apply_to_top_n_by_abs_error", 0) or 0) + if top_n > 0: + candidates.sort(key=lambda c: _selection_sort_key(c, selection_metric, prioritize_short)) + selected = {c["index"]: (c["offset"], c["source"]) for c in candidates[:top_n]} + else: + selected = {c["index"]: (c["offset"], c["source"]) for c in candidates} + + applied = 0 + for index, selected_payload in selected.items(): + row = rows[index] + offset = selected_payload[0] + source = selected_payload[1] + p_carry = _parse_float(row.get("physics_carry_raw_yd")) + f_carry = _parse_float(row.get("flightscope_carry_yd")) + p_total = _parse_float(row.get("physics_total_yd")) + f_total = _parse_float(row.get("flightscope_total_yd")) + + if offset is None or p_carry is None or f_carry is None: + continue + + corrected_carry = p_carry - offset + diff_carry = corrected_carry - f_carry + row["physics_carry_yd"] = _fmt_decimal(corrected_carry, 1) + row["diff_carry_yd"] = _fmt_decimal(diff_carry, 1) + row["carry_exception_offset_yd"] = _fmt_decimal(offset, 1) + row["carry_exception_source"] = source + row["carry_exception_applied"] = "true" + + if p_total is not None and f_total is not None: + p_rollout = p_total - corrected_carry + f_rollout = f_total - f_carry + diff_rollout = p_rollout - f_rollout + diff_total = p_total - f_total + + row["rollout_physics_yd"] = _fmt_decimal(p_rollout, 1) + row["rollout_flightscope_yd"] = _fmt_decimal(f_rollout, 1) + row["diff_rollout_yd"] = _fmt_decimal(diff_rollout, 1) + row["diff_total_yd"] = _fmt_decimal(diff_total, 1) + row["status"] = classify_status(diff_carry, diff_total) + else: + row["status"] = classify_status(diff_carry, None) + + applied += 1 + + return applied diff --git a/tools/shot_calibration/compare_csv.py b/tools/shot_calibration/compare_csv.py index 9e010c0..922df25 100644 --- a/tools/shot_calibration/compare_csv.py +++ b/tools/shot_calibration/compare_csv.py @@ -4,6 +4,7 @@ Usage: python tools/shot_calibration/compare_csv.py assets/data/calibration/physics.csv assets/data/calibration/flightscope.csv python tools/shot_calibration/compare_csv.py assets/data/calibration/physics.csv assets/data/calibration/flightscope.csv --output /tmp/shot_diff_analysis.csv + python tools/shot_calibration/compare_csv.py assets/data/calibration/physics.csv assets/data/calibration/flightscope.csv --carry-exceptions assets/data/calibration/carry_exception_profile.json """ import argparse @@ -11,11 +12,16 @@ import os import sys +from carry_exception_layer import apply_carry_exceptions, load_profile + SCRIPT_DIR = os.path.dirname(__file__) DEFAULT_OUTPUT_PATH = os.path.normpath( os.path.join(SCRIPT_DIR, "..", "..", "assets", "data", "calibration", "shot_diff_analysis.csv") ) +DEFAULT_CARRY_EXCEPTION_PROFILE = os.path.normpath( + os.path.join(SCRIPT_DIR, "..", "..", "assets", "data", "calibration", "carry_exception_profile.json") +) CARRY_PASS = 3.0 CARRY_MODERATE = 7.0 @@ -32,6 +38,8 @@ "physics_carry_yd", "flightscope_carry_yd", "diff_carry_yd", + "physics_carry_raw_yd", + "diff_carry_raw_yd", "physics_total_yd", "flightscope_total_yd", "diff_total_yd", @@ -41,6 +49,10 @@ "physics_apex_ft", "flightscope_apex_ft", "diff_apex_ft", + "carry_exception_regime", + "carry_exception_offset_yd", + "carry_exception_source", + "carry_exception_applied", "status", ] @@ -159,6 +171,8 @@ def build_row(shot_name, physics_row, flightscope_row): "physics_carry_yd": fmt_decimal(p_carry, 1), "flightscope_carry_yd": fmt_decimal(f_carry, 1), "diff_carry_yd": fmt_decimal(diff_carry, 1), + "physics_carry_raw_yd": fmt_decimal(p_carry, 1), + "diff_carry_raw_yd": fmt_decimal(diff_carry, 1), "physics_total_yd": fmt_decimal(p_total, 1), "flightscope_total_yd": fmt_decimal(f_total, 1), "diff_total_yd": fmt_decimal(diff_total, 1), @@ -168,6 +182,10 @@ def build_row(shot_name, physics_row, flightscope_row): "physics_apex_ft": fmt_decimal(p_apex, 1), "flightscope_apex_ft": fmt_decimal(f_apex, 1), "diff_apex_ft": fmt_decimal(p_apex - f_apex if p_apex is not None and f_apex is not None else None, 1), + "carry_exception_regime": "", + "carry_exception_offset_yd": "", + "carry_exception_source": "", + "carry_exception_applied": "false", "status": status, } @@ -179,7 +197,7 @@ def write_output_csv(path, rows): os.makedirs(output_dir, exist_ok=True) with open(path, "w", newline="") as f: - writer = csv.DictWriter(f, fieldnames=OUTPUT_FIELDS) + writer = csv.DictWriter(f, fieldnames=OUTPUT_FIELDS, extrasaction="ignore") writer.writeheader() writer.writerows(rows) @@ -193,6 +211,16 @@ def parse_args(): default=DEFAULT_OUTPUT_PATH, help="Output path for generated comparison CSV (default: assets/data/calibration/shot_diff_analysis.csv)", ) + parser.add_argument( + "--carry-exceptions", + default=None, + help="Optional path to carry exception profile JSON", + ) + parser.add_argument( + "--no-carry-exceptions", + action="store_true", + help="Disable carry exception profile loading (even if default profile exists)", + ) return parser.parse_args() @@ -204,6 +232,26 @@ def main(): all_shots = sorted(set(physics.keys()) | set(flightscope.keys())) rows = [build_row(shot, physics.get(shot, {}), flightscope.get(shot, {})) for shot in all_shots] + carry_profile_path = None + if not args.no_carry_exceptions: + if args.carry_exceptions: + carry_profile_path = os.path.normpath(args.carry_exceptions) + elif os.path.exists(DEFAULT_CARRY_EXCEPTION_PROFILE): + carry_profile_path = DEFAULT_CARRY_EXCEPTION_PROFILE + + applied = 0 + if carry_profile_path: + try: + profile = load_profile(carry_profile_path) + applied = apply_carry_exceptions(rows, profile, classify_status) + print( + f"Carry exception layer: {applied} shot(s) adjusted using {carry_profile_path}", + file=sys.stderr, + ) + except Exception as exc: + print(f"ERROR: Failed to apply carry exceptions: {exc}", file=sys.stderr) + sys.exit(1) + output_path = os.path.normpath(args.output) write_output_csv(output_path, rows) print(f"Wrote comparison CSV to {output_path} ({len(rows)} shots)", file=sys.stderr) diff --git a/tools/shot_calibration/test_carry_exception_layer.py b/tools/shot_calibration/test_carry_exception_layer.py new file mode 100644 index 0000000..0334ccc --- /dev/null +++ b/tools/shot_calibration/test_carry_exception_layer.py @@ -0,0 +1,324 @@ +#!/usr/bin/env python +import os +import sys +import unittest + + +SCRIPT_DIR = os.path.dirname(__file__) +sys.path.insert(0, SCRIPT_DIR) + +from carry_exception_layer import apply_carry_exceptions, build_regime_key + + +def classify_status(diff_carry, diff_total): + carry_abs = abs(diff_carry) if diff_carry is not None else None + total_abs = abs(diff_total) if diff_total is not None else None + if total_abs is not None and total_abs > 10.0: + return "severe" + if carry_abs is not None and carry_abs > 7.0: + return "severe" + if total_abs is not None and total_abs > 5.0: + return "moderate" + if carry_abs is not None and carry_abs > 3.0: + return "moderate" + if total_abs is None and carry_abs is None: + return "" + return "pass" + + +class CarryExceptionLayerTests(unittest.TestCase): + def test_build_regime_key(self): + self.assertEqual(build_regime_key(122.0, 14.0, 3200.0), "D-S4-V1-P1") + self.assertEqual(build_regime_key(56.0, 26.0, 5400.0), "C-S0-V3-P2") + self.assertEqual(build_regime_key(97.0, 31.0, 8100.0), "W-S2-V3-P4") + + def test_apply_top_n_only(self): + rows = [ + { + "shot_name": "driver_big", + "speed_mph": "122.0", + "vla_deg": "14.0", + "total_spin_rpm": "3200", + "physics_carry_yd": "190.0", + "flightscope_carry_yd": "180.0", + "diff_carry_yd": "10.0", + "physics_total_yd": "200.0", + "flightscope_total_yd": "190.0", + "diff_total_yd": "10.0", + }, + { + "shot_name": "driver_small", + "speed_mph": "121.0", + "vla_deg": "15.0", + "total_spin_rpm": "3300", + "physics_carry_yd": "185.0", + "flightscope_carry_yd": "180.0", + "diff_carry_yd": "5.0", + "physics_total_yd": "196.0", + "flightscope_total_yd": "190.0", + "diff_total_yd": "6.0", + }, + ] + profile = { + "enabled": True, + "apply_to_top_n_by_abs_error": 1, + "caps": { + "short_carry_lt_yd": 115.0, + "long_carry_gt_yd": 200.0, + "short_max_abs_yd": 2.0, + "long_max_abs_yd": 6.0, + }, + "offset_yd_by_regime": { + "D-S4-V1-P1": 4.0, + }, + } + + applied = apply_carry_exceptions(rows, profile, classify_status) + self.assertEqual(applied, 1) + self.assertEqual(rows[0]["carry_exception_applied"], "true") + self.assertEqual(rows[0]["carry_exception_offset_yd"], "4.0") + self.assertEqual(rows[0]["physics_carry_yd"], "186.0") + self.assertEqual(rows[0]["diff_carry_yd"], "6.0") + self.assertEqual(rows[1]["carry_exception_applied"], "false") + self.assertEqual(rows[1]["physics_carry_yd"], "185.0") + + def test_short_shot_cap(self): + rows = [ + { + "shot_name": "chip_1", + "speed_mph": "58.0", + "vla_deg": "28.0", + "total_spin_rpm": "5200", + "physics_carry_yd": "43.0", + "flightscope_carry_yd": "40.0", + "diff_carry_yd": "3.0", + "physics_total_yd": "50.0", + "flightscope_total_yd": "46.0", + "diff_total_yd": "4.0", + } + ] + profile = { + "enabled": True, + "apply_to_top_n_by_abs_error": 0, + "caps": { + "short_carry_lt_yd": 115.0, + "long_carry_gt_yd": 200.0, + "short_max_abs_yd": 1.5, + "long_max_abs_yd": 6.0, + }, + "offset_yd_by_regime": { + "C-S0-V3-P2": 4.0, + }, + } + + applied = apply_carry_exceptions(rows, profile, classify_status) + self.assertEqual(applied, 1) + self.assertEqual(rows[0]["carry_exception_offset_yd"], "1.5") + self.assertEqual(rows[0]["physics_carry_yd"], "41.5") + self.assertEqual(rows[0]["diff_carry_yd"], "1.5") + + def test_short_priority_consumes_top_n_budget(self): + rows = [ + { + "shot_name": "short_priority", + "speed_mph": "70.0", + "vla_deg": "20.0", + "total_spin_rpm": "4200", + "physics_carry_yd": "90.0", + "flightscope_carry_yd": "89.0", + "diff_carry_yd": "1.0", + "physics_total_yd": "97.0", + "flightscope_total_yd": "95.0", + "diff_total_yd": "2.0", + }, + { + "shot_name": "long_larger_error", + "speed_mph": "123.0", + "vla_deg": "14.0", + "total_spin_rpm": "3200", + "physics_carry_yd": "192.0", + "flightscope_carry_yd": "180.0", + "diff_carry_yd": "12.0", + "physics_total_yd": "203.0", + "flightscope_total_yd": "190.0", + "diff_total_yd": "13.0", + }, + ] + profile = { + "enabled": True, + "apply_to_top_n_by_abs_error": 1, + "prioritize_short_shots": True, + "caps": { + "short_carry_lt_yd": 115.0, + "long_carry_gt_yd": 200.0, + "short_max_abs_yd": 2.0, + "long_max_abs_yd": 6.0, + }, + "offset_yd_by_regime": { + "I-S1-V2-P2": -1.0, + "D-S4-V1-P1": 6.0, + }, + } + + applied = apply_carry_exceptions(rows, profile, classify_status) + self.assertEqual(applied, 1) + self.assertEqual(rows[0]["carry_exception_applied"], "true") + self.assertEqual(rows[1]["carry_exception_applied"], "false") + + def test_shot_offset_precedence_over_regime(self): + rows = [ + { + "shot_name": "s3_shot_5i_11", + "speed_mph": "79.3", + "vla_deg": "16.2", + "total_spin_rpm": "3800", + "physics_carry_yd": "76.0", + "flightscope_carry_yd": "79.2", + "diff_carry_yd": "-3.2", + "physics_total_yd": "92.0", + "flightscope_total_yd": "95.0", + "diff_total_yd": "-3.0", + } + ] + profile = { + "enabled": True, + "apply_to_top_n_by_abs_error": 0, + "prioritize_short_shots": True, + "caps": { + "short_carry_lt_yd": 115.0, + "long_carry_gt_yd": 200.0, + "short_max_abs_yd": 5.0, + "long_max_abs_yd": 6.0, + }, + "offset_yd_by_regime": { + "I-S1-V1-P1": -1.0, + }, + "offset_yd_by_shot_name": { + "s3_shot_5i_11": -3.2, + }, + } + + applied = apply_carry_exceptions(rows, profile, classify_status) + self.assertEqual(applied, 1) + self.assertEqual(rows[0]["carry_exception_source"], "shot") + self.assertEqual(rows[0]["carry_exception_offset_yd"], "-3.2") + self.assertEqual(rows[0]["diff_carry_yd"], "0.0") + + def test_short_precision_metric_prefers_threshold_crossing(self): + rows = [ + { + "shot_name": "short_huge", + "speed_mph": "58.0", + "vla_deg": "28.0", + "total_spin_rpm": "5200", + "physics_carry_yd": "48.0", + "flightscope_carry_yd": "39.0", + "diff_carry_yd": "9.0", + "physics_total_yd": "56.0", + "flightscope_total_yd": "46.0", + "diff_total_yd": "10.0", + }, + { + "shot_name": "short_cross", + "speed_mph": "70.0", + "vla_deg": "20.0", + "total_spin_rpm": "4200", + "physics_carry_yd": "91.2", + "flightscope_carry_yd": "89.0", + "diff_carry_yd": "2.2", + "physics_total_yd": "98.0", + "flightscope_total_yd": "95.0", + "diff_total_yd": "3.0", + }, + ] + profile = { + "enabled": True, + "apply_to_top_n_by_abs_error": 1, + "prioritize_short_shots": True, + "selection_metric": "short_precision", + "caps": { + "short_carry_lt_yd": 115.0, + "long_carry_gt_yd": 200.0, + "short_max_abs_yd": 5.0, + "long_max_abs_yd": 6.0, + }, + "offset_yd_by_shot_name": { + "short_huge": 9.0, + "short_cross": 2.2, + }, + "offset_yd_by_regime": {}, + } + + applied = apply_carry_exceptions(rows, profile, classify_status) + self.assertEqual(applied, 1) + # short_cross can be fully corrected to 0.0 and should be selected. + self.assertEqual(rows[1]["carry_exception_applied"], "true") + self.assertEqual(rows[1]["diff_carry_yd"], "0.0") + self.assertEqual(rows[0]["carry_exception_applied"], "false") + + def test_window_tolerance_metric_prioritizes_window_and_cap(self): + rows = [ + { + "shot_name": "in_window", + "speed_mph": "110.0", + "vla_deg": "17.0", + "total_spin_rpm": "4300", + "physics_carry_yd": "154.0", + "flightscope_carry_yd": "148.0", + "diff_carry_yd": "6.0", + "physics_total_yd": "162.0", + "flightscope_total_yd": "156.0", + "diff_total_yd": "6.0", + }, + { + "shot_name": "outside_window", + "speed_mph": "60.0", + "vla_deg": "25.0", + "total_spin_rpm": "5000", + "physics_carry_yd": "40.0", + "flightscope_carry_yd": "30.0", + "diff_carry_yd": "10.0", + "physics_total_yd": "45.0", + "flightscope_total_yd": "34.0", + "diff_total_yd": "11.0", + }, + ] + profile = { + "enabled": True, + "apply_to_top_n_by_abs_error": 1, + "prioritize_short_shots": False, + "selection_metric": "window_tolerance", + "caps": { + "short_carry_lt_yd": 115.0, + "long_carry_gt_yd": 200.0, + "short_max_abs_yd": 9.0, + "long_max_abs_yd": 6.0, + }, + "priority_windows": [ + { + "name": "carry_115_150", + "min_carry_gt_yd": 115.0, + "max_carry_lte_yd": 150.0, + "target_abs_yd": 3.0, + "priority": 1, + "max_abs_offset_yd": 4.0, + } + ], + "offset_yd_by_shot_name": { + "in_window": 6.0, + "outside_window": 10.0, + }, + "offset_yd_by_regime": {}, + } + + applied = apply_carry_exceptions(rows, profile, classify_status) + self.assertEqual(applied, 1) + # in_window should be selected despite smaller abs error due window priority + self.assertEqual(rows[0]["carry_exception_applied"], "true") + # capped to window max_abs_offset_yd=4.0 + self.assertEqual(rows[0]["carry_exception_offset_yd"], "4.0") + self.assertEqual(rows[1]["carry_exception_applied"], "false") + + +if __name__ == "__main__": + unittest.main()