npsphinx prolog… I dont know what to write here….

Example to display a IW L1B x-spectra

read L1B data

[1]:
import glob
import os
import datatree
from slcl1butils.utils import get_test_file
#l1bncfile_pattern = os.path.abspath('../../assests/*iw*nc')
one_safe_l1b = get_test_file('S1B_IW_XSP__1SDV_20211026T045709_20211026T045736_029302_037F35_1CD7.SAFE')
l1bncfile_pattern = os.path.join(one_safe_l1b,'*iw*vv*nc')
print(l1bncfile_pattern)
lst = glob.glob(l1bncfile_pattern)
l1bncfile = lst[0]
l1bncfile
config path: /home/docs/checkouts/readthedocs.org/user_builds/slcl1butils/checkouts/latest/slcl1butils/config.yaml
/home/docs/checkouts/readthedocs.org/user_builds/slcl1butils/checkouts/latest/slcl1butils/utils.py:81: UserWarning: Downloading https://cerweb.ifremer.fr/datarmor/sarwave/documentation/processor/sar/l1butils/example_products/iw/slc/l1b//S1B_IW_XSP__1SDV_20211026T045709_20211026T045736_029302_037F35_1CD7.SAFE.zip
  warnings.warn("Downloading %s" % file_url)
/home/docs/checkouts/readthedocs.org/user_builds/slcl1butils/checkouts/latest/slcl1butils/utils.py:83: UserWarning: Unzipping /home/docs/checkouts/readthedocs.org/user_builds/slcl1butils/checkouts/latest/assests/S1B_IW_XSP__1SDV_20211026T045709_20211026T045736_029302_037F35_1CD7.SAFE
  warnings.warn("Unzipping %s" % final)
