From f00b10182a67439c2fc561595fed7724df81c7f4 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Fri, 14 Jun 2019 13:42:18 +0200 Subject: [PATCH 1/9] dummy polarization index function --- rowers/metrics.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rowers/metrics.py b/rowers/metrics.py index 1e7d55b1..c556e3c8 100644 --- a/rowers/metrics.py +++ b/rowers/metrics.py @@ -359,6 +359,9 @@ This value should be fairly constant across all stroke rates.""", ) +def polarization_index(df,rower): + return 0 + def calc_trimp(df,sex,hrmax,hrmin,hrftp): if sex == 'male': f = 1.92 From 319946f0b154d001215e55a5541abdb29dd515de Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Fri, 14 Jun 2019 15:26:45 +0200 Subject: [PATCH 2/9] able to calculate polarization index (from power only) --- rowers/dataprep.py | 24 ++++++++++++++++++++++++ rowers/metrics.py | 4 ++-- rowers/views/workoutviews.py | 5 +++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/rowers/dataprep.py b/rowers/dataprep.py index 89266aba..fb7ef68c 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -117,6 +117,30 @@ from scipy.signal import savgol_filter import datetime +def polarization_index(df,rower): + df['dt'] = df['time'].diff()/6.e4 + # remove rest (spm<15) + df.dropna(axis=0,inplace=True) + df['dt'] = df['dt'].clip(upper=4,lower=0) + + + masklow = (df['power']>0) & (df['power']=rower.pw_at) & (df['power']rower.pw_an) + + + time_low_pw = df.loc[masklow,'dt'].sum() + time_mid_pw = df.loc[maskmid,'dt'].sum() + time_high_pw = df.loc[maskhigh,'dt'].sum() + + frac_low = time_low_pw/(time_low_pw+time_mid_pw+time_high_pw) + frac_mid = time_mid_pw/(time_low_pw+time_mid_pw+time_high_pw) + frac_high = time_high_pw/(time_low_pw+time_mid_pw+time_high_pw) + + index = math.log10(frac_high*100.*frac_low/frac_mid) + + return index + def get_latlon(id): try: diff --git a/rowers/metrics.py b/rowers/metrics.py index c556e3c8..c06debdd 100644 --- a/rowers/metrics.py +++ b/rowers/metrics.py @@ -11,6 +11,8 @@ import pandas as pd from scipy import optimize from django.utils import timezone +from math import log10 + nometrics = [ 'originalvelo', 'cumdist', @@ -359,8 +361,6 @@ This value should be fairly constant across all stroke rates.""", ) -def polarization_index(df,rower): - return 0 def calc_trimp(df,sex,hrmax,hrmin,hrftp): if sex == 'male': diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py index 92c7e7ee..4a53bce4 100644 --- a/rowers/views/workoutviews.py +++ b/rowers/views/workoutviews.py @@ -1304,6 +1304,11 @@ def workouts_view(request,message='',successmessage='', workoutsnohr = workouts.exclude(averagehr__isnull=False) for w in workoutsnohr: res = dataprep.workout_trimp(w) + + # ids = [w.id for w in workouts] + # df = dataprep.getsmallrowdata_db(['time','power'],ids=ids) + # polarization = dataprep.polarization_index(df,r) + if query: query_list = query.split() From a89ad078dcf748d38eed4ec4b643ced5bbf512c9 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sun, 16 Jun 2019 15:23:33 +0200 Subject: [PATCH 3/9] tested --- rowers/tests/testdata/testdata.csv.gz | Bin 12523 -> 12523 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/rowers/tests/testdata/testdata.csv.gz b/rowers/tests/testdata/testdata.csv.gz index eb6a3b613a007d7d43c9b7dbf857b28244d52d5d..1c0e69ca852071e405e3fc63682dc61fea877c9b 100644 GIT binary patch delta 16 XcmaEz_&SkYzMF$%y%5_*_9q4aH~9ta delta 16 XcmaEz_&SkYzMF$%x-a8K_9q4aIGP3v From d073d1ffb720d2b13c1c1ed730cc065857b88f52 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sun, 16 Jun 2019 15:31:30 +0200 Subject: [PATCH 4/9] fixes #478 --- rowers/templates/trainingplan.html | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/rowers/templates/trainingplan.html b/rowers/templates/trainingplan.html index 09202a4e..2e4d4a01 100644 --- a/rowers/templates/trainingplan.html +++ b/rowers/templates/trainingplan.html @@ -142,6 +142,10 @@ + + Replan by Months + + / view sessions @@ -263,6 +267,10 @@ + + Replan by Weeks + + / view sessions From 64a5435dd7a02cf8a05c9630f662e854a67e61bc Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sun, 16 Jun 2019 17:06:12 +0200 Subject: [PATCH 5/9] team multicreate --- rowers/forms.py | 14 +++++++++ rowers/models.py | 3 ++ rowers/plannedsessions.py | 4 +++ rowers/templates/menu_plan.html | 30 +++++++++++++++---- .../templates/plannedsession_multicreate.html | 13 ++++++++ rowers/templatetags/rowerfilters.py | 12 ++++++++ rowers/views/planviews.py | 27 ++++++++++++++++- rowers/views/statements.py | 2 +- 8 files changed, 98 insertions(+), 7 deletions(-) diff --git a/rowers/forms.py b/rowers/forms.py index c0ee89fd..1462bae1 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -358,6 +358,7 @@ class TeamUploadOptionsForm(forms.Form): class Meta: fields = ['make_plot','plottype'] + # This form is used on the Workout Split page class WorkoutSplitForm(forms.Form): splitchoices = ( @@ -1201,6 +1202,19 @@ class WorkoutRaceSelectForm(forms.Form): # self.fields['evaluate_after'] = +# Form to select team by rower +class RowerTeamForm(forms.Form): + team = forms.ModelChoiceField( + queryset=Team.objects.all(), + required=False, + ) + + def __init__(self, user, *args, **kwargs): + super(RowerTeamForm, self).__init__(*args, **kwargs) + + self.fields['team'].queryset = Team.objects.filter(manager=user) + + class PlannedSessionTeamForm(forms.Form): team = forms.ModelMultipleChoiceField( queryset=Team.objects.all(), diff --git a/rowers/models.py b/rowers/models.py index 37a13822..63318e39 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -2982,6 +2982,9 @@ def auto_delete_image_on_delete(sender,instance, **kwargs): print("couldn't find the file "+instance.filename) + + + # Form to update Workout data class WorkoutForm(ModelForm): # duration = forms.TimeInput(format='%H:%M:%S.%f') diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py index 34642a46..8682aaa7 100644 --- a/rowers/plannedsessions.py +++ b/rowers/plannedsessions.py @@ -486,6 +486,10 @@ def remove_rower_session(r,ps): return 1 +def get_team(request): + teamid = request.GET.get('team') + return teamid + def get_dates_timeperiod(request,startdatestring='',enddatestring='', defaulttimeperiod='thisweek'): # set start end date according timeperiod diff --git a/rowers/templates/menu_plan.html b/rowers/templates/menu_plan.html index 7177f790..9c5d823d 100644 --- a/rowers/templates/menu_plan.html +++ b/rowers/templates/menu_plan.html @@ -61,11 +61,6 @@  Add Session -
  • - -  Add Group Session - -
  • Plan Microcycle @@ -78,6 +73,31 @@
  • + {% if request.user|user_teams %} +
  • + + + +
  • + {% endif %}

     

    diff --git a/rowers/templates/plannedsession_multicreate.html b/rowers/templates/plannedsession_multicreate.html index 2981a7b0..53418ea0 100644 --- a/rowers/templates/plannedsession_multicreate.html +++ b/rowers/templates/plannedsession_multicreate.html @@ -5,7 +5,11 @@ {% block title %}Plan entire microcycle{% endblock %} {% block main %} +{% if team %} +

    Create Group Sessions for {{ team.name }}

    +{% else %}

    Create Sessions for {{ rower.user.first_name }} {{ rower.user.last_name }}

    +{% endif %}