{"calculator":{"slug":"xc-track-converter","math":{"href":"https://www.tracktoolspro.com/api/calculators/xc-track-converter","jsonPointer":"/calculator/math","version":"2026-10-21.1","implementationVersion":"b5a8aca7b85361476e0321a08b7fa5f516fc9535","scope":"Canonical HTTP function and documented corresponding mounted-form math. This is public inspectable documentation, not access control or independent empirical validation.","unitNotation":"Input paths use [] and *; output paths are JSON Pointers with * (one segment) and ** (descendants). Empty output path denotes scalar result. Units apply to numeric quantities or explicitly described numeric strings; labels/statuses/booleans are dimensionless. More specific units, including count/index exceptions, override broad patterns.","interfaceNotes":["HTTP input is described by the adjacent inputSchema. The original handlers may accept numeric strings; this metadata adds no validation.","Mounted forms accept displayed clock/unit strings and enforce their own limits. Mounted tools limit strings to 200 characters and numeric parts to magnitude 1000000. Do not assume mounted/API input interchangeability.","Some legacy extreme/invalid tuples can produce null/empty results or nonfinite numbers serialized as null. Those are unavailable answers, not exact numerical predictions. Per-calculator domain describes the intended mathematical inputs."],"kind":"heuristic","implementationFiles":["lib/formulas/xc-conversion.ts","lib/formulas/riegel.ts"],"equations":["trackToXc: flatEquivalentSeconds=seconds*(toMeters/fromMeters)^exponent (identity at same distance); convertedSeconds=flatEquivalentSeconds*courseFactor.","xcToTrack: flatEquivalentSeconds=seconds/courseFactor at source distance; convertedSeconds=flatEquivalentSeconds*(toMeters/fromMeters)^exponent.","courseDeltaSeconds is the course-only difference; perMileDeltaSeconds=courseDeltaSeconds*1609.34/(toMeters in forward, fromMeters in reverse)."],"inputUnits":{"seconds":"s","fromMeters":"m","toMeters":"m","direction":"enum/string (dimensionless)","course":"enum/string (dimensionless)","exponent":"dimensionless"},"outputUnits":{"/inputSeconds":"s","/convertedSeconds":"s","/factor":"dimensionless","/courseDeltaSeconds":"s","/perMileDeltaSeconds":"s/mile","/flatEquivalentSeconds":"s"},"domain":["Positive finite time/distances and known course/direction; HTTP exponent>=1, default 1.06; invalid tuples return null."],"rounding":["Raw IEEE-754 numbers; the mounted page formats clocks separately."],"assumptions":["Uses the entered values and the selected convention; this documentation does not strengthen existing validation."],"limitations":["Course multipliers1.03/1.06/1.08/1.10 are coaching heuristics, not independent course calibration. Fast/flat is not identity. No qualification equivalent."],"mountedPageNotes":[],"workedExamples":[{"input":{"seconds":900,"fromMeters":5000,"toMeters":5000,"direction":"trackToXc","course":"average"},"expected":{"/convertedSeconds":954},"absoluteTolerance":1e-8,"note":"Illustrative canonical-handler result; not independent validation of an empirical model."}],"constantsAndTables":{"courseFactors":{"fast":1.03,"average":1.06,"hilly":1.08,"championship":1.1},"defaultExponent":1.06,"metersPerMile":1609.34},"sources":[{"title":"Canonical HTTP binding at the documented implementation revision","url":"https://github.com/wickthumb/track_tools_pro_marketing/blob/b5a8aca7b85361476e0321a08b7fa5f516fc9535/lib/calculator-functions.ts","note":"Existing calculation handler; math metadata is additive."},{"title":"lib/formulas/xc-conversion.ts","url":"https://github.com/wickthumb/track_tools_pro_marketing/blob/b5a8aca7b85361476e0321a08b7fa5f516fc9535/lib/formulas/xc-conversion.ts","note":"Primary implementation source for these equations/tables, not a claim of scientific calibration."},{"title":"lib/formulas/riegel.ts","url":"https://github.com/wickthumb/track_tools_pro_marketing/blob/b5a8aca7b85361476e0321a08b7fa5f516fc9535/lib/formulas/riegel.ts","note":"Primary implementation source for these equations/tables, not a claim of scientific calibration."},{"title":"Riegel, Athletic Records and Human Endurance,1981","url":"https://rrtc.net/Articles/ARHE.pdf","note":"Riegel 1981 primary article; fitted exponents vary. Product default 1.06 is an explicit convention, not a universal accuracy claim. Retained source reviewed 2026-10-16."}]},"annotations":{"readOnlyHint":true,"consequentialHint":false},"name":"XC to Track Time Converter","description":"This XC to track conversion tool uses the settled coaching conventions: track to XC multiplies by a course factor (×1.03 fast and flat, ×1.06 average, ×1.08 hilly, ×1.10 muddy championship courses), and XC to track divides by the same factor so the conversion is a true inverse. Distance changes — like track 5K to XC 8K — are combined with the Riegel formula. Every result shows the seconds-added equivalent and per-mile delta, because terrain, footing, and weather make every cross country estimate approximate.","category":"Cross Country","method":"POST","endpoint":"/api/calculators/xc-track-converter","page":"/calculators/xc-track-converter","inputSchema":{"type":"object","required":["seconds","fromMeters","toMeters","direction","course"],"properties":{"seconds":{"type":"number","description":"Input time in seconds.","minimum":0},"fromMeters":{"type":"number","description":"Input distance in meters.","minimum":0},"toMeters":{"type":"number","description":"Output distance in meters.","minimum":0},"direction":{"type":"string","description":"Conversion direction.","enum":["trackToXc","xcToTrack"],"default":"trackToXc"},"course":{"type":"string","description":"XC course difficulty.","enum":["fast","average","hilly","championship"],"default":"average"},"exponent":{"type":"number","description":"Optional Riegel exponent.","default":1.06}}},"example":{"seconds":900,"fromMeters":5000,"toMeters":5000,"direction":"trackToXc","course":"average"}}}