openap 2.0__tar.gz → 2.1__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.
Files changed (198) hide show
  1. openap-2.1/.github/workflows/build-publish.yml +33 -0
  2. openap-2.1/.gitignore +97 -0
  3. openap-2.1/PKG-INFO +126 -0
  4. openap-2.1/README.md +102 -0
  5. openap-2.1/examples/data/flight_a319_opensky.csv +117 -0
  6. openap-2.1/examples/data/flight_a320_qar.csv +7797 -0
  7. openap-2.1/examples/example_fuel_emission_opensky_data.ipynb +359 -0
  8. openap-2.1/examples/example_fuel_qar_data.ipynb +244 -0
  9. {openap-2.0 → openap-2.1}/openap/__init__.py +1 -0
  10. openap-2.1/openap/addon/__init__.py +0 -0
  11. openap-2.1/openap/addon/bada4.py +443 -0
  12. openap-2.1/openap/base.py +90 -0
  13. {openap-2.0 → openap-2.1}/openap/casadi/__init__.py +2 -2
  14. {openap-2.0 → openap-2.1}/openap/casadi/aero_override.py +55 -41
  15. {openap-2.0 → openap-2.1}/openap/drag.py +28 -43
  16. {openap-2.0 → openap-2.1}/openap/emission.py +10 -8
  17. openap-2.1/openap/extra/__init__.py +48 -0
  18. {openap-2.0 → openap-2.1}/openap/extra/aero.py +55 -35
  19. {openap-2.0 → openap-2.1}/openap/fuel.py +33 -30
  20. {openap-2.0/openap/traj → openap-2.1/openap}/gen.py +171 -163
  21. {openap-2.0 → openap-2.1}/openap/thrust.py +15 -15
  22. {openap-2.0 → openap-2.1}/pyproject.toml +28 -20
  23. openap-2.1/scripts/README.md +4 -0
  24. openap-2.1/scripts/acropole_aircraft_params.csv +30 -0
  25. openap-2.1/scripts/build_fuel_model_from_acropole.py +185 -0
  26. openap-2.1/scripts/db/airports.csv +13794 -0
  27. openap-2.1/scripts/db/emission.csv +400 -0
  28. openap-2.1/scripts/db/engines.csv +418 -0
  29. openap-2.1/scripts/engine2.py +24 -0
  30. openap-2.1/scripts/extract.py +95 -0
  31. openap-2.1/scripts/fuel_flow_correction_factor.py +19 -0
  32. openap-2.1/scripts/gen_airport_database.py +78 -0
  33. openap-2.1/scripts/gen_engine_cruise_perf.py +25 -0
  34. openap-2.1/scripts/gen_engine_data_v27.py +300 -0
  35. openap-2.1/scripts/input/civtfspec.csv +736 -0
  36. openap-2.1/scripts/input/civtfspec.xls +29515 -0
  37. openap-2.1/scripts/input/edb-emissions-databank v23 (web).xlsx +0 -0
  38. openap-2.1/scripts/input/edb-emissions-databank v25a (web).xlsx +0 -0
  39. openap-2.1/scripts/input/edb-emissions-databank v27 (web).xlsx +0 -0
  40. openap-2.1/scripts/input/edb-emissions-databank v28B (web).xlsx +0 -0
  41. openap-2.1/scripts/input/engine_cruise_performance.csv +183 -0
  42. openap-2.1/scripts/input/wrap/a319.csv +36 -0
  43. openap-2.1/scripts/input/wrap/a320.csv +36 -0
  44. openap-2.1/scripts/input/wrap/a321.csv +36 -0
  45. openap-2.1/scripts/input/wrap/a332.csv +36 -0
  46. openap-2.1/scripts/input/wrap/a333.csv +36 -0
  47. openap-2.1/scripts/input/wrap/a343.csv +36 -0
  48. openap-2.1/scripts/input/wrap/a388.csv +36 -0
  49. openap-2.1/scripts/input/wrap/b737.csv +36 -0
  50. openap-2.1/scripts/input/wrap/b738.csv +36 -0
  51. openap-2.1/scripts/input/wrap/b739.csv +36 -0
  52. openap-2.1/scripts/input/wrap/b744.csv +36 -0
  53. openap-2.1/scripts/input/wrap/b752.csv +36 -0
  54. openap-2.1/scripts/input/wrap/b763.csv +36 -0
  55. openap-2.1/scripts/input/wrap/b77w.csv +36 -0
  56. openap-2.1/scripts/input/wrap/b788.csv +36 -0
  57. openap-2.1/scripts/input/wrap/b789.csv +36 -0
  58. openap-2.1/scripts/input/wrap/e190.csv +36 -0
  59. openap-2.1/scripts/inspect_engine_ff_emission.py +66 -0
  60. openap-2.1/scripts/plot_fuel_model.py +31 -0
  61. openap-2.1/scripts/test.csv +36 -0
  62. openap-2.1/scripts/test_acropole.py +196 -0
  63. openap-2.1/scripts/wrap_csv_to_fwf.py +83 -0
  64. openap-2.1/test/data/flight_phase_test.csv +1175 -0
  65. openap-2.1/test/data/flight_phlab.csv +5127 -0
  66. openap-2.1/test/flights/C550/phlab_20170320_08.csv +5472 -0
  67. openap-2.1/test/flights/C550/phlab_20170320_10.csv +5059 -0
  68. openap-2.1/test/flights/C550/phlab_20170320_12.csv +5457 -0
  69. openap-2.1/test/flights/C550/phlab_20170320_14.csv +5258 -0
  70. openap-2.1/test/test_actypes.py +20 -0
  71. openap-2.1/test/test_bada.py +85 -0
  72. openap-2.1/test/test_drag.py +36 -0
  73. openap-2.1/test/test_emission.py +82 -0
  74. openap-2.1/test/test_fuel.py +34 -0
  75. openap-2.1/test/test_kinematic.py +8 -0
  76. openap-2.1/test/test_nav.py +17 -0
  77. openap-2.1/test/test_phase.py +79 -0
  78. openap-2.1/test/test_prop.py +10 -0
  79. openap-2.1/test/test_thrust.py +61 -0
  80. openap-2.1/test/test_trajectory.py +81 -0
  81. openap-2.1/uv.lock +874 -0
  82. openap-2.0/PKG-INFO +0 -99
  83. openap-2.0/README.md +0 -69
  84. openap-2.0/openap/extra/__init__.py +0 -24
  85. openap-2.0/openap/traj/__init__.py +0 -1
  86. {openap-2.0 → openap-2.1}/LICENSE +0 -0
  87. {openap-2.0 → openap-2.1}/openap/casadi/numpy_override.py +0 -0
  88. {openap-2.0 → openap-2.1}/openap/contrail.py +0 -0
  89. {openap-2.0 → openap-2.1}/openap/data/.gitignore +0 -0
  90. {openap-2.0 → openap-2.1}/openap/data/LICENSE +0 -0
  91. {openap-2.0 → openap-2.1}/openap/data/aircraft/_synonym.csv +0 -0
  92. {openap-2.0 → openap-2.1}/openap/data/aircraft/a19n.yml +0 -0
  93. {openap-2.0 → openap-2.1}/openap/data/aircraft/a20n.yml +0 -0
  94. {openap-2.0 → openap-2.1}/openap/data/aircraft/a21n.yml +0 -0
  95. {openap-2.0 → openap-2.1}/openap/data/aircraft/a318.yml +0 -0
  96. {openap-2.0 → openap-2.1}/openap/data/aircraft/a319.yml +0 -0
  97. {openap-2.0 → openap-2.1}/openap/data/aircraft/a320.yml +0 -0
  98. {openap-2.0 → openap-2.1}/openap/data/aircraft/a321.yml +0 -0
  99. {openap-2.0 → openap-2.1}/openap/data/aircraft/a332.yml +0 -0
  100. {openap-2.0 → openap-2.1}/openap/data/aircraft/a333.yml +0 -0
  101. {openap-2.0 → openap-2.1}/openap/data/aircraft/a343.yml +0 -0
  102. {openap-2.0 → openap-2.1}/openap/data/aircraft/a359.yml +0 -0
  103. {openap-2.0 → openap-2.1}/openap/data/aircraft/a388.yml +0 -0
  104. {openap-2.0 → openap-2.1}/openap/data/aircraft/b37m.yml +0 -0
  105. {openap-2.0 → openap-2.1}/openap/data/aircraft/b38m.yml +0 -0
  106. {openap-2.0 → openap-2.1}/openap/data/aircraft/b39m.yml +0 -0
  107. {openap-2.0 → openap-2.1}/openap/data/aircraft/b3xm.yml +0 -0
  108. {openap-2.0 → openap-2.1}/openap/data/aircraft/b734.yml +0 -0
  109. {openap-2.0 → openap-2.1}/openap/data/aircraft/b737.yml +0 -0
  110. {openap-2.0 → openap-2.1}/openap/data/aircraft/b738.yml +0 -0
  111. {openap-2.0 → openap-2.1}/openap/data/aircraft/b739.yml +0 -0
  112. {openap-2.0 → openap-2.1}/openap/data/aircraft/b744.yml +0 -0
  113. {openap-2.0 → openap-2.1}/openap/data/aircraft/b748.yml +0 -0
  114. {openap-2.0 → openap-2.1}/openap/data/aircraft/b752.yml +0 -0
  115. {openap-2.0 → openap-2.1}/openap/data/aircraft/b763.yml +0 -0
  116. {openap-2.0 → openap-2.1}/openap/data/aircraft/b772.yml +0 -0
  117. {openap-2.0 → openap-2.1}/openap/data/aircraft/b773.yml +0 -0
  118. {openap-2.0 → openap-2.1}/openap/data/aircraft/b77w.yml +0 -0
  119. {openap-2.0 → openap-2.1}/openap/data/aircraft/b788.yml +0 -0
  120. {openap-2.0 → openap-2.1}/openap/data/aircraft/b789.yml +0 -0
  121. {openap-2.0 → openap-2.1}/openap/data/aircraft/c550.yml +0 -0
  122. {openap-2.0 → openap-2.1}/openap/data/aircraft/e145.yml +0 -0
  123. {openap-2.0 → openap-2.1}/openap/data/aircraft/e170.yml +0 -0
  124. {openap-2.0 → openap-2.1}/openap/data/aircraft/e190.yml +0 -0
  125. {openap-2.0 → openap-2.1}/openap/data/aircraft/e195.yml +0 -0
  126. {openap-2.0 → openap-2.1}/openap/data/aircraft/e75l.yml +0 -0
  127. {openap-2.0 → openap-2.1}/openap/data/aircraft/glf6.yml +0 -0
  128. {openap-2.0 → openap-2.1}/openap/data/dragpolar/_synonym.csv +0 -0
  129. {openap-2.0 → openap-2.1}/openap/data/dragpolar/a20n.yml +0 -0
  130. {openap-2.0 → openap-2.1}/openap/data/dragpolar/a319.yml +0 -0
  131. {openap-2.0 → openap-2.1}/openap/data/dragpolar/a320.yml +0 -0
  132. {openap-2.0 → openap-2.1}/openap/data/dragpolar/a321.yml +0 -0
  133. {openap-2.0 → openap-2.1}/openap/data/dragpolar/a332.yml +0 -0
  134. {openap-2.0 → openap-2.1}/openap/data/dragpolar/a333.yml +0 -0
  135. {openap-2.0 → openap-2.1}/openap/data/dragpolar/a343.yml +0 -0
  136. {openap-2.0 → openap-2.1}/openap/data/dragpolar/a359.yml +0 -0
  137. {openap-2.0 → openap-2.1}/openap/data/dragpolar/a388.yml +0 -0
  138. {openap-2.0 → openap-2.1}/openap/data/dragpolar/b38m.yml +0 -0
  139. {openap-2.0 → openap-2.1}/openap/data/dragpolar/b734.yml +0 -0
  140. {openap-2.0 → openap-2.1}/openap/data/dragpolar/b737.yml +0 -0
  141. {openap-2.0 → openap-2.1}/openap/data/dragpolar/b738.yml +0 -0
  142. {openap-2.0 → openap-2.1}/openap/data/dragpolar/b739.yml +0 -0
  143. {openap-2.0 → openap-2.1}/openap/data/dragpolar/b744.yml +0 -0
  144. {openap-2.0 → openap-2.1}/openap/data/dragpolar/b748.yml +0 -0
  145. {openap-2.0 → openap-2.1}/openap/data/dragpolar/b752.yml +0 -0
  146. {openap-2.0 → openap-2.1}/openap/data/dragpolar/b772.yml +0 -0
  147. {openap-2.0 → openap-2.1}/openap/data/dragpolar/b77w.yml +0 -0
  148. {openap-2.0 → openap-2.1}/openap/data/dragpolar/b788.yml +0 -0
  149. {openap-2.0 → openap-2.1}/openap/data/dragpolar/b789.yml +0 -0
  150. {openap-2.0 → openap-2.1}/openap/data/dragpolar/c550.yml +0 -0
  151. {openap-2.0 → openap-2.1}/openap/data/dragpolar/e190.yml +0 -0
  152. {openap-2.0 → openap-2.1}/openap/data/dragpolar/e195.yml +0 -0
  153. {openap-2.0 → openap-2.1}/openap/data/dragpolar/e75l.yml +0 -0
  154. {openap-2.0 → openap-2.1}/openap/data/dragpolar/glf6.yml +0 -0
  155. {openap-2.0 → openap-2.1}/openap/data/engine/engines.csv +0 -0
  156. {openap-2.0 → openap-2.1}/openap/data/fuel/_synonym.csv +0 -0
  157. {openap-2.0 → openap-2.1}/openap/data/fuel/a318.yml +0 -0
  158. {openap-2.0 → openap-2.1}/openap/data/fuel/a319.yml +0 -0
  159. {openap-2.0 → openap-2.1}/openap/data/fuel/a320.yml +0 -0
  160. {openap-2.0 → openap-2.1}/openap/data/fuel/a321.yml +0 -0
  161. {openap-2.0 → openap-2.1}/openap/data/fuel/a332.yml +0 -0
  162. {openap-2.0 → openap-2.1}/openap/data/fuel/a333.yml +0 -0
  163. {openap-2.0 → openap-2.1}/openap/data/fuel/b734.yml +0 -0
  164. {openap-2.0 → openap-2.1}/openap/data/fuel/b737.yml +0 -0
  165. {openap-2.0 → openap-2.1}/openap/data/fuel/b738.yml +0 -0
  166. {openap-2.0 → openap-2.1}/openap/data/fuel/b739.yml +0 -0
  167. {openap-2.0 → openap-2.1}/openap/data/fuel/e170.yml +0 -0
  168. {openap-2.0 → openap-2.1}/openap/data/fuel/e190.yml +0 -0
  169. {openap-2.0 → openap-2.1}/openap/data/fuel/e195.yml +0 -0
  170. {openap-2.0 → openap-2.1}/openap/data/fuel/e75l.yml +0 -0
  171. {openap-2.0 → openap-2.1}/openap/data/nav/airports.csv +0 -0
  172. {openap-2.0 → openap-2.1}/openap/data/nav/fix.dat +0 -0
  173. {openap-2.0 → openap-2.1}/openap/data/nav/nav.dat +0 -0
  174. {openap-2.0 → openap-2.1}/openap/data/wrap/_synonym.csv +0 -0
  175. {openap-2.0 → openap-2.1}/openap/data/wrap/a319.txt +0 -0
  176. {openap-2.0 → openap-2.1}/openap/data/wrap/a320.txt +0 -0
  177. {openap-2.0 → openap-2.1}/openap/data/wrap/a321.txt +0 -0
  178. {openap-2.0 → openap-2.1}/openap/data/wrap/a332.txt +0 -0
  179. {openap-2.0 → openap-2.1}/openap/data/wrap/a333.txt +0 -0
  180. {openap-2.0 → openap-2.1}/openap/data/wrap/a343.txt +0 -0
  181. {openap-2.0 → openap-2.1}/openap/data/wrap/a388.txt +0 -0
  182. {openap-2.0 → openap-2.1}/openap/data/wrap/b737.txt +0 -0
  183. {openap-2.0 → openap-2.1}/openap/data/wrap/b738.txt +0 -0
  184. {openap-2.0 → openap-2.1}/openap/data/wrap/b739.txt +0 -0
  185. {openap-2.0 → openap-2.1}/openap/data/wrap/b744.txt +0 -0
  186. {openap-2.0 → openap-2.1}/openap/data/wrap/b752.txt +0 -0
  187. {openap-2.0 → openap-2.1}/openap/data/wrap/b763.txt +0 -0
  188. {openap-2.0 → openap-2.1}/openap/data/wrap/b77w.txt +0 -0
  189. {openap-2.0 → openap-2.1}/openap/data/wrap/b788.txt +0 -0
  190. {openap-2.0 → openap-2.1}/openap/data/wrap/b789.txt +0 -0
  191. {openap-2.0 → openap-2.1}/openap/data/wrap/e190.txt +0 -0
  192. {openap-2.0 → openap-2.1}/openap/extra/filters.py +0 -0
  193. {openap-2.0 → openap-2.1}/openap/extra/fuzzy.py +0 -0
  194. {openap-2.0 → openap-2.1}/openap/extra/nav.py +0 -0
  195. {openap-2.0 → openap-2.1}/openap/extra/statistics.py +0 -0
  196. {openap-2.0 → openap-2.1}/openap/kinematic.py +0 -0
  197. {openap-2.0 → openap-2.1}/openap/phase.py +0 -0
  198. {openap-2.0 → openap-2.1}/openap/prop.py +0 -0
