Table information for 'ppakm31.maps'


Table Description: Extracted narrow-band images.

This table is available for ADQL queries and through the TAP endpoint.

Resource Description: These observations cover five star-forming regions in the Andromeda galaxy (M31) with optical integral field spectroscopy. Each has a field of view of roughly 1 kpc across, at 10pc physical resolution. In addition to the calibrated data cubes, we provide flux maps of the Hβ, [OIII]5007, Hα, [NII]6583, [SII]6716 and [SII]6730 line emission. All data products have associated error maps.

For a list of all services and tables belonging to this table's resource, see Information on resource 'PPAKM31 – Optical Integral Field Spectroscopy of Star-Forming Regions in M31'

Citing this table

This table has an associated publication. If you use data from it, it may be appropriate to reference 2017ApJ...844..155T (ADS BibTeX entry for the publication) either in addition to or instead of the service reference.

To cite the table as such, we suggest the following BibTeX entry:

  title={{PPAKM31} – Optical Integral Field Spectroscopy of Star-Forming Regions
in M31},
  author={Kreckel, K. and Tomičić, N. and Sandstrom, K. and Groves, B.},
  howpublished={{VO} resource provided by the {GAVO} Data Center}

Resource Documentation

A Use Case

For a quick idea of what you can do with this data, consider Kewley et al's starburst criterion (2001ApJ...556..121K), which compares [OIII]/Hb with ([SII]6716+[SII]6730)/Ha.

We will use pyVO, TOPCAT and Aladin.

Since we need to do somewhat complex operations on the image pixels, we'll use pyVO to get the source images and compute the criterion. You could almost do it with just Aladin, but it doesn't let you do logarithms at the time of writing.

Get the image metadata: The easiest way to do that is through TAP. So, open TOPCAT's TAP window, search for ppakm31, and you should end up on GAVO's TAP service (but we can just as well assume you got there by looking for, perhaps “emission flux M31” or so in the Registry).

Since there's not many of them, just pull the metadata for all the line maps by querying:

select accref, field, imagetitle, bandpassid, cube_link
from ppakm31.maps

(in case you're wondering: you can see which columns to select in TOPCAT's column browser. Bonus feature: Control-click to select the columns, the hit the “Cols” button right above the query input to insert them into the query).

Do the image math: As said above, at this point we'll have to defer to python because the image match we'd like to do still is beyond Aladin. So, here's a python script that – using the python VO library pyVO – first loads the metadata for a given field, then builds a dict that goes from band names to numpy arrays of the corresponding flux maps, does Kewley et al's math and finally writes the result back as a FITS (we're cheating a bit with the header; that part is not a good example):

from import fits as pyfits
import numpy
import pyvo

def stringify(s):
    """returns s utf-8-decoded if it's bytes, s otherwise.

    (that's working around old astropy votable breakage)
    if isinstance(s, bytes):
        return s.decode("utf-8")
    return s

def get_image_metadata(field):
    """returns metadata rows from the ppakm31 service for field.

    Access URL and schema are taken from a TOPCAT exploration of the service.
    svc = pyvo.dal.TAPService("")

    res = []
    for row in svc.run_sync(
            "select accref, field, imagetitle, bandpassid, cube_link"
            "  from ppakm31.maps"
            "  where field={}".format(repr(field))):
            "bandpassid": stringify(row["bandpassid"]),
            "accref": stringify(row["accref"]),})

    return res

def get_line_maps(image_meta):
    """returns a dict band->hdus for image_meta as returned by
    res = {}
    for row in image_meta:
        if row["bandpassid"]=='[NII]6583':
             # we don't need that one later, so skip it
        res[row["bandpassid"]] =["accref"])
    return res

def get_kewley_map(line_maps):
    """does the math to compute the Kewley criterion, 2001ApJ...556..121K.

    Line_maps is a dict line label -> fits hdus.
    return (numpy.log(

if __name__=="__main__":
    line_maps = get_line_maps(get_image_metadata("F2"))
    kewley_map = get_kewley_map(line_maps)

    # hack: re-use Halpha for our line map, with just a hint of
    # sanitation
    new_hdr = line_maps["Halpha"][0].header
    for outdated_card in ["CRPIX3", "CRVAL3", "CDELT3", "BUNIT",
            "CUNIT3", "DATAMIN", "DATAMAX"]:
        del new_hdr[outdated_card]
    new_hdr["HISTORY"] = "butchered by"
        pyfits.PrimaryHDU(header=new_hdr, data=kewley_map)]
        ).writeto("kewley_map.fits", overwrite=True)

