F.I.S.T. Bar to Head Tube Calculator
++
All values are in millimeters!
+ +The calculator above is designed to help fitters trained in the F.I.S.T. tri + bike fit protocol to generate geometries for custom triathlon bikes. Note + that the inputs required to use this calculator include "stack" and "reach." + These values are described at length in our tri bike fit articles on Slowtwitch.com. +
++ Even if the fit is performed correctly, pitfalls loom. You must have the + tools to accurately find the stack and reach of the bike that fits under the + rider. The fitter is required to account for the stem length, stem pitch, + height of the stem clamp, headset upper stack, spacers under the stem if + any, and of course the choice of aerobar. He then must have an accurate way + of generating the stack and reach measures, using either a fit bike (best is + the bike made by Exit Cycling) that accurately generates these values + (taking into consideration negative reach if applicable), or he must use an external tool, such + as Serotta's X/Y tool. +
+TERMS OF USE
++ + This calculator consists of a set of trigonometric and geometric equations. + It solves math equations. That's all it does. There are no warranties + expressed or implied that these geometries cause a bike to be safe, or + comfortable, or powerful, or aerodynamic, or even be ridden; or indeed can + even be built. Should you build or cause to build a bike based on + geometries calculated by this generator, you do so at your own risk. You + agree to hold harmless Slowtwitch.com, its owners, employees and contractors + against all claims arising out of your use of this calculator. You agree to + assume all risk and liability associated with using this calculator. You + agree that the final determination of an appropriate geometry rests with you + and/or any customer for whom you may be building this bike, or causing it to + be built, and with the company building the bike. +
+
+',
+ 'google_analytics' => '
+',
+ 'main_site_url' => 'sub {
+ return \'https://www.slowtwitch.com\';
+}',
+ 'old_related_articles' => 'sub {
+ my $related = shift || return;
+ my @ids = split ("\n",$related);
+ my @loop;
+ my $db = $DB->table(\'Links\');
+ require Links::SiteHTML;
+ foreach my $id (@ids) {
+ my $link = $db->get($id);
+ $link = Links::SiteHTML::tags(\'link\',$link);
+ push @loop, $link;
+ }
+ return { related_articles_loop => \@loop };
+}',
+ 'poll' => '',
+ 'quantcast' => '
+
+
+
+',
+ 'related_articles' => 'sub {
+ my $related = shift || return;
+ my @ids = split ("\n",$related);
+ my @loop;
+ my $db = $DB->table(\'Links\');
+
+ my $linkid = shift;
+ my $cond = GT::SQL::Condition->new();
+ $cond->add(\'RelatedArticles\',\'like\', \'%\' . $linkid . \'%\');
+ my $sth = $db->select($cond);
+ my $seen = {};
+ while (my $link = $sth->fetchrow_hashref()) {
+ $link = Links::SiteHTML::tags(\'link\',$link);
+ my @rids = split("\n", $link->{RelatedArticles});
+ my $found = 0;
+ for (@rids) {
+ my $tid = $_;
+ $tid =~ s/\s+//g;
+ $found = 1 if ($tid == $linkid);
+ }
+ push @loop, $link if ($found);
+ $seen->{$link->{ID}} = 1 if ($found);
+ }
+
+ require Links::SiteHTML;
+ foreach my $id (@ids) {
+ next if ($seen->{$id});
+ my $rlink = $db->get($id);
+ if ($rlink) {
+ $rlink = Links::SiteHTML::tags(\'link\',$rlink);
+ push @loop, { %$rlink };
+ }
+ }
+ return { related_articles_loop => \@loop };
+}
+',
+ 'related_photos' => 'sub {
+ my $related = shift || return;
+ my @ids = split ("\n",$related);
+ my @loop;
+ use lib \'/home/slowtwitch/slowtwitch.com/cgi-bin/photos/admin\';
+ Links::init(\'/home/slowtwitch/slowtwitch.com/cgi-bin/photos/admin\');
+ require Plugins::SlideShow;
+ my $DBH = new GT::SQL \'/home/slowtwitch/slowtwitch.com/cgi-bin/photos/admin/defs\';
+ my $db = $DBH->table(\'Links\');
+ require Links::SiteHTML;
+ foreach my $id (@ids) {
+ my $link = $db->get($id);
+ my $fh = $db->file_info("Image1_thumbnail", $link->{ID});
+ my $fdir = $fh->File_Directory();
+ my $full_path = "$fh";
+ my $rel_path = $full_path;
+ $rel_path =~ s,$fdir,,;
+ $rel_path =~ s,%,%25,g;
+
+ $link->{Image1_thumbnail_path} = $rel_path;
+ $link = Links::SiteHTML::tags(\'link\',$link);
+ push @loop, $link;
+ }
+ return { related_photos_loop => \@loop };
+}',
+ 'replace_line_break' => 'sub {
+ my $text = shift;
+ $text =~ s/