def _load_map_from_db(self):
"""Initialises the Map from a ``Maps`` with ``data_origin='db'``."""
mdb = marvin.marvindb
if not mdb.isdbconnected:
raise marvin.core.exceptions.MarvinError('No db connected')
if sqlalchemy is None:
raise marvin.core.exceptions.MarvinError('sqlalchemy required to access the local DB.')
if version.StrictVersion(self.maps._dapver) <= version.StrictVersion('1.1.1'):
table = mdb.dapdb.SpaxelProp
else:
table = mdb.dapdb.SpaxelProp5
fullname_value = self.maps_property.fullname(channel=self.channel)
value = mdb.session.query(getattr(table, fullname_value)).filter(
table.file_pk == self.maps.data.pk).order_by(table.spaxel_index).all()
self.value = np.array(value).reshape(self.shape).T
if self.maps_property.ivar:
fullname_ivar = self.maps_property.fullname(channel=self.channel, ext='ivar')
ivar = mdb.session.query(getattr(table, fullname_ivar)).filter(
table.file_pk == self.maps.data.pk).order_by(table.spaxel_index).all()
self.ivar = np.array(ivar).reshape(self.shape).T
if self.maps_property.mask:
fullname_mask = self.maps_property.fullname(channel=self.channel, ext='mask')
mask = mdb.session.query(getattr(table, fullname_mask)).filter(
table.file_pk == self.maps.data.pk).order_by(table.spaxel_index).all()
self.mask = np.array(mask).reshape(self.shape).T
# Gets the header
hdus = self.maps.data.hdus
header_dict = None
for hdu in hdus:
if self.maps_property.name.upper() == hdu.extname.name.upper():
header_dict = hdu.header_to_dict()
break
if not header_dict:
warnings.warn('cannot find the header for property {0}.'
.format(self.maps_property.name),
marvin.core.exceptions.MarvinUserWarning)
else:
self.header = fits.Header(header_dict)
self.unit = self.maps_property.unit
评论列表
文章目录