Testing Requested alternate calibration calculation

This uses a different way of calculating the anchor point locations from the points measured. It is MUCH faster (deliberate pauses set in the system take more time than the calculations) and instead of a ‘fitness’ score, it provides ± distance error bars for each measurement.

It also throws out measurements that are in significant disagreement from the rest of them.

To test this, load
index.html.gz (127.0 KB)
in the preferences menu (under the top right menu button) there is a new option for calibration algorithm, it defaults to Maslow Classic, but there is an option Gauss-Newton… that enables the new calculations.

  1. save your maslow.yaml file
  2. load the new index.html
  3. restart (it’s possible that just reloading the page may work, but browsers cache stuff
  4. do a calibration using Maslow-Classic
  5. save the logs
  6. save your maslow.yaml file
  7. do a calibration using Gauss-Newton
  8. save the logs
  9. save your maslow.yaml file

If the new calculations don’t work, calibration may hang or start throwing errors. If this happens, just restart the maslow (save the logs first) and go back to your original maslow.yaml file (rebooting after loading it)

what we will then want to do is to compare the anchor point locations recorded (and the fitness/errors reported) in the log file.

We also want a report of how the machine works after this. when you jog around, are the belts properly tight, how is the accuracy (especially compared to the maslow-classic algorithm)

Just this basic testing will be incredibly useful.

For those who have time to run more calibrations using the new algorithm, more experimentation can be done

Now that we have anchor point accuracy that we can understand, and it is supposed to throw away bad points, we can experiment with things to find out more about what is needed in terms of grid size and grid area.

My guess is that a larger grid area will help more than more points in a given area.

People who have frames where they can easily go ‘out of the green’ (i.e. to areas where the arms hit the belts) or who have seen areas of the machine where accuracy really suffers (probably edges/corners) can test grid areas that include these problem areas and see if it throws away the points there. This may require more points for it to notice how bad those areas are.

It would also be worth testing what happens if a belt catches on something (say dust collector, corner of workpiece, your foot…) and isn’t straight when it’s measured (in theory, that data point should be thrown out, does it work reliably)

for people with huge frames, I would not be surprised to find that a 3x3 grid that covers the entire work area gives numbers just as accurate as doing a 9x9 grid

2 Likes

Is there an option to test it offline, like a simulator? It would be cool to throw a bunch of old data at it and see how it handles different situations without needing to run it on an actual machine

another thing that is useful for people to do.

When the maslow does a calibration, it logs CLBM lines, reporting the belt
lengths that it has measured. Please paste this data into this online calculator

this uses the new algorithm to report what it thinks the anchor loations are.
Then report the CLBM line followed by the calculation results
(this all happens in your browser, so I can’t log the data server-side)

  • how do the results that this reports compare to what your maslow.yaml says?
  • how bad are the ± values for the data?
  • how much does throwing out outliers help?
  • do you get a ‘failed to converge’ message

For people who have logs of when the old calibration failed (especially with
extremely low fitness), does this version give a reasonable result? does it
throw out some points in doing so?

@bar, can we scrape the forums and find CLBM lines posted (or put in
attachments) and extract them?

David Lang

Bar wrote:

Is there an option to test it offline, like a simulator? It would be cool to
throw a bunch of old data at it and see how it handles different situations
without needing to run it on an actual machine

I was just posting a way to do that :slight_smile:

I also have what grok claims is a C program that should take the CLBM data as an
input, but it’s not quite working. I may give it another try.

In the meantime, see what you can extract from the forums.

I purged ~100k deleted messages from my inbox about a week ago, if I had held
off, I could just dig through my inbox :slight_smile:

David Lang

the first 7 posts (other than this thread) that had CLBM in them

errors-in-serial-file-after-firmware-update-to-1-12/24965/21

was stuck with fitness 0,5

Adaptive Init:
x1: 2184.9 mm, x2: 3296.4 mm, y2: 1966.9 mm, x3: 1092.4 mm, y3: 1966.9 mm

Outliers at indices: [0]
Threshold: 1.845 mm

Dismissed Outlier Points:
Index 0: {bl: 1947.85, br: 1986.04, tr: 2205.33, tl: 2164.45} (BR error: 0.30 mm, BL error: 2.25 mm)
Full Fit:
x1 (B): 3344.3 ± 58.7 mm

x2 (C): 3335.0 ± 55.1 mm, y2 (C): 2450.6 ± 75.0 mm

x3 (E): 1.8 ± 8.0 mm, y3 (E): 2447.1 ± 73.3 mm

Residual sum: 33485.136 mm²

Cleaned Fit (no outliers):
x1 (B): 3291.9 ± 44.9 mm

x2 (C): 3285.5 ± 43.3 mm, y2 (C): 2516.6 ± 56.4 mm

x3 (E): 2.6 ± 5.1 mm, y3 (E): 2517.8 ± 54.6 mm

Residual sum: 17566.614 mm²

software-and-calibration-trouble/24932/29
initial 6 reporting as fitness 2

Adaptive Init:
x1: 2096.6 mm, x2: 3169.8 mm, y2: 2068.3 mm, x3: 1048.3 mm, y3: 2068.3 mm

Outliers at indices: [0]
Threshold: 1.003 mm

Dismissed Outlier Points:
Index 0: {bl: 2043.43, br: 2093.26, tr: 2099.31, tl: 2093.84} (BR error: 1.24 mm, BL error: 1.62 mm)
Full Fit:
x1 (B): 3507.7 ± 60.7 mm

x2 (C): 3538.1 ± 63.7 mm, y2 (C): 2235.6 ± 100.8 mm

x3 (E): 15.7 ± 5.3 mm, y3 (E): 2225.4 ± 99.1 mm

Residual sum: 28170.374 mm²

Cleaned Fit (no outliers):
x1 (B): 3486.3 ± 22.2 mm

x2 (C): 3512.9 ± 23.3 mm, y2 (C): 2274.4 ± 36.0 mm

x3 (E): 19.8 ± 2.1 mm, y3 (E): 2264.1 ± 35.3 mm

Residual sum: 8886.704 mm²

continuing to 14

Adaptive Init:
x1: 2096.6 mm, x2: 3169.8 mm, y2: 2068.3 mm, x3: 1048.3 mm, y3: 2068.3 mm

Outliers at indices: [0]
Threshold: 1.211 mm

Dismissed Outlier Points:
Index 0: {bl: 2043.43, br: 2093.26, tr: 2099.31, tl: 2093.84} (BR error: 0.68 mm, BL error: 1.37 mm)
Full Fit:
x1 (B): 3489.5 ± 32.3 mm

x2 (C): 3520.2 ± 33.7 mm, y2 (C): 2264.8 ± 52.3 mm

x3 (E): 16.5 ± 2.7 mm, y3 (E): 2255.4 ± 51.2 mm

Residual sum: 64810.035 mm²

Cleaned Fit (no outliers):
x1 (B): 3482.2 ± 29.9 mm

x2 (C): 3512.1 ± 31.2 mm, y2 (C): 2277.2 ± 48.1 mm

x3 (E): 17.8 ± 2.5 mm, y3 (E): 2268.4 ± 47.0 mm

Residual sum: 57825.004 mm²

continuing to 30 (still fitness 2)
Adaptive Init:
x1: 2096.6 mm, x2: 3169.8 mm, y2: 2068.3 mm, x3: 1048.3 mm, y3: 2068.3 mm

Outliers at indices: [5]
Threshold: 1.618 mm

Dismissed Outlier Points:
Index 5: {bl: 1921.10, br: 2221.64, tr: 2220.98, tl: 1968.87} (BR error: 1.77 mm, BL error: 1.27 mm)
Full Fit:
x1 (B): 3473.6 ± 9.3 mm

x2 (C): 3506.0 ± 9.7 mm, y2 (C): 2287.5 ± 14.8 mm

x3 (E): 20.9 ± 1.2 mm, y3 (E): 2286.3 ± 14.4 mm

Residual sum: 140593.721 mm²

Cleaned Fit (no outliers):
x1 (B): 3471.5 ± 8.6 mm

x2 (C): 3504.5 ± 9.0 mm, y2 (C): 2289.9 ± 13.7 mm

x3 (E): 21.0 ± 1.2 mm, y3 (E): 2289.7 ± 13.4 mm

Residual sum: 125347.145 mm²

calibration-failure-cant-get-fitness-above-like-0-2/24517/9
initial 6 fitness 0.19 evolving to 0.89 over >30000 iterations, new solver failed for CLBM:[{bl:1804.91, br:1818.25, tr:2252.67, tl:2251.37},{bl:1919.08, br:1710.85, tr:2162.84, tl:2344.22},{bl:2000.99, br:1790.56, tr:2045.39, tl:2245.25},{bl:1900.29, br:1902.68, tr:2128.03, tl:2141.46},{bl:1791.38, br:2015.25, tr:2228.09, tl:2043.40},{bl:1688.11, br:1946.61, tr:2348.36, tl:2152.35},]

maslow continued to 14 points fitness 0.8

Adaptive Init:
x1: 2252.0 mm, x2: 3384.7 mm, y2: 1811.6 mm, x3: 1126.0 mm, y3: 1811.6 mm

Outliers at indices: [0]
Threshold: 1.642 mm

Dismissed Outlier Points:
Index 0: {bl: 1804.91, br: 1818.25, tr: 2252.67, tl: 2251.37} (BR error: 3.55 mm, BL error: 0.69 mm)
Full Fit:
x1 (B): 3167.8 ± 9.3 mm

x2 (C): 3172.4 ± 8.8 mm, y2 (C): 2491.3 ± 11.4 mm

x3 (E): 10.1 ± 1.6 mm, y3 (E): 2484.8 ± 11.4 mm

Residual sum: 79427.516 mm²

Cleaned Fit (no outliers):
x1 (B): 3176.4 ± 7.0 mm

x2 (C): 3182.2 ± 6.7 mm, y2 (C): 2478.8 ± 8.8 mm

x3 (E): 10.9 ± 1.2 mm, y3 (E): 2474.6 ± 8.8 mm

Residual sum: 55874.206 mm²

fitness 0.8

Adaptive Init:
x1: 2252.0 mm, x2: 3384.7 mm, y2: 1811.6 mm, x3: 1126.0 mm, y3: 1811.6 mm

Outliers at indices: [0, 15]
Threshold: 1.565 mm

Dismissed Outlier Points:
Index 0: {bl: 1804.91, br: 1818.25, tr: 2252.67, tl: 2251.37} (BR error: 3.86 mm, BL error: 0.71 mm)
Index 15: {bl: 1870.62, br: 1864.23, tr: 2168.05, tl: 2190.37} (BR error: 2.85 mm, BL error: 0.65 mm)
Full Fit:
x1 (B): 3169.0 ± 9.8 mm

x2 (C): 3174.2 ± 9.3 mm, y2 (C): 2489.1 ± 12.0 mm

x3 (E): 10.4 ± 1.7 mm, y3 (E): 2483.7 ± 12.0 mm

Residual sum: 91449.243 mm²

Cleaned Fit (no outliers):
x1 (B): 3176.0 ± 6.7 mm

x2 (C): 3181.8 ± 6.5 mm, y2 (C): 2479.2 ± 8.4 mm

x3 (E): 10.9 ± 1.1 mm, y3 (E): 2475.3 ± 8.4 mm

endless-calibration-always-gets-stuck-in-bottom-right-corner-lifting-sled-unsure-where-to-go-now/24479/5

fitness started very low, eventually got to 1
initial 6

x1: 1952.1 mm, x2: 2925.5 mm, y2: 1900.1 mm, x3: 976.0 mm, y3: 1900.1 mm

Outliers at indices: []
Threshold: 1.266 mm

No outliers detected.

Full Fit:
x1 (B): 2911.6 ± 38.6 mm

x2 (C): 2897.0 ± 39.8 mm, y2 (C): 2533.6 ± 45.4 mm

x3 (E): -6.3 ± 3.4 mm, y3 (E): 2518.5 ± 45.8 mm

Residual sum: 16540.517 mm²

at 14 fitness 0.79

Adaptive Init:
x1: 1952.1 mm, x2: 2925.5 mm, y2: 1900.1 mm, x3: 976.0 mm, y3: 1900.1 mm

Outliers at indices: [3]
Threshold: 2.267 mm

Dismissed Outlier Points:
Index 3: {bl: 2011.00, br: 2002.84, tr: 1846.48, tl: 1851.66} (BR error: 0.34 mm, BL error: 2.91 mm)
Full Fit:
x1 (B): 3096.4 ± 20.9 mm

x2 (C): 3098.4 ± 21.7 mm, y2 (C): 2283.5 ± 29.2 mm

x3 (E): -9.4 ± 3.0 mm, y3 (E): 2283.9 ± 28.6 mm

Residual sum: 115910.842 mm²

Cleaned Fit (no outliers):
x1 (B): 3116.3 ± 20.2 mm

x2 (C): 3118.6 ± 20.8 mm, y2 (C): 2256.1 ± 28.6 mm

x3 (E): -8.1 ± 2.7 mm, y3 (E): 2258.9 ± 27.9 mm

Residual sum: 101244.651 mm²

at 30 it did not complete

Adaptive Init:
x1: 1952.1 mm, x2: 2925.5 mm, y2: 1900.1 mm, x3: 976.0 mm, y3: 1900.1 mm

Outliers at indices: [28, 29, 30]
Threshold: 8.253 mm

Dismissed Outlier Points:
Index 28: {bl: 2375.07, br: 1570.49, tr: 1522.93, tl: 2355.93} (BR error: 10.20 mm, BL error: 5.08 mm)
Index 29: {bl: 2321.80, br: 1486.27, tr: 1609.75, tl: 2413.06} (BR error: 11.63 mm, BL error: 3.78 mm)
Index 30: {bl: 2273.91, br: 1402.30, tr: 1701.28, tl: 2475.39} (BR error: 10.89 mm, BL error: 0.76 mm)
Full Fit:
x1 (B): 3069.0 ± 11.9 mm

x2 (C): 3057.3 ± 12.5 mm, y2 (C): 2342.2 ± 15.8 mm

x3 (E): -1.0 ± 3.5 mm, y3 (E): 2330.4 ± 16.0 mm

Residual sum: 711593.214 mm²

Cleaned Fit (no outliers):
x1 (B): 3079.4 ± 11.3 mm

x2 (C): 3072.9 ± 12.2 mm, y2 (C): 2320.9 ± 15.8 mm

x3 (E): -5.6 ± 3.6 mm, y3 (E): 2311.9 ± 14.5 mm

Residual sum: 516682.461 mm²

fitness-not-close-not-converging/24515/30

initial 6 fitness started very low eventually got to 0.7 after MANY restarts

Adaptive Init:
x1: 1952.1 mm, x2: 2925.5 mm, y2: 1900.1 mm, x3: 976.0 mm, y3: 1900.1 mm

Outliers at indices: [28, 29, 30]
Threshold: 8.253 mm

Dismissed Outlier Points:
Index 28: {bl: 2375.07, br: 1570.49, tr: 1522.93, tl: 2355.93} (BR error: 10.20 mm, BL error: 5.08 mm)
Index 29: {bl: 2321.80, br: 1486.27, tr: 1609.75, tl: 2413.06} (BR error: 11.63 mm, BL error: 3.78 mm)
Index 30: {bl: 2273.91, br: 1402.30, tr: 1701.28, tl: 2475.39} (BR error: 10.89 mm, BL error: 0.76 mm)
Full Fit:
x1 (B): 3069.0 ± 11.9 mm

x2 (C): 3057.3 ± 12.5 mm, y2 (C): 2342.2 ± 15.8 mm

x3 (E): -1.0 ± 3.5 mm, y3 (E): 2330.4 ± 16.0 mm

Residual sum: 711593.214 mm²

Cleaned Fit (no outliers):
x1 (B): 3079.4 ± 11.3 mm

x2 (C): 3072.9 ± 12.2 mm, y2 (C): 2320.9 ± 15.8 mm

x3 (E): -5.6 ± 3.6 mm, y3 (E): 2311.9 ± 14.5 mm

Residual sum: 516682.461 mm²

at 16 points fitness 0.9

Adaptive Init:
x1: 2252.2 mm, x2: 3369.6 mm, y2: 2167.2 mm, x3: 1126.1 mm, y3: 2167.2 mm

Outliers at indices: [4, 13]
Threshold: 2.081 mm

Dismissed Outlier Points:
Index 4: {bl: 2175.77, br: 2365.39, tr: 2259.40, tl: 2042.97} (BR error: 0.12 mm, BL error: 2.14 mm)
Index 13: {bl: 2307.43, br: 2131.18, tr: 2117.78, tl: 2280.54} (BR error: 1.31 mm, BL error: 2.41 mm)
Full Fit:
x1 (B): 3683.8 ± 30.9 mm

x2 (C): 3676.8 ± 31.7 mm, y2 (C): 2431.9 ± 48.2 mm

x3 (E): -41.1 ± 2.9 mm, y3 (E): 2389.6 ± 47.4 mm

Residual sum: 116499.568 mm²

Cleaned Fit (no outliers):
x1 (B): 3675.4 ± 27.6 mm

x2 (C): 3668.8 ± 28.4 mm, y2 (C): 2443.9 ± 42.9 mm

x3 (E): -44.2 ± 2.6 mm, y3 (E): 2397.9 ± 41.9 mm

Residual sum: 86247.495 mm²

not-sure-what-to-try-next/24447

initial 6 took many tries to get to fitness 0.6

Adaptive Init:
x1: 1872.0 mm, x2: 2805.0 mm, y2: 1863.0 mm, x3: 936.0 mm, y3: 1863.0 mm

Outliers at indices: []
Threshold: 1.813 mm

No outliers detected.

Full Fit:
x1 (B): 2878.1 ± 50.2 mm

x2 (C): 2870.8 ± 52.1 mm, y2 (C): 2380.3 ± 62.6 mm

x3 (E): -13.5 ± 5.4 mm, y3 (E): 2367.8 ± 63.2 mm

Residual sum: 26587.370 mm²

at 16 fitness 0.56

Adaptive Init:
x1: 1872.0 mm, x2: 2805.0 mm, y2: 1863.0 mm, x3: 936.0 mm, y3: 1863.0 mm

Outliers at indices: [13, 14]
Threshold: 2.271 mm

Dismissed Outlier Points:
Index 13: {bl: 2098.18, br: 1661.31, tr: 1650.60, tl: 2083.13} (BR error: 2.22 mm, BL error: 2.36 mm)
Index 14: {bl: 1978.28, br: 1506.41, tr: 1822.36, tl: 2225.65} (BR error: 2.35 mm, BL error: 1.80 mm)
Full Fit:
x1 (B): 2929.5 ± 13.5 mm

x2 (C): 2930.4 ± 13.5 mm, y2 (C): 2307.1 ± 17.2 mm

x3 (E): -3.7 ± 2.2 mm, y3 (E): 2315.5 ± 17.5 mm

Residual sum: 128457.228 mm²

Cleaned Fit (no outliers):
x1 (B): 2901.3 ± 10.6 mm

x2 (C): 2901.2 ± 10.7 mm, y2 (C): 2344.1 ± 13.3 mm

x3 (E): -9.9 ± 1.9 mm, y3 (E): 2344.2 ± 13.0 mm

Residual sum: 67126.566 mm²

lower-right-belt-loosening-and-unwinding-during-cut/24309/9
initial 6 fitness started really low, after restarts got to 1.6


Adaptive Init:
x1: 1871.9 mm, x2: 2798.8 mm, y2: 1851.4 mm, x3: 935.9 mm, y3: 1851.4 mm

Outliers at indices: [0]
Threshold: 1.285 mm

Dismissed Outlier Points:
Index 0: {bl: 1860.42, br: 1842.31, tr: 1872.87, tl: 1870.88} (BR error: 0.66 mm, BL error: 1.41 mm)
Full Fit:
x1 (B): 2997.6 ± 42.8 mm

x2 (C): 2990.3 ± 44.9 mm, y2 (C): 2200.0 ± 60.9 mm

x3 (E): -33.0 ± 4.2 mm, y3 (E): 2176.6 ± 61.8 mm

Residual sum: 22429.003 mm²

Cleaned Fit (no outliers):
x1 (B): 2977.8 ± 26.9 mm

x2 (C): 2968.5 ± 28.2 mm, y2 (C): 2229.0 ± 37.5 mm

x3 (E): -29.6 ± 2.8 mm, y3 (E): 2207.8 ± 38.2 mm

Residual sum: 10948.109 mm²

at 16 fitness 0.5


Adaptive Init:
x1: 1871.9 mm, x2: 2798.8 mm, y2: 1851.4 mm, x3: 935.9 mm, y3: 1851.4 mm

Outliers at indices: [13, 14]
Threshold: 2.552 mm

Dismissed Outlier Points:
Index 13: {bl: 2091.48, br: 1670.40, tr: 1649.64, tl: 2054.32} (BR error: 3.17 mm, BL error: 0.59 mm)
Index 14: {bl: 1974.64, br: 1529.08, tr: 1812.29, tl: 2186.27} (BR error: 3.00 mm, BL error: 1.22 mm)
Full Fit:
x1 (B): 2974.5 ± 12.5 mm

x2 (C): 2968.6 ± 12.9 mm, y2 (C): 2228.9 ± 17.3 mm

x3 (E): -21.6 ± 2.1 mm, y3 (E): 2223.0 ± 17.2 mm

Residual sum: 111481.254 mm²

Cleaned Fit (no outliers):
x1 (B): 2956.5 ± 11.6 mm

x2 (C): 2948.7 ± 12.0 mm, y2 (C): 2255.3 ± 15.8 mm

x3 (E): -24.7 ± 2.1 mm, y3 (E): 2243.6 ± 15.4 mm

Residual sum: 79542.132 mm²

so it looks like the people reporting problems have bad error ranges, even if the fitness score is high

Can we get some people who are having good results to check?

Retro-ed back to 1.12, minor disaster, USB cable got caught and ripped out motor connection during run, bent and broke cable. I think port is OK but haven’t got a long enough cable to continue with serial port logging.

Ian Abbott wrote:

Retro-ed back to 1.12, minor disaster, USB cable got caught and ripped out
motor connection during run, bent and broke cable. I think port is OK but
haven¢t got a long enough cable to continue with serial port logging.

ouch.

I have found that I can gather logs more reliably with telnet than with serial,
except the early logs.

for this testing, everything is saved in the logs you can download form the UI
(and not all of it is going to the serial logs anyway, so we need the UI logs)

David Lang

do you need to power reset Maslow after loading index.html.gz file

Results before and after

Maslow-serial - 2025-10-15T075210.623.log (31.2 KB)

Maslow-serial - 2025-10-15T081612.420.log (30.1 KB)

yes you do

what do you mean ‘before and after’? and can you post the results of a run with the Maslow-Classic

for comparison, here are the points

run 1
Maslow-Classic

Fitness: 0.9468315277098294
Maslow_tlX: -163.1
Maslow_tlY: 3992.1
Maslow_trX: 4558.7
Maslow_trY: 3942.3
Maslow_blX: 0.0
Maslow_blY: 0.0
Maslow_brX: 4580.9
Maslow_brY: 0.0

new

x1: 4709.1 ± 2.1 mm
x2: 4773.6 ± 2.2 mm, y2: 3956.5 ± 2.6 mm
x3: 202.1 ± 0.8 mm, y3: 4000.5 ± 2.5 mm

maslow classic run 2

Fitness: 0.8918119710774676
Maslow_tlX: -161.3
Maslow_tlY: 4002.9
Maslow_trX: 4542.0
Maslow_trY: 3963.9
Maslow_blX: 0.0
Maslow_blY: 0.0
Maslow_brX: 4572.6
Maslow_brY: 0.0

new

x1 (B): 4700.0 ± 2.7 mm
x2 (C): 4763.2 ± 2.8 mm, y2 (C): 3967.9 ± 3.3 mm
x3 (E): 193.7 ± 1.0 mm, y3 (E): 4004.4 ± 3.2 mm

that seems like a pretty significant difference between the numbers the two report (200mm difference in width). can you try the new numbers (either by calibrating with the new algorithm or by just entering the numbers manually) and then report if the machine seems any happier/more accurate?

1 Like

3rd Version, after power reset of Maslow

Maslow-serial - 2025-10-15T090308.631.log (29.0 KB)

Fitness: 0.8528570070092053
Maslow_tlX: -162.7
Maslow_tlY: 4017.9
Maslow_trX: 4526.8
Maslow_trY: 3979.3
Maslow_blX: 0.0
Maslow_blY: 0.0
Maslow_brX: 4557.9
Maslow_brY: 0.0

and

x1: 4692.8 ± 3.0 mm
x2: 4757.2 ± 3.0 mm, y2: 3975.0 ± 3.5 mm
x3: 194.6 ± 1.1 mm, y3: 4012.0 ± 3.5 mm

||. | old1 | old2 | old3 | new1 | new2 | new3|
|— | — | — | — | — | — | —|
| | .94 | .89 | .85 | | | |
|brx | 4580.9 | 4572.6 | 4557.9 | 4709.1-+2.1 | 4700.0-+2.7 | 4692.8-+3|
|tlx | 163.1 | -161.3 | -162.7 | 202.1-+.08 | 193.7-+1 | 194.6-+1.1|
|tly | 3992.1 | 4002.9 | 4017.9 | 4000.5-+2.5 | 4004.4-+3.2 | 4012-+3.5|
|trx | 4558.7 | 4542.0 | 4526.8 | 4773.6-+202 | 4763.2 -+2.8 | 4757.2-+3|
|try | 3942.3 | 3963.9 | 3979.3 | 3956.5-+2.6 | 3967.9-+3.3 | 3975-+3.5|

so much for the table builder…

1 Like