Generic functions for chunked event writing - #2691
Draft
mads-bertelsen wants to merge 26 commits into
Draft
mads-bertelsen wants to merge 26 commits into
mads-bertelsen wants to merge 26 commits into
Conversation
Complete generic_event_functions.md Steps 1 and 2:\n\n- Add deterministic McStas and McXtrace event-list fixtures.\n- Add mcevent_out_list and the DETECTOR_OUT_LIST macro.\n- Validate dimensions, null data, empty columns, and zero-event lists.\n- Preserve the existing list backend and fix rank-1 list output.\n\nVerified with McStas ASCII and NeXus output plus the McXtrace fixture.
Complete generic_event_functions.md Step 3:\n\n- Add MC_EVENT_BUFFER lifecycle and fixed-capacity append APIs.\n- Add deterministic overflow, zero-capacity, zero-width, and free-idempotence fixture coverage.\n- Preserve row-major output through DETECTOR_OUT_LIST.\n\nVerified with full McStas and McXtrace rebuilds and the CPU Test_EventBuffer fixture. OpenACC remains unexecuted because nvc is unavailable.
mads-bertelsen
marked this pull request as draft
September 25, 2026 08:46
Complete generic_event_functions.md Steps 1 and 2:\n\n- Add deterministic McStas and McXtrace event-list fixtures.\n- Add mcevent_out_list and the DETECTOR_OUT_LIST macro.\n- Validate dimensions, null data, empty columns, and zero-event lists.\n- Preserve the existing list backend and fix rank-1 list output.\n\nVerified with McStas ASCII and NeXus output plus the McXtrace fixture.
Complete generic_event_functions.md Step 3:\n\n- Add MC_EVENT_BUFFER lifecycle and fixed-capacity append APIs.\n- Add deterministic overflow, zero-capacity, zero-width, and free-idempotence fixture coverage.\n- Preserve row-major output through DETECTOR_OUT_LIST.\n\nVerified with full McStas and McXtrace rebuilds and the CPU Test_EventBuffer fixture. OpenACC remains unexecuted because nvc is unavailable.
- Track ASCII and NeXus output failures (write, flush, close, and NeXus serialization) in the MC_EVENT_OUTPUT session and surface a rejected save as an invalid detector. - Propagate failures through the serial and MPI writer sessions; MPI ranks still drain data after a failure so no collective deadlocks. - Reject per-rank position/rotation metadata mismatches in MPI saves. - Clear the writer before begin() validation so a rejected begin is safe to finish with end(). - Return a real NXstatus from mcdetector_out_data_nexus() (NX_ERROR when a group or the data write could not be opened) so NeXus serialization failures are actually detected; existing callers ignore the return and are unaffected. - Add expected-failure fixture cases (invalid begin, invalid output path, and an MPI metadata mismatch) and document them.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Free-form text area
Please describe what your PR is adding in terms of features or bugfixes:
Ongoing work to create a dedicated set of functions to handle event buffering and writing. Currently Monitor_nD has the most complete system for event handling implemented at component level, though there are issues with actually chunk saving while using MPI, so the buffer has to be large enough that is not filled during trace.
On this branch I am trying to create a set of functions that take care of the buffer and chunk writing during MPI to both ASCII and NEXUS and with both CPU and GPU to hide that complexity from components. It's also migrating Monitor_nD and other existing components to use these functions instead of it having to implement a buffer on component level or inheriting from Monitor_nD.
There is still work to be done, but putting this pull request up now for transparency so anyone interested can follow the development and chime in with any suggestions.
Declaration of use of AI-tools
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 includes patches to an existing component file
mcdocutility and rendered a reasonable documentation page for the component (please attach as screenshot in comments!)mctestutility to test one or more instruments making use of the component (please attachmcviewtestreport as screenshot in comments)mccode-clangformattool to apply the standard McCode component indentation schememcrun --c-lint"linter" and followed advice to remove most / all warnings that are raisedMy contribution includes patches to an existing instrument file
mcdocutility and rendered a reasonable documentation page for the instrument (please attach as screenshot in comments!)mctestutility to test the instrument (please attachmcviewtestreport as screenshot in comments)mcrun --c-lint"linter" and followed advice to remove most / all warnings that are raisedMy contribution includes a new component file
mcdocutility and rendered a reasonable documentation page for the component (please attach as screenshot in comments!)mccode-clangformattool to apply the standard McCode component indentation schemecontribcomponent categoryMy contribution includes a new instrument file
mcdocutility and rendered a reasonable documentation page for the instrument (please attach as screenshot in comments!)%Example:line to describe expected behaviourmcrun --c-lint"linter" and followed advice to remove most / all warnings that are raisedexampleshierarchy in a folder in the style ofexamples/ESS/New_stuff/New_stuff.instrexamplefolder, but if general use I have placed it in the globaldatafolder.My work touches the code-generator in mccode/src
My work touches / adds to the runtime lib code (.c,.h etc in multiple locations
My PR is meant to fix a specific, existing issue
My contribution contains something else