From 000beb6d90b9075f8e05860473a304194dee53b5 Mon Sep 17 00:00:00 2001 From: Stuart Mumford Date: Mon, 9 Mar 2020 21:25:41 +0000 Subject: [PATCH 01/13] asdf maker part 1 --- dkist/io/asdf/generator/generator.py | 33 ++++++++++++++++------- dkist/io/asdf/generator/helpers.py | 2 +- dkist/io/asdf/generator/simulated_data.py | 6 ++--- 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/dkist/io/asdf/generator/generator.py b/dkist/io/asdf/generator/generator.py index 20e56c2d..3c00c796 100644 --- a/dkist/io/asdf/generator/generator.py +++ b/dkist/io/asdf/generator/generator.py @@ -46,9 +46,9 @@ def references_from_filenames(filenames, headers, array_shape, hdu_index=0, rela Returns ------- `dkist.io.DaskFITSArrayContainer` - A container that represents a set of FITS files, and can generate a `dask.array.Array` from them. + A container that represents a set of FITS files, and can generate a + `dask.array.Array` from them. """ - filenames = np.asanyarray(filenames) filepaths = np.empty(array_shape, dtype=object) if filenames.size != filepaths.size: @@ -79,37 +79,52 @@ def references_from_filenames(filenames, headers, array_shape, hdu_index=0, rela raise ValueError("Not all the shapes of these files are the same") shape = list(shape)[0] - return DaskFITSArrayContainer(filepaths.tolist(), hdu_index, dtype, shape, loader=AstropyFITSLoader) + return DaskFITSArrayContainer(filepaths.tolist(), hdu_index, dtype, shape, + loader=AstropyFITSLoader) -def asdf_tree_from_filenames(filenames, asdf_filename, inventory=None, hdu=0, +def asdf_tree_from_filenames(filenames, headers=None, inventory=None, hdu=0, relative_to=None, extra_inventory=None): """ Build a DKIST asdf tree from a list of (unsorted) filenames. Parameters ---------- - filenames : `list` The filenames to process into a DKIST asdf dataset. + headers : `list` + The FITS headers if already known. If not specified will be read from + filenames. + + inventory: `dict` + The frame inventory to put in the tree, if not specified a dummy one + will be generated. + hdu : `int` - The HDU to read from the FITS files. + The HDU to read the headers from and reference the data to. + + relative_to : `pathlib.Path` + The path to reference the FITS files to inside the asdf. If not + specified will be local to the asdf (i.e. ``./``). + + extra_inventory : `dict` + An extra set of inventory to override the generated one. """ # In case filenames is a generator we cast to list. filenames = list(filenames) # headers is an iterator - headers = headers_from_filenames(filenames, hdu=hdu) + if not headers: + headers = headers_from_filenames(filenames, hdu=hdu) table_headers, sorted_filenames, sorted_headers = preprocess_headers(headers, filenames) if not inventory: - inventory = generate_datset_inventory_from_headers(table_headers, asdf_filename) + inventory = generate_datset_inventory_from_headers(table_headers) if extra_inventory: inventory.update(extra_inventory) - ds_wcs = TransformBuilder(sorted_headers).gwcs # Get the array shape diff --git a/dkist/io/asdf/generator/helpers.py b/dkist/io/asdf/generator/helpers.py index 621d530b..d1dc698c 100644 --- a/dkist/io/asdf/generator/helpers.py +++ b/dkist/io/asdf/generator/helpers.py @@ -13,7 +13,7 @@ def headers_from_filenames(filenames, hdu=0): """ - A generator to get the headers from filenames. + Generator to get the headers from filenames. """ return [dict(fits.getheader(fname, ext=hdu)) for fname in filenames] diff --git a/dkist/io/asdf/generator/simulated_data.py b/dkist/io/asdf/generator/simulated_data.py index 60d356f3..d686f41c 100644 --- a/dkist/io/asdf/generator/simulated_data.py +++ b/dkist/io/asdf/generator/simulated_data.py @@ -28,7 +28,7 @@ def _gen_type(gen_type, max_int=1e6, max_float=1e6, len_str=30): raise ValueError("Type {} is not supported".format(gen_type)) # pragma: no cover -def generate_datset_inventory_from_headers(headers, asdf_name): +def generate_datset_inventory_from_headers(headers): """ Generate a dummy dataset inventory from headers. @@ -42,7 +42,6 @@ def generate_datset_inventory_from_headers(headers, asdf_name): asdf_name: `str` """ - schema = [ ('asdf_object_key', str), ('browse_movie_object_key', str), @@ -83,8 +82,7 @@ def generate_datset_inventory_from_headers(headers, asdf_name): constants = { 'frame_count': len(headers), 'bucket': 'data', - 'asdf_object_key': str(asdf_name) - } + } output = {} From 75582dd11ffcd91d12c8d4f0eef5e10c55923201 Mon Sep 17 00:00:00 2001 From: Stuart Mumford Date: Mon, 16 Mar 2020 16:28:53 +0000 Subject: [PATCH 02/13] Where things should end up --- dkist/io/asdf/generator/helpers.py | 125 ++++++++++++++++++ dkist/io/asdf/generator/transforms.py | 1 - .../dkist.nso.edu/dkist/dataset-0.1.0.yaml | 80 ++++++----- 3 files changed, 163 insertions(+), 43 deletions(-) diff --git a/dkist/io/asdf/generator/helpers.py b/dkist/io/asdf/generator/helpers.py index d1dc698c..ff13d560 100644 --- a/dkist/io/asdf/generator/helpers.py +++ b/dkist/io/asdf/generator/helpers.py @@ -4,8 +4,12 @@ import numpy as np +import astropy.units as u +import gwcs.coordinate_frames as cf +from astropy.coordinates import SkyCoord from astropy.io import fits from astropy.table import Table +from astropy.time import Time __all__ = ['preprocess_headers', 'make_sorted_table', 'validate_headers', 'table_from_headers', 'headers_from_filenames'] @@ -92,3 +96,124 @@ def preprocess_headers(headers, filenames): table_headers.remove_columns(["headers", "filenames"]) return table_headers, sorted_filenames, sorted_headers + + +def _inventory_from_wcs(wcs): + """ + Parse the gWCS and extract any inventory keys needed. + + This assumes all WCSes have a celestial and temporal component. + + Keys for wavelength will not be added if there is no spectral component, + stokes keys are always added (defaulting to just I if not in the WCS). + """ + + bottom_left_array = [0] * wcs.pixel_n_dim + top_right_array = np.array(wcs.pixel_shape) - 1 + + bottom_left_world = wcs.array_index_to_world(*bottom_left_array) + top_right_world = wcs.array_index_to_world(*top_right_array) + + start_time = list(filter(lambda x: isinstance(x, Time), bottom_left_world))[0] + end_time = list(filter(lambda x: isinstance(x, Time), top_right_world))[0] + + bottom_left_celestial = list(filter(lambda x: isinstance(x, SkyCoord), bottom_left_world))[0] + top_right_celestial = list(filter(lambda x: isinstance(x, SkyCoord), top_right_world))[0] + + bounding_box = ((bottom_left_celestial.Tx.to_value(u.arcsec), bottom_left_celestial.Ty.to_value(u.arcsec)), + (top_right_celestial.Tx.to_value(u.arcsec), top_right_celestial.Tx.to_value(u.arcsec))) + + inventory = {'bounding_box': bounding_box, + 'start_time': start_time.isot, + 'end_time': end_time.isot} + + if not isinstance(wcs.output_frame, cf.CompositeFrame): + raise TypeError("Can't parse this WCS as expected.") + + spec_frame = list(filter(lambda f: isinstance(f, cf.SpectralFrame), wcs.output_frame.frames)) + if spec_frame: + spectral_axes = spec_frame[0].axes_order[0] - wcs.pixel_n_dim + inventory["wavelength_min"] = bottom_left_world[spectral_axes].to_value(u.nm) + inventory["wavelength_max"] = top_right_world[spectral_axes].to_value(u.nm) + + stokes_frame = list(filter(lambda f: isinstance(f, cf.StokesFrame), wcs.output_frame.frames)) + if stokes_frame: + stokes_axes = stokes_frame[0].axes_order[0] + pixel_coords = [0] * wcs.pixel_n_dim + pixel_coords[stokes_axes] = (0, 1, 2, 3) + all_stokes = wcs.pixel_to_world(*np.broadcast_arrays(*pixel_coords)) + stokes_components = all_stokes[stokes_axes - 1] + + inventory["stokes_parameters"] = list(map(str, stokes_components)) + inventory["has_all_stokes"] = len(stokes_components) > 1 + + else: + inventory["stokes_parameters"] = ['I'] + inventory["has_all_stokes"] = False + + return inventory + + +def _get_unique(column, singular=False): + uniq = list(set(column)) + if singular: + if len(uniq) == 1: + return uniq[0] + else: + raise ValueError("Column does not result in a singular unique value") + + return uniq + + +def _get_number_apply(column, func): + return func(column) + + +def _inventory_from_headers(headers): + inventory = {} + + inventory["wavelength_min"] = inventory["wavelength_max"] = _get_unique(headers['LINEWAV'])[0] + # inventory["exposure_time"] = _get_number_apply(headers[''], np.median) + inventory["filter_wavelengths"] = _get_unique(headers['LINEWAV']) + inventory["instrument_name"] = _get_unique(headers['INSTRUME'], singular=True) + # inventory["observables"] = _get_unique(headers['']) + # inventory["quality_average_fried_parameter"] = _get_number_apply(headers['FRIEDVAL'], np.mean) + # inventory["quality_average_polarimetric_accuracy"] = _get_number_apply(headers[''], np.mean) + # inventory["recipe_id"] = _get_unique(headers[''], singular=True) + # inventory["recipe_instance_id"] = _get_unique(headers[''], singular=True) + # inventory["recipe_run_id"] = _get_unique(headers[''], singular=True) + # inventory["target_type"] = _get_unique(headers[''], singular=True) + # inventory["primary_experiment_id"] = _get_unique(headers[''], singular=True) + # inventory["dataset_size"] = _get_number_apply(headers[''], np.sum) + # inventory["contributing_experiment_ids"] = _get_unique(headers['']) + # inventory["contributing_proposal_ids"] =_get_unique(headers['']) + + return inventory + + +def inventory_metadata_from_tree(tree, **inventory): + """ + Generate the inventory record for an asdf file from an asdf tree. + + Parameters + ---------- + tree : `dict` + The incomplete asdf tree. Needs to contain the dataset object. + + inventory : `dict` + Additional inventory keys that can not be computed from the headers or the WCS. + + + Returns + ------- + + tree: `dict` + The updated tree with the inventory. + + """ + wcs = tree['dataset'].wcs + headers = tree['dataset'].headers + # The headers will populate passband info for VBI and then wcs will + # override it if there is a wavelength axis in the dataset, + # any supplied kwargs override things extracted from dataset. + return {**_inventory_from_headers(headers), **_inventory_from_wcs(wcs), **inventory} diff --git a/dkist/io/asdf/generator/transforms.py b/dkist/io/asdf/generator/transforms.py index 6851d3f8..b3a42f4e 100644 --- a/dkist/io/asdf/generator/transforms.py +++ b/dkist/io/asdf/generator/transforms.py @@ -198,7 +198,6 @@ def gwcs(self): input_frame=self.pixel_frame, output_frame=world_frame) - @property def frames(self): """ diff --git a/dkist/io/asdf/schemas/dkist.nso.edu/dkist/dataset-0.1.0.yaml b/dkist/io/asdf/schemas/dkist.nso.edu/dkist/dataset-0.1.0.yaml index b6421e6d..ab5ea5ca 100644 --- a/dkist/io/asdf/schemas/dkist.nso.edu/dkist/dataset-0.1.0.yaml +++ b/dkist/io/asdf/schemas/dkist.nso.edu/dkist/dataset-0.1.0.yaml @@ -30,10 +30,10 @@ properties: properties: asdf_object_key: type: string - browse_movie_object_key: - type: string - browse_movie_url: - type: string + bounding_box: + type: array + items: + type: number bucket: type: string contributing_experiment_ids: @@ -44,6 +44,8 @@ properties: type: array items: type: string + create_date: + $ref: "tag:stsci.edu:asdf/time/time-1.1.0" dataset_id: type: string dataset_inventory_id: @@ -57,9 +59,7 @@ properties: filter_wavelengths: type: array items: - type: string - frame_count: - type: integer + type: number has_all_stokes: type: boolean instrument_name: @@ -86,8 +86,8 @@ properties: type: integer start_time: $ref: "tag:stsci.edu:asdf/time/time-1.1.0" - #stokes_parameters: - # type: string + stokes_parameters: + type: string target_type: type: string wavelength_max: @@ -95,35 +95,35 @@ properties: wavelength_min: type: number additionalProperties: false - # required: - # - asdf_object_key - # - browse_movie_object_key - # - browse_movie_url - # - bucket - # - contributing_experiment_ids - # - contributing_proposal_ids - # - dataset_id - # - dataset_inventory_id - # - dataset_size - # - end_time - # - exposure_time - # - filter_wavelengths - # - frame_count - # - has_all_stokes - # - instrument_name - # - observables - # - original_frame_count - # - primary_experiment_id - # - primary_proposal_id - # - quality_average_fried_parameter - # - quality_average_polarimetric_accuracy - # - recipe_id - # - recipe_instance_id - # - recipe_run_id - # - start_time - # - target_type - # - wavelength_max - # - wavelength_min + required: + - asdf_object_key + - bounding_box + - bucket + - contributing_experiment_ids + - contributing_proposal_ids + - create_date + - dataset_id + - dataset_inventory_id + - dataset_size + - end_time + - exposure_time + - filter_wavelengths + - has_all_stokes + - instrument_name + - observables + - original_frame_count + - primary_experiment_id + - primary_proposal_id + - quality_average_fried_parameter + - quality_average_polarimetric_accuracy + - recipe_id + - recipe_instance_id + - recipe_run_id + - start_time + - stokes_parameters + - target_type + - wavelength_max + - wavelength_min mask: $ref: "tag:stsci.edu:asdf/core/ndarray-1.0.0" @@ -131,10 +131,6 @@ properties: unit: $ref: "tag:stsci.edu:asdf/unit/unit-1.0.0" - # uncertainty: - # type: object - - required: [data, headers, wcs] allowAdditionalProperties: true ... From 8f5d1dd6c2a002f051060db7bebe2f900087980d Mon Sep 17 00:00:00 2001 From: Stuart Mumford Date: Mon, 16 Mar 2020 16:30:10 +0000 Subject: [PATCH 03/13] relax schema to load old asdfs --- .../dkist.nso.edu/dkist/dataset-0.1.0.yaml | 62 +++++++++---------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/dkist/io/asdf/schemas/dkist.nso.edu/dkist/dataset-0.1.0.yaml b/dkist/io/asdf/schemas/dkist.nso.edu/dkist/dataset-0.1.0.yaml index ab5ea5ca..11268212 100644 --- a/dkist/io/asdf/schemas/dkist.nso.edu/dkist/dataset-0.1.0.yaml +++ b/dkist/io/asdf/schemas/dkist.nso.edu/dkist/dataset-0.1.0.yaml @@ -59,7 +59,7 @@ properties: filter_wavelengths: type: array items: - type: number + type: string #number has_all_stokes: type: boolean instrument_name: @@ -94,36 +94,36 @@ properties: type: number wavelength_min: type: number - additionalProperties: false - required: - - asdf_object_key - - bounding_box - - bucket - - contributing_experiment_ids - - contributing_proposal_ids - - create_date - - dataset_id - - dataset_inventory_id - - dataset_size - - end_time - - exposure_time - - filter_wavelengths - - has_all_stokes - - instrument_name - - observables - - original_frame_count - - primary_experiment_id - - primary_proposal_id - - quality_average_fried_parameter - - quality_average_polarimetric_accuracy - - recipe_id - - recipe_instance_id - - recipe_run_id - - start_time - - stokes_parameters - - target_type - - wavelength_max - - wavelength_min + additionalProperties: true + # required: + # - asdf_object_key + # - bounding_box + # - bucket + # - contributing_experiment_ids + # - contributing_proposal_ids + # - create_date + # - dataset_id + # - dataset_inventory_id + # - dataset_size + # - end_time + # - exposure_time + # - filter_wavelengths + # - has_all_stokes + # - instrument_name + # - observables + # - original_frame_count + # - primary_experiment_id + # - primary_proposal_id + # - quality_average_fried_parameter + # - quality_average_polarimetric_accuracy + # - recipe_id + # - recipe_instance_id + # - recipe_run_id + # - start_time + # - stokes_parameters + # - target_type + # - wavelength_max + # - wavelength_min mask: $ref: "tag:stsci.edu:asdf/core/ndarray-1.0.0" From 70ff31fdcfeb98e0570209933225cbc677d26c94 Mon Sep 17 00:00:00 2001 From: Stuart Mumford Date: Tue, 17 Mar 2020 13:21:57 +0000 Subject: [PATCH 04/13] More header info --- dkist/io/asdf/generator/generator.py | 11 ++++------- dkist/io/asdf/generator/helpers.py | 10 ++++------ dkist/io/asdf/generator/transforms.py | 8 ++++---- 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/dkist/io/asdf/generator/generator.py b/dkist/io/asdf/generator/generator.py index 3c00c796..e1032c81 100644 --- a/dkist/io/asdf/generator/generator.py +++ b/dkist/io/asdf/generator/generator.py @@ -8,8 +8,8 @@ from dkist.dataset import Dataset from dkist.io import AstropyFITSLoader, DaskFITSArrayContainer -from dkist.io.asdf.generator.helpers import headers_from_filenames, preprocess_headers -from dkist.io.asdf.generator.simulated_data import generate_datset_inventory_from_headers +from dkist.io.asdf.generator.helpers import (extract_inventory, headers_from_filenames, + preprocess_headers) from dkist.io.asdf.generator.transforms import TransformBuilder try: @@ -120,13 +120,10 @@ def asdf_tree_from_filenames(filenames, headers=None, inventory=None, hdu=0, table_headers, sorted_filenames, sorted_headers = preprocess_headers(headers, filenames) - if not inventory: - inventory = generate_datset_inventory_from_headers(table_headers) - if extra_inventory: - inventory.update(extra_inventory) - ds_wcs = TransformBuilder(sorted_headers).gwcs + inventory = extract_inventory(table_headers, ds_wcs, **extra_inventory) + # Get the array shape shape = tuple((headers[0][f'DNAXIS{n}'] for n in range(headers[0]['DNAXIS'], headers[0]['DAAXES'], -1))) diff --git a/dkist/io/asdf/generator/helpers.py b/dkist/io/asdf/generator/helpers.py index ff13d560..0fd725df 100644 --- a/dkist/io/asdf/generator/helpers.py +++ b/dkist/io/asdf/generator/helpers.py @@ -173,17 +173,17 @@ def _inventory_from_headers(headers): inventory = {} inventory["wavelength_min"] = inventory["wavelength_max"] = _get_unique(headers['LINEWAV'])[0] - # inventory["exposure_time"] = _get_number_apply(headers[''], np.median) + inventory["exposure_time"] = _get_number_apply(headers['FPA_EXPO'], np.median) inventory["filter_wavelengths"] = _get_unique(headers['LINEWAV']) inventory["instrument_name"] = _get_unique(headers['INSTRUME'], singular=True) # inventory["observables"] = _get_unique(headers['']) - # inventory["quality_average_fried_parameter"] = _get_number_apply(headers['FRIEDVAL'], np.mean) + inventory["quality_average_fried_parameter"] = _get_number_apply(headers['FRIEDVAL'], np.mean) # inventory["quality_average_polarimetric_accuracy"] = _get_number_apply(headers[''], np.mean) # inventory["recipe_id"] = _get_unique(headers[''], singular=True) # inventory["recipe_instance_id"] = _get_unique(headers[''], singular=True) # inventory["recipe_run_id"] = _get_unique(headers[''], singular=True) # inventory["target_type"] = _get_unique(headers[''], singular=True) - # inventory["primary_experiment_id"] = _get_unique(headers[''], singular=True) + inventory["primary_experiment_id"] = _get_unique(headers['EXPER_ID'], singular=True) # inventory["dataset_size"] = _get_number_apply(headers[''], np.sum) # inventory["contributing_experiment_ids"] = _get_unique(headers['']) # inventory["contributing_proposal_ids"] =_get_unique(headers['']) @@ -191,7 +191,7 @@ def _inventory_from_headers(headers): return inventory -def inventory_metadata_from_tree(tree, **inventory): +def extract_inventory(headers, wcs, **inventory): """ Generate the inventory record for an asdf file from an asdf tree. @@ -211,8 +211,6 @@ def inventory_metadata_from_tree(tree, **inventory): The updated tree with the inventory. """ - wcs = tree['dataset'].wcs - headers = tree['dataset'].headers # The headers will populate passband info for VBI and then wcs will # override it if there is a wavelength axis in the dataset, # any supplied kwargs override things extracted from dataset. diff --git a/dkist/io/asdf/generator/transforms.py b/dkist/io/asdf/generator/transforms.py index b3a42f4e..b3eb0e17 100644 --- a/dkist/io/asdf/generator/transforms.py +++ b/dkist/io/asdf/generator/transforms.py @@ -17,8 +17,8 @@ 'spatial_model_from_quantity', 'spatial_model_from_header'] -def spatial_model_from_quantity(crpix1, crpix2, cdelt1, cdelt2, pc, crval1, crval2, - projection='TAN'): +def spatial_model_from_quantity(crpix1, crpix2, cdelt1, cdelt2, pc, crval1, + crval2, lon_pole, projection='TAN'): """ Given quantity representations of a HPLx FITS WCS return a model for the spatial transform. @@ -33,7 +33,7 @@ def spatial_model_from_quantity(crpix1, crpix2, cdelt1, cdelt2, pc, crval1, crva scale = Multiply(cdelt1) & Multiply(cdelt2) rotu = AffineTransformation2D(pc, translation=(0, 0)*u.arcsec) tanu = projections[projection] - skyrotu = RotateNative2Celestial(crval1, crval2, 180*u.deg) + skyrotu = RotateNative2Celestial(crval1, crval2, lon_pole) return shiftu | scale | rotu | tanu | skyrotu @@ -70,7 +70,7 @@ def spatial_model_from_header(header): pc = np.matrix([[header[f'PC{lonind}_{lonind}'], header[f'PC{lonind}_{latind}']], [header[f'PC{latind}_{lonind}'], header[f'PC{latind}_{latind}']]]) * cunit1 - return spatial_model_from_quantity(crpix1, crpix2, cdelt1, cdelt2, pc, crval1, crval2, + return spatial_model_from_quantity(crpix1, crpix2, cdelt1, cdelt2, pc, crval1, crval2, header['LONPOLE']*u.deg, projection=latproj) From 44e6a5f5bf4b7828c3b3ce6812326b6c85673f85 Mon Sep 17 00:00:00 2001 From: Stuart Mumford Date: Tue, 17 Mar 2020 18:35:22 +0000 Subject: [PATCH 05/13] more inventory --- dkist/io/asdf/generator/helpers.py | 25 +++++++++++-------- .../dkist.nso.edu/dkist/dataset-0.1.0.yaml | 4 ++- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/dkist/io/asdf/generator/helpers.py b/dkist/io/asdf/generator/helpers.py index 0fd725df..8f94a7ba 100644 --- a/dkist/io/asdf/generator/helpers.py +++ b/dkist/io/asdf/generator/helpers.py @@ -2,7 +2,10 @@ Helper functions for parsing files and processing headers. """ +from functools import partial + import numpy as np +import scipy.stats import astropy.units as u import gwcs.coordinate_frames as cf @@ -172,21 +175,23 @@ def _get_number_apply(column, func): def _inventory_from_headers(headers): inventory = {} + mode = partial(scipy.stats.mode, axis=None, nan_policy="raise") + inventory["wavelength_min"] = inventory["wavelength_max"] = _get_unique(headers['LINEWAV'])[0] - inventory["exposure_time"] = _get_number_apply(headers['FPA_EXPO'], np.median) + inventory["exposure_time"] = _get_number_apply(headers['FPA_EXPO'], mode) inventory["filter_wavelengths"] = _get_unique(headers['LINEWAV']) inventory["instrument_name"] = _get_unique(headers['INSTRUME'], singular=True) - # inventory["observables"] = _get_unique(headers['']) + inventory["observables"] = [] # _get_unique(headers['']) inventory["quality_average_fried_parameter"] = _get_number_apply(headers['FRIEDVAL'], np.mean) - # inventory["quality_average_polarimetric_accuracy"] = _get_number_apply(headers[''], np.mean) - # inventory["recipe_id"] = _get_unique(headers[''], singular=True) - # inventory["recipe_instance_id"] = _get_unique(headers[''], singular=True) - # inventory["recipe_run_id"] = _get_unique(headers[''], singular=True) - # inventory["target_type"] = _get_unique(headers[''], singular=True) + inventory["quality_average_polarimetric_accuracy"] = _get_unique(headers[''], singular=True) + inventory["recipe_id"] = _get_unique(headers['RECIPEID'], singular=True) + inventory["recipe_instance_id"] = _get_unique(headers['RINSTID'], singular=True) + inventory["recipe_run_id"] = _get_unique(headers['RRUNID'], singular=True) + inventory["target_type"] = _get_unique(headers['OBJECT']) inventory["primary_experiment_id"] = _get_unique(headers['EXPER_ID'], singular=True) - # inventory["dataset_size"] = _get_number_apply(headers[''], np.sum) - # inventory["contributing_experiment_ids"] = _get_unique(headers['']) - # inventory["contributing_proposal_ids"] =_get_unique(headers['']) + inventory["dataset_size"] = _get_number_apply(headers['FRAMEVOL'], np.sum) + # inventory["contributing_experiment_ids"] = _get_keys_matching(headers, "EXPRID??") + # inventory["contributing_proposal_ids"] =_get_keys_matching(headers, "PROPID??") return inventory diff --git a/dkist/io/asdf/schemas/dkist.nso.edu/dkist/dataset-0.1.0.yaml b/dkist/io/asdf/schemas/dkist.nso.edu/dkist/dataset-0.1.0.yaml index 11268212..0834ce03 100644 --- a/dkist/io/asdf/schemas/dkist.nso.edu/dkist/dataset-0.1.0.yaml +++ b/dkist/io/asdf/schemas/dkist.nso.edu/dkist/dataset-0.1.0.yaml @@ -89,7 +89,9 @@ properties: stokes_parameters: type: string target_type: - type: string + type: array + items: + type: string wavelength_max: type: number wavelength_min: From 72ec999271c092a1957dcf449eadfb85bc6fa229 Mon Sep 17 00:00:00 2001 From: Stuart Mumford Date: Wed, 25 Mar 2020 13:16:11 +0000 Subject: [PATCH 06/13] Implement the last of the spec 214 work --- dkist/io/asdf/generator/helpers.py | 33 +++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/dkist/io/asdf/generator/helpers.py b/dkist/io/asdf/generator/helpers.py index 8f94a7ba..6edd436e 100644 --- a/dkist/io/asdf/generator/helpers.py +++ b/dkist/io/asdf/generator/helpers.py @@ -1,7 +1,7 @@ """ Helper functions for parsing files and processing headers. """ - +import re from functools import partial import numpy as np @@ -172,6 +172,30 @@ def _get_number_apply(column, func): return func(column) +def _get_keys_matching(headers, pattern, singular_columns=True): + """ + Get all the values from all the keys matching the given re pattern. + + Parameters + ---------- + headers : `astropy.table.Table` + All the headers + + pattern : `str` + A regex pattern + + singular_columns : `bool` + Validate that all the values in a matching column are the same. + """ + results = [] + + prog = re.compile(pattern) + for key in headers.colnames: + if prog.match(key): + results.append(_get_unique(headers[key], singular=singular_columns)) + return results + + def _inventory_from_headers(headers): inventory = {} @@ -181,7 +205,7 @@ def _inventory_from_headers(headers): inventory["exposure_time"] = _get_number_apply(headers['FPA_EXPO'], mode) inventory["filter_wavelengths"] = _get_unique(headers['LINEWAV']) inventory["instrument_name"] = _get_unique(headers['INSTRUME'], singular=True) - inventory["observables"] = [] # _get_unique(headers['']) + inventory["observables"] = [] # _get_unique(headers['']) inventory["quality_average_fried_parameter"] = _get_number_apply(headers['FRIEDVAL'], np.mean) inventory["quality_average_polarimetric_accuracy"] = _get_unique(headers[''], singular=True) inventory["recipe_id"] = _get_unique(headers['RECIPEID'], singular=True) @@ -190,8 +214,8 @@ def _inventory_from_headers(headers): inventory["target_type"] = _get_unique(headers['OBJECT']) inventory["primary_experiment_id"] = _get_unique(headers['EXPER_ID'], singular=True) inventory["dataset_size"] = _get_number_apply(headers['FRAMEVOL'], np.sum) - # inventory["contributing_experiment_ids"] = _get_keys_matching(headers, "EXPRID??") - # inventory["contributing_proposal_ids"] =_get_keys_matching(headers, "PROPID??") + inventory["contributing_experiment_ids"] = _get_keys_matching(headers, r"EXPRID\d\d") + inventory["contributing_proposal_ids"] = _get_keys_matching(headers, r"PROPID\d\d") return inventory @@ -211,7 +235,6 @@ def extract_inventory(headers, wcs, **inventory): Returns ------- - tree: `dict` The updated tree with the inventory. From 0f13c82a1be196876845ac034a81683dc1bfcf65 Mon Sep 17 00:00:00 2001 From: Stuart Mumford Date: Wed, 25 Mar 2020 15:14:11 +0000 Subject: [PATCH 07/13] More dataset inv --- dkist/io/asdf/generator/helpers.py | 26 ++++++----- dkist/io/asdf/generator/tests/test_helpers.py | 46 ++++++++++++++++++- tox.ini | 2 +- 3 files changed, 61 insertions(+), 13 deletions(-) diff --git a/dkist/io/asdf/generator/helpers.py b/dkist/io/asdf/generator/helpers.py index 6edd436e..1e5b48b5 100644 --- a/dkist/io/asdf/generator/helpers.py +++ b/dkist/io/asdf/generator/helpers.py @@ -31,12 +31,13 @@ def table_from_headers(headers): def validate_headers(table_headers): """ - Given a bunch of headers, validate that they form a coherent set. This - function also adds the headers to a list as they are read from the file. + Given a bunch of headers, validate that they form a coherent set. + + This function also adds the headers to a list as they are read from the + file. Parameters ---------- - headers : iterator An iterator of headers. @@ -47,9 +48,8 @@ def validate_headers(table_headers): """ t = table_headers - """ - Let's do roughly the minimal amount of verification here. - """ + # Let's do roughly the minimal amount of verification here for construction + # of the WCS. Validation for inventory records is done independently. # For some keys all the values must be the same same_keys = ['NAXIS', 'DNAXIS'] @@ -110,7 +110,6 @@ def _inventory_from_wcs(wcs): Keys for wavelength will not be added if there is no spectral component, stokes keys are always added (defaulting to just I if not in the WCS). """ - bottom_left_array = [0] * wcs.pixel_n_dim top_right_array = np.array(wcs.pixel_shape) - 1 @@ -193,6 +192,8 @@ def _get_keys_matching(headers, pattern, singular_columns=True): for key in headers.colnames: if prog.match(key): results.append(_get_unique(headers[key], singular=singular_columns)) + if singular_columns: + return list(set(results)) return results @@ -207,15 +208,18 @@ def _inventory_from_headers(headers): inventory["instrument_name"] = _get_unique(headers['INSTRUME'], singular=True) inventory["observables"] = [] # _get_unique(headers['']) inventory["quality_average_fried_parameter"] = _get_number_apply(headers['FRIEDVAL'], np.mean) - inventory["quality_average_polarimetric_accuracy"] = _get_unique(headers[''], singular=True) + inventory["quality_average_polarimetric_accuracy"] = _get_unique(headers['POL_ACC'], singular=True) inventory["recipe_id"] = _get_unique(headers['RECIPEID'], singular=True) inventory["recipe_instance_id"] = _get_unique(headers['RINSTID'], singular=True) inventory["recipe_run_id"] = _get_unique(headers['RRUNID'], singular=True) inventory["target_type"] = _get_unique(headers['OBJECT']) - inventory["primary_experiment_id"] = _get_unique(headers['EXPER_ID'], singular=True) + inventory["primary_proposal_id"] = _get_unique(headers['PROPID'], singular=True) + inventory["primary_experiment_id"] = _get_unique(headers['EXPERID'], singular=True) inventory["dataset_size"] = _get_number_apply(headers['FRAMEVOL'], np.sum) - inventory["contributing_experiment_ids"] = _get_keys_matching(headers, r"EXPRID\d\d") - inventory["contributing_proposal_ids"] = _get_keys_matching(headers, r"PROPID\d\d") + inventory["contributing_experiment_ids"] = (_get_keys_matching(headers, r"EXPERID\d\d$") + + [_get_unique(headers["EXPERID"], singular=True)]) + inventory["contributing_proposal_ids"] = (_get_keys_matching(headers, r"PROPID\d\d$") + + [_get_unique(headers["PROPID"], singular=True)]) return inventory diff --git a/dkist/io/asdf/generator/tests/test_helpers.py b/dkist/io/asdf/generator/tests/test_helpers.py index db2689ee..b5057a05 100644 --- a/dkist/io/asdf/generator/tests/test_helpers.py +++ b/dkist/io/asdf/generator/tests/test_helpers.py @@ -3,8 +3,10 @@ import numpy as np import pytest +from astropy.table import Table + from dkist.io.asdf.generator.generator import references_from_filenames -from dkist.io.asdf.generator.helpers import headers_from_filenames +from dkist.io.asdf.generator.helpers import _inventory_from_headers, headers_from_filenames def test_references_from_filesnames_shape_error(header_filenames): @@ -25,3 +27,45 @@ def test_references_from_filenames(header_filenames): for ref in refs.fileuris: assert base not in ref + + +@pytest.fixture +def headers_inventory_214(): + """A minimal collection of headers to test inventory creation.""" # noqa + return Table({ + 'LINEWAV': [550, 550, 550], + 'FPA_EXPO': [10, 20, 30], + 'INSTRUME': ["VBI", "VBI", "VBI"], + 'FRIEDVAL': [1, 2, 3], + 'POL_ACC': [500, 500, 500], + 'RECIPEID': [10, 10, 10], + 'RINSTID': [20, 20, 20], + 'RRUNID': [30, 30, 30], + 'OBJECT': ["A", "B", "C"], + 'FRAMEVOL': [100, 120, 130], + 'EXPERID': ["00", "00", "00"], + 'EXPERID01': ["10", "10", "10"], + 'EXPERID02': ["20", "20", "20"], + 'PROPID': ["001", "001", "001"], + 'PROPID01': ["30", "30", "30"] + }) + + +def test_valid_inventory(headers_inventory_214): + inv = _inventory_from_headers(headers_inventory_214) + assert isinstance(inv, dict) + + assert inv["wavelength_min"] == inv["wavelength_max"] == 550 + assert inv["filter_wavelengths"] == [550] + assert inv["instrument_name"] == "VBI" + assert inv["observables"] == [] + assert inv["quality_average_fried_parameter"] == np.mean([1, 2, 3]) + assert inv["quality_average_polarimetric_accuracy"] == 500 + assert inv["recipe_id"] == 10 + assert inv["recipe_instance_id"] == 20 + assert inv["recipe_run_id"] == 30 + assert set(inv["target_type"]) == {"A", "B", "C"} + assert inv["primary_proposal_id"] == "001" + assert inv["primary_experiment_id"] == "00" + assert set(inv["contributing_experiment_ids"]) == {"10", "20", "00"} + assert set(inv["contributing_proposal_ids"]) == {"30", "001"} diff --git a/tox.ini b/tox.ini index e519653c..c6fd8e8f 100644 --- a/tox.ini +++ b/tox.ini @@ -10,7 +10,7 @@ setenv = PYTEST_COMMAND = pytest --cov=dkist --cov-config={toxinidir}/setup.cfg --verbose deps = git+https://github.com/Cadair/ndcube@wcsaxes_only_plotting - git+https://github.com/Cadair/sunpy@attrs_namespace_registration#egg=sunpy[all] + git+https://github.com/sunpy/sunpy#egg=sunpy[all] extras = tests commands = {env:PYTEST_COMMAND} {posargs} From 038b2cdc08d13d89794a54a6c77083518dfc8de0 Mon Sep 17 00:00:00 2001 From: Stuart Mumford Date: Wed, 25 Mar 2020 15:28:15 +0000 Subject: [PATCH 08/13] Cleanup some tests Fails now are related to incorrect test headers --- dkist/io/asdf/generator/generator.py | 4 +++- dkist/io/asdf/generator/tests/test_generator.py | 2 +- dkist/io/asdf/generator/transforms.py | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/dkist/io/asdf/generator/generator.py b/dkist/io/asdf/generator/generator.py index e1032c81..8eb9b671 100644 --- a/dkist/io/asdf/generator/generator.py +++ b/dkist/io/asdf/generator/generator.py @@ -122,6 +122,8 @@ def asdf_tree_from_filenames(filenames, headers=None, inventory=None, hdu=0, ds_wcs = TransformBuilder(sorted_headers).gwcs + if extra_inventory is None: + extra_inventory = {} inventory = extract_inventory(table_headers, ds_wcs, **extra_inventory) # Get the array shape @@ -170,7 +172,7 @@ def dataset_from_fits(path, asdf_filename, inventory=None, hdu=0, relative_to=No files = path.glob("*fits") - tree = asdf_tree_from_filenames(list(files), asdf_filename, inventory=inventory, + tree = asdf_tree_from_filenames(list(files), inventory=inventory, hdu=hdu, relative_to=relative_to) with resources.path("dkist.io", "level_1_dataset_schema.yaml") as schema_path: diff --git a/dkist/io/asdf/generator/tests/test_generator.py b/dkist/io/asdf/generator/tests/test_generator.py index 2896515f..5791866a 100644 --- a/dkist/io/asdf/generator/tests/test_generator.py +++ b/dkist/io/asdf/generator/tests/test_generator.py @@ -28,7 +28,7 @@ def test_array_container_shape(header_filenames): def test_asdf_tree(header_filenames): - tree = asdf_tree_from_filenames(header_filenames, "test_file.asdf") + tree = asdf_tree_from_filenames(header_filenames) assert isinstance(tree, dict) diff --git a/dkist/io/asdf/generator/transforms.py b/dkist/io/asdf/generator/transforms.py index b3eb0e17..b90b2080 100644 --- a/dkist/io/asdf/generator/transforms.py +++ b/dkist/io/asdf/generator/transforms.py @@ -70,7 +70,8 @@ def spatial_model_from_header(header): pc = np.matrix([[header[f'PC{lonind}_{lonind}'], header[f'PC{lonind}_{latind}']], [header[f'PC{latind}_{lonind}'], header[f'PC{latind}_{latind}']]]) * cunit1 - return spatial_model_from_quantity(crpix1, crpix2, cdelt1, cdelt2, pc, crval1, crval2, header['LONPOLE']*u.deg, + return spatial_model_from_quantity(crpix1, crpix2, cdelt1, cdelt2, pc, + crval1, crval2, header['LONPOLE'] * u.deg, projection=latproj) From eb00d8b7749deaf978ad458ffdad548e14984555 Mon Sep 17 00:00:00 2001 From: Stuart Mumford Date: Wed, 25 Mar 2020 15:37:54 +0000 Subject: [PATCH 09/13] Further cleanup --- dkist/io/asdf/generator/transforms.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dkist/io/asdf/generator/transforms.py b/dkist/io/asdf/generator/transforms.py index b90b2080..91d20f60 100644 --- a/dkist/io/asdf/generator/transforms.py +++ b/dkist/io/asdf/generator/transforms.py @@ -78,15 +78,15 @@ def spatial_model_from_header(header): @u.quantity_input def linear_spectral_model(spectral_width: u.nm, reference_val: u.nm): """ - A linear model in a spectral dimension. The reference pixel is always 0. + Linear model in a spectral dimension. The reference pixel is always 0. """ - return Linear1D(slope=spectral_width/(1*u.pix), intercept=reference_val) + return Linear1D(slope=spectral_width / (1 * u.pix), intercept=reference_val) @u.quantity_input def linear_time_model(cadence: u.s, reference_val: u.s = 0*u.s): """ - A linear model in a temporal dimension. The reference pixel is always 0. + Linear model in a temporal dimension. The reference pixel is always 0. """ if not reference_val: reference_val = 0 * cadence.unit From c30d8ca869975444f3794aca501a4fa8abd98301 Mon Sep 17 00:00:00 2001 From: Stuart Mumford Date: Wed, 25 Mar 2020 16:57:24 +0000 Subject: [PATCH 10/13] Further cleanup and test for inventory from gwcs --- dkist/conftest.py | 37 ++++++- dkist/dataset/dataset.py | 10 +- dkist/io/asdf/generator/helpers.py | 2 + dkist/io/asdf/generator/simulated_data.py | 97 ------------------- dkist/io/asdf/generator/tests/test_helpers.py | 11 ++- dkist/io/asdf/generator/transforms.py | 13 ++- 6 files changed, 61 insertions(+), 109 deletions(-) delete mode 100644 dkist/io/asdf/generator/simulated_data.py diff --git a/dkist/conftest.py b/dkist/conftest.py index 24b9865d..add06b07 100644 --- a/dkist/conftest.py +++ b/dkist/conftest.py @@ -12,6 +12,7 @@ from dkist.dataset import Dataset from dkist.io import AstropyFITSLoader, DaskFITSArrayContainer +from dkist.io.asdf.generator.transforms import generate_lookup_table @pytest.fixture @@ -66,21 +67,47 @@ def identity_gwcs_4d(): """ A simple 1-1 gwcs that converts from pixels to arcseconds """ - identity = (m.Multiply(1*u.arcsec/u.pixel) & m.Multiply(1*u.arcsec/u.pixel) & - m.Multiply(1*u.nm/u.pixel) & m.Multiply(1*u.nm/u.pixel)) + identity = (m.Multiply(1 * u.arcsec/u.pixel) & m.Multiply(1 * u.arcsec/u.pixel) & + m.Multiply(1 * u.nm/u.pixel) & m.Multiply(1 * u.s/u.pixel)) sky_frame = cf.CelestialFrame(axes_order=(0, 1), name='helioprojective', reference_frame=Helioprojective(obstime="2018-01-01")) wave_frame = cf.SpectralFrame(axes_order=(2, ), unit=u.nm) - time_frame = cf.TemporalFrame(Time([], format="isot", scale="utc"), axes_order=(3, ), unit=u.s) + time_frame = cf.TemporalFrame(Time("2020-01-01T00:00", format="isot", scale="utc"), axes_order=(3, ), unit=u.s) frame = cf.CompositeFrame([sky_frame, wave_frame, time_frame]) detector_frame = cf.CoordinateFrame(name="detector", naxes=4, axes_order=(0, 1, 2, 3), axes_type=("pixel", "pixel", "pixel", "pixel"), - axes_names=("x", "y", "z", "s"), unit=(u.pix, u.pix, u.pix, u.pix)) + axes_names=("x", "y", "z", "s"), + unit=(u.pix, u.pix, u.pix, u.pix)) - return gwcs.wcs.WCS(forward_transform=identity, output_frame=frame, input_frame=detector_frame) + wcs = gwcs.wcs.WCS(forward_transform=identity, output_frame=frame, input_frame=detector_frame) + wcs.pixel_shape = (10, 20, 30, 40) + wcs.array_shape = wcs.pixel_shape[::-1] + + return wcs + + +@pytest.fixture +def identity_gwcs_5d_stokes(identity_gwcs_4d): + stokes_frame = cf.StokesFrame(axes_order=(4,)) + stokes_model = generate_lookup_table([0, 1, 2, 3] * u.one, interpolation='nearest') + transform = identity_gwcs_4d.forward_transform + frame = cf.CompositeFrame(identity_gwcs_4d.output_frame.frames + [stokes_frame]) + + detector_frame = cf.CoordinateFrame(name="detector", naxes=5, + axes_order=(0, 1, 2, 3, 4), + axes_type=("pixel", "pixel", "pixel", "pixel", "pixel"), + axes_names=("x", "y", "z", "t", "s"), + unit=(u.pix, u.pix, u.pix, u.pix, u.pix)) + + wcs = gwcs.wcs.WCS(forward_transform=transform & stokes_model, output_frame=frame, + input_frame=detector_frame) + wcs.pixel_shape = (10, 20, 30, 40, 4) + wcs.array_shape = wcs.pixel_shape[::-1] + + return wcs @pytest.fixture diff --git a/dkist/dataset/dataset.py b/dkist/dataset/dataset.py index 894edf48..24d403db 100644 --- a/dkist/dataset/dataset.py +++ b/dkist/dataset/dataset.py @@ -80,8 +80,14 @@ def __init__(self, data, wcs, uncertainty=None, mask=None, meta=None, if isinstance(wcs, gwcs.WCS): # Set the array shape to be that of the data. - wcs.array_shape = data.shape - wcs.pixel_shape = data.shape[::-1] + if wcs.array_shape is None: + wcs.array_shape = data.shape + if wcs.pixel_shape is None: + wcs.pixel_shape = data.shape[::-1] + + if (wcs.pixel_shape != data.shape[::-1] or wcs.array_shape != data.shape): + raise ValueError("The pixel and array shape on the WCS object " + "do not match the given array.") if headers is not None and not isinstance(headers, astropy.table.Table): raise ValueError("The headers keyword argument must be an Astropy Table instance.") diff --git a/dkist/io/asdf/generator/helpers.py b/dkist/io/asdf/generator/helpers.py index 1e5b48b5..59be6e44 100644 --- a/dkist/io/asdf/generator/helpers.py +++ b/dkist/io/asdf/generator/helpers.py @@ -202,7 +202,9 @@ def _inventory_from_headers(headers): mode = partial(scipy.stats.mode, axis=None, nan_policy="raise") + # These keys might get updated by parsing the gwcs object. inventory["wavelength_min"] = inventory["wavelength_max"] = _get_unique(headers['LINEWAV'])[0] + inventory["exposure_time"] = _get_number_apply(headers['FPA_EXPO'], mode) inventory["filter_wavelengths"] = _get_unique(headers['LINEWAV']) inventory["instrument_name"] = _get_unique(headers['INSTRUME'], singular=True) diff --git a/dkist/io/asdf/generator/simulated_data.py b/dkist/io/asdf/generator/simulated_data.py deleted file mode 100644 index d686f41c..00000000 --- a/dkist/io/asdf/generator/simulated_data.py +++ /dev/null @@ -1,97 +0,0 @@ -""" -Functions and helpers relating to working with simulated data. -""" -import random -import string - -from astropy.time import Time -from sunpy.time import parse_time - -__all__ = ['generate_datset_inventory_from_headers'] - - -def _gen_type(gen_type, max_int=1e6, max_float=1e6, len_str=30): - if gen_type is bool: - return bool(random.randint(0, 1)) - elif gen_type is int: - return random.randint(0, max_int) - elif gen_type is float: - return random.random() * max_float - elif gen_type is list: - return [_gen_type(str)] - elif gen_type is Time: - return parse_time("now") - elif gen_type is str: - return ''.join( - random.choice(string.ascii_uppercase + string.digits) for _ in range(len_str)) - else: - raise ValueError("Type {} is not supported".format(gen_type)) # pragma: no cover - - -def generate_datset_inventory_from_headers(headers): - """ - Generate a dummy dataset inventory from headers. - - .. note:: - This is just for test data, it should not be used on real data. - - Parameters - ---------- - - headers: `astropy.table.Table` - asdf_name: `str` - - """ - schema = [ - ('asdf_object_key', str), - ('browse_movie_object_key', str), - ('browse_movie_url', str), - ('bucket', str), - ('contributing_experiment_ids', list), - ('contributing_proposal_ids', list), - ('dataset_id', str), - ('dataset_inventory_id', int), - ('dataset_size', int), - ('end_time', Time), - ('exposure_time', float), - ('filter_wavelengths', list), - ('frame_count', int), - ('has_all_stokes', bool), - ('instrument_name', str), - ('observables', list), - ('original_frame_count', int), - ('primary_experiment_id', str), - ('primary_proposal_id', str), - ('quality_average_fried_parameter', float), - ('quality_average_polarimetric_accuracy', float), - ('recipe_id', int), - ('recipe_instance_id', int), - ('recipe_run_id', int), - ('start_time', Time), - # ('stokes_parameters', str), - ('target_type', str), - ('wavelength_max', float), - ('wavelength_min', float) - ] - - header_mapping = { - 'start_time': 'DATE-BGN', - 'end_time': 'DATE-END', - 'filter_wavelengths': 'WAVELNGTH'} - - constants = { - 'frame_count': len(headers), - 'bucket': 'data', - } - - output = {} - - for key, ktype in schema: - if key in header_mapping: - hdict = dict(zip(headers.colnames, headers[0])) - output[key] = ktype(hdict.get(header_mapping[key], _gen_type(ktype))) - else: - output[key] = _gen_type(ktype) - - output.update(constants) - return output diff --git a/dkist/io/asdf/generator/tests/test_helpers.py b/dkist/io/asdf/generator/tests/test_helpers.py index b5057a05..8c22ebef 100644 --- a/dkist/io/asdf/generator/tests/test_helpers.py +++ b/dkist/io/asdf/generator/tests/test_helpers.py @@ -6,7 +6,8 @@ from astropy.table import Table from dkist.io.asdf.generator.generator import references_from_filenames -from dkist.io.asdf.generator.helpers import _inventory_from_headers, headers_from_filenames +from dkist.io.asdf.generator.helpers import (_inventory_from_headers, + _inventory_from_wcs, headers_from_filenames) def test_references_from_filesnames_shape_error(header_filenames): @@ -69,3 +70,11 @@ def test_valid_inventory(headers_inventory_214): assert inv["primary_experiment_id"] == "00" assert set(inv["contributing_experiment_ids"]) == {"10", "20", "00"} assert set(inv["contributing_proposal_ids"]) == {"30", "001"} + + +def test_inventory_from_wcs(identity_gwcs_4d): + inv = _inventory_from_wcs(identity_gwcs_4d) + + +def test_inventory_from_wcs_stokes(identity_gwcs_5d_stokes): + inv = _inventory_from_wcs(identity_gwcs_5d_stokes) diff --git a/dkist/io/asdf/generator/transforms.py b/dkist/io/asdf/generator/transforms.py index 91d20f60..8324ee53 100644 --- a/dkist/io/asdf/generator/transforms.py +++ b/dkist/io/asdf/generator/transforms.py @@ -172,6 +172,7 @@ def __init__(self, headers): for i in range(arr_headers.size): arr_headers.flat[i] = headers[i] + self.pixel_shape = shape self.headers = arr_headers self.reset() self._build() @@ -191,13 +192,17 @@ def pixel_frame(self): @property def gwcs(self): """ - A `gwcs.WCS` object representing these headers. + `gwcs.WCS` object representing these headers. """ world_frame = cf.CompositeFrame(self.frames) - return gwcs.WCS(forward_transform=self.transform, - input_frame=self.pixel_frame, - output_frame=world_frame) + out_wcs = gwcs.WCS(forward_transform=self.transform, + input_frame=self.pixel_frame, + output_frame=world_frame) + out_wcs.pixel_shape = self.pixel_shape + out_wcs.array_shape = self.pixel_shape[::-1] + + return out_wcs @property def frames(self): From 047883061863f265512e4cf97501d41070d915c2 Mon Sep 17 00:00:00 2001 From: Stuart Mumford Date: Thu, 26 Mar 2020 12:22:17 +0000 Subject: [PATCH 11/13] Even more inventory generation tests --- dkist/conftest.py | 40 ++++++- dkist/io/asdf/generator/helpers.py | 20 ++-- dkist/io/asdf/generator/tests/test_helpers.py | 113 +++++++++++++++++- 3 files changed, 157 insertions(+), 16 deletions(-) diff --git a/dkist/conftest.py b/dkist/conftest.py index add06b07..0ea551e0 100644 --- a/dkist/conftest.py +++ b/dkist/conftest.py @@ -35,7 +35,10 @@ def identity_gwcs(): axes_type=("pixel", "pixel"), axes_names=("x", "y"), unit=(u.pix, u.pix)) - return gwcs.wcs.WCS(forward_transform=identity, output_frame=sky_frame, input_frame=detector_frame) + wcs = gwcs.wcs.WCS(forward_transform=identity, output_frame=sky_frame, input_frame=detector_frame) + wcs.pixel_shape = (10, 20) + wcs.array_shape = wcs.pixel_shape[::-1] + return wcs @pytest.fixture @@ -59,7 +62,38 @@ def identity_gwcs_3d(): axes_type=("pixel", "pixel", "pixel"), axes_names=("x", "y", "z"), unit=(u.pix, u.pix, u.pix)) - return gwcs.wcs.WCS(forward_transform=identity, output_frame=frame, input_frame=detector_frame) + wcs = gwcs.wcs.WCS(forward_transform=identity, output_frame=frame, input_frame=detector_frame) + wcs.pixel_shape = (10, 20, 30) + wcs.array_shape = wcs.pixel_shape[::-1] + + return wcs + + +@pytest.fixture +def identity_gwcs_3d_temporal(): + """ + A simple 1-1 gwcs that converts from pixels to arcseconds + """ + identity = (m.Multiply(1 * u.arcsec / u.pixel) & + m.Multiply(1 * u.arcsec / u.pixel) & + m.Multiply(1 * u.s / u.pixel)) + + sky_frame = cf.CelestialFrame(axes_order=(0, 1), name='helioprojective', + reference_frame=Helioprojective(obstime="2018-01-01"), + axes_names=("longitude", "latitude")) + time_frame = cf.TemporalFrame(Time("2020-01-01T00:00", format="isot", scale="utc"), + axes_order=(2,), unit=u.s) + + frame = cf.CompositeFrame([sky_frame, time_frame]) + + detector_frame = cf.CoordinateFrame(name="detector", naxes=3, + axes_order=(0, 1, 2), + axes_type=("pixel", "pixel", "pixel"), + axes_names=("x", "y", "z"), unit=(u.pix, u.pix, u.pix)) + wcs = gwcs.wcs.WCS(forward_transform=identity, output_frame=frame, input_frame=detector_frame) + wcs.pixel_shape = (10, 20, 30) + wcs.array_shape = wcs.pixel_shape[::-1] + return wcs @pytest.fixture @@ -121,7 +155,7 @@ def dataset(array, identity_gwcs): assert ds.wcs is identity_gwcs ds._array_container = DaskFITSArrayContainer(['test1.fits'], 0, 'float', array.shape, - loader=AstropyFITSLoader) + loader=AstropyFITSLoader) return ds diff --git a/dkist/io/asdf/generator/helpers.py b/dkist/io/asdf/generator/helpers.py index 59be6e44..c45a5d4c 100644 --- a/dkist/io/asdf/generator/helpers.py +++ b/dkist/io/asdf/generator/helpers.py @@ -123,14 +123,14 @@ def _inventory_from_wcs(wcs): top_right_celestial = list(filter(lambda x: isinstance(x, SkyCoord), top_right_world))[0] bounding_box = ((bottom_left_celestial.Tx.to_value(u.arcsec), bottom_left_celestial.Ty.to_value(u.arcsec)), - (top_right_celestial.Tx.to_value(u.arcsec), top_right_celestial.Tx.to_value(u.arcsec))) + (top_right_celestial.Tx.to_value(u.arcsec), top_right_celestial.Ty.to_value(u.arcsec))) inventory = {'bounding_box': bounding_box, 'start_time': start_time.isot, 'end_time': end_time.isot} if not isinstance(wcs.output_frame, cf.CompositeFrame): - raise TypeError("Can't parse this WCS as expected.") + raise TypeError("Can't parse this WCS as expected.") # pragma: no cover spec_frame = list(filter(lambda f: isinstance(f, cf.SpectralFrame), wcs.output_frame.frames)) if spec_frame: @@ -171,10 +171,12 @@ def _get_number_apply(column, func): return func(column) -def _get_keys_matching(headers, pattern, singular_columns=True): +def _get_keys_matching(headers, pattern): """ Get all the values from all the keys matching the given re pattern. + Assumes that each matching column is singular (all values are the same) + Parameters ---------- headers : `astropy.table.Table` @@ -182,19 +184,14 @@ def _get_keys_matching(headers, pattern, singular_columns=True): pattern : `str` A regex pattern - - singular_columns : `bool` - Validate that all the values in a matching column are the same. """ results = [] prog = re.compile(pattern) for key in headers.colnames: if prog.match(key): - results.append(_get_unique(headers[key], singular=singular_columns)) - if singular_columns: - return list(set(results)) - return results + results.append(_get_unique(headers[key], singular=True)) + return list(set(results)) def _inventory_from_headers(headers): @@ -210,7 +207,8 @@ def _inventory_from_headers(headers): inventory["instrument_name"] = _get_unique(headers['INSTRUME'], singular=True) inventory["observables"] = [] # _get_unique(headers['']) inventory["quality_average_fried_parameter"] = _get_number_apply(headers['FRIEDVAL'], np.mean) - inventory["quality_average_polarimetric_accuracy"] = _get_unique(headers['POL_ACC'], singular=True) + inventory["quality_average_polarimetric_accuracy"] = _get_unique(headers['POL_ACC'], + singular=True) inventory["recipe_id"] = _get_unique(headers['RECIPEID'], singular=True) inventory["recipe_instance_id"] = _get_unique(headers['RINSTID'], singular=True) inventory["recipe_run_id"] = _get_unique(headers['RRUNID'], singular=True) diff --git a/dkist/io/asdf/generator/tests/test_helpers.py b/dkist/io/asdf/generator/tests/test_helpers.py index 8c22ebef..0ed4d9ec 100644 --- a/dkist/io/asdf/generator/tests/test_helpers.py +++ b/dkist/io/asdf/generator/tests/test_helpers.py @@ -3,11 +3,14 @@ import numpy as np import pytest +import astropy.units as u +import gwcs.coordinate_frames as cf from astropy.table import Table from dkist.io.asdf.generator.generator import references_from_filenames -from dkist.io.asdf.generator.helpers import (_inventory_from_headers, - _inventory_from_wcs, headers_from_filenames) +from dkist.io.asdf.generator.helpers import (_get_unique, _inventory_from_headers, + _inventory_from_wcs, extract_inventory, + headers_from_filenames) def test_references_from_filesnames_shape_error(header_filenames): @@ -74,7 +77,113 @@ def test_valid_inventory(headers_inventory_214): def test_inventory_from_wcs(identity_gwcs_4d): inv = _inventory_from_wcs(identity_gwcs_4d) + time_frame = list(filter(lambda x: isinstance(x, cf.TemporalFrame), + identity_gwcs_4d.output_frame.frames))[0] + shape = identity_gwcs_4d.array_shape + + # This test transform is just 0 - n_pixel in all dimensions + assert inv["wavelength_min"] == 0 + assert inv["wavelength_max"] == shape[2] - 1 + assert inv["bounding_box"] == ((0, 0), (shape[0] - 1, shape[1] - 1)) + assert inv["start_time"] == time_frame.reference_frame.isot + assert inv["end_time"] == (time_frame.reference_frame + (shape[3] - 1) * u.s).isot + assert inv["stokes_parameters"] == ["I"] + assert inv["has_all_stokes"] is False def test_inventory_from_wcs_stokes(identity_gwcs_5d_stokes): inv = _inventory_from_wcs(identity_gwcs_5d_stokes) + time_frame = list(filter(lambda x: isinstance(x, cf.TemporalFrame), + identity_gwcs_5d_stokes.output_frame.frames))[0] + shape = identity_gwcs_5d_stokes.array_shape + + # This test transform is just 0 - n_pixel in all dimensions + assert inv["wavelength_min"] == 0 + assert inv["wavelength_max"] == shape[2] - 1 + assert inv["bounding_box"] == ((0, 0), (shape[0] - 1, shape[1] - 1)) + assert inv["start_time"] == time_frame.reference_frame.isot + assert inv["end_time"] == (time_frame.reference_frame + (shape[3] - 1) * u.s).isot + assert inv["stokes_parameters"] == ["I", "Q", "U", "V"] + assert inv["has_all_stokes"] is True + + +def test_inventory_from_wcs_2d(identity_gwcs_3d_temporal): + inv = _inventory_from_wcs(identity_gwcs_3d_temporal) + time_frame = list(filter(lambda x: isinstance(x, cf.TemporalFrame), + identity_gwcs_3d_temporal.output_frame.frames))[0] + shape = identity_gwcs_3d_temporal.array_shape + + # This test transform is just 0 - n_pixel in all dimensions + assert "wavelength_min" not in inv + assert "wavelength_max" not in inv + assert inv["bounding_box"] == ((0, 0), (shape[0] - 1, shape[1] - 1)) + assert inv["start_time"] == time_frame.reference_frame.isot + assert inv["end_time"] == (time_frame.reference_frame + (shape[2] - 1) * u.s).isot + assert inv["stokes_parameters"] == ["I"] + assert inv["has_all_stokes"] is False + + +def test_unique_error(): + with pytest.raises(ValueError): + _get_unique([1, 2, 3], singular=True) + + assert _get_unique([1, 2, 3], singular=False) + + +def test_extract_inventory(headers_inventory_214, identity_gwcs_4d): + inv = extract_inventory(headers_inventory_214, identity_gwcs_4d) + + time_frame = list(filter(lambda x: isinstance(x, cf.TemporalFrame), + identity_gwcs_4d.output_frame.frames))[0] + shape = identity_gwcs_4d.array_shape + + # This test transform is just 0 - n_pixel in all dimensions + assert inv["wavelength_min"] == 0 + assert inv["wavelength_max"] == shape[2] - 1 + assert inv["bounding_box"] == ((0, 0), (shape[0] - 1, shape[1] - 1)) + assert inv["start_time"] == time_frame.reference_frame.isot + assert inv["end_time"] == (time_frame.reference_frame + (shape[3] - 1) * u.s).isot + assert inv["stokes_parameters"] == ["I"] + assert inv["has_all_stokes"] is False + assert inv["filter_wavelengths"] == [550] + assert inv["instrument_name"] == "VBI" + assert inv["observables"] == [] + assert inv["quality_average_fried_parameter"] == np.mean([1, 2, 3]) + assert inv["quality_average_polarimetric_accuracy"] == 500 + assert inv["recipe_id"] == 10 + assert inv["recipe_instance_id"] == 20 + assert inv["recipe_run_id"] == 30 + assert set(inv["target_type"]) == {"A", "B", "C"} + assert inv["primary_proposal_id"] == "001" + assert inv["primary_experiment_id"] == "00" + assert set(inv["contributing_experiment_ids"]) == {"10", "20", "00"} + assert set(inv["contributing_proposal_ids"]) == {"30", "001"} + + +def test_extract_inventory_no_wave(headers_inventory_214, identity_gwcs_3d_temporal): + inv = extract_inventory(headers_inventory_214, identity_gwcs_3d_temporal) + + time_frame = list(filter(lambda x: isinstance(x, cf.TemporalFrame), + identity_gwcs_3d_temporal.output_frame.frames))[0] + shape = identity_gwcs_3d_temporal.array_shape + + # This test transform is just 0 - n_pixel in all dimensions + assert inv["bounding_box"] == ((0, 0), (shape[0] - 1, shape[1] - 1)) + assert inv["wavelength_min"] == inv["wavelength_max"] == 550 + assert inv["start_time"] == time_frame.reference_frame.isot + assert inv["end_time"] == (time_frame.reference_frame + (shape[2] - 1) * u.s).isot + assert inv["stokes_parameters"] == ["I"] + assert inv["has_all_stokes"] is False + assert inv["filter_wavelengths"] == [550] + assert inv["instrument_name"] == "VBI" + assert inv["observables"] == [] + assert inv["quality_average_fried_parameter"] == np.mean([1, 2, 3]) + assert inv["quality_average_polarimetric_accuracy"] == 500 + assert inv["recipe_id"] == 10 + assert inv["recipe_instance_id"] == 20 + assert inv["recipe_run_id"] == 30 + assert set(inv["target_type"]) == {"A", "B", "C"} + assert inv["primary_proposal_id"] == "001" + assert inv["primary_experiment_id"] == "00" + assert set(inv["contributing_experiment_ids"]) == {"10", "20", "00"} + assert set(inv["contributing_proposal_ids"]) == {"30", "001"} From 9dbb52435c4fc9d30774d5619b0e8b166eabc334 Mon Sep 17 00:00:00 2001 From: Stuart Mumford Date: Thu, 26 Mar 2020 15:56:14 +0000 Subject: [PATCH 12/13] Regenerate test data and update tests for inventory changes --- dkist/conftest.py | 21 ++++- dkist/data/test/datasettestfiles/visp.zip | Bin 232542 -> 232542 bytes dkist/data/test/datasettestfiles/vtf.zip | Bin 839446 -> 1115926 bytes dkist/io/asdf/generator/helpers.py | 72 ++++++++++-------- dkist/io/asdf/generator/tests/test_helpers.py | 20 ++--- .../asdf/generator/tests/test_transforms.py | 2 +- dkist/io/asdf/generator/transforms.py | 15 +++- .../dkist.nso.edu/dkist/dataset-0.1.0.yaml | 14 ++-- 8 files changed, 89 insertions(+), 55 deletions(-) diff --git a/dkist/conftest.py b/dkist/conftest.py index 0ea551e0..03b0d96b 100644 --- a/dkist/conftest.py +++ b/dkist/conftest.py @@ -29,7 +29,8 @@ def identity_gwcs(): """ identity = m.Multiply(1*u.arcsec/u.pixel) & m.Multiply(1*u.arcsec/u.pixel) sky_frame = cf.CelestialFrame(axes_order=(0, 1), name='helioprojective', - reference_frame=Helioprojective(obstime="2018-01-01")) + reference_frame=Helioprojective(obstime="2018-01-01"), + unit=(u.arcsec, u.arcsec)) detector_frame = cf.CoordinateFrame(name="detector", naxes=2, axes_order=(0, 1), axes_type=("pixel", "pixel"), @@ -52,7 +53,8 @@ def identity_gwcs_3d(): sky_frame = cf.CelestialFrame(axes_order=(0, 1), name='helioprojective', reference_frame=Helioprojective(obstime="2018-01-01"), - axes_names=("longitude", "latitude")) + axes_names=("longitude", "latitude"), + unit=(u.arcsec, u.arcsec)) wave_frame = cf.SpectralFrame(axes_order=(2, ), unit=u.nm, axes_names=("wavelength",)) frame = cf.CompositeFrame([sky_frame, wave_frame]) @@ -80,7 +82,8 @@ def identity_gwcs_3d_temporal(): sky_frame = cf.CelestialFrame(axes_order=(0, 1), name='helioprojective', reference_frame=Helioprojective(obstime="2018-01-01"), - axes_names=("longitude", "latitude")) + axes_names=("longitude", "latitude"), + unit=(u.arcsec, u.arcsec)) time_frame = cf.TemporalFrame(Time("2020-01-01T00:00", format="isot", scale="utc"), axes_order=(2,), unit=u.s) @@ -104,7 +107,8 @@ def identity_gwcs_4d(): identity = (m.Multiply(1 * u.arcsec/u.pixel) & m.Multiply(1 * u.arcsec/u.pixel) & m.Multiply(1 * u.nm/u.pixel) & m.Multiply(1 * u.s/u.pixel)) sky_frame = cf.CelestialFrame(axes_order=(0, 1), name='helioprojective', - reference_frame=Helioprojective(obstime="2018-01-01")) + reference_frame=Helioprojective(obstime="2018-01-01"), + unit=(u.arcsec, u.arcsec)) wave_frame = cf.SpectralFrame(axes_order=(2, ), unit=u.nm) time_frame = cf.TemporalFrame(Time("2020-01-01T00:00", format="isot", scale="utc"), axes_order=(3, ), unit=u.s) @@ -149,6 +153,9 @@ def dataset(array, identity_gwcs): meta = {'bucket': 'data', 'dataset_id': 'test_dataset', 'asdf_object_key': 'test_dataset.asdf'} + + identity_gwcs.array_shape = array.shape + identity_gwcs.pixel_shape = array.shape[::-1] ds = Dataset(array, wcs=identity_gwcs, meta=meta, headers=Table()) # Sanity checks assert ds.data is array @@ -166,6 +173,9 @@ def dataset_3d(identity_gwcs_3d): x = np.ones(shape) array = da.from_array(x, tuple(shape)) + identity_gwcs_3d.pixel_shape = array.shape[::-1] + identity_gwcs_3d.array_shape = array.shape + return Dataset(array, wcs=identity_gwcs_3d) @@ -175,4 +185,7 @@ def dataset_4d(identity_gwcs_4d): x = np.ones(shape) array = da.from_array(x, tuple(shape)) + identity_gwcs_4d.pixel_shape = array.shape[::-1] + identity_gwcs_4d.array_shape = array.shape + return Dataset(array, wcs=identity_gwcs_4d) diff --git a/dkist/data/test/datasettestfiles/visp.zip b/dkist/data/test/datasettestfiles/visp.zip index ad1aee1dc86aa0e852c10b93453f1ea9eae9e15a..1fa763001dc171243a79f954fd4a8b17a9ff5465 100644 GIT binary patch literal 232542 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 aSm)5g{^lw9g=fV7L=1WCpWb*v)czkrOK5ih diff --git a/dkist/data/test/datasettestfiles/vtf.zip b/dkist/data/test/datasettestfiles/vtf.zip index 915708f9d8b4f2411ca36cf55e6de95f0fde6e96..d25ec16952d552beaaf5221d415998f9591f98c0 100644 GIT binary patch literal 1115926 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

lSm!2d^+R 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 Date: Thu, 26 Mar 2020 16:14:03 +0000 Subject: [PATCH 13/13] Add a changelog --- changelog/76.feature.rst | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 changelog/76.feature.rst diff --git a/changelog/76.feature.rst b/changelog/76.feature.rst new file mode 100644 index 00000000..b19f3633 --- /dev/null +++ b/changelog/76.feature.rst @@ -0,0 +1,2 @@ +Implement correct extraction of dataset inventory from headers and gwcs. Also +updates some data to be closer to the in progress outgoing header spec (214)