Hello, I would like to find detailed technical info on the binary data storage formats for Varian and Bruker. Could anyone point me to such resources?
I've looked through Varian manuals, but apparently the right one did not pop up in front of me :). Could you suggest - which book any other resource could be looked at?
edit: now I recall that Kirk Marat published a C# header file for Varian here ftp://davinci.chem.umanitoba.ca/pub/marat/SpinWorks/source_library/ (part of SpinWorks ftp directory)
But how is the data actually laid out in the file?
Is there some information like this available for Bruker?
Any help will be appreciated.
Varian's data format is well described in their User Programming Manual. The parameters are in the ASCII procar file, and the data in the fid file. The fid can be 32 bit integer, 16 bit integer or 32 bit float, and has BID ENDIAN (Power PC) byte order. Before the data in the fid file is a file header, and before each block of data (e.g. 2D increment) is a block header. e.g. FH-BH-data-BH-data-BH-data-BH-data... etc. The format of the actual data is specified by the status word in the block header - and is always correct. The block header is there even if there is only one block.
I've worked with the Bruker format for so long that I don't remember what manual it is in. The parameters are all in ASCII files (in essentially JCAMP-DX format), with the most relevant ones being the acqus and acqus2, acqus3.... files. These are the status acquisition parameters in the direct and indirect dimensions. You might also want the proc, proc2, etc files for some processing and referencing parameters. The data are in the fid or ser (for multi D) files. There are no block or file headers, but the byte order can be either BIG ENDIAN or LITTLE ENDIAN depending on the host computer used (X32,SGI or PC). This is specified by the BYTORDA acquisition parameter. There is a similar BYTORDP parameter for processed data. The data are 32 bit signed integers. However, I have heard that newer Bruker systems can use 64 bit floating point numbers in some cases. I haven't run across any yet, but I'll have to give it a try when our new Avance III systems arrive. For multi-D, it is important to note that each block starts on a 1024 byte disk-sector boundary. It will almost always be the case that the previous block will end at the sector boundary, so that you can just sequentially read the data. This will not be the case if the TD parameter is some strange value like 741 points. There is no spectroscopic reason why you couldn't have a TD value like 741, and if you do you would have to read the next block starting in the next disk-sector boundary. I think this may be a hold-over from a time when they used to have their own high speed "BFS" file system on the X32. Reading Bruker 1D processed data is straight forward. Reading processed 2D can be a bit trickier because of the sub-matrix format used. (Something like Sparky).
I am willing to share source code for reading Bruker and Varian data to anyone who wants it. This would be a bit newer than the stuff posted on the ftp site.
For a really tough multi-D data format, try JEOL (no flames please!)
I think any of the data can be extracted in binary form from spinworks. In this format one has intensity points vs an arbitrary axis (for frequency dimension). This is comma or tab delimited data.
answered Mar 13 '10 at 10:19
For Bruker file formats there is a manual called fileform.pdf in $TOPSPINHOME/prog/docu/english/xwinproc/pdf. It contains some information about the format of the major file types in XWINNMR or TOPSPIN. Let me know if you need a copy of this manual.
answered Mar 16 '10 at 11:19
We have noticed that VNMRJ is extremely sensitive to the procpar format. We have generated a procpar file, and tried to test it inside of VNMRJ, and it seems as thought VNMRJ really wants to have ALOT (if not ALL) of the procpar parameters that come off of the spectrometer.
This is somewhat surprising to me, since many VNMRJ functions, such as basic processing, only need to know the sweep width and dimension sizes.
Does anyone know anything about what data VNMRJ requires to be in a procpar which is loaded ? Programs like NMRPipe, iNMR, etc only need a very limited subset of procpar data (i.e. they can basically load just fine as long as they have np, ni, sw, sw1 array , phase, and a couple of other parameters .....
answered May 25 '10 at 10:23