Skip to content

Commit

Permalink
Fix average cadence - support both options
Browse files Browse the repository at this point in the history
  • Loading branch information
firefly-cpp committed Aug 17, 2024
1 parent 2554d47 commit 324fce2
Showing 1 changed file with 23 additions and 9 deletions.
32 changes: 23 additions & 9 deletions lib/tcxread.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
class TCXRead
attr_reader :total_distance_meters, :total_time_seconds, :total_calories,
:total_ascent, :total_descent, :max_altitude, :average_heart_rate,
:max_watts, :average_watts, :average_cadence
:max_watts, :average_watts, :average_cadence_all, :average_cadence_riding

def initialize(file_path)
@file_path = file_path
Expand All @@ -22,7 +22,8 @@ def initialize(file_path)
# use NA if no watts exist in the TCX file
@max_watts = 'NA'
@average_watts = 'NA'
@average_cadence = 0
@average_cadence_all = 0
@average_cadence_riding = 0

parse
end
Expand All @@ -39,7 +40,9 @@ def parse
@total_ascent, @total_descent, @max_altitude = calculate_ascent_descent_and_max_altitude_from_activities(activities)
@average_heart_rate = calculate_average_heart_rate_from_activities(activities)
@max_watts, @average_watts = calculate_watts_from_activities(activities)
@average_cadence = calculate_average_cadence_from_activities(activities)
cadence_results = calculate_average_cadence_from_activities(activities)
@average_cadence_all = cadence_results[:average_cadence_all]
@average_cadence_riding = cadence_results[:average_cadence_riding]
end

{ activities: activities }
Expand Down Expand Up @@ -268,23 +271,34 @@ def calculate_watts_from_activities(activities)
# Calculates the average cadence from the activities.
#
# @param activities [Array<Hash>] an array of activity hashes.
# @return [Float] the average cadence.
# @return [Hash] a hash containing average cadence including zeros and average cadence while biking.
def calculate_average_cadence_from_activities(activities)
total_cadence = 0
cadence_count = 0
total_cadence_all = 0
total_cadence_riding = 0
cadence_count_all = 0
cadence_count_riding = 0

activities.each do |activity|
activity[:laps].each do |lap|
lap[:tracks].flatten.each do |trackpoint|
cadence = trackpoint[:cadence]
total_cadence_all += cadence
cadence_count_all += 1

if cadence > 0
total_cadence += cadence
cadence_count += 1
total_cadence_riding += cadence
cadence_count_riding += 1
end
end
end
end

cadence_count > 0 ? total_cadence.to_f / cadence_count : 0.0
average_cadence_all = cadence_count_all > 0 ? total_cadence_all.to_f / cadence_count_all : 0.0
average_cadence_riding = cadence_count_riding > 0 ? total_cadence_riding.to_f / cadence_count_riding : 0.0

{
average_cadence_all: average_cadence_all,
average_cadence_riding: average_cadence_riding
}
end
end

0 comments on commit 324fce2

Please sign in to comment.