diff --git a/rowers/dataprep.py b/rowers/dataprep.py index 9dbfd80a..cae865fe 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -1274,7 +1274,7 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower', pass # recalculate power data - if workouttype == 'rower' or workouttype == 'dynamic' or workouttype == 'slides': + if workouttype in otetypes: try: if r.erg_recalculatepower: row.erg_recalculatepower() @@ -1282,6 +1282,7 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower', except: pass + averagehr = row.df[' HRCur (bpm)'].mean() maxhr = row.df[' HRCur (bpm)'].max() @@ -1451,6 +1452,33 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower', _ = update_wps(r, mytypes.otwtypes) _ = update_wps(r, mytypes.otetypes) + # set user running wps + if workouttype in otetypes: + cntr = Workout.objects.filter(user=r, workouttype__in=otetypes, + startdatetime__gt=tz.now()-tz.timedelta(days=42)).count() + new_value = (cntr*r.running_wps_erg + row.df['driveenergy'].mean())/(cntr+1.0) + # if new_value is not zero or infinite or -inf, r.running_wps can be set to value + if not (math.isnan(new_value) or math.isinf(new_value) or new_value == 0): + r.running_wps_erg = new_value + elif not (math.isnan(r.running_wps_erg) or math.isinf(r.running_wps_erg) or r.running_wps_erg == 0): + pass + else: + r.running_wps_erg = 600. + r.save() + + if workouttype in otwtypes: + cntr = Workout.objects.filter(user=r, workouttype__in=otwtypes, + startdatetime__gt=tz.now()-tz.timedelta(days=42)).count() + new_value = (cntr*r.running_wps_erg + row.df['driveenergy'].mean())/(cntr+1.0) + if not (math.isnan(new_value) or math.isinf(new_value) or new_value == 0): + r.running_wps = new_value + elif not (math.isnan(r.running_wps) or math.isinf(r.running_wps) or r.running_wps == 0): + pass + else: + r.running_wps = 400. + r.save() + + _ = myqueue(queuehigh, handle_calctrimp, w.id, f2, r.ftp, r.sex, r.hrftp, r.max, r.rest) diff --git a/rowers/templates/rower_simplepreferences.html b/rowers/templates/rower_simplepreferences.html index 7aa851fd..9accb6d9 100644 --- a/rowers/templates/rower_simplepreferences.html +++ b/rowers/templates/rower_simplepreferences.html @@ -40,41 +40,58 @@ - + + + + + + - + + + + + + + + + + + + +
ID Zone NameLower Boundary (Watt) Lower Boundary (Watt)ID Zone NameLower Boundary (Watt) Lower Boundary (Watt)Target SPMTarget SPM
IndoorOTWIndoorOTWIndoorOTW
1{{ user.rower.powerzones.0 }}
2{{ user.rower.powerzones.1 }} {{ user.rower.pw_ut2 }} {{ user.rower.pw_ut2|otwslack:user }}{{ user.rower.pw_ut2|target_spm_erg:user }}{{ user.rower.pw_ut2|target_spm_otw:user }}
3{{ user.rower.powerzones.2 }} {{ user.rower.pw_ut1 }} {{ user.rower.pw_ut1|otwslack:user }}{{ user.rower.pw_ut1|target_spm_erg:user }}{{ user.rower.pw_ut1|target_spm_otw:user }}
4{{ user.rower.powerzones.3 }} {{ user.rower.pw_at }} {{ user.rower.pw_at|otwslack:user }}{{ user.rower.pw_at|target_spm_erg:user }}{{ user.rower.pw_at|target_spm_otw:user }}
5{{ user.rower.powerzones.4 }} {{ user.rower.pw_tr }} {{ user.rower.pw_tr|otwslack:user }}{{ user.rower.pw_tr|target_spm_erg:user }}{{ user.rower.pw_tr|target_spm_otw:user }}
6{{ user.rower.powerzones.5 }} {{ user.rower.pw_an }} {{ user.rower.pw_an|otwslack:user }}{{ user.rower.pw_an|target_spm_erg:user }}{{ user.rower.pw_an|target_spm_otw:user }}
diff --git a/rowers/templatetags/rowerfilters.py b/rowers/templatetags/rowerfilters.py index 60a97c29..d6fe9ff1 100644 --- a/rowers/templatetags/rowerfilters.py +++ b/rowers/templatetags/rowerfilters.py @@ -1065,3 +1065,15 @@ def previousworkout(workout, user): def otwslack(value, user): r = Rower.objects.get(user=user) return int(value*(100.-r.otwslack)/100.) + +@register.filter +def target_spm_erg(value, user): + r = Rower.objects.get(user=user) + value = 1.0*value + return int(value*60/r.running_wps_erg) + +@register.filter +def target_spm_otw(value, user): + r = Rower.objects.get(user=user) + value = value*(100.-r.otwslack)/100. + return int(value*60/r.running_wps)