
.. DO NOT EDIT.
.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
.. "examples/plot_eddy_tracking_duacs.py"
.. LINE NUMBERS ARE GIVEN BELOW.

.. only:: html

    .. note::
        :class: sphx-glr-download-link-note

        :ref:`Go to the end <sphx_glr_download_examples_plot_eddy_tracking_duacs.py>`
        to download the full example code.

.. rst-class:: sphx-glr-example-title

.. _sphx_glr_examples_plot_eddy_tracking_duacs.py:


Detect and Track eddies from satellite sea level
================================================

.. GENERATED FROM PYTHON SOURCE LINES 8-12

Initialisations
-----------------

Import needed stuff.

.. GENERATED FROM PYTHON SOURCE LINES 12-25

.. code-block:: Python

    import os
    import tempfile
    import time

    import cmocean  # noqa
    import matplotlib.pyplot as plt
    import xarray as xr

    from shoot.eddies.eddies2d import EvolEddies2D
    from shoot.eddies.track import track_eddies
    from shoot.plot import create_map, pcarr
    from shoot.samples import get_sample_file








.. GENERATED FROM PYTHON SOURCE LINES 26-27

Read data

.. GENERATED FROM PYTHON SOURCE LINES 27-31

.. code-block:: Python

    root_path = "OBS/SATELLITE/jan2024_ionian_sea_duacs.nc"
    path = get_sample_file(root_path)
    ds = xr.open_dataset(path)








.. GENERATED FROM PYTHON SOURCE LINES 32-38

Detect eddies
-------------
Parameters
~~~~~~~~~~

Window size in km to compute the LNAM and find eddy centers : Lb

.. GENERATED FROM PYTHON SOURCE LINES 38-41

.. code-block:: Python

    window_center = 50  # 50  # 100#50 C'est assez sensible à ce paramètre









.. GENERATED FROM PYTHON SOURCE LINES 42-43

Window size in km to fit SSH and make other diagnostics like contours : 10Rd suggested

.. GENERATED FROM PYTHON SOURCE LINES 43-45

.. code-block:: Python

    window_fit = 120  # 100  # 120








.. GENERATED FROM PYTHON SOURCE LINES 46-47

Minimal radius of an eddy to retain it

.. GENERATED FROM PYTHON SOURCE LINES 47-49

.. code-block:: Python

    min_radius = 10








.. GENERATED FROM PYTHON SOURCE LINES 50-51

Ellipse error

.. GENERATED FROM PYTHON SOURCE LINES 51-53

.. code-block:: Python

    ellipse_error = 0.05








.. GENERATED FROM PYTHON SOURCE LINES 54-56

Detection
~~~~~~~~~

.. GENERATED FROM PYTHON SOURCE LINES 56-71

.. code-block:: Python


    start = time.time()
    eddies = EvolEddies2D.detect_eddies(
        ds,
        window_center,
        window_fit,
        min_radius,
        ssh="adt",
        u="ugos",
        v="vgos",
        ellipse_error=ellipse_error,
        paral=True,
    )
    end = time.time()
    print(f"Temps de calcul pour {len(ds.time)} pas de temps : {end - start:.2f} s")




.. rst-class:: sphx-glr-script-out

 .. code-block:: none

    Temps de calcul pour 31 pas de temps : 153.93 s




.. GENERATED FROM PYTHON SOURCE LINES 72-74

Tracking
~~~~~~~~

.. GENERATED FROM PYTHON SOURCE LINES 74-81

.. code-block:: Python


    nbackward = 10  # number of admitted time steps without detection

    tracks = track_eddies(eddies, nbackward)  # 10*dt
    print(tracks)
    tracked_eddies = tracks.track_eddies





.. rst-class:: sphx-glr-script-out

 .. code-block:: none

    <shoot.eddies.track.Tracks object at 0x7026a0fb0250>




.. GENERATED FROM PYTHON SOURCE LINES 82-96

.. code-block:: Python


    # Save track to temporary file
    with tempfile.TemporaryDirectory() as tmpdir:
        track_file = os.path.join(tmpdir, 'track_ionian_sea_duacs_jan2024.nc')

        # Save track
        tracks.to_netcdf(track_file)

        # Reconstruct tracks from save file
        track_r = tracks.reconstruct(
            xr.open_dataset(track_file),
            nbackward,
        )








.. GENERATED FROM PYTHON SOURCE LINES 97-100

Plots
-----


.. GENERATED FROM PYTHON SOURCE LINES 100-124

.. code-block:: Python

    fig, ax = create_map(ds.longitude, ds.latitude, figsize=(8, 5))
    n = 30  # 297
    dss = ds.isel(time=n)
    dss.adt.plot(ax=ax, transform=pcarr, add_colorbar=False, cmap="cmo.dense")

    plt.quiver(
        dss.longitude.values,
        dss.latitude.values,
        dss.ugos.values,
        dss.vgos.values,
        transform=pcarr,
    )
    for eddy in eddies.eddies[n].eddies:
        eddy.plot(transform=pcarr, lw=1)
        plt.text(eddy.glon, eddy.glat, eddy.track_id, c="w", transform=pcarr)
        track = tracked_eddies[eddy.track_id]
        lon, lat = [], []
        for e in track.eddies:
            lon.append(e.glon)
            lat.append(e.glat)
        plt.plot(lon, lat, transform=pcarr, c="gray", linewidth=2)

    plt.title(ds.adt.long_name)
    plt.tight_layout()



.. image-sg:: /examples/images/sphx_glr_plot_eddy_tracking_duacs_001.png
   :alt: Absolute dynamic topography
   :srcset: /examples/images/sphx_glr_plot_eddy_tracking_duacs_001.png
   :class: sphx-glr-single-img






.. rst-class:: sphx-glr-timing

   **Total running time of the script:** (3 minutes 17.998 seconds)


.. _sphx_glr_download_examples_plot_eddy_tracking_duacs.py:

.. only:: html

  .. container:: sphx-glr-footer sphx-glr-footer-example

    .. container:: sphx-glr-download sphx-glr-download-jupyter

      :download:`Download Jupyter notebook: plot_eddy_tracking_duacs.ipynb <plot_eddy_tracking_duacs.ipynb>`

    .. container:: sphx-glr-download sphx-glr-download-python

      :download:`Download Python source code: plot_eddy_tracking_duacs.py <plot_eddy_tracking_duacs.py>`

    .. container:: sphx-glr-download sphx-glr-download-zip

      :download:`Download zipped: plot_eddy_tracking_duacs.zip <plot_eddy_tracking_duacs.zip>`


.. only:: html

 .. rst-class:: sphx-glr-signature

    `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_
