flightanalysis 0.2.0__tar.gz → 0.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 (102) hide show
  1. {flightanalysis-0.2.0/flightanalysis.egg-info → flightanalysis-0.2.2}/PKG-INFO +1 -1
  2. flightanalysis-0.2.2/examples/schedules_construction/create_all.py +21 -0
  3. flightanalysis-0.2.0/examples/schedules_construction/a25.py → flightanalysis-0.2.2/examples/schedules_construction/f3a_a25.py +6 -8
  4. flightanalysis-0.2.0/examples/schedules_construction/f25.py → flightanalysis-0.2.2/examples/schedules_construction/f3a_f25.py +3 -1
  5. flightanalysis-0.2.0/examples/schedules_construction/p23.py → flightanalysis-0.2.2/examples/schedules_construction/f3a_p23.py +3 -1
  6. flightanalysis-0.2.0/examples/schedules_construction/p25.py → flightanalysis-0.2.2/examples/schedules_construction/f3a_p25.py +3 -1
  7. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/examples/schedules_construction/f3auk_Intermediate.py +4 -6
  8. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/examples/schedules_construction/f3auk_clubman.py +5 -8
  9. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/examples/schedules_construction/imac_unlimited_2024.py +9 -17
  10. flightanalysis-0.2.2/examples/schedules_construction/make_manoeuvre.py +56 -0
  11. flightanalysis-0.2.2/examples/scoring/analysis_reprocess.py +12 -0
  12. flightanalysis-0.2.2/examples/scoring/f3a_criteria_maker.py +41 -0
  13. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/examples/scoring/judging.py +20 -7
  14. flightanalysis-0.2.2/examples/scoring/manoeuvres/intra_analysis.py +26 -0
  15. flightanalysis-0.2.2/examples/scoring/manoeuvres/mans/extract_mans.py +28 -0
  16. flightanalysis-0.2.2/examples/scoring/split_optimisation.py +50 -0
  17. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/__init__.py +1 -1
  18. flightanalysis-0.2.2/flightanalysis/analysis/__init__.py +3 -0
  19. flightanalysis-0.2.2/flightanalysis/analysis/el_analysis.py +33 -0
  20. flightanalysis-0.2.2/flightanalysis/analysis/man_analysis.py +275 -0
  21. flightanalysis-0.2.2/flightanalysis/analysis/sch_analysis.py +48 -0
  22. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/data/IMAC_Unlimited2024_schedule.json +124 -191
  23. flightanalysis-0.2.0/flightanalysis/data/a25_schedule.json → flightanalysis-0.2.2/flightanalysis/data/f3a_a25_schedule.json +57 -123
  24. flightanalysis-0.2.0/flightanalysis/data/f25_schedule.json → flightanalysis-0.2.2/flightanalysis/data/f3a_f25_schedule.json +179 -407
  25. flightanalysis-0.2.0/flightanalysis/data/p23_schedule.json → flightanalysis-0.2.2/flightanalysis/data/f3a_p23_schedule.json +144 -240
  26. flightanalysis-0.2.0/flightanalysis/data/p25_schedule.json → flightanalysis-0.2.2/flightanalysis/data/f3a_p25_schedule.json +106 -213
  27. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/data/f3auk_clubman_schedule.json +37 -89
  28. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/data/f3auk_inter_schedule.json +41 -137
  29. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/definition/builders/elbuilders.py +14 -10
  30. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/definition/builders/manbuilder.py +1 -1
  31. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/definition/mandef.py +22 -18
  32. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/definition/maninfo.py +28 -10
  33. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/definition/manparm.py +14 -12
  34. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/definition/scheddef.py +57 -14
  35. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/elements/autorotation.py +4 -1
  36. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/elements/element.py +60 -9
  37. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/elements/loop.py +20 -8
  38. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/elements/nose_drop.py +9 -3
  39. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/elements/pitch_break.py +15 -7
  40. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/elements/recovery.py +6 -5
  41. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/elements/stall_turn.py +14 -7
  42. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/manoeuvre.py +19 -5
  43. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/scoring/__init__.py +1 -1
  44. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/scoring/criteria/__init__.py +2 -1
  45. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/scoring/criteria/criteria.py +19 -5
  46. flightanalysis-0.2.2/flightanalysis/scoring/criteria/f3a_criteria.py +38 -0
  47. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/scoring/criteria/inter/combination.py +1 -1
  48. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/scoring/criteria/inter/comparison.py +3 -5
  49. flightanalysis-0.2.2/flightanalysis/scoring/criteria/intra/bounded.py +68 -0
  50. flightanalysis-0.2.2/flightanalysis/scoring/criteria/intra/continuous.py +89 -0
  51. flightanalysis-0.2.2/flightanalysis/scoring/criteria/intra/single.py +38 -0
  52. flightanalysis-0.2.2/flightanalysis/scoring/downgrade.py +46 -0
  53. flightanalysis-0.2.2/flightanalysis/scoring/measurement.py +234 -0
  54. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/scoring/results.py +34 -6
  55. {flightanalysis-0.2.0 → flightanalysis-0.2.2/flightanalysis.egg-info}/PKG-INFO +1 -1
  56. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis.egg-info/SOURCES.txt +16 -10
  57. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/setup.cfg +1 -1
  58. flightanalysis-0.2.2/tests/test_criiteria.py +156 -0
  59. flightanalysis-0.2.0/examples/schedules_construction/make_manoeuvre.py +0 -41
  60. flightanalysis-0.2.0/examples/scoring/f3a_criteria_maker.py +0 -40
  61. flightanalysis-0.2.0/examples/scoring/manoeuvres/intra_analysis.py +0 -24
  62. flightanalysis-0.2.0/examples/scoring/manoeuvres/mans/extract_mans.py +0 -37
  63. flightanalysis-0.2.0/flightanalysis/manoeuvre_analysis.py +0 -345
  64. flightanalysis-0.2.0/flightanalysis/scoring/criteria/f3a_criteria.py +0 -34
  65. flightanalysis-0.2.0/flightanalysis/scoring/criteria/intra/continuous.py +0 -58
  66. flightanalysis-0.2.0/flightanalysis/scoring/criteria/intra/single.py +0 -24
  67. flightanalysis-0.2.0/flightanalysis/scoring/criteria/single.py +0 -26
  68. flightanalysis-0.2.0/flightanalysis/scoring/downgrade.py +0 -106
  69. flightanalysis-0.2.0/flightanalysis/scoring/measurement.py +0 -160
  70. flightanalysis-0.2.0/tests/test_criiteria.py +0 -77
  71. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/LICENSE +0 -0
  72. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/MANIFEST.in +0 -0
  73. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/README.md +0 -0
  74. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/examples/__init__.py +0 -0
  75. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/examples/data/__init__.py +0 -0
  76. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/examples/schedules_construction/__init__.py +0 -0
  77. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/examples/scoring/__init__.py +0 -0
  78. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/examples/scoring/manoeuvres/__init__.py +0 -0
  79. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/examples/scoring/manoeuvres/inter_analysis.py +0 -0
  80. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/examples/scoring/manoeuvres/mans/__init__.py +0 -0
  81. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/examples/scoring/manoeuvres/positioning_analysis.py +0 -0
  82. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/data/__init__.py +0 -0
  83. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/definition/__init__.py +0 -0
  84. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/definition/builders/__init__.py +0 -0
  85. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/definition/builders/lines.py +0 -0
  86. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/definition/collectors.py +0 -0
  87. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/definition/eldef.py +0 -0
  88. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/definition/operations/__init__.py +0 -0
  89. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/definition/operations/funopp.py +0 -0
  90. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/definition/operations/itemopp.py +0 -0
  91. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/definition/operations/mathopp.py +0 -0
  92. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/definition/operations/operation.py +0 -0
  93. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/elements/__init__.py +0 -0
  94. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/elements/line.py +0 -0
  95. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/schedule.py +0 -0
  96. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/scoring/criteria/exponential.py +0 -0
  97. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/scoring/criteria/inter/__init__.py +0 -0
  98. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis/scoring/criteria/intra/__init__.py +0 -0
  99. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis.egg-info/dependency_links.txt +0 -0
  100. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/flightanalysis.egg-info/top_level.txt +0 -0
  101. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/setup.py +0 -0
  102. {flightanalysis-0.2.0 → flightanalysis-0.2.2}/tests/test_data.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flightanalysis
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: A package for analysing flight data
5
5
  Home-page: https://github.com/PyFlightCoach/FlightAnalysis
6
6
  Author: Thomas David
@@ -0,0 +1,21 @@
1
+ from .f3a_p23 import p23_def
2
+ from .f3a_a25 import a25_def
3
+ from .f3a_p25 import p25_def
4
+ from .f3a_f25 import f25_def
5
+ from .imac_unlimited_2024 import sdef as imac_unl2024_def
6
+ from .f3auk_clubman import clubman_def as f3auk_club_def
7
+ from .f3auk_Intermediate import intermediate_def as f3auk_int_def
8
+
9
+ sdefs = {
10
+ 'f3a_p23_schedule': p23_def,
11
+ 'f3a_a25_schedule': a25_def,
12
+ 'f3a_p25_schedule': p25_def,
13
+ 'f3a_f25_schedule': f25_def,
14
+ 'IMAC_Unlimited2024_schedule': imac_unl2024_def,
15
+ 'f3auk_clubman_schedule': f3auk_club_def,
16
+ 'f3auk_inter_schedule': f3auk_int_def
17
+ }
18
+
19
+
20
+ for sdef in sdefs:
21
+ sdef.to_json("flightanalysis/data/p23_schedule.json")
@@ -230,11 +230,9 @@ a25_def = SchedDef([
230
230
  MBTags.CENTRE,
231
231
  ], )
232
232
 
233
- ] #Close Sched_def array
234
- ) # close of Sched_def
235
-
236
-
237
-
233
+ ]
234
+ )
235
+
238
236
 
239
237
  if __name__ == "__main__":
240
238
 
@@ -242,8 +240,8 @@ if __name__ == "__main__":
242
240
 
243
241
  # for mdef in a25_def:
244
242
  # mdef.plot(depth=170, wind=1).show()
243
+ # import os
244
+ # a25_def.create_fcjs('a25', f'{os.environ['HOME']}/Desktop/templates/')
245
245
 
246
- # a25_def.create_fcj('a25', 'a25_template_fcj.json')
247
-
248
- a25_def.to_json("flightanalysis/data/a25_schedule.json")
246
+ a25_def.to_json("flightanalysis/data/f3a_a25_schedule.json")
249
247
 
@@ -260,4 +260,6 @@ if __name__ == "__main__":
260
260
 
261
261
  #f25_def.plot().show()
262
262
  # f25_def.create_fcj('F25', 'f25_template_fcj.json')
263
- f25_def.to_json("flightanalysis/data/f25_schedule.json")
263
+ f25_def.to_json("flightanalysis/data/f3a_f25_schedule.json")
264
+ #import os
265
+ #f25_def.create_fcjs('f25', f'{os.environ['HOME']}/Desktop/templates/')
@@ -226,4 +226,6 @@ if __name__ == "__main__":
226
226
 
227
227
  # p23_def.plot().show()
228
228
  # p23_def.create_fcj('P23', 'p23_template_fcj.json')
229
- p23_def.to_json("flightanalysis/data/p23_schedule.json")
229
+ p23_def.to_json("flightanalysis/data/f3a_p23_schedule.json")
230
+ # import os
231
+ # p23_def.create_fcjs('p23', f'{os.environ['HOME']}/Desktop/templates/')
@@ -217,4 +217,6 @@ if __name__ == "__main__":
217
217
 
218
218
  #p25_def.plot().show()
219
219
  #p25_def.create_fcj('P25', 'p25_template_fcj.json')
