Private
Public Access
1
0

quickened Ranking 2.0

This commit is contained in:
Sander Roosendaal
2018-01-05 16:16:11 +01:00
parent 545d8e4906
commit df7f300d87
6 changed files with 129 additions and 40 deletions

View File

@@ -354,14 +354,21 @@ def getagegrouprecord(age,sex='male',weightcategory='hwt',
p0 = [700,120,700,10,100,100] p0 = [700,120,700,10,100,100]
p1, success = optimize.leastsq(errfunc,p0[:], try:
p1, success = optimize.leastsq(errfunc,p0[:],
args = (ages,powers)) args = (ages,powers))
except:
p1 = p0
success = 0
power = fitfunc(p1, float(age)) if success:
power = fitfunc(p1, float(age))
#power = np.polyval(poly_coefficients,age) #power = np.polyval(poly_coefficients,age)
power = 0.5*(np.abs(power)+power) power = 0.5*(np.abs(power)+power)
else:
power = 0
else: else:
power = 0 power = 0

View File

@@ -66,7 +66,10 @@ def long_test_task2(self,aantal,**kwargs):
kwargs['jobid'] = job_id kwargs['jobid'] = job_id
return longtask.longtask2(aantal,**kwargs) return longtask.longtask2(aantal,**kwargs)
# create workout # create workout
@app.task @app.task
def handle_new_workout_from_file(r, f2, def handle_new_workout_from_file(r, f2,

View File

@@ -0,0 +1 @@
E408191@CZ27LT9RCGN72.81156:1514927368

View File

@@ -5,6 +5,25 @@
{% block title %}Workouts{% endblock %} {% block title %}Workouts{% endblock %}
{% block scripts %} {% block scripts %}
{% include "monitorjobs.html" %} {% include "monitorjobs.html" %}
<script type='text/javascript'
src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js'>
</script>
<script>
$(function($) {
console.log('loading script');
console.log('{{ recalc }}');
if ('{{ recalc }}' == 'True') {
theurl = '/rowers/ajax_agegroup/{{ age }}/{{ weightcategory }}/{{ sex }}/{{ user.id }}'
console.log(theurl);
$.getJSON(window.location.protocol + '//'+window.location.host + theurl, function(json) {
location.reload();
});
} else {
console.log('No need to reload');
}
});
</script>
{% endblock %} {% endblock %}
{% block content %} {% block content %}

View File

@@ -123,6 +123,8 @@ urlpatterns = [
url(r'^imports/$', TemplateView.as_view(template_name='imports.html'), name='imports'), url(r'^imports/$', TemplateView.as_view(template_name='imports.html'), name='imports'),
url(r'^agegroupcp/(?P<age>\d+)$',views.agegroupcpview), url(r'^agegroupcp/(?P<age>\d+)$',views.agegroupcpview),
url(r'^agegroupcp/(?P<age>\d+)/(?P<normalize>\d+)$',views.agegroupcpview), url(r'^agegroupcp/(?P<age>\d+)/(?P<normalize>\d+)$',views.agegroupcpview),
url(r'^ajax_agegroup/(?P<age>\d+)/(?P<weightcategory>\w+.*)/(?P<sex>\w+.*)/(?P<userid>\d+)$',
views.ajax_agegrouprecords),
url(r'^agegrouprecords/(?P<sex>\w+.*)/(?P<weightcategory>\w+.*)/(?P<distance>\d+)m$', url(r'^agegrouprecords/(?P<sex>\w+.*)/(?P<weightcategory>\w+.*)/(?P<distance>\d+)m$',
views.agegrouprecordview), views.agegrouprecordview),
url(r'^agegrouprecords/(?P<sex>\w+.*)/(?P<weightcategory>\w+.*)/(?P<duration>\d+)min$', url(r'^agegrouprecords/(?P<sex>\w+.*)/(?P<weightcategory>\w+.*)/(?P<duration>\d+)min$',

View File

@@ -3509,6 +3509,66 @@ def rankings_view(request,theuser=0,
'teams':get_my_teams(request.user), 'teams':get_my_teams(request.user),
}) })
@login_required()
def ajax_agegrouprecords(request,
age=25,
sex='female',
weightcategory='hwt',
userid=0):
wcdurations = []
wcpower = []
durations = [1,4,30,60]
distances = [100,500,1000,2000,5000,6000,10000,21097,42195]
for distance in distances:
worldclasspower = metrics.getagegrouprecord(
age,
sex=sex,
distance=distance,
weightcategory=weightcategory
)
velo = (worldclasspower/2.8)**(1./3.)
try:
duration = distance/velo
wcdurations.append(duration)
wcpower.append(worldclasspower)
except ZeroDivisionError:
pass
for duration in durations:
worldclasspower = metrics.getagegrouprecord(
age,
sex=sex,
duration=duration,
weightcategory=weightcategory
)
try:
velo = (worldclasspower/2.8)**(1./3.)
distance = int(60*duration*velo)
wcdurations.append(60.*duration)
wcpower.append(worldclasspower)
except ValueError:
pass
options = {}
options['wcpower'] = wcpower
options['wcdurations'] = wcdurations
thenowtime = timezone.now().isoformat()
options['lastupdated'] = thenowtime
options['userid'] = userid
request.session['options'] = options
return JSONResponse(
{
'wcdurations': wcdurations,
'wcpower': wcpower,
'lastupdated': thenowtime,
}
)
# Show ranking distances including predicted paces # Show ranking distances including predicted paces
@login_required() @login_required()
def rankings_view2(request,theuser=0, def rankings_view2(request,theuser=0,
@@ -3534,64 +3594,60 @@ def rankings_view2(request,theuser=0,
if theuser == 0: if theuser == 0:
theuser = request.user.id theuser = request.user.id
else:
lastupdated = "01-01-1900"
promember=0 promember=0
if not request.user.is_anonymous(): if not request.user.is_anonymous():
r = getrower(request.user) r = getrower(theuser)
wcdurations = [] wcdurations = []
wcpower = [] wcpower = []
lastupdated = "01-01-1900"
userid = 0
if 'options' in request.session: if 'options' in request.session:
options = request.session['options'] options = request.session['options']
try: try:
wcdurations = options['wcdurations'] wcdurations = options['wcdurations']
wcpower = options['wcpower'] wcpower = options['wcpower']
lastupdated = options['lastupdated']
except KeyError: except KeyError:
pass pass
try:
userid = options['userid']
except KeyError:
userid = 0
else:
options = {}
if r.birthdate:
age = calculate_age(r.birthdate)
# job = myqueue
durations = [1,4,30,60]
distances = [100,500,1000,2000,5000,6000,10000,21097,42195] lastupdatedtime = arrow.get(lastupdated).timestamp
for distance in distances: current_time = arrow.utcnow().timestamp
worldclasspower = metrics.getagegrouprecord(
age, deltatime_seconds = current_time - lastupdatedtime
sex=r.sex, recalc = False
distance=distance, if str(userid) != str(theuser) or deltatime_seconds > 3600:
weightcategory=r.weightcategory recalc = True
) else:
velo = (worldclasspower/2.8)**(1./3.) recalc = False
try:
duration = distance/velo options['userid'] = theuser
wcdurations.append(duration)
wcpower.append(worldclasspower) if r.birthdate:
except ZeroDivisionError: age = calculate_age(r.birthdate)
pass
for duration in durations:
worldclasspower = metrics.getagegrouprecord(
age,
sex=r.sex,
duration=duration,
weightcategory=r.weightcategory
)
try:
velo = (worldclasspower/2.8)**(1./3.)
distance = int(60*duration*velo)
wcdurations.append(60.*duration)
wcpower.append(worldclasspower)
except ValueError:
pass
else: else:
worldclasspower = None worldclasspower = None
age = 0 age = 0
options['wcpower'] = wcpower options['wcpower'] = wcpower
options['wcdurations'] = wcdurations options['wcdurations'] = wcdurations
if theuser:
options['userid'] = theuser
request.session['options'] = options request.session['options'] = options
result = request.user.is_authenticated() and ispromember(request.user) result = request.user.is_authenticated() and ispromember(request.user)
if result: if result:
@@ -3868,6 +3924,7 @@ def rankings_view2(request,theuser=0,
'theuser':uu, 'theuser':uu,
'age':age, 'age':age,
'sex':r.sex, 'sex':r.sex,
'recalc':recalc,
'weightcategory':r.weightcategory, 'weightcategory':r.weightcategory,
'startdate':startdate, 'startdate':startdate,
'enddate':enddate, 'enddate':enddate,