flightanalysis 0.3.7__tar.gz → 0.3.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {flightanalysis-0.3.7/flightanalysis.egg-info → flightanalysis-0.3.8}/PKG-INFO +3 -3
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/create_schedules.py +5 -1
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/examples/make_manoeuvre.py +7 -15
- flightanalysis-0.3.8/examples/making_elements.py +16 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/analysis/sch_analysis.py +3 -3
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/base/utils.py +2 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/builders/BAeAGlid/manbuilder.py +3 -3
- flightanalysis-0.3.8/flightanalysis/builders/IAC/box.py +19 -0
- flightanalysis-0.3.8/flightanalysis/builders/IAC/criteria.py +84 -0
- flightanalysis-0.3.8/flightanalysis/builders/IAC/downgrades.py +79 -0
- flightanalysis-0.3.8/flightanalysis/builders/IAC/manbuilder.py +116 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/builders/elbuilders.py +40 -49
- flightanalysis-0.3.8/flightanalysis/builders/f3a/downgrades.py +87 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/builders/f3a/manbuilder.py +2 -2
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/builders/imac/manbuilder.py +2 -2
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/builders/manbuilder.py +8 -18
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/builders/schedules/baeaglid_intermediate.py +42 -42
- flightanalysis-0.3.8/flightanalysis/builders/schedules/baeapower_advanced2024.py +189 -0
- flightanalysis-0.3.8/flightanalysis/builders/schedules/baeapower_test.py +142 -0
- flightanalysis-0.3.8/flightanalysis/builders/schedules/baeapower_unlimited2024.py +207 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/builders/schedules/f3a_a25.py +0 -6
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/builders/schedules/f3a_f25.py +1 -8
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/builders/schedules/f3a_p23.py +0 -8
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/builders/schedules/f3a_p25.py +1 -5
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/builders/schedules/f3auk_clubman.py +1 -5
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/builders/schedules/f3auk_intermediate.py +0 -1
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/builders/schedules/imac_sport2024.py +0 -1
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/builders/schedules/imac_unlim2024.py +2 -1
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/builders/schedules/nsrca_inter2024.py +1 -1
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/data/baeaglid_intermediate_schedule.json +1071 -1300
- flightanalysis-0.3.8/flightanalysis/data/baeapower_advanced2024_schedule.json +9931 -0
- flightanalysis-0.3.8/flightanalysis/data/baeapower_unlimited2024_schedule.json +13939 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/data/f3a_a25_schedule.json +3529 -4114
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/data/f3a_f25_schedule.json +4932 -6396
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/data/f3a_p23_schedule.json +4566 -5527
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/data/f3a_p25_schedule.json +5230 -6377
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/data/f3auk_clubman_schedule.json +2326 -2709
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/data/f3auk_inter_schedule.json +2399 -2729
- flightanalysis-0.3.8/flightanalysis/definition/assign_dgs.py +3 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/definition/eldef.py +2 -2
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/definition/mandef.py +27 -6
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/definition/manparm.py +16 -3
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/definition/operations/funopp.py +3 -2
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/definition/operations/mathopp.py +1 -1
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/definition/operations/operation.py +5 -1
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/definition/scheduleinfo.py +2 -1
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/elements/snap.py +5 -4
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/elements/spin.py +1 -1
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/box/box.py +2 -2
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/box/rectangular_box.py +4 -4
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/box/triangular_box.py +1 -1
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/downgrade.py +28 -18
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/measurements/attitude.py +2 -2
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/measurements/curvature.py +2 -2
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/measurements/measurement.py +1 -1
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/measurements/roll.py +1 -1
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/measurements/stall.py +26 -16
- flightanalysis-0.3.8/flightanalysis/scoring/measurements/track.py +150 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/selectors.py +17 -16
- {flightanalysis-0.3.7 → flightanalysis-0.3.8/flightanalysis.egg-info}/PKG-INFO +3 -3
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis.egg-info/SOURCES.txt +13 -3
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis.egg-info/requires.txt +2 -2
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/requirements-dev.txt +1 -1
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/requirements.txt +1 -1
- flightanalysis-0.3.8/tests/test_box.py +49 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/test_schedule/test_measurement.py +2 -2
- flightanalysis-0.3.7/flightanalysis/builders/BAeAGlid/downgrades.py +0 -79
- flightanalysis-0.3.7/flightanalysis/builders/f3a/downgrades.py +0 -91
- flightanalysis-0.3.7/flightanalysis/data/BAeAGlid_intermediate.json +0 -4157
- flightanalysis-0.3.7/flightanalysis/scoring/measurements/track.py +0 -73
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/.github/workflows/publish_pypi.yml +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/.gitignore +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/LICENSE +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/MANIFEST.in +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/README.md +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/examples/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/examples/data/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/examples/data/manual_F3A_F23_22_04_28_00000231.json +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/examples/data/manual_F3A_P23_22_05_31_00000350.json +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/examples/data/manual_F3A_P23_23_08_11_00000094.json +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/examples/plot_manoeuvre.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/examples/scoring/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/examples/scoring/judging.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/examples/scoring/manoeuvres/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/examples/scoring/manoeuvres/inter_analysis.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/examples/scoring/manoeuvres/intra_analysis.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/examples/scoring/manoeuvres/mans/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/examples/scoring/manoeuvres/mans/extract_mans.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/examples/scoring/manoeuvres/mans/tHat.json +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/examples/scoring/manoeuvres/positioning_analysis.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/analysis/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/analysis/analysis_json.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/analysis/el_analysis.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/analysis/manoeuvre_analysis/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/analysis/manoeuvre_analysis/alignment.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/analysis/manoeuvre_analysis/analysis.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/analysis/manoeuvre_analysis/basic.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/analysis/manoeuvre_analysis/complete.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/analysis/manoeuvre_analysis/scored.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/base/ref_funcs.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/builders/BAeAGlid/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/builders/BAeAGlid/box.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/builders/BAeAGlid/criteria.py +0 -0
- {flightanalysis-0.3.7/flightanalysis/builders → flightanalysis-0.3.8/flightanalysis/builders/IAC}/__init__.py +0 -0
- {flightanalysis-0.3.7/flightanalysis/builders/f3a → flightanalysis-0.3.8/flightanalysis/builders}/__init__.py +0 -0
- {flightanalysis-0.3.7/flightanalysis/builders/iacpower → flightanalysis-0.3.8/flightanalysis/builders/f3a}/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/builders/f3a/box.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/builders/f3a/criteria.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/builders/imac/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/builders/schedules/AMA_Intermediate2024.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/builders/schedules/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/data/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/definition/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/definition/collectors.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/definition/maninfo/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/definition/maninfo/maninfo.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/definition/maninfo/positioning.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/definition/manoption.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/definition/operations/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/definition/operations/itemopp.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/definition/operations/sumopp.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/definition/scheddef.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/elements/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/elements/element.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/elements/line.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/elements/loop.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/elements/stall_turn.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/fcjson.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/manoeuvre.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/schedule.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/box/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/criteria/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/criteria/criteria.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/criteria/exponential.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/criteria/inter/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/criteria/inter/combination.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/criteria/inter/comparison.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/criteria/intra/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/criteria/intra/bounded.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/criteria/intra/continuous.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/criteria/intra/peak.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/criteria/intra/single.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/measurements/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/measurements/positioning.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/measurements/speed.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/results.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/smoothing.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scoring/visibility.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scripts/collect_scores.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/scripts/plot_scores.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/version.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis.egg-info/dependency_links.txt +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis.egg-info/entry_points.txt +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis.egg-info/top_level.txt +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/pyproject.toml +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/setup.cfg +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/EmailedBox.f3a +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/conftest.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/data/manual_F3A_P23.json +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/data/old_json.json +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/data/p23.BIN +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/data/p23_box.f3a +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/data/p23_fc.json +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/data/p23_flight.json +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/data/scored_fcj.json +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/data/unscored_fcj.json +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/test_criiteria.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/test_data.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/test_fcjscore.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/test_positioning.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/test_rfuncs.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/test_schedule/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/test_schedule/test_definition/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/test_schedule/test_definition/test_definition_eldef.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/test_schedule/test_definition/test_definition_manparm.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/test_schedule/test_definition/test_definition_mpopp.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/test_schedule/test_definition/test_schedule_definition.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/test_schedule/test_definition/test_schedule_definition_maninfo.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/test_schedule/test_element/__init__.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/test_schedule/test_element/loop_analysis.json +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/test_schedule/test_element/p23_th_e0.csv +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/test_schedule/test_element/p23_th_e0.json +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/test_schedule/test_element/p23_th_e0_template.csv +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/test_schedule/test_element/test_schedule_element.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/test_schedule/test_element/test_schedule_element_line.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/test_schedule/test_element/test_schedule_element_loop.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/test_schedule/test_element/test_schedule_element_snap.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/test_schedule/test_element/test_schedule_element_spin.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/test_schedule/test_element/test_schedule_element_stallturn.py +0 -0
- {flightanalysis-0.3.7 → flightanalysis-0.3.8}/tests/test_schedule/test_schedule_manoeuvre.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: flightanalysis
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.8
|
|
4
4
|
Summary: A package for analysing flight data
|
|
5
5
|
Author-email: Thomas David <thomasdavid0@gmail.com>
|
|
6
6
|
License: GNU GPL v3
|
|
@@ -16,7 +16,7 @@ Requires-Dist: simplejson
|
|
|
16
16
|
Requires-Dist: loguru
|
|
17
17
|
Requires-Dist: joblib
|
|
18
18
|
Requires-Dist: pfc-geometry>=0.2.11
|
|
19
|
-
Requires-Dist: flightdata>=0.2.
|
|
19
|
+
Requires-Dist: flightdata>=0.2.20
|
|
20
20
|
Requires-Dist: GitPython
|
|
21
21
|
Requires-Dist: pyperclip
|
|
22
22
|
Requires-Dist: packaging
|
|
@@ -29,7 +29,7 @@ Requires-Dist: simplejson; extra == "dev"
|
|
|
29
29
|
Requires-Dist: loguru; extra == "dev"
|
|
30
30
|
Requires-Dist: joblib; extra == "dev"
|
|
31
31
|
Requires-Dist: pfc-geometry>=0.2.11; extra == "dev"
|
|
32
|
-
Requires-Dist: flightdata>=0.2.
|
|
32
|
+
Requires-Dist: flightdata>=0.2.20; extra == "dev"
|
|
33
33
|
Requires-Dist: ardupilot_log_reader>=0.3.3; extra == "dev"
|
|
34
34
|
Requires-Dist: pymavlink; extra == "dev"
|
|
35
35
|
Requires-Dist: GitPython; extra == "dev"
|
|
@@ -6,6 +6,8 @@ from flightanalysis.builders.schedules.f3a_f25 import f25_def
|
|
|
6
6
|
from flightanalysis.builders.schedules.f3auk_clubman import clubman_def as f3auk_club_def
|
|
7
7
|
from flightanalysis.builders.schedules.f3auk_intermediate import intermediate_def as f3auk_int_def
|
|
8
8
|
from flightanalysis.builders.schedules.baeaglid_intermediate import sdef as baeaglid_intermediate_def
|
|
9
|
+
from flightanalysis.builders.schedules.baeapower_unlimited2024 import sdef as baeapower_unlimited2024_def
|
|
10
|
+
from flightanalysis.builders.schedules.baeapower_advanced2024 import sdef as baeapower_advanced2024_def
|
|
9
11
|
sdefs = {
|
|
10
12
|
'f3a_p23_schedule': p23_def,
|
|
11
13
|
'f3a_a25_schedule': a25_def,
|
|
@@ -14,7 +16,9 @@ sdefs = {
|
|
|
14
16
|
#'IMAC_Unlimited2024_schedule': imac_unl2024_def,
|
|
15
17
|
'f3auk_clubman_schedule': f3auk_club_def,
|
|
16
18
|
'f3auk_inter_schedule': f3auk_int_def,
|
|
17
|
-
"baeaglid_intermediate_schedule": baeaglid_intermediate_def
|
|
19
|
+
"baeaglid_intermediate_schedule": baeaglid_intermediate_def,
|
|
20
|
+
"baeapower_unlimited2024_schedule": baeapower_unlimited2024_def,
|
|
21
|
+
"baeapower_advanced2024_schedule": baeapower_advanced2024_def
|
|
18
22
|
}
|
|
19
23
|
|
|
20
24
|
def create_all():
|
|
@@ -2,30 +2,24 @@ from flightplotting import plotsec, plot_regions
|
|
|
2
2
|
from flightplotting.traces import axis_rate_trace
|
|
3
3
|
from flightanalysis import (
|
|
4
4
|
ManDef, BoxLocation, Position, Height, Direction,
|
|
5
|
-
Orientation, ManInfo, Heading)
|
|
5
|
+
Orientation, ManInfo, Heading, ManParm, Combination)
|
|
6
6
|
import numpy as np
|
|
7
7
|
from flightanalysis.builders.manbuilder import r, MBTags, c45, centred
|
|
8
8
|
from flightanalysis.builders.f3a.manbuilder import f3amb
|
|
9
|
+
from flightanalysis.builders.IAC.manbuilder import iacmb
|
|
10
|
+
from flightanalysis.builders.schedules.baeapower_advanced2024 import sdef
|
|
9
11
|
from flightdata import NumpyEncoder
|
|
10
12
|
import plotly.graph_objects as go
|
|
11
13
|
from json import dumps
|
|
12
14
|
import geometry as g
|
|
13
15
|
|
|
14
|
-
mdef: ManDef =
|
|
15
|
-
"half square", "hSqL", k=2, position=Position.END,
|
|
16
|
-
start=BoxLocation(Height.TOP, Direction.UPWIND, Orientation.INVERTED),
|
|
17
|
-
end=BoxLocation(Height.BTM)
|
|
18
|
-
),[
|
|
19
|
-
f3amb.loop(np.pi/2),
|
|
20
|
-
f3amb.roll(r(1)),
|
|
21
|
-
f3amb.loop(np.pi/2),
|
|
22
|
-
])
|
|
16
|
+
mdef: ManDef = sdef[4]
|
|
23
17
|
|
|
24
18
|
data = mdef.to_dict()
|
|
25
19
|
print(dumps(data, indent=2, cls=NumpyEncoder))
|
|
26
20
|
mdef = ManDef.from_dict(data)
|
|
27
21
|
|
|
28
|
-
it = mdef.guess_itrans(
|
|
22
|
+
it = mdef.guess_itrans(600, Heading.RIGHT)
|
|
29
23
|
|
|
30
24
|
mdef.fit_box(it)
|
|
31
25
|
|
|
@@ -34,9 +28,7 @@ man = mdef.create()
|
|
|
34
28
|
tp = man.create_template(it)
|
|
35
29
|
|
|
36
30
|
fig = plot_regions(tp, 'element', span=5)
|
|
37
|
-
fig = plotsec(tp, fig=fig, nmodels=10, scale=
|
|
38
|
-
|
|
31
|
+
fig = plotsec(tp, fig=fig, nmodels=10, scale=20)
|
|
32
|
+
|
|
39
33
|
fig.show()
|
|
40
34
|
|
|
41
|
-
#fig = go.Figure(data=axis_rate_trace(tp))
|
|
42
|
-
#fig.show()
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from flightanalysis import Loop, Line, Snap, Elements, Manoeuvre
|
|
2
|
+
import numpy as np
|
|
3
|
+
from flightdata import State
|
|
4
|
+
import geometry as g
|
|
5
|
+
from flightplotting import plotsec
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
man = Manoeuvre(Elements([
|
|
9
|
+
Line('entry_line', 30, 60, 0),
|
|
10
|
+
Loop('loop', 30, np.pi, 50, 0, 0),
|
|
11
|
+
Snap('snap', 30, 60, 1.5*2*np.pi, np.radians(20), np.radians(45), np.radians(45)),
|
|
12
|
+
]), Line('exit_line', 30, 60, 0))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
tp = man.create_template(State.from_transform(g.Transformation()))
|
|
16
|
+
plotsec(tp, nmodels=10).show()
|
|
@@ -26,14 +26,14 @@ class ScheduleAnalysis(Collection):
|
|
|
26
26
|
|
|
27
27
|
flight = Flight.from_fc_json(data) if flight is None else flight
|
|
28
28
|
|
|
29
|
-
info = ScheduleInfo(*
|
|
29
|
+
info = ScheduleInfo(*data["parameters"]["schedule"]).fcj_to_pfc()
|
|
30
30
|
sdef = SchedDef.load(info)
|
|
31
31
|
box = Origin.from_fcjson_parameters(data["parameters"])
|
|
32
32
|
|
|
33
33
|
state = State.from_flight(flight, box)
|
|
34
34
|
|
|
35
35
|
state = state.splitter_labels(
|
|
36
|
-
data["mans"], sdef.uids, t0=
|
|
36
|
+
data["mans"], sdef.uids, t0=data["data"][0]["time"] / 1e6
|
|
37
37
|
)
|
|
38
38
|
|
|
39
39
|
heading = Heading.infer(state.get_manoeuvre(sdef[0].uid)[0].att.bearing()[0])
|
|
@@ -44,7 +44,7 @@ class ScheduleAnalysis(Collection):
|
|
|
44
44
|
|
|
45
45
|
if "fcs_scores" in data and len(data["fcs_scores"]) > 0:
|
|
46
46
|
st = st.label_els(
|
|
47
|
-
list(data["fcs_scores"]
|
|
47
|
+
list(data["fcs_scores"])[-1]["manresults"][i + 1]["els"]
|
|
48
48
|
)
|
|
49
49
|
|
|
50
50
|
nma = analysis.Basic(
|
{flightanalysis-0.3.7 → flightanalysis-0.3.8}/flightanalysis/builders/BAeAGlid/manbuilder.py
RENAMED
|
@@ -2,13 +2,13 @@ import numpy as np
|
|
|
2
2
|
|
|
3
3
|
from flightanalysis.definition import ManParm, ManParms
|
|
4
4
|
from flightanalysis.builders.BAeAGlid.criteria import Glider
|
|
5
|
-
from flightanalysis.builders.
|
|
5
|
+
from flightanalysis.builders.IAC.downgrades import dg_applicator
|
|
6
6
|
from flightanalysis.builders.BAeAGlid.box import box
|
|
7
7
|
from ..elbuilders import line, loopmaker, rollmaker, spin, stallturn
|
|
8
8
|
from ..manbuilder import ManBuilder
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
glidmb = ManBuilder(
|
|
12
12
|
ManParms(
|
|
13
13
|
[
|
|
14
14
|
ManParm("speed", Glider.inter.speed, 45.0, "m/s"),
|
|
@@ -104,7 +104,7 @@ f3amb = ManBuilder(
|
|
|
104
104
|
),
|
|
105
105
|
),
|
|
106
106
|
),
|
|
107
|
-
|
|
107
|
+
dg_applicator,
|
|
108
108
|
Glider.inter,
|
|
109
109
|
box
|
|
110
110
|
)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from flightanalysis.scoring.box import RectangularBox
|
|
2
|
+
from flightanalysis.builders.IAC.criteria import IAC
|
|
3
|
+
from flightanalysis.scoring.box import BoxDG
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
unlimited_box = RectangularBox(
|
|
7
|
+
width=1000,
|
|
8
|
+
height=1000,
|
|
9
|
+
depth=1000,
|
|
10
|
+
distance=200,
|
|
11
|
+
floor=100,
|
|
12
|
+
bound_dgs=dict(
|
|
13
|
+
bottom=BoxDG(IAC.intra.btmbox, "m"),
|
|
14
|
+
**{
|
|
15
|
+
direc: BoxDG(IAC.intra.box, "m")
|
|
16
|
+
for direc in ["top", "left", "right", "front", "back"]
|
|
17
|
+
}
|
|
18
|
+
),
|
|
19
|
+
)
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
from flightanalysis.scoring.criteria import (
|
|
2
|
+
Single,
|
|
3
|
+
Limit,
|
|
4
|
+
Peak, Trough,
|
|
5
|
+
Exponential,
|
|
6
|
+
Continuous,
|
|
7
|
+
ContinuousValue,
|
|
8
|
+
Bounded,
|
|
9
|
+
Comparison,
|
|
10
|
+
free,
|
|
11
|
+
)
|
|
12
|
+
import numpy as np
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class IACIntra:
|
|
16
|
+
angle = Single(Exponential.fit_points(np.radians([30, 90]), [3, 9], 10))
|
|
17
|
+
end_track = Single(Exponential.fit_points(np.radians([30, 90]), [3, 9], 10))
|
|
18
|
+
end_roll = Single(Exponential.fit_points(np.radians([30, 90]), [2, 9], 10))
|
|
19
|
+
track = Continuous(Exponential.fit_points(np.radians([30, 90]), [3, 9], 10))
|
|
20
|
+
roll = Continuous(Exponential.fit_points(np.radians([30, 90]), [2, 9], 10))
|
|
21
|
+
|
|
22
|
+
loopshape = Continuous(Exponential.fit_points([1.5, 3], [0.5, 1], 3))
|
|
23
|
+
loopsmoothness = ContinuousValue(Exponential.fit_points([1, 2], [0.25, 0.7], 3))
|
|
24
|
+
|
|
25
|
+
rollrate = Continuous(Exponential.fit_points([1, 3], [0.2, 0.6], 3))
|
|
26
|
+
rollsmoothness = ContinuousValue(Exponential.fit_points([1, 2], [0.25, 0.7], 3))
|
|
27
|
+
|
|
28
|
+
autorotation_rate = Continuous(Exponential.fit_points([1, 3], [0.02, 0.06], 0.5))
|
|
29
|
+
stallturn_speed = Limit(Exponential.fit_points([10, 20], [0.5, 1.0], 1), 15)
|
|
30
|
+
stallturn_width = Peak(Exponential.fit_points([20, 50], [0.25, 1.25], 10), 10)
|
|
31
|
+
break_pitch_rate = Bounded(Exponential(10, 1, 0.1), 0.6, -0.6)
|
|
32
|
+
peak_break_pitch_rate = Trough(Exponential(10, 1, 6), limit=0.6)
|
|
33
|
+
|
|
34
|
+
autorotation_alpha = Bounded(Exponential(20, 1, 10), np.radians(7.5), -np.radians(7.5))
|
|
35
|
+
pos_autorotation_alpha = Bounded(Exponential(20, 1, 10), np.radians(7.5))
|
|
36
|
+
neg_autorotation_alpha = Bounded(Exponential(20, 1, 10), None, -np.radians(7.5))
|
|
37
|
+
drop_pitch_rate = Bounded(Exponential(10, 1, 0.1), 0.2)
|
|
38
|
+
peak_drop_pitch_rate = Trough(Exponential(10, 1, 10), 0.2)
|
|
39
|
+
recovery_roll_rate = Bounded(Exponential(1, 1, 0.01), np.pi * 2, -np.pi*2)
|
|
40
|
+
box = Bounded(Exponential.fit_points([50, 100], [0.5, 1], 10), 0, None)
|
|
41
|
+
btmbox = Bounded(Exponential.fit_points([50, 100], [5, 10], 10), 0, None)
|
|
42
|
+
|
|
43
|
+
class IACInter:
|
|
44
|
+
radius = Comparison(Exponential.fit_points([1, 2], [1, 2], 2))
|
|
45
|
+
speed = Comparison(free)
|
|
46
|
+
roll_rate = Comparison(Exponential.fit_points([1, 2], [0.25, 0.5], 1))
|
|
47
|
+
length = Comparison(Exponential.fit_points([1, 2], [1, 2], 2))
|
|
48
|
+
free = Comparison(free)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class IAC:
|
|
52
|
+
inter = IACInter
|
|
53
|
+
intra = IACIntra
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def plot_lookup(lu, v0=0, v1=10):
|
|
57
|
+
import plotly.express as px
|
|
58
|
+
|
|
59
|
+
x = np.linspace(v0, v1, 30)
|
|
60
|
+
px.line(x=x, y=lu(x)).show()
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def plot_all(crits):
|
|
64
|
+
from plotly.subplots import make_subplots
|
|
65
|
+
import plotly.graph_objects as go
|
|
66
|
+
|
|
67
|
+
crits = {k: getattr(crits, k) for k in dir(crits) if not k.startswith("__")}
|
|
68
|
+
# names = [f'{k}_{cr}' for k, crit in crits.items() for cr in crit.keys()]
|
|
69
|
+
|
|
70
|
+
nplots = len(crits)
|
|
71
|
+
ncols = 7
|
|
72
|
+
fig = make_subplots(
|
|
73
|
+
int(np.ceil(nplots / ncols)), ncols, subplot_titles=list(crits.keys())
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
for i, crit in enumerate(crits.values()):
|
|
77
|
+
fig.add_trace(
|
|
78
|
+
crit.lookup.trace(showlegend=False), row=1 + i // ncols, col=1 + i % ncols
|
|
79
|
+
)
|
|
80
|
+
fig.show()
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
if __name__ == "__main__":
|
|
84
|
+
plot_all(IACIntra)
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
from flightanalysis.scoring.measurements import measures, Measurement
|
|
2
|
+
from flightanalysis.scoring.downgrade import DownGrades, dg, DowgradeGroups
|
|
3
|
+
from flightanalysis.scoring.selectors import selectors as sels
|
|
4
|
+
from flightanalysis.scoring.smoothing import smoothers as sms
|
|
5
|
+
from flightanalysis.builders.IAC.criteria import IAC
|
|
6
|
+
import numpy as np
|
|
7
|
+
from flightdata import State
|
|
8
|
+
from flightanalysis.elements import Loop, Line, Snap, Spin, StallTurn
|
|
9
|
+
import geometry as g
|
|
10
|
+
|
|
11
|
+
#LINES
|
|
12
|
+
# track Y Track Z
|
|
13
|
+
# if vel is horizontal: heading attitude altitude track
|
|
14
|
+
# if vel is not horizontal: RF Y attitude RF Z attitude
|
|
15
|
+
|
|
16
|
+
#LOOPS
|
|
17
|
+
#if axial direction vertical: axial track
|
|
18
|
+
#if axial direction not vertical: axial attitude
|
|
19
|
+
# if exit vel horizontal: exit radial track
|
|
20
|
+
# if exit vel not horizontal: exit radial attitude
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def dg_applicator(el: Loop | Line | Snap | Spin | StallTurn, tp: State, last_kind: object, next_kind: object ):
|
|
25
|
+
dgs = []
|
|
26
|
+
|
|
27
|
+
if el.__class__ is Line:
|
|
28
|
+
if abs(el.roll) > 0:
|
|
29
|
+
dgs.append(dg("roll_angle", measures.roll_angle(), None, sels.last(), IAC.intra.end_roll))
|
|
30
|
+
else:
|
|
31
|
+
dgs.append(dg("roll_angle", measures.roll_angle(), sms.lowpass(cutoff=1, order=5), None, IAC.intra.roll))
|
|
32
|
+
if max(tp.pos.z) - min(tp.pos.z) < 1:
|
|
33
|
+
dgs.append(dg("heading", measures.heading_track(), sms.lowpass(cutoff=2, order=5), None, IAC.intra.track))
|
|
34
|
+
dgs.append(dg("climb", measures.climb_track(), sms.lowpass(cutoff=2, order=5), None, IAC.intra.track))
|
|
35
|
+
else:
|
|
36
|
+
dgs.append(dg("pitch", measures.pitch_attitude(), None, None, IAC.intra.track))
|
|
37
|
+
dgs.append(dg("yaw", measures.yaw_attitude(), None, None, IAC.intra.track))
|
|
38
|
+
elif el.__class__ is Loop:
|
|
39
|
+
dgs.append(dg("roundness", measures.curvature_proj(), sms.curvature_lowpass(order=5), None, IAC.intra.loopshape))
|
|
40
|
+
dgs.append(dg("smoothness", measures.absolute_curvature_proj(), sms.lowpass(cutoff=2, order=5), sels.borders(tb=0.25), IAC.intra.loopsmoothness))
|
|
41
|
+
isCircle = g.point.is_parallel(Measurement.get_axial_direction(tp), g.PZ())
|
|
42
|
+
if isCircle:
|
|
43
|
+
dgs.append(dg("axial_track", measures.loop_axial_track(), sms.lowpass(cutoff=2, order=5), None, IAC.intra.track))
|
|
44
|
+
else:
|
|
45
|
+
dgs.append(dg("axial_attitude", measures.loop_axial_attitude(), sms.lowpass(cutoff=2, order=5), None, IAC.intra.track))
|
|
46
|
+
if g.point.is_parallel(tp.vel[-1], g.PX()) and not isCircle:
|
|
47
|
+
dgs.append(dg("radial_track", measures.loop_radial_track(), sms.lowpass(cutoff=2, order=5), sels.last(), IAC.intra.end_track))
|
|
48
|
+
else:
|
|
49
|
+
dgs.append(dg("radial_attitude", measures.loop_radial_attitude(), sms.lowpass(cutoff=2, order=5), sels.last(), IAC.intra.end_track))
|
|
50
|
+
if el.roll == 0:
|
|
51
|
+
dgs.append(dg("roll_angle", measures.roll_angle_p(), sms.lowpass(cutoff=1, order=5), None, IAC.intra.roll))
|
|
52
|
+
else:
|
|
53
|
+
dgs.append(dg("roll_angle", measures.roll_angle_p(), None, sels.last(), IAC.intra.roll))
|
|
54
|
+
elif el.__class__ is StallTurn:
|
|
55
|
+
dgs.append(dg("width", measures.stallturn_width(), None, None, IAC.intra.stallturn_width))
|
|
56
|
+
dgs.append(dg("speed", measures.vertical_speed(), None, sels.first_and_last(), IAC.intra.stallturn_speed))
|
|
57
|
+
dgs.append(dg("roll_angle", measures.roll_angle_z(), None, None, IAC.intra.roll))
|
|
58
|
+
dgs.append(dg("end_yaw", measures.yaw_attitude(), None, sels.last(), IAC.intra.end_track))
|
|
59
|
+
elif el.__class__ is Spin:
|
|
60
|
+
dgs.append(dg("turns", measures.roll_angle_y(), None, sels.last(), IAC.intra.end_roll))
|
|
61
|
+
dgs.append(dg("alpha", measures.spin_alpha_iac(), None, sels.before_recovery(rot=np.pi/4), IAC.intra.pos_autorotation_alpha))
|
|
62
|
+
dgs.append(dg("drop_pitch_rate", measures.pitch_down_rate(), None, sels.autorot_break(rot=np.radians(15)), IAC.intra.drop_pitch_rate ))
|
|
63
|
+
dgs.append(dg("peak_drop_pitch_rate", measures.pitch_down_rate(), None, sels.autorot_break(rot=np.radians(15)), IAC.intra.peak_drop_pitch_rate ))
|
|
64
|
+
dgs.append(dg("exit_y_track", measures.loop_radial_track(), None, sels.last(), IAC.intra.end_track))
|
|
65
|
+
dgs.append(dg("recovery_rate_delta", measures.delta_p(), None, sels.autorot_recovery(rot=np.pi/24), IAC.intra.recovery_roll_rate ))
|
|
66
|
+
elif el.__class__ is Snap:
|
|
67
|
+
dgs.append(dg("turns", measures.roll_angle_y(), None, sels.last(), IAC.intra.end_roll))
|
|
68
|
+
dgs.append(dg("recovery_rate_delta", measures.delta_p(), None, sels.autorot_recovery(rot=np.pi/24), IAC.intra.recovery_roll_rate ))
|
|
69
|
+
dgs.append(dg("alpha", measures.alpha_iac(), None, sels.autorotation(brot=np.pi/4, rrot=np.pi/2), IAC.intra.autorotation_alpha))
|
|
70
|
+
if last_kind is not Snap:
|
|
71
|
+
dgs.append(dg("peak_break_pitch_rate", measures.pitch_rate(), None, sels.autorot_break(rot=np.pi/4), IAC.intra.peak_break_pitch_rate ))
|
|
72
|
+
dgs.append(dg("break_pitch_rate", measures.pitch_rate(), None, sels.autorot_break(rot=np.pi/4), IAC.intra.break_pitch_rate ))
|
|
73
|
+
if (el.__class__ is Line or el.__class__ is Loop ):
|
|
74
|
+
if el.roll > 0:
|
|
75
|
+
dgs.append(dg("roll_rate", measures.roll_rate(), sms.rollrate_lowpass(order=5), None, IAC.intra.rollrate))
|
|
76
|
+
dgs.append(dg("roll_smoothness", measures.abs_roll_rate(), sms.lowpass(cutoff=2, order=5), None, IAC.intra.rollsmoothness))
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
return DownGrades(dgs)
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
|
|
3
|
+
from flightanalysis.definition import ManParm, ManParms
|
|
4
|
+
from flightanalysis.builders.IAC.criteria import IAC
|
|
5
|
+
from flightanalysis.builders.IAC.downgrades import dg_applicator
|
|
6
|
+
from flightanalysis.builders.IAC.box import unlimited_box
|
|
7
|
+
from ..elbuilders import line, loopmaker, rollmaker, spin, stallturn
|
|
8
|
+
from ..manbuilder import ManBuilder
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
_snap_rate = 3*np.pi
|
|
12
|
+
_roll_rate = np.pi
|
|
13
|
+
_spin_rate = np.pi / 2
|
|
14
|
+
_speed = 60
|
|
15
|
+
_break_angle = np.radians(20)
|
|
16
|
+
|
|
17
|
+
iacmb = ManBuilder(
|
|
18
|
+
ManParms(
|
|
19
|
+
[
|
|
20
|
+
ManParm("speed", IAC.inter.speed, _speed, "m/s"),
|
|
21
|
+
ManParm("loop_radius", IAC.inter.radius, 70.0, "m"),
|
|
22
|
+
ManParm("line_length", IAC.inter.length, 180.0, "m"),
|
|
23
|
+
ManParm("point_length", IAC.inter.length, 20.0, "m"),
|
|
24
|
+
ManParm("partial_roll_rate", IAC.inter.roll_rate, _roll_rate, "rad/s"),
|
|
25
|
+
ManParm("full_roll_rate", IAC.inter.roll_rate, _roll_rate, "rad/s"),
|
|
26
|
+
ManParm("snap_rate", IAC.inter.roll_rate, _snap_rate, "rad/s"),
|
|
27
|
+
ManParm("stallturn_rate", IAC.inter.roll_rate, np.pi/4, "rad/s"),
|
|
28
|
+
ManParm("spin_rate", IAC.inter.roll_rate, _spin_rate, "rad/s"),
|
|
29
|
+
ManParm("ee_pause", IAC.inter.length, 20.0, "m"),
|
|
30
|
+
]
|
|
31
|
+
),
|
|
32
|
+
dict(
|
|
33
|
+
line=dict(
|
|
34
|
+
func=line,
|
|
35
|
+
args=[],
|
|
36
|
+
kwargs=dict(
|
|
37
|
+
speed=_speed,
|
|
38
|
+
length=180,
|
|
39
|
+
),
|
|
40
|
+
),
|
|
41
|
+
loop=dict(
|
|
42
|
+
func=loopmaker,
|
|
43
|
+
args=["angle"],
|
|
44
|
+
kwargs=dict(
|
|
45
|
+
speed=40,
|
|
46
|
+
radius=70,
|
|
47
|
+
rolls=0.0,
|
|
48
|
+
ke=False,
|
|
49
|
+
rollangle=None,
|
|
50
|
+
rolltypes="roll",
|
|
51
|
+
reversible=True,
|
|
52
|
+
pause_length="point_length",
|
|
53
|
+
break_angle=_break_angle,
|
|
54
|
+
snap_rate=_snap_rate,
|
|
55
|
+
break_roll=np.pi / 4,
|
|
56
|
+
recovery_roll=np.pi / 2,
|
|
57
|
+
mode="imac",
|
|
58
|
+
),
|
|
59
|
+
),
|
|
60
|
+
roll=dict(
|
|
61
|
+
func=rollmaker,
|
|
62
|
+
args=["rolls"],
|
|
63
|
+
kwargs=dict(
|
|
64
|
+
padded=True,
|
|
65
|
+
reversible=True,
|
|
66
|
+
speed=40,
|
|
67
|
+
line_length=180,
|
|
68
|
+
partial_rate=_roll_rate,
|
|
69
|
+
full_rate=_roll_rate,
|
|
70
|
+
pause_length="point_length",
|
|
71
|
+
mode="imac",
|
|
72
|
+
break_angle=_break_angle,
|
|
73
|
+
snap_rate=_snap_rate,
|
|
74
|
+
break_roll=np.pi / 4,
|
|
75
|
+
recovery_roll=np.pi / 2,
|
|
76
|
+
rolltypes="roll",
|
|
77
|
+
),
|
|
78
|
+
),
|
|
79
|
+
stallturn=dict(
|
|
80
|
+
func=stallturn, args=[], kwargs=dict(speed=0.0, yaw_rate="stallturn_rate")
|
|
81
|
+
),
|
|
82
|
+
snap=dict(
|
|
83
|
+
func=rollmaker,
|
|
84
|
+
args=["rolls"],
|
|
85
|
+
kwargs=dict(
|
|
86
|
+
padded=True,
|
|
87
|
+
reversible=True,
|
|
88
|
+
speed=40,
|
|
89
|
+
line_length=180,
|
|
90
|
+
partial_rate=_roll_rate,
|
|
91
|
+
full_rate=_roll_rate,
|
|
92
|
+
pause_length="point_length",
|
|
93
|
+
mode="imac",
|
|
94
|
+
break_angle=np.radians(20),
|
|
95
|
+
snap_rate=_snap_rate,
|
|
96
|
+
break_roll=np.pi / 4,
|
|
97
|
+
recovery_roll=np.pi / 2,
|
|
98
|
+
rolltypes="snap",
|
|
99
|
+
),
|
|
100
|
+
),
|
|
101
|
+
spin=dict(
|
|
102
|
+
func=spin,
|
|
103
|
+
args=["turns"],
|
|
104
|
+
kwargs=dict(
|
|
105
|
+
speed=10,
|
|
106
|
+
break_angle=np.radians(30),
|
|
107
|
+
rate="spin_rate",
|
|
108
|
+
nd_turns=np.pi / 4,
|
|
109
|
+
recovery_turns=np.pi / 2,
|
|
110
|
+
),
|
|
111
|
+
),
|
|
112
|
+
),
|
|
113
|
+
dg_applicator,
|
|
114
|
+
IAC.inter,
|
|
115
|
+
unlimited_box
|
|
116
|
+
)
|