improved docu for HDF4/5.

This commit is contained in:
2026-02-07 21:43:34 +01:00
parent a6f5b956bf
commit 3858cc723a
4 changed files with 20 additions and 13 deletions

View File

@@ -718,7 +718,8 @@ PNeXus(const std::string& filename, bool printDebug = false);
| Method | Description | | Method | Description |
|--------|-------------| |--------|-------------|
| `GetFileName()` | Get the NeXus filename | | `GetFileName()` | Get the NeXus filename |
| `GetHdf5Version()` / `GetHdf4Version()` | Get HDF library version | | `GetHdf5LibVersion()` / `GetHdf4LibVersion()` | Get HDF library version (runtime) |
| `GetHdf5Version()` / `GetHdf4Version()` | Get HDF version from the file |
| `GetNeXusVersion()` | Get NeXus format version | | `GetNeXusVersion()` | Get NeXus format version |
| `GetIdfVersion()` | Get IDF version (1 or 2) | | `GetIdfVersion()` | Get IDF version (1 or 2) |

View File

@@ -324,14 +324,14 @@ void h4nexus_writeTest(const nxH4::PNeXus *nxs, const std::string& outFileName,
"units", std::string("picoseconds")); "units", std::string("picoseconds"));
// spectrum_index // spectrum_index
for (unsigned int i=0; i<66000; i++) for (unsigned int i=0; i<16; i++)
ival.push_back(i+1); ival.push_back(i+1);
nxs_out->AddDataset<int>("/raw_data_1/instrument/detector_1/spectrum_index", ival, {66000}, nxH4::H4DataType::INT32); nxs_out->AddDataset<int>("/raw_data_1/instrument/detector_1/spectrum_index", ival, {16}, nxH4::H4DataType::INT32);
ival.clear(); ival.clear();
// dead_time // dead_time
std::vector<float> deadTime(66000, 0.0); std::vector<float> deadTime(16, 0.0);
nxs_out->AddDataset<float>("/raw_data_1/instrument/detector_1/dead_time", deadTime, {66000}, nxH4::H4DataType::FLOAT32); nxs_out->AddDataset<float>("/raw_data_1/instrument/detector_1/dead_time", deadTime, {16}, nxH4::H4DataType::FLOAT32);
// attributes dead_time // attributes dead_time
nxs_out->AddDatasetAttribute<float>("/raw_data_1/instrument/detector_1/dead_time", "available", 0); nxs_out->AddDatasetAttribute<float>("/raw_data_1/instrument/detector_1/dead_time", "available", 0);

View File

