CCPN LogoVideo Tutorials LogoCCPN Logo

NMR Exchange Format (NEF)

NMR Exchange Format (NEF)

The NMR field has traditionally used a large variety of program specific file formats. This has made it difficult for software packages to inter-operate and has complicated data-archiving and retrieval. To address these challenges, the developers of a large number of NMR software packages have united to develop a single, universal file format, the NMR Exchange Format "NEF", and have committed to make their software NEF compatible (Gutmanas et al. 2015).

The main advantage of NEF is that allows the most common types of NMR data, such as chemical shifts, peak lists and restraint lists to be stored in a single file. In addition, NEF files can be extended to contain additional programme-specific information. It also ensures proper handling of stereospecific and non-stereospecific assignments so that no information is lost.

NEF uses the STAR file format. STAR files have a defined structure and only certain terms are allowed. This makes it easy to be use as an archival format for many types of biological data. It is also more humanly readable than some other format types (e.g. XML). Examples include NMR-STAR, used by the Biological Nuclear Magnetic Resonance Data Bank (BMRB) and mmCIF which is now the only accepted format for molecular coordinate deposition in Protein Data Bank.

This document aims to give a brief overview of the NEF format. For more details please see Commented_Example.nef and Overview.md in:
https://github.com/NMRExchangeFormat/NEF/tree/master/specification

Key characteristics

There are few characteristic features of the NEF format, the two most noticeable ones are:
1. Data names start with an underscore, we will refer to these as tags.
2. There are a few reserved keywords (common to all STAR-type files): data_, loop_, save_ and stop_.

NEF files always start with the keyword data_ followed by a project description (e.g. data_peptide_project in the example below). This indicates the start of the data block. NEF files should only have one data block per file.

Saveframes

Data are organised in sections called saveframes. Saveframes start with the keyword save_ followed by the framecode, which is unique for this saveframe. Chemical shift lists, peak lists or restraint list are examples of data that have a specific saveframe in which they are placed and identified by specific tags (names). For example, chemical shifts are listed in the saveframe save_nef_chemical_shift_list. Each NEF file must contain following saveframes: _nef_nmr_meta_data, _nef_molecular_system, _nef_chemical_shift_list

The data within a saveframe are composed of tags and loops.

Tags

Tags in a NEF file list the information that is needed or helpful for a particular section. Each tag in a saveframe must be unique.

The NEF format has a number of mandatory and optional tags for each saveframe, these are detailed in Commented_Example.nef and mmcif_nef.dic.

For example, in the nef_nmr_spectrum_hsqc saveframe there are four tags that must be specified:

    save_nef_nmr_spectrum_hsqc

      _nef_nmr_spectrum.sf_category                   nef_nmr_spectrum
      _nef_nmr_spectrum.sf_framecode                  nef_nmr_spectrum_hsqc
      _nef_nmr_spectrum.num_dimensions                2
      _nef_nmr_spectrum.chemical_shift_list           nef_chemical_shift_list_bmr5844
    

In addition more information can be listed as well:

      _nef_nmr_spectrum.experiment_type               hsqc
      _nef_nmr_spectrum.ccpn_positive_contour_count   10
      _nef_nmr_spectrum.ccpn_spectrum_comment         ''
      _nef_nmr_spectrum.ccpn_spectrum_file_path       /Users/user/Documents/spectra/hsqc.spc
      _nef_nmr_spectrum.ccpn_file_type                Azara
    

The tags in the above example consist of two parts. The first part is identical for all tags in this saveframe (_nef_nmr_spectrum) and is specified at the beginning of the saveframe (_nef_nmr_spectrum.sf_category has the value nef_nmr_spectrum). What follows after the dot gives more of an indication about the information provided by the tag.

Another thing worth noticing is that there are two types of tags. _nef_nmr_spectrum.experiment_type is described in the NEF documentation and is universal for all programmes reading and writing the NEF files. _nef_nmr_spectrum.ccpn_spectrum_comment is a programme-specific addition to the _nef_nmr_spectrum saveframe, in which information relevant to CcpNmr Analysis can be stored. Other programs are free to skip this information. During the NEF export a user can select whether to include or exclude the optional tags (the ccpn_ tags in the example here).

Values for tags need to be enclosed in quotes if they contain a space, tab, vertical tab, or newline in the value.

Loops

As there can only be one of each tag in a saveframe, it is not possible to include data such as peak lists where there are multiple values for each tag (peak_number, for instance, could have thousands of values). To include this type of data (essentially tabular data) we need to output them as a loop in a saveframe. A loop is a set of tags with multiple values and is used in NEF to store tabular data.

The NEF specification lists the loops and tags that are mandatory and non-mandatory.

Loops start with the loop_ keyword followed by tags in separate rows and then by values in a space delimited format. The end of the loop is marked with the keyword stop_. You can think of tags in loops as the headings for columns in the table.

      loop_
         _nef_sequence.index
         _nef_sequence.chain_code
         _nef_sequence.sequence_code
         _nef_sequence.residue_name
         _nef_sequence.linking
         _nef_sequence.residue_variant
         _nef_sequence.ccpn_comment

         1   A  1   MET  start   .  .
         2   A  2   LYS  middle  .  .
         3   A  3   ILE  middle  .  'conserved'
         4   A  4   ILE  end     .  .
         5   A  5   CA   single  .  .
         6   B  1   ATP  single  .  .
      stop_

Mandatory and optional content

As mentioned above, saveframes, loops and tags may be mandatory or optional. The mandatory ones are of particular importance if your NEF file is to be used for the deposition into databases (e.g. BMRB or PDB). When CcpNmr Analysis exports a NEF file all the mandatory tags are present by default.

The important thing to remember is that although saveframes listing restraints or peaks are not mandatory, if the user chooses to include them in a NEF file, the saveframe must list the tags and loops that are mandatory for those specific saveframes. (Luckily most programmes take care of this automatically.)

Programme-specific saveframes and raw_data saveframes

In addition to including extra information within the NEF saveframes with the appropriate extension to the _nef tag, extra saveframes and loops specific to a particular programme can be added to the NEF file.

For example:

   save_ccpn_assignment

      _ccpn_assignment.sf_category   ccpn_assignment
      _ccpn_assignment.sf_framecode  ccpn_assignment

      loop_
         _nmr_chain.short_name
         _nmr_chain.serial
         _nmr_chain.label
         _nmr_chain.is_connected
         _nmr_chain.comment

         @-  1  @-  false  'Default NmrChain, used for ResonanceGroups not in other chains. Cannot be deleted or renamed.'
         A   2  @2  false  .
      stop_
   save_

This is particularly useful when a program is capable of harvesting information produced by another programme, for instance as a result of a structure calculation.

Annotated Example file

Tags in bold purple indicate content that must be included in a NEF file.
Tags in bold black are mandatory only if a specific saveframe or loop is present in a NEF file.

Section 1: NMR meta data (mandatory)

Only one of these saveframes is allowed per project

    data_peptide_project

      save_nef_nmr_meta_data

          _nef_nmr_meta_data.sf_category      nef_nmr_meta_data
          _nef_nmr_meta_data.sf_framecode     nef_nmr_meta_data
          _nef_nmr_meta_data.format_name      nmr_exchange_format
          _nef_nmr_meta_data.format_version   1.1
          _nef_nmr_meta_data.program_name     AnalysisAssign
          _nef_nmr_meta_data.program_version  3.0.1.1
          _nef_nmr_meta_data.creation_date    2020-06-14T20:53:22.311917
         _nef_nmr_meta_data.uuid              AnalysisAssign-2020-06-14T20:53:22.311917-1956756036
      save_

We hope that in the near future this section will also include run history:

      loop_
         _nef_run_history.run_number
         _nef_run_history.program_name
         _nef_run_history.program_version
         _nef_run_history.script_name

         1   ARIA       2.3   .
         2   UNIO       .     .
         3   Xplor_NIH  3.0.2 refine.py

      stop_
   

Section 2: Molecular system (mandatory)

Only one of these saveframes is allowed per data block as all molecules can be included in a single loop.

   save_nef_molecular_system

      _nef_molecular_system.sf_category   nef_molecular_system
      _nef_molecular_system.sf_framecode  nef_molecular_system

      loop_
         _nef_sequence.index
         _nef_sequence.chain_code
         _nef_sequence.sequence_code
         _nef_sequence.residue_name
         _nef_sequence.linking
         _nef_sequence.residue_variant
         _nef_sequence.ccpn_comment

         1   A  1   MET  start   .  .
         2   A  2   LYS  middle  .  .
         3   A  3   ILE  middle  .  'conserved'
         4   A  4   ILE  end     .  .
         5   A  5   CA   single  .  .
         6   B  1   ATP  single  .  .
      stop_
   save_

In the above example, Chain A is a peptide in complex with a calcium (CA) and Chain B is free ATP.

Section 3: Chemical shift table (mandatory)

There can be more than one of these saveframes in a single NEF file. Note how the _nef_chemical_shift_list.sf_category tag specifies the saveframe type (_nef_chemical_shift_list) and the _nef_chemical_shift_list.sf_framecode tag specifies the name of that particular saveframe (_nef_chemical_shift_list_bmr5844).

   save_nef_chemical_shift_list_bmr5844

      _nef_chemical_shift_list.sf_category   nef_chemical_shift_list
      _nef_chemical_shift_list.sf_framecode  nef_chemical_shift_list_bmr5844
      _nef_chemical_shift_list.ccpn_serial   1
      _nef_chemical_shift_list.ccpn_comment  ''

      loop_
         _nef_chemical_shift.chain_code
         _nef_chemical_shift.sequence_code
         _nef_chemical_shift.residue_name
         _nef_chemical_shsift.atom_name
         _nef_chemical_shift.value
         _nef_chemical_shift.value_uncertainty
         _nef_chemical_shift.element
         _nef_chemical_shift.isotope_number
         _nef_chemical_shift.ccpn_figure_of_merit
         _nef_chemical_shift.ccpn_comment

         @-  @88  .    H@955  9.639446186  0  H  1   1  .
         @-  @89  .    N@956  112.0508243  0  N  15  1  .
         A   1    MET  C      170.978      0  C  13  1  .
         A   1    MET  CA     55.193       0  C  13  1  .
         A   1    MET  CB     34.019       0  C  13  1  .
         A   1    MET  CG     31.136       0  C  13  1  .
         A   1    MET  HA     3.823        0  H  1   1  .
         A   1    MET  HB2    1.956        0  H  1   1  .
         A   1    MET  HB3    1.976        0  H  1   1  .
         A   1    MET  HG2    2.151        0  H  1   1  .
         A   1    MET  HG3    2.036        0  H  1   1  .
         A   2    LYS  C      174.608      0  C  13  1  .
         A   2    LYS  CA     54.206       0  C  13  1  .
         A   2    LYS  CB     35.916       0  C  13  1  .
         A   2    LYS  CD     29.373       0  C  13  1  .
         A   2    LYS  CE     42.086       0  C  13  1  .
         A   2    LYS  CG     24.011       0  C  13  1  .
         A   2    LYS  H      8.56         0  H  1   1  .
         A   2    LYS  HA     4.62         0  H  1   1  .
         A   2    LYS  HBx    1.494        0  H  1   1  .
         A   2    LYS  HBy    1.329        0  H  1   1  .
         A   2    LYS  HDx    1.604        0  H  1   1  .
         A   2    LYS  HDy    1.651        0  H  1   1  .
         A   2    LYS  HE%    2.909        0  H  1   1  .
         A   2    LYS  HGx    1.384        0  H  1   1  .
         A   2    LYS  HGy    1.223        0  H  1   1  .
         A   2    LYS  N      122.783      0  N  15  1  .
         A   3    ILE  C      176.569      0  C  13  1  .
         A   3    ILE  CA     62.565       0  C  13  1  .
         A   3    ILE  CB     38.792       0  C  13  1  .
         A   3    ILE  CD1    14.332       0  C  13  1  .
         A   3    ILE  CG1    27.255       0  C  13  1  .
         A   3    ILE  CG2    17.2         0  C  13  1  .
         A   3    ILE  H      8.373        0  H  1   1  .
         A   3    ILE  HA     3.659        0  H  1   1  .
         A   3    ILE  HB     1.486        0  H  1   1  .
         A   3    ILE  HD1%   0.775        0  H  1   1  .
         A   3    ILE  HG1x   0.781        0  H  1   1  .
         A   3    ILE  HG1y   0.06         0  H  1   1  .
         A   3    ILE  HG2%   0.595        0  H  1   1  .
         A   3    ILE  N      120.076      0  N  15  1  .
         A   4    ILE  C      176.194      0  C  13  1  .
         A   4    ILE  CA     60.586       0  C  13  1  .
         A   4    ILE  CB     37.466       0  C  13  1  .
         A   4    ILE  CD1    10.304       0  C  13  1  .
         A   4    ILE  CG1    26.368       0  C  13  1  .
         A   4    ILE  CG2    16.57        0  C  13  1  .
         A   4    ILE  H      8.543345299  0  H  1   1  .
         A   4    ILE  HA     4.135        0  H  1   1  .
         A   4    ILE  HB     1.613        0  H  1   1  .
         A   4    ILE  HD1%   0.64         0  H  1   1  .
         A   4    ILE  HG1x   1.164        0  H  1   1  .
         A   4    ILE  HG1y   1.025        0  H  1   1  .
         A   4    ILE  HG2%   0.802        0  H  1   1  .
         A   4    ILE  N      127.239      0  N  15  1  .
      stop_
   save_

The first two shifts (with chain_code set as temporary using @) are unassigned but observed resonances.

Note that 1 MET has sterospecifically assigned atoms HB2/3 and HG2/3. Some of the other protons have non-degenerate AND non-steroespecific assignments (for example 2 LYS HBx and HBy). The 2 LYS HE2 and HE3 signals overlap (are degenerate) and so therefore these protons are given a wildcard - HE%.

Section 4: Distance restraint list(s)

There must be a separate saveframe for each restraint list.

   save_nef_distance_restraint_list_1pqx_mr

      _nef_distance_restraint_list.sf_category     nef_distance_restraint_list
      _nef_distance_restraint_list.sf_framecode    nef_distance_restraint_list_1pqx_mr
      _nef_distance_restraint_list.potential_type  undefined
      _nef_distance_restraint_list.restraint_origin  .
      _nef_distance_restraint_list.ccpn_tensor_chain_code  .
      _nef_distance_restraint_list.ccpn_tensor_sequence_code  .
      _nef_distance_restraint_list.ccpn_tensor_residue_name  .
      _nef_distance_restraint_list.ccpn_tensor_magnitude  0
      _nef_distance_restraint_list.ccpn_tensor_rhombicity  0
      _nef_distance_restraint_list.ccpn_tensor_isotropic_value  0
      _nef_distance_restraint_list.ccpn_serial     1
      _nef_distance_restraint_list.ccpn_dataset_serial  1
      _nef_distance_restraint_list.ccpn_unit       .
      _nef_distance_restraint_list.ccpn_comment    ''

      loop_
         _nef_distance_restraint.index
         _nef_distance_restraint.restraint_id
         _nef_distance_restraint.restraint_combination_id
         _nef_distance_restraint.chain_code_1
         _nef_distance_restraint.sequence_code_1
         _nef_distance_restraint.residue_name_1
         _nef_distance_restraint.atom_name_1
         _nef_distance_restraint.chain_code_2
         _nef_distance_restraint.sequence_code_2
         _nef_distance_restraint.residue_name_2
         _nef_distance_restraint.atom_name_2
         _nef_distance_restraint.weight
         _nef_distance_restraint.target_value
         _nef_distance_restraint.target_value_uncertainty
         _nef_distance_restraint.lower_linear_limit
         _nef_distance_restraint.lower_limit
         _nef_distance_restraint.upper_limit
         _nef_distance_restraint.upper_linear_limit
         _nef_distance_restraint.ccpn_figure_of_merit
         _nef_distance_restraint.ccpn_comment

          1    55    .  A  1   MET  HA    A  1   MET  HG2   1  4    .  .  1.8  5    .  .  .
          2    56    .  A  1   MET  HA    A  1   MET  HG3   1  4    .  .  1.8  5    .  .  .
          3    57    .  A  1   MET  HA    A  2   LYS  H     1  3    .  .  1.8  3.5  .  .  .
          4    68    .  A  2   LYS  HA    A  3   ILE  H     1  2.5  .  .  1.8  2.9  .  .  .
          5    69    .  A  2   LYS  HBx   A  2   LYS  HD%   1  4    .  .  1.8  7    .  .  .
          6    69    .  A  2   LYS  HBy   A  2   LYS  HD%   1  4    .  .  1.8  7    .  .  .
          7    70    .  A  2   LYS  HB%   A  2   LYS  HE%   1  4    .  .  1.8  7    .  .  .
          8    71    .  A  2   LYS  HB%   A  3   ILE  H     1  4    .  .  1.8  6    .  .  .
          9    77    .  A  2   LYS  HE%   A  4   ILE  HD1%  1  4    .  .  1.8  7    .  .  .
         10    93    .  A  3   ILE  HA    A  5   SER  H     1  4    .  .  1.8  5    .  .  .
         11    108   .  A  3   ILE  HG2%  A  4   ILE  H     1  4    .  .  1.8  6    .  .  .
         12    109   .  A  3   ILE  HG2%  A  4   ILE  HA    1  4    .  .  1.8  6    .  .  .
         13    110   .  A  3   ILE  HG2%  A  2   LYS  HDx   1  4    .  .  1.8  7    .  .  .
         14    110   .  A  3   ILE  HG2%  A  2   LYS  HDy   1  4    .  .  1.8  7    .  .  .
      stop_
   save_

The first column (index) is a effectively a line number that does not persist when data are re-exported.

The second column gives the restraint ID and lines with the same restraint_id (e.g. restraint 69 and 110) are combined into a single restraint (an ambiguous restraint).

Section 5: Dihedral restraint list

   save_nef_dihedral_restraint_list_Dih-1pqx_mr

      _nef_dihedral_restraint_list.sf_category     nef_dihedral_restraint_list
      _nef_dihedral_restraint_list.sf_framecode    nef_dihedral_restraint_list_Dih-1pqx_mr
      _nef_dihedral_restraint_list.potential_type  undefined
      _nef_dihedral_restraint_list.restraint_origin  .
      _nef_dihedral_restraint_list.ccpn_tensor_chain_code  .
      _nef_dihedral_restraint_list.ccpn_tensor_sequence_code  .
      _nef_dihedral_restraint_list.ccpn_tensor_residue_name  .
      _nef_dihedral_restraint_list.ccpn_tensor_magnitude  0
      _nef_dihedral_restraint_list.ccpn_tensor_rhombicity  0
      _nef_dihedral_restraint_list.ccpn_tensor_isotropic_value  0
      _nef_dihedral_restraint_list.ccpn_serial     2
      _nef_dihedral_restraint_list.ccpn_dataset_serial  1
      _nef_dihedral_restraint_list.ccpn_unit       .
      _nef_dihedral_restraint_list.ccpn_comment    ''

      loop_
         _nef_dihedral_restraint.index
         _nef_dihedral_restraint.restraint_id
         _nef_dihedral_restraint.restraint_combination_id
         _nef_dihedral_restraint.chain_code_1
         _nef_dihedral_restraint.sequence_code_1
         _nef_dihedral_restraint.residue_name_1
         _nef_dihedral_restraint.atom_name_1
         _nef_dihedral_restraint.chain_code_2
         _nef_dihedral_restraint.sequence_code_2
         _nef_dihedral_restraint.residue_name_2
         _nef_dihedral_restraint.atom_name_2
         _nef_dihedral_restraint.chain_code_3
         _nef_dihedral_restraint.sequence_code_3
         _nef_dihedral_restraint.residue_name_3
         _nef_dihedral_restraint.atom_name_3
         _nef_dihedral_restraint.chain_code_4
         _nef_dihedral_restraint.sequence_code_4
         _nef_dihedral_restraint.residue_name_4
         _nef_dihedral_restraint.atom_name_4
         _nef_dihedral_restraint.weight
         _nef_dihedral_restraint.target_value
         _nef_dihedral_restraint.target_value_uncertainty
         _nef_dihedral_restraint.lower_linear_limit
         _nef_dihedral_restraint.lower_limit
         _nef_dihedral_restraint.upper_limit
         _nef_dihedral_restraint.upper_linear_limit
         _nef_dihedral_restraint.name
         _nef_dihedral_restraint.ccpn_figure_of_merit
         _nef_dihedral_restraint.ccpn_comment

         1    1    .  A  2   LYS  C  A  3   ILE  N   A  3   ILE  CA  A  3   ILE  C  1  -40      0  .  -170     90      .  PHI  .  .
         2    2    .  A  3   ILE  C  A  4   ILE  N   A  4   ILE  CA  A  4   ILE  C  1  -120     0  .  -155     -85     .  PHI  .  .
         3    3    .  A  4   ILE  C  A  5   SER  N   A  5   SER  CA  A  5   SER  C  1  -35      0  .  180      110     .  PHI  .  .
      stop_
   save_

Section 6: Peak list

   save_nef_nmr_spectrum_hsqc

      _nef_nmr_spectrum.sf_category                   nef_nmr_spectrum
      _nef_nmr_spectrum.sf_framecode                  nef_nmr_spectrum_hsqc
      _nef_nmr_spectrum.num_dimensions                2
      _nef_nmr_spectrum.chemical_shift_list           nef_chemical_shift_list_bmr5844
      _nef_nmr_spectrum.experiment_classification     .
      _nef_nmr_spectrum.experiment_type               hsqc
      _nef_nmr_spectrum.ccpn_positive_contour_count   10
      _nef_nmr_spectrum.ccpn_positive_contour_base    201207.9761
      _nef_nmr_spectrum.ccpn_positive_contour_factor  1.414214
      _nef_nmr_spectrum.ccpn_positive_contour_colour  '#008080'
      _nef_nmr_spectrum.ccpn_negative_contour_count   10
      _nef_nmr_spectrum.ccpn_negative_contour_base    -201207.9761
      _nef_nmr_spectrum.ccpn_negative_contour_factor  1.414214
      _nef_nmr_spectrum.ccpn_negative_contour_colour  '#DA70D6'
      _nef_nmr_spectrum.ccpn_slice_colour             '#008080'
      _nef_nmr_spectrum.ccpn_spectrum_scale           1
      _nef_nmr_spectrum.ccpn_spinning_rate            .
      _nef_nmr_spectrum.ccpn_spectrum_comment         ''
      _nef_nmr_spectrum.ccpn_spectrum_file_path       /Users/Documents/spectra/hsqc.spc
      _nef_nmr_spectrum.ccpn_sample                   .
      _nef_nmr_spectrum.ccpn_file_header_size         0
      _nef_nmr_spectrum.ccpn_file_number_type         float
      _nef_nmr_spectrum.ccpn_file_complex_stored_by   dimension
      _nef_nmr_spectrum.ccpn_file_scale_factor        1
      _nef_nmr_spectrum.ccpn_file_is_big_endian       false
      _nef_nmr_spectrum.ccpn_file_byte_number         4
      _nef_nmr_spectrum.ccpn_file_has_block_padding   true
      _nef_nmr_spectrum.ccpn_file_block_header_size   0
      _nef_nmr_spectrum.ccpn_file_type                Azara
      _nef_nmr_spectrum.ccpn_peaklist_serial          1
      _nef_nmr_spectrum.ccpn_peaklist_comment         ''
      _nef_nmr_spectrum.ccpn_peaklist_name            .
      _nef_nmr_spectrum.ccpn_peaklist_is_simulated    false
      _nef_nmr_spectrum.ccpn_peaklist_symbol_colour   '#7a7a7a'
      _nef_nmr_spectrum.ccpn_peaklist_symbol_style    cross
      _nef_nmr_spectrum.ccpn_peaklist_text_colour     '#7a7a7a'

      loop_
         _nef_spectrum_dimension.dimension_id
         _nef_spectrum_dimension.axis_unit
         _nef_spectrum_dimension.axis_code
         _nef_spectrum_dimension.spectrometer_frequency
         _nef_spectrum_dimension.spectral_width
         _nef_spectrum_dimension.value_first_point
         _nef_spectrum_dimension.folding
         _nef_spectrum_dimension.absolute_peak_positions
         _nef_spectrum_dimension.is_acquisition
         _nef_spectrum_dimension.ccpn_axis_code

         1  ppm  1H   600.13     16.66305634  13.06118752  circular  true  .  H
         2  ppm  15N  60.810663  32.88896883  134.8013663  circular  true  .  N
      stop_

      loop_
         _nef_spectrum_dimension_transfer.dimension_1
         _nef_spectrum_dimension_transfer.dimension_2
         _nef_spectrum_dimension_transfer.transfer_type
         _nef_spectrum_dimension_transfer.is_indirect

         1  2  onebond  false
      stop_

      loop_
         _ccpn_spectrum_dimension.dimension_id
         _ccpn_spectrum_dimension.point_count
         _ccpn_spectrum_dimension.reference_point
         _ccpn_spectrum_dimension.total_point_count
         _ccpn_spectrum_dimension.point_offset
         _ccpn_spectrum_dimension.assignment_tolerance
         _ccpn_spectrum_dimension.lower_aliasing_limit
         _ccpn_spectrum_dimension.higher_aliasing_limit
         _ccpn_spectrum_dimension.measurement_type
         _ccpn_spectrum_dimension.phase_0
         _ccpn_spectrum_dimension.phase_1
         _ccpn_spectrum_dimension.window_function
         _ccpn_spectrum_dimension.lorentzian_broadening
         _ccpn_spectrum_dimension.gaussian_broadening
         _ccpn_spectrum_dimension.sine_window_shift
         _ccpn_spectrum_dimension.dimension_is_complex
         _ccpn_spectrum_dimension.dimension_block_size

         1  2048  1022.5  2048  0  0.03  -3.601868814  13.06118752  Shift  .  .  .  .  .  .  false  128
         2  512   256.5   512   0  0.4   101.9123975   134.8013663  Shift  .  .  .  .  .  .  false  32
      stop_

      loop_
         _nef_peak.index
         _nef_peak.peak_id
         _nef_peak.volume
         _nef_peak.volume_uncertainty
         _nef_peak.height
         _nef_peak.height_uncertainty
         _nef_peak.position_1
         _nef_peak.position_uncertainty_1
         _nef_peak.position_2
         _nef_peak.position_uncertainty_2
         _nef_peak.chain_code_1
         _nef_peak.sequence_code_1
         _nef_peak.residue_name_1
         _nef_peak.atom_name_1
         _nef_peak.chain_code_2
         _nef_peak.sequence_code_2
         _nef_peak.residue_name_2
         _nef_peak.atom_name_2
         _nef_peak.ccpn_figure_of_merit
         _nef_peak.ccpn_linked_integral
         _nef_peak.ccpn_annotation
         _nef_peak.ccpn_comment

         1   1   .  .  834937.5     .  9.490027923  .  117.3867211  .  .   .    .  .      .   .    .  .      1  .  .  .
         2   2   .  .  948166.375   .  8.32004415   .  117.3874266  .  .   .    .  .      .   .    .  .      1  .  .  .
         3   3   .  .  943940.125   .  8.453563153  .  117.1876314  .  .   .    .  .      .   .    .  .      1  .  .  .
         4   4   .  .  634254.5625  .  8.994014548  .  116.9376709  .  .   .    .  .      .   .    .  .      1  .  .  .
         5   5   .  .  883868.9375  .  9.143328712  .  116.7997058  .  .   .    .  .      .   .    .  .      1  .  .  .
         6   6   .  .  807720.3125  .  8.543345299  .  116.4114358  .  .   .    .  .      .   .    .  .      1  .  .  .
         7   7   .  .  807321.375   .  8.703871524  .  116.2422154  .  .   .    .  .      .   .    .  .      1  .  .  .
         8   8   .  .  816018.5     .  8.729876115  .  115.273359   .  .   .    .  .      .   .    .  .      1  .  .  .
         9   9   .  .  974045.125   .  8.902105597  .  115.0619393  .  .   .    .  .      .   .    .  .      1  .  .  .
         10  10  .  .  700148.4375  .  8.262551535  .  114.8766033  .  .   .    .  .      .   .    .  .      1  .  .  .
         11  11  .  .  818619.6875  .  9.001829507  .  113.9872401  .  .   .    .  .      .   .    .  .      1  .  .  .
         12  12  .  .  883822       .  8.364161275  .  112.2296637  .  .   .    .  .      .   .    .  .      1  .  .  .
         13  13  .  .  716563.125   .  9.639446186  .  112.0508243  .  @-  @88  .  H@955  @-  @89  .  N@956  1  .  .  .
      stop_

   save_

Each _nef_nmr_spectrum saveframe can contain only one peak list. The entire saveframe, including the spectrum description, must be duplicated to include an additional peak list for a particular spectrum.

Each spectrum must be associated with a chemical shift list.

Section 7: Programme-specific data

Some programmes will also output their own saveframes. CcpNmr Analysis, for example, can output a several saveframes which (in combination with the NEF specified saveframes above) allows it to restore a full ccpn project when read in to CcpNmr Analysis.

   save_ccpn_assignment

      _ccpn_assignment.sf_category   ccpn_assignment
      _ccpn_assignment.sf_framecode  ccpn_assignment

      loop_
         _nmr_chain.short_name
         _nmr_chain.serial
         _nmr_chain.label
         _nmr_chain.is_connected
         _nmr_chain.comment

         @-  1  @-  false  'Default NmrChain, used for ResonanceGroups not in other chains. Cannot be deleted or renamed.'
         A   2  @2  false  .
      stop_

      loop_
         _nmr_residue.chain_code
         _nmr_residue.sequence_code
         _nmr_residue.residue_name
         _nmr_residue.serial
         _nmr_residue.comment

         @-  @88  .    88  .
         @-  @89  .    89  .
         A   1    MET  1   .
         A   2    LYS  2   .
         A   3    ILE  3   .
         A   4    ILE  4   .
      stop_

      loop_
         _nmr_atom.chain_code
         _nmr_atom.sequence_code
         _nmr_atom.serial
         _nmr_atom.name
         _nmr_atom.isotope_code
         _nmr_atom.comment

         @-  @88  955  H@955  1H   .
         @-  @89  956  N@956  15N  .
         A   1    1    HA     1H   HA
         A   1    2    HB2    1H   HBx
         A   1    3    HB3    1H   HBy
         A   1    4    HG2    1H   HGx
         A   1    5    HG3    1H   HGy
         A   1    6    C      13C  C
         A   1    7    CA     13C  CA
         A   1    8    CB     13C  CB
         A   1    9    CG     13C  CG
         A   2    10   H      1H   H
         A   2    11   HA     1H   HA
         A   2    12   HBx    1H   HBx
         A   2    13   HBy    1H   HBy
         A   2    14   HGx    1H   HGx
         A   2    15   HGy    1H   HGy
         A   2    16   HDx    1H   HDx
         A   2    17   HDy    1H   HDy
         A   2    18   HE%    1H   HE%
         A   2    19   C      13C  C
         A   2    20   CA     13C  CA
         A   2    21   CB     13C  CB
         A   2    22   CG     13C  CG
         A   2    23   CD     13C  CD
         A   2    24   CE     13C  CE
         A   2    25   N      15N  N
         A   3    26   H      1H   H
         A   3    27   HA     1H   HA
         A   3    28   HB     1H   HB
         A   3    29   HG1x   1H   HG1x
         A   3    30   HG1y   1H   HG1y
         A   3    31   HG2%   1H   HG2%
         A   3    32   HD1%   1H   HD1%
         A   3    33   C      13C  C
         A   3    34   CA     13C  CA
         A   3    35   CB     13C  CB
         A   3    36   CG1    13C  CG1
         A   3    37   CG2    13C  CG2
         A   3    38   CD1    13C  CD1
         A   3    39   N      15N  N
         A   4    40   H      1H   H
         A   4    41   HA     1H   HA
         A   4    42   HB     1H   HB
         A   4    43   HG1x   1H   HG1x
         A   4    44   HG1y   1H   HG1y
         A   4    45   HG2%   1H   HG2%
         A   4    46   HD1%   1H   HD1%
         A   4    47   C      13C  C
         A   4    48   CA     13C  CA
         A   4    49   CB     13C  CB
         A   4    50   CG1    13C  CG1
         A   4    51   CG2    13C  CG2
         A   4    52   CD1    13C  CD1
         A   4    53   N      15N  N
      stop_
   save_


   save_ccpn_additional_data

      _ccpn_additional_data.sf_category   ccpn_additional_data
      _ccpn_additional_data.sf_framecode  ccpn_additional_data

      loop_
         _ccpn_internal_data.ccpn_object_pid
         _ccpn_internal_data.internal_data_string

         PeakList:hsqc.1
;{
  "meritSettings": {
    "meritEnabled": false
  }
}
;
         Spectrum:hsqc
;{
  "spectrumAxesOrdering": {
    "spectrumPreferredAxisOrdering": [
      0,
      1
    ]
  },
  "includePositiveContours": true,
  "includeNegativeContours": false,
  "spectrumAliasing": {
    "displayFoldedContours": true,
    "visibleAliasingRange": [
      [
        0,
        0
      ],
      [
        0,
        0
      ]
    ],
    "aliasingRange": [
      [
        0,
        0
      ],
      [
        0,
        0
      ]
    ]
  }
}
;
      stop_
   save_