Private
Public Access
1
0

force curve with workstrokesonly

This commit is contained in:
Sander Roosendaal
2019-02-08 10:12:09 +01:00
parent d13f5be6f7
commit 77aba205c5
7 changed files with 424 additions and 269 deletions

View File

@@ -37,6 +37,8 @@ from minimocktest import MockTestCase
import pandas as pd
import rowers.c2stuff as c2stuff
from django.core.urlresolvers import reverse, reverse_lazy
import json
import numpy as np

View File

@@ -0,0 +1,52 @@
from statements import *
nu = datetime.datetime.now()
class WaterWorkoutViewTest(TestCase):
def setUp(self):
self.u = UserFactory()
self.r = Rower.objects.create(user=self.u,
birthdate=faker.profile()['birthdate'],
gdproptin=True,
gdproptindate=timezone.now(),
rowerplan='coach')
self.c = Client()
self.user_workouts = WorkoutFactory.create_batch(5, user=self.r)
self.factory = RequestFactory()
self.password = faker.word()
self.u.set_password(self.password)
self.u.save()
result = get_random_file(filename='rowers/tests/testdata/onwater.csv')
self.wwater = WorkoutFactory(user=self.r,
csvfilename=result['filename'],
starttime=result['starttime'],
startdatetime=result['startdatetime'],
duration=result['duration'],
distance=result['totaldist']
)
def tearDown(self):
pass
@patch('rowers.dataprep.create_engine')
@patch('rowers.dataprep.getsmallrowdata_db')
def test_forcecurve(self, mocked_sqlalchemy, mocked_getsmallrowdata_db):
login = self.c.login(username=self.u.username, password=self.password)
self.assertTrue(login)
url = reverse('workout_forcecurve_view',kwargs={'id':self.wwater.id})
response = self.c.get(url)
self.assertEqual(response.status_code,200)
form_data = {
'workstrokesonly': True
}
response = self.c.post(url,form_data)
self.assertEqual(response.status_code,200)

98
rowers/tests/testdata/onwater.csv vendored Normal file
View File

