Skip to content

Bring NXapm back that has been accepted now by the NIAC #396

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed

Conversation

mkuehbach
Copy link
Collaborator

@mkuehbach mkuehbach commented Jul 14, 2025

Summary by Sourcery

Bring back the NXapm application definition and broaden the NeXus schema with new base classes and extended process definitions for atom probe microscopy data.

New Features:

  • Reintroduce the NXapm atom probe microscopy application definition in both YAML and NXDL formats.
  • Add new base classes for NXimage, NXspectrum, NXinstrument_apm, and NXapm_simulation to support image, spectrum, and instrument simulation data.
  • Extend the NXprocess base class by including NXparameters and NXdata groups.

Enhancements:

  • Add a number_of_poles field to the NXlens_em class.
  • Standardize XML/YAML formatting and update copyright years across multiple base classes and contributed definitions.
  • Refine documentation strings and capitalization in several base classes (NXfabrication, NXentry, NXcomponent, etc.).

Copy link

sourcery-ai bot commented Jul 14, 2025

Reviewer's Guide

This pull request reintroduces the NXapm application definition for atom probe microscopy, restoring both YAML and NXDL files and extending several base classes (NXprocess, NXinstrument_apm, NXimage, NXspectrum, NXapm_simulation) to support detailed metadata and workflows, while also applying formatting clean-ups and year updates across various definition files.

Class diagram for the new NXapm application definition and related base classes

classDiagram
    class NXapm {
        <<application>>
        +NXentry[1..*]
    }
    class NXentry {
        +definition: NX_CHAR
        +run_number: NX_UINT
        +experiment_alias: NX_CHAR
        +experiment_description: NX_CHAR
        +start_time: NX_DATE_TIME
        +end_time: NX_DATE_TIME
        +elapsed_time: NX_FLOAT
        +operation_mode: NX_CHAR
        +userID: NXuser
        +sample: NXsample
        +specimen: NXsample
        +consistent_rotations: NXparameters
        +NAMED_reference_frame: NXcoordinate_system
        +measurement: NXapm_measurement
        +simulation: NXapm_simulation
        +atom_probeID: NXroi_process
        +profiling: NXcs_profiling
    }
    class NXapm_measurement {
        +status: NX_CHAR
        +quality: NX_CHAR
        +instrument: NXinstrument_apm
        +eventID: NXevent_data_apm
    }
    class NXinstrument_apm {
        +type: NX_CHAR
        +location: NX_CHAR
        +flight_path: NX_FLOAT
        +reflectron: NXcomponent
        +local_electrode: NXlens_em
        +ion_detector: NXdetector
        +pulser: NXcomponent
        +stage: NXmanipulator
        +analysis_chamber: NXcomponent
        +buffer_chamber: NXcomponent
        +load_lock_chamber: NXcomponent
        +getter_pump: NXpump
        +roughening_pump: NXpump
        +turbomolecular_pump: NXpump
    }
    class NXroi_process {
        +initial_specimen: NXimage
        +final_specimen: NXimage
        +raw_data: NXprocess
        +hit_finding: NXprocess
        +hit_spatial_filtering: NXprocess
        +voltage_and_bowl: NXprocess
        +mass_to_charge_conversion: NXprocess
        +reconstruction: NXapm_reconstruction
        +ranging: NXapm_ranging
    }
    class NXprocess {
        +program: NX_CHAR
        +sequence_index: NX_POSINT
        +version: NX_CHAR
        +date: NX_DATE_TIME
        +(NXnote)
        +(NXparameters)
        +(NXdata)
    }
    class NXimage {
        +image_2d: NXdata
    }
    class NXapm_simulation {
        <<group>>
    }
    class NXcs_profiling {
        +programID: NXprogram
        +environment: NXcollection
    }
    class NXcs_profiling_event {
        +start_time: NX_DATE_TIME
        +end_time: NX_DATE_TIME
        +description: NX_CHAR
        +elapsed_time: NX_NUMBER
        +max_processes: NX_UINT
        +max_threads: NX_UINT
        +max_gpus: NX_UINT
        +max_virtual_memory_snapshot: NX_NUMBER[n_processes]
        +max_resident_memory_snapshot: NX_NUMBER[n_processes]
    }
    NXapm --> NXentry
    NXentry --> NXapm_measurement
    NXentry --> NXapm_simulation
    NXentry --> NXroi_process
    NXentry --> NXcs_profiling
    NXapm_measurement --> NXinstrument_apm
    NXapm_measurement --> NXevent_data_apm
    NXroi_process --> NXimage : initial_specimen
    NXroi_process --> NXimage : final_specimen
    NXroi_process --> NXprocess : raw_data
    NXroi_process --> NXprocess : hit_finding
    NXroi_process --> NXprocess : hit_spatial_filtering
    NXroi_process --> NXprocess : voltage_and_bowl
    NXroi_process --> NXprocess : mass_to_charge_conversion
    NXroi_process --> NXapm_reconstruction : reconstruction
    NXroi_process --> NXapm_ranging : ranging
    NXcs_profiling --> NXcs_profiling_event
    NXprocess --> NXnote
    NXprocess --> NXparameters
    NXprocess --> NXdata
    NXimage --> NXdata : image_2d
