Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions src/stdatamodels/fits_support.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import numpy as np
from asdf import schema as asdf_schema
from asdf import tagged, treeutil
from asdf.exceptions import ValidationError
from asdf.tags.core import HistoryEntry, NDArrayType, ndarray
from asdf.util import HashableDict
from astropy import time
Expand Down Expand Up @@ -375,6 +376,17 @@ def _get_validators(hdulist):
fits_context = FitsContext(hdulist)

validators = HashableDict(asdf_schema.YAML_VALIDATORS)
tag_validator = validators["tag"]

def validate_tag(validator, tag_pattern, instance, schema):
af = asdf.AsdfFile()
if af.extension_manager.handles_type(instance.__class__):
for tag in af.extension_manager.get_converter_for_type(instance.__class__).tags:
tag_validator(validator, tag_pattern, tag, schema)
return
raise ValidationError(
f"Unsupported {instance} does not have a tag matching pattern {tag_pattern}"
)

partial_fits_array_writer = partial(_fits_array_writer, fits_context)

Expand All @@ -387,6 +399,7 @@ def _get_validators(hdulist):
"items": partial(_fits_item_recurse, fits_context),
"properties": partial(_fits_comment_section_handler, fits_context),
"type": partial(_fits_type, fits_context),
"tag": validate_tag,
}
)

Expand Down
3 changes: 3 additions & 0 deletions src/stdatamodels/jwst/datamodels/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
from .level1b import Level1bModel
from .linearity import LinearityModel
from .mask import MaskModel
from .member_wcs import MemberWcsModel, MemberWcsSingleModel
from .model_base import JwstDataModel
from .mrsptcorr import MirMrsPtCorrModel
from .mrsxartcorr import MirMrsXArtCorrModel
Expand Down Expand Up @@ -180,6 +181,8 @@
"MRSSpecModel",
"MSAModel",
"MaskModel",
"MemberWcsModel",
"MemberWcsSingleModel",
"MirImgApcorrModel",
"MirImgPhotomModel",
"MirLrsApcorrModel",
Expand Down
52 changes: 52 additions & 0 deletions src/stdatamodels/jwst/datamodels/member_wcs.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
__all__ = ["MemberWcsModel", "MemberWcsSingleModel"]


class MemberWcsModel:
"""
A data model for storing WCS objects from a list of image models.

This model is meant to store all WCS objects from input images used to generate
a mosaic during image resampling. It behaves like a list::

>>> from stdatamodels.jwst.datamodels import MemberWcsModel
>>> memberwcs_model = MemberWcsModel()
>>> memberwcs_model.member_wcs.append(MemberWcsSingleModel())
>>> memberwcs_model.member_wcs[0] # doctest: +SKIP
<MemberWcsSingleModel>

If `init` is a `MemberWcsSingleModel` instance, an empty `MemberWcsSingleModel`
will be created and assigned to attribute `member_wcs[0]`.
`SpecProfileSingleModel` objects can be appended to the `member_wcs` attribute
by using its `append` method.

Attributes
----------
member_wcs : list
List of ~`stdatamodels.jwst.datamodels.MemberWcsSingleModel` objects.
"""

schema_url = "http://stsci.edu/schemas/jwst_datamodel/member_wcs.schema"

def __init__(self, init=None):
self.member_wcs = []
if isinstance(init, MemberWcsSingleModel):
self.member_wcs.append(init)


class MemberWcsSingleModel:
"""
A simple data model to store a filename and associated imaging WCS object.

Attributes
----------
filename : string
The mosaic member filename.
wcs : ~`gwcs.wcs.WCS` object
The member's image WCS object.
"""

schema_url = "http://stsci.edu/schemas/jwst_datamodel/member_wcs_single.schema"

def __init__(self, filename=None, wcs=None):
self.filename = filename
self.wcs = wcs
18 changes: 18 additions & 0 deletions src/stdatamodels/jwst/datamodels/schemas/image.schema.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -57,5 +57,23 @@ allOf:
default: 0
ndim: 2
datatype: uint32
member_wcs:
type: array
title: List of mosaic member WCS objects
items:
type: object
properties:
filename:
title: Member filename
type: string
ra_ref:
title: Member reference RA
type: number
dec_ref:
title: Member reference Dec
type: number
wcs:
title: Member WCS
tag: tag:stsci.edu:gwcs/wcs-*
- $ref: variance.schema
- $ref: pathlosscorr.schema
Loading