rowingdata 3.7.2__tar.gz → 3.8.0__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.
- {rowingdata-3.7.2/rowingdata.egg-info → rowingdata-3.8.0}/PKG-INFO +114 -30
- {rowingdata-3.7.2 → rowingdata-3.8.0}/README.rst +113 -29
- rowingdata-3.8.0/rowingdata/data/fit_export_spec.json +88 -0
- rowingdata-3.8.0/rowingdata/fit_garmin_bridge.py +155 -0
- rowingdata-3.8.0/rowingdata/fit_transcode.py +127 -0
- rowingdata-3.8.0/rowingdata/fitwrite.py +1217 -0
- rowingdata-3.8.0/rowingdata/fitwrite_spec.py +212 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/otherparsers.py +266 -9
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/rowingdata.py +67 -8
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/tcxtools.py +1 -1
- {rowingdata-3.7.2 → rowingdata-3.8.0/rowingdata.egg-info}/PKG-INFO +114 -30
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata.egg-info/SOURCES.txt +7 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/setup.py +4 -1
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/testdatasummary.csv +3 -3
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/testtcx.tcx +1 -1
- rowingdata-3.8.0/tests/test_fit_instroke_export.py +462 -0
- rowingdata-3.8.0/tests/test_fit_standard.py +316 -0
- rowingdata-3.8.0/tests/test_fit_transcode.py +78 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/tests/test_rowingdata.py +404 -7
- rowingdata-3.7.2/rowingdata/fitwrite.py +0 -344
- {rowingdata-3.7.2 → rowingdata-3.8.0}/LICENSE +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/MANIFEST.in +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/bin/crewnerddata.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/bin/crewnerddata.tcx +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/bin/testdata.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/.buildinfo +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_images/2x20min.png +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_images/editrower.JPG +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_images/greghoc.png +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_images/image001.png +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_images/otwlogbook.JPG +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_images/otwscreenshot.JPG +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_images/screenshot.JPG +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_images/screenshotlogbook.JPG +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_images/woensdag.png +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_sources/index.txt +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_sources/modules.txt +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_sources/rowingdata.txt +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_static/ajax-loader.gif +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_static/alabaster.css +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_static/basic.css +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_static/comment-bright.png +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_static/comment-close.png +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_static/comment.png +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_static/custom.css +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_static/doctools.js +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_static/down-pressed.png +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_static/down.png +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_static/file.png +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_static/jquery-1.11.1.js +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_static/jquery.js +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_static/minus.png +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_static/plus.png +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_static/pygments.css +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_static/searchtools.js +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_static/underscore-1.3.1.js +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_static/underscore.js +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_static/up-pressed.png +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_static/up.png +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/_static/websupport.js +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/genindex.html +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/index.html +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/modules.html +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/objects.inv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/py-modindex.html +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/rowingdata.html +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/search.html +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/docs/_build/html/searchindex.js +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/__init__.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/__main__.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/boatedit.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/checkdatafiles.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/copystats.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/crewnerdplot.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/crewnerdplottime.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/csvparsers.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/ergdataplot.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/ergdataplottime.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/ergdatatotcx.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/ergstickplot.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/ergstickplottime.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/ergsticktotcx.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/gpxtools.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/gpxwrite.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/konkatenaadje.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/laptesting.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/obsolete.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/painsled_desktop_plot.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/painsled_desktop_plottime.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/painsled_desktop_toc2.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/painsledplot.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/painsledplottime.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/painsledtoc2.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/roweredit.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/rowproplot.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/rowproplottime.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/speedcoachplot.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/speedcoachplottime.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/speedcoachtoc2.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/tcxplot.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/tcxplot_nogeo.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/tcxplottime.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/tcxplottime_nogeo.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/tcxtoc2.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/trainingparser.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/utils.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/windcorrected.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata/writetcx.py +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata.egg-info/dependency_links.txt +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata.egg-info/not-zip-safe +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata.egg-info/requires.txt +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/rowingdata.egg-info/top_level.txt +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/setup.cfg +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/2016-03-25-0758.CSV +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/2016-03-25-0758_data.CSV +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/2x20min_o.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/2x2km.tcx +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/3km_cd_o.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/3x250m.tcx +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/EUBoatCoach.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/EmpowerSpeedCoachForce.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/NKEmporfromgreg.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/NKLiNKv130.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/NoHR.tcx +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/PainsledForce.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/RP_interval.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/RP_interval.csv_o.CSV +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/RP_testdata.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/SpdCoach2_imp_inconsistent.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/SpdCoachAmbiguous.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/SpeedCoach GPS Workout.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/SpeedCoach2Link_interval.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/SpeedCoach2Linkv1.27.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/SpeedCoach2v2.12.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/Speedcoach2example.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/aritmo.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/bc1.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/bc2.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/bc3.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/boatcoach.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/boatcoach_fixed_distance.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/boatcoach_otw.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/correctedpainsled.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/cottwich.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/coxmate.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/crewnerd_interval.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/crewnerddata.CSV +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/crewnerddata.tcx +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/crewnerddata_o.CSV +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/cumvalues.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/ergdata_example.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/ergdata_example.csv_o.CSV +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/ergstick.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/ergstick.csv_o.CSV +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/ergstick2.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/ergstick_o.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/example.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/example_data.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/faketcx.tcx +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/float.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/herodata.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/humon.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/impeller_empower.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/invalidchar.tcx +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/kinomap.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/mystery.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/nk_logbook.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/painsled.tcx +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/painsled_desktop_example.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/painsled_out_data.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/painsled_to_csv_20160221-105218_erg-400150318_760465m.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/quiske_per_stroke_left.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/quiske_per_stroke_new.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/quiske_per_stroke_right.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/quiske_per_stroke_seat.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/recover.tcx +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/ritmointervals.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/rowingdata_eth.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/rowinginmotionexample.TCX +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/rowinginmotionexample.TCX_o.CSV +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/rowperfect.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/rowpro5.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/rowpro_carrick.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/rp3_curve.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/rp3intervals.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/rp3intervals2.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/rp_out.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/smartrow.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/smartrow_intervals.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/spdcoach2noheader.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/speedcoach2test2.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/speedcoach3test3.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/speedcoachexample.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/speedcoachexample.csv_o.CSV +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/strava_export.tcx +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/summarytest.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/testdata.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/testdata_part1.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/testdata_part2.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/testlapidx.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/testtcs_210614.tcx +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/testtcx_210614.tcx +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata/tim.csv +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/testdata//345/210/222/350/210/271.csv" +0 -0
- {rowingdata-3.7.2 → rowingdata-3.8.0}/tests/testparser.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: rowingdata
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.8.0
|
|
4
4
|
Summary: The rowingdata library to create colorful plots from CrewNerd, Painsled and other rowing data tools
|
|
5
5
|
Home-page: https://github.com/sanderroosendaal/rowingdata
|
|
6
6
|
Author: Sander Roosendaal
|
|
@@ -536,7 +536,7 @@ Data Fields
|
|
|
536
536
|
|
|
537
537
|
The available data fields are
|
|
538
538
|
|
|
539
|
-
* '
|
|
539
|
+
* 'TimeStamp (sec)'
|
|
540
540
|
* ' Horizontal (meters)'
|
|
541
541
|
* ' Cadence (stokes/min'
|
|
542
542
|
* ' HRCur (bpm)'
|
|
@@ -546,31 +546,41 @@ The available data fields are
|
|
|
546
546
|
* ' StrokeDistance (meters)'
|
|
547
547
|
* ' DriveTime (ms)'
|
|
548
548
|
* ' StrokeRecoveryTime (ms)'
|
|
549
|
-
* ' AverageDriveForce (
|
|
550
|
-
* ' PeakDriveForce (
|
|
549
|
+
* ' AverageDriveForce (N)' (preferred; SI units)
|
|
550
|
+
* ' PeakDriveForce (N)' (preferred; SI units)
|
|
551
|
+
* ' AverageDriveForce (lbs)' (legacy; still supported)
|
|
552
|
+
* ' PeakDriveForce (lbs)' (legacy; still supported)
|
|
551
553
|
* 'cum_dist'
|
|
552
554
|
|
|
555
|
+
Oarlock parsers (NK Logbook) may add: ``catch``, ``finish``,
|
|
556
|
+
``slip``, ``wash``, ``peakforceangle``, ``effectiveLength``.
|
|
557
|
+
|
|
553
558
|
If imported from TCX, Rowpro, or other tools, some data fields may not contain
|
|
554
559
|
useful information.
|
|
555
560
|
|
|
556
|
-
|
|
557
|
-
CSV
|
|
558
|
-
|
|
561
|
+
=======================
|
|
562
|
+
rowingdata CSV Columns
|
|
563
|
+
=======================
|
|
559
564
|
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
565
|
+
This section describes the dataframe schema used by the ``rowingdata`` class.
|
|
566
|
+
It is this package's own column layout, not a vendor-neutral standard. For a
|
|
567
|
+
cross-vendor interchange format, see the Rowing Data Standard at
|
|
568
|
+
https://github.com/MoveLab-Studio/rowing-data-standard, which rowingdata
|
|
569
|
+
targets when exporting FIT.
|
|
563
570
|
|
|
564
|
-
|
|
571
|
+
Any parser implementation feeding the ``rowingdata`` class should produce at
|
|
572
|
+
least the columns described below.
|
|
573
|
+
|
|
574
|
+
Please send to me any CSV file that follows the layout described here
|
|
565
575
|
but does not parse well in the "rowingdata" module. I will update the module
|
|
566
|
-
and add the file to
|
|
576
|
+
and add the file to regression testing.
|
|
567
577
|
|
|
568
578
|
Field Names (Columns)
|
|
569
579
|
----------------------
|
|
570
580
|
|
|
571
581
|
The standard field names are:
|
|
572
582
|
|
|
573
|
-
* '
|
|
583
|
+
* 'TimeStamp (sec)'
|
|
574
584
|
* ' Horizontal (meters)'
|
|
575
585
|
* ' Cadence (stokes/min'
|
|
576
586
|
* ' HRCur (bpm)'
|
|
@@ -580,12 +590,24 @@ The standard field names are:
|
|
|
580
590
|
* ' StrokeDistance (meters)'
|
|
581
591
|
* ' DriveTime (ms)'
|
|
582
592
|
* ' StrokeRecoveryTime (ms)'
|
|
583
|
-
* ' AverageDriveForce (
|
|
584
|
-
* ' PeakDriveForce (
|
|
593
|
+
* ' AverageDriveForce (N)' (preferred; SI units)
|
|
594
|
+
* ' PeakDriveForce (N)' (preferred; SI units)
|
|
595
|
+
* ' AverageDriveForce (lbs)' (legacy; still supported)
|
|
596
|
+
* ' PeakDriveForce (lbs)' (legacy; still supported)
|
|
585
597
|
* ' lapIdx'
|
|
586
598
|
* ' ElapsedTime (sec)'
|
|
587
599
|
|
|
588
|
-
|
|
600
|
+
Optional (Oarlock/NK Logbook): ``catch``/``catchAngle``, ``finish``/``finishAngle``,
|
|
601
|
+
``slip``, ``wash``, ``peakforceangle``, ``effectiveLength``.
|
|
602
|
+
|
|
603
|
+
Planned for dual oarlock (port/starboard symmetry): ``catch_port``, ``catch_starboard``,
|
|
604
|
+
``finish_port``, ``finish_starboard``, ``slip_port``, ``slip_starboard``, ``wash_port``,
|
|
605
|
+
``wash_starboard``, ``peakforceangle_port``, ``peakforceangle_starboard``,
|
|
606
|
+
``effectiveLength_port``, ``effectiveLength_starboard``. See *Dual oarlock
|
|
607
|
+
(port/starboard)* below. **Note:** rowingdata does not yet implement parsing or
|
|
608
|
+
export for these per-side columns.
|
|
609
|
+
|
|
610
|
+
The CSV file adheres to the US conventions, with fields
|
|
589
611
|
separated by a comma (',')
|
|
590
612
|
and using the dot '.' as the decimal symbol.
|
|
591
613
|
|
|
@@ -738,21 +760,28 @@ Field name: ' DriveLength (meters)'
|
|
|
738
760
|
|
|
739
761
|
Unit: meter
|
|
740
762
|
|
|
741
|
-
The distance traveled by the handle along the
|
|
763
|
+
The distance traveled by the handle along the longitudinal
|
|
742
764
|
axis of the boat or erg.
|
|
743
765
|
|
|
744
766
|
For OTW rowing, where the oar or scull rotates around the pin, this
|
|
745
767
|
is not equal to the length trajectory traveled by the hands. It
|
|
746
|
-
is the projection of that trajectory on the
|
|
768
|
+
is the projection of that trajectory on the longitudinal axis.
|
|
769
|
+
|
|
770
|
+
Typical range: 1.2–1.5 m for rowing. This is a *stroke output* metric:
|
|
771
|
+
how far the handle actually moved during the drive phase.
|
|
747
772
|
|
|
748
|
-
Stroke Distance
|
|
749
|
-
|
|
773
|
+
Stroke Distance
|
|
774
|
+
---------------
|
|
750
775
|
|
|
751
776
|
Field name: ' StrokeDistance (meters)'
|
|
752
777
|
|
|
753
778
|
Unit: meter
|
|
754
779
|
|
|
755
|
-
The distance traveled during the stroke cycle.
|
|
780
|
+
The distance traveled during the stroke cycle. This is the distance
|
|
781
|
+
the boat or erg travels during one complete stroke (catch to catch),
|
|
782
|
+
i.e. the boat's displacement, not the handle travel. Distinct from
|
|
783
|
+
Drive Length (handle distance) and from Effective Length (rigging).
|
|
784
|
+
Typical range: 7–12 m for OTW rowing.
|
|
756
785
|
|
|
757
786
|
Drive Time
|
|
758
787
|
-------------
|
|
@@ -779,14 +808,12 @@ The duration of the recovery part. See Drive Time for the definition. Drive Time
|
|
|
779
808
|
Average Drive Force
|
|
780
809
|
--------------------
|
|
781
810
|
|
|
782
|
-
Field name: ' AverageDriveForce (
|
|
783
|
-
|
|
784
|
-
Unit: lbs - or N, see below
|
|
811
|
+
Field name: ' AverageDriveForce (N)' (preferred) or ' AverageDriveForce (lbs)' (legacy)
|
|
785
812
|
|
|
786
|
-
|
|
787
|
-
we will implement ' AverageDriveForce (N)' so we can report in SI units.
|
|
813
|
+
Unit: newtons (N), or pounds (lb) for older files and tools
|
|
788
814
|
|
|
789
|
-
|
|
815
|
+
Use **Newtons** for new data and integrations. **Pounds** remain supported for
|
|
816
|
+
backward compatibility. This should be the part of the handle force that does actual work.
|
|
790
817
|
|
|
791
818
|
For dynamic ergs and OTW rowing this is not sufficient to describe the
|
|
792
819
|
complete stroke dynamics, so additional fields can be defined, for example
|
|
@@ -809,11 +836,48 @@ as opposed to an average over time or oar angles.
|
|
|
809
836
|
Peak Drive Force
|
|
810
837
|
------------------
|
|
811
838
|
|
|
812
|
-
Field name: ' PeakDriveForce (
|
|
839
|
+
Field name: ' PeakDriveForce (N)' (preferred) or ' PeakDriveForce (lbs)' (legacy)
|
|
813
840
|
|
|
814
|
-
Unit:
|
|
841
|
+
Unit: newtons (N), or pounds (lb) for older files and tools
|
|
815
842
|
|
|
816
|
-
See
|
|
843
|
+
See discussion about measuring forces under Average Drive Force.
|
|
844
|
+
|
|
845
|
+
Oarlock scalars (OTW rigging)
|
|
846
|
+
-----------------------------
|
|
847
|
+
|
|
848
|
+
Field names: 'catch' / 'catchAngle', 'finish' / 'finishAngle', 'slip',
|
|
849
|
+
'wash', 'peakforceangle', 'effectiveLength'
|
|
850
|
+
|
|
851
|
+
Units: degrees for angles; meter for effectiveLength (scale may vary by
|
|
852
|
+
source: NK Logbook uses these columns).
|
|
853
|
+
|
|
854
|
+
These fields come from NK Logbook (Oarlock) and similar OTW
|
|
855
|
+
measurement systems. They describe rigging geometry and blade angles:
|
|
856
|
+
|
|
857
|
+
* **catch**, **finish** – oar angles at catch and finish (degrees),
|
|
858
|
+
using the rowing convention where **0° = oar perpendicular to the boat's
|
|
859
|
+
longitudinal axis**. Negative values indicate the catch direction (oar blade
|
|
860
|
+
toward bow, handle toward stern); positive values indicate the finish direction
|
|
861
|
+
(oar blade toward stern, handle toward bow). NK uses catchAngle, finishAngle.
|
|
862
|
+
* **slip** – blade slip angle.
|
|
863
|
+
* **wash** – wash/backwash angle.
|
|
864
|
+
* **peakforceangle** – oar angle at peak force (same 0° = perpendicular convention).
|
|
865
|
+
* **effectiveLength** – effective lever length (rigging geometry). *Not*
|
|
866
|
+
the same as Drive Length: Effective Length is the horizontal component
|
|
867
|
+
from pin to handle (a rigging/setup measure, often in cm), whereas
|
|
868
|
+
Drive Length is the *actual distance the handle traveled* during the
|
|
869
|
+
stroke (typically 1.2–1.5 m). Both may appear in the same dataset;
|
|
870
|
+
they serve different purposes.
|
|
871
|
+
|
|
872
|
+
Dual oarlock (port/starboard)
|
|
873
|
+
..............................
|
|
874
|
+
|
|
875
|
+
When a rower uses two smart oarlocks, oarlock metrics can be reported per side:
|
|
876
|
+
port (left) and starboard (right). Each metric may appear as a per-side column
|
|
877
|
+
(e.g. ``catch_port``, ``catch_starboard``); the unsuffixed summary column
|
|
878
|
+
(``catch``) is the average of the two sides when both exist, and the value of
|
|
879
|
+
whichever side is present otherwise. **Note:** rowingdata does not yet
|
|
880
|
+
implement parsing or FIT export for these per-side columns.
|
|
817
881
|
|
|
818
882
|
Lap Identifier
|
|
819
883
|
-------------------
|
|
@@ -903,6 +967,26 @@ Boat bearing.
|
|
|
903
967
|
Release Notes:
|
|
904
968
|
================
|
|
905
969
|
|
|
970
|
+
Unreleased
|
|
971
|
+
----------
|
|
972
|
+
|
|
973
|
+
- **Breaking change to exported FIT file contents.** FIT export now follows the
|
|
974
|
+
Rowing Data Standard (https://github.com/MoveLab-Studio/rowing-data-standard,
|
|
975
|
+
Draft v0.1). The ``exporttofit`` API is unchanged, but the bytes it writes are
|
|
976
|
+
not: the developer application ID is now the standard UUID, ``DriveLength``
|
|
977
|
+
and ``EffectiveLength`` are encoded in millimetres rather than metres,
|
|
978
|
+
``AverageBoatSpeed`` uses scale 255, stroke rate moves to field ID 93, and
|
|
979
|
+
stroke work to field ID 19. Consumers that hardcoded the previous rowingdata
|
|
980
|
+
application ID or the old metre-based scales must be updated. ``FITParser``
|
|
981
|
+
still reads files written by rowingdata 3.7.3 and earlier.
|
|
982
|
+
- In-stroke curve fields are emitted under a separate, private application ID,
|
|
983
|
+
because those field IDs are not allocated in the standard's registry and so
|
|
984
|
+
carry no interoperable meaning.
|
|
985
|
+
- Removed ``docs/FIT_STANDARD.md`` and ``docs/FIT_STANDARD.pdf``. The standard is
|
|
986
|
+
maintained by a committee at
|
|
987
|
+
https://github.com/MoveLab-Studio/rowing-data-standard, which is the single
|
|
988
|
+
source of truth; this repository no longer ships a copy.
|
|
989
|
+
|
|
906
990
|
0.97.x
|
|
907
991
|
------
|
|
908
992
|
|
|
@@ -504,7 +504,7 @@ Data Fields
|
|
|
504
504
|
|
|
505
505
|
The available data fields are
|
|
506
506
|
|
|
507
|
-
* '
|
|
507
|
+
* 'TimeStamp (sec)'
|
|
508
508
|
* ' Horizontal (meters)'
|
|
509
509
|
* ' Cadence (stokes/min'
|
|
510
510
|
* ' HRCur (bpm)'
|
|
@@ -514,31 +514,41 @@ The available data fields are
|
|
|
514
514
|
* ' StrokeDistance (meters)'
|
|
515
515
|
* ' DriveTime (ms)'
|
|
516
516
|
* ' StrokeRecoveryTime (ms)'
|
|
517
|
-
* ' AverageDriveForce (
|
|
518
|
-
* ' PeakDriveForce (
|
|
517
|
+
* ' AverageDriveForce (N)' (preferred; SI units)
|
|
518
|
+
* ' PeakDriveForce (N)' (preferred; SI units)
|
|
519
|
+
* ' AverageDriveForce (lbs)' (legacy; still supported)
|
|
520
|
+
* ' PeakDriveForce (lbs)' (legacy; still supported)
|
|
519
521
|
* 'cum_dist'
|
|
520
522
|
|
|
523
|
+
Oarlock parsers (NK Logbook) may add: ``catch``, ``finish``,
|
|
524
|
+
``slip``, ``wash``, ``peakforceangle``, ``effectiveLength``.
|
|
525
|
+
|
|
521
526
|
If imported from TCX, Rowpro, or other tools, some data fields may not contain
|
|
522
527
|
useful information.
|
|
523
528
|
|
|
524
|
-
|
|
525
|
-
CSV
|
|
526
|
-
|
|
529
|
+
=======================
|
|
530
|
+
rowingdata CSV Columns
|
|
531
|
+
=======================
|
|
527
532
|
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
533
|
+
This section describes the dataframe schema used by the ``rowingdata`` class.
|
|
534
|
+
It is this package's own column layout, not a vendor-neutral standard. For a
|
|
535
|
+
cross-vendor interchange format, see the Rowing Data Standard at
|
|
536
|
+
https://github.com/MoveLab-Studio/rowing-data-standard, which rowingdata
|
|
537
|
+
targets when exporting FIT.
|
|
531
538
|
|
|
532
|
-
|
|
539
|
+
Any parser implementation feeding the ``rowingdata`` class should produce at
|
|
540
|
+
least the columns described below.
|
|
541
|
+
|
|
542
|
+
Please send to me any CSV file that follows the layout described here
|
|
533
543
|
but does not parse well in the "rowingdata" module. I will update the module
|
|
534
|
-
and add the file to
|
|
544
|
+
and add the file to regression testing.
|
|
535
545
|
|
|
536
546
|
Field Names (Columns)
|
|
537
547
|
----------------------
|
|
538
548
|
|
|
539
549
|
The standard field names are:
|
|
540
550
|
|
|
541
|
-
* '
|
|
551
|
+
* 'TimeStamp (sec)'
|
|
542
552
|
* ' Horizontal (meters)'
|
|
543
553
|
* ' Cadence (stokes/min'
|
|
544
554
|
* ' HRCur (bpm)'
|
|
@@ -548,12 +558,24 @@ The standard field names are:
|
|
|
548
558
|
* ' StrokeDistance (meters)'
|
|
549
559
|
* ' DriveTime (ms)'
|
|
550
560
|
* ' StrokeRecoveryTime (ms)'
|
|
551
|
-
* ' AverageDriveForce (
|
|
552
|
-
* ' PeakDriveForce (
|
|
561
|
+
* ' AverageDriveForce (N)' (preferred; SI units)
|
|
562
|
+
* ' PeakDriveForce (N)' (preferred; SI units)
|
|
563
|
+
* ' AverageDriveForce (lbs)' (legacy; still supported)
|
|
564
|
+
* ' PeakDriveForce (lbs)' (legacy; still supported)
|
|
553
565
|
* ' lapIdx'
|
|
554
566
|
* ' ElapsedTime (sec)'
|
|
555
567
|
|
|
556
|
-
|
|
568
|
+
Optional (Oarlock/NK Logbook): ``catch``/``catchAngle``, ``finish``/``finishAngle``,
|
|
569
|
+
``slip``, ``wash``, ``peakforceangle``, ``effectiveLength``.
|
|
570
|
+
|
|
571
|
+
Planned for dual oarlock (port/starboard symmetry): ``catch_port``, ``catch_starboard``,
|
|
572
|
+
``finish_port``, ``finish_starboard``, ``slip_port``, ``slip_starboard``, ``wash_port``,
|
|
573
|
+
``wash_starboard``, ``peakforceangle_port``, ``peakforceangle_starboard``,
|
|
574
|
+
``effectiveLength_port``, ``effectiveLength_starboard``. See *Dual oarlock
|
|
575
|
+
(port/starboard)* below. **Note:** rowingdata does not yet implement parsing or
|
|
576
|
+
export for these per-side columns.
|
|
577
|
+
|
|
578
|
+
The CSV file adheres to the US conventions, with fields
|
|
557
579
|
separated by a comma (',')
|
|
558
580
|
and using the dot '.' as the decimal symbol.
|
|
559
581
|
|
|
@@ -706,21 +728,28 @@ Field name: ' DriveLength (meters)'
|
|
|
706
728
|
|
|
707
729
|
Unit: meter
|
|
708
730
|
|
|
709
|
-
The distance traveled by the handle along the
|
|
731
|
+
The distance traveled by the handle along the longitudinal
|
|
710
732
|
axis of the boat or erg.
|
|
711
733
|
|
|
712
734
|
For OTW rowing, where the oar or scull rotates around the pin, this
|
|
713
735
|
is not equal to the length trajectory traveled by the hands. It
|
|
714
|
-
is the projection of that trajectory on the
|
|
736
|
+
is the projection of that trajectory on the longitudinal axis.
|
|
737
|
+
|
|
738
|
+
Typical range: 1.2–1.5 m for rowing. This is a *stroke output* metric:
|
|
739
|
+
how far the handle actually moved during the drive phase.
|
|
715
740
|
|
|
716
|
-
Stroke Distance
|
|
717
|
-
|
|
741
|
+
Stroke Distance
|
|
742
|
+
---------------
|
|
718
743
|
|
|
719
744
|
Field name: ' StrokeDistance (meters)'
|
|
720
745
|
|
|
721
746
|
Unit: meter
|
|
722
747
|
|
|
723
|
-
The distance traveled during the stroke cycle.
|
|
748
|
+
The distance traveled during the stroke cycle. This is the distance
|
|
749
|
+
the boat or erg travels during one complete stroke (catch to catch),
|
|
750
|
+
i.e. the boat's displacement, not the handle travel. Distinct from
|
|
751
|
+
Drive Length (handle distance) and from Effective Length (rigging).
|
|
752
|
+
Typical range: 7–12 m for OTW rowing.
|
|
724
753
|
|
|
725
754
|
Drive Time
|
|
726
755
|
-------------
|
|
@@ -747,14 +776,12 @@ The duration of the recovery part. See Drive Time for the definition. Drive Time
|
|
|
747
776
|
Average Drive Force
|
|
748
777
|
--------------------
|
|
749
778
|
|
|
750
|
-
Field name: ' AverageDriveForce (
|
|
751
|
-
|
|
752
|
-
Unit: lbs - or N, see below
|
|
779
|
+
Field name: ' AverageDriveForce (N)' (preferred) or ' AverageDriveForce (lbs)' (legacy)
|
|
753
780
|
|
|
754
|
-
|
|
755
|
-
we will implement ' AverageDriveForce (N)' so we can report in SI units.
|
|
781
|
+
Unit: newtons (N), or pounds (lb) for older files and tools
|
|
756
782
|
|
|
757
|
-
|
|
783
|
+
Use **Newtons** for new data and integrations. **Pounds** remain supported for
|
|
784
|
+
backward compatibility. This should be the part of the handle force that does actual work.
|
|
758
785
|
|
|
759
786
|
For dynamic ergs and OTW rowing this is not sufficient to describe the
|
|
760
787
|
complete stroke dynamics, so additional fields can be defined, for example
|
|
@@ -777,11 +804,48 @@ as opposed to an average over time or oar angles.
|
|
|
777
804
|
Peak Drive Force
|
|
778
805
|
------------------
|
|
779
806
|
|
|
780
|
-
Field name: ' PeakDriveForce (
|
|
807
|
+
Field name: ' PeakDriveForce (N)' (preferred) or ' PeakDriveForce (lbs)' (legacy)
|
|
781
808
|
|
|
782
|
-
Unit:
|
|
809
|
+
Unit: newtons (N), or pounds (lb) for older files and tools
|
|
783
810
|
|
|
784
|
-
See
|
|
811
|
+
See discussion about measuring forces under Average Drive Force.
|
|
812
|
+
|
|
813
|
+
Oarlock scalars (OTW rigging)
|
|
814
|
+
-----------------------------
|
|
815
|
+
|
|
816
|
+
Field names: 'catch' / 'catchAngle', 'finish' / 'finishAngle', 'slip',
|
|
817
|
+
'wash', 'peakforceangle', 'effectiveLength'
|
|
818
|
+
|
|
819
|
+
Units: degrees for angles; meter for effectiveLength (scale may vary by
|
|
820
|
+
source: NK Logbook uses these columns).
|
|
821
|
+
|
|
822
|
+
These fields come from NK Logbook (Oarlock) and similar OTW
|
|
823
|
+
measurement systems. They describe rigging geometry and blade angles:
|
|
824
|
+
|
|
825
|
+
* **catch**, **finish** – oar angles at catch and finish (degrees),
|
|
826
|
+
using the rowing convention where **0° = oar perpendicular to the boat's
|
|
827
|
+
longitudinal axis**. Negative values indicate the catch direction (oar blade
|
|
828
|
+
toward bow, handle toward stern); positive values indicate the finish direction
|
|
829
|
+
(oar blade toward stern, handle toward bow). NK uses catchAngle, finishAngle.
|
|
830
|
+
* **slip** – blade slip angle.
|
|
831
|
+
* **wash** – wash/backwash angle.
|
|
832
|
+
* **peakforceangle** – oar angle at peak force (same 0° = perpendicular convention).
|
|
833
|
+
* **effectiveLength** – effective lever length (rigging geometry). *Not*
|
|
834
|
+
the same as Drive Length: Effective Length is the horizontal component
|
|
835
|
+
from pin to handle (a rigging/setup measure, often in cm), whereas
|
|
836
|
+
Drive Length is the *actual distance the handle traveled* during the
|
|
837
|
+
stroke (typically 1.2–1.5 m). Both may appear in the same dataset;
|
|
838
|
+
they serve different purposes.
|
|
839
|
+
|
|
840
|
+
Dual oarlock (port/starboard)
|
|
841
|
+
..............................
|
|
842
|
+
|
|
843
|
+
When a rower uses two smart oarlocks, oarlock metrics can be reported per side:
|
|
844
|
+
port (left) and starboard (right). Each metric may appear as a per-side column
|
|
845
|
+
(e.g. ``catch_port``, ``catch_starboard``); the unsuffixed summary column
|
|
846
|
+
(``catch``) is the average of the two sides when both exist, and the value of
|
|
847
|
+
whichever side is present otherwise. **Note:** rowingdata does not yet
|
|
848
|
+
implement parsing or FIT export for these per-side columns.
|
|
785
849
|
|
|
786
850
|
Lap Identifier
|
|
787
851
|
-------------------
|
|
@@ -871,6 +935,26 @@ Boat bearing.
|
|
|
871
935
|
Release Notes:
|
|
872
936
|
================
|
|
873
937
|
|
|
938
|
+
Unreleased
|
|
939
|
+
----------
|
|
940
|
+
|
|
941
|
+
- **Breaking change to exported FIT file contents.** FIT export now follows the
|
|
942
|
+
Rowing Data Standard (https://github.com/MoveLab-Studio/rowing-data-standard,
|
|
943
|
+
Draft v0.1). The ``exporttofit`` API is unchanged, but the bytes it writes are
|
|
944
|
+
not: the developer application ID is now the standard UUID, ``DriveLength``
|
|
945
|
+
and ``EffectiveLength`` are encoded in millimetres rather than metres,
|
|
946
|
+
``AverageBoatSpeed`` uses scale 255, stroke rate moves to field ID 93, and
|
|
947
|
+
stroke work to field ID 19. Consumers that hardcoded the previous rowingdata
|
|
948
|
+
application ID or the old metre-based scales must be updated. ``FITParser``
|
|
949
|
+
still reads files written by rowingdata 3.7.3 and earlier.
|
|
950
|
+
- In-stroke curve fields are emitted under a separate, private application ID,
|
|
951
|
+
because those field IDs are not allocated in the standard's registry and so
|
|
952
|
+
carry no interoperable meaning.
|
|
953
|
+
- Removed ``docs/FIT_STANDARD.md`` and ``docs/FIT_STANDARD.pdf``. The standard is
|
|
954
|
+
maintained by a committee at
|
|
955
|
+
https://github.com/MoveLab-Studio/rowing-data-standard, which is the single
|
|
956
|
+
source of truth; this repository no longer ships a copy.
|
|
957
|
+
|
|
874
958
|
0.97.x
|
|
875
959
|
------
|
|
876
960
|
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 2,
|
|
3
|
+
"_comment": "Authoritative FIT developer field definitions for rowingdata fitwrite. Field IDs, scales and units must match the Rowing Data Standard registry at https://github.com/MoveLab-Studio/rowing-data-standard (registry/field-ids.md); that repository is the source of truth, this file is only rowingdata's machine-readable copy of the subset it emits. v2: mm precision for DriveLength/PeakForcePositionAbs (scale 1000); StrokeRate dev field (93); instroke curve Y-scale registry.",
|
|
4
|
+
"instroke_dynamic": {
|
|
5
|
+
"summary_start": 20,
|
|
6
|
+
"summary_id_padding": "ceil_to_10",
|
|
7
|
+
"curve_start": 60
|
|
8
|
+
},
|
|
9
|
+
"instroke_curve_types": {
|
|
10
|
+
"HandleForceCurve": {
|
|
11
|
+
"y_scale": 10,
|
|
12
|
+
"y_units": "N",
|
|
13
|
+
"default_abscissa": "HANDLE_DISTANCE_UNIFORM_M"
|
|
14
|
+
},
|
|
15
|
+
"BoatAcceleratorCurve": {
|
|
16
|
+
"y_scale": 100,
|
|
17
|
+
"y_units": "m/s^2",
|
|
18
|
+
"default_abscissa": "TIME_UNIFORM_MS"
|
|
19
|
+
},
|
|
20
|
+
"OarAngleVelocityCurve": {
|
|
21
|
+
"y_scale": 10,
|
|
22
|
+
"y_units": "deg/s",
|
|
23
|
+
"default_abscissa": "TIME_UNIFORM_MS"
|
|
24
|
+
},
|
|
25
|
+
"SeatCurve": {
|
|
26
|
+
"y_scale": 255,
|
|
27
|
+
"y_units": "m",
|
|
28
|
+
"default_abscissa": "HANDLE_DISTANCE_UNIFORM_M"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"abscissa_enum": {
|
|
32
|
+
"UNKNOWN": 0,
|
|
33
|
+
"TIME_UNIFORM_MS": 1,
|
|
34
|
+
"HANDLE_DISTANCE_UNIFORM_M": 2,
|
|
35
|
+
"OAR_ANGLE_UNIFORM_DEG": 3,
|
|
36
|
+
"NORMALIZED_DRIVE_0_1": 4
|
|
37
|
+
},
|
|
38
|
+
"instroke_axis_field_ids": [90, 91, 92],
|
|
39
|
+
"always_emit_field_ids": [9, 90, 91, 92],
|
|
40
|
+
"instroke_column_map": {
|
|
41
|
+
"curve_data": "HandleForceCurve",
|
|
42
|
+
"boat accelerator curve": "BoatAcceleratorCurve",
|
|
43
|
+
"oar angle velocity curve": "OarAngleVelocityCurve",
|
|
44
|
+
"seat curve": "SeatCurve"
|
|
45
|
+
},
|
|
46
|
+
"developer_fields": [
|
|
47
|
+
{"field_id": 0, "group": "rowing", "fit_name": "DriveLength", "base_type": "UINT16", "size": 2, "scale": 1, "units": "mm", "df_columns": [" DriveLength (meters)"]},
|
|
48
|
+
{"field_id": 1, "group": "rowing", "fit_name": "StrokeDriveTime", "base_type": "UINT16", "size": 2, "scale": 1, "units": "ms", "df_columns": [" DriveTime (ms)"]},
|
|
49
|
+
{"field_id": 2, "group": "rowing", "fit_name": "DragFactor", "base_type": "UINT16", "size": 2, "scale": 1, "units": "", "df_columns": [" DragFactor"]},
|
|
50
|
+
{"field_id": 3, "group": "rowing", "fit_name": "StrokeRecoveryTime", "base_type": "UINT16", "size": 2, "scale": 1, "units": "ms", "df_columns": [" StrokeRecoveryTime (ms)"]},
|
|
51
|
+
{"field_id": 4, "group": "rowing", "fit_name": "AverageDriveForceLbs", "base_type": "UINT16", "size": 2, "scale": 10, "units": "lbs", "df_columns": [" AverageDriveForce (lbs)"]},
|
|
52
|
+
{"field_id": 5, "group": "rowing", "fit_name": "PeakDriveForceLbs", "base_type": "UINT16", "size": 2, "scale": 10, "units": "lbs", "df_columns": [" PeakDriveForce (lbs)"]},
|
|
53
|
+
{"field_id": 6, "group": "rowing", "fit_name": "AverageDriveForceN", "base_type": "UINT16", "size": 2, "scale": 10, "units": "N", "df_columns": [" AverageDriveForce (N)"]},
|
|
54
|
+
{"field_id": 7, "group": "rowing", "fit_name": "PeakDriveForceN", "base_type": "UINT16", "size": 2, "scale": 10, "units": "N", "df_columns": [" PeakDriveForce (N)"]},
|
|
55
|
+
{"field_id": 8, "group": "rowing", "fit_name": "AverageBoatSpeed", "base_type": "UINT16", "size": 2, "scale": 255, "units": "m/s", "df_columns": [" AverageBoatSpeed (m/s)"]},
|
|
56
|
+
{"field_id": 9, "group": "rowing", "fit_name": "WorkoutState", "base_type": "UINT8", "size": 1, "scale": 1, "units": "", "df_columns": [" WorkoutState"]},
|
|
57
|
+
{"field_id": 10, "group": "metadata", "fit_name": "RecordingStrategy", "base_type": "UINT8", "size": 1, "scale": 1, "units": "", "df_columns": [], "message_type": "session"},
|
|
58
|
+
{"field_id": 19, "group": "rowing", "fit_name": "StrokeWork", "base_type": "UINT16", "size": 2, "scale": 1, "units": "J", "df_columns": [" WorkPerStroke (joules)", "driveenergy"]},
|
|
59
|
+
{"field_id": 93, "group": "rowing", "fit_name": "StrokeRate", "base_type": "UINT16", "size": 2, "scale": 100, "units": "spm", "df_columns": [" Cadence (stokes/min)"]},
|
|
60
|
+
|
|
61
|
+
{"field_id": 11, "group": "oarlock", "fit_name": "Catch", "base_type": "SINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["catch", " catch", "catchAngle"]},
|
|
62
|
+
{"field_id": 12, "group": "oarlock", "fit_name": "Finish", "base_type": "SINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["finish", " finish", "finishAngle"]},
|
|
63
|
+
{"field_id": 13, "group": "oarlock", "fit_name": "Slip", "base_type": "SINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["slip", " slip"]},
|
|
64
|
+
{"field_id": 14, "group": "oarlock", "fit_name": "Wash", "base_type": "SINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["wash", " wash"]},
|
|
65
|
+
{"field_id": 15, "group": "oarlock", "fit_name": "PeakForceAngle", "base_type": "SINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["peakforceangle", " peakforceangle"]},
|
|
66
|
+
{"field_id": 16, "group": "oarlock", "fit_name": "EffectiveLength", "base_type": "UINT16", "size": 2, "scale": 1, "units": "mm", "df_columns": ["effectiveLength", " effectiveLength", "effective length"]},
|
|
67
|
+
|
|
68
|
+
{"field_id": 200, "group": "oarlock_dual", "dual_pair": "catch", "side": "port", "fit_name": "CatchPort", "base_type": "SINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["catch_port", "catchAngle_port"]},
|
|
69
|
+
{"field_id": 201, "group": "oarlock_dual", "dual_pair": "catch", "side": "starboard", "fit_name": "CatchStarboard", "base_type": "SINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["catch_starboard", "catchAngle_starboard"]},
|
|
70
|
+
{"field_id": 202, "group": "oarlock_dual", "dual_pair": "finish", "side": "port", "fit_name": "FinishPort", "base_type": "SINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["finish_port", "finishAngle_port"]},
|
|
71
|
+
{"field_id": 203, "group": "oarlock_dual", "dual_pair": "finish", "side": "starboard", "fit_name": "FinishStarboard", "base_type": "SINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["finish_starboard", "finishAngle_starboard"]},
|
|
72
|
+
{"field_id": 204, "group": "oarlock_dual", "dual_pair": "slip", "side": "port", "fit_name": "SlipPort", "base_type": "SINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["slip_port"]},
|
|
73
|
+
{"field_id": 205, "group": "oarlock_dual", "dual_pair": "slip", "side": "starboard", "fit_name": "SlipStarboard", "base_type": "SINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["slip_starboard"]},
|
|
74
|
+
{"field_id": 206, "group": "oarlock_dual", "dual_pair": "wash", "side": "port", "fit_name": "WashPort", "base_type": "SINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["wash_port"]},
|
|
75
|
+
{"field_id": 207, "group": "oarlock_dual", "dual_pair": "wash", "side": "starboard", "fit_name": "WashStarboard", "base_type": "SINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["wash_starboard"]},
|
|
76
|
+
{"field_id": 208, "group": "oarlock_dual", "dual_pair": "peakforceangle", "side": "port", "fit_name": "PeakForceAnglePort", "base_type": "SINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["peakforceangle_port"]},
|
|
77
|
+
{"field_id": 209, "group": "oarlock_dual", "dual_pair": "peakforceangle", "side": "starboard", "fit_name": "PeakForceAngleStarboard", "base_type": "SINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["peakforceangle_starboard"]},
|
|
78
|
+
{"field_id": 210, "group": "oarlock_dual", "dual_pair": "effectiveLength", "side": "port", "fit_name": "EffectiveLengthPort", "base_type": "UINT16", "size": 2, "scale": 1, "units": "mm", "df_columns": ["effectiveLength_port"]},
|
|
79
|
+
{"field_id": 211, "group": "oarlock_dual", "dual_pair": "effectiveLength", "side": "starboard", "fit_name": "EffectiveLengthStarboard", "base_type": "UINT16", "size": 2, "scale": 1, "units": "mm", "df_columns": ["effectiveLength_starboard"]},
|
|
80
|
+
|
|
81
|
+
{"field_id": 17, "group": "peak_position", "fit_name": "PeakForcePositionNorm", "base_type": "UINT16", "size": 2, "scale": 1, "units": "", "df_columns": ["rel_peak_force_pos", "PeakForcePositionNorm", "% of Stroke Complete When Peak Force Is Reached"], "transformer": "peak_norm", "clip_uint16_max": 10000},
|
|
82
|
+
{"field_id": 18, "group": "peak_position", "fit_name": "PeakForcePositionAbs", "base_type": "UINT16", "size": 2, "scale": 1, "units": "mm", "df_columns": ["peak_force_pos", "PeakForcePositionAbs"], "transformer": "peak_abs"},
|
|
83
|
+
|
|
84
|
+
{"field_id": 90, "group": "instroke_axis", "fit_name": "InstrokeAbscissaType", "base_type": "UINT8", "size": 1, "scale": 1, "units": "", "df_columns": []},
|
|
85
|
+
{"field_id": 91, "group": "instroke_axis", "fit_name": "InstrokeSampleInterval", "base_type": "UINT16", "size": 2, "scale": 1, "units": "", "df_columns": []},
|
|
86
|
+
{"field_id": 92, "group": "instroke_axis", "fit_name": "InstrokePointCount", "base_type": "UINT8", "size": 1, "scale": 1, "units": "", "df_columns": []}
|
|
87
|
+
]
|
|
88
|
+
}
|