openap 2.0__tar.gz → 2.2__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.2/.github/workflows/build-publish.yml +33 -0
  2. openap-2.2/.gitignore +97 -0
  3. openap-2.2/PKG-INFO +127 -0
  4. openap-2.2/README.md +102 -0
  5. openap-2.2/examples/data/flight_a319_opensky.csv +117 -0
  6. openap-2.2/examples/data/flight_a320_qar.csv +7797 -0
  7. openap-2.2/examples/example_fuel_emission_opensky_data.ipynb +359 -0
  8. openap-2.2/examples/example_fuel_qar_data.ipynb +243 -0
  9. {openap-2.0 → openap-2.2}/openap/__init__.py +1 -0
  10. openap-2.2/openap/addon/__init__.py +0 -0
  11. openap-2.2/openap/addon/bada4.py +461 -0
  12. openap-2.2/openap/base.py +90 -0
  13. {openap-2.0 → openap-2.2}/openap/casadi/__init__.py +2 -2
  14. {openap-2.0 → openap-2.2}/openap/casadi/aero_override.py +55 -41
  15. openap-2.2/openap/data/engine/engines.csv +418 -0
  16. openap-2.2/openap/data/fuel/fuel_models.csv +16 -0
  17. {openap-2.0 → openap-2.2}/openap/drag.py +42 -43
  18. {openap-2.0 → openap-2.2}/openap/emission.py +10 -8
  19. openap-2.2/openap/extra/__init__.py +61 -0
  20. {openap-2.0 → openap-2.2}/openap/extra/aero.py +55 -35
  21. {openap-2.0 → openap-2.2}/openap/fuel.py +56 -49
  22. {openap-2.0/openap/traj → openap-2.2/openap}/gen.py +171 -163
  23. {openap-2.0 → openap-2.2}/openap/kinematic.py +1 -1
  24. {openap-2.0 → openap-2.2}/openap/prop.py +18 -4
  25. {openap-2.0 → openap-2.2}/openap/thrust.py +21 -18
  26. {openap-2.0 → openap-2.2}/pyproject.toml +28 -20
  27. openap-2.2/scripts/README.md +4 -0
  28. openap-2.2/scripts/acropole_aircraft_params.csv +30 -0
  29. openap-2.2/scripts/build_fuel_model.py +315 -0
  30. openap-2.2/scripts/db/airports.csv +13794 -0
  31. openap-2.2/scripts/db/emission.csv +400 -0
  32. openap-2.2/scripts/engine2.py +24 -0
  33. openap-2.2/scripts/extract.py +95 -0
  34. openap-2.2/scripts/fuel_flow_correction_factor.py +19 -0
  35. openap-2.2/scripts/gen_airport_database.py +78 -0
  36. openap-2.2/scripts/gen_engine_cruise_perf.py +25 -0
  37. openap-2.2/scripts/gen_engine_data_v27.py +300 -0
  38. openap-2.2/scripts/input/civtfspec.csv +736 -0
  39. openap-2.2/scripts/input/civtfspec.xls +29515 -0
  40. openap-2.2/scripts/input/edb-emissions-databank v23 (web).xlsx +0 -0
  41. openap-2.2/scripts/input/edb-emissions-databank v25a (web).xlsx +0 -0
  42. openap-2.2/scripts/input/edb-emissions-databank v27 (web).xlsx +0 -0
  43. openap-2.2/scripts/input/edb-emissions-databank v28B (web).xlsx +0 -0
  44. openap-2.2/scripts/input/engine_cruise_performance.csv +183 -0
  45. openap-2.2/scripts/input/wrap/a319.csv +36 -0
  46. openap-2.2/scripts/input/wrap/a320.csv +36 -0
  47. openap-2.2/scripts/input/wrap/a321.csv +36 -0
  48. openap-2.2/scripts/input/wrap/a332.csv +36 -0
  49. openap-2.2/scripts/input/wrap/a333.csv +36 -0
  50. openap-2.2/scripts/input/wrap/a343.csv +36 -0
  51. openap-2.2/scripts/input/wrap/a388.csv +36 -0
  52. openap-2.2/scripts/input/wrap/b737.csv +36 -0
  53. openap-2.2/scripts/input/wrap/b738.csv +36 -0
  54. openap-2.2/scripts/input/wrap/b739.csv +36 -0
  55. openap-2.2/scripts/input/wrap/b744.csv +36 -0
  56. openap-2.2/scripts/input/wrap/b752.csv +36 -0
  57. openap-2.2/scripts/input/wrap/b763.csv +36 -0
  58. openap-2.2/scripts/input/wrap/b77w.csv +36 -0
  59. openap-2.2/scripts/input/wrap/b788.csv +36 -0
  60. openap-2.2/scripts/input/wrap/b789.csv +36 -0
  61. openap-2.2/scripts/input/wrap/e190.csv +36 -0
  62. openap-2.2/scripts/inspect_engine_ff_emission.py +66 -0
  63. openap-2.2/scripts/plot_fuel_model.py +31 -0
  64. openap-2.2/scripts/test_acropole.py +196 -0
  65. openap-2.2/scripts/wrap_csv_to_fwf.py +83 -0
  66. openap-2.2/test/data/flight_phase_test.csv +1175 -0
  67. openap-2.2/test/data/flight_phlab.csv +5127 -0
  68. openap-2.2/test/flights/C550/phlab_20170320_08.csv +5472 -0
  69. openap-2.2/test/flights/C550/phlab_20170320_10.csv +5059 -0
  70. openap-2.2/test/flights/C550/phlab_20170320_12.csv +5457 -0
  71. openap-2.2/test/flights/C550/phlab_20170320_14.csv +5258 -0
  72. openap-2.2/test/test_actypes.py +20 -0
  73. openap-2.2/test/test_bada.py +90 -0
  74. openap-2.2/test/test_drag.py +36 -0
  75. openap-2.2/test/test_emission.py +82 -0
  76. openap-2.2/test/test_fuel.py +35 -0
  77. openap-2.2/test/test_kinematic.py +8 -0
  78. openap-2.2/test/test_nav.py +17 -0
  79. openap-2.2/test/test_phase.py +79 -0
  80. openap-2.2/test/test_prop.py +10 -0
  81. openap-2.2/test/test_thrust.py +61 -0
  82. openap-2.2/test/test_trajectory.py +81 -0
  83. openap-2.2/uv.lock +874 -0
  84. openap-2.0/PKG-INFO +0 -99
  85. openap-2.0/README.md +0 -69
  86. openap-2.0/openap/data/fuel/_synonym.csv +0 -32
  87. openap-2.0/openap/data/fuel/a318.yml +0 -5
  88. openap-2.0/openap/data/fuel/a319.yml +0 -5
  89. openap-2.0/openap/data/fuel/a320.yml +0 -5
  90. openap-2.0/openap/data/fuel/a321.yml +0 -5
  91. openap-2.0/openap/data/fuel/a332.yml +0 -5
  92. openap-2.0/openap/data/fuel/a333.yml +0 -5
  93. openap-2.0/openap/data/fuel/b734.yml +0 -5
  94. openap-2.0/openap/data/fuel/b737.yml +0 -5
  95. openap-2.0/openap/data/fuel/b738.yml +0 -5
  96. openap-2.0/openap/data/fuel/b739.yml +0 -5
  97. openap-2.0/openap/data/fuel/e170.yml +0 -5
  98. openap-2.0/openap/data/fuel/e190.yml +0 -5
  99. openap-2.0/openap/data/fuel/e195.yml +0 -5
  100. openap-2.0/openap/data/fuel/e75l.yml +0 -5
  101. openap-2.0/openap/extra/__init__.py +0 -24
  102. openap-2.0/openap/traj/__init__.py +0 -1
  103. {openap-2.0 → openap-2.2}/LICENSE +0 -0
  104. {openap-2.0 → openap-2.2}/openap/casadi/numpy_override.py +0 -0
  105. {openap-2.0 → openap-2.2}/openap/contrail.py +0 -0
  106. {openap-2.0 → openap-2.2}/openap/data/.gitignore +0 -0
  107. {openap-2.0 → openap-2.2}/openap/data/LICENSE +0 -0
  108. {openap-2.0 → openap-2.2}/openap/data/aircraft/_synonym.csv +0 -0
  109. {openap-2.0 → openap-2.2}/openap/data/aircraft/a19n.yml +0 -0
  110. {openap-2.0 → openap-2.2}/openap/data/aircraft/a20n.yml +0 -0
  111. {openap-2.0 → openap-2.2}/openap/data/aircraft/a21n.yml +0 -0
  112. {openap-2.0 → openap-2.2}/openap/data/aircraft/a318.yml +0 -0
  113. {openap-2.0 → openap-2.2}/openap/data/aircraft/a319.yml +0 -0
  114. {openap-2.0 → openap-2.2}/openap/data/aircraft/a320.yml +0 -0
  115. {openap-2.0 → openap-2.2}/openap/data/aircraft/a321.yml +0 -0
  116. {openap-2.0 → openap-2.2}/openap/data/aircraft/a332.yml +0 -0
  117. {openap-2.0 → openap-2.2}/openap/data/aircraft/a333.yml +0 -0
  118. {openap-2.0 → openap-2.2}/openap/data/aircraft/a343.yml +0 -0
  119. {openap-2.0 → openap-2.2}/openap/data/aircraft/a359.yml +0 -0
  120. {openap-2.0 → openap-2.2}/openap/data/aircraft/a388.yml +0 -0
  121. {openap-2.0 → openap-2.2}/openap/data/aircraft/b37m.yml +0 -0
  122. {openap-2.0 → openap-2.2}/openap/data/aircraft/b38m.yml +0 -0
  123. {openap-2.0 → openap-2.2}/openap/data/aircraft/b39m.yml +0 -0
  124. {openap-2.0 → openap-2.2}/openap/data/aircraft/b3xm.yml +0 -0
  125. {openap-2.0 → openap-2.2}/openap/data/aircraft/b734.yml +0 -0
  126. {openap-2.0 → openap-2.2}/openap/data/aircraft/b737.yml +0 -0
  127. {openap-2.0 → openap-2.2}/openap/data/aircraft/b738.yml +0 -0
  128. {openap-2.0 → openap-2.2}/openap/data/aircraft/b739.yml +0 -0
  129. {openap-2.0 → openap-2.2}/openap/data/aircraft/b744.yml +0 -0
  130. {openap-2.0 → openap-2.2}/openap/data/aircraft/b748.yml +0 -0
  131. {openap-2.0 → openap-2.2}/openap/data/aircraft/b752.yml +0 -0
  132. {openap-2.0 → openap-2.2}/openap/data/aircraft/b763.yml +0 -0
  133. {openap-2.0 → openap-2.2}/openap/data/aircraft/b772.yml +0 -0
  134. {openap-2.0 → openap-2.2}/openap/data/aircraft/b773.yml +0 -0
  135. {openap-2.0 → openap-2.2}/openap/data/aircraft/b77w.yml +0 -0
  136. {openap-2.0 → openap-2.2}/openap/data/aircraft/b788.yml +0 -0
  137. {openap-2.0 → openap-2.2}/openap/data/aircraft/b789.yml +0 -0
  138. {openap-2.0 → openap-2.2}/openap/data/aircraft/c550.yml +0 -0
  139. {openap-2.0 → openap-2.2}/openap/data/aircraft/e145.yml +0 -0
  140. {openap-2.0 → openap-2.2}/openap/data/aircraft/e170.yml +0 -0
  141. {openap-2.0 → openap-2.2}/openap/data/aircraft/e190.yml +0 -0
  142. {openap-2.0 → openap-2.2}/openap/data/aircraft/e195.yml +0 -0
  143. {openap-2.0 → openap-2.2}/openap/data/aircraft/e75l.yml +0 -0
  144. {openap-2.0 → openap-2.2}/openap/data/aircraft/glf6.yml +0 -0
  145. {openap-2.0 → openap-2.2}/openap/data/dragpolar/_synonym.csv +0 -0
  146. {openap-2.0 → openap-2.2}/openap/data/dragpolar/a20n.yml +0 -0
  147. {openap-2.0 → openap-2.2}/openap/data/dragpolar/a319.yml +0 -0
  148. {openap-2.0 → openap-2.2}/openap/data/dragpolar/a320.yml +0 -0
  149. {openap-2.0 → openap-2.2}/openap/data/dragpolar/a321.yml +0 -0
  150. {openap-2.0 → openap-2.2}/openap/data/dragpolar/a332.yml +0 -0
  151. {openap-2.0 → openap-2.2}/openap/data/dragpolar/a333.yml +0 -0
  152. {openap-2.0 → openap-2.2}/openap/data/dragpolar/a343.yml +0 -0
  153. {openap-2.0 → openap-2.2}/openap/data/dragpolar/a359.yml +0 -0
  154. {openap-2.0 → openap-2.2}/openap/data/dragpolar/a388.yml +0 -0
  155. {openap-2.0 → openap-2.2}/openap/data/dragpolar/b38m.yml +0 -0
  156. {openap-2.0 → openap-2.2}/openap/data/dragpolar/b734.yml +0 -0
  157. {openap-2.0 → openap-2.2}/openap/data/dragpolar/b737.yml +0 -0
  158. {openap-2.0 → openap-2.2}/openap/data/dragpolar/b738.yml +0 -0
  159. {openap-2.0 → openap-2.2}/openap/data/dragpolar/b739.yml +0 -0
  160. {openap-2.0 → openap-2.2}/openap/data/dragpolar/b744.yml +0 -0
  161. {openap-2.0 → openap-2.2}/openap/data/dragpolar/b748.yml +0 -0
  162. {openap-2.0 → openap-2.2}/openap/data/dragpolar/b752.yml +0 -0
  163. {openap-2.0 → openap-2.2}/openap/data/dragpolar/b772.yml +0 -0
  164. {openap-2.0 → openap-2.2}/openap/data/dragpolar/b77w.yml +0 -0
  165. {openap-2.0 → openap-2.2}/openap/data/dragpolar/b788.yml +0 -0
  166. {openap-2.0 → openap-2.2}/openap/data/dragpolar/b789.yml +0 -0
  167. {openap-2.0 → openap-2.2}/openap/data/dragpolar/c550.yml +0 -0
  168. {openap-2.0 → openap-2.2}/openap/data/dragpolar/e190.yml +0 -0
  169. {openap-2.0 → openap-2.2}/openap/data/dragpolar/e195.yml +0 -0
  170. {openap-2.0 → openap-2.2}/openap/data/dragpolar/e75l.yml +0 -0
  171. {openap-2.0 → openap-2.2}/openap/data/dragpolar/glf6.yml +0 -0
  172. {openap-2.0 → openap-2.2}/openap/data/nav/airports.csv +0 -0
  173. {openap-2.0 → openap-2.2}/openap/data/nav/fix.dat +0 -0
  174. {openap-2.0 → openap-2.2}/openap/data/nav/nav.dat +0 -0
  175. {openap-2.0 → openap-2.2}/openap/data/wrap/_synonym.csv +0 -0
  176. {openap-2.0 → openap-2.2}/openap/data/wrap/a319.txt +0 -0
  177. {openap-2.0 → openap-2.2}/openap/data/wrap/a320.txt +0 -0
  178. {openap-2.0 → openap-2.2}/openap/data/wrap/a321.txt +0 -0
  179. {openap-2.0 → openap-2.2}/openap/data/wrap/a332.txt +0 -0
  180. {openap-2.0 → openap-2.2}/openap/data/wrap/a333.txt +0 -0
  181. {openap-2.0 → openap-2.2}/openap/data/wrap/a343.txt +0 -0
  182. {openap-2.0 → openap-2.2}/openap/data/wrap/a388.txt +0 -0
  183. {openap-2.0 → openap-2.2}/openap/data/wrap/b737.txt +0 -0
  184. {openap-2.0 → openap-2.2}/openap/data/wrap/b738.txt +0 -0
  185. {openap-2.0 → openap-2.2}/openap/data/wrap/b739.txt +0 -0
  186. {openap-2.0 → openap-2.2}/openap/data/wrap/b744.txt +0 -0
  187. {openap-2.0 → openap-2.2}/openap/data/wrap/b752.txt +0 -0
  188. {openap-2.0 → openap-2.2}/openap/data/wrap/b763.txt +0 -0
  189. {openap-2.0 → openap-2.2}/openap/data/wrap/b77w.txt +0 -0
  190. {openap-2.0 → openap-2.2}/openap/data/wrap/b788.txt +0 -0
  191. {openap-2.0 → openap-2.2}/openap/data/wrap/b789.txt +0 -0
  192. {openap-2.0 → openap-2.2}/openap/data/wrap/e190.txt +0 -0
  193. {openap-2.0 → openap-2.2}/openap/extra/filters.py +0 -0
  194. {openap-2.0 → openap-2.2}/openap/extra/fuzzy.py +0 -0
  195. {openap-2.0 → openap-2.2}/openap/extra/nav.py +0 -0
  196. {openap-2.0 → openap-2.2}/openap/extra/statistics.py +0 -0
  197. {openap-2.0 → openap-2.2}/openap/phase.py +0 -0
  198. {openap-2.0/openap/data/engine → openap-2.2/scripts/db}/engines.csv +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.2/.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.2/PKG-INFO ADDED
