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
2011-07-18T11:34:00
1000
Calar Alto Legacy Integral Field
spectroscopy Area survey DR1
Sánchez, F.; The CALIFA collaboration
1
disk-galaxies
interstellar-medium
spectroscopy
Calar Alto Observatory
PMAS/PPAK at 3.5m Telescope
2012A&A...538A...8S
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 1 provided access to the first 100
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
Metadata for the CALIFA data cubes as delivered by the project.
//products#table
application/x-votable+xml;content=Datalink
Datalink
data/V1200/*.fits
data/V500/*.fits
previews
"\schema.cubes"
"califa"
datetime.datetime(2012, 10, 31)
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 getAuxData():
res = fitsTableToDict(
"data/aux/DR1_qc_params_V500.fits", "V500")
res.update(
fitsTableToDict("data/aux/DR1_qc_params_V1200.fits", "V1200"))
return res
vars.update(getAuxData()[@CALIFAID, @setup])
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(header, keyword):
res = []
for subKey in _SUB_OBS_KEYS:
key = "PPAK %s %s"%(subKey, keyword)
if header.has_key(key):
res.append(header[key])
return res
# DATE-OBS is the mean of all pointings
dts = [utils.parseISODT(d)
for d in getForAllPointings(vars, "DATE_OBS")
+getForAllPointings(vars, "DATE-OBS")]
dt0 = dts[0]
vars["meanDateObs"] = dt0+reduce(operator.add,
[dt-dt0 for dt in dts])/len(dts)
mjds = [dateTimeToMJD(d) for d in dts]
vars["t_min"] = min(mjds)
vars["t_max"] = max(mjds)
vars["cumulativeExposure"] = sum(
getForAllPointings(vars, "EXPTIME"))
# 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 DR1 Cube Datalink Service
'califa/data'
'#cube'
"%s/datadr3/V1200/%%s.V1200.rscube.fits"%rd.resdir
"%s/datadr3/V500/%%s.V500.rscube.fits"%rd.resdir
"%s/datadr3/COMB/%%s.COMB.rscube.fits"%rd.resdir
base.resolveCrossId("califa/q3#dl")
objId = os.path.basename(descriptor.pubDID).split(".")[0]
for template, descFrag in [
(dr3v1200template, "medium resolution"),
(dr3v500template, "low resolution"),
(dr3COMBtemplate, "enhanced SNR low resolution")]:
path = template%objId
if os.path.exists(path):
destLink = dr3datalink.getURL("dlmeta"
)+"?ID="+urllib.parse.quote(getStandardPubDID(path))
yield descriptor.makeLink(destLink,
description="This cube in DR3 "+descFrag,
contentType="application/x-votable+xml;content=datalink",
contentLength=10000,
contentQualifier="#cube")
dl/dlmeta
dl/dlget
self.assertHasStrings(
"NAXIS1 = 5",
"CRPIX3 = -499.0",
b"\\x3d\\x58\\xab")
foo/bar
self.assertHasStrings("has been superseded",
"http://dc.g-vo.org/browse/califa/q3")