initial import

This commit is contained in:
Sean C. Rhea
2006-09-06 23:59:42 +00:00
commit aae0d3c116
55 changed files with 4761 additions and 0 deletions

42
doc/Makefile Normal file
View File

@@ -0,0 +1,42 @@
CONTENT=$(wildcard *.content)
HTML=$(subst .content,.html,$(CONTENT))
TARBALLS=$(wildcard gc_*.tgz)
OTHER=logo.png sample.gp sample.png cpint.gp cpint.png gui-preview.png
all: $(HTML)
.PHONY: all clean install
clean:
rm -f $(HTML)
install:
rsync -avz -e ssh $(HTML) $(TARBALLS) $(OTHER) \
srhea.net:public_html/goldencheetah/
# ftp -u ftp://srhea@ftp.goldencheetah.org/ $(HTML) $(TARBALLS) $(OTHER)
contact.html: contact.content genpage.pl
./genpage.pl "Contact Us" $< > $@
contrib.html: contrib.content genpage.pl
./genpage.pl "Contributors" $< > $@
download.html: download.content genpage.pl
./genpage.pl "Download" $< > $@
faq.html: faq.content genpage.pl
./genpage.pl "Frequently Asked Questions" $< > $@
index.html: index.content genpage.pl
./genpage.pl "Introduction" $< > $@
license.html: license.content genpage.pl
./genpage.pl "License" $< > $@
search.html: search.content genpage.pl
./genpage.pl "Search" $< > $@
users-guide.html: users-guide.content genpage.pl
./genpage.pl "User's Guide" $< > $@

5
doc/contact.content Normal file
View File

@@ -0,0 +1,5 @@
<!-- $Id: contact.content,v 1.1 2006/05/16 14:24:50 srhea Exp $ -->
Please send all correspondence to
<a href="mailto:info@goldencheetah.org">info@goldencheetah.org</a>.

18
doc/contrib.content Normal file
View File

@@ -0,0 +1,18 @@
<!-- $Id: contrib.content,v 1.4 2006/09/06 04:07:18 srhea Exp $ -->
Sean Rhea bought a PowerTap Pro on April 20, 2006, and immediately set to
figuring out how to use it from his Mac Powerbook without using Virtual PC.
Within a week, he was able to download the raw data. Shortly thereafter, Russ
Cox asked what he was up to, and the two worked together to figure out the
packing format used. By May 4, they could reproduce the numbers given by the
PowerTap software except for minor discrepancies in the time values. David
Easter then pointed out how the checksum bytes in the download protocol were
used, and Sean Rhea coded up their combined discoveries into the two
utilities, <code>ptdl</code> and <code>ptunpk</code>.
<p>
Rob Carlsen helped get the serial port version of the PowerTap Pro working
with the Keyspan USB-to-serial adaptor. Scott Overfield helped me figure out
that we should be using the <code>/dev/cu.*</code> devices instead of the
<code>/dev/tty.*</code> ones.

12
doc/cpint.gp Normal file
View File

@@ -0,0 +1,12 @@
set title "Critical Power Output"
set xlabel "Interval Duration (MM:SS)"
set ylabel "Average Power (Watts)"
set mxtics 5
set mytics 2
set yrange [0:]
set xrange [0.021:120]
set logscale x
set xtics ("0:01.26" 0.021, "0:05" 0.08333, "0:12" 0.2, "1:00" 1, "5:00" 5, \
"12:00" 12, "30:00" 30, "60:00" 60, "120:00" 120)
plot 'cpint.out' noti with li lt 1
pause -1

BIN
doc/cpint.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

43
doc/download.content Normal file
View File