@@ -0,0 +1,127 @@
1
+ Metadata-Version: 2.4
2
+ Name: openap
3
+ Version: 2.2
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
+ License-File: LICENSE
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Intended Audience :: Information Technology
14
+ Classifier: Intended Audience :: Science/Research
15
+ Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
18
+ Requires-Python: >=3.9
19
+ Requires-Dist: matplotlib>=3.1
20
+ Requires-Dist: numpy>=1.24
21
+ Requires-Dist: pandas>=1.2
22
+ Requires-Dist: pyyaml>=5.1
23
+ Requires-Dist: scipy>=1.7
24
+ Description-Content-Type: text/markdown
25
+
26
+ # OpenAP: Open Aircraft Performance Model and Toolkit
27
+
28
+ This repository contains the OpenAP model data and Python packages for aircraft performance and emission calculations.
29
+
30
+ ## 🕮 User Guide
31
+
32
+ The OpenAP handbook is available at [openap.dev](https://openap.dev/).
33
+
34
+ ## Installation
35
+
36
+ Install the latest stable release from PyPI:
37
+
38
+ ```sh
39
+ pip install --upgrade openap
40
+ ```
41
+
42
+ Install the development branch from GitHub (may not be stable):
43
+
44
+ ```sh
45
+ pip install --upgrade git+https://github.com/junzis/openap
46
+ ```
47
+
48
+ ## Content
49
+
50
+ ### Model Data
51
+
52
+ Data in this repository includes:
53
+
54
+ - Aircraft data: Collected from open literature.
55
+ - Engine data: Primarily from the ICAO emission data-bank, including fuel flow and emissions.
56
+ - Drag polar model data: Exclusively derived from open data ([reference](https://research.tudelft.nl/files/71038050/published_OpenAP_drag_polar.pdf)).
57
+ - Fuel model data: Polynomial models derived from the [acropole model](https://github.com/DGAC/Acropole) by [@JarryGabriel](https://github.com/JarryGabriel).
58
+ - Kinematic data: The kinematic model describes speed, altitude, and vertical rate ([reference](https://github.com/junzis/wrap)).
59
+ - Navigation data: Airport and waypoints obtained from [X-Plane](https://developer.x-plane.com/docs/data-development-documentation/).
60
+
61
+ ### Python Packages
62
+
63
+ The OpenAP Python library includes the following packages:
64
+
65
+ - `prop`: Module for accessing aircraft and engine properties.
66
+ - `aero`: Module for common aeronautical conversions.
67
+ - `nav`: Module for accessing navigation information.
68
+ - `thrust`: Module provides `Thrust()` class for computing aircraft thrust.
69
+ - `drag`: Module provides `Drag()` class for computing aircraft drag.
70
+ - `fuel`: Module provides `FuelFlow()` class for computing fuel consumption.
71
+ - `emission`: Module provides `Emission()` class for computing aircraft emissions.
72
+ - `kinematic`: Module provides `WRAP()` class for accessing kinematic performance data.
73
+ - `phase`: Module provides `FlightPhase()` class for determining flight phases.
74
+ - `gen`: Module provides `FlightGenerator()` class for trajectory generation.
75
+
76
+ Examples:
77
+
78
+ ```python
79
+ import openap
80
+
81
+ openap.prop.aircraft("A320")
82
+ fuelflow = openap.FuelFlow("A320")
83
+ fuelflow.enroute(mass, tas, alt) # -> kg/s
84
+ ```
85
+
86
+ 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.
87
+
88
+ ### Add-ons
89
+
90
+ 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:
91
+
92
+ ```python
93
+ from openap.addon import bada4
94
+
95
+ fuelflow = bada4.FuelFlow()
96
+ ```
97
+
98
+ The methods and attributes of `openap.addon.bada4.FuelFlow()` are the same as those of `openap.FuelFlow()`.
99
+
100
+ ## Symbolic Implementation for CasADi
101
+
102
+ 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:
103
+
104
+ ```python
105
+ from openap.casadi import FuelFlow
106
+
107
+ fuelflow = FuelFlow()
108
+ ```
109
+
110
+ 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.
111
+
112
+ 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.
113
+
114
+ ## Citing OpenAP
115
+
116
+ ```
117
+ @article{sun2020openap,
118
+ title={OpenAP: An open-source aircraft performance model for air transportation studies and simulations},
119
+ author={Sun, Junzi and Hoekstra, Jacco M and Ellerbroek, Joost},
120
+ journal={Aerospace},
121
+ volume={7},
122
+ number={8},
123
+ pages={104},
124
+ year={2020},
125
+ publisher={Multidisciplinary Digital Publishing Institute}
126
+ }
127
+ ```
openap-2.2/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