-
Notifications
You must be signed in to change notification settings - Fork 0
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
Minimal changes to the .DAT file format to avoid storge, bandwidth and processing overheads #4
Comments
I agree with all of those issues, but I don't think we should consider modifying the DAT format except as a last resort. I believe the very existence of the DAT format it itself the problem. The features and flexibility you want already exist in a variety of array storage formats (nrrd, hdf5, zarr, even tif), so the FIBSEM devices should just save data in one of those formats. Unfortunately this is not a programming problem but rather a social / organizational one -- the various stakeholders (i.e., lab heads) need to convince those people with power over the FIBSEM acquisition software to use a standard format. |
This would be a huge win for storage. We have also never used the second channel. |
We are not likely to be able change the format saved at acquisition. That leaves several remaining questions:
I have some ideas for 1 and 2, but we are only really considering 3 and 4 at the moment. A few months ago @d-v-b's pipeline did involve rolling the axes so that the data in the two channels would be contiguous and not interleaved. However, the current code no longer does this: Perhaps we should consider a metadata attribute that describes the axis order so that if we do decide to roll the axes again, we have a way of indicating that? |
If we can't change the format saved at acquisition then IMO the next best thing would be a post-processor which took it from the current format to a single maximally-useful format, reliable enough that we could immediately delete the raw image. Otherwise we're 1.5x-ing our storage costs, not reducing them. Of course, if we're going to have a good, robust, reference implementation of a reader, we may as well make it an importable library as well as a binary, although running with minimal dependencies (or in an apptainer or something) would also be a goal. Certainly in a FOSS runtime. To me, maximally useful means an HDF5 (stable, widely supported, self-documenting) with a dataset for each channel, where all of the metadata is present (and channel-specific metadata goes on the channel dataset) with explicit, canonical names. This should have as few options as possible to avoid the problem of Thousands of Incompatible File Formats: keep the output consistent and generic. It should be able to drop channels, and maybe add compression as well, but as I understand it the raw images compress very poorly and leaving the data raw may allow us to verify it's all allocated, at least, by checking the size. And raw means it can be memory mapped by other readers. Immediately post-acquisition would probably be best, so long as the microscope isn't close to saturating the write speed of the kind of disks it's generally used on. If we wait until it's on the cluster, it's too late - getting it there is error-prone and high-speed cluster storage is (in our case) not sufficiently backed up, so we'd need to keep the originals. It's also very light on resources other than IO so there's no real need to do it on HPC, not to mention highly parallelisable. Either way, a very minor change to the acquisition software which would be very useful would be to write the raw images to a file with some extension indicating that it's a partial file, then rename it as soon as it's done. Then it's much easier to track which files need to be post-processed, backed up, or moved - this is a problem we have already. |
Thanks for the comments @clbarnes . Regarding HDF5, this is the interface that @d-v-b is currently building: Further enhancements to create a context manager are here. If you would like feel free to review this pull request: The approach involves reading in the DAT file using fibsem.py and then writing out a HDF5 file using the above code. |
A lightweight method that we could pursue involves using an external dataset. In this case, we could create a small HDF5 file containing the attribute metadata and point to the data in the existing DAT file. This avoids duplication of the image data. https://docs.h5py.org/en/stable/high/dataset.html#h5py.Dataset.external I recently added support for |
When imaging tens of terabytes one wants to minimize friction in the system. Not changing the LabView code and having a handler software that transforms the data seems like an unnecessary overhead. We have the source code and the ability to change it: I can't see why not add a switch to not store the second channel, which immediately solves both the excess storage and the interleaved problem, and then another switch to save as unsigned 16-bit data type as opposed to signed like it does now. That alone would address all my concerns while maintaining backwards (and forward) compatibility with further additions to the DAT writer software. |
If you can safely make these changes to the software (perhaps you have someone who knows labview well enough to do it, and there are no concerns about potential compatibility issues if Shan makes upstream changes to the acquisition software), then there is no reason to use DAT anymore -- just add an option to save as NRRD or hdf5 or zarr, with the "skip the second channel" and "save as uint16" features included. This would be the ideal outcome, and if this works for you perhaps we could convince the operators of our own FIB-SEM devices to use these changes. |
@acardona, sorry if there is a misunderstanding, but we do not have the ability to modify the code that runs on our microscopes at the moment despite having this source code. We are currently limited to post processing only. Perhaps @avweigel or @StephanPreibisch can explain the current situation in more detail? For the moment, we can try to formulate what our desired outcome is. From both of your comments, this is perhaps a HDF5 file where we have split the channels into two datasets or perhaps even drop one of the channels. This then gives us access to tools such as HDF5-JSON in order to produce easy to access files. We may hold off on dropping the channel for the moment because we would also like to prove that we can do a round trip from DAT to HDF5 and back to DAT again. After demonstrating this we will be able to erase the DAT files. |
In the past I have found Shan Xu to be responsive to user feedback. Will try to ask him directly now. |
I'm not clear if Shan remains in the operative decision hierarchy although I would still appreciate his comments. Before trying to convince others, we should fully determine what is the minimum acceptable engineering target for the file format and specification.
Once we can agree on a spec, we can then start with post-acquisition software. From there we can see if we can optimize the process and/or move some of the process up the data stream. A major hurdle in making changes to the acquisition software is that it is unclear what needs to be done if anything. The benefits to the Hess lab are unclear. What makes it necessary to do this during acquisition or near acquisition? |
As an aside, I have been playing around today and made some progress, on this branch clbarnes/jfibsem_dat#10: Using @d-v-b's code, I produced a spec for each header version as a simple TSV, which looks like this name dtype offset shape
FileMagicNum >u4 0 0
FileVersion >u2 4 0
FileType >u2 6 0
SWdate >S10 8 0
TimeStep >f8 24 0
ChanNum >u1 32 0
EightBit >u1 33 0 This is A) a good reference for anyone of any language and can easily be checked by non-developers, B) very easy to diff without language-specific stuff getting in the way, C) means that all versions can be supported in <100 lines (of python), with new versions simply a case of adding a new TSV to a folder. Using this, I can roundtrip the metadata to a python dict, and with another 20 lines, roundtrip through HDF5 attributes for a byte-identical output, theoretically for any current or future header version (I only have v8 to test on). Small, simple, maintainable; and non-developers could even update the spec themselves in excel or whatever. My vision would be that those TSVs live in a repo which is used as a git submodule by implementations using them. This low-level representation could also easily be used to generate code for a higher-level representation (with type checking etc.) or for less dynamic languages. I can also successfully round-trip the data array through HDF5, although it requires what I can only assume are a bunch of copies due to h5py normalising byte and/or axis orders. Byte-identity on the whole file may not be possible because some dat files seem to have a post-array footer which I haven't seen any documentation for, although I suppose that could just be dumped into the HDF5 metadata as an array of uint8 and treated specially. But the metadata+data portion of it is going fine.
The very nature of collaborative research means that everyone benefits from people using open standards and tools. Sometimes formats don't exist to represent what you need. That is clearly not the case here - HDF5 does exactly what we need and more, and has well-supported implementations for just about every language anyone might want to use, including for HPC access. If the concept of open science is not enough to sway them, then perhaps "you would have saved yourself the time of every conversation you've ever had about this file format, past present and future" would? |
@clbarnes I did prototype a Julia struct for fun based on the v9 header: One difference is that I also added spacer fields to also ingest any spare bytes between the existing fields. Because of the spacer fields, I do not have to directly encode the offsets. They can derived from the size of the field types. A complication that I found is that the in-memory representation of the struct may be different from byte offsets due to data structure alignment issues. |
That's a great idea, thank you. He is in the best position to add hdf5 writing support, and hopefully if he hears from enough people then it will be clear how valuable the effort is to people processing the data downstream.
Hard disagree. We are not grappling with a computer science / programming problem. We know that any number of standard formats for array data + metadata will work here, and the details can be hashed out once any one of those formats is picked. Instead, this is a social engineering problem ("how can we get someone who knows labview to implement hdf5 writing in the FIBSEM software") and perhaps it is impossible, or at least beyond our power. |
If our efforts to change the labview code fail, then I second the effort to specify a language-agnostic definition of the dat header (for each version). |
@d-v-b , I already prototyped this and talked this through with Dan. I have a LabView module that can write a HDF5 file with the HDF5 library. This is not the problem. |
Writing labview code is not the same as implementing it in the FIBSEM software |
This is integrated in the FIBSEM software. See that "SW Date" with the globe. That's pulling a global variable out of the FIBSEM software. |
Since we're talking about contacting Shan (who was also invited to this repo), here's my last correspondence with him.
|
Here is the comment within the LabView source code that describes what all these attributes are. From "Zeiss File Header Tclk.vi":
|
Ah! That's basically what's been missing. To make doubly sure, everything is byte-bigendian and bit-littleendian, SGL is a 32-bit float, STR is a null-padded ASCII string assumed to continue until the next byte offset, and SWDate is encoded as "DD/MM/YYYY" (switching this to ISO-8601 would be great). IIRC FIB mode and Milling PID measured are a enums - what are the meanings of the possible values? |
The screenshot above is from "Zeiss File Header Tclk.vi": The context help for these functions may be helpful in understanding the above. Write to Binary File: Set File Position:
Yes. The default for "Write to Binary File" is "big-endian, network order".
Yes. See https://www.ni.com/docs/en-US/bundle/labview/page/lvhowto/floating_point_numbers.html
Correct
I am not sure where this is coming from at the moment. It is possible this date is being manually entered or is in an INI file.
This is internally "FIB PID measured"
|
@acardona During our Zoom meeting, one item you brought up was if the attributes could be read as text. There is a tool hdf5json from The HDF Group that facilitates this. Here I used the "-d option" to only dump attributes and not the dataset values to JSON.
Partial JSON dump of prototype HDF5 file{
"apiVersion": "1.1.1",
"datasets": {
"bef343f4-dc54-11ec-b49e-0050568f771f": {
"alias": [
"/0-0-0"
],
"attributes": [
{
"name": "AI1",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 1
},
{
"name": "AI2",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 1
},
...
{
"name": "Restart",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 0
},
{
"name": "SEMAlnX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 1.4631574153900146
},
{
"name": "SEMAlnY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 2.844007968902588
},
{
"name": "SEMApr",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 30
},
{
"name": "SEMCurr",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 3.000000026176508e-09
},
{
"name": "SEMRot",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "SEMShiftX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "SEMShiftY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": -0.0
},
{
"name": "SEMSpecimenI",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "SEMSpecimenICurrent",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": -1.7317256927490234
},
{
"name": "SEMStiX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 1.7686651945114136
},
{
"name": "SEMStiY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.5602626204490662
},
{
"name": "SWdate",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"charSet": "H5T_CSET_UTF8",
"class": "H5T_STRING",
"length": "H5T_VARIABLE",
"strPad": "H5T_STR_NULLTERM"
},
"value": "04/20/2021"
},
{
"name": "SampleID",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"charSet": "H5T_CSET_UTF8",
"class": "H5T_STRING",
"length": "H5T_VARIABLE",
"strPad": "H5T_STR_NULLTERM"
},
"value": "Z0720-07m_BR_Sec18"
},
{
"name": "Scaling",
"shape": {
"class": "H5S_SIMPLE",
"dims": [
2,
4
]
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": [
[
2000000.0,
-6105.67529296875,
0.5854036211967468,
0.07999999821186066
],
[
2000000.0,
-5383.72119140625,
0.02265683189034462,
2.0
]
]
},
{
"name": "ScanRate",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 3125000.0
},
{
"name": "StageM",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "StageMove",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 0
},
{
"name": "StageR",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 198.97982788085938
},
{
"name": "StageT",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "StageX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 63.375003814697266
},
{
"name": "StageY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 64.87300872802734
},
{
"name": "StageZ",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 29.950000762939453
},
{
"name": "Temperature",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 72.5
},
{
"name": "TimeStep",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 4e-08
},
{
"name": "WD",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 3.5221710205078125
},
{
"name": "XResolution",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 7437
},
{
"name": "Xmax",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": -2.664947986602783
},
{
"name": "Xmin",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": -5.469804763793945
},
{
"name": "YResolution",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 3500
},
{
"name": "ZeissScanSpeed",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 3
}
],
"creationProperties": {
"allocTime": "H5D_ALLOC_TIME_INCR",
"fillTime": "H5D_FILL_TIME_ALLOC",
"filters": [
{
"class": "H5Z_FILTER_USER",
"id": 32001,
"name": "blosc",
"parameters": [
2,
2,
2,
52059000,
9,
2,
5
]
}
],
"layout": {
"class": "H5D_CHUNKED",
"dims": [
1,
3500,
7437
]
}
},
"shape": {
"class": "H5S_SIMPLE",
"dims": [
2,
3500,
7437
]
},
"type": {
"base": "H5T_STD_I16BE",
"class": "H5T_INTEGER"
}
},
"bef36780-dc54-11ec-b49e-0050568f771f": {
"alias": [
"/0-0-1"
],
"attributes": [
{
"name": "AI1",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 1
},
{
"name": "AI2",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 1
},
{
"name": "AI3",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 0
},
{
"name": "AI4",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 0
},
{
"name": "BeamDump1I",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 1.4829021692276
},
{
"name": "BeamDump2I",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 2.4120490550994873
},
{
"name": "BrightnessA",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 30.0
},
{
"name": "BrightnessB",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 30.0
},
{
"name": "ChamVac",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 3.1488278295910277e-07
},
{
"name": "ChanNum",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 2
},
{
"name": "ContrastA",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 26.0
},
{
"name": "ContrastB",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 38.0
},
{
"name": "DecimatingFactor",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 14
},
{
"name": "DetA",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"charSet": "H5T_CSET_UTF8",
"class": "H5T_STRING",
"length": "H5T_VARIABLE",
"strPad": "H5T_STR_NULLTERM"
},
"value": "InLens"
},
{
"name": "DetB",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"charSet": "H5T_CSET_UTF8",
"class": "H5T_STRING",
"length": "H5T_VARIABLE",
"strPad": "H5T_STR_NULLTERM"
},
"value": "ESB @ 600 V"
},
{
"name": "DetC",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"charSet": "H5T_CSET_UTF8",
"class": "H5T_STRING",
"length": "H5T_VARIABLE",
"strPad": "H5T_STR_NULLTERM"
},
"value": "Detector C"
},
{
"name": "DetD",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"charSet": "H5T_CSET_UTF8",
"class": "H5T_STRING",
"length": "H5T_VARIABLE",
"strPad": "H5T_STR_NULLTERM"
},
"value": "Detector D"
},
{
"name": "Detmax",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 10.0
},
{
"name": "Detmin",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": -10.0
},
{
"name": "EHT",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 1.2000000476837158
},
{
"name": "EightBit",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 0
},
{
"name": "FIBAlnX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 22055.0
},
{
"name": "FIBAlnY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 2640.0
},
{
"name": "FIBCurr",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 1.495361328125
},
{
"name": "FIBFOV",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 500.0
},
{
"name": "FIBFocus",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 14080.0
},
{
"name": "FIBProb",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 15
},
{
"name": "FIBRot",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "FIBShiftX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "FIBShiftY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "FIBSliceNum",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 16670
},
{
"name": "FIBSpecimenI",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 28.734291076660156
},
{
"name": "FIBStiX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 15.000000953674316
},
{
"name": "FIBStiY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": -17.0
},
{
"name": "FaradayCupI",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 14.4482421875
},
{
"name": "FileLength",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 104119024
},
{
"name": "FileMagicNum",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 3555587570
},
{
"name": "FileType",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 1
},
{
"name": "FileVersion",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 9
},
{
"name": "FirstX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": -7315
},
{
"name": "FirstY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": -3073
},
{
"name": "FocusIndex",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 1.0405718088150024
},
{
"name": "FramelineRampdownRatio",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.10000000149011612
},
{
"name": "GunVac",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 5.238325884171502e-10
},
{
"name": "HighCurrent",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 0
},
{
"name": "MachineID",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"charSet": "H5T_CSET_UTF8",
"class": "H5T_STRING",
"length": "H5T_VARIABLE",
"strPad": "H5T_STR_NULLTERM"
},
"value": "Jeiss3/Merlin-6257"
},
{
"name": "Mag",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 381.131103515625
},
{
"name": "MillingI",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 12.994636535644531
},
{
"name": "MillingLineTime",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 20.5
},
{
"name": "MillingLinesPerImage",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 1
},
{
"name": "MillingPIDD",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "MillingPIDI",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.009999999776482582
},
{
"name": "MillingPIDMeasured",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 3
},
{
"name": "MillingPIDOn",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 1
},
{
"name": "MillingPIDP",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0010000000474974513
},
{
"name": "MillingPIDTarget",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 13.0
},
{
"name": "MillingPIDTargetSlope",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "MillingULAng",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 89.0
},
{
"name": "MillingURAng",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 91.0
},
{
"name": "MillingXResolution",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 4096
},
{
"name": "MillingXSize",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 336.0
},
{
"name": "MillingYResolution",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 46251
},
{
"name": "MillingYSize",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 370.0
},
{
"name": "MillingYVoltage",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.13248591125011444
},
{
"name": "Mode",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 0
},
{
"name": "Notes",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"charSet": "H5T_CSET_UTF8",
"class": "H5T_STRING",
"length": "H5T_VARIABLE",
"strPad": "H5T_STR_NULLTERM"
},
"value": "Z0720-07m_BR_Sec18, BF 336x121um, 25.0s @13.0nA /8nm @15nA-4, lens2 14130-50V = 14080V, bias 0V, deflector -200V"
},
{
"name": "Oversampling",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 8
},
{
"name": "PixelSize",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 7.999856948852539
},
{
"name": "RawHeader",
"shape": {
"class": "H5S_SIMPLE",
"dims": [
1024
]
},
"type": {
"base": "H5T_STD_U8LE",
"class": "H5T_INTEGER"
},
"value": [
211,
237,
245,
242,
0,
9,
0,
1,
48,
52,
47,
50,
48,
47,
50,
48,
50,
49,
0,
0,
0,
0,
0,
0,
62,
101,
121,
142,
226,
48,
140,
58,
2,
0,
0,
0,
73,
244,
36,
0,
197,
190,
205,
103,
63,
21,
221,
3,
61,
163,
215,
10,
73,
244,
36,
0,
197,
168,
61,
197,
60,
185,
154,
210,
64,
0,
0,
0,
0,
0,
255,
255,
227,
109,
255,
255,
243,
255,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
29,
13,
0,
0,
13,
172,
0,
8,
0,
3,
74,
62,
188,
32,
61,
204,
204,
205,
192,
175,
8,
164,
192,
42,
142,
130,
193,
32,
0,
0,
65,
32,
0,
0,
0,
14,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
1,
0,
0,
90,
48,
55,
50,
48,
45,
48,
55,
109,
95,
66,
82,
95,
83,
101,
99,
49,
56,
0,
0,
0,
0,
0,
0,
0,
90,
48,
55,
50,
48,
45,
48,
55,
109,
95,
66,
82,
95,
83,
101,
99,
49,
56,
44,
32,
66,
70,
32,
51,
51,
54,
120,
49,
50,
49,
117,
109,
44,
32,
50,
53,
46,
48,
115,
32,
64,
49,
51,
46,
48,
110,
65,
32,
47,
56,
110,
109,
32,
64,
49,
53,
110,
65,
45,
52,
44,
32,
108,
101,
110,
115,
50,
32,
49,
52,
49,
51,
48,
45,
53,
48,
86,
32,
61,
32,
49,
52,
48,
56,
48,
86,
44,
32,
98,
105,
97,
115,
32,
48,
86,
44,
32,
100,
101,
102,
108,
101,
99,
116,
111,
114,
32,
45,
50,
48,
48,
86,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
73,
110,
76,
101,
110,
115,
0,
0,
0,
0,
69,
83,
66,
32,
64,
32,
54,
48,
48,
32,
86,
0,
0,
0,
0,
0,
0,
0,
0,
0,
68,
101,
116,
101,
99,
116,
111,
114,
32,
67,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
68,
101,
116,
101,
99,
116,
111,
114,
32,
68,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
67,
190,
144,
200,
64,
255,
254,
212,
64,
97,
97,
215,
63,
153,
153,
154,
0,
0,
0,
0,
30,
0,
0,
0,
0,
0,
0,
0,
0,
0,
49,
78,
40,
143,
0,
0,
0,
0,
52,
169,
13,
41,
48,
15,
253,
113,
0,
0,
0,
0,
0,
0,
0,
0,
128,
0,
0,
0,
63,
223,
212,
92,
63,
20,
40,
7,
63,
187,
72,
190,
64,
54,
4,
58,
66,
125,
128,
1,
66,
129,
190,
251,
65,
239,
153,
154,
0,
0,
0,
0,
67,
70,
250,
214,
0,
0,
0,
0,
0,
0,
65,
240,
0,
0,
65,
208,
0,
0,
65,
240,
0,
0,
66,
24,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
70,
92,
0,
0,
15,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
63,
191,
104,
0,
0,
0,
0,
0,
70,
172,
78,
0,
69,
37,
0,
0,
65,
112,
0,
1,
193,
136,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
16,
0,
0,
0,
180,
171,
67,
168,
0,
0,
67,
185,
0,
0,
66,
178,
0,
0,
66,
182,
0,
0,
65,
164,
0,
0,
67,
250,
0,
0,
0,
1,
1,
0,
0,
3,
65,
80,
0,
0,
0,
0,
0,
0,
58,
131,
18,
111,
60,
35,
215,
10,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
74,
101,
105,
115,
115,
51,
47,
77,
101,
114,
108,
105,
110,
45,
54,
50,
53,
55,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
66,
145,
0,
0,
65,
103,
44,
0,
65,
229,
223,
212,
63,
189,
207,
189,
191,
224,
53,
162,
62,
7,
170,
99,
63,
133,
49,
117,
0,
0,
65,
30,
64,
26,
95,
3,
65,
79,
234,
8,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
6,
52,
186,
240,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
]
},
{
"name": "Restart",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 0
},
{
"name": "SEMAlnX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 1.4631574153900146
},
{
"name": "SEMAlnY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 2.844007968902588
},
{
"name": "SEMApr",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 30
},
{
"name": "SEMCurr",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 3.000000026176508e-09
},
{
"name": "SEMRot",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "SEMShiftX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "SEMShiftY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": -0.0
},
{
"name": "SEMSpecimenI",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "SEMSpecimenICurrent",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": -1.7516367435455322
},
{
"name": "SEMStiX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 1.7486681938171387
},
{
"name": "SEMStiY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.5787357687950134
},
{
"name": "SWdate",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"charSet": "H5T_CSET_UTF8",
"class": "H5T_STRING",
"length": "H5T_VARIABLE",
"strPad": "H5T_STR_NULLTERM"
},
"value": "04/20/2021"
},
{
"name": "SampleID",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"charSet": "H5T_CSET_UTF8",
"class": "H5T_STRING",
"length": "H5T_VARIABLE",
"strPad": "H5T_STR_NULLTERM"
},
"value": "Z0720-07m_BR_Sec18"
},
{
"name": "Scaling",
"shape": {
"class": "H5S_SIMPLE",
"dims": [
2,
4
]
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": [
[
2000000.0,
-6105.67529296875,
0.5854036211967468,
0.07999999821186066
],
[
2000000.0,
-5383.72119140625,
0.02265683189034462,
2.0
]
]
},
{
"name": "ScanRate",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 3125000.0
},
{
"name": "StageM",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "StageMove",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 0
},
{
"name": "StageR",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 198.97982788085938
},
{
"name": "StageT",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "StageX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 63.375003814697266
},
{
"name": "StageY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 64.87300872802734
},
{
"name": "StageZ",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 29.950000762939453
},
{
"name": "Temperature",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 72.5
},
{
"name": "TimeStep",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 4e-08
},
{
"name": "WD",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 3.521596670150757
},
{
"name": "XResolution",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 7437
},
{
"name": "Xmax",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": -2.664947986602783
},
{
"name": "Xmin",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": -5.469804763793945
},
{
"name": "YResolution",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 3500
},
{
"name": "ZeissScanSpeed",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 3
}
],
"creationProperties": {
"allocTime": "H5D_ALLOC_TIME_INCR",
"fillTime": "H5D_FILL_TIME_ALLOC",
"filters": [
{
"class": "H5Z_FILTER_USER",
"id": 32001,
"name": "blosc",
"parameters": [
2,
2,
2,
52059000,
9,
2,
5
]
}
],
"layout": {
"class": "H5D_CHUNKED",
"dims": [
1,
3500,
7437
]
}
},
"shape": {
"class": "H5S_SIMPLE",
"dims": [
2,
3500,
7437
]
},
"type": {
"base": "H5T_STD_I16BE",
"class": "H5T_INTEGER"
}
},
"bef3881e-dc54-11ec-b49e-0050568f771f": {
"alias": [
"/0-0-2"
],
"attributes": [
{
"name": "AI1",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 1
},
{
"name": "AI2",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 1
},
{
"name": "AI3",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 0
},
{
"name": "AI4",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 0
},
{
"name": "BeamDump1I",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 1.4829021692276
},
{
"name": "BeamDump2I",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 2.4120490550994873
},
{
"name": "BrightnessA",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 30.0
},
{
"name": "BrightnessB",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 30.0
},
{
"name": "ChamVac",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 3.1469843975173717e-07
},
{
"name": "ChanNum",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 2
},
{
"name": "ContrastA",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 26.0
},
{
"name": "ContrastB",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 38.0
},
{
"name": "DecimatingFactor",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 14
},
{
"name": "DetA",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"charSet": "H5T_CSET_UTF8",
"class": "H5T_STRING",
"length": "H5T_VARIABLE",
"strPad": "H5T_STR_NULLTERM"
},
"value": "InLens"
},
{
"name": "DetB",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"charSet": "H5T_CSET_UTF8",
"class": "H5T_STRING",
"length": "H5T_VARIABLE",
"strPad": "H5T_STR_NULLTERM"
},
"value": "ESB @ 600 V"
},
{
"name": "DetC",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"charSet": "H5T_CSET_UTF8",
"class": "H5T_STRING",
"length": "H5T_VARIABLE",
"strPad": "H5T_STR_NULLTERM"
},
"value": "Detector C"
},
{
"name": "DetD",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"charSet": "H5T_CSET_UTF8",
"class": "H5T_STRING",
"length": "H5T_VARIABLE",
"strPad": "H5T_STR_NULLTERM"
},
"value": "Detector D"
},
{
"name": "Detmax",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 10.0
},
{
"name": "Detmin",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": -10.0
},
{
"name": "EHT",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 1.2000000476837158
},
{
"name": "EightBit",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 0
},
{
"name": "FIBAlnX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 22055.0
},
{
"name": "FIBAlnY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 2640.0
},
{
"name": "FIBCurr",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 1.4892578125
},
{
"name": "FIBFOV",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 500.0
},
{
"name": "FIBFocus",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 14080.0
},
{
"name": "FIBProb",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 15
},
{
"name": "FIBRot",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "FIBShiftX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "FIBShiftY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "FIBSliceNum",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 16670
},
{
"name": "FIBSpecimenI",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 28.734291076660156
},
{
"name": "FIBStiX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 15.000000953674316
},
{
"name": "FIBStiY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": -17.0
},
{
"name": "FaradayCupI",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 14.4482421875
},
{
"name": "FileLength",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 104119024
},
{
"name": "FileMagicNum",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 3555587570
},
{
"name": "FileType",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 1
},
{
"name": "FileVersion",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 9
},
{
"name": "FirstX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": -128
},
{
"name": "FirstY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": -3073
},
{
"name": "FocusIndex",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 1.2679680585861206
},
{
"name": "FramelineRampdownRatio",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.10000000149011612
},
{
"name": "GunVac",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 5.238325884171502e-10
},
{
"name": "HighCurrent",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 0
},
{
"name": "MachineID",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"charSet": "H5T_CSET_UTF8",
"class": "H5T_STRING",
"length": "H5T_VARIABLE",
"strPad": "H5T_STR_NULLTERM"
},
"value": "Jeiss3/Merlin-6257"
},
{
"name": "Mag",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 381.131103515625
},
{
"name": "MillingI",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 12.994636535644531
},
{
"name": "MillingLineTime",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 20.5
},
{
"name": "MillingLinesPerImage",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 1
},
{
"name": "MillingPIDD",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "MillingPIDI",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.009999999776482582
},
{
"name": "MillingPIDMeasured",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 3
},
{
"name": "MillingPIDOn",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 1
},
{
"name": "MillingPIDP",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0010000000474974513
},
{
"name": "MillingPIDTarget",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 13.0
},
{
"name": "MillingPIDTargetSlope",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "MillingULAng",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 89.0
},
{
"name": "MillingURAng",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 91.0
},
{
"name": "MillingXResolution",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 4096
},
{
"name": "MillingXSize",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 336.0
},
{
"name": "MillingYResolution",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 46251
},
{
"name": "MillingYSize",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 370.0
},
{
"name": "MillingYVoltage",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.13248591125011444
},
{
"name": "Mode",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 0
},
{
"name": "Notes",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"charSet": "H5T_CSET_UTF8",
"class": "H5T_STRING",
"length": "H5T_VARIABLE",
"strPad": "H5T_STR_NULLTERM"
},
"value": "Z0720-07m_BR_Sec18, BF 336x121um, 25.0s @13.0nA /8nm @15nA-4, lens2 14130-50V = 14080V, bias 0V, deflector -200V"
},
{
"name": "Oversampling",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 8
},
{
"name": "PixelSize",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 7.999856948852539
},
{
"name": "RawHeader",
"shape": {
"class": "H5S_SIMPLE",
"dims": [
1024
]
},
"type": {
"base": "H5T_STD_U8LE",
"class": "H5T_INTEGER"
},
"value": [
211,
237,
245,
242,
0,
9,
0,
1,
48,
52,
47,
50,
48,
47,
50,
48,
50,
49,
0,
0,
0,
0,
0,
0,
62,
101,
121,
142,
226,
48,
140,
58,
2,
0,
0,
0,
73,
244,
36,
0,
197,
190,
205,
103,
63,
21,
221,
3,
61,
163,
215,
10,
73,
244,
36,
0,
197,
168,
61,
197,
60,
185,
154,
210,
64,
0,
0,
0,
0,
0,
255,
255,
255,
128,
255,
255,
243,
255,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
29,
13,
0,
0,
13,
172,
0,
8,
0,
3,
74,
62,
188,
32,
61,
204,
204,
205,
192,
175,
8,
164,
192,
42,
142,
130,
193,
32,
0,
0,
65,
32,
0,
0,
0,
14,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
1,
0,
0,
90,
48,
55,
50,
48,
45,
48,
55,
109,
95,
66,
82,
95,
83,
101,
99,
49,
56,
0,
0,
0,
0,
0,
0,
0,
90,
48,
55,
50,
48,
45,
48,
55,
109,
95,
66,
82,
95,
83,
101,
99,
49,
56,
44,
32,
66,
70,
32,
51,
51,
54,
120,
49,
50,
49,
117,
109,
44,
32,
50,
53,
46,
48,
115,
32,
64,
49,
51,
46,
48,
110,
65,
32,
47,
56,
110,
109,
32,
64,
49,
53,
110,
65,
45,
52,
44,
32,
108,
101,
110,
115,
50,
32,
49,
52,
49,
51,
48,
45,
53,
48,
86,
32,
61,
32,
49,
52,
48,
56,
48,
86,
44,
32,
98,
105,
97,
115,
32,
48,
86,
44,
32,
100,
101,
102,
108,
101,
99,
116,
111,
114,
32,
45,
50,
48,
48,
86,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
73,
110,
76,
101,
110,
115,
0,
0,
0,
0,
69,
83,
66,
32,
64,
32,
54,
48,
48,
32,
86,
0,
0,
0,
0,
0,
0,
0,
0,
0,
68,
101,
116,
101,
99,
116,
111,
114,
32,
67,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
68,
101,
116,
101,
99,
116,
111,
114,
32,
68,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
67,
190,
144,
200,
64,
255,
254,
212,
64,
97,
110,
27,
63,
153,
153,
154,
0,
0,
0,
0,
30,
0,
0,
0,
0,
0,
0,
0,
0,
0,
49,
78,
40,
143,
0,
0,
0,
0,
52,
168,
243,
211,
48,
15,
253,
113,
0,
0,
0,
0,
0,
0,
0,
0,
128,
0,
0,
0,
63,
228,
162,
160,
63,
34,
82,
180,
63,
187,
72,
190,
64,
54,
4,
58,
66,
125,
128,
1,
66,
129,
190,
251,
65,
239,
153,
154,
0,
0,
0,
0,
67,
70,
250,
214,
0,
0,
0,
0,
0,
0,
65,
240,
0,
0,
65,
208,
0,
0,
65,
240,
0,
0,
66,
24,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
70,
92,
0,
0,
15,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
63,
190,
160,
0,
0,
0,
0,
0,
70,
172,
78,
0,
69,
37,
0,
0,
65,
112,
0,
1,
193,
136,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
16,
0,
0,
0,
180,
171,
67,
168,
0,
0,
67,
185,
0,
0,
66,
178,
0,
0,
66,
182,
0,
0,
65,
164,
0,
0,
67,
250,
0,
0,
0,
1,
1,
0,
0,
3,
65,
80,
0,
0,
0,
0,
0,
0,
58,
131,
18,
111,
60,
35,
215,
10,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
74,
101,
105,
115,
115,
51,
47,
77,
101,
114,
108,
105,
110,
45,
54,
50,
53,
55,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
66,
145,
0,
0,
65,
103,
44,
0,
65,
229,
223,
212,
63,
189,
207,
189,
191,
220,
101,
228,
62,
7,
170,
99,
63,
162,
76,
199,
0,
0,
65,
30,
64,
26,
95,
3,
65,
79,
234,
8,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
6,
52,
186,
240,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
]
},
{
"name": "Restart",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 0
},
{
"name": "SEMAlnX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 1.4631574153900146
},
{
"name": "SEMAlnY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 2.844007968902588
},
{
"name": "SEMApr",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 30
},
{
"name": "SEMCurr",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 3.000000026176508e-09
},
{
"name": "SEMRot",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "SEMShiftX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "SEMShiftY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": -0.0
},
{
"name": "SEMSpecimenI",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "SEMSpecimenICurrent",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": -1.7218594551086426
},
{
"name": "SEMStiX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 1.7862129211425781
},
{
"name": "SEMStiY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.6340744495391846
},
{
"name": "SWdate",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"charSet": "H5T_CSET_UTF8",
"class": "H5T_STRING",
"length": "H5T_VARIABLE",
"strPad": "H5T_STR_NULLTERM"
},
"value": "04/20/2021"
},
{
"name": "SampleID",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"charSet": "H5T_CSET_UTF8",
"class": "H5T_STRING",
"length": "H5T_VARIABLE",
"strPad": "H5T_STR_NULLTERM"
},
"value": "Z0720-07m_BR_Sec18"
},
{
"name": "Scaling",
"shape": {
"class": "H5S_SIMPLE",
"dims": [
2,
4
]
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": [
[
2000000.0,
-6105.67529296875,
0.5854036211967468,
0.07999999821186066
],
[
2000000.0,
-5383.72119140625,
0.02265683189034462,
2.0
]
]
},
{
"name": "ScanRate",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 3125000.0
},
{
"name": "StageM",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "StageMove",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 0
},
{
"name": "StageR",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 198.97982788085938
},
{
"name": "StageT",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "StageX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 63.375003814697266
},
{
"name": "StageY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 64.87300872802734
},
{
"name": "StageZ",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 29.950000762939453
},
{
"name": "Temperature",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 72.5
},
{
"name": "TimeStep",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 4e-08
},
{
"name": "WD",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 3.5223453044891357
},
{
"name": "XResolution",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 7437
},
{
"name": "Xmax",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": -2.664947986602783
},
{
"name": "Xmin",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": -5.469804763793945
},
{
"name": "YResolution",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 3500
},
{
"name": "ZeissScanSpeed",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 3
}
],
"creationProperties": {
"allocTime": "H5D_ALLOC_TIME_INCR",
"fillTime": "H5D_FILL_TIME_ALLOC",
"filters": [
{
"class": "H5Z_FILTER_USER",
"id": 32001,
"name": "blosc",
"parameters": [
2,
2,
2,
52059000,
9,
2,
5
]
}
],
"layout": {
"class": "H5D_CHUNKED",
"dims": [
1,
3500,
7437
]
}
},
"shape": {
"class": "H5S_SIMPLE",
"dims": [
2,
3500,
7437
]
},
"type": {
"base": "H5T_STD_I16BE",
"class": "H5T_INTEGER"
}
},
"bef3a70e-dc54-11ec-b49e-0050568f771f": {
"alias": [
"/0-0-3"
],
"attributes": [
{
"name": "AI1",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 1
},
{
"name": "AI2",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 1
},
{
"name": "AI3",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 0
},
{
"name": "AI4",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 0
},
{
"name": "BeamDump1I",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 1.4829021692276
},
{
"name": "BeamDump2I",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 2.4120490550994873
},
{
"name": "BrightnessA",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 30.0
},
{
"name": "BrightnessB",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 30.0
},
{
"name": "ChamVac",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 3.1488278295910277e-07
},
{
"name": "ChanNum",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 2
},
{
"name": "ContrastA",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 26.0
},
{
"name": "ContrastB",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 38.0
},
{
"name": "DecimatingFactor",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 14
},
{
"name": "DetA",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"charSet": "H5T_CSET_UTF8",
"class": "H5T_STRING",
"length": "H5T_VARIABLE",
"strPad": "H5T_STR_NULLTERM"
},
"value": "InLens"
},
{
"name": "DetB",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"charSet": "H5T_CSET_UTF8",
"class": "H5T_STRING",
"length": "H5T_VARIABLE",
"strPad": "H5T_STR_NULLTERM"
},
"value": "ESB @ 600 V"
},
{
"name": "DetC",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"charSet": "H5T_CSET_UTF8",
"class": "H5T_STRING",
"length": "H5T_VARIABLE",
"strPad": "H5T_STR_NULLTERM"
},
"value": "Detector C"
},
{
"name": "DetD",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"charSet": "H5T_CSET_UTF8",
"class": "H5T_STRING",
"length": "H5T_VARIABLE",
"strPad": "H5T_STR_NULLTERM"
},
"value": "Detector D"
},
{
"name": "Detmax",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 10.0
},
{
"name": "Detmin",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": -10.0
},
{
"name": "EHT",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 1.2000000476837158
},
{
"name": "EightBit",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 0
},
{
"name": "FIBAlnX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 22055.0
},
{
"name": "FIBAlnY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 2640.0
},
{
"name": "FIBCurr",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 1.4892578125
},
{
"name": "FIBFOV",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 500.0
},
{
"name": "FIBFocus",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 14080.0
},
{
"name": "FIBProb",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 15
},
{
"name": "FIBRot",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "FIBShiftX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "FIBShiftY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "FIBSliceNum",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 16670
},
{
"name": "FIBSpecimenI",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 28.734291076660156
},
{
"name": "FIBStiX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 15.000000953674316
},
{
"name": "FIBStiY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": -17.0
},
{
"name": "FaradayCupI",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 14.4482421875
},
{
"name": "FileLength",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 104119024
},
{
"name": "FileMagicNum",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 3555587570
},
{
"name": "FileType",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 1
},
{
"name": "FileVersion",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 9
},
{
"name": "FirstX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 7060
},
{
"name": "FirstY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": -3073
},
{
"name": "FocusIndex",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 1.4718122482299805
},
{
"name": "FramelineRampdownRatio",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.10000000149011612
},
{
"name": "GunVac",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 5.238325884171502e-10
},
{
"name": "HighCurrent",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 0
},
{
"name": "MachineID",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"charSet": "H5T_CSET_UTF8",
"class": "H5T_STRING",
"length": "H5T_VARIABLE",
"strPad": "H5T_STR_NULLTERM"
},
"value": "Jeiss3/Merlin-6257"
},
{
"name": "Mag",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 381.131103515625
},
{
"name": "MillingI",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 12.994636535644531
},
{
"name": "MillingLineTime",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 20.5
},
{
"name": "MillingLinesPerImage",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 1
},
{
"name": "MillingPIDD",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "MillingPIDI",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.009999999776482582
},
{
"name": "MillingPIDMeasured",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 3
},
{
"name": "MillingPIDOn",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 1
},
{
"name": "MillingPIDP",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0010000000474974513
},
{
"name": "MillingPIDTarget",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 13.0
},
{
"name": "MillingPIDTargetSlope",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "MillingULAng",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 89.0
},
{
"name": "MillingURAng",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 91.0
},
{
"name": "MillingXResolution",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 4096
},
{
"name": "MillingXSize",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 336.0
},
{
"name": "MillingYResolution",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 46251
},
{
"name": "MillingYSize",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 370.0
},
{
"name": "MillingYVoltage",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.13248591125011444
},
{
"name": "Mode",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 0
},
{
"name": "Notes",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"charSet": "H5T_CSET_UTF8",
"class": "H5T_STRING",
"length": "H5T_VARIABLE",
"strPad": "H5T_STR_NULLTERM"
},
"value": "Z0720-07m_BR_Sec18, BF 336x121um, 25.0s @13.0nA /8nm @15nA-4, lens2 14130-50V = 14080V, bias 0V, deflector -200V"
},
{
"name": "Oversampling",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 8
},
{
"name": "PixelSize",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 7.999856948852539
},
{
"name": "RawHeader",
"shape": {
"class": "H5S_SIMPLE",
"dims": [
1024
]
},
"type": {
"base": "H5T_STD_U8LE",
"class": "H5T_INTEGER"
},
"value": [
211,
237,
245,
242,
0,
9,
0,
1,
48,
52,
47,
50,
48,
47,
50,
48,
50,
49,
0,
0,
0,
0,
0,
0,
62,
101,
121,
142,
226,
48,
140,
58,
2,
0,
0,
0,
73,
244,
36,
0,
197,
190,
205,
103,
63,
21,
221,
3,
61,
163,
215,
10,
73,
244,
36,
0,
197,
168,
61,
197,
60,
185,
154,
210,
64,
0,
0,
0,
0,
0,
0,
0,
27,
148,
255,
255,
243,
255,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
29,
13,
0,
0,
13,
172,
0,
8,
0,
3,
74,
62,
188,
32,
61,
204,
204,
205,
192,
175,
8,
164,
192,
42,
142,
130,
193,
32,
0,
0,
65,
32,
0,
0,
0,
14,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
1,
0,
0,
90,
48,
55,
50,
48,
45,
48,
55,
109,
95,
66,
82,
95,
83,
101,
99,
49,
56,
0,
0,
0,
0,
0,
0,
0,
90,
48,
55,
50,
48,
45,
48,
55,
109,
95,
66,
82,
95,
83,
101,
99,
49,
56,
44,
32,
66,
70,
32,
51,
51,
54,
120,
49,
50,
49,
117,
109,
44,
32,
50,
53,
46,
48,
115,
32,
64,
49,
51,
46,
48,
110,
65,
32,
47,
56,
110,
109,
32,
64,
49,
53,
110,
65,
45,
52,
44,
32,
108,
101,
110,
115,
50,
32,
49,
52,
49,
51,
48,
45,
53,
48,
86,
32,
61,
32,
49,
52,
48,
56,
48,
86,
44,
32,
98,
105,
97,
115,
32,
48,
86,
44,
32,
100,
101,
102,
108,
101,
99,
116,
111,
114,
32,
45,
50,
48,
48,
86,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
73,
110,
76,
101,
110,
115,
0,
0,
0,
0,
69,
83,
66,
32,
64,
32,
54,
48,
48,
32,
86,
0,
0,
0,
0,
0,
0,
0,
0,
0,
68,
101,
116,
101,
99,
116,
111,
114,
32,
67,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
68,
101,
116,
101,
99,
116,
111,
114,
32,
68,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
67,
190,
144,
200,
64,
255,
254,
212,
64,
97,
141,
217,
63,
153,
153,
154,
0,
0,
0,
0,
30,
0,
0,
0,
0,
0,
0,
0,
0,
0,
49,
78,
40,
143,
0,
0,
0,
0,
52,
169,
13,
41,
48,
15,
253,
113,
0,
0,
0,
0,
0,
0,
0,
0,
128,
0,
0,
0,
63,
236,
67,
14,
63,
52,
28,
100,
63,
187,
72,
190,
64,
54,
4,
58,
66,
125,
128,
1,
66,
129,
190,
251,
65,
239,
153,
154,
0,
0,
0,
0,
67,
70,
250,
214,
0,
0,
0,
0,
0,
0,
65,
240,
0,
0,
65,
208,
0,
0,
65,
240,
0,
0,
66,
24,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
70,
92,
0,
0,
15,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
63,
190,
160,
0,
0,
0,
0,
0,
70,
172,
78,
0,
69,
37,
0,
0,
65,
112,
0,
1,
193,
136,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
16,
0,
0,
0,
180,
171,
67,
168,
0,
0,
67,
185,
0,
0,
66,
178,
0,
0,
66,
182,
0,
0,
65,
164,
0,
0,
67,
250,
0,
0,
0,
1,
1,
0,
0,
3,
65,
80,
0,
0,
0,
0,
0,
0,
58,
131,
18,
111,
60,
35,
215,
10,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
74,
101,
105,
115,
115,
51,
47,
77,
101,
114,
108,
105,
110,
45,
54,
50,
53,
55,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
66,
145,
0,
0,
65,
103,
44,
0,
65,
229,
223,
212,
63,
189,
207,
189,
191,
220,
94,
63,
62,
7,
170,
99,
63,
188,
100,
88,
0,
0,
65,
30,
64,
26,
95,
3,
65,
79,
234,
8,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
6,
52,
186,
240,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
]
},
{
"name": "Restart",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 0
},
{
"name": "SEMAlnX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 1.4631574153900146
},
{
"name": "SEMAlnY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 2.844007968902588
},
{
"name": "SEMApr",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 30
},
{
"name": "SEMCurr",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 3.000000026176508e-09
},
{
"name": "SEMRot",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "SEMShiftX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "SEMShiftY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": -0.0
},
{
"name": "SEMSpecimenI",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "SEMSpecimenICurrent",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": -1.7216261625289917
},
{
"name": "SEMStiX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 1.8457963466644287
},
{
"name": "SEMStiY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.7035582065582275
},
{
"name": "SWdate",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"charSet": "H5T_CSET_UTF8",
"class": "H5T_STRING",
"length": "H5T_VARIABLE",
"strPad": "H5T_STR_NULLTERM"
},
"value": "04/20/2021"
},
{
"name": "SampleID",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"charSet": "H5T_CSET_UTF8",
"class": "H5T_STRING",
"length": "H5T_VARIABLE",
"strPad": "H5T_STR_NULLTERM"
},
"value": "Z0720-07m_BR_Sec18"
},
{
"name": "Scaling",
"shape": {
"class": "H5S_SIMPLE",
"dims": [
2,
4
]
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": [
[
2000000.0,
-6105.67529296875,
0.5854036211967468,
0.07999999821186066
],
[
2000000.0,
-5383.72119140625,
0.02265683189034462,
2.0
]
]
},
{
"name": "ScanRate",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 3125000.0
},
{
"name": "StageM",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "StageMove",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 0
},
{
"name": "StageR",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 198.97982788085938
},
{
"name": "StageT",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 0.0
},
{
"name": "StageX",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 63.375003814697266
},
{
"name": "StageY",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 64.87300872802734
},
{
"name": "StageZ",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 29.950000762939453
},
{
"name": "Temperature",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 72.5
},
{
"name": "TimeStep",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 4e-08
},
{
"name": "WD",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": 3.524282693862915
},
{
"name": "XResolution",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 7437
},
{
"name": "Xmax",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": -2.664947986602783
},
{
"name": "Xmin",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_IEEE_F64LE",
"class": "H5T_FLOAT"
},
"value": -5.469804763793945
},
{
"name": "YResolution",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 3500
},
{
"name": "ZeissScanSpeed",
"shape": {
"class": "H5S_SCALAR"
},
"type": {
"base": "H5T_STD_I64LE",
"class": "H5T_INTEGER"
},
"value": 3
}
],
"creationProperties": {
"allocTime": "H5D_ALLOC_TIME_INCR",
"fillTime": "H5D_FILL_TIME_ALLOC",
"filters": [
{
"class": "H5Z_FILTER_USER",
"id": 32001,
"name": "blosc",
"parameters": [
2,
2,
2,
52059000,
9,
2,
5
]
}
],
"layout": {
"class": "H5D_CHUNKED",
"dims": [
1,
3500,
7437
]
}
},
"shape": {
"class": "H5S_SIMPLE",
"dims": [
2,
3500,
7437
]
},
"type": {
"base": "H5T_STD_I16BE",
"class": "H5T_INTEGER"
}
}
},
"groups": {
"bef2d036-dc54-11ec-b49e-0050568f771f": {
"alias": [
"/"
],
"links": [
{
"class": "H5L_TYPE_HARD",
"collection": "datasets",
"id": "bef343f4-dc54-11ec-b49e-0050568f771f",
"title": "0-0-0"
},
{
"class": "H5L_TYPE_HARD",
"collection": "datasets",
"id": "bef36780-dc54-11ec-b49e-0050568f771f",
"title": "0-0-1"
},
{
"class": "H5L_TYPE_HARD",
"collection": "datasets",
"id": "bef3881e-dc54-11ec-b49e-0050568f771f",
"title": "0-0-2"
},
{
"class": "H5L_TYPE_HARD",
"collection": "datasets",
"id": "bef3a70e-dc54-11ec-b49e-0050568f771f",
"title": "0-0-3"
}
]
}
},
"root": "bef2d036-dc54-11ec-b49e-0050568f771f"
} |
Another tool useful tool is
h5ls output
|
I also wrote hcl for interactively navigating hdf5 hierarchies and interrogating attributes etc. That there are lots of tools for working with HDF5 files in every way imaginable (and that writing more HDF5 tools are widely useful) is another reason to try to move towards that format rather than something needlessly proprietary. |
Have you found particular advantages of your tools over |
One thing I am considering if whether the scale-offset filter could be used with other tools to address the issue that @acardona raises. At the very least we could encode the minimum as an
This may be addressable using a virtual dataset with a hyperslab with stride = (1,1,2). |
One approach I am investigating is the external dataset feature. This allows us to address a DAT file via a HDF5 interface. This avoids the problem of duplicating the image data. It also provides a space for us to store HDF5 attributes. import h5py
import os
dat_file_basename = "Merlin-6257_21-05-20_125527_0-0-0"
dat_filename = dat_file_basename + ".dat"
# attrs = parse_header(dat_filename)
# Can be calculated from attributes
offset = 1024
shape = (3500, 7437, 2)
datatype_nbytes = 2
nbytes = shape[0] * shape[1] * shape[2] * datatype_nbytes
file_length = offset + nbytes
actual_file_length = os.path.getsize(dat_filename)
recipe_nbytes = actual_file_length - file_length
with h5py.File(dat_file_basename + "_external.h5", "w") as h5f:
header = h5f.create_dataset(
"0-0-0_header",
offset,
dtype='u1',
external=[(dat_filename, 0, offset)]
)
ds = h5f.create_dataset(
"0-0-0",
shape,
dtype='>i2',
external=[(dat_filename, offset, nbytes)]
)
recipe = h5f.create_dataset(
"0-0-0_recipe",
(recipe_nbytes,),
dtype='u1',
external=[(dat_filename, file_length, recipe_nbytes)]
)
# Add parsed attributes to dataset ds
# for key, value in
# ds.attrs[key] = value The main advantage of this is that it allows to use and build tools that focus on reading HDF5 files rather than manipulating DAT files. If we combine the above with one of the DAT header readers or perhaps a LabView module that writes HDF5 attributes directly, then we may be able to eliminate the need for DAT readers by others. Since this approach avoids rewriting the image data, it is very fast. The actual file produced is about 2KB. We could generate such HDF5 files very close to acquisition without significant resources.
|
I went ahead and moved forward with writing the metadata as HDF5 attributes directly from LabView. If we can write these attributes into a HDF5 file at or near acquisition, that removes most of the need for header specifications or readers going forward. I'm confused what attribute names we have decided to use. I just translated the wire names to snake_case for now. There are some discrepancies in the diagram. Y and Z seems swapped in some places. @d-v-b 's code has an offset at 980 for |
A minimalist approach to acquisition software modification would involve creating a template through the LabView equivalent of this code. import h5py
import os
dat_file_basename = "Merlin-6257_21-05-20_125527_0-0-0"
dat_filename = dat_file_basename + ".dat"
# attrs = parse_header(dat_filename)
# Can be calculated from attributes
offset = 1024
shape = (3500, 7437, 2)
datatype_nbytes = 2
nbytes = shape[0] * shape[1] * shape[2] * datatype_nbytes
file_length = offset + nbytes
actual_file_length = os.path.getsize(dat_filename)
recipe_nbytes = actual_file_length - file_length
with h5py.File(dat_file_basename + "_template.h5", "w", userblock_size = offset) as h5f:
# Create image dataset, fill with 1s for illustration
ds = h5f.create_dataset(
"0-0-0",
shape,
dtype='>i2',
fillvalue = 1
)
# Could use H5Pset_alloc_time early instead
ds[0] = 1
ds[shape[0]-1, shape[1]-1, shape[2]-1] = 1
# Create recipe dataset, fill with 2s for illustration
recipe = h5f.create_dataset(
"0-0-0_recipe",
(recipe_nbytes,),
dtype='u1',
fillvalue = 2
)
# Could use H5Pset_alloc_time early instead
recipe[0] = 2
recipe[recipe_nbytes-1] = 2
# Add parsed attributes to dataset ds
# for key, value in
# ds.attrs[key] = value This produces a file with the following properties:
and the following hexdump:
The first column are the addresses in hexadecimal. If we can generate this template just before acquisition starts and have the acquisition software open this file instead of creating a new one, then we only have to modify one value in LabView, changing 1024 to 3072 in "2D Scan Tclk.vi": The current software with the above modification will then do the following:
Alternatively, if we let the acquisition software run first with the 1024 -> 3072 change, we could just write in the bytes between |
Once we have a HDF5 file, it not be hard to reprocess the file. The HDF5 library itself can use hyperslab selection to deinterlace the image quickly in C. Alternatively we can do this virtually by storing the hyperslab in a virtual dataset. |
One significant difference between writing into HDF5 datasets and into the file as above is that writing into a HDF5 dataset is usually done at the scale of entire buffers:
While it is possible to define a HDF5 space for integer by integer writing, this would be a significant modification of the I/O process. |
Shan Xu replied to my email a couple of days ago: his software has already two checkboxes for whether a channel is to be saved or not. They are named "Det", and says Shan: "One can uncheck Det B (ESB) so that only Det A (InLens) is recorded." In other words, not knowing well the UI cost us some storage costs, fortunately only for 2 smallish datasets. Now we can halve the storage and avoid the deinterleaving. The signed vs unsigned can be solved by adding +32768 to the values, so it isn't onerous with an e.g., ImgLib2 converter filter upon reading the file. |
What are the pixel values actually measuring? Adding that constant obviously converts i16 to u16, but if they're both on arbitrary scales it doesn't really matter. The minimum values I recall seeing are nowhere near -intmax. If the original values are completely arbitrary, they should be written in u16; if they're not, we should try to keep them raw in case they correspond to the scaling values in the metadata; if they are not arbitrary but our contrast corrections are purely relative to other data values, then surely we can feed the i16 directly in rather than doing the addition and then exactly the same scaling?
If I don't know what's in an HDF5 file, I find it more comfortable to interactively explore it rather than ask specific things one at a time. As an analogy, if I don't know what's in a server, I SSH into a shell on that server to explore it rather than running
Thanks Mark! Looks like a move in the right direction. So the idea is the pre-allocate an empty HDF5 file and then write into that rather than building a file as we go? That seems like a good idea either way. It would definitely benefit from the unfinished file having an extra extension ( Could you go into more detail about the recipe dataset? Is that another name for the header or is that additional? Some files seem to have a footer, is that related? My roundtrip code now includes the footer too. Is there a benefit to writing the header into the userblock, as opposed to just writing it in as a uint8 array group attribute or even a uint8 dataset?
I don't have strong feelings about snake/Camel/ etc., I only went to snake for mine as I was changing the names anyway (to make them more explicit and re-order them so that e.g. resolution became a tuple). The important thing is making them more explicit: no sense in saving a few characters in variable names if the files can be made that much more self-documenting.
If we're writing metadata at the end anyway, and we're going to be doing purely data-dependent filtering, then storing the actual recorded min and max values would definitely be helpful. |
As far as I have seen, the pixel measurements are straighforward. They are saved as int16 instead of uint16 for mysterious reasons, likely it was the default or something and Shan went with that. In our processing at the LMB, I compute the min, then I make all values in each image relative to that in uint16. Empirically works well and as expected. Going forward, I'm just going to add 32768 when reading the pixels. Less processing. |
A general comment: I cannot understand why you at Janelia think you can't change the software. Of course you can. Don't try to work with limitations that come to you from "above", when those above don't know or understand yet the issue in the first place. |
If I recall correctly, the SEM detectors emit emit a voltage (i.e., a value that fluctuates around 0), which is then digitized to a range of integers that is also centered on 0 (int16). Via some other metadata in the dat header, this signed values can be mapped to unsigned electron counts. The only downside I can imagine to converting from int16 to uint16 is that it ultimately makes it a teeny bit harder to map intensities to electron counts (if thats something you want to do), but I don't think this is a significant burden.
Yes, this would be super useful for the inevitable contrast normalization step, or converting from 16 bit ints down to 8 bit ints.
Neither do I, either is totally fine with me.
The answer is very simple: we have explained these issues, and the people in control of the acquisition software / devices did not want to change the software to address them. From their perspective, the status quo is acceptable. This limitation comes from "above", but that's fine -- this software is an important part of ensuring that the FIBSEM acquisition is stable, so the people managing acquisition should be cautious about changing it. So the challenge is convincing the people in charge of the acquisition machines that these software changes are a) safe, and b) important for accelerating science. I think we can do both, but it's not a trivial process. |
As @d-v-b said, we need to carefully balance the needs of the labs that have a running pipeline, small projects, and large projects. We can discuss more in Berlin @acardona, but for now I am even happy with a robust post-acquisition resaving tool. In the long run it will convince people to change, I am sure of it ... |
Be careful not to overflow the int16 in the process. Is it possible to do a bitcast to uint16 in your language of choice before adding this value? About the HDF5 scale-offset filter: https://confluence.hdfgroup.org/display/HDF5/H5P_SET_SCALEOFFSET For this purpose, the offset part of this filter would allow us to define a fixed offset for a dataset. When someone reads the data using Perhaps a better idea would be to process the data once and store the minimum value as an attribute so it does not need to happen on each read. |
At the moment, when I open a .DAT file to read a single image channel, I have to:
Read the whole file with two channels, because their pixels are interleaved. This has costs both in storage (2 channels when we want 1), network transfer, and processing:
Solution:
Deinterleave: transform an e.g., 1 GB array into two 0.5 GB arrays.
Solution: see (1) above.
Convert from signed 16-bit to unsigned 16-bit, by iterating the whole channel image array twice: once to find the min value, a second time to subtract it from every pixel.
Solution: store images directly as unsigned 16-bit.
In summary, at the very least enable .DAT format to use 16-bit unsigned, and to store only a single channel. This minimal change would halve our storage and network bandwidth costs, and reduce the post-processing steps by quite a bit.
The text was updated successfully, but these errors were encountered: