Is the size of an Igor binary wave file format limited to 2GB in Igor Pro v8.04?
Hello,
I am attempting to store data from large data acquisitions to Igor binary wave files using 64-bit Igor Pro v8.04. I currently have c++ code that successfully creates an Igor binary wave file with version 5 of the file's BinHeader and WaveHeader. When I load files under 2GB generated from this code into Igor they load correctly with no errors.
However, when I attempt to generate and load a file over 2GB, the wave notes appear corrupt, and the incoming data are all zeros.
I had seen here that the total wave size limit was increased to 20GB.
Additionally, when I create a wave over 2GB within Igor and try to save it as an Igor binary wave, I get an error message that the .ibw binary wave format does not support waves larger than 2GB.
Is the size of an Igor binary wave file format limited to 2GB in Igor Pro v8.04 64-bit, and the maximum 20GB does not apply to Igor binary waves? If I am indeed limited to 2GB, does anyone have an alternate method for programmatically generating larger files?
The .ibw format is limited to 2GB. Igor can not write waves with data >= 2GB to a .ibw file.
You can save larger in a packed experiment (.pxp) file. If the wave data is < 2GB, Igor writes it in a .ibw format record in the packed experiment file. If the wave data is >= 2GB, Igor writes it in a special 64-bit format record in the packed experiment file.
You can write a wave or data folder to a .pxp file using SaveData operation. You can also do it using the Data Browser - select a wave or waves and click Save Copy. Igor writes the wave or waves to the .pxp file in .ibw format or in 64-bit format depending on the size of the wave.
You can write waves or data folders to an HDF5 file using the HDF5SaveData and HDF5SaveGroup operations.
In Igor Pro 9, you can write an entire experiment to an HDF5 file using File->Save Experiment or the SaveExperiment operation.
November 29, 2021 at 10:38 am - Permalink
Hello hrodstein,
Thank you for clarifying. I don't think writing to .pxp files will be viable for my use case, I am more concerned with writing to individual wave files independent of experiments. Also, since I am creating waves externally in c++, I am not utilizing the data browser or SaveData operations.
Writing to HDF5 files seems like the most viable option in my case; I'll look further into writing waves to that filetype. Will the HDF5 package be supported in Igor long-term?
November 29, 2021 at 11:07 am - Permalink
In reply to Hello hrodstein, Thank you… by mkuhler
The easiest way to export wave data to Igor from C++ is to write plain binary data files containing the wave data only and load that into Igor using GBLoadWave.
If you need to include wave properties, such as units, you could write to a plain binary data file and then create one Igor Text file that loads the binary data files and sets the properties. One Igor Text file could contain commands to load any number of plain binary data files.
That is my expectation.
Writing HDF5 files means you need to learn the basics of HDF5 and link with an HDF5 library. This will take some effort. It is worthwhile if you have a general need for a flexible and open data format, but it will be more work than writing plain binary data files.
November 29, 2021 at 11:41 am - Permalink
Another option for you, since you apparently are already able to write .ibw files, is to write a single large wave to multiple .ibw files. You could then use an Igor Text file to put the pieces back together.
November 29, 2021 at 11:43 am - Permalink
If you plan to use HDF5 in C++ I would suggest to not use the "official" HDF5 C++ API as this is not a nice API. https://github.com/ess-dmsc/h5cpp is nicer to use.
Just out of curiosity: Is your writing code based on the example code from "TN003 Igor binary format"? Can you attach a zipped ibw file which you created from C++ with more than 2GB? If you only add zeros as data it will compress well.
December 1, 2021 at 05:41 am - Permalink
In reply to If you plan to use HDF5 in C… by thomas_braun
Since I maintain some tools that write Igor binary wave files, I'm curious, too.
The main problem I see is that the wfmSize field of the BinHeader5 structure is a signed 32bit integer, making it virtually impossible to store the length for data >2GB in this field. Trying to do that might even result in a negative value.
I guess Igor would report an error when trying to load a wave with wfmSize<0, wouldn't it?
December 14, 2021 at 06:54 am - Permalink
I'm not sure what error it would report.
If you are writing Igor binary wave files, I recommend testing for size>2GB and reporting an error on writing the file.
December 14, 2021 at 07:22 am - Permalink
> I'm not sure what error it would report.
How about something like "invalid IBW format". I would guess the routine for reading IBW files already has to do some sanity checks.
December 14, 2021 at 07:35 am - Permalink
In reply to Quote: I guess Igor would… by hrodstein
Out of curiosity I tested this. There was no error reported on loading and in Igor the wave looked very much like what mkuhler saw (lots of zeros at the end of the wave).
December 14, 2021 at 10:25 am - Permalink
@christian.halaszovich
Can you attach a compressed ibw file showing the problem?
December 15, 2021 at 01:11 am - Permalink
In reply to @christian.halaszovich Can… by thomas_braun
Yes, no problem.
I attached a zip archive containing two ibw files (created with the tool PMbrowser [https://github.com/ChrisHal/PMbrowser] from a HEKA PatchMaster file). The waves are not big (around 29 KiB each).
The difference between both files is that in the file "testNegSize_1_2_5_Imon.ibw" the field wfmSize in the BinHeader5 structure has the sign reversed, which confuses Igor. (Trying to store the size of a wave >=2GiB will also result in a negative value for this field (and possibly other fields, too).)
Note that also the wave-note ends up as garbage if the corrupted file is read. Since the wave note is stored right after the wave data this is probably not surprising (I tested this with IgorPro 8.04 64 bit.)
P.S.
We might be going slightly of topic for this thread. I apologize for that.
December 15, 2021 at 01:39 am - Permalink