Loading

Class diagram for the updated NXprocess base class

classDiagram
    class NXprocess {
        +program: NX_CHAR
        +sequence_index: NX_POSINT
        +version: NX_CHAR
        +date: NX_DATE_TIME
        +(NXnote)
        +(NXparameters)
        +(NXdata)
    }
    class NXnote {
    }
    class NXparameters {
    }
    class NXdata {
    }
    NXprocess --> NXnote
    NXprocess --> NXparameters
    NXprocess --> NXdata
Loading

Class diagram for the new NXcs_profiling_event base class

classDiagram
    class NXcs_profiling_event {
        +start_time: NX_DATE_TIME
        +end_time: NX_DATE_TIME
        +description: NX_CHAR
        +elapsed_time: NX_NUMBER
        +max_processes: NX_UINT
        +max_threads: NX_UINT
        +max_gpus: NX_UINT
        +max_virtual_memory_snapshot: NX_NUMBER[n_processes]
        +max_resident_memory_snapshot: NX_NUMBER[n_processes]
    }
Loading

Class diagram for the updated NXlens_em base class

classDiagram
    class NXlens_em {
        +pole_type: NX_CHAR
        +number_of_poles: NX_UINT
    }
Loading

Class diagram for the updated NXfabrication base class

classDiagram
    class NXfabrication {
        +date: NX_DATE_TIME
        +capability: NX_CHAR
    }
Loading

Class diagram for the updated NXentry base class

classDiagram
    class NXentry {
        +entry_identifier: NX_CHAR
        +identifier_entry: NX_CHAR
    }
Loading

Class diagram for the updated NXcomponent base class

classDiagram
    class NXcomponent {
        +identifierNAME: NX_CHAR
    }
Loading

Class diagram for the updated NXcg_primitive and NXcg_roi contributed definitions

classDiagram
    class NXcg_primitive {
    }
    class NXcg_roi {
    }
Loading

Class diagram for the updated NXactuator, NXcoordinate_system, NXdata, NXhistory, NXresolution, NXroot base classes

classDiagram
    class NXactuator {
    }
    class NXcoordinate_system {
    }
    class NXdata {
    }
    class NXhistory {
    }
    class NXresolution {
    }
    class NXroot {
    }
Loading

Class diagram for the updated NXcg_face_list_data_structure, NXcg_half_edge_data_structure, NXcg_hexahedron, NXcg_parallelogram, NXcg_polygon, NXcg_polyhedron, NXcg_polyline, NXcg_tetrahedron, NXcg_triangle contributed definitions

classDiagram
    class NXcg_face_list_data_structure {
    }
    class NXcg_half_edge_data_structure {
    }
    class NXcg_hexahedron {
    }
    class NXcg_parallelogram {
    }
    class NXcg_polygon {
    }
    class NXcg_polyhedron {
    }
    class NXcg_polyline {
    }
    class NXcg_tetrahedron {
    }
    class NXcg_triangle {
    }
Loading

File-Level Changes

Change Details Files
Reintroduce NXapm application definition
  • Add complete YAML-based application definition for NXapm
  • Add NXDL XML for NXapm with symbols, groups, and full hierarchy
applications/nyaml/NXapm.yaml
applications/NXapm.nxdl.xml
Extend and clean up NXprocess base class
  • Enrich docstrings and formatting
  • Add NXparameters and NXdata child groups
  • Update copyright and XML stylesheet formatting
base_classes/nyaml/NXprocess.yaml
base_classes/NXprocess.nxdl.xml
Add and refine NXinstrument_apm for dynamic/static metadata
  • Detail pulser, source, beamID and control fields
  • Clean YAML quoting and NXDL formatting
  • Support laser/voltage pulsing metadata
base_classes/nyaml/NXinstrument_apm.yaml
base_classes/NXinstrument_apm.nxdl.xml
Introduce NXimage and NXspectrum definitions
  • Provide one-, two-, three-dimensional image/spectrum specializations
  • Define stack variants with index dimensions
  • Include processing metadata and axis conventions
base_classes/nyaml/NXimage.yaml
base_classes/NXimage.nxdl.xml
base_classes/nyaml/NXspectrum.yaml
base_classes/NXspectrum.nxdl.xml
Add NXapm_simulation base class
  • Define simulation group with NXprogram/NXparameters/NXprocess/NXdata support
  • Provide minimal doc and structure
base_classes/NXapm_simulation.nxdl.xml
Global formatting and copyright updates
  • Standardize XML stylesheet declarations
  • Correct copyright years from 2025 to 2024
  • Minor docstring formatting fixes
various base_classes and contributed_definitions files

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@mkuehbach
Copy link
Collaborator Author

Superseeded by #400

@mkuehbach mkuehbach closed this Jul 28, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants