This is a simple setup to show the core concepts required in order to time a stage race or series race with all races setup in the same event file.
This event consists of 3 stages which all contribute to an overall tour rank based on the sum of times from each stage. There is also a team element, with teams scored on the best 2 times for each stage, to be considered for the team time for a stage a participant must have completed each previous stage as well.
Each stage is only scored on gun time.
All participants are entered in to a single Contest.
Timing Points
A unique timing point is created for each stage finish, since we are only scoring based on gun time for each stage.
Subtract start time (T0) is unticked, since we will not be referecing or using T0 at all in this setup.
Results
We'll first look at the individual results required for each stage and the overall tour.
Stage Results
To make results easier to understand we create distinct blocks of results for each stage, and use a specific Result ID range for each block.
We use results blocks of 100 for each stage (Stage 1 = 100-199, Stage 2 = 200-299, Stage 3 =300-399)
For each stage we create a result for:
- A start time as a time of day, ID X01
- A finish detection as a minimum after the start time of day, ID X02
- A calculated stage time as the finish detection minus the start time, ID X00
By following this pattern across all stages it makes later setup easier since IDs all follow the same pattern.
Tour Results
We need to know the total time at the end of each stage, for this we create a block of results with the total time at the end of each stage.
The time after stage 1 is simply the stage 1 time, subsequent stages are calculated as the time at the end of the previous stage plus the stage time. In this way a rider must complete each stage in order to have a total time. If we were to use a TTSum() to add stage times together then somebody who only completed 2 stages would still have a tour time and is likely to have a faster time than those who did complete all 3 stages.
Rankings
Individual rankings are setup for each stage, with both overall and gender ranks, then additional for the tour after each stage as both overall and gender ranks.
Team Scores
In this setup each team has 3 members, using the club field to denote who should be in the same team.
For each stage the best 2 times from the team are used to calculate the team's stage time, and then a team tour time / rank is also calculated for each stage. For the tour time / ranking a team member must have competed in each previous stage to be considered.
We created 2 team scores for each stage, the first calculates the teams' stage time, and the second is used to rank teams with their tour time.
Team Stage Time
For team scores we follow the same ID grouping to identify each stage.
The filter is set that they must have a club and must also have a total time after the corresponding stage, since we calculated this so they will only have a total time if they have completed each stage this filters as such too. For example bib 1 completed stages 1 and 3, but because they did not complete stage 2 they are not counted for the team's stage 3 time.
The Max number of teams is set to 1 and show part. w/o time this ensures that all team members with the same club are grouped together, and all receive the team time / rank.
For number of participants the min and max are both set to 2, since we are only considering the best 2 times from each team.
Teams are formed based on Contest and Club, and grouped according to Contest, since this setup only uses a single Contest and does not use any gender specific teams.
The results use the sum of each participant's Stage 1 time, and teams are sorted with times ascending.
Team Tour Time
To ensure we have the tour time for each team member we first call each stage time in to a result for eligble participants. To make this simpler we created a user-defined function called IfPositive(x)
This will check if X is greater than zero and if it is, will return X.
In the results for each stage we used this to call each team stage time.
The total time after each stage is then calculated in the same way as the individual totals, with a new block of results adding each team stage time individually.
To now rank teams according to their total time after each stage we create a second team score for each stage.This uses the same basic settings, aggregation and grouping, but the number of participants is set to a min / max of 1. Since all team members will have the team total time in their results we only need to look at one team member for each.
Since we are only looking at 1 participant to get the time we simply take the sum of the TeamAfterStage time, with times sorted ascending.
Output Lists
We needed to create output lists for both stage results and the overall tour results, and again for individuals and teams. Here we show 2 different approaches to producing lists, each with their own advantages / disadvantages. Some balance could be found between the 2 types, for example using a gender filter and autorank in the detailed results.
Quick Setup
The quick setup lists make use of the Results Selector which creates an additional drop down to select which result we want to look at. The selector allows for the quickest setup of a single output list to show different results in a single list, also making for a simpler online results setup. It is however limited without creating some advanced formulas, these are used briefly in the team quick results.
The selector calls the relevant stage time, or team stage time with the corresponding label and AutoRank is used to display the stage rank.
For individual results we also apply a filter to the Gender, allowing to quickly see gender specific results, or an overall result.
Team results have an additional filter to only show 1 record per team filtering by team score position is equal to 1. However as we need to look at a different team score depending on the selector we use a function here to take the ID of the selected result to calculate which team score to reference.
This is simplest in the Team Tour Results where the selector looks at results 21-23, so we use a choose() function with [SelectorID]-20, which will return 1,2 or 3, to return the corresponding stage team score.
Detailed Setup
The detailed results includes a more thorough breakdown, with this setup we had to create separate overall / gender outputs for individual results, for each stage.
The breakdown outputs use the ranks which were setup for each stage, so ensures that the rank displayed is correct. This becomes particularly import with more complex stage races which may have more advanced requirements for ranks.
By using a specific list for each display needed we can more easily include additional fields such as gaptime() which rely on a result ID and rank ID, which could otherwise only be shown with a more complex formula.
For team stage results we apply a grouping for each team to show each eligible team member who finished the stage, here we also highlight the team members who were used for scoring. To do this we use a simple IF statement looking at TSx.Scored which is true if their time was used for the team calculation.
Within the tour results we're also able to show the time for each stage up to and including that point in time, making for a more detailed breakdown of each team's time.
Stage Race / Series Considerations
This setup is a simple example to show the principles of how to setup a stage race or series in a single event file. When dealing with such events there may be a number of other aspects to consider, these include;
- different start waves for each stage
- bunch time calculations (for cycling)
- age group calculations
- penalties / bonuses
- points per stage / total
- subtract start date (requires use of d:hh:mm:ss for stage start times)
The same concept can be applied to all of these but the complexity can increase exponentially with such races.