-
Notifications
You must be signed in to change notification settings - Fork 124
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
Plan to consolidate Nexus loading code #38332
Comments
As of the time of this writing, the dependencies of the current nexus conda package are (using conda-tree) $ conda tree deptree
...
├─ nexus 4.4.3 [required: 4.4.*]
│ ├─ hdf4 4.2.15 [required: >=4.2.15,<4.2.16.0a0]
│ │ ├─ libgcc-ng 14.1.0 [required: >=12]
│ │ │ └─ dependencies of libgcc-ng displayed above
│ │ ├─ libjpeg-turbo 3.0.0 [required: >=3.0.0,<4.0a0]
│ │ │ └─ dependencies of libjpeg-turbo displayed above
│ │ ├─ libstdcxx-ng 14.1.0 [required: >=12]
│ │ │ └─ dependencies of libstdcxx-ng displayed above
│ │ └─ libzlib 1.3.1 [required: >=1.2.13,<2.0.0a0]
│ │ └─ dependencies of libzlib displayed above
│ ├─ hdf5 1.14.3 [required: >=1.14.3,<1.14.4.0a0]
│ │ └─ dependencies of hdf5 displayed above
│ ├─ libgcc-ng 14.1.0 [required: >=12]
│ │ └─ dependencies of libgcc-ng displayed above
│ ├─ libjpeg-turbo 3.0.0 [required: >=3.0.0,<4.0a0]
│ │ └─ dependencies of libjpeg-turbo displayed above
│ ├─ libstdcxx-ng 14.1.0 [required: >=12]
│ │ └─ dependencies of libstdcxx-ng displayed above
│ ├─ libxml2 2.12.7 [required: >=2.12.6,<3.0a0]
│ │ └─ dependencies of libxml2 displayed above
│ ├─ libzlib 1.3.1 [required: >=1.2.13,<2.0.0a0]
│ │ └─ dependencies of libzlib displayed above
│ ├─ ncurses 6.5 [required: >=6.4.20240210,<7.0a0]
│ │ └─ dependencies of ncurses displayed above
│ └─ readline 8.2 [required: >=8.2,<9.0a0]
│ └─ dependencies of readline displayed above |
I think this looks good and is a good summary of our discussion 😸. I'd probably say with steps 6-7 might be better done after 8 and the review step encompasses what an ideal API for the new internal I also would say that I think |
We also need to figure out how https://github.com/mantidproject/mantid/blob/main/Framework/DataHandling/inc/MantidDataHandling/H5Util.h fits into things |
Consider not setting the filecache size automatically during file opening. This was suggested by @ekapadi. |
Refs mantidproject#38332 The dependencies of https://github.com/conda-forge/nexus-feedstock/blob/main/recipe/meta.yaml * hdf4 - added * hdf5 - already present * libjpeg-turbo - required by hdf4 * zlib - added * libxml2 - required by libxslt * ncurses - required by readline * readline - required by python
Describe the outcome that is desired.
Mantid currently uses multiple mechanisms to load in data. This is outlined in the following issue mantidproject/roadmap#21
These mechanisms primarily involve using the Nexus API library to load data, however this library is now unsupported. We therefore no longer want to use it, and it would be preferable to use the HDF5 API directly. This would provide us with several other benefits which were not previously available when using Nexus API, and could result in a performance improvement when loading data.
To do this switch, the following plan was discussed with @peterfpeterson and @martyngigg .
Describe any solutions you are considering
H5Util
file to Mantid::Nexus library #38406Framework/Nexus
location in Mantid. This will not include anything other than these two languages Pull nexus library into mantid #38455#import
statements in files will need to be updatednapi.h.in
to allow for cmake to fill in the version, create a variantnapi.h
which has the version number that mantid bases its changes from#ifdef
sections) and re-evaluate if any conda dependencies can be removedLoadMuonNexus1
andLoadMuonNexus2
) to theFramework/Muon
library to isolate them#ifdef
sections of the Nexus API code within theFramework/Nexus
locationNexusFileIO
andNexusIOHelper
to understand how they are used, and where they are used.NexusFileIO
can likely be removed/refactored as it is only used by theSaveNexusProcessed
algorithm.After this work is done we are in a position to investigate what functionality we want to expose/add to improve performance of reading/writing hdf5-based nexus files.
Things still to be decided:
FileDescripttor
,NexusFileDescriptor
, andNexusHDF5FileDescriptor
go and should they have a hierarchy?The text was updated successfully, but these errors were encountered: