# USSA Alpine Masters ACE Scoring - Timing Data File Formats

The ACE Scoring software processes alpine ski race results data to publish race results in a variety of forms of interest to masters competitors and provide event scoring capabilities such as combined events based on world cup or race points scoring systems. The scoring software supports importing race results data in a variety of formats.

The supported timing data file formats that can be used to import results data into the scoring software are:

- (new addition coming in 2002-2003: FIS/USSA XML results format)
- USSA SkiData Format
- CSV Text Format

Ideally, the transfer of race result timing data from the race organizer's timing system into the scoring software should be simple and nearly automatic: export the timing data from the timing system, then run the scoring tools and load the race results data for the event. In practice, there can be many reasons why loading race results into the scoring software requires operator intervention: missing values in the timing data, inconsistent coding conventions for age classes, data only available in alternative formats such as a spreadsheet or a print report, etc. Suggestions for dealing with data anomalies is provided in the User's Guide documentation for the race scoring tools.

## Basic Input Requirements for Timing Data Values

To successfully load race result timing data into the scoring software, the following values are needed:

- name - the racer's first and last names
- bib - the bib number used by the racer in this event
- class - the age or ability class in which the racer competed
- gender - the racer's sex
- run result(s) - the racer's time or non-qualification status (DNS, DNF, DSQ) for each run

The timing data source may also contain other information, such as a racer's affiliation or license number, but the preceding are the essential values that must be present in some form to automate loading race results.

The racer's name can be extracted from several different value encoding approaches. The simplest and most reliable is a file format which contains separate fields for the first and last name. However, race data is frequently encoded with a single field containing the racer's name. In the latter case, the first/last name values are extracted from the input value according to whether the order is expected to be first-last or last-first. The first and last elements within a single-field name value can be separated by either space or a comma (e.g., "Smith Fred" or "Smith, Fred" for a last-first ordered name field value).

Bib number is required and must be an integer value. Missing, duplicate, or invalid bib numbers are considered error conditions which must be resolved before the timing data can be loaded.

The encoding of class and gender are frequently intermixed and in practice a wide variety of conventions are used. The two most common techniques are either to use a single field whose value consists of a class code representing both the gender and the class or to have separate fields which specify the gender and class or age. Age class can be inferred if the timing data contains gender and birthdate information; age is computed for the current competition season according to the birthdate and the starting year of the season, since a master's age class is determined by the racer's age on Dec. 31 of the season start year. Race data for events in which ability classes are used in addition to the standard age classes (i.e., open/elite/super seed classes) often entail special conventions to indicate the racers in the special classes - specific class codes may be used or supplementary "start group codes" may be used to augment the age class information.

Run result fields must be included for each run in the race, where a run result value can be either the racer's result time in the run or a non-qualification code which indicates their status (DNS, DNF, DSQ) in that run. A result time can be provided in any reasonable varation of seconds.hundredths or minutes:seconds.hundredths format. Total time for a 2-run race is not required; it is always computed from the first and second run result times and if provided in the data the input value is double-checked against the computed value to ensure that the data being loaded is consistent and correct.

## USSA SkiData Format

The SkiData format is a standard text-based file format defined by FIS and USSA specifications. It contains a considerable amount of information about an alpine skiing event. In addition to the basic competitor and timing data values, information about the venue, course and weather, officials, and other related items are encoded in a SkiData file.

The race timing system used for a scored USSA event must be certified by USSA as being able to generate a SkiData file. Race organizers are required to submit the results of a scored event to USSA in SkiData format, where the data is used as the basis of the national points system. Although masters races are not scored USSA events, it is common that race organizers for masters events also run scored USSA events and thus have a timing system which can export this data format.

The SkiData file format specifications can be obtained from the USSA Alpine web site, under the Race Software link. Certified race timing systems and contacts are also provided on this page.

The SkiData format organizes data into sections, marked by section numbers in square brackets. The contents of each section of the data file consist of data lines encoded as semicolon-separated values, with the first field always a tag number which identifies the data values encoded on that line. Blank lines and lines starting with the pound sign character (#) to denote a comment are ignored.

Section [1] in a SkiData file contains header information which identifies the file format. Section [2] contains general race information, notably the identifying properties of date, discipline, and location of the competition. Sections [6] and [7] contain competitor entries for the finishers and non-qualified racers, respectively.

The competitor entry format in the latter two sections consists of the same sequence of fields, with minor differences in the actual values depending on whether the racer was a qualifier who completed the race (a QLF entry in section [6]) or a non-qualifier (a registered competitor who either did not start or one who did not complete the race). Separate fields in a competitor entry contain bib, gender, first name, last name, birth year, and run result values.

Age class is inferred from the gender and birth year values in a competitor entry, with age computed based on the start year of the competition season in which the race was held. Ability group classes (the open/elite super seed classes) can be determined if a StartGroupCode mapping is specified when the timing data is loaded and a suitable start group code value is found in the Team/Nationality field. (Note: the latter is a possibly inappropriate heuristic based on some current conventions used with the Split Second timing software. Probably needs to be revisited or handled by suitable parameterization in the race data import tools.) If ability group classes were used but cannot be determined from values in the timing data, competitor results must be manually patched after the race results are loaded into the scoring software.

Note: As a workaround for anomalous SkiData values exported by the Split Second Timing 3.08 software from a race data file whose competitors were loaded from a "comps.txt" format competitor import file, a SkiData file in which there is no value for the racer first name will have the last name value checked to determine whether it can be parsed as a last-first value to obtain the expected pair of racer name elements.

## CSV Text Format

CSV text format is a simple text file format for storing sets of values. CSV stands for "comma-separated values". CSV format is widely supported by many programs and is a common interchange format for tabular data, such as what you might have in a spreadsheet or a database. If you think of the data as a table, each row in the table is encoded in one line of text in the data file, with the value of each column in the table written in order and separated by a comma. Variations on CSV format typically allow alternate delimiters (e.g., a tab separator rather than a comma as the delimiter character separating field values). CSV files optionally have an initial line which contains column header names.

Race timing data in CSV format must encode the values for each competitor in the race on a separate line in the file. The required values can be in any order; interpretation of the column order is specified when the data is loaded into the scoring tools. Blank lines and lines starting with the pound sign character (#) to denote a comment are ignored. Field values must be separated by a comma. Any values which contain a comma as part of the value must be wrapped in single or double quote characters (e.g. "Smith, Joe").

CSV race timing data is loaded by providing a specification of the column order of the data. Each column in the data containing a significant value must be identified by a reserved field name which denotes the value in the column. Arbitrary descriptive column names can be used for columns which are ignored; using a short descriptive name for the column contents and a convention such as " (ignored)" as a suffix can help you when you review the data during loading. Any column name not recognized as a reserved name is ignored.

#### Column Names for Significant Input Columns

The racer's name can be obtained from one or two fields. Reserved column names which identify racer name values are :

- LastName - last name
- FirstName - first name
- Name - name in last-first order
- NameFirstLast - name in first-last order

The column containing the racer's bib number must be identified by the reserved column name Bib.

The racer's gender and class is obtained a suitable combination of some or all of the following fields:

- Class - class code
- Gender - gender (M, F, or W)
- YearBorn - racer's birth year (yyyy)

Ability group classes (the open/elite super seed classes) can be determined from either suitable encodings in the Class field or by optionally indicating a StartGroupCode column along with a mapping of the start group code to the class name.

The racer's run results for a 2-run technical event are obtained from the FirstRun and SecondRun fields, with total time for both runs optionally available in the Total field. The racer's result in a 1-run competition is obtained from the Total field.

Optionally, the racer's USSA license number can be obtained from the column named USSANumber. If included, the license number should start with the single letter prefix denoting the competitor's division, followed by the 7-digit USSA license number. A foreign competitor's license number uses prefix letter "X" folllowed by their 6-digit FIS number. The competitors USSA division affiliation will be inferred from the license number information where possible.

#### Default Value Mechanism

To help deal with cases where the input data does not contain sufficient information to determine a racer's class, the _SetDefault mechanism is supported for specifying a default value to use for a missing Gender or Class name code. This mechanism is used to set and clear the default value for a series of competitor entries and is mainly useful when the result data is sorted into a reasonably well-organized order.

To specify the current gender to use for a series of racer entries, insert a line of the form:
_SetDefault,Gender,M
or:
_SetDefault,Gender,W
at the start of a sequence of entries for men or women. Depending on how the timing data is organized, you may need to insert a suitable Gender default specification at several places in the timing data file.

To specify the current class name code to use for a series of racer entries, insert a line of the form:
_SetDefault,Class,XXX
at the start of a sequence of entries for the competitors in a class, where XXX is the name of the class (e.g., W30 or F02). You will generally need to insert a suitable Class default specification at a number of places in the timing data file.

To remove the default value, insert a line of the form:
_SetDefault,Gender,
or:
_SetDefault,Class,
at the end of the sequence of competitors for which you wished to supply a missing value default.

### Example

Here are several examples of actual CSV race result entries, demonstrating some variations in field ordering and class coding notations.

# alternate class encodings for a W30 competitor in Far West
12,W02,FWM,Littenberg Heidi,58.82,56.16,
12,F30,,LITTENBERG Heidi,55.84,DNF,

# different field orders for a FW Open class competitor
12,FO,,LITTENBERG Heidi,56.63,56.30,112.93
WOP,12,Heidi Littenberg,48.22,50.70,1:38.92

(In this case, this competitor competed in both her standard W30 age class and in the Open seed class in the different races from which these timing entries were obtained, which is reflected in the various age class values.)

### Contact Information