Califa DR1 data has been superseded by
`data release 3`_. Historic DR1 reductions are still available through
datalink there.
.. _data release 3: http://dc.g-vo.org/browse/califa/q3
2014-09-18T13:34:00
1000
CALIFA (Calar Alto Legacy Integral Field
spectroscopy Area) survey DR2
Sánchez, F.; The CALIFA collaboration
2
disk-galaxies
interstellar-medium
spectroscopy
Calar Alto Observatory
PMAS/PPAK at 3.5m Telescope
2015A&A...576A.135G
Optical
Survey
CALIFA has obtained spatially resolved spectroscopic information
of a diameter selected sample of 600 galaxies in the Local Universe
(0.005 < z < 0.03) using the PPAK integral field unit (IFU)
on Calar Alto. This data release 2 provided access to the first 200
galaxies. It has been superseded by DR3, ivo://org.gavo.dc/califa/q3/s.
This RD is only provided for its datalink service, which in turn is
referenced by the DR3 datalink service.
ivo://org.gavo.dc/califa/q3/cubesearch
QC parameters come as mean, max, and rms
Metadata for the CALIFA data cubes as delivered by the project.
//products#table
Each flag may be NULL (undefined), 0 (good quality), 1 (warning:
minor issues that do not significantly affect the quality), or
2 (bad: significant issues affecting the quality)
CALIFA dithers their observations from three pointings and several
fibers (in a way I don't quite understand). Several values are
obtained by manipulating sequences of these individual observations.
The headers all start with PPAK, then Pn(Fm).
This apply computes such values.
import operator
_SUB_OBS_KEYS = ( # V1200 keys
"P1F1 P1F2 P1F3 P2F1 P2F2 P2F3 P3F1 P3F2 P3F3".split()+
# V500 keys
"P1 P2 P3".split())
def getForAllPointings(prefix, header, keyword):
res = []
for subKey in _SUB_OBS_KEYS:
key = "%sPPAK %s %s"%(prefix, subKey, keyword)
if header.has_key(key):
res.append(header[key])
return res
prefix = ""
if @setup=="V500":
prefix = "V500 "
mjds = getForAllPointings(prefix, vars, "MJD_OBS"
)+getForAllPointings(prefix, vars, "MJD-OBS")
vars["meanDateObs"] = sum(mjds)/len(mjds)
vars["t_min"] = min(mjds)
vars["t_max"] = max(mjds)
vars["cumulativeExposure"] = sum(
getForAllPointings(prefix, vars, "EXPTIME"))
cubePreviews
datadr2/*.rscube.fits
"\schema.cubes"
\dlMetaURI{dl}
'application/x-votable+xml;content=datalink'
10000
\standardPreviewPath
"image/jpeg"
if "V1200" in \inputRelativePath:
@setup = "V1200"
elif "V500" in \inputRelativePath:
@setup = "V500"
else:
@setup = "UNKNOWN"
from gavo.utils import pyfits
def fitsTableToDict(relPath, setup):
rd = parent.parent.table.rd
hdus = pyfits.open(rd.getAbsPath(relPath))
fitsTable = hdus[1].data
names = [n.lower() for n in fitsTable.dtype.names]
return dict(((d["califaid"], setup), d)
for d in (
dict(zip(names, row))
for row in fitsTable))
@utils.memoized
def getQCFlags():
res = fitsTableToDict(
"datadr2/QCflags_std.V500.DR2.fits", "V500")
res.update(
fitsTableToDict("datadr2/QCflags_std.V1200.DR2.fits",
"V1200"))
return res
@utils.memoized
def getQCParams():
res = fitsTableToDict(
"datadr2/QCpars_std.V500.DR2.fits", "V500")
res.update(
fitsTableToDict("datadr2/QCpars_std.V1200.DR2.fits",
"V1200"))
return res
vars.update(getQCFlags()[@CALIFAID, @setup])
vars.update(getQCParams()[@CALIFAID, @setup])
# assume CRVAL1, CRVAL2 are approximate center and make a circle
# from it
vars["roughCircle"] = pgsphere.SCircle(
pgsphere.SPoint.fromDegrees(@CRVAL1, @CRVAL2),
1/60.*math.pi/180)
vars["s_ra"] = @CRVAL1
vars["s_dec"] = @CRVAL2
\standardPubDID
CALIFA DR2 Cube Datalink Service
'califa/data'
DLFITSProductDescriptor
"#cube"
GAVO CALIFA DR2 Cubes
dl/dlmeta
from gavo import votable
from io import BytesIO
data = self.getVOTableRows()
rows = list(sorted(data, key=lambda d:
(d["semantics"], d["access_url"])))
bySemantics = {}
for row in rows:
bySemantics.setdefault(
(row["access_url"] and row["access_url"].split("/", 3)[-1],
row["semantics"]), []
).append(row)
row = bySemantics[(u'califa/q3/dl/dlmeta?ID=ivo%3A//org.gavo.dc/~%3Fcalifa/datadr3/V1200/UGC12519.V1200.rscube.fits',
"#alternative")][0]
self.assertEqual(row["content_type"],
'application/x-votable+xml;content=datalink')
self.assertEqual(row["description"],
'This cube in DR3 medium resolution')
row = bySemantics[(None, u'#proc')][0]
self.assertNotEqual(row["service_def"], None)
row = bySemantics[(None, u'#proc')][0]
self.assertNotEqual(row["service_def"], None)
row = bySemantics[(u'califa/q2/dl/dlget?ID=ivo%3A//org.gavo.dc/~%3Fcalifa/datadr2/UGC12519.V500.rscube.fits', u'#this')][0]
self.assertEqual(row["content_type"], "image/fits")
self.assertEqual(row["description"], "The full dataset.")
for r in rows:
self.assertEqual(r["ID"],
"ivo://org.gavo.dc/~?califa/datadr2/UGC12519.V500.rscube.fits")
self.assertXpath(
"//v:RESOURCE[2]/v:GROUP[@name='inputParams']/v:PARAM[@name='DEC']", {
"ucd": "pos.eq.dec",
"unit": "deg",
"xtype": "interval",
"arraysize": "2"})
self.assertXpath(
"//v:RESOURCE[2]/v:GROUP[@name='inputParams']/v:PARAM[@name='RA']"
"/v:DESCRIPTION", {
None: "The longitude coordinate"})
dl/dlget
self.assertHasStrings(
"BITPIX = -32",
"NAXIS2 = 5",
"CDELT3 = 2.0",
";HTQ\0")