docs: def dat2hdf5(table_dir):
      """
      Convert the Marshall et al. (2006) map from \*.dat.gz to \*.hdf5.
      """
  
      import astropy.io.ascii as ascii
      import gzip
      from contextlib import closing
  
      readme_fname = os.path.join(table_dir, 'ReadMe')
      table_fname = os.path.join(table_dir, 'table1.dat.gz')
      h5_fname = os.path.join(table_dir, 'marshall.h5')
  
      # Extract the gzipped table
      with gzip.open(table_fname, 'rb') as f:
          # Read in the table using astropy's CDS table reader
          r = ascii.get_reader(ascii.Cds, readme=readme_fname)
          r.data.table_name = 'table1.dat' # Hack to deal with bug in CDS reader.
          table = r.read(f)
          print(table)
  
      # Reorder table entries according to Galactic (l, b)
      l = coordinates.Longitude(
          table['GLON'][:],
          wrap_angle=180.*units.deg)
      b = table['GLAT'][:]
  
      sort_idx = np.lexsort((b, l))
  
      l = l[sort_idx].astype('f4')
      b = b[sort_idx].astype('f4')
      l.shape = (801, 81)
      b.shape = (801, 81)
  
      # Extract arrays from the table
      chi2_all = np.reshape((table['x2all'][sort_idx]).astype('f4'), (801,81))
      chi2_giants = np.reshape((table['x2gts'][sort_idx]).astype('f4'), (801,81))
  
      A = np.empty((801*81,33), dtype='f4')
      sigma_A = np.empty((801*81,33), dtype='f4')
      dist = np.empty((801*81,33), dtype='f4')
      sigma_dist = np.empty((801*81,33), dtype='f4')
  
      for k in range(33):
          A[:,k] = table['ext{:d}'.format(k+1)][sort_idx]
          sigma_A[:,k] = table['e_ext{:d}'.format(k+1)][sort_idx]
          dist[:,k] = table['r{:d}'.format(k+1)][sort_idx]
          sigma_dist[:,k] = table['e_r{:d}'.format(k+1)][sort_idx]
  
      A.shape = (801,81,33)
      sigma_A.shape = (801,81,33)
      dist.shape = (801,81,33)
      sigma_dist.shape = (801,81,33)
  
      # Construct the HDF5 file
      h5_fname = os.path.join(table_dir, 'marshall.h5')
      filter_kwargs = dict(
          chunks=True,
          compression='gzip',
          compression_opts=3,
          # scaleoffset=4
      )
  
      with h5py.File(h5_fname, 'w') as f:
          dset = f.create_dataset('A', data=A, **filter_kwargs)
          dset.attrs['description'] = 'Extinction of each bin'
          dset.attrs['band'] = 'Ks (2MASS)'
          dset.attrs['units'] = 'mag'
  
          dset = f.create_dataset('sigma_A', data=sigma_A, **filter_kwargs)
          dset.attrs['description'] = 'Extinction uncertainty of each bin'
          dset.attrs['band'] = 'Ks (2MASS)'
          dset.attrs['units'] = 'mag'
  
          dset = f.create_dataset('dist', data=dist, **filter_kwargs)
          dset.attrs['description'] = 'Distance of each bin'
          dset.attrs['units'] = 'kpc'
  
          dset = f.create_dataset('sigma_dist', data=sigma_dist, **filter_kwargs)
          dset.attrs['description'] = 'Distance uncertainty of each bin'
          dset.attrs['units'] = 'kpc'
  
          dset = f.create_dataset('chi2_all', data=chi2_all, **filter_kwargs)
          dset.attrs['description'] = 'Chi^2, based on all the stars'
          dset.attrs['units'] = 'unitless'
  
          dset = f.create_dataset('chi2_giants', data=chi2_giants, **filter_kwargs)
          dset.attrs['description'] = 'Chi^2, based on giants only'
          dset.attrs['units'] = 'unitless'
  
          # filter_kwargs.pop('scaleoffset')
  
          dset = f.create_dataset('l', data=l, **filter_kwargs)
          dset.attrs['description'] = 'Galactic longitude'
          dset.attrs['units'] = 'deg'
  
          dset = f.create_dataset('b', data=b, **filter_kwargs)
          dset.attrs['description'] = 'Galactic latitude'
          dset.attrs['units'] = 'deg'