This is a working proposition to include JCAMP spectra in NMR Records / Ongoing discussion using Slack contact Damien Jeannerat to be associated
The project is to have JCAMP spectra as part of future versions of the NMReDATA records. They would not replace the requirement of providing the data in the manufacturer's format (in the files or through links), but be an addition to provide, in an open format, the spectra (or links to them). We would require only minimal spectral information (see below) no fid, and other acquisitions and processing parameters that are notoriously difficult to interconvert. This addition will make the NMR Records more FAIR - because manufacturers format are not "FAIR".
Note that for the future version of the NMReDATA formatincluding this feature, we would not require to have the JCAMP files generated by the software generating/reading NMReDATA, but to have them ready to read the JCAMP files when the manufaturers data are not available. The feature of adding JCAMP spectra in NMR Records could be added by "smart" repository servers, or other software tools.
We should discuss which version of JCAMP should be accepted. Given that we will use it very minimally just to allow to access spectra (not to convey acquisition parametes, etc.), they can be in a very generic form (compatible with all/most? versions of Jcamp). This would require no new developments of Jcamp. We "only" have to define the names of the fields and the type of accepted data.
Example of reference to the JCAMP file (in bold):
> <NMREDATA_1D_1H> Larmor=500.13 Spectrum_Location=file:./nmr/10/1/pdata/1 Spectrum_Jcamp=file:./jcamp_folder/spectrum1.jcp Signal 1 Signal 2 ...
You will find below, for both 1D and 2D spectra, the prefered format, and the alternatively accepted format to increase compatibility.
For 1D spectra
Note that the Larmor frequency can also be found in the .sdf file, but should be given in the camp file as well.
Preferred format to be used for new developments example:
Frequency of the first point (left side) FIRSTX= Frequency of the last point (right side) LASTX= Larmor frequency (to allow to switch to ppm scale) LARMOR= (or .OBSERVE FREQUENCY= accepted for compatibility) Number of points NPOINTS= NPOINTS data points (int or float text or binary ????)
Alternative accepted parameters (Bruker type...):
Spectral width in ppm SW= Chemical shift of the center of the spectrum SFO1= Larmor frequency (to allow to switch to Hz scale) BF1= Number of points SI= SI data points (int or float text or binary ????)
The reader should be able to manage both types of parameters. Interconvertion of (FIRSTX LASTX LARMOR NPOINTS) into (SW SFO1 BF1 SI) being trival.
For 2D spectra
We should consider correlation spectra (with chemical shift in both dimensions) but also J-resolved spectra (Hz in F1) and 2D spectra with double quantum scales (in F1)... What other combination ???? Assuming the direct dimension is always in ppm.
Preferred format (for new developments use this...
"D" is for direct dimension "I" stands for indirect dimension.
Type of indirect dimension: TYPE_F1_SCALE= "ppm", "Hz", "dq" Spectral within ppm in the direct and indirect dimensions SWD= / SWI= Chemical shift of the first point (bottom / left side) FIRSTXD= / FIRSTXI= Chemical shift of the last point (top / right side) LASTXD= / LASTXI= Larmor frequencies (to allow switch to Hz) LARMORD= / LARMORI= (0 if not relevant - for type "Hz") Number of points in the direct and indirect dimensions, NPOINTSD= / NPOINTSI= NPOINTSDxNPOINTSI data points (int or float text or binary ????) (all points of the direct dimension before starting the second point of the indirect dimension)
For compatibility with existing Bruker JCAMP
How the type of 2D spectrum will be indentified is still to be determined.
A line "$$ Bruker specific parameters for F1" separates F2 from F1 parameters with the same names
Spectral within ppm in the direct and indirect dimensions SW= Chemical shift of center of the spectrum (bottom / left side) SFO1= Larmor frequencies (to allow switch to Hz) BF1= (0 if not relevant - for type "Hz") Number of points in the direct and indirect dimensions, SI= SI(1)xSI(2) data points (int or float text or binary ????) (all points of the direct dimension before starting the second point of the indirect dimension)