@@ -0,0 +1,98 @@
,index, lapIdx,TimeStamp (sec), Horizontal (meters),GPS Split,GPS Speed, Cadence (stokes/min), HRCur (bpm),Stroke Count,cum_dist, Stroke500mPace (sec/500m), ElapsedTime (sec), Power (watts), DriveLength (meters), StrokeDistance (meters), DriveTime (ms), DragFactor, StrokeRecoveryTime (ms), AverageDriveForce (lbs), AverageBoatSpeed (m/s), PeakDriveForce (lbs), AverageDriveForce (N), PeakDriveForce (N), WorkoutState, Stroke Number,originalvelo,hr_ut2,hr_ut1,hr_at,hr_tr,hr_an,hr_max,lim_ut2,lim_ut1,lim_at,lim_tr,lim_an,lim_max,pw_ut2,pw_ut1,pw_at,pw_tr,pw_an,pw_max,limpw_ut2,limpw_ut1,limpw_at,limpw_tr,limpw_an
0,0,0.0,1469705701.0,3.2,0.0,0.74,35.5,112,1,3.2,695.931477516,0.0,0,0,0,0,0,0,0,0.74,0,0.0,0.0,4,0,0.74,0.0,0.0,0.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
1,1,0.0,1469705702.6,8.6,0.0,2.07,38.5,113,2,8.6,228.8,1.59999990463,0,0,0,0,0,0,0,2.07,0,0.0,0.0,4,1,2.07,113.0,0.0,0.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
2,2,0.0,1469705704.5,15.1,0.0,3.36,38.5,115,3,15.1,153.336955279,3.5,0,0,0,0,0,0,0,3.36,0,0.0,0.0,4,3,3.35999999999,115.0,0.0,0.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
3,3,0.0,1469705705.6,21.4,0.0,4.09,39.0,115,4,21.4,124.977058407,4.59999990463,0,0,0,0,0,0,0,4.09,0,0.0,0.0,4,3,4.09,115.0,0.0,0.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
4,4,0.0,1469705707.5,28.8,0.0,4.43,38.5,118,5,28.8,112.083019815,6.5,0,0,0,0,0,0,0,4.43,0,0.0,0.0,4,5,4.42999999999,118.0,0.0,0.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
5,5,0.0,1469705708.8,36.2,0.0,4.64,37.5,125,6,36.2,106.442632632,7.79999995232,0,0,0,0,0,0,0,4.64,0,0.0,0.0,4,5,4.63999999999,125.0,0.0,0.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
6,6,0.0,1469705710.5,43.1,0.0,4.66,36.0,130,7,43.1,104.628021775,9.5,0,0,0,0,0,0,0,4.66,0,0.0,0.0,4,6,4.66,130.0,0.0,0.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
7,7,0.0,1469705712.2,52.0,0.0,4.76,34.0,135,8,52.0,106.01911804,11.2000000477,0,0,0,0,0,0,0,4.76,0,0.0,0.0,4,7,4.75999999999,135.0,0.0,0.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
8,8,0.0,1469705714.0,60.1,0.0,4.71,34.5,142,9,60.1,107.565165936,13.0,0,0,0,0,0,0,0,4.71,0,0.0,0.0,4,8,4.70999999998,142.0,0.0,0.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
9,9,0.0,1469705715.8,68.1,0.0,4.53,33.5,148,10,68.1,108.679681206,14.7999999523,0,0,0,0,0,0,0,4.53,0,0.0,0.0,4,9,4.53000000001,0.0,0.0,148.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
10,10,0.0,1469705717.6,76.3,0.0,4.44,32.5,154,11,76.3,109.466700689,16.5999999046,0,0,0,0,0,0,0,4.44,0,0.0,0.0,4,10,4.43999999998,0.0,0.0,154.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
11,11,0.0,1469705719.5,83.8,0.0,4.44,33.0,156,12,83.8,109.893487851,18.5,0,0,0,0,0,0,0,4.44,0,0.0,0.0,4,11,4.43999999998,0.0,0.0,156.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
12,12,0.0,1469705721.2,92.5,0.0,4.62,33.5,159,13,92.5,110.627456239,20.2000000477,0,0,0,0,0,0,0,4.62,0,0.0,0.0,4,12,4.62,0.0,0.0,159.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
13,13,0.0,1469705723.0,100.8,0.0,4.64,33.5,163,14,100.8,110.362782274,22.0,0,0,0,0,0,0,0,4.64,0,0.0,0.0,4,13,4.63999999999,0.0,0.0,0.0,163.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
14,14,0.0,1469705724.8,109.1,0.0,4.59,32.0,166,15,109.1,109.351182981,23.7999999523,0,0,0,0,0,0,0,4.59,0,0.0,0.0,4,14,4.58999999998,0.0,0.0,0.0,166.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
15,15,0.0,1469705726.8,118.1,0.0,4.52,32.5,168,16,118.1,108.636197885,25.7999999523,0,0,0,0,0,0,0,4.52,0,0.0,0.0,4,15,4.51999999998,0.0,0.0,0.0,0.0,168.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
16,16,0.0,1469705728.5,125.1,0.0,4.5,33.0,169,17,125.1,108.494979894,27.5,0,0,0,0,0,0,0,4.5,0,0.0,0.0,4,16,4.5,0.0,0.0,0.0,0.0,169.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
17,17,0.0,1469705730.4,134.7,0.0,4.66,33.5,171,18,134.7,109.232014911,29.4000000954,0,0,0,0,0,0,0,4.66,0,0.0,0.0,4,17,4.66,0.0,0.0,0.0,0.0,171.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
18,18,0.0,1469705732.2,143.0,0.0,4.66,32.5,172,19,143.0,109.4493854,31.2000000477,0,0,0,0,0,0,0,4.66,0,0.0,0.0,4,18,4.66,0.0,0.0,0.0,0.0,172.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
19,19,0.0,1469705734.0,151.2,0.0,4.58,33.0,172,20,151.2,109.222559423,33.0,0,0,0,0,0,0,0,4.58,0,0.0,0.0,4,19,4.57999999999,0.0,0.0,0.0,0.0,172.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
20,20,0.0,1469705735.8,159.4,0.0,4.52,33.0,173,21,159.4,109.097567302,34.7999999523,0,0,0,0,0,0,0,4.52,0,0.0,0.0,4,20,4.51999999998,0.0,0.0,0.0,0.0,173.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
21,21,0.0,1469705737.5,166.1,0.0,4.47,33.5,175,22,166.1,109.622785185,36.5,0,0,0,0,0,0,0,4.47,0,0.0,0.0,4,21,4.47000000001,0.0,0.0,0.0,0.0,175.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
22,22,0.0,1469705739.4,175.7,0.0,4.58,33.5,175,23,175.7,110.908884086,38.4000000954,0,0,0,0,0,0,0,4.58,0,0.0,0.0,4,22,4.57999999999,0.0,0.0,0.0,0.0,175.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
23,23,0.0,1469705741.2,183.8,0.0,4.57,32.5,175,24,183.8,111.571150665,40.2000000477,0,0,0,0,0,0,0,4.57,0,0.0,0.0,4,23,4.57,0.0,0.0,0.0,0.0,175.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
24,24,0.0,1469705743.0,191.8,0.0,4.47,33.0,175,25,191.8,111.781044645,42.0,0,0,0,0,0,0,0,4.47,0,0.0,0.0,4,24,4.47000000001,0.0,0.0,0.0,0.0,175.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
25,25,0.0,1469705744.8,199.8,0.0,4.39,32.0,176,26,199.8,111.973606594,43.7999999523,0,0,0,0,0,0,0,4.39,0,0.0,0.0,4,25,4.39,0.0,0.0,0.0,0.0,176.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
26,26,0.0,1469705746.7,207.8,0.0,4.39,32.5,176,27,207.8,112.082434148,45.7000000477,0,0,0,0,0,0,0,4.39,0,0.0,0.0,4,26,4.39,0.0,0.0,0.0,0.0,176.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
27,27,0.0,1469705748.6,216.7,0.0,4.49,33.0,174,28,216.7,112.462053887,47.5999999046,0,0,0,0,0,0,0,4.49,0,0.0,0.0,4,27,4.49000000001,0.0,0.0,0.0,0.0,174.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
28,28,0.0,1469705750.4,224.8,0.0,4.49,32.0,174,29,224.8,110.702820986,49.4000000954,0,0,0,0,0,0,0,4.49,0,0.0,0.0,4,28,4.49000000001,0.0,0.0,0.0,0.0,174.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
29,29,0.0,1469705752.5,232.9,0.0,4.47,33.0,174,30,232.9,111.287510895,51.5,0,0,0,0,0,0,0,4.47,0,0.0,0.0,4,30,4.47000000001,0.0,0.0,0.0,0.0,174.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
30,30,0.0,1469705754.0,240.9,0.0,4.48,32.0,175,31,240.9,113.880099386,53.0,0,0,0,0,0,0,0,4.48,0,0.0,0.0,4,30,4.48000000001,0.0,0.0,0.0,0.0,175.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
31,31,0.0,1469705755.8,248.9,0.0,4.43,32.0,175,32,248.9,117.397229535,54.7999999523,0,0,0,0,0,0,0,4.43,0,0.0,0.0,4,31,4.42999999999,0.0,0.0,0.0,0.0,175.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
32,32,0.0,1469705756.2,250.4,0.0,4.43,32.0,175,32,250.4,120.181532945,55.2000000477,0,0,0,0,0,0,0,4.43,0,0.0,0.0,4,32,4.42999999999,0.0,0.0,0.0,0.0,175.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
33,33,1.0,1469705757.6,5.7,0.0,3.62,30.5,160,1,256.1,121.464367621,56.5999999046,0,0,0,0,0,0,0,3.62,0,0.0,0.0,4,32,3.62000000001,0.0,0.0,160.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
34,34,1.0,1469705759.4,13.4,0.0,3.85,33.5,161,2,263.8,121.497391629,58.4000000954,0,0,0,0,0,0,0,3.85,0,0.0,0.0,4,33,3.85,0.0,0.0,0.0,161.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
35,35,1.0,1469705761.2,20.7,0.0,4.2,33.5,162,3,271.1,120.37982782,60.2000000477,0,0,0,0,0,0,0,4.2,0,0.0,0.0,4,34,4.19999999999,0.0,0.0,0.0,162.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
36,36,1.0,1469705763.0,29.2,0.0,4.47,33.5,162,4,279.6,118.387283716,62.0,0,0,0,0,0,0,0,4.47,0,0.0,0.0,4,35,4.47000000001,0.0,0.0,0.0,162.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
37,37,1.0,1469705764.8,37.3,0.0,4.47,33.0,164,5,287.7,115.233986774,63.7999999523,0,0,0,0,0,0,0,4.47,0,0.0,0.0,4,36,4.47000000001,0.0,0.0,0.0,164.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
38,38,1.0,1469705766.6,45.3,0.0,4.44,33.5,165,6,295.7,111.287510895,65.5999999046,0,0,0,0,0,0,0,4.44,0,0.0,0.0,4,37,4.43999999998,0.0,0.0,0.0,165.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
39,39,1.0,1469705768.5,53.5,0.0,4.42,33.5,165,7,303.9,111.718168135,67.5,0,0,0,0,0,0,0,4.42,0,0.0,0.0,4,38,4.41999999999,0.0,0.0,0.0,165.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
40,40,1.0,1469705770.2,60.7,0.0,4.38,32.0,167,8,311.1,113.471050335,69.2000000477,0,0,0,0,0,0,0,4.38,0,0.0,0.0,4,39,4.37999999998,0.0,0.0,0.0,167.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
41,41,1.0,1469705772.2,70.1,0.0,4.44,32.0,171,9,320.5,115.140584238,71.2000000477,0,0,0,0,0,0,0,4.44,0,0.0,0.0,4,40,4.43999999998,0.0,0.0,0.0,0.0,171.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
42,42,1.0,1469705774.1,77.8,0.0,4.3,32.0,172,10,328.2,116.273396972,73.0999999046,0,0,0,0,0,0,0,4.3,0,0.0,0.0,4,41,4.30000000002,0.0,0.0,0.0,0.0,172.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
43,43,1.0,1469705776.1,85.2,0.0,4.12,31.0,174,11,335.6,117.556791714,75.0999999046,0,0,0,0,0,0,0,4.12,0,0.0,0.0,4,42,4.12,0.0,0.0,0.0,0.0,174.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
44,44,1.0,1469705777.9,93.4,0.0,4.2,31.5,174,12,343.8,119.395508057,76.9000000954,0,0,0,0,0,0,0,4.2,0,0.0,0.0,4,43,4.19999999999,0.0,0.0,0.0,0.0,174.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
45,45,1.0,1469705779.9,101.5,0.0,4.21,32.0,176,13,351.9,121.165219651,78.9000000954,0,0,0,0,0,0,0,4.21,0,0.0,0.0,4,44,4.20999999999,0.0,0.0,0.0,0.0,176.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
46,46,1.0,1469705781.6,108.9,0.0,4.11,30.5,176,14,359.3,122.757318225,80.5999999046,0,0,0,0,0,0,0,4.11,0,0.0,0.0,4,45,4.10999999998,0.0,0.0,0.0,0.0,176.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
47,47,1.0,1469705783.6,116.9,0.0,4.02,32.0,175,15,367.3,123.722400388,82.5999999046,0,0,0,0,0,0,0,4.02,0,0.0,0.0,4,46,4.01999999999,0.0,0.0,0.0,0.0,175.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
48,48,1.0,1469705785.5,124.1,0.0,3.96,30.5,177,16,374.5,123.80237793,84.5,0,0,0,0,0,0,0,3.96,0,0.0,0.0,4,47,3.95999999999,0.0,0.0,0.0,0.0,177.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
49,49,1.0,1469705787.5,132.1,0.0,4.04,32.0,177,17,382.5,123.700282002,86.5,0,0,0,0,0,0,0,4.04,0,0.0,0.0,4,48,4.03999999999,0.0,0.0,0.0,0.0,177.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
50,50,1.0,1469705789.2,139.7,0.0,4.06,32.0,178,18,390.1,122.672370408,88.2000000477,0,0,0,0,0,0,0,4.06,0,0.0,0.0,4,49,4.05999999999,0.0,0.0,0.0,0.0,178.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
51,51,1.0,1469705791.1,146.7,0.0,4.09,33.0,178,19,397.1,121.011418513,90.0999999046,0,0,0,0,0,0,0,4.09,0,0.0,0.0,4,50,4.09,0.0,0.0,0.0,0.0,178.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
52,52,1.0,1469705793.1,155.4,0.0,4.27,31.0,177,20,405.8,119.62256154,92.0999999046,0,0,0,0,0,0,0,4.27,0,0.0,0.0,4,51,4.27000000001,0.0,0.0,0.0,0.0,177.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
53,53,1.0,1469705794.9,163.1,0.0,4.27,32.0,177,21,413.5,118.342215896,93.9000000954,0,0,0,0,0,0,0,4.27,0,0.0,0.0,4,52,4.27000000001,0.0,0.0,0.0,0.0,177.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
54,54,1.0,1469705797.1,171.6,0.0,4.24,31.5,178,22,422.0,117.740696015,96.0999999046,0,0,0,0,0,0,0,4.24,0,0.0,0.0,4,53,4.24,0.0,0.0,0.0,0.0,178.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
55,55,1.0,1469705798.6,179.3,0.0,4.22,32.0,179,23,429.7,117.599973684,97.5999999046,0,0,0,0,0,0,0,4.22,0,0.0,0.0,4,54,4.22000000001,0.0,0.0,0.0,0.0,179.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
56,56,1.0,1469705800.7,187.9,0.0,4.21,30.5,179,24,438.3,117.565167825,99.7000000477,0,0,0,0,0,0,0,4.21,0,0.0,0.0,4,55,4.20999999999,0.0,0.0,0.0,0.0,179.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
57,57,1.0,1469705802.5,195.8,0.0,4.28,30.5,180,25,446.2,117.967332124,101.5,0,0,0,0,0,0,0,4.28,0,0.0,0.0,4,56,4.27999999998,0.0,0.0,0.0,0.0,180.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
58,58,1.0,1469705804.5,204.3,0.0,4.22,30.5,180,26,454.7,118.489957355,103.5,0,0,0,0,0,0,0,4.22,0,0.0,0.0,4,57,4.22000000001,0.0,0.0,0.0,0.0,180.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
59,59,1.0,1469705806.4,212.2,0.0,4.2,30.5,180,27,462.6,118.763530461,105.400000095,0,0,0,0,0,0,0,4.2,0,0.0,0.0,4,58,4.19999999999,0.0,0.0,0.0,0.0,180.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
60,60,1.0,1469705808.5,221.4,0.0,4.26,29.5,180,28,471.8,117.583212735,107.5,0,0,0,0,0,0,0,4.26,0,0.0,0.0,4,59,4.25999999999,0.0,0.0,0.0,0.0,180.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
61,61,1.0,1469705810.4,229.8,0.0,4.17,30.5,180,29,480.2,119.140852815,109.400000095,0,0,0,0,0,0,0,4.17,0,0.0,0.0,4,60,4.16999999999,0.0,0.0,0.0,0.0,180.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
62,62,1.0,1469705812.3,236.6,0.0,4.11,33.5,181,30,487.0,121.480877381,111.299999952,0,0,0,0,0,0,0,4.11,0,0.0,0.0,4,61,4.10999999998,0.0,0.0,0.0,0.0,0.0,181.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
63,63,1.0,1469705814.0,244.8,0.0,4.24,33.5,181,31,495.2,122.38470448,113.0,0,0,0,0,0,0,0,4.24,0,0.0,0.0,4,62,4.24,0.0,0.0,0.0,0.0,0.0,181.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
64,64,1.0,1469705815.4,250.9,0.0,4.24,33.5,181,31,501.3,122.183234979,114.400000095,0,0,0,0,0,0,0,4.24,0,0.0,0.0,4,63,4.24,0.0,0.0,0.0,0.0,0.0,181.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
65,65,2.0,1469705816.3,0.9,0.0,3.66,28.0,158,1,502.2,121.2563172,115.299999952,0,0,0,0,0,0,0,3.66,0,0.0,0.0,4,63,3.66,0.0,0.0,158.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
66,66,2.0,1469705817.8,9.8,0.0,4.12,33.5,160,2,511.1,119.786227655,116.799999952,0,0,0,0,0,0,0,4.12,0,0.0,0.0,4,64,4.12,0.0,0.0,160.0,0.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
67,67,2.0,1469705819.6,18.0,0.0,4.44,32.5,162,3,519.3,117.678039467,118.599999905,0,0,0,0,0,0,0,4.44,0,0.0,0.0,4,65,4.43999999998,0.0,0.0,0.0,162.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
68,68,2.0,1469705821.5,26.1,0.0,4.47,33.0,161,4,527.4,115.319480659,120.5,0,0,0,0,0,0,0,4.47,0,0.0,0.0,4,66,4.47000000001,0.0,0.0,0.0,161.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
69,69,2.0,1469705823.4,35.0,0.0,4.43,32.0,164,5,536.3,112.531083761,122.400000095,0,0,0,0,0,0,0,4.43,0,0.0,0.0,4,67,4.42999999999,0.0,0.0,0.0,164.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
70,70,2.0,1469705825.1,41.9,0.0,4.43,33.0,165,6,543.2,109.693981917,124.099999905,0,0,0,0,0,0,0,4.43,0,0.0,0.0,4,68,4.42999999999,0.0,0.0,0.0,165.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
71,71,2.0,1469705827.1,51.5,0.0,4.6,33.5,166,7,552.8,110.111805834,126.099999905,0,0,0,0,0,0,0,4.6,0,0.0,0.0,4,69,4.6,0.0,0.0,0.0,166.0,0.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
72,72,2.0,1469705828.9,59.7,0.0,4.59,33.5,168,8,561.0,110.235734879,127.900000095,0,0,0,0,0,0,0,4.59,0,0.0,0.0,4,70,4.58999999998,0.0,0.0,0.0,0.0,168.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
73,73,2.0,1469705830.7,68.1,0.0,4.53,32.0,171,9,569.4,109.674351541,129.700000048,0,0,0,0,0,0,0,4.53,0,0.0,0.0,4,71,4.53000000001,0.0,0.0,0.0,0.0,171.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
74,74,2.0,1469705832.4,76.4,0.0,4.55,33.0,172,10,577.7,109.081478016,131.400000095,0,0,0,0,0,0,0,4.55,0,0.0,0.0,4,72,4.55,0.0,0.0,0.0,0.0,172.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
75,75,2.0,1469705834.3,84.0,0.0,4.54,32.5,173,11,585.3,108.95736186,133.299999952,0,0,0,0,0,0,0,4.54,0,0.0,0.0,4,73,4.54000000001,0.0,0.0,0.0,0.0,173.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
76,76,2.0,1469705836.0,92.9,0.0,4.63,33.0,174,12,594.2,109.581343074,135.0,0,0,0,0,0,0,0,4.63,0,0.0,0.0,4,74,4.63000000001,0.0,0.0,0.0,0.0,174.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
77,77,2.0,1469705837.9,101.3,0.0,4.61,33.5,176,13,602.6,109.437100452,136.900000095,0,0,0,0,0,0,0,4.61,0,0.0,0.0,4,75,4.61000000001,0.0,0.0,0.0,0.0,176.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
78,78,2.0,1469705839.7,109.6,0.0,4.58,33.5,177,14,610.9,108.898173861,138.700000048,0,0,0,0,0,0,0,4.58,0,0.0,0.0,4,76,4.57999999999,0.0,0.0,0.0,0.0,177.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
79,79,2.0,1469705841.5,118.0,0.0,4.54,33.5,178,15,619.3,108.514739286,140.5,0,0,0,0,0,0,0,4.54,0,0.0,0.0,4,77,4.54000000001,0.0,0.0,0.0,0.0,178.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
80,80,2.0,1469705843.1,125.0,0.0,4.54,34.0,178,16,626.3,108.408891045,142.099999905,0,0,0,0,0,0,0,4.54,0,0.0,0.0,4,78,4.54000000001,0.0,0.0,0.0,0.0,178.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
81,81,2.0,1469705845.1,134.8,0.0,4.69,34.5,179,17,636.1,108.970092917,144.099999905,0,0,0,0,0,0,0,4.69,0,0.0,0.0,4,79,4.69000000002,0.0,0.0,0.0,0.0,179.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
82,82,2.0,1469705846.7,142.2,0.0,4.67,34.0,180,18,643.5,108.943527129,145.700000048,0,0,0,0,0,0,0,4.67,0,0.0,0.0,4,80,4.67000000001,0.0,0.0,0.0,0.0,180.0,0.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
83,83,2.0,1469705848.5,150.6,0.0,4.59,34.5,181,19,651.9,108.491687362,147.5,0,0,0,0,0,0,0,4.59,0,0.0,0.0,4,81,4.58999999998,0.0,0.0,0.0,0.0,0.0,181.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
84,84,2.0,1469705850.3,158.8,0.0,4.52,33.5,181,20,660.1,108.195629805,149.299999952,0,0,0,0,0,0,0,4.52,0,0.0,0.0,4,82,4.51999999998,0.0,0.0,0.0,0.0,0.0,181.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
85,85,2.0,1469705852.1,166.4,0.0,4.52,33.5,181,21,667.7,108.474130564,151.099999905,0,0,0,0,0,0,0,4.52,0,0.0,0.0,4,83,4.51999999998,0.0,0.0,0.0,0.0,0.0,181.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
86,86,2.0,1469705853.9,175.2,0.0,4.68,33.5,182,22,676.5,109.550561798,152.900000095,0,0,0,0,0,0,0,4.68,0,0.0,0.0,4,84,4.67999999998,0.0,0.0,0.0,0.0,0.0,182.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
87,87,2.0,1469705855.7,183.2,0.0,4.65,32.0,182,23,684.5,110.12141592,154.700000048,0,0,0,0,0,0,0,4.65,0,0.0,0.0,4,85,4.65000000002,0.0,0.0,0.0,0.0,0.0,182.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
88,88,2.0,1469705857.5,191.2,0.0,4.51,33.0,182,24,692.5,110.388908617,156.5,0,0,0,0,0,0,0,4.51,0,0.0,0.0,4,86,4.51,0.0,0.0,0.0,0.0,0.0,182.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
89,89,2.0,1469705859.4,200.1,0.0,4.42,32.0,183,25,701.4,111.075438088,158.400000095,0,0,0,0,0,0,0,4.42,0,0.0,0.0,4,87,4.41999999999,0.0,0.0,0.0,0.0,0.0,183.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
90,90,2.0,1469705861.2,207.4,0.0,4.38,32.0,183,26,708.7,112.186192469,160.200000048,0,0,0,0,0,0,0,4.38,0,0.0,0.0,4,88,4.37999999998,0.0,0.0,0.0,0.0,0.0,183.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
91,91,2.0,1469705863.0,216.1,0.0,4.47,32.0,183,27,717.4,113.541324808,162.0,0,0,0,0,0,0,0,4.47,0,0.0,0.0,4,89,4.47000000001,0.0,0.0,0.0,0.0,0.0,183.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
92,92,2.0,1469705865.0,224.7,0.0,4.44,32.5,183,28,726.0,113.933934253,164.0,0,0,0,0,0,0,0,4.44,0,0.0,0.0,4,90,4.43999999998,0.0,0.0,0.0,0.0,0.0,183.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
93,93,2.0,1469705867.1,232.4,0.0,4.34,33.0,184,29,733.7,114.217860585,166.099999905,0,0,0,0,0,0,0,4.34,0,0.0,0.0,4,91,4.34,0.0,0.0,0.0,0.0,0.0,184.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
94,94,2.0,1469705868.6,240.6,0.0,4.35,32.0,184,30,741.9,114.508095643,167.599999905,0,0,0,0,0,0,0,4.35,0,0.0,0.0,4,92,4.34999999999,0.0,0.0,0.0,0.0,0.0,184.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
95,95,2.0,1469705870.7,249.0,0.0,4.34,30.5,184,31,750.3,114.922206507,169.700000048,0,0,0,0,0,0,0,4.34,0,0.0,0.0,4,93,4.34,0.0,0.0,0.0,0.0,0.0,184.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
96,96,2.0,1469705871.0,250.4,0.0,4.34,30.5,184,31,751.7,115.581707376,170.0,0,0,0,0,0,0,0,4.34,0,0.0,0.0,4,93,4.34,0.0,0.0,0.0,0.0,0.0,184.0,142,146,160,167,180,192,0.0,0.0,0.0,0.0,0.0,0.0,124.3,169.5,203.4,237.3,271.2
1 index lapIdx TimeStamp (sec) Horizontal (meters) GPS Split GPS Speed Cadence (stokes/min) HRCur (bpm) Stroke Count cum_dist Stroke500mPace (sec/500m) ElapsedTime (sec) Power (watts) DriveLength (meters) StrokeDistance (meters) DriveTime (ms) DragFactor StrokeRecoveryTime (ms) AverageDriveForce (lbs) AverageBoatSpeed (m/s) PeakDriveForce (lbs) AverageDriveForce (N) PeakDriveForce (N) WorkoutState Stroke Number originalvelo hr_ut2 hr_ut1 hr_at hr_tr hr_an hr_max lim_ut2 lim_ut1 lim_at lim_tr lim_an lim_max pw_ut2 pw_ut1 pw_at pw_tr pw_an pw_max limpw_ut2 limpw_ut1 limpw_at limpw_tr limpw_an
2 0 0 0.0 1469705701.0 3.2 0.0 0.74 35.5 112 1 3.2 695.931477516 0.0 0 0 0 0 0 0 0 0.74 0 0.0 0.0 4 0 0.74 0.0 0.0 0.0 0.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
3 1 1 0.0 1469705702.6 8.6 0.0 2.07 38.5 113 2 8.6 228.8 1.59999990463 0 0 0 0 0 0 0 2.07 0 0.0 0.0 4 1 2.07 113.0 0.0 0.0 0.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
4 2 2 0.0 1469705704.5 15.1 0.0 3.36 38.5 115 3 15.1 153.336955279 3.5 0 0 0 0 0 0 0 3.36 0 0.0 0.0 4 3 3.35999999999 115.0 0.0 0.0 0.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
5 3 3 0.0 1469705705.6 21.4 0.0 4.09 39.0 115 4 21.4 124.977058407 4.59999990463 0 0 0 0 0 0 0 4.09 0 0.0 0.0 4 3 4.09 115.0 0.0 0.0 0.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
6 4 4 0.0 1469705707.5 28.8 0.0 4.43 38.5 118 5 28.8 112.083019815 6.5 0 0 0 0 0 0 0 4.43 0 0.0 0.0 4 5 4.42999999999 118.0 0.0 0.0 0.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
7 5 5 0.0 1469705708.8 36.2 0.0 4.64 37.5 125 6 36.2 106.442632632 7.79999995232 0 0 0 0 0 0 0 4.64 0 0.0 0.0 4 5 4.63999999999 125.0 0.0 0.0 0.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
8 6 6 0.0 1469705710.5 43.1 0.0 4.66 36.0 130 7 43.1 104.628021775 9.5 0 0 0 0 0 0 0 4.66 0 0.0 0.0 4 6 4.66 130.0 0.0 0.0 0.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
9 7 7 0.0 1469705712.2 52.0 0.0 4.76 34.0 135 8 52.0 106.01911804 11.2000000477 0 0 0 0 0 0 0 4.76 0 0.0 0.0 4 7 4.75999999999 135.0 0.0 0.0 0.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
10 8 8 0.0 1469705714.0 60.1 0.0 4.71 34.5 142 9 60.1 107.565165936 13.0 0 0 0 0 0 0 0 4.71 0 0.0 0.0 4 8 4.70999999998 142.0 0.0 0.0 0.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
11 9 9 0.0 1469705715.8 68.1 0.0 4.53 33.5 148 10 68.1 108.679681206 14.7999999523 0 0 0 0 0 0 0 4.53 0 0.0 0.0 4 9 4.53000000001 0.0 0.0 148.0 0.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
12 10 10 0.0 1469705717.6 76.3 0.0 4.44 32.5 154 11 76.3 109.466700689 16.5999999046 0 0 0 0 0 0 0 4.44 0 0.0 0.0 4 10 4.43999999998 0.0 0.0 154.0 0.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
13 11 11 0.0 1469705719.5 83.8 0.0 4.44 33.0 156 12 83.8 109.893487851 18.5 0 0 0 0 0 0 0 4.44 0 0.0 0.0 4 11 4.43999999998 0.0 0.0 156.0 0.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
14 12 12 0.0 1469705721.2 92.5 0.0 4.62 33.5 159 13 92.5 110.627456239 20.2000000477 0 0 0 0 0 0 0 4.62 0 0.0 0.0 4 12 4.62 0.0 0.0 159.0 0.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
15 13 13 0.0 1469705723.0 100.8 0.0 4.64 33.5 163 14 100.8 110.362782274 22.0 0 0 0 0 0 0 0 4.64 0 0.0 0.0 4 13 4.63999999999 0.0 0.0 0.0 163.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
16 14 14 0.0 1469705724.8 109.1 0.0 4.59 32.0 166 15 109.1 109.351182981 23.7999999523 0 0 0 0 0 0 0 4.59 0 0.0 0.0 4 14 4.58999999998 0.0 0.0 0.0 166.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
17 15 15 0.0 1469705726.8 118.1 0.0 4.52 32.5 168 16 118.1 108.636197885 25.7999999523 0 0 0 0 0 0 0 4.52 0 0.0 0.0 4 15 4.51999999998 0.0 0.0 0.0 0.0 168.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
18 16 16 0.0 1469705728.5 125.1 0.0 4.5 33.0 169 17 125.1 108.494979894 27.5 0 0 0 0 0 0 0 4.5 0 0.0 0.0 4 16 4.5 0.0 0.0 0.0 0.0 169.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
19 17 17 0.0 1469705730.4 134.7 0.0 4.66 33.5 171 18 134.7 109.232014911 29.4000000954 0 0 0 0 0 0 0 4.66 0 0.0 0.0 4 17 4.66 0.0 0.0 0.0 0.0 171.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
20 18 18 0.0 1469705732.2 143.0 0.0 4.66 32.5 172 19 143.0 109.4493854 31.2000000477 0 0 0 0 0 0 0 4.66 0 0.0 0.0 4 18 4.66 0.0 0.0 0.0 0.0 172.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
21 19 19 0.0 1469705734.0 151.2 0.0 4.58 33.0 172 20 151.2 109.222559423 33.0 0 0 0 0 0 0 0 4.58 0 0.0 0.0 4 19 4.57999999999 0.0 0.0 0.0 0.0 172.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
22 20 20 0.0 1469705735.8 159.4 0.0 4.52 33.0 173 21 159.4 109.097567302 34.7999999523 0 0 0 0 0 0 0 4.52 0 0.0 0.0 4 20 4.51999999998 0.0 0.0 0.0 0.0 173.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
23 21 21 0.0 1469705737.5 166.1 0.0 4.47 33.5 175 22 166.1 109.622785185 36.5 0 0 0 0 0 0 0 4.47 0 0.0 0.0 4 21 4.47000000001 0.0 0.0 0.0 0.0 175.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
24 22 22 0.0 1469705739.4 175.7 0.0 4.58 33.5 175 23 175.7 110.908884086 38.4000000954 0 0 0 0 0 0 0 4.58 0 0.0 0.0 4 22 4.57999999999 0.0 0.0 0.0 0.0 175.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
25 23 23 0.0 1469705741.2 183.8 0.0 4.57 32.5 175 24 183.8 111.571150665 40.2000000477 0 0 0 0 0 0 0 4.57 0 0.0 0.0 4 23 4.57 0.0 0.0 0.0 0.0 175.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
26 24 24 0.0 1469705743.0 191.8 0.0 4.47 33.0 175 25 191.8 111.781044645 42.0 0 0 0 0 0 0 0 4.47 0 0.0 0.0 4 24 4.47000000001 0.0 0.0 0.0 0.0 175.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
27 25 25 0.0 1469705744.8 199.8 0.0 4.39 32.0 176 26 199.8 111.973606594 43.7999999523 0 0 0 0 0 0 0 4.39 0 0.0 0.0 4 25 4.39 0.0 0.0 0.0 0.0 176.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
28 26 26 0.0 1469705746.7 207.8 0.0 4.39 32.5 176 27 207.8 112.082434148 45.7000000477 0 0 0 0 0 0 0 4.39 0 0.0 0.0 4 26 4.39 0.0 0.0 0.0 0.0 176.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
29 27 27 0.0 1469705748.6 216.7 0.0 4.49 33.0 174 28 216.7 112.462053887 47.5999999046 0 0 0 0 0 0 0 4.49 0 0.0 0.0 4 27 4.49000000001 0.0 0.0 0.0 0.0 174.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
30 28 28 0.0 1469705750.4 224.8 0.0 4.49 32.0 174 29 224.8 110.702820986 49.4000000954 0 0 0 0 0 0 0 4.49 0 0.0 0.0 4 28 4.49000000001 0.0 0.0 0.0 0.0 174.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
31 29 29 0.0 1469705752.5 232.9 0.0 4.47 33.0 174 30 232.9 111.287510895 51.5 0 0 0 0 0 0 0 4.47 0 0.0 0.0 4 30 4.47000000001 0.0 0.0 0.0 0.0 174.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
32 30 30 0.0 1469705754.0 240.9 0.0 4.48 32.0 175 31 240.9 113.880099386 53.0 0 0 0 0 0 0 0 4.48 0 0.0 0.0 4 30 4.48000000001 0.0 0.0 0.0 0.0 175.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
33 31 31 0.0 1469705755.8 248.9 0.0 4.43 32.0 175 32 248.9 117.397229535 54.7999999523 0 0 0 0 0 0 0 4.43 0 0.0 0.0 4 31 4.42999999999 0.0 0.0 0.0 0.0 175.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
34 32 32 0.0 1469705756.2 250.4 0.0 4.43 32.0 175 32 250.4 120.181532945 55.2000000477 0 0 0 0 0 0 0 4.43 0 0.0 0.0 4 32 4.42999999999 0.0 0.0 0.0 0.0 175.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
35 33 33 1.0 1469705757.6 5.7 0.0 3.62 30.5 160 1 256.1 121.464367621 56.5999999046 0 0 0 0 0 0 0 3.62 0 0.0 0.0 4 32 3.62000000001 0.0 0.0 160.0 0.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
36 34 34 1.0 1469705759.4 13.4 0.0 3.85 33.5 161 2 263.8 121.497391629 58.4000000954 0 0 0 0 0 0 0 3.85 0 0.0 0.0 4 33 3.85 0.0 0.0 0.0 161.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
37 35 35 1.0 1469705761.2 20.7 0.0 4.2 33.5 162 3 271.1 120.37982782 60.2000000477 0 0 0 0 0 0 0 4.2 0 0.0 0.0 4 34 4.19999999999 0.0 0.0 0.0 162.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
38 36 36 1.0 1469705763.0 29.2 0.0 4.47 33.5 162 4 279.6 118.387283716 62.0 0 0 0 0 0 0 0 4.47 0 0.0 0.0 4 35 4.47000000001 0.0 0.0 0.0 162.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
39 37 37 1.0 1469705764.8 37.3 0.0 4.47 33.0 164 5 287.7 115.233986774 63.7999999523 0 0 0 0 0 0 0 4.47 0 0.0 0.0 4 36 4.47000000001 0.0 0.0 0.0 164.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
40 38 38 1.0 1469705766.6 45.3 0.0 4.44 33.5 165 6 295.7 111.287510895 65.5999999046 0 0 0 0 0 0 0 4.44 0 0.0 0.0 4 37 4.43999999998 0.0 0.0 0.0 165.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
41 39 39 1.0 1469705768.5 53.5 0.0 4.42 33.5 165 7 303.9 111.718168135 67.5 0 0 0 0 0 0 0 4.42 0 0.0 0.0 4 38 4.41999999999 0.0 0.0 0.0 165.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
42 40 40 1.0 1469705770.2 60.7 0.0 4.38 32.0 167 8 311.1 113.471050335 69.2000000477 0 0 0 0 0 0 0 4.38 0 0.0 0.0 4 39 4.37999999998 0.0 0.0 0.0 167.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
43 41 41 1.0 1469705772.2 70.1 0.0 4.44 32.0 171 9 320.5 115.140584238 71.2000000477 0 0 0 0 0 0 0 4.44 0 0.0 0.0 4 40 4.43999999998 0.0 0.0 0.0 0.0 171.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
44 42 42 1.0 1469705774.1 77.8 0.0 4.3 32.0 172 10 328.2 116.273396972 73.0999999046 0 0 0 0 0 0 0 4.3 0 0.0 0.0 4 41 4.30000000002 0.0 0.0 0.0 0.0 172.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
45 43 43 1.0 1469705776.1 85.2 0.0 4.12 31.0 174 11 335.6 117.556791714 75.0999999046 0 0 0 0 0 0 0 4.12 0 0.0 0.0 4 42 4.12 0.0 0.0 0.0 0.0 174.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
46 44 44 1.0 1469705777.9 93.4 0.0 4.2 31.5 174 12 343.8 119.395508057 76.9000000954 0 0 0 0 0 0 0 4.2 0 0.0 0.0 4 43 4.19999999999 0.0 0.0 0.0 0.0 174.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
47 45 45 1.0 1469705779.9 101.5 0.0 4.21 32.0 176 13 351.9 121.165219651 78.9000000954 0 0 0 0 0 0 0 4.21 0 0.0 0.0 4 44 4.20999999999 0.0 0.0 0.0 0.0 176.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
48 46 46 1.0 1469705781.6 108.9 0.0 4.11 30.5 176 14 359.3 122.757318225 80.5999999046 0 0 0 0 0 0 0 4.11 0 0.0 0.0 4 45 4.10999999998 0.0 0.0 0.0 0.0 176.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
49 47 47 1.0 1469705783.6 116.9 0.0 4.02 32.0 175 15 367.3 123.722400388 82.5999999046 0 0 0 0 0 0 0 4.02 0 0.0 0.0 4 46 4.01999999999 0.0 0.0 0.0 0.0 175.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
50 48 48 1.0 1469705785.5 124.1 0.0 3.96 30.5 177 16 374.5 123.80237793 84.5 0 0 0 0 0 0 0 3.96 0 0.0 0.0 4 47 3.95999999999 0.0 0.0 0.0 0.0 177.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
51 49 49 1.0 1469705787.5 132.1 0.0 4.04 32.0 177 17 382.5 123.700282002 86.5 0 0 0 0 0 0 0 4.04 0 0.0 0.0 4 48 4.03999999999 0.0 0.0 0.0 0.0 177.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
52 50 50 1.0 1469705789.2 139.7 0.0 4.06 32.0 178 18 390.1 122.672370408 88.2000000477 0 0 0 0 0 0 0 4.06 0 0.0 0.0 4 49 4.05999999999 0.0 0.0 0.0 0.0 178.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
53 51 51 1.0 1469705791.1 146.7 0.0 4.09 33.0 178 19 397.1 121.011418513 90.0999999046 0 0 0 0 0 0 0 4.09 0 0.0 0.0 4 50 4.09 0.0 0.0 0.0 0.0 178.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
54 52 52 1.0 1469705793.1 155.4 0.0 4.27 31.0 177 20 405.8 119.62256154 92.0999999046 0 0 0 0 0 0 0 4.27 0 0.0 0.0 4 51 4.27000000001 0.0 0.0 0.0 0.0 177.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
55 53 53 1.0 1469705794.9 163.1 0.0 4.27 32.0 177 21 413.5 118.342215896 93.9000000954 0 0 0 0 0 0 0 4.27 0 0.0 0.0 4 52 4.27000000001 0.0 0.0 0.0 0.0 177.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
56 54 54 1.0 1469705797.1 171.6 0.0 4.24 31.5 178 22 422.0 117.740696015 96.0999999046 0 0 0 0 0 0 0 4.24 0 0.0 0.0 4 53 4.24 0.0 0.0 0.0 0.0 178.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
57 55 55 1.0 1469705798.6 179.3 0.0 4.22 32.0 179 23 429.7 117.599973684 97.5999999046 0 0 0 0 0 0 0 4.22 0 0.0 0.0 4 54 4.22000000001 0.0 0.0 0.0 0.0 179.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
58 56 56 1.0 1469705800.7 187.9 0.0 4.21 30.5 179 24 438.3 117.565167825 99.7000000477 0 0 0 0 0 0 0 4.21 0 0.0 0.0 4 55 4.20999999999 0.0 0.0 0.0 0.0 179.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
59 57 57 1.0 1469705802.5 195.8 0.0 4.28 30.5 180 25 446.2 117.967332124 101.5 0 0 0 0 0 0 0 4.28 0 0.0 0.0 4 56 4.27999999998 0.0 0.0 0.0 0.0 180.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
60 58 58 1.0 1469705804.5 204.3 0.0 4.22 30.5 180 26 454.7 118.489957355 103.5 0 0 0 0 0 0 0 4.22 0 0.0 0.0 4 57 4.22000000001 0.0 0.0 0.0 0.0 180.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
61 59 59 1.0 1469705806.4 212.2 0.0 4.2 30.5 180 27 462.6 118.763530461 105.400000095 0 0 0 0 0 0 0 4.2 0 0.0 0.0 4 58 4.19999999999 0.0 0.0 0.0 0.0 180.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
62 60 60 1.0 1469705808.5 221.4 0.0 4.26 29.5 180 28 471.8 117.583212735 107.5 0 0 0 0 0 0 0 4.26 0 0.0 0.0 4 59 4.25999999999 0.0 0.0 0.0 0.0 180.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
63 61 61 1.0 1469705810.4 229.8 0.0 4.17 30.5 180 29 480.2 119.140852815 109.400000095 0 0 0 0 0 0 0 4.17 0 0.0 0.0 4 60 4.16999999999 0.0 0.0 0.0 0.0 180.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
64 62 62 1.0 1469705812.3 236.6 0.0 4.11 33.5 181 30 487.0 121.480877381 111.299999952 0 0 0 0 0 0 0 4.11 0 0.0 0.0 4 61 4.10999999998 0.0 0.0 0.0 0.0 0.0 181.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
65 63 63 1.0 1469705814.0 244.8 0.0 4.24 33.5 181 31 495.2 122.38470448 113.0 0 0 0 0 0 0 0 4.24 0 0.0 0.0 4 62 4.24 0.0 0.0 0.0 0.0 0.0 181.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
66 64 64 1.0 1469705815.4 250.9 0.0 4.24 33.5 181 31 501.3 122.183234979 114.400000095 0 0 0 0 0 0 0 4.24 0 0.0 0.0 4 63 4.24 0.0 0.0 0.0 0.0 0.0 181.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
67 65 65 2.0 1469705816.3 0.9 0.0 3.66 28.0 158 1 502.2 121.2563172 115.299999952 0 0 0 0 0 0 0 3.66 0 0.0 0.0 4 63 3.66 0.0 0.0 158.0 0.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
68 66 66 2.0 1469705817.8 9.8 0.0 4.12 33.5 160 2 511.1 119.786227655 116.799999952 0 0 0 0 0 0 0 4.12 0 0.0 0.0 4 64 4.12 0.0 0.0 160.0 0.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
69 67 67 2.0 1469705819.6 18.0 0.0 4.44 32.5 162 3 519.3 117.678039467 118.599999905 0 0 0 0 0 0 0 4.44 0 0.0 0.0 4 65 4.43999999998 0.0 0.0 0.0 162.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
70 68 68 2.0 1469705821.5 26.1 0.0 4.47 33.0 161 4 527.4 115.319480659 120.5 0 0 0 0 0 0 0 4.47 0 0.0 0.0 4 66 4.47000000001 0.0 0.0 0.0 161.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
71 69 69 2.0 1469705823.4 35.0 0.0 4.43 32.0 164 5 536.3 112.531083761 122.400000095 0 0 0 0 0 0 0 4.43 0 0.0 0.0 4 67 4.42999999999 0.0 0.0 0.0 164.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
72 70 70 2.0 1469705825.1 41.9 0.0 4.43 33.0 165 6 543.2 109.693981917 124.099999905 0 0 0 0 0 0 0 4.43 0 0.0 0.0 4 68 4.42999999999 0.0 0.0 0.0 165.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
73 71 71 2.0 1469705827.1 51.5 0.0 4.6 33.5 166 7 552.8 110.111805834 126.099999905 0 0 0 0 0 0 0 4.6 0 0.0 0.0 4 69 4.6 0.0 0.0 0.0 166.0 0.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
74 72 72 2.0 1469705828.9 59.7 0.0 4.59 33.5 168 8 561.0 110.235734879 127.900000095 0 0 0 0 0 0 0 4.59 0 0.0 0.0 4 70 4.58999999998 0.0 0.0 0.0 0.0 168.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
75 73 73 2.0 1469705830.7 68.1 0.0 4.53 32.0 171 9 569.4 109.674351541 129.700000048 0 0 0 0 0 0 0 4.53 0 0.0 0.0 4 71 4.53000000001 0.0 0.0 0.0 0.0 171.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
76 74 74 2.0 1469705832.4 76.4 0.0 4.55 33.0 172 10 577.7 109.081478016 131.400000095 0 0 0 0 0 0 0 4.55 0 0.0 0.0 4 72 4.55 0.0 0.0 0.0 0.0 172.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
77 75 75 2.0 1469705834.3 84.0 0.0 4.54 32.5 173 11 585.3 108.95736186 133.299999952 0 0 0 0 0 0 0 4.54 0 0.0 0.0 4 73 4.54000000001 0.0 0.0 0.0 0.0 173.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
78 76 76 2.0 1469705836.0 92.9 0.0 4.63 33.0 174 12 594.2 109.581343074 135.0 0 0 0 0 0 0 0 4.63 0 0.0 0.0 4 74 4.63000000001 0.0 0.0 0.0 0.0 174.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
79 77 77 2.0 1469705837.9 101.3 0.0 4.61 33.5 176 13 602.6 109.437100452 136.900000095 0 0 0 0 0 0 0 4.61 0 0.0 0.0 4 75 4.61000000001 0.0 0.0 0.0 0.0 176.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
80 78 78 2.0 1469705839.7 109.6 0.0 4.58 33.5 177 14 610.9 108.898173861 138.700000048 0 0 0 0 0 0 0 4.58 0 0.0 0.0 4 76 4.57999999999 0.0 0.0 0.0 0.0 177.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
81 79 79 2.0 1469705841.5 118.0 0.0 4.54 33.5 178 15 619.3 108.514739286 140.5 0 0 0 0 0 0 0 4.54 0 0.0 0.0 4 77 4.54000000001 0.0 0.0 0.0 0.0 178.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
82 80 80 2.0 1469705843.1 125.0 0.0 4.54 34.0 178 16 626.3 108.408891045 142.099999905 0 0 0 0 0 0 0 4.54 0 0.0 0.0 4 78 4.54000000001 0.0 0.0 0.0 0.0 178.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
83 81 81 2.0 1469705845.1 134.8 0.0 4.69 34.5 179 17 636.1 108.970092917 144.099999905 0 0 0 0 0 0 0 4.69 0 0.0 0.0 4 79 4.69000000002 0.0 0.0 0.0 0.0 179.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
84 82 82 2.0 1469705846.7 142.2 0.0 4.67 34.0 180 18 643.5 108.943527129 145.700000048 0 0 0 0 0 0 0 4.67 0 0.0 0.0 4 80 4.67000000001 0.0 0.0 0.0 0.0 180.0 0.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
85 83 83 2.0 1469705848.5 150.6 0.0 4.59 34.5 181 19 651.9 108.491687362 147.5 0 0 0 0 0 0 0 4.59 0 0.0 0.0 4 81 4.58999999998 0.0 0.0 0.0 0.0 0.0 181.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
86 84 84 2.0 1469705850.3 158.8 0.0 4.52 33.5 181 20 660.1 108.195629805 149.299999952 0 0 0 0 0 0 0 4.52 0 0.0 0.0 4 82 4.51999999998 0.0 0.0 0.0 0.0 0.0 181.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
87 85 85 2.0 1469705852.1 166.4 0.0 4.52 33.5 181 21 667.7 108.474130564 151.099999905 0 0 0 0 0 0 0 4.52 0 0.0 0.0 4 83 4.51999999998 0.0 0.0 0.0 0.0 0.0 181.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
88 86 86 2.0 1469705853.9 175.2 0.0 4.68 33.5 182 22 676.5 109.550561798 152.900000095 0 0 0 0 0 0 0 4.68 0 0.0 0.0 4 84 4.67999999998 0.0 0.0 0.0 0.0 0.0 182.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
89 87 87 2.0 1469705855.7 183.2 0.0 4.65 32.0 182 23 684.5 110.12141592 154.700000048 0 0 0 0 0 0 0 4.65 0 0.0 0.0 4 85 4.65000000002 0.0 0.0 0.0 0.0 0.0 182.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
90 88 88 2.0 1469705857.5 191.2 0.0 4.51 33.0 182 24 692.5 110.388908617 156.5 0 0 0 0 0 0 0 4.51 0 0.0 0.0 4 86 4.51 0.0 0.0 0.0 0.0 0.0 182.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
91 89 89 2.0 1469705859.4 200.1 0.0 4.42 32.0 183 25 701.4 111.075438088 158.400000095 0 0 0 0 0 0 0 4.42 0 0.0 0.0 4 87 4.41999999999 0.0 0.0 0.0 0.0 0.0 183.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
92 90 90 2.0 1469705861.2 207.4 0.0 4.38 32.0 183 26 708.7 112.186192469 160.200000048 0 0 0 0 0 0 0 4.38 0 0.0 0.0 4 88 4.37999999998 0.0 0.0 0.0 0.0 0.0 183.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
93 91 91 2.0 1469705863.0 216.1 0.0 4.47 32.0 183 27 717.4 113.541324808 162.0 0 0 0 0 0 0 0 4.47 0 0.0 0.0 4 89 4.47000000001 0.0 0.0 0.0 0.0 0.0 183.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
94 92 92 2.0 1469705865.0 224.7 0.0 4.44 32.5 183 28 726.0 113.933934253 164.0 0 0 0 0 0 0 0 4.44 0 0.0 0.0 4 90 4.43999999998 0.0 0.0 0.0 0.0 0.0 183.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
95 93 93 2.0 1469705867.1 232.4 0.0 4.34 33.0 184 29 733.7 114.217860585 166.099999905 0 0 0 0 0 0 0 4.34 0 0.0 0.0 4 91 4.34 0.0 0.0 0.0 0.0 0.0 184.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
96 94 94 2.0 1469705868.6 240.6 0.0 4.35 32.0 184 30 741.9 114.508095643 167.599999905 0 0 0 0 0 0 0 4.35 0 0.0 0.0 4 92 4.34999999999 0.0 0.0 0.0 0.0 0.0 184.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
97 95 95 2.0 1469705870.7 249.0 0.0 4.34 30.5 184 31 750.3 114.922206507 169.700000048 0 0 0 0 0 0 0 4.34 0 0.0 0.0 4 93 4.34 0.0 0.0 0.0 0.0 0.0 184.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2
98 96 96 2.0 1469705871.0 250.4 0.0 4.34 30.5 184 31 751.7 115.581707376 170.0 0 0 0 0 0 0 0 4.34 0 0.0 0.0 4 93 4.34 0.0 0.0 0.0 0.0 0.0 184.0 142 146 160 167 180 192 0.0 0.0 0.0 0.0 0.0 0.0 124.3 169.5 203.4 237.3 271.2