@@ -0,0 +1,33 @@
1
+ name: build and publish
2
+
3
+ on:
4
+ release:
5
+ types:
6
+ - published
7
+ workflow_dispatch:
8
+
9
+ jobs:
10
+ deploy:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+
15
+ - name: Install uv
16
+ uses: astral-sh/setup-uv@v3
17
+ with:
18
+ enable-cache: true
19
+
20
+ - name: Set up Python
21
+ uses: actions/setup-python@v5
22
+ with:
23
+ python-version: "3.11"
24
+
25
+ - name: Build packages
26
+ run: |
27
+ uvx --with hatch-vcs hatchling build
28
+
29
+ - name: Publish a Python distribution to PyPI
30
+ uses: pypa/gh-action-pypi-publish@release/v1
31
+ with:
32
+ user: __token__
33
+ password: ${{ secrets.PYPI_API_TOKEN_OPENAP }}
openap-2.1/.gitignore ADDED
@@ -0,0 +1,97 @@
1
+ tmp
2
+
3
+ # Byte-compiled / optimized / DLL files
4
+ __pycache__/
5
+ *.py[cod]
6
+ *$py.class
7
+
8
+ .pytest_cache
9
+
10
+ # C extensions
11
+ *.so
12
+
13
+ # Distribution / packaging
14
+ .Python
15
+ env/
16
+ build/
17
+ develop-eggs/
18
+ dist/
19
+ downloads/
20
+ eggs/
21
+ .eggs/
22
+ lib/
23
+ lib64/
24
+ parts/
25
+ sdist/
26
+ var/
27
+ *.egg-info/
28
+ .installed.cfg
29
+ *.egg
30
+
31
+ # PyInstaller
32
+ # Usually these files are written by a python script from a template
33
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
34
+ *.manifest
35
+ *.spec
36
+
37
+ # Installer logs
38
+ pip-log.txt
39
+ pip-delete-this-directory.txt
40
+
41
+ # Unit test / coverage reports
42
+ htmlcov/
43
+ .tox/
44
+ .coverage
45
+ .coverage.*
46
+ .cache
47
+ nosetests.xml
48
+ coverage.xml
49
+ *,cover
50
+ .hypothesis/
51
+
52
+ # Translations
53
+ *.mo
54
+ *.pot
55
+
56
+ # Django stuff:
57
+ *.log
58
+ local_settings.py
59
+
60
+ # Flask stuff:
61
+ instance/
62
+ .webassets-cache
63
+
64
+ # Scrapy stuff:
65
+ .scrapy
66
+
67
+ # Sphinx documentation
68
+ docs/_build/
69
+
70
+ # PyBuilder
71
+ target/
72
+
73
+ # IPython Notebook
74
+ .ipynb_checkpoints
75
+
76
+ # pyenv
77
+ .python-version
78
+
79
+ # celery beat schedule file
80
+ celerybeat-schedule
81
+
82
+ # dotenv
83
+ .env
84
+
85
+ # virtualenv
86
+ venv/
87
+ ENV/
88
+
89
+ # Spyder project settings
90
+ .spyderproject
91
+
92
+ # Rope project settings
93
+ .ropeproject
94
+
95
+
96
+ #vs code
97
+ .vscode
openap-2.1/PKG-INFO ADDED
@@ -0,0 +1,126 @@
1
+ Metadata-Version: 2.3
2
+ Name: openap
3
+ Version: 2.1
4
+ Summary: Open Aircraft Performance Model (OpenAP) in Python
5
+ Project-URL: homepage, https://openap.dev
6
+ Project-URL: repository, https://github.com/junzis/openap
7
+ Project-URL: issues, https://github.com/junzis/openap/issues
8
+ Author-email: Junzi Sun <j.sun-1@tudelft.nl>
9
+ License: GNU LGPL v3
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Intended Audience :: Information Technology
13
+ Classifier: Intended Audience :: Science/Research
14
+ Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
17
+ Requires-Python: >=3.9
18
+ Requires-Dist: matplotlib>=3.1
19
+ Requires-Dist: numpy>=1.24
20
+ Requires-Dist: pandas>=1.2
21
+ Requires-Dist: pyyaml>=5.1
22
+ Requires-Dist: scipy>=1.7
23
+ Description-Content-Type: text/markdown
24
+
25
+ # OpenAP: Open Aircraft Performance Model and Toolkit
26
+
27
+ This repository contains the OpenAP model data and Python packages for aircraft performance and emission calculations.
28
+
29
+ ## 🕮 User Guide
30
+
31
+ The OpenAP handbook is available at [openap.dev](https://openap.dev/).
32
+
33
+ ## Installation
34
+
35
+ Install the latest stable release from PyPI:
36
+
37
+ ```sh
38
+ pip install --upgrade openap
39
+ ```
40
+
41
+ Install the development branch from GitHub (may not be stable):
42
+
43
+ ```sh
44
+ pip install --upgrade git+https://github.com/junzis/openap
45
+ ```
46
+
47
+ ## Content
48
+
49
+ ### Model Data
50
+
51
+ Data in this repository includes:
52
+
53
+ - Aircraft data: Collected from open literature.
54
+ - Engine data: Primarily from the ICAO emission data-bank, including fuel flow and emissions.
55
+ - Drag polar model data: Exclusively derived from open data ([reference](https://research.tudelft.nl/files/71038050/published_OpenAP_drag_polar.pdf)).
56
+ - Fuel model data: Polynomial models derived from the [acropole model](https://github.com/DGAC/Acropole) by [@JarryGabriel](https://github.com/JarryGabriel).
57
+ - Kinematic data: The kinematic model describes speed, altitude, and vertical rate ([reference](https://github.com/junzis/wrap)).
58
+ - Navigation data: Airport and waypoints obtained from [X-Plane](https://developer.x-plane.com/docs/data-development-documentation/).
59
+
60
+ ### Python Packages
61
+
62
+ The OpenAP Python library includes the following packages:
63
+
64
+ - `prop`: Module for accessing aircraft and engine properties.
65
+ - `aero`: Module for common aeronautical conversions.
66
+ - `nav`: Module for accessing navigation information.
67
+ - `thrust`: Module provides `Thrust()` class for computing aircraft thrust.
68
+ - `drag`: Module provides `Drag()` class for computing aircraft drag.
69
+ - `fuel`: Module provides `FuelFlow()` class for computing fuel consumption.
70
+ - `emission`: Module provides `Emission()` class for computing aircraft emissions.
71
+ - `kinematic`: Module provides `WRAP()` class for accessing kinematic performance data.
72
+ - `phase`: Module provides `FlightPhase()` class for determining flight phases.
73
+ - `gen`: Module provides `FlightGenerator()` class for trajectory generation.
74
+
75
+ Examples:
76
+
77
+ ```python
78
+ import openap
79
+
80
+ openap.prop.aircraft("A320")
81
+ fuelflow = openap.FuelFlow("A320")
82
+ fuelflow.enroute(mass, tas, alt) # -> kg/s
83
+ ```
84
+
85
+ The input parameters can be scalar, list, or ndarray. Most of the OpenAP methods' parameters are in aeronautical units, such as knots, feet, feet/min. The mass is always in SI units, i.e., kilograms.
86
+
87
+ ### Add-ons
88
+
89
+ The OpenAP library can also be used to interact with BADA performance models if you have access to the BADA data from EUROCONTROL. You can use the following code:
90
+
91
+ ```python
92
+ from openap.addon import bada4
93
+
94
+ fuelflow = bada4.FuelFlow()
95
+ ```
96
+
97
+ The methods and attributes of `openap.addon.bada4.FuelFlow()` are the same as those of `openap.FuelFlow()`.
98
+
99
+ ## Symbolic Implementation for CasADi
100
+
101
+ The OpenAP model can also be used with the CasADi library for symbolic computations. The symbolic model is available in the `openap.casadi` package. For example, you can use the following code to create a symbolic model for fuel flow:
102
+
103
+ ```python
104
+ from openap.casadi import FuelFlow
105
+
106
+ fuelflow = FuelFlow()
107
+ ```
108
+
109
+ All the methods of `openap.casadi.FuelFlow()` are the same as those of `openap.FuelFlow()`, and they are now symbolic functions that can be used to compute fuel flow for given flight conditions in CasADi `DM`, `SX`, or `MX` types.
110
+
111
+ How did we implement this? When the `casadi` module is initiated, a metaclass is used to replace the `sci` function from `numpy`, which overrides all the `numpy` functions with `casadi` functions. For more details, check the `openap/casadi/__init__.py` code.
112
+
113
+ ## Citing OpenAP
114
+
115
+ ```
116
+ @article{sun2020openap,
117
+ title={OpenAP: An open-source aircraft performance model for air transportation studies and simulations},
118
+ author={Sun, Junzi and Hoekstra, Jacco M and Ellerbroek, Joost},
119
+ journal={Aerospace},
120
+ volume={7},
121
+ number={8},
122
+ pages={104},
123
+ year={2020},
124
+ publisher={Multidisciplinary Digital Publishing Institute}
125
+ }
126
+ ```
openap-2.1/README.md ADDED
@@ -0,0 +1,102 @@
1
+ # OpenAP: Open Aircraft Performance Model and Toolkit
2
+
3
+ This repository contains the OpenAP model data and Python packages for aircraft performance and emission calculations.
4
+
5
+ ## 🕮 User Guide
6
+
7
+ The OpenAP handbook is available at [openap.dev](https://openap.dev/).
8
+
9
+ ## Installation
10
+
11
+ Install the latest stable release from PyPI:
12
+
13
+ ```sh
14
+ pip install --upgrade openap
15
+ ```
16
+
17
+ Install the development branch from GitHub (may not be stable):
18
+
19
+ ```sh
20
+ pip install --upgrade git+https://github.com/junzis/openap
21
+ ```
22
+
23
+ ## Content
24
+
25
+ ### Model Data
26
+
27
+ Data in this repository includes:
28
+
29
+ - Aircraft data: Collected from open literature.
30
+ - Engine data: Primarily from the ICAO emission data-bank, including fuel flow and emissions.
31
+ - Drag polar model data: Exclusively derived from open data ([reference](https://research.tudelft.nl/files/71038050/published_OpenAP_drag_polar.pdf)).
32
+ - Fuel model data: Polynomial models derived from the [acropole model](https://github.com/DGAC/Acropole) by [@JarryGabriel](https://github.com/JarryGabriel).
33
+ - Kinematic data: The kinematic model describes speed, altitude, and vertical rate ([reference](https://github.com/junzis/wrap)).
34
+ - Navigation data: Airport and waypoints obtained from [X-Plane](https://developer.x-plane.com/docs/data-development-documentation/).
35
+
36
+ ### Python Packages
37
+
38
+ The OpenAP Python library includes the following packages:
39
+
40
+ - `prop`: Module for accessing aircraft and engine properties.
41
+ - `aero`: Module for common aeronautical conversions.
42
+ - `nav`: Module for accessing navigation information.
43
+ - `thrust`: Module provides `Thrust()` class for computing aircraft thrust.
44
+ - `drag`: Module provides `Drag()` class for computing aircraft drag.
45
+ - `fuel`: Module provides `FuelFlow()` class for computing fuel consumption.
46
+ - `emission`: Module provides `Emission()` class for computing aircraft emissions.
47
+ - `kinematic`: Module provides `WRAP()` class for accessing kinematic performance data.
48
+ - `phase`: Module provides `FlightPhase()` class for determining flight phases.
49
+ - `gen`: Module provides `FlightGenerator()` class for trajectory generation.
50
+
51
+ Examples:
52
+
53
+ ```python
54
+ import openap
55
+
56
+ openap.prop.aircraft("A320")
57
+ fuelflow = openap.FuelFlow("A320")
58
+ fuelflow.enroute(mass, tas, alt) # -> kg/s
59
+ ```
60
+
61
+ The input parameters can be scalar, list, or ndarray. Most of the OpenAP methods' parameters are in aeronautical units, such as knots, feet, feet/min. The mass is always in SI units, i.e., kilograms.
62
+
63
+ ### Add-ons
64
+
65
+ The OpenAP library can also be used to interact with BADA performance models if you have access to the BADA data from EUROCONTROL. You can use the following code:
66
+
67
+ ```python
68
+ from openap.addon import bada4
69
+
70
+ fuelflow = bada4.FuelFlow()
71
+ ```
72
+
73
+ The methods and attributes of `openap.addon.bada4.FuelFlow()` are the same as those of `openap.FuelFlow()`.
74
+
75
+ ## Symbolic Implementation for CasADi
76
+
77
+ The OpenAP model can also be used with the CasADi library for symbolic computations. The symbolic model is available in the `openap.casadi` package. For example, you can use the following code to create a symbolic model for fuel flow:
78
+
79
+ ```python
80
+ from openap.casadi import FuelFlow
81
+
82
+ fuelflow = FuelFlow()
83
+ ```
84
+
85
+ All the methods of `openap.casadi.FuelFlow()` are the same as those of `openap.FuelFlow()`, and they are now symbolic functions that can be used to compute fuel flow for given flight conditions in CasADi `DM`, `SX`, or `MX` types.
86
+
87
+ How did we implement this? When the `casadi` module is initiated, a metaclass is used to replace the `sci` function from `numpy`, which overrides all the `numpy` functions with `casadi` functions. For more details, check the `openap/casadi/__init__.py` code.
88
+
89
+ ## Citing OpenAP
90
+
91
+ ```
92
+ @article{sun2020openap,
93
+ title={OpenAP: An open-source aircraft performance model for air transportation studies and simulations},
94
+ author={Sun, Junzi and Hoekstra, Jacco M and Ellerbroek, Joost},
95
+ journal={Aerospace},
96
+ volume={7},
97
+ number={8},
98
+ pages={104},
99
+ year={2020},
100
+ publisher={Multidisciplinary Digital Publishing Institute}
101
+ }
102
+ ```
@@ -0,0 +1,117 @@
1
+ timestamp,icao24,typecode,callsign,origin,destination,latitude,longitude,altitude,groundspeed,track,vertical_rate
2
+ 2018-01-02 19:53:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,49.085861206054695,2.3496657151442313,8200.0,255.0,327.8042660652868,1920.0
3
+ 2018-01-02 19:54:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,49.15342712402346,2.3108614408052888,9475.0,290.0,9.72201801381101,960.0
4
+ 2018-01-02 19:55:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,49.23336740267481,2.3611209267064153,9975.0,332.0,23.24391944367926,640.0
5
+ 2018-01-02 19:56:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,49.319915771484375,2.418471116286056,11225.0,353.0,23.51796167369224,2752.0
6
+ 2018-01-02 19:57:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,49.41165161132812,2.478895920973556,14175.0,368.0,23.56691545099568,3584.0
7
+ 2018-01-02 19:58:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,49.5051859192929,2.540811074746623,17725.0,351.0,23.348747585296735,3776.0
8
+ 2018-01-02 19:59:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,49.59689382779397,2.601607039168076,19850.0,374.0,23.48023884658039,2176.0
9
+ 2018-01-02 20:00:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,49.69428110930879,2.6667084565033776,21900.0,390.0,23.410724709134342,1728.0
10
+ 2018-01-02 20:01:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,49.794042554952334,2.733739904455236,23850.0,403.0,23.572334589698528,1664.0
11
+ 2018-01-02 20:02:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,49.894874702065685,2.8225955447635145,25550.0,426.0,32.1620454014718,1536.0
12
+ 2018-01-02 20:03:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,49.99496201337395,2.92065594647382,27375.0,434.0,32.18745180416772,1472.0
13
+ 2018-01-02 20:04:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,50.098617553710945,3.022830360814145,28650.0,449.0,32.45162406090128,1024.0
14
+ 2018-01-02 20:05:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,50.205378128310386,3.1283569335937504,30000.0,457.0,31.221650272108775,1344.0
15
+ 2018-01-02 20:06:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,50.317108154296875,3.2137178119860206,31400.0,451.0,24.2335415525842,1408.0
16
+ 2018-01-02 20:07:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,50.43063354492189,3.297922234786184,32925.0,451.0,29.744881296942197,448.0
17
+ 2018-01-02 20:08:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,50.53308105468749,3.411038047388978,33000.0,459.0,36.84491039077176,0.0
18
+ 2018-01-02 20:09:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,50.62788391113282,3.541067023026314,33000.0,461.0,36.96941257749569,0.0
19
+ 2018-01-02 20:10:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,50.7370046841896,3.651885986328125,33000.0,457.0,36.895005347792164,0.0
20
+ 2018-01-02 20:11:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,50.863677978515625,3.8027541701858123,32975.0,460.0,37.318095383748584,0.0
21
+ 2018-01-02 20:12:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,50.965436515161535,3.9250183105468754,33000.0,458.0,37.19501206727989,0.0
22
+ 2018-01-02 20:13:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,51.03854370117188,4.013350203230576,33000.0,444.0,37.489845817396315,-64.0
23
+ 2018-01-02 20:14:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,51.15907287597657,4.158919050886825,32975.0,433.0,37.399173856045365,0.0
24
+ 2018-01-02 20:15:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,51.23129634533898,4.247131347656252,33000.0,435.0,37.399173856045365,0.0
25
+ 2018-01-02 20:16:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,51.3265422239142,4.363632202148439,33000.0,436.0,37.55258314980483,0.0
26
+ 2018-01-02 20:17:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,51.42333984375,4.482570338893581,33025.0,438.0,37.76016260337798,0.0
27
+ 2018-01-02 20:18:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,51.51866330938824,4.600753784179688,33025.0,436.0,37.73675525941542,0.0
28
+ 2018-01-02 20:19:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,51.61427307128907,4.719518713048988,32975.0,436.0,37.921078395387724,0.0
29
+ 2018-01-02 20:20:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,51.70948093220339,4.838943481445312,32975.0,435.0,37.89810543334306,0.0
30
+ 2018-01-02 20:21:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,51.80435439287607,4.958114624023437,33000.0,434.0,37.979220854798825,0.0
31
+ 2018-01-02 20:22:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,51.89254760742188,5.088303024704392,32975.0,432.0,37.85171160545963,0.0
32
+ 2018-01-02 20:23:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,51.99128723144532,5.19378662109375,32975.0,431.0,38.11988575616397,0.0
33
+ 2018-01-02 20:24:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,52.086460954051915,5.315028599330358,32975.0,429.0,38.097285948048466,-64.0
34
+ 2018-01-02 20:25:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,52.17472399695444,5.428030831473215,32950.0,432.0,38.328502777056144,0.0
35
+ 2018-01-02 20:26:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,52.274505615234375,5.5565643310546875,33000.0,434.0,38.350215916764796,0.0
36
+ 2018-01-02 20:27:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,52.365463256835945,5.674514770507812,33025.0,433.0,38.535925680623166,0.0
37
+ 2018-01-02 20:28:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,52.48576354980469,5.831756591796876,33000.0,434.0,38.82480644308316,0.0
38
+ 2018-01-02 20:29:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,52.55594027244439,5.92429896763393,33000.0,435.0,38.742159299808804,0.0
39
+ 2018-01-02 20:30:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,52.64978027343751,6.048583984375001,33000.0,434.0,38.82480644308316,0.0
40
+ 2018-01-02 20:31:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,52.74252164161811,6.171883719308036,32950.0,435.0,39.029984019142944,0.0
41
+ 2018-01-02 20:32:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,52.8365478515625,6.29783630371094,32975.0,438.0,39.06847307508025,0.0
42
+ 2018-01-02 20:33:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,52.930938720703125,6.424484252929689,33000.0,439.0,39.27104871525512,0.0
43
+ 2018-01-02 20:34:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,53.0487888142214,6.584420340401786,33025.0,439.0,39.27104871525512,0.0
44
+ 2018-01-02 20:35:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,53.12489318847656,6.685259137834823,33000.0,438.0,39.53775753812636,0.0
45
+ 2018-01-02 20:36:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,53.21328735351563,6.80924769810268,33000.0,438.0,39.43679117925603,0.0
46
+ 2018-01-02 20:37:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,53.30515198788402,6.936008228975185,32975.0,436.0,39.603707760100974,0.0
47
+ 2018-01-02 20:38:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,53.39886474609375,7.065935407366072,32975.0,436.0,39.78874413841322,0.0
48
+ 2018-01-02 20:39:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,53.491360939155186,7.194671630859377,33000.0,434.0,39.95754893082909,0.0
49
+ 2018-01-02 20:40:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,53.58334350585939,7.323800223214286,32975.0,432.0,39.924547621521015,0.0
50
+ 2018-01-02 20:41:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,53.675354003906264,7.453517368861609,32975.0,430.0,39.907884875501054,0.0
51
+ 2018-01-02 20:42:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,53.765972590042374,7.582101260914522,32975.0,429.0,40.07938396363596,0.0
52
+ 2018-01-02 20:43:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,53.85302527476165,7.706262925091911,33000.0,428.0,40.16559369373675,0.0
53
+ 2018-01-02 20:44:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,53.94673492948889,7.8414109173943025,33000.0,426.0,40.42607874009906,0.0
54
+ 2018-01-02 20:45:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,54.03529357910156,7.968462262834823,33000.0,424.0,40.41084657788639,0.0
55
+ 2018-01-02 20:46:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,54.12565612792968,8.099748883928571,32975.0,423.0,40.498561543881806,0.0
56
+ 2018-01-02 20:47:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,54.2149223715572,8.230052274816176,33075.0,425.0,40.70371293647872,0.0
57
+ 2018-01-02 20:48:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,54.31274414062501,8.362696030560661,33775.0,437.0,40.82860128093307,1024.0
58
+ 2018-01-02 20:49:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,54.396652221679695,8.498247931985293,34775.0,442.0,41.051657500403564,960.0
59
+ 2018-01-02 20:50:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,54.48948669433593,8.66166956284467,35000.0,435.0,37.05438203892504,0.0
60
+ 2018-01-02 20:51:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,54.591064453125,8.742037686434658,35000.0,435.0,30.692642879589698,0.0
61
+ 2018-01-02 20:52:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,54.69483947753906,8.849164177389705,35700.0,441.0,31.097312885779445,448.0
62
+ 2018-01-02 20:53:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,54.79261779785158,8.982534969554228,36000.0,453.0,46.78991060824603,-64.0
63
+ 2018-01-02 20:54:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,54.877733133607,9.139875932173297,36450.0,457.0,46.773296715560775,704.0
64
+ 2018-01-02 20:55:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,54.96546936035156,9.303238812614888,36950.0,471.0,47.15296278910046,320.0
65
+ 2018-01-02 20:56:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,55.05422973632812,9.470376407398897,37000.0,472.0,47.318053833864155,0.0
66
+ 2018-01-02 20:57:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,55.14280157574153,9.637423428622158,37000.0,471.0,47.40741384434011,0.0
67
+ 2018-01-02 20:58:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,55.23064564850371,9.805214621803977,37000.0,469.0,47.504553780280105,0.0
68
+ 2018-01-02 20:59:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,55.31785583496095,9.972354664522058,37000.0,469.0,47.59471023879496,0.0
69
+ 2018-01-02 21:00:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,55.405030331369176,10.14088023792613,37000.0,464.0,47.792702365713296,0.0
70
+ 2018-01-02 21:01:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,55.49050024000266,10.30672073364258,36975.0,462.0,47.98511284226544,0.0
71
+ 2018-01-02 21:02:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,55.576400756835945,10.47529740767045,36950.0,462.0,47.8930376570579,0.0
72
+ 2018-01-02 21:03:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,55.66102108712924,10.64231872558594,36975.0,464.0,48.315258014403355,0.0
73
+ 2018-01-02 21:04:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,55.7443495928231,10.8079719543457,37000.0,464.0,48.4074814400351,0.0
74
+ 2018-01-02 21:05:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,55.83168159096928,10.98255157470703,37000.0,465.0,48.57090503932585,0.0
75
+ 2018-01-02 21:06:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,55.916965290651476,11.15455627441406,37000.0,468.0,48.80258580707056,0.0
76
+ 2018-01-02 21:07:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,56.003036499023445,11.32923473011363,37025.0,466.0,48.82563339364799,0.0
77
+ 2018-01-02 21:08:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,56.08735656738282,11.50201970880682,37025.0,461.0,48.95424771552109,0.0
78
+ 2018-01-02 21:09:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,56.171585083007805,11.67522083629261,36975.0,457.0,48.990913098429814,0.0
79
+ 2018-01-02 21:10:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,56.25265502929689,11.84351140802557,36975.0,454.0,49.01573616547938,0.0
80
+ 2018-01-02 21:11:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,56.33583068847657,12.01704545454545,36975.0,455.0,49.54905175959681,0.0
81
+ 2018-01-02 21:12:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,56.41786193847658,12.1900801225142,36975.0,455.0,49.63067080629372,0.0
82
+ 2018-01-02 21:13:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,56.4987030029297,12.36120050603693,36975.0,458.0,49.77832162366474,0.0
83
+ 2018-01-02 21:14:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,56.58146667480468,12.5379805131392,36975.0,463.0,49.81446799301841,64.0
84
+ 2018-01-02 21:15:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,56.66510009765626,12.718133926391602,37025.0,468.0,49.943477194058744,0.0
85
+ 2018-01-02 21:16:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,56.748550415039055,12.8990650177002,37025.0,469.0,50.100629625344766,0.0
86
+ 2018-01-02 21:17:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,56.83113098144531,13.0792236328125,37025.0,468.0,50.116027506869216,0.0
87
+ 2018-01-02 21:18:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,56.913803100585945,13.26127052307129,37000.0,468.0,50.46084609368535,0.0
88
+ 2018-01-02 21:19:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,56.99646513340837,13.444784841229842,36975.0,467.0,50.555367142918044,0.0
89
+ 2018-01-02 21:20:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,57.07841491699219,13.628110885620123,36975.0,468.0,50.727835321605426,0.0
90
+ 2018-01-02 21:21:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,57.15995659262448,13.81176364037298,37000.0,466.0,50.84047604826708,0.0
91
+ 2018-01-02 21:22:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,57.24156188964844,13.99692535400391,36975.0,466.0,51.01355938508675,0.0
92
+ 2018-01-02 21:23:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,57.32228424589514,14.18148902154738,36975.0,467.0,50.99538680407545,0.0
93
+ 2018-01-02 21:24:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,57.40319203522246,14.368079400831652,36950.0,469.0,51.321105877357695,0.0
94
+ 2018-01-02 21:25:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,57.48390197753907,14.555511474609382,37000.0,468.0,51.41663703679018,0.0
95
+ 2018-01-02 21:26:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,57.56469726562501,14.744853973388672,37025.0,470.0,51.81542785713032,0.0
96
+ 2018-01-02 21:27:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,57.64585876464843,14.93608474731445,37025.0,469.0,51.76035326399631,-64.0
97
+ 2018-01-02 21:28:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,57.725752491061975,15.126136041456652,37000.0,466.0,51.801314823981556,0.0
98
+ 2018-01-02 21:29:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,57.80397033691408,15.31405541204637,36950.0,463.0,52.19010050816274,0.0
99
+ 2018-01-02 21:30:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,57.8822021484375,15.50303797568044,36950.0,463.0,52.287942297000086,0.0
100
+ 2018-01-02 21:31:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,57.96038818359377,15.69361532888105,36975.0,466.0,52.41640318442296,0.0
101
+ 2018-01-02 21:32:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,58.04022216796876,15.889508647303431,36975.0,470.0,52.520595777480764,0.0
102
+ 2018-01-02 21:33:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,58.11831665039062,16.08345277847782,36075.0,469.0,52.88577215284187,-2368.0
103
+ 2018-01-02 21:34:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,58.197233555680604,16.28045654296875,33325.0,471.0,53.03270205781769,-2752.0
104
+ 2018-01-02 21:35:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,58.274324061506874,16.47445678710938,30975.0,456.0,53.104994652207836,-2048.0
105
+ 2018-01-02 21:36:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,58.348854194253185,16.6629638671875,28775.0,437.0,53.47114463301483,-1984.0
106
+ 2018-01-02 21:37:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,58.41905496888241,16.84295654296875,26650.0,421.0,53.40228928289309,-1920.0
107
+ 2018-01-02 21:38:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,58.48720744504767,17.018096923828118,24575.0,406.0,53.80679269443527,-1856.0
108
+ 2018-01-02 21:39:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,58.55319213867189,17.18988233996976,22600.0,395.0,53.652541791114686,-1856.0
109
+ 2018-01-02 21:40:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,58.61700439453125,17.35680364793347,20650.0,387.0,54.048890204881786,-1920.0
110
+ 2018-01-02 21:41:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,58.704885709083676,17.46633911132812,18275.0,383.0,24.357311844388448,-1728.0
111
+ 2018-01-02 21:42:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,58.79942321777343,17.54897579070061,16475.0,367.0,24.469798612454156,-1664.0
112
+ 2018-01-02 21:43:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,58.890256720074156,17.62869999326509,14775.0,358.0,24.563017646582693,-1472.0
113
+ 2018-01-02 21:44:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,58.97865941969014,17.70664609711746,13250.0,343.0,24.471620533704936,-1408.0
114
+ 2018-01-02 21:45:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,59.062825865664735,17.781087941136846,11800.0,326.0,24.44395478041656,-1344.0
115
+ 2018-01-02 21:46:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,59.14260864257813,17.85205078125,10400.0,307.0,24.39768632787934,-1216.0
116
+ 2018-01-02 21:47:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,59.217286190744176,17.918701171875,9125.0,291.0,24.541617946364283,-1216.0
117
+ 2018-01-02 21:48:00+00:00,3946e9,a319,AFR91HL,LBG,BMA,59.28950500488282,17.9901123046875,8075.0,291.0,28.500577483805785,-960.0