diff --git a/rowers/metrics.py b/rowers/metrics.py index bf1e790b..ee4233bd 100644 --- a/rowers/metrics.py +++ b/rowers/metrics.py @@ -1,5 +1,7 @@ from utils import lbstoN import numpy as np +from models import C2WorldClassAgePerformance +import pandas as pd rowingmetrics = ( ('time',{ @@ -316,3 +318,22 @@ def calc_trimp(df,sex,hrmax,hrmin): trimp = trimpdata.sum() return trimp + +def getagegroup2k(age,sex='male',weightcategory='hwt'): + df = pd.DataFrame( + list( + C2WorldClassAgePerformance.objects.filter( + sex=sex, + weightcategory=weightcategory + ).values() + ) + ) + + ages = df['agemin'] + powers = df['power'] + + poly_coefficients = np.polyfit(ages,powers,6) + + power = np.polyval(poly_coefficients,age) + + return power diff --git a/rowers/models.py b/rowers/models.py index 2fa57a5c..987f1aeb 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -183,7 +183,7 @@ def make_records(readfile): save_agegroup(female_df,'hwt','female') save_agegroup(male_df,'hwt','male') save_agegroup(female_lw_df,'lwt','female') - save_agegroup(female_lw_df,'lwt','male') + save_agegroup(male_lw_df,'lwt','male') class C2WorldClassAgePerformance(models.Model): @@ -218,7 +218,7 @@ class C2WorldClassAgePerformance(models.Model): unique_together = ('agemin','agemax','sex','weightcategory','distance') def __unicode__(self): - return self.name+':'+str(self.agemin)+'-'+str(self.agemax)+' ('+str(self.season)+')' + return self.sex+' '+self.weightcategory+' '+self.name+':'+str(self.agemin)+'-'+str(self.agemax)+' ('+str(self.season)+')' # For future Team functionality class Team(models.Model): diff --git a/rowers/templates/rankings.html b/rowers/templates/rankings.html index 741f5a41..ecaa84e2 100644 --- a/rowers/templates/rankings.html +++ b/rowers/templates/rankings.html @@ -259,6 +259,9 @@ {% endif %} +{% if worldclasspower %} +World class 2k for your age, weight is {{ worldclasspower }} Watt +{% endif %} {% endblock %} diff --git a/rowers/utils.py b/rowers/utils.py index 0b3f2d93..5b87053a 100644 --- a/rowers/utils.py +++ b/rowers/utils.py @@ -263,3 +263,8 @@ def myqueue(queue,function,*args,**kwargs): return job +from datetime import date + +def calculate_age(born): + today = date.today() + return today.year - born.year - ((today.month, today.day) < (born.month, born.day)) diff --git a/rowers/views.py b/rowers/views.py index 4464e9d1..68bf1644 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -710,7 +710,8 @@ def splitstdata(lijst): from utils import ( geo_distance,serialize_list,deserialize_list,uniqify, - str2bool,range_to_color_hex,absolute,myqueue,get_call + str2bool,range_to_color_hex,absolute,myqueue,get_call, + calculate_age ) import datautils @@ -3220,6 +3221,16 @@ def rankings_view(request,theuser=0, promember=0 if not request.user.is_anonymous(): r = getrower(request.user) + if r.birthdate: + age = calculate_age(r.birthdate) + worldclasspower = int(metrics.getagegroup2k( + age, + sex=r.sex, + weightcategory=r.weightcategory + )) + else: + worldclasspower = None + result = request.user.is_authenticated() and ispromember(request.user) if result: promember=1 @@ -3488,6 +3499,7 @@ def rankings_view(request,theuser=0, 'form':form, 'dateform':dateform, 'deltaform':deltaform, + 'worldclasspower':worldclasspower, 'id': theuser, 'theuser':uu, 'startdate':startdate,