mcviewtest: spawn the new mcplotdiff-html plotter#2568
Conversation
|
A first demo of what this can do is available through http://new-nightly.mcstas.org/demo-diffplots/2026-07-09_output.html. Where possible (simulation worked and produced ascii output), the other datasets are compared against the left-most column (“ref”). While this still has rough edges (e.g. very long legends on links etc.) I think it will be very useful for instantly getting a good idea of what is up when a test starts to fail numerically. |
|
With the latest few commits (at 5ac3e2c) the output got a couple of stylistic changes. Overview: Diffplot: |
…en output is actually different"
|
Here is a link to the output from mcstas-conda-testsuite as run from the PR bramch |
mads-bertelsen
left a comment
There was a problem hiding this comment.
Great new capability! Only critical issue is the syntax issue in the generated html that doesn't close the span but instead opens a new one.
| # Only the Python tooling (mcviewtest, mcplotdiff-html, mcplot-html) is | ||
| # actually needed here - the diff/report generation is platform-agnostic | ||
| # regardless of which OS originally produced the monitor data - but we | ||
| # reuse the exact same install path as the build job for consistency, | ||
| # rather than maintaining a second, lighter-weight install mechanism. |
There was a problem hiding this comment.
This is okay for now but could obviously be improved! Maybe we should make an issue on this to remember. Maybe its not a significant amount of time?
|
|
||
| outfile.write(f"<a href='{b_log}' target=_blank>[ B (log) ]</a>\n") | ||
| if a_lin or a_log or b_lin or b_log: | ||
| outfile.write("<span class='origlinks'>\n") |
There was a problem hiding this comment.
This should be closing the span, instead it starts a new one
| outfile.write("</head><body>\n") | ||
| outfile.write(f"<h1>Difference plots: {label_a} − {label_b}</h1>\n") | ||
| outfile.write("<h1>Difference plots:</h1>\n") | ||
| outfile.write(f"<strong><ol type=\"A\"><li>{label_a} vs.<li>{label_b}</ol></strong>") |
There was a problem hiding this comment.
This line is different from the previewed webpage in the PR, it lacks the closing parts of the
| ncols = len(lines_block[0].split()) | ||
| if ncols == 0: | ||
| raise ValueError('empty first line in data block') | ||
| flat = np.fromstring(' '.join(lines_block), dtype=float, sep=' ') |
There was a problem hiding this comment.
This can create quite a big object in memory before its passed to numpy that makes it into floats. It could be done in parts to avoid having double the text size in memory at once, for example
flat = np.concatenate([np.fromstring(line, dtype=float, sep=' ') for line in lines_block])






Free-form text area
Please describe what your PR is adding in terms of features or bugfixes:
Declaration of use of AI-tools
Claude, prompt:
"Now I'd like you to focus on the mcviewtest tool which is part of tools/Python/mctest/.
The mctest tool can generate a set of test data for McStas, based on %Example lines in the instr files. As part of this, it calls the mcplot-html plotter per test result.
The folder structure from an mctest can be found at e.g. http://new-nightly.mcstas.org/todays-datafiles/mcstas-3.99.99_mpi_x_20_1e7_Linux_20260709_0902_23/
Afterwards, mcviewtest is called to generate an overview table - including columns that correspond e.g. to CPU and GPU execution - or different operating systems, see the html file at http://new-nightly.mcstas.org/todays-datafiles/2026-07-09_output.html (spans the above mctest output + 2 other mctest's.
Consider the first column in the html file the 'reference' test. Comparing each of the OTHER columns to the first one, I'd like you to add 'difference' cells corresponding to a mcplotdiff-html comparion between the dataset outputs, e.g. McStas_8GPU_openacc_mpi_x_7_1e7_Linux_20260709_0001_06_1e7/BNL_H8/1/ and mcstas-3.99.99_mpi_x_20_1e7_Linux_20260709_0902_23/BNL_H8/1/ - adding a link the the mcviewtest template."
Various local adaptation added
Development OS / boundary conditions
Please describe what OS you developed and tested your additions on, and if any special dependencies are required:
PR Checklist for contributing to McStas/McXtrace
For a coherent and useful contribution to McStas/McXtrace, please fill in relevant parts of the checklist:
My contribution contains something else