fai-civl / fai-airscore Goto Github PK
View Code? Open in Web Editor NEWAirScore - online paragliding / hanggliding GAP-based scoring software.
Home Page: https://airscore.cc/
License: GNU General Public License v3.0
AirScore - online paragliding / hanggliding GAP-based scoring software.
Home Page: https://airscore.cc/
License: GNU General Public License v3.0
Seems that pilots is seen as at the manually checked waypoint immediately, so gets full LPs.
Probably there's a routine in LPs calculation where I looks in pilots distance from goal, and manually checked pilot gets waypoint distance from the beginning.
Just testing tracklog submission from xcontest I found that for meduno task, with only 3 pilots submitted we get over 1000 points. Realistically there will be always more than 3 pilots.. I don't know if the low number has caused this but I would think 1000 ceiling would be the case no matter the number of pilots.
cannot find where to disable in the scoring or task settings.
AFAIK there's no paragliding scoring using it, so probably we drop it already if comp = pg
and put a with in the hg options
If tracks are picked up from disk for scoring, such as from
data/tracks/2017/dalbig17/t1_20170409
then is there no way to import the same comp a second time and to score it using a different set of tracks?
I've imported the same comp twice and both have the short name of "DALBIG17".
showing the map, without tracks does not work for Gemona. Strange thing is that it works for tasks at Santa/Cavallaria.. this works on server copy and my copy. They are 2 different comps/tasks with only the location in common. Is broken for Gemona on server and my copy.
Wondering if the waypoint file is the difference. Can't see an obvious difference in comp,region.task tables.
The other difference is that in both cases there are no tracks uploaded for cavallaria, while Gemona has tracks.
Cavallaria:
Gemona:
Please add some logging to say whether the command line scoring works or not. I'm currently scoring task 182 that exists but suspect that this is failing as I'm not seeing any outputs in the expected place at data/results
. The task 999 does not exist.
sid@161f45eaf862:/app/airscore/core$ python task_full_rescore.py 182
sid@161f45eaf862:/app/airscore/core$ python task_full_rescore.py 999
Have to look into the sql operation
When submitting a track to a task that is not yet set, message apears that the track is invalid (as track is being verified against the task, which is blank). Would be better to:
1)check if task is set
2) if not display message that track has been uploaded and it will be processed as soon as the task is set.
NomGoal is saved in int, we need percentage (int/100)
Corrected
It would be helpful for pilots when checking their track we display which turnpoints they made, we already display the distance and the track on the map but especially with cat's cradle tasks it can be hard to see if turnpoints were made. This would allow them to siganal an problems with the track more easily.
Investigating
when adding a second (or subsequent) track to the map, it would be useful to use a different colour for the flight so the 2 (or more) tracks can be easily distinguished.
Routine seems to work properly, creates the zip file file tracks, but once downloaded it's not readable, so I guess it is not a proper zip file.
Instead, if I download the file through FTP, it is correct, so something is wrong in the streaming procedure
when igc uploaded place orignal file in appropriate folder with an appropraite name and store this in tbleTrack.traFile (path+filename) (path relative to cgi folder).
Useful to have infobox or info on webpage of scores for when the lastupdate was run.
Can get xcontest script to write to a table taskid and date time of update.
Commented a lot of date checks in code, still seems not possible to upload tracks for old tasks.
I'll try to catch the problem in the next days.
I am thinking about implementing tolerances.
Let me know if you agree:
with tolerances > 0, every kind of waypoint a part from goal line and t/o is true if
radius -tolerance < coord < radius + tolerance
This should be true, isn't it?
Should we debug it or just write names in international standards?
May be useful to have a higher level that comp on the homepage. i.e. group the comps togeather - Lega - Race to goal - Other.
thoughts?
When processing a track and an error happens (something wrong with igc) there is no useful information. This will be a lot easier to provide when we use the flask front end. Otherwise we could use the logging to find out why the track could not be processed.
I followed the steps in the readme on the formula_dev
branch and hit a problem:
> docker-compose up flask-dev
# localhost:5000
flask.cli.NoAppException
flask.cli.NoAppException: While importing "autoapp", an ImportError was raised:
Traceback (most recent call last):
File "/home/sid/.local/lib/python3.8/site-packages/flask/cli.py", line 240, in locate_app
__import__(module_name)
File "/app/autoapp.py", line 3, in <module>
from airscore.app import create_app
File "/app/airscore/app.py", line 8, in <module>
from airscore import commands, public, user
File "/app/airscore/public/__init__.py", line 3, in <module>
from . import views # noqa
File "/app/airscore/public/views.py", line 15, in <module>
from airscore.extensions import login_manager
File "/app/airscore/extensions.py", line 10, in <module>
from flask_wtf.csrf import CSRFProtect
File "/home/sid/.local/lib/python3.8/site-packages/flask_wtf/__init__.py", line 17, in <module>
from .recaptcha import *
File "/home/sid/.local/lib/python3.8/site-packages/flask_wtf/recaptcha/__init__.py", line 2, in <module>
from .fields import *
File "/home/sid/.local/lib/python3.8/site-packages/flask_wtf/recaptcha/fields.py", line 3, in <module>
from . import widgets
File "/home/sid/.local/lib/python3.8/site-packages/flask_wtf/recaptcha/widgets.py", line 5, in <module>
from werkzeug import url_encode
ImportError: cannot import name 'url_encode' from 'werkzeug' (/home/sid/.local/lib/python3.8/site-packages/werkzeug/__init__.py)
PWCA calculates FTV against winner scores instead of task validity.
It has some advantages in "strange" situations, and measures pilots with pilots instead of a virtual maximum performance.
I'm looking into it to add this calculation case scoring is eq PWC
need to implement a full rescore script and connect to front end
To download IGC files from Xcontest we need to send a SITE or TAKEOFF parameter.
see here.
If we use site it is probably easier to manage but we could get more igc files from freeflyers. Takeoff is more specific.
we have a few possibilities:
Option 1
use competition location to define the SITE and get the site_id from a (new) table in our database.
Problem: competition location is free text. So we would need to change to a drop down list I guess.
Option 2
use the waypoint file to determine the SITE (called Region on the task)
Problem: we use the same file for more than one SITE sometimes such as Santa E/Cavallaria
We could save the same waypoints twice with different names.
Option 3
Map all the DXX waypoints (takeoffs) to the XContest takeoffs in a (new) table.
look up the takeoff (called 'start') in the task to find the takeoff_id in xcontest.
Problem: This is probably an error prone solution.. needs more setup when we upload waypoint files.
Option 4..
something else.
time is 0:00:00 for trastart. dev branch
Filtering by class (Open, serial etc) does not work in comp score page. (it works in task score page)
Takeoff waypoint - when set to same waypoint and same radius as SSS a pilot that later flew back to takeoff had his track counted from the second time (thereby giving him a very small distance).. Probably a rare issue (SSS was 400m!) so perhaps to keep in mind rather than "bugfix" if it is not simple.
So, for every point of my track, I check it against the next waypoint to see if I make it, that I check if my total distance increases, and compute LoP.
I think we should check distance to goal along the optimized route, and to do so we should check if distance deceases from next wpt opt point on the cylinder.
I did not check the code but I'm quite sure this is done differently.
Make xcontest script score task after submitting tracks
If we had export to *.fsdb
, the XML of FS, then we could do visual comparisons to a reference implementation of GAP, geoffwong/airscore#3 (comment)
The
*.fsdb
file contains inputs and outputs (the scores) as well as some other data of interest in checking the scores. If you are able to export from airscore to this FS XML format then flare-timing can be used to visually check those scores, as I've done for the 2018 XC Dalmatian Paragliding Open. For that comp, if you select a task, then under the [Score] tab you'll see tables and in these the black columns show values picked up from the*.fsdb
file and the difference to those same values as calculated byflare-timing
, acting here as a reference implementation.
If we're importing comps from *.fsdb
then can we opt to respect the folder layout of the tracks. Here's an example for Dalby 2017:
> pwd
/.../airscore/airscore/data/tracks/2017/dalby
> tree . --charset -d -L 1
.
|-- day\ five
|-- day\ four
|-- day\ one
|-- day\ seven
`-- day\ six
5 directories, 0 files
This would enable us to copy as-is the tracks when scoring with FS and scoring with airscore.
script to query DB and produce an spreadsheet/CSV/ or PDF? of pilot list for comp/task
Can we setup continuous integration that scores some set of well known competitions to confirm that the scores are reproducible?
Could we please refactor the task class, removing database stuff? One of the maintenance problems with FS is that the XML data access is pervasive. More generally, can we try to have more pure functions and reduce the use of state?
Cannot change from web interface, looking into it
As it stands, the takeoff waypoint has to have a radius in the task definition as we check flight has "exited" this waypoint just like a normal waypoint. if the radius is too small we risk invalidating some flights.
As Takeoff is used for distance calcs (and xcontest) we need it obviously but I wonder if we should be ignoring it for task verification.
I had a case of a pilot switching on his instrument just after takeoff and invalidating his flight (only by a few meters) (he had a second instrrument so all ok in the end) but I wonder if it is necessary to check this "exit".
when copying a previous task, the timings (window open /close, start etc) are also copied, however the date is part of time, we should ignore the date of the previous task and use the date of the new task. Easy to change once copied but perhaps easy to miss.
when dhv blank should be null. easy fix. dev branch
It is 1 for tasks that should be less.
Possibly only related to RTG scoring. When updating pilots wing in task sometimes pilot score goes to zero. Full rescore needed to resolve. - something to do with "UP" button
I would like to be able to score with airscore on the command line. Are there instructions on how to do that somewhere in the repo?
The master branch has a one word readme. Could you please change the default branch to one with the most up to date readme?
Seems that the problem is file size, over 1MB more or less generates error. I parsed very long log to 1 row every 5 or ten, and it works.
However, if we will consider mostly XC-Track / Contest tracks, that shouldn't be a factor.
Could we add a checklist of scoring features that are included or not?
Will look into this in the next days
zero leadpoints(under pwc LP forrmula) for pilots not making ESS. could be related to manually awarded problem. Also looking at track_verify_sr.pl line 1037 looks like LP calc, for land out pilots,is based on task end time and not last pilot in goal time..
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.