@@ -33,6 +33,7 @@ h5nexus --fn <input_file> [options]
| `--out <file>` | Output NeXus HDF5 file (enables write mode) | | `--out <file>` | Output NeXus HDF5 file (enables write mode) |
| `-d, --debug` | Enable debug output | | `-d, --debug` | Enable debug output |
| `-dt, --dead_time_estimate` | Calculate dead time corrections | | `-dt, --dead_time_estimate` | Calculate dead time corrections |
| `--data idx <dout>` | Write single ASCII dataset with index `idx` to `<dout>` |
| `-h, --help` | Show help message | | `-h, --help` | Show help message |
| `-v, --version` | Show version information | | `-v, --version` | Show version information |
@@ -58,6 +59,11 @@ h5nexus --fn EMU00139040.nxs --out output.nxs
h5nexus --fn EMU00139040.nxs --dead_time_estimate --out corrected.nxs h5nexus --fn EMU00139040.nxs --dead_time_estimate --out corrected.nxs
``` ```
**Extract single detector data to ASCII file:**
```bash
h5nexus --fn EMU00139040.nxs --dead_time_estimate --data 0 detector0.txt
```
--- ---
## Reading NeXus Files ## Reading NeXus Files
@@ -520,7 +526,7 @@ NeXus uses the `NX_class` attribute to identify group types:
|------------|----------------|-------------| |------------|----------------|-------------|
| `/raw_data_1` | `NXentry` | Top-level entry for a measurement | | `/raw_data_1` | `NXentry` | Top-level entry for a measurement |
| `/raw_data_1/instrument` | `NXinstrument` | Instrument information | | `/raw_data_1/instrument` | `NXinstrument` | Instrument information |
| `/raw_data_1/detector_1` | `NXdetector` | Detector group | | `/raw_data_1/detector_1` | `NXdata` | Data group (IDF v2) |
| `/raw_data_1/sample` | `NXsample` | Sample information | | `/raw_data_1/sample` | `NXsample` | Sample information |
| `/raw_data_1/user_1` | `NXuser` | User information | | `/raw_data_1/user_1` | `NXuser` | User information |
@@ -535,7 +541,7 @@ int main() {
// Add some example data // Add some example data
std::vector<int> counts(96 * 2048, 0); std::vector<int> counts(96 * 2048, 0);
nexus.AddDataset<int>("/raw_data_1/detector_1/counts", counts, nexus.AddDataset<int>("/raw_data_1/detector_1/counts", counts,
{1, 96, 2048}, H5::PredType::NATIVE_INT32); {1, 96, 2048}, H5::PredType::NATIVE_INT);
// Set up proper NeXus group structure with NX_class attributes // Set up proper NeXus group structure with NX_class attributes
nexus.AddGroupAttribute("/raw_data_1", "NX_class", std::string("NXentry")); nexus.AddGroupAttribute("/raw_data_1", "NX_class", std::string("NXentry"));
@@ -1667,7 +1673,7 @@ int main() {
// Add some detector data // Add some detector data
std::vector<int> counts(96 * 2048, 100); std::vector<int> counts(96 * 2048, 100);
nexus.AddDataset<int>("/raw_data_1/detector_1/counts", counts, nexus.AddDataset<int>("/raw_data_1/detector_1/counts", counts,
{1, 96, 2048}, H5::PredType::NATIVE_INT32); {1, 96, 2048}, H5::PredType::NATIVE_INT);
// Add time information // Add time information
std::vector<float> timeAxis(2049); std::vector<float> timeAxis(2049);
@@ -1942,7 +1948,7 @@ nexus.WriteNexusFile("output.nxs");
nxH5::PNeXus nexus; nxH5::PNeXus nexus;
// Add data // Add data
nexus.AddDataset<int>("/raw_data_1/detector_1/counts", counts, dims, nexus.AddDataset<int>("/raw_data_1/detector_1/counts", counts, dims,
H5::PredType::NATIVE_INT32); H5::PredType::NATIVE_INT);
// Add NeXus group structure // Add NeXus group structure
nexus.AddGroupAttribute("/raw_data_1", "NX_class", std::string("NXentry")); nexus.AddGroupAttribute("/raw_data_1", "NX_class", std::string("NXentry"));
nexus.AddGroupAttribute("/raw_data_1/instrument", "NX_class", std::string("NXinstrument")); nexus.AddGroupAttribute("/raw_data_1/instrument", "NX_class", std::string("NXinstrument"));

View File

@@ -415,14 +415,14 @@ void h5nexus_writeTest(const nxH5::PNeXus *nxs, const std::string& outFileName,
"units", std::string("picoseconds")); "units", std::string("picoseconds"));
// spectrum_index // spectrum_index
for (unsigned int i=0; i<66000; i++) for (unsigned int i=0; i<16; i++)
ival.push_back(i+1); ival.push_back(i+1);
nxs_out->AddDataset<int>("/raw_data_1/instrument/detector_1/spectrum_index", ival, {66000}, H5::PredType::NATIVE_FLOAT); nxs_out->AddDataset<int>("/raw_data_1/instrument/detector_1/spectrum_index", ival, {16}, H5::PredType::NATIVE_INT);
ival.clear(); ival.clear();
// dead_time // dead_time
std::vector<float> deadTime(66000, 0.0); std::vector<float> deadTime(16, 0.0);
nxs_out->AddDataset<float>("/raw_data_1/instrument/detector_1/dead_time", deadTime, {66000}, H5::PredType::NATIVE_FLOAT); nxs_out->AddDataset<float>("/raw_data_1/instrument/detector_1/dead_time", deadTime, {16}, H5::PredType::NATIVE_FLOAT);
// attributes dead_time // attributes dead_time
nxs_out->AddDatasetAttribute<float>("/raw_data_1/instrument/detector_1/dead_time", "available", 0); nxs_out->AddDatasetAttribute<float>("/raw_data_1/instrument/detector_1/dead_time", "available", 0);