220
- p25_def.to_json("flightanalysis/data/p25_schedule.json")
220
+ p25_def.to_json("flightanalysis/data/f3a_p25_schedule.json")
221
+ # import os
222
+ # p25_def.create_fcjs('p25', f'{os.environ['HOME']}/Desktop/templates/')
@@ -156,7 +156,7 @@ intermediate_def = SchedDef([
156
156
  [
157
157
  f3amb.roll(np.pi/2, padded=False),
158
158
  centred(f3amb.line(length=100)),
159
- f3amb.roll(np.pi/2),
159
+ f3amb.roll(np.pi/2, padded=False),
160
160
  ],
161
161
  ),
162
162
 
@@ -196,8 +196,6 @@ intermediate_def = SchedDef([
196
196
  if __name__ == "__main__":
197
197
 
198
198
  #intermediate_def.plot().show()
199
- #intermediate_def.create_fcj('intermediate', 'intermediate_template_fcj_170.json', 1)
200
- #intermediate_def.create_fcj('intermediate', 'intermediate_template_fcj_170_b.json', -1)
201
- #intermediate_def.create_fcj('intermediate', 'intermediate_template_fcj_150.json', 1, 150/170)
202
- #intermediate_def.create_fcj('intermediate', 'intermediate_template_fcj_150_b.json', -1, 150/170)
203
- intermediate_def.to_json("flightanalysis/data/f3auk_inter_schedule.json")
199
+ #import os
200
+ #intermediate_def.create_fcjs('f3auk_intermediate', f'{os.environ['HOME']}/Desktop/templates/')
201
+ intermediate_def.to_json('flightanalysis/data/f3auk_inter_schedule.json')
@@ -193,18 +193,15 @@ clubman_def = SchedDef([
193
193
  f3amb.line(),
194
194
  ],
195
195
  ),
196
-
197
- ]#Close Sched_def array
198
- ) # close of Sched_def
196
+ ]
197
+ )
199
198
 
200
199
 
201
200
 
202
201
  if __name__ == "__main__":
203
202
 
204
203
  # clubman_def.plot().show()
205
- # clubman_def.create_fcj('clubman', 'clubman_template_fcj_170.json', 1)
206
- # clubman_def.create_fcj('clubman', 'clubman_template_fcj_170_b.json', -1)
207
- # clubman_def.create_fcj('clubman', 'clubman_template_fcj_150.json', 1, 150/170)
208
- # clubman_def.create_fcj('clubman', 'clubman_template_fcj_150_b.json', -1, 150/170)
209
- #clubman_def.create_fcj('clubman', 'clubman_template_fcj.json')
210
204
  clubman_def.to_json("flightanalysis/data/f3auk_clubman_schedule.json")
205
+
206
+ # import os
207
+ # clubman_def.create_fcjs('f3auk_clubman', f'{os.environ['HOME']}/Desktop/templates/')
@@ -71,16 +71,16 @@ sdef = SchedDef([
71
71
  end=BoxLocation(Height.BTM)
72
72
  ),[
73
73
  imacmb.spin('directions[0]'),
74
- imacmb.snap(r(1)),
74
+ imacmb.snap(r(-1), 'directions[1]'),
75
75
  imacmb.loop(np.pi),
76
76
  imacmb.snap(r(2)),
77
77
  imacmb.loop(np.pi),
78
- imacmb.roll('directions[1]'),
78
+ imacmb.roll('directions[2]'),
79
79
  imacmb.loop(np.pi/2)
80
80
  ],
81
81
  directions=ManParm('directions', Combination(desired=[
82
- [-r(1.75), r(1.75)],
83
- [r(1.75), -r(1.75)]
82
+ [-r(1.75), r(1), r(1.75)],
83
+ [r(1.75), -r(1), -r(1.75)]
84
84
  ]), 1),
85
85
  full_roll_rate=2*np.pi
86
86
  ),
@@ -100,7 +100,7 @@ sdef = SchedDef([
100
100
  imacmb.loop(-r(1/8)),
101
101
  imacmb.roll('4x8', line_length=110 / c45 + 2*50),
102
102
  imacmb.loop(r(-3/8)),
103
- imacmb.roll([r(1.25), r(-0.75)], rolltypes='rs', line_length=110),
103
+ imacmb.roll([r(1.25), r(-0.75)], rolltypes='rs', break_angle=-np.radians(15), line_length=110),
104
104
  imacmb.loop(r(1/4)),
105
105
  ], partial_roll_rate=np.pi/2, full_roll_rate=1.5*np.pi
106
106
  ),
@@ -115,15 +115,6 @@ sdef = SchedDef([
115
115
  imacmb.roll([r(1/4), r(1/4), r(1)], rolltypes='rrs', line_length=130, break_angle=-np.radians(15)),
116
116
  imacmb.loop(r(1/4)),
117
117
  ]),
118
- imacmb.create(ManInfo(
119
- "Half Cuban", "hcu", k=41, position=Position.END,
120
- start=BoxLocation(Height.BTM, Direction.UPWIND, Orientation.UPRIGHT),
121
- end=BoxLocation(Height.BTM)
122
- ),[
123
- imacmb.snap(r(1.5), padded=False),
124
- imacmb.loop(-r(5/8)),
125
- imacmb.roll([r(1/4), r(1/4), -r(1)], line_length=130 / c45),
126
- ]),
127
118
  imacmb.create(ManInfo(
128
119
  "Half Cuban", "hcu", k=41, position=Position.END,
129
120
  start=BoxLocation(Height.BTM, Direction.UPWIND, Orientation.UPRIGHT),
@@ -142,6 +133,7 @@ sdef = SchedDef([
142
133
  if __name__ == "__main__":
143
134
 
144
135
 
145
- # sdef.plot().show()
146
- # sdef.create_fcj('Unl2024', 'imac_unlimited_2024.json')
147
- sdef.to_json("flightanalysis/data/IMAC_Unlimited2024_schedule.json")
136
+ sdef.plot().show()
137
+ # import os
138
+ # sdef.create_fcjs('imac_unlimited_2024', f'{os.environ['HOME']}/Desktop/templates', 'IMAC')
139
+ # sdef.to_json("flightanalysis/data/IMAC_Unlimited2024_schedule.json")
@@ -0,0 +1,56 @@
1
+ from flightanalysis.schedule import *
2
+ import numpy as np
3
+ from flightanalysis import *
4
+ from flightdata import State
5
+
6
+ if True:
7
+ mdef = f3amb.create(ManInfo(
8
+ "Square on Corner", "sLoop", k=4, position=Position.CENTRE,
9
+ start=BoxLocation(Height.BTM, Direction.UPWIND, Orientation.UPRIGHT),
10
+ end=BoxLocation(Height.BTM)
11
+ ),[
12
+ MBTags.CENTRE,
13
+ f3amb.loop(np.pi/4, rolls="roll_option[0]"),
14
+ f3amb.line(),
15
+ f3amb.loop("roll_option[1]", rolls=r(1/2), ke=True),
16
+ f3amb.line(),
17
+ centred(f3amb.loop("roll_option[2]", rolls=r(1/2), ke=True)),
18
+ f3amb.line(),
19
+ f3amb.loop("roll_option[3]", rolls=r(1/2), ke=True),
20
+ f3amb.line(),
21
+ f3amb.loop("roll_option[4]", rolls="roll_option[5]", ke=True),
22
+ MBTags.CENTRE
23
+ ],
24
+ roll_option=ManParm("roll_option", Combination(desired=[
25
+ [r(1/4), -r(1/4), r(1/4), -r(1/4), r(1/8), -r(1/4)],
26
+ [-r(1/4), r(1/4), -r(1/4), r(1/4), -r(1/8), r(1/4)]
27
+ ]), 0),
28
+ line_length=70
29
+ )
30
+ else:
31
+ from imac_unlimited_2024 import sdef
32
+ mdef = sdef[7]
33
+
34
+ #mdef.mps.top_roll_option.default = 1
35
+
36
+ it = mdef.info.initial_transform(170, 1)
37
+ man = mdef.create(it)
38
+
39
+ tp = man.create_template(it)
40
+
41
+
42
+
43
+
44
+ from flightdata import State
45
+ from flightplotting import plotdtw, boxtrace, plotsec
46
+ from flightplotting.traces import axis_rate_trace
47
+
48
+ import plotly.graph_objects as go
49
+
50
+ fig = plotdtw(tp, tp.data.element.unique())
51
+ fig = plotsec(tp, fig=fig, nmodels=10, scale=2)
52
+ #fig.add_traces(boxtrace())
53
+ fig.show()
54
+
55
+ fig = go.Figure(data=axis_rate_trace(tp))
56
+ fig.show()
@@ -0,0 +1,12 @@
1
+ from flightanalysis import ScheduleAnalysis, DownGrade, Result
2
+
3
+ sa = ScheduleAnalysis.from_fcscore("examples/scoring/example_analysis_p23.json")
4
+
5
+ ma=sa.M
6
+ ea=ma.e_2
7
+
8
+ dg: DownGrade = ea.el.intra_scoring.roll_angle
9
+ res: Result = dg(ea.fl, ea.tp)
10
+
11
+
12
+ pass
@@ -0,0 +1,41 @@
1
+ from flightanalysis.scoring.criteria import *
2
+ import numpy as np
3
+
4
+
5
+ f3a=dict(
6
+ single=dict(
7
+ track=Single(Exponential.fit_points(np.radians([30, 90]), [2, 6], 100)),
8
+ roll=Single(Exponential.fit_points(np.radians([30, 90]), [1, 6], 100)),
9
+ angle=Single(Exponential.fit_points(np.radians([30, 90]), [2, 6], 100)),
10
+ distance = Single(Exponential.fit_points([20, 40], [0.5, 1]))
11
+ ),
12
+ intra=dict(
13
+ track=ContAbs(Exponential.fit_points(np.radians([30, 90]), [2, 6])),
14
+ roll=ContAbs(Exponential.fit_points(np.radians([30, 90]), [1.5, 6])),
15
+ radius=ContRat(Exponential.fit_points([1,5], [0.5, 4], 2)),
16
+ speed=ContRat(Exponential.fit_points([1,5], [0.15, 0.75], 1)),
17
+ roll_rate=ContRat(Exponential.fit_points([1,5], [0.15, 0.75], 1)),
18
+ stallturn_speed=InsideBound(Exponential.fit_points([2, 5], [0.1,0.5]), [-2,2]),
19
+ stallturn_width=InsideBound(Exponential.fit_points([2, 5], [0.1,0.5]), [-2,2]),
20
+ spin_entry_length=MaxBound(Exponential.fit_points([2, 5], [0.1,0.5]), 5),
21
+ pitch_break_length=MaxBound(Exponential.fit_points([2, 5], [0.1,0.5]), 2),
22
+ recovery_length=MaxBound(Exponential.fit_points([2, 5], [0.1,0.5]), 3),
23
+ ),
24
+ inter=dict(
25
+ radius=Comparison(Exponential.fit_points([1,5], [1, 2], 2)),
26
+ speed=Comparison(Exponential.fit_points([1,5], [0.25, 1.0])),
27
+ roll_rate=Comparison(Exponential.fit_points([1,5], [0.25, 1.5],2)),
28
+ length=Comparison(Exponential.fit_points([1,5], [1, 3], 3)),
29
+ free=Comparison(free),
30
+ )
31
+ )
32
+
33
+
34
+ if __name__ == "__main__":
35
+
36
+ with open('examples/scoring/temp.py', 'w') as f:
37
+ for group, v in f3a.items():
38
+ f.write(f'class F3A{group.capitalize()}:\n')
39
+ for n, crit in v.items():
40
+ f.write(f' {n}={crit.to_py()}\n')
41
+
@@ -4,13 +4,13 @@ from flightanalysis import SchedDef, ScheduleAnalysis, ManoeuvreAnalysis
4
4
  from flightdata import Flight
5
5
  import numpy as np
6
6
  import pandas as pd
7
- from flightplotting import plotsec
8
-
7
+ from flightplotting import plotsec, plotdtw
8
+ from time import time
9
9
 
10
10
  with open("examples/data/manual_F3A_P23_22_05_31_00000350.json", "r") as f:
11
11
  data = load(f)
12
12
 
13
- flight = Flight.from_fc_json(data)
13
+ flight = Flight.from_fc_json(data).remove_time_flutter()
14
14
  box = Origin.from_fcjson_parmameters(data["parameters"])
15
15
  state = State.from_flight(flight, box).splitter_labels(data["mans"])
16
16
  sdef = SchedDef.load(data["parameters"]["schedule"][1])
@@ -21,13 +21,26 @@ analysis = ScheduleAnalysis()
21
21
  dgs = []
22
22
 
23
23
  for mdef in sdef:
24
-
24
+ t0 = time()
25
+ print(f'Analyzing {mdef.info.name}')
25
26
  ma = ManoeuvreAnalysis.build(mdef, state.get_manoeuvre(mdef.info.short_name))
26
- plotsec(ma.intended_template).show()
27
27
  scores = ma.scores()
28
-
28
+ print( time()-t0,mdef.info.name, scores.score(), scores.summary())
29
+
30
+ ma.plot_3d().show()
31
+
32
+ print('Optimising Alignment')
33
+ t0 = time()
34
+ ma=ma.optimise_alignment()
35
+
36
+
37
+ scores = ma.scores()
38
+ print( time()-t0,mdef.info.name, scores.score(), scores.summary())
39
+ ma.plot_3d().show()
40
+
29
41
  dgs.append(scores.summary())
30
- print(mdef.info.short_name, scores.score(), dgs[-1])
42
+
43
+
31
44
 
32
45
  df = pd.DataFrame.from_dict(dgs)
33
46
  print(df)
@@ -0,0 +1,26 @@
1
+ from flightanalysis import ManoeuvreAnalysis as MA, ElementAnalysis as EA
2
+ from json import load, dumps
3
+ import numpy as np
4
+
5
+ with open('examples/scoring/manoeuvres/mans/tHat_opt.json', 'r') as f:
6
+ ma = MA.from_dict(load(f))
7
+
8
+ from flightplotting import plotsec
9
+ from flightplotting.traces import vectors
10
+ from flightanalysis.scoring import Result, DownGrade
11
+
12
+ ea = ma[0]
13
+
14
+
15
+ dg: DownGrade = ea.el.intra_scoring.radius
16
+ res: Result = dg(ea.fl, ea.tp)
17
+
18
+
19
+ fig = ea.plot_3d()
20
+
21
+ fig.add_traces(vectors(5, ea.tp, 5*res.measurement.direction, name='vel_err', line=dict(color='red', width=3)))
22
+ fig.add_traces(vectors(5, ea.tp, 0.5*ea.tp.att.transform_point(ea.tp.vel), name='template_vel', line=dict(color='blue', width=3)))
23
+ fig.add_traces(vectors(5, ea.tp, 0.5*ea.fl.att.transform_point(ea.fl.vel), name='flown_vel', line=dict(color='green', width=3)))
24
+ fig.show()
25
+ res.plot().show()
26
+ pass
@@ -0,0 +1,28 @@
1
+ from json import load, dump
2
+ from flightdata import State, Origin
3
+ from flightanalysis import SchedDef
4
+ from flightdata import Flight, NumpyEncoder
5
+
6
+
7
+
8
+ with open("examples/data/manual_F3A_P23_22_05_31_00000350.json", "r") as f:
9
+ data = load(f)
10
+
11
+
12
+ flight = Flight.from_fc_json(data).remove_time_flutter().butter_filter(4,5)
13
+ box = Origin.from_fcjson_parmameters(data["parameters"])
14
+ state = State.from_flight(flight, box).splitter_labels(data["mans"])
15
+ sdef = SchedDef.load(data["parameters"]["schedule"][1])
16
+
17
+ from flightanalysis import ScheduleAnalysis, ManoeuvreAnalysis
18
+
19
+ analysis = ScheduleAnalysis()
20
+ dgs = []
21
+
22
+ for mdef in sdef:
23
+ ma = ManoeuvreAnalysis.build(mdef, state.get_manoeuvre(mdef.info.short_name))
24
+ with open(f'examples/scoring/manoeuvres/mans/{mdef.info.short_name}.json', 'w') as f:
25
+ dump(ma.to_dict(), f, cls=NumpyEncoder)
26
+ ma = ma.optimise_alignment()
27
+ with open(f'examples/scoring/manoeuvres/mans/{mdef.info.short_name}_opt.json', 'w') as f:
28
+ dump(ma.to_dict(), f, cls=NumpyEncoder)
@@ -0,0 +1,50 @@
1
+ '''
2
+ Trial of running an optimiser to find the optimum split location between two
3
+ elements. A simple manoeuvre is created(half loop and entry line). a dummy
4
+ flown manoeuvre is also created with the split in slightly the wrong place.
5
+ a local minimizer is then run to find the minimum intra element downgrade,
6
+ which corresponds to the split moving back to the correct location.
7
+ '''
8
+
9
+ from flightdata import *
10
+ from flightanalysis import *
11
+ import geometry as g
12
+ import numpy as np
13
+ from flightplotting import plotdtw, axis_rate_traces
14
+ import plotly.graph_objects as go
15
+ import plotly.express as px
16
+ from time import time
17
+
18
+ mdef = f3amb.create(ManInfo(
19
+ "Half Loop", "hloop", k=2, position=Position.END,
20
+ start=BoxLocation(Height.BTM, Direction.UPWIND, Orientation.UPRIGHT),
21
+ end=BoxLocation(Height.TOP)
22
+ ),[
23
+ f3amb.loop(np.pi),
24
+ ])
25
+
26
+ itrans = mdef.info.initial_transform(170, 1)
27
+ man = mdef.create(itrans)
28
+ tp = man.create_template(itrans)
29
+
30
+
31
+ man2 = man.copy()
32
+ man2.elements.e_0.radius=40
33
+ fl = man2.create_template(itrans).remove_labels()
34
+
35
+ al = fl.label(manoeuvre='hloop', element=tp.element[len(tp)-len(fl):]) # simulate a poor alignment
36
+
37
+
38
+ els = man.all_elements()
39
+
40
+ t0=time()
41
+ al2 = man.optimise_alignment(al[0], al)
42
+ print(time() - t0)
43
+
44
+
45
+ #px.line(intra.e_0.radius.sample).show()
46
+ plotdtw(al, tp.data.element.unique()).show()
47
+ plotdtw(al2, tp.data.element.unique()).show()
48
+ pass
49
+ #go.Figure(data=axis_rate_traces(dict(tp=tp,al=al))).show()
50
+
@@ -3,4 +3,4 @@ from .manoeuvre import Manoeuvre
3
3
  from .schedule import Schedule
4
4
  from .definition import *
5
5
  from .scoring import *
6
- from .manoeuvre_analysis import ManoeuvreAnalysis, ElementAnalysis, ScheduleAnalysis
6
+ from .analysis import ManoeuvreAnalysis, ElementAnalysis, ScheduleAnalysis
@@ -0,0 +1,3 @@
1
+ from .el_analysis import ElementAnalysis
2
+ from .man_analysis import ManoeuvreAnalysis
3
+ from .sch_analysis import ScheduleAnalysis
@@ -0,0 +1,33 @@
1
+
2
+ from flightdata import State
3
+ from typing import Self
4
+ from flightanalysis.definition import ElDef
5
+ from flightanalysis.elements import Element
6
+ from dataclasses import dataclass
7
+ import geometry as g
8
+
9
+
10
+ @dataclass
11
+ class ElementAnalysis:
12
+ edef:ElDef
13
+ el: Element
14
+ fl: State
15
+ tp: State
16
+ ref_frame: g.Transformation
17
+
18
+ def plot_3d(self, origin=False, **kwargs):
19
+ from flightplotting import plotsec
20
+ return plotsec([self.fl, self.tp], 2, 5, origin=origin, **kwargs)
21
+
22
+ def to_dict(self):
23
+ return {k: v.to_dict() for k, v in self.__dict__.items()}
24
+
25
+ @staticmethod
26
+ def from_dict(data) -> Self:
27
+ return ElementAnalysis(
28
+ ElDef.from_dict(data['edef']),
29
+ Element.from_dict(data['el']),
30
+ State.from_dict(data['fl']),
31
+ State.from_dict(data['tp']),
32
+ g.Transformation.from_dict(data['ref_frame'])
33
+ )