Merge branch 'release/v1.5'
This commit is contained in:
@@ -8,7 +8,7 @@ from rowers.tasks import handle_sendemail_unrecognized
|
|||||||
from rowingdata import rower as rrower
|
from rowingdata import rower as rrower
|
||||||
from rowingdata import main as rmain
|
from rowingdata import main as rmain
|
||||||
|
|
||||||
from rowingdata import get_file_type
|
from rowingdata import get_file_type,get_empower_rigging
|
||||||
|
|
||||||
from pandas import DataFrame,Series
|
from pandas import DataFrame,Series
|
||||||
from pytz import timezone as tz,utc
|
from pytz import timezone as tz,utc
|
||||||
@@ -31,7 +31,7 @@ import os
|
|||||||
import pandas as pd
|
import pandas as pd
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import itertools
|
import itertools
|
||||||
|
import math
|
||||||
from tasks import handle_sendemail_unrecognized
|
from tasks import handle_sendemail_unrecognized
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
@@ -326,7 +326,8 @@ def save_workout_database(f2,r,dosmooth=True,workouttype='rower',
|
|||||||
dosummary=True,title='Workout',
|
dosummary=True,title='Workout',
|
||||||
notes='',totaldist=0,totaltime=0,
|
notes='',totaldist=0,totaltime=0,
|
||||||
summary='',
|
summary='',
|
||||||
makeprivate=False):
|
makeprivate=False,
|
||||||
|
oarlength=2.89,inboard=0.88):
|
||||||
message = None
|
message = None
|
||||||
powerperc = 100*np.array([r.pw_ut2,
|
powerperc = 100*np.array([r.pw_ut2,
|
||||||
r.pw_ut1,
|
r.pw_ut1,
|
||||||
@@ -446,6 +447,7 @@ def save_workout_database(f2,r,dosmooth=True,workouttype='rower',
|
|||||||
csvfilename=f2,notes=notes,summary=summary,
|
csvfilename=f2,notes=notes,summary=summary,
|
||||||
maxhr=maxhr,averagehr=averagehr,
|
maxhr=maxhr,averagehr=averagehr,
|
||||||
startdatetime=workoutstartdatetime,
|
startdatetime=workoutstartdatetime,
|
||||||
|
inboard=inboard,oarlength=oarlength,
|
||||||
privacy=privacy)
|
privacy=privacy)
|
||||||
|
|
||||||
|
|
||||||
@@ -458,11 +460,13 @@ def save_workout_database(f2,r,dosmooth=True,workouttype='rower',
|
|||||||
|
|
||||||
# put stroke data in database
|
# put stroke data in database
|
||||||
res = dataprep(row.df,id=w.id,bands=True,
|
res = dataprep(row.df,id=w.id,bands=True,
|
||||||
barchart=True,otwpower=True,empower=True)
|
barchart=True,otwpower=True,empower=True,inboard=inboard)
|
||||||
|
|
||||||
return (w.id,message)
|
return (w.id,message)
|
||||||
|
|
||||||
def handle_nonpainsled(f2,fileformat,summary=''):
|
def handle_nonpainsled(f2,fileformat,summary=''):
|
||||||
|
oarlength = 2.89
|
||||||
|
inboard = 0.88
|
||||||
# handle RowPro:
|
# handle RowPro:
|
||||||
if (fileformat == 'rp'):
|
if (fileformat == 'rp'):
|
||||||
row = RowProParser(f2)
|
row = RowProParser(f2)
|
||||||
@@ -506,6 +510,7 @@ def handle_nonpainsled(f2,fileformat,summary=''):
|
|||||||
if (fileformat == 'speedcoach2'):
|
if (fileformat == 'speedcoach2'):
|
||||||
row = SpeedCoach2Parser(f2)
|
row = SpeedCoach2Parser(f2)
|
||||||
try:
|
try:
|
||||||
|
oarlength,inboard = get_empower_rigging(f2)
|
||||||
summary = row.allstats()
|
summary = row.allstats()
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
@@ -534,7 +539,7 @@ def handle_nonpainsled(f2,fileformat,summary=''):
|
|||||||
except:
|
except:
|
||||||
os.remove(f_to_be_deleted+'.gz')
|
os.remove(f_to_be_deleted+'.gz')
|
||||||
|
|
||||||
return (f2,summary)
|
return (f2,summary,oarlength,inboard)
|
||||||
|
|
||||||
# Create new workout from file and store it in the database
|
# Create new workout from file and store it in the database
|
||||||
# This routine should be used everywhere in views.py and mailprocessing.py
|
# This routine should be used everywhere in views.py and mailprocessing.py
|
||||||
@@ -547,6 +552,8 @@ def new_workout_from_file(r,f2,
|
|||||||
message = None
|
message = None
|
||||||
fileformat = get_file_type(f2)
|
fileformat = get_file_type(f2)
|
||||||
summary = ''
|
summary = ''
|
||||||
|
oarlength = 2.89
|
||||||
|
inboard = 0.88
|
||||||
if len(fileformat)==3 and fileformat[0]=='zip':
|
if len(fileformat)==3 and fileformat[0]=='zip':
|
||||||
f_to_be_deleted = f2
|
f_to_be_deleted = f2
|
||||||
with zipfile.ZipFile(f2) as z:
|
with zipfile.ZipFile(f2) as z:
|
||||||
@@ -590,7 +597,7 @@ def new_workout_from_file(r,f2,
|
|||||||
|
|
||||||
# handle non-Painsled by converting it to painsled compatible CSV
|
# handle non-Painsled by converting it to painsled compatible CSV
|
||||||
if (fileformat != 'csv'):
|
if (fileformat != 'csv'):
|
||||||
f2,summary = handle_nonpainsled(f2,fileformat,summary=summary)
|
f2,summary,oarlength,inboard = handle_nonpainsled(f2,fileformat,summary=summary)
|
||||||
|
|
||||||
|
|
||||||
dosummary = (fileformat != 'fit')
|
dosummary = (fileformat != 'fit')
|
||||||
@@ -599,6 +606,7 @@ def new_workout_from_file(r,f2,
|
|||||||
makeprivate=makeprivate,
|
makeprivate=makeprivate,
|
||||||
dosummary=dosummary,
|
dosummary=dosummary,
|
||||||
summary=summary,
|
summary=summary,
|
||||||
|
inboard=inboard,oarlength=oarlength,
|
||||||
title=title)
|
title=title)
|
||||||
|
|
||||||
return (id,message,f2)
|
return (id,message,f2)
|
||||||
@@ -884,7 +892,7 @@ def smalldataprep(therows,xparam,yparam1,yparam2):
|
|||||||
# saves it to the stroke_data table in the database
|
# saves it to the stroke_data table in the database
|
||||||
# Takes a rowingdata object's DataFrame as input
|
# Takes a rowingdata object's DataFrame as input
|
||||||
def dataprep(rowdatadf,id=0,bands=True,barchart=True,otwpower=True,
|
def dataprep(rowdatadf,id=0,bands=True,barchart=True,otwpower=True,
|
||||||
empower=True):
|
empower=True,inboard=0.88):
|
||||||
rowdatadf.set_index([range(len(rowdatadf))],inplace=True)
|
rowdatadf.set_index([range(len(rowdatadf))],inplace=True)
|
||||||
t = rowdatadf.ix[:,'TimeStamp (sec)']
|
t = rowdatadf.ix[:,'TimeStamp (sec)']
|
||||||
t = pd.Series(t-rowdatadf.ix[0,'TimeStamp (sec)'])
|
t = pd.Series(t-rowdatadf.ix[0,'TimeStamp (sec)'])
|
||||||
@@ -997,7 +1005,11 @@ def dataprep(rowdatadf,id=0,bands=True,barchart=True,otwpower=True,
|
|||||||
finish = rowdatadf.ix[:,'finish']
|
finish = rowdatadf.ix[:,'finish']
|
||||||
peakforceangle = rowdatadf.ix[:,'peakforceangle']
|
peakforceangle = rowdatadf.ix[:,'peakforceangle']
|
||||||
driveenergy = rowdatadf.ix[:,'driveenergy']
|
driveenergy = rowdatadf.ix[:,'driveenergy']
|
||||||
drivelength = driveenergy/(averageforce*4.44822)
|
arclength = (inboard-0.05)*(np.radians(finish)-np.radians(catch))
|
||||||
|
if arclength.mean()>0:
|
||||||
|
drivelength = arclength
|
||||||
|
else:
|
||||||
|
drivelength = driveenergy/(averageforce*4.44822)
|
||||||
slip = rowdatadf.ix[:,'slip']
|
slip = rowdatadf.ix[:,'slip']
|
||||||
if windowsize > 3 and windowsize<len(slip):
|
if windowsize > 3 and windowsize<len(slip):
|
||||||
wash = savgol_filter(wash,windowsize,3)
|
wash = savgol_filter(wash,windowsize,3)
|
||||||
|
|||||||
@@ -393,6 +393,12 @@ class Workout(models.Model):
|
|||||||
maxhr = models.IntegerField(blank=True,null=True)
|
maxhr = models.IntegerField(blank=True,null=True)
|
||||||
uploadedtostrava = models.IntegerField(default=0)
|
uploadedtostrava = models.IntegerField(default=0)
|
||||||
uploadedtosporttracks = models.IntegerField(default=0)
|
uploadedtosporttracks = models.IntegerField(default=0)
|
||||||
|
|
||||||
|
# empower stuff
|
||||||
|
inboard = models.FloatField(default=0.88)
|
||||||
|
oarlength = models.FloatField(default=2.89)
|
||||||
|
|
||||||
|
|
||||||
notes = models.CharField(blank=True,null=True,max_length=1000)
|
notes = models.CharField(blank=True,null=True,max_length=1000)
|
||||||
summary = models.TextField(blank=True)
|
summary = models.TextField(blank=True)
|
||||||
privacy = models.CharField(default='visible',max_length=30,
|
privacy = models.CharField(default='visible',max_length=30,
|
||||||
|
|||||||
Reference in New Issue
Block a user