Class: TCXRead

Inherits:
Object
  • Object
show all
Defined in:
lib/tcxread.rb

Overview

The ‘TCXRead` class processes and analyzes data from a TCX (Training Center XML) file. It extracts key metrics such as distance, time, calories, ascent/descent, altitude, heart rate, power (watts), cadence, and speed from the activities recorded in the TCX file.

Reference (see also):

  1. Jr. Fister, L. Lukač, A. Rajšp, I. Fister, L. Pečnik, and D. Fister,

“A minimalistic toolbox for extracting features from sport activity files,” 2021 IEEE 25th International Conference on Intelligent Engineering Systems (INES), 2021, pp. 121-126, doi: 10.1109/INES52918.2021.9512927.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(file_path_or_xml) ⇒ TCXRead

Initializes the TCXRead object and parses the TCX file.

Parameters:

  • file_path_or_xml (String)

    The file path of the TCX file to process or a Nokogiri::XML document.



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/tcxread.rb', line 47

def initialize(file_path_or_xml)
  @doc = file_path_or_xml.is_a?(Nokogiri::XML::Document) ? file_path_or_xml : Nokogiri::XML(File.open(file_path_or_xml))
  @doc.root.add_namespace_definition('ns3', 'http://www.garmin.com/xmlschemas/ActivityExtension/v2')

  @total_distance_meters = 0
  @total_time_seconds = 0
  @total_calories = 0
  @total_ascent = 0
  @total_descent = 0
  @max_altitude = 0
  @average_heart_rate = 0
  @max_watts = 'NA'
  @average_watts = 'NA'
  @average_cadence_all = 0
  @average_cadence_biking = 0
  @average_speed_all = 0
  @average_speed_moving = 0

  parse
end

Instance Attribute Details

#average_cadence_allFloat (readonly)

Returns The average cadence in RPM.

Returns:

  • (Float)

    The average cadence in RPM.



40
41
42
43
# File 'lib/tcxread.rb', line 40

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_all, :average_cadence_biking,
:average_speed_all, :average_speed_moving

#average_cadence_bikingFloat (readonly)

Returns The average cadence for the whole activity in RPM.

Returns:

  • (Float)

    The average cadence for the whole activity in RPM.



40
41
42
43
# File 'lib/tcxread.rb', line 40

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_all, :average_cadence_biking,
:average_speed_all, :average_speed_moving

#average_heart_rateFloat (readonly)

Returns The average heart rate in beats per minute.

Returns:

  • (Float)

    The average heart rate in beats per minute.



40
41
42
43
# File 'lib/tcxread.rb', line 40

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_all, :average_cadence_biking,
:average_speed_all, :average_speed_moving

#average_speed_allFloat (readonly)

Returns The average speed for the whole activity in meters per second.

Returns:

  • (Float)

    The average speed for the whole activity in meters per second.



40
41
42
43
# File 'lib/tcxread.rb', line 40

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_all, :average_cadence_biking,
:average_speed_all, :average_speed_moving

#average_speed_movingObject (readonly)

Returns the value of attribute average_speed_moving.



40
41
42
43
# File 'lib/tcxread.rb', line 40

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_all, :average_cadence_biking,
:average_speed_all, :average_speed_moving

#average_wattsString, Float (readonly)

Returns The average power output in watts, or ‘NA’ if unavailable.

Returns:

  • (String, Float)

    The average power output in watts, or ‘NA’ if unavailable.



40
41
42
43
# File 'lib/tcxread.rb', line 40

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_all, :average_cadence_biking,
:average_speed_all, :average_speed_moving

#max_altitudeFloat (readonly)

Returns The maximum altitude reached in meters.

Returns:

  • (Float)

    The maximum altitude reached in meters.



40
41
42
43
# File 'lib/tcxread.rb', line 40

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_all, :average_cadence_biking,
:average_speed_all, :average_speed_moving

#max_wattsString, Float (readonly)

Returns The maximum power output in watts, or ‘NA’ if unavailable.

Returns:

  • (String, Float)

    The maximum power output in watts, or ‘NA’ if unavailable.



40
41
42
43
# File 'lib/tcxread.rb', line 40

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_all, :average_cadence_biking,
:average_speed_all, :average_speed_moving

#total_ascentFloat (readonly)

Returns The total ascent in meters.

Returns:

  • (Float)

    The total ascent in meters.



40
41
42
43
# File 'lib/tcxread.rb', line 40

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_all, :average_cadence_biking,
:average_speed_all, :average_speed_moving

#total_caloriesInteger (readonly)

Returns The total calories burned.

Returns:

  • (Integer)

    The total calories burned.



40
41
42
43
# File 'lib/tcxread.rb', line 40

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_all, :average_cadence_biking,
:average_speed_all, :average_speed_moving

#total_descentFloat (readonly)

Returns The total descent in meters.

Returns:

  • (Float)

    The total descent in meters.



40
41
42
43
# File 'lib/tcxread.rb', line 40

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_all, :average_cadence_biking,
:average_speed_all, :average_speed_moving

#total_distance_metersFloat (readonly)

Returns The total distance covered in meters.

Returns:

  • (Float)

    The total distance covered in meters.



40
41
42
# File 'lib/tcxread.rb', line 40

def total_distance_meters
  @total_distance_meters
end

#total_time_secondsFloat (readonly)

Returns The total time of activities in seconds.

Returns:

  • (Float)

    The total time of activities in seconds.



40
41
42
43
# File 'lib/tcxread.rb', line 40

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_all, :average_cadence_biking,
:average_speed_all, :average_speed_moving

Class Method Details

.load_file(file_or_path) ⇒ Object

Returns a TCXRead object from a File or file path.

Parameters:

  • file_or_path (String, File)

    The file path or a Fule of the TCX file to process.



70
71
72
# File 'lib/tcxread.rb', line 70

def self.load_file(file_or_path)
  TCXRead.new(Nokogiri::XML(file_or_path.is_a?(File) ? file_or_path : File.open(file_or_path)))
end

.parse(data) ⇒ Object

Returns a TCXRead object from raw TCX data.

Parameters:

  • data (String)

    TCX data to load.



76
77
78
# File 'lib/tcxread.rb', line 76

def self.parse(data)
  TCXRead.new(Nokogiri::XML(data))
end