def get_axe_names(image, ext_info):
    """
    Derive the name of all aXe products for a given image
    """
    # make an empty dictionary
    axe_names = {}

    # get the root of the image name
    pos = image.rfind('.fits')
    root = image[:pos]

    # FILL the dictionary with names of aXe products
    #
    # the GOL:
    axe_names['GOL']      = '%s_%i.cat' % (root, ext_info['axe_ext'])

    # the OAF/BAF:
    axe_names['OAF']      = '%s_%i.OAF' % (root, ext_info['axe_ext'])
    axe_names['BAF']      = '%s_%i.BAF' % (root, ext_info['axe_ext'])

    # the PET:
    axe_names['PET']      = '%s_%i.PET.fits' % (root, ext_info['axe_ext'])
    axe_names['BCK_PET']  = '%s_%i.BCK.PET.fits' % (root, ext_info['axe_ext'])

    # the DPP:
    axe_names['DPP']      = '%s_%i.DPP.fits' % (root, ext_info['axe_ext'])
    axe_names['BCK_DPP']  = '%s_%i.BCK.DPP.fits' % (root, ext_info['axe_ext'])

    # the SPC:
    axe_names['SPC']      = '%s_%i.SPC.fits' % (root, ext_info['axe_ext'])

    # the STP:
    axe_names['STP']      = '%s_%i.STP.fits' % (root, ext_info['axe_ext'])

    # the background mask:
    axe_names['MSK']      = '%s_%i.MSK.fits' % (root, ext_info['axe_ext'])

    # the background mask:
    axe_names['NBCK']     = '%s_%i.NBCK.fits' % (root, ext_info['axe_ext'])

    # the background mask:
    axe_names['SGRI']     = '%s_%i.SGRISM.fits' % (root, ext_info['axe_ext'])

    # the background mask:
    axe_names['FLX']     = '%s_%i.FLX.fits' % (root, ext_info['axe_ext'])

    # return the dictionary
    return axe_names