esitarski / CrossMgr

Cyclo Cross Management Application
MIT License
40 stars 20 forks source link

SeriesMgr support for series-of-serieses #93

Open kimble4 opened 1 year ago

kimble4 commented 1 year ago

BHPC events usually consist of 1-3 different types of races on each day. Historically, we've allocated points so that each day's racing scores a maximum of 1000 points, occasionally with different weightings for each race (so a 1-lap time trial might score 200 points, and a 2 hour race 800, for example.) This is easy enough to do in SeriesMgr with creative use of Points Structures.

The problem comes when we want to consider the best n results: Historically, we've taken the best 8 scores from a season of (usually) 12 events, so that people aren't at a significant disadvantage if they can't attend every event. Since SeriesMgr treats each race separately, we'd take the best ~16 from ~24 races. However, this fails to achieve the desired effect when races have different weightings; those who attend more events potentially get their score calculated using higher-weighted races.

I've found a slightly clunky work-around to achieve the desired historical behaviour: By creating a series for each day of racing, publishing this to Excel, changing the "Name" header to "LastName" (for all the category sheets) and then loading these into a series as if they were races. Obviously there's no finish time data, but that's not a problem as it only makes sense to do points-based scoring in the series-of-serieses.

This could be made more elegant if SeriesMgr could accept its own .cmn files as race input. But simply accepting "Name" as another synonym for "LastName" in Excel race input would simplify this workflow.

cclague commented 1 year ago

Is there a reason why you wouldn't use RaceDB for series scoring? - it's pretty flexible, and certainly allows for the best x events to count, plus you can create custom categories, as here: https://www.summercxresults.co.uk/RaceDB/Hub/SeriesCategoryResults/3/247/index.html

kimble4 commented 1 year ago

We looked at RaceDB a while ago in the hope that we might be able to ditch our crufty spreadsheet-based sign-on system, but the lack of an efficient way of handling all the CustomCategories needed to represent our overlapping HPV classes was a sticking point. (We'd really need a way to ask the rider to select several from a list of options at sign-on for each race, and the lack of a 'bike' field is suboptimal - our current system keeps track of the classes of each vehicle the rider has previously used).

I hadn't looked at the scoring capabilities of RaceDB at all. If it's more versatile than SeriesMgr, that might be an option, though the above work-around seems to work well.

kimble4 commented 1 year ago

By way of illustration, here's our current championship table, where each individual race is scored separately: http://www.bhpc.org.uk/Data/Sites/1/media/events/events22/BHPC_2022.html

And here's a series-of-serieses for each event: http://www.bhpc.org.uk/Data/Sites/1/media/events/events22/BHPC_2022_meta.html

Note in the former, David L'Hostis currently has 8155 points in the Partly-Faired class from his best 16 races over 9 events, while in the latter he is limited to the maximum of 8000 points for the best 8 events. I'm in a similar situation at the top of the Women's class. We want to encourage people to attend events, but not to the point where you can lose a championship because you didn't come to all of them.

(Obviously this wouldn't be a problem if the points weighting and number of races at each event were consistent, but that would be boring...)

cclague commented 1 year ago

I see your point (and It must be a nightmare scoring that!) - in RaceDB a rider can be in multiple categories, but the only options to distinguish them are age, sex, bib number, nation, state, licence code. Don't know if it's possible to fake any of those fields for your purposes? But I can see it might be tedious. How many categories can a rider be in? And is each event a single race?

kimble4 commented 1 year ago

We're successfully abusing the Team field to display the vehicle in CrossMgr (which is genuinely useful for identifying people during a race), though SeriesMgr only displays the one used in the last race. CrossMgr's CustomCategories handle the (potentially overlapping) race classes nicely, as long as there's a bit of automation to handle the sign-on process, which would otherwise be a complete nightmare.

Potentially a rider could be in most of the classes (some are hierarchical, with riders of un-faired machines also qualifying for the part-faired and fully-faired classes). I think a female junior riding to the event on a street-legal arm-powered tricycle would bag most of them :) Crucially, it's common for riders to change classes over the course of a season, and occasionally between races at an event (usually removing fairings or swapping bikes due to mechanical issues). More here if you're interested: http://www.bhpc.org.uk/how-to-race-with-bhpc.aspx

An event is usually two races (typically one in each direction, or a long and short race if the track only really works one way round), but might be three if we're not constrained by track time, or only one if we have to abandon our plans due to an emergency (a couple of our venues use the cycle track as emergency vehicle access to other sports facilities, so that sort of thing does happen). This means we don't know for sure the number of races until the end of the season.

kimble4 commented 1 year ago

Here's a minor change to SeriesMgr's parsing of Excel files that allows it to treat its own Excel output as a race: https://github.com/esitarski/CrossMgr/pull/103

This would be sufficient for what we need. I think changing the code to support true series-of-series scoring would be a lot of work for what must be a fairly niche thing to want to do.