Astropy / Xarray WCS coordinates and index¶

Playing around with Astropy to create fully lazy world coordinates (dask arrays) and index.

Note: this only works with Xarray version 2022.11.0 and above.

Based on https://nbviewer.org/gist/ianthomas23/bbf85d1a38f8f161a2c1f641d9465096 (author: Ian Thomas)

(author: Benoît Bovy https://github.com/benbovy)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
from astropy.wcs import WCS
import colorcet as cc
import pandas as pd
import dask
import dask.array as daskarray
import datashader
import hvplot.xarray
import intake
import numpy as np
import warnings
import xarray as xr
1
2
3
#from distributed import Client

#client = Client()
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# workaround for unsupported dask map_blocks with multi-output function
# see https://github.com/dask/dask/issues/9510
# the trick here is to define a function wrapper with numpy array record dtype.

pixel_to_world_result_dtype = [('x', np.double), ('y', np.double)]


def pixel_to_world_wrapper(wcs_method, x_pixel, y_pixel):
    """Convert pixel to world coordinate values.
    
    Pack results as a unique numpy (record) array, so that it
    can be used with dask array's map_blocks().

    """
    x_world, y_world = wcs_method(x_pixel, y_pixel)
    
    result = np.empty(x_world.size, dtype=pixel_to_world_result_dtype)
    result['x'] = x_world
    result['y'] = y_world

    return result

Dataset accessor to add pixel and world coordinates.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
@xr.register_dataset_accessor("wcs")
class WCSAccessor:
    def __init__(self, xarray_obj):
        self._obj = xarray_obj
        self._wcs = WCS(self._get_wcs_attrs())

    def _get_wcs_attrs(self):
        attrs = self._obj.attrs.copy()
        attrs.pop("COMMENT", None)  # Error about non-ASCII characters if don't do this.
        return attrs
    
    def add_pixel_coords(self, x_dim, y_dim):
        coords = {}

        for dim in (x_dim, y_dim):
            if dim not in self._obj.dims:
                raise KeyError(f"Dataset has no dimension {dim!r}")
            coords[dim] = np.arange(self._obj.dims[dim])
        
        return self._obj.assign_coords(coords)
    
    def add_world_coords(self, x_dim, y_dim):
        # Return new xr.Dataset with world coordinates (two x,y coordinates and one
        # scalar coordinate that hold WCS parameters).
        # full lazy version
        nx = self._obj.dims[x_dim]
        ny = self._obj.dims[y_dim]
        x_pixel, y_pixel = daskarray.meshgrid(np.arange(nx), np.arange(ny))
        
        result = daskarray.map_blocks(
            pixel_to_world_wrapper,
            self._wcs.pixel_to_world_values,
            x_pixel.ravel(),
            y_pixel.ravel(),
            dtype=pixel_to_world_result_dtype,
        )
        
        x_wcs = result["x"].reshape((ny, nx))
        x_wcs = np.where(x_wcs > 180, x_wcs-360, x_wcs)
        y_wcs = result["y"].reshape((ny, nx))
        
        dims_wcs = ("y", "x")
        return self._obj.assign_coords(
            y_wcs=(dims_wcs, y_wcs),
            x_wcs=(dims_wcs, x_wcs),
            ref_wcs=((), 0, self._get_wcs_attrs())
        )

A basic Xarray-compatible index for data selection based on world coordinates.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
from xarray.indexes import Index
from xarray.core.indexes import IndexSelResult


class WCSIndex(Index):
    
    def __init__(self, xy_names, xy_dims, wcs):
        self._xy_names = xy_names
        self._xy_dims = xy_dims
        
        if isinstance(wcs, WCS):
            self._wcs = wcs
        else:
            self._wcs = WCS(wcs)
        
    @property
    def wcs(self):
        return self._wcs
    
    @classmethod
    def from_variables(cls, variables, *, options):
        if len(variables) != 3:
            raise ValueError("WCSIndex needs 3 coordinates (x, y, wcs_ref)")
        
        # assume first two variables are WCS coords
        # and last variable holds WCS parameters
        vnames = list(variables)
        xy_vnames = vnames[0:2]
        wcs_vname = vnames[-1]
        
        dims = variables[xy_vnames[0]].dims
        if variables[xy_vnames[1]].dims != dims:
            raise ValueError("x and y coordinates must have the same dimensions")
        
        return cls(xy_vnames, dims, variables[wcs_vname].attrs)
    
    def create_variables(self, variables):
        # explicitly return empty dict so that index coordinates
        # are treated as regular coordinates
        return {}
    
    def to_pandas_index(self):
        # hack to make it work with hvplot
        # (note: hvplot should use the `.xindexes` property instead
        #  of `.indexes` for checking dimensions, etc.)
        return pd.Index([])
    
    def isel(self, indexers):
        # just copy the index for now
        # TODO: check if x and/or y dimension is reduced to a scalar
        return type(self)(self._xy_names, self._xy_dims, self._wcs)
    
    def sel(self, labels, method=None, tolerance=None):
        # Very very basic!!
        
        if method != "nearest":
            raise ValueError("WCSIndex only supports selection with method='nearest'")
        
        # need input labels for both x and y world coordinates
        xname, yname = self._xy_names
        if not (xname in labels and yname in labels):
            raise ValueError("Selection using a WCSIndex requires both x and y labels")
        
        # Only supports Xarray advanced (point-wise) indexing 
        # with xarray objects (not sure how to support
        # orthogonal indexing)
        is_xr_obj = [
            isinstance(label, (xr.DataArray, xr.Variable)) for label in labels.values()
        ]
        if not all(is_xr_obj):
            raise TypeError("WCSIndex only supports advanced (point-wise) indexing")
        
        x_idx, y_idx = self.wcs.world_to_array_index_values(
            labels[xname].values, labels[yname].values
        )
        x_dim, y_dim = self._xy_dims
        
        results = {}
        seq = [(x_dim, labels[xname], x_idx), (y_dim, labels[yname], y_idx)]
        for dim, label, idx in seq:
            if isinstance(label, xr.Variable):
                idx = xr.Variable(label.dims, idx)
            else:
                # dataarray
                idx = xr.DataArray(idx, dims=label.dims)
            results[dim] = idx
        
        return IndexSelResult(results)
        

Load example dataset (lazy).

1
2
3
4
cat = intake.open_catalog("https://github.com/fsspec/kerchunk/raw/main/examples/intake_catalog.yml")
with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    dataset = cat.SDO.to_dask()

Add pixel and world coordinates. Set WCSIndex for world coordinates.

1
2
3
4
5
6
7
8
dataset = (
    dataset
    .wcs.add_pixel_coords("x", "y")
    .wcs.add_world_coords("x", "y")
    .set_xindex(["x_wcs", "y_wcs", "ref_wcs"], WCSIndex)
)

dataset
<xarray.Dataset>
Dimensions:   (DATE-OBS: 1800, y: 4096, x: 4096)
Coordinates:
  * DATE-OBS  (DATE-OBS) datetime64[us] 2012-09-23T00:00:01 ... 2012-09-23T05...
  * x         (x) int64 0 1 2 3 4 5 6 7 ... 4089 4090 4091 4092 4093 4094 4095
  * y         (y) int64 0 1 2 3 4 5 6 7 ... 4089 4090 4091 4092 4093 4094 4095
  * x_wcs     (y, x) float64 dask.array<chunksize=(4096, 4096), meta=np.ndarray>
  * y_wcs     (y, x) float64 dask.array<chunksize=(4096, 4096), meta=np.ndarray>
  * ref_wcs   int64 0
Data variables:
    094       (DATE-OBS, y, x) int16 dask.array<chunksize=(1, 4096, 4096), meta=np.ndarray>
    131       (DATE-OBS, y, x) int16 dask.array<chunksize=(1, 4096, 4096), meta=np.ndarray>
    171       (DATE-OBS, y, x) int16 dask.array<chunksize=(1, 4096, 4096), meta=np.ndarray>
    193       (DATE-OBS, y, x) int16 dask.array<chunksize=(1, 4096, 4096), meta=np.ndarray>
    211       (DATE-OBS, y, x) int16 dask.array<chunksize=(1, 4096, 4096), meta=np.ndarray>
    304       (DATE-OBS, y, x) int16 dask.array<chunksize=(1, 4096, 4096), meta=np.ndarray>
    334       (DATE-OBS, y, x) int16 dask.array<chunksize=(1, 4096, 4096), meta=np.ndarray>
Indexes:
    x_wcs     WCSIndex
    y_wcs     WCSIndex
    ref_wcs   WCSIndex
Attributes: (12/185)
    ACS_CGT:   GT3
    ACS_ECLP:  NO
    ACS_MODE:  SCIENCE
    ACS_SAFE:  NO
    ACS_SUNP:  YES
    AECDELAY:  1535
    ...        ...
    T_OBS:     2012-09-23T00:00:02.57Z
    T_REC:     2012-09-23T00:00:03Z
    WAVEUNIT:  angstrom
    WAVE_STR:  94_THIN
    X0_MP:     2059.610107
    Y0_MP:     2039.26001
xarray.Dataset
    • DATE-OBS: 1800
    • y: 4096
    • x: 4096
    • DATE-OBS
      (DATE-OBS)
      datetime64[us]
      2012-09-23T00:00:01 ... 2012-09-...
      _FillValue :
      1970-01-01T00:00:00.000000
      array(['2012-09-23T00:00:01.000000', '2012-09-23T00:00:13.000000',
             '2012-09-23T00:00:25.000000', ..., '2012-09-23T05:59:25.000000',
             '2012-09-23T05:59:37.000000', '2012-09-23T05:59:49.000000'],
            dtype='datetime64[us]')
    • x
      (x)
      int64
      0 1 2 3 4 ... 4092 4093 4094 4095
      array([   0,    1,    2, ..., 4093, 4094, 4095])
    • y
      (y)
      int64
      0 1 2 3 4 ... 4092 4093 4094 4095
      array([   0,    1,    2, ..., 4093, 4094, 4095])
    • x_wcs
      (y, x)
      float64
      dask.array<chunksize=(4096, 4096), meta=np.ndarray>
      Array Chunk
      Bytes 128.00 MiB 128.00 MiB
      Shape (4096, 4096) (4096, 4096)
      Dask graph 1 chunks in 13 graph layers
      Data type float64 numpy.ndarray
      4096 4096
    • y_wcs
      (y, x)
      float64
      dask.array<chunksize=(4096, 4096), meta=np.ndarray>
      Array Chunk
      Bytes 128.00 MiB 128.00 MiB
      Shape (4096, 4096) (4096, 4096)
      Dask graph 1 chunks in 10 graph layers
      Data type float64 numpy.ndarray
      4096 4096
    • ref_wcs
      ()
      int64
      0
      ACS_CGT :
      GT3
      ACS_ECLP :
      NO
      ACS_MODE :
      SCIENCE
      ACS_SAFE :
      NO
      ACS_SUNP :
      YES
      AECDELAY :
      1535
      AECMODE :
      ON
      AECTYPE :
      0
      AGT1SVY :
      0
      AGT1SVZ :
      -3
      AGT2SVY :
      -3
      AGT2SVZ :
      -4
      AGT3SVY :
      0
      AGT3SVZ :
      1
      AGT4SVY :
      12
      AGT4SVZ :
      -33
      AIAECENF :
      1
      AIAECTI :
      0
      AIAGP1 :
      0
      AIAGP10 :
      748
      AIAGP2 :
      0
      AIAGP3 :
      0
      AIAGP4 :
      0
      AIAGP5 :
      0
      AIAGP6 :
      0
      AIAGP7 :
      0
      AIAGP8 :
      279
      AIAGP9 :
      343
      AIAHFSN :
      54316779
      AIASEN :
      0
      AIAWVLEN :
      9
      AICFGDL1 :
      0
      AICFGDL2 :
      23
      AICFGDL3 :
      87
      AICFGDL4 :
      236
      AIFCPS :
      12
      AIFDBID :
      241
      AIFILTYP :
      0
      AIFOENFL :
      1
      AIFRMLID :
      3120
      AIFTSID :
      40960
      AIFTSWTH :
      0
      AIFWEN :
      270
      AIHIS192 :
      0
      AIHIS348 :
      8294125
      AIHIS604 :
      8388120
      AIHIS860 :
      8388608
      AIHISMXB :
      7
      AIMGFSN :
      7
      AIMGOTS :
      1727049637
      AIMGOTSS :
      12642
      AIMGSHCE :
      2900
      AIMGSHEN :
      12
      AIMGTYP :
      0
      AIMSHCBC :
      2955.768066
      AIMSHCBE :
      2969.523926
      AIMSHCTC :
      2941.815918
      AIMSHCTE :
      2927.320068
      AIMSHOBC :
      53.939999
      AIMSHOBE :
      67.403999
      AIMSHOTC :
      39.903999
      AIMSHOTE :
      24.976
      AISTATE :
      CLOSED
      AIVNMST :
      453
      ASD_REC :
      sdo.lev0_asd_0004[:#20904414]
      ASQFSN :
      54316787
      ASQHDR :
      3275542259
      ASQTNUM :
      3
      BITPIX :
      16
      BLANK :
      -32768
      BLD_VERS :
      V7R0
      CAMERA :
      4
      CAR_ROT :
      2128
      CDELT1 :
      0.600109
      CDELT2 :
      0.600109
      CRLN_OBS :
      205.427872
      CRLT_OBS :
      7.032421
      CROTA2 :
      -0.137497
      CRPIX1 :
      2060.610107
      CRPIX2 :
      2040.26001
      CRVAL1 :
      0.0
      CRVAL2 :
      0.0
      CTYPE1 :
      HPLN-TAN
      CTYPE2 :
      HPLT-TAN
      CUNIT1 :
      arcsec
      CUNIT2 :
      arcsec
      DATACENT :
      1.99
      DATAKURT :
      89.47
      DATAMAX :
      730
      DATAMEAN :
      2.64
      DATAMEDN :
      2
      DATAMIN :
      -8
      DATAP01 :
      -1.0
      DATAP10 :
      0.0
      DATAP25 :
      1.0
      DATAP75 :
      4.0
      DATAP90 :
      8.0
      DATAP95 :
      11.0
      DATAP98 :
      18.0
      DATAP99 :
      24.0
      DATARMS :
      4.76
      DATASKEW :
      5.23
      DATAVALS :
      16777216
      DATE :
      2012-12-10T21:36:55
      DN_GAIN :
      18.3
      DSUN_OBS :
      150102733771.1
      DSUN_REF :
      149597870691.0
      EFF_AREA :
      0.282
      EFF_AR_V :
      3.0
      EXPSDEV :
      0.0002
      EXPTIME :
      2.902051
      EXTEND :
      True
      FID :
      0
      FLAT_REC :
      aia.flatfield[:#115]
      FSN :
      54316787
      GAEX_OBS :
      -6779246.74
      GAEY_OBS :
      -25799868.57
      GAEZ_OBS :
      32654708.73
      HAEX_OBS :
      150101918251.12
      HAEY_OBS :
      493751279.95
      HAEZ_OBS :
      32133528.39
      HGLN_OBS :
      0.0
      HGLT_OBS :
      7.032421
      IMG_TYPE :
      LIGHT
      IMSCL_MP :
      0.600109
      INSTRUME :
      AIA_4
      INST_ROT :
      -0.13761
      INT_TIME :
      3.164062
      ISPPKTIM :
      2012-09-22T23:59:59.51Z
      ISPPKTVN :
      001.197
      ISPSNAME :
      aia.lev0_isp_0011
      KEYWDDOC :
      http://www.lmsal.com/sdodocs/aiafitskeywords.pdf
      LVL_NUM :
      1.0
      MISSVALS :
      0
      MPO_REC :
      sdo.master_pointing[:#471]
      NAXIS :
      2
      NAXIS1 :
      4096
      NAXIS2 :
      4096
      NSATPIX :
      0
      NSPIKES :
      10183
      OBS_VN :
      -667.094729
      OBS_VR :
      2523.805809
      OBS_VW :
      29196.013221
      ORB_REC :
      sdo.fds_orbit_vectors[2012.09.23_00:00:00_UTC]
      ORIGIN :
      SDO/JSOC-SDP
      OSCNMEAN :
      nan
      OSCNRMS :
      nan
      PERCENTD :
      100.0
      PIXLUNIT :
      DN
      QUALITY :
      0
      QUALLEV0 :
      0
      RECNUM :
      106886066
      ROI_LLX1 :
      -2147483648
      ROI_LLX2 :
      -2147483648
      ROI_LLY1 :
      -2147483648
      ROI_LLY2 :
      -2147483648
      ROI_NAX1 :
      -2147483648
      ROI_NAX2 :
      -2147483648
      ROI_NAY1 :
      -2147483648
      ROI_NAY2 :
      -2147483648
      ROI_NWIN :
      -2147483648
      ROI_SUM :
      -2147483648
      RSUN_OBS :
      956.417088
      RSUN_REF :
      696000000.0
      R_SUN :
      1593.739014
      SAT_ROT :
      0.000113
      SAT_Y0 :
      -1.849861
      SAT_Z0 :
      9.532348
      SIMPLE :
      True
      TELESCOP :
      SDO/AIA
      TEMPCCD :
      -70.0
      TEMPFPAD :
      21.091
      TEMPGT :
      20.325
      TEMPSMIR :
      38.88
      TOTVALS :
      16777216
      TRECEPOC :
      1977.01.01_00:00:00_TAI
      TRECROUN :
      1
      TRECSTEP :
      1.0
      T_OBS :
      2012-09-23T00:00:02.57Z
      T_REC :
      2012-09-23T00:00:03Z
      WAVEUNIT :
      angstrom
      WAVE_STR :
      94_THIN
      X0_MP :
      2059.610107
      Y0_MP :
      2039.26001
      array(0)
    • 094
      (DATE-OBS, y, x)
      int16
      dask.array<chunksize=(1, 4096, 4096), meta=np.ndarray>
      Array Chunk
      Bytes 56.25 GiB 32.00 MiB
      Shape (1800, 4096, 4096) (1, 4096, 4096)
      Dask graph 1800 chunks in 2 graph layers
      Data type int16 numpy.ndarray
      4096 4096 1800
    • 131
      (DATE-OBS, y, x)
      int16
      dask.array<chunksize=(1, 4096, 4096), meta=np.ndarray>
      Array Chunk
      Bytes 56.25 GiB 32.00 MiB
      Shape (1800, 4096, 4096) (1, 4096, 4096)
      Dask graph 1800 chunks in 2 graph layers
      Data type int16 numpy.ndarray
      4096 4096 1800
    • 171
      (DATE-OBS, y, x)
      int16
      dask.array<chunksize=(1, 4096, 4096), meta=np.ndarray>
      Array Chunk
      Bytes 56.25 GiB 32.00 MiB
      Shape (1800, 4096, 4096) (1, 4096, 4096)
      Dask graph 1800 chunks in 2 graph layers
      Data type int16 numpy.ndarray
      4096 4096 1800
    • 193
      (DATE-OBS, y, x)
      int16
      dask.array<chunksize=(1, 4096, 4096), meta=np.ndarray>
      Array Chunk
      Bytes 56.25 GiB 32.00 MiB
      Shape (1800, 4096, 4096) (1, 4096, 4096)
      Dask graph 1800 chunks in 2 graph layers
      Data type int16 numpy.ndarray
      4096 4096 1800
    • 211
      (DATE-OBS, y, x)
      int16
      dask.array<chunksize=(1, 4096, 4096), meta=np.ndarray>
      Array Chunk
      Bytes 56.25 GiB 32.00 MiB
      Shape (1800, 4096, 4096) (1, 4096, 4096)
      Dask graph 1800 chunks in 2 graph layers
      Data type int16 numpy.ndarray
      4096 4096 1800
    • 304
      (DATE-OBS, y, x)
      int16
      dask.array<chunksize=(1, 4096, 4096), meta=np.ndarray>
      Array Chunk
      Bytes 56.25 GiB 32.00 MiB
      Shape (1800, 4096, 4096) (1, 4096, 4096)
      Dask graph 1800 chunks in 2 graph layers
      Data type int16 numpy.ndarray
      4096 4096 1800
    • 334
      (DATE-OBS, y, x)
      int16
      dask.array<chunksize=(1, 4096, 4096), meta=np.ndarray>
      Array Chunk
      Bytes 56.25 GiB 32.00 MiB
      Shape (1800, 4096, 4096) (1, 4096, 4096)
      Dask graph 1800 chunks in 2 graph layers
      Data type int16 numpy.ndarray
      4096 4096 1800
    • DATE-OBS
      PandasIndex
      PandasIndex(DatetimeIndex(['2012-09-23 00:00:01', '2012-09-23 00:00:13',
                     '2012-09-23 00:00:25', '2012-09-23 00:00:37',
                     '2012-09-23 00:00:49', '2012-09-23 00:01:01',
                     '2012-09-23 00:01:13', '2012-09-23 00:01:25',
                     '2012-09-23 00:01:37', '2012-09-23 00:01:49',
                     ...
                     '2012-09-23 05:58:01', '2012-09-23 05:58:13',
                     '2012-09-23 05:58:25', '2012-09-23 05:58:37',
                     '2012-09-23 05:58:49', '2012-09-23 05:59:01',
                     '2012-09-23 05:59:13', '2012-09-23 05:59:25',
                     '2012-09-23 05:59:37', '2012-09-23 05:59:49'],
                    dtype='datetime64[ns]', name='DATE-OBS', length=1800, freq=None))
    • x
      PandasIndex
      PandasIndex(Int64Index([   0,    1,    2,    3,    4,    5,    6,    7,    8,    9,
                  ...
                  4086, 4087, 4088, 4089, 4090, 4091, 4092, 4093, 4094, 4095],
                 dtype='int64', name='x', length=4096))
    • y
      PandasIndex
      PandasIndex(Int64Index([   0,    1,    2,    3,    4,    5,    6,    7,    8,    9,
                  ...
                  4086, 4087, 4088, 4089, 4090, 4091, 4092, 4093, 4094, 4095],
                 dtype='int64', name='y', length=4096))
    • x_wcs
      y_wcs
      ref_wcs
      WCSIndex
      <__main__.WCSIndex object at 0x16fc766e0>
  • ACS_CGT :
    GT3
    ACS_ECLP :
    NO
    ACS_MODE :
    SCIENCE
    ACS_SAFE :
    NO
    ACS_SUNP :
    YES
    AECDELAY :
    1535
    AECMODE :
    ON
    AECTYPE :
    0
    AGT1SVY :
    0
    AGT1SVZ :
    -3
    AGT2SVY :
    -3
    AGT2SVZ :
    -4
    AGT3SVY :
    0
    AGT3SVZ :
    1
    AGT4SVY :
    12
    AGT4SVZ :
    -33
    AIAECENF :
    1
    AIAECTI :
    0
    AIAGP1 :
    0
    AIAGP10 :
    748
    AIAGP2 :
    0
    AIAGP3 :
    0
    AIAGP4 :
    0
    AIAGP5 :
    0
    AIAGP6 :
    0
    AIAGP7 :
    0
    AIAGP8 :
    279
    AIAGP9 :
    343
    AIAHFSN :
    54316779
    AIASEN :
    0
    AIAWVLEN :
    9
    AICFGDL1 :
    0
    AICFGDL2 :
    23
    AICFGDL3 :
    87
    AICFGDL4 :
    236
    AIFCPS :
    12
    AIFDBID :
    241
    AIFILTYP :
    0
    AIFOENFL :
    1
    AIFRMLID :
    3120
    AIFTSID :
    40960
    AIFTSWTH :
    0
    AIFWEN :
    270
    AIHIS192 :
    0
    AIHIS348 :
    8294125
    AIHIS604 :
    8388120
    AIHIS860 :
    8388608
    AIHISMXB :
    7
    AIMGFSN :
    7
    AIMGOTS :
    1727049637
    AIMGOTSS :
    12642
    AIMGSHCE :
    2900
    AIMGSHEN :
    12
    AIMGTYP :
    0
    AIMSHCBC :
    2955.768066
    AIMSHCBE :
    2969.523926
    AIMSHCTC :
    2941.815918
    AIMSHCTE :
    2927.320068
    AIMSHOBC :
    53.939999
    AIMSHOBE :
    67.403999
    AIMSHOTC :
    39.903999
    AIMSHOTE :
    24.976
    AISTATE :
    CLOSED
    AIVNMST :
    453
    ASD_REC :
    sdo.lev0_asd_0004[:#20904414]
    ASQFSN :
    54316787
    ASQHDR :
    3275542259
    ASQTNUM :
    3
    BITPIX :
    16
    BLANK :
    -32768
    BLD_VERS :
    V7R0
    CAMERA :
    4
    CAR_ROT :
    2128
    CDELT1 :
    0.600109
    CDELT2 :
    0.600109
    COMMENT :
    FITS (Flexible Image Transport System) format is defined in 'Astronomy and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H
    CRLN_OBS :
    205.427872
    CRLT_OBS :
    7.032421
    CROTA2 :
    -0.137497
    CRPIX1 :
    2060.610107
    CRPIX2 :
    2040.26001
    CRVAL1 :
    0.0
    CRVAL2 :
    0.0
    CTYPE1 :
    HPLN-TAN
    CTYPE2 :
    HPLT-TAN
    CUNIT1 :
    arcsec
    CUNIT2 :
    arcsec
    DATACENT :
    1.99
    DATAKURT :
    89.47
    DATAMAX :
    730
    DATAMEAN :
    2.64
    DATAMEDN :
    2
    DATAMIN :
    -8
    DATAP01 :
    -1.0
    DATAP10 :
    0.0
    DATAP25 :
    1.0
    DATAP75 :
    4.0
    DATAP90 :
    8.0
    DATAP95 :
    11.0
    DATAP98 :
    18.0
    DATAP99 :
    24.0
    DATARMS :
    4.76
    DATASKEW :
    5.23
    DATAVALS :
    16777216
    DATE :
    2012-12-10T21:36:55
    DN_GAIN :
    18.3
    DSUN_OBS :
    150102733771.1
    DSUN_REF :
    149597870691.0
    EFF_AREA :
    0.282
    EFF_AR_V :
    3.0
    EXPSDEV :
    0.0002
    EXPTIME :
    2.902051
    EXTEND :
    True
    FID :
    0
    FLAT_REC :
    aia.flatfield[:#115]
    FSN :
    54316787
    GAEX_OBS :
    -6779246.74
    GAEY_OBS :
    -25799868.57
    GAEZ_OBS :
    32654708.73
    HAEX_OBS :
    150101918251.12
    HAEY_OBS :
    493751279.95
    HAEZ_OBS :
    32133528.39
    HGLN_OBS :
    0.0
    HGLT_OBS :
    7.032421
    IMG_TYPE :
    LIGHT
    IMSCL_MP :
    0.600109
    INSTRUME :
    AIA_4
    INST_ROT :
    -0.13761
    INT_TIME :
    3.164062
    ISPPKTIM :
    2012-09-22T23:59:59.51Z
    ISPPKTVN :
    001.197
    ISPSNAME :
    aia.lev0_isp_0011
    KEYWDDOC :
    http://www.lmsal.com/sdodocs/aiafitskeywords.pdf
    LVL_NUM :
    1.0
    MISSVALS :
    0
    MPO_REC :
    sdo.master_pointing[:#471]
    NAXIS :
    2
    NAXIS1 :
    4096
    NAXIS2 :
    4096
    NSATPIX :
    0
    NSPIKES :
    10183
    OBS_VN :
    -667.094729
    OBS_VR :
    2523.805809
    OBS_VW :
    29196.013221
    ORB_REC :
    sdo.fds_orbit_vectors[2012.09.23_00:00:00_UTC]
    ORIGIN :
    SDO/JSOC-SDP
    OSCNMEAN :
    nan
    OSCNRMS :
    nan
    PERCENTD :
    100.0
    PIXLUNIT :
    DN
    QUALITY :
    0
    QUALLEV0 :
    0
    RECNUM :
    106886066
    ROI_LLX1 :
    -2147483648
    ROI_LLX2 :
    -2147483648
    ROI_LLY1 :
    -2147483648
    ROI_LLY2 :
    -2147483648
    ROI_NAX1 :
    -2147483648
    ROI_NAX2 :
    -2147483648
    ROI_NAY1 :
    -2147483648
    ROI_NAY2 :
    -2147483648
    ROI_NWIN :
    -2147483648
    ROI_SUM :
    -2147483648
    RSUN_OBS :
    956.417088
    RSUN_REF :
    696000000.0
    R_SUN :
    1593.739014
    SAT_ROT :
    0.000113
    SAT_Y0 :
    -1.849861
    SAT_Z0 :
    9.532348
    SIMPLE :
    True
    TELESCOP :
    SDO/AIA
    TEMPCCD :
    -70.0
    TEMPFPAD :
    21.091
    TEMPGT :
    20.325
    TEMPSMIR :
    38.88
    TOTVALS :
    16777216
    TRECEPOC :
    1977.01.01_00:00:00_TAI
    TRECROUN :
    1
    TRECSTEP :
    1.0
    T_OBS :
    2012-09-23T00:00:02.57Z
    T_REC :
    2012-09-23T00:00:03Z
    WAVEUNIT :
    angstrom
    WAVE_STR :
    94_THIN
    X0_MP :
    2059.610107
    Y0_MP :
    2039.26001
1
dataset.xindexes
Indexes:
    DATE-OBS  PandasIndex
    x         PandasIndex
    y         PandasIndex
    x_wcs     WCSIndex
    y_wcs     WCSIndex
    ref_wcs   WCSIndex
1
dataset.xindexes["ref_wcs"].wcs
WCS Keywords

Number of WCS axes: 2
CTYPE : 'HPLN-TAN'  'HPLT-TAN'  
CRVAL : 0.0  0.0  
CRPIX : 2060.610107  2040.26001  
NAXIS : 4096  4096

Select single image.

1
da = dataset["094"][0]
1
#da = da.persist()  # Force download of single image array to see how long it takes.

Selection using pixel coordinates.

1
2
3
da_pixel_selected = da.sel(x=slice(0, 100), y=slice(0, 100))

da_pixel_selected
<xarray.DataArray '094' (y: 101, x: 101)>
dask.array<getitem, shape=(101, 101), dtype=int16, chunksize=(101, 101), chunktype=numpy.ndarray>
Coordinates:
    DATE-OBS  datetime64[ns] 2012-09-23T00:00:01
  * x         (x) int64 0 1 2 3 4 5 6 7 8 9 ... 91 92 93 94 95 96 97 98 99 100
  * y         (y) int64 0 1 2 3 4 5 6 7 8 9 ... 91 92 93 94 95 96 97 98 99 100
  * x_wcs     (y, x) float64 dask.array<chunksize=(101, 101), meta=np.ndarray>
  * y_wcs     (y, x) float64 dask.array<chunksize=(101, 101), meta=np.ndarray>
  * ref_wcs   int64 0
Indexes:
    x_wcs     WCSIndex
    y_wcs     WCSIndex
    ref_wcs   WCSIndex
xarray.DataArray
'094'
  • y: 101
  • x: 101
  • dask.array<chunksize=(101, 101), meta=np.ndarray>
    Array Chunk
    Bytes 19.92 kiB 19.92 kiB
    Shape (101, 101) (101, 101)
    Dask graph 1 chunks in 4 graph layers
    Data type int16 numpy.ndarray
    101 101
    • DATE-OBS
      ()
      datetime64[ns]
      2012-09-23T00:00:01
      _FillValue :
      1970-01-01T00:00:00.000000
      array('2012-09-23T00:00:01.000000000', dtype='datetime64[ns]')
    • x
      (x)
      int64
      0 1 2 3 4 5 ... 95 96 97 98 99 100
      array([  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,
              14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,
              28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,
              42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,
              56,  57,  58,  59,  60,  61,  62,  63,  64,  65,  66,  67,  68,  69,
              70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,
              84,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,
              98,  99, 100])
    • y
      (y)
      int64
      0 1 2 3 4 5 ... 95 96 97 98 99 100
      array([  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,
              14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,
              28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,
              42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,
              56,  57,  58,  59,  60,  61,  62,  63,  64,  65,  66,  67,  68,  69,
              70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,
              84,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,
              98,  99, 100])
    • x_wcs
      (y, x)
      float64
      dask.array<chunksize=(101, 101), meta=np.ndarray>
      Array Chunk
      Bytes 79.70 kiB 79.70 kiB
      Shape (101, 101) (101, 101)
      Dask graph 1 chunks in 14 graph layers
      Data type float64 numpy.ndarray
      101 101
    • y_wcs
      (y, x)
      float64
      dask.array<chunksize=(101, 101), meta=np.ndarray>
      Array Chunk
      Bytes 79.70 kiB 79.70 kiB
      Shape (101, 101) (101, 101)
      Dask graph 1 chunks in 11 graph layers
      Data type float64 numpy.ndarray
      101 101
    • ref_wcs
      ()
      int64
      0
      ACS_CGT :
      GT3
      ACS_ECLP :
      NO
      ACS_MODE :
      SCIENCE
      ACS_SAFE :
      NO
      ACS_SUNP :
      YES
      AECDELAY :
      1535
      AECMODE :
      ON
      AECTYPE :
      0
      AGT1SVY :
      0
      AGT1SVZ :
      -3
      AGT2SVY :
      -3
      AGT2SVZ :
      -4
      AGT3SVY :
      0
      AGT3SVZ :
      1
      AGT4SVY :
      12
      AGT4SVZ :
      -33
      AIAECENF :
      1
      AIAECTI :
      0
      AIAGP1 :
      0
      AIAGP10 :
      748
      AIAGP2 :
      0
      AIAGP3 :
      0
      AIAGP4 :
      0
      AIAGP5 :
      0
      AIAGP6 :
      0
      AIAGP7 :
      0
      AIAGP8 :
      279
      AIAGP9 :
      343
      AIAHFSN :
      54316779
      AIASEN :
      0
      AIAWVLEN :
      9
      AICFGDL1 :
      0
      AICFGDL2 :
      23
      AICFGDL3 :
      87
      AICFGDL4 :
      236
      AIFCPS :
      12
      AIFDBID :
      241
      AIFILTYP :
      0
      AIFOENFL :
      1
      AIFRMLID :
      3120
      AIFTSID :
      40960
      AIFTSWTH :
      0
      AIFWEN :
      270
      AIHIS192 :
      0
      AIHIS348 :
      8294125
      AIHIS604 :
      8388120
      AIHIS860 :
      8388608
      AIHISMXB :
      7
      AIMGFSN :
      7
      AIMGOTS :
      1727049637
      AIMGOTSS :
      12642
      AIMGSHCE :
      2900
      AIMGSHEN :
      12
      AIMGTYP :
      0
      AIMSHCBC :
      2955.768066
      AIMSHCBE :
      2969.523926
      AIMSHCTC :
      2941.815918
      AIMSHCTE :
      2927.320068
      AIMSHOBC :
      53.939999
      AIMSHOBE :
      67.403999
      AIMSHOTC :
      39.903999
      AIMSHOTE :
      24.976
      AISTATE :
      CLOSED
      AIVNMST :
      453
      ASD_REC :
      sdo.lev0_asd_0004[:#20904414]
      ASQFSN :
      54316787
      ASQHDR :
      3275542259
      ASQTNUM :
      3
      BITPIX :
      16
      BLANK :
      -32768
      BLD_VERS :
      V7R0
      CAMERA :
      4
      CAR_ROT :
      2128
      CDELT1 :
      0.600109
      CDELT2 :
      0.600109
      CRLN_OBS :
      205.427872
      CRLT_OBS :
      7.032421
      CROTA2 :
      -0.137497
      CRPIX1 :
      2060.610107
      CRPIX2 :
      2040.26001
      CRVAL1 :
      0.0
      CRVAL2 :
      0.0
      CTYPE1 :
      HPLN-TAN
      CTYPE2 :
      HPLT-TAN
      CUNIT1 :
      arcsec
      CUNIT2 :
      arcsec
      DATACENT :
      1.99
      DATAKURT :
      89.47
      DATAMAX :
      730
      DATAMEAN :
      2.64
      DATAMEDN :
      2
      DATAMIN :
      -8
      DATAP01 :
      -1.0
      DATAP10 :
      0.0
      DATAP25 :
      1.0
      DATAP75 :
      4.0
      DATAP90 :
      8.0
      DATAP95 :
      11.0
      DATAP98 :
      18.0
      DATAP99 :
      24.0
      DATARMS :
      4.76
      DATASKEW :
      5.23
      DATAVALS :
      16777216
      DATE :
      2012-12-10T21:36:55
      DN_GAIN :
      18.3
      DSUN_OBS :
      150102733771.1
      DSUN_REF :
      149597870691.0
      EFF_AREA :
      0.282
      EFF_AR_V :
      3.0
      EXPSDEV :
      0.0002
      EXPTIME :
      2.902051
      EXTEND :
      True
      FID :
      0
      FLAT_REC :
      aia.flatfield[:#115]
      FSN :
      54316787
      GAEX_OBS :
      -6779246.74
      GAEY_OBS :
      -25799868.57
      GAEZ_OBS :
      32654708.73
      HAEX_OBS :
      150101918251.12
      HAEY_OBS :
      493751279.95
      HAEZ_OBS :
      32133528.39
      HGLN_OBS :
      0.0
      HGLT_OBS :
      7.032421
      IMG_TYPE :
      LIGHT
      IMSCL_MP :
      0.600109
      INSTRUME :
      AIA_4
      INST_ROT :
      -0.13761
      INT_TIME :
      3.164062
      ISPPKTIM :
      2012-09-22T23:59:59.51Z
      ISPPKTVN :
      001.197
      ISPSNAME :
      aia.lev0_isp_0011
      KEYWDDOC :
      http://www.lmsal.com/sdodocs/aiafitskeywords.pdf
      LVL_NUM :
      1.0
      MISSVALS :
      0
      MPO_REC :
      sdo.master_pointing[:#471]
      NAXIS :
      2
      NAXIS1 :
      4096
      NAXIS2 :
      4096
      NSATPIX :
      0
      NSPIKES :
      10183
      OBS_VN :
      -667.094729
      OBS_VR :
      2523.805809
      OBS_VW :
      29196.013221
      ORB_REC :
      sdo.fds_orbit_vectors[2012.09.23_00:00:00_UTC]
      ORIGIN :
      SDO/JSOC-SDP
      OSCNMEAN :
      nan
      OSCNRMS :
      nan
      PERCENTD :
      100.0
      PIXLUNIT :
      DN
      QUALITY :
      0
      QUALLEV0 :
      0
      RECNUM :
      106886066
      ROI_LLX1 :
      -2147483648
      ROI_LLX2 :
      -2147483648
      ROI_LLY1 :
      -2147483648
      ROI_LLY2 :
      -2147483648
      ROI_NAX1 :
      -2147483648
      ROI_NAX2 :
      -2147483648
      ROI_NAY1 :
      -2147483648
      ROI_NAY2 :
      -2147483648
      ROI_NWIN :
      -2147483648
      ROI_SUM :
      -2147483648
      RSUN_OBS :
      956.417088
      RSUN_REF :
      696000000.0
      R_SUN :
      1593.739014
      SAT_ROT :
      0.000113
      SAT_Y0 :
      -1.849861
      SAT_Z0 :
      9.532348
      SIMPLE :
      True
      TELESCOP :
      SDO/AIA
      TEMPCCD :
      -70.0
      TEMPFPAD :
      21.091
      TEMPGT :
      20.325
      TEMPSMIR :
      38.88
      TOTVALS :
      16777216
      TRECEPOC :
      1977.01.01_00:00:00_TAI
      TRECROUN :
      1
      TRECSTEP :
      1.0
      T_OBS :
      2012-09-23T00:00:02.57Z
      T_REC :
      2012-09-23T00:00:03Z
      WAVEUNIT :
      angstrom
      WAVE_STR :
      94_THIN
      X0_MP :
      2059.610107
      Y0_MP :
      2039.26001
      array(0)
    • x
      PandasIndex
      PandasIndex(Int64Index([  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,
                  ...
                   91,  92,  93,  94,  95,  96,  97,  98,  99, 100],
                 dtype='int64', name='x', length=101))
    • y
      PandasIndex
      PandasIndex(Int64Index([  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,
                  ...
                   91,  92,  93,  94,  95,  96,  97,  98,  99, 100],
                 dtype='int64', name='y', length=101))
    • x_wcs
      y_wcs
      ref_wcs
      WCSIndex
      <__main__.WCSIndex object at 0x16e64e110>

Selection using world coordinates (this triggers the computation of the world coordinates x_wcs and y_wcs values, not sure Xarray supports lazy computation for this case yet).

1
2
3
4
5
6
7
xw = xr.Variable("points", [-0.1, 0.1])
yw = xr.Variable("points", [0.1, 0.2])

da_world_selected = da.sel(x_wcs=xw, y_wcs=yw, method="nearest")

# Load world coordinates and compare their values with the selection
da_world_selected.load()
<xarray.DataArray '094' (points: 2)>
array([ 0, -1], dtype=int16)
Coordinates:
    DATE-OBS  datetime64[ns] 2012-09-23T00:00:01
    x         (points) int64 1458 2657
    y         (points) int64 2638 3240
  * x_wcs     (points) float64 -0.1 0.1001
  * y_wcs     (points) float64 0.1 0.1999
  * ref_wcs   int64 0
Dimensions without coordinates: points
Indexes:
    x_wcs     WCSIndex
    y_wcs     WCSIndex
    ref_wcs   WCSIndex
xarray.DataArray
'094'
  • points: 2
  • 0 -1
    array([ 0, -1], dtype=int16)
    • DATE-OBS
      ()
      datetime64[ns]
      2012-09-23T00:00:01
      _FillValue :
      1970-01-01T00:00:00.000000
      array('2012-09-23T00:00:01.000000000', dtype='datetime64[ns]')
    • x
      (points)
      int64
      1458 2657
      array([1458, 2657])
    • y
      (points)
      int64
      2638 3240
      array([2638, 3240])
    • x_wcs
      (points)
      float64
      -0.1 0.1001
      array([-0.10004666,  0.10006302])
    • y_wcs
      (points)
      float64
      0.1 0.1999
      array([0.10004825, 0.19991902])
    • ref_wcs
      ()
      int64
      0
      ACS_CGT :
      GT3
      ACS_ECLP :
      NO
      ACS_MODE :
      SCIENCE
      ACS_SAFE :
      NO
      ACS_SUNP :
      YES
      AECDELAY :
      1535
      AECMODE :
      ON
      AECTYPE :
      0
      AGT1SVY :
      0
      AGT1SVZ :
      -3
      AGT2SVY :
      -3
      AGT2SVZ :
      -4
      AGT3SVY :
      0
      AGT3SVZ :
      1
      AGT4SVY :
      12
      AGT4SVZ :
      -33
      AIAECENF :
      1
      AIAECTI :
      0
      AIAGP1 :
      0
      AIAGP10 :
      748
      AIAGP2 :
      0
      AIAGP3 :
      0
      AIAGP4 :
      0
      AIAGP5 :
      0
      AIAGP6 :
      0
      AIAGP7 :
      0
      AIAGP8 :
      279
      AIAGP9 :
      343
      AIAHFSN :
      54316779
      AIASEN :
      0
      AIAWVLEN :
      9
      AICFGDL1 :
      0
      AICFGDL2 :
      23
      AICFGDL3 :
      87
      AICFGDL4 :
      236
      AIFCPS :
      12
      AIFDBID :
      241
      AIFILTYP :
      0
      AIFOENFL :
      1
      AIFRMLID :
      3120
      AIFTSID :
      40960
      AIFTSWTH :
      0
      AIFWEN :
      270
      AIHIS192 :
      0
      AIHIS348 :
      8294125
      AIHIS604 :
      8388120
      AIHIS860 :
      8388608
      AIHISMXB :
      7
      AIMGFSN :
      7
      AIMGOTS :
      1727049637
      AIMGOTSS :
      12642
      AIMGSHCE :
      2900
      AIMGSHEN :
      12
      AIMGTYP :
      0
      AIMSHCBC :
      2955.768066
      AIMSHCBE :
      2969.523926
      AIMSHCTC :
      2941.815918
      AIMSHCTE :
      2927.320068
      AIMSHOBC :
      53.939999
      AIMSHOBE :
      67.403999
      AIMSHOTC :
      39.903999
      AIMSHOTE :
      24.976
      AISTATE :
      CLOSED
      AIVNMST :
      453
      ASD_REC :
      sdo.lev0_asd_0004[:#20904414]
      ASQFSN :
      54316787
      ASQHDR :
      3275542259
      ASQTNUM :
      3
      BITPIX :
      16
      BLANK :
      -32768
      BLD_VERS :
      V7R0
      CAMERA :
      4
      CAR_ROT :
      2128
      CDELT1 :
      0.600109
      CDELT2 :
      0.600109
      CRLN_OBS :
      205.427872
      CRLT_OBS :
      7.032421
      CROTA2 :
      -0.137497
      CRPIX1 :
      2060.610107
      CRPIX2 :
      2040.26001
      CRVAL1 :
      0.0
      CRVAL2 :
      0.0
      CTYPE1 :
      HPLN-TAN
      CTYPE2 :
      HPLT-TAN
      CUNIT1 :
      arcsec
      CUNIT2 :
      arcsec
      DATACENT :
      1.99
      DATAKURT :
      89.47
      DATAMAX :
      730
      DATAMEAN :
      2.64
      DATAMEDN :
      2
      DATAMIN :
      -8
      DATAP01 :
      -1.0
      DATAP10 :
      0.0
      DATAP25 :
      1.0
      DATAP75 :
      4.0
      DATAP90 :
      8.0
      DATAP95 :
      11.0
      DATAP98 :
      18.0
      DATAP99 :
      24.0
      DATARMS :
      4.76
      DATASKEW :
      5.23
      DATAVALS :
      16777216
      DATE :
      2012-12-10T21:36:55
      DN_GAIN :
      18.3
      DSUN_OBS :
      150102733771.1
      DSUN_REF :
      149597870691.0
      EFF_AREA :
      0.282
      EFF_AR_V :
      3.0
      EXPSDEV :
      0.0002
      EXPTIME :
      2.902051
      EXTEND :
      True
      FID :
      0
      FLAT_REC :
      aia.flatfield[:#115]
      FSN :
      54316787
      GAEX_OBS :
      -6779246.74
      GAEY_OBS :
      -25799868.57
      GAEZ_OBS :
      32654708.73
      HAEX_OBS :
      150101918251.12
      HAEY_OBS :
      493751279.95
      HAEZ_OBS :
      32133528.39
      HGLN_OBS :
      0.0
      HGLT_OBS :
      7.032421
      IMG_TYPE :
      LIGHT
      IMSCL_MP :
      0.600109
      INSTRUME :
      AIA_4
      INST_ROT :
      -0.13761
      INT_TIME :
      3.164062
      ISPPKTIM :
      2012-09-22T23:59:59.51Z
      ISPPKTVN :
      001.197
      ISPSNAME :
      aia.lev0_isp_0011
      KEYWDDOC :
      http://www.lmsal.com/sdodocs/aiafitskeywords.pdf
      LVL_NUM :
      1.0
      MISSVALS :
      0
      MPO_REC :
      sdo.master_pointing[:#471]
      NAXIS :
      2
      NAXIS1 :
      4096
      NAXIS2 :
      4096
      NSATPIX :
      0
      NSPIKES :
      10183
      OBS_VN :
      -667.094729
      OBS_VR :
      2523.805809
      OBS_VW :
      29196.013221
      ORB_REC :
      sdo.fds_orbit_vectors[2012.09.23_00:00:00_UTC]
      ORIGIN :
      SDO/JSOC-SDP
      OSCNMEAN :
      nan
      OSCNRMS :
      nan
      PERCENTD :
      100.0
      PIXLUNIT :
      DN
      QUALITY :
      0
      QUALLEV0 :
      0
      RECNUM :
      106886066
      ROI_LLX1 :
      -2147483648
      ROI_LLX2 :
      -2147483648
      ROI_LLY1 :
      -2147483648
      ROI_LLY2 :
      -2147483648
      ROI_NAX1 :
      -2147483648
      ROI_NAX2 :
      -2147483648
      ROI_NAY1 :
      -2147483648
      ROI_NAY2 :
      -2147483648
      ROI_NWIN :
      -2147483648
      ROI_SUM :
      -2147483648
      RSUN_OBS :
      956.417088
      RSUN_REF :
      696000000.0
      R_SUN :
      1593.739014
      SAT_ROT :
      0.000113
      SAT_Y0 :
      -1.849861
      SAT_Z0 :
      9.532348
      SIMPLE :
      True
      TELESCOP :
      SDO/AIA
      TEMPCCD :
      -70.0
      TEMPFPAD :
      21.091
      TEMPGT :
      20.325
      TEMPSMIR :
      38.88
      TOTVALS :
      16777216
      TRECEPOC :
      1977.01.01_00:00:00_TAI
      TRECROUN :
      1
      TRECSTEP :
      1.0
      T_OBS :
      2012-09-23T00:00:02.57Z
      T_REC :
      2012-09-23T00:00:03Z
      WAVEUNIT :
      angstrom
      WAVE_STR :
      94_THIN
      X0_MP :
      2059.610107
      Y0_MP :
      2039.26001
      array(0)
    • x_wcs
      y_wcs
      ref_wcs
      WCSIndex
      <__main__.WCSIndex object at 0x16fd18d60>

Plot image.

1
2
3
4
5
6
da.hvplot.quadmesh(
    x='x_wcs', y='y_wcs', rasterize=True,
    aspect=1, frame_height=500, cmap=cc.fire,
    cnorm="linear", clim=(0, 40),  # Somewhat arbitrary color limits.
    #cnorm="eq_hist",
)
1