openrowingmonitor/docs/concept2_prediction.py

86 lines
2.6 KiB
Python

def calculate_wattage(resting_heart_rate, maximum_heart_rate, heart_rate, base_power_output):
def get_zone_percentile(heart_rate, resting_heart_rate, maximum_heart_rate):
HRR = maximum_heart_rate - resting_heart_rate
zone = ((heart_rate - resting_heart_rate) / HRR) * 100
return round(zone, 2)
def get_hrr_range(zone):
if zone <= 65:
return (0, 65)
elif zone <= 70:
print("UT2 Zone")
return (65, 70)
elif zone <= 80:
print("UT1 Zone")
return (70, 80)
elif zone <= 85:
print("AT Zone")
return (80, 85)
elif zone <= 95:
print("TR Zone")
return (85, 95)
else:
print("AN Zone")
return (95, 100)
def get_power_range(zone):
if zone <= 65:
return (0, 45)
elif zone <= 70:
print("UT2 Zone")
return (45, 60)
elif zone <= 80:
print("UT1 Zone")
return (60, 70)
elif zone <= 85:
print("AT Zone")
return (70, 80)
elif zone <= 95:
print("TR Zone")
return (80, 105)
else:
print("AN Zone")
return (105, 115)
zone_percentage = get_zone_percentile(heart_rate, resting_heart_rate, maximum_heart_rate)
print("Zone: " + str(zone_percentage))
min_power, max_power = get_power_range(zone_percentage)
print("Min power: " + str(min_power))
print("Max power: " + str(max_power))
min_hrr, max_hrr = get_hrr_range(zone_percentage)
print("Min hrr: " + str(min_hrr))
print("Max hrr: " + str(max_hrr))
power_range = max_power - min_power
print("Power range: " + str(power_range))
hrr_range = max_hrr - min_hrr
print("HRR range: " + str(hrr_range))
print("Zone minus min hrr: " + str(zone_percentage - min_hrr))
# Calculate percentage of hrr range
hrr_percentage = ((zone_percentage - min_hrr) / hrr_range)
print("hrr %: " + str(hrr_percentage))
power_percentage = (min_power + hrr_percentage * power_range) / 100
print("Power percentage: " + str(power_percentage))
# Add base power output
# predicted_power = power_percentage + base_power_output
predicted_power = base_power_output / power_percentage
return round(predicted_power, 0)
# Example usage
resting_heart_rate = 58
maximum_heart_rate = 165
heart_rate = 132
base_power_output = 110
watts = calculate_wattage(resting_heart_rate, maximum_heart_rate, heart_rate, base_power_output)
print(f"Predicted power: {watts} watts")