/home/docs/checkouts/readthedocs.org/user_builds/slcl1butils/checkouts/latest/assests/S1B_IW_XSP__1SDV_20211026T045709_20211026T045736_029302_037F35_1CD7.SAFE/*iw*vv*nc
[1]:
'/home/docs/checkouts/readthedocs.org/user_builds/slcl1butils/checkouts/latest/assests/S1B_IW_XSP__1SDV_20211026T045709_20211026T045736_029302_037F35_1CD7.SAFE/s1b-iw2-slc-vv-20211026t045711-20211026t045736-029302-037f35-005_L1B_xspec_IFR_1.4g.nc'
[2]:
dt = datatree.open_datatree(l1bncfile)
dt
[2]:
<xarray.DatasetView>
Dimensions:  ()
Data variables:
    *empty*
Attributes:
    version_xsar:     0.9.6.dev0+g9fd3478.d20230116
    version_xsarslc:  2023.3.30.2
    processor:        /home/datawork-cersat-public/cache/project/mpc-sentinel...
    generation_date:  2023-Apr-05

pick up intra or inter burst group

[3]:
#cat_xspec = 'inter'
cat_xspec = 'intra'
ds = dt[cat_xspec+'burst'].to_dataset()
ds
[3]:
<xarray.Dataset>
Dimensions:                 (burst: 9, tile_sample: 5, tile_line: 1,
                             freq_sample: 457, freq_line: 51, 0tau: 3, 1tau: 2,
                             2tau: 1, c_sample: 2, c_line: 2)
Coordinates:
    pol                     object ...
  * burst                   (burst) int16 0 1 2 3 4 5 6 7 8
    k_rg                    (burst, tile_sample, freq_sample) float32 ...
    k_az                    (freq_line) float32 ...
    line                    (burst, tile_line) int16 ...
    sample                  (burst, tile_sample) int16 ...
    longitude               (burst, tile_sample, tile_line) float32 ...
    latitude                (burst, tile_sample, tile_line) float32 ...
Dimensions without coordinates: tile_sample, tile_line, freq_sample, freq_line,
                                0tau, 1tau, 2tau, c_sample, c_line
Data variables: (12/23)
    incidence               (burst, tile_sample, tile_line) float32 ...
    normalized_variance     (burst, tile_sample, tile_line) float32 ...
    sigma0                  (burst, tile_sample, tile_line) float32 ...
    ground_heading          (burst, tile_sample, tile_line) float32 ...
    doppler_centroid        (burst, tile_sample, tile_line) float32 ...
    var_xspectra_0tau       (burst, tile_sample, tile_line, freq_sample, freq_line, 0tau) float32 ...
    ...                      ...
    xspectra_0tau_Re        (burst, tile_sample, tile_line, freq_sample, freq_line, 0tau) float32 ...
    xspectra_0tau_Im        (burst, tile_sample, tile_line, freq_sample, freq_line, 0tau) float32 ...
    xspectra_1tau_Re        (burst, tile_sample, tile_line, freq_sample, freq_line, 1tau) float32 ...
    xspectra_1tau_Im        (burst, tile_sample, tile_line, freq_sample, freq_line, 1tau) float32 ...
    xspectra_2tau_Re        (burst, tile_sample, tile_line, freq_sample, freq_line, 2tau) float32 ...
    xspectra_2tau_Im        (burst, tile_sample, tile_line, freq_sample, freq_line, 2tau) float32 ...
Attributes: (12/27)
    name:                    SENTINEL1_DS:/home/datawork-cersat-public/projec...
    short_name:              SENTINEL1_DS:S1B_IW_SLC__1SDV_20211026T045709_20...
    product:                 SLC
    safe:                    S1B_IW_SLC__1SDV_20211026T045709_20211026T045736...
    swath:                   IW
    multidataset:            False
    ...                      ...
    tile_overlap_sample:     0
    tile_overlap_line:       0
    periodo_width_sample:    3540
    periodo_width_line:      3540
    periodo_overlap_sample:  1770
    periodo_overlap_line:    1770

recombine real part and imaginary part (as recommanded by Fred)

[4]:
for tautau in range(3):
    ds['xspectra_%stau'%tautau] = ds['xspectra_%stau_Re'%tautau] + 1j*ds['xspectra_%stau_Im'%tautau]
    ds = ds.drop(['xspectra_%stau_Re'%tautau,'xspectra_%stau_Im'%tautau])
ds
[4]:
<xarray.Dataset>
Dimensions:                 (burst: 9, tile_sample: 5, tile_line: 1,
                             freq_sample: 457, freq_line: 51, 0tau: 3, 1tau: 2,
                             2tau: 1, c_sample: 2, c_line: 2)
Coordinates:
    pol                     object ...
  * burst                   (burst) int16 0 1 2 3 4 5 6 7 8
    k_rg                    (burst, tile_sample, freq_sample) float32 ...
    k_az                    (freq_line) float32 ...
    line                    (burst, tile_line) int16 ...
    sample                  (burst, tile_sample) int16 ...
    longitude               (burst, tile_sample, tile_line) float32 ...
    latitude                (burst, tile_sample, tile_line) float32 ...
Dimensions without coordinates: tile_sample, tile_line, freq_sample, freq_line,
                                0tau, 1tau, 2tau, c_sample, c_line
Data variables: (12/20)
    incidence               (burst, tile_sample, tile_line) float32 ...
    normalized_variance     (burst, tile_sample, tile_line) float32 ...
    sigma0                  (burst, tile_sample, tile_line) float32 ...
    ground_heading          (burst, tile_sample, tile_line) float32 ...
    doppler_centroid        (burst, tile_sample, tile_line) float32 ...
    var_xspectra_0tau       (burst, tile_sample, tile_line, freq_sample, freq_line, 0tau) float32 ...
    ...                      ...
    land_flag               (burst, tile_sample, tile_line) bool ...
    burst_corner_longitude  (burst, c_sample, c_line) float32 ...
    burst_corner_latitude   (burst, c_sample, c_line) float32 ...
    xspectra_0tau           (burst, tile_sample, tile_line, freq_sample, freq_line, 0tau) complex64 ...
    xspectra_1tau           (burst, tile_sample, tile_line, freq_sample, freq_line, 1tau) complex64 ...
    xspectra_2tau           (burst, tile_sample, tile_line, freq_sample, freq_line, 2tau) complex64 ...
Attributes: (12/27)
    name:                    SENTINEL1_DS:/home/datawork-cersat-public/projec...
    short_name:              SENTINEL1_DS:S1B_IW_SLC__1SDV_20211026T045709_20...
    product:                 SLC
    safe:                    S1B_IW_SLC__1SDV_20211026T045709_20211026T045736...
    swath:                   IW
    multidataset:            False
    ...                      ...
    tile_overlap_sample:     0
    tile_overlap_line:       0
    periodo_width_sample:    3540
    periodo_width_line:      3540
    periodo_overlap_sample:  1770
    periodo_overlap_line:    1770

get corners from the tiles in each bursts of the sub-swath

[5]:
import numpy as np
from matplotlib import pyplot as plt
from shapely.geometry import Polygon
all_poly = {}
all_poly_coords = {}
for bursti in range(ds.burst.size):
    for i_tile_sample in range(ds.tile_sample.size):
        for i_tile_line in range(ds.tile_line.size):
            #print('bursti',bursti,i_tile_sample,i_tile_line)
            lonco  = ds['corner_longitude'].isel({'burst':bursti,'tile_sample':i_tile_sample,'tile_line':i_tile_line}).values.ravel(order='C')
            latco  = ds['corner_latitude'].isel({'burst':bursti,'tile_sample':i_tile_sample,'tile_line':i_tile_line}).values.ravel(order='C')
            coords = np.stack([lonco,latco]).T
            #print('coords',coords)
            coords = coords[[0,1,3,2,0]]
            #print('coords2',coords)
            pp = Polygon(coords)
            #all_poly.append(pp)
            all_poly['burst%s_sample%s_line%s'%(bursti,i_tile_sample,i_tile_line)] = pp
            all_poly_coords['burst%s_sample%s_line%s'%(bursti,i_tile_sample,i_tile_line)] = coords
print('done',len(all_poly.keys()))
done 45
[6]:
import geoviews as gv
import holoviews as hv
gv.extension('bokeh')
from shapely.geometry import Polygon
import shapely.wkt

P = shapely.wkt.loads(ds.footprint)
#poly = Polygon(np.vstack([lons_tiles,lats_tiles]).T)
print(P)
foot = gv.Path(P).opts(color='magenta')
tmp =[]
for uu in  all_poly:
    tmp.append(gv.Path(all_poly[uu]))
(gv.tile_sources.Wikipedia * foot * hv.Overlay(tmp) ).opts(width=800,height=600,title='%s tiles SAR Sentinel-1 L1B IFREMER '%(cat_xspec))
POLYGON ((16.52569318605885 34.48393468420786, 15.47003602432591 34.63859437730419, 15.1537098076834 33.12316072296198, 16.19010348915945 32.96773923777913, 16.52569318605885 34.48393468420786))
/tmp/ipykernel_3173/1846620382.py:14: GeoviewsDeprecationWarning: 'Wikipedia' is deprecated and will be removed in version 1.11, use 'OSM' instead.
  (gv.tile_sources.Wikipedia * foot * hv.Overlay(tmp) ).opts(width=800,height=600,title='%s tiles SAR Sentinel-1 L1B IFREMER '%(cat_xspec))
[6]:

display pyplot figure of cross spectrum

[7]:


import slcl1butils.plotting.display_one_spectra from importlib import reload reload(slcl1butils.plotting.display_one_spectra) tile_line_i = 0 tile_sample_i = 3 fig = plt.figure() slcl1butils.plotting.display_one_spectra.plot_a_single_xspec_cart_L1B_IW(ds,bursti,tile_line_i,tile_sample_i,'test display',fig,cat_xspec=cat_xspec,part='Re')
[7]:
<xarray.Dataset>
Dimensions:                 (k_az: 50, k_rg: 912, 0tau: 3, 1tau: 2, 2tau: 1,
                             c_sample: 2, c_line: 2)
Coordinates:
  * k_az                    (k_az) float32 -0.04418 -0.04241 ... 0.04065 0.04241
  * k_rg                    (k_rg) float32 -0.8092 -0.8074 ... 0.8056 0.8074
    pol                     <U2 'VV'
    burst                   int16 8
    line                    int16 12813
    sample                  int16 16524
    longitude               float32 15.56
    latitude                float32 33.17
Dimensions without coordinates: 0tau, 1tau, 2tau, c_sample, c_line
Data variables: (12/20)
    incidence               (k_rg) float32 40.1 40.1 40.1 ... 40.1 40.1 40.1
    normalized_variance     (k_rg) float32 1.293 1.293 1.293 ... 1.293 1.293
    sigma0                  (k_rg) float32 nan nan nan nan ... nan nan nan nan
    ground_heading          (k_rg) float32 -169.9 -169.9 ... -169.9 -169.9
    doppler_centroid        (k_rg) float32 0.02564 0.02564 ... 0.02564 0.02564
    var_xspectra_0tau       (k_rg, k_az, 0tau) float32 4.879 4.479 ... 4.589
    ...                      ...
    land_flag               (k_rg) int8 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0
    burst_corner_longitude  (k_rg, c_sample, c_line) float32 16.23 ... 15.24
    burst_corner_latitude   (k_rg, c_sample, c_line) float32 33.15 ... 33.11
    xspectra_0tau           (k_rg, k_az, 0tau) complex64 (1.983694-0j) ... (2...
    xspectra_1tau           (k_rg, k_az, 1tau) complex64 (-0.014434621+0.1017...
    xspectra_2tau           (k_rg, k_az, 2tau) complex64 (0.24627322+0.020831...
Attributes: (12/27)
    name:                    SENTINEL1_DS:/home/datawork-cersat-public/projec...
    short_name:              SENTINEL1_DS:S1B_IW_SLC__1SDV_20211026T045709_20...
    product:                 SLC
    safe:                    S1B_IW_SLC__1SDV_20211026T045709_20211026T045736...
    swath:                   IW
    multidataset:            False
    ...                      ...
    tile_overlap_sample:     0
    tile_overlap_line:       0
    periodo_width_sample:    3540
    periodo_width_line:      3540
    periodo_overlap_sample:  1770
    periodo_overlap_line:    1770
<Figure size 640x480 with 0 Axes>
../_images/examples_display_a_IW_L1B_xspectra_12_2.png