docs: def add_nexus_nodes(generator, vds_file_path):
      """ Add in the additional information to make this into a standard nexus
      format file:-
      (a) create the standard structure under the 'entry' group with a
      subgroup for each dataset. 'set_bases' lists the data sets we make here.
      (b) save a dataset for each axis in each of the dimensions of the scan
      representing the demand position at every point in the scan.
      """
  
      # create the axes dimensions attribute, a comma separated list giving size
      # of the axis dimensions padded with . for the detector dimensions and
      # multidimensional dimensions
      pad_dims = []
      for d in generator.dimensions:
          if len(d.axes) == 1:
              pad_dims.append("%s_set" % d.axes[0])
          else:
              pad_dims.append(".")
  
      pad_dims += ["."] * 2  # assume a 2 dimensional detector
  
      with h5py.File(vds_file_path, 'r+', libver="latest") as vds:
          for data, node in zip(set_data, set_bases):
              # create a group for this entry
              vds.require_group(node)
              # points to the axis demand data sets
              vds[node].attrs["axes"] = pad_dims
              vds[node].attrs["NX_class"] = ['NXdata']
  
              # points to the detector dataset for this entry
              vds[node].attrs["signal"] = data.split('/')[-1]
              # a hard link from this entry 'signal' to the actual data
              vds[node + data] = vds[data]
  
              axis_sets = {}
              # iterate the axes in each dimension of the generator to create the
              # axis information nodes
              for i, d in enumerate(generator.dimensions):
                  for axis in d.axes:
                      # add signal data dimension for axis
                      axis_indices = '{}_set_indices'.format(axis)
                      vds[node].attrs[axis_indices] = i
  
                      # demand positions for axis
                      axis_set = '{}_set'.format(axis)
                      if axis_sets.get(axis_set):
                          # link to the first entry's demand list
                          vds[node + axis_set] = axis_sets[axis_set]
                      else:
                          # create the demand list for the first entry only
                          axis_demands = d.get_positions(axis)
                          vds.create_dataset(
                              node + axis_set, data=axis_demands)
                          vds[node + axis_set].attrs["units"] = \
                              generator.units[axis]
                      axis_sets[axis_set] = vds[node + axis_set]
  
          vds['entry'].attrs["NX_class"] = ['NXentry']