{"id":169,"date":"2025-04-11T15:14:09","date_gmt":"2025-04-11T22:14:09","guid":{"rendered":"https:\/\/ciurana.eu\/blog\/?p=169"},"modified":"2025-07-25T21:14:48","modified_gmt":"2025-07-26T04:14:48","slug":"flysight-2-stratospheric-speed-jump-ssscore-2-1-8-resolves-it","status":"publish","type":"post","link":"https:\/\/ciurana.eu\/blog\/2025\/04\/11\/flysight-2-stratospheric-speed-jump-ssscore-2-1-8-resolves-it\/","title":{"rendered":"FlySight 2 stratospheric speed jump?  SSScore 2.1.8 resolves it"},"content":{"rendered":"<p>A few jumpers equiped with FlySight 2 SMDs reported SSScore crashes.\u00a0 These are resolved in <a href=\"https:\/\/ssscore.streamlit.app\" target=\"_blank\" rel=\"noopener\"><strong>SSScore 2.1.8<\/strong><\/a> and later versions &#8211; feel free to use it!\u00a0 The crashes were caused by a weird bug where the SMD has entries for MSL \/ AGL elevations of 38,000 ft or more.\u00a0 It took some sleuthing to realize that the problem isn&#8217;t unique to FlySight 2, and that it&#8217;s caused by a combination of too short warmups prior to boarding and too much metal around the speed skydiver during the climb to altitude.\u00a0 The SMD corrects itself when the speed skydiver is near the door and can sync with the GPS satellites.\u00a0 The track CSV file, though, is often corrupted to a point where FlySightViewer and other tools can&#8217;t process it.\u00a0 Prior to the latest release, SSScore would crash when it found speed skydive track files for &#8220;stratospheric jumps.&#8221;\u00a0 This document details what changed in this release, and how SSScore helps speed skydivers with training.<\/p>\n<h2>What&#8217;s the issue?<\/h2>\n<p>I understood something was wrong when this error screen made its way to me:<\/p>\n<p><a href=\"https:\/\/ciurana.eu\/blog\/wp-content\/uploads\/2025\/04\/stratospheric-crash-768x576.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-170\" src=\"https:\/\/ciurana.eu\/blog\/wp-content\/uploads\/2025\/04\/stratospheric-crash-300x225.png\" alt=\"\" width=\"300\" height=\"225\" srcset=\"https:\/\/ciurana.eu\/blog\/wp-content\/uploads\/2025\/04\/stratospheric-crash-300x225.png 300w, https:\/\/ciurana.eu\/blog\/wp-content\/uploads\/2025\/04\/stratospheric-crash-1024x768.png 1024w, https:\/\/ciurana.eu\/blog\/wp-content\/uploads\/2025\/04\/stratospheric-crash-768x576.png 768w, https:\/\/ciurana.eu\/blog\/wp-content\/uploads\/2025\/04\/stratospheric-crash-1536x1152.png 1536w, https:\/\/ciurana.eu\/blog\/wp-content\/uploads\/2025\/04\/stratospheric-crash.png 1800w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>This was a weird new condition not contemplated in the unit tests or found so far in any of the test files.\u00a0 The bug report included two &#8220;bad&#8221; track files, both of which listed interesting data at exit or near exit and in the first few seconds of the speed skydive:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-171\" src=\"https:\/\/ciurana.eu\/blog\/wp-content\/uploads\/2025\/04\/IMG_5189.png\" alt=\"\" width=\"1000\" height=\"342\" srcset=\"https:\/\/ciurana.eu\/blog\/wp-content\/uploads\/2025\/04\/IMG_5189.png 1000w, https:\/\/ciurana.eu\/blog\/wp-content\/uploads\/2025\/04\/IMG_5189-300x103.png 300w, https:\/\/ciurana.eu\/blog\/wp-content\/uploads\/2025\/04\/IMG_5189-768x263.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/p>\n<p>There were several rows showing stratospheric altitudes.\u00a0 Further analysis of the track file revealed that only a few seconds of data show this problem, and the rest of the file, including the actual exit, are fine for scoring in training.\u00a0 None of these stratospheric elevation data rows occurred later than 4 seconds into the jump.\u00a0 The rest of the speed data is fine, and can be scored without issues and without breaking any ISC \/ FAI \/ USPA rules.<\/p>\n<h2>Solving the issue<\/h2>\n<p>Given the nature of the error, the solution is straight forward and involves an important change to how SSScore and SSScoring deal with speed files.\u00a0 Prior to this change, the UI and the API could process files from any exit as long as the time series was consistent.\u00a0 Version 2.1.8 imposes an important restriction:\u00a0 it only scores data rows where the elevation AGL (adjusted to DZ elevation) is between 15,100 and 10,999 feet.\u00a0 Any data rows with elevation AGL &gt; 15,100 ft are discarded, and the rest of the speed file is scored using the usual methods, compliant with ISC \/ ISSA \/ FAI \/ USPA rules.<\/p>\n<p>The implementation is straight forward:<\/p>\n<pre>data = data[data.altitudeAGL &lt;= MAX_VALID_ELEVATION]<\/pre>\n<p>Where:<\/p>\n<ul>\n<li>data := the full dataset converted to SSScoring format and adjusted for DZ elevation<\/li>\n<li>MAX_VALID_ELEVATION := 4,602.48 m \/ 15,100 ft.<\/li>\n<\/ul>\n<p>After this change it&#8217;s possible to take the same file that caused the crash, scrub the stratospheric elevation data off, and generate the score, maps, plots, and summaries as usual.\u00a0 The new implementation works in the single and multiple files analysis views.<\/p>\n<h2>Conclusion<\/h2>\n<p>Speed Skydiving scoring has a lot of nuances when processing data from the real world.\u00a0 There may be situations where a bad jump is caused by the GPS glitches.\u00a0 SSScore helps jumpers with training by eliminating bad data from an otherwise legit track file and jump, and focus on technique, flight, peace of mind, and going fast rather than worrying track file glitches.<\/p>\n<p>The next post will be more about the art and science of speed skydiving, and less about the technical aspects of the SSScoring tools.\u00a0 Until then, blue skies and #gofast!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A few jumpers equiped with FlySight 2 SMDs reported SSScore crashes.\u00a0 These are resolved in SSScore 2.1.8 and later versions &#8211; feel free to use it!\u00a0 The crashes were caused by a weird bug where the SMD has entries for MSL \/ AGL elevations of 38,000 ft or more.\u00a0 It took some sleuthing to realize [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":174,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-169","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/ciurana.eu\/blog\/wp-json\/wp\/v2\/posts\/169","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ciurana.eu\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ciurana.eu\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ciurana.eu\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ciurana.eu\/blog\/wp-json\/wp\/v2\/comments?post=169"}],"version-history":[{"count":6,"href":"https:\/\/ciurana.eu\/blog\/wp-json\/wp\/v2\/posts\/169\/revisions"}],"predecessor-version":[{"id":255,"href":"https:\/\/ciurana.eu\/blog\/wp-json\/wp\/v2\/posts\/169\/revisions\/255"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ciurana.eu\/blog\/wp-json\/wp\/v2\/media\/174"}],"wp:attachment":[{"href":"https:\/\/ciurana.eu\/blog\/wp-json\/wp\/v2\/media?parent=169"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ciurana.eu\/blog\/wp-json\/wp\/v2\/categories?post=169"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ciurana.eu\/blog\/wp-json\/wp\/v2\/tags?post=169"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}