This will write a FITS file in kewley_map.fits, where values below one mean strong photoionisation.

Correlate that with stellar data: We'd expect strong photoionisation in the vicinity of luminous OB stars. So, let's see if we can correlate areas where our FITS has values below 1 with peculiarities in the CMD.

To do that, first use Aladin's curve tool (“pixel” in the toolbar) to clearly separate pixels that are >1 from those that are <1.

Then, get some stellar data. In Aladin's discovery tree (left side of the window), you can enter ”M31 photometry” and you'll find, for instance, Massey et al's 2006 catalog with UBVRI photometry of about 4e5 stars near M31. Since it goes a bit deeper than Gaia, let's use that: click on its entry, and in the dialog popping up, make sure “in view” is checked. Then hit load.

For further analysis, start TOPCAT. Then send over the full sample from Aladin to TOPCAT; to do that, locate the plane label of the Massey sources in the stack on the right side of Aladin's window, right click on it and say “broadcast selected tables to.../TOPCAT”. Then, in Aladin, select objects in the vicinity of the pixels indicating strong ionisation (click and drag as usual).

When you right-click on the tabular area below the image are, you can make your new selection into a new plane. Do that and again transmit this plane to TOPCAT.

Then, in TOPCAT, plot CMDs of both samples and see if you spot some systematics. Here's how this looked like for us:



Sorted by DB column index. [Sort alphabetically]

NameTable Head DescriptionUnitUCD
accref Product key Access key for the data N/A N/A
owner Owner Owner of the data N/A N/A
embargo Embargo ends Date the data will become/became public a N/A
mime Type MIME type of the file served N/A meta.code.mime
accsize File size Size of the data in bytes byte VOX:Image_FileSize
centerAlpha Ctr. RA Approximate center of image, RA deg POS_EQ_RA_MAIN
centerDelta Ctr. Dec Approximate center of image, Dec deg POS_EQ_DEC_MAIN
imageTitle Title Synthetic name of the image N/A VOX:Image_Title
instId Instrument Identifier of the originating instrument N/A INST_ID
dateObs Obs. date Representative date of observation. In reality, data contributing to this observation has typically been obtained over about a month. d VOX:Image_MJDateObs
nAxes #axes Number of axes in data N/A VOX:Image_Naxes
pixelSize Axes Lengths Number of pixels along each of the axes pix VOX:Image_Naxis
pixelScale Scales The pixel scale on each image axis deg/pix VOX:Image_Scale
refFrame Ref. Frame Coordinate system reference frame N/A VOX:STC_CoordRefFrame
wcs_equinox Equinox Equinox of the given coordinates yr VOX:STC_CoordEquinox
wcs_projection Proj. FITS WCS projection type N/A VOX:WCS_CoordProjection
wcs_refPixel Ref. pixel WCS reference pixel pix VOX:WCS_CoordRefPixel
wcs_refValues Ref. values World coordinates at WCS reference pixel deg VOX:WCS_CoordRefValue
wcs_cdmatrix CD matrix FITS WCS CDij matrix deg/pix VOX:WCS_CDMatrix
bandpassId Bandpass Freeform name of the bandpass used N/A VOX:BandPass_ID
bandpassUnit Bandpass unit Unit of bandpass specifications (always m). N/A VOX:BandPass_Unit
bandpassRefval Band Ref. Characteristic quantity for the bandpass of the image m VOX:BandPass_RefValue
bandpassHi Band upper Upper limit of the bandpass (in BandPass_Unit units) m VOX:BandPass_HiLimit
bandpassLo Band lower Lower limit of the bandpass (in BandPass_Unit units) m VOX:BandPass_LoLimit
pixflags P. Flags Flags specifying the processing done (C-original; F-resampled; Z-fluxes valid; X-not resampled; V-for display only N/A VOX:Image_PixFlags
coverage Coverage Field covered by the image deg N/A
field Field Internal designation of the field being observed. N/A N/A
cube_link Cube Datalink URL for the cube this line was extracted from. This can be used to access the cube using datalink N/A N/A

Columns that are parts of indices are marked like this.


The following services may use the data contained in this table:


VO nerds may sometimes need VOResource XML for this table.