Opened 3 days ago
Last modified 36 hours ago
#139 new enhancement
Report multiple matching 'triplet' legs where readings are too divergent
Reported by: | Wookey | Owned by: | Olly Betts |
---|---|---|---|
Priority: | minor | Milestone: | |
Component: | cavern | Version: | |
Keywords: | Cc: |
Description
Survex will concatenate repeat legs between the same stations, as is typical for paperless surveying (3 similar-enough readings makes a leg). However it currently assumes that the legs have already been checked for similarity, but of course it's possible for them to have significantly divergent readings and that should be reported as at least a warning.
This leads to questions about what tolerances to accept. Pockettopo, Sexytopo, Topodroid, DistoX2 and SAP6 all have slightly different criteria for matching legs. Survex already has defined SDs for the readings and should probably use those to derive 'close enough' criteria.
An example of a dataset containing repeat legs that do not actually match is 'cathedralchasm2.svx' in the Austria loser dataset: https://expo.survex.com/repositories/loser/.git/tree/caves-1623/264/cathedralchasm2.svx
A check based on the specified SDs makes sense.
Do we know the criteria for at least some of those instruments? It would be irritating for users if Survex's thresholds with non-custom SDs were stricter than the instruments apply, since then even if you take care to repeat any readings the instrument flagged you could get a warning from Survex which there's probably not a good way to resolve short of going back into the cave.
Perhaps if two readings are close and one isn't you would just comment out the odd one out (especially if most readings match but once distance is longer as that suggests the disto missed the target).
That also makes me wonder what we should do to the readings in case of mismatch - we could take the largest subset of the legs which match within the threshold which is like an automatic "comment out the odd one" - for 3 legs that would be 2 of 3), or we could subset for each instrument separately, or we could take the median value for each reading. The first one is nice in that the user can replicate it by commenting out that leg to get the same effect without the warning. All these require at least 3 readings though whereas the current averaging works for any number 2 and up. There's also the situation where we have more legs but no subset is in tolerance (taking the median at least does something that's probably reasonable there).
I think being able to do such checks will require temporarily storing the data for all the legs in the current group until we have all of them (currently we just update the average as we read each leg so we only need the leg structure we create anyway, the from and to station names, and a counter for how many legs we've averaged so far so we can scale the next average appropriately if there's another leg). That's possible to do but means this is a rather more involved change than just adding a threshold check might seem to be.