@@ -0,0 +1,43 @@
<!-- $Id: download.content,v 1.6 2006/08/11 20:21:03 srhea Exp $ -->
Right now we're only distributing tarballs of the Golden Cheetah source.
<p>
<center>
<table width="100%">
<tr>
<td width="20%"><i>Date</i></td>
<td width="25%"><i>Source</i></td>
<td><i>Description</i></td>
</tr>
<tr>
<td valign="top">Aug 11, 2006</td>
<td valign="top"><a href="gc_2006-08-11.tgz">gc_2006-08-11.tgz</a></td>
<td valign="top">ptdl now works with Keyspan USB-to-serial adaptor, after
debugging help from Rob Carlsen.
</td>
</tr>
<tr>
<td valign="top">May 27, 2006</td>
<td valign="top"><a href="gc_2006-05-27.tgz">gc_2006-05-27.tgz</a></td>
<td valign="top">Adds the <code>cpint</code> program for computing critical
power intervals and the <code>ptpk</code> program for converting from
PowerTuned data files (see the <a href="users-guide.html">User's
Guide</a>).</td>
</tr>
<tr>
<td valign="top">May 16, 2006</td>
<td valign="top"><a href="gc_2006-05-16.tgz">gc_2006-05-16.tgz</a></td>
<td valign="top">The first code release, containing <code>ptdl</code> and
<code>ptunpk</code>.</td>
</tr>
</table>
</center>
<p>
We hope to have anonymous CVS access set up soon.

62
doc/faq.content Normal file
View File

@@ -0,0 +1,62 @@
<!-- $Id: faq.content,v 1.4 2006/07/05 16:59:56 srhea Exp $ -->
<p>
<i>Why does Golden Cheetah only include command-line utilities? Where's the
GUI?</i>
<p>
Because this project is only a hobby of ours, and we haven't had time to
finish it yet. That said, we are working on it. Here's a teaser screenshot
to keep you interested:
<center>
<img src="gui-preview.png" alt="GUI Screen Shot" align="center">
</center>
<p>
<i>Does the output of <code>ptunpk</code> exactly match that of the software
included with the PowerTap?</i>
<p>
Almost. If you run it in compatibility mode, using the <code>-c</code>
option, it matches the PowerTap software's output exactly on everything but
the time values, at least for the five sample rides we've tried it with.
The times are a little off, but not by more than 0.1%, so we don't consider it
a big deal.
<p>
That said, the PowerTap software does some weird things, like converting from
kilometers to miles by multiplying by 0.62, but then reporting the miles
values with five digits after the decimal place. If you run
<code>ptunpk</code> without the <code>-c</code> option, it will unpack the
data in the way we think it should. The results mostly match up with the
official ones, and are almost certainly identical within the range of accuracy
of the device.
<p>
<i>I've downloaded and unpacked the data. Now what do I do with it?</i>
<p>
We highly recommend that you buy and read both Joe Friel's <i>The
Cyclist's Training Bible</i> and Allen and Coggan's <i>Training and
Racing with a Power Meter</i>. The former is the definitive book about all
aspects of cycling training (although we think he's off his rocker in the
chapter about diet), and the latter is the definitive book about power-based
training.
<p>
Also, if you buy either of these books through the links below, we'll get a
referral fee in return, helping us to support this web site. Thanks!
<center>
<iframe
src="http://rcm.amazon.com/e/cm?t=goldencheetah-20&o=1&p=8&l=as1&asins=B0006JHZ7Q&fc1=000000&IS2=1&lt1=_blank&lc1=0000ff&bc1=000000&bg1=ffffff&f=ifr"
style="width:120px;height:240px;" scrolling="no" marginwidth="0"
marginheight="0" frameborder="0"></iframe>
<iframe
src="http://rcm.amazon.com/e/cm?t=goldencheetah-20&o=1&p=8&l=as1&asins=1931382794&fc1=000000&IS2=1&lt1=_blank&lc1=0000ff&bc1=000000&bg1=ffffff&f=ifr"
style="width:120px;height:240px;" scrolling="no" marginwidth="0"
marginheight="0" frameborder="0"></iframe>
</center>

BIN
doc/gc_2006-05-16.tgz Normal file

Binary file not shown.

BIN
doc/gc_2006-05-25.tgz Normal file

Binary file not shown.

BIN
doc/gc_2006-05-27.tgz Normal file

Binary file not shown.

BIN
doc/gc_2006-08-11.tgz Normal file

Binary file not shown.

131
doc/genpage.pl Executable file
View File

@@ -0,0 +1,131 @@
#!/usr/bin/perl -w
#
# Copyright (c) 2001-2003 Regents of the University of California.
# All rights reserved.
#
# See the file LICENSE included in this distribution for details.
#
# $Id: genpage.pl,v 1.3 2006/07/05 16:59:56 srhea Exp $
use strict;
my $title = shift;
my $content_file = shift;
open (FILE, "$content_file") or die "Could not open $content_file";
print<<EOF;
<!--
Copyright (c) 2006 Sean C. Rhea (srhea\@srhea.net)
All rights reserved.
This file was automatically generated by genpage.pl. To change it,
please edit the content file, $content_file.
-->
<html>
<head>
<title>Golden Cheetah: Power for the Masses</title>
</head>
<body text="#000000"
link="#5e431b"
vlink="#996e2d"
alink="#000000"
bgcolor="#ffffff">
<table width="95%" border="0" width="100%" cellspacing="10">
<tr>
<!-- Left Column -->
<td width="150" valign="top">
<img src="logo.png" width="128" height="184" alt="Picture of Cheetah">
<p> <b><a href="index.html">Introduction</a></b>
<br> <b><a href="users-guide.html">User's Guide</a>
<br> <b><a href="faq.html">FAQ</a>
<br> <b><a href="license.html">License</a></b>
<br> <b><a href="download.html">Download</a></b>
<br> <b><a href="contrib.html">Contributors</a></b>
<br> <b><a href="search.html">Search</a></b>
<br> <b><a href="cgi-bin/mailman/listinfo/golden-cheetah-users">Mailing List</a></b>
<p>
<script type="text/javascript"><!--
google_ad_client = "pub-2993461533095312";
google_ad_width = 120;
google_ad_height = 240;
google_ad_format = "120x240_as";
google_ad_type = "text";
google_ad_channel ="";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "5E431B";
google_color_url = "996E2D";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</td>
<!-- End of Left Column -->
<!-- Right Column -->
<td align="left" valign="top">
<table width="100%" cellspacing="10">
<tr align="center"><td>
<p>
<p>
<big><big><big><b><font face="arial,helvetica,sanserif">Golden
Cheetah</font></b></big></big></big>
<br>
<big><font face="arial,helvetica,sanserif">
Power for the Masses
</font></big>
<p>
</td></tr>
<tr><td bgcolor="#5e431b">
<font color="#f8d059" face="arial,helvetica,sanserif">
<big><strong>$title</strong></big>
</font>
</td></tr>
<tr><td>
EOF
my $match = "\\\$" . "Id:.* (\\d\\d\\d\\d\\/\\d\\d\\/\\d\\d "
. "\\d\\d:\\d\\d:\\d\\d) .*\\\$";
my $last_mod;
while (<FILE>) {
if (m/$match/) {
$last_mod = $1;
}
print;
}
close (FILE);
if (defined $last_mod) {
print "<p><hr><em>Last modified $last_mod.</em>\n";
}
print<<EOF;
</tr></td>
</table>
</td>
<!-- End of Right Column -->
</tr>
</table>
</body>
</html>
EOF

BIN
doc/gui-preview.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 KiB

26
doc/index.content Normal file
View File

@@ -0,0 +1,26 @@
<!-- $Id: index.content,v 1.1 2006/05/16 14:24:50 srhea Exp $ -->
<p>
The goal of the Golden Cheetah project is to develop a software package that:
<ul>
<li>Downloads ride data from power measurement devices, such as the <a
href="http://www.cycleops.com/products/powertap.htm">CycleOps PowerTap</a>,
the <a href="http://www.ergomo.net/Home-_14.html">ergomo</a>, the <a
href="http://www.polarusa.com/consumer/powerkit/default.asp">Polar
Electro</a>, and the <a href="http://www.srm.de/usa/index.html">SRM Training
System</a><p>
<li>Helps athletes analyze downloaded data with features akin to commercial
power analysis software, such as <a href="http://cyclingpeaks.com/">Cycling
Peaks</a><p>
<li>Works on non-Microsoft Windows-based systems, such as FreeBSD, Linux, and
Mac OS X<p>
<li>Is available under an
<a href="http://www.opensource.org/docs/definition.php">Open Source</a>
license
</ul>
<p>
In short, we believe that cyclists should be able to download their power data
to the computer of their choice, analyze it in whatever way they see fit, and
share their methods of analysis with others.

68
doc/license.content Normal file
View File

@@ -0,0 +1,68 @@
<!-- $Id: license.content,v 1.1 2006/05/16 14:24:50 srhea Exp $ -->
Golden Cheetah is licensed under the
<a href="http://www.gnu.org/copyleft/gpl.html">GNU General Public License</a>,
the preamble of which states:
<blockquote>
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
</P>
<P>
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
</P>
<P>
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
</P>
<P>
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
</P>
<P>
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
</P>
<P>
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
</P>
<P>
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
</blockquote>
For the full text of the license, please click the link above.

BIN
doc/logo.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
doc/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 B

8
doc/sample.gp Normal file
View File

@@ -0,0 +1,8 @@
set title "May 3, 2006 16:24:04"
set xlabel "Ride Time (minutes)"
plot \
"< awk '/^[^#]/ {print $1, $4}' 2006_05_03_16_24_04.dat | ./smooth.pl 10" ti 'Watts' wi li, \
"< awk '/^[^#]/ {print $1, $7}' 2006_05_03_16_24_04.dat | ./smooth.pl 10" ti 'Heartrate' wi li, \
"< awk '/^[^#]/ {print $1, $6}' 2006_05_03_16_24_04.dat | ./smooth.pl 10" ti 'Cadence' wi li, \
"< awk '/^[^#]/ {print $1, $3}' 2006_05_03_16_24_04.dat | ./smooth.pl 10" ti 'MPH' wi li
pause -1

BIN
doc/sample.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

42
doc/search.content Normal file
View File

@@ -0,0 +1,42 @@
<!-- $Id: search.content,v 1.1 2006/05/16 15:46:42 srhea Exp $ -->
<center>
<!-- SiteSearch Google -->
<form method="get" action="http://www.google.com/custom" target="_top">
<table border="0" bgcolor="#ffffff">
<tr><td nowrap="nowrap" valign="top" align="left" height="32">
<a href="http://www.google.com/">
<img src="http://www.google.com/logos/Logo_25wht.gif" border="0" alt="Google"
align="middle"></img></a>
<br/>
<input type="hidden" name="domains" value="goldencheetah.org"></input>
<input type="text" name="q" size="60" maxlength="255" value=""></input>
<input type="submit" name="sa" value="Search"></input>
</td></tr>
<tr>
<td nowrap="nowrap">
<table>
<tr>
<td>
<input type="radio" name="sitesearch" value="" checked="checked"></input>
<font size="-1" color="#000000">Web</font>
</td>
<td>
<input type="radio" name="sitesearch" value="goldencheetah.org"></input>
<font size="-1" color="#000000">goldencheetah.org</font>
</td>
</tr>
</table>
<input type="hidden" name="client" value="pub-2993461533095312"></input>
<input type="hidden" name="forid" value="1"></input>
<input type="hidden" name="ie" value="ISO-8859-1"></input>
<input type="hidden" name="oe" value="ISO-8859-1"></input>
<input type="hidden" name="safe" value="active"></input>
<input type="hidden" name="cof"
value="GALT:#008000;GL:1;DIV:#336699;VLC:663399;AH:center;BGC:FFFFFF;LBGC:336699;ALC:0000FF;LC:0000FF;T:000000;GFNT:0000FF;GIMP:0000FF;FORID:1;"></input>
<input type="hidden" name="hl" value="en"></input>
</td></tr></table>
</form>
<!-- SiteSearch Google -->
</center>

222
doc/users-guide.content Normal file
View File

