docs: def get_mopheader(expnum, ccd, version='p', prefix=None):
      """
      Retrieve the mopheader, either from cache or from vospace
  
      @param expnum:
      @param ccd:
      @param version:
      @param prefix:
      @return: Header
      """
      prefix = prefix is None and "" or prefix
      mopheader_uri = dbimages_uri(expnum=expnum,
                                   ccd=ccd,
                                   version=version,
                                   prefix=prefix,
                                   ext='.mopheader')
      if mopheader_uri in mopheaders:
          return mopheaders[mopheader_uri]
  
      filename = os.path.basename(mopheader_uri)
  
      if os.access(filename, os.F_OK):
          logger.debug("File already on disk: {}".format(filename))
          mopheader_fpt = StringIO(open(filename, 'r').read())
      else:
          mopheader_fpt = StringIO(open_vos_or_local(mopheader_uri).read())
  
      with warnings.catch_warnings():
          warnings.simplefilter('ignore', AstropyUserWarning)
          mopheader = fits.open(mopheader_fpt)
  
          # add some values to the mopheader so it can be an astrom header too.
          header = mopheader[0].header
          try:
              header['FWHM'] = get_fwhm(expnum, ccd)
          except IOError:
              header['FWHM'] = 10
          header['SCALE'] = mopheader[0].header['PIXSCALE']
          header['NAX1'] = header['NAXIS1']
          header['NAX2'] = header['NAXIS2']
          header['MOPversion'] = header['MOP_VER']
          header['MJD_OBS_CENTER'] = str(Time(header['MJD-OBSC'],
                                              format='mjd',
                                              scale='utc', precision=5).replicate(format='mpc'))
          header['MAXCOUNT'] = MAXCOUNT
          mopheaders[mopheader_uri] = header
          mopheader.close()
      return mopheaders[mopheader_uri]