Start Processing

The system requires an accurate indication of when a StartGroup has actually started, as it will enable the ingenstion of events for that event/race/course. It is also important for determining the finish time.

In races where only position is important it is not that important to get the StartTime exactly right. An approximate time will still result in the correct placement of riders.

The simplest way to correctly set the StartGroup time is to do it manually. At the start of a race select the StartGroup and issue the Start command.

Writing down the TimeOfDay when the race started, capturing it with a mobile device or consulting video footage, allows the start time to be applied retrospectively.

Another approach, most suitable for track cycling, is to use a start gun connected to a Device configured as a StartLine. This will produce a StartEvent, which can then be assigned to the appropriate StartGroup or an individual participant in the start group for an Individual Start event.

Using post-processing it is possible to retrospecitvely determine when a group or rider started by determining the "last seen" algoritm on the start line and evaluating the linear progression along the course and extrapolating the progression backwards to the last time a rider (or the group of riders) were detected on the start line. See the Post-Processing section.

Start Trigger Processing

A trigger, received from any device, has to be mapped to the appropriate action based on its configuration. This section will specifically deal with a trigger from a device configured as a Start Line.

All triggers are consolidated in a trigger stream, which includes the DeviceId, Time and TriggerState (Triggered, NotTriggered). The data is then processed as follows;

  1. If the DeviceLocation is not active, nor a StartLine, ignore.

  2. Find the active Courses linked to the DeviceLocation.

    1. If such a Course if found, use

@startuml

start

:Lookup the Device associated with the Trigger;

if (Device is Active) then (no) stop endif

:Lookup the DeviceLocation; note right Use the active time for this device at the location. end note

if (DeviceLocation is Active) then (no) stop endif if (DeviceLocation is StartLine) then (no) stop endif

:Lookup Course;

stop

@enduml

Post-processing the start time

Last seen technique

Ingest data on the start line to determine the "Last seen" for each rider in the start group. It is likely that not all riders will be detected on the start line due the density of the bunch, and because some riders might already be beyond the start line. Start by considering only 50% of the group.

Take all registerd/checked-in users for the race/start group and order the "Last seen" timestamp from latest to earliest on that line. Work backwards from the last time, until 50% of the group has been seen, using a sliding window of at least 1 rider every 5 seconds (this will exclude riders that are experiencing a technicallity on the line, or did not start after all.

Once the 50% mark is reached it is considered a start. Then continue down the list until the earliest "Last seen" is found within the sliding window. That is the calculated start time.