Metadata-Version: 2.4
Name: fractional-cover
Version: 1.3.14
Summary: Geoscience Australia - Fractional Cover for Digital Earth Australia
Home-page: https://github.com/GeoscienceAustralia/fc
Maintainer: Geoscience Australia
Maintainer-email: earth.observation@ga.gov.au
License: Apache-2.0
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.12
Description-Content-Type: text/x-rst
License-File: LICENSE
Requires-Dist: numpy
Requires-Dist: numexpr
Requires-Dist: datacube
Requires-Dist: click>=6.0
Requires-Dist: pandas
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: license
Dynamic: license-file
Dynamic: maintainer
Dynamic: maintainer-email
Dynamic: requires-dist
Dynamic: summary

=======================
 Fractional Cover (FC)
=======================

|Build Status| |Coverage Status|

`Fractional Cover`_ is a remote sensing algorithm which measures the
photosynthetic, non-photosynthetic and bare earth components of a Landsat image.

This repository implements Fractional Cover as used by `Digital Earth Australia`_
for the production of the `Fractional Cover Data Product <Fractional Cover>`_.
The implementation is Python, with the core algorithm in Fortran.

Data production is either by a command line application that runs on the NCI_,
or a `Virtual Product`_ class run by `Datacube Alchemist`_ on AWS.


.. contents::

.. _Fractional Cover: https://cmi.ga.gov.au/data-products/dea/119/dea-fractional-cover-landsat
.. _NCI: https://www.nci.org.au/
.. _Datacube Alchemist: https://github.com/opendatacube/datacube-alchemist/
.. _Virtual Product: https://datacube-core.readthedocs.io/en/latest/dev/api/virtual-products.html
.. _Digital Earth Australia: https://www.ga.gov.au/dea


.. |Build Status| image:: https://github.com/GeoscienceAustralia/fc/workflows/Tests/badge.svg
    :target: https://github.com/GeoscienceAustralia/fc/actions?query=workflow%3ATests

.. |Coverage Status| image:: https://codecov.io/gh/GeoscienceAustralia/fc/branch/master/graph/badge.svg?token=wpeulGrrUT
    :target: https://codecov.io/gh/GeoscienceAustralia/fc

Installation
============

The easiest way to install Fractional Cover is::

    pip install --extra-index-url=https://packages.dea.ga.gov.au/ fc

This package includes the compiled Fortran extensions to run about 15 times faster than the Python+scipy version
you get by default without a Fortran compiler.

Setup on VDI
============

The first time you try to use gadi PBS commands from VDI, you will need
to run::

    $ remote-hpc-cmd init

See http://vdi.nci.org.au/help#heading=h.u1kl1j7vdt16 for more details.

You will also need to setup datacube to work from VDI and gadi.

::

    $ ssh gadi "cat .pgpass" >> ~/.pgpass
    $ chmod 0600 ~/.pgpass

See http://geoscienceaustralia.github.io/digitalearthau/connect/nci_basics.html for
full details.

Running
-------

The Fractional Cover application works in 2 parts:

    #. Creating the task list
    #. Check for unexpected existing files - these were most likely created during an run that did not successfully
       finish.
    #. Submit the job to gadi.

To run fractional cover::

    $ module use /g/data/v10/public/modules/modulefiles/
    $ module load dea

This will list the available app configs::

    $ datacube-fc list
    ls5_fc_albers.yaml
    ls7_fc_albers.yaml
    ls8_fc_albers.yaml

To submit the job to ``gadi``, the datacube-fc app has a the ``datacube-fc submit`` command:
This command kick off two stage PBS job

    Stage 1 (Generate task file):
        The task-app machinery loads a config file, from a path specified on the
        command line, into a dict.

        If dry is enabled, a dummy DatasetType is created for tasks generation without indexing
        the product in the database.
        If dry run is disabled, generate tasks into file and queue PBS job to process them.

    Stage 2 (Run):
        During normal run, following are performed:
           1) Tasks (loadables (nbart,ps,dsm) + output targets) shall be yielded for dispatch to workers.
           2) Load data
           3) Run FC algorithm
           4) Attach metadata
           5) Write output files and
           6) Finally index the newly created FC output files

        If dry run is enabled, application only prepares a list of output files to be created and does not
        record anything in the database.

Tracking progress
-----------------

::

    $ qstat -u $USER

    $ qcat 7517348.gadi-pbs | head

    $ qcat 7517348.gadi-pbs | tail

    $ qps 7517348.gadi-pbs

File locations
--------------

The config file (eg. ls5_fc_albers.yaml) specifies the app settings, and is found in the module.

You will need to check the folder of the latest ``dea`` module::

    ls /g/data/v10/public/modules/dea/<YYYYMMDD>/lib/python3.6/site-packages/fc/config

The config file lists the output `location` and file_path_template``, as shown in this snippet::

    source_type: ls5_nbar_albers
    output_type: ls5_fc_albers

    description: Landsat 5 Fractional Cover 25 metre, 100km tile, Australian Albers Equal Area projection (EPSG:3577)
    product_type: fractional_cover
    
    location: '/g/data/fk4/datacube/002/'
    file_path_template: 'LS5_TM_FC/{tile_index[0]}_{tile_index[1]}/LS5_TM_FC_3577_{tile_index[0]}_{tile_index[1]}_{start_time}_v{version}.nc'

So here the output files are saved to ``/g/data/fk4/datacube/002/FC/LS5_TM_FC/<tile_index>/*.nc``

File naming
===========

Specify a template string used to name the output files. Uses the python ``format()`` string syntax, with the following placeholders available:


==============  ==============
  Placeholder    Description
==============  ==============
tile_index[0]    X Tile Index
tile_index[1]    Y Tile Index
region code      The region code of the input dataset
epoch_start      Start date of the epoch, format using `strftime` syntax
epoch_end        End date of the epoch, format using `strftime` syntax
version          Task timestamp
start_time       Start time in `%Y%m%d%H%M%S%f` format
end_time         End time in `%Y%m%d%H%M%S%f` format
==============  ==============

For example:

.. code-block:: yaml

       file_path_template: '{y}_{x}/LS_PQ_COUNT_3577_{y}_{x}_{epoch_start:%Y-%m-%d}_{epoch_end:%Y-%m-%d}.nc'

Will output filenames similar to:

.. code-block:: bash

    10_15/LS_PQ_COUNT_3577_10_15_2010-01-01_2011-01-01.nc


License
-------
This repository is licensed under the Apache License 2.0. See the `LICENSE file <LICENSE>`_ in this repository for details.


Contacts
--------
Geoscience Australia developers:

**Joshua Sixsmith**
joshua.sixsmith@ga.gov.au

**Jeremy Hooke**
jeremy.hooke@ga.gov.au

**Damien Ayers**
damien.ayers@ga.gov.au

**Duncan Gray**
duncan.gray@ga.gov.au

Algorithm developer:

**Peter Scarth**
peter.scarth@qld.gov.au
