quickened Ranking 2.0
This commit is contained in:
@@ -354,14 +354,21 @@ def getagegrouprecord(age,sex='male',weightcategory='hwt',
|
||||
|
||||
p0 = [700,120,700,10,100,100]
|
||||
|
||||
p1, success = optimize.leastsq(errfunc,p0[:],
|
||||
try:
|
||||
p1, success = optimize.leastsq(errfunc,p0[:],
|
||||
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:
|
||||
power = 0
|
||||
|
||||
|
||||
@@ -66,7 +66,10 @@ def long_test_task2(self,aantal,**kwargs):
|
||||
kwargs['jobid'] = job_id
|
||||
|
||||
return longtask.longtask2(aantal,**kwargs)
|
||||
|
||||
|
||||
|
||||
|
||||
# create workout
|
||||
@app.task
|
||||
def handle_new_workout_from_file(r, f2,
|
||||
|
||||
1
rowers/templates/.#multiflex.html
Normal file
1
rowers/templates/.#multiflex.html
Normal file
@@ -0,0 +1 @@
|
||||
E408191@CZ27LT9RCGN72.81156:1514927368
|
||||
@@ -5,6 +5,25 @@
|
||||
{% block title %}Workouts{% endblock %}
|
||||
{% block scripts %}
|
||||
{% 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 %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
@@ -123,6 +123,8 @@ urlpatterns = [
|
||||
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+)/(?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$',
|
||||
views.agegrouprecordview),
|
||||
url(r'^agegrouprecords/(?P<sex>\w+.*)/(?P<weightcategory>\w+.*)/(?P<duration>\d+)min$',
|
||||
|
||||
129
rowers/views.py
129
rowers/views.py
@@ -3509,6 +3509,66 @@ def rankings_view(request,theuser=0,
|
||||
'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
|
||||
@login_required()
|
||||
def rankings_view2(request,theuser=0,
|
||||
@@ -3534,64 +3594,60 @@ def rankings_view2(request,theuser=0,
|
||||
|
||||
if theuser == 0:
|
||||
theuser = request.user.id
|
||||
else:
|
||||
lastupdated = "01-01-1900"
|
||||
|
||||
|
||||
promember=0
|
||||
if not request.user.is_anonymous():
|
||||
r = getrower(request.user)
|
||||
r = getrower(theuser)
|
||||
wcdurations = []
|
||||
wcpower = []
|
||||
|
||||
|
||||
lastupdated = "01-01-1900"
|
||||
userid = 0
|
||||
if 'options' in request.session:
|
||||
options = request.session['options']
|
||||
try:
|
||||
wcdurations = options['wcdurations']
|
||||
wcpower = options['wcpower']
|
||||
lastupdated = options['lastupdated']
|
||||
except KeyError:
|
||||
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]
|
||||
for distance in distances:
|
||||
worldclasspower = metrics.getagegrouprecord(
|
||||
age,
|
||||
sex=r.sex,
|
||||
distance=distance,
|
||||
weightcategory=r.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=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
|
||||
|
||||
lastupdatedtime = arrow.get(lastupdated).timestamp
|
||||
current_time = arrow.utcnow().timestamp
|
||||
|
||||
deltatime_seconds = current_time - lastupdatedtime
|
||||
recalc = False
|
||||
if str(userid) != str(theuser) or deltatime_seconds > 3600:
|
||||
recalc = True
|
||||
else:
|
||||
recalc = False
|
||||
|
||||
options['userid'] = theuser
|
||||
|
||||
if r.birthdate:
|
||||
age = calculate_age(r.birthdate)
|
||||
else:
|
||||
worldclasspower = None
|
||||
age = 0
|
||||
|
||||
options['wcpower'] = wcpower
|
||||
options['wcdurations'] = wcdurations
|
||||
if theuser:
|
||||
options['userid'] = theuser
|
||||
|
||||
request.session['options'] = options
|
||||
|
||||
|
||||
result = request.user.is_authenticated() and ispromember(request.user)
|
||||
if result:
|
||||
@@ -3868,6 +3924,7 @@ def rankings_view2(request,theuser=0,
|
||||
'theuser':uu,
|
||||
'age':age,
|
||||
'sex':r.sex,
|
||||
'recalc':recalc,
|
||||
'weightcategory':r.weightcategory,
|
||||
'startdate':startdate,
|
||||
'enddate':enddate,
|
||||
|
||||
Reference in New Issue
Block a user