@@ -0,0 +1,222 @@
<!-- $Id: users-guide.content,v 1.5 2006/05/27 16:32:46 srhea Exp $ -->
Currently, Golden Cheetah consists of several command line utilities:
<code>ptdl</code>, which downloads ride data from a PowerTap Pro version 2.21
cycling computer, <code>ptunpk</code>, which unpacks the raw bytes downloaded
by <code>ptdl</code> and outputs more human-friendly ride information, and
<code>cpint</code>, which computes your critical power (see below). All three
are written in simple C code but have only been tested on Mac OS X so far.
We've also written several Perl scripts to help you graph and summarize the
data.
<p>
<big><font face="arial,helvetica,sanserif">
Extracting the Data
</font></big>
<p>
To use <code>ptdl</code>, you'll first need to install
<a href="http://www.ftdichip.com/Drivers/VCP.htm">the drivers</a> for the
FTDI chip the PowerTap Pro USB Downloader uses. Once these are installed, you
should be able to just run <code>ptdl</code> without arguments:
<pre>
$ ./ptdl
Reading from /dev/tty.usbserial-3B1.
Reading version information...done.
Reading ride time...done.
Writing to 2006_05_15_11_34_03.raw.
Reading ride data..............done.
$ head -5 2006_05_15_11_34_03.raw
57 56 55 64 02 15
60 06 05 0f 6b 22
40 08 30 00 00 00
86 0e 74 99 00 55
81 06 77 a8 40 55
</pre>
<p>
If everything goes well, <code>ptdl</code> will automatically detect the
device (<code>/dev/tty.usbserial-3B1</code> in the example above), read the
ride data from it, and write to a file named by the date and time at which the
ride started (<code>2006_05_15_11_34_03.raw</code> in the example; the format
is YYYY_MM_DD_hh_mm_ss.raw).
<p>
<big><font face="arial,helvetica,sanserif">
Unpacking the Data
</font></big>
<p>As shown by the <code>head</code> command above, the data in this
<code>.raw</code> file is just the raw bytes that represent your ride. To
unpack those bytes and display them in a more human-friendly format, use
<code>ptunpk</code>:
<pre>
$ ./ptunpk 2006_05_15_11_34_03.raw
$ head -5 2006_05_15_11_34_03.dat
# Time Torq MPH Watts Miles Cad HR Int
# 2006/5/15 11:34:03 1147707243
# wheel size=2096 mm, interval=0, rec int=1
0.021 13.1 2.450 43 0.00781 0 85 0
0.042 13.4 5.374 97 0.00912 64 85 0
</pre>
<code>ptunpk</code> takes a <code>.raw</code> file for input and writes a
<code>.dat</code> file as output. Lines that start with an ampersand ("#") in
this file are comments; the other lines represent measured samples. As shown
by the first comment in the file, the columns are: time in minutes, torque in
Newton-meters, speed in miles per hour, power in watts, distance in miles,
cadence, heart rate, and interval number.
<p>
<big><font face="arial,helvetica,sanserif">
Summarizing the Data
</font></big>
<p>
We hope to have a graphical interface to these programs soon, but until then,
the only summarization tools we have are command-line programs. The script
<code>intervals.pl</code> summarizes the intervals performed in a workout:
<small>
<pre>
$ ./intervals.pl 2006_05_03_16_24_04.dat
Power Heart Rate Cadence Speed
Int Dur Dist Avg Max Avg Max Avg Max Avg Max
0 77:10 19.3 213 693 134 167 82 141 16.0 27.8
1 4:03 0.9 433 728 175 203 84 122 13.0 18.8
2 7:23 1.0 86 502 135 179 71 141 16.0 28.2
3 4:27 0.9 390 628 170 181 70 100 12.0 17.6
4 8:04 0.9 60 203 130 178 50 120 18.0 30.1
5 4:30 0.9 384 682 170 179 79 113 11.0 18.6
6 8:51 1.1 53 245 125 176 70 141 8.0 26.6
7 2:48 0.4 400 614 164 178 62 91 8.0 13.6
8 7:01 1.1 46 268 128 170 71 141 12.0 28.8
9 4:30 0.9 379 560 168 180 81 170 11.0 18.3
10 28:46 6.5 120 409 128 179 79 141 15.0 31.0
</pre>
</small>
<p>
In the example above, a rider performed five hill intervals, four of which
climbed a medium size hill that took about 4-5 minutes to climb (intervals
1, 3, 5, and 9), and one on a shorter hill that took just under 3 minutes to
climb (interval 7).
<p>
<big><font face="arial,helvetica,sanserif">
Graphing the Data
</font></big>
<p>
For graphing the data in the ride, we use <code>smooth.pl</code> and the
<code>gnuplot</code> program. You can use <a href="sample.gp">sample.gp</a>
to graph the power, heart rate, cadence, and speed for the hill workout above:
<pre>
$ gnuplot sample.gp
</pre>
<img align="center" alt="Sample Plot" src="sample.png">
<p>
<big><font face="arial,helvetica,sanserif">
Finding Your "Critical Power"
</font></big>
<p>
Joe Friel calls the maximum average power a rider can sustain over an interval
the rider's "critical power" for that duration. The <code>cpint</code>
program automatically computes your critical power over all interval lengths
using the data from all your past rides. This program looks at all the
<code>.raw</code> files in a directory, calculating your maximum power over
every subinterval length and storing them in a corresponding <code>.cpi</code>
file. It then combines the data in all of the <code>.cpi</code> files to find
your critical power over <i>all</i> subintervals of <i>all</i> your rides.
<pre>
$ ls *.raw
2006_04_28_10_48_33.raw 2006_05_10_17_08_30.raw 2006_05_18_16_32_53.raw
2006_05_03_16_24_04.raw 2006_05_13_10_29_12.raw 2006_05_21_12_25_07.raw
2006_05_05_10_52_05.raw 2006_05_15_11_34_03.raw 2006_05_22_18_28_47.raw
...
2006_05_09_09_54_29.raw 2006_05_17_16_44_35.raw
$ ./cpint
Compiling data for ride on Fri Apr 28 10:48:33 2006...done.
Compiling data for ride on Sat Apr 29 10:07:48 2006...done.
Compiling data for ride on Sun Apr 30 14:00:17 2006...done.
...
Compiling data for ride on Mon May 22 18:28:47 2006...done.
0.021 1264
0.042 1221
0.063 1216
...
5.019 391
...
171.885 163
</pre>
<p>
Over this set of rides, the rider's maximum power is 1264 watts, achieved over
an interval of 0.021 minutes (1.26 seconds). Over all five-minute
subintervals, he has achieved a maximum average power of 391 watts. The
longest ride in this set was 171.885 minutes long, and he averaged 163 watts
over it.
<p>
We can graph the output of <code>cpint</code> using <code>gnuplot</code> with
<a href="cpint.gp">cpint.gp</a>:
<pre>
$ ./cpint > cpint.out
$ gnuplot cpint.gp
</pre>
<img src="cpint.png">
<p>
The first time you run <code>cpint</code> it will take a while, as it has to
analyze all your past rides. On subsequent runs, however, it will only
analyze new files.
<p><i>Training and Racing with a Power Meter</i> (see the <a
href="faq.html">FAQ</a>) contains a table of critical powers of Cat 5 cyclists
up through international pros at interval lengths of 5 seconds, 1 minute, 5
minutes, and 60 minutes. Using this table and the <code>cpint</code> program,
you can determine whether you're stronger than others in your racing category
at each interval length and adapt your training program accordingly.
<p>
<big><font face="arial,helvetica,sanserif">
Converting Old Data
</font></big>
<p>
If you've used the PowerTuned software that comes with the PowerTap you may
have lots of old ride data in that program that you'd like to include in your
critical power graph. You can convert the <code>.xml</code> files that
PowerTuned produces to <code>.raw</code> files using the <code>ptpk</code>
program:
<p>
<pre>
$ ./ptpk 2006_04_27_00_23_28.xml
$ head -5 2006_04_27_00_23_28.raw
57 56 55 64 02 15
60 06 04 7b 80 17
40 08 30 00 00 00
84 04 00 24 00 ff
83 03 00 d7 00 ff
</pre>
<p>
<code>ptpk</code> assumes the input <code>.xml</code> file was generated with
a wheel size of 2,096 mm and a recording interval of 1. If this is not the
case, you should specify the correct values with the <code>-w</code> and
<code>-r</code> options.
<p>
Note that the PowerTuned software computes the output speed in miles per hour
by multiplying the measured speed in kilometers per hour by 0.62, and the
miles per hour values in a <code>.xml</code> file are thus only accurate to
two significant figures, even though they're printed out to three decimal
places. Because of this limitation, the sequence <code>ptpk</code>,
<code>ptunpk</code> is not quite the identity function; in particular, the
wattage values from <code>ptpk</code> may only be accurate to two significant
digits.