Binary file not shown.

View File

@@ -1,5 +1,176 @@
from statements import *
# Histogram for a date/time range
@user_passes_test(ispromember,login_url="/rowers/paidplans",
message="This functionality requires a Pro plan or higher",
redirect_field_name=None)
def histo(request,theuser=0,
startdate=timezone.now()-datetime.timedelta(days=365),
enddate=timezone.now(),
deltadays=-1,
enddatestring=timezone.now().strftime("%Y-%m-%d"),
startdatestring=(timezone.now()-datetime.timedelta(days=30)).strftime("%Y-%m-%d"),
options={
'includereststrokes':False,
'workouttypes':[i[0] for i in mytypes.workouttypes],
'waterboattype':mytypes.waterboattype,
'rankingonly': False,
}):
r = getrequestrower(request,userid=theuser)
theuser = r.user
if 'waterboattype' in request.session:
waterboattype = request.session['waterboattype']
else:
waterboattype = mytypes.waterboattype
if 'rankingonly' in request.session:
rankingonly = request.session['rankingonly']
else:
rankingonly = False
if 'modalities' in request.session:
modalities = request.session['modalities']
if len(modalities) > 1:
modality = 'all'
else:
modality = modalities[0]
else:
modalities = [m[0] for m in mytypes.workouttypes]
modality = 'all'
try:
rankingonly = options['rankingonly']
except KeyError:
rankingonly = False
try:
includereststrokes = options['includereststrokes']
except KeyError:
includereststrokes = False
workstrokesonly = not includereststrokes
waterboattype = mytypes.waterboattype
if startdatestring != "":
startdate = iso8601.parse_date(startdatestring)
if enddatestring != "":
enddate = iso8601.parse_date(enddatestring)
if enddate < startdate:
s = enddate
enddate = startdate
startdate = s
# get all indoor rows of in date range
# process form
if request.method == 'POST':
form = DateRangeForm(request.POST)
modalityform = TrendFlexModalForm(request.POST)
if form.is_valid():
startdate = form.cleaned_data['startdate']
enddate = form.cleaned_data['enddate']
if startdate > enddate:
s = enddate
enddate = startdate
startdate = s
startdatestring = startdate.strftime('%Y-%m-%d')
enddatestring = enddate.strftime('%Y-%m-%d')
if modalityform.is_valid():
modality = modalityform.cleaned_data['modality']
waterboattype = modalityform.cleaned_data['waterboattype']
rankingonly = modalityform.cleaned_data['rankingonly']
if modality == 'all':
modalities = [m[0] for m in mytypes.workouttypes]
else:
modalities = [modality]
if modality != 'water':
waterboattype = [b[0] for b in mytypes.boattypes]
request.session['modalities'] = modalities
request.session['waterboattype'] = waterboattype
request.session['rankingonly'] = rankingonly
form = DateRangeForm(initial={
'startdate': startdate,
'enddate': enddate,
})
else:
form = DateRangeForm(initial={
'startdate': startdate,
'enddate': enddate,
})
includereststrokes = False
workstrokesonly = not includereststrokes
modalityform = TrendFlexModalForm(
initial={
'modality':modality,
'waterboattype':waterboattype,
'rankingonly':rankingonly,
}
)
negtypes = []
for b in mytypes.boattypes:
if b[0] not in waterboattype:
negtypes.append(b[0])
script = ''
div = get_call()
js_resources = ''
css_resources = ''
options = {
'modality': modality,
'theuser': theuser.id,
'waterboattype':waterboattype,
'startdatestring':startdatestring,
'enddatestring':enddatestring,
'rankingonly':rankingonly,
'includereststrokes':includereststrokes,
}
request.session['options'] = options
promember=0
mayedit=0
if not request.user.is_anonymous():
result = request.user.is_authenticated() and ispromember(request.user)
if result:
promember = 1
request.session['options'] = options
return render(request, 'histo.html',
{'interactiveplot':script,
'the_div':div,
'id':theuser,
'active':'nav-analysis',
'theuser':theuser,
'rower':r,
'startdate':startdate,
'enddate':enddate,
'form':form,
'optionsform':modalityform,
'teams':get_my_teams(request.user),
})
# The Flex plot for a large selection of workouts
@login_required()

View File

@@ -255,6 +255,15 @@ def getfavorites(r,row):
return favorites,maxfav
def get_workout_default_page(request,id):
if request.user.is_anonymous():
return reverse('workout_view',kwargs={'id':str(id)})
else:
r = Rower.objects.get(user=request.user)
if r.defaultlandingpage == 'workout_edit_view':
return reverse('workout_edit_view',kwargs={'id':str(id)})
else:
return reverse('workout_workflow_view',kwargs={'id':str(id)})
def getrequestrower(request,rowerid=0,userid=0,notpermanent=False):

View File

@@ -41,7 +41,7 @@ def workout_forcecurve_view(request,id=0,workstrokesonly=False):
'name': row.name
},
{
'url':reverse(workout_forcecurve_view,kwargs={'id':id}),
'url':reverse('workout_forcecurve_view',kwargs={'id':id}),
'name': 'Empower Force Curve'
}
@@ -73,7 +73,7 @@ def workout_test_task_view(request,id=0):
res = myqueue(queuehigh,addcomment2,request.user.id,row.id)
url = reverse(workout_edit_view,
url = reverse('workout_edit_view',
kwargs = {
'id':int(id),
})
@@ -111,7 +111,7 @@ def workout_histo_view(request,id=0):
'name': w.name
},
{
'url':reverse(workout_histo_view,kwargs={'id':id}),
'url':reverse('workout_histo_view',kwargs={'id':id}),
'name': 'Histogram'
}
@@ -133,177 +133,6 @@ def workout_histo_view(request,id=0):
# Histogram for a date/time range
@user_passes_test(ispromember,login_url="/rowers/paidplans",
message="This functionality requires a Pro plan or higher",
redirect_field_name=None)
def histo(request,theuser=0,
startdate=timezone.now()-datetime.timedelta(days=365),
enddate=timezone.now(),
deltadays=-1,
enddatestring=timezone.now().strftime("%Y-%m-%d"),
startdatestring=(timezone.now()-datetime.timedelta(days=30)).strftime("%Y-%m-%d"),
options={
'includereststrokes':False,
'workouttypes':[i[0] for i in mytypes.workouttypes],
'waterboattype':mytypes.waterboattype,
'rankingonly': False,
}):
r = getrequestrower(request,userid=theuser)
theuser = r.user
if 'waterboattype' in request.session:
waterboattype = request.session['waterboattype']
else:
waterboattype = mytypes.waterboattype
if 'rankingonly' in request.session:
rankingonly = request.session['rankingonly']
else:
rankingonly = False
if 'modalities' in request.session:
modalities = request.session['modalities']
if len(modalities) > 1:
modality = 'all'
else:
modality = modalities[0]
else:
modalities = [m[0] for m in mytypes.workouttypes]
modality = 'all'
try:
rankingonly = options['rankingonly']
except KeyError:
rankingonly = False
try:
includereststrokes = options['includereststrokes']
except KeyError:
includereststrokes = False
workstrokesonly = not includereststrokes
waterboattype = mytypes.waterboattype
if startdatestring != "":
startdate = iso8601.parse_date(startdatestring)
if enddatestring != "":
enddate = iso8601.parse_date(enddatestring)
if enddate < startdate:
s = enddate
enddate = startdate
startdate = s
# get all indoor rows of in date range
# process form
if request.method == 'POST':
form = DateRangeForm(request.POST)
modalityform = TrendFlexModalForm(request.POST)
if form.is_valid():
startdate = form.cleaned_data['startdate']
enddate = form.cleaned_data['enddate']
if startdate > enddate:
s = enddate
enddate = startdate
startdate = s
startdatestring = startdate.strftime('%Y-%m-%d')
enddatestring = enddate.strftime('%Y-%m-%d')
if modalityform.is_valid():
modality = modalityform.cleaned_data['modality']
waterboattype = modalityform.cleaned_data['waterboattype']
rankingonly = modalityform.cleaned_data['rankingonly']
if modality == 'all':
modalities = [m[0] for m in mytypes.workouttypes]
else:
modalities = [modality]
if modality != 'water':
waterboattype = [b[0] for b in mytypes.boattypes]
request.session['modalities'] = modalities
request.session['waterboattype'] = waterboattype
request.session['rankingonly'] = rankingonly
form = DateRangeForm(initial={
'startdate': startdate,
'enddate': enddate,
})
else:
form = DateRangeForm(initial={
'startdate': startdate,
'enddate': enddate,
})
includereststrokes = False
workstrokesonly = not includereststrokes
modalityform = TrendFlexModalForm(
initial={
'modality':modality,
'waterboattype':waterboattype,
'rankingonly':rankingonly,
}
)
negtypes = []
for b in mytypes.boattypes:
if b[0] not in waterboattype:
negtypes.append(b[0])
script = ''
div = get_call()
js_resources = ''
css_resources = ''
options = {
'modality': modality,
'theuser': theuser.id,
'waterboattype':waterboattype,
'startdatestring':startdatestring,
'enddatestring':enddatestring,
'rankingonly':rankingonly,
'includereststrokes':includereststrokes,
}
request.session['options'] = options
promember=0
mayedit=0
if not request.user.is_anonymous():
result = request.user.is_authenticated() and ispromember(request.user)
if result:
promember = 1
request.session['options'] = options
return render(request, 'histo.html',
{'interactiveplot':script,
'the_div':div,
'id':theuser,
'active':'nav-analysis',
'theuser':theuser,
'rower':r,
'startdate':startdate,
'enddate':enddate,
'form':form,
'optionsform':modalityform,
'teams':get_my_teams(request.user),
})
# add a workout manually
@login_required()
@@ -316,7 +145,7 @@ def addmanual_view(request):
'name':'Workouts'
},
{
'url':reverse(addmanual_view),
'url':reverse('addmanual_view'),
'name': 'Add Manual Entry'
},
]
@@ -418,7 +247,7 @@ def addmanual_view(request):
messages.info(request,'New workout created')
url = reverse(
workout_edit_view,
'workout_edit_view',
kwargs={'id':id}
)
return HttpResponseRedirect(url)
@@ -457,7 +286,7 @@ def fitness_metric_view(request,mode='rower',days=42):
# test if not something already done
ms = PowerTimeFitnessMetric.objects.filter(user=request.user)
if not ms:
url = reverse(workouts_view)
url = reverse('workouts_view')
return HttpResponseRedirect(url)
max_workout_id = max([m.last_workout for m in ms])
@@ -502,7 +331,7 @@ def workout_update_cp_view(request,id=0):
if (checkworkoutuser(request.user,row)==False):
message = "You are not allowed to edit this workout"
messages.error(request,message)
url = reverse(workouts_view)
url = reverse('workouts_view')
return HttpResponseRedirect(url)
@@ -529,7 +358,7 @@ def workout_recalcsummary_view(request,id=0):
if (checkworkoutuser(request.user,row)==False):
message = "You are not allowed to edit this workout"
messages.error(request,message)
url = reverse(workouts_view)
url = reverse('workouts_view')
return HttpResponseRedirect(url)
@@ -540,14 +369,14 @@ def workout_recalcsummary_view(request,id=0):
row.save()
successmessage = "Summary Updated"
messages.info(request,successmessage)
url = reverse(workout_edit_view,
url = reverse('workout_edit_view',
kwargs = {
'id':int(id),
})
else:
message = "Something went wrong. Could not update summary"
messages.error(request,message)
url = reverse(workout_edit_view,
url = reverse('workout_edit_view',
kwargs = {
'id':int(id),
})
@@ -599,7 +428,7 @@ def workouts_join_view(request):
return HttpResponse("form is not valid")
else:
url = reverse(workouts_join_select)
url = reverse('workouts_join_select')
return HttpResponseRedirect(url)
@user_passes_test(ispromember,login_url="/rowers/paidplans",
@@ -1082,11 +911,11 @@ def virtualevent_compare_view(request,id=0):
breadcrumbs = [
{
'url': reverse(virtualevents_view),
'url': reverse('virtualevents_view'),
'name': 'Racing'
},
{
'url':reverse(virtualevent_view,
'url':reverse('virtualevent_view',
kwargs={
'id':race.id,
}
@@ -1094,7 +923,7 @@ def virtualevent_compare_view(request,id=0):
'name': race.name
},
{
'url':reverse(virtualevent_compare_view,
'url':reverse('virtualevent_compare_view',
kwargs={
'id':race.id,
}
@@ -1159,7 +988,7 @@ def plannedsession_compare_view(request,id=0,userid=0):
request.session['plottype'] = plottype
request.session['ps'] = ps.id
url = reverse(multi_compare_view,kwargs={'userid':userid,'id':ids[0]})
url = reverse('multi_compare_view',kwargs={'userid':userid,'id':ids[0]})
return HttpResponseRedirect(url)
@@ -1237,7 +1066,7 @@ def multi_compare_view(request,id=0,userid=0):
)
else:
url = reverse(team_comparison_select,
url = reverse('team_comparison_select',
kwargs={
'id':id,
'teamid':0})
@@ -1262,11 +1091,11 @@ def multi_compare_view(request,id=0,userid=0):
'name':'Workouts'
},
{
'url':reverse(team_comparison_select,kwargs={'teamid':teamid}),
'url':reverse('team_comparison_select',kwargs={'teamid':teamid}),
'name': 'Compare Select'
},
{
'url':reverse(multi_compare_view),
'url':reverse('multi_compare_view'),
'name': 'Comparison Chart'
}
]
@@ -1275,12 +1104,12 @@ def multi_compare_view(request,id=0,userid=0):
ps = PlannedSession.objects.get(id=int(request.session['ps']))
breadcrumbs = [
{
'url': reverse(plannedsessions_view,
'url': reverse('plannedsessions_view',
kwargs={'userid':userid}),
'name': 'Sessions'
},
{
'url':reverse(plannedsession_view,
'url':reverse('plannedsession_view',
kwargs={
'userid':userid,
'id':ps.id,
@@ -1289,7 +1118,7 @@ def multi_compare_view(request,id=0,userid=0):
'name': ps.id
},
{
'url':reverse(plannedsession_compare_view,
'url':reverse('plannedsession_compare_view',
kwargs={
'userid':userid,
'id':ps.id,
@@ -1610,7 +1439,7 @@ def workout_fusion_list(request,id=0,message='',successmessage='',
'name': row.name
},
{
'url':reverse(workout_fusion_list,kwargs={'id':id}),
'url':reverse('workout_fusion_list',kwargs={'id':id}),
'name': 'Sensor Fusion'
}
@@ -1703,7 +1532,7 @@ def workout_view(request,id=0):
'name':'Workouts'
},
{
'url':reverse(workout_view,kwargs={'id':id}),
'url':reverse('workout_view',kwargs={'id':id}),
'name': row.name,
}
@@ -1745,7 +1574,7 @@ def workout_undo_smoothenpace_view(
if (checkworkoutuser(request.user,row)==False):
message = "You are not allowed to edit this workout"
messages.error(request,message)
url = reverse(workouts_view)
url = reverse('workouts_view')
return HttpResponseRedirect(url)
@@ -1785,7 +1614,7 @@ def workout_smoothenpace_view(request,id=0,message="",successmessage=""):
if (checkworkoutuser(request.user,row)==False):
message = "You are not allowed to edit this workout"
messages.error(request,message)
url = reverse(workouts_view)
url = reverse('workouts_view')
return HttpResponseRedirect(url)
@@ -1841,7 +1670,7 @@ def workout_crewnerd_summary_view(request,id=0,message="",successmessage=""):
'name': row.name
},
{
'url':reverse(workout_crewnerd_summary_view,kwargs={'id':id}),
'url':reverse('workout_crewnerd_summary_view',kwargs={'id':id}),
'name': 'CrewNerd Summary'
}
@@ -1860,7 +1689,7 @@ def workout_crewnerd_summary_view(request,id=0,message="",successmessage=""):
os.remove(fname)
successmessage = "CrewNerd summary added"
messages.info(request,successmessage)
url = reverse(workout_edit_view,
url = reverse('workout_edit_view',
kwargs = {
'id':int(id),
})
@@ -1873,7 +1702,7 @@ def workout_crewnerd_summary_view(request,id=0,message="",successmessage=""):
pass
message = "Something went wrong (workout_crewnerd_summary_view)"
messages.error(request,message)
url = reverse(workout_edit_view,
url = reverse('workout_edit_view',
kwargs = {
'id':int(id),
})
@@ -1914,7 +1743,7 @@ def workout_downloadwind_view(request,id=0,
if (checkworkoutuser(request.user,row)==False):
message = "You are not allowed to edit this workout"
messages.error(request,message)
url = reverse(workouts_view)
url = reverse('workouts_view')
return HttpResponseRedirect(url)
@@ -1954,7 +1783,7 @@ def workout_downloadwind_view(request,id=0,
kwargs = {
'id':int(id)}
url = reverse(workout_wind_view,kwargs=kwargs)
url = reverse('workout_wind_view',kwargs=kwargs)
response = HttpResponseRedirect(url)
except KeyError:
message = "No latitude/longitude data"
@@ -1962,7 +1791,7 @@ def workout_downloadwind_view(request,id=0,
kwargs = {
'id':int(id)
}
url = reverse(workout_wind_view,kwargs=kwargs)
url = reverse('workout_wind_view',kwargs=kwargs)
response = HttpResponseRedirect(url)
@@ -1980,7 +1809,7 @@ def workout_downloadmetar_view(request,id=0,
if (checkworkoutuser(request.user,row)==False):
message = "You are not allowed to edit this workout"
messages.error(request,message)
url = reverse(workouts_view)
url = reverse('workouts_view')
return HttpResponseRedirect(url)
@@ -2020,7 +1849,7 @@ def workout_downloadmetar_view(request,id=0,
kwargs = {
'id':int(id)}
url = reverse(workout_wind_view,kwargs=kwargs)
url = reverse('workout_wind_view',kwargs=kwargs)
response = HttpResponseRedirect(url)
except KeyError:
message = "No latitude/longitude data"
@@ -2028,7 +1857,7 @@ def workout_downloadmetar_view(request,id=0,
kwargs = {
'id':int(id)
}
url = reverse(workout_wind_view,kwargs=kwargs)
url = reverse('workout_wind_view',kwargs=kwargs)
response = HttpResponseRedirect(url)
@@ -2051,7 +1880,7 @@ def workout_wind_view(request,id=0,message="",successmessage=""):
'name': row.name
},
{
'url':reverse(workout_wind_view,kwargs={'id':id}),
'url':reverse('workout_wind_view',kwargs={'id':id}),
'name': 'Wind'
}
@@ -2060,7 +1889,7 @@ def workout_wind_view(request,id=0,message="",successmessage=""):
if (checkworkoutuser(request.user,row)==False):
message = "You are not allowed to edit this workout"
messages.error(request,message)
url = reverse(workouts_view)
url = reverse('workouts_view')
return HttpResponseRedirect(url)
@@ -2132,7 +1961,7 @@ def workout_wind_view(request,id=0,message="",successmessage=""):
kwargs = {
'id':int(id)
}
url = reverse(workout_wind_view,kwargs=kwargs)
url = reverse('workout_wind_view',kwargs=kwargs)
response = HttpResponseRedirect(url)
else:
@@ -2181,7 +2010,7 @@ def workout_stream_view(request,id=0,message="",successmessage=""):
if (checkworkoutuser(request.user,row)==False):
message = "You are not allowed to edit this workout"
messages.error(request,message)
url = reverse(workouts_view)
url = reverse('workouts_view')
return HttpResponseRedirect(url)
@@ -2218,7 +2047,7 @@ def workout_stream_view(request,id=0,message="",successmessage=""):
messages.error(request,message)
kwargs = {
'id':int(id)}
url = reverse(workout_wind_view,kwargs=kwargs)
url = reverse('workout_wind_view',kwargs=kwargs)
response = HttpResponseRedirect(url)
else:
@@ -2239,7 +2068,7 @@ def workout_stream_view(request,id=0,message="",successmessage=""):
'name': row.name
},
{
'url':reverse(workout_stream_view,kwargs={'id':id}),
'url':reverse('workout_stream_view',kwargs={'id':id}),
'name': 'Stream'
}
@@ -2273,7 +2102,7 @@ def workout_otwsetpower_view(request,id=0,message="",successmessage=""):
if (checkworkoutuser(request.user,w)==False):
message = "You are not allowed to edit this workout"
messages.error(request,message)
url = reverse(workouts_view)
url = reverse('workouts_view')
return HttpResponseRedirect(url)
@@ -2345,7 +2174,7 @@ def workout_otwsetpower_view(request,id=0,message="",successmessage=""):
try:
url = request.session['referer']
except KeyError:
url = reverse(workout_advanced_view,kwargs=kwargs)
url = reverse('workout_edit_view',kwargs=kwargs)
response = HttpResponseRedirect(url)
return response
@@ -2355,7 +2184,7 @@ def workout_otwsetpower_view(request,id=0,message="",successmessage=""):
messages.error(request,message)
kwargs = {
'id':int(id)}
url = reverse(workout_otwsetpower_view,kwargs=kwargs)
url = reverse('workout_otwsetpower_view',kwargs=kwargs)
response = HttpResponseRedirect(url)
else:
@@ -2371,7 +2200,7 @@ def workout_otwsetpower_view(request,id=0,message="",successmessage=""):
'name': w.name
},
{
'url':reverse(workout_otwsetpower_view,kwargs={'id':id}),
'url':reverse('workout_otwsetpower_view',kwargs={'id':id}),
'name': 'OTW Power'
}
@@ -2411,7 +2240,7 @@ def instroke_view(request,id=0):
'name': w.name
},
{
'url':reverse(instroke_view,kwargs={'id':id}),
'url':reverse('instroke_view',kwargs={'id':id}),
'name': 'In-Stroke Metrics'
}
@@ -2424,7 +2253,7 @@ def instroke_view(request,id=0):
if (checkworkoutuser(request.user,w)==False):
message = "You are not allowed to edit this workout"
messages.error(request,message)
url = reverse(workouts_view)
url = reverse('workouts_view')
return HttpResponseRedirect(url)
@@ -2456,7 +2285,7 @@ def instroke_chart(request,id=0,metric=''):
if (checkworkoutuser(request.user,w)==False):
message = "You are not allowed to edit this workout"
messages.error(request,message)
url = reverse(workouts_view)
url = reverse('workouts_view')
return HttpResponseRedirect(url)
@@ -2526,7 +2355,7 @@ def workout_data_view(request, id=0):
'name': w.name
},
{
'url':reverse(workout_data_view,kwargs={'id':id}),
'url':reverse('workout_data_view',kwargs={'id':id}),
'name': 'Data Explorer'
}
@@ -2628,7 +2457,7 @@ def workout_stats_view(request,id=0,message="",successmessage=""):
'name': w.name
},
{
'url':reverse(workout_stats_view,kwargs={'id':id}),
'url':reverse('workout_stats_view',kwargs={'id':id}),
'name': 'Stats'
}
@@ -2786,19 +2615,10 @@ def workflow_default_view(request):
r.save()
url = reverse(workout_workflow_config2_view)
url = reverse('workout_workflow_config2_view')
return HttpResponseRedirect(url)
def get_workout_default_page(request,id):
if request.user.is_anonymous():
return reverse(workout_view,kwargs={'id':str(id)})
else:
r = Rower.objects.get(user=request.user)
if r.defaultlandingpage == 'workout_edit_view':
return reverse(workout_edit_view,kwargs={'id':str(id)})
else:
return reverse(workout_workflow_view,kwargs={'id':str(id)})
# Workflow configuration
@login_required()
@@ -2946,7 +2766,7 @@ def workout_workflow_view(request,id):
'name': row.name
},
{
'url':reverse(workout_workflow_view,kwargs={'id':id}),
'url':reverse('workout_workflow_view',kwargs={'id':id}),
'name': 'View'
}
@@ -3232,7 +3052,7 @@ def workout_flexchart3_view(request,*args,**kwargs):
'name': row.name
},
{
'url':reverse(workout_flexchart3_view,kwargs=kwargs),
'url':reverse('workout_flexchart3_view',kwargs=kwargs),
'name': 'Flex Chart'
}
@@ -3286,7 +3106,7 @@ def workout_otwpowerplot_view(request,id=0,message="",successmessage=""):
'name': w.name
},
{
'url':reverse(workout_otwpowerplot_view,kwargs={'id':id}),
'url':reverse('workout_otwpowerplot_view',kwargs={'id':id}),
'name': 'Interactive OTW Power Plot'
}
@@ -3387,7 +3207,7 @@ def workout_comment_view(request,id=0):
c = WorkoutComment(workout=w,user=request.user,comment=comment,
notification=notification)
c.save()
url = reverse(workout_comment_view,
url = reverse('workout_comment_view',
kwargs={
'id':id
})
@@ -3428,8 +3248,9 @@ def workout_comment_view(request,id=0):
emailbounced = ocr.emailbounced
)
url = reverse(workout_comment_view,kwargs = {
'id':id})
url = reverse('workout_comment_view',
kwargs = {
'id':id})
return HttpResponseRedirect(url)
form = WorkoutCommentForm()
@@ -3456,7 +3277,7 @@ def workout_comment_view(request,id=0):
'name': w.name
},
{
'url':reverse(workout_comment_view,kwargs={'id':id}),
'url':reverse('workout_comment_view',kwargs={'id':id}),
'name': 'Comments'
}
@@ -3600,7 +3421,7 @@ def workout_edit_view(request,id=0,message="",successmessage=""):
dataprep.runcpupdate(row.user,type=row.workouttype)
messages.info(request,successmessage)
url = reverse(workout_edit_view,
url = reverse('workout_edit_view',
kwargs = {
'id':str(row.id),
})
@@ -3665,7 +3486,7 @@ def workout_edit_view(request,id=0,message="",successmessage=""):
'name': row.name
},
{
'url':reverse(workout_edit_view,kwargs={'id':id}),
'url':reverse('workout_edit_view',kwargs={'id':id}),
'name': 'Edit'
}
@@ -3713,7 +3534,7 @@ def workout_map_view(request,id=0):
'name': w.name
},
{
'url':reverse(workout_map_view,kwargs={'id':id}),
'url':reverse('workout_map_view',kwargs={'id':id}),
'name': 'Map'
}
@@ -3789,7 +3610,7 @@ def workout_uploadimage_view(request,id):
'name': w.name
},
{
'url':reverse(workout_uploadimage_view,kwargs={'id':id}),
'url':reverse('workout_uploadimage_view',kwargs={'id':id}),
'name': 'Upload Image'
}
@@ -3825,7 +3646,7 @@ def workout_uploadimage_view(request,id):
message = "Not a valid image"
messages.error(request,message)
os.remove(path_and_filename)
url = reverse(workout_uploadimage_view,
url = reverse('workout_uploadimage_view',
kwargs = {'id':id})
if is_ajax:
@@ -3847,7 +3668,7 @@ def workout_uploadimage_view(request,id):
return HttpResponseRedirect(url)
else:
messages.error(request,'Something went wrong - no file attached')
url = reverse(workout_uploadimage_view,
url = reverse('workout_uploadimage_view',
kwargs = {'id':id})
if is_ajax:
@@ -3929,7 +3750,7 @@ def workout_toggle_ranking(request,id=0):
return response
else:
url = reverse(workouts_view)
url = reverse('workouts_view')
response = HttpResponseRedirect(url)
return response
@@ -3961,7 +3782,7 @@ def workout_upload_view(request,
'name':'Workouts'
},
{
'url': reverse(workout_upload_view),
'url': reverse('workout_upload_view'),
'name': 'Upload'
}
]
@@ -4063,7 +3884,7 @@ def workout_upload_view(request,
else:
messages.error(request,
"Something went wrong - no file attached")
url = reverse(workout_upload_view)
url = reverse('workout_upload_view')
if is_ajax:
return JSONResponse({'result':0,'url':0})
else:
@@ -4151,7 +3972,7 @@ def workout_upload_view(request,
messages.info(
request,
"The file was too large to process in real time. It will be processed in a background process. You will receive an email when it is ready")
url = reverse(workout_upload_view)
url = reverse('workout_upload_view')
if is_ajax:
return JSONResponse({'result':1,'url':url})
else:
@@ -4160,7 +3981,7 @@ def workout_upload_view(request,
if not id:
messages.error(request,message)
url = reverse(workout_upload_view)
url = reverse('workout_upload_view')
if is_ajax:
return JSONResponse({'result':0,'url':url})
else:
@@ -4169,7 +3990,7 @@ def workout_upload_view(request,
elif id == -1:
message = 'The zip archive will be processed in the background. The files in the archive will only be uploaded without the extra actions. You will receive email when the workouts are ready.'
messages.info(request,message)
url = reverse(workout_upload_view)
url = reverse('workout_upload_view')
if is_ajax:
return JSONResponse({'result':1,'url':url})
else:
@@ -4179,7 +4000,7 @@ def workout_upload_view(request,
if message:
messages.error(request,message)
url = reverse(workout_edit_view,
url = reverse('workout_edit_view',
kwargs = {
'id':int(id),
})
@@ -4387,7 +4208,7 @@ def team_workout_upload_view(request,message="",
'name':'Workouts'
},
{
'url': reverse(team_workout_upload_view),
'url': reverse('team_workout_upload_view'),
'name': 'Team Upload'
}
]
@@ -4477,20 +4298,20 @@ def team_workout_upload_view(request,message="",
)
url = reverse(team_workout_upload_view)
url = reverse('team_workout_upload_view')
response = HttpResponseRedirect(url)
return response
if not id:
messages.error(request,message)
url = reverse(team_workout_upload_view)
url = reverse('team_workout_upload_view')
response = HttpResponseRedirect(url)
return response
elif id == -1:
message = 'The zip archive will be processed in the background. The files in the archive will only be uploaded without the extra actions. You will receive email when the workouts are ready.'
messages.info(request,message)
url = reverse(team_workout_upload_view)
url = reverse('team_workout_upload_view')
response = HttpResponseRedirect(url)
return response
@@ -4498,7 +4319,7 @@ def team_workout_upload_view(request,message="",
successmessage = "The workout was added to the user's account"
messages.info(request,successmessage)
url = reverse(team_workout_upload_view)
url = reverse('team_workout_upload_view')
response = HttpResponseRedirect(url)
w = Workout.objects.get(id=id)
@@ -4546,7 +4367,7 @@ def team_workout_upload_view(request,message="",
# A page with all the recent graphs (searchable on workout name)
@login_required()
def graphs_view(request):
request.session['referer'] = reverse(graphs_view)
request.session['referer'] = reverse('graphs_view')
try:
r = getrower(request.user)
workouts = Workout.objects.filter(user=r).order_by("-date", "-starttime")
@@ -4611,7 +4432,7 @@ def graph_show_view(request,id):
'name': w.name
},
{
'url':reverse(graph_show_view,kwargs={'id':id}),
'url':reverse('graph_show_view',kwargs={'id':id}),
'name': 'Chart'
}
@@ -4679,7 +4500,7 @@ def workout_summary_restore_view(request,id,message="",successmessage=""):
messages.info(request,'Original Interval Data Restored')
url = reverse(workout_summary_edit_view,
url = reverse('workout_summary_edit_view',
kwargs={
'id':int(id),
}
@@ -4703,7 +4524,8 @@ def workout_split_view(request,id=id):
'name': row.name
},
{
'url':reverse(graph_show_view,kwargs={'id':id}),
'url':reverse('graph_show_view',
kwargs={'id':id}),
'name': 'Chart'
}
@@ -4729,7 +4551,7 @@ def workout_split_view(request,id=id):
if request.user == r:
url = reverse(workouts_view)
url = reverse('workouts_view')
else:
mgrids = [team.id for team in Team.objects.filter(manager=request.user)]
rwrids = [team.id for team in r.team.all()]
@@ -4737,13 +4559,13 @@ def workout_split_view(request,id=id):
if len(teamids) > 0:
teamid = teamids[0]
url = reverse(workouts_view,
url = reverse('workouts_view',
kwargs={
'teamid':int(teamid),
}
)
else:
url = reverse(workouts_view)
url = reverse('workouts_view')
rowname = row.name
if isinstance(rowname,unicode):
@@ -4817,7 +4639,7 @@ def workout_fusion_view(request,id1=0,id2=1):
successmessage = 'Data fused'
messages.info(request,message)
url = reverse(workout_edit_view,
url = reverse('workout_edit_view',
kwargs={
'id':idnew,
})
@@ -4836,11 +4658,12 @@ def workout_fusion_view(request,id1=0,id2=1):
'name': str(w1.id)
},
{
'url':reverse(workout_fusion_list,kwargs={'id':id1}),
'url':reverse('workout_fusion_list',kwargs={'id':id1}),
'name': 'Sensor Fusion'
},
{
'url':reverse(workout_fusion_view,kwargs={'id1':id1,'id2':id2}),
'url':reverse('workout_fusion_view',
kwargs={'id1':id1,'id2':id2}),
'name': str(w2.id)
}
@@ -4874,7 +4697,7 @@ def workout_summary_edit_view(request,id,message="",successmessage=""
'name': row.name
},
{
'url':reverse(workout_summary_edit_view,kwargs={'id':id}),
'url':reverse('workout_summary_edit_view',kwargs={'id':id}),
'name': 'Edit Intervals'
}
@@ -5296,7 +5119,7 @@ class GraphDelete(DeleteView):
'name': str(self.object.workout.id)
},
{
'url':reverse(graph_show_view,kwargs={'id':self.object.pk}),
'url':reverse('graph_show_view',kwargs={'id':self.object.pk}),
'name': 'Chart'
},
{ 'url':reverse('graph_delete',kwargs={'pk':str(self.object.pk)}),
@@ -5314,7 +5137,7 @@ class GraphDelete(DeleteView):
def get_success_url(self):
w = self.object.workout
return reverse(workout_edit_view,kwargs={'id':str(w.id)})
return reverse('workout_edit_view',kwargs={'id':str(w.id)})
def get_object(self, *args, **kwargs):
obj = super(GraphDelete, self).get_object(*args, **kwargs)
@@ -5368,7 +5191,7 @@ class WorkoutDelete(DeleteView):
def get_success_url(self):
return reverse(workouts_view)
return reverse('workouts_view')
def get_object(self, *args, **kwargs):
obj = super(WorkoutDelete, self).get_object(